diff --git a/build/cjs/vexflow-bravura.js b/build/cjs/vexflow-bravura.js new file mode 100644 index 0000000000..6afb6c7cd7 --- /dev/null +++ b/build/cjs/vexflow-bravura.js @@ -0,0 +1,7 @@ +/*! + * VexFlow 4.2.2 2023-07-03T19:56:22.952Z 7ad933bdf12b4137ce04d3f332a838887d08a595 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var a in i)t.o(i,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:i[a]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function a(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let a=t.constructor;if(i){for(;null!==t;){if(a=t.constructor,"CATEGORY"in a&&a.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in a&&a.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>at,Annotation:()=>mt,AnnotationHorizontalJustify:()=>ct,AnnotationVerticalJustify:()=>dt,Articulation:()=>yt,BEAM_BOTH:()=>Re,BEAM_LEFT:()=>Me,BEAM_RIGHT:()=>Oe,BarNote:()=>At,Barline:()=>Nt,BarlineType:()=>Ct,Beam:()=>Le,Bend:()=>Ft,BoundingBox:()=>D,BoundingBoxComputation:()=>E,Builder:()=>Ke,CanvasContext:()=>Zt,Category:()=>x,ChordSymbol:()=>Ot,ChordSymbolHorizontalJustify:()=>Bt,ChordSymbolVerticalJustify:()=>Dt,Clef:()=>_e,ClefNote:()=>We,Crescendo:()=>ze,Curve:()=>Ue,CurvePosition:()=>Ie,Dot:()=>Rt,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>L,Factory:()=>vi,Flow:()=>Ni,Font:()=>M,FontStyle:()=>k,FontWeight:()=>P,Formatter:()=>ke,Fraction:()=>C,FretHandFinger:()=>Lt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>Ci,KeySigNote:()=>ai,KeySignature:()=>xe,Modifier:()=>tt,ModifierContext:()=>be,ModifierPosition:()=>J,MultiMeasureRest:()=>si,Music:()=>et,Note:()=>vt,NoteHead:()=>Wt,NoteSubGroup:()=>Vt,Ornament:()=>$t,OutlineCode:()=>$,Parenthesis:()=>Jt,Parser:()=>He,PedalMarking:()=>li,Piece:()=>Ve,Registry:()=>R,RenderContext:()=>ft,Renderer:()=>re,RendererBackends:()=>ne,RendererLineEndType:()=>se,RepeatNote:()=>hi,Repetition:()=>ge,RuntimeError:()=>g,SVGContext:()=>ae,Stave:()=>Be,StaveConnector:()=>Ee,StaveHairpin:()=>Bi,StaveLine:()=>di,StaveModifier:()=>kt,StaveModifierPosition:()=>wt,StaveNote:()=>Ut,StaveSection:()=>pe,StaveTempo:()=>ue,StaveText:()=>fe,StaveTie:()=>Gt,Stem:()=>nt,StemmableNote:()=>zt,StringNumber:()=>he,Stroke:()=>ce,SymbolModifiers:()=>Pt,SymbolTypes:()=>Et,System:()=>mi,TabNote:()=>bi,TabSlide:()=>Di,TabStave:()=>_i,TabTie:()=>Yt,TextBracket:()=>pi,TextBracketPosition:()=>gi,TextDynamics:()=>yi,TextFormatter:()=>ht,TextJustification:()=>oe,TextNote:()=>ye,TickContext:()=>Kt,Tickable:()=>Tt,TimeSigNote:()=>fi,TimeSignature:()=>ve,TimeSignatureGlyph:()=>Te,Tremolo:()=>Ei,Tuning:()=>Pi,Tuplet:()=>Ae,TupletLocation:()=>Ne,Vex:()=>Ii,Vibrato:()=>de,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>Ht,Volta:()=>Se,VoltaType:()=>le,defined:()=>u,drawDot:()=>St,globalObject:()=>p,isAccidental:()=>n,isAnnotation:()=>s,isBarline:()=>o,isCategory:()=>a,isDot:()=>l,isGraceNote:()=>r,isGraceNoteGroup:()=>h,isHTMLCanvas:()=>qt,isHTMLDiv:()=>Qt,isNote:()=>c,isRenderContext:()=>d,isStaveNote:()=>m,isStemmableNote:()=>b,isTabNote:()=>_,log:()=>y,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>f});const n=t=>a(t,x.Accidental),s=t=>a(t,x.Annotation),o=t=>a(t,x.Barline),l=t=>a(t,x.Dot),r=t=>a(t,x.GraceNote),h=t=>a(t,x.GraceNoteGroup),c=t=>a(t,x.Note),d=t=>a(t,x.RenderContext),m=t=>a(t,x.StaveNote),b=t=>a(t,x.StemmableNote),_=t=>a(t,x.TabNote);var x;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(x||(x={}));class g extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function p(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function u(t,e="undefined",i=""){if(void 0===t)throw new g(e,i);return t}function y(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");p().console.log(t+": "+i)}function f(...t){const e=t.join(" "),i=new Error;p().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var a,n;return i%2>0&&(i=((a=10*i)%(n=5)>=n/2?parseInt(""+a/n,10)*n+n:parseInt(""+a/n,10)*n)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class C{static get CATEGORY(){return x.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new g("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/C.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?C.LCM(t[0],t[1]):C.LCM(t.shift(),C.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=C.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,a]=B(t,e),n=C.LCM(this.denominator,a),s=n/this.denominator,o=n/a,l=this.numerator*s+i*o;return this.set(l,n)}subtract(t=0,e=1){const[i,a]=B(t,e),n=C.LCM(this.denominator,a),s=n/this.denominator,o=n/a,l=this.numerator*s-i*o;return this.set(l,n)}multiply(t=1,e=1){const[i,a]=B(t,e);return this.set(this.numerator*i,this.denominator*a)}divide(t=1,e=1){const[i,a]=B(t,e);return this.set(this.numerator*a,this.denominator*i)}equals(t){const e=C.__staticFractionA.copy(t).simplify(),i=C.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=C.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=C.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new C(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return C.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=C.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),a=e[1]?parseInt(e[1],10):1;return this.set(i,a)}}function B(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}C.__staticFractionA=new C,C.__staticFractionB=new C,C.__staticFractionTmp=new C;class D{static copy(t){return new D(t.x,t.y,t.w,t.h)}constructor(t,e,i,a){this.x=t,this.y=e,this.w=i,this.h=a}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return D.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,a,n,s){this.addPoint(t,e),this.addPoint(n,s);const o=i-t;let l=o-(n-i);if(0!=l){const e=o/l;if(e>0&&e<1){const a=1-e;this.addX(a*a*t+2*a*e*i+e*e*n)}}const r=a-e;if(l=r-(s-a),0!=l){const t=r/l;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*a+t*t*s)}}}addBezierCurve(t,e,i,a,n,s,o,l){const r=[t,e],h=[i,a],c=[n,s],d=[o,l];let m;this.addPoint(r[0],r[1]),this.addPoint(d[0],d[1]);const b=(t,e)=>Math.pow(1-t,3)*r[e]+3*Math.pow(1-t,2)*t*h[e]+3*(1-t)*Math.pow(t,2)*c[e]+Math.pow(t,3)*d[e];for(m=0;m<=1;m++){const t=6*r[m]-12*h[m]+6*c[m],e=-3*r[m]+9*h[m]-9*c[m]+3*d[m],i=3*h[m]-3*r[m];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===k.ITALIC}static loadWebFont(t,e,i=!0){return N(this,void 0,void 0,(function*(){const a=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield a.load(),document.fonts.add(a),a}))}static loadWebFonts(){return N(this,void 0,void 0,(function*(){const t=M.WEB_FONT_HOST,e=M.WEB_FONT_FILES;for(const i in e){const a=e[i];M.loadWebFont(i,t+a)}}))}static load(t,e,i){let a=F[t];return a||(a=new M(t),F[t]=a),e&&a.setData(e),i&&a.setMetrics(i),a}constructor(t){this.name=t}getName(){return this.name}getData(){return u(this.data,"FontError","Missing font data")}getMetrics(){return u(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let a=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class L{static get CATEGORY(){return x.Element}static newID(){return"auto"+L.ID++}constructor(){var t;this.children=[],this.attrs={id:L.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=R.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const a=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return a&&(a.splice(a.indexOf(t)),this.attrs.class=a.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const a=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:a,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return u(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return M.toCSSString(this.textFont)}setFont(t,e,i,a){const n=this.constructor.TEXT_FONT,s="object"==typeof t,o="string"==typeof t,l=void 0===t,r=void 0===e&&void 0===i&&void 0===a;return this.textFont=s?Object.assign(Object.assign({},n),t):o&&r?M.fromCSSString(t):l&&r?Object.assign({},n):M.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=a?a:n.style),this}getFont(){return this.textFont||this.resetFont(),M.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return M.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return M.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}L.ID=1e3,L.TEXT_FONT={family:M.SANS_SERIF,size:M.SIZE,weight:P.NORMAL,style:k.NORMAL};const W=16384,z={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},I={w:"1",h:"2",q:"4",b:"256"},U={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},G={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},Y={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},H={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"accidentalBuyukMucennebSharp",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new g("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in G))throw new g("BadArgument","Invalid clef: "+t);return G[t]}static keyProperties(t,e="treble",i){let a={octave_shift:0,duration:"4"};"object"==typeof i&&(a=Object.assign(Object.assign({},a),i));const n=V.sanitizeDuration(a.duration),s=t.split("/");if(s.length<2)throw new g("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=s[0].toUpperCase(),l=Y[o];if(!l)throw new g("BadArguments","Invalid key name: "+o);l.octave&&(s[1]=l.octave.toString());let r=parseInt(s[1],10);r+=-1*a.octave_shift;let h=(7*r-28+l.index)/2;h+=V.clefProperties(e).line_shift;let c=0;h<=0&&2*h%2==0&&(c=1),h>=6&&2*h%2==0&&(c=-1);const d=void 0!==l.int_val?12*r+l.int_val:void 0,m=l.code,b=l.shift_right;let _={};if(s.length>2&&s[2]){const t=s[2].toUpperCase();_={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:r,line:h,int_value:d,accidental:l.accidental,code:m,stroke:c,shift_right:b,displaced:!1},_)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new g("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new g("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,a=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new g("InvalidMetrics","Width and height required");a=t.width,n=-t.height/2}else a=V.textWidth(t);return{text:t,code:i,getWidth:()=>a*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return H[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=U[t];if(!e)throw new g("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],a=[];for(let t=0;tZ.getWidth(s,t)}),a)}}V.UNISON=!0,V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=W,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=H,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:W};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,a){this.outline=t,this.originX=e,this.originY=i,this.scale=a,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let a=0;for(;a{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(s)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new g("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new g("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new g("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let a=i[3];return a||(a="M"),{root:t,accidental:e,type:a}}throw new g("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new g("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new g("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new g("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new g("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new g("BadArguments",`Invalid direction: ${i}`);let a=(t+i*e)%et.NUM_TONES;return a<0&&(a+=et.NUM_TONES),a}getRelativeNoteName(t,e){const i=this.getNoteParts(t),a=this.getNoteValue(i.root);let n=e-a;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const s=(e+1+(a+1))%et.NUM_TONES*i;if(Math.abs(s)>2)throw new g("BadArguments",`Notes not related: ${t}, ${e})`);n=s}if(Math.abs(n)>2)throw new g("BadArguments",`Notes not related: ${t}, ${e})`);let s=i.root;if(n>0)for(let t=1;t<=n;++t)s+="#";else if(n<0)for(let t=-1;t>=n;--t)s+="b";return s}getScaleTones(t,e){const i=[t];let a=t;for(let n=0;ne.line-t.line));const c=[];let d=0;for(let t=0;tc[i+t],s=t=>t.map(n),o=(t,e)=>{const[i,a]=s([t,e]).map((t=>t.line));return i-a},l=(...t)=>t.map(s).every((([t,e])=>!this.checkCollision(t,e))),r=a-i+1;let h,d,b=this.checkCollision(c[i],c[a])?"a":"b";switch(r){case 3:"a"===b&&.5===o(1,2)&&.5!==o(0,1)&&(b="second_on_bottom");break;case 4:l([0,2],[1,3])&&(b="spaced_out_tetrachord");break;case 5:"b"===b&&l([1,3])&&(b="spaced_out_pentachord",l([0,2],[2,4])&&(b="very_spaced_out_pentachord"));break;case 6:l([0,3],[1,4],[2,5])&&(b="spaced_out_hexachord"),l([0,2],[2,4],[1,3],[3,5])&&(b="very_spaced_out_hexachord")}if(r>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+ed?m:d}else for(h=t;h<=a;h++)d=V.accidentalColumnsTable[r][b][h-t],c[h].column=d,m=m>d?m:d;t=a}const b=[],_=[];for(let t=0;t<=m;t++)b[t]=0,_[t]=0;b[0]=n+d,_[0]=n,c.forEach((t=>{t.width>b[t.column]&&(b[t.column]=t.width)}));for(let t=1;t{let e=0;const i=g+t.numAcc;for(;g0?(a=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(a=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new C(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=a[e.value()];n?n.push(t):(i.push(e.value()),a[e.value()]=[t]),e.add(t.getTicks())}))}));const s=new et;e||(e="C");const o=s.createScaleMap(e),l={};i.forEach((t=>{const e=a[t],i=[],r=t=>{if(!m(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,a)=>{const r=s.getNoteParts(t.split("/")[0]),h=t.split("/")[1],c=r.accidental||"n",d=r.root+c;l[r.root+h]||(l[r.root+h]=o[r.root]);const m=l[r.root+h]===d,b=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==c&&t.getIndex()==a&&e.getModifiers().splice(i,1)})),!m||m&&b){l[r.root+h]=d;const n=new at(c);e.addModifier(n,a),i.push(t)}})),e.getModifiers().forEach((t=>{h(t)&&t.getGraceNotes().forEach(r)}))};e.forEach(r)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),u(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=u(this.parenLeft),e=u(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return u(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,r(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:a,x_shift:n,y_shift:s,glyph:o,render_options:{parenLeftPadding:l,parenRightPadding:r}}=this,h=this.checkContext(),c=this.checkAttachedNote();this.setRendered();const d=c.getModifierStartXY(e,i);let m=d.x+n;const b=d.y+s;if(it("Rendering: ",t,m,b),a){const t=u(this.parenLeft),e=u(this.parenRight);e.render(h,m,b),m-=e.getMetrics().width,m-=r,m-=this.accidental.parenRightPaddingAdjustment,o.render(h,m,b),m-=o.getMetrics().width,m-=l,t.render(h,m,b)}else o.render(h,m,b)}}at.DEBUG=!1;class nt extends L{static get CATEGORY(){return x.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new g("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,a=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:a+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const a=this.stem_direction;let n=0;a===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const s=this.getHeight();!function(...t){nt.DEBUG&&y("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?s-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-s-this.renderHeightAdjustment*a),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function st(...t){ht.DEBUG&&y("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},lt={},rt={};class ht{static getFontFamilies(){const t=[];for(const e in rt){const i=rt[e];t.push(Object.assign({},i))}return t}static create(t={}){st("create: ",t),t.family||(t.family=M.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in rt)i.startsWith(t)&&e.push(rt[i]);if(e.length>0)break}let a;if(0===e.length)a=new ht(Object.values(rt)[0]);else if(1===e.length)a=new ht(e[0]);else{const i=M.isBold(t.weight),n=M.isItalic(t.style),s=e.find((t=>t.bold===i&&t.italic===n));if(s)a=new ht(s);else{const t=e.find((t=>t.italic===n||t.bold===i));a=new ht(t||e[0])}}const n=t.size;if(void 0!==n){const t=M.convertSizeToPointValue(n);a.setFontSize(t)}return a}static getInfo(t){return rt[t]}static registerInfo(t,e=!1){st("registerInfo: ",t,e);const i=t.family;(void 0===rt[i]||e)&&(rt[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===lt[this.cacheKey]&&(lt[this.cacheKey]={}),null!==(t=lt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?P.BOLD:P.NORMAL,a=this.italic?k.ITALIC:k.NORMAL;this.cacheKey=`${t}%${e}%${i}%${a}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},a=e[t];if(void 0!==a)return a;for(let e=0;et>e?t:e)),r+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+o,d&&i===nt.DOWN&&(r=Math.max(r,h.topY+o+c*this.text_line))}else if(this.verticalJustification===dt.CENTER){const t=e.getYForTopText(this.text_line)-1;r=t+(m.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===dt.TOP){r=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,d&&i===nt.UP&&(c=h.topY=1}function pt(t,e){return gt(t,e)?e===bt?Math.ceil:Math.floor:Math.round}const ut=t=>m(t)||r(t);class yt extends tt{static get CATEGORY(){return x.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const a=(t,e,i)=>xt(pt(e,i),u(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let s=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let l=0;if(b(n)){const t=n.getStem();t&&(l=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const r=n.getStave();if(r&&(s=r.getNumLines()),t.getPosition()===bt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=l);let r=a(t,e.top_text_line,bt);const h=i+e.top_text_line+.5;!t.articulation.between_lines&&ht.getWidth())).reduce(((t,e)=>Math.max(e,t))),s=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=s/2,e.right_shift+=s/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const a={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:a[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=bt,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=bt),this.type.endsWith("Below")&&(this.position=_t));const t=(this.position===bt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),u(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(u(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:a,glyph:n,text_line:s}=this,o=this.articulation.between_lines,l=e.checkStave(),r=l.getSpacingBetweenLines(),h=_(e),{x:c}=e.getModifierStartXY(a,i),d=!o||h,m=function(t,e){const i=e===bt&&t.getStemDirection()===nt.UP||e===_t&&t.getStemDirection()===nt.DOWN;return ut(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,a),b=V.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let x={[bt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:a,baseY:n}=t.getStemExtents();if(ut(t))return t.hasStem()?i===nt.UP?a:n:Math.min(...t.getYs());if(_(t))return t.hasStem()&&i===nt.UP?a:t.checkStave().getYForTopText(e);throw new g("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,s)-(s+m)*r;return d?Math.min(l.getYForTopText(yt.INITIAL_OFFSET),t):t},[_t]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:a,baseY:n}=t.getStemExtents();if(ut(t))return t.hasStem()?i===nt.UP?n:a:Math.max(...t.getYs());if(_(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):a:t.checkStave().getYForBottomText(e);throw new g("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,s)+(s+m)*r;return d?Math.max(l.getYForBottomText(yt.INITIAL_OFFSET),t):t}}[a]();if(!h){const t=a===bt?-1:1,s=e.getKeyProps()[i].line,l=(e.getYs()[i]-x)/r+Number(s),h=function(t,e,i,a){const n=xt(pt(e,i),e);if(t&>(n,i)&&n%1==0)return n+.5*-a;return n}(o,l,a,t);gt(h,a)&&n.setOrigin(.5,.5),x+=Math.abs(h-l)*r*t+b*t}!function(...t){yt.DEBUG&&y("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${c}, y: ${x})`),n.render(t,c,x)}}yt.DEBUG=!1,yt.INITIAL_OFFSET=-.5;class ft{static get CATEGORY(){return x.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,a="#F55"){t.save(),t.setFillStyle(a),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends L{static get CATEGORY(){return x.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new C(0,1),this.intrinsicTicks=0,this.tickMultiplier=new C(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new g("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return u(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const a=this.tupletStack.indexOf(t);return-1!==a&&(this.tupletStack.splice(a,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const a=_.space.deviation,n=a>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(a),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const a=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");a[e]=n&&3===n.length?n[2]:i})));let n=V.durationToTicks(e.duration);if(!n)return;const s=t.dots?t.dots:e.dots;if("number"!=typeof s)return;let o=n;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return u(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new g("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new g("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(x.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return u(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new g("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new g("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}static getPoint(t){return"default"==t?V.NOTATION_FONT_SCALE:V.NOTATION_FONT_SCALE/5*3}getStemDirection(){throw new g("NoStem","No stem attached to this note.")}getStemExtents(){throw new g("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Ct,Bt,Dt,Et,Pt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class kt extends L{static get CATEGORY(){return x.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return u(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,a=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+a)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Ct||(Ct={}));class Nt extends kt{static get CATEGORY(){return x.Barline}static get type(){return Ct}static get typeString(){return{single:Ct.SINGLE,double:Ct.DOUBLE,end:Ct.END,repeatBegin:Ct.REPEAT_BEGIN,repeatEnd:Ct.REPEAT_END,repeatBoth:Ct.REPEAT_BOTH,none:Ct.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=Ct;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?Nt.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Ct.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Ct.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Ct.END:this.drawVerticalEndBar(t,this.x);break;case Ct.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Ct.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Ct.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const a=t.checkContext(),n=t.getTopLineTopY(),s=t.getBottomLineBottomY();i&&a.fillRect(e-3,n,1,s-n),a.fillRect(e,n,1,s-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),a=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,a,1,n-a),i.fillRect(e-2,a,3,n-a)}drawRepeatBar(t,e,i){const a=t.checkContext(),n=t.getTopLineTopY(),s=t.getBottomLineBottomY();let o=3;i||(o=-5),a.fillRect(e+o,n,1,s-n),a.fillRect(e-2,n,3,s-n);i?o+=4:o-=4;const l=e+o+1;let r=(t.getNumLines()-1)*t.getSpacingBetweenLines();r=r/2-t.getSpacingBetweenLines()/2;let h=n+r+1;a.beginPath(),a.arc(l,h,2,0,2*Math.PI,!1),a.fill(),h+=t.getSpacingBetweenLines(),a.beginPath(),a.arc(l,h,2,0,2*Math.PI,!1),a.fill()}}class At extends vt{static get CATEGORY(){return x.BarNote}constructor(t=Ct.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Ct;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?Nt.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){At.DEBUG&&y("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t);const e=new Nt(this.type);e.setX(this.getAbsoluteX()),e.draw(this.checkStave()),this.restoreStyle(t),this.setRendered()}}At.DEBUG=!1;class Ft extends tt{static get CATEGORY(){return x.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let a=0;at{const s=t+a,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(s,o,t+a,n),e.stroke(),e.restore()},c=(t,i,a,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+a,n,t+a,i),e.stroke(),e.restore()},d=(t,i,a)=>{const n=i+4*a;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},m=(t,i)=>{e.save(),e.setFont(this.textFont);const a=t-e.measureText(i).width/2;e.fillText(i,a,r),e.restore()};let b,_=0,x=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){m(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=h.symbolBlocks[t-1];Ot.isSuperscript(e)||(n=a)}s&&n>0&&(g=!0,e.xShift=e.xShift+(n-a),a=n,n=0,h.setEnableKerning(!1)),i||s||(n=0),e.vAlign=g,a+=e.width,_=a}if(h.updateKerningAdjustments(),h.updateOverBarAdjustments(),h.getVertical()===Dt.TOP?(h.setTextLine(e.top_text_line),e.top_text_line+=x):(h.setTextLine(e.text_line+1),e.text_line+=x+1),h.getReportWidth()&&b(m)){const t=m.getGlyphProps().getWidth();h.getHorizontal()===Bt.LEFT?(l=Math.max(t,l),s=Math.max(s,_)+Ot.minPadding):h.getHorizontal()===Bt.RIGHT?(r=Math.max(t,r),o=Math.max(o,_)):(s=Math.max(s,_/2)+Ot.minPadding,o=Math.max(o,_/2),l=Math.max(t/2,l),r=Math.max(t/2,r))}a=0}const h=Math.min(Math.max(o-r,0),Math.max(o-e.right_shift,0)),c=Math.min(Math.max(s-l,0),Math.max(s-e.left_shift,0));return e.left_shift+=c,e.right_shift+=h,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Bt.LEFT,this.vertical=Dt.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:P.NORMAL,style:k.NORMAL}}get superscriptOffset(){return Ot.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Ot.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Et.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let a=0;for(;a0?this.symbolBlocks[t-1]:void 0;let a=0;e.symbolType===Et.GLYPH&&void 0!==e.glyph&&e.glyph.code===Ot.glyphs.over.code&&(a+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Et.GLYPH&&void 0!==i.glyph&&i.glyph.code===Ot.glyphs.over.code&&(a+=i.glyph.metrics.x_shift);let n=!1,s=!1;void 0!==i&&i.symbolType===Et.TEXT&&(n=Ot.upperKerningText.some((t=>t===i.text[i.text.length-1])),s=Ot.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Ot.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===Pt.SUPERSCRIPT&&(a+=o),s&&e.symbolType===Et.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(a+=o/2),Ot.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(a+=o/2)),a}getSymbolBlock(t={}){var e,i,a;const n=null!==(e=t.symbolType)&&void 0!==e?e:Et.TEXT,s={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(a=t.symbolModifier)&&void 0!==a?a:Pt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Et.GLYPH&&"string"==typeof t.glyph){const e=Ot.glyphs[t.glyph],i=20;s.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Et.TEXT?s.width=this.textFormatter.getWidthForTextInEm(s.text):n===Et.LINE&&(s.width=t.width);return s}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Et.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Et.TEXT,i=Pt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Et.TEXT,i=Pt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Et.GLYPH,i=Pt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Et.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let a=0;a0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Et.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,a){return super.setFont(t,e,i,a),this.textFormatter=ht.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Ot.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Ot.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,a=0;for(a=0;a0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let a;t.setFont(this.textFont);const n=e.hasStem(),s=e.checkStave();if(this.vertical===Dt.BOTTOM){if(a=s.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=s.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;a=Math.max(a,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(a=Math.min(s.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=s.getSpacingBetweenLines();a=Math.min(a,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Bt.LEFT?i.x:this.horizontal===Bt.RIGHT?i.x+this.getWidth():this.horizontal===Bt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Mt("Rendering ChordSymbol: ",this.textFormatter,o,a),this.symbolBlocks.forEach((e=>{const i=Ot.isSuperscript(e),n=Ot.isSubscript(e);let s=a;if(Mt("shift was ",e.xShift,e.yShift),Mt("curY pre sub ",s),i&&(s+=this.superscriptOffset),n&&(s+=this.subscriptOffset),Mt("curY sup/sub ",s),e.symbolType===Et.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:a,style:n}=this.textFont,s=M.scaleSize(i,Ot.superSubRatio);t.setFont(e,s,a,n)}Mt("Rendering Text: ",e.text,o+e.xShift,s+e.yShift),t.fillText(e.text,o+e.xShift,s+e.yShift),(i||n)&&t.restore()}else e.symbolType===Et.GLYPH&&e.glyph?(s+=e.yShift,Mt("Rendering Glyph: ",e.glyph.code,o+e.xShift,s),e.glyph.render(t,o+e.xShift,s)):e.symbolType===Et.LINE&&(Mt("Rendering Line : ",e.width,o,s),t.beginPath(),t.setLineWidth(1),t.moveTo(o,a),t.lineTo(o+e.width,s),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Ot.DEBUG=!1,Ot.HorizontalJustify=Bt,Ot.HorizontalJustifyString={left:Bt.LEFT,right:Bt.RIGHT,center:Bt.CENTER,centerStem:Bt.CENTER_STEM},Ot.VerticalJustify=Dt,Ot.VerticalJustifyString={top:Dt.TOP,above:Dt.TOP,below:Dt.BOTTOM,bottom:Dt.BOTTOM},Ot.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Ot.symbolTypes=Et,Ot.symbolModifiers=Pt,Ot.noFormat=!1;class Rt extends tt{static get CATEGORY(){return x.Dot}static getDots(t){return t.getModifiersByType(Rt.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let s=i,o=0,l=null,r=null,h=null,c=0;for(let t=0;to?s:o,l=m,r=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,r(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),a=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});_(e)&&(a.y=e.getStemExtents().baseY);const n=a.x+this.x_shift+this.width-this.radius,s=a.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,s,this.radius,0,2*Math.PI,!1),t.fill()}}class Lt extends tt{static get CATEGORY(){return x.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:a}=e;if(!t||0===t.length)return!1;const n=[];let s=null,o=0,l=0;for(let r=0;re.line-t.line));let r=0,h=0,c=0,d=0,m=null,b=null;for(let t=0;tc?e:c):o===tt.Position.RIGHT&&(_.setXShift(h),e=l+u,d=e>d?e:d),m=x,b=s}return e.left_shift+=c,e.right_shift+=d,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),a={number:e[0]};return e[1]&&(a.position=e[1]),i.getFactory().Fingering(a)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let a=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:a-=4,n-=12;break;case tt.Position.BELOW:a-=2,n+=10;break;case tt.Position.LEFT:a-=this.width;break;case tt.Position.RIGHT:a+=1;break;default:throw new g("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,a,n),t.restore()}}Lt.TEXT_FONT={family:M.SANS_SERIF,size:9,weight:P.BOLD,style:k.NORMAL};class Wt extends vt{static get CATEGORY(){return x.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),u(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=V.currentMusicFont(),a=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+a+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new D(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Wt.DEBUG&&y("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const a=this.stem_direction,n=this.render_options.glyph_font_scale,s=`${this.glyph_code}Stem${a===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,a,n,s){const o=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let l=!1;if(V.durationToNumber(e)>2&&(l=!0),l||(i-=V.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,a+s),t.lineTo(i,a+1),t.lineTo(i+o,a-s),t.lineTo(i+o,a),t.lineTo(i,a+s),t.closePath(),l?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;nt.getCategory()===x.Dot&&0===t.getIndex())).length!==l.note.getModifiers().filter((t=>t.getCategory()===x.Dot&&0===t.getIndex())).length||t<1&&t>0||JSON.stringify(s.note.getStyle())!==JSON.stringify(l.note.getStyle())?(d=c+2,s.stemDirection===l.stemDirection?s.note.setXShift(d):l.note.setXShift(d)):s.note.voice!==l.note.voice&&s.stemDirection===l.stemDirection&&(s.line!=l.line?(d=c+2,s.note.setXShift(d)):1===l.stemDirection&&(l.stemDirection=-1,l.note.setStemDirection(-1)))}else t<1?(d=c+2,s.note.durationt.postFormat())),!0)}constructor(t){var e,i,a;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),u(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Ut.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(a=t.stem_direction)&&void 0!==a?a:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const a=t[i];a&&e.setStyle(a)}));const e=this.stave;return e&&this.setStave(e),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,a,n,s,o,l=!1;t===nt.UP?(n=0,s=e.length,o=1):(n=e.length-1,s=-1,o=-1);for(let e=n;e!==s;e+=o){const n=this.sortedKeyProps[e].keyProps,s=n.line;void 0===i?i=s:(a=Math.abs(i-s),0===a||.5===a?l=!l:(l=!1,this.use_default_head_x=!0)),i=s;const o=new Wt({duration:this.duration,note_type:this.noteType,displaced:l,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=s,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new g("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:a,leftDisplacedHeadPx:n}=this.getMetrics(),s=this.getAbsoluteX()-a-n;let o=0,l=0;const r=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,h=2*r;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-r,l=t+r):(o=t-this.glyphProps.line_above*h,l=t+this.glyphProps.line_below*h)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=r*this.getStemDirection(),o=Math.min(t.topY,t.baseY),l=Math.max(t.topY,t.baseY)}else{o=0,l=0;for(let t=0;te&&(e=a):a1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var a,n;if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new g("NoYValues","No Y-Values calculated for this note.");const{ABOVE:s,BELOW:o,LEFT:l,RIGHT:r}=tt.Position;let h=0;return t===l?h=-2:t===r?(h=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(h+=null!==(n=null===(a=null==this?void 0:this.flag)||void 0===a?void 0:a.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==s||(h=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+h,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Ut.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,a,n=1/0,s=-1/0,o=this.checkStave().getNumLines(),l=1,r=o,h=l;return this._noteHeads.forEach((c=>{const d=c.getLine(),m=c.getY();n=Math.min(m,n),s=Math.max(m,s),void 0===e&&c.isDisplaced()&&(e=c.getAbsoluteX()),void 0!==t||c.isDisplaced()||(t=c.getAbsoluteX()),o=Math.max(d,o),l=Math.min(d,l),c.isDisplaced()?(i=void 0===i?d:Math.max(d,i),a=void 0===a?d:Math.min(d,a)):(r=Math.max(d,r),h=Math.min(d,h))}),this),{y_top:n,y_bottom:s,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:l,highest_displaced_line:i,lowest_displaced_line:a,highest_non_displaced_line:r,lowest_non_displaced_line:h}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,a=this.checkContext(),n=e.getWidth()+2*i,s=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!a)throw new g("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:l,highest_displaced_line:r,highest_non_displaced_line:h,lowest_displaced_line:c,lowest_non_displaced_line:d,displaced_x:m,non_displaced_x:b}=this.getNoteHeadBounds();if(o<6&&l>0)return;const _=Math.min(null!=m?m:0,null!=b?b:0),x=(t,e,o)=>{let l;l=o&&e?_-i:e?(null!=b?b:0)-i:(null!=m?m:0)-i;const r=e&&o?s:n;a.beginPath(),a.moveTo(l,t),a.lineTo(l+r,t),a.stroke()},p=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(a,p);for(let e=6;e<=o;++e){const i=void 0!==b&&e<=h,a=void 0!==r&&e<=r;x(t.getYForNote(e),i,a)}for(let e=0;e>=l;--e){const i=void 0!==b&&e>=d,a=void 0!==c&&e>=c;x(t.getYForNote(e),i,a)}this.restoreStyle(a,p)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const a=i-3.5;if(a<=0)return t;const n=this.getStave();let s=10;return null!=n&&(s=n.getSpacingBetweenLines()),t+a*s}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new g("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Ut.DEBUG&&y("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Ut.DEBUG=!1;class Gt extends L{static get CATEGORY(){return x.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new g("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new g("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new g("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,a=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,a=8);const n=this.render_options.first_x_shift,s=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,l=this.notes.first_indices,r=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let h=0;hMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===Ht.STRICT||this.mode===Ht.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new g("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return u(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let a=0;a1){const e=new Le(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Ut.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&y("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=m(e),a=i?Gt:Yt;this.slur=new a({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return x.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new ke,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt{static getNextContext(t){const e=t.tContexts,i=e.indexOf(t);if(i+1t.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:a,rightDisplacedHeadPx:n,modLeftPx:s,modRightPx:o,totalLeftPx:l,totalRightPx:r}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:a,rightDisplacedHeadPx:n,modLeftPx:s,modRightPx:o,totalLeftPx:l,totalRightPx:r}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new g("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t=0&&(l.x_shift+=a+2),$t.ornamentAttack.indexOf(l.type)>=0&&(l.x_shift-=n+2),l.reportedWidth&&l.x_shift<0?n+=l.reportedWidth:l.reportedWidth&&l.x_shift>=0?a+=l.reportedWidth+$t.minPadding:i=Math.max(l.getWidth(),i),$t.ornamentArticulation.indexOf(l.type)>=0){u(l.note,"NoAttachedNote").getLineNumber()>=3||l.getPosition()===tt.Position.ABOVE?(e.top_text_line+=r,l.y_shift+=s,s-=l.glyph.bbox.getH()):(e.text_line+=r,l.y_shift+=s,s+=l.glyph.bbox.getH())}else l.getPosition()===tt.Position.ABOVE?(l.setTextLine(e.top_text_line),e.top_text_line+=r):(l.setTextLine(e.text_line),e.text_line+=r)}return e.left_shift=n+i/2,e.right_shift=a+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new g("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:V.NOTATION_FONT_SCALE,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=$t.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new g("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),$t.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),a=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let s=i===nt.DOWN?n.baseY:n.topY;_(e)&&(e.hasStem()?i===nt.DOWN&&(s=a.getYForTopText(this.text_line)):s=a.getYForTopText(this.text_line));const o=i===nt.DOWN,l=a.getSpacingBetweenLines();let r=1;!o&&e.hasBeam()&&(r+=.5);const h=s-l*(this.text_line+r),c=e.getModifierStartXY(this.position,this.index);let d=c.x,m=this.ornamentAlignWithNoteHead?c.y:Math.min(a.getYForTopText(this.text_line),h);if(m+=this.y_shift,this.delayed){let t=0;const i=d-(a.getX()-10);if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=Kt.getNextContext(e.getTickContext());t+=n?.5*(n.getX()-i):.5*(a.getX()+a.getWidth()-i),this.delayXShift=t}d+=t}!function(...t){$t.DEBUG&&y("Vex.Flow.Ornament",t)}("Rendering ornament: ",this.ornament,d,m),this.accidentalLower&&(this.accidentalLower.render(t,d,m),m-=this.accidentalLower.getMetrics().height,m-=this.render_options.accidentalLowerPadding),this.stemUpYOffset&&e.hasStem()&&1===e.getStemDirection()&&(m+=this.stemUpYOffset),e.getLineNumber()<5&&$t.ornamentNoteTransition.indexOf(this.type)>=0&&(m=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,d+this.x_shift,m),this.accidentalUpper&&(m-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,d,m)),t.closeGroup(),this.restoreStyle()}}$t.DEBUG=!1;class Jt extends tt{static get CATEGORY(){return x.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;tr+n.width?a:r+n.width),o===J.LEFT&&(r=s.getLeftParenthesisPx(l),i=i>r+n.width?i:r+n.width),n.setXShift(r)}return e.left_shift+=i,e.right_shift+=a,!0}constructor(t){var e;super(),this.position=null!=t?t:tt.Position.LEFT,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){var e,i;return this.note=t,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),r(t)&&(this.point=null!==(i=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"))&&void 0!==i?i:vt.getPoint("gracenote"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),a=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,a+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,a-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function qt(t){if(!t)return!1;const e=p();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function Qt(t){if(!t)return!1;const e=p();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Zt extends ft{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(f("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Zt.WIDTH,height:Zt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e,i){var a;const n=this.context2D.canvas,s=null!==(a=null!=i?i:p().devicePixelRatio)&&void 0!==a?a:1;return[t,e]=Zt.sanitizeCanvasDims(t*s,e*s),t=t/s|0,e=e/s|0,n.width=t*s,n.height=e*s,qt(n)&&(n.style.width=t+"px",n.style.height=e+"px"),this.scale(s,s)}rect(t,e,i,a){return this.context2D.rect(t,e,i,a),this}fillRect(t,e,i,a){return this.context2D.fillRect(t,e,i,a),this}clearRect(t,e,i,a){return this.context2D.clearRect(t,e,i,a),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,a,n,s){return this.context2D.bezierCurveTo(t,e,i,a,n,s),this}quadraticCurveTo(t,e,i,a){return this.context2D.quadraticCurveTo(t,e,i,a),this}arc(t,e,i,a,n,s){return this.context2D.arc(t,e,i,a,n,s),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,a=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,a=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,a=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:a}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,a){const n=M.validate(t,e,i,a);return this.context2D.font=M.toCSSString(n),this.textHeight=M.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const te={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},ee="http://www.w3.org/2000/svg",ie=2*Math.PI;class ae extends ft{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":M.SANS_SERIF,"font-size":M.SIZE+"pt","font-weight":P.NORMAL,"font-style":k.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(ee,t)}openGroup(t,e,i){const a=this.create("g");return this.groups.push(a),this.parent.appendChild(a),this.parent=a,t&&a.setAttribute("class",T(t)),e&&a.setAttribute("id",T(e)),i&&i.pointerBBox&&a.setAttribute("pointer-events","bounding-box"),this.applyAttributes(a,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),a}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new g("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,a=this.height/this.state.scaleY;return this.setViewBox(0,0,i,a),this}setViewBox(t,e,i,a){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+a;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=te[t.nodeName];for(const a in e)i&&i[a]||!e[a]||0!=this.groupAttributes.length&&e[a]==this.groupAttributes[this.groupAttributes.length-1][a]||t.setAttributeNS(null,a,e[a]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,a,n){a<0&&(e+=a,a*=-1);const s=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),a=this.round(a),this.applyAttributes(s,Object.assign({x:t,y:e,width:i,height:a},n)),this.add(s),this}fillRect(t,e,i,a){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,a,n),this}clearRect(t,e,i,a){return this.rect(t,e,i,a,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,a,n,s){return n=this.round(n),s=this.round(s),t=this.round(t),e=this.round(e),i=this.round(i),a=this.round(a),this.path+="C"+t+" "+e+","+i+" "+a+","+n+" "+s,this.pen.x=n,this.pen.y=s,this}quadraticCurveTo(t,e,i,a){return i=this.round(i),a=this.round(a),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+a,this.pen.x=i,this.pen.y=a,this}arc(t,e,i,a,n,s){let o=t+i*Math.cos(a),l=e+i*Math.sin(a);o=this.round(o),l=this.round(l);const r=v(a),h=v(n);if(!s&&n-a>=ie||s&&a-n>=ie||r===h){let n=t+i*Math.cos(a+Math.PI),s=e+i*Math.sin(a+Math.PI);n=this.round(n),s=this.round(s),i=this.round(i),this.path+=`M${o} ${l} A${i} ${i} 0 0 0 ${n} ${s} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${l}`,this.pen.x=o,this.pen.y=l}else{let c,d=t+i*Math.cos(n),m=e+i*Math.sin(n);a=r,n=h,c=Math.abs(n-a)n&&(c=!c);const b=!s;d=this.round(d),m=this.round(m),i=this.round(i),this.path+=`M${o} ${l} A${i} ${i} 0 ${+c} ${+b} ${d} ${m}`,this.pen.x=d,this.pen.y=m}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return ae.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const a=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,a),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,a){const n=M.validate(t,e,i,a);this.fontCSSString=M.toCSSString(n);const s={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),s),this.state=Object.assign(Object.assign({},this.state),s),this}getFont(){return this.fontCSSString}}var ne,se,oe,le;ae.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let a=this.cache[t];void 0===a&&(a={},this.cache[t]=a);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let s=a[n];return void 0===s&&(s=this.measureImpl(t,e,i),a[n]=s),s}measureImpl(t,e,i){let a=this.txt;a||(a=document.createElementNS(ee,"text"),this.txt=a),a.textContent=t,i["font-family"]&&a.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&a.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&a.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&a.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(a);const n=a.getBBox();return e.removeChild(a),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ne||(ne={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(se||(se={}));class re{static buildContext(t,e,i,a,n="#FFF"){const s=new re(t,e);i&&a&&s.resize(i,a);const o=s.getContext();return o.setBackgroundFillStyle(n),re.lastContext=o,o}static getCanvasContext(t,e,i,a){return re.buildContext(t,re.Backends.CANVAS,e,i,a)}static getSVGContext(t,e,i,a){return re.buildContext(t,re.Backends.SVG,e,i,a)}static drawDashedLine(t,e,i,a,n,s){t.beginPath();const o=a-e,l=n-i,r=Math.atan2(l,o);let h=e,c=i;t.moveTo(e,i);let d=0,m=!0;for(;!(o<0?h<=a:h>=a)||!(l<0?c<=n:c>=n);){const e=s[d++%s.length],i=h+Math.cos(r)*e;h=o<0?Math.max(a,i):Math.min(a,i);const b=c+Math.sin(r)*e;c=l<0?Math.max(n,b):Math.min(n,b),m?t.lineTo(h,c):t.moveTo(h,c),m=!m}t.closePath(),t.stroke()}constructor(t,e){if(d(t))this.ctx=t;else{if(void 0===e)throw new g("InvalidArgument","Missing backend argument");const i=e;let a;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new g("BadElementId",`Can't find element with ID "${e}"`);a=e}else a=t;if(i===re.Backends.CANVAS){if(!qt(a))throw new g("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=a.getContext("2d",{willReadFrequently:!0});if(!t)throw new g("BadElement","Can't get canvas context");this.ctx=new Zt(t)}else{if(i!==re.Backends.SVG)throw new g("InvalidBackend",`No support for backend: ${i}`);if(!Qt(a))throw new g("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new ae(a)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}re.Backends=ne,re.LineEndType=se,re.lastContext=void 0;class he extends tt{static get CATEGORY(){return x.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,a=e.right_shift;if(!t||0===t.length)return!1;const n=[];let s=null,o=0,l=0;for(let i=0;ie.line-t.line));let r=0,h=0,c=0,d=null,b=null;for(let t=0;tc?g:c),d=m,b=e}return e.left_shift+=h,e.right_shift+=c,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=re.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=re.LineEndType.NONE&&t<=re.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),a=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,s={};e.hasStem()&&(s=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&a==nt.DOWN&&(o=s.topY-he.metrics.stemPadding),o+=this.radius+he.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+he.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+he.metrics.rightPadding;break;default:throw new g("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const l=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,l,o+4.5);const r=this.last_note;if(b(r)){const i=r.getStemX()-e.getX()+5;let a,s;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?re.drawDashedLine(t,n+10,o,n+i,o,[3,3]):re.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case re.LineEndType.UP:a=-10,s=this.dashed?[3,3]:[3,0],re.drawDashedLine(t,n+i,o,n+i,o+a,s);break;case re.LineEndType.DOWN:a=10,s=this.dashed?[3,3]:[3,0],re.drawDashedLine(t,n+i,o,n+i,o+a,s)}}t.restore()}}he.TEXT_FONT={family:M.SANS_SERIF,size:M.SIZE,weight:P.BOLD,style:k.NORMAL};class ce extends tt{static get CATEGORY(){return x.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const a=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(m(e)){const{line:a}=e.getKeyProps()[i];return{line:a,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(_(e)){const{str:a}=e.getPositions()[i];return{line:a,shift:0,stroke:t}}throw new g("Internal","Unexpected instance.")})),n=i,s=a.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=s,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let a=e.getYs(),n=i.y,s=i.y;const o=i.x-5,l=e.checkStave().getSpacingBetweenLines(),r=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){a-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(a,this.checkStave(),t.line),this.glyphs.push(a);const s=this.xPositions[this.xPositions.length-1],o=a.getMetrics().width+n;this.xPositions.push(s+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,a=i?e.length:e.length-this.accList.length;if(a<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let a;if(this.cancelKeySpec&&(a=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();a&&this.convertAccLines(n,a.type,a.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":a=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":a=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+a,this.timeSignature.point);this.topGlyphs.push(n),l+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0,r=Math.max(r,n.getMetrics().height)}let h=0;for(let t=0;t22?1:0,this.width=Math.max(l,h),this.xMin=this.getMetrics().x_min,this.topStartX=(this.width-l)/2,this.botStartX=(this.width-h)/2,this.reset()}getMetrics(){return{x_min:this.xMin,x_max:this.xMin+this.width,width:this.width}}renderToStave(t){const e=this.checkStave(),i=this.checkContext();let a=t+this.topStartX,n=0;n=this.botGlyphs.length>0?e.getYForLine(this.timeSignature.topLine-this.lineShift):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new g("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new g("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const a=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=a[0])&&void 0!==e?e:"",null!==(i=a[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Te(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(u(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const we={[Nt.CATEGORY]:0,[_e.CATEGORY]:1,[xe.CATEGORY]:2,[ve.CATEGORY]:3},Ce={[ve.CATEGORY]:0,[xe.CATEGORY]:1,[Nt.CATEGORY]:2,[_e.CATEGORY]:3};class Be extends L{static get CATEGORY(){return x.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,a){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},a),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new Nt(this.options.left_bar?Ct.SINGLE:Ct.NONE)),this.addEndModifier(new Nt(this.options.right_bar?Ct.SINGLE:Ct.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new ge(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new Se(t,e,this.x,i)),this}setSection(t,e,i=0,a,n=!0){const s=new pe(t,this.x+i,e,n);return a&&s.setFontSize(a),this.modifiers.push(s),this}setTempo(t,e){return this.modifiers.push(new ue(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new fe(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new D(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,a=e.space_above_staff_ln;return this.y+t*i+a*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,a=e.space_above_staff_ln;return(t-this.y)/i-a}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,a=e.space_above_staff_ln;return this.y+a*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:a}=Ct;return t!==e&&t!==i&&t!==a||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Ct.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClef(t,e,i,a){void 0===a&&(a=wt.BEGIN),a===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(a,_e.CATEGORY);return 0===n.length?this.addClef(t,e,i,a):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const a=this.getModifiers(i,xe.CATEGORY);return 0===a.length?this.addKeySignature(t,e,i):a[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const a=this.getModifiers(i,ve.CATEGORY);return 0===a.length?this.addTimeSignature(t,e,i):a[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new xe(t,e).setPosition(i),i),this}addClef(t,e,i,a){return void 0===a||a===wt.BEGIN?this.clef=t:a===wt.END&&(this.endClef=t),this.addModifier(new _e(t,e,i),a),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new ve(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,a=void 0===e;return i&&a?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):a?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let a=0;ae[t[a+1].getCategory()]){const e=t[a];t[a]=t[a+1],t[a+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),a=this.getModifiers(wt.END);let n,s,l;this.sortByCategory(i,we),this.sortByCategory(a,Ce),i.length>1&&t.getType()===Ct.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new Nt(Ct.SINGLE))),a.indexOf(e)>0&&a.splice(0,0,new Nt(Ct.NONE));let r=0,h=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new g("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new g("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new g("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new g("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const a=t.getModifiers(wt.BEGIN,e);a.length>0&&a[0].getX()>i&&(i=a[0].getX())}));let a=0;t.forEach((t=>{a=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>a&&(a=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let s=!1;n.forEach((t=>{t.getCategory()===e&&(s=!0),s&&a>0&&t.setX(t.getX()+a)})),t.setNoteStartX(t.getNoteStartX()+a)}))};t.forEach((t=>{t.formatted||t.format()})),e(x.Clef),e(x.KeySignature),e(x.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==Ct.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==Ct.REPEAT_BEGIN&&t.setX(i)}))}))}}function De(t,e,i,a,n){if(e!==Ee.type.BOLD_DOUBLE_LEFT&&e!==Ee.type.BOLD_DOUBLE_RIGHT)throw new g("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let s=3,o=3.5;e===Ee.type.BOLD_DOUBLE_RIGHT&&(s=-5,o=3),t.fillRect(i+s,a,1,n-a),t.fillRect(i-2,a,o,n-a)}Be.TEXT_FONT={family:M.SANS_SERIF,size:8,weight:P.NORMAL,style:k.NORMAL};class Ee extends L{static get CATEGORY(){return x.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Ee.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Ee.typeString[t]:t;return Object.values(Ee.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new g("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,a=this.width,n=this.top_stave.getX();(this.type===Ee.type.SINGLE_RIGHT||this.type===Ee.type.BOLD_DOUBLE_RIGHT||this.type===Ee.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let s=i-e;switch(this.type){case Ee.type.SINGLE:case Ee.type.SINGLE_LEFT:case Ee.type.SINGLE_RIGHT:a=1;break;case Ee.type.DOUBLE:n-=this.width+2,e-=this.thickness,s+=.5;break;case Ee.type.BRACE:{a=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,l=n,r=i,h=n-a,c=o+s/2,d=h-.9*a,m=o+.2*s,b=n+1.1*a,_=c-.135*s,x=b,g=c+.135*s,p=d,u=r-.2*s,y=h-a,f=u,S=n+.4*a,T=c+.135*s,v=S,w=c-.135*s,C=y,B=m;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(d,m,b,_,h,c),t.bezierCurveTo(x,g,p,u,l,r),t.bezierCurveTo(y,f,S,T,h,c),t.bezierCurveTo(v,w,C,B,n,o),t.fill(),t.stroke();break}case Ee.type.BRACKET:e-=6,i+=6,s=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Ee.type.BOLD_DOUBLE_LEFT:De(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Ee.type.BOLD_DOUBLE_RIGHT:De(t,this.type,n,e,i-this.thickness);break;case Ee.type.THIN_DOUBLE:a=1,s-=this.thickness;break;case Ee.type.NONE:break;default:throw new g("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Ee.type.BRACE&&this.type!==Ee.type.BOLD_DOUBLE_LEFT&&this.type!==Ee.type.BOLD_DOUBLE_RIGHT&&this.type!==Ee.type.NONE&&t.fillRect(n,e,a,s),this.type===Ee.type.THIN_DOUBLE&&t.fillRect(n-3,e,a,s),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;e{e.addToModifierContext(new be);const a=(new Kt).addTickable(e).preFormat(),n=a.getMetrics();return a.setX(t+n.totalLeftPx),t+a.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,a,n,s){const o=i+(s=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},s)).stavePadding,l=e.contextGaps;t.save(),t.setFont(M.SANS_SERIF,8),l.gaps.forEach((e=>{var i,s,l;i=o+e.x1,s=o+e.x2,l="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(l),t.setFillStyle(l),t.setLineWidth(1),t.fillRect(i,a,Math.max(s-i,0),n-a),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${l.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,a){let n={auto_beam:!1,align_rests:!1};"object"==typeof a?n=Object.assign(Object.assign({},n),a):"boolean"==typeof a&&(n.auto_beam=a);const s=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),o=n.auto_beam?Le.applyAndGetBeams(s):[];return(new ke).joinVoices([s]).formatToStave([s],e,{align_rests:n.align_rests,stave:e}),s.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),s.getBoundingBox()}static FormatAndDrawTab(t,e,i,a,n,s,o){let l={auto_beam:s,align_rests:!1};"object"==typeof o?l=Object.assign(Object.assign({},l),o):"boolean"==typeof o&&(l.auto_beam=o);const r=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(n),h=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(a),c=l.auto_beam?Le.applyAndGetBeams(r):[];(new ke).joinVoices([r]).joinVoices([h]).formatToStave([r,h],i,{align_rests:l.align_rests}),r.draw(t,i),h.draw(t,e),c.forEach((e=>e.setContext(t).draw())),new Ee(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((a,n)=>{if(m(a)&&a.isRest()){if(a.getTuplet()&&!i)return;const s=a.getGlyphProps().position.toUpperCase();if("R/4"!==s&&"B/4"!==s)return;if(e||a.getBeam()){const e=a.getKeyProps()[0];if(0===n)e.line=Pe(t,e.line,n,!1);else if(n>0&&nke.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,a=0,n=0;const s=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new g("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:l,map:r}=this.tickContexts;this.minTotalWidth=0,l.forEach((e=>{const l=r[e];l.preFormat(),l.getTickables().length{a+=t.getMetrics().width,n+=t.getTicks().value(),s.push(t.getMetrics().width),o.push(t.getTicks().value())}));const h=l.getWidth();this.minTotalWidth+=h})),this.hasMinTotalWidth=!0;const h=a>0?a/s.length:1/s.length,c=w(s.map((t=>Math.pow(t-h,2)))),d=Math.pow(c/s.length,.5)/h,m=n/o.length,b=w(o.map((t=>Math.pow(t-m,2)))),_=Math.pow(b/o.length,.5)/m,x=Math.max(_,d)*l.length*e,p=e*i;return this.minTotalWidth+Math.max(p,x)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new g("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new g("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new g("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new g("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,C.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=ke.getResolutionMultiplier(t),i=new Map,a=[];t.forEach((t=>{const n=new C(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let s=i.get(t.getStave());if(s||(i.set(t.getStave(),{}),s=i.get(t.getStave())),!(s?s[e]:void 0)){const t=new be;a.push(t),s[e]=t}t.addToModifierContext(s[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:a,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const a={},n=[],s=[],o=ke.getResolutionMultiplier(t);return t.forEach(((t,l)=>{const r=new C(0,o);t.getTickables().forEach((t=>{const o=r.numerator;if(!a[o]){const t=e({tickID:o});s.push(t),a[o]=t,n.push(o)}i(t,a[o],l),r.add(t.getTicks())}))})),{map:a,array:s,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Kt(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,a){const n=this.tickContexts;if(!n)throw new g("NoTickContexts","preFormat requires TickContexts");const{list:s,map:o}=n;this.lossHistory=[],i&&a&&i.forEach((t=>t.setStave(a).preFormat()));let l=0,r=0;this.minTotalWidth=0;let h=0;s.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const a=e.getMaxTicks().value();h+=a;const n=e.getMetrics();l=l+r+n.totalLeftPx,e.setX(l),r=i-n.totalLeftPx}));const{globalSoftmax:c,softmaxFactor:d,maxIterations:m}=this.formatterOptions,b=w(s.map((t=>Math.pow(d,o[t].getMaxTicks().value()/h))));if(this.minTotalWidth=l+r,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const _=o[s[0]],x=o[s[s.length-1]];function p(t){return s.map(((e,i)=>{const a=o[e],n=a.getTickablesByVoice();let l;if(i>0){const e=o[s[i-1]];for(let r=i-1;r>=0;r--){const i=o[s[r]].getTickablesByVoice(),m=[];if(Object.keys(n).forEach((t=>{i[t]&&m.push(t)})),m.length>0){let s=0,o=1/0,r=0;if(m.forEach((t=>{const e=i[t].getTicks().value();e>s&&(l=i[t],s=e);const a=n[t],r=a.getX()-(a.getMetrics().modLeftPx+a.getMetrics().leftDisplacedHeadPx),h=i[t].getMetrics(),c=i[t].getX()+h.notePx+h.modRightPx+h.rightDisplacedHeadPx;o=Math.min(o,r-c)})),o=Math.min(o,a.getX()-(e.getX()+.05*t)),c){const e=h;r=Math.pow(d,s/e)/b*t}else void 0!==l&&(r=l.getVoice().softmax(s)*t);return{expectedDistance:r,maxNegativeShiftPx:o,fromTickable:l}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function y(t){const e=f/2;let i=0;return s.forEach(((a,n)=>{const s=o[a];if(n>0){const e=s.getX(),a=t[n],o=u(a.fromTickable).getX()+a.expectedDistance-(e+i);let l=0;o>0?i+=o:o<0&&(l=Math.min(a.maxNegativeShiftPx,Math.abs(o)),i+=-l),s.setX(e+i)}s.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-s.getX())}))})),x.getX()-_.getX()}const f=t-x.getMetrics().notePx-x.getMetrics().totalRightPx-_.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),C=S.lookupMetric("stave.padding");let B=f;const D=p(B);let E=y(D);if(1===s.length)return 0;const P=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=x&&x.getMaxTickable();if(i){const a=i.getVoice();if(a.getTicksUsed().value()>a.getTotalTicks().value())return 2*vF&&M>0||E+N1;)B-=E-F,N=k(B),A=N-(v-T),E=y(p(B)),M--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const a=t.list[i-1],n=t.map[a],s=t.map[e],o=n.getMetrics(),l=s.getMetrics(),r=n.getX()+o.notePx+o.totalRightPx,h=s.getX()-l.totalLeftPx,c=h-r;this.contextGaps.total+=c,this.contextGaps.gaps.push({x1:r,x2:h}),s.getFormatterMetrics().freedom.left=c,n.getFormatterMetrics().freedom.right=c})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,a,n)=>{const s=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),l=t.getFormatterMetrics(),r=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let h=0;if(a{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,a+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(a),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const a=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,s)=>{const o=i.map[t],l=e>0?i.map[s[e-1]]:void 0,r=et.getFormatterMetrics().space.deviation)));h>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(h)):h<0&&(n=r?Math.min(r.getFormatterMetrics().freedom.right,Math.abs(h)):0),n*=a,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const a=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,a.align_rests),this.createTickContexts(t),this.preFormat(e,a.context,t,a.stave),a.stave&&this.postFormat(),this}formatToStave(t,e,i){const a=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-Be.defaultPadding;return function(...t){ke.DEBUG&&y("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,a)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var Ne;ke.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(Ne||(Ne={}));class Ae extends L{static get CATEGORY(){return x.Tuplet}static get LOCATION_TOP(){return Ne.TOP}static get LOCATION_BOTTOM(){return Ne.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new g("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new g("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=3*V.NOTATION_FONT_SCALE/5,this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||Ae.LOCATION_TOP),ke.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),a=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const s=n(e,t);i=s>i?s:i,a=s0&&(a=Math.min(s,a))}}}else{let t=Ae.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),a=i.checkStave().getYForLine(t)+Ae.metrics.noteHeadOffset;for(let t=0;ta&&(a=e)}}return a+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const a=(t,e)=>t+u(e.getMetrics().width);let n=this.numerator_glyphs.reduce(a,0);this.ratioed&&(n=this.denom_glyphs.reduce(a,n),n+=.32*this.point);const s=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===Ae.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===Ae.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=V.currentMusicFont().lookupMetric("digits.shiftY",0);let l=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,s+l,this.y_pos+this.point/3-2+o),l+=u(e.getMetrics().width)})),this.ratioed){const e=s+l+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),l+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,s+l,this.y_pos+this.point/3-2+o),l+=u(e.getMetrics().width)}))}}}function Fe(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Me="L",Oe="R",Re="B";class Le extends L{static get CATEGORY(){return x.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new C).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new C(3,i)];if(i>4)return[new C(2,i)];if(i<=4)return[new C(1,i)]}return[new C(1,4)]}static applyAndGetBeams(t,e,i){return Le.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new C(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new g("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),a=t;let n=0,s=[],o=[];function l(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new C(0,1);a.forEach((a=>{if(t=[],a.shouldIgnoreTicks())return s.push(o),void(o=t);o.push(a);const r=i[n].clone(),h=(c=o,c.reduce(((t,e)=>e.getTicks().clone().add(t)),new C(0,1))).add(e);var c;const d=V.durationToNumber(a.getDuration())<8;if(d&&a.getTuplet()&&(r.numerator*=2),h.greaterThan(r)){if(!d){const e=o.pop();e&&t.push(e)}s.push(o);do{e=h.subtract(i[n]),l()}while(e.greaterThanEquals(i[n]));o=t}else h.equals(r)&&(s.push(o),e=new C(0,1),o=t,l())})),o.length>0&&s.push(o)}(),function(){const t=[];s.forEach((i=>{let a=[];i.forEach(((i,n,s)=>{const o=0===n||n===s.length-1,l=s[n-1],r=!e.beam_rests&&i.isRest(),h=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let c=!1;if(e.maintain_stem_directions&&l&&!i.isRest()&&!l.isRest()){const t=l.getStemDirection();c=i.getStemDirection()!==t}const d=parseInt(i.getDuration(),10)<8;r||h||c||d?(a.length>0&&t.push(a),a=c?[i]:[]):a.push(i)})),a.length>0&&t.push(a)})),s=t}(),s.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const r=s.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),h=function(){const t=[];return s.forEach((e=>{let i;e.forEach((e=>{const a=e.getTuplet();a&&i!==a&&(i=a,t.push(i))}))})),t}(),c=[];return r.forEach((t=>{const i=new Le(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),c.push(i)})),h.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?Ne.BOTTOM:Ne.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new g("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,a;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&m(t[0]))n=Fe(t);else if(e&&_(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,a){return i+(t-e)*a}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:a,slope_iterations:n,slope_cost:s}}=this,o=t[0],l=function(t,e){const i=t.getStemExtents().topY,a=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-a)}(o,t[t.length-1]),r=(i-a)/n;let h=Number.MAX_VALUE,c=0,d=0;for(let n=a;n<=i;n+=r){let i=0,a=0;for(let s=1;sn)&&(r=n,o=Math.min(...a.getYs()),l=a.getBeamCount())}let h=s/t.length;const c=a+l*(1.5*i),d=o+c*-e;e===nt.DOWN&&hd&&(h=o-c),n?(e===nt.DOWN&&h>n||e===nt.UP&&h=8&&(c=-1!==this.break_on_indices.indexOf(r),this.render_options.secondary_break_ticks&&l>=this.render_options.secondary_break_ticks&&(l=0,c=!0));const d=h.getIntrinsicTicks(){const i=e.getStem();if(i){const a=e.getStemX();i.setNoteHeadXBounds(a,a),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let a=this.getBeamYToDraw();const n=i.getStemX(),s=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=a),o?this.matchSuccess():this.matchFail(a),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ge("Evaluating rule function:",t),!t)throw new g("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ge(i),new g("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const a=[];return e.matches=a,e.results&&e.results.forEach((t=>a.push(Ye(t)))),i.run&&e.success&&i.run({matches:a}),e}}function je(...t){Qe.DEBUG&&y("Vex.Flow.EasyScore",t)}He.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=u(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),a=u(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:s,dots:o,type:l}=this.piece,r=et.accidentals,h=n.map((t=>{var e;return t.key+(r.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),c="auto"===i,d="g"==(null==l?void 0:l.toLowerCase())?t.GhostNote({duration:s,dots:o}):t.StaveNote({keys:h,duration:s,dots:o,type:l,clef:a,auto_stem:c});c||d.setStemDirection("up"===i?nt.UP:nt.DOWN);const m=[];n.forEach(((e,i)=>{const a=e.accid;if("string"==typeof a){const e=t.Accidental({type:a});d.addModifier(e,i),m.push(e)}else m.push(void 0)}));for(let t=0;tt(e,d,this))),this.elements.notes.push(d),this.elements.accidentals.push(m),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const a=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(a);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,yt.easyScoreHook,Lt.easyScoreHook],throwOnError:!1},t),{factory:a,builder:n}),this.factory=a,this.builder=n,this.grammar=new Xe(this.builder),this.parser=new He(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new g("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends zt{static get CATEGORY(){return x.GhostNote}constructor(t){if(!t)throw new g("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new g("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=li.type.TEXT&&t<=li.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,a=!1;this.notes.forEach(((n,s,o)=>{var l;a=!a;const r=n.getAbsoluteX(),h=n.checkStave().getYForBottomText(this.line+3);if(r{var a;e=!e;const n=i.checkStave(),s=i.getAbsoluteX(),o=n.getYForBottomText(this.line+3),l=null!==(a=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`))&&void 0!==a?a:V.NOTATION_FONT_SCALE;let r=0;e?this.custom_depress_text?(r=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,s-r/2,o)):oi("pedal_depress",t,s,o,l):this.custom_release_text?(r=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,s-r/2,o)):oi("pedal_release",t,s,o,l)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){li.DEBUG&&y("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===li.type.BRACKET||this.type===li.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===li.type.TEXT&&this.drawText(),t.restore()}}li.DEBUG=!1,li.TEXT_FONT={family:M.SERIF,size:12,weight:P.BOLD,style:k.ITALIC},li.GLYPHS={pedal_depress:{code:"keyboardPedalPed"},pedal_release:{code:"keyboardPedalUp"}},li.type={TEXT:1,BRACKET:2,MIXED:3},li.typeString={text:li.type.TEXT,bracket:li.type.BRACKET,mixed:li.type.MIXED};const ri={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class hi extends ei{static get CATEGORY(){return x.RepeatNote}constructor(t,e,i){super(new Z(ri[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function ci(t,e,i,a,n,s,o){t.beginPath(),t.moveTo(e,i),t.lineTo(a,n),t.lineTo(s,o),t.lineTo(e,i),t.closePath(),t.fill()}class di extends L{static get CATEGORY(){return x.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:di.TextVerticalPosition.TOP,text_justification:di.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new g("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new g("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const a=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,s=e.y,o=i.x,l=i.y,r=Math.sqrt((o-n)*(o-n)+(l-s)*(l-s)),h=(r-this.render_options.arrowhead_length/3)/r;let c,d,m,b;this.render_options.draw_end_arrow||a?(c=Math.round(n+(o-n)*h),d=Math.round(s+(l-s)*h)):(c=o,d=l),this.render_options.draw_start_arrow||a?(m=n+(o-n)*(1-h),b=s+(l-s)*(1-h)):(m=n,b=s),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(m,b),t.lineTo(c,d),t.stroke(),t.closePath();const _=Math.atan2(l-s,o-n),x=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let g,p,u,y,f,S;(this.render_options.draw_end_arrow||a)&&(g=_+Math.PI+this.render_options.arrowhead_angle,u=o+Math.cos(g)*x,y=l+Math.sin(g)*x,p=_+Math.PI-this.render_options.arrowhead_angle,f=o+Math.cos(p)*x,S=l+Math.sin(p)*x,ci(t,u,y,o,l,f,S)),(this.render_options.draw_start_arrow||a)&&(g=_+this.render_options.arrowhead_angle,u=n+Math.cos(g)*x,y=s+Math.sin(g)*x,p=_-this.render_options.arrowhead_angle,f=n+Math.cos(p)*x,S=s+Math.sin(p)*x,ci(t,u,y,n,s,f,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,a=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},s={x:0,y:0};this.first_indices.forEach(((o,l)=>{const r=this.last_indices[l];n=e.getModifierStartXY(2,o),s=i.getModifierStartXY(1,r);const h=n.y>s.y;n.x+=e.getMetrics().modRightPx+a.padding_left,s.x-=i.getMetrics().modLeftPx+a.padding_right;const c=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=c+a.padding_left);i.getKeyProps()[r].displaced&&-1===i.getStemDirection()&&(s.x-=c+a.padding_right),n.y+=h?-3:1,s.y+=h?2:0,this.drawArrowLine(t,n,s)})),t.restore();const o=t.measureText(this.text).width,l=a.text_justification;let r=0;if(l===di.TextJustification.LEFT)r=n.x;else if(l===di.TextJustification.CENTER){r=(s.x-n.x)/2+n.x-o/2}else l===di.TextJustification.RIGHT&&(r=s.x-o);let h=0;const c=a.text_position_vertical;return c===di.TextVerticalPosition.TOP?h=e.checkStave().getYForTopText():c===di.TextVerticalPosition.BOTTOM&&(h=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,r,h),t.restore(),this}}di.TEXT_FONT=Object.assign({},L.TEXT_FONT),di.TextVerticalPosition={TOP:1,BOTTOM:2},di.TextJustification=oe;class mi extends L{static get CATEGORY(){return x.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new g("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),a=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),s=this.getContext();return n.voices.forEach((t=>{t.setContext(s).setStave(a).getTickables().forEach((t=>t.setStave(a))),this.partVoices.push(t)})),this.partStaves.push(a),this.partStaveInfos.push(n),a}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new ke(t);this.formatter=i;let a=this.options.y,n=0;const s=[];this.partStaves.forEach(((t,e)=>{a+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(a),a+=t.space(this.partStaveInfos[e].spaceBelow),a+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(s.push({y:a,stave:t}),a+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Be.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-Be.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class bi extends zt{static get CATEGORY(){return x.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new g("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:a}}=this,n=this.checkContext(),s=null==e&&a;if(i.flag&&s){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{l(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),a=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(a&&n){const a=function(t,e,i,a){const n=1!==a,s=-1!==a,o=i.getSpacingBetweenLines(),l=i.getNumLines(),r=[];return e.forEach((e=>{const h=e.indexOf(l)>-1,c=e.indexOf(1)>-1;if(n&&c||s&&h)return;1===e.length&&e.push(e[0]);const d=[];e.forEach(((e,n,s)=>{const r=1===e,h=e===l;let c=i.getYForLine(e-1);0!==n||r?n!==s.length-1||h||(c+=o/2-1):c-=o/2-1,d.push(c),1===a&&r?d.push(t-2):-1===a&&h&&d.push(t+2)})),r.push(d.sort(((t,e)=>t-e)))})),r}(e,function(t,e){const i=[];let a=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(a),a=[]):a.push(n);return a.length>0&&i.push(a),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),a.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),a=this.ys;for(let n=0;n{const i=yi.GLYPHS[e];if(!i)throw new g("Invalid dynamics character: "+e);const a=u(this.render_options.glyph_font_size),n=new Z(i.code,a,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);ui("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,a)=>{const n=this.sequence[a];t.render(this.checkContext(),i,e),i+=yi.GLYPHS[n].width}))}}yi.DEBUG=!1;class fi extends vt{static get CATEGORY(){return x.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new ve(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends L{static get CATEGORY(){return x.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,a=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=a-i,function(...t){Si.DEBUG&&y("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",a,"y:",e),de.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&y("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:a}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new g("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=qt(document.getElementById(t))?re.Backends.CANVAS:re.Backends.SVG}this.context=re.buildContext(t,n,e,i,a)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),a=new Be(i.x,i.y,i.width,i.options);return this.staves.push(a),a.setContext(this.context),this.stave=a,a}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),a=new _i(i.x,i.y,i.width,i.options);return this.staves.push(a),a.setContext(this.context),this.stave=a,a}StaveNote(t){const e=new Ut(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const a=new ei(t,e,i);return this.stave&&a.setStave(this.stave),a.setContext(this.context),this.renderQ.push(a),a}RepeatNote(t,e,i){const a=new hi(t,e,i);return this.stave&&a.setStave(this.stave),a.setContext(this.context),this.renderQ.push(a),a}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new ye(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new At(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new We(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new fi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new ai(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new bi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new at(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ct.CENTER,vJustify:dt.BOTTOM},t),i=new mt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Ot;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new yt(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),a=new $t(t);return a.setPosition(i.position),i.upperAccidental&&a.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&a.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&a.setDelayed(i.delayed),a.setContext(this.context),a}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new yi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Lt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new he(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Kt}ModifierContext(){return new be}MultiMeasureRest(t){const e=u(t.number_of_measures,"NoNumberOfMeasures"),i=new si(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Ee(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new ke(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new Ae(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,a,n,s;const o=new Le(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(a=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==a?a:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(s=t.options)||void 0===s?void 0:s.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ue(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Gt({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const a=new di({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&a.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&a.setFont(t.options.font),a.setContext(this.context),this.renderQ.push(a),a}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new pi({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new mi(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new li(e.notes);return i.setType(li.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},L.TEXT_FONT);class wi extends bi{static get CATEGORY(){return x.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${M.SANS_SERIF}`}),this.updateWidth()}}class Ci{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new g("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;ea?Di.SLIDE_DOWN:Di.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new g("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,a=t.first_ys,n=t.last_x_px,s=t.direction;if(s!==Di.SLIDE_UP&&s!==Di.SLIDE_DOWN)throw new g("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new g("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),a=Number(t);if(a<0)throw new g("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+a}getNoteForFret(t,e){const i=this.getValueForFret(t,e),a=Math.floor(i/12),n=i%12;return`${V.integerToNote(n)}/${a}`}}var ki=function(t,e,i,a){return new(i||(i=Promise))((function(n,s){function o(t){try{r(a.next(t))}catch(t){s(t)}}function l(t){try{r(a.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,l)}r((a=a.apply(t,e||[])).next())}))};class Ni{static get BUILD(){return{VERSION:"4.2.2",ID:"7ad933bdf12b4137ce04d3f332a838887d08a595",DATE:"2023-07-03T19:56:22.952Z"}}static setMusicFont(...t){const e=t.map((t=>M.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return ki(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static getMusicFontStack(){return V.MUSIC_FONT_STACK}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}Ni.Accidental=at,Ni.Annotation=mt,Ni.Articulation=yt,Ni.Barline=Nt,Ni.BarNote=At,Ni.Beam=Le,Ni.Bend=Ft,Ni.BoundingBox=D,Ni.BoundingBoxComputation=E,Ni.CanvasContext=Zt,Ni.ChordSymbol=Ot,Ni.Clef=_e,Ni.ClefNote=We,Ni.Crescendo=ze,Ni.Curve=Ue,Ni.Dot=Rt,Ni.EasyScore=Qe,Ni.Element=L,Ni.Factory=vi,Ni.Font=M,Ni.Formatter=ke,Ni.Fraction=C,Ni.FretHandFinger=Lt,Ni.GhostNote=ti,Ni.Glyph=Z,Ni.GlyphNote=ei,Ni.GraceNote=ii,Ni.GraceNoteGroup=Xt,Ni.GraceTabNote=wi,Ni.KeyManager=Ci,Ni.KeySignature=xe,Ni.KeySigNote=ai,Ni.Modifier=tt,Ni.ModifierContext=be,Ni.MultiMeasureRest=si,Ni.Music=et,Ni.Note=vt,Ni.NoteHead=Wt,Ni.NoteSubGroup=Vt,Ni.Ornament=$t,Ni.Parenthesis=Jt,Ni.Parser=He,Ni.PedalMarking=li,Ni.Registry=R,Ni.RenderContext=ft,Ni.Renderer=re,Ni.RepeatNote=hi,Ni.Repetition=ge,Ni.Stave=Be,Ni.StaveConnector=Ee,Ni.StaveHairpin=Bi,Ni.StaveLine=di,Ni.StaveModifier=kt,Ni.StaveNote=Ut,Ni.StaveTempo=ue,Ni.StaveText=fe,Ni.StaveTie=Gt,Ni.Stem=nt,Ni.StringNumber=he,Ni.Stroke=ce,Ni.SVGContext=ae,Ni.System=mi,Ni.TabNote=bi,Ni.TabSlide=Di,Ni.TabStave=_i,Ni.TabTie=Yt,Ni.TextBracket=pi,Ni.TextDynamics=yi,Ni.TextFormatter=ht,Ni.TextNote=ye,Ni.TickContext=Kt,Ni.TimeSignature=ve,Ni.TimeSigNote=fi,Ni.Tremolo=Ei,Ni.Tuning=Pi,Ni.Tuplet=Ae,Ni.Vibrato=de,Ni.VibratoBracket=Si,Ni.Voice=jt,Ni.Volta=Se,Ni.AnnotationHorizontalJustify=ct,Ni.AnnotationVerticalJustify=dt,Ni.ChordSymbolHorizontalJustify=Bt,Ni.ChordSymbolVerticalJustify=Dt,Ni.SymbolTypes=Et,Ni.SymbolModifiers=Pt,Ni.CurvePosition=Ie,Ni.FontWeight=P,Ni.FontStyle=k,Ni.ModifierPosition=J,Ni.RendererBackends=ne,Ni.RendererLineEndType=se,Ni.BarlineType=Ct,Ni.StaveModifierPosition=wt,Ni.VoltaType=le,Ni.TextBracketPosition=gi,Ni.TextJustification=oe,Ni.VoiceMode=Ht;const Ai={glyphs:{bracketTop:{x_min:0,x_max:469,y_min:0,y_max:295,ha:295,o:"m 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z"},bracketBottom:{x_min:0,x_max:469,y_min:-295,y_max:0,ha:295,o:"m 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z"},barlineTick:{x_min:0,x_max:36,y_min:868,y_max:1120,ha:252,o:"m 52 1250 l 52 1613 l 0 1613 l 0 1250 z"},breathMarkTick:{x_min:0,x_max:500,y_min:0,y_max:502,ha:502,o:"m 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z"},segno:{x_min:4,x_max:550,y_min:-27,y_max:759,ha:786,o:"m 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z"},coda:{x_min:-4,x_max:955,y_min:-158,y_max:898,ha:1056,o:"m 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z"},gClef:{x_min:0,x_max:671,y_min:-658,y_max:1098,ha:1756,o:"m 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z"},cClef:{x_min:0,x_max:699,y_min:-506,y_max:506,ha:1012,o:"m 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z"},fClef:{x_min:-5,x_max:684,y_min:-635,y_max:262,ha:897,o:"m 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z"},unpitchedPercussionClef1:{x_min:0,x_max:382,y_min:-250,y_max:250,ha:500,o:"m 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z"},"6stringTabClef":{x_min:-3,x_max:408,y_min:-748,y_max:764,ha:1512,o:"m 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z"},timeSig0:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z"},timeSig1:{x_min:20,x_max:314,y_min:-250,y_max:251,ha:501,o:"m 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z"},timeSig2:{x_min:20,x_max:426,y_min:-257,y_max:254,ha:511,o:"m 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z"},timeSig3:{x_min:20,x_max:401,y_min:-251,y_max:249,ha:500,o:"m 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z"},timeSig4:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z"},timeSig5:{x_min:20,x_max:383,y_min:-251,y_max:246,ha:497,o:"m 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z"},timeSig6:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z"},timeSig7:{x_min:20,x_max:421,y_min:-250,y_max:249,ha:499,o:"m 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z"},timeSig8:{x_min:20,x_max:416,y_min:-259,y_max:259,ha:518,o:"m 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z"},timeSig9:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z"},timeSigCommon:{x_min:5,x_max:424,y_min:-249,y_max:251,ha:500,o:"m 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z"},timeSigCutCommon:{x_min:0,x_max:418,y_min:-359,y_max:361,ha:720,o:"m 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z"},timeSigPlus:{x_min:-1,x_max:499,y_min:-250,y_max:250,ha:500,o:"m 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z"},timeSigPlusSmall:{x_min:-1,x_max:255,y_min:-133,y_max:123,ha:256,o:"m 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z"},timeSigMinus:{x_min:0,x_max:448,y_min:-35,y_max:40,ha:75,o:"m 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z"},timeSigParensRight:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z"},timeSigParensRightSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z"},timeSigParensLeft:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z"},timeSigParensLeftSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z"},noteheadDoubleWhole:{x_min:0,x_max:599,y_min:-155,y_max:155,ha:310,o:"m 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z"},noteheadWhole:{x_min:0,x_max:422,y_min:-125,y_max:125,ha:250,o:"m 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z"},noteheadHalf:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z"},noteheadBlack:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z"},noteheadXDoubleWhole:{x_min:0,x_max:546,y_min:-155,y_max:155,ha:310,o:"m 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z"},noteheadXWhole:{x_min:0,x_max:377,y_min:-125,y_max:125,ha:250,o:"m 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z"},noteheadXHalf:{x_min:0,x_max:334,y_min:-125,y_max:125,ha:250,o:"m 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z"},noteheadXBlack:{x_min:0,x_max:290,y_min:-125,y_max:125,ha:250,o:"m 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:422,y_min:-155,y_max:155,ha:310,o:"m 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z"},noteheadCircleXWhole:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z"},noteheadCircleXHalf:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z"},noteheadCircleX:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:603,y_min:-218,y_max:213,ha:431,o:"m 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z"},noteheadCircledWhole:{x_min:0,x_max:437,y_min:-225,y_max:211,ha:436,o:"m 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z"},noteheadCircledHalf:{x_min:-18,x_max:311,y_min:-162,y_max:167,ha:329,o:"m 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z"},noteheadCircledBlack:{x_min:-21,x_max:321,y_min:-171,y_max:167,ha:338,o:"m 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:416,y_min:-190,y_max:198,ha:388,o:"m 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z"},noteheadSquareWhite:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z"},noteheadSquareBlack:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z"},noteheadTriangleDownWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z"},noteheadTriangleDownHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z"},noteheadTriangleDownBlack:{x_min:0,x_max:292,y_min:-125,y_max:125,ha:250,o:"m 207 -180 l 420 180 l 0 180 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z"},noteheadTriangleUpWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z"},noteheadTriangleUpHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z"},noteheadTriangleUpBlack:{x_min:0,x_max:293,y_min:-125,y_max:125,ha:250,o:"m 422 -180 l 207 180 l 0 -180 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:596,y_min:-179,y_max:168,ha:347,o:"m 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z"},noteheadSlashedWhole1:{x_min:-22,x_max:433,y_min:-157,y_max:148,ha:305,o:"m 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z"},noteheadSlashedHalf1:{x_min:-67,x_max:386,y_min:-142,y_max:160,ha:302,o:"m 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z"},noteheadSlashedBlack1:{x_min:-80,x_max:375,y_min:-165,y_max:167,ha:332,o:"m 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:596,y_min:-178,y_max:169,ha:347,o:"m 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z"},noteheadSlashedWhole2:{x_min:-18,x_max:436,y_min:-154,y_max:151,ha:305,o:"m 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z"},noteheadSlashedHalf2:{x_min:-73,x_max:380,y_min:-134,y_max:168,ha:302,o:"m 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z"},noteheadSlashedBlack2:{x_min:-79,x_max:376,y_min:-164,y_max:168,ha:332,o:"m 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:432,y_min:-155,y_max:155,ha:310,o:"m 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z"},noteheadDiamondWhole:{x_min:0,x_max:270,y_min:-125,y_max:125,ha:250,o:"m 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z"},noteheadDiamondHalf:{x_min:0,x_max:251,y_min:-125,y_max:125,ha:250,o:"m 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z"},noteheadDiamondBlack:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z"},noteheadParenthesis:{x_min:-73,x_max:368,y_min:-180,y_max:182,ha:362,o:"m 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z"},noteheadParenthesisRight:{x_min:-36,x_max:73,y_min:-181,y_max:181,ha:362,o:"m -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z"},noteheadParenthesisLeft:{x_min:0,x_max:109,y_min:-181,y_max:181,ha:362,o:"m 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z"},noteheadMoonBlack:{x_min:0,x_max:315,y_min:-125,y_max:125,ha:250,o:"m 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 -180 l 0 180 l 0 -180 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 180 l 0 -180 l 488 -180 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:278,y_min:-125,y_max:125,ha:250,o:"m 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z"},tremolo1:{x_min:-150,x_max:150,y_min:-93,y_max:94,ha:187,o:"m 216 -45 l 216 135 l -216 46 l -216 -134 z"},flag8thUp:{x_min:0,x_max:264,y_min:-810,y_max:9,ha:819,o:"m 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z"},flag8thDown:{x_min:0,x_max:306,y_min:-14,y_max:808,ha:822,o:"m 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z"},flag16thUp:{x_min:0,x_max:279,y_min:-813,y_max:2,ha:815,o:"m 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z"},flag16thDown:{x_min:0,x_max:291,y_min:-9,y_max:812,ha:821,o:"m 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z"},flag32ndUp:{x_min:0,x_max:261,y_min:-812,y_max:149,ha:961,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag32ndDown:{x_min:0,x_max:273,y_min:-172,y_max:812,ha:984,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z"},flag64thUp:{x_min:0,x_max:261,y_min:-812,y_max:347,ha:1159,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag64thDown:{x_min:0,x_max:273,y_min:-376,y_max:812,ha:1188,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z"},flag128thUp:{x_min:0,x_max:261,y_min:-812,y_max:533,ha:1345,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag128thDown:{x_min:0,x_max:273,y_min:-580,y_max:812,ha:1392,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z"},accidentalFlat:{x_min:0,x_max:226,y_min:-175,y_max:439,ha:614,o:"m 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z"},accidentalNatural:{x_min:0,x_max:168,y_min:-335,y_max:341,ha:676,o:"m 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z"},accidentalSharp:{x_min:0,x_max:249,y_min:-348,y_max:350,ha:698,o:"m 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z"},accidentalDoubleSharp:{x_min:0,x_max:247,y_min:-125,y_max:127,ha:252,o:"m 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z"},accidentalDoubleFlat:{x_min:0,x_max:411,y_min:-175,y_max:437,ha:612,o:"m 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z"},accidentalParensLeft:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z"},accidentalParensRight:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z"},accidentalQuarterToneFlatStein:{x_min:1,x_max:227,y_min:-175,y_max:439,ha:614,o:"m 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:1,x_max:466,y_min:-175,y_max:439,ha:614,o:"m 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:179,y_min:-353,y_max:307,ha:660,o:"m 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z"},accidentalThreeQuarterTonesSharpStein:{x_min:3,x_max:317,y_min:-347,y_max:369,ha:716,o:"m 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z"},accidentalBuyukMucennebFlat:{x_min:1,x_max:287,y_min:-174,y_max:438,ha:612,o:"m 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:341,y_min:-350,y_max:348,ha:698,o:"m 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z"},accidentalBakiyeFlat:{x_min:-1,x_max:286,y_min:-175,y_max:439,ha:614,o:"m 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z"},accidentalKomaSharp:{x_min:0,x_max:229,y_min:-337,y_max:322,ha:659,o:"m 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z"},accidentalKucukMucennebSharp:{x_min:-1,x_max:339,y_min:-338,y_max:321,ha:659,o:"m 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z"},accidentalKoron:{x_min:0,x_max:300,y_min:-472,y_max:157,ha:629,o:"m 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z"},accidentalSori:{x_min:0,x_max:421,y_min:-318,y_max:328,ha:646,o:"m 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z"},articAccentAbove:{x_min:0,x_max:339,y_min:1,y_max:245,ha:244,o:"m 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z"},articAccentBelow:{x_min:0,x_max:339,y_min:-244,y_max:0,ha:244,o:"m 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z"},articTenutoAbove:{x_min:-1,x_max:338,y_min:0,y_max:48,ha:48,o:"m 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z"},articTenutoBelow:{x_min:-1,x_max:338,y_min:-48,y_max:0,ha:48,o:"m 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z"},articStaccatoAbove:{x_min:0,x_max:84,y_min:0,y_max:84,ha:84,o:"m 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z"},articStaccatoBelow:{x_min:0,x_max:84,y_min:-84,y_max:0,ha:84,o:"m 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z"},articStaccatissimoAbove:{x_min:1,x_max:100,y_min:-2,y_max:293,ha:295,o:"m 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z"},articStaccatissimoBelow:{x_min:1,x_max:100,y_min:-295,y_max:0,ha:295,o:"m 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z"},articMarcatoAbove:{x_min:-1,x_max:235,y_min:-1,y_max:253,ha:254,o:"m 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z"},articMarcatoBelow:{x_min:-1,x_max:235,y_min:-254,y_max:0,ha:254,o:"m 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z"},fermataAbove:{x_min:3,x_max:605,y_min:-3,y_max:329,ha:332,o:"m 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z"},fermataBelow:{x_min:3,x_max:605,y_min:-332,y_max:0,ha:332,o:"m 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z"},fermataLongAbove:{x_min:0,x_max:603,y_min:-1,y_max:333,ha:334,o:"m 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z"},fermataLongBelow:{x_min:0,x_max:603,y_min:-333,y_max:1,ha:334,o:"m 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:0,y_max:408,ha:408,o:"m 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z"},fermataVeryLongBelow:{x_min:0,x_max:715,y_min:-408,y_max:0,ha:408,o:"m 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z"},fermataVeryShortAbove:{x_min:0,x_max:726,y_min:0,y_max:449,ha:449,o:"m 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z"},fermataVeryShortBelow:{x_min:0,x_max:726,y_min:-449,y_max:0,ha:449,o:"m 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z"},fermataShortAbove:{x_min:0,x_max:604,y_min:0,y_max:341,ha:341,o:"m 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z"},fermataShortBelow:{x_min:0,x_max:604,y_min:-341,y_max:0,ha:341,o:"m 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z"},breathMarkComma:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},breathMarkUpbow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},caesura:{x_min:0,x_max:384,y_min:-1,y_max:532,ha:533,o:"m 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z"},caesuraCurved:{x_min:0,x_max:373,y_min:0,y_max:530,ha:530,o:"m 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z"},restMaxima:{x_min:0,x_max:381,y_min:-249,y_max:250,ha:499,o:"m 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:0,y_max:250,ha:250,o:"m 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z"},restWhole:{x_min:0,x_max:282,y_min:-135,y_max:9,ha:144,o:"m 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z"},restWholeLegerLine:{x_min:-117,x_max:399,y_min:-135,y_max:20,ha:155,o:"m -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z"},restHalf:{x_min:0,x_max:282,y_min:-2,y_max:142,ha:144,o:"m 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z"},restHalfLegerLine:{x_min:-117,x_max:399,y_min:-13,y_max:142,ha:155,o:"m 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z"},restQuarter:{x_min:1,x_max:270,y_min:-375,y_max:373,ha:748,o:"m 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z"},rest8th:{x_min:0,x_max:247,y_min:-251,y_max:174,ha:425,o:"m 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z"},rest16th:{x_min:0,x_max:320,y_min:-500,y_max:179,ha:679,o:"m 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z"},rest32nd:{x_min:0,x_max:363,y_min:-500,y_max:426,ha:926,o:"m 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z"},rest64th:{x_min:0,x_max:423,y_min:-753,y_max:430,ha:1183,o:"m 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z"},rest128th:{x_min:0,x_max:485,y_min:-750,y_max:689,ha:1439,o:"m 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z"},dynamicPiano:{x_min:-89,x_max:366,y_min:-142,y_max:274,ha:416,o:"m 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z"},dynamicMezzo:{x_min:-20,x_max:446,y_min:-10,y_max:274,ha:284,o:"m 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z"},dynamicForte:{x_min:-141,x_max:364,y_min:-152,y_max:444,ha:596,o:"m 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z"},dynamicRinforzando:{x_min:-20,x_max:277,y_min:0,y_max:274,ha:274,o:"m 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z"},dynamicSforzando:{x_min:0,x_max:229,y_min:-10,y_max:273,ha:283,o:"m 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z"},dynamicZ:{x_min:-30,x_max:244,y_min:-10,y_max:268,ha:278,o:"m 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z"},ornamentTrill:{x_min:0,x_max:521,y_min:-10,y_max:390,ha:400,o:"m 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z"},ornamentTurn:{x_min:0,x_max:460,y_min:0,y_max:218,ha:218,o:"m 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z"},ornamentTurnSlash:{x_min:0,x_max:460,y_min:-90,y_max:306,ha:396,o:"m 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z"},ornamentMordent:{x_min:1,x_max:729,y_min:-73,y_max:319,ha:392,o:"m 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z"},ornamentShortTrill:{x_min:0,x_max:725,y_min:0,y_max:245,ha:245,o:"m 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z"},ornamentTremblement:{x_min:1,x_max:985,y_min:0,y_max:244,ha:244,o:"m 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1119,y_min:0,y_max:481,ha:481,o:"m 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:2,x_max:1150,y_min:-367,y_max:245,ha:612,o:"m 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1048,y_min:-367,y_max:331,ha:698,o:"m 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:949,y_min:0,y_max:381,ha:381,o:"m 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1278,y_min:0,y_max:247,ha:247,o:"m 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1277,y_min:-62,y_max:333,ha:395,o:"m 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:859,y_min:-222,y_max:246,ha:468,o:"m 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z"},brassScoop:{x_min:1,x_max:320,y_min:-373,y_max:13,ha:386,o:"m 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z"},brassDoitMedium:{x_min:0,x_max:489,y_min:-40,y_max:346,ha:386,o:"m 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z"},brassFallLipShort:{x_min:1,x_max:293,y_min:-345,y_max:42,ha:387,o:"m 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z"},brassLiftMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z"},brassFallRoughMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z"},brassBend:{x_min:0,x_max:392,y_min:0,y_max:282,ha:282,o:"m 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z"},brassMuteClosed:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},brassMuteOpen:{x_min:0,x_max:304,y_min:0,y_max:304,ha:304,o:"m 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z"},brassFlip:{x_min:0,x_max:379,y_min:0,y_max:282,ha:282,o:"m 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z"},brassJazzTurn:{x_min:0,x_max:620,y_min:0,y_max:245,ha:245,o:"m 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z"},brassSmear:{x_min:1,x_max:306,y_min:0,y_max:170,ha:170,o:"m 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z"},stringsDownBow:{x_min:0,x_max:312,y_min:0,y_max:318,ha:318,o:"m 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z"},stringsUpBow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},stringsHarmonic:{x_min:0,x_max:200,y_min:0,y_max:200,ha:200,o:"m 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},keyboardPedalPed:{x_min:0,x_max:1019,y_min:-8,y_max:555,ha:563,o:"m 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z"},keyboardPedalUp:{x_min:0,x_max:450,y_min:0,y_max:450,ha:450,o:"m 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z"},pictChokeCymbal:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},wiggleArpeggiatoUp:{x_min:-33,x_max:292,y_min:0,y_max:119,ha:119,o:"m 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z"},arrowheadBlackUp:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z"},arrowheadBlackDown:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z"},arpeggiatoUp:{x_min:1,x_max:229,y_min:7,y_max:1511,ha:1504,o:"m 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z"},arpeggiatoDown:{x_min:1,x_max:229,y_min:-4,y_max:1500,ha:1504,o:"m 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z"},repeat1Bar:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z"},repeat2Bars:{x_min:0,x_max:762,y_min:-250,y_max:279,ha:529,o:"m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z"},repeat4Bars:{x_min:0,x_max:1232,y_min:-250,y_max:279,ha:529,o:"m 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z"},repeatBarSlash:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z"},csymDiminished:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z"},csymHalfDiminished:{x_min:-16,x_max:488,y_min:-15,y_max:489,ha:504,o:"m 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z"},csymAugmented:{x_min:0,x_max:395,y_min:1,y_max:396,ha:395,o:"m 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z"},csymMajorSeventh:{x_min:0,x_max:558,y_min:1,y_max:477,ha:476,o:"m 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z"},csymMinor:{x_min:0,x_max:325,y_min:216,y_max:260,ha:44,o:"m 468 374 l 0 374 l 0 311 l 468 311 z"},csymParensLeftTall:{x_min:1,x_max:185,y_min:0,y_max:997,ha:997,o:"m 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z"},csymParensRightTall:{x_min:-20,x_max:164,y_min:0,y_max:997,ha:997,o:"m -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z"},csymBracketLeftTall:{x_min:0,x_max:155,y_min:0,y_max:1e3,ha:1e3,o:"m 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z"},csymBracketRightTall:{x_min:1,x_max:156,y_min:0,y_max:1e3,ha:1e3,o:"m 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:122,y_min:0,y_max:993,ha:993,o:"m 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z"},csymParensRightVeryTall:{x_min:-15,x_max:107,y_min:0,y_max:993,ha:993,o:"m -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:999,y_min:0,y_max:1e3,ha:1e3,o:"m 1439 1380 l 1377 1440 l 0 60 l 62 0 z"},accSagittal5v7KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z"},accSagittal5v7KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z"},accSagittal5CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z"},accSagittal5CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z"},accSagittal7CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z"},accSagittal7CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z"},accSagittal25SmallDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z"},accSagittal25SmallDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z"},accSagittal35MediumDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z"},accSagittal35MediumDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal11MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z"},accSagittal11MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z"},accSagittal11LargeDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal11LargeDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp25SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z"},accSagittalFlat25SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z"},accSagittalSharp7CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z"},accSagittalFlat7CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp5CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat5CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z"},accSagittalSharp5v7kDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z"},accSagittalFlat5v7kUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z"},accSagittalSharp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z"},accSagittalFlat:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z"},accSagittalSharp5v7kUp:{x_min:0,x_max:312,y_min:-361,y_max:172,ha:533,o:"m 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z"},accSagittalFlat5v7kDown:{x_min:0,x_max:312,y_min:-172,y_max:361,ha:533,o:"m 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z"},accSagittalSharp5CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z"},accSagittalFlat5CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z"},accSagittalSharp7CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z"},accSagittalFlat7CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp25SUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z"},accSagittalFlat25SDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z"},accSagittalSharp35MUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z"},accSagittalFlat35MDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z"},accSagittalSharp11MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z"},accSagittalFlat11MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z"},accSagittalSharp11LUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11LDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp35LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat35LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp25SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z"},accSagittalDoubleFlat25SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z"},accSagittalDoubleSharp7CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z"},accSagittalDoubleFlat7CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z"},accSagittalDoubleSharp5CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z"},accSagittalDoubleFlat5CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z"},accSagittalDoubleSharp5v7kDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z"},accSagittalDoubleFlat5v7kUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z"},accSagittalDoubleSharp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z"},accSagittalDoubleFlat:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z"},accSagittal7v11KleismaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z"},accSagittal7v11KleismaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal55CommaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z"},accSagittal55CommaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z"},accSagittal7v11CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal7v11CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal5v11SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z"},accSagittal5v11SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp5v11SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat5v11SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp7v11CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z"},accSagittalFlat7v11CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z"},accSagittalSharp55CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z"},accSagittalFlat55CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z"},accSagittalSharp17CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z"},accSagittalFlat17CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z"},accSagittalSharp7v11kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z"},accSagittalFlat7v11kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z"},accSagittalSharp7v11kUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z"},accSagittalFlat7v11kDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z"},accSagittalSharp17CUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17CDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp55CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat55CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z"},accSagittalSharp7v11CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z"},accSagittalFlat7v11CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z"},accSagittalSharp5v11SUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z"},accSagittalFlat5v11SDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp5v11SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat5v11SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp7v11CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z"},accSagittalDoubleFlat7v11CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z"},accSagittalDoubleSharp55CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z"},accSagittalDoubleFlat55CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z"},accSagittalDoubleSharp17CDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z"},accSagittalDoubleFlat17CUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z"},accSagittalDoubleSharp7v11kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat7v11kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittal23CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z"},accSagittal23CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z"},accSagittal5v19CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z"},accSagittal5v19CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal5v23SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z"},accSagittal5v23SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittalSharp5v23SDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z"},accSagittalFlat5v23SUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z"},accSagittalSharp5v19CDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z"},accSagittalFlat5v19CUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z"},accSagittalFlat23CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z"},accSagittalSharp23CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z"},accSagittalFlat23CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z"},accSagittalSharp5v19CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalFlat5v19CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z"},accSagittalSharp5v23SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalFlat5v23SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z"},accSagittalDoubleSharp5v23SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z"},accSagittalDoubleFlat5v23SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z"},accSagittalDoubleSharp5v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z"},accSagittalDoubleFlat5v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z"},accSagittalDoubleSharp23CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalDoubleFlat23CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z"},accSagittal19SchismaUp:{x_min:0,x_max:125,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z"},accSagittal19SchismaDown:{x_min:0,x_max:125,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal143CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z"},accSagittal143CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal11v49CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z"},accSagittal11v49CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z"},accSagittal19CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal19CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal7v19CommaUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal7v19CommaDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal49SmallDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal49SmallDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal23SmallDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal23SmallDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal5v13MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z"},accSagittal5v13MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z"},accSagittal11v19MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z"},accSagittal11v19MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z"},accSagittal49MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z"},accSagittal49MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z"},accSagittal5v49MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z"},accSagittal5v49MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z"},accSagittal49LargeDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z"},accSagittal49LargeDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z"},accSagittal11v19LargeDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z"},accSagittal11v19LargeDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z"},accSagittal5v13LargeDiesisUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z"},accSagittal5v13LargeDiesisDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z"},accSagittalFlat23SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp49SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z"},accSagittalFlat49SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalSharp7v19CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z"},accSagittalFlat7v19CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z"},accSagittalSharp19CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z"},accSagittalFlat19CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z"},accSagittalSharp11v49CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat11v49CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z"},accSagittalSharp143CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat143CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp17kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z"},accSagittalFlat17kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z"},accSagittalSharp19sDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z"},accSagittalFlat19sUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z"},accSagittalSharp19sUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z"},accSagittalFlat19sDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z"},accSagittalSharp17kUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17kDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp143CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalFlat143CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp11v49CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z"},accSagittalFlat11v49CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z"},accSagittalSharp19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp7v19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat7v19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp49SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat49SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp23SUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat23SDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp5v13MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z"},accSagittalFlat5v13MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z"},accSagittalSharp11v19MUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11v19MDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp49MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z"},accSagittalFlat49MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z"},accSagittalSharp5v49MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z"},accSagittalFlat5v49MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z"},accSagittalSharp49LUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z"},accSagittalFlat49LDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z"},accSagittalSharp11v19LUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z"},accSagittalFlat11v19LDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z"},accSagittalSharp5v13LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat5v13LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalDoubleSharp23SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalDoubleFlat23SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z"},accSagittalDoubleSharp49SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z"},accSagittalDoubleFlat49SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalDoubleSharp7v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalDoubleFlat7v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z"},accSagittalDoubleSharp19CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z"},accSagittalDoubleFlat19CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z"},accSagittalDoubleSharp11v49CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat11v49CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp143CDown:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat143CUp:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp17kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat17kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittalDoubleSharp19sDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalDoubleFlat19sUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z"},accSagittalShaftUp:{x_min:0,x_max:31,y_min:-359,y_max:172,ha:531,o:"m 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z"},accSagittalShaftDown:{x_min:0,x_max:31,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z"},accSagittalAcute:{x_min:0,x_max:125,y_min:-62,y_max:125,ha:187,o:"m 0 0 l 0 -89 l 180 89 l 180 180 z"},accSagittalGrave:{x_min:0,x_max:125,y_min:-125,y_max:62,ha:187,o:"m 180 -180 l 180 -89 l 0 89 l 0 0 z"},accSagittal1MinaUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal1MinaDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal2MinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal2MinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal1TinaUp:{x_min:0,x_max:93,y_min:16,y_max:107,ha:91,o:"m 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z"},accSagittal1TinaDown:{x_min:0,x_max:93,y_min:-107,y_max:-16,ha:91,o:"m 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z"},accSagittal2TinasUp:{x_min:0,x_max:94,y_min:16,y_max:107,ha:91,o:"m 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal2TinasDown:{x_min:0,x_max:94,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z"},accSagittal3TinasUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal3TinasDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal4TinasUp:{x_min:0,x_max:187,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal4TinasDown:{x_min:0,x_max:187,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal5TinasUp:{x_min:0,x_max:218,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal5TinasDown:{x_min:0,x_max:218,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal6TinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal6TinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal7TinasUp:{x_min:0,x_max:281,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal7TinasDown:{x_min:0,x_max:281,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal8TinasUp:{x_min:0,x_max:312,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal8TinasDown:{x_min:0,x_max:312,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal9TinasUp:{x_min:-7,x_max:312,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal9TinasDown:{x_min:-7,x_max:312,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittalFractionalTinaUp:{x_min:-3,x_max:35,y_min:73,y_max:111,ha:38,o:"m -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z"},accSagittalFractionalTinaDown:{x_min:-3,x_max:35,y_min:-111,y_max:-73,ha:38,o:"m -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:164,y_min:-194,y_max:421,ha:615,o:"m 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:414,y_min:-194,y_max:421,ha:615,o:"m 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z"},accidentalWilsonPlus:{x_min:0,x_max:281,y_min:-203,y_max:203,ha:406,o:"m 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z"},accidentalWilsonMinus:{x_min:0,x_max:281,y_min:-186,y_max:186,ha:372,o:"m 0 112 l 405 -268 l 405 -112 l 0 268 z"}},fontFamily:"Bravura",resolution:1e3,generatedOn:"2022-12-18T09:06:51.407Z"},Fi={smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}};const Mi={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}};const Oi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Ri={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Li={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Wi={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},zi={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Ii{static sortAndUnique(t,e,i){if(t.length>1){const a=[];let n;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","export const VERSION = '4.2.2';\nexport const ID = '7ad933bdf12b4137ce04d3f332a838887d08a595';\nexport const DATE = '2023-07-03T19:56:22.952Z';\n","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\nimport { Font } from '../font';\nimport { BravuraFont } from './bravura_glyphs';\nimport { CommonMetrics } from './common_metrics';\nexport function loadBravura() {\n Font.load('Bravura', BravuraFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-bravura.ts is the entry point for vexflow-bravura.js.\n// This version bundles the Bravura music engraving font.\nimport { Flow } from '../src/flow';\nimport { loadBravura } from '../src/fonts/load_bravura';\nimport { loadCustom } from '../src/fonts/load_custom';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadBravura();\nloadCustom();\nFlow.setMusicFont('Bravura', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n// ADD_MUSIC_FONT\n// To make a vexflow-xxx.js build that ONLY loads your new music font, copy this file and name it vexflow-xxx.ts.\n// Replace these lines:\n// import { loadXXX } from '../src/fonts/load_xxx';\n// loadXXX();\n// Flow.setMusicFont('XXX', 'Custom');\n// Feel free to remove references to Custom if you are not using those glyphs.\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","static","Number","isNaN","t","GCD","length","LCM","shift","LCMM","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","fontInfo","st","trim","wt","sz","scaleFactor","parsedWeight","ITALIC","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","loadWebFont","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","defaultRegistry","registry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","ID","children","attrs","newID","getCategory","rendered","getDefaultRegistry","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","toCSSString","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","validate","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","convertSizeToPointValue","fontSizeInPixels","convertSizeToPixelValue","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","MUSIC_FONT_STACK","clef","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","clefProperties","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integer","noteValue","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","artic","spec","keySpec","notes","acc_list","durationNumber","durationToFraction","ticks","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","UNISON","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySignature","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","state","musicFont","currentMusicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accidentalLinePositionsAndSpaceNeeds","prevNote","extraXSpaceNeededForLeftDisplacedNotehead","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","extraXSpaceNeeded","spacingBetweenStaveLines","sort","staveLineAccidentalLayoutMetrics","maxExtraXSpaceNeeded","accidentalLinePositionAndSpaceNeeds","priorLineMetric","currentLineMetric","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","accidentalCodes","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","registeredFonts","formatterInfo","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","isBold","italic","isItalic","perfectMatch","find","partialMatch","fontSizeInPt","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","create","verticalSpaceNeeded","glyphWidth","getGlyphProps","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","articulationCodes","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","durationString","dots","noteStruct","durationProps","parseDuration","customTypes","durationToTicks","currentTicks","parsedNoteStruct","parseNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","glyphCode","engravingFontResolution","spacingBetweenBlocks","metric","getMetricForGlyph","yOffset","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","symbolModifier","SUPERSCRIPT","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","scaleSize","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","isSuperscript","sub","isSubscript","superSubScale","adj","symbolType","GLYPH","superSubFontSize","getWidthForGlyph","getYShiftForGlyph","getXShiftForGlyph","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","durationToNumber","breve_lines","drawSlashNoteHead","renderGlyph","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","noteUHead","noteLHead","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","keyProperties","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","format","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","TickContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","tick","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","ornamentCodes","adjustForStemDirection","stemUpYOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","getNextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","getPoint","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","dpr","sanitizeCanvasDims","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","elementId","backend","background","renderer","lastContext","buildContext","Backends","CANVAS","SVG","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","extraXSpaceForDisplacedNotehead","glyphLine","num_shiftR","num_width","num_x_shift","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","drawDashedLine","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","accList","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","lineShift","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","getInfo","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClef","clefSpec","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","paddingBetween","accumulator","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","auto_beam","align_rests","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","AlignRestsToNotes","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","buildAndAttach","setId","commaSeparatedRegex","setClass","defaults","easyScoreHook","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","pedal","MIXED","setCustomText","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","formatBegModifiers","plotDebugging","plotMetrics","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","tabToGlyphProps","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","integerToNote","Flow","BUILD","VERSION","DATE","fontNames","fontModuleOrPath","hasKeySignature","getKeySignatures","BravuraFont","bracketTop","bracketBottom","barlineTick","breathMarkTick","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arrowheadBlackUp","arrowheadBlackDown","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","generatedOn","CommonMetrics","smufl","endPaddingMax","endPaddingMin","unalignedNotePadding","clef_default","shiftX","clef_small","default","gracenote","pedalMarking","digits","shiftLine","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","staveTempo","clefNote_default","clefNote_small","stroke_straight","stroke_wiggly","CustomFont","vexAccidentalMicrotonal1","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","cmp","eq","newArr","last","canvasSelector","start_time","Date","getTime","setMusicFont","fontData","registerInfo","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-core.js b/build/cjs/vexflow-core.js new file mode 100644 index 0000000000..80cf58f9fe --- /dev/null +++ b/build/cjs/vexflow-core.js @@ -0,0 +1,7 @@ +/*! + * VexFlow 4.2.2 2023-07-03T19:56:22.952Z 7ad933bdf12b4137ce04d3f332a838887d08a595 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function s(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let s=t.constructor;if(i){for(;null!==t;){if(s=t.constructor,"CATEGORY"in s&&s.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in s&&s.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>st,Annotation:()=>gt,AnnotationHorizontalJustify:()=>dt,AnnotationVerticalJustify:()=>lt,Articulation:()=>St,BEAM_BOTH:()=>Oe,BEAM_LEFT:()=>Me,BEAM_RIGHT:()=>Re,BarNote:()=>Dt,Barline:()=>kt,BarlineType:()=>Et,Beam:()=>Le,Bend:()=>Ft,BoundingBox:()=>C,BoundingBoxComputation:()=>N,Builder:()=>Ke,CanvasContext:()=>Zt,Category:()=>u,ChordSymbol:()=>Rt,ChordSymbolHorizontalJustify:()=>Bt,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>_e,ClefNote:()=>We,Crescendo:()=>Ie,Curve:()=>Ue,CurvePosition:()=>Ge,Dot:()=>Ot,EasyScore:()=>Qe,EasyScoreGrammar:()=>Ve,Element:()=>L,Factory:()=>bi,Flow:()=>ki,Font:()=>M,FontStyle:()=>A,FontWeight:()=>P,Formatter:()=>Ae,Fraction:()=>E,FretHandFinger:()=>Lt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Vt,GraceTabNote:()=>wi,KeyManager:()=>Ei,KeySigNote:()=>si,KeySignature:()=>ue,Modifier:()=>tt,ModifierContext:()=>me,ModifierPosition:()=>J,MultiMeasureRest:()=>ai,Music:()=>et,Note:()=>bt,NoteHead:()=>Wt,NoteSubGroup:()=>zt,Ornament:()=>$t,OutlineCode:()=>$,Parenthesis:()=>Jt,Parser:()=>je,PedalMarking:()=>ri,Piece:()=>ze,Registry:()=>O,RenderContext:()=>yt,Renderer:()=>he,RendererBackends:()=>ne,RendererLineEndType:()=>ae,RepeatNote:()=>ci,Repetition:()=>pe,RuntimeError:()=>p,SVGContext:()=>se,Stave:()=>Be,StaveConnector:()=>Ne,StaveHairpin:()=>Bi,StaveLine:()=>li,StaveModifier:()=>At,StaveModifierPosition:()=>wt,StaveNote:()=>Ut,StaveSection:()=>xe,StaveTempo:()=>fe,StaveText:()=>ye,StaveTie:()=>Ht,Stem:()=>nt,StemmableNote:()=>It,StringNumber:()=>ce,Stroke:()=>de,SymbolModifiers:()=>Pt,SymbolTypes:()=>Nt,System:()=>gi,TabNote:()=>mi,TabSlide:()=>Ci,TabStave:()=>_i,TabTie:()=>Yt,TextBracket:()=>xi,TextBracketPosition:()=>pi,TextDynamics:()=>Si,TextFormatter:()=>ct,TextJustification:()=>oe,TextNote:()=>Se,TickContext:()=>Kt,Tickable:()=>vt,TimeSigNote:()=>yi,TimeSignature:()=>be,TimeSignatureGlyph:()=>ve,Tremolo:()=>Ni,Tuning:()=>Pi,Tuplet:()=>De,TupletLocation:()=>ke,Vex:()=>Li,Vibrato:()=>le,VibratoBracket:()=>Ti,Voice:()=>Xt,VoiceMode:()=>jt,Volta:()=>Te,VoltaType:()=>re,defined:()=>f,drawDot:()=>Tt,globalObject:()=>x,isAccidental:()=>n,isAnnotation:()=>a,isBarline:()=>o,isCategory:()=>s,isDot:()=>r,isGraceNote:()=>h,isGraceNoteGroup:()=>c,isHTMLCanvas:()=>qt,isHTMLDiv:()=>Qt,isNote:()=>d,isRenderContext:()=>l,isStaveNote:()=>g,isStemmableNote:()=>m,isTabNote:()=>_,log:()=>S,midLine:()=>T,normalizeAngle:()=>b,prefix:()=>v,sumArray:()=>w,warn:()=>y});const n=t=>s(t,u.Accidental),a=t=>s(t,u.Annotation),o=t=>s(t,u.Barline),r=t=>s(t,u.Dot),h=t=>s(t,u.GraceNote),c=t=>s(t,u.GraceNoteGroup),d=t=>s(t,u.Note),l=t=>s(t,u.RenderContext),g=t=>s(t,u.StaveNote),m=t=>s(t,u.StemmableNote),_=t=>s(t,u.TabNote);var u;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(u||(u={}));class p extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function x(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function f(t,e="undefined",i=""){if(void 0===t)throw new p(e,i);return t}function S(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");x().console.log(t+": "+i)}function y(...t){const e=t.join(" "),i=new Error;x().console.log("Warning: ",e,i.stack)}function T(t,e){let i=e+(t-e)/2;var s,n;return i%2>0&&(i=((s=10*i)%(n=5)>=n/2?parseInt(""+s/n,10)*n+n:parseInt(""+s/n,10)*n)/10),i}function v(t){return`vf-${t}`}function b(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class E{static get CATEGORY(){return u.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new p("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/E.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?E.LCM(t[0],t[1]):E.LCM(t.shift(),E.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=E.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a+i*o;return this.set(r,n)}subtract(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a-i*o;return this.set(r,n)}multiply(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*i,this.denominator*s)}divide(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*s,this.denominator*i)}equals(t){const e=E.__staticFractionA.copy(t).simplify(),i=E.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new E(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return E.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=E.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),s=e[1]?parseInt(e[1],10):1;return this.set(i,s)}}function B(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}E.__staticFractionA=new E,E.__staticFractionB=new E,E.__staticFractionTmp=new E;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,s){this.x=t,this.y=e,this.w=i,this.h=s}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,s,n,a){this.addPoint(t,e),this.addPoint(n,a);const o=i-t;let r=o-(n-i);if(0!=r){const e=o/r;if(e>0&&e<1){const s=1-e;this.addX(s*s*t+2*s*e*i+e*e*n)}}const h=s-e;if(r=h-(a-s),0!=r){const t=h/r;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*s+t*t*a)}}}addBezierCurve(t,e,i,s,n,a,o,r){const h=[t,e],c=[i,s],d=[n,a],l=[o,r];let g;this.addPoint(h[0],h[1]),this.addPoint(l[0],l[1]);const m=(t,e)=>Math.pow(1-t,3)*h[e]+3*Math.pow(1-t,2)*t*c[e]+3*(1-t)*Math.pow(t,2)*d[e]+Math.pow(t,3)*l[e];for(g=0;g<=1;g++){const t=6*h[g]-12*c[g]+6*d[g],e=-3*h[g]+9*c[g]-9*d[g]+3*l[g],i=3*c[g]-3*h[g];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===A.ITALIC}static loadWebFont(t,e,i=!0){return k(this,void 0,void 0,(function*(){const s=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield s.load(),document.fonts.add(s),s}))}static loadWebFonts(){return k(this,void 0,void 0,(function*(){const t=M.WEB_FONT_HOST,e=M.WEB_FONT_FILES;for(const i in e){const s=e[i];M.loadWebFont(i,t+s)}}))}static load(t,e,i){let s=F[t];return s||(s=new M(t),F[t]=s),e&&s.setData(e),i&&s.setMetrics(i),s}constructor(t){this.name=t}getName(){return this.name}getData(){return f(this.data,"FontError","Missing font data")}getMetrics(){return f(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let s=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class L{static get CATEGORY(){return u.Element}static newID(){return"auto"+L.ID++}constructor(){var t;this.children=[],this.attrs={id:L.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=O.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const s=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return s&&(s.splice(s.indexOf(t)),this.attrs.class=s.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=v(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const s=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:s,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return f(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return M.toCSSString(this.textFont)}setFont(t,e,i,s){const n=this.constructor.TEXT_FONT,a="object"==typeof t,o="string"==typeof t,r=void 0===t,h=void 0===e&&void 0===i&&void 0===s;return this.textFont=a?Object.assign(Object.assign({},n),t):o&&h?M.fromCSSString(t):r&&h?Object.assign({},n):M.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=s?s:n.style),this}getFont(){return this.textFont||this.resetFont(),M.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return M.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return M.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}L.ID=1e3,L.TEXT_FONT={family:M.SANS_SERIF,size:M.SIZE,weight:P.NORMAL,style:A.NORMAL};const W=16384,I={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},G={w:"1",h:"2",q:"4",b:"256"},U={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},H={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},Y={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},j={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"accidentalBuyukMucennebSharp",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},X={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},V={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class z{static currentMusicFont(){if(0===z.MUSIC_FONT_STACK.length)throw new p("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return z.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in H))throw new p("BadArgument","Invalid clef: "+t);return H[t]}static keyProperties(t,e="treble",i){let s={octave_shift:0,duration:"4"};"object"==typeof i&&(s=Object.assign(Object.assign({},s),i));const n=z.sanitizeDuration(s.duration),a=t.split("/");if(a.length<2)throw new p("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=a[0].toUpperCase(),r=Y[o];if(!r)throw new p("BadArguments","Invalid key name: "+o);r.octave&&(a[1]=r.octave.toString());let h=parseInt(a[1],10);h+=-1*s.octave_shift;let c=(7*h-28+r.index)/2;c+=z.clefProperties(e).line_shift;let d=0;c<=0&&2*c%2==0&&(d=1),c>=6&&2*c%2==0&&(d=-1);const l=void 0!==r.int_val?12*h+r.int_val:void 0,g=r.code,m=r.shift_right;let _={};if(a.length>2&&a[2]){const t=a[2].toUpperCase();_={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:h,line:c,int_value:l,accidental:r.accidental,code:g,stroke:d,shift_right:m,displaced:!1},_)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new p("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new p("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,s=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",z.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new p("InvalidMetrics","Width and height required");s=t.width,n=-t.height/2}else s=z.textWidth(t);return{text:t,code:i,getWidth:()=>s*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return X[t]}static accidentalCodes(t){return j[t]}static ornamentCodes(t){return V[t]}static keySignature(t){const e=U[t];if(!e)throw new p("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],s=[];for(let t=0;tZ.getWidth(a,t)}),s)}}z.UNISON=!0,z.SOFTMAX_FACTOR=10,z.STEM_WIDTH=1.5,z.STEM_HEIGHT=35,z.STAVE_LINE_THICKNESS=1,z.RENDER_PRECISION_PLACES=3,z.RESOLUTION=W,z.MUSIC_FONT_STACK=[],z.NOTATION_FONT_SCALE=39,z.TABLATURE_FONT_SCALE=39,z.SLASH_NOTEHEAD_WIDTH=15,z.STAVE_LINE_DISTANCE=10,z.TEXT_HEIGHT_OFFSET_HACK=1,z.accidentalMap=j,z.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},z.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},z.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},z.TIME4_4={num_beats:4,beat_value:4,resolution:W};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-z.STEM_HEIGHT,stem_down_extension:-z.STEM_HEIGHT,tabnote_stem_up_extension:-z.STEM_HEIGHT,tabnote_stem_down_extension:-z.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-z.STEM_HEIGHT,stem_down_extension:-z.STEM_HEIGHT,tabnote_stem_up_extension:-z.STEM_HEIGHT,tabnote_stem_down_extension:-z.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,s){this.outline=t,this.originX=e,this.originY=i,this.scale=s,this.i=0,this.precision=1,this.precision=Math.pow(10,z.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let s=0;for(;s{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(a)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new p("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new p("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new p("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let s=i[3];return s||(s="M"),{root:t,accidental:e,type:s}}throw new p("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new p("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new p("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new p("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new p("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new p("BadArguments",`Invalid direction: ${i}`);let s=(t+i*e)%et.NUM_TONES;return s<0&&(s+=et.NUM_TONES),s}getRelativeNoteName(t,e){const i=this.getNoteParts(t),s=this.getNoteValue(i.root);let n=e-s;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const a=(e+1+(s+1))%et.NUM_TONES*i;if(Math.abs(a)>2)throw new p("BadArguments",`Notes not related: ${t}, ${e})`);n=a}if(Math.abs(n)>2)throw new p("BadArguments",`Notes not related: ${t}, ${e})`);let a=i.root;if(n>0)for(let t=1;t<=n;++t)a+="#";else if(n<0)for(let t=-1;t>=n;--t)a+="b";return a}getScaleTones(t,e){const i=[t];let s=t;for(let n=0;ne.line-t.line));const d=[];let l=0;for(let t=0;td[i+t],a=t=>t.map(n),o=(t,e)=>{const[i,s]=a([t,e]).map((t=>t.line));return i-s},r=(...t)=>t.map(a).every((([t,e])=>!this.checkCollision(t,e))),h=s-i+1;let c,l,m=this.checkCollision(d[i],d[s])?"a":"b";switch(h){case 3:"a"===m&&.5===o(1,2)&&.5!==o(0,1)&&(m="second_on_bottom");break;case 4:r([0,2],[1,3])&&(m="spaced_out_tetrachord");break;case 5:"b"===m&&r([1,3])&&(m="spaced_out_pentachord",r([0,2],[2,4])&&(m="very_spaced_out_pentachord"));break;case 6:r([0,3],[1,4],[2,5])&&(m="spaced_out_hexachord"),r([0,2],[2,4],[1,3],[3,5])&&(m="very_spaced_out_hexachord")}if(h>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+el?g:l}else for(c=t;c<=s;c++)l=z.accidentalColumnsTable[h][m][c-t],d[c].column=l,g=g>l?g:l;t=s}const m=[],_=[];for(let t=0;t<=g;t++)m[t]=0,_[t]=0;m[0]=n+l,_[0]=n,d.forEach((t=>{t.width>m[t.column]&&(m[t.column]=t.width)}));for(let t=1;t{let e=0;const i=p+t.numAcc;for(;p0?(s=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(s=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new E(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=s[e.value()];n?n.push(t):(i.push(e.value()),s[e.value()]=[t]),e.add(t.getTicks())}))}));const a=new et;e||(e="C");const o=a.createScaleMap(e),r={};i.forEach((t=>{const e=s[t],i=[],h=t=>{if(!g(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,s)=>{const h=a.getNoteParts(t.split("/")[0]),c=t.split("/")[1],d=h.accidental||"n",l=h.root+d;r[h.root+c]||(r[h.root+c]=o[h.root]);const g=r[h.root+c]===l,m=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==d&&t.getIndex()==s&&e.getModifiers().splice(i,1)})),!g||g&&m){r[h.root+c]=l;const n=new st(d);e.addModifier(n,s),i.push(t)}})),e.getModifiers().forEach((t=>{c(t)&&t.getGraceNotes().forEach(h)}))};e.forEach(h)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:z.NOTATION_FONT_SCALE,parenLeftPadding:2,parenRightPadding:2},this.accidental=z.accidentalCodes(this.type),f(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(z.accidentalCodes("{").code,t),this.parenRight=new Z(z.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=f(this.parenLeft),e=f(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return f(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,h(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:s,x_shift:n,y_shift:a,glyph:o,render_options:{parenLeftPadding:r,parenRightPadding:h}}=this,c=this.checkContext(),d=this.checkAttachedNote();this.setRendered();const l=d.getModifierStartXY(e,i);let g=l.x+n;const m=l.y+a;if(it("Rendering: ",t,g,m),s){const t=f(this.parenLeft),e=f(this.parenRight);e.render(c,g,m),g-=e.getMetrics().width,g-=h,g-=this.accidental.parenRightPaddingAdjustment,o.render(c,g,m),g-=o.getMetrics().width,g-=r,t.render(c,g,m)}else o.render(c,g,m)}}st.DEBUG=!1;class nt extends L{static get CATEGORY(){return u.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return z.STEM_WIDTH}static get HEIGHT(){return z.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new p("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,s=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:s+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=z.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const s=this.stem_direction;let n=0;s===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const a=this.getHeight();!function(...t){nt.DEBUG&&S("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?a-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-a-this.renderHeightAdjustment*s),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function at(...t){ct.DEBUG&&S("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},rt={},ht={};class ct{static getFontFamilies(){const t=[];for(const e in ht){const i=ht[e];t.push(Object.assign({},i))}return t}static create(t={}){at("create: ",t),t.family||(t.family=M.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ht)i.startsWith(t)&&e.push(ht[i]);if(e.length>0)break}let s;if(0===e.length)s=new ct(Object.values(ht)[0]);else if(1===e.length)s=new ct(e[0]);else{const i=M.isBold(t.weight),n=M.isItalic(t.style),a=e.find((t=>t.bold===i&&t.italic===n));if(a)s=new ct(a);else{const t=e.find((t=>t.italic===n||t.bold===i));s=new ct(t||e[0])}}const n=t.size;if(void 0!==n){const t=M.convertSizeToPointValue(n);s.setFontSize(t)}return s}static getInfo(t){return ht[t]}static registerInfo(t,e=!1){at("registerInfo: ",t,e);const i=t.family;(void 0===ht[i]||e)&&(ht[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===rt[this.cacheKey]&&(rt[this.cacheKey]={}),null!==(t=rt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?P.BOLD:P.NORMAL,s=this.italic?A.ITALIC:A.NORMAL;this.cacheKey=`${t}%${e}%${i}%${s}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},s=e[t];if(void 0!==s)return s;for(let e=0;et>e?t:e)),h+=(this.text_line+1)*z.STAVE_LINE_DISTANCE+o,l&&i===nt.DOWN&&(h=Math.max(h,c.topY+o+d*this.text_line))}else if(this.verticalJustification===lt.CENTER){const t=e.getYForTopText(this.text_line)-1;h=t+(g.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===lt.TOP){h=Math.min(...e.getYs())-(this.text_line+1)*z.STAVE_LINE_DISTANCE,l&&i===nt.UP&&(d=c.topY=1}function xt(t,e){return pt(t,e)?e===mt?Math.ceil:Math.floor:Math.round}const ft=t=>g(t)||h(t);class St extends tt{static get CATEGORY(){return u.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const s=(t,e,i)=>ut(xt(e,i),f(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let a=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let r=0;if(m(n)){const t=n.getStem();t&&(r=Math.abs(t.getHeight())/z.STAVE_LINE_DISTANCE)}const h=n.getStave();if(h&&(a=h.getNumLines()),t.getPosition()===mt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=r);let h=s(t,e.top_text_line,mt);const c=i+e.top_text_line+.5;!t.articulation.between_lines&&ct.getWidth())).reduce(((t,e)=>Math.max(e,t))),a=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=a/2,e.right_shift+=a/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const s={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:s[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=mt,this.render_options={font_scale:z.NOTATION_FONT_SCALE},this.reset()}reset(){this.articulation=z.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=mt),this.type.endsWith("Below")&&(this.position=_t));const t=(this.position===mt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),f(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(f(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:s,glyph:n,text_line:a}=this,o=this.articulation.between_lines,r=e.checkStave(),h=r.getSpacingBetweenLines(),c=_(e),{x:d}=e.getModifierStartXY(s,i),l=!o||c,g=function(t,e){const i=e===mt&&t.getStemDirection()===nt.UP||e===_t&&t.getStemDirection()===nt.DOWN;return ft(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,s),m=z.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let u={[mt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(ft(t))return t.hasStem()?i===nt.UP?s:n:Math.min(...t.getYs());if(_(t))return t.hasStem()&&i===nt.UP?s:t.checkStave().getYForTopText(e);throw new p("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)-(a+g)*h;return l?Math.min(r.getYForTopText(St.INITIAL_OFFSET),t):t},[_t]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(ft(t))return t.hasStem()?i===nt.UP?n:s:Math.max(...t.getYs());if(_(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):s:t.checkStave().getYForBottomText(e);throw new p("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)+(a+g)*h;return l?Math.max(r.getYForBottomText(St.INITIAL_OFFSET),t):t}}[s]();if(!c){const t=s===mt?-1:1,a=e.getKeyProps()[i].line,r=(e.getYs()[i]-u)/h+Number(a),c=function(t,e,i,s){const n=ut(xt(e,i),e);if(t&&pt(n,i)&&n%1==0)return n+.5*-s;return n}(o,r,s,t);pt(c,s)&&n.setOrigin(.5,.5),u+=Math.abs(c-r)*h*t+m*t}!function(...t){St.DEBUG&&S("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${d}, y: ${u})`),n.render(t,d,u)}}St.DEBUG=!1,St.INITIAL_OFFSET=-.5;class yt{static get CATEGORY(){return u.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function Tt(t,e,i,s="#F55"){t.save(),t.setFillStyle(s),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class vt extends L{static get CATEGORY(){return u.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new E(0,1),this.intrinsicTicks=0,this.tickMultiplier=new E(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new p("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return f(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const s=this.tupletStack.indexOf(t);return-1!==s&&(this.tupletStack.splice(s,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const s=_.space.deviation,n=s>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(s),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=bt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!z.validTypes[i])return;const s=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");s[e]=n&&3===n.length?n[2]:i})));let n=z.durationToTicks(e.duration);if(!n)return;const a=t.dots?t.dots:e.dots;if("number"!=typeof a)return;let o=n;for(let t=0;tz.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return f(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new p("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new p("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(u.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return f(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new p("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new p("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=z.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new p("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+z.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}static getPoint(t){return"default"==t?z.NOTATION_FONT_SCALE:z.NOTATION_FONT_SCALE/5*3}getStemDirection(){throw new p("NoStem","No stem attached to this note.")}getStemExtents(){throw new p("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Et,Bt,Ct,Nt,Pt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class At extends L{static get CATEGORY(){return u.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return f(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,s=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+s)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Et||(Et={}));class kt extends At{static get CATEGORY(){return u.Barline}static get type(){return Et}static get typeString(){return{single:Et.SINGLE,double:Et.DOUBLE,end:Et.END,repeatBegin:Et.REPEAT_BEGIN,repeatEnd:Et.REPEAT_END,repeatBoth:Et.REPEAT_BOTH,none:Et.NONE}}constructor(t){super(),this.thickness=z.STAVE_LINE_THICKNESS;const e=Et;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Et.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Et.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Et.END:this.drawVerticalEndBar(t,this.x);break;case Et.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Et.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Et.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();i&&s.fillRect(e-3,n,1,a-n),s.fillRect(e,n,1,a-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),s=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,s,1,n-s),i.fillRect(e-2,s,3,n-s)}drawRepeatBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();let o=3;i||(o=-5),s.fillRect(e+o,n,1,a-n),s.fillRect(e-2,n,3,a-n);i?o+=4:o-=4;const r=e+o+1;let h=(t.getNumLines()-1)*t.getSpacingBetweenLines();h=h/2-t.getSpacingBetweenLines()/2;let c=n+h+1;s.beginPath(),s.arc(r,c,2,0,2*Math.PI,!1),s.fill(),c+=t.getSpacingBetweenLines(),s.beginPath(),s.arc(r,c,2,0,2*Math.PI,!1),s.fill()}}class Dt extends bt{static get CATEGORY(){return u.BarNote}constructor(t=Et.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Et;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Dt.DEBUG&&S("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t);const e=new kt(this.type);e.setX(this.getAbsoluteX()),e.draw(this.checkStave()),this.restoreStyle(t),this.setRendered()}}Dt.DEBUG=!1;class Ft extends tt{static get CATEGORY(){return u.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let s=0;st{const a=t+s,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(a,o,t+s,n),e.stroke(),e.restore()},d=(t,i,s,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+s,n,t+s,i),e.stroke(),e.restore()},l=(t,i,s)=>{const n=i+4*s;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},g=(t,i)=>{e.save(),e.setFont(this.textFont);const s=t-e.measureText(i).width/2;e.fillText(i,s,h),e.restore()};let m,_=0,u=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){g(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=c.symbolBlocks[t-1];Rt.isSuperscript(e)||(n=s)}a&&n>0&&(p=!0,e.xShift=e.xShift+(n-s),s=n,n=0,c.setEnableKerning(!1)),i||a||(n=0),e.vAlign=p,s+=e.width,_=s}if(c.updateKerningAdjustments(),c.updateOverBarAdjustments(),c.getVertical()===Ct.TOP?(c.setTextLine(e.top_text_line),e.top_text_line+=u):(c.setTextLine(e.text_line+1),e.text_line+=u+1),c.getReportWidth()&&m(g)){const t=g.getGlyphProps().getWidth();c.getHorizontal()===Bt.LEFT?(r=Math.max(t,r),a=Math.max(a,_)+Rt.minPadding):c.getHorizontal()===Bt.RIGHT?(h=Math.max(t,h),o=Math.max(o,_)):(a=Math.max(a,_/2)+Rt.minPadding,o=Math.max(o,_/2),r=Math.max(t/2,r),h=Math.max(t/2,h))}s=0}const c=Math.min(Math.max(o-h,0),Math.max(o-e.right_shift,0)),d=Math.min(Math.max(a-r,0),Math.max(a-e.left_shift,0));return e.left_shift+=d,e.right_shift+=c,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Bt.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===z.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:P.NORMAL,style:A.NORMAL}}get superscriptOffset(){return Rt.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Rt.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Nt.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let s=0;for(;s0?this.symbolBlocks[t-1]:void 0;let s=0;e.symbolType===Nt.GLYPH&&void 0!==e.glyph&&e.glyph.code===Rt.glyphs.over.code&&(s+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Nt.GLYPH&&void 0!==i.glyph&&i.glyph.code===Rt.glyphs.over.code&&(s+=i.glyph.metrics.x_shift);let n=!1,a=!1;void 0!==i&&i.symbolType===Nt.TEXT&&(n=Rt.upperKerningText.some((t=>t===i.text[i.text.length-1])),a=Rt.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Rt.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===Pt.SUPERSCRIPT&&(s+=o),a&&e.symbolType===Nt.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(s+=o/2),Rt.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(s+=o/2)),s}getSymbolBlock(t={}){var e,i,s;const n=null!==(e=t.symbolType)&&void 0!==e?e:Nt.TEXT,a={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(s=t.symbolModifier)&&void 0!==s?s:Pt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Nt.GLYPH&&"string"==typeof t.glyph){const e=Rt.glyphs[t.glyph],i=20;a.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Nt.TEXT?a.width=this.textFormatter.getWidthForTextInEm(a.text):n===Nt.LINE&&(a.width=t.width);return a}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Nt.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Nt.TEXT,i=Pt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Nt.TEXT,i=Pt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Nt.GLYPH,i=Pt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Nt.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let s=0;s0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Nt.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,s){return super.setFont(t,e,i,s),this.textFormatter=ct.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Rt.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Rt.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,s=0;for(s=0;s0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let s;t.setFont(this.textFont);const n=e.hasStem(),a=e.checkStave();if(this.vertical===Ct.BOTTOM){if(s=a.getYForBottomText(this.text_line+z.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;s=Math.max(s,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(s=Math.min(a.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines();s=Math.min(s,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Bt.LEFT?i.x:this.horizontal===Bt.RIGHT?i.x+this.getWidth():this.horizontal===Bt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Mt("Rendering ChordSymbol: ",this.textFormatter,o,s),this.symbolBlocks.forEach((e=>{const i=Rt.isSuperscript(e),n=Rt.isSubscript(e);let a=s;if(Mt("shift was ",e.xShift,e.yShift),Mt("curY pre sub ",a),i&&(a+=this.superscriptOffset),n&&(a+=this.subscriptOffset),Mt("curY sup/sub ",a),e.symbolType===Nt.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:s,style:n}=this.textFont,a=M.scaleSize(i,Rt.superSubRatio);t.setFont(e,a,s,n)}Mt("Rendering Text: ",e.text,o+e.xShift,a+e.yShift),t.fillText(e.text,o+e.xShift,a+e.yShift),(i||n)&&t.restore()}else e.symbolType===Nt.GLYPH&&e.glyph?(a+=e.yShift,Mt("Rendering Glyph: ",e.glyph.code,o+e.xShift,a),e.glyph.render(t,o+e.xShift,a)):e.symbolType===Nt.LINE&&(Mt("Rendering Line : ",e.width,o,a),t.beginPath(),t.setLineWidth(1),t.moveTo(o,s),t.lineTo(o+e.width,a),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Rt.DEBUG=!1,Rt.HorizontalJustify=Bt,Rt.HorizontalJustifyString={left:Bt.LEFT,right:Bt.RIGHT,center:Bt.CENTER,centerStem:Bt.CENTER_STEM},Rt.VerticalJustify=Ct,Rt.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Rt.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Rt.symbolTypes=Nt,Rt.symbolModifiers=Pt,Rt.noFormat=!1;class Ot extends tt{static get CATEGORY(){return u.Dot}static getDots(t){return t.getModifiersByType(Ot.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let a=i,o=0,r=null,h=null,c=null,d=0;for(let t=0;to?a:o,r=g,h=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,h(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),s=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});_(e)&&(s.y=e.getStemExtents().baseY);const n=s.x+this.x_shift+this.width-this.radius,a=s.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,a,this.radius,0,2*Math.PI,!1),t.fill()}}class Lt extends tt{static get CATEGORY(){return u.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:s}=e;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,c=0,d=0,l=0,g=null,m=null;for(let t=0;td?e:d):o===tt.Position.RIGHT&&(_.setXShift(c),e=r+f,l=e>l?e:l),g=u,m=a}return e.left_shift+=d,e.right_shift+=l,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),s={number:e[0]};return e[1]&&(s.position=e[1]),i.getFactory().Fingering(s)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:s-=4,n-=12;break;case tt.Position.BELOW:s-=2,n+=10;break;case tt.Position.LEFT:s-=this.width;break;case tt.Position.RIGHT:s+=1;break;default:throw new p("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,s,n),t.restore()}}Lt.TEXT_FONT={family:M.SANS_SERIF,size:9,weight:P.BOLD,style:A.NORMAL};class Wt extends bt{static get CATEGORY(){return u.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=z.getGlyphProps(this.duration,this.noteType),f(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||z.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=z.currentMusicFont(),s=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+s+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Wt.DEBUG&&S("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const s=this.stem_direction,n=this.render_options.glyph_font_scale,a=`${this.glyph_code}Stem${s===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,s,n,a){const o=z.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(z.STEM_WIDTH);let r=!1;if(z.durationToNumber(e)>2&&(r=!0),r||(i-=z.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,s+a),t.lineTo(i,s+1),t.lineTo(i+o,s-a),t.lineTo(i+o,s),t.lineTo(i,s+a),t.closePath(),r?t.fill():t.stroke(),z.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;nt.getCategory()===u.Dot&&0===t.getIndex())).length!==r.note.getModifiers().filter((t=>t.getCategory()===u.Dot&&0===t.getIndex())).length||t<1&&t>0||JSON.stringify(a.note.getStyle())!==JSON.stringify(r.note.getStyle())?(l=d+2,a.stemDirection===r.stemDirection?a.note.setXShift(l):r.note.setXShift(l)):a.note.voice!==r.note.voice&&a.stemDirection===r.stemDirection&&(a.line!=r.line?(l=d+2,a.note.setXShift(l)):1===r.stemDirection&&(r.stemDirection=-1,r.note.setStemDirection(-1)))}else t<1?(l=d+2,a.note.durationt.postFormat())),!0)}constructor(t){var e,i,s;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=z.getGlyphProps(this.duration,this.noteType),f(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||z.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Ut.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(s=t.stem_direction)&&void 0!==s?s:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const s=t[i];s&&e.setStyle(s)}));const e=this.stave;return e&&this.setStave(e),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,s,n,a,o,r=!1;t===nt.UP?(n=0,a=e.length,o=1):(n=e.length-1,a=-1,o=-1);for(let e=n;e!==a;e+=o){const n=this.sortedKeyProps[e].keyProps,a=n.line;void 0===i?i=a:(s=Math.abs(i-a),0===s||.5===s?r=!r:(r=!1,this.use_default_head_x=!0)),i=a;const o=new Wt({duration:this.duration,note_type:this.noteType,displaced:r,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=a,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new p("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:s,leftDisplacedHeadPx:n}=this.getMetrics(),a=this.getAbsoluteX()-s-n;let o=0,r=0;const h=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,c=2*h;if(this.isRest()){const t=this.ys[0],e=z.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-h,r=t+h):(o=t-this.glyphProps.line_above*c,r=t+this.glyphProps.line_below*c)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=h*this.getStemDirection(),o=Math.min(t.topY,t.baseY),r=Math.max(t.topY,t.baseY)}else{o=0,r=0;for(let t=0;te&&(e=s):s1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=T(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var s,n;if(!this.preFormatted)throw new p("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new p("NoYValues","No Y-Values calculated for this note.");const{ABOVE:a,BELOW:o,LEFT:r,RIGHT:h}=tt.Position;let c=0;return t===r?c=-2:t===h?(c=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(c+=null!==(n=null===(s=null==this?void 0:this.flag)||void 0===s?void 0:s.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==a||(c=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+c,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Ut.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,s,n=1/0,a=-1/0,o=this.checkStave().getNumLines(),r=1,h=o,c=r;return this._noteHeads.forEach((d=>{const l=d.getLine(),g=d.getY();n=Math.min(g,n),a=Math.max(g,a),void 0===e&&d.isDisplaced()&&(e=d.getAbsoluteX()),void 0!==t||d.isDisplaced()||(t=d.getAbsoluteX()),o=Math.max(l,o),r=Math.min(l,r),d.isDisplaced()?(i=void 0===i?l:Math.max(l,i),s=void 0===s?l:Math.min(l,s)):(h=Math.max(l,h),c=Math.min(l,c))}),this),{y_top:n,y_bottom:a,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:r,highest_displaced_line:i,lowest_displaced_line:s,highest_non_displaced_line:h,lowest_non_displaced_line:c}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,s=this.checkContext(),n=e.getWidth()+2*i,a=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!s)throw new p("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:r,highest_displaced_line:h,highest_non_displaced_line:c,lowest_displaced_line:d,lowest_non_displaced_line:l,displaced_x:g,non_displaced_x:m}=this.getNoteHeadBounds();if(o<6&&r>0)return;const _=Math.min(null!=g?g:0,null!=m?m:0),u=(t,e,o)=>{let r;r=o&&e?_-i:e?(null!=m?m:0)-i:(null!=g?g:0)-i;const h=e&&o?a:n;s.beginPath(),s.moveTo(r,t),s.lineTo(r+h,t),s.stroke()},x=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(s,x);for(let e=6;e<=o;++e){const i=void 0!==m&&e<=c,s=void 0!==h&&e<=h;u(t.getYForNote(e),i,s)}for(let e=0;e>=r;--e){const i=void 0!==m&&e>=l,s=void 0!==d&&e>=d;u(t.getYForNote(e),i,s)}this.restoreStyle(s,x)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const s=i-3.5;if(s<=0)return t;const n=this.getStave();let a=10;return null!=n&&(a=n.getSpacingBetweenLines()),t+s*a}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new p("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Ut.DEBUG&&S("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Ut.DEBUG=!1;class Ht extends L{static get CATEGORY(){return u.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new p("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new p("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new p("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,s=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,s=8);const n=this.render_options.first_x_shift,a=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,r=this.notes.first_indices,h=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let c=0;cMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===jt.STRICT||this.mode===jt.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new p("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return f(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let s=0;s1){const e=new Le(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Ut.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Vt.DEBUG&&S("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=g(e),s=i?Ht:Yt;this.slur=new s({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Vt.DEBUG=!1;class zt extends tt{static get CATEGORY(){return u.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new Ae,this.voice=new Xt({num_beats:4,beat_value:4,resolution:z.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt{static getNextContext(t){const e=t.tContexts,i=e.indexOf(t);if(i+1t.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new p("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t=0&&(r.x_shift+=s+2),$t.ornamentAttack.indexOf(r.type)>=0&&(r.x_shift-=n+2),r.reportedWidth&&r.x_shift<0?n+=r.reportedWidth:r.reportedWidth&&r.x_shift>=0?s+=r.reportedWidth+$t.minPadding:i=Math.max(r.getWidth(),i),$t.ornamentArticulation.indexOf(r.type)>=0){f(r.note,"NoAttachedNote").getLineNumber()>=3||r.getPosition()===tt.Position.ABOVE?(e.top_text_line+=h,r.y_shift+=a,a-=r.glyph.bbox.getH()):(e.text_line+=h,r.y_shift+=a,a+=r.glyph.bbox.getH())}else r.getPosition()===tt.Position.ABOVE?(r.setTextLine(e.top_text_line),e.top_text_line+=h):(r.setTextLine(e.text_line),e.text_line+=h)}return e.left_shift=n+i/2,e.right_shift=s+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=z.currentMusicFont().getMetrics().ornament;if(!t)throw new p("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:z.NOTATION_FONT_SCALE,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=z.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=$t.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new p("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),$t.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(z.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(z.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),s=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let a=i===nt.DOWN?n.baseY:n.topY;_(e)&&(e.hasStem()?i===nt.DOWN&&(a=s.getYForTopText(this.text_line)):a=s.getYForTopText(this.text_line));const o=i===nt.DOWN,r=s.getSpacingBetweenLines();let h=1;!o&&e.hasBeam()&&(h+=.5);const c=a-r*(this.text_line+h),d=e.getModifierStartXY(this.position,this.index);let l=d.x,g=this.ornamentAlignWithNoteHead?d.y:Math.min(s.getYForTopText(this.text_line),c);if(g+=this.y_shift,this.delayed){let t=0;const i=l-(s.getX()-10);if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=Kt.getNextContext(e.getTickContext());t+=n?.5*(n.getX()-i):.5*(s.getX()+s.getWidth()-i),this.delayXShift=t}l+=t}!function(...t){$t.DEBUG&&S("Vex.Flow.Ornament",t)}("Rendering ornament: ",this.ornament,l,g),this.accidentalLower&&(this.accidentalLower.render(t,l,g),g-=this.accidentalLower.getMetrics().height,g-=this.render_options.accidentalLowerPadding),this.stemUpYOffset&&e.hasStem()&&1===e.getStemDirection()&&(g+=this.stemUpYOffset),e.getLineNumber()<5&&$t.ornamentNoteTransition.indexOf(this.type)>=0&&(g=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,l+this.x_shift,g),this.accidentalUpper&&(g-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,l,g)),t.closeGroup(),this.restoreStyle()}}$t.DEBUG=!1;class Jt extends tt{static get CATEGORY(){return u.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;th+n.width?s:h+n.width),o===J.LEFT&&(h=a.getLeftParenthesisPx(r),i=i>h+n.width?i:h+n.width),n.setXShift(h)}return e.left_shift+=i,e.right_shift+=s,!0}constructor(t){var e;super(),this.position=null!=t?t:tt.Position.LEFT,this.point=null!==(e=z.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:bt.getPoint("default"),this.setWidth(z.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){var e,i;return this.note=t,this.point=null!==(e=z.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:bt.getPoint("default"),this.setWidth(z.currentMusicFont().lookupMetric("parenthesis.default.width")),h(t)&&(this.point=null!==(i=z.currentMusicFont().lookupMetric("parenthesis.gracenote.point"))&&void 0!==i?i:bt.getPoint("gracenote"),this.setWidth(z.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),s=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,s+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,s-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function qt(t){if(!t)return!1;const e=x();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function Qt(t){if(!t)return!1;const e=x();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Zt extends yt{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(y("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Zt.WIDTH,height:Zt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e,i){var s;const n=this.context2D.canvas,a=null!==(s=null!=i?i:x().devicePixelRatio)&&void 0!==s?s:1;return[t,e]=Zt.sanitizeCanvasDims(t*a,e*a),t=t/a|0,e=e/a|0,n.width=t*a,n.height=e*a,qt(n)&&(n.style.width=t+"px",n.style.height=e+"px"),this.scale(a,a)}rect(t,e,i,s){return this.context2D.rect(t,e,i,s),this}fillRect(t,e,i,s){return this.context2D.fillRect(t,e,i,s),this}clearRect(t,e,i,s){return this.context2D.clearRect(t,e,i,s),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,s,n,a){return this.context2D.bezierCurveTo(t,e,i,s,n,a),this}quadraticCurveTo(t,e,i,s){return this.context2D.quadraticCurveTo(t,e,i,s),this}arc(t,e,i,s,n,a){return this.context2D.arc(t,e,i,s,n,a),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,s=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,s=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,s=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:s}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,s){const n=M.validate(t,e,i,s);return this.context2D.font=M.toCSSString(n),this.textHeight=M.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const te={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},ee="http://www.w3.org/2000/svg",ie=2*Math.PI;class se extends yt{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,z.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":M.SANS_SERIF,"font-size":M.SIZE+"pt","font-weight":P.NORMAL,"font-style":A.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(ee,t)}openGroup(t,e,i){const s=this.create("g");return this.groups.push(s),this.parent.appendChild(s),this.parent=s,t&&s.setAttribute("class",v(t)),e&&s.setAttribute("id",v(e)),i&&i.pointerBBox&&s.setAttribute("pointer-events","bounding-box"),this.applyAttributes(s,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),s}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new p("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,s=this.height/this.state.scaleY;return this.setViewBox(0,0,i,s),this}setViewBox(t,e,i,s){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+s;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=te[t.nodeName];for(const s in e)i&&i[s]||!e[s]||0!=this.groupAttributes.length&&e[s]==this.groupAttributes[this.groupAttributes.length-1][s]||t.setAttributeNS(null,s,e[s]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,s,n){s<0&&(e+=s,s*=-1);const a=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.applyAttributes(a,Object.assign({x:t,y:e,width:i,height:s},n)),this.add(a),this}fillRect(t,e,i,s){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,s,n),this}clearRect(t,e,i,s){return this.rect(t,e,i,s,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,s,n,a){return n=this.round(n),a=this.round(a),t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.path+="C"+t+" "+e+","+i+" "+s+","+n+" "+a,this.pen.x=n,this.pen.y=a,this}quadraticCurveTo(t,e,i,s){return i=this.round(i),s=this.round(s),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+s,this.pen.x=i,this.pen.y=s,this}arc(t,e,i,s,n,a){let o=t+i*Math.cos(s),r=e+i*Math.sin(s);o=this.round(o),r=this.round(r);const h=b(s),c=b(n);if(!a&&n-s>=ie||a&&s-n>=ie||h===c){let n=t+i*Math.cos(s+Math.PI),a=e+i*Math.sin(s+Math.PI);n=this.round(n),a=this.round(a),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 0 0 ${n} ${a} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${r}`,this.pen.x=o,this.pen.y=r}else{let d,l=t+i*Math.cos(n),g=e+i*Math.sin(n);s=h,n=c,d=Math.abs(n-s)n&&(d=!d);const m=!a;l=this.round(l),g=this.round(g),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 ${+d} ${+m} ${l} ${g}`,this.pen.x=l,this.pen.y=g}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return se.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const s=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,s),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,s){const n=M.validate(t,e,i,s);this.fontCSSString=M.toCSSString(n);const a={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),a),this.state=Object.assign(Object.assign({},this.state),a),this}getFont(){return this.fontCSSString}}var ne,ae,oe,re;se.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let s=this.cache[t];void 0===s&&(s={},this.cache[t]=s);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let a=s[n];return void 0===a&&(a=this.measureImpl(t,e,i),s[n]=a),a}measureImpl(t,e,i){let s=this.txt;s||(s=document.createElementNS(ee,"text"),this.txt=s),s.textContent=t,i["font-family"]&&s.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&s.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&s.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&s.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(s);const n=s.getBBox();return e.removeChild(s),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ne||(ne={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ae||(ae={}));class he{static buildContext(t,e,i,s,n="#FFF"){const a=new he(t,e);i&&s&&a.resize(i,s);const o=a.getContext();return o.setBackgroundFillStyle(n),he.lastContext=o,o}static getCanvasContext(t,e,i,s){return he.buildContext(t,he.Backends.CANVAS,e,i,s)}static getSVGContext(t,e,i,s){return he.buildContext(t,he.Backends.SVG,e,i,s)}static drawDashedLine(t,e,i,s,n,a){t.beginPath();const o=s-e,r=n-i,h=Math.atan2(r,o);let c=e,d=i;t.moveTo(e,i);let l=0,g=!0;for(;!(o<0?c<=s:c>=s)||!(r<0?d<=n:d>=n);){const e=a[l++%a.length],i=c+Math.cos(h)*e;c=o<0?Math.max(s,i):Math.min(s,i);const m=d+Math.sin(h)*e;d=r<0?Math.max(n,m):Math.min(n,m),g?t.lineTo(c,d):t.moveTo(c,d),g=!g}t.closePath(),t.stroke()}constructor(t,e){if(l(t))this.ctx=t;else{if(void 0===e)throw new p("InvalidArgument","Missing backend argument");const i=e;let s;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new p("BadElementId",`Can't find element with ID "${e}"`);s=e}else s=t;if(i===he.Backends.CANVAS){if(!qt(s))throw new p("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=s.getContext("2d",{willReadFrequently:!0});if(!t)throw new p("BadElement","Can't get canvas context");this.ctx=new Zt(t)}else{if(i!==he.Backends.SVG)throw new p("InvalidBackend",`No support for backend: ${i}`);if(!Qt(s))throw new p("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new se(s)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}he.Backends=ne,he.LineEndType=ae,he.lastContext=void 0;class ce extends tt{static get CATEGORY(){return u.StringNumber}static get metrics(){var t;return null!==(t=z.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,s=e.right_shift;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let i=0;ie.line-t.line));let h=0,c=0,d=0,l=null,m=null;for(let t=0;td?p:d),l=g,m=e}return e.left_shift+=c,e.right_shift+=d,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=he.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=he.LineEndType.NONE&&t<=he.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),s=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,a={};e.hasStem()&&(a=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&s==nt.DOWN&&(o=a.topY-ce.metrics.stemPadding),o+=this.radius+ce.metrics.verticalPadding+this.text_line*z.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+ce.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+ce.metrics.rightPadding;break;default:throw new p("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const r=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,r,o+4.5);const h=this.last_note;if(m(h)){const i=h.getStemX()-e.getX()+5;let s,a;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?he.drawDashedLine(t,n+10,o,n+i,o,[3,3]):he.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case he.LineEndType.UP:s=-10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a);break;case he.LineEndType.DOWN:s=10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a)}}t.restore()}}ce.TEXT_FONT={family:M.SANS_SERIF,size:M.SIZE,weight:P.BOLD,style:A.NORMAL};class de extends tt{static get CATEGORY(){return u.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const s=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(g(e)){const{line:s}=e.getKeyProps()[i];return{line:s,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(_(e)){const{str:s}=e.getPositions()[i];return{line:s,shift:0,stroke:t}}throw new p("Internal","Unexpected instance.")})),n=i,a=s.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=a,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:z.NOTATION_FONT_SCALE},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=e.getYs(),n=i.y,a=i.y;const o=i.x-5,r=e.checkStave().getSpacingBetweenLines(),h=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){s-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/z.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(s,this.checkStave(),t.line),this.glyphs.push(s);const a=this.xPositions[this.xPositions.length-1],o=s.getMetrics().width+n;this.xPositions.push(a+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=z.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,s=i?e.length:e.length-this.accList.length;if(s<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let s;if(this.cancelKeySpec&&(s=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();s&&this.convertAccLines(n,s.type,s.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":s=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":s=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+s,this.timeSignature.point);this.topGlyphs.push(n),r+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0,h=Math.max(h,n.getMetrics().height)}let c=0;for(let t=0;t22?1:0,this.width=Math.max(r,c),this.xMin=this.getMetrics().x_min,this.topStartX=(this.width-r)/2,this.botStartX=(this.width-c)/2,this.reset()}getMetrics(){return{x_min:this.xMin,x_max:this.xMin+this.width,width:this.width}}renderToStave(t){const e=this.checkStave(),i=this.checkContext();let s=t+this.topStartX,n=0;n=this.botGlyphs.length>0?e.getYForLine(this.timeSignature.topLine-this.lineShift):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new p("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new p("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const s=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=s[0])&&void 0!==e?e:"",null!==(i=s[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new ve(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(f(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const we={[kt.CATEGORY]:0,[_e.CATEGORY]:1,[ue.CATEGORY]:2,[be.CATEGORY]:3},Ee={[be.CATEGORY]:0,[ue.CATEGORY]:1,[kt.CATEGORY]:2,[_e.CATEGORY]:3};class Be extends L{static get CATEGORY(){return u.Stave}static get defaultPadding(){const t=z.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return z.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,s){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:z.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},s),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new kt(this.options.left_bar?Et.SINGLE:Et.NONE)),this.addEndModifier(new kt(this.options.right_bar?Et.SINGLE:Et.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new pe(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new Te(t,e,this.x,i)),this}setSection(t,e,i=0,s,n=!0){const a=new xe(t,this.x+i,e,n);return s&&a.setFontSize(s),this.modifiers.push(a),this}setTempo(t,e){return this.modifiers.push(new fe(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new ye(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+t*i+s*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return(t-this.y)/i-s}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+s*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:s}=Et;return t!==e&&t!==i&&t!==s||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Et.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClef(t,e,i,s){void 0===s&&(s=wt.BEGIN),s===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(s,_e.CATEGORY);return 0===n.length?this.addClef(t,e,i,s):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,ue.CATEGORY);return 0===s.length?this.addKeySignature(t,e,i):s[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,be.CATEGORY);return 0===s.length?this.addTimeSignature(t,e,i):s[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new ue(t,e).setPosition(i),i),this}addClef(t,e,i,s){return void 0===s||s===wt.BEGIN?this.clef=t:s===wt.END&&(this.endClef=t),this.addModifier(new _e(t,e,i),s),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new be(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,s=void 0===e;return i&&s?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):s?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let s=0;se[t[s+1].getCategory()]){const e=t[s];t[s]=t[s+1],t[s+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),s=this.getModifiers(wt.END);let n,a,r;this.sortByCategory(i,we),this.sortByCategory(s,Ee),i.length>1&&t.getType()===Et.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new kt(Et.SINGLE))),s.indexOf(e)>0&&s.splice(0,0,new kt(Et.NONE));let h=0,c=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new p("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new p("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new p("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new p("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const s=t.getModifiers(wt.BEGIN,e);s.length>0&&s[0].getX()>i&&(i=s[0].getX())}));let s=0;t.forEach((t=>{s=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>s&&(s=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let a=!1;n.forEach((t=>{t.getCategory()===e&&(a=!0),a&&s>0&&t.setX(t.getX()+s)})),t.setNoteStartX(t.getNoteStartX()+s)}))};t.forEach((t=>{t.formatted||t.format()})),e(u.Clef),e(u.KeySignature),e(u.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,u.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,u.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.setX(i)}))}))}}function Ce(t,e,i,s,n){if(e!==Ne.type.BOLD_DOUBLE_LEFT&&e!==Ne.type.BOLD_DOUBLE_RIGHT)throw new p("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let a=3,o=3.5;e===Ne.type.BOLD_DOUBLE_RIGHT&&(a=-5,o=3),t.fillRect(i+a,s,1,n-s),t.fillRect(i-2,s,o,n-s)}Be.TEXT_FONT={family:M.SANS_SERIF,size:8,weight:P.NORMAL,style:A.NORMAL};class Ne extends L{static get CATEGORY(){return u.StaveConnector}constructor(t,e){super(),this.thickness=z.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Ne.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Ne.typeString[t]:t;return Object.values(Ne.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new p("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,s=this.width,n=this.top_stave.getX();(this.type===Ne.type.SINGLE_RIGHT||this.type===Ne.type.BOLD_DOUBLE_RIGHT||this.type===Ne.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let a=i-e;switch(this.type){case Ne.type.SINGLE:case Ne.type.SINGLE_LEFT:case Ne.type.SINGLE_RIGHT:s=1;break;case Ne.type.DOUBLE:n-=this.width+2,e-=this.thickness,a+=.5;break;case Ne.type.BRACE:{s=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,r=n,h=i,c=n-s,d=o+a/2,l=c-.9*s,g=o+.2*a,m=n+1.1*s,_=d-.135*a,u=m,p=d+.135*a,x=l,f=h-.2*a,S=c-s,y=f,T=n+.4*s,v=d+.135*a,b=T,w=d-.135*a,E=S,B=g;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(l,g,m,_,c,d),t.bezierCurveTo(u,p,x,f,r,h),t.bezierCurveTo(S,y,T,v,c,d),t.bezierCurveTo(b,w,E,B,n,o),t.fill(),t.stroke();break}case Ne.type.BRACKET:e-=6,i+=6,a=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Ne.type.BOLD_DOUBLE_LEFT:Ce(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Ne.type.BOLD_DOUBLE_RIGHT:Ce(t,this.type,n,e,i-this.thickness);break;case Ne.type.THIN_DOUBLE:s=1,a-=this.thickness;break;case Ne.type.NONE:break;default:throw new p("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Ne.type.BRACE&&this.type!==Ne.type.BOLD_DOUBLE_LEFT&&this.type!==Ne.type.BOLD_DOUBLE_RIGHT&&this.type!==Ne.type.NONE&&t.fillRect(n,e,s,a),this.type===Ne.type.THIN_DOUBLE&&t.fillRect(n-3,e,s,a),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;e{e.addToModifierContext(new me);const s=(new Kt).addTickable(e).preFormat(),n=s.getMetrics();return s.setX(t+n.totalLeftPx),t+s.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,s,n,a){const o=i+(a=Object.assign({stavePadding:z.currentMusicFont().lookupMetric("stave.padding")},a)).stavePadding,r=e.contextGaps;t.save(),t.setFont(M.SANS_SERIF,8),r.gaps.forEach((e=>{var i,a,r;i=o+e.x1,a=o+e.x2,r="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(r),t.setFillStyle(r),t.setLineWidth(1),t.fillRect(i,s,Math.max(a-i,0),n-s),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${r.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,s){let n={auto_beam:!1,align_rests:!1};"object"==typeof s?n=Object.assign(Object.assign({},n),s):"boolean"==typeof s&&(n.auto_beam=s);const a=new Xt(z.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(i),o=n.auto_beam?Le.applyAndGetBeams(a):[];return(new Ae).joinVoices([a]).formatToStave([a],e,{align_rests:n.align_rests,stave:e}),a.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),a.getBoundingBox()}static FormatAndDrawTab(t,e,i,s,n,a,o){let r={auto_beam:a,align_rests:!1};"object"==typeof o?r=Object.assign(Object.assign({},r),o):"boolean"==typeof o&&(r.auto_beam=o);const h=new Xt(z.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(n),c=new Xt(z.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(s),d=r.auto_beam?Le.applyAndGetBeams(h):[];(new Ae).joinVoices([h]).joinVoices([c]).formatToStave([h,c],i,{align_rests:r.align_rests}),h.draw(t,i),c.draw(t,e),d.forEach((e=>e.setContext(t).draw())),new Ne(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((s,n)=>{if(g(s)&&s.isRest()){if(s.getTuplet()&&!i)return;const a=s.getGlyphProps().position.toUpperCase();if("R/4"!==a&&"B/4"!==a)return;if(e||s.getBeam()){const e=s.getKeyProps()[0];if(0===n)e.line=Pe(t,e.line,n,!1);else if(n>0&&nAe.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=z.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,s=0,n=0;const a=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new p("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:r,map:h}=this.tickContexts;this.minTotalWidth=0,r.forEach((e=>{const r=h[e];r.preFormat(),r.getTickables().length{s+=t.getMetrics().width,n+=t.getTicks().value(),a.push(t.getMetrics().width),o.push(t.getTicks().value())}));const c=r.getWidth();this.minTotalWidth+=c})),this.hasMinTotalWidth=!0;const c=s>0?s/a.length:1/a.length,d=w(a.map((t=>Math.pow(t-c,2)))),l=Math.pow(d/a.length,.5)/c,g=n/o.length,m=w(o.map((t=>Math.pow(t-g,2)))),_=Math.pow(m/o.length,.5)/g,u=Math.max(_,l)*r.length*e,x=e*i;return this.minTotalWidth+Math.max(x,u)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new p("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new p("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new p("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===Xt.Mode.STRICT&&!i.isComplete())throw new p("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,E.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=Ae.getResolutionMultiplier(t),i=new Map,s=[];t.forEach((t=>{const n=new E(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let a=i.get(t.getStave());if(a||(i.set(t.getStave(),{}),a=i.get(t.getStave())),!(a?a[e]:void 0)){const t=new me;s.push(t),a[e]=t}t.addToModifierContext(a[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:s,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const s={},n=[],a=[],o=Ae.getResolutionMultiplier(t);return t.forEach(((t,r)=>{const h=new E(0,o);t.getTickables().forEach((t=>{const o=h.numerator;if(!s[o]){const t=e({tickID:o});a.push(t),s[o]=t,n.push(o)}i(t,s[o],r),h.add(t.getTicks())}))})),{map:s,array:a,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Kt(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,s){const n=this.tickContexts;if(!n)throw new p("NoTickContexts","preFormat requires TickContexts");const{list:a,map:o}=n;this.lossHistory=[],i&&s&&i.forEach((t=>t.setStave(s).preFormat()));let r=0,h=0;this.minTotalWidth=0;let c=0;a.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const s=e.getMaxTicks().value();c+=s;const n=e.getMetrics();r=r+h+n.totalLeftPx,e.setX(r),h=i-n.totalLeftPx}));const{globalSoftmax:d,softmaxFactor:l,maxIterations:g}=this.formatterOptions,m=w(a.map((t=>Math.pow(l,o[t].getMaxTicks().value()/c))));if(this.minTotalWidth=r+h,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const _=o[a[0]],u=o[a[a.length-1]];function x(t){return a.map(((e,i)=>{const s=o[e],n=s.getTickablesByVoice();let r;if(i>0){const e=o[a[i-1]];for(let h=i-1;h>=0;h--){const i=o[a[h]].getTickablesByVoice(),g=[];if(Object.keys(n).forEach((t=>{i[t]&&g.push(t)})),g.length>0){let a=0,o=1/0,h=0;if(g.forEach((t=>{const e=i[t].getTicks().value();e>a&&(r=i[t],a=e);const s=n[t],h=s.getX()-(s.getMetrics().modLeftPx+s.getMetrics().leftDisplacedHeadPx),c=i[t].getMetrics(),d=i[t].getX()+c.notePx+c.modRightPx+c.rightDisplacedHeadPx;o=Math.min(o,h-d)})),o=Math.min(o,s.getX()-(e.getX()+.05*t)),d){const e=c;h=Math.pow(l,a/e)/m*t}else void 0!==r&&(h=r.getVoice().softmax(a)*t);return{expectedDistance:h,maxNegativeShiftPx:o,fromTickable:r}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function S(t){const e=y/2;let i=0;return a.forEach(((s,n)=>{const a=o[s];if(n>0){const e=a.getX(),s=t[n],o=f(s.fromTickable).getX()+s.expectedDistance-(e+i);let r=0;o>0?i+=o:o<0&&(r=Math.min(s.maxNegativeShiftPx,Math.abs(o)),i+=-r),a.setX(e+i)}a.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-a.getX())}))})),u.getX()-_.getX()}const y=t-u.getMetrics().notePx-u.getMetrics().totalRightPx-_.getMetrics().totalLeftPx,T=z.currentMusicFont(),v=T.lookupMetric("stave.endPaddingMin"),b=T.lookupMetric("stave.endPaddingMax"),E=T.lookupMetric("stave.padding");let B=y;const C=x(B);let N=S(C);if(1===a.length)return 0;const P=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=u&&u.getMaxTickable();if(i){const s=i.getVoice();if(s.getTicksUsed().value()>s.getTotalTicks().value())return 2*bF&&M>0||N+k1;)B-=N-F,k=A(B),D=k-(b-v),N=S(x(B)),M--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const s=t.list[i-1],n=t.map[s],a=t.map[e],o=n.getMetrics(),r=a.getMetrics(),h=n.getX()+o.notePx+o.totalRightPx,c=a.getX()-r.totalLeftPx,d=c-h;this.contextGaps.total+=d,this.contextGaps.gaps.push({x1:h,x2:c}),a.getFormatterMetrics().freedom.left=d,n.getFormatterMetrics().freedom.right=d})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,s,n)=>{const a=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),r=t.getFormatterMetrics(),h=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let c=0;if(s{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,s+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(s),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const s=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,a)=>{const o=i.map[t],r=e>0?i.map[a[e-1]]:void 0,h=et.getFormatterMetrics().space.deviation)));c>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(c)):c<0&&(n=h?Math.min(h.getFormatterMetrics().freedom.right,Math.abs(c)):0),n*=s,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const s=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,s.align_rests),this.createTickContexts(t),this.preFormat(e,s.context,t,s.stave),s.stave&&this.postFormat(),this}formatToStave(t,e,i){const s=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-Be.defaultPadding;return function(...t){Ae.DEBUG&&S("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,s)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var ke;Ae.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(ke||(ke={}));class De extends L{static get CATEGORY(){return u.Tuplet}static get LOCATION_TOP(){return ke.TOP}static get LOCATION_BOTTOM(){return ke.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=z.currentMusicFont().getMetrics().tuplet;if(!t)throw new p("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new p("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=3*z.NOTATION_FONT_SCALE/5,this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||De.LOCATION_TOP),Ae.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),s=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const a=n(e,t);i=a>i?a:i,s=a0&&(s=Math.min(a,s))}}}else{let t=De.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),s=i.checkStave().getYForLine(t)+De.metrics.noteHeadOffset;for(let t=0;ts&&(s=e)}}return s+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const s=(t,e)=>t+f(e.getMetrics().width);let n=this.numerator_glyphs.reduce(s,0);this.ratioed&&(n=this.denom_glyphs.reduce(s,n),n+=.32*this.point);const a=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=z.currentMusicFont().lookupMetric("digits.shiftY",0);let r=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=f(e.getMetrics().width)})),this.ratioed){const e=a+r+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),r+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=f(e.getMetrics().width)}))}}}function Fe(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Me="L",Re="R",Oe="B";class Le extends L{static get CATEGORY(){return u.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new E).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new E(3,i)];if(i>4)return[new E(2,i)];if(i<=4)return[new E(1,i)]}return[new E(1,4)]}static applyAndGetBeams(t,e,i){return Le.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new E(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new p("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(z.RESOLUTION,1)})),s=t;let n=0,a=[],o=[];function r(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new E(0,1);s.forEach((s=>{if(t=[],s.shouldIgnoreTicks())return a.push(o),void(o=t);o.push(s);const h=i[n].clone(),c=(d=o,d.reduce(((t,e)=>e.getTicks().clone().add(t)),new E(0,1))).add(e);var d;const l=z.durationToNumber(s.getDuration())<8;if(l&&s.getTuplet()&&(h.numerator*=2),c.greaterThan(h)){if(!l){const e=o.pop();e&&t.push(e)}a.push(o);do{e=c.subtract(i[n]),r()}while(e.greaterThanEquals(i[n]));o=t}else c.equals(h)&&(a.push(o),e=new E(0,1),o=t,r())})),o.length>0&&a.push(o)}(),function(){const t=[];a.forEach((i=>{let s=[];i.forEach(((i,n,a)=>{const o=0===n||n===a.length-1,r=a[n-1],h=!e.beam_rests&&i.isRest(),c=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let d=!1;if(e.maintain_stem_directions&&r&&!i.isRest()&&!r.isRest()){const t=r.getStemDirection();d=i.getStemDirection()!==t}const l=parseInt(i.getDuration(),10)<8;h||c||d||l?(s.length>0&&t.push(s),s=d?[i]:[]):s.push(i)})),s.length>0&&t.push(s)})),a=t}(),a.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const h=a.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=z.durationToTicks("4")&&(e=!1)})),e}return!1})),c=function(){const t=[];return a.forEach((e=>{let i;e.forEach((e=>{const s=e.getTuplet();s&&i!==s&&(i=s,t.push(i))}))})),t}(),d=[];return h.forEach((t=>{const i=new Le(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=z.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),d.push(i)})),c.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?ke.BOTTOM:ke.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=z.durationToTicks("4"))throw new p("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,s;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&g(t[0]))n=Fe(t);else if(e&&_(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,s){return i+(t-e)*s}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:s,slope_iterations:n,slope_cost:a}}=this,o=t[0],r=function(t,e){const i=t.getStemExtents().topY,s=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-s)}(o,t[t.length-1]),h=(i-s)/n;let c=Number.MAX_VALUE,d=0,l=0;for(let n=s;n<=i;n+=h){let i=0,s=0;for(let a=1;an)&&(h=n,o=Math.min(...s.getYs()),r=s.getBeamCount())}let c=a/t.length;const d=s+r*(1.5*i),l=o+d*-e;e===nt.DOWN&&cl&&(c=o-d),n?(e===nt.DOWN&&c>n||e===nt.UP&&c=8&&(d=-1!==this.break_on_indices.indexOf(h),this.render_options.secondary_break_ticks&&r>=this.render_options.secondary_break_ticks&&(r=0,d=!0));const l=c.getIntrinsicTicks(){const i=e.getStem();if(i){const s=e.getStemX();i.setNoteHeadXBounds(s,s),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let s=this.getBeamYToDraw();const n=i.getStemX(),a=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=s),o?this.matchSuccess():this.matchFail(s),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(He("Evaluating rule function:",t),!t)throw new p("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw He(i),new p("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const s=[];return e.matches=s,e.results&&e.results.forEach((t=>s.push(Ye(t)))),i.run&&e.success&&i.run({matches:s}),e}}function Xe(...t){Qe.DEBUG&&S("Vex.Flow.EasyScore",t)}je.DEBUG=!1;class Ve{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class ze{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){Xe("resetPiece"),this.piece=new ze(this.rollingDuration)}setNoteDots(t){Xe("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){Xe("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){Xe("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){Xe("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){Xe("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){Xe("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){Xe("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),Xe("endChord")}commitPiece(){Xe("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=f(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),s=f(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:a,dots:o,type:r}=this.piece,h=et.accidentals,c=n.map((t=>{var e;return t.key+(h.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),d="auto"===i,l="g"==(null==r?void 0:r.toLowerCase())?t.GhostNote({duration:a,dots:o}):t.StaveNote({keys:c,duration:a,dots:o,type:r,clef:s,auto_stem:d});d||l.setStemDirection("up"===i?nt.UP:nt.DOWN);const g=[];n.forEach(((e,i)=>{const s=e.accid;if("string"==typeof s){const e=t.Accidental({type:s});l.addModifier(e,i),g.push(e)}else g.push(void 0)}));for(let t=0;tt(e,l,this))),this.elements.notes.push(l),this.elements.accidentals.push(g),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const s=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(s);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,St.easyScoreHook,Lt.easyScoreHook],throwOnError:!1},t),{factory:s,builder:n}),this.factory=s,this.builder=n,this.grammar=new Ve(this.builder),this.parser=new je(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw Xe(i),new p("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends It{static get CATEGORY(){return u.GhostNote}constructor(t){if(!t)throw new p("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new p("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=ri.type.TEXT&&t<=ri.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,s=!1;this.notes.forEach(((n,a,o)=>{var r;s=!s;const h=n.getAbsoluteX(),c=n.checkStave().getYForBottomText(this.line+3);if(h{var s;e=!e;const n=i.checkStave(),a=i.getAbsoluteX(),o=n.getYForBottomText(this.line+3),r=null!==(s=z.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`))&&void 0!==s?s:z.NOTATION_FONT_SCALE;let h=0;e?this.custom_depress_text?(h=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,a-h/2,o)):oi("pedal_depress",t,a,o,r):this.custom_release_text?(h=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,a-h/2,o)):oi("pedal_release",t,a,o,r)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){ri.DEBUG&&S("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===ri.type.BRACKET||this.type===ri.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===ri.type.TEXT&&this.drawText(),t.restore()}}ri.DEBUG=!1,ri.TEXT_FONT={family:M.SERIF,size:12,weight:P.BOLD,style:A.ITALIC},ri.GLYPHS={pedal_depress:{code:"keyboardPedalPed"},pedal_release:{code:"keyboardPedalUp"}},ri.type={TEXT:1,BRACKET:2,MIXED:3},ri.typeString={text:ri.type.TEXT,bracket:ri.type.BRACKET,mixed:ri.type.MIXED};const hi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class ci extends ei{static get CATEGORY(){return u.RepeatNote}constructor(t,e,i){super(new Z(hi[t]||"repeat1Bar",z.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function di(t,e,i,s,n,a,o){t.beginPath(),t.moveTo(e,i),t.lineTo(s,n),t.lineTo(a,o),t.lineTo(e,i),t.closePath(),t.fill()}class li extends L{static get CATEGORY(){return u.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:li.TextVerticalPosition.TOP,text_justification:li.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new p("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new p("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const s=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,a=e.y,o=i.x,r=i.y,h=Math.sqrt((o-n)*(o-n)+(r-a)*(r-a)),c=(h-this.render_options.arrowhead_length/3)/h;let d,l,g,m;this.render_options.draw_end_arrow||s?(d=Math.round(n+(o-n)*c),l=Math.round(a+(r-a)*c)):(d=o,l=r),this.render_options.draw_start_arrow||s?(g=n+(o-n)*(1-c),m=a+(r-a)*(1-c)):(g=n,m=a),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(g,m),t.lineTo(d,l),t.stroke(),t.closePath();const _=Math.atan2(r-a,o-n),u=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let p,x,f,S,y,T;(this.render_options.draw_end_arrow||s)&&(p=_+Math.PI+this.render_options.arrowhead_angle,f=o+Math.cos(p)*u,S=r+Math.sin(p)*u,x=_+Math.PI-this.render_options.arrowhead_angle,y=o+Math.cos(x)*u,T=r+Math.sin(x)*u,di(t,f,S,o,r,y,T)),(this.render_options.draw_start_arrow||s)&&(p=_+this.render_options.arrowhead_angle,f=n+Math.cos(p)*u,S=a+Math.sin(p)*u,x=_-this.render_options.arrowhead_angle,y=n+Math.cos(x)*u,T=a+Math.sin(x)*u,di(t,f,S,n,a,y,T))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,s=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},a={x:0,y:0};this.first_indices.forEach(((o,r)=>{const h=this.last_indices[r];n=e.getModifierStartXY(2,o),a=i.getModifierStartXY(1,h);const c=n.y>a.y;n.x+=e.getMetrics().modRightPx+s.padding_left,a.x-=i.getMetrics().modLeftPx+s.padding_right;const d=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=d+s.padding_left);i.getKeyProps()[h].displaced&&-1===i.getStemDirection()&&(a.x-=d+s.padding_right),n.y+=c?-3:1,a.y+=c?2:0,this.drawArrowLine(t,n,a)})),t.restore();const o=t.measureText(this.text).width,r=s.text_justification;let h=0;if(r===li.TextJustification.LEFT)h=n.x;else if(r===li.TextJustification.CENTER){h=(a.x-n.x)/2+n.x-o/2}else r===li.TextJustification.RIGHT&&(h=a.x-o);let c=0;const d=s.text_position_vertical;return d===li.TextVerticalPosition.TOP?c=e.checkStave().getYForTopText():d===li.TextVerticalPosition.BOTTOM&&(c=e.checkStave().getYForBottomText(z.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,h,c),t.restore(),this}}li.TEXT_FONT=Object.assign({},L.TEXT_FONT),li.TextVerticalPosition={TOP:1,BOTTOM:2},li.TextJustification=oe;class gi extends L{static get CATEGORY(){return u.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new p("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),s=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),a=this.getContext();return n.voices.forEach((t=>{t.setContext(a).setStave(s).getTickables().forEach((t=>t.setStave(s))),this.partVoices.push(t)})),this.partStaves.push(s),this.partStaveInfos.push(n),s}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new Ae(t);this.formatter=i;let s=this.options.y,n=0;const a=[];this.partStaves.forEach(((t,e)=>{s+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(s),s+=t.space(this.partStaveInfos[e].spaceBelow),s+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(a.push({y:s,stave:t}),s+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Be.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-Be.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&bt.plotMetrics(t,i,e.y)}))}))}))}}class mi extends It{static get CATEGORY(){return u.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new p("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new p("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:s}}=this,n=this.checkContext(),a=null==e&&s;if(i.flag&&a){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{r(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),s=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(s&&n){const s=function(t,e,i,s){const n=1!==s,a=-1!==s,o=i.getSpacingBetweenLines(),r=i.getNumLines(),h=[];return e.forEach((e=>{const c=e.indexOf(r)>-1,d=e.indexOf(1)>-1;if(n&&d||a&&c)return;1===e.length&&e.push(e[0]);const l=[];e.forEach(((e,n,a)=>{const h=1===e,c=e===r;let d=i.getYForLine(e-1);0!==n||h?n!==a.length-1||c||(d+=o/2-1):d-=o/2-1,l.push(d),1===s&&h?l.push(t-2):-1===s&&c&&l.push(t+2)})),h.push(l.sort(((t,e)=>t-e)))})),h}(e,function(t,e){const i=[];let s=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(s),s=[]):s.push(n);return s.length>0&&i.push(s),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),s.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),s=this.ys;for(let n=0;n{const i=Si.GLYPHS[e];if(!i)throw new p("Invalid dynamics character: "+e);const s=f(this.render_options.glyph_font_size),n=new Z(i.code,s,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);fi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,s)=>{const n=this.sequence[s];t.render(this.checkContext(),i,e),i+=Si.GLYPHS[n].width}))}}Si.DEBUG=!1;class yi extends bt{static get CATEGORY(){return u.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new be(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Ti extends L{static get CATEGORY(){return u.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,s=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=s-i,function(...t){Ti.DEBUG&&S("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",s,"y:",e),le.renderVibrato(t,i,e,this.render_options)}}function vi(...t){bi.DEBUG&&S("Vex.Flow.Factory",t)}Ti.DEBUG=!1;class bi{static newFromElementId(t,e=500,i=200){return new bi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){vi("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:bi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:s}=this.options.renderer;if(null==t)return;if(""==t)throw vi(this),new p("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=qt(document.getElementById(t))?he.Backends.CANVAS:he.Backends.SVG}this.context=he.buildContext(t,n,e,i,s)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),s=new Be(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),s=new _i(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}StaveNote(t){const e=new Ut(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const s=new ei(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}RepeatNote(t,e,i){const s=new ci(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new Se(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Dt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new We(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new yi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new si(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new mi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Vt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new st(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:dt.CENTER,vJustify:lt.BOTTOM},t),i=new gt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Rt;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new St(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),s=new $t(t);return s.setPosition(i.position),i.upperAccidental&&s.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&s.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&s.setDelayed(i.delayed),s.setContext(this.context),s}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new Si({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Lt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new ce(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Kt}ModifierContext(){return new me}MultiMeasureRest(t){const e=f(t.number_of_measures,"NoNumberOfMeasures"),i=new ai(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new Xt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Ne(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new Ae(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new De(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,s,n,a;const o=new Le(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(s=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==s?s:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ue(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Ht({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const s=new li({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&s.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&s.setFont(t.options.font),s.setContext(this.context),this.renderQ.push(s),s}VibratoBracket(t){const e=new Ti({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new xi({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new gi(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new ri(e.notes);return i.setType(ri.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new zt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}bi.DEBUG=!1,bi.TEXT_FONT=Object.assign({},L.TEXT_FONT);class wi extends mi{static get CATEGORY(){return u.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${M.SANS_SERIF}`}),this.updateWidth()}}class Ei{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new p("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;es?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new p("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,s=t.first_ys,n=t.last_x_px,a=t.direction;if(a!==Ci.SLIDE_UP&&a!==Ci.SLIDE_DOWN)throw new p("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new p("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),s=Number(t);if(s<0)throw new p("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+s}getNoteForFret(t,e){const i=this.getValueForFret(t,e),s=Math.floor(i/12),n=i%12;return`${z.integerToNote(n)}/${s}`}}var Ai=function(t,e,i,s){return new(i||(i=Promise))((function(n,a){function o(t){try{h(s.next(t))}catch(t){a(t)}}function r(t){try{h(s.throw(t))}catch(t){a(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,r)}h((s=s.apply(t,e||[])).next())}))};class ki{static get BUILD(){return{VERSION:"4.2.2",ID:"7ad933bdf12b4137ce04d3f332a838887d08a595",DATE:"2023-07-03T19:56:22.952Z"}}static setMusicFont(...t){const e=t.map((t=>M.load(t)));return z.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return Ai(this,void 0,void 0,(function*(){}))}static getMusicFont(){return z.MUSIC_FONT_STACK.map((t=>t.getName()))}static getMusicFontStack(){return z.MUSIC_FONT_STACK}static get RENDER_PRECISION_PLACES(){return z.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){z.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return z.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){z.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return z.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){z.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return z.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){z.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return z.RESOLUTION}static set RESOLUTION(t){z.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return z.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){z.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return z.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){z.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return z.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){z.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return z.STEM_HEIGHT}static set STEM_HEIGHT(t){z.STEM_HEIGHT=t}static get STEM_WIDTH(){return z.STEM_WIDTH}static set STEM_WIDTH(t){z.STEM_WIDTH=t}static get TIME4_4(){return z.TIME4_4}static get accidentalMap(){return z.accidentalMap}static get unicode(){return z.unicode}static keySignature(t){return z.keySignature(t)}static hasKeySignature(t){return z.hasKeySignature(t)}static getKeySignatures(){return z.getKeySignatures()}static clefProperties(t){return z.clefProperties(t)}static keyProperties(t,e,i){return z.keyProperties(t,e,i)}static durationToTicks(t){return z.durationToTicks(t)}}ki.Accidental=st,ki.Annotation=gt,ki.Articulation=St,ki.Barline=kt,ki.BarNote=Dt,ki.Beam=Le,ki.Bend=Ft,ki.BoundingBox=C,ki.BoundingBoxComputation=N,ki.CanvasContext=Zt,ki.ChordSymbol=Rt,ki.Clef=_e,ki.ClefNote=We,ki.Crescendo=Ie,ki.Curve=Ue,ki.Dot=Ot,ki.EasyScore=Qe,ki.Element=L,ki.Factory=bi,ki.Font=M,ki.Formatter=Ae,ki.Fraction=E,ki.FretHandFinger=Lt,ki.GhostNote=ti,ki.Glyph=Z,ki.GlyphNote=ei,ki.GraceNote=ii,ki.GraceNoteGroup=Vt,ki.GraceTabNote=wi,ki.KeyManager=Ei,ki.KeySignature=ue,ki.KeySigNote=si,ki.Modifier=tt,ki.ModifierContext=me,ki.MultiMeasureRest=ai,ki.Music=et,ki.Note=bt,ki.NoteHead=Wt,ki.NoteSubGroup=zt,ki.Ornament=$t,ki.Parenthesis=Jt,ki.Parser=je,ki.PedalMarking=ri,ki.Registry=O,ki.RenderContext=yt,ki.Renderer=he,ki.RepeatNote=ci,ki.Repetition=pe,ki.Stave=Be,ki.StaveConnector=Ne,ki.StaveHairpin=Bi,ki.StaveLine=li,ki.StaveModifier=At,ki.StaveNote=Ut,ki.StaveTempo=fe,ki.StaveText=ye,ki.StaveTie=Ht,ki.Stem=nt,ki.StringNumber=ce,ki.Stroke=de,ki.SVGContext=se,ki.System=gi,ki.TabNote=mi,ki.TabSlide=Ci,ki.TabStave=_i,ki.TabTie=Yt,ki.TextBracket=xi,ki.TextDynamics=Si,ki.TextFormatter=ct,ki.TextNote=Se,ki.TickContext=Kt,ki.TimeSignature=be,ki.TimeSigNote=yi,ki.Tremolo=Ni,ki.Tuning=Pi,ki.Tuplet=De,ki.Vibrato=le,ki.VibratoBracket=Ti,ki.Voice=Xt,ki.Volta=Te,ki.AnnotationHorizontalJustify=dt,ki.AnnotationVerticalJustify=lt,ki.ChordSymbolHorizontalJustify=Bt,ki.ChordSymbolVerticalJustify=Ct,ki.SymbolTypes=Nt,ki.SymbolModifiers=Pt,ki.CurvePosition=Ge,ki.FontWeight=P,ki.FontStyle=A,ki.ModifierPosition=J,ki.RendererBackends=ne,ki.RendererLineEndType=ae,ki.BarlineType=Et,ki.StaveModifierPosition=wt,ki.VoltaType=re,ki.TextBracketPosition=pi,ki.TextJustification=oe,ki.VoiceMode=jt;const Di={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Fi={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Mi={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Ri={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},Oi={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Li{static sortAndUnique(t,e,i){if(t.length>1){const s=[];let n;t.sort(e);for(let e=0;eWi(void 0,void 0,void 0,(function*(){const i=M.load(t);if(i.hasData())return;if(!e){if(!(t in Ii))throw new p("UnknownFont",`Music font ${t} does not exist.`);e=Ii[t]}let s;if("string"==typeof e){const i=yield import(e),n=x().VexFlowFont;s=void 0!==n&&void 0!==n[t]?n[t]:i.Font}else s=e;i.setData(s.data),i.setMetrics(s.metrics)})),function(){{const t=Mi,{fontFamily:e,resolution:i,glyphs:s}=t;M.load(e,t);const n="@";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!0,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!1,description:"Generic SANS font"})}{const t=Ri,{fontFamily:e,resolution:i,glyphs:s}=t;M.load(e,t);const n="@";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!1,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!1,description:"Generic SANS font"})}{const t=Oi,{fontFamily:e,resolution:i,glyphs:s}=t;M.load(e,t);const n="@";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!1,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!0,description:"Generic SERIF font"})}{const t=Fi,{fontFamily:e,resolution:i,glyphs:s}=t;M.load(e,t);const n="b";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!1,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!0,description:"Text font to pair with the Bravura / Gonville music fonts."})}{const t=Di,{fontFamily:e,resolution:i,glyphs:s}=t;M.load(e,t);const n="b";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!1,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!1,description:"Text font to pair with the Petaluma music font."})}}(),e=e.default})())); +//# sourceMappingURL=vexflow-core.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-core.js.map b/build/cjs/vexflow-core.js.map new file mode 100644 index 0000000000..fb2379716f --- /dev/null +++ b/build/cjs/vexflow-core.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-core.js","mappings":";;;;;CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAa,IAAID,IAEjBD,EAAU,IAAIC,GACf,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,IACrG,M,aCTA,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,GCNDF,EAAoBQ,EAAI,WACvB,GAA0B,iBAAfV,WAAyB,OAAOA,WAC3C,IACC,OAAOC,MAAQ,IAAIU,SAAS,cAAb,EAChB,CAAE,MAAOC,GACR,GAAsB,iBAAXb,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBG,EAAoBG,EAAI,CAACQ,EAAKC,IAAUR,OAAOS,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFZ,EAAoBgB,EAAKvB,IACH,oBAAXwB,QAA0BA,OAAOC,aAC1Cd,OAAOC,eAAeZ,EAASwB,OAAOC,YAAa,CAAEC,MAAO,WAE7Df,OAAOC,eAAeZ,EAAS,aAAc,CAAE0B,OAAO,GAAO,E,yCCOvD,SAASC,EAAWT,EAAKU,EAAUC,GAAiB,GAEvD,GAAmB,iBAARX,GAA4B,OAARA,EAC3B,OAAO,EAIX,IAAIY,EAAiBZ,EAAIa,YAEzB,GAAIF,EAAgB,CAEhB,KAAe,OAARX,GAAc,CAEjB,GADAY,EAAiBZ,EAAIa,YACjB,aAAcD,GAAkBA,EAAeE,WAAaJ,EAC5D,OAAO,EAEXV,EAAMP,OAAOsB,eAAef,EAChC,CACA,OAAO,CACX,CAGI,MAAO,aAAcY,GAAkBA,EAAeE,WAAaJ,CAE3E,C,s7EACO,MAAMM,EAAgBhB,GAAQS,EAAWT,EAAKiB,EAASC,YACjDC,EAAgBnB,GAAQS,EAAWT,EAAKiB,EAASG,YACjDC,EAAarB,GAAQS,EAAWT,EAAKiB,EAASK,SAC9CC,EAASvB,GAAQS,EAAWT,EAAKiB,EAASO,KAC1CC,EAAezB,GAAQS,EAAWT,EAAKiB,EAASS,WAChDC,EAAoB3B,GAAQS,EAAWT,EAAKiB,EAASW,gBACrDC,EAAU7B,GAAQS,EAAWT,EAAKiB,EAASa,MAC3CC,EAAmB/B,GAAQS,EAAWT,EAAKiB,EAASe,eACpDC,EAAejC,GAAQS,EAAWT,EAAKiB,EAASiB,WAChDC,EAAmBnC,GAAQS,EAAWT,EAAKiB,EAASmB,eACpDC,EAAarC,GAAQS,EAAWT,EAAKiB,EAASqB,SAGpD,IAAIrB,GACX,SAAWA,GACPA,EAAqB,WAAI,aACzBA,EAAqB,WAAI,aACzBA,EAAuB,aAAI,eAC3BA,EAAkB,QAAI,UACtBA,EAAkB,QAAI,UACtBA,EAAe,KAAI,OACnBA,EAAe,KAAI,OACnBA,EAAsB,YAAI,cAC1BA,EAAe,KAAI,OACnBA,EAAmB,SAAI,WACvBA,EAAoB,UAAI,YACxBA,EAAgB,MAAI,QACpBA,EAAc,IAAI,MAClBA,EAAkB,QAAI,UACtBA,EAAmB,SAAI,WACvBA,EAAyB,eAAI,iBAC7BA,EAAoB,UAAI,YACxBA,EAAgB,MAAI,QACpBA,EAAoB,UAAI,YACxBA,EAAoB,UAAI,YACxBA,EAAyB,eAAI,iBAC7BA,EAAuB,aAAI,eAC3BA,EAAuB,aAAI,eAC3BA,EAAqB,WAAI,aACzBA,EAAmB,SAAI,WACvBA,EAA2B,iBAAI,mBAC/BA,EAAe,KAAI,OACnBA,EAAmB,SAAI,WACvBA,EAAuB,aAAI,eAC3BA,EAAmB,SAAI,WACvBA,EAAsB,YAAI,cAC1BA,EAAuB,aAAI,eAC3BA,EAAwB,cAAI,gBAC5BA,EAAqB,WAAI,aACzBA,EAAqB,WAAI,aACzBA,EAAgB,MAAI,QACpBA,EAAyB,eAAI,iBAC7BA,EAAuB,aAAI,eAC3BA,EAAoB,UAAI,YACxBA,EAAwB,cAAI,gBAC5BA,EAAoB,UAAI,YACxBA,EAAuB,aAAI,eAC3BA,EAAqB,WAAI,aACzBA,EAAoB,UAAI,YACxBA,EAAmB,SAAI,WACvBA,EAAe,KAAI,OACnBA,EAAwB,cAAI,gBAC5BA,EAAuB,aAAI,eAC3BA,EAAiB,OAAI,SACrBA,EAAiB,OAAI,SACrBA,EAAkB,QAAI,UACtBA,EAAmB,SAAI,WACvBA,EAAmB,SAAI,WACvBA,EAAiB,OAAI,SACrBA,EAAsB,YAAI,cAC1BA,EAAuB,aAAI,eAC3BA,EAAmB,SAAI,WACvBA,EAAmB,SAAI,WACvBA,EAAwB,cAAI,gBAC5BA,EAAsB,YAAI,cAC1BA,EAAkB,QAAI,UACtBA,EAAiB,OAAI,SACrBA,EAAkB,QAAI,UACtBA,EAAyB,eAAI,iBAC7BA,EAAgB,MAAI,QACpBA,EAAgB,MAAI,OACvB,CAnED,CAmEGA,IAAaA,EAAW,CAAC,IClHrB,MAAMsB,UAAqBC,MAC9B3B,YAAY4B,EAAMC,EAAU,IACxBC,MAAM,kBAAoBF,EAAO,KAAOC,GACxCtD,KAAKqD,KAAOA,CAChB,EAIG,SAASG,IACZ,MAA0B,oBAAfzD,WACAA,WAES,oBAAT0D,KACAA,KAEW,oBAAX3D,OACAA,YAEW,IAAX,EAAAW,EACA,EAAAA,EAEJC,SAAS,cAATA,EACX,CAKO,SAASgD,EAAQC,EAAGN,EAAO,YAAaC,EAAU,IACrD,QAAUM,IAAND,EACA,MAAM,IAAIR,EAAaE,EAAMC,GAEjC,OAAOK,CACX,CAGO,SAASE,EAAIC,KAAUC,GAC1B,IAAKA,EACD,OACJ,MAAMC,EAAOC,MAAMnD,UAAUoD,MAAMlD,KAAK+C,GAAMI,KAAK,KACnDX,IAAeY,QAAQP,IAAIC,EAAQ,KAAOE,EAC9C,CAGO,SAASK,KAAQN,GACpB,MAAMC,EAAOD,EAAKI,KAAK,KACjBG,EAAM,IAAIlB,MAChBI,IAAeY,QAAQP,IAAI,YAAaG,EAAMM,EAAIC,MACtD,CAMO,SAASC,EAAQC,EAAGC,GACvB,IAAIC,EAAWD,GAAKD,EAAIC,GAAK,EALjC,IAAgBf,EAAGiB,EASf,OAHID,EAAW,EAAI,IACfA,IAPQhB,EAOqB,GAAXgB,IAPPC,EAOsB,IANrBA,EAAI,EAAIC,SAAS,GAAGlB,EAAIiB,EAAK,IAAMA,EAAIA,EAAIC,SAAS,GAAGlB,EAAIiB,EAAK,IAAMA,GAM5C,IAEnCD,CACX,CAKO,SAASG,EAAOC,GACnB,MAAO,MAAMA,GACjB,CAIO,SAASC,EAAeP,GAK3B,OAJAA,GAAS,EAAIQ,KAAKC,IACV,IACJT,GAAK,EAAIQ,KAAKC,IAEXT,CACX,CAIO,SAASU,EAASC,GACrB,OAAOA,EAAIC,QAAO,CAACZ,EAAGC,IAAMD,EAAIC,GAAG,EACvC,CC9EA,MAAMY,EACS5D,sBACP,OAAOG,EAASyD,QACpB,CAKAC,WAAWd,EAAGC,GACV,GAAiB,iBAAND,GAAkBe,OAAOC,MAAMhB,IAAmB,iBAANC,GAAkBc,OAAOC,MAAMf,GAClF,MAAM,IAAIvB,EAAa,cAAe,oBAAoBsB,MAAMC,KAEpE,IAAIgB,EACJ,KAAa,IAANhB,GACHgB,EAAIhB,EACJA,EAAID,EAAIC,EACRD,EAAIiB,EAER,OAAOjB,CACX,CAEAc,WAAWd,EAAGC,GACV,OAAQD,EAAIC,EAAKY,EAASK,IAAIlB,EAAGC,EACrC,CAEAa,YAAYxB,GACR,OAAoB,IAAhBA,EAAK6B,OACE,EAEc,IAAhB7B,EAAK6B,OACH7B,EAAK,GAES,IAAhBA,EAAK6B,OACHN,EAASO,IAAI9B,EAAK,GAAIA,EAAK,IAK3BuB,EAASO,IAAI9B,EAAK+B,QAASR,EAASS,KAAKhC,GAExD,CAEAtC,YAAYuE,EAAWC,GACnBjG,KAAKgG,UAAY,EACjBhG,KAAKiG,YAAc,EACnBjG,KAAKkG,IAAIF,EAAWC,EACxB,CAEAC,IAAIF,EAAY,EAAGC,EAAc,GAG7B,OAFAjG,KAAKgG,UAAYA,EACjBhG,KAAKiG,YAAcA,EACZjG,IACX,CAEAoB,QACI,OAAOpB,KAAKgG,UAAYhG,KAAKiG,WACjC,CAEAE,WACI,IAAIC,EAAIpG,KAAKgG,UACTK,EAAIrG,KAAKiG,YACb,MAAMK,EAAMhB,EAASK,IAAIS,EAAGC,GAO5B,OANAD,GAAKE,EACLD,GAAKC,EACDD,EAAI,IACJA,GAAKA,EACLD,GAAKA,GAEFpG,KAAKkG,IAAIE,EAAGC,EACvB,CAEAE,IAAIC,EAAS,EAAGC,EAAS,GACrB,MAAOC,EAAgBC,GAAoBC,EAA2BJ,EAAQC,GACxEI,EAAMvB,EAASO,IAAI7F,KAAKiG,YAAaU,GACrClC,EAAIoC,EAAM7G,KAAKiG,YACfvB,EAAImC,EAAMF,EACVP,EAAIpG,KAAKgG,UAAYvB,EAAIiC,EAAiBhC,EAChD,OAAO1E,KAAKkG,IAAIE,EAAGS,EACvB,CAEAC,SAASN,EAAS,EAAGC,EAAS,GAC1B,MAAOC,EAAgBC,GAAoBC,EAA2BJ,EAAQC,GACxEI,EAAMvB,EAASO,IAAI7F,KAAKiG,YAAaU,GACrClC,EAAIoC,EAAM7G,KAAKiG,YACfvB,EAAImC,EAAMF,EACVP,EAAIpG,KAAKgG,UAAYvB,EAAIiC,EAAiBhC,EAChD,OAAO1E,KAAKkG,IAAIE,EAAGS,EACvB,CAEAE,SAASP,EAAS,EAAGC,EAAS,GAC1B,MAAOC,EAAgBC,GAAoBC,EAA2BJ,EAAQC,GAC9E,OAAOzG,KAAKkG,IAAIlG,KAAKgG,UAAYU,EAAgB1G,KAAKiG,YAAcU,EACxE,CAEAK,OAAOR,EAAS,EAAGC,EAAS,GACxB,MAAOC,EAAgBC,GAAoBC,EAA2BJ,EAAQC,GAC9E,OAAOzG,KAAKkG,IAAIlG,KAAKgG,UAAYW,EAAkB3G,KAAKiG,YAAcS,EAC1E,CAEAO,OAAOC,GACH,MAAMzC,EAAIa,EAAS6B,kBAAkBC,KAAKF,GAASf,WAC7CzB,EAAIY,EAAS+B,kBAAkBD,KAAKpH,MAAMmG,WAChD,OAAO1B,EAAEuB,YAActB,EAAEsB,WAAavB,EAAEwB,cAAgBvB,EAAEuB,WAC9D,CAEAqB,YAAYJ,GACR,MAAMzC,EAAIa,EAAS+B,kBAAkBD,KAAKpH,MAE1C,OADAyE,EAAEqC,SAASI,GACJzC,EAAEuB,UAAY,CACzB,CAEAuB,kBAAkBL,GACd,MAAMzC,EAAIa,EAAS+B,kBAAkBD,KAAKpH,MAE1C,OADAyE,EAAEqC,SAASI,GACJzC,EAAEuB,WAAa,CAC1B,CAEAwB,SAASN,GACL,OAAQlH,KAAKuH,kBAAkBL,EACnC,CAEAO,eAAeP,GACX,OAAQlH,KAAKsH,YAAYJ,EAC7B,CAEAQ,QACI,OAAO,IAAIpC,EAAStF,KAAKgG,UAAWhG,KAAKiG,YAC7C,CAEAmB,KAAKO,GACD,MAAqB,iBAAVA,EACA3H,KAAKkG,IAAIyB,EAAO,GAGhB3H,KAAKkG,IAAIyB,EAAM3B,UAAW2B,EAAM1B,YAE/C,CAEA2B,WACI,OAAO3C,KAAK4C,MAAM7H,KAAKgG,UAAYhG,KAAKiG,YAC5C,CAEA6B,YACI,OAAO9H,KAAKgG,UAAYhG,KAAKiG,WACjC,CAEA8B,UAGI,OAFA/H,KAAKiG,YAAchB,KAAK+C,IAAIhI,KAAKiG,aACjCjG,KAAKgG,UAAYf,KAAK+C,IAAIhI,KAAKgG,WACxBhG,IACX,CAEAiI,WACI,MAAO,GAAGjI,KAAKgG,aAAahG,KAAKiG,aACrC,CAEAiC,qBACI,OAAO5C,EAAS6C,oBAAoBf,KAAKpH,MAAMmG,WAAW8B,UAC9D,CAEAG,gBACI,IAAIC,EAAI,GACR,MAAMC,EAAItI,KAAK4H,WACTW,EAAIjD,EAAS6C,oBAAoBf,KAAKpH,MAgB5C,OAfIsI,EAAI,GACJC,EAAER,UAEI,IAANO,GACAD,GAAKC,EACe,IAAhBC,EAAEvC,YACFqC,GAAK,IAAIE,EAAEL,yBAIfG,EADqB,IAAhBE,EAAEvC,UACH,IAGAuC,EAAEL,qBAEHG,CACX,CAEAG,MAAMC,GACF,MAAMC,EAAID,EAAIE,MAAM,KACd/D,EAAIC,SAAS6D,EAAE,GAAI,IACnBrC,EAAIqC,EAAE,GAAK7D,SAAS6D,EAAE,GAAI,IAAM,EACtC,OAAO1I,KAAKkG,IAAItB,EAAGyB,EACvB,EAQJ,SAASO,EAA2BhC,EAAGyB,EAAI,GACvC,MAAiB,iBAANzB,EAEA,CAACA,EAAGyB,GAIJ,CAACzB,EAAEoB,UAAWpB,EAAEqB,YAE/B,CAdAX,EAAS6B,kBAAoB,IAAI7B,EACjCA,EAAS+B,kBAAoB,IAAI/B,EACjCA,EAAS6C,oBAAsB,IAAI7C,ECtM5B,MAAMsD,EAITrD,YAAYsD,GACR,OAAO,IAAID,EAAYC,EAAKlF,EAAGkF,EAAKC,EAAGD,EAAKE,EAAGF,EAAKG,EACxD,CACAvH,YAAYkC,EAAGmF,EAAGC,EAAGC,GACjBhJ,KAAK2D,EAAIA,EACT3D,KAAK8I,EAAIA,EACT9I,KAAK+I,EAAIA,EACT/I,KAAKgJ,EAAIA,CACb,CAEAC,OACI,OAAOjJ,KAAK2D,CAChB,CAEAuF,OACI,OAAOlJ,KAAK8I,CAChB,CAEAK,OACI,OAAOnJ,KAAK+I,CAChB,CAEAK,OACI,OAAOpJ,KAAKgJ,CAChB,CAEAK,KAAK1F,GAED,OADA3D,KAAK2D,EAAIA,EACF3D,IACX,CAEAsJ,KAAKR,GAED,OADA9I,KAAK8I,EAAIA,EACF9I,IACX,CAEAuJ,KAAKR,GAED,OADA/I,KAAK+I,EAAIA,EACF/I,IACX,CAEAwJ,KAAKR,GAED,OADAhJ,KAAKgJ,EAAIA,EACFhJ,IACX,CAEAyJ,KAAK9F,EAAGmF,GAGJ,OAFA9I,KAAK2D,GAAKA,EACV3D,KAAK8I,GAAKA,EACH9I,IACX,CAEA0H,QACI,OAAOkB,EAAYxB,KAAKpH,KAC5B,CAKA0J,UAAUC,GACN,MAAMd,EAAOc,EACPC,EAAQ5J,KAAK2D,EAAIkF,EAAKlF,EAAI3D,KAAK2D,EAAIkF,EAAKlF,EACxCkG,EAAQ7J,KAAK8I,EAAID,EAAKC,EAAI9I,KAAK8I,EAAID,EAAKC,EACxCgB,EAAQ7E,KAAK8E,IAAI/J,KAAK2D,EAAI3D,KAAK+I,EAAGF,EAAKlF,EAAIkF,EAAKE,GAAKa,EACrDI,EAAQ/E,KAAK8E,IAAI/J,KAAK8I,EAAI9I,KAAKgJ,EAAGH,EAAKC,EAAID,EAAKG,GAAKa,EAK3D,OAJA7J,KAAK2D,EAAIiG,EACT5J,KAAK8I,EAAIe,EACT7J,KAAK+I,EAAIe,EACT9J,KAAKgJ,EAAIgB,EACFhK,IACX,ECjEG,MAAMiK,EACTxI,cACIzB,KAAKkK,GAAK1E,OAAO2E,IACjBnK,KAAKoK,GAAK5E,OAAO2E,IACjBnK,KAAKqK,GAAK7E,OAAO2E,IACjBnK,KAAKsK,GAAK9E,OAAO2E,GACrB,CAEAI,QACI,OAAOvK,KAAKkK,EAChB,CAEAM,QACI,OAAOxK,KAAKoK,EAChB,CAEAK,QACI,OAAOzK,KAAKqK,GAAKrK,KAAKkK,EAC1B,CAEAQ,SACI,OAAO1K,KAAKsK,GAAKtK,KAAKoK,EAC1B,CAEAO,SAAShH,EAAGmF,IACJrD,MAAMzF,KAAKkK,KAAOvG,EAAI3D,KAAKkK,MAC3BlK,KAAKkK,GAAKvG,IACV8B,MAAMzF,KAAKqK,KAAO1G,EAAI3D,KAAKqK,MAC3BrK,KAAKqK,GAAK1G,IACV8B,MAAMzF,KAAKoK,KAAOtB,EAAI9I,KAAKoK,MAC3BpK,KAAKoK,GAAKtB,IACVrD,MAAMzF,KAAKsK,KAAOxB,EAAI9I,KAAKsK,MAC3BtK,KAAKsK,GAAKxB,EAClB,CAEA8B,KAAKjH,GACD3D,KAAK2K,SAAShH,EAAG3D,KAAKoK,GAC1B,CAEAS,KAAK/B,GACD9I,KAAK2K,SAAS3K,KAAKkK,GAAIpB,EAC3B,CAEAgC,kBAAkBC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,GACvCpL,KAAK2K,SAASI,EAAKC,GACnBhL,KAAK2K,SAASQ,EAAKC,GACnB,MAAMC,EAAOJ,EAAMF,EAEnB,IAAIO,EAAQD,GADCF,EAAMF,GAEnB,GAAa,GAATK,EAAY,CACZ,MAAM5F,EAAI2F,EAAOC,EACjB,GAAI5F,EAAI,GAAKA,EAAI,EAAG,CAChB,MAAM6F,EAAK,EAAI7F,EACf1F,KAAK4K,KAAKW,EAAKA,EAAKR,EAAM,EAAIQ,EAAK7F,EAAIuF,EAAMvF,EAAIA,EAAIyF,EACzD,CACJ,CACA,MAAMK,EAAON,EAAMF,EAGnB,GADAM,EAAQE,GADKJ,EAAMF,GAEN,GAATI,EAAY,CACZ,MAAM5F,EAAI8F,EAAOF,EACjB,GAAI5F,EAAI,GAAKA,EAAI,EAAG,CAChB,MAAM6F,EAAK,EAAI7F,EACf1F,KAAK6K,KAAKU,EAAKA,EAAKP,EAAM,EAAIO,EAAK7F,EAAIwF,EAAMxF,EAAIA,EAAI0F,EACzD,CACJ,CACJ,CAEAK,eAAeV,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKM,EAAKC,GAE9C,MAAMC,EAAK,CAACb,EAAKC,GACXa,EAAK,CAACZ,EAAKC,GACXY,EAAK,CAACX,EAAKC,GACXW,EAAK,CAACL,EAAKC,GACjB,IAAIjD,EACJ1I,KAAK2K,SAASiB,EAAG,GAAIA,EAAG,IACxB5L,KAAK2K,SAASoB,EAAG,GAAIA,EAAG,IACxB,MAAMxD,EAAI,CAAC7C,EAAGgD,IAAMzD,KAAK+G,IAAI,EAAItG,EAAG,GAAKkG,EAAGlD,GACxC,EAAIzD,KAAK+G,IAAI,EAAItG,EAAG,GAAKA,EAAImG,EAAGnD,GAChC,GAAK,EAAIhD,GAAKT,KAAK+G,IAAItG,EAAG,GAAKoG,EAAGpD,GAClCzD,KAAK+G,IAAItG,EAAG,GAAKqG,EAAGrD,GACxB,IAAKA,EAAI,EAAGA,GAAK,EAAGA,IAAK,CACrB,MAAMhE,EAAI,EAAIkH,EAAGlD,GAAK,GAAKmD,EAAGnD,GAAK,EAAIoD,EAAGpD,GACpCjE,GAAK,EAAImH,EAAGlD,GAAK,EAAImD,EAAGnD,GAAK,EAAIoD,EAAGpD,GAAK,EAAIqD,EAAGrD,GAChDuD,EAAI,EAAIJ,EAAGnD,GAAK,EAAIkD,EAAGlD,GAC7B,GAAU,IAANjE,EAAS,CACT,GAAU,IAANC,EACA,SACJ,MAAMgB,GAAKuG,EAAIvH,EACX,EAAIgB,GAAKA,EAAI,IACH,IAANgD,GACA1I,KAAK4K,KAAKrC,EAAE7C,EAAGgD,IACT,IAANA,GACA1I,KAAK6K,KAAKtC,EAAE7C,EAAGgD,KAEvB,QACJ,CACA,MAAMwD,EAAOjH,KAAK+G,IAAItH,EAAG,GAAK,EAAIuH,EAAIxH,EACtC,GAAIyH,EAAO,EACP,SACJ,MAAMC,IAAOzH,EAAIO,KAAKmH,KAAKF,KAAU,EAAIzH,GACrC,EAAI0H,GAAMA,EAAK,IACL,IAANzD,GACA1I,KAAK4K,KAAKrC,EAAE4D,EAAIzD,IACV,IAANA,GACA1I,KAAK6K,KAAKtC,EAAE4D,EAAIzD,KAExB,MAAM2D,IAAO3H,EAAIO,KAAKmH,KAAKF,KAAU,EAAIzH,GACrC,EAAI4H,GAAMA,EAAK,IACL,IAAN3D,GACA1I,KAAK4K,KAAKrC,EAAE8D,EAAI3D,IACV,IAANA,GACA1I,KAAK6K,KAAKtC,EAAE8D,EAAI3D,IAE5B,CACJ,EC9HJ,IAUW4D,EAKAC,EAfPC,EAAwC,SAAUC,EAASC,EAAYC,EAAGC,GAE1E,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAU5L,GAAS,IAAM6L,EAAKL,EAAUM,KAAK9L,GAAS,CAAE,MAAOT,GAAKoM,EAAOpM,EAAI,CAAE,CAC1F,SAASwM,EAAS/L,GAAS,IAAM6L,EAAKL,EAAiB,MAAExL,GAAS,CAAE,MAAOT,GAAKoM,EAAOpM,EAAI,CAAE,CAC7F,SAASsM,EAAKG,GAJlB,IAAehM,EAIagM,EAAOC,KAAOP,EAAQM,EAAOhM,QAJ1CA,EAIyDgM,EAAOhM,MAJhDA,aAAiBuL,EAAIvL,EAAQ,IAAIuL,GAAE,SAAUG,GAAWA,EAAQ1L,EAAQ,KAIjBkM,KAAKN,EAAWG,EAAW,CAC7GF,GAAML,EAAYA,EAAUW,MAAMd,EAASC,GAAc,KAAKQ,OAClE,GACJ,EAaA,IAAIM,GAVJ,SAAWlB,GACPA,EAAmB,OAAI,SACvBA,EAAiB,KAAI,MACxB,CAHD,CAGGA,IAAeA,EAAa,CAAC,IAEhC,SAAWC,GACPA,EAAkB,OAAI,SACtBA,EAAkB,OAAI,QACzB,CAHD,CAGGA,IAAcA,EAAY,CAAC,IAG9B,MAAMkB,EAAQ,CAAC,EACf,MAAMC,EAOFnI,+BAA+BoI,EAAWD,EAAKE,MAC3C,IAAIC,EACJ,GAAwB,iBAAbF,EAEP,OAAOA,EAAWD,EAAKI,cAAcC,GAEpC,CACD,MAAM3M,EAAQ4M,WAAWL,GACzB,GAAIlI,MAAMrE,GACN,OAAO,EAEX,MAAM6M,EAAON,EAASO,QAAQ,WAAY,IAAIC,cAE9C,OAAO/M,GADsD,QAAnCyM,EAAKH,EAAKI,cAAcG,UAA0B,IAAPJ,EAAgBA,EAAK,EAE9F,CACJ,CAOAtI,+BAA+BoI,EAAWD,EAAKE,MAC3C,IAAIC,EACJ,GAAwB,iBAAbF,EAEP,OAAOA,EAEN,CACD,MAAMvM,EAAQ4M,WAAWL,GACzB,GAAIlI,MAAMrE,GACN,OAAO,EAEX,MAAM6M,EAAON,EAASO,QAAQ,WAAY,IAAIC,cAE9C,OAAO/M,IADuD,QAAnCyM,EAAKH,EAAKI,cAAcG,UAA0B,IAAPJ,EAAgBA,EAAK,GAAKH,EAAKI,cAAcC,GAEvH,CACJ,CAQAxI,gBAAgBgD,EAAG6F,EAAMC,EAAQC,GAG7B,GAAiB,iBAAN/F,QAA2B3E,IAATwK,QAAiCxK,IAAXyK,QAAkCzK,IAAV0K,EACvE,OAAOZ,EAAKa,cAAchG,GAE9B,IAAIiG,EA+BJ,MA9BiB,iBAANjG,GAEPiG,EAASjG,EAAEiG,OACXJ,EAAO7F,EAAE6F,KACTC,EAAS9F,EAAE8F,OACXC,EAAQ/F,EAAE+F,OAIVE,EAASjG,EAEbiG,EAASA,QAAuCA,EAASd,EAAKe,WAC9DL,EAAOA,QAAmCA,EAAOV,EAAKE,KAAO,KAC7DS,EAASA,QAAuCA,EAAS/B,EAAWoC,OACpEJ,EAAQA,QAAqCA,EAAQ/B,EAAUmC,OAChD,KAAXL,IACAA,EAAS/B,EAAWoC,QAEV,KAAVJ,IACAA,EAAQ/B,EAAUmC,QAGF,iBAATN,IACPA,EAAO,GAAGA,OAGQ,iBAAXC,IACPA,EAASA,EAAOpG,YAGb,CAAEuG,SAAQJ,OAAMC,SAAQC,QACnC,CAIA/I,qBAAqBoJ,GAIZnB,IACDA,EAAaoB,SAASC,cAAc,SAExCrB,EAAWc,MAAMQ,KAAOH,EACxB,MAAM,WAAEI,EAAU,SAAEpB,EAAQ,WAAEqB,EAAU,UAAEC,GAAczB,EAAWc,MACnE,MAAO,CAAEE,OAAQO,EAAYX,KAAMT,EAAUU,OAAQW,EAAYV,MAAOW,EAC5E,CAIA1J,mBAAmB2J,GACf,IAAIrB,EACJ,IAAKqB,EACD,MAAO,GAEX,IAAIZ,EACJ,MAAMa,EAAKD,EAASZ,MAOpB,IAAID,EALAC,EADAa,IAAO5C,EAAUmC,QAAiB,KAAPS,QAAoBvL,IAAPuL,EAChC,GAGAA,EAAGC,OAAS,IAGxB,MAAMC,EAAKH,EAASb,OAUpB,IAAID,EARAC,EADAgB,IAAO/C,EAAWoC,QAAiB,KAAPW,QAAoBzL,IAAPyL,EAChC,GAEU,iBAAPA,EACHA,EAAK,IAGLA,EAAGD,OAAS,IAGzB,MAAME,EAAKJ,EAASd,KAEhBA,OADOxK,IAAP0L,EACO5B,EAAKE,KAAO,MAEA,iBAAP0B,EACLA,EAAK,MAILA,EAAGF,OAAS,IAGvB,MAAO,GAAGd,IAAQD,IAASD,IADe,QAA1BP,EAAKqB,EAASV,cAA2B,IAAPX,EAAgBA,EAAKH,EAAKe,YAEhF,CAQAlJ,iBAAiBoI,EAAU4B,GACvB,GAAwB,iBAAb5B,EACP,OAAQA,EAAW4B,EAKnB,MAAO,GAFOvB,WAAWL,GAEP4B,IADL5B,EAASO,QAAQ,WAAY,KAGlD,CAKA3I,cAAc8I,GACV,GAAKA,EAGA,IAAsB,iBAAXA,EACZ,OAAOA,GAAU,IAEhB,CAED,MAAMmB,EAAe3K,SAASwJ,EAAQ,IACtC,OAAI5I,MAAM+J,GAC0B,SAAzBnB,EAAOF,cAGPqB,GAAgB,GAE/B,EAdI,OAAO,CAef,CAKAjK,gBAAgB+I,GACZ,QAAKA,GAIMA,EAAMH,gBAAkB5B,EAAUkD,MAEjD,CAUAlK,mBAAmBmK,EAAUC,EAASC,GAAe,GACjD,OAAOpD,EAAUxM,UAAM,OAAQ,GAAQ,YACnC,MAKM6P,EAAW,IAAIC,SAASJ,GALbE,EAAe,OAAOD,wBAAgC,IACtD,OAAOA,qBASxB,aAJME,EAASE,OAGfnB,SAASoB,MAAMzJ,IAAIsJ,GACZA,CACX,GACJ,CAYAtK,sBACI,OAAOiH,EAAUxM,UAAM,OAAQ,GAAQ,YACnC,MAAMiQ,EAAOvC,EAAKwC,cACZC,EAAQzC,EAAK0C,eACnB,IAAK,MAAMV,KAAYS,EAAO,CAC1B,MAAME,EAAWF,EAAMT,GACvBhC,EAAK4C,YAAYZ,EAAUO,EAAOI,EACtC,CACJ,GACJ,CAUA9K,YAAYmK,EAAUa,EAAMC,GACxB,IAAI1B,EAAOrB,EAAMiC,GAWjB,OAVKZ,IACDA,EAAO,IAAIpB,EAAKgC,GAChBjC,EAAMiC,GAAYZ,GAElByB,GACAzB,EAAK2B,QAAQF,GAEbC,GACA1B,EAAK4B,WAAWF,GAEb1B,CACX,CAKArN,YAAYiO,GACR1P,KAAK2Q,KAAOjB,CAChB,CACAkB,UACI,OAAO5Q,KAAK2Q,IAChB,CACAE,UACI,OAAOnN,EAAQ1D,KAAKuQ,KAAM,YAAa,oBAC3C,CACAO,aACI,OAAOpN,EAAQ1D,KAAKwQ,QAAS,YAAa,kBAC9C,CACAC,QAAQF,GACJvQ,KAAKuQ,KAAOA,CAChB,CACAG,WAAWF,GACPxQ,KAAKwQ,QAAUA,CACnB,CACAO,UACI,YAAqBnN,IAAd5D,KAAKuQ,IAChB,CACAS,gBACI,OAAOhR,KAAK6Q,UAAUI,UAC1B,CACAC,YACI,OAAOlR,KAAK6Q,UAAUM,MAC1B,CAQAC,aAAajR,EAAKkR,GACd,MAAMC,EAAWnR,EAAIwI,MAAM,KAE3B,IAAI4I,EAAUvR,KAAK8Q,aACnB,IAAK,IAAIpI,EAAI,EAAGA,EAAI4I,EAAS1L,OAAQ8C,IAAK,CACtC,MACMtH,EAAQmQ,EADED,EAAS5I,IAEzB,QAAc9E,IAAVxC,EAEA,OAAOiQ,EAGXE,EAAUnQ,CACd,CAEA,OAAOmQ,CACX,CAEAtJ,WACI,MAAO,IAAMjI,KAAK2Q,KAAO,QAC7B,EAKJjD,EAAKe,WAAa,oBAElBf,EAAK8D,MAAQ,yBAEb9D,EAAKE,KAAO,GAGZF,EAAKI,cAAgB,CACjBC,GAAI,EAAI,EACR0D,GAAI,EACJC,GAAI,GACJ,IAAK,IACLC,GAAI,GACJC,GAAI,GAAK,KACTC,GAAI,GAAK,MAObnE,EAAKwC,cAAgB,yCAMrBxC,EAAK0C,eAAiB,CAClB,cAAe,0CACf0B,eAAgB,wCCvWpB,MAAMC,EACFtQ,cACIzB,KAAKgS,GAAK,CAAC,EACXhS,KAAKiS,KAAO,CAAC,EACbjS,KAAKkS,MAAQ,CAAC,CAClB,EAEG,MAAMC,EACT5M,4BACI,OAAO4M,EAASC,eACpB,CAGA7M,6BAA6B8M,GACzBF,EAASC,gBAAkBC,CAC/B,CACA9M,gCACI4M,EAASC,qBAAkBxO,CAC/B,CACAnC,cACIzB,KAAKsS,MAAQ,IAAIP,CACrB,CACAQ,QAEI,OADAvS,KAAKsS,MAAQ,IAAIP,EACV/R,IACX,CACAwS,cAAc7B,EAAMvP,EAAO4Q,EAAIS,GAC3B,MAAMH,EAAQtS,KAAKsS,MACdA,EAAM3B,GAAMvP,KACbkR,EAAM3B,GAAMvP,GAAS,CAAC,GAE1BkR,EAAM3B,GAAMvP,GAAO4Q,GAAMS,CAC7B,CAGAC,aAAY,GAAEV,EAAE,KAAErB,EAAI,MAAEvP,EAAK,SAAEuR,IAC3B,MAAMF,EAAOzS,KAAK4S,eAAeZ,QAChBpO,IAAb+O,GAA0B3S,KAAKsS,MAAM3B,GAAMgC,WACpC3S,KAAKsS,MAAM3B,GAAMgC,GAAUX,GAElC5Q,GAASqR,GACTzS,KAAKwS,cAAc7B,EAAMvP,EAAOqR,EAAKI,aAAa,MAAOJ,EAEjE,CAQAK,SAASL,EAAMT,GAEX,KADAA,EAAKA,GAAMS,EAAKI,aAAa,OAEzB,MAAM,IAAI1P,EAAa,wDAO3B,OAJAsP,EAAKM,aAAa,KAAMf,GACxBhS,KAAKwS,cAAc,KAAMR,EAAIA,EAAIS,GACjCzS,KAAK0S,YAAY,CAAEV,KAAIrB,KAAM,OAAQvP,MAAOqR,EAAKI,aAAa,QAASF,cAAU/O,IACjF6O,EAAKO,WAAWhT,MACTA,IACX,CACA4S,eAAeZ,GACX,IAAInE,EAAIoF,EACR,OAAmF,QAA3EA,EAA8B,QAAxBpF,EAAK7N,KAAKsS,MAAMN,UAAuB,IAAPnE,OAAgB,EAASA,EAAGmE,UAAwB,IAAPiB,OAAgB,EAASA,EAAGjB,EAC3H,CACAkB,uBAAuBC,EAAW/R,GAC9B,MAAMgS,EAAapT,KAAKsS,MAAMa,GAC9B,GAAIC,EAAY,CACZ,MAAMC,EAAiBD,EAAWhS,GAClC,GAAIiS,EAAgB,CAEhB,OADahT,OAAOiT,KAAKD,GACbE,KAAKC,GAAMH,EAAeG,IAC1C,CACJ,CACA,MAAO,EACX,CACAC,kBAAkBxB,GACd,OAAOjS,KAAKkT,uBAAuB,OAAQjB,EAC/C,CACAyB,mBAAmBC,GACf,OAAO3T,KAAKkT,uBAAuB,QAASS,EAChD,CAGAC,SAASC,GAKL,MAJqB,CAAC,KAAM,OAAQ,SACnBC,SAASD,EAAKlD,OAC3B3Q,KAAK0S,YAAYmB,GAEd7T,IACX,EClGJ,MAAM+T,EACSrS,sBACP,OAAOG,EAASkS,OACpB,CACAxO,eACI,MAAO,OAAOwO,EAAQC,IAC1B,CACAvS,cACI,IAAIoM,EAGJ7N,KAAKiU,SAAW,GAChBjU,KAAKkU,MAAQ,CACTlC,GAAI+B,EAAQI,QACZlC,KAAMjS,KAAKoU,cACXlC,MAAO,IAEXlS,KAAKqU,UAAW,EAEyB,QAAxCxG,EAAKsE,EAASmC,4BAAyC,IAAPzG,GAAyBA,EAAGiF,SAAS9S,KAC1F,CAUAuU,gBAAgBC,GAEZ,OADAxU,KAAKiU,SAASQ,KAAKD,GACZxU,IACX,CACAoU,cACI,OAAOpU,KAAKyB,YAAYC,QAC5B,CAuBAgT,SAASpG,GAEL,OADAtO,KAAKsO,MAAQA,EACNtO,IACX,CAEA2U,cAAcrG,GAGV,OAFAtO,KAAKsO,MAAQA,EACbtO,KAAKiU,SAASW,SAASJ,GAAUA,EAAMG,cAAcrG,KAC9CtO,IACX,CAEA6U,WACI,OAAO7U,KAAKsO,KAChB,CAEAwG,WAAWC,EAAU/U,KAAK+U,QAASzG,EAAQtO,KAAK6U,YAC5C,OAAKvG,GAEAyG,GAELA,EAAQC,OACJ1G,EAAM2G,aACNF,EAAQG,eAAe5G,EAAM2G,aAC7B3G,EAAM6G,YACNJ,EAAQK,cAAc9G,EAAM6G,YAC5B7G,EAAM+G,WACNN,EAAQO,aAAahH,EAAM+G,WAC3B/G,EAAMiH,aACNR,EAAQS,eAAelH,EAAMiH,aAC7BjH,EAAMmH,WACNV,EAAQW,aAAapH,EAAMmH,WACxBzV,MAdIA,IAef,CAEA2V,aAAaZ,EAAU/U,KAAK+U,QAASzG,EAAQtO,KAAK6U,YAC9C,OAAKvG,GAEAyG,GAELA,EAAQa,UACD5V,MAJIA,IAKf,CAKA6V,gBACI7V,KAAK8V,eACL9V,KAAK8U,aACL9U,KAAK+V,OACL/V,KAAK2V,cACT,CAEAK,SAASrC,GACL,IAAI9F,EACJ,QAAK7N,KAAKkU,MAAMhC,QAE2F,IAAvE,QAA3BrE,EAAK7N,KAAKkU,MAAMhC,aAA0B,IAAPrE,OAAgB,EAASA,EAAGlF,MAAM,KAAKsN,QAAQtC,GAC/F,CAEAuC,SAASvC,GACL,IAAI9F,EACJ,OAAI7N,KAAKgW,SAASrC,KAEb3T,KAAKkU,MAAMhC,MAGZlS,KAAKkU,MAAMhC,MAAQ,GAAGlS,KAAKkU,MAAMhC,SAASyB,IAF1C3T,KAAKkU,MAAMhC,MAAQ,GAAGyB,IAGD,QAAxB9F,EAAK7N,KAAKqS,gBAA6B,IAAPxE,GAAyBA,EAAG+F,SAAS,CAClE5B,GAAIhS,KAAKkU,MAAMlC,GACfrB,KAAM,QACNvP,MAAOuS,EACPhB,cAAU/O,KATH5D,IAYf,CAEAmW,YAAYxC,GACR,IAAI9F,EAAIoF,EACR,IAAKjT,KAAKgW,SAASrC,GACf,OAAO3T,KACX,MAAMoF,EAAkC,QAA3ByI,EAAK7N,KAAKkU,MAAMhC,aAA0B,IAAPrE,OAAgB,EAASA,EAAGlF,MAAM,KAWlF,OAVIvD,IACAA,EAAIgR,OAAOhR,EAAI6Q,QAAQtC,IACvB3T,KAAKkU,MAAMhC,MAAQ9M,EAAIjB,KAAK,MAEP,QAAxB8O,EAAKjT,KAAKqS,gBAA6B,IAAPY,GAAyBA,EAAGW,SAAS,CAClE5B,GAAIhS,KAAKkU,MAAMlC,GACfrB,KAAM,QACNvP,WAAOwC,EACP+O,SAAUgB,IAEP3T,IACX,CAEAgT,WAAWX,GAEP,OADArS,KAAKqS,SAAWA,EACTrS,IACX,CAEAqW,aACI,OAAOrW,KAAKqU,QAChB,CAEAiC,YAAYjC,GAAW,GAEnB,OADArU,KAAKqU,SAAWA,EACTrU,IACX,CAEAuW,gBACI,OAAOvW,KAAKkU,KAChB,CAGArB,aAAalC,GACT,OAAO3Q,KAAKkU,MAAMvD,EACtB,CAEA6F,cAAcC,EAAS,IACnB,MAAMzE,EAAKlN,EAAO9E,KAAKkU,MAAMlC,GAAKyE,GAC5BC,EAAU9H,SAASgE,eAAeZ,GACxC,GAAI0E,EACA,OAAOA,CACf,CAEA3D,aAAapC,EAAMvP,GACf,IAAIyM,EACJ,MAAM8I,EAAQ3W,KAAKkU,MAAMlC,GACnBW,EAAW3S,KAAKkU,MAAMvD,GAI5B,OAHA3Q,KAAKkU,MAAMvD,GAAQvP,EAEM,QAAxByM,EAAK7N,KAAKqS,gBAA6B,IAAPxE,GAAyBA,EAAG+F,SAAS,CAAE5B,GAAI2E,EAAOhG,OAAMvP,QAAOuR,aACzF3S,IACX,CAEA4W,iBACI,OAAO5W,KAAK2J,WAChB,CAEAkN,aACI,OAAO7W,KAAK+U,OAChB,CAEA+B,WAAW/B,GAEP,OADA/U,KAAK+U,QAAUA,EACR/U,IACX,CAEA8V,eACI,OAAOpS,EAAQ1D,KAAK+U,QAAS,YAAa,6CAC9C,CAOIjG,SAAKvG,GACLvI,KAAK+W,QAAQxO,EACjB,CAEIuG,WACA,OAAOpB,EAAKsJ,YAAYhX,KAAKiX,SACjC,CAgBAF,QAAQjI,EAAMV,EAAMC,EAAQC,GAExB,MAAM4I,EAAkBlX,KAAKyB,YAAY0V,UACnCC,EAA+B,iBAATtI,EACtBuI,EAA+B,iBAATvI,EACtBwI,OAA2B1T,IAATkL,EAClByI,OAAuC3T,IAATwK,QAAiCxK,IAAXyK,QAAkCzK,IAAV0K,EAuBlF,OApBItO,KAAKiX,SAFLG,EAEgB/W,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGN,GAAkBpI,GAE7DuI,GAAgBE,EAEL7J,EAAKa,cAAcO,GAE9BwI,GAAmBC,EAKRlX,OAAOmX,OAAO,CAAC,EAAGN,GAOlBxJ,EAAK+J,SAAS3I,QAAmCA,EAAOoI,EAAgB1I,OAAQJ,QAAmCA,EAAO8I,EAAgB9I,KAAMC,QAAuCA,EAAS6I,EAAgB7I,OAAQC,QAAqCA,EAAQ4I,EAAgB5I,OAElStO,IACX,CAKA0X,UAII,OAHK1X,KAAKiX,UACNjX,KAAK2X,YAEFjK,EAAKsJ,YAAYhX,KAAKiX,SACjC,CAKAU,YACI3X,KAAK+W,SACT,CAEI7H,eAMA,OALKlP,KAAKiX,UACNjX,KAAK2X,YAIFtX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKiX,SAClC,CACI/H,aAASA,GACTlP,KAAK+W,QAAQ7H,EACjB,CAEA0I,YAAYxJ,GACR,MAAMc,EAAWlP,KAAKkP,SAEtB,OADAlP,KAAK+W,QAAQ7H,EAASV,OAAQJ,EAAMc,EAASb,OAAQa,EAASZ,OACvDtO,IACX,CAKA6X,cACI,OAAO7X,KAAK2N,QAChB,CAKIA,aAASS,GACTpO,KAAK4X,YAAYxJ,EACrB,CAIIT,eACA,IAAIS,EAAOpO,KAAKkP,SAASd,KAIzB,MAHoB,iBAATA,IACPA,EAAO,GAAGA,OAEPA,CACX,CAII0J,uBACA,OAAOpK,EAAKqK,wBAAwB/X,KAAK2N,SAC7C,CAIIqK,uBACA,OAAOtK,EAAKuK,wBAAwBjY,KAAK2N,SAC7C,CAIIsB,gBACA,OAAOjP,KAAKkP,SAASZ,KACzB,CACIW,cAAUX,GACV,MAAMY,EAAWlP,KAAKkP,SACtBlP,KAAK+W,QAAQ7H,EAASV,OAAQU,EAASd,KAAMc,EAASb,OAAQC,EAClE,CAKIU,iBACA,OAAOhP,KAAKkP,SAASb,OAAS,EAClC,CACIW,eAAWX,GACX,MAAMa,EAAWlP,KAAKkP,SACtBlP,KAAK+W,QAAQ7H,EAASV,OAAQU,EAASd,KAAMC,EAAQa,EAASZ,MAClE,EAEJyF,EAAQC,GAAK,IAKbD,EAAQoD,UAAY,CAChB3I,OAAQd,EAAKe,WACbL,KAAMV,EAAKE,KACXS,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUmC,QC/XrB,MAAMwJ,EAAa,MAKbC,EAAY,CACd,MAAOD,MACP,EAAGA,MACH,EAAGA,KACH,EAAGA,KACH,EAAGA,KACH,GAAIA,KACJ,GAAIA,IACJ,GAAIA,IACJ,IAAKA,IACL,IAAKA,IAEHE,EAAkB,CACpBrP,EAAG,IACHC,EAAG,IACHV,EAAG,IAIH5D,EAAG,OAED2T,EAAgB,CAClBC,EAAG,CAAEC,IAAK,GACVC,GAAI,CAAED,IAAK,GACXE,EAAG,CAAEC,IAAK,IAAKH,IAAK,GACpBI,GAAI,CAAED,IAAK,IAAKH,IAAK,GACrBK,GAAI,CAAEF,IAAK,IAAKH,IAAK,GACrBM,GAAI,CAAEH,IAAK,IAAKH,IAAK,GACrBO,GAAI,CAAEJ,IAAK,IAAKH,IAAK,GACrBQ,GAAI,CAAEL,IAAK,IAAKH,IAAK,GACrBS,GAAI,CAAEN,IAAK,IAAKH,IAAK,GACrBU,GAAI,CAAEP,IAAK,IAAKH,IAAK,GACrBW,GAAI,CAAER,IAAK,IAAKH,IAAK,GACrBY,IAAK,CAAET,IAAK,IAAKH,IAAK,GACtBa,GAAI,CAAEV,IAAK,IAAKH,IAAK,GACrBc,IAAK,CAAEX,IAAK,IAAKH,IAAK,GACtBe,GAAI,CAAEZ,IAAK,IAAKH,IAAK,GACrBgB,IAAK,CAAEb,IAAK,IAAKH,IAAK,GACtBiB,EAAG,CAAEd,IAAK,IAAKH,IAAK,GACpBkB,GAAI,CAAEf,IAAK,IAAKH,IAAK,GACrBmB,EAAG,CAAEhB,IAAK,IAAKH,IAAK,GACpBoB,GAAI,CAAEjB,IAAK,IAAKH,IAAK,GACrBqB,EAAG,CAAElB,IAAK,IAAKH,IAAK,GACpB,MAAO,CAAEG,IAAK,IAAKH,IAAK,GACxBsB,EAAG,CAAEnB,IAAK,IAAKH,IAAK,GACpB,MAAO,CAAEG,IAAK,IAAKH,IAAK,GACxBuB,EAAG,CAAEpB,IAAK,IAAKH,IAAK,GACpB,MAAO,CAAEG,IAAK,IAAKH,IAAK,GACxB,KAAM,CAAEG,IAAK,IAAKH,IAAK,GACvB,MAAO,CAAEG,IAAK,IAAKH,IAAK,GACxB,KAAM,CAAEG,IAAK,IAAKH,IAAK,GACvB,MAAO,CAAEG,IAAK,IAAKH,IAAK,IAEtBwB,EAAQ,CACVC,OAAQ,CAAEC,WAAY,GACtBC,KAAM,CAAED,WAAY,GACpBE,MAAO,CAAEF,WAAY,GACrBG,KAAM,CAAEH,WAAY,GACpBI,QAAS,CAAEJ,WAAY,GACvBK,WAAY,CAAEL,WAAY,GAC1B,gBAAiB,CAAEA,WAAY,GAC/B,aAAc,CAAEA,WAAY,GAC5B,aAAc,CAAEA,WAAY,GAC5BM,QAAS,CAAEN,WAAY,GACvBO,OAAQ,CAAEP,YAAa,IAErBQ,EAAY,CACdnC,EAAG,CAAEhG,MAAO,EAAGoI,QAAS,GACxBC,GAAI,CAAErI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MAC3CC,GAAI,CAAEvI,MAAO,EAAGoI,QAAS,GAAIE,WAAY,KACzCE,IAAK,CAAExI,MAAO,EAAGoI,QAAS,GAAIE,WAAY,MAC1ClB,EAAG,CAAEpH,MAAO,EAAGoI,QAAS,GACxBK,GAAI,CAAEzI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MAC3CI,GAAI,CAAE1I,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxCK,IAAK,CAAE3I,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MACzCf,EAAG,CAAEvH,MAAO,EAAGoI,QAAS,GACxBQ,GAAI,CAAE5I,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MAC3CO,GAAI,CAAE7I,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxCQ,IAAK,CAAE9I,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MACzCnC,EAAG,CAAEnG,MAAO,EAAGoI,QAAS,GACxBW,GAAI,CAAE/I,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MAC3CU,GAAI,CAAEhJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxCW,IAAK,CAAEjJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MACzCpB,EAAG,CAAElH,MAAO,EAAGoI,QAAS,GACxBc,GAAI,CAAElJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MAC3Ca,GAAI,CAAEnJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxCc,IAAK,CAAEpJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MACzChB,EAAG,CAAEtH,MAAO,EAAGoI,QAAS,GACxBiB,GAAI,CAAErJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,GAAIE,WAAY,KAC3C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,GAAIE,WAAY,MAC5CgB,GAAI,CAAEtJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxCiB,IAAK,CAAEvJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MACzCd,EAAG,CAAExH,MAAO,EAAGoI,QAAS,IACxBoB,GAAI,CAAExJ,MAAO,EAAGoI,QAAS,GAAIE,WAAY,KACzC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,GAAIE,WAAY,KAC3C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,GAAIE,WAAY,MAC5CmB,GAAI,CAAEzJ,MAAO,EAAGoI,QAAS,GAAIE,WAAY,KACzCoB,IAAK,CAAE1J,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MACzCqB,EAAG,CAAE3J,MAAO,EAAG4J,MAAM,GACrBC,EAAG,CACC7J,MAAO,EACPsI,WAAY,GACZwB,OAAQ,EACR/Y,KAAM,iBACNgZ,YAAa,MAoBfC,EAAc,CAChB,IAAK,CAAEjZ,KAAM,kBAAmBkZ,6BAA8B,GAC9D,KAAM,CAAElZ,KAAM,wBAAyBkZ,6BAA8B,GACrE7X,EAAG,CAAErB,KAAM,iBAAkBkZ,6BAA8B,GAC3DC,GAAI,CAAEnZ,KAAM,uBAAwBkZ,6BAA8B,GAClE3X,EAAG,CAAEvB,KAAM,oBAAqBkZ,6BAA8B,GAC9D,IAAK,CAAElZ,KAAM,uBAAwBkZ,6BAA8B,GACnE,IAAK,CAAElZ,KAAM,wBAAyBkZ,6BAA8B,GACpEE,GAAI,CAAEpZ,KAAM,4CAA6CkZ,6BAA8B,GACvFlW,EAAG,CAAEhD,KAAM,iCAAkCkZ,4BAA6B,GAC1E,KAAM,CAAElZ,KAAM,wCAAyCkZ,6BAA8B,GACrF,IAAK,CAAElZ,KAAM,kCAAmCkZ,6BAA8B,GAC9E,KAAM,CAAElZ,KAAM,+BAAgCkZ,6BAA8B,GAC5EG,GAAI,CAAErZ,KAAM,uBAAwBkZ,6BAA8B,GAClEI,IAAK,CAAEtZ,KAAM,8BAA+BkZ,6BAA8B,GAC1Enc,EAAG,CAAEiD,KAAM,iBAAkBkZ,6BAA8B,GAC3D/I,EAAG,CAAEnQ,KAAM,kBAAmBkZ,6BAA8B,GAC5DK,IAAK,CAAEvZ,KAAM,2BAA4BkZ,6BAA8B,GACvE,MAAO,CAAElZ,KAAM,+BAAgCkZ,6BAA8B,GAC7EM,KAAM,CAAExZ,KAAM,2BAA4BkZ,6BAA8B,GACxEO,KAAM,CAAEzZ,KAAM,2BAA4BkZ,6BAA8B,GACxEQ,wBAAyB,CAAE1Z,KAAM,0BAA2BkZ,6BAA8B,GAC1FS,0BAA2B,CAAE3Z,KAAM,4BAA6BkZ,6BAA8B,GAC9FU,oBAAqB,CAAE5Z,KAAM,sBAAuBkZ,6BAA8B,GAClFW,sBAAuB,CAAE7Z,KAAM,wBAAyBkZ,6BAA8B,GACtFY,oBAAqB,CAAE9Z,KAAM,sBAAuBkZ,6BAA8B,GAClFa,sBAAuB,CAAE/Z,KAAM,wBAAyBkZ,6BAA8B,GACtFc,2BAA4B,CAAEha,KAAM,6BAA8BkZ,6BAA8B,GAChGe,6BAA8B,CAAEja,KAAM,+BAAgCkZ,6BAA8B,GACpGgB,4BAA6B,CAAEla,KAAM,8BAA+BkZ,6BAA8B,GAClGiB,8BAA+B,CAAEna,KAAM,gCAAiCkZ,6BAA8B,GACtGkB,4BAA6B,CAAEpa,KAAM,8BAA+BkZ,6BAA8B,GAClGmB,8BAA+B,CAAEra,KAAM,gCAAiCkZ,6BAA8B,GACtGoB,2BAA4B,CAAEta,KAAM,6BAA8BkZ,6BAA8B,GAChGqB,6BAA8B,CAAEva,KAAM,+BAAgCkZ,6BAA8B,GACpGsB,2BAA4B,CAAExa,KAAM,6BAA8BkZ,6BAA8B,GAChGuB,6BAA8B,CAAEza,KAAM,+BAAgCkZ,6BAA8B,GACpGwB,wBAAyB,CAAE1a,KAAM,0BAA2BkZ,6BAA8B,GAC1FyB,qBAAsB,CAAE3a,KAAM,uBAAwBkZ,6BAA8B,GACpF0B,uBAAwB,CAAE5a,KAAM,yBAA0BkZ,6BAA8B,GACxF2B,oBAAqB,CAAE7a,KAAM,sBAAuBkZ,6BAA8B,GAClF4B,uBAAwB,CAAE9a,KAAM,yBAA0BkZ,6BAA8B,GACxF6B,oBAAqB,CAAE/a,KAAM,sBAAuBkZ,6BAA8B,GAClF8B,yBAA0B,CAAEhb,KAAM,2BAA4BkZ,6BAA8B,GAC5F+B,sBAAuB,CAAEjb,KAAM,wBAAyBkZ,6BAA8B,GACtFgC,iBAAkB,CAAElb,KAAM,mBAAoBkZ,6BAA8B,GAC5EiC,gBAAiB,CAAEnb,KAAM,kBAAmBkZ,6BAA8B,GAC1EkC,uBAAwB,CAAEpb,KAAM,yBAA0BkZ,6BAA8B,GACxFmC,wBAAyB,CAAErb,KAAM,0BAA2BkZ,6BAA8B,GAC1FoC,qBAAsB,CAAEtb,KAAM,uBAAwBkZ,6BAA8B,GACpFqC,sBAAuB,CAAEvb,KAAM,wBAAyBkZ,6BAA8B,GACtFsC,qBAAsB,CAAExb,KAAM,uBAAwBkZ,6BAA8B,GACpFuC,sBAAuB,CAAEzb,KAAM,wBAAyBkZ,6BAA8B,GACtFwC,sBAAuB,CAAE1b,KAAM,wBAAyBkZ,6BAA8B,GACtFyC,uBAAwB,CAAE3b,KAAM,yBAA0BkZ,6BAA8B,GACxF0C,sBAAuB,CAAE5b,KAAM,wBAAyBkZ,6BAA8B,GACtF2C,uBAAwB,CAAE7b,KAAM,yBAA0BkZ,6BAA8B,GACxF4C,sBAAuB,CAAE9b,KAAM,wBAAyBkZ,6BAA8B,GACtF6C,uBAAwB,CAAE/b,KAAM,yBAA0BkZ,6BAA8B,GACxF8C,sBAAuB,CAAEhc,KAAM,wBAAyBkZ,6BAA8B,GACtF+C,uBAAwB,CAAEjc,KAAM,yBAA0BkZ,6BAA8B,GACxFgD,sBAAuB,CAAElc,KAAM,wBAAyBkZ,6BAA8B,GACtFiD,uBAAwB,CAAEnc,KAAM,yBAA0BkZ,6BAA8B,GACxFkD,8BAA+B,CAAEpc,KAAM,gCAAiCkZ,6BAA8B,GACtGmD,2BAA4B,CAAErc,KAAM,6BAA8BkZ,6BAA8B,GAChGoD,6BAA8B,CAAEtc,KAAM,+BAAgCkZ,6BAA8B,GACpGqD,0BAA2B,CAAEvc,KAAM,4BAA6BkZ,6BAA8B,GAC9FsD,6BAA8B,CAAExc,KAAM,+BAAgCkZ,6BAA8B,GACpGuD,0BAA2B,CAAEzc,KAAM,4BAA6BkZ,6BAA8B,GAC9FwD,+BAAgC,CAAE1c,KAAM,iCAAkCkZ,6BAA8B,GACxGyD,4BAA6B,CAAE3c,KAAM,8BAA+BkZ,6BAA8B,GAClG0D,uBAAwB,CAAE5c,KAAM,yBAA0BkZ,6BAA8B,GACxF2D,sBAAuB,CAAE7c,KAAM,wBAAyBkZ,6BAA8B,GACtF4D,yBAA0B,CAAE9c,KAAM,2BAA4BkZ,6BAA8B,GAC5F6D,2BAA4B,CAAE/c,KAAM,6BAA8BkZ,6BAA8B,GAChG8D,qBAAsB,CAAEhd,KAAM,uBAAwBkZ,6BAA8B,GACpF+D,uBAAwB,CAAEjd,KAAM,yBAA0BkZ,6BAA8B,GACxFgE,qBAAsB,CAAEld,KAAM,uBAAwBkZ,6BAA8B,GACpFiE,uBAAwB,CAAEnd,KAAM,yBAA0BkZ,6BAA8B,GACxFkE,uBAAwB,CAAEpd,KAAM,yBAA0BkZ,6BAA8B,GACxFmE,yBAA0B,CAAErd,KAAM,2BAA4BkZ,6BAA8B,GAC5FoE,6BAA8B,CAAEtd,KAAM,+BAAgCkZ,6BAA8B,GACpGqE,+BAAgC,CAAEvd,KAAM,iCAAkCkZ,6BAA8B,GACxGsE,0BAA2B,CAAExd,KAAM,4BAA6BkZ,6BAA8B,GAC9FuE,uBAAwB,CAAEzd,KAAM,yBAA0BkZ,6BAA8B,GACxFwE,0BAA2B,CAAE1d,KAAM,4BAA6BkZ,6BAA8B,GAC9FyE,uBAAwB,CAAE3d,KAAM,yBAA0BkZ,6BAA8B,GACxF0E,wBAAyB,CAAE5d,KAAM,0BAA2BkZ,6BAA8B,GAC1F2E,qBAAsB,CAAE7d,KAAM,uBAAwBkZ,6BAA8B,GACpF4E,wBAAyB,CAAE9d,KAAM,0BAA2BkZ,6BAA8B,GAC1F6E,qBAAsB,CAAE/d,KAAM,uBAAwBkZ,6BAA8B,GACpF8E,0BAA2B,CAAEhe,KAAM,4BAA6BkZ,6BAA8B,GAC9F+E,uBAAwB,CAAEje,KAAM,yBAA0BkZ,6BAA8B,GACxFgF,wBAAyB,CAAEle,KAAM,0BAA2BkZ,6BAA8B,GAC1FiF,yBAA0B,CAAEne,KAAM,2BAA4BkZ,6BAA8B,GAC5FkF,sBAAuB,CAAEpe,KAAM,wBAAyBkZ,6BAA8B,GACtFmF,uBAAwB,CAAEre,KAAM,yBAA0BkZ,6BAA8B,GACxFoF,sBAAuB,CAAEte,KAAM,wBAAyBkZ,6BAA8B,GACtFqF,uBAAwB,CAAEve,KAAM,yBAA0BkZ,6BAA8B,GACxFsF,wBAAyB,CAAExe,KAAM,0BAA2BkZ,6BAA8B,GAC1FuF,yBAA0B,CAAEze,KAAM,2BAA4BkZ,6BAA8B,GAC5FwF,wBAAyB,CAAE1e,KAAM,0BAA2BkZ,6BAA8B,GAC1FyF,yBAA0B,CAAE3e,KAAM,2BAA4BkZ,6BAA8B,GAC5F0F,gCAAiC,CAAE5e,KAAM,kCAAmCkZ,6BAA8B,GAC1G2F,6BAA8B,CAAE7e,KAAM,+BAAgCkZ,6BAA8B,GACpG4F,gCAAiC,CAAE9e,KAAM,kCAAmCkZ,6BAA8B,GAC1G6F,6BAA8B,CAAE/e,KAAM,+BAAgCkZ,6BAA8B,GACpG8F,8BAA+B,CAAEhf,KAAM,gCAAiCkZ,6BAA8B,GACtG+F,2BAA4B,CAAEjf,KAAM,6BAA8BkZ,6BAA8B,GAChGgG,8BAA+B,CAAElf,KAAM,gCAAiCkZ,6BAA8B,GACtGiG,2BAA4B,CAAEnf,KAAM,6BAA8BkZ,6BAA8B,GAChGkG,gCAAiC,CAAEpf,KAAM,kCAAmCkZ,6BAA8B,GAC1GmG,6BAA8B,CAAErf,KAAM,+BAAgCkZ,6BAA8B,GACpGoG,qBAAsB,CAAEtf,KAAM,uBAAwBkZ,6BAA8B,GACpFqG,uBAAwB,CAAEvf,KAAM,yBAA0BkZ,6BAA8B,GACxFsG,uBAAwB,CAAExf,KAAM,yBAA0BkZ,6BAA8B,GACxFuG,yBAA0B,CAAEzf,KAAM,2BAA4BkZ,6BAA8B,GAC5FwG,6BAA8B,CAAE1f,KAAM,+BAAgCkZ,6BAA8B,GACpGyG,+BAAgC,CAAE3f,KAAM,iCAAkCkZ,6BAA8B,GACxG0G,0BAA2B,CAAE5f,KAAM,4BAA6BkZ,6BAA8B,GAC9F2G,uBAAwB,CAAE7f,KAAM,yBAA0BkZ,6BAA8B,GACxF4G,0BAA2B,CAAE9f,KAAM,4BAA6BkZ,6BAA8B,GAC9F6G,uBAAwB,CAAE/f,KAAM,yBAA0BkZ,6BAA8B,GACxF8G,wBAAyB,CAAEhgB,KAAM,0BAA2BkZ,6BAA8B,GAC1F+G,qBAAsB,CAAEjgB,KAAM,uBAAwBkZ,6BAA8B,GACpFgH,sBAAuB,CAAElgB,KAAM,wBAAyBkZ,6BAA8B,GACtFiH,uBAAwB,CAAEngB,KAAM,yBAA0BkZ,6BAA8B,GACxFkH,wBAAyB,CAAEpgB,KAAM,0BAA2BkZ,6BAA8B,GAC1FmH,yBAA0B,CAAErgB,KAAM,2BAA4BkZ,6BAA8B,GAC5FoH,wBAAyB,CAAEtgB,KAAM,0BAA2BkZ,6BAA8B,GAC1FqH,yBAA0B,CAAEvgB,KAAM,2BAA4BkZ,6BAA8B,GAC5FsH,gCAAiC,CAAExgB,KAAM,kCAAmCkZ,6BAA8B,GAC1GuH,6BAA8B,CAAEzgB,KAAM,+BAAgCkZ,6BAA8B,GACpGwH,gCAAiC,CAAE1gB,KAAM,kCAAmCkZ,6BAA8B,GAC1GyH,6BAA8B,CAAE3gB,KAAM,+BAAgCkZ,6BAA8B,GACpG0H,8BAA+B,CAAE5gB,KAAM,gCAAiCkZ,6BAA8B,GACtG2H,2BAA4B,CAAE7gB,KAAM,6BAA8BkZ,6BAA8B,GAChG4H,uBAAwB,CAAE9gB,KAAM,yBAA0BkZ,6BAA8B,GACxF6H,yBAA0B,CAAE/gB,KAAM,2BAA4BkZ,6BAA8B,GAC5F8H,uBAAwB,CAAEhhB,KAAM,yBAA0BkZ,6BAA8B,GACxF+H,yBAA0B,CAAEjhB,KAAM,2BAA4BkZ,6BAA8B,GAC5FgI,sBAAuB,CAAElhB,KAAM,wBAAyBkZ,6BAA8B,GACtFiI,wBAAyB,CAAEnhB,KAAM,0BAA2BkZ,6BAA8B,GAC1FkI,wBAAyB,CAAEphB,KAAM,0BAA2BkZ,6BAA8B,GAC1FmI,0BAA2B,CAAErhB,KAAM,4BAA6BkZ,6BAA8B,GAC9FoI,qBAAsB,CAAEthB,KAAM,uBAAwBkZ,6BAA8B,GACpFqI,uBAAwB,CAAEvhB,KAAM,yBAA0BkZ,6BAA8B,GACxFsI,uBAAwB,CAAExhB,KAAM,yBAA0BkZ,6BAA8B,GACxFuI,yBAA0B,CAAEzhB,KAAM,2BAA4BkZ,6BAA8B,GAC5FwI,2BAA4B,CAAE1hB,KAAM,6BAA8BkZ,6BAA8B,GAChGyI,6BAA8B,CAAE3hB,KAAM,+BAAgCkZ,6BAA8B,GACpG0I,2BAA4B,CAAE5hB,KAAM,6BAA8BkZ,6BAA8B,GAChG2I,6BAA8B,CAAE7hB,KAAM,+BAAgCkZ,6BAA8B,GACpG4I,8BAA+B,CAAE9hB,KAAM,gCAAiCkZ,6BAA8B,GACtG6I,gCAAiC,CAAE/hB,KAAM,kCAAmCkZ,6BAA8B,GAC1G8I,+BAAgC,CAAEhiB,KAAM,iCAAkCkZ,6BAA8B,GACxG+I,iCAAkC,CAAEjiB,KAAM,mCAAoCkZ,6BAA8B,GAC5GgJ,4BAA6B,CAAEliB,KAAM,8BAA+BkZ,6BAA8B,GAClGiJ,8BAA+B,CAAEniB,KAAM,gCAAiCkZ,6BAA8B,GACtGkJ,8BAA+B,CAAEpiB,KAAM,gCAAiCkZ,6BAA8B,GACtGmJ,gCAAiC,CAAEriB,KAAM,kCAAmCkZ,6BAA8B,GAC1GoJ,2BAA4B,CAAEtiB,KAAM,6BAA8BkZ,6BAA8B,GAChGqJ,6BAA8B,CAAEviB,KAAM,+BAAgCkZ,6BAA8B,GACpGsJ,8BAA+B,CAAExiB,KAAM,gCAAiCkZ,6BAA8B,GACtGuJ,gCAAiC,CAAEziB,KAAM,kCAAmCkZ,6BAA8B,GAC1GwJ,6BAA8B,CAAE1iB,KAAM,+BAAgCkZ,6BAA8B,GACpGyJ,+BAAgC,CAAE3iB,KAAM,iCAAkCkZ,6BAA8B,GACxG0J,wBAAyB,CAAE5iB,KAAM,0BAA2BkZ,6BAA8B,GAC1F2J,qBAAsB,CAAE7iB,KAAM,uBAAwBkZ,6BAA8B,GACpF4J,wBAAyB,CAAE9iB,KAAM,0BAA2BkZ,6BAA8B,GAC1F6J,qBAAsB,CAAE/iB,KAAM,uBAAwBkZ,6BAA8B,GACpF8J,0BAA2B,CAAEhjB,KAAM,4BAA6BkZ,6BAA8B,GAC9F+J,uBAAwB,CAAEjjB,KAAM,yBAA0BkZ,6BAA8B,GACxFgK,wBAAyB,CAAEljB,KAAM,0BAA2BkZ,6BAA8B,GAC1FiK,qBAAsB,CAAEnjB,KAAM,uBAAwBkZ,6BAA8B,GACpFkK,2BAA4B,CAAEpjB,KAAM,6BAA8BkZ,6BAA8B,GAChGmK,wBAAyB,CAAErjB,KAAM,0BAA2BkZ,6BAA8B,GAC1FoK,yBAA0B,CAAEtjB,KAAM,2BAA4BkZ,6BAA8B,GAC5FqK,sBAAuB,CAAEvjB,KAAM,wBAAyBkZ,6BAA8B,GACtFsK,wBAAyB,CAAExjB,KAAM,0BAA2BkZ,6BAA8B,GAC1FuK,qBAAsB,CAAEzjB,KAAM,uBAAwBkZ,6BAA8B,GACpFwK,wBAAyB,CAAE1jB,KAAM,0BAA2BkZ,6BAA8B,GAC1FyK,qBAAsB,CAAE3jB,KAAM,uBAAwBkZ,6BAA8B,GACpF0K,sBAAuB,CAAE5jB,KAAM,wBAAyBkZ,6BAA8B,GACtF2K,uBAAwB,CAAE7jB,KAAM,yBAA0BkZ,6BAA8B,GACxF4K,sBAAuB,CAAE9jB,KAAM,wBAAyBkZ,6BAA8B,GACtF6K,uBAAwB,CAAE/jB,KAAM,yBAA0BkZ,6BAA8B,GACxF8K,uBAAwB,CAAEhkB,KAAM,yBAA0BkZ,6BAA8B,GACxF+K,wBAAyB,CAAEjkB,KAAM,0BAA2BkZ,6BAA8B,GAC1FgL,yBAA0B,CAAElkB,KAAM,2BAA4BkZ,6BAA8B,GAC5FiL,0BAA2B,CAAEnkB,KAAM,4BAA6BkZ,6BAA8B,GAC9FkL,sBAAuB,CAAEpkB,KAAM,wBAAyBkZ,6BAA8B,GACtFmL,uBAAwB,CAAErkB,KAAM,yBAA0BkZ,6BAA8B,GACxFoL,wBAAyB,CAAEtkB,KAAM,0BAA2BkZ,6BAA8B,GAC1FqL,yBAA0B,CAAEvkB,KAAM,2BAA4BkZ,6BAA8B,GAC5FsL,sBAAuB,CAAExkB,KAAM,wBAAyBkZ,6BAA8B,GACtFuL,uBAAwB,CAAEzkB,KAAM,yBAA0BkZ,6BAA8B,GACxFwL,sBAAuB,CAAE1kB,KAAM,wBAAyBkZ,6BAA8B,GACtFyL,uBAAwB,CAAE3kB,KAAM,yBAA0BkZ,6BAA8B,GACxF0L,wBAAyB,CAAE5kB,KAAM,0BAA2BkZ,6BAA8B,GAC1F2L,yBAA0B,CAAE7kB,KAAM,2BAA4BkZ,6BAA8B,GAC5F4L,yBAA0B,CAAE9kB,KAAM,2BAA4BkZ,6BAA8B,GAC5F6L,0BAA2B,CAAE/kB,KAAM,4BAA6BkZ,6BAA8B,GAC9F8L,sBAAuB,CAAEhlB,KAAM,wBAAyBkZ,6BAA8B,GACtF+L,uBAAwB,CAAEjlB,KAAM,yBAA0BkZ,6BAA8B,GACxFgM,wBAAyB,CAAEllB,KAAM,0BAA2BkZ,6BAA8B,GAC1FiM,yBAA0B,CAAEnlB,KAAM,2BAA4BkZ,6BAA8B,GAC5FkM,sBAAuB,CAAEplB,KAAM,wBAAyBkZ,6BAA8B,GACtFmM,uBAAwB,CAAErlB,KAAM,yBAA0BkZ,6BAA8B,GACxFoM,yBAA0B,CAAEtlB,KAAM,2BAA4BkZ,6BAA8B,GAC5FqM,0BAA2B,CAAEvlB,KAAM,4BAA6BkZ,6BAA8B,GAC9FsM,wBAAyB,CAAExlB,KAAM,0BAA2BkZ,6BAA8B,GAC1FuM,yBAA0B,CAAEzlB,KAAM,2BAA4BkZ,6BAA8B,GAC5FwM,8BAA+B,CAAE1lB,KAAM,gCAAiCkZ,6BAA8B,GACtGyM,2BAA4B,CAAE3lB,KAAM,6BAA8BkZ,6BAA8B,GAChG0M,8BAA+B,CAAE5lB,KAAM,gCAAiCkZ,6BAA8B,GACtG2M,2BAA4B,CAAE7lB,KAAM,6BAA8BkZ,6BAA8B,GAChG4M,gCAAiC,CAAE9lB,KAAM,kCAAmCkZ,6BAA8B,GAC1G6M,6BAA8B,CAAE/lB,KAAM,+BAAgCkZ,6BAA8B,GACpG8M,8BAA+B,CAAEhmB,KAAM,gCAAiCkZ,6BAA8B,GACtG+M,2BAA4B,CAAEjmB,KAAM,6BAA8BkZ,6BAA8B,GAChGgN,iCAAkC,CAAElmB,KAAM,mCAAoCkZ,6BAA8B,GAC5GiN,8BAA+B,CAAEnmB,KAAM,gCAAiCkZ,6BAA8B,GACtGkN,+BAAgC,CAAEpmB,KAAM,iCAAkCkZ,6BAA8B,GACxGmN,4BAA6B,CAAErmB,KAAM,8BAA+BkZ,6BAA8B,GAClGoN,8BAA+B,CAAEtmB,KAAM,gCAAiCkZ,6BAA8B,GACtGqN,2BAA4B,CAAEvmB,KAAM,6BAA8BkZ,6BAA8B,GAChGsN,8BAA+B,CAAExmB,KAAM,gCAAiCkZ,6BAA8B,GACtGuN,2BAA4B,CAAEzmB,KAAM,6BAA8BkZ,6BAA8B,GAChGwN,mBAAoB,CAAE1mB,KAAM,qBAAsBkZ,6BAA8B,GAChFyN,qBAAsB,CAAE3mB,KAAM,uBAAwBkZ,6BAA8B,GACpF0N,iBAAkB,CAAE5mB,KAAM,mBAAoBkZ,6BAA8B,GAC5E2N,iBAAkB,CAAE7mB,KAAM,mBAAoBkZ,6BAA8B,GAC5E4N,mBAAoB,CAAE9mB,KAAM,qBAAsBkZ,6BAA8B,GAChF6N,qBAAsB,CAAE/mB,KAAM,uBAAwBkZ,6BAA8B,GACpF8N,oBAAqB,CAAEhnB,KAAM,sBAAuBkZ,6BAA8B,GAClF+N,sBAAuB,CAAEjnB,KAAM,wBAAyBkZ,6BAA8B,GACtFgO,mBAAoB,CAAElnB,KAAM,qBAAsBkZ,6BAA8B,GAChFiO,qBAAsB,CAAEnnB,KAAM,uBAAwBkZ,6BAA8B,GACpFkO,oBAAqB,CAAEpnB,KAAM,sBAAuBkZ,6BAA8B,GAClFmO,sBAAuB,CAAErnB,KAAM,wBAAyBkZ,6BAA8B,GACtFoO,oBAAqB,CAAEtnB,KAAM,sBAAuBkZ,6BAA8B,GAClFqO,sBAAuB,CAAEvnB,KAAM,wBAAyBkZ,6BAA8B,GACtFsO,oBAAqB,CAAExnB,KAAM,sBAAuBkZ,6BAA8B,GAClFuO,sBAAuB,CAAEznB,KAAM,wBAAyBkZ,6BAA8B,GACtFwO,oBAAqB,CAAE1nB,KAAM,sBAAuBkZ,6BAA8B,GAClFyO,sBAAuB,CAAE3nB,KAAM,wBAAyBkZ,6BAA8B,GACtF0O,oBAAqB,CAAE5nB,KAAM,sBAAuBkZ,6BAA8B,GAClF2O,sBAAuB,CAAE7nB,KAAM,wBAAyBkZ,6BAA8B,GACtF4O,oBAAqB,CAAE9nB,KAAM,sBAAuBkZ,6BAA8B,GAClF6O,sBAAuB,CAAE/nB,KAAM,wBAAyBkZ,6BAA8B,GACtF8O,oBAAqB,CAAEhoB,KAAM,sBAAuBkZ,6BAA8B,GAClF+O,sBAAuB,CAAEjoB,KAAM,wBAAyBkZ,6BAA8B,GACtFgP,oBAAqB,CAAEloB,KAAM,sBAAuBkZ,6BAA8B,GAClFiP,sBAAuB,CAAEnoB,KAAM,wBAAyBkZ,6BAA8B,GACtFkP,4BAA6B,CAAEpoB,KAAM,8BAA+BkZ,6BAA8B,GAClGmP,8BAA+B,CAAEroB,KAAM,gCAAiCkZ,6BAA8B,GACtGoP,6BAA8B,CAAEtoB,KAAM,+BAAgCkZ,6BAA8B,GACpGqP,oCAAqC,CACjCvoB,KAAM,sCACNkZ,6BAA8B,GAElCsP,qBAAsB,CAAExoB,KAAM,uBAAwBkZ,6BAA8B,GACpFuP,sBAAuB,CAAEzoB,KAAM,wBAAyBkZ,6BAA8B,IAkCpFwP,EAAgB,CAClB,KAAM,CAAE1oB,KAAM,kBAAmB2oB,eAAe,GAChDC,GAAI,CACAC,UAAW,0BACXC,UAAW,0BACXH,eAAe,GAEnB,KAAM,CACFE,UAAW,mBACXC,UAAW,mBACXH,eAAe,GAEnB,KAAM,CACFE,UAAW,mBACXC,UAAW,mBACXH,eAAe,GAEnB,KAAM,CACFE,UAAW,oBACXC,UAAW,oBACXH,eAAe,GAEnB,KAAM,CAAE3oB,KAAM,2BAA4B2oB,eAAe,GACzDI,GAAI,CACAF,UAAW,4BACXC,UAAW,4BACXH,eAAe,GAEnBK,GAAI,CAAEhpB,KAAM,kBAAmB2oB,eAAe,GAC9C,KAAM,CAAEE,UAAW,eAAgBC,UAAW,eAAgBH,eAAe,GAC7E,MAAO,CAAE3oB,KAAM,eAAgB2oB,eAAe,GAC9C,MAAO,CAAE3oB,KAAM,eAAgB2oB,eAAe,GAC9C,MAAO,CAAEE,UAAW,oBAAqBC,UAAW,oBAAqBH,eAAe,GACxF,OAAQ,CAAE3oB,KAAM,oBAAqB2oB,eAAe,GACpD,OAAQ,CAAE3oB,KAAM,oBAAqB2oB,eAAe,GACpD,MAAO,CAAEE,UAAW,mBAAoBC,UAAW,mBAAoBH,eAAe,GACtF,OAAQ,CAAE3oB,KAAM,mBAAoB2oB,eAAe,GACnD,OAAQ,CAAE3oB,KAAM,mBAAoB2oB,eAAe,GACnD,OAAQ,CAAEE,UAAW,uBAAwBC,UAAW,uBAAwBH,eAAe,GAC/F,QAAS,CAAE3oB,KAAM,uBAAwB2oB,eAAe,GACxD,QAAS,CAAE3oB,KAAM,uBAAwB2oB,eAAe,GACxD,KAAM,CAAE3oB,KAAM,eAAgB2oB,eAAe,GAC7CM,GAAI,CAAEjpB,KAAM,iBAAkB2oB,eAAe,GAC7C,KAAM,CAAE3oB,KAAM,kBAAmB2oB,eAAe,IAE9CO,EAAY,CACdC,QAAS,CAAEnpB,KAAM,sBACjBopB,iBAAkB,CAAEppB,KAAM,mBAC1BqpB,KAAM,CAAErpB,KAAM,gBACdspB,cAAe,CAAEtpB,KAAM,qBACvBupB,GAAI,CAAEvpB,KAAM,iBACZwpB,QAAS,CAAExpB,KAAM,uCACjBypB,UAAW,CAAEzpB,KAAM,2CACnB0pB,QAAS,CAAE1pB,KAAM,sCACjB2pB,UAAW,CAAE3pB,KAAM,mCACnB4pB,UAAW,CAAE5pB,KAAM,iCACnB6pB,YAAa,CAAE7pB,KAAM,+CACrB8pB,UAAW,CAAE9pB,KAAM,8BACnB+pB,WAAY,CAAE/pB,KAAM,uBACpBgqB,MAAO,CAAEhqB,KAAM,cACfiqB,KAAM,CAAEjqB,KAAM,mBACdkqB,KAAM,CAAElqB,KAAM,qBACdmqB,SAAU,CAAEnqB,KAAM,mBAClBoqB,SAAU,CAAEpqB,KAAM,wBAClBqqB,KAAM,CAAErqB,KAAM,aACdsqB,cAAe,CAAEtqB,KAAM,mBACvBuqB,YAAa,CAAEvqB,KAAM,iBACrBwqB,KAAM,CAAExqB,KAAM,aACdyqB,SAAU,CAAEzqB,KAAM,iBAClB0qB,MAAO,CAAE1qB,KAAM,eAEnB,MAAM2qB,EAIFzoB,0BACI,GAAuC,IAAnCyoB,EAAOC,iBAAiBroB,OACxB,MAAM,IAAIzC,EAAa,UAAW,yFAGlC,OAAO6qB,EAAOC,iBAAiB,EAEvC,CACA1oB,sBAAsB2oB,GAClB,IAAKA,KAAUA,KAAQnU,GACnB,MAAM,IAAI5W,EAAa,cAAe,iBAAmB+qB,GAC7D,OAAOnU,EAAMmU,EACjB,CAOA3oB,qBAAqB4oB,EAAgBD,EAAO,SAAUE,GAClD,IAAIC,EAAU,CAAEC,aAAc,EAAGC,SAAU,KACrB,iBAAXH,IACPC,EAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG6W,GAAUD,IAExD,MAAMG,EAAWP,EAAOQ,iBAAiBH,EAAQE,UAC3CE,EAASN,EAAexlB,MAAM,KACpC,GAAI8lB,EAAO7oB,OAAS,EAChB,MAAM,IAAIzC,EAAa,eAAgB,iEAAiEgrB,KAE5G,MAAMhuB,EAAMsuB,EAAO,GAAGC,cAChBttB,EAAQqZ,EAAUta,GACxB,IAAKiB,EACD,MAAM,IAAI+B,EAAa,eAAgB,qBAAuBhD,GAC9DiB,EAAMgb,SACNqS,EAAO,GAAKrtB,EAAMgb,OAAOnU,YAC7B,IAAImU,EAASvX,SAAS4pB,EAAO,GAAI,IAEjCrS,IAAW,EAAIiS,EAAQC,aAEvB,IAAItqB,GADuB,EAAToY,EAAa,GACPhb,EAAMkR,OAAS,EACvCtO,GAAQgqB,EAAOW,eAAeT,GAAMjU,WACpC,IAAI2U,EAAS,EACT5qB,GAAQ,GAAa,EAAPA,EAAY,GAAM,IAChC4qB,EAAS,GACT5qB,GAAQ,GAAa,EAAPA,EAAY,GAAM,IAChC4qB,GAAU,GAEd,MAAMC,OAAqC,IAAlBztB,EAAMsZ,QAAmC,GAAT0B,EAAchb,EAAMsZ,aAAU9W,EAEjFP,EAAOjC,EAAMiC,KACbgZ,EAAcjb,EAAMib,YAC1B,IAAIyS,EAAsB,CAAC,EAC3B,GAAIL,EAAO7oB,OAAS,GAAK6oB,EAAO,GAAI,CAChC,MAAMM,EAAYN,EAAO,GAAGC,cAC5BI,EAAsB,CAAEzrB,KAAMrD,KAAKgvB,aAAaD,EAAWR,KAAe,CAAC,CAC/E,CACA,OAAOluB,OAAOmX,OAAO,CAAErX,MACnBic,SACApY,OACA6qB,YAAWjU,WAAYxZ,EAAMwZ,WAAYvX,OACzCurB,SACAvS,cAAa4S,WAAW,GAASH,EACzC,CACAvpB,qBAAqB2pB,GACjB,QAAuB,IAAZA,GAA2BA,EAAU,GAAKA,EAAU,GAC3D,MAAM,IAAI/rB,EAAa,eAAgB,6DAA6D+rB,KAExG,MAcMC,EAdQ,CACV,EAAG,IACH,EAAG,KACH,EAAG,IACH,EAAG,KACH,EAAG,IACH,EAAG,IACH,EAAG,KACH,EAAG,IACH,EAAG,KACH,EAAG,IACH,GAAI,KACJ,GAAI,KAEgBD,GACxB,IAAKC,EACD,MAAM,IAAIhsB,EAAa,eAAgB,mCAAmC+rB,KAE9E,OAAOC,CACX,CACA5pB,uBAAuB6pB,EAAMC,EAAQ,GACjC,IAAIC,EACA7kB,EAAQ,EACR8kB,EAAU,EACd,GAA2B,MAAvBH,EAAKV,cAAuB,CAC5B,MAAMc,EAAe,IAAIC,EAAM,wBAAyBzB,EAAO0B,sBAAsB5e,aAErF,GADAwe,EAAQ,wBACkB1rB,MAAtB4rB,EAAa/kB,OAA6C7G,MAAvB4rB,EAAa9kB,OAChD,MAAM,IAAIvH,EAAa,iBAAkB,6BAC7CsH,EAAQ+kB,EAAa/kB,MACrB8kB,GAAWC,EAAa9kB,OAAS,CACrC,MAEID,EAAQujB,EAAO2B,UAAUP,GAE7B,MAAO,CACHrqB,KAAMqqB,EACN/rB,KAAMisB,EACNM,SAAU,IAAMnlB,EAAQ4kB,EACxBE,UAER,CAGAhqB,iBAAiBR,GACb,OAAO,EAAIA,EAAKkD,WAAWrC,MAC/B,CACAL,yBAAyBsqB,GACrB,OAAO9D,EAAc8D,EACzB,CACAtqB,uBAAuBmT,GACnB,OAAO4D,EAAY5D,EACvB,CACAnT,qBAAqBmT,GACjB,OAAO6T,EAAU7T,EACrB,CACAnT,oBAAoBuqB,GAChB,MAAMC,EAAU1X,EAAcyX,GAC9B,IAAKC,EACD,MAAM,IAAI5sB,EAAa,kBAAmB,4BAA4B2sB,MAE1E,IAAKC,EAAQrX,IACT,MAAO,GAEX,MAIMsX,EAJiB,CACnBtrB,EAAG,CAAC,EAAG,GAAK,IAAK,EAAG,EAAG,IAAK,KAC5B,IAAK,CAAC,EAAG,KAAM,GAAK,EAAG,IAAK,GAAK,IAERqrB,EAAQrX,KAC/BuX,EAAW,GACjB,IAAK,IAAIvnB,EAAI,EAAGA,EAAIqnB,EAAQxX,MAAO7P,EAAG,CAClC,MAAM1E,EAAOgsB,EAAMtnB,GACnBunB,EAASxb,KAAK,CAAExC,KAAM8d,EAAQrX,IAAK1U,QACvC,CACA,OAAOisB,CACX,CACA1qB,0BACI,OAAO8S,CACX,CACA9S,uBAAuBuqB,GACnB,OAAOA,KAAQzX,CACnB,CAOA9S,wBAAwBgpB,GACpB,MAAM2B,EAAiB9X,EAAgBmW,GAIvC,QAHuB3qB,IAAnBssB,IACA3B,EAAW2B,QAEatsB,IAAxBuU,EAAUoW,GACV,MAAM,IAAIprB,EAAa,eAAgB,uCAAuCorB,KAElF,OAAOA,CACX,CAEAhpB,0BAA0BgpB,GACtB,OAAO,IAAIjpB,GAAWkD,MAAMwlB,EAAOQ,iBAAiBD,GACxD,CAEAhpB,wBAAwBgpB,GACpB,OAAOP,EAAOmC,mBAAmB5B,GAAUntB,OAC/C,CAEAmE,uBAAuBgpB,GACnBA,EAAWP,EAAOQ,iBAAiBD,GACnC,MAAM6B,EAAQjY,EAAUoW,GACxB,QAAc3qB,IAAVwsB,EACA,MAAM,IAAIjtB,EAAa,mBAE3B,OAAOitB,CACX,CACA7qB,oBAAoB0M,EAAMsc,GACtB,IAAIlrB,EAAO,GACX,OAAQ4O,GAEJ,IAAK,KACD5O,EAAO,uBACP,MACJ,IAAK,KACDA,EAAO,sBACP,MACJ,IAAK,KAGL,IAAK,KAiDL,IAAK,KACDA,EAAO,uBACP,MA/CJ,IAAK,KACDA,EAAO,0BACP,MACJ,IAAK,KACDA,EAAO,yBACP,MACJ,IAAK,KAGL,IAAK,KA8BL,IAAK,KACDA,EAAO,0BACP,MA5BJ,IAAK,KACDA,EAAO,iBACP,MACJ,IAAK,KACDA,EAAO,gBACP,MACJ,IAAK,KACDA,EAAO,iBACP,MACJ,IAAK,KACDA,EAAO,kBACP,MAEJ,IAAK,KACDA,EAAO,sBACP,MACJ,IAAK,KA4BL,IAAK,KACDA,EAAO,sBACP,MA1BJ,IAAK,KACDA,EAAO,uBACP,MACJ,IAAK,KACDA,EAAO,uBACP,MAIJ,IAAK,KACDA,EAAO,oBACP,MAIJ,IAAK,KACDA,EAAO,4BACP,MACJ,IAAK,OACDA,EAAO,6BACP,MACJ,IAAK,KACDA,EAAO,gBACP,MAIJ,IAAK,KACDA,EAAO,iCACP,MACJ,IAAK,IACL,IAAK,IACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,6BACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,IAAK,IACDA,EAAO,sBACP,MACJ,QACIA,EAAO,uBAGf,MACJ,IAAK,IACL,IAAK,IACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,sBACP,MACJ,IAAK,IACDA,EAAO,gBACP,MACJ,IAAK,IACDA,EAAO,eACP,MACJ,QACIA,EAAO,gBAGf,MACJ,IAAK,IACL,IAAK,IACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,uBACP,MACJ,IAAK,IACDA,EAAO,iBACP,MACJ,IAAK,IACDA,EAAO,gBACP,MACJ,QACIA,EAAO,iBAGf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,6BACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,IAAK,IACDA,EAAO,sBACP,MACJ,QACIA,EAAO,kBAGf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,6BACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,IAAK,IACDA,EAAO,sBACP,MACJ,QACIA,EAAO,uBAGf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,4BACP,MACJ,IAAK,IAGL,IAAK,IACDA,EAAO,sBACP,MACJ,QACIA,EAAO,sBAGf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,gCACP,MACJ,IAAK,IACDA,EAAO,0BACP,MACJ,IAAK,IACDA,EAAO,yBACP,MACJ,QACIA,EAAO,0BAGf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,kCACP,MACJ,IAAK,IACDA,EAAO,4BACP,MACJ,IAAK,IACDA,EAAO,2BACP,MACJ,QACIA,EAAO,4BAGf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,8BACP,MACJ,IAAK,IACDA,EAAO,wBACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,QACIA,EAAO,wBAEf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,8BACP,MACJ,IAAK,IACDA,EAAO,wBACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,QACIA,EAAO,yBAIvB,OAAOA,CACX,CAGAkC,qBAAqBgpB,EAAUtc,EAAO,KAClCsc,EAAWP,EAAOQ,iBAAiBD,GAEnC,IAAIlrB,EAAOgtB,EAAc9B,QACZ3qB,IAATP,IACAA,EAAOgtB,EAAc,IAGzB,IAAIC,EAAsBjtB,EAAK4O,GAE/B,MAAM+c,EAAehB,EAAOgB,aAAa/c,EAAKyc,cAAeH,GACzC,IAAhBS,IACAsB,EAAsBjwB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG8Y,GAAsB,CAAEC,UAAWvB,EAAc3rB,KAAM2rB,KACjH,MAAMuB,EAAYD,EAAoBC,UAKtC,OAAOlwB,OAAOmX,OAAOnX,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGnU,EAAKmtB,QAAS,CAAEZ,SAFpD,CAACP,EAAQrB,EAAOyC,sBAAwBhB,EAAMG,SAASW,EAAWlB,KAESiB,EAChG,EAEJtC,EAAO0C,QAAS,EAChB1C,EAAO2C,eAAiB,GACxB3C,EAAO4C,WAAa,IACpB5C,EAAO6C,YAAc,GACrB7C,EAAO8C,qBAAuB,EAC9B9C,EAAO+C,wBAA0B,EACjC/C,EAAO9V,WAAaA,EAIpB8V,EAAOC,iBAAmB,GAC1BD,EAAOyC,oBAAsB,GAC7BzC,EAAO0B,qBAAuB,GAC9B1B,EAAOgD,qBAAuB,GAC9BhD,EAAOiD,oBAAsB,GAQ7BjD,EAAOkD,wBAA0B,EACjClD,EAAOmD,cAAgB7U,EACvB0R,EAAOoD,uBAnkBmB,CACtB,EAAG,CACC3sB,EAAG,CAAC,GACJC,EAAG,CAAC,IAER,EAAG,CACCD,EAAG,CAAC,EAAG,IAEX,EAAG,CACCA,EAAG,CAAC,EAAG,EAAG,GACVC,EAAG,CAAC,EAAG,EAAG,GACV2sB,iBAAkB,CAAC,EAAG,EAAG,IAE7B,EAAG,CACC5sB,EAAG,CAAC,EAAG,EAAG,EAAG,GACbC,EAAG,CAAC,EAAG,EAAG,EAAG,GACb4sB,sBAAuB,CAAC,EAAG,EAAG,EAAG,IAErC,EAAG,CACC7sB,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,GAChBC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,GAChB6sB,sBAAuB,CAAC,EAAG,EAAG,EAAG,EAAG,GACpCC,2BAA4B,CAAC,EAAG,EAAG,EAAG,EAAG,IAE7C,EAAG,CACC/sB,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACnBC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB+sB,qBAAsB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACtCC,0BAA2B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KAwiBnD1D,EAAO2D,QAAU,CAEbC,MAAOC,OAAOC,aAAa,MAE3BC,KAAMF,OAAOC,aAAa,MAE1BE,QAASH,OAAOC,aAAa,MAE7BG,SAAUJ,OAAOC,aAAa,MAE9B,eAAgBD,OAAOC,aAAa,KAEpCI,QAASL,OAAOC,aAAa,KAE7BK,OAAQN,OAAOC,aAAa,OAGhC9D,EAAOoE,WAh3BgB,CACnBxtB,EAAG,CAAE+L,KAAM,QACX1P,EAAG,CAAE0P,KAAM,QACX3H,EAAG,CAAE2H,KAAM,YACX0hB,EAAG,CAAE1hB,KAAM,SACXtI,EAAG,CAAEsI,KAAM,SACXlQ,EAAG,CAAEkQ,KAAM,SACXtK,EAAG,CAAEsK,KAAM,WACXhN,EAAG,CAAEgN,KAAM,KACX2hB,GAAI,CAAE3hB,KAAM,WACZ4hB,GAAI,CAAE5hB,KAAM,YACZ6hB,GAAI,CAAE7hB,KAAM,WACZ8hB,GAAI,CAAE9hB,KAAM,oBACZ+hB,GAAI,CAAE/hB,KAAM,UACZgiB,GAAI,CAAEhiB,KAAM,eACZiiB,GAAI,CAAEjiB,KAAM,kBAm2BhBqd,EAAO6E,QAAU,CACbC,UAAW,EACXC,WAAY,EACZ9hB,WAAYiH,GAOhB,MAAMmY,EAAgB,CAClB,MAAO,CACHG,OAAQ,CACJD,UAAW,GACXyC,MAAM,EACNC,MAAM,EACNC,mBAAoBlF,EAAO6C,YAC3BsC,qBAAsBnF,EAAO6C,YAC7BuC,2BAA4BpF,EAAO6C,YACnCwC,6BAA8BrF,EAAO6C,YACrCyC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBvyB,EAAG,CAECsvB,UAAW,kBACXrU,MAAM,EACNuX,SAAU,MACVH,WAAY,IAEhBjrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAOgD,qBACvByC,SAAU,QAGlB,EAAG,CACCjD,OAAQ,CACJD,UAAW,GACXyC,MAAM,EACNC,MAAM,EACNC,mBAAoBlF,EAAO6C,YAC3BsC,qBAAsBnF,EAAO6C,YAC7BuC,2BAA4BpF,EAAO6C,YACnCwC,6BAA8BrF,EAAO6C,YACrCyC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBvyB,EAAG,CAECsvB,UAAW,YACXmD,iBAAkB,qBAClBxX,MAAM,EACNuX,SAAU,MACVH,WAAY,IAEhBjrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAOgD,qBACvByC,SAAU,QAGlB,EAAG,CACCjD,OAAQ,CACJD,UAAW,GACXyC,MAAM,EACNC,MAAM,EACNC,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBvyB,EAAG,CAECsvB,UAAW,WACXmD,iBAAkB,oBAClBV,MAAM,EACN9W,MAAM,EACNuX,SAAU,MACVH,YAAa,IAEjBjrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAOgD,qBACvByC,SAAU,QAGlB,EAAG,CACCjD,OAAQ,CACJD,UAAW,GACXyC,MAAM,EACNC,MAAM,EACNC,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBvyB,EAAG,CAECsvB,UAAW,cACXyC,MAAM,EACN9W,MAAM,EACNuX,SAAU,MACVH,YAAa,GACbC,WAAY,IACZC,WAAY,KAEhBnrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAOgD,qBACvByC,SAAU,QAGlB,EAAG,CACCjD,OAAQ,CACJD,UAAW,GACXyC,MAAM,EACNC,MAAM,EACNU,WAAY,EACZC,oBAAqB,EACrBC,iBAAkB,YAClBC,mBAAoB,cACpBZ,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBvyB,EAAG,CAECsvB,UAAW,UACXyC,MAAM,EACNC,MAAM,EACN/W,MAAM,EACNuX,SAAU,MACVH,YAAa,GACbC,WAAY,EACZC,WAAY,GAEhBnrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAOgD,qBACvByC,SAAU,QAGlB,GAAI,CACAjD,OAAQ,CACJD,UAAW,GACXoD,WAAY,EACZC,oBAAqB,EACrBZ,MAAM,EACNC,MAAM,EACNY,iBAAkB,aAClBC,mBAAoB,eACpBZ,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBvyB,EAAG,CAECsvB,UAAW,WACXyC,MAAM,EACNC,MAAM,EACN/W,MAAM,EACNuX,SAAU,MACVH,YAAa,GACbC,WAAY,EACZC,WAAY,GAEhBnrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAOgD,qBACvByC,SAAU,QAGlB,GAAI,CACAjD,OAAQ,CACJD,UAAW,GACXoD,WAAY,EACZC,oBAAqB,IACrBZ,MAAM,EACNC,MAAM,EACNY,iBAAkB,aAClBC,mBAAoB,eACpBZ,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBvyB,EAAG,CAECsvB,UAAW,WACXyC,MAAM,EACNC,MAAM,EACN/W,MAAM,EACNuX,SAAU,MACVH,YAAa,IACbC,WAAY,EACZC,WAAY,GAEhBnrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAOgD,qBACvByC,SAAU,QAGlB,GAAI,CACAjD,OAAQ,CACJD,UAAW,GACXoD,WAAY,EACZC,oBAAqB,GACrBZ,MAAM,EACNC,MAAM,EACNY,iBAAkB,aAClBC,mBAAoB,eACpBZ,kBAAmB,GACnBC,oBAAqB,GACrBC,0BAA2B,GAC3BC,4BAA6B,GAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBvyB,EAAG,CAECsvB,UAAW,WACXyC,MAAM,EACNC,MAAM,EACN/W,MAAM,EACNuX,SAAU,MACVH,YAAa,IACbC,WAAY,EACZC,WAAY,GAEhBnrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAOgD,qBACvByC,SAAU,QAGlB,IAAK,CACDjD,OAAQ,CACJD,UAAW,GACXoD,WAAY,EACZC,oBAAqB,KACrBZ,MAAM,EACNC,MAAM,EACNY,iBAAkB,cAClBC,mBAAoB,gBACpBZ,kBAAmB,GACnBC,oBAAqB,GACrBC,0BAA2B,GAC3BC,4BAA6B,GAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBvyB,EAAG,CAECsvB,UAAW,YACXyC,MAAM,EACNC,MAAM,EACN/W,MAAM,EACNuX,SAAU,MACVH,YAAa,IACbC,WAAY,EACZC,WAAY,GAEhBnrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAOgD,qBACvByC,SAAU,SClxCf,IAAIM,ECHAC,GDIX,SAAWD,GACPA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAuB,UAAI,GAAK,YAC5CA,EAAYA,EAAoB,OAAI,GAAK,QAC5C,CALD,CAKGA,IAAgBA,EAAc,CAAC,IAClC,MAAME,EACFxyB,YAAYyyB,EAAW7wB,EAAM/B,GACzBtB,KAAKm0B,OAAS,EACdn0B,KAAKwQ,QAAUif,EAAM2E,YAAYF,EAAW7wB,EAAM/B,GAClDtB,KAAKq0B,KAAO5E,EAAM6E,sBAAsBt0B,KAAKwQ,QAAQ+jB,QAASv0B,KAAKwQ,QAAQ6e,MAAOrvB,KAAKwQ,QAAQgkB,QAASx0B,KAAKwQ,QAAQikB,SACjHnzB,IACAtB,KAAKm0B,MAAQ1E,EAAMiF,iBAAiB10B,KAAKwQ,QAAQ1B,KAAMxN,EAAU+B,EAAM,SAAU,GAEzF,EAqBJ,MAAMsxB,EACFlzB,YAAY8yB,EAASK,EAASC,EAASxF,GACnCrvB,KAAKu0B,QAAUA,EACfv0B,KAAK40B,QAAUA,EACf50B,KAAK60B,QAAUA,EACf70B,KAAKqvB,MAAQA,EACbrvB,KAAK0I,EAAI,EACT1I,KAAK80B,UAAY,EAEjB90B,KAAK80B,UAAY7vB,KAAK+G,IAAI,GAAIgiB,EAAO+C,wBACzC,CACA1jB,OACI,OAAOrN,KAAK0I,GAAK1I,KAAKu0B,QAAQ3uB,MAClC,CACAsH,OACI,OAAOjI,KAAK8vB,MAAO/0B,KAAKu0B,QAAQv0B,KAAK0I,KAAO1I,KAAK80B,UAAa90B,KAAK80B,UACvE,CACAE,QACI,OAAO/vB,KAAK8vB,OAAO/0B,KAAK40B,QAAU50B,KAAKu0B,QAAQv0B,KAAK0I,KAAO1I,KAAKqvB,OAASrvB,KAAK80B,WAAa90B,KAAK80B,SACpG,CACAG,QACI,OAAOhwB,KAAK8vB,OAAO/0B,KAAK60B,QAAU70B,KAAKu0B,QAAQv0B,KAAK0I,KAAO1I,KAAKqvB,OAASrvB,KAAK80B,WAAa90B,KAAK80B,SACpG,CACAvvB,aAAakD,GACT,MAAM2E,EAAS,GACT8nB,EAAQzsB,EAAIE,MAAM,KACxB,IAAID,EAAI,EACR,KAAOA,EAAIwsB,EAAMtvB,QACb,OAAQsvB,EAAMxsB,MACV,IAAK,IACD0E,EAAOqH,KAAKsf,EAAYoB,KAAMtwB,SAASqwB,EAAMxsB,MAAO7D,SAASqwB,EAAMxsB,OACnE,MACJ,IAAK,IACD0E,EAAOqH,KAAKsf,EAAYqB,KAAMvwB,SAASqwB,EAAMxsB,MAAO7D,SAASqwB,EAAMxsB,OACnE,MACJ,IAAK,IACD0E,EAAOqH,KAAKsf,EAAYsB,UAAWxwB,SAASqwB,EAAMxsB,MAAO7D,SAASqwB,EAAMxsB,MAAO7D,SAASqwB,EAAMxsB,MAAO7D,SAASqwB,EAAMxsB,OACpH,MACJ,IAAK,IACD0E,EAAOqH,KAAKsf,EAAYuB,OAAQzwB,SAASqwB,EAAMxsB,MAAO7D,SAASqwB,EAAMxsB,MAAO7D,SAASqwB,EAAMxsB,MAAO7D,SAASqwB,EAAMxsB,MAAO7D,SAASqwB,EAAMxsB,MAAO7D,SAASqwB,EAAMxsB,OAIzK,OAAO0E,CACX,EAEJ,MAAMqiB,UAAc1b,EAGLrS,sBACP,OAAOG,EAAS4tB,KACpB,CAWAlqB,wBAAwBuJ,EAAMxN,EAAU+B,EAAMlD,EAAKkR,GAC/C,IAAIjQ,EAAQ0N,EAAKsC,aAAa,UAAU9P,KAAY+B,KAAQlD,SAAOyD,GAKnE,YAJcA,IAAVxC,IAEAA,EAAQ0N,EAAKsC,aAAa,UAAU9P,KAAYnB,IAAOkR,IAEpDjQ,CACX,CACAmE,mBAAmB2uB,EAAW7wB,GAE1B,IAAIisB,EACAxgB,EAFJpL,EAAQwwB,EAAW,eAAgB,+BAGnC,IAAK,IAAIxrB,EAAI,EAAGA,EAAIwrB,EAAUtuB,OAAQ8C,IAGlC,GAFAoG,EAAOolB,EAAUxrB,GACjB4mB,EAAQxgB,EAAKoC,YAAY7N,GACrBisB,EACA,MAAO,CAAEA,QAAOxgB,QAExB,MAAM,IAAI3L,EAAa,WAAY,SAASE,4BAChD,CACAkC,mBAAmB2uB,EAAW7wB,EAAM/B,GAChC,MAAM,MAAEguB,EAAK,KAAExgB,GAAS2gB,EAAM8F,YAAYrB,EAAW7wB,GACrD,IAAKisB,EAAMlvB,EACP,MAAM,IAAI+C,EAAa,WAAY,SAASE,6BAChD,IAAImxB,EAAU,EACVC,EAAU,EACVpF,EAAQ,EACR/tB,GAAYwN,IACZ0lB,EAAU/E,EAAMiF,iBAAiB5lB,EAAMxN,EAAU+B,EAAM,SAAU,GACjEoxB,EAAUhF,EAAMiF,iBAAiB5lB,EAAMxN,EAAU+B,EAAM,SAAU,GACjEgsB,EAAQI,EAAMiF,iBAAiB5lB,EAAMxN,EAAU+B,EAAM,QAAS,IAElE,MAAMmyB,EAAQlG,EAAMkG,MACdC,EAAQnG,EAAMmG,MACdC,EAAKpG,EAAMoG,GAIjB,OAHKpG,EAAMqG,iBACPrG,EAAMqG,eAAiBhB,EAAansB,MAAM8mB,EAAMlvB,IAE7C,CACHo1B,QACAC,QACAjB,UACAC,UACApF,QACAqG,KACAnB,QAASjF,EAAMqG,eACf7mB,OACArE,MAAOgrB,EAAQD,EACf9qB,OAAQgrB,EAEhB,CAYAnwB,mBAAmBqwB,EAAKC,EAAOC,EAAO3B,EAAO9wB,EAAMgrB,GAC/C,IAAIxgB,EACJ,MAAM0C,EAAOkf,EAAMsG,MAAMC,OAAO3yB,EAAMgrB,aAAyC,EAASA,EAAQ/sB,UAC1FkP,EAAUD,EAAKC,SACF,GAAfD,EAAK4jB,QACLA,EAAQ5jB,EAAK4jB,OAEjB,MAAM8B,EAAyF,QAA1EpoB,EAAKwgB,aAAyC,EAASA,EAAQgB,aAA0B,IAAPxhB,EAAgBA,EAAK,EACtHwhB,EAAkB,GAAR8E,GAAgD,IAA/B3jB,EAAQ1B,KAAKkC,iBAA4BR,EAAQ6e,MAAQ4G,EAE1F,OADAxG,EAAMyG,cAAcN,EAAKplB,EAAQ+jB,QAASlF,EAAOwG,EAAQrlB,EAAQgkB,QAAUyB,EAAaH,EAAQtlB,EAAQikB,QAAUwB,GAC3GzlB,CACX,CACAjL,qBAAqBqwB,EAAKrB,EAASlF,EAAOwG,EAAOC,GAC7C,MAAMK,EAAK,IAAIxB,EAAaJ,EAASsB,EAAOC,EAAOzG,GAEnD,IAAI1rB,EAAGmF,EACP,IAFA8sB,EAAIQ,aAEID,EAAG9oB,QACP,OAAQ8oB,EAAGjpB,QACP,KAAK6mB,EAAYoB,KACbS,EAAIS,OAAOF,EAAGnB,QAASmB,EAAGlB,SAC1B,MACJ,KAAKlB,EAAYqB,KACbQ,EAAIU,OAAOH,EAAGnB,QAASmB,EAAGlB,SAC1B,MACJ,KAAKlB,EAAYsB,UACb1xB,EAAIwyB,EAAGnB,QACPlsB,EAAIqtB,EAAGlB,QACPW,EAAIW,iBAAiBJ,EAAGnB,QAASmB,EAAGlB,QAAStxB,EAAGmF,GAChD,MACJ,KAAKirB,EAAYuB,OACb3xB,EAAIwyB,EAAGnB,QACPlsB,EAAIqtB,EAAGlB,QACPW,EAAIY,cAAcL,EAAGnB,QAASmB,EAAGlB,QAASkB,EAAGnB,QAASmB,EAAGlB,QAAStxB,EAAGmF,GAIjF8sB,EAAIa,MACR,CACAlxB,6BAA6BgvB,EAASlF,EAAOwG,EAAOC,GAChD,MAAMK,EAAK,IAAIxB,EAAaJ,EAASsB,EAAOC,EAAOzG,GAC7CqH,EAAW,IAAIzsB,EAErB,IAEItG,EAAGmF,EAFH6tB,EAAOd,EACPe,EAAOd,EAEX,MAAQK,EAAG9oB,QACP,OAAQ8oB,EAAGjpB,QACP,KAAK6mB,EAAYoB,KAEbwB,EAAOR,EAAGnB,QACV4B,EAAOT,EAAGlB,QACV,MACJ,KAAKlB,EAAYqB,KACbsB,EAAS/rB,SAASgsB,EAAMC,GACxBD,EAAOR,EAAGnB,QACV4B,EAAOT,EAAGlB,QACVyB,EAAS/rB,SAASgsB,EAAMC,GACxB,MACJ,KAAK7C,EAAYsB,UACb1xB,EAAIwyB,EAAGnB,QACPlsB,EAAIqtB,EAAGlB,QACPyB,EAAS5rB,kBAAkB6rB,EAAMC,EAAMT,EAAGnB,QAASmB,EAAGlB,QAAStxB,EAAGmF,GAClE6tB,EAAOhzB,EACPizB,EAAO9tB,EACP,MACJ,KAAKirB,EAAYuB,OACb3xB,EAAIwyB,EAAGnB,QACPlsB,EAAIqtB,EAAGlB,QACPyB,EAASjrB,eAAekrB,EAAMC,EAAMT,EAAGnB,QAASmB,EAAGlB,QAASkB,EAAGnB,QAASmB,EAAGlB,QAAStxB,EAAGmF,GACvF6tB,EAAOhzB,EACPizB,EAAO9tB,EAInB,OAAO,IAAIF,EAAY8tB,EAASnsB,QAASmsB,EAASlsB,QAASksB,EAASjsB,QAASisB,EAAShsB,SAC1F,CACAnF,gBAAgBlC,EAAM8wB,EAAO7yB,GACzB,MAAMiP,EAAOkf,EAAMsG,MAAMC,OAAO3yB,EAAM/B,IACnB,GAAfiP,EAAK4jB,QACLA,EAAQ5jB,EAAK4jB,OAEjB,MAAM9E,EAAiB,GAAR8E,GAAmD,IAApC5jB,EAAKC,QAAQ1B,KAAKkC,iBAChD,OAAOT,EAAK8jB,KAAKlrB,OAASkmB,CAC9B,CAMA5tB,YAAY4B,EAAM8wB,EAAO9F,GACrB9qB,QAGAvD,KAAKq0B,KAAO,IAAIzrB,EAAY,EAAG,EAAG,EAAG,GACrC5I,KAAK62B,UAAY,GACjB72B,KAAK82B,UAAY,GACjB92B,KAAKquB,QAAU,CAAC,EAChBruB,KAAKqvB,MAAQ,EACbrvB,KAAKqD,KAAOA,EACZrD,KAAKm0B,MAAQA,EACbn0B,KAAK+2B,YAAc,CAAEpzB,EAAG,EAAGmF,EAAG,GAC9B9I,KAAKw0B,QAAU,EACfx0B,KAAKy0B,QAAU,EACXpG,EACAruB,KAAKg3B,WAAW3I,GAGhBruB,KAAKi3B,OAEb,CAEAlhB,QAAQhS,GAER,CACAmzB,UACI,OAAOl3B,KAAKqD,IAChB,CAEA2zB,WAAW3I,GACPruB,KAAKquB,QAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKquB,SAAUA,GAC9DruB,KAAKi3B,OACT,CACAE,SAAShD,GAEL,OADAn0B,KAAKm0B,MAAQA,EACNn0B,IACX,CACAo3B,SAASC,GAEL,OADAr3B,KAAKq3B,MAAQA,EACNr3B,IACX,CACAs3B,YACI,OAAOt3B,KAAKw0B,OAChB,CACA+C,UAAU/C,GAEN,OADAx0B,KAAKw0B,QAAUA,EACRx0B,IACX,CACAw3B,YACI,OAAOx3B,KAAKy0B,OAChB,CACAgD,UAAUhD,GAEN,OADAz0B,KAAKy0B,QAAUA,EACRz0B,IACX,CACAi3B,QACI,MAAM1mB,EAAOkf,EAAMsG,MAAMC,OAAOh2B,KAAKqD,KAAMrD,KAAKquB,QAAQ/sB,UACxDtB,KAAKwQ,QAAUD,EAAKC,SAED,GAAfD,EAAK4jB,QACLn0B,KAAKm0B,MAAQ5jB,EAAK4jB,OAEtBn0B,KAAKqvB,MAAsB,GAAbrvB,KAAKm0B,OAAmD,IAApCn0B,KAAKwQ,QAAQ1B,KAAKkC,iBACpDhR,KAAKq0B,KAAO,IAAIzrB,EAAY2H,EAAK8jB,KAAKprB,OAASjJ,KAAKqvB,MAAO9e,EAAK8jB,KAAKnrB,OAASlJ,KAAKqvB,MAAO9e,EAAK8jB,KAAKlrB,OAASnJ,KAAKqvB,MAAO9e,EAAK8jB,KAAKjrB,OAASpJ,KAAKqvB,MACrJ,CACAqI,eACI,OAAOh0B,EAAQ1D,KAAKwQ,QAAS,WAAY,SAASxQ,KAAKqD,2BAC3D,CACAyN,aACI,MAAMN,EAAUxQ,KAAK03B,eACfC,EAAennB,EAAQ6e,MAC7B,MAAO,CACHmG,MAAOhlB,EAAQglB,MAAQx1B,KAAKqvB,MAAQsI,EACpClC,MAAOjlB,EAAQilB,MAAQz1B,KAAKqvB,MAAQsI,EACpCltB,MAAOzK,KAAKq0B,KAAKlrB,OACjBuB,OAAQ1K,KAAKq0B,KAAKjrB,OAClBimB,MAAOrvB,KAAKqvB,MAAQsI,EACpBnD,QAAShkB,EAAQgkB,QACjBC,QAASjkB,EAAQikB,QACjBF,QAAS/jB,EAAQ+jB,QACjBzlB,KAAM0B,EAAQ1B,KACd4mB,GAAIllB,EAAQklB,GAEpB,CACAkC,WAAWj0B,GACP,MAAM,KAAE0wB,GAASr0B,KAEX63B,GAAUl0B,EADAsB,KAAK+C,IAAIqsB,EAAKprB,OAASorB,EAAKlrB,SACbkrB,EAAKlrB,OACpCnJ,KAAK+2B,YAAYpzB,GAAKk0B,CAC1B,CACAC,WAAWhvB,GACP,MAAM,KAAEurB,GAASr0B,KAEX+3B,GAAUjvB,EADA7D,KAAK+C,IAAIqsB,EAAKnrB,OAASmrB,EAAKjrB,SACbirB,EAAKjrB,OACpCpJ,KAAK+2B,YAAYjuB,GAAKivB,CAC1B,CACAC,UAAUr0B,EAAGmF,GACT9I,KAAK43B,WAAWj0B,GAChB3D,KAAK83B,WAAWhvB,EACpB,CACAmvB,OAAOrC,EAAKjyB,EAAGmF,GACX,MAAM0H,EAAUxQ,KAAK03B,eACfnD,EAAU/jB,EAAQ+jB,QAClBlF,EAAQrvB,KAAKqvB,MAAQ7e,EAAQ6e,MACnCrvB,KAAKsW,cACLtW,KAAK8U,WAAW8gB,GAChB,MAAMsC,EAAOv0B,EAAI3D,KAAK+2B,YAAYpzB,EAAI6M,EAAQgkB,QACxC2D,EAAOrvB,EAAI9I,KAAK+2B,YAAYjuB,EAAI0H,EAAQikB,QAC9ChF,EAAMyG,cAAcN,EAAKrB,EAASlF,EAAO6I,EAAMC,GAC/Cn4B,KAAK2V,aAAaigB,EACtB,CACAwC,aACI,OAAO10B,EAAQ1D,KAAKq3B,MAAO,UAAW,iCAC1C,CACAgB,cAAc10B,GACV,MAAMoR,EAAU/U,KAAK8V,eACftF,EAAUxQ,KAAK03B,eACfL,EAAQr3B,KAAKo4B,aACb7D,EAAU/jB,EAAQ+jB,QAClBlF,EAAQrvB,KAAKqvB,MAAQ7e,EAAQ6e,MACnCrvB,KAAKsW,cACLtW,KAAK8U,aACL,MAAMojB,EAAOv0B,EAAI3D,KAAKw0B,QAAUhkB,EAAQgkB,QAClC2D,EAAOd,EAAMiB,gBAAkBt4B,KAAKy0B,QAAUjkB,EAAQikB,QAC5DhF,EAAMyG,cAAcnhB,EAASwf,EAASlF,EAAO6I,EAAMC,GACnDn4B,KAAK2V,cACT,EAEJ8Z,EAAMsG,MAAQ,IAxWd,MACIt0B,cACIzB,KAAK+1B,MAAQ,IAAIwC,GACrB,CACAvC,OAAO3yB,EAAM/B,GACT,IAAIk3B,EAAUx4B,KAAK+1B,MAAMv1B,IAAIivB,EAAMgJ,wBACnB70B,IAAZ40B,IACAA,EAAU,CAAC,EACXx4B,KAAK+1B,MAAM7vB,IAAIupB,EAAMgJ,kBAAmBD,IAE5C,MAAMr4B,EAAMmB,EAAW,GAAG+B,KAAQ/B,IAAa+B,EAC/C,IAAIq1B,EAAQF,EAAQr4B,GAKpB,YAJcyD,IAAV80B,IACAA,EAAQ,IAAIzE,EAAgBxE,EAAMxB,iBAAkB5qB,EAAM/B,GAC1Dk3B,EAAQr4B,GAAOu4B,GAEZA,CACX,GA2VJjJ,EAAMgJ,kBAAoB,GAG1BhJ,EAAMxB,iBAAmB,GClYzB,SAAW+F,GACPA,EAAiBA,EAAyB,OAAI,GAAK,SACnDA,EAAiBA,EAAuB,KAAI,GAAK,OACjDA,EAAiBA,EAAwB,MAAI,GAAK,QAClDA,EAAiBA,EAAwB,MAAI,GAAK,QAClDA,EAAiBA,EAAwB,MAAI,GAAK,OACrD,CAND,CAMGA,IAAqBA,EAAmB,CAAC,IAerC,MAAM2E,WAAiB5kB,EAKfrS,sBACP,OAAOG,EAAS82B,QACpB,CAEWC,sBACP,OAAO5E,CACX,CACW6E,4BACP,MAAO,CACHC,OAAQ9E,EAAiB+E,OACzBC,MAAOhF,EAAiBiF,MACxBC,MAAOlF,EAAiBmF,MACxBC,KAAMpF,EAAiBqF,KACvBC,MAAOtF,EAAiBuF,MAEhC,CACA93B,cACI8B,QACAvD,KAAKyK,MAAQ,EAEbzK,KAAKw5B,UAAY,EACjBx5B,KAAKyzB,SAAWkF,GAASC,SAASS,KAClCr5B,KAAKw0B,QAAU,EACfx0B,KAAKy0B,QAAU,EACfz0B,KAAKy5B,wBAA0B,CACnC,CAEAxC,QAEA,CAEArH,WACI,OAAO5vB,KAAKyK,KAChB,CAEAivB,SAASjvB,GAEL,OADAzK,KAAKyK,MAAQA,EACNzK,IACX,CAEA25B,UACI,OAAOj2B,EAAQ1D,KAAK45B,KAAM,SAAU,wBACxC,CAKAC,oBACI,MAAMv4B,EAAWtB,KAAKoU,cAEtB,OADA1Q,EAAQ1D,KAAKsS,MAAO,UAAW,cAAchR,uBACtCoC,EAAQ1D,KAAK45B,KAAM,SAAU,cAAct4B,oBACtD,CAKAw4B,QAAQF,GAEJ,OADA55B,KAAK45B,KAAOA,EACL55B,IACX,CAEA+5B,WACI,OAAO/5B,KAAKsS,KAChB,CAEA0nB,aACI,OAAOt2B,EAAQ1D,KAAKsS,MAAO,UAAW,iCAC1C,CAEA2nB,SAAS3nB,GAEL,OADAtS,KAAKsS,MAAQA,EACNtS,IACX,CAEAk6B,qBACI,OAAOl6B,KAAKm6B,eAChB,CAEAC,uBACI,OAAO12B,EAAQ1D,KAAKm6B,gBAAiB,oBAAqB,4BAC9D,CAEAE,mBAAmBpuB,GAEf,OADAjM,KAAKm6B,gBAAkBluB,EAChBjM,IACX,CAEAs6B,cACI,OAAOt6B,KAAKyzB,QAChB,CAKA8G,YAAY9G,GAGR,OAFAzzB,KAAKyzB,SAA+B,iBAAbA,EAAwBkF,GAASE,eAAepF,GAAYA,EACnFzzB,KAAKi3B,QACEj3B,IACX,CAEAw6B,YAAYx2B,GAER,OADAhE,KAAKw5B,UAAYx1B,EACVhE,IACX,CAEAy3B,UAAU3uB,GAEN,OADA9I,KAAKy0B,QAAU3rB,EACR9I,IACX,CAEAy6B,2BAA2B92B,GACvB3D,KAAKy5B,wBAA0B91B,CACnC,CAEA+2B,6BACI,OAAO16B,KAAKy5B,uBAChB,CAKAlC,UAAU5zB,GAQN,OAPA3D,KAAKw0B,QAAU,EACXx0B,KAAKyzB,WAAakF,GAASC,SAASS,KACpCr5B,KAAKw0B,SAAW7wB,EAGhB3D,KAAKw0B,SAAW7wB,EAEb3D,IACX,CAEAs3B,YACI,OAAOt3B,KAAKw0B,OAChB,CAEAze,OAEI,MADA/V,KAAK8V,eACC,IAAI3S,EAAa,iBAAkB,4CAC7C,CAEAw3B,sBAAsBC,EAAUhB,GAE5B,MAAMiB,EAAcjB,EAAKkB,iBACnBtqB,EAAUqqB,EAAY/pB,aACtBumB,EAAQuC,EAAKmB,WACbC,EAAiBH,EAAY5xB,OAASuH,EAAQyqB,UAAYzqB,EAAQ0qB,WAAal7B,KAAK06B,6BAC1FE,EAAShmB,SAASumB,IACd,MAAMC,EAAiBD,EAAQL,iBAC3BzD,GACA8D,EAAQ/D,SAASC,GACrB+D,EAAeC,WAAWL,EAAe,GAEjD,ECrLG,MAAMM,GAEEC,uBACP,OAAOv7B,KAAKw7B,gBAAgB51B,MAChC,CAEW61B,mBACP,MAAO,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC1C,CAEWC,yBACP,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC9B,CAEWC,0BACP,MAAO,CACH1vB,EAAG,EACH5F,EAAG,EACH1F,EAAG,EACH4H,EAAG,EACH9H,EAAG,EACHgE,EAAG,EACHC,EAAG,EAEX,CAEW82B,6BACP,MAAO,CAAC,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IACxE,CAEWI,gCACP,MAAO,CAAC,SAAU,KAAM,KAAM,KAAM,KAAM,KAAM,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,SAC1F,CAEWC,kCACP,MAAO,CACHC,OAAQ,CAAElC,KAAM,EAAGhf,WAAY,GAC/BmhB,GAAI,CAAEnC,KAAM,EAAGhf,YAAa,GAC5BohB,GAAI,CAAEpC,KAAM,EAAGhf,WAAY,GAC3BqhB,GAAI,CAAErC,KAAM,EAAGhf,YAAa,GAC5BshB,GAAI,CAAEtC,KAAM,EAAGhf,WAAY,GAC3BuhB,GAAI,CAAEvC,KAAM,EAAGhf,WAAY,GAC3BwhB,KAAM,CAAExC,KAAM,EAAGhf,YAAa,GAC9ByhB,GAAI,CAAEzC,KAAM,EAAGhf,WAAY,GAC3B0hB,GAAI,CAAE1C,KAAM,EAAGhf,YAAa,GAC5B2hB,GAAI,CAAE3C,KAAM,EAAGhf,WAAY,GAC3B4hB,GAAI,CAAE5C,KAAM,EAAGhf,YAAa,GAC5B6hB,GAAI,CAAE7C,KAAM,EAAGhf,WAAY,GAC3BwB,OAAQ,CAAEwd,KAAM,EAAGhf,WAAY,GAEvC,CAEW8hB,uBACP,MAAO,CACHt2B,EAAG,EACH01B,OAAQ,EACRC,GAAI,EACJY,GAAI,EACJC,KAAM,EACNC,EAAG,EACHC,EAAG,EACH,EAAG,EACHd,GAAI,EACJe,KAAM,EACNC,EAAG,EACHC,EAAG,EACHhB,GAAI,EACJiB,GAAI,EACJC,KAAM,EACNjB,GAAI,EACJ,EAAG,EACHkB,KAAM,EACN,EAAG,EACHjB,GAAI,EACJ,KAAM,EACNkB,GAAI,EACJC,KAAM,EACNlB,KAAM,EACN,EAAG,EACHC,GAAI,EACJ,KAAM,EACNkB,GAAI,EACJC,KAAM,EACN,EAAG,EACHjB,GAAI,EACJkB,KAAM,EACNjB,GAAI,GACJkB,GAAI,GACJC,KAAM,GACNC,KAAM,GACNnB,GAAI,GACJoB,KAAM,GACN,EAAG,GACHzhB,OAAQ,GAEhB,CAEW0hB,oBACP,MAAO,CACHC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC1BC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC1BC,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC3BC,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC3BC,SAAU,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC7BC,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC3BC,WAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC/BC,QAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC5BC,QAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAEpC,CAEWC,wBACP,MAAO,CACHC,EAAGnD,GAAMwC,OAAOC,MAChB1L,EAAGiJ,GAAMwC,OAAOE,MAExB,CAEW1hB,yBACP,MAAO,CAAC,KAAM,IAAK,IAAK,IAAK,KACjC,CAEWoiB,wBACP,MAAO,CACHzyB,EAAG,CAAE0yB,WAAY,EAAGjkB,QAAS,GAC7BkkB,GAAI,CAAED,WAAY,EAAGjkB,QAAS,GAC9B,KAAM,CAAEikB,WAAY,EAAGjkB,QAAS,GAChC,MAAO,CAAEikB,WAAY,EAAGjkB,QAAS,GACjCmkB,GAAI,CAAEF,WAAY,EAAGjkB,QAAS,IAC9BokB,IAAK,CAAEH,WAAY,EAAGjkB,QAAS,IAC/BrU,EAAG,CAAEs4B,WAAY,EAAGjkB,QAAS,GAC7BqkB,GAAI,CAAEJ,WAAY,EAAGjkB,QAAS,GAC9B,KAAM,CAAEikB,WAAY,EAAGjkB,QAAS,GAChC,MAAO,CAAEikB,WAAY,EAAGjkB,QAAS,GACjC+B,GAAI,CAAEkiB,WAAY,EAAGjkB,QAAS,GAC9BskB,IAAK,CAAEL,WAAY,EAAGjkB,QAAS,GAC/B/Z,EAAG,CAAEg+B,WAAY,EAAGjkB,QAAS,GAC7BukB,GAAI,CAAEN,WAAY,EAAGjkB,QAAS,GAC9B,KAAM,CAAEikB,WAAY,EAAGjkB,QAAS,GAChC,MAAO,CAAEikB,WAAY,EAAGjkB,QAAS,GACjCwkB,GAAI,CAAEP,WAAY,EAAGjkB,QAAS,GAC9BykB,IAAK,CAAER,WAAY,EAAGjkB,QAAS,GAC/BnS,EAAG,CAAEo2B,WAAY,EAAGjkB,QAAS,GAC7B0kB,GAAI,CAAET,WAAY,EAAGjkB,QAAS,GAC9B,KAAM,CAAEikB,WAAY,EAAGjkB,QAAS,GAChC,MAAO,CAAEikB,WAAY,EAAGjkB,QAAS,GACjC2kB,GAAI,CAAEV,WAAY,EAAGjkB,QAAS,GAC9B4kB,IAAK,CAAEX,WAAY,EAAGjkB,QAAS,GAC/Bja,EAAG,CAAEk+B,WAAY,EAAGjkB,QAAS,GAC7B6kB,GAAI,CAAEZ,WAAY,EAAGjkB,QAAS,GAC9B,KAAM,CAAEikB,WAAY,EAAGjkB,QAAS,GAChC,MAAO,CAAEikB,WAAY,EAAGjkB,QAAS,GACjC8kB,GAAI,CAAEb,WAAY,EAAGjkB,QAAS,GAC9B+kB,IAAK,CAAEd,WAAY,EAAGjkB,QAAS,GAC/BjW,EAAG,CAAEk6B,WAAY,EAAGjkB,QAAS,GAC7BglB,GAAI,CAAEf,WAAY,EAAGjkB,QAAS,GAC9B,KAAM,CAAEikB,WAAY,EAAGjkB,QAAS,IAChC,MAAO,CAAEikB,WAAY,EAAGjkB,QAAS,IACjCilB,GAAI,CAAEhB,WAAY,EAAGjkB,QAAS,GAC9BklB,IAAK,CAAEjB,WAAY,EAAGjkB,QAAS,GAC/BhW,EAAG,CAAEi6B,WAAY,EAAGjkB,QAAS,IAC7BmlB,GAAI,CAAElB,WAAY,EAAGjkB,QAAS,IAC9B,KAAM,CAAEikB,WAAY,EAAGjkB,QAAS,GAChC,MAAO,CAAEikB,WAAY,EAAGjkB,QAAS,GACjC8B,GAAI,CAAEmiB,WAAY,EAAGjkB,QAAS,IAC9BolB,IAAK,CAAEnB,WAAY,EAAGjkB,QAAS,GAEvC,CACAqlB,iBAAiBnG,GACb,OAAOA,GAAQ,GAAKA,EAAO0B,GAAME,gBAAgB51B,MACrD,CACAo6B,qBAAqBC,GACjB,OAAOA,GAAY,GAAKA,EAAW3E,GAAMM,mBAAmBh2B,MAChE,CAEAs6B,aAAaC,GACT,IAAKA,GAAcA,EAAWv6B,OAAS,EACnC,MAAM,IAAIzC,EAAa,eAAgB,sBAAwBg9B,GAEnE,GAAIA,EAAWv6B,OAAS,EACpB,MAAM,IAAIzC,EAAa,eAAgB,sBAAwBg9B,GAEnE,MAAMvG,EAAOuG,EAAWhyB,cAElBiyB,EADQ,8BACMC,KAAKzG,GACzB,GAAc,OAAVwG,EAAgB,CAGhB,MAAO,CACH5gC,KAHS4gC,EAAM,GAIfxlB,WAHewlB,EAAM,GAK7B,CAEI,MAAM,IAAIj9B,EAAa,eAAgB,sBAAwBg9B,EAEvE,CAEAG,YAAYC,GACR,IAAKA,GAAaA,EAAU36B,OAAS,EACjC,MAAM,IAAIzC,EAAa,eAAgB,gBAAkBo9B,GAE7D,MAAMpgC,EAAMogC,EAAUpyB,cAGhBiyB,EADQ,qCACMC,KAAKlgC,GACzB,GAAc,OAAVigC,EAAgB,CAChB,MAAM5gC,EAAO4gC,EAAM,GACbxlB,EAAawlB,EAAM,GACzB,IAAInuB,EAAOmuB,EAAM,GAIjB,OAFKnuB,IACDA,EAAO,KACJ,CACHzS,OACAob,aACA3I,OAER,CAEI,MAAM,IAAI9O,EAAa,eAAgB,gBAAgBo9B,IAE/D,CAEAC,aAAaL,GACT,MAAM/+B,EAAQk6B,GAAMoD,WAAWyB,GAC/B,QAAcv8B,IAAVxC,EACA,MAAM,IAAI+B,EAAa,eAAgB,sBAAsBg9B,KAEjE,OAAO/+B,EAAMsZ,OACjB,CAEA+lB,iBAAiBC,GACb,MAAMt/B,EAAQk6B,GAAMoB,UAAUgE,GAC9B,QAAc98B,IAAVxC,EACA,MAAM,IAAI+B,EAAa,eAAgB,0BAA0Bu9B,KAErE,OAAOt/B,CACX,CAEAu/B,qBAAqBxR,GACjB,IAAKnvB,KAAK+/B,iBAAiB5Q,GACvB,MAAM,IAAIhsB,EAAa,eAAgB,uBAAuBgsB,KAElE,OAAOmM,GAAME,gBAAgBrM,EACjC,CAEAyR,yBAAyBC,GACrB,IAAK7gC,KAAKggC,qBAAqBa,GAC3B,MAAM,IAAI19B,EAAa,eAAgB,2BAA2B09B,KAEtE,OAAOvF,GAAMM,mBAAmBiF,EACpC,CAIAC,qBAAqB3R,EAAW0R,EAAeE,EAAY,GACvD,GAAkB,IAAdA,IAAkC,IAAfA,EACnB,MAAM,IAAI59B,EAAa,eAAgB,sBAAsB49B,KAEjE,IAAIC,GAAO7R,EAAY4R,EAAYF,GAAiBvF,GAAMC,UAG1D,OAFIyF,EAAM,IACNA,GAAO1F,GAAMC,WACVyF,CACX,CAIAC,oBAAoBzhC,EAAM2vB,GACtB,MAAM+F,EAAQl1B,KAAKkgC,aAAa1gC,GAC1B0hC,EAAYlhC,KAAKwgC,aAAatL,EAAM11B,MAC1C,IAAIygC,EAAW9Q,EAAY+R,EAC3B,GAAIj8B,KAAK+C,IAAIi4B,GAAY3E,GAAMC,UAAY,EAAG,CAC1C,IAAI4F,EAAa,EACblB,EAAW,IACXkB,GAAc,GAElB,MAAMC,GAAqBjS,EAAY,GAAK+R,EAAY,IAAM5F,GAAMC,UAAa4F,EACjF,GAAIl8B,KAAK+C,IAAIo5B,GAAoB,EAC7B,MAAM,IAAIj+B,EAAa,eAAgB,sBAAsB3D,MAAS2vB,MAGtE8Q,EAAWmB,CAEnB,CACA,GAAIn8B,KAAK+C,IAAIi4B,GAAY,EACrB,MAAM,IAAI98B,EAAa,eAAgB,sBAAsB3D,MAAS2vB,MAE1E,IAAIkS,EAAmBnM,EAAM11B,KAC7B,GAAIygC,EAAW,EACX,IAAK,IAAIv3B,EAAI,EAAGA,GAAKu3B,IAAYv3B,EAC7B24B,GAAoB,SAGvB,GAAIpB,EAAW,EAChB,IAAK,IAAIv3B,GAAK,EAAGA,GAAKu3B,IAAYv3B,EAC9B24B,GAAoB,IAG5B,OAAOA,CACX,CAUAC,cAAcnhC,EAAKu8B,GACf,MAAM6E,EAAQ,CAACphC,GACf,IAAIqhC,EAAWrhC,EACf,IAAK,IAAIuI,EAAI,EAAGA,EAAIg0B,EAAU92B,OAAQ8C,IAClC84B,EAAWxhC,KAAK8gC,qBAAqBU,EAAU9E,EAAUh0B,IACrD84B,IAAarhC,GACbohC,EAAM9sB,KAAK+sB,GAEnB,OAAOD,CACX,CAKAE,mBAAmBC,EAAOC,EAAOZ,EAAY,GACzC,GAAkB,IAAdA,IAAkC,IAAfA,EACnB,MAAM,IAAI59B,EAAa,eAAgB,sBAAsB49B,KAEjE,IAAK/gC,KAAK+/B,iBAAiB2B,KAAW1hC,KAAK+/B,iBAAiB4B,GACxD,MAAM,IAAIx+B,EAAa,eAAgB,kBAAkBu+B,MAAUC,KAEvE,IAAIC,EAA2B,IAAdb,EAAkBY,EAAQD,EAAQA,EAAQC,EAG3D,OAFIC,EAAa,IACbA,GAActG,GAAMC,WACjBqG,CACX,CAOAC,eAAeC,GACX,MAAMC,EAAc/hC,KAAKsgC,YAAYwB,GACrC,IAAKC,EAAY9vB,KACb,MAAM,IAAI9O,EAAa,eAAgB,mCAC3C,MAAM6+B,EAAY1G,GAAMkD,WAAWuD,EAAY9vB,MAC/C,IAAIgwB,EAAeF,EAAYviC,KAG/B,GAFIuiC,EAAYnnB,aACZqnB,GAAgBF,EAAYnnB,aAC3BonB,EACD,MAAM,IAAI7+B,EAAa,eAAgB,yBAA2B2+B,GACtE,MAAMzS,EAAQrvB,KAAKshC,cAActhC,KAAKwgC,aAAayB,GAAeD,GAC5DE,EAAe5G,GAAMK,aAAaoG,EAAYviC,MAC9C2iC,EAAW,CAAC,EAClB,IAAK,IAAIz5B,EAAI,EAAGA,EAAI4yB,GAAMG,MAAM71B,SAAU8C,EAAG,CACzC,MAAM4J,GAAS4vB,EAAex5B,GAAK4yB,GAAMG,MAAM71B,OACzCw8B,EAAW9G,GAAMG,MAAMnpB,GAC7B,IAAI+vB,EAAWriC,KAAKihC,oBAAoBmB,EAAU/S,EAAM3mB,IAChC,IAApB25B,EAASz8B,SACTy8B,GAAY,KAEhBF,EAASC,GAAYC,CACzB,CACA,OAAOF,CACX,ECrWJ,SAASG,MAAKv+B,GACNjC,GAAWygC,OACX1+B,EAAI,sBAAuBE,EACnC,CAQA,MAAMjC,WAAmB62B,GAEVj3B,sBACP,OAAOG,EAASC,UACpB,CAEAyD,cAAc+W,EAAakmB,GAEvB,IAAKlmB,GAAsC,IAAvBA,EAAY1W,OAC5B,OACJ,MAAM68B,EAAYzU,EAAO0U,mBACnBC,EAA4BF,EAAUrxB,aAAa,wCACnDwxB,EAAYJ,EAAMK,WAAaF,EAC/BG,EAAoBL,EAAUrxB,aAAa,gCAC3C2xB,EAAoBN,EAAUrxB,aAAa,0BAC3C4xB,EAAuC,GAC7C,IAAIC,EACAC,EAA4C,EAEhD,IAAK,IAAIx6B,EAAI,EAAGA,EAAI4T,EAAY1W,SAAU8C,EAAG,CACzC,MAAMgQ,EAAM4D,EAAY5T,GAClBkxB,EAAOlhB,EAAIihB,UACXtC,EAAQuC,EAAKmB,WACbzoB,EAAQoG,EAAIshB,aACZmJ,EAAQvJ,EAAKwJ,cAAc9wB,GACjC,GAAIsnB,IAASqJ,EAAU,CAEnB,IAAK,IAAIr+B,EAAI,EAAGA,EAAIg1B,EAAKtmB,KAAK1N,SAAUhB,EAGpCs+B,EAA4Cj+B,KAAK8E,IAAI6vB,EAAKyJ,yBAA2BzJ,EAAKtC,YAAa4L,GAE3GD,EAAWrJ,CACf,CACA,GAAIvC,EAAO,CACP,MAAMiM,EAAYjM,EAAMkM,yBAClBz6B,EAAIuuB,EAAMmM,YAAYL,EAAMn/B,MAC5By/B,EAAUx+B,KAAK8vB,MAAOjsB,EAAIw6B,EAAa,GAAK,EAClDN,EAAqCvuB,KAAK,CACtC3L,IACA9E,KAAMy/B,EACNC,kBAAmBR,EACnBxqB,MACAirB,yBAA0BL,GAElC,MAEIN,EAAqCvuB,KAAK,CACtCzQ,KAAMm/B,EAAMn/B,KACZ0/B,kBAAmBR,EACnBxqB,OAGZ,CAEAsqB,EAAqCY,MAAK,CAACn/B,EAAGC,IAAMA,EAAEV,KAAOS,EAAET,OAC/D,MAAM6/B,EAAmC,GAGzC,IAAIC,EAAuB,EAG3B,IAAK,IAAIp7B,EAAI,EAAGA,EAAIs6B,EAAqCp9B,OAAQ8C,IAAK,CAClE,MAAMq7B,EAAsCf,EAAqCt6B,GAC3Es7B,EAAkBH,EAAiCA,EAAiCj+B,OAAS,GACnG,IAAIq+B,EAECD,IAAoBA,aAAyD,EAASA,EAAgBhgC,QAAU+/B,EAAoC//B,KAYrJigC,EAAoBD,GAXpBC,EAAoB,CAChBjgC,KAAM+/B,EAAoC//B,KAC1CkgC,UAAU,EACVC,cAAc,EACdC,OAAQ,EACR35B,MAAO,EACP45B,OAAQ,GAEZR,EAAiCpvB,KAAKwvB,IAOW,MAAjDF,EAAoCrrB,IAAIzG,MACS,OAAjD8xB,EAAoCrrB,IAAIzG,OACxCgyB,EAAkBC,UAAW,GAGoB,OAAjDH,EAAoCrrB,IAAIzG,OACxCgyB,EAAkBE,cAAe,GAGrCF,EAAkBG,SAIlBH,EAAkBx5B,OAASs5B,EAAoCrrB,IAAIkX,WAAakT,EAGhFgB,EAAuB7+B,KAAK8E,IAAIg6B,EAAoCL,kBAAmBI,EAC3F,CAkBA,IAAIQ,EAAe,EAEnB,IAAK,IAAI57B,EAAI,EAAGA,EAAIm7B,EAAiCj+B,OAAQ8C,IAAK,CAC9D,IAAI67B,GAAqB,EACzB,MAAMC,EAAa97B,EACnB,IAAI+7B,EAAW/7B,EACf,KAAO+7B,EAAW,EAAIZ,EAAiCj+B,SAAW2+B,GAE1DvkC,KAAK0kC,eAAeb,EAAiCY,GAAWZ,EAAiCY,EAAW,IAE5GA,IAGAF,GAAqB,EAI7B,MAAMI,EAAgBryB,GAAUuxB,EAAiCW,EAAalyB,GACxEsyB,EAAiBC,GAAYA,EAAQtxB,IAAIoxB,GACzCG,EAAiB,CAACC,EAAQC,KAC5B,MAAOvgC,EAAGC,GAAKkgC,EAAc,CAACG,EAAQC,IAASzxB,KAAK0xB,GAASA,EAAKjhC,OAClE,OAAOS,EAAIC,CAAC,EAEVwgC,EAAe,IAAIC,IAAeA,EAAW5xB,IAAIqxB,GAAeQ,OAAM,EAAEC,EAAOC,MAAYtlC,KAAK0kC,eAAeW,EAAOC,KAEtHC,EAAcd,EAAWD,EAAa,EAE5C,IAiCIgB,EACAnB,EAlCAoB,EAAUzlC,KAAK0kC,eAAeb,EAAiCW,GAAaX,EAAiCY,IAC3G,IACA,IACN,OAAQc,GACJ,KAAK,EACe,MAAZE,GAA4C,KAAzBX,EAAe,EAAG,IAAuC,KAAzBA,EAAe,EAAG,KACrEW,EAAU,oBAEd,MACJ,KAAK,EACGP,EAAa,CAAC,EAAG,GAAI,CAAC,EAAG,MACzBO,EAAU,yBAEd,MACJ,KAAK,EACe,MAAZA,GAAmBP,EAAa,CAAC,EAAG,MACpCO,EAAU,wBACNP,EAAa,CAAC,EAAG,GAAI,CAAC,EAAG,MACzBO,EAAU,+BAGlB,MACJ,KAAK,EACGP,EAAa,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,MACjCO,EAAU,wBAEVP,EAAa,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,MACzCO,EAAU,6BAUtB,GAAIF,GAAe,EAAG,CAElB,IAAIG,EAAgB,EAChBC,GAAoB,EACxB,MAA6B,IAAtBA,GAA4B,CAC/BA,GAAoB,EACpB,IAAK,IAAI3hC,EAAO,EAAGA,EAAO0hC,EAAgB7B,EAAiCj+B,OAAQ5B,IAC/E,GAAIhE,KAAK0kC,eAAeb,EAAiC7/B,GAAO6/B,EAAiC7/B,EAAO0hC,IAAiB,CACrHC,GAAoB,EACpBD,IACA,KACJ,CAER,CAEA,IAAKF,EAAc98B,EAAG88B,GAAef,EAAUe,IAC3CnB,GAAWmB,EAAc98B,GAAKg9B,EAAiB,EAC/C7B,EAAiC2B,GAAanB,OAASA,EACvDC,EAAeA,EAAeD,EAASC,EAAeD,CAE9D,MAII,IAAKmB,EAAc98B,EAAG88B,GAAef,EAAUe,IAC3CnB,EAASrW,EAAOoD,uBAAuBmU,GAAaE,GAASD,EAAc98B,GAC3Em7B,EAAiC2B,GAAanB,OAASA,EACvDC,EAAeA,EAAeD,EAASC,EAAeD,EAK9D37B,EAAI+7B,CACR,CAaA,MAAMmB,EAAe,GACfC,EAAiB,GACvB,IAAK,IAAIn9B,EAAI,EAAGA,GAAK47B,EAAc57B,IAC/Bk9B,EAAal9B,GAAK,EAClBm9B,EAAen9B,GAAK,EAExBk9B,EAAa,GAAKhD,EAAYkB,EAC9B+B,EAAe,GAAKjD,EAGpBiB,EAAiCjvB,SAAS5Q,IAClCA,EAAKyG,MAAQm7B,EAAa5hC,EAAKqgC,UAC/BuB,EAAa5hC,EAAKqgC,QAAUrgC,EAAKyG,MAAK,IAE9C,IAAK,IAAI/B,EAAI,EAAGA,EAAIk9B,EAAahgC,OAAQ8C,IAErCm9B,EAAen9B,GAAKk9B,EAAal9B,GAAKm9B,EAAen9B,EAAI,GAE7D,MAAMo9B,EAAaD,EAAeA,EAAejgC,OAAS,GAE1D,IAAImgC,EAAW,EACflC,EAAiCjvB,SAAS5Q,IACtC,IAAIyR,EAAY,EAChB,MAAMuwB,EAAgBD,EAAW/hC,EAAKogC,OAEtC,KAAe2B,EAAWC,EAAeD,IAAY,CACjD,MAAMlO,EAASgO,EAAe7hC,EAAKqgC,OAAS,GAAK5uB,EAAYquB,EAC7Dd,EAAqC+C,GAAUrtB,IAAI6e,UAAUM,GAG7DpiB,GAAautB,EAAqC+C,GAAUrtB,IAAIkX,WAAakT,EAC7ER,GAAE,0BAA2Bt+B,EAAKA,KAAM+hC,EAAUlO,EACtD,KAGJ2K,EAAMK,WAAaiD,EAAa/C,CACpC,CAEAx9B,sBAAsB8/B,EAAOC,GACzB,IAAIW,EAAYX,EAAMthC,KAAOqhC,EAAMrhC,KAC/BkiC,EAAoB,EAEpBD,EAAY,GAEZC,EAAoBZ,EAAMpB,UAAYoB,EAAMnB,aAAe,IAAM,EAC7DkB,EAAMlB,eACN8B,GAAa,MAIjBC,EAAoBb,EAAMnB,UAAYmB,EAAMlB,aAAe,IAAM,EAC7DmB,EAAMnB,eACN8B,GAAa,KAErB,MAAME,EAAYlhC,KAAK+C,IAAIi+B,GAAaC,EAExC,OADA5D,GAAE,8BAA+B+C,EAAMrhC,KAAMshC,EAAMthC,KAAMmiC,GAClDA,CACX,CAMA5gC,wBAAwB6gC,EAAQtE,GAC5B,MAAMuE,EAAgB,GAChBC,EAAc,CAAC,EAErBF,EAAOxxB,SAAS2xB,IACZ,MAAMC,EAAe,IAAIlhC,EAAS,EAAG,GACpBihC,EAAME,eACd7xB,SAASlP,IACd,GAAIA,EAAEghC,oBACF,OACJ,MAAMC,EAAkBL,EAAYE,EAAaplC,SAC5CulC,EAKDA,EAAgBlyB,KAAK/O,IAJrB2gC,EAAc5xB,KAAK+xB,EAAaplC,SAChCklC,EAAYE,EAAaplC,SAAW,CAACsE,IAKzC8gC,EAAajgC,IAAIb,EAAEkhC,WAAW,GAChC,IAEN,MAAMC,EAAQ,IAAIvL,GAEbwG,IACDA,EAAe,KAEnB,MAAMgF,EAAcD,EAAMhF,eAAeC,GACnCK,EAAW,CAAC,EAClBkE,EAAczxB,SAASmyB,IACnB,MAAMC,EAAYV,EAAYS,GAGxBE,EAAkB,GAClBC,EAAexhC,IAEjB,IAAK7C,EAAY6C,IAAMA,EAAEyhC,UAAYzhC,EAAEghC,oBACnC,OAGJ,MAAMU,EAAY1hC,EAClB0hC,EAAU9zB,KAAKsB,SAAQ,CAAC2rB,EAAW8G,KAC/B,MAAMlnC,EAAM0mC,EAAM3G,aAAaK,EAAU53B,MAAM,KAAK,IAC9CyT,EAASmkB,EAAU53B,MAAM,KAAK,GAE9B2+B,EAAmBnnC,EAAIya,YAAc,IACrC2sB,EAAQpnC,EAAIX,KAAO8nC,EAGpBnF,EAAShiC,EAAIX,KAAO4c,KACrB+lB,EAAShiC,EAAIX,KAAO4c,GAAU0qB,EAAY3mC,EAAIX,OAClD,MAAMgoC,EAAiBrF,EAAShiC,EAAIX,KAAO4c,KAAYmrB,EAGjDE,EAAqBR,EAAgBhxB,QAAQsqB,IAAc,EAQjE,GANA6G,EAAUM,eAAe9yB,SAAQ,CAAC+yB,EAAUr1B,KACpC1Q,EAAa+lC,IAAaA,EAAS11B,MAAQq1B,GAAoBK,EAAS5N,YAAcsN,GACtFD,EAAUM,eAAetxB,OAAO9D,EAAO,EAC3C,KAGCk1B,GAAmBA,GAAkBC,EAAqB,CAG3DtF,EAAShiC,EAAIX,KAAO4c,GAAUmrB,EAE9B,MAAM3sB,EAAa,IAAI9Y,GAAWwlC,GAElCF,EAAUQ,YAAYhtB,EAAYysB,GAElCJ,EAAgBxyB,KAAK8rB,EACzB,KAGJ6G,EAAUM,eAAe9yB,SAAS+yB,IAC1BplC,EAAiBolC,IACjBA,EAASE,gBAAgBjzB,QAAQsyB,EACrC,GACF,EAENF,EAAUpyB,QAAQsyB,EAAY,GAEtC,CAMAzlC,YAAYwQ,GACR1O,QACA++B,GAAE,mBAAoBrwB,GACtBjS,KAAKiS,KAAOA,EACZjS,KAAKyzB,SAAWkF,GAASC,SAASS,KAClCr5B,KAAK8nC,eAAiB,CAElBC,WAAY/Z,EAAOyC,oBAEnBuX,iBAAkB,EAClBC,kBAAmB,GAEvBjoC,KAAK4a,WAAaoT,EAAOka,gBAAgBloC,KAAKiS,MAC9CvO,EAAQ1D,KAAK4a,WAAY,gBAAiB,4BAA4B3I,KAEtEjS,KAAKmoC,YAAa,EAClBnoC,KAAKi3B,OACT,CACAA,QACI,MAAMmR,EAAYpoC,KAAK8nC,eAAeC,WACtC/nC,KAAKsvB,MAAQ,IAAIG,EAAMzvB,KAAK4a,WAAWvX,KAAM+kC,GAC7CpoC,KAAKsvB,MAAMsI,WAAW,GAClB53B,KAAKmoC,aACLnoC,KAAKqoC,UAAY,IAAI5Y,EAAMzB,EAAOka,gBAAgB,KAAK7kC,KAAM+kC,GAC7DpoC,KAAKsoC,WAAa,IAAI7Y,EAAMzB,EAAOka,gBAAgB,KAAK7kC,KAAM+kC,GAC9DpoC,KAAKqoC,UAAUzQ,WAAW,GAC1B53B,KAAKsoC,WAAW1Q,WAAW,GAEnC,CAEAhI,WACI,GAAI5vB,KAAKmoC,WAAY,CACjB,MAAME,EAAY3kC,EAAQ1D,KAAKqoC,WACzBC,EAAa5kC,EAAQ1D,KAAKsoC,YAC1BC,EAAaF,EAAUv3B,aAAarG,MACtC69B,EAAWx3B,aAAarG,MACxBzK,KAAK8nC,eAAeE,iBACpBhoC,KAAK8nC,eAAeG,kBACxB,OAAOjoC,KAAKsvB,MAAMxe,aAAarG,MAAQ89B,CAC3C,CAEI,OAAOvoC,KAAKsvB,MAAMxe,aAAarG,KAEvC,CAEAqvB,QAAQF,GAQJ,OAPAl2B,EAAQk2B,EAAM,gBAAiB,mBAAmBA,KAClD55B,KAAK45B,KAAOA,EAERv3B,EAAYu3B,KACZ55B,KAAK8nC,eAAeC,WAAa,GACjC/nC,KAAKi3B,SAEFj3B,IACX,CAEAwoC,kBAII,OAHAxoC,KAAKmoC,YAAa,EAClBnoC,KAAK8nC,eAAeC,WAAa,GACjC/nC,KAAKi3B,QACEj3B,IACX,CAEA+V,OACI,MAAM,KAAE9D,EAAI,SAAEwhB,EAAQ,MAAEnhB,EAAK,WAAE61B,EAAU,QAAE3T,EAAO,QAAEC,EAAO,MAAEnF,EAAOwY,gBAAgB,iBAAEE,EAAgB,kBAAEC,IAAyBjoC,KAC3H41B,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cAEL,MAAMmyB,EAAQ7O,EAAK8O,mBAAmBjV,EAAUnhB,GAChD,IAAIq2B,EAAOF,EAAM9kC,EAAI6wB,EACrB,MAAMoU,EAAOH,EAAM3/B,EAAI2rB,EAEvB,GADA6N,GAAE,cAAerwB,EAAM02B,EAAMC,GACxBT,EAGA,CACD,MAAME,EAAY3kC,EAAQ1D,KAAKqoC,WACzBC,EAAa5kC,EAAQ1D,KAAKsoC,YAEhCA,EAAWrQ,OAAOrC,EAAK+S,EAAMC,GAC7BD,GAAQL,EAAWx3B,aAAarG,MAChCk+B,GAAQV,EACRU,GAAQ3oC,KAAK4a,WAAW2B,4BACxB+S,EAAM2I,OAAOrC,EAAK+S,EAAMC,GACxBD,GAAQrZ,EAAMxe,aAAarG,MAC3Bk+B,GAAQX,EACRK,EAAUpQ,OAAOrC,EAAK+S,EAAMC,EAChC,MAdItZ,EAAM2I,OAAOrC,EAAK+S,EAAMC,EAehC,EAGJ9mC,GAAWygC,OAAQ,EChenB,MAAMsG,WAAa90B,EACJrS,sBACP,OAAOG,EAASgnC,IACpB,CAEWC,gBACP,OAAO,CACX,CACWC,kBACP,OAAQ,CACZ,CAEWC,mBACP,OAAOhb,EAAO4C,UAClB,CACWqY,oBACP,OAAOjb,EAAO6C,WAClB,CACApvB,YAAY4sB,GACR9qB,QACAvD,KAAKkpC,iBAAmB,EACxBlpC,KAAKmpC,mBAAqB,EAC1BnpC,KAAKopC,sBAAwB,EAC7BppC,KAAKqpC,wBAA0B,EAE/BrpC,KAAKspC,SAAWjb,aAAyC,EAASA,EAAQib,UAAY,EACtFtpC,KAAKupC,OAASlb,aAAyC,EAASA,EAAQkb,QAAU,EAElFvpC,KAAKwpC,OAASnb,aAAyC,EAASA,EAAQmb,QAAU,EAClFxpC,KAAKypC,UAAYpb,aAAyC,EAASA,EAAQob,WAAa,EAExFzpC,KAAK0pC,gBAAkBrb,aAAyC,EAASA,EAAQqb,iBAAmB,EAEpG1pC,KAAK2pC,gBAAkBtb,aAAyC,EAASA,EAAQsb,iBAAmB,EAEpG3pC,KAAK4pC,MAAQvb,aAAyC,EAASA,EAAQub,QAAS,EAChF5pC,KAAK6pC,WAAaxb,aAAyC,EAASA,EAAQwb,aAAc,EAC1F7pC,KAAK8pC,eAAiBzb,aAAyC,EAASA,EAAQyb,gBAAkB,EAGlG9pC,KAAK+pC,uBAAyB,EAC9B/pC,KAAKg3B,WAAW3I,EACpB,CACA2I,WAAW3I,GAEPruB,KAAKkpC,kBAAoB7a,aAAyC,EAASA,EAAQ6a,mBAAqB,EACxGlpC,KAAKmpC,oBAAsB9a,aAAyC,EAASA,EAAQ8a,qBAAuB,EAC5GnpC,KAAKopC,uBAAyB/a,aAAyC,EAASA,EAAQ+a,wBAA0B,EAClHppC,KAAKqpC,yBAA2Bhb,aAAyC,EAASA,EAAQgb,0BAA4B,CAC1H,CAEAW,mBAAmBV,EAASC,GAGxB,OAFAvpC,KAAKspC,QAAUA,EACftpC,KAAKupC,MAAQA,EACNvpC,IACX,CAEAiqC,aAAalJ,GACT/gC,KAAK2pC,eAAiB5I,CAC1B,CAEAmJ,aAAaC,GACTnqC,KAAK0pC,eAAiBS,CAC1B,CACAC,eACI,OAAOpqC,KAAK0pC,cAChB,CAEAW,WAAWb,EAAOC,GACdzpC,KAAKwpC,MAAQA,EACbxpC,KAAKypC,SAAWA,CACpB,CAEAa,YACI,MAAMC,EAAWvqC,KAAK2pC,iBAAmBd,GAAKC,GAAK9oC,KAAKkpC,iBAAmBlpC,KAAKmpC,mBAEhF,OADwBnpC,KAAKypC,SAAWzpC,KAAKwpC,OAASX,GAAKI,OAASsB,EAAWvqC,KAAK0pC,iBAC3D1pC,KAAK2pC,cAClC,CACA/yB,iBACI,MAAM,IAAIzT,EAAa,iBAAkB,oCAC7C,CAGAqnC,aACI,MAAMC,EAAWzqC,KAAK2pC,iBAAmBd,GAAKC,GACxC4B,EAAK,CAAC1qC,KAAKwpC,MAAOxpC,KAAKypC,UACvBkB,EAAa9B,GAAKI,OAASjpC,KAAK0pC,eAChCkB,GAAsBH,EAAWxlC,KAAK4lC,IAAM5lC,KAAK8E,QAAQ2gC,GACzDI,GAAsBL,EAAWxlC,KAAK8E,IAAM9E,KAAK4lC,QAAQH,GAE/D,MAAO,CAAEK,KADQH,EAAqBD,GAAc3qC,KAAK2pC,eAChCqB,MAAOF,EACpC,CACAG,cAAcC,GAEV,OADAlrC,KAAK4pC,MAAQsB,EACNlrC,IACX,CACAmrC,WAAWtB,EAAWC,GAGlB,OAFA9pC,KAAK6pC,UAAYA,EACjB7pC,KAAK8pC,cAAgBA,EACd9pC,IACX,CACAorC,sBACIprC,KAAK+pC,uBAAyB/b,EAAO0U,mBAAmBtxB,aAAa,gCAAiC,EAC1G,CACAi6B,sBACIrrC,KAAK+pC,wBAA0BlB,GAAKG,MAAQ,CAChD,CAEAjzB,OAEI,GADA/V,KAAKsW,cACDtW,KAAK4pC,KACL,OACJ,MAAMhU,EAAM51B,KAAK8V,eACjB,IAAIw1B,EACAC,EACJ,MAAM5B,EAAiB3pC,KAAK2pC,eAC5B,IAAI6B,EAAgB,EAChB7B,IAAmBd,GAAKE,MAExBuC,EAAStrC,KAAKspC,QACdiC,EAASvrC,KAAKwpC,MAAQxpC,KAAKmpC,mBAC3BqC,EAAgBxrC,KAAKqpC,0BAIrBiC,EAAStrC,KAAKupC,MACdgC,EAASvrC,KAAKypC,SAAWzpC,KAAKkpC,iBAC9BsC,EAAgBxrC,KAAKopC,uBAEzB,MAAMuB,EAAa3qC,KAAKsqC,aArIhC,YAAcvmC,GACN8kC,GAAKtG,OACL1+B,EAAI,gBAAiBE,EAC7B,CAmIQ,CAAE,oBAAqB,UAAW/D,KAAKwpC,MAAO,aAAcxpC,KAAKypC,UAEjE,MAAMgC,EAAiBzrC,KAAK6pC,UAAYc,EAAa3qC,KAAK8pC,cAAgB9pC,KAAK2pC,eAAiB,EAEhG/T,EAAI5gB,OACJhV,KAAK8U,aACL8gB,EAAI8V,UAAU,OAAQ1rC,KAAK6S,aAAa,MAAO,CAAE84B,aAAa,IAC9D/V,EAAIQ,YACJR,EAAIlgB,aAAamzB,GAAKG,OACtBpT,EAAIS,OAAOiV,EAAQC,EAASE,EAAiBD,GAC7C5V,EAAIU,OAAOgV,EAAQC,EAASZ,EAAa3qC,KAAK+pC,uBAAyBJ,GACvE/T,EAAIhH,SACJgH,EAAIgW,aACJ5rC,KAAK2V,eACLigB,EAAIhgB,SACR,EC1JJ,SAAS,MAAK7R,GACN8nC,GAActJ,OACd1+B,EAAI,yBAA0BE,EACtC,CD0JA8kC,GAAKtG,OAAQ,EC9Ib,MAAMuJ,GAAiB,CAAC,EAClBC,GAAkB,CAAC,EAKnB15B,GAAW,CAAC,EAClB,MAAMw5B,GAIFtmC,yBACI,MAAMymC,EAAkB,GACxB,IAAK,MAAMj9B,KAAcsD,GAAU,CAC/B,MAAM45B,EAAgB55B,GAAStD,GAC/Bi9B,EAAgBv3B,KAAKpU,OAAOmX,OAAO,CAAC,EAAGy0B,GAC3C,CACA,OAAOD,CACX,CAQAzmC,cAAc2mC,EAAgB,CAAC,GAC3B,GAAE,WAAYA,GACTA,EAAc19B,SACf09B,EAAc19B,OAASd,EAAKe,YAKhC,MAAM09B,EAAa,GAGbC,EAAoBF,EAAc19B,OAAO7F,MAAM,WACrD,IAAK,MAAM0jC,KAAmBD,EAAmB,CAC7C,IAAK,MAAMr9B,KAAcsD,GAGjBtD,EAAWu9B,WAAWD,IACtBF,EAAW13B,KAAKpC,GAAStD,IAGjC,GAAIo9B,EAAWvmC,OAAS,EACpB,KAER,CACA,IAAI2mC,EACJ,GAA0B,IAAtBJ,EAAWvmC,OAEX2mC,EAAY,IAAIV,GAAcxrC,OAAOmsC,OAAOn6B,IAAU,SAErD,GAA0B,IAAtB85B,EAAWvmC,OAChB2mC,EAAY,IAAIV,GAAcM,EAAW,QAExC,CACD,MAAMM,EAAO/+B,EAAKg/B,OAAOR,EAAc79B,QACjCs+B,EAASj/B,EAAKk/B,SAASV,EAAc59B,OACrCu+B,EAAeV,EAAWW,MAAMvkC,GAAMA,EAAEkkC,OAASA,GAAQlkC,EAAEokC,SAAWA,IAC5E,GAAIE,EACAN,EAAY,IAAIV,GAAcgB,OAE7B,CACD,MAAME,EAAeZ,EAAWW,MAAMvkC,GAAMA,EAAEokC,SAAWA,GAAUpkC,EAAEkkC,OAASA,IAE1EF,EAAY,IAAIV,GADhBkB,GAI8BZ,EAAW,GAEjD,CACJ,CACA,MAAMx+B,EAAWu+B,EAAc99B,KAC/B,QAAwB,IAAbT,EAA0B,CACjC,MAAMq/B,EAAet/B,EAAKqK,wBAAwBpK,GAClD4+B,EAAU30B,YAAYo1B,EAC1B,CACA,OAAOT,CACX,CAKAhnC,eAAewJ,GACX,OAAOsD,GAAStD,EACpB,CASAxJ,oBAAoBsO,EAAMo5B,GAAY,GAClC,GAAE,iBAAkBp5B,EAAMo5B,GAC1B,MAAMl+B,EAAa8E,EAAKrF,aAEH5K,IADAyO,GAAStD,IACIk+B,KAC9B56B,GAAStD,GAAc8E,EAE/B,CAKApS,YAAYwqC,GAERjsC,KAAKwO,OAAS,GAEdxO,KAAKoO,KAAO,GAEZpO,KAAKiR,WAAa,IAgBlBjR,KAAKmR,OAAS,CAAC,EACfnR,KAAKktC,QAAS,EACdltC,KAAKmtC,YAAa,EAClBntC,KAAK2sC,QAAS,EACd3sC,KAAKysC,MAAO,EACZzsC,KAAKotC,kBAAoB,EACzBptC,KAAKqtC,gBAAkB,EACvBrtC,KAAKstC,aAAe,IAEpBttC,KAAKutC,SAAW,GAChBvtC,KAAKwtC,aAAavB,EACtB,CACIwB,uBACA,IAAI5/B,EAIJ,YAHuCjK,IAAnCmoC,GAAgB/rC,KAAKutC,YACrBxB,GAAgB/rC,KAAKutC,UAAY,CAAC,GAEW,QAAzC1/B,EAAKk+B,GAAgB/rC,KAAKutC,iBAA8B,IAAP1/B,EAAgBA,EAAK,CAAC,CACnF,CACA2/B,aAAapf,GACLA,EAAO5f,SACPxO,KAAKwO,OAAS4f,EAAO5f,QACrB4f,EAAOnd,aACPjR,KAAKiR,WAAamd,EAAOnd,YACzBmd,EAAOjd,SACPnR,KAAKmR,OAASid,EAAOjd,QACrBid,EAAO8e,SACPltC,KAAKktC,OAAS9e,EAAO8e,QACrB9e,EAAO+e,aACPntC,KAAKmtC,WAAa/e,EAAO+e,YACzB/e,EAAOue,SACP3sC,KAAK2sC,OAASve,EAAOue,QACrBve,EAAOqe,OACPzsC,KAAKysC,KAAOre,EAAOqe,MACnBre,EAAOkf,eACPttC,KAAKstC,aAAelf,EAAOkf,cAC3Blf,EAAOgf,oBACPptC,KAAKotC,kBAAoBhf,EAAOgf,mBAChChf,EAAOif,kBACPrtC,KAAKqtC,gBAAkBjf,EAAOif,iBAClCrtC,KAAK0tC,gBACT,CAEAA,iBACI,MAAMl/B,EAASxO,KAAKwO,OAAON,QAAQ,OAAQ,KACrCE,EAAOpO,KAAKoO,KACZC,EAASrO,KAAKysC,KAAOngC,EAAWqhC,KAAOrhC,EAAWoC,OAClDJ,EAAQtO,KAAK2sC,OAASpgC,EAAUkD,OAASlD,EAAUmC,OAEzD1O,KAAKutC,SAAW,GAAG/+B,KAAUJ,KAAQC,KAAUC,GACnD,CAKAs/B,gBAAgBC,GACZ,OAAI7tC,KAAKmR,OAAO08B,GACL7tC,KAAKmR,OAAO08B,GAGZ7tC,KAAKmR,OAAOnR,KAAKstC,aAEhC,CACIQ,gBAEA,OADgB9tC,KAAK4tC,gBAAgB5tC,KAAKstC,cAC1B5X,GAAK11B,KAAKiR,WAAcjR,KAAKgY,gBACjD,CAOA+1B,yBAAyB9hC,GACrB,IAAI4B,EACJ,MAAM2C,EAAUxQ,KAAK4tC,gBAAgB3hC,GACrC,GAAKuE,EAIA,CAED,OADqD,QAA/B3C,EAAK2C,EAAQw9B,oBAAiC,IAAPngC,EAAgBA,EAAK,GAC5D7N,KAAKiR,UAC/B,CALI,MAAO,GAMf,CAIAg9B,qBAAqBhiC,GACjB,MAAMuE,EAAUxQ,KAAK4tC,gBAAgB3hC,GAC/BiiC,EAAK,CAAEC,KAAM,EAAGC,KAAMpuC,KAAK8tC,UAAWpjC,OAAQ1K,KAAK8tC,WACzD,OAAKt9B,GAI4B,iBAAlBA,EAAQ69B,QACfH,EAAGC,KAAQ39B,EAAQ69B,MAAQruC,KAAKiR,WAAcjR,KAAKgY,kBAE1B,iBAAlBxH,EAAQ89B,QACfJ,EAAGE,KAAQ59B,EAAQ89B,MAAQtuC,KAAKiR,WAAcjR,KAAKgY,kBAEvDk2B,EAAGxjC,OAASwjC,EAAGE,KAAOF,EAAGC,KAClBD,GAVAA,CAYf,CACAK,kBAAkB9lC,GACd,MAAMiwB,EAAQ14B,KAAKytC,iBACbe,EAAS,CAAEL,KAAM,EAAGC,KAAMpuC,KAAK8tC,UAAWpjC,OAAQ1K,KAAK8tC,WACvD/X,EAAQ2C,EAAMjwB,GACpB,QAAc7E,IAAVmyB,EACA,OAAOA,EAEX,IAAK,IAAIrtB,EAAI,EAAGA,EAAID,EAAI7C,SAAU8C,EAAG,CACjC,MAAM+lC,EAAOzuC,KAAKiuC,qBAAqBxlC,EAAIC,IAC3C8lC,EAAOL,KAAOlpC,KAAK4lC,IAAI2D,EAAOL,KAAMM,EAAKN,MACzCK,EAAOJ,KAAOnpC,KAAK8E,IAAIykC,EAAOJ,KAAMK,EAAKL,MACzCI,EAAO9jC,OAAS8jC,EAAOJ,KAAOI,EAAOL,IACzC,CAEA,OADAzV,EAAMjwB,GAAO+lC,EACNA,CACX,CAIAE,oBAAoB3pC,GAChB,MAAM5E,EAAMH,KAAKutC,SAGjB,IAAIoB,EAAe7C,GAAe3rC,QACbyD,IAAjB+qC,IACAA,EAAe,CAAC,EAChB7C,GAAe3rC,GAAOwuC,GAE1B,IAAIlkC,EAAQkkC,EAAa5pC,GACzB,QAAcnB,IAAV6G,EAAqB,CACrBA,EAAQ,EACR,IAAK,IAAI/B,EAAI,EAAGA,EAAI3D,EAAKa,SAAU8C,EAC/B+B,GAASzK,KAAK+tC,yBAAyBhpC,EAAK2D,IAEhDimC,EAAa5pC,GAAQ0F,CACzB,CACA,OAAOA,CACX,CAEAmkC,oBAAoB7pC,GAChB,OAAO/E,KAAK0uC,oBAAoB3pC,GAAQ/E,KAAKgY,gBACjD,CAIAJ,YAAYxJ,GAIR,OAHApO,KAAKoO,KAAOA,EAEZpO,KAAK0tC,iBACE1tC,IACX,CAEIgY,uBACA,OAAOhY,KAAKoO,KAAOV,EAAKI,cAAcC,EAC1C,CACAiD,gBACI,OAAOhR,KAAKiR,UAChB,EC3SG,IAAI49B,GAOAC,GDuSXjD,GAActJ,OAAQ,EC7StB,SAAWsM,GACPA,EAA4BA,EAAkC,KAAI,GAAK,OACvEA,EAA4BA,EAAoC,OAAI,GAAK,SACzEA,EAA4BA,EAAmC,MAAI,GAAK,QACxEA,EAA4BA,EAAyC,YAAI,GAAK,aACjF,CALD,CAKGA,KAAgCA,GAA8B,CAAC,IAElE,SAAWC,GACPA,EAA0BA,EAA+B,IAAI,GAAK,MAClEA,EAA0BA,EAAkC,OAAI,GAAK,SACrEA,EAA0BA,EAAkC,OAAI,GAAK,SACrEA,EAA0BA,EAAuC,YAAI,GAAK,aAC7E,CALD,CAKGA,KAA8BA,GAA4B,CAAC,IAO9D,MAAM9sC,WAAmB22B,GAEVj3B,sBACP,OAAOG,EAASG,UACpB,CAGW+sC,kCAEP,OADkB/gB,EAAO0U,mBACRtxB,aAAa,sBAClC,CAEA7L,cAAcypC,EAAaxM,GACvB,IAAKwM,GAAsC,IAAvBA,EAAYppC,OAC5B,OAAO,EACX,IAAIqpC,EAAY,EACZC,EAAa,EACbC,EAAoB,EACpBC,EAAqB,EACzB,IAAK,IAAI1mC,EAAI,EAAGA,EAAIsmC,EAAYppC,SAAU8C,EAAG,CACzC,MAAM2mC,EAAaL,EAAYtmC,GACzB4mC,EAAgBzD,GAAc0D,OAAOF,EAAWp4B,UAGtD,IAAIu4B,GADe,EAAIF,EAAcf,kBAAkBc,EAAWtqC,MAAM2F,QAAUsjB,EAAOiD,oBAEzF,MAAM2I,EAAOyV,EAAWxV,oBAClB4V,EAAa7V,EAAK8V,gBAAgB9f,WAElCD,EAAY2f,EAAcV,oBAAoBS,EAAWtqC,MAC3DsqC,EAAWM,0BAA4Bd,GAA4BxV,MACnE8V,EAAoBlqC,KAAK8E,IAAI0lC,EAAYN,GACzCF,EAAYhqC,KAAK8E,IAAIklC,EAAWtf,GAAa3tB,GAAW+sC,sBAEnDM,EAAWM,0BAA4Bd,GAA4BtV,OACxE6V,EAAqBnqC,KAAK8E,IAAI0lC,EAAYL,GAC1CF,EAAajqC,KAAK8E,IAAImlC,EAAYvf,KAGlCsf,EAAYhqC,KAAK8E,IAAIklC,EAAWtf,EAAY,GAAK3tB,GAAW+sC,qBAC5DG,EAAajqC,KAAK8E,IAAImlC,EAAYvf,EAAY,GAC9Cwf,EAAoBlqC,KAAK8E,IAAI0lC,EAAa,EAAGN,GAC7CC,EAAqBnqC,KAAK8E,IAAI0lC,EAAa,EAAGL,IAElD,MAAM/X,EAAQuC,EAAKmB,WACb6U,EAAgBhW,EAAKiW,UAAYjW,EAAKkW,mBAAqBjH,GAAKC,GACtE,IAAI6B,EAAa,EACboF,EAAQ,EACZ,GAAI9sC,EAAU22B,GACV,GAAIA,EAAKkO,eAAekI,UAAW,CAC/B,MAAMhd,EAAO4G,EAAKqW,UACdjd,IACA2X,EAAa1lC,KAAK+C,IAAIgrB,EAAKsX,aAAetc,EAAOiD,oBAEzD,MAEI0Z,EAAa,OAGhB,GAAI5nC,EAAgB62B,GAAO,CAC5B,MAAM5G,EAAO4G,EAAKqW,UACdjd,GAA+B,MAAvB4G,EAAKsW,gBACbvF,EAAa1lC,KAAK+C,IAAIgrB,EAAKsX,aAAetc,EAAOiD,oBAEzD,CAIA,GAHIoG,IACA0Y,EAAQ1Y,EAAM8Y,eAEdd,EAAWe,wBAA0BpwC,KAAKqwC,gBAAgBC,IAAK,CAC/D,IAAIC,EAAW3W,EAAK4W,eAAc,GAC9BvtC,EAAU22B,KACV2W,EAAWR,GAASnW,EAAK6W,cAAgB,KAEzCb,IAAkB/G,GAAKC,KACvByH,GAAY5F,GAED4F,EAAW/N,EAAMkO,cAAgB,GACnCX,GACTV,EAAW7U,YAAYuV,EAAQQ,GAC/Bf,GAAuBO,EAAQQ,EAC/B/N,EAAMkO,cAAgBlB,IAGtBH,EAAW7U,YAAYgI,EAAMkO,eAC7BlO,EAAMkO,eAAiBlB,EAE/B,MACK,GAAIH,EAAWe,wBAA0BpwC,KAAKqwC,gBAAgBM,OAAQ,CACvE,IAAIJ,EAAWR,EAAQnW,EAAK4W,gBACxBvtC,EAAU22B,KACV2W,EAAW3W,EAAKgX,iBAAmB,GAEnChB,IAAkB/G,GAAKE,OACvBwH,GAAY5F,GAEhB,MAAMkG,EAAYN,EAAW/N,EAAMhJ,UAAY,EAC3CqX,EAAYd,GACZV,EAAW7U,YAAYuV,EAAQc,GAC/BrB,GAAuBO,EAAQc,EAC/BrO,EAAMhJ,UAAYgW,IAGlBH,EAAW7U,YAAYgI,EAAMhJ,WAC7BgJ,EAAMhJ,WAAagW,EAE3B,MAEIH,EAAW7U,YAAYgI,EAAMhJ,UAErC,CACA,MAAMsX,EAAe7rC,KAAK4lC,IAAI5lC,KAAK8E,IAAImlC,EAAaE,EAAoB,GAAInqC,KAAK8E,IAAImlC,EAAa1M,EAAMuO,YAAa,IAC/GC,EAAc/rC,KAAK4lC,IAAI5lC,KAAK8E,IAAIklC,EAAYE,EAAmB,GAAIlqC,KAAK8E,IAAIklC,EAAYzM,EAAMK,WAAY,IAGhH,OAFAL,EAAMK,YAAcmO,EACpBxO,EAAMuO,aAAeD,GACd,CACX,CAMArvC,YAAYsD,GACRxB,QACAvD,KAAK+E,KAAOA,EACZ/E,KAAK2vC,wBAA0Bd,GAA4B9V,OAG3D/4B,KAAKowC,sBAAwBtB,GAA0BwB,IACvDtwC,KAAK2X,YAEL3X,KAAK05B,SAAS1L,EAAO2B,UAAU5qB,GACnC,CAKAksC,yBAAyBC,GAErB,OADAlxC,KAAKowC,sBAAwC,iBAATc,EAAoBlvC,GAAWmvC,sBAAsBD,GAAQA,EAC1FlxC,IACX,CAIAoxC,mBACI,OAAOpxC,KAAK2vC,uBAChB,CAKA0B,iBAAiBH,GAEb,OADAlxC,KAAK2vC,wBAA0C,iBAATuB,EAAoBlvC,GAAWsvC,wBAAwBJ,GAAQA,EAC9FlxC,IACX,CAEA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBACZ+V,EAAgBhW,EAAKiW,UAAYjW,EAAKkW,mBAAqBjH,GAAKC,GAChEwG,EAAgBzD,GAAc0D,OAAOvvC,KAAKiX,UAC1CwxB,EAAQ7O,EAAK8O,mBAAmB1U,EAAiBiF,MAAOj5B,KAAKsS,OACnEtS,KAAKsW,cAELsf,EAAI5gB,OAIJhV,KAAK8U,aACL8gB,EAAI8V,UAAU,aAAc1rC,KAAK6S,aAAa,OAC9C+iB,EAAI7e,QAAQ/W,KAAKiX,UACjB,MAAMs6B,EAAajC,EAAcV,oBAAoB5uC,KAAK+E,MACpDysC,EAAclC,EAAcf,kBAAkBvuC,KAAK+E,MAAM2F,OAC/D,IAAI/G,EACAmF,EAEAnF,EADA3D,KAAK2vC,0BAA4Bd,GAA4BxV,KACzDoP,EAAM9kC,EAEL3D,KAAK2vC,0BAA4Bd,GAA4BtV,MAC9DkP,EAAM9kC,EAAI4tC,EAETvxC,KAAK2vC,0BAA4Bd,GAA4B9V,OAC9D0P,EAAM9kC,EAAI4tC,EAAa,EAGvB3X,EAAK6X,WAAaF,EAAa,EAEvC,IAAIG,EAAW,CAAC,EACZC,EAAU,EACd,MAAMC,EAAWhY,EAAKiW,UAChBxY,EAAQuC,EAAKxB,aAOnB,GAJIwZ,IACAF,EAAW9X,EAAKiY,YAAYrH,aAC5BmH,EAAUta,EAAMkM,0BAEhBvjC,KAAKowC,wBAA0BtB,GAA0B6B,OAAQ,CAGjE7nC,EADW8wB,EAAKkY,QACTzsC,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IACrCoE,IAAM9I,KAAKw5B,UAAY,GAAKxL,EAAOiD,oBAAsBugB,EACrDI,GAAYhC,IAAkB/G,GAAKE,OACnCjgC,EAAI7D,KAAK8E,IAAIjB,EAAG4oC,EAAS3G,KAAOyG,EAAcG,EAAU3xC,KAAKw5B,WAErE,MACK,GAAIx5B,KAAKowC,wBAA0BtB,GAA0B/V,OAAQ,CACtE,MAAMgZ,EAAKnY,EAAKoY,eAAehyC,KAAKw5B,WAAa,EAEjD1wB,EAAIipC,GADO1a,EAAM4a,kBAAkBjyC,KAAKw5B,WACzBuY,GAAM,EAAIP,EAAc,CAC3C,MACK,GAAIxxC,KAAKowC,wBAA0BtB,GAA0BwB,IAAK,CAEnExnC,EADa7D,KAAK4lC,OAAOjR,EAAKkY,UAClB9xC,KAAKw5B,UAAY,GAAKxL,EAAOiD,oBACrC2gB,GAAYhC,IAAkB/G,GAAKC,KAGnC6I,EAAUD,EAAS3G,KAAO1T,EAAM6a,iBAAmBlkB,EAAOiD,oBAAsB0gB,EAChF7oC,EAAI7D,KAAK4lC,IAAI/hC,EAAG4oC,EAAS3G,KAAO4G,GAAW3xC,KAAKw5B,UAAY,IAEpE,KACK,CACD,MAAM2Y,EAAUvY,EAAKwY,iBACrBtpC,EAAIqpC,EAAQpH,MAAQoH,EAAQnH,MAAQmH,EAAQpH,MAAQ,EAAIyG,EAAc,CAC1E,EAtPR,YAAcztC,GACN/B,GAAWugC,OACX1+B,EAAI,sBAAuBE,EACnC,CAoPQ,CAAE,yBAA0B/D,KAAK+E,KAAMpB,EAAGmF,GAC1C8sB,EAAIyc,SAASryC,KAAK+E,KAAMpB,EAAGmF,GAC3B8sB,EAAIgW,aACJ5rC,KAAK2V,eACLigB,EAAIhgB,SACR,EAGJ5T,GAAWugC,OAAQ,EACnBvgC,GAAWmV,UAAY9W,OAAOmX,OAAO,CAAC,EAAGzD,EAAQoD,WAEjDnV,GAAWswC,kBAAoBzD,GAC/B7sC,GAAWsvC,wBAA0B,CACjClY,KAAMyV,GAA4BxV,KAClCC,MAAOuV,GAA4BtV,MACnCT,OAAQ+V,GAA4B9V,OACpCwZ,WAAY1D,GAA4B2D,aAE5CxwC,GAAWquC,gBAAkBvB,GAC7B9sC,GAAWmvC,sBAAwB,CAC/BnY,MAAO8V,GAA0BwB,IACjCmC,IAAK3D,GAA0BwB,IAC/BpX,MAAO4V,GAA0B6B,OACjC+B,OAAQ5D,GAA0B6B,OAClC7X,OAAQgW,GAA0B/V,OAClCwZ,WAAYzD,GAA0B0D,aC5Q1C,MAAM,MAAEvZ,GAAK,MAAEE,IAAUR,GAASC,SAClC,SAAS+Z,GAAmBC,EAAQxxC,GAChC,MAA6B,GAAtBwxC,EAAOxxC,EAAQ,GAC1B,CAEA,SAASyxC,GAAc7uC,EAAMyvB,GACzB,OAAOA,IAAawF,GAAQj1B,GAAQ,EAAIA,GAAQ,CACpD,CACA,SAAS8uC,GAAoB9uC,EAAMyvB,GAC/B,OAAIof,GAAc7uC,EAAMyvB,GAChBA,IAAawF,GACNh0B,KAAK8tC,KAGL9tC,KAAK4C,MAIT5C,KAAK8vB,KAEpB,CAeA,MAAMie,GAAsBpZ,GAAS/2B,EAAY+2B,IAASv3B,EAAYu3B,GA0GtE,MAAMqZ,WAAqBta,GAEZj3B,sBACP,OAAOG,EAASoxC,YACpB,CAmBA1tC,cAAcwmB,EAAeyW,GACzB,IAAKzW,GAA0C,IAAzBA,EAAcnmB,OAChC,OAAO,EAEX,IAAIstC,EAAgB,EACpB,MAAMC,EAAe,CAACC,EAAcpvC,EAAMyvB,IAAakf,GAAmBG,GAAoB9uC,EAAMyvB,GAAW/vB,EAAQ0vC,EAAa9jB,MAAMxe,aAAapG,QAAU,GAFlJ,IAGfqhB,EAAcnX,SAASw+B,IACnB,MAAMxZ,EAAOwZ,EAAavZ,oBAC1BqZ,EAAgBjuC,KAAK8E,IAAI6vB,EAAK8V,gBAAgB9f,WAAYsjB,GAC1D,IAAInD,EAAQ,EACZ,MAAMH,EAAgBhW,EAAKiW,UAAYjW,EAAKkW,mBAAqBjH,GAAKC,GACtE,IAAI6B,EAAa,EAEjB,GAAI5nC,EAAgB62B,GAAO,CACvB,MAAM5G,EAAO4G,EAAKqW,UACdjd,IACA2X,EAAa1lC,KAAK+C,IAAIgrB,EAAKsX,aAAetc,EAAOiD,oBAEzD,CACA,MAAMoG,EAAQuC,EAAKmB,WAInB,GAHI1D,IACA0Y,EAAQ1Y,EAAM8Y,eAEdiD,EAAa9Y,gBAAkBrB,GAAO,CACtC,IAAIsX,EAAW3W,EAAK4W,eAAc,GAC9BZ,IAAkB/G,GAAKC,KACvByH,GAAY5F,GAEhB,IAAI0I,EAAYF,EAAaC,EAAc5Q,EAAMkO,cAAezX,IAChE,MAAMqa,EAAS/C,EAAW/N,EAAMkO,cAAgB,IAE3C0C,EAAaA,aAAapnB,eAAiBsnB,EAASvD,IACrDsD,GAAatD,EAAQuD,GAEzBF,EAAa5Y,YAAYgI,EAAMkO,eAC/BlO,EAAMkO,eAAiB2C,CAC3B,MACK,GAAID,EAAa9Y,gBAAkBnB,GAAO,CAC3C,IAAIoX,EAAWtrC,KAAK8E,IAAIgmC,EAAQnW,EAAK4W,gBAAiB,GAClDZ,IAAkB/G,GAAKE,OACvBwH,GAAY5F,GAEhB,IAAI0I,EAAYF,EAAaC,EAAc5Q,EAAMhJ,UAAWL,IAC5D,MAAM0X,EAAYN,EAAW/N,EAAMhJ,UAAY,IAE1C4Z,EAAaA,aAAapnB,eAAiB6kB,EAAYd,IACxDsD,GAAatD,EAAQc,GAEzBuC,EAAa5Y,YAAYgI,EAAMhJ,WAC/BgJ,EAAMhJ,WAAa6Z,CACvB,KAEJ,MAAM5oC,EAAQshB,EACTxY,KAAK6/B,GAAiBA,EAAaxjB,aACnCvqB,QAAO,CAACkuC,EAAUC,IAAevuC,KAAK8E,IAAIypC,EAAYD,KACrDE,EAAUxuC,KAAK4lC,IAAI5lC,KAAK8E,IAAIU,EAAQyoC,EAAe,GAAIjuC,KAAK8E,IAAIU,GAAS+3B,EAAMK,WAAaL,EAAMuO,aAAc,IAGtH,OAFAvO,EAAMK,YAAc4Q,EAAU,EAC9BjR,EAAMuO,aAAe0C,EAAU,GACxB,CACX,CACAluC,sBAAqB,cAAEwmB,GAAiB6N,EAAM8Z,GAC1C,IAAK3nB,EACD,OACJ,MAAM4nB,EAAkB,CACpBC,SAAU,KACVC,OAAQ,KACRC,OAAQ,MAEZ/nB,EACKpjB,MAAM,KACN4K,KAAKwgC,GAAgBA,EAAY3kC,OAAOzG,MAAM,OAC9C4K,KAAI,EAAE5C,EAAM8iB,MACb,MAAM5D,EAAQ,CAAE5d,KAAM0hC,EAAgBhjC,IAGtC,OAFI8iB,IACA5D,EAAM4D,SAAWkF,GAASE,eAAepF,IACtCigB,EAAQM,aAAaf,aAAapjB,EAAM,IAE9Ctc,KAAKsc,GAAU+J,EAAKgO,YAAY/X,EAAO,IAChD,CASApuB,YAAYwQ,GACR1O,QACAvD,KAAKiS,KAAOA,EACZjS,KAAKyzB,SAAWwF,GAChBj5B,KAAK8nC,eAAiB,CAClBC,WAAY/Z,EAAOyC,qBAEvBzwB,KAAKi3B,OACT,CACAA,QACIj3B,KAAKozC,aAAeplB,EAAOimB,kBAAkBj0C,KAAKiS,MAE7CjS,KAAKozC,eACNpzC,KAAKozC,aAAe,CAAE/vC,KAAMrD,KAAKiS,KAAM+Z,eAAe,GAClDhsB,KAAKiS,KAAKiiC,SAAS,WACnBl0C,KAAKyzB,SAAWwF,IAChBj5B,KAAKiS,KAAKiiC,SAAS,WACnBl0C,KAAKyzB,SAAW0F,KAExB,MAAM91B,GAAQrD,KAAKyzB,WAAawF,GAAQj5B,KAAKozC,aAAalnB,UAAYlsB,KAAKozC,aAAajnB,YAAcnsB,KAAKozC,aAAa/vC,KACxHrD,KAAKsvB,MAAQ,IAAIG,EAAMpsB,QAAmCA,EAAO,GAAIrD,KAAK8nC,eAAeC,YACzFrkC,EAAQ1D,KAAKsvB,MAAO,gBAAiB,2BAA2BtvB,KAAKiS,QACrEjS,KAAK05B,SAASh2B,EAAQ1D,KAAKsvB,MAAMxe,aAAarG,OAClD,CAEA0pC,gBAAgBC,GAAe,GAE3B,OADAp0C,KAAKozC,aAAapnB,cAAgBooB,EAC3Bp0C,IACX,CAEA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cACL,MAAMhE,EAAQtS,KAAKg6B,cACb,SAAEvG,EAAQ,MAAEnE,EAAOkK,UAAW6a,GAAar0C,KAC3Cs0C,EAAqBt0C,KAAKozC,aAAapnB,cACvCqL,EAAQuC,EAAKxB,aACbmc,EAAald,EAAMkM,yBACnBiR,EAAQvxC,EAAU22B,IAElB,EAAEj2B,GAAMi2B,EAAK8O,mBAAmBjV,EAAUnhB,GAC1CmiC,GAAyBH,GAAsBE,EAC/CE,EAtLd,SAA0B9a,EAAMnG,GAC5B,MAAMkhB,EAAelhB,IAAawF,IAASW,EAAKkW,qBAAuBjH,GAAKC,IACvErV,IAAa0F,IAASS,EAAKkW,qBAAuBjH,GAAKE,KAC5D,OAAIiK,GAAmBpZ,GACfA,EAAKiW,WAAa8E,EACX,GAKA,EAIP/a,EAAKiW,WAAa8E,EACX,EAGA,CAGnB,CAiK8BC,CAAiBhb,EAAMnG,GACvCohB,EAAU7mB,EAAO0U,mBAAmBtxB,aAAa,gBAAgBke,EAAM4H,oBAAqB,GAClG,IAAIpuB,EAAI,CACJ,CAACmwB,IAAQ,KACL3J,EAAM0I,UAAU,GAAK,GACrB,MAAMlvB,EAvQtB,SAAiB8wB,EAAMya,GACnB,MAAMzE,EAAgBhW,EAAKkW,oBACnB/E,KAAM+J,EAAU9J,MAAO+J,GAAcnb,EAAKwY,iBAClD,GAAIY,GAAmBpZ,GACnB,OAAIA,EAAKiW,UACDD,IAAkB/G,GAAKC,GAChBgM,EAGAC,EAIJ9vC,KAAK4lC,OAAOjR,EAAKkY,SAG3B,GAAI7uC,EAAU22B,GACf,OAAIA,EAAKiW,WACDD,IAAkB/G,GAAKC,GAChBgM,EAOJlb,EAAKxB,aAAa4Z,eAAeqC,GAI5C,MAAM,IAAIlxC,EAAa,kBAAmB,gEAElD,CAuO0B6xC,CAAQpb,EAAMya,IAAaA,EAAWK,GAAiBH,EACjE,OAAOE,EAAwBxvC,KAAK4lC,IAAIxT,EAAM2a,eAAeiB,GAAagC,gBAAiBnsC,GAAKA,CAAC,EAErG,CAACqwB,IAAQ,KACL7J,EAAM0I,UAAU,GAAK,GACrB,MAAMlvB,EA3OtB,SAAoB8wB,EAAMya,GACtB,MAAMzE,EAAgBhW,EAAKkW,oBACnB/E,KAAM+J,EAAU9J,MAAO+J,GAAcnb,EAAKwY,iBAClD,GAAIY,GAAmBpZ,GACnB,OAAIA,EAAKiW,UACDD,IAAkB/G,GAAKC,GAChBiM,EAGAD,EAIJ7vC,KAAK8E,OAAO6vB,EAAKkY,SAG3B,GAAI7uC,EAAU22B,GACf,OAAIA,EAAKiW,UACDD,IAAkB/G,GAAKC,GAChBlP,EAAKxB,aAAa6Z,kBAAkBoC,GAGpCS,EAIJlb,EAAKxB,aAAa6Z,kBAAkBoC,GAI/C,MAAM,IAAIlxC,EAAa,kBAAmB,gEAElD,CA2M0B+xC,CAAWtb,EAAMya,IAAaA,EAAWK,GAAiBH,EACpE,OAAOE,EAAwBxvC,KAAK8E,IAAIstB,EAAM4a,kBAAkBgB,GAAagC,gBAAiBnsC,GAAKA,CAAC,GAE1G2qB,KACF,IAAK+gB,EAAO,CACR,MAAMW,EAAkB1hB,IAAawF,IAAS,EAAI,EAC5CsX,EAAW3W,EAAKwJ,cAAc9wB,GAAOtO,KAErCoxC,GADoBxb,EAAKkY,QAAQx/B,GAASxJ,GAAKyrC,EAChB/uC,OAAO+qC,GACtC8E,EApSlB,SAAyBf,EAAoBtwC,EAAMyvB,EAAU0hB,GAEzD,MAAME,EAAc1C,GAAmBG,GAAoB9uC,EAAMyvB,GAAWzvB,GAG5E,GAF4BswC,GAAsBzB,GAAcwC,EAAa5hB,IACzD4hB,EAAc,GAAM,EAGpC,OAAOA,EADkB,IACgBF,EAGzC,OAAOE,CAEf,CAwRgCC,CAAgBhB,EAAoBc,EAAW3hB,EAAU0hB,GACzEtC,GAAcwC,EAAa5hB,IAC3BnE,EAAM0I,UAAU,GAAK,IACzBlvB,GAAK7D,KAAK+C,IAAIqtC,EAAcD,GAAab,EAAaY,EAAkBN,EAAUM,CACtF,EAjUR,YAAcpxC,GACNkvC,GAAa1Q,OACb1+B,EAAI,wBAAyBE,EACrC,CA+TQ,CAAE,iCAAiCJ,SAASmF,MAC5CwmB,EAAM2I,OAAOrC,EAAKjyB,EAAGmF,EACzB,EAGJmqC,GAAa1Q,OAAQ,EACrB0Q,GAAagC,gBAAkB,GC/UxB,MAAMryC,GACElB,sBACP,OAAOG,EAASe,aACpB,CACIkM,SAAKvG,GACLvI,KAAK+W,QAAQxO,EACjB,CACIuG,WACA,OAAO9O,KAAK0X,SAChB,CAKA69B,WAAWhtC,GAEP,OADAvI,KAAK+W,QAAQxO,GACNvI,IACX,EASG,SAASw1C,GAAQ5f,EAAKjyB,EAAGmF,EAAG2sC,EAAQ,QACvC7f,EAAI5gB,OACJ4gB,EAAItgB,aAAamgC,GAEjB7f,EAAIQ,YACJR,EAAI8f,IAAI/xC,EAAGmF,EAAG,EAAG,EAAa,EAAV7D,KAAKC,IAAQ,GACjC0wB,EAAI+f,YACJ/f,EAAIa,OACJb,EAAIhgB,SACR,CC3BO,MAAMggC,WAAiB7hC,EACfrS,sBACP,OAAOG,EAAS+zC,QACpB,CACAn0C,cACI8B,QACAvD,KAAK61C,eAAgB,EACrB71C,KAAK81C,gBAAiB,EAGtB91C,KAAKowB,MAAQ,IAAI9qB,EAAS,EAAG,GAC7BtF,KAAK+1C,eAAiB,EACtB/1C,KAAKg2C,eAAiB,IAAI1wC,EAAS,EAAG,GAEtCtF,KAAKyK,MAAQ,EACbzK,KAAKw0B,QAAU,EACfx0B,KAAKi2C,UAAY,GACjBj2C,KAAKk2C,YAAc,GACnBl2C,KAAKm2C,cAAe,EACpBn2C,KAAKo2C,eAAiB,EAGtBp2C,KAAKq2C,cAAe,EAGpBr2C,KAAKs2C,iBAAmB,CAIpBC,QAAS,CAAEnd,KAAM,EAAGE,MAAO,GAG3B/K,SAAU,GAEVioB,WAAY,EAGZC,MAAO,CACHC,KAAM,EACNC,KAAM,EACNC,UAAW,GAGvB,CAEA3f,QACI,OAAOj3B,IACX,CAEA4mC,WACI,OAAO5mC,KAAKowB,KAChB,CAEAsW,oBACI,OAAO1mC,KAAKq2C,YAChB,CAEAQ,eAAe5jB,GAEX,OADAjzB,KAAKq2C,aAAepjB,EACbjzB,IACX,CAEA05B,SAASjvB,GACLzK,KAAKyK,MAAQA,CACjB,CAEAmlB,WACI,IAAK5vB,KAAK61C,cACN,MAAM,IAAI1yC,EAAa,kBAAmB,+CAE9C,OAAOnD,KAAKyK,OAASzK,KAAKm6B,gBAAkBn6B,KAAKm6B,gBAAgBvK,WAAa,EAClF,CAEA2H,UAAU5zB,GAEN,OADA3D,KAAKw0B,QAAU7wB,EACR3D,IACX,CAEAs3B,YACI,OAAOt3B,KAAKw0B,OAChB,CAEAvrB,OAEI,OADoBjJ,KAAK82C,iBAAiB,uCACvB7tC,OAASjJ,KAAKw0B,OACrC,CAEAuiB,sBACI,OAAO/2C,KAAKs2C,gBAChB,CAEAU,kBACI,OAAIh3C,KAAKi3C,kBACEj3C,KAAKo2C,eAET,CACX,CAEAc,gBAAgBC,GAEZ,OADAn3C,KAAKo2C,eAAiBe,EACfn3C,IACX,CAEAi3C,kBACI,OAAOj3C,KAAKm2C,YAChB,CAEAiB,mBAAmBjB,GAEf,OADAn2C,KAAKm2C,aAAeA,EACbn2C,IACX,CAKAq3C,WACI,OAAO3zC,EAAQ1D,KAAKumC,MAAO,UAAW,yBAC1C,CAEA+Q,SAAS/Q,GACLvmC,KAAKumC,MAAQA,CACjB,CAEAgR,YACI,OAAOv3C,KAAKw3C,MAChB,CAEAC,iBACI,OAAOz3C,KAAKk2C,WAChB,CAMAwB,YAAYF,GACR,IAAIG,EACAC,EACJ,GAAIJ,EAAQ,CACR,MAAM9uC,EAAI1I,KAAKk2C,YAAYjgC,QAAQuhC,GAQnC,OAPW,IAAP9uC,IACA1I,KAAKk2C,YAAY9/B,OAAO1N,EAAG,GAC3BivC,EAAYH,EAAOK,eACnBD,EAAgBJ,EAAOM,mBAEvB93C,KAAK+3C,oBAAoBJ,EAAWC,IAEjC53C,IACX,CACA,KAAOA,KAAKk2C,YAAYtwC,QAEpB+xC,GADAH,EAASx3C,KAAKk2C,YAAY8B,OACPH,eACnBD,EAAgBJ,EAAOM,mBAEvB93C,KAAK+3C,oBAAoBJ,EAAWC,GAExC,OAAO53C,IACX,CAEAi4C,UAAUT,GACN,GAAIA,EAAQ,CACRx3C,KAAKk2C,YAAYzhC,KAAK+iC,GACtB,MAAMG,EAAYH,EAAOK,eACnBD,EAAgBJ,EAAOM,mBAC7B93C,KAAK+3C,oBAAoBH,EAAeD,EAC5C,CAEA,OADA33C,KAAKw3C,OAASA,EACPx3C,IACX,CAMAk4C,qBAAqBC,GACjBn4C,KAAKm6B,gBAAkBge,EACvB,IAAK,IAAIzvC,EAAI,EAAGA,EAAI1I,KAAKi2C,UAAUrwC,SAAU8C,EACzC1I,KAAKm6B,gBAAgBie,UAAUp4C,KAAKi2C,UAAUvtC,IAIlD,OAFA1I,KAAKm6B,gBAAgBie,UAAUp4C,MAC/BA,KAAK61C,eAAgB,EACd71C,IACX,CAMA4nC,YAAYD,EAAUr1B,EAAQ,GAG1B,OAFAtS,KAAKi2C,UAAUxhC,KAAKkzB,GACpB3nC,KAAK61C,eAAgB,EACd71C,IACX,CAEA0nC,eACI,OAAO1nC,KAAKi2C,SAChB,CAEAoC,eAAeC,GACXt4C,KAAK66B,YAAcyd,EACnBt4C,KAAK61C,eAAgB,CACzB,CACAiB,iBAAiBxzC,EAAU,iCACvB,OAAOI,EAAQ1D,KAAK66B,YAAa,gBAAiBv3B,EACtD,CAEAi1C,YACQv4C,KAAK61C,gBAET71C,KAAKyK,MAAQ,EACTzK,KAAKm6B,kBACLn6B,KAAKm6B,gBAAgBoe,YACrBv4C,KAAKyK,OAASzK,KAAKm6B,gBAAgBvK,YAE3C,CAEI4oB,iBAAap3C,GACbpB,KAAK61C,cAAgBz0C,CACzB,CACIo3C,mBACA,OAAOx4C,KAAK61C,aAChB,CAEA4C,aACI,OAAIz4C,KAAK81C,iBAET91C,KAAK81C,gBAAiB,GADX91C,IAGf,CAEI04C,kBAAct3C,GACdpB,KAAK81C,eAAiB10C,CAC1B,CACIs3C,oBACA,OAAO14C,KAAK81C,cAChB,CAEA6C,oBACI,OAAO34C,KAAK+1C,cAChB,CAEA6C,kBAAkB7C,GACd/1C,KAAK+1C,eAAiBA,EACtB/1C,KAAKowB,MAAQpwB,KAAKg2C,eAAetuC,QAAQX,SAAS/G,KAAK+1C,eAC3D,CAEA8C,oBACI,OAAO74C,KAAKg2C,cAChB,CAEA+B,oBAAoB/xC,EAAWC,GAC3BjG,KAAKg2C,eAAejvC,SAASf,EAAWC,GACxCjG,KAAKowB,MAAQpwB,KAAKg2C,eAAetuC,QAAQX,SAAS/G,KAAK+1C,eAC3D,CAEA+C,YAAYvqB,GACR,MAAM6B,EAAQ7B,EAASvoB,WAAagoB,EAAO9V,WAAaqW,EAAStoB,aACjEjG,KAAKowB,MAAQpwB,KAAKg2C,eAAetuC,QAAQX,SAASqpB,GAClDpwB,KAAK+1C,eAAiB/1C,KAAKowB,MAAMhvB,OACrC,CACA23C,eAEI,OADoB/4C,KAAK82C,iBAAiB,+CACvB7tC,MACvB,CAEAoxB,mBAAmB8d,GAEf,OADAn4C,KAAKm6B,gBAAkBge,EAChBn4C,IACX,CAEAk6B,qBACI,OAAOl6B,KAAKm6B,eAChB,CAEAC,uBACI,OAAO12B,EAAQ1D,KAAKm6B,gBAAiB,oBAAqB,iDAC9D,EC9QG,MAAMz3B,WAAakzC,GAGXl0C,sBACP,OAAOG,EAASa,IACpB,CAEA6C,mBAAmBqwB,EAAKgE,EAAMzB,GAC1B,MAAM3nB,EAAUopB,EAAK9oB,aACfkoC,EAASpf,EAAKmf,eAAiBvoC,EAAQyqB,UAAYzqB,EAAQyoC,oBAC3DC,EAAQtf,EAAKmf,eAAiBvoC,EAAQyoC,oBACtCE,EAAOvf,EAAKmf,eACZK,EAASxf,EAAKmf,eAAiBvoC,EAAQ6oC,OACvCC,EAAS1f,EAAKmf,eAAiBvoC,EAAQ6oC,OAAS7oC,EAAQ+oC,qBACxDC,EAAO5f,EAAKmf,eAAiBvoC,EAAQ6oC,OAAS7oC,EAAQ+oC,qBAAuB/oC,EAAQ0qB,WACrFue,EAAgBD,GAAQ5f,EAAKmd,sBAAsBR,QAAQjd,OAAS,GACpEogB,EAASF,EAAOR,EACtBpjB,EAAI5gB,OACJ4gB,EAAI7e,QAAQrJ,EAAKe,WAAY,GAC7BmnB,EAAIyc,SAASptC,KAAK8vB,MAAM2kB,GAAU,KAAMV,EAASpf,EAAKtC,YAAaa,GACnE,MAAMrvB,EAAIqvB,EAAO,EACjB,SAASvJ,EAAO1kB,EAAIG,EAAIorC,EAAOkE,EAAK7wC,GAChC8sB,EAAIQ,YACJR,EAAIpgB,eAAeigC,GACnB7f,EAAItgB,aAAamgC,GACjB7f,EAAIlgB,aAAa,GACjBkgB,EAAIS,OAAOnsB,EAAK0vB,EAAKtC,YAAaqiB,GAClC/jB,EAAIU,OAAOjsB,EAAKuvB,EAAKtC,YAAaqiB,GAClC/jB,EAAIhH,QACR,CACAA,EAAOoqB,EAAQE,EAAO,OACtBtqB,EAAOsqB,EAAOC,EAAM,QACpBvqB,EAAOuqB,EAAMC,EAAQ,SACrBxqB,EAAOwqB,EAAQE,EAAQ,QACvB1qB,EAAO0qB,EAAQE,EAAM,OACrB5qB,EAAO4qB,EAAMC,EAAe,QAC5B7qB,EAAOoqB,EAASpf,EAAKtC,YAAa0hB,EAAQ,QAC1CxD,GAAQ5f,EAAKujB,EAAOvf,EAAKtC,YAAaxuB,EAAG,QACzC,MAAMwtC,EAAmB1c,EAAKmd,sBAC9B,GAAIT,EAAiBE,WAAa,EAAG,CACjC,MAAMoD,EAAiBtD,EAAiBG,MAAMG,UACxC9xC,EAAS80C,GAAkB,EAAI,IAAM,GAC3ChkB,EAAItgB,aAAa,OACjBsgB,EAAIyc,SAASvtC,EAASG,KAAK8vB,MAAM6kB,GAAiBT,EAAOvf,EAAKtC,YAAaa,EAAO,GACtF,CACAvC,EAAIhgB,SACR,CACArQ,qBAAqBs0C,GACjB,IAAKA,EACD,OAEJ,MACMzsC,EADS,mCACOizB,KAAKwZ,GAC3B,IAAKzsC,EACD,OAKJ,MAAO,CAAEmhB,SAHQnhB,EAAO,GAGL0sC,KAFN1sC,EAAO,GAAGxH,OAEEqM,KADZ7E,EAAO,IAAM,IAE9B,CACA7H,uBAAuBw0C,GAEnB,MAAMC,EAAgBt3C,GAAKu3C,cAAcF,EAAWxrB,UACpD,IAAKyrB,EACD,OAGJ,IAAI/nC,EAAO8nC,EAAW9nC,KACtB,GAAIA,IAAS+b,EAAOoE,WAAWngB,GAC3B,OAGJ,MAAMioC,EAAc,GACfjoC,IACDA,EAAO+nC,EAAc/nC,MAAQ,SAELrO,IAApBm2C,EAAWzmC,MACXymC,EAAWzmC,KAAKsB,SAAQ,CAACpB,EAAG9K,KACxB,MAAM0E,EAASoG,EAAE7K,MAAM,KAEvBuxC,EAAYxxC,GAAM0E,GAA4B,IAAlBA,EAAOxH,OAAewH,EAAO,GAAK6E,CAAK,KAK/E,IAAIme,EAAQpC,EAAOmsB,gBAAgBH,EAAczrB,UACjD,IAAK6B,EACD,OAGJ,MAAM0pB,EAAOC,EAAWD,KAAOC,EAAWD,KAAOE,EAAcF,KAC/D,GAAoB,iBAATA,EACP,OAGJ,IAAIM,EAAehqB,EACnB,IAAK,IAAI1nB,EAAI,EAAGA,EAAIoxC,EAAMpxC,IAAK,CAC3B,GAAI0xC,GAAgB,EAChB,OACJA,GAA8B,EAC9BhqB,GAASgqB,CACb,CACA,MAAO,CACH7rB,SAAUyrB,EAAczrB,SACxBtc,OACAioC,cACAJ,OACA1pB,QAER,CAOA3uB,YAAYs4C,GAER,GADAx2C,SACKw2C,EACD,MAAM,IAAI52C,EAAa,eAAgB,2EAG3C,MAAMk3C,EAAmB33C,GAAK43C,gBAAgBP,GAC9C,IAAKM,EACD,MAAM,IAAIl3C,EAAa,eAAgB,uCAAuCo3C,KAAKC,UAAUT,MAGjG/5C,KAAKsT,KAAOymC,EAAWzmC,MAAQ,GAE/BtT,KAAKy6C,SAAW,GAChBz6C,KAAKuuB,SAAW8rB,EAAiB9rB,SACjCvuB,KAAK06C,SAAWL,EAAiBpoC,KACjCjS,KAAKk6C,YAAcG,EAAiBH,YAChCH,EAAWY,kBAEX36C,KAAK84C,YAAYiB,EAAWY,mBAI5B36C,KAAK44C,kBAAkByB,EAAiBjqB,OAE5CpwB,KAAKi2C,UAAY,GAEjBj2C,KAAK46C,WAAa5sB,EAAO0hB,cAAc1vC,KAAKuuB,SAAUvuB,KAAK06C,UAC3D16C,KAAK66C,aAAe76C,KAAKk6C,YAAY3mC,KAAK7N,GAAMsoB,EAAO0hB,cAAc1vC,KAAKuuB,SAAU7oB,KAEpF1F,KAAK86C,cAAWl3C,EAEhB5D,KAAKq2C,cAAe,EAEpBr2C,KAAKyK,MAAQ,EACbzK,KAAKi5C,oBAAsB,EAC3Bj5C,KAAKu5C,qBAAuB,EAC5Bv5C,KAAKw0B,QAAU,EACfx0B,KAAK0qC,GAAK,GAENqP,EAAW5D,cACXn2C,KAAKo3C,mBAAmB2C,EAAW5D,cAGvCn2C,KAAK8nC,eAAiB,CAClBiT,mBAAoB,EACpBC,iBAAkB,EAClBC,UAAW,EACX5rB,MAAO,EACPvgB,KAAM,GACN2lB,QAAS,EAEjB,CAKAymB,cACI,OAAOl7C,KAAK86C,QAChB,CAKAK,YAAYvhB,GAER,OADA55B,KAAK86C,SAAWlhB,EACT55B,IACX,CAOAmnC,SACI,OAAO,CACX,CAEAiU,UAAU9oC,EAAOsc,GAKb,OAJAA,EAAOkL,QAAQ95B,MACf4uB,EAAOqL,SAAS3nB,GAChBtS,KAAKi2C,UAAUxhC,KAAKma,GACpB5uB,KAAKw4C,cAAe,EACbx4C,IACX,CAEA+6B,WACI,OAAO/6B,KAAKq3B,KAChB,CAEAe,aACI,OAAO10B,EAAQ1D,KAAKq3B,MAAO,UAAW,iCAC1C,CAEAD,SAASC,GAIL,OAHAr3B,KAAKq3B,MAAQA,EACbr3B,KAAKq7C,MAAM,CAAChkB,EAAMmM,YAAY,KAC9BxjC,KAAK8W,WAAW9W,KAAKq3B,MAAMxgB,cACpB7W,IACX,CAEAqjC,yBACI,OAAOrjC,KAAKi5C,mBAChB,CAEAqC,0BACI,OAAOt7C,KAAKu5C,oBAChB,CAEAgC,uBAAuB53C,GAEnB,OADA3D,KAAKi5C,oBAAsBt1C,EACpB3D,IACX,CAEAw7C,wBAAwB73C,GAEpB,OADA3D,KAAKu5C,qBAAuB51C,EACrB3D,IACX,CAEA0mC,oBACI,OAAO1mC,KAAKq2C,YAChB,CAGA7F,cAAciL,GACV,OAAO,CACX,CAEAC,iBACI,OAAO,CACX,CAKAC,WACI,OAAO37C,KAAK46C,UAChB,CAEAlL,gBACI,OAAO1vC,KAAK46C,UAChB,CAEAgB,gBACI,OAAO57C,KAAK46C,WAAWhrB,SAAS5vB,KAAK8nC,eAAekT,iBACxD,CAKAK,MAAM3Q,GAEF,OADA1qC,KAAK0qC,GAAKA,EACH1qC,IACX,CAKA8xC,QACI,GAAuB,IAAnB9xC,KAAK0qC,GAAG9kC,OACR,MAAM,IAAIzC,EAAa,YAAa,yCAExC,OAAOnD,KAAK0qC,EAChB,CAKAsH,eAAexY,GACX,OAAOx5B,KAAKo4B,aAAa4Z,eAAexY,EAC5C,CAEA6d,WACI,IAAKr3C,KAAKumC,MACN,MAAM,IAAIpjC,EAAa,UAAW,sBACtC,OAAOnD,KAAKumC,KAChB,CAEA+Q,SAAS/Q,GAGL,OAFAvmC,KAAKumC,MAAQA,EACbvmC,KAAKw4C,cAAe,EACbx4C,IACX,CAEA86B,iBACI,OAAO96B,KAAK82C,kBAChB,CAEAuB,eAAeC,GAGX,OAFAt4C,KAAK66B,YAAcyd,EACnBt4C,KAAKw4C,cAAe,EACbx4C,IACX,CAEA67C,cACI,OAAO77C,KAAKuuB,QAChB,CAEAutB,WACI,OAAO97C,KAAK+7C,mBAAmBl6C,EAASO,KAAKwD,OAAS,CAC1D,CAEAiqC,UACI,OAAO,CACX,CAEAK,cACI,OAAOlwC,KAAK06C,QAChB,CAEAsB,UACI,OAAOh8C,KAAKi8C,IAChB,CAEAC,YACI,OAAOx4C,EAAQ1D,KAAKi8C,KAAM,SAAU,+BACxC,CAEAE,UACI,OAAoBv4C,MAAb5D,KAAKi8C,IAChB,CAEAG,QAAQH,GAEJ,OADAj8C,KAAKi8C,KAAOA,EACLj8C,IACX,CAOA4nC,YAAYD,EAAUr1B,EAAQ,GAC1B,MAAM+pC,EAAY,wDASlB,GAPqB,iBAAV/pC,IACPA,EAAQzN,SAASyN,GAEjBlO,QAAQC,KAAKg4C,EAAY,2DAIL,iBAAb1U,GAA0C,iBAAVr1B,EACvC,MAAM,IAAInP,EAAa,cAAe,iCAAmCk5C,EAAY,aAKzF,OAHA1U,EAAS7N,QAAQ95B,MACjB2nC,EAAS1N,SAAS3nB,GAClB/O,MAAMqkC,YAAYD,GACX3nC,IACX,CAEA+7C,mBAAmB9pC,GACf,OAAOjS,KAAKi2C,UAAUqG,QAAQ3U,GAAaA,EAASvzB,gBAAkBnC,GAC1E,CAGAy2B,mBAAmBjV,EAAUnhB,EAAO+b,GAChC,IAAKruB,KAAKw4C,aACN,MAAM,IAAIr1C,EAAa,kBAAmB,wDAE9C,MAAO,CACHQ,EAAG3D,KAAK+4C,eACRjwC,EAAG9I,KAAK0qC,GAAG,GAEnB,CACA6R,sBAAsBjqC,GAElB,OADctS,KAAKojC,cAAc9wB,GACpB2c,UAAYjvB,KAAKs7C,0BAA4B,CAC9D,CACAkB,qBAAqBlqC,GAEjB,OADctS,KAAKojC,cAAc9wB,GACpB2c,UAAYjvB,KAAKqjC,yBAA2BrjC,KAAKw0B,SAAWx0B,KAAKw0B,OAClF,CACAioB,gBACI,IAAIhrC,EAAKzR,KAAKs7C,0BAGd,OAFqE,IAAjEt7C,KAAKo6B,uBAAuBsiB,WAAW,eAAe92C,SACtD6L,GAAMuc,EAAO0U,mBAAmBtxB,aAAa,8BAC1CK,CACX,CAEAX,aACI,IAAK9Q,KAAKw4C,aACN,MAAM,IAAIr1C,EAAa,kBAAmB,iDAE9C,MAAM83B,EAAYj7B,KAAKm6B,gBAAkBn6B,KAAKm6B,gBAAgBwiB,WAAW9Z,WAAa,EAChF3H,EAAal7B,KAAKm6B,gBAAkBn6B,KAAKm6B,gBAAgBwiB,WAAW5L,YAAc,EAClFtmC,EAAQzK,KAAK4vB,WAQnB,MAAO,CACHnlB,QACAglC,WATezvC,KAAK47C,gBAUpBvC,OATW5uC,EACXwwB,EACAC,EACAl7B,KAAKi5C,oBACLj5C,KAAKu5C,qBAOLte,YACAC,aAEA+d,oBAAqBj5C,KAAKi5C,oBAC1BM,qBAAsBv5C,KAAKu5C,qBAC3BqD,QAAS,EAEjB,CAMA7D,eAGI,IAAIp1C,EAFgB3D,KAAK82C,iBAAiB,+CAEtB7tC,OAOpB,OANIjJ,KAAKq3B,QACL1zB,GAAK3D,KAAKq3B,MAAMwlB,gBAAkB7uB,EAAO0U,mBAAmBtxB,aAAa,kBAEzEpR,KAAKi3C,oBACLtzC,GAAK3D,KAAKg3C,mBAEPrzC,CACX,CAEA4B,gBAAgB6I,GAEZ,MAAe,WAARA,EAAoB4f,EAAOyC,oBAAuBzC,EAAOyC,oBAAsB,EAAK,CAC/F,CAEAqf,mBACI,MAAM,IAAI3sC,EAAa,SAAU,iCACrC,CAEAivC,iBACI,MAAM,IAAIjvC,EAAa,SAAU,iCACrC,CAEA25C,eACI,IAAIC,EAAY/8C,KAAK+4C,eAIrB,OAFAgE,GADyB/8C,KAAK46C,WAAWhrB,WACT,EAChCmtB,IAAc/8C,KAAKyK,MAAQ,EAAIzK,KAAKyK,MAAQ,EACrCsyC,CACX,CAEAC,cACI,IAAIC,EAAUj9C,KAAK+4C,eAInB,OAFAkE,GADyBj9C,KAAK46C,WAAWhrB,WACX,EAC9BqtB,GAAWj9C,KAAKyK,MAAQ,EAAI,EACrBwyC,CACX,CAEAC,UACI,OAAOl9C,KAAKsT,IAChB,CAEA8vB,cACI,OAAOpjC,KAAKy6C,QAChB,ECveG,IAAI0C,GCDAC,GCiBAC,GAOAC,GAKAC,GAMAC,IFjCX,SAAWL,GACPA,EAAsBA,EAA8B,OAAI,GAAK,SAC7DA,EAAsBA,EAA4B,KAAI,GAAK,OAC3DA,EAAsBA,EAA6B,MAAI,GAAK,QAC5DA,EAAsBA,EAA6B,MAAI,GAAK,QAC5DA,EAAsBA,EAA6B,MAAI,GAAK,QAC5DA,EAAsBA,EAA6B,MAAI,GAAK,QAC5DA,EAAsBA,EAA2B,IAAI,GAAK,KAC7D,CARD,CAQGA,KAA0BA,GAAwB,CAAC,IAC/C,MAAMM,WAAsB1pC,EACpBrS,sBACP,OAAOG,EAAS47C,aACpB,CACW7kB,sBACP,OAAOukB,EACX,CACA17C,cACI8B,QACAvD,KAAKyK,MAAQ,EACbzK,KAAK2D,EAAI,EACT3D,KAAK60C,QAAU,GACf70C,KAAKyzB,SAAW0pB,GAAsBlkB,KAC1C,CACAqB,cACI,OAAOt6B,KAAKyzB,QAChB,CACA8G,YAAY9G,GAER,OADAzzB,KAAKyzB,SAAWA,EACTzzB,IACX,CACA+6B,WACI,OAAO/6B,KAAKq3B,KAChB,CACAe,aACI,OAAO10B,EAAQ1D,KAAKq3B,MAAO,UAAW,iCAC1C,CACAD,SAASC,GAEL,OADAr3B,KAAKq3B,MAAQA,EACNr3B,IACX,CACA4vB,WACI,OAAO5vB,KAAKyK,KAChB,CACAivB,SAASjvB,GAEL,OADAzK,KAAKyK,MAAQA,EACNzK,IACX,CACAiJ,OACI,OAAOjJ,KAAK2D,CAChB,CACA0F,KAAK1F,GAED,OADA3D,KAAK2D,EAAIA,EACF3D,IACX,CAUA09C,iBAAiBpuB,EAAO+H,EAAOrzB,EAAM25C,EAAc,GAC/CruB,EAAMmI,UAAUJ,EAAMmM,YAAYx/B,QAAmCA,EAAO,GAAKqzB,EAAMiB,gBAAkBqlB,EAC7G,CACAC,WAAWtrC,GACP,YAAiB1O,IAAV0O,GAAuBA,EAAQ,EAAI,EAAItS,KAAK60C,OACvD,CACAgJ,WAAWhJ,GAEP,OADA70C,KAAK60C,QAAUA,EACR70C,IACX,CACA89C,iBAAiBC,GAEb,OADA/9C,KAAK+9C,cAAgBA,EACd/9C,IACX,CACAg+C,mBACI,OAAOh+C,KAAK+9C,aAChB,CAEAhoC,QAAQhS,GAER,GCpFJ,SAAWq5C,GACPA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAiB,IAAI,GAAK,MACtCA,EAAYA,EAA0B,aAAI,GAAK,eAC/CA,EAAYA,EAAwB,WAAI,GAAK,aAC7CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAkB,KAAI,GAAK,MAC1C,CARD,CAQGA,KAAgBA,GAAc,CAAC,IAC3B,MAAMl7C,WAAgBu7C,GACd/7C,sBACP,OAAOG,EAASK,OACpB,CACW+P,kBACP,OAAOmrC,EACX,CACWa,wBACP,MAAO,CACHC,OAAQd,GAAYe,OACpBC,OAAQhB,GAAYiB,OACpBC,IAAKlB,GAAYmB,IACjBC,YAAapB,GAAYqB,aACzBC,UAAWtB,GAAYuB,WACvBC,WAAYxB,GAAYyB,YACxBC,KAAM1B,GAAY2B,KAE1B,CACAt9C,YAAYwQ,GACR1O,QACAvD,KAAKg/C,UAAYhxB,EAAO8C,qBACxB,MAAMmuB,EAAO7B,GACbp9C,KAAKk/C,OAAS,CAAC,EACfl/C,KAAKk/C,OAAOD,EAAKd,QAAU,EAC3Bn+C,KAAKk/C,OAAOD,EAAKZ,QAAU,EAC3Br+C,KAAKk/C,OAAOD,EAAKV,KAAO,EACxBv+C,KAAKk/C,OAAOD,EAAKR,cAAgB,EACjCz+C,KAAKk/C,OAAOD,EAAKN,YAAc,EAC/B3+C,KAAKk/C,OAAOD,EAAKJ,aAAe,EAChC7+C,KAAKk/C,OAAOD,EAAKF,MAAQ,EACzB/+C,KAAKm/C,SAAW,CAAC,EACjBn/C,KAAKm/C,SAASF,EAAKd,QAAU,EAC7Bn+C,KAAKm/C,SAASF,EAAKZ,QAAU,EAC7Br+C,KAAKm/C,SAASF,EAAKV,KAAO,EAC1Bv+C,KAAKm/C,SAASF,EAAKR,cAAgB,GACnCz+C,KAAKm/C,SAASF,EAAKN,YAAc,GACjC3+C,KAAKm/C,SAASF,EAAKJ,aAAe,GAClC7+C,KAAKm/C,SAASF,EAAKF,MAAQ,EAC3B/+C,KAAKo/C,iBAAmB,CAAC,EACzBp/C,KAAKo/C,iBAAiBH,EAAKd,QAAU,CACjCkB,KAAM,EACNC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElBx/C,KAAKo/C,iBAAiBH,EAAKZ,QAAU,CACjCgB,MAAO,EACPC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElBx/C,KAAKo/C,iBAAiBH,EAAKV,KAAO,CAC9Bc,MAAO,EACPC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElBx/C,KAAKo/C,iBAAiBH,EAAKN,YAAc,CACrCU,MAAO,GACPC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElBx/C,KAAKo/C,iBAAiBH,EAAKR,cAAgB,CACvCY,MAAO,EACPC,KAAM,GACNC,YAAa,EACbC,aAAc,GAElBx/C,KAAKo/C,iBAAiBH,EAAKJ,aAAe,CACtCQ,MAAO,GACPC,KAAM,GACNC,YAAa,EACbC,aAAc,GAElBx/C,KAAKo/C,iBAAiBH,EAAKF,MAAQ,CAC/BM,KAAM,EACNC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElBx/C,KAAKu6B,YAAY4iB,GAAsBsC,OACvCz/C,KAAK0/C,QAAQztC,EACjB,CACA0tC,UACI,OAAO3/C,KAAKiS,IAChB,CACAytC,QAAQztC,GAKJ,OAJAjS,KAAKiS,KAAuB,iBAATA,EAAoB/P,GAAQ+7C,WAAWhsC,GAAQA,EAClEjS,KAAK05B,SAAS15B,KAAKk/C,OAAOl/C,KAAKiS,OAC/BjS,KAAK69C,WAAW79C,KAAKm/C,SAASn/C,KAAKiS,OACnCjS,KAAK89C,iBAAiB99C,KAAKo/C,iBAAiBp/C,KAAKiS,OAC1CjS,IACX,CAEA+V,KAAKshB,GACD,MAAMzB,EAAMyB,EAAMvhB,eAIlB,OAHA9V,KAAKsW,cACLtW,KAAK8U,WAAW8gB,GAChBA,EAAI8V,UAAU,eAAgB1rC,KAAK6S,aAAa,OACxC7S,KAAKiS,MACT,KAAKmrC,GAAYe,OACbn+C,KAAK4/C,gBAAgBvoB,EAAOr3B,KAAK2D,GAAG,GACpC,MACJ,KAAKy5C,GAAYiB,OACbr+C,KAAK4/C,gBAAgBvoB,EAAOr3B,KAAK2D,GAAG,GACpC,MACJ,KAAKy5C,GAAYmB,IACbv+C,KAAK6/C,mBAAmBxoB,EAAOr3B,KAAK2D,GACpC,MACJ,KAAKy5C,GAAYqB,aAGbz+C,KAAK8/C,cAAczoB,EAAOr3B,KAAK2D,GAAG,GAC9B0zB,EAAMpuB,SAAWjJ,KAAK2D,GACtB3D,KAAK4/C,gBAAgBvoB,EAAOA,EAAMpuB,QAEtC,MACJ,KAAKm0C,GAAYuB,WACb3+C,KAAK8/C,cAAczoB,EAAOr3B,KAAK2D,GAAG,GAClC,MACJ,KAAKy5C,GAAYyB,YACb7+C,KAAK8/C,cAAczoB,EAAOr3B,KAAK2D,GAAG,GAClC3D,KAAK8/C,cAAczoB,EAAOr3B,KAAK2D,GAAG,GAM1CiyB,EAAIgW,aACJ5rC,KAAK2V,aAAaigB,EACtB,CACAgqB,gBAAgBvoB,EAAO1zB,EAAGo8C,GACtB,MAAMC,EAAW3oB,EAAMvhB,eACjBi1B,EAAO1T,EAAM6a,iBACb+N,EAAO5oB,EAAM6oB,uBACfH,GACAC,EAASG,SAASx8C,EAAI,EAAGonC,EAAM,EAAGkV,EAAOlV,GAE7CiV,EAASG,SAASx8C,EAAGonC,EAAM,EAAGkV,EAAOlV,EACzC,CACA8U,mBAAmBxoB,EAAO1zB,GACtB,MAAMq8C,EAAW3oB,EAAMvhB,eACjBi1B,EAAO1T,EAAM6a,iBACb+N,EAAO5oB,EAAM6oB,uBACnBF,EAASG,SAASx8C,EAAI,EAAGonC,EAAM,EAAGkV,EAAOlV,GACzCiV,EAASG,SAASx8C,EAAI,EAAGonC,EAAM,EAAGkV,EAAOlV,EAC7C,CACA+U,cAAczoB,EAAO1zB,EAAGy8C,GACpB,MAAMJ,EAAW3oB,EAAMvhB,eACjBi1B,EAAO1T,EAAM6a,iBACb+N,EAAO5oB,EAAM6oB,uBACnB,IAAI1rB,EAAU,EACT4rB,IACD5rB,GAAW,GAEfwrB,EAASG,SAASx8C,EAAI6wB,EAASuW,EAAM,EAAGkV,EAAOlV,GAC/CiV,EAASG,SAASx8C,EAAI,EAAGonC,EAAM,EAAGkV,EAAOlV,GAGrCqV,EACA5rB,GAAW,EAGXA,GAAW,EAEf,MAAM6rB,EAAQ18C,EAAI6wB,EAAU8rB,EAE5B,IAAI/V,GAAYlT,EAAM8Y,cAAgB,GAAK9Y,EAAMkM,yBACjDgH,EAAWA,EAAW,EAAIlT,EAAMkM,yBAA2B,EAC3D,IAAIgd,EAAQxV,EAAOR,EAAW+V,EAE9BN,EAAS5pB,YACT4pB,EAAStK,IAAI2K,EAAOE,EAfD,EAeoB,EAAa,EAAVt7C,KAAKC,IAAQ,GACvD86C,EAASvpB,OAET8pB,GAASlpB,EAAMkM,yBACfyc,EAAS5pB,YACT4pB,EAAStK,IAAI2K,EAAOE,EApBD,EAoBoB,EAAa,EAAVt7C,KAAKC,IAAQ,GACvD86C,EAASvpB,MACb,EElLJ,MAAM+pB,WAAgB99C,GACPhB,sBACP,OAAOG,EAAS2+C,OACpB,CACA/+C,YAAYwQ,EAAOmrC,GAAYe,QAC3B56C,MAAM,CAAEgrB,SAAU,MAClBvuB,KAAKwQ,QAAU,CACX0uC,OAAQ,CAAC,GAEb,MAAMD,EAAO7B,GACbp9C,KAAKwQ,QAAQ0uC,OAAS,CAClB,CAACD,EAAKd,QAAS,EACf,CAACc,EAAKZ,QAAS,GACf,CAACY,EAAKV,KAAM,GACZ,CAACU,EAAKR,cAAe,GACrB,CAACQ,EAAKN,YAAa,GACnB,CAACM,EAAKJ,aAAc,GACpB,CAACI,EAAKF,MAAO,GAGjB/+C,KAAKq2C,cAAe,EACpBr2C,KAAK0/C,QAAQztC,EACjB,CAEA0tC,UACI,OAAO3/C,KAAKiS,IAChB,CAEAytC,QAAQztC,GAIJ,OAHAjS,KAAKiS,KAAuB,iBAATA,EAAoB/P,GAAQ+7C,WAAWhsC,GAAQA,EAElEjS,KAAK05B,SAAS15B,KAAKwQ,QAAQ0uC,OAAOl/C,KAAKiS,OAChCjS,IACX,CAGAk4C,qBAAqBC,GAEjB,OAAOn4C,IACX,CAEAu4C,YAEI,OADAv4C,KAAKw4C,cAAe,EACbx4C,IACX,CAEA+V,OACI,MAAM6f,EAAM51B,KAAK8V,gBA1DzB,YAAc/R,GACNy8C,GAAQje,OACR1+B,EAAI,mBAAoBE,EAChC,CAwDQ,CAAE,0BAA2B/D,KAAK+4C,gBAClC/4C,KAAK8U,WAAW8gB,GAChB,MAAM6qB,EAAU,IAAIv+C,GAAQlC,KAAKiS,MACjCwuC,EAAQp3C,KAAKrJ,KAAK+4C,gBAClB0H,EAAQ1qC,KAAK/V,KAAKo4B,cAClBp4B,KAAK2V,aAAaigB,GAClB51B,KAAKsW,aACT,EAGJkqC,GAAQje,OAAQ,ECpEhB,MAAMme,WAAa/nB,GACJj3B,sBACP,OAAOG,EAAS6+C,IACpB,CACW5X,gBACP,OAAO,CACX,CACWC,kBACP,OAAO,CACX,CAEAxjC,cAAco7C,EAAOne,GACjB,IAAKme,GAA0B,IAAjBA,EAAM/6C,OAChB,OAAO,EACX,IAAIg7C,EAAa,EAEjB,IAAK,IAAIl4C,EAAI,EAAGA,EAAIi4C,EAAM/6C,SAAU8C,EAAG,CACnC,MAAMglB,EAAOizB,EAAMj4C,GACbkxB,EAAOlM,EAAKmM,oBAClB,GAAI52B,EAAU22B,GAAO,CACjB,MAAMinB,EAAYjnB,EAAK6W,cAAgB,EACnCjO,EAAMkO,cAAgBmQ,IACtBre,EAAMkO,cAAgBmQ,EAE9B,CACAnzB,EAAK6J,UAAUqpB,GACfA,EAAalzB,EAAKkC,WAClBlC,EAAK8M,YAAYgI,EAAMkO,cAC3B,CAGA,OAFAlO,EAAMuO,aAAe6P,EACrBpe,EAAMkO,eAAiB,GAChB,CACX,CAkCAjvC,YAAYsD,EAAM+7C,GAAU,EAAOC,GAC/Bx9C,QACAvD,KAAK+E,KAAOA,EACZ/E,KAAKw0B,QAAU,EACfx0B,KAAK8gD,QAAUA,EACf9gD,KAAKghD,IAAM,GACXhhD,KAAK2X,YACL3X,KAAK8nC,eAAiB,CAClBmZ,WAAY,IACZC,WAAY,UACZC,WAAY,EACZC,cAAe,GAEfL,EACA/gD,KAAK+gD,OAASA,GAId/gD,KAAK+gD,OAAS,CAAC,CAAE9uC,KAAMyuC,GAAK5X,GAAI/jC,KAAM/E,KAAK+E,OACvC/E,KAAK8gD,SACL9gD,KAAK+gD,OAAOtsC,KAAK,CAAExC,KAAMyuC,GAAK3X,KAAMhkC,KAAM,MAElD/E,KAAKqhD,aACT,CAEA9pB,UAAUn2B,GAGN,OAFApB,KAAKw0B,QAAUpzB,EACfpB,KAAKqhD,cACErhD,IACX,CACAshD,OAAOlgD,GAEH,OADApB,KAAKghD,IAAM5/C,EACJpB,IACX,CAEAuhD,UACI,OAAOvhD,KAAK+E,IAChB,CACAy8C,gBAEI,OADsB3V,GAAc0D,OAAOvvC,KAAKiX,UAC3B62B,SACzB,CAEAuT,cACI,MAAM/R,EAAgBzD,GAAc0D,OAAOvvC,KAAKiX,UAIhD,IAAIwqC,EAAa,EACjB,IAAK,IAAI/4C,EAAI,EAAGA,EAAI1I,KAAK+gD,OAAOn7C,SAAU8C,EAAG,CACzC,MAAMglB,EAAO1tB,KAAK+gD,OAAOr4C,GACzB,QAAmB9E,IAAf8pB,EAAKjjB,MACLg3C,GAAc/zB,EAAKjjB,UAElB,CACD,MAAMi3C,EAAmBh0B,EAAKzb,OAASyuC,GAAK5X,GAAK9oC,KAAK8nC,eAAeqZ,WAAanhD,KAAK8nC,eAAesZ,cACtG1zB,EAAKjjB,MAAQxF,KAAK8E,IAAI23C,GAXT38C,EAWuC2oB,EAAK3oB,KAVtDuqC,EAAcV,oBAAoB7pC,KAU6B,EAClE2oB,EAAKi0B,WAAaj0B,EAAKjjB,MAAQ,EAC/Bg3C,GAAc/zB,EAAKjjB,KACvB,CACJ,CAfoB,IAAC1F,EAiBrB,OADA/E,KAAK05B,SAAS+nB,EAAazhD,KAAKw0B,SACzBx0B,IACX,CAEA+V,OACI,IAAIlI,EACJ,MAAM+nB,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cACL,MAAMmyB,EAAQ7O,EAAK8O,mBAAmB/P,GAASC,SAASW,MAAOv5B,KAAKsS,OACpEm2B,EAAM9kC,GAAK,EACX8kC,EAAM3/B,GAAK,GACX,MAAM0rB,EAAUx0B,KAAKw0B,QAEfmd,EADQ/X,EAAKxB,aACGmL,yBAChBqe,EAAUhoB,EAAKkY,QAAQzsC,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IAErDm9C,EAAcpZ,EAAM3/B,IAAM9I,KAAKw5B,UAAY,GAAKmY,EAAUlJ,EAAM3/B,EAAI84C,GAAW,EAC/EE,EAAerZ,EAAM3/B,IAAM9I,KAAKw5B,UAAY,GAAKmY,EAAUlJ,EAAM3/B,EAAI84C,GAAW,EAChFG,EAAa,CAACp+C,EAAGmF,EAAG2B,EAAOC,KAC7B,MAAMs3C,EAAOr+C,EAAI8G,EACXw3C,EAAOn5C,EACb8sB,EAAI5gB,OACJ4gB,EAAIQ,YACJR,EAAIlgB,aAAa1V,KAAK8nC,eAAemZ,YACrCrrB,EAAIpgB,eAAexV,KAAK8nC,eAAeoZ,YACvCtrB,EAAItgB,aAAatV,KAAK8nC,eAAeoZ,YACrCtrB,EAAIS,OAAO1yB,EAAGmF,GACd8sB,EAAIW,iBAAiByrB,EAAMC,EAAMt+C,EAAI8G,EAAOC,GAC5CkrB,EAAIhH,SACJgH,EAAIhgB,SAAS,EAEXssC,EAAgB,CAACv+C,EAAGmF,EAAG2B,EAAOC,KAChCkrB,EAAI5gB,OACJ4gB,EAAIQ,YACJR,EAAIlgB,aAAa1V,KAAK8nC,eAAemZ,YACrCrrB,EAAIpgB,eAAexV,KAAK8nC,eAAeoZ,YACvCtrB,EAAItgB,aAAatV,KAAK8nC,eAAeoZ,YACrCtrB,EAAIS,OAAO1yB,EAAG+G,GACdkrB,EAAIW,iBAAiB5yB,EAAI8G,EAAOC,EAAQ/G,EAAI8G,EAAO3B,GACnD8sB,EAAIhH,SACJgH,EAAIhgB,SAAS,EAEXusC,EAAkB,CAACx+C,EAAGmF,EAAGi4B,KAC3B,MACMqhB,EAAQt5C,EADA,EACYi4B,EAC1BnL,EAAIQ,YACJR,EAAIS,OAAO1yB,EAAGmF,GACd8sB,EAAIU,OAAO3yB,EAJG,EAIQy+C,GACtBxsB,EAAIU,OAAO3yB,EALG,EAKQy+C,GACtBxsB,EAAI+f,YACJ/f,EAAIa,MAAM,EAER4rB,EAAa,CAAC1+C,EAAGoB,KACnB6wB,EAAI5gB,OACJ4gB,EAAI7e,QAAQ/W,KAAKiX,UACjB,MAAMqrC,EAAW3+C,EAAIiyB,EAAI2sB,YAAYx9C,GAAM0F,MAAQ,EACnDmrB,EAAIyc,SAASttC,EAAMu9C,EAAUR,GAC7BlsB,EAAIhgB,SAAS,EAEjB,IAAI4sC,EACAC,EAAuB,EACvBC,EAAmB,EACvB,GAAwB,QAAnB70C,EAAK7N,KAAKghD,WAAwB,IAAPnzC,OAAgB,EAASA,EAAGjI,OAAQ,CAEhEy8C,EADiBzoB,EAAK8O,mBAAmB/P,GAASC,SAASG,OAAQ/4B,KAAKsS,OACpD3O,EAAG3D,KAAKghD,IAChC,CACA,IAAK,IAAIt4C,EAAI,EAAGA,EAAI1I,KAAK+gD,OAAOn7C,SAAU8C,EAAG,CACzC,MAAMglB,EAAO1tB,KAAK+gD,OAAOr4C,GACpBglB,EAAKi0B,aACNj0B,EAAKi0B,WAAa,GACZ,IAANj5C,IACAglB,EAAKi0B,YAAcntB,GACvBkuB,EAAmBh1B,EAAKi0B,WAAac,GAA8B,IAAN/5C,EAAU8rB,EAAU,GAC7E9G,EAAKzb,OAASyuC,GAAK5X,KACf0Z,GAAaA,EAAUvwC,OAASyuC,GAAK5X,IACrCqZ,EAAgB1Z,EAAM9kC,EAAGk+C,EAAa,GAE1CE,EAAWtZ,EAAM9kC,EAAG8kC,EAAM3/B,EAAG45C,EAAkBb,IAE/Cn0B,EAAKzb,OAASyuC,GAAK3X,OACfyZ,GAAaA,EAAUvwC,OAASyuC,GAAK5X,IACrCoZ,EAAczZ,EAAM9kC,EAAG8kC,EAAM3/B,EAAG45C,EAAkBb,GAElDW,GAAaA,EAAUvwC,OAASyuC,GAAK3X,OACrCoZ,EAAgB1Z,EAAM9kC,EAAG8kC,EAAM3/B,GAAI,GACnCo5C,EAAczZ,EAAM9kC,EAAG8kC,EAAM3/B,EAAG45C,EAAkBb,IAEjDW,IACDE,EAAmBh1B,EAAKi0B,WACxBO,EAAczZ,EAAM9kC,EAAG8kC,EAAM3/B,EAAG45C,EAAkBb,KAG1DQ,EAAW5Z,EAAM9kC,EAAI++C,EAAkBh1B,EAAK3oB,MAC5Cy9C,EAAY90B,EACZ+0B,EAAuB/0B,EAAKi0B,WAC5Ba,EAAU7+C,EAAI8kC,EAAM9kC,EACpB8kC,EAAM9kC,GAAK++C,CACf,CACA,IAAKF,GAA4B5+C,MAAf4+C,EAAU7+C,EACxB,MAAM,IAAIR,EAAa,oBAAqB,mBAG5Cq/C,EAAUvwC,OAASyuC,GAAK5X,GACxBqZ,EAAgBK,EAAU7+C,EAAI++C,EAAkBb,EAAa,GAExDW,EAAUvwC,OAASyuC,GAAK3X,MAC7BoZ,EAAgBK,EAAU7+C,EAAI++C,EAAkBja,EAAM3/B,GAAI,EAElE,EFjOJ,SAAS,MAAK/E,GACN4+C,GAAYpgB,OACZ1+B,EAAI,uBAAwBE,EACpC,CEiOA28C,GAAKvpC,UAAY9W,OAAOmX,OAAO,CAAC,EAAGzD,EAAQoD,WF/N3C,SAAWkmC,GACPA,EAA6BA,EAAmC,KAAI,GAAK,OACzEA,EAA6BA,EAAqC,OAAI,GAAK,SAC3EA,EAA6BA,EAAoC,MAAI,GAAK,QAC1EA,EAA6BA,EAA0C,YAAI,GAAK,aACnF,CALD,CAKGA,KAAiCA,GAA+B,CAAC,IAEpE,SAAWC,GACPA,EAA2BA,EAAgC,IAAI,GAAK,MACpEA,EAA2BA,EAAmC,OAAI,GAAK,QAC1E,CAHD,CAGGA,KAA+BA,GAA6B,CAAC,IAEhE,SAAWC,GACPA,EAAYA,EAAmB,MAAI,GAAK,QACxCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAkB,KAAI,GAAK,MAC1C,CAJD,CAIGA,KAAgBA,GAAc,CAAC,IAElC,SAAWC,GACPA,EAAgBA,EAAsB,KAAI,GAAK,OAC/CA,EAAgBA,EAA2B,UAAI,GAAK,YACpDA,EAAgBA,EAA6B,YAAI,GAAK,aACzD,CAJD,CAIGA,KAAoBA,GAAkB,CAAC,IAK1C,MAAMmF,WAAoBhqB,GACXj3B,sBACP,OAAOG,EAAS8gD,WACpB,CACWC,2BACP,OAAOD,GAAYnyC,QAAQqyC,OAAOD,aACtC,CAEWE,0BAAeC,GACtBJ,GAAYK,SAAWD,CAC3B,CACWD,4BACP,OAAOH,GAAYK,QACvB,CACAz9C,yBAAyB09C,GACrB,GAAIN,GAAYnyC,QAAQW,OAAO8xC,GAC3B,OAAON,GAAYnyC,QAAQW,OAAO8xC,EAG1C,CACWC,qCACP,OAAOl1B,EAAO0U,mBAAmB1xB,eACrC,CACWmyC,kCACP,OAAOR,GAAYnyC,QAAQqyC,OAAOlR,QAAUgR,GAAYO,uBAC5D,CACA39C,wBAAwB+pB,GACpB,MAAM8zB,EAAST,GAAYU,kBAAkB/zB,EAAMjsB,MACnD,OAAK+/C,EAGEA,EAAOpV,aAAe2U,GAAYO,wBAF9B,GAGf,CACA39C,yBAAyB+pB,GACrB,MAAM8zB,EAAST,GAAYU,kBAAkB/zB,EAAMjsB,MACnD,OAAK+/C,EAGEA,EAAOE,QAAUX,GAAYO,wBAFzB,CAGf,CACA39C,yBAAyB+pB,GACrB,MAAM8zB,EAAST,GAAYU,kBAAkB/zB,EAAMjsB,MACnD,OAAK+/C,GAGI,EAAIA,EAAOG,gBAAmBZ,GAAYO,wBAFxC,CAGf,CACW9V,+BACP,OAAOuV,GAAYnyC,QAAQqyC,OAAOzV,kBAAoBuV,GAAYO,uBACtE,CACW7V,6BACP,OAAOsV,GAAYnyC,QAAQqyC,OAAOxV,gBAAkBsV,GAAYO,uBACpE,CACWM,2BACP,OAAOb,GAAYnyC,QAAQqyC,OAAOW,cAAgBb,GAAYO,uBAClE,CACW1yC,qBACP,MAAMizC,EAAcz1B,EAAO0U,mBAAmB5xB,aAAa2yC,YAC3D,IAAKA,EACD,MAAM,IAAItgD,EAAa,aAAc,uBACzC,OAAOsgD,CACX,CACWC,8BAIP,OAAOf,GAAYnyC,QAAQqyC,OAAOa,gBACtC,CACWC,8BACP,OAAOhB,GAAYnyC,QAAQqyC,OAAOc,gBACtC,CACAp+C,qBAAqBzB,GACjB,YAAgCF,IAAzBE,EAAM8/C,gBAAgC9/C,EAAM8/C,iBAAmBpG,GAAgBqG,WAC1F,CACAt+C,mBAAmBzB,GACf,YAAgCF,IAAzBE,EAAM8/C,gBAAgC9/C,EAAM8/C,iBAAmBpG,GAAgBsG,SAC1F,CACWC,wBAEP,OADkB/1B,EAAO0U,mBACRtxB,aAAa,sBAClC,CAKA7L,cAAcy+C,EAASxhB,GACnB,IAAI30B,EACJ,IAAKm2C,GAA8B,IAAnBA,EAAQp+C,OACpB,OAAO,EACX,IAAI6E,EAAQ,EACRw5C,EAAgB,EAChBhV,EAAY,EACZC,EAAa,EACbC,EAAoB,EACpBC,EAAqB,EACzB,IAAK,MAAM8U,KAAUF,EAAS,CAC1B,MAAMr2C,EAAWD,EAAKqK,wBAAmD,QAA1BlK,EAAKq2C,EAAOjtC,gBAA6B,IAAPpJ,OAAgB,EAASA,EAAGO,MACvG+1C,EAAUz2C,EAAK02C,UAAUz2C,EAAU,KACnC02C,EAAqB,EAAVF,EACXvqB,EAAOsqB,EAAOrqB,oBACpB,IAAIyqB,EAAc,EACdC,EAAa,EACbC,GAAS,EACb,IAAK,IAAIC,EAAI,EAAGA,EAAIP,EAAOQ,aAAa9+C,SAAU6+C,EAAG,CACjD,MAAM3gD,EAAQogD,EAAOQ,aAAaD,GAC5BE,EAAMhC,GAAYiC,cAAc9gD,GAChC+gD,EAAMlC,GAAYmC,YAAYhhD,GAC9BihD,EAAgBJ,GAAOE,EAAMlC,GAAYC,cAAgB,EACzDoC,EAAMlhD,EAAMmhD,aAAe1H,GAAY2H,MAAQb,EAAWU,EAAgBZ,EAAUY,GAGtFJ,GAAOE,KACPN,EAAa,GAIjB,MAAM52C,EAAWu2C,EAAO5U,cAAct3B,iBAChCmtC,EAAmBx3C,EAAWo3C,EAmBpC,GAlBIjhD,EAAMmhD,aAAe1H,GAAY2H,YAAyBthD,IAAhBE,EAAMwrB,OAChDxrB,EAAM2G,MAAQk4C,GAAYyC,iBAAiBthD,EAAMwrB,OAAS61B,EAC1DrhD,EAAMi0B,QAAU4qB,GAAY0C,kBAAkBvhD,EAAMwrB,OAAS61B,EAC7DrhD,EAAM+zB,QAAU8qB,GAAY2C,kBAAkBxhD,EAAMwrB,OAAS61B,EAC7DrhD,EAAMwrB,MAAMD,MAAQvrB,EAAMwrB,MAAMD,MAAQ21B,GAEnClhD,EAAMmhD,aAAe1H,GAAYgI,OACtCzhD,EAAM2G,MAAQ3G,EAAM2G,MAAQ06C,EAC5BrhD,EAAMi0B,QAAUmsB,EAAOsB,kBAAkB1hD,EAAMiB,MAAQigD,GAEvDlhD,EAAMmhD,aAAe1H,GAAY2H,YACjBthD,IAAhBE,EAAMwrB,OACNxrB,EAAMwrB,MAAMjsB,OAASs/C,GAAYxxC,OAAOs0C,KAAKpiD,OAC7CkhD,EAAa,GAEjBzgD,EAAM2G,OAASk4C,GAAYQ,qBAAuBx1C,EAAWo3C,EAGzDJ,GAAOF,EAAI,EAAG,CACd,MAAMiB,EAAOxB,EAAOQ,aAAaD,EAAI,GAChC9B,GAAYiC,cAAcc,KAC3BzB,EAAgBx5C,EAExB,CACIo6C,GAAOZ,EAAgB,IACvBO,GAAS,EAET1gD,EAAM+zB,OAAS/zB,EAAM+zB,QAAUosB,EAAgBx5C,GAC/CA,EAAQw5C,EACRA,EAAgB,EAEhBC,EAAOyB,kBAAiB,IAEvBhB,GAAQE,IACTZ,EAAgB,GAEpBngD,EAAM0gD,OAASA,EACf/5C,GAAS3G,EAAM2G,MACf65C,EAAc75C,CAClB,CAYA,GAVAy5C,EAAO0B,2BACP1B,EAAO2B,2BACH3B,EAAO4B,gBAAkBxI,GAA2BhN,KACpD4T,EAAO1pB,YAAYgI,EAAMkO,eACzBlO,EAAMkO,eAAiB6T,IAGvBL,EAAO1pB,YAAYgI,EAAMhJ,UAAY,GACrCgJ,EAAMhJ,WAAa+qB,EAAa,GAEhCL,EAAO6B,kBAAoBhjD,EAAgB62B,GAAO,CAClD,MAAM6V,EAAa7V,EAAK8V,gBAAgB9f,WACpCs0B,EAAO8B,kBAAoB3I,GAA6BhkB,MACxD8V,EAAoBlqC,KAAK8E,IAAI0lC,EAAYN,GACzCF,EAAYhqC,KAAK8E,IAAIklC,EAAWqV,GAAe3B,GAAYoB,YAEtDG,EAAO8B,kBAAoB3I,GAA6B9jB,OAC7D6V,EAAqBnqC,KAAK8E,IAAI0lC,EAAYL,GAC1CF,EAAajqC,KAAK8E,IAAImlC,EAAYoV,KAGlCrV,EAAYhqC,KAAK8E,IAAIklC,EAAWqV,EAAc,GAAK3B,GAAYoB,WAC/D7U,EAAajqC,KAAK8E,IAAImlC,EAAYoV,EAAc,GAChDnV,EAAoBlqC,KAAK8E,IAAI0lC,EAAa,EAAGN,GAC7CC,EAAqBnqC,KAAK8E,IAAI0lC,EAAa,EAAGL,GAEtD,CACA3kC,EAAQ,CACZ,CACA,MAAMqmC,EAAe7rC,KAAK4lC,IAAI5lC,KAAK8E,IAAImlC,EAAaE,EAAoB,GAAInqC,KAAK8E,IAAImlC,EAAa1M,EAAMuO,YAAa,IAC/GC,EAAc/rC,KAAK4lC,IAAI5lC,KAAK8E,IAAIklC,EAAYE,EAAmB,GAAIlqC,KAAK8E,IAAIklC,EAAYzM,EAAMK,WAAY,IAGhH,OAFAL,EAAMK,YAAcmO,EACpBxO,EAAMuO,aAAeD,GACd,CACX,CACArvC,cACI8B,QACAvD,KAAK0kD,aAAe,GACpB1kD,KAAKimD,WAAa5I,GAA6BhkB,KAC/Cr5B,KAAKkmD,SAAW5I,GAA2BhN,IAC3CtwC,KAAKmmD,YAAa,EAClBnmD,KAAKomD,aAAc,EACnBpmD,KAAK2X,WACT,CAMWR,uBACP,IAAI3I,EAAS,4BAKb,MAJ4C,aAAxCwf,EAAO0U,mBAAmB9xB,YAE1BpC,EAAS,qCAEN,CACHA,SACAJ,KAAM,GACNC,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUmC,OAEzB,CAII0+B,wBACA,OAAOuV,GAAYvV,kBAAoBptC,KAAKsvC,cAAct3B,gBAC9D,CACIq1B,sBACA,OAAOsV,GAAYtV,gBAAkBrtC,KAAKsvC,cAAct3B,gBAC5D,CACAquC,eAAejlD,GAEX,OADApB,KAAKomD,YAAchlD,EACZpB,IACX,CACA+lD,iBACI,OAAO/lD,KAAKomD,WAChB,CACAP,2BACI,MAAMS,EAAWtmD,KAAK0kD,aAAa6B,WAAU,EAAGtB,aAAY31B,WAAY21B,IAAe1H,GAAY2H,YAAmBthD,IAAV0rB,GAAsC,iCAAfA,EAAMjsB,OACzI,GAAIijD,EAAW,EACX,OAEJ,MACME,EADMxmD,KAAK0kD,aAAa4B,GACb77C,MAAQ,EACnBg8C,EAAO,IAAOzmD,KAAKsvC,cAAct3B,iBACvC,IAAI0uC,EAAW,EACf,KAAqBA,EAAWJ,IAAYI,EAAU,CAClD,MAAMxC,EAASlkD,KAAK0kD,aAAagC,GACjCxC,EAAOrsB,OAASqsB,EAAOrsB,OAAS2uB,EAChCtC,EAAOnsB,OAASmsB,EAAOnsB,OAAS0uB,CACpC,CACA,IAAKC,EAAWJ,EAAW,EAAGI,EAAW1mD,KAAK0kD,aAAa9+C,SAAU8gD,EAAU,CAC3E,MAAMxC,EAASlkD,KAAK0kD,aAAagC,GACjCxC,EAAOrsB,OAASqsB,EAAOrsB,OAAS2uB,EAChCtC,EAAOnsB,OAASmsB,EAAOnsB,OAAS0uB,CACpC,CACJ,CACAb,2BACI,IAAIe,EAAQ,EACZ,IAAK,IAAIlC,EAAI,EAAGA,EAAIzkD,KAAK0kD,aAAa9+C,SAAU6+C,EAAG,CAC/C,MAAMP,EAASlkD,KAAK0kD,aAAaD,GACjCkC,GAAS3mD,KAAK4mD,qBAAqBnC,GACnCP,EAAOrsB,QAAU8uB,CACrB,CACJ,CAEAC,qBAAqBnC,GACjB,IAAKzkD,KAAKmmD,WACN,OAAO,EAEX,MAAMU,EAAa7mD,KAAK0kD,aAAaD,GAC/BqC,EAAarC,EAAI,EAAIzkD,KAAK0kD,aAAaD,EAAI,QAAK7gD,EACtD,IAAImjD,EAAa,EAEbF,EAAW5B,aAAe1H,GAAY2H,YACjBthD,IAArBijD,EAAWv3B,OACXu3B,EAAWv3B,MAAMjsB,OAASs/C,GAAYxxC,OAAOs0C,KAAKpiD,OAClD0jD,GAAcF,EAAWv3B,MAAM9e,QAAQgkB,cAExB5wB,IAAfkjD,GACAA,EAAW7B,aAAe1H,GAAY2H,YACjBthD,IAArBkjD,EAAWx3B,OACXw3B,EAAWx3B,MAAMjsB,OAASs/C,GAAYxxC,OAAOs0C,KAAKpiD,OAClD0jD,GAAcD,EAAWx3B,MAAM9e,QAAQgkB,SAG3C,IAAIwyB,GAAe,EACfC,GAAe,OACArjD,IAAfkjD,GAA4BA,EAAW7B,aAAe1H,GAAYgI,OAClEyB,EAAerE,GAAYgB,iBAAiBuD,MAAMC,GAAOA,IAAOL,EAAW/hD,KAAK+hD,EAAW/hD,KAAKa,OAAS,KACzGqhD,EAAetE,GAAYe,iBAAiBwD,MAAMC,GAAOA,IAAOL,EAAW/hD,KAAK+hD,EAAW/hD,KAAKa,OAAS,MAE7G,MAAMwhD,EAAsBzE,GAAYa,cAAgBxjD,KAAKsvC,cAAct3B,iBAc3E,OAXIgvC,GAAgBH,EAAWjD,iBAAmBpG,GAAgBqG,cAC9DkD,GAAcK,GAEdH,GAAgBJ,EAAW5B,aAAe1H,GAAYgI,OAClDsB,EAAW9hD,KAAK,IAAM,KAAO8hD,EAAW9hD,KAAK,IAAM,MACnDgiD,GAAcK,EAAsB,GAEpCzE,GAAYgB,iBAAiBuD,MAAMC,GAAOA,KAAQL,aAA+C,EAASA,EAAW/hD,KAAK+hD,EAAW/hD,KAAKa,OAAS,QACnJmhD,GAAcK,EAAsB,IAGrCL,CACX,CAMAM,eAAej5B,EAAS,CAAC,GACrB,IAAIvgB,EAAIoF,EAAIq0C,EACZ,MAAMrC,EAA0C,QAA5Bp3C,EAAKugB,EAAO62B,kBAA+B,IAAPp3C,EAAgBA,EAAK0vC,GAAYgI,KACnFgC,EAAc,CAChBxiD,KAA6B,QAAtBkO,EAAKmb,EAAOrpB,YAAyB,IAAPkO,EAAgBA,EAAK,GAC1DgyC,aACArB,eAAiD,QAAhC0D,EAAKl5B,EAAOw1B,sBAAmC,IAAP0D,EAAgBA,EAAK9J,GAAgBuB,KAC9FlnB,OAAQ,EACRE,OAAQ,EACRysB,QAAQ,EACR/5C,MAAO,GAIX,GAAIw6C,IAAe1H,GAAY2H,OAAiC,iBAAjB92B,EAAOkB,MAAoB,CACtE,MAAMk4B,EAAY7E,GAAYxxC,OAAOid,EAAOkB,OACtCm4B,EAAc,GACpBF,EAAYj4B,MAAQ,IAAIG,EAAM+3B,EAAUnkD,KAAMokD,EAAa,CAAEnmD,SAAU,eAC3E,MACS2jD,IAAe1H,GAAYgI,KAChCgC,EAAY98C,MAAQzK,KAAKsvC,cAAcZ,oBAAoB6Y,EAAYxiD,MAElEkgD,IAAe1H,GAAYnoB,OAChCmyB,EAAY98C,MAAQ2jB,EAAO3jB,OAE/B,OAAO88C,CACX,CAGAG,eAAeC,GAEX,OADA3nD,KAAK0kD,aAAajwC,KAAKzU,KAAKqnD,eAAeM,IACpC3nD,IACX,CAIA4nD,QAAQ7iD,EAAM4iD,EAAa,CAAC,GACxB,MAAM1C,EAAa1H,GAAYgI,KAC/B,OAAOvlD,KAAK0nD,eAAernD,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGmwC,GAAa,CAAE5iD,OAAMkgD,eACpF,CAEA4C,mBAAmB9iD,GACf,MAAMkgD,EAAa1H,GAAYgI,KACzB3B,EAAiBpG,GAAgBqG,YACvC,OAAO7jD,KAAK0nD,eAAe,CAAE3iD,OAAMkgD,aAAYrB,kBACnD,CAEAkE,iBAAiB/iD,GACb,MAAMkgD,EAAa1H,GAAYgI,KACzB3B,EAAiBpG,GAAgBsG,UACvC,OAAO9jD,KAAK0nD,eAAe,CAAE3iD,OAAMkgD,aAAYrB,kBACnD,CAEAmE,oBAAoBz4B,GAChB,MAAM21B,EAAa1H,GAAY2H,MACzBtB,EAAiBpG,GAAgBqG,YACvC,OAAO7jD,KAAK0nD,eAAe,CAAEp4B,QAAO21B,aAAYrB,kBACpD,CAGAoE,SAAS14B,EAAOlB,EAAS,CAAC,GACtB,MAAM62B,EAAa1H,GAAY2H,MAC/B,OAAOllD,KAAK0nD,eAAernD,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG4W,GAAS,CAAEkB,QAAO21B,eACjF,CAMAgD,eAAeljD,EAAMqpB,EAAS,CAAC,GAC3B,IAAI3lB,EAAM,GACV,IAAK,IAAIC,EAAI,EAAGA,EAAI3D,EAAKa,SAAU8C,EAAG,CAClC,MAAMw/C,EAAOnjD,EAAK2D,GACdi6C,GAAYxxC,OAAO+2C,IACfz/C,EAAI7C,OAAS,IACb5F,KAAK4nD,QAAQn/C,EAAK2lB,GAClB3lB,EAAM,IAEVzI,KAAKgoD,SAASE,EAAM95B,IAIpB3lB,GAAOy/C,CAEf,CAIA,OAHIz/C,EAAI7C,OAAS,GACb5F,KAAK4nD,QAAQn/C,EAAK2lB,GAEfpuB,IACX,CAGAmoD,QAAQ19C,EAAO2jB,EAAS,CAAC,GACrB,MAAM62B,EAAa1H,GAAYnoB,KAC/B,OAAOp1B,KAAK0nD,eAAernD,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG4W,GAAS,CAAE62B,aAAYx6C,UACtF,CAaAsM,QAAQxO,EAAG6F,EAAMC,EAAQC,GAGrB,OAFA/K,MAAMwT,QAAQxO,EAAG6F,EAAMC,EAAQC,GAC/BtO,KAAKsvC,cAAgBzD,GAAc0D,OAAOvvC,KAAKiX,UACxCjX,IACX,CACA2lD,iBAAiB5C,GAEb,OADA/iD,KAAKmmD,WAAapD,EACX/iD,IACX,CAEAooD,YAAYC,GAER,OADAroD,KAAKkmD,SAAyB,iBAAPmC,EAAkB1F,GAAYxR,sBAAsBkX,GAAMA,EAC1EroD,IACX,CACA8lD,cACI,OAAO9lD,KAAKkmD,QAChB,CAEAoC,cAAcC,GAEV,OADAvoD,KAAKimD,WAA2B,iBAAPsC,EAAkB5F,GAAYrR,wBAAwBiX,GAAMA,EAC9EvoD,IACX,CACAgmD,gBACI,OAAOhmD,KAAKimD,UAChB,CACAr2B,WACI,IAAInlB,EAAQ,EAIZ,OAHAzK,KAAK0kD,aAAa9vC,SAASsvC,IACvBz5C,GAASy5C,EAAOM,OAAS,EAAIN,EAAOz5C,KAAK,IAEtCA,CACX,CACA+6C,kBAAkBzgD,GACd,IAAI8I,EACJ,IAAI6K,EAAM,EACNhQ,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAI3D,EAAKa,SAAU8C,EAAG,CAC9B,MAAM8H,EAAUxQ,KAAKsvC,cAAc1B,gBAAgB7oC,EAAK2D,IACxD,GAAI8H,EAAS,CACT,MAAM49B,EAAgC,QAAxBvgC,EAAK2C,EAAQ89B,aAA0B,IAAPzgC,EAAgBA,EAAK,EACnE6K,EAAM01B,EAAO11B,EAAM01B,EAAO11B,CAC9B,CACJ,CACA,MAAMzH,EAAajR,KAAKsvC,cAAct+B,gBACtC,OAAOtI,EAAI,EAAUgQ,EAAMzH,GAAX,EAAyB,CAC7C,CAEA8E,OACI,MAAM6f,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cAELsf,EAAI5gB,OACJhV,KAAK8U,aACL8gB,EAAI8V,UAAU,cAAe1rC,KAAK6S,aAAa,OAC/C,MAAM41B,EAAQ7O,EAAK8O,mBAAmB/P,GAASC,SAASK,MAAOj5B,KAAKsS,OAEpE,IAAIxJ,EADJ8sB,EAAI7e,QAAQ/W,KAAKiX,UAIjB,MAAM44B,EAAUjW,EAAKiW,UACfxY,EAAQuC,EAAKxB,aACnB,GAAIp4B,KAAKkmD,WAAa5I,GAA2B3M,QAG7C,GADA7nC,EAAIuuB,EAAM4a,kBAAkBjyC,KAAKw5B,UAAYxL,EAAOkD,yBAChD2e,EAAS,CACT,MAAM6B,EAAW9X,EAAKiY,YAAYrH,aAC5BmH,EAAUta,EAAMkM,yBAChBilB,EAAwC,IAA5B5uB,EAAKkW,mBAA2B4B,EAAS1G,MAAQ0G,EAAS3G,KAC5EjiC,EAAI7D,KAAK8E,IAAIjB,EAAG0/C,EAAY7W,GAAW3xC,KAAKw5B,UAAY,GAC5D,MAEC,CAED,MAAMuR,EAAO9lC,KAAK4lC,OAAOjR,EAAKkY,SAE9B,GADAhpC,EAAI7D,KAAK4lC,IAAIxT,EAAM2a,eAAehyC,KAAKw5B,WAAYuR,EAAO,IACtD8E,EAAS,CACT,MAAM6B,EAAW9X,EAAKiY,YAAYrH,aAC5BmH,EAAUta,EAAMkM,yBACtBz6B,EAAI7D,KAAK4lC,IAAI/hC,EAAG4oC,EAAS3G,KAAO,EAAI4G,EAAU3xC,KAAKw5B,UACvD,CACJ,CACA,IAAI71B,EAAI8kC,EAAM9kC,EAEVA,EADA3D,KAAKimD,aAAe5I,GAA6BhkB,KAC7CoP,EAAM9kC,EAEL3D,KAAKimD,aAAe5I,GAA6B9jB,MAClDkP,EAAM9kC,EAAI3D,KAAK4vB,WAEd5vB,KAAKimD,aAAe5I,GAA6BtkB,OAClD0P,EAAM9kC,EAAI3D,KAAK4vB,WAAa,EAI5BgK,EAAK6X,WAAazxC,KAAK4vB,WAAa,EAE5C,GAAE,0BAA2B5vB,KAAKsvC,cAAe3rC,EAAGmF,GACpD9I,KAAK0kD,aAAa9vC,SAASsvC,IACvB,MAAMuE,EAAU9F,GAAYiC,cAAcV,GACpCwE,EAAQ/F,GAAYmC,YAAYZ,GACtC,IAAIzV,EAAO3lC,EAUX,GATA,GAAE,aAAco7C,EAAOrsB,OAAQqsB,EAAOnsB,QACtC,GAAE,gBAAiB0W,GACfga,IACAha,GAAQzuC,KAAKotC,mBAEbsb,IACAja,GAAQzuC,KAAKqtC,iBAEjB,GAAE,gBAAiBoB,GACfyV,EAAOe,aAAe1H,GAAYgI,KAAM,CACxC,IAAIkD,GAAWC,KACX9yB,EAAI5gB,OACAhV,KAAKiX,UAAU,CACf,MAAM,OAAEzI,EAAM,KAAEJ,EAAI,OAAEC,EAAM,MAAEC,GAAUtO,KAAKiX,SACvC0xC,EAAkBj7C,EAAK02C,UAAUh2C,EAAMu0C,GAAYC,eACzDhtB,EAAI7e,QAAQvI,EAAQm6C,EAAiBt6C,EAAQC,EACjD,CAMJ,GAAE,mBAAoB41C,EAAOn/C,KAAMpB,EAAIugD,EAAOrsB,OAAQ4W,EAAOyV,EAAOnsB,QACpEnC,EAAIyc,SAAS6R,EAAOn/C,KAAMpB,EAAIugD,EAAOrsB,OAAQ4W,EAAOyV,EAAOnsB,SACvD0wB,GAAWC,IACX9yB,EAAIhgB,SAEZ,MACSsuC,EAAOe,aAAe1H,GAAY2H,OAAShB,EAAO50B,OACvDmf,GAAQyV,EAAOnsB,OACf,GAAE,oBAAqBmsB,EAAO50B,MAAMjsB,KAAMM,EAAIugD,EAAOrsB,OAAQ4W,GAC7DyV,EAAO50B,MAAM2I,OAAOrC,EAAKjyB,EAAIugD,EAAOrsB,OAAQ4W,IAEvCyV,EAAOe,aAAe1H,GAAYnoB,OACvC,GAAE,oBAAqB8uB,EAAOz5C,MAAO9G,EAAG8qC,GACxC7Y,EAAIQ,YACJR,EAAIlgB,aAAa,GACjBkgB,EAAIS,OAAO1yB,EAAGmF,GACd8sB,EAAIU,OAAO3yB,EAAIugD,EAAOz5C,MAAOgkC,GAC7B7Y,EAAIhH,UAERjrB,GAAKugD,EAAOz5C,MACRy5C,EAAOM,SACP7gD,GAAKugD,EAAOrsB,OAChB,IAEJjC,EAAIgW,aACJ5rC,KAAK2V,eACLigB,EAAIhgB,SACR,EAEJ+sC,GAAYpgB,OAAQ,EAEpBogB,GAAYrQ,kBAAoB+K,GAChCsF,GAAYrR,wBAA0B,CAClClY,KAAMikB,GAA6BhkB,KACnCC,MAAO+jB,GAA6B9jB,MACpCT,OAAQukB,GAA6BtkB,OACrCwZ,WAAY8K,GAA6B7K,aAE7CmQ,GAAYtS,gBAAkBiN,GAC9BqF,GAAYxR,sBAAwB,CAChCsB,IAAK6K,GAA2BhN,IAChCtX,MAAOskB,GAA2BhN,IAClCpX,MAAOokB,GAA2B3M,OAClC+B,OAAQ4K,GAA2B3M,QAGvCgS,GAAYxxC,OAAS,CACjBy3C,WAAY,CACRvlD,KAAM,kBAEVwlD,IAAK,CACDxlD,KAAM,kBAEVylD,eAAgB,CACZzlD,KAAM,sBAEV,IAAK,CACDA,KAAM,iBAEV0lD,UAAW,CACP1lD,KAAM,iBAEV2lD,aAAc,CACV3lD,KAAM,oBAEV26B,MAAO,CACH36B,KAAM,aAEV,IAAK,CACDA,KAAM,aAEV,IAAK,CACDA,KAAM,sBAEV4lD,UAAW,CACP5lD,KAAM,sBAEV,IAAK,CACDA,KAAM,uBAEV6lD,WAAY,CACR7lD,KAAM,uBAEV8lD,YAAa,CACT9lD,KAAM,uBAEV+lD,aAAc,CACV/lD,KAAM,wBAEVgmD,cAAe,CACXhmD,KAAM,0BAEVimD,eAAgB,CACZjmD,KAAM,2BAEV,IAAK,CACDA,KAAM,gCAEVoiD,KAAM,CACFpiD,KAAM,gCAEV,IAAK,CACDA,KAAM,mBAEVqB,EAAG,CACCrB,KAAM,mBAGds/C,GAAY4G,YAAchM,GAC1BoF,GAAY6G,gBAAkBhM,GAE9BmF,GAAYK,UAAW,EG3rBhB,MAAM5gD,WAAYu2B,GACVj3B,sBACP,OAAOG,EAASO,GACpB,CAEAmD,eAAeq0B,GACX,OAAOA,EAAKmiB,mBAAmB35C,GAAIV,SACvC,CAEA6D,sBAAsByqB,EAAO3B,GACzB,IAAK,MAAMuL,KAAQ5J,EACf,GAAI3B,aAAyC,EAASA,EAAQo7B,IAC1D,IAAK,IAAI/gD,EAAI,EAAGA,EAAIkxB,EAAKtmB,KAAK1N,OAAQ8C,IAAK,CACvC,MAAMghD,EAAM,IAAItnD,GAChBsnD,EAAIC,aAAa/vB,EAAKghB,WAAWtnB,YACjCsG,EAAKgO,YAAY8hB,EAAKhhD,EAC1B,MAEC,GAAyE9E,OAApEyqB,aAAyC,EAASA,EAAQ/b,OAAqB,CACrF,MAAMo3C,EAAM,IAAItnD,GAChBsnD,EAAIC,aAAa/vB,EAAKghB,WAAWtnB,YACjCsG,EAAKgO,YAAY8hB,EAAKr7B,aAAyC,EAASA,EAAQ/b,MACpF,KACK,CACD,MAAMo3C,EAAM,IAAItnD,GAChBsnD,EAAIC,aAAa/vB,EAAKghB,WAAWtnB,YACjCsG,EAAKgO,YAAY8hB,EAAK,EAC1B,CAER,CAEAnkD,cAAcu0C,EAAMtX,GAChB,MAAMuO,EAAcvO,EAAMuO,YAE1B,IAAK+I,GAAwB,IAAhBA,EAAKl0C,OACd,OAAO,EACX,MAAMgkD,EAAW,GACXC,EAAgB,CAAC,EACvB,IAAK,IAAInhD,EAAI,EAAGA,EAAIoxC,EAAKl0C,SAAU8C,EAAG,CAClC,MAAMghD,EAAM5P,EAAKpxC,GACXkxB,EAAO8vB,EAAI/vB,UACjB,IAAIwJ,EACAr9B,EACJ,GAAIjD,EAAY+2B,GAAO,CACnB,MAAMtnB,EAAQo3C,EAAI1vB,aAClBmJ,EAAQvJ,EAAKwJ,cAAc9wB,GAE3BxM,EAAQ8zB,EAAK6iB,eACjB,KACK,KAAIx5C,EAAU22B,GAMf,MAAM,IAAIz2B,EAAa,WAAY,wBALnCggC,EAAQ,CAAEn/B,KAAM,IAChB8B,EAAQirC,CAKZ,CACA,MAAM+Y,EAAUlwB,EAAK/mB,aAAa,MAClC+2C,EAASn1C,KAAK,CAAEzQ,KAAMm/B,EAAMn/B,KAAM41B,OAAMkwB,UAASJ,QACjDG,EAAcC,GAAW7kD,KAAK8E,IAAI8/C,EAAcC,IAAYhkD,EAAOA,EACvE,CAEA8jD,EAAShmB,MAAK,CAACn/B,EAAGC,IAAMA,EAAEV,KAAOS,EAAET,OACnC,IAAI+lD,EAAYhZ,EACZiZ,EAAU,EACVC,EAAY,KACZC,EAAY,KACZC,EAAoB,KACpBC,EAAc,EAClB,IAAK,IAAI1hD,EAAI,EAAGA,EAAIkhD,EAAShkD,SAAU8C,EAAG,CACtC,MAAM,IAAEghD,EAAG,KAAE9vB,EAAI,QAAEkwB,EAAO,KAAE9lD,GAAS4lD,EAASlhD,GAE1C1E,IAASimD,GAAarwB,IAASswB,IAC/BH,EAAYF,EAAcC,IAEzBlwB,EAAKuN,UAAYnjC,IAASimD,IACA,KAAvBhlD,KAAK+C,IAAIhE,EAAO,GAEhBomD,EAAc,GAIdA,EAAc,GACG,MAAbF,GAAsBA,EAAU/iB,UAAyB,MAAb8iB,GAAqBA,EAAYjmD,GAAS,GAIjFA,EAAOomD,IAAgBD,IAE5BC,GAAe,IAJfA,GAAe,KASvBxwB,EAAKuN,SACLuiB,EAAIp2B,aAAe82B,EAGnBV,EAAIp2B,YAAc82B,EAEtBD,EAAoBnmD,EAAOomD,EAC3BV,EAAInyB,UAAUwyB,GACdA,GAAaL,EAAI95B,WArED,EAsEhBo6B,EAAUD,EAAYC,EAAUD,EAAYC,EAC5CC,EAAYjmD,EACZkmD,EAAYtwB,CAChB,CAGA,OADA4I,EAAMuO,aAAeiZ,GACd,CACX,CACAvoD,cACI8B,QACAvD,KAAKyzB,SAAWkF,GAASC,SAASW,MAClCv5B,KAAKqqD,OAAS,EACdrqD,KAAK05B,SAAS,GACd15B,KAAKszB,WAAa,CACtB,CACAwG,QAAQF,GAMJ,OALA55B,KAAK45B,KAAOA,EACRv3B,EAAYu3B,KACZ55B,KAAKqqD,QAAU,GACfrqD,KAAK05B,SAAS,IAEX15B,IACX,CACA2pD,aAAa7gD,GAET,OADA9I,KAAKszB,WAAaxqB,EACX9I,IACX,CACA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cACL,MACMgtB,EADQ1J,EAAKxB,aACKmL,yBAClBkF,EAAQ7O,EAAK8O,mBAAmB1oC,KAAKyzB,SAAUzzB,KAAKsS,MAAO,CAAEg4C,gBAAgB,IAE/ErnD,EAAU22B,KACV6O,EAAM3/B,EAAI8wB,EAAKwY,iBAAiBpH,OAEpC,MAAMrnC,EAAI8kC,EAAM9kC,EAAI3D,KAAKw0B,QAAUx0B,KAAKyK,MAAQzK,KAAKqqD,OAC/CvhD,EAAI2/B,EAAM3/B,EAAI9I,KAAKy0B,QAAUz0B,KAAKszB,WAAagQ,EACrD1N,EAAIQ,YACJR,EAAI8f,IAAI/xC,EAAGmF,EAAG9I,KAAKqqD,OAAQ,EAAa,EAAVplD,KAAKC,IAAQ,GAC3C0wB,EAAIa,MACR,EC/IJ,MAAM8zB,WAAuB5xB,GACdj3B,sBACP,OAAOG,EAAS0oD,cACpB,CAEAhlD,cAAcilD,EAAMhoB,GAChB,MAAM,WAAEK,EAAU,YAAEkO,GAAgBvO,EAEpC,IAAKgoB,GAAwB,IAAhBA,EAAK5kD,OACd,OAAO,EACX,MAAM6kD,EAAY,GAClB,IAAIC,EAAY,KACZC,EAAY,EACZC,EAAa,EACjB,IAAK,IAAIliD,EAAI,EAAGA,EAAI8hD,EAAK5kD,SAAU8C,EAAG,CAClC,MAAM6P,EAAMiyC,EAAK9hD,GACXkxB,EAAOrhB,EAAIohB,UACXkxB,EAAMtyC,EAAI+hB,cACVhoB,EAAQiG,EAAIyhB,aACZmJ,EAAQvJ,EAAKwJ,cAAc9wB,GAE3Bw4C,EADgBjf,GAAc0D,OAAOh3B,EAAItB,UACd62B,UAOjC,GANIv1B,EAAIkb,WAAaO,EAAiBiF,QAClCuJ,EAAMkO,eAAiBoa,EAAa98B,EAAOiD,oBAAsB,IAEjE1Y,EAAIkb,WAAaO,EAAiBmF,QAClCqJ,EAAMhJ,WAAasxB,EAAa98B,EAAOiD,oBAAsB,IAE7D2I,IAAS8wB,EAAW,CACpB,IAAK,IAAI9lD,EAAI,EAAGA,EAAIg1B,EAAKtmB,KAAK1N,SAAUhB,EACjB,IAAfi+B,IACA8nB,EAAY1lD,KAAK8E,IAAI6vB,EAAKyJ,yBAA0BsnB,IAEpC,IAAhB5Z,IACA6Z,EAAa3lD,KAAK8E,IAAI6vB,EAAK0hB,0BAA2BsP,IAG9DF,EAAY9wB,CAChB,CACA6wB,EAAUh2C,KAAK,CACXmlB,OACArhB,MACAsyC,MACA7mD,KAAMm/B,EAAMn/B,KACZ+mD,OAAQJ,EACRK,OAAQJ,GAEhB,CAEAH,EAAU7mB,MAAK,CAACn/B,EAAGC,IAAMA,EAAEV,KAAOS,EAAET,OACpC,IAAIinD,EAAY,EACZC,EAAY,EACZC,EAAU,EACVC,EAAU,EACVC,EAAW,KACXC,EAAW,KACf,IAAK,IAAI5iD,EAAI,EAAGA,EAAI+hD,EAAU7kD,SAAU8C,EAAG,CACvC,IAAI6iD,EAAY,EAChB,MAAM,KAAE3xB,EAAI,IAAEixB,EAAG,IAAEtyC,EAAG,KAAEvU,EAAI,OAAE+mD,EAAM,OAAEC,GAAWP,EAAU/hD,GAEvD1E,IAASqnD,GAAYzxB,IAAS0xB,IAC9BL,EAAYpoB,EAAakoB,EACzBG,EAAYna,EAAcia,GAE9B,MAAMQ,EAAWjzC,EAAIqX,WAzDL,EA0DZi7B,IAAQlyB,GAASC,SAASS,MAC1B9gB,EAAIgf,UAAUsL,EAAaooB,GAC3BM,EAAY1oB,EAAa2oB,EACzBL,EAAUI,EAAYJ,EAAUI,EAAYJ,GAEvCN,IAAQlyB,GAASC,SAASW,QAC/BhhB,EAAIgf,UAAU2zB,GACdK,EAAYX,EAAaY,EACzBJ,EAAUG,EAAYH,EAAUG,EAAYH,GAEhDC,EAAWrnD,EACXsnD,EAAW1xB,CACf,CAGA,OAFA4I,EAAMK,YAAcsoB,EACpB3oB,EAAMuO,aAAeqa,GACd,CACX,CACA7lD,sBAAqB,WAAEkmD,GAAe,CAAC,EAAG7xB,EAAM8Z,GAC5C+X,SAAwDA,EAAW9iD,MAAM,KAAK4K,KAAKm4C,IAC/E,MAAM/iD,EAAQ+iD,EAAgBt8C,OAAOzG,MAAM,KACrCylB,EAAS,CAAEu9B,OAAQhjD,EAAM,IAG/B,OAFIA,EAAM,KACNylB,EAAOqF,SAAW9qB,EAAM,IACrB+qC,EAAQM,aAAa4X,UAAUx9B,EAAO,IAC9C7a,KAAI,CAACs4C,EAAWv5C,IAAUsnB,EAAKgO,YAAYikB,EAAWv5C,IAC7D,CACA7Q,YAAYqqD,GACRvoD,QACAvD,KAAK8rD,OAASA,EACd9rD,KAAKyK,MAAQ,EACbzK,KAAKyzB,SAAWkF,GAASC,SAASS,KAClCr5B,KAAKw0B,QAAU,EACfx0B,KAAKy0B,QAAU,EACfz0B,KAAK+rD,SAAW,EAChB/rD,KAAKuqC,SAAW,EAChBvqC,KAAK2X,WACT,CACAq0C,kBAAkBF,GAEd,OADA9rD,KAAK8rD,OAASA,EACP9rD,IACX,CACAisD,oBACI,OAAOjsD,KAAK8rD,MAChB,CACAI,WAAWvoD,GAEP,OADA3D,KAAK+rD,SAAWpoD,EACT3D,IACX,CACAmsD,WAAWrjD,GAEP,OADA9I,KAAKuqC,SAAWzhC,EACT9I,IACX,CACA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cACL,MAAMmyB,EAAQ7O,EAAK8O,mBAAmB1oC,KAAKyzB,SAAUzzB,KAAKsS,OAC1D,IAAI+tC,EAAQ5X,EAAM9kC,EAAI3D,KAAKw0B,QAAUx0B,KAAK+rD,SACtCxL,EAAQ9X,EAAM3/B,EAAI9I,KAAKy0B,QAAUz0B,KAAKuqC,SAAW,EACrD,OAAQvqC,KAAKyzB,UACT,KAAKkF,GAASC,SAASK,MACnBonB,GAAS,EACTE,GAAS,GACT,MACJ,KAAK5nB,GAASC,SAASO,MACnBknB,GAAS,EACTE,GAAS,GACT,MACJ,KAAK5nB,GAASC,SAASS,KACnBgnB,GAASrgD,KAAKyK,MACd,MACJ,KAAKkuB,GAASC,SAASW,MACnB8mB,GAAS,EACT,MACJ,QACI,MAAM,IAAIl9C,EAAa,kBAAmB,gBAAgBnD,KAAKyzB,2BAEvEmC,EAAI5gB,OACJ4gB,EAAI7e,QAAQ/W,KAAKiX,UACjB2e,EAAIyc,SAAS,GAAKryC,KAAK8rD,OAAQzL,EAAOE,GACtC3qB,EAAIhgB,SACR,EAEJ20C,GAAepzC,UAAY,CACvB3I,OAAQd,EAAKe,WACbL,KAAM,EACNC,OAAQ/B,EAAWqhC,KACnBr/B,MAAO/B,EAAUmC,QCpGrB,MAAM09C,WAAiB1pD,GACRhB,sBACP,OAAOG,EAASuqD,QACpB,CACA3qD,YAAYs4C,GACRx2C,MAAMw2C,GACN/5C,KAAKqsD,cAAe,EACpBrsD,KAAKssD,iBAAmB,EACxBtsD,KAAKusD,mBAAqB,EAC1BvsD,KAAKsS,MAAQynC,EAAWznC,MACxBtS,KAAK2D,EAAIo2C,EAAWp2C,GAAK,EACzB3D,KAAK8I,EAAIixC,EAAWjxC,GAAK,EACrBixC,EAAWyS,YACXxsD,KAAK06C,SAAWX,EAAWyS,WAC/BxsD,KAAKivB,UAAY8qB,EAAW9qB,YAAa,EACzCjvB,KAAK2pC,eAAiBoQ,EAAWpQ,gBAAkBd,GAAKC,GACxD9oC,KAAKgE,KAAO+1C,EAAW/1C,MAAQ,EAG/BhE,KAAK46C,WAAa5sB,EAAO0hB,cAAc1vC,KAAKuuB,SAAUvuB,KAAK06C,UAC3Dh3C,EAAQ1D,KAAK46C,WAAY,eAAgB,gCAAgC56C,KAAKuuB,uBAAuBvuB,KAAK06C,cAErG16C,KAAKgE,KAAO,GAAKhE,KAAKgE,KAAO,IAAMhE,KAAK46C,WAAWlnB,mBACpD1zB,KAAK46C,WAAWrqB,UAAYvwB,KAAK46C,WAAWlnB,kBAEhD1zB,KAAKysD,WAAazsD,KAAK46C,WAAWrqB,UAClCvwB,KAAKw0B,QAAUulB,EAAWvlB,SAAW,EACjCulB,EAAW2S,oBACX1sD,KAAKqsD,cAAe,EACpBrsD,KAAKysD,WAAa1S,EAAW2S,kBAC7B1sD,KAAKssD,iBAAmBvS,EAAWuS,kBAAoB,EACvDtsD,KAAKusD,mBAAqBxS,EAAWwS,oBAAsB,GAE/DvsD,KAAK0U,SAASqlC,EAAWzrC,OACzBtO,KAAK2sD,QAAU5S,EAAW4S,UAAW,EACrC3sD,KAAK8nC,eAAiBznC,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK8nC,gBAAiB,CAExEkT,iBAAkBjB,EAAWiB,kBAAoBhtB,EAAOyC,sBAC5DzwB,KAAK05B,UAAS15B,KAAKqsD,cACdrsD,KAAKysD,WAAWngB,WAAW,oBAC3BtsC,KAAKysD,WAAWngB,WAAW,mBAE1BtsC,KAAK46C,WAAWhrB,SAAS5vB,KAAK8nC,eAAekT,kBAD7CvrB,EAAMG,SAAS5vB,KAAKysD,WAAYzsD,KAAK8nC,eAAekT,kBAE9D,CAEAprB,WACI,OAAO5vB,KAAKyK,KAChB,CAEAmiD,cACI,OAA0B,IAAnB5sD,KAAKivB,SAChB,CAEA5lB,KAAK1F,GAED,OADA3D,KAAK2D,EAAIA,EACF3D,IACX,CAEAkJ,OACI,OAAOlJ,KAAK8I,CAChB,CAEAQ,KAAKR,GAED,OADA9I,KAAK8I,EAAIA,EACF9I,IACX,CAEA6sD,UACI,OAAO7sD,KAAKgE,IAChB,CAEA8oD,QAAQ9oD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA+4C,eAII,MAAMp1C,EAAK3D,KAAKw4C,aAAwBj1C,MAAMw1C,eAAf/4C,KAAK2D,EAG9BopD,EAA6BlkB,GAAKG,MAAQ,EAC1CvG,EAAYzU,EAAO0U,mBACnBsqB,EAAYvqB,EAAUrxB,aAAa,kBAAmB,GAAKpR,KAAK2pC,eAChEsjB,EAAqBxqB,EAAUrxB,aAAa,2BAA4B,GAAKpR,KAAK2pC,eACxF,OAAQhmC,EACJqpD,GACChtD,KAAKivB,WAAajvB,KAAKyK,MAAQsiD,GAA8B/sD,KAAK2pC,eAAiBsjB,EAAqB,EACjH,CAEAr2C,iBACI,MAAM+6B,EAAU3xC,KAAKo4B,aAAamL,yBAC5B2pB,EAAevb,EAAU,EACzBwb,EAAQntD,KAAK8I,EAAIokD,EACvB,OAAO,IAAItkD,EAAY5I,KAAK+4C,eAAgBoU,EAAOntD,KAAKyK,MAAOknC,EACnE,CAEAva,SAASC,GACL,MAAMrzB,EAAOhE,KAAK6sD,UAMlB,OALA7sD,KAAKq3B,MAAQA,EACTr3B,KAAKq3B,QACLr3B,KAAKsJ,KAAKtJ,KAAKq3B,MAAM+1B,YAAYppD,IACjChE,KAAK8W,WAAW9W,KAAKq3B,MAAMxgB,eAExB7W,IACX,CAEAu4C,YACI,GAAIv4C,KAAKw4C,aACL,OAAOx4C,KACX,MAAMyK,EAAQzK,KAAK4vB,WAAa5vB,KAAKi5C,oBAAsBj5C,KAAKu5C,qBAGhE,OAFAv5C,KAAK05B,SAASjvB,GACdzK,KAAKw4C,cAAe,EACbx4C,IACX,CAEA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACjB9V,KAAKsW,cACL,IAAI+2C,EAASrtD,KAAK+4C,eACd/4C,KAAKqsD,eAELgB,GACIrtD,KAAK2pC,iBAAmBd,GAAKC,GACvB9oC,KAAKssD,kBACFtsD,KAAK46C,WAAW5nB,KAAOhzB,KAAK46C,WAAWhrB,SAAS5vB,KAAK8nC,eAAekT,kBAAoBh7C,KAAKyK,MAAQ,GACxGzK,KAAKusD,oBAEnB,MAAMzjD,EAAI9I,KAAK8I,GAtLvB,YAAc/E,GACNqoD,GAAS7pB,OACT1+B,EAAI,oBAAqBE,EACjC,CAoLQ,CAAE,sBAAuB/D,KAAK06C,SAAU16C,KAAKuuB,SAAU,OAAQ8+B,EAAQvkD,GAEvE,MAAM6gC,EAAiB3pC,KAAK2pC,eACtBqR,EAAmBh7C,KAAK8nC,eAAekT,iBACvCsS,EAAiB,GAAGttD,KAAKysD,iBAAiB9iB,IAAmBd,GAAKC,GAAK,KAAO,SACpF,GAAsB,MAAlB9oC,KAAK06C,SAAkB,CACvB,MAAM6S,EAAavtD,KAAKo4B,aAAamL,0BAjLjD,SAA2B3N,EAAKrH,EAAU5qB,EAAGmF,EAAG6gC,EAAgB4jB,GAC5D,MAAM9iD,EAAQujB,EAAOgD,qBACrB4E,EAAI5gB,OACJ4gB,EAAIlgB,aAAasY,EAAO4C,YACxB,IAAI6F,GAAO,EAmBX,GAlBIzI,EAAOw/B,iBAAiBj/B,GAAY,IACpCkI,GAAO,GAENA,IACD9yB,GAAMqqB,EAAO4C,WAAa,EAAK+Y,GACnC/T,EAAIQ,YACJR,EAAIS,OAAO1yB,EAAGmF,EAAIykD,GAClB33B,EAAIU,OAAO3yB,EAAGmF,EAAI,GAClB8sB,EAAIU,OAAO3yB,EAAI8G,EAAO3B,EAAIykD,GAC1B33B,EAAIU,OAAO3yB,EAAI8G,EAAO3B,GACtB8sB,EAAIU,OAAO3yB,EAAGmF,EAAIykD,GAClB33B,EAAI+f,YACAlf,EACAb,EAAIa,OAGJb,EAAIhH,SAEJZ,EAAOmC,mBAAmB5B,GAAUtnB,OAAO,IAAM,CACjD,MAAMwmD,EAAc,EAAE,GAAI,EAAGhjD,EAAQ,EAAGA,EAAQ,GAChD,IAAK,IAAI/B,EAAI,EAAGA,EAAI+kD,EAAY7nD,OAAQ8C,IACpCktB,EAAIQ,YACJR,EAAIS,OAAO1yB,EAAI8pD,EAAY/kD,GAAII,EAAI,IACnC8sB,EAAIU,OAAO3yB,EAAI8pD,EAAY/kD,GAAII,EAAI,IACnC8sB,EAAIhH,QAEZ,CACAgH,EAAIhgB,SACR,CAiJY83C,CAAkB93B,EAAK51B,KAAKuuB,SAAU8+B,EAAQvkD,EAAG6gC,EAAgB4jB,EACrE,MAEI99B,EAAMk+B,YAAY/3B,EAAKy3B,EAAQvkD,EAAGkyC,EAAkBh7C,KAAKysD,WAAY,CACjEnrD,SAAU,YAAYgsD,KAGlC,EAGJlB,GAAS7pB,OAAQ,ECvMV,MAAMv/B,WAAsBN,GACpBhB,sBACP,OAAOG,EAASmB,aACpB,CACAvB,YAAYs4C,GACRx2C,MAAMw2C,EACV,CAEA9J,UACI,OAAOjwC,KAAKgzB,IAChB,CACA6e,YACI,IAAK7xC,KAAKgzB,KACN,MAAM,IAAI7vB,EAAa,SAAU,gCAErC,OAAOnD,KAAKgzB,IAChB,CACA46B,QAAQ56B,GAGJ,OAFAhzB,KAAKgzB,KAAOA,EACZhzB,KAAKuU,gBAAgBye,GACdhzB,IACX,CAEA6tD,YACI,MAAM76B,EAAO,IAAI6V,GAEjB,OADA7oC,KAAK4tD,QAAQ56B,GACNhzB,IACX,CACA8tD,UAAUxsD,EAAW,QACjB,MAAM,WAAEs5C,GAAe56C,KACvB,GAAIA,KAAK+tD,UAAW,CAChB,MAAMC,EAAWhuD,KAAK8vC,qBAAuBjH,GAAKE,KAAO6R,EAAW9mB,mBAAqB8mB,EAAW/mB,iBAChGm6B,IACAhuD,KAAKizB,KAAO,IAAIxD,EAAMu+B,EAAUhuD,KAAK8nC,eAAekT,iBAAkB,CAAE15C,aAChF,CACJ,CAEA2sD,kCACI,OAAIjuD,KAAK8vC,qBAAuBjH,GAAKE,KAC1B/oC,KAAK66C,aAAa76C,KAAK66C,aAAaj1C,OAAS,GAG7C5F,KAAK66C,aAAa,EAEjC,CAEAqT,gBACI,OAAOrlB,GAAKI,OAASjpC,KAAKmuD,kBAC9B,CAEAC,eACI,MAAMxT,EAAa56C,KAAK0vC,gBACxB,OAAIkL,EACOA,EAAWjnB,WAGX,CAEf,CAEA06B,uBAEI,IAAIzoD,EADSooB,EAAOmC,mBAAmBnwB,KAAKuuB,UAC1BntB,SAAW,EAAI,EAAI,GAErC,OAAQpB,KAAKuuB,UACT,IAAK,IACgB3qB,MAAb5D,KAAKi8C,OACLr2C,EAAS,IACb,MACJ,IAAK,KACDA,EAAsBhC,MAAb5D,KAAKi8C,KAAoB,GAAK,GACvC,MACJ,IAAK,KACDr2C,EAAsBhC,MAAb5D,KAAKi8C,KAAoB,GAAK,GACvC,MACJ,IAAK,KACDr2C,EAAsBhC,MAAb5D,KAAKi8C,KAAoB,GAAK,GACvC,MACJ,IAAK,MACDr2C,EAAsBhC,MAAb5D,KAAKi8C,KAAoB,GAAK,GAK/C,OAAOr2C,CACX,CAEAkqC,mBACI,IAAK9vC,KAAK2pC,eACN,MAAM,IAAIxmC,EAAa,SAAU,kCACrC,OAAOnD,KAAK2pC,cAChB,CACA2kB,iBAAiBvtB,GAGb,GAFKA,IACDA,EAAY8H,GAAKC,IACjB/H,IAAc8H,GAAKC,IAAM/H,IAAc8H,GAAKE,KAC5C,MAAM,IAAI5lC,EAAa,cAAe,2BAA2B49B,KASrE,GAPA/gC,KAAK2pC,eAAiB5I,EAEtB/gC,KAAKi3B,QACDj3B,KAAK+tD,WACL/tD,KAAK8tD,YAET9tD,KAAKi8C,UAAOr4C,EACR5D,KAAKgzB,KAAM,CACXhzB,KAAKgzB,KAAKiX,aAAalJ,GACvB/gC,KAAKgzB,KAAKkX,aAAalqC,KAAKmuD,oBAG5B,MAAMvT,EAAa56C,KAAKiuD,mCAAqCjuD,KAAK0vC,gBAE5D6e,EAAUvgC,EAAO0U,mBAAmBtxB,aAAa,iBAAiBwpC,EAAWrqB,YAAa,CAC5Fi+B,kBAAmB,EACnBC,iBAAkB,EAClBC,oBAAqB,EACrBC,mBAAoB,IAGxB3uD,KAAKgzB,KAAKgE,WAAW,CACjBkS,iBAAkBqlB,EAAQE,iBAC1BtlB,mBAAoBolB,EAAQI,mBAC5BvlB,sBAAuBmlB,EAAQC,kBAC/BnlB,wBAAyBklB,EAAQG,qBAEzC,CAIA,OAHI1uD,KAAKw4C,cACLx4C,KAAKu4C,YAEFv4C,IACX,CAEAyxC,WACI,MAAMnI,EAAUtpC,KAAK+4C,eAAiB/4C,KAAKw0B,QACrC+U,EAAQvpC,KAAK+4C,eAAiB/4C,KAAKw0B,QAAUx0B,KAAK47C,gBAExD,OADe57C,KAAK2pC,iBAAmBd,GAAKE,KAAOO,EAAUC,CAEjE,CAGAqlB,kBACI,OAAO5uD,KAAK+4C,eAAiB/4C,KAAKw0B,QAAUx0B,KAAK47C,gBAAkB,CACvE,CAEAuS,mBACI,MAAMvT,EAAa56C,KAAK0vC,gBACxB,OAAoC9rC,MAAhC5D,KAAK6uD,wBACE7uD,KAAK6uD,wBAGZ7uD,KAAKi8C,KACErB,EAAWhnB,oBAElBgnB,EACO56C,KAAK8vC,qBAAuBjH,GAAKC,GAAK8R,EAAW1nB,kBAAoB0nB,EAAWznB,oBAEpF,CACX,CAEA27B,cAAcpkD,GAEV,OADA1K,KAAK6uD,wBAA0BnkD,EAASm+B,GAAKI,OACtCjpC,IACX,CAEAoyC,iBACI,IAAKpyC,KAAKgzB,KACN,MAAM,IAAI7vB,EAAa,SAAU,kCACrC,OAAOnD,KAAKgzB,KAAKwX,YACrB,CAEAwH,eAAeqC,GACX,MAAMhd,EAAQr3B,KAAKo4B,aACnB,GAAIp4B,KAAK6vC,UAAW,CAChB,MAAMsC,EAAUnyC,KAAKoyC,iBACrB,IAAKD,EACD,MAAM,IAAIhvC,EAAa,eAAgB,+BAC3C,OAAO8B,KAAK4lC,IAAIxT,EAAM2a,eAAeqC,GAAWlC,EAAQpH,KAAO/qC,KAAK8nC,eAAeiT,oBAAsB1G,EAAW,GACxH,CAEI,OAAOhd,EAAM2a,eAAeqC,EAEpC,CAEApC,kBAAkBoC,GACd,MAAMhd,EAAQr3B,KAAKo4B,aACnB,GAAIp4B,KAAK6vC,UAAW,CAChB,MAAMsC,EAAUnyC,KAAKoyC,iBACrB,IAAKD,EACD,MAAM,IAAIhvC,EAAa,eAAgB,+BAC3C,OAAO8B,KAAK8E,IAAIstB,EAAM2a,eAAeqC,GAAWlC,EAAQnH,MAAQhrC,KAAK8nC,eAAeiT,mBAAqB1G,EAC7G,CAEI,OAAOhd,EAAM4a,kBAAkBoC,EAEvC,CACA0Z,UACI,OAAmD,GAA5C//B,EAAO0hB,cAAc1vC,KAAKuuB,UAAU0E,OAAiBjzB,KAAKi8C,IACrE,CAEAxD,aACI,IAAI5qC,EAGJ,OAFqB,QAApBA,EAAK7N,KAAKi8C,YAAyB,IAAPpuC,GAAyBA,EAAG4qC,aACzDz4C,KAAK04C,eAAgB,EACd14C,IACX,CAEA+uD,SAASC,GACL,IAAInhD,EACJ7N,KAAK8V,eACL9V,KAAKsW,cACLtW,KAAK4tD,QAAQ,IAAI/kB,GAAKmmB,IACD,QAApBnhD,EAAK7N,KAAKgzB,YAAyB,IAAPnlB,GAAyBA,EAAGiJ,WAAW9W,KAAK6W,cAAcd,MAC3F,EClMJ,SAASk5C,GAAkB/yC,EAAM0d,EAAMs1B,GACnC,MAAMC,EAAQD,EACdhzC,EAAKlY,MAAQmrD,EACbjzC,EAAKkzC,SAAWD,EAChBjzC,EAAKmzC,SAAWF,EAChBjzC,EAAK0d,KAAK01B,WAAW,EAAGpzC,EAAK0d,KAAK21B,WAAW,GAAKJ,EACtD,CASA,MAAMrsD,WAAkBE,GACTtB,sBACP,OAAOG,EAASiB,SACpB,CAIW0sD,qBACP,OAAO3mB,GAAKC,EAChB,CAIW2mB,uBACP,OAAO5mB,GAAKE,IAChB,CACW2mB,gCACP,OAAO,CACX,CACWC,gCAEP,OADkB3hC,EAAO0U,mBACRtxB,aAAa,sBAClC,CAEA7L,cAAcyqB,EAAOwS,GACjB,IAAI30B,EAAIoF,EACR,IAAK+c,GAASA,EAAMpqB,OAAS,EACzB,OAAO,EACX,MAAMgqD,EAAY,GAClB,IAAK,IAAIlnD,EAAI,EAAGA,EAAIsnB,EAAMpqB,OAAQ8C,IAAK,CAEnC,MAAMy6B,EAAQnT,EAAMtnB,GAAGmnD,eACjB7rD,EAAOm/B,EAAM,GAAGsX,SAASz2C,KAC/B,IAAI8rD,EAAO3sB,EAAMA,EAAMv9B,OAAS,GAAG60C,SAASz2C,KAC5C,MAAM4rC,EAAgB5f,EAAMtnB,GAAGonC,mBACzBigB,EAAU//B,EAAMtnB,GAAGwlD,gBAAkB,GACrC8B,EAAUhgC,EAAMtnB,GAAG2lD,uBAAyB,GAClD,IAAI4B,EACAjgC,EAAMtnB,GAAGy+B,UACT8oB,EAAOjsD,EAAOgsB,EAAMtnB,GAAGkyC,WAAWrnB,WAClCu8B,EAAO9rD,EAAOgsB,EAAMtnB,GAAGkyC,WAAWpnB,aAGlCy8B,EACsB,IAAlBrgB,EAAsBzM,EAAMA,EAAMv9B,OAAS,GAAG60C,SAASz2C,KAAO+rD,EAAU5sB,EAAMA,EAAMv9B,OAAS,GAAG60C,SAASz2C,KAC7G8rD,EAAyB,IAAlBlgB,EAAsBzM,EAAM,GAAGsX,SAASz2C,KAAOm/B,EAAM,GAAGsX,SAASz2C,KAAO+rD,GAEnFH,EAAUn7C,KAAK,CACXzQ,KAAMm/B,EAAM,GAAGsX,SAASz2C,KACxBorD,QAASa,EACTZ,QAASS,EACTI,OAAQlgC,EAAMtnB,GAAGy+B,SACjByI,cAAeA,EACfmgB,UACAC,UACAG,YAAangC,EAAMtnB,GAAG0nD,qBACtBC,aAAcrgC,EAAMtnB,GAAGkkD,cACvBhzB,KAAM5J,EAAMtnB,IAEpB,CACA,IACI4nD,EACAC,EACAC,EAHApqB,EAAS,EAIb,MAAMrwB,EAAO,EAAC,GAAO,GAAO,GAC5B,IAAK,IAAIrN,EAAI,EAAGA,EAAIknD,EAAUhqD,OAAQ8C,IAClCqN,EAAKrN,GAA8C,GAAzCknD,EAAUlnD,GAAGkxB,KAAKkO,eAAe/xB,KAE/C,GAAIA,EAAK,IAAMA,EAAK,IAAMA,EAAK,GAE3BqwB,EAAS,EACTkqB,EAAQV,EAAU,GAClBW,EAAQX,EAAU,GAClBY,EAAQZ,EAAU,QAEjB,GAAI75C,EAAK,IAAMA,EAAK,GAErBqwB,EAAS,EACTkqB,EAAQV,EAAU,GAClBY,EAAQZ,EAAU,QAEjB,GAAI75C,EAAK,IAAMA,EAAK,GAErBqwB,EAAS,EACTkqB,EAAQV,EAAU,GAClBY,EAAQZ,EAAU,OAEjB,KAAI75C,EAAK,KAAMA,EAAK,GAQrB,OAAO,EANPqwB,EAAS,EACTkqB,EAAQV,EAAU,GAClBY,EAAQZ,EAAU,EAKtB,CAGe,IAAXxpB,IAAyC,IAAzBkqB,EAAM1gB,eAAgD,IAAxB4gB,EAAM5gB,gBACpD0gB,EAAQV,EAAU,GAClBY,EAAQZ,EAAU,IAEtB,MAAMa,EAAcxrD,KAAK8E,IAAIumD,EAAMH,YAAaK,EAAML,aACtD,IAAIt4B,EAAS,EAEb,GAAe,IAAXuO,EAAc,CACd,MAAMsqB,EAAcJ,EAAM12B,KAAKiW,WAAa2gB,EAAM52B,KAAKiW,WAAaygB,EAAM1gB,gBAAkB4gB,EAAM5gB,cAAgB,EAAM,GACxH,GAAI4gB,EAAMN,QAAUI,EAAMJ,QAAUI,EAAM12B,KAAKrL,WAAaiiC,EAAM52B,KAAKrL,SACnEiiC,EAAM52B,KAAKkO,eAAe/xB,MAAO,OAEhC,GAAIu6C,EAAMjB,SAAWmB,EAAMpB,QAAUsB,EACtC,GAAIJ,EAAMJ,OAENjB,GAAkBqB,EAAOE,EAAO,QAE/B,GAAIA,EAAMN,OAEXjB,GAAkBuB,EAAOF,GAAQ,OAEhC,CAID,MAAMK,EAAW1rD,KAAK+C,IAAIsoD,EAAMtsD,KAAOwsD,EAAMxsD,MAC7C,GAAIssD,EAAM12B,KAAKiW,WAAa2gB,EAAM52B,KAAKiW,UAAW,CAC9C,MAAM+gB,EAAY5iC,EAAOgB,aAAmE,QAArDnhB,EAAKyiD,EAAM12B,KAAKi2B,eAAe,GAAGpV,SAASp3C,YAAyB,IAAPwK,EAAgBA,EAAK,IAAKyiD,EAAM12B,KAAKrL,UACnIsiC,EAAY7iC,EAAOgB,aAAsG,QAAxF/b,EAAKu9C,EAAM52B,KAAKi2B,eAAeW,EAAM52B,KAAKi2B,eAAejqD,OAAS,GAAG60C,SAASp3C,YAAyB,IAAP4P,EAAgBA,EAAK,IAAKu9C,EAAM52B,KAAKrL,WAG3KP,EAAO0C,QAEJkgC,IAAcC,GAEdP,EAAM12B,KAAK8N,eAAe4U,QAAQrX,GAASA,EAAK7wB,gBAAkBvS,EAASO,KAA2B,IAApB6iC,EAAKlL,aAClFn0B,SACD4qD,EAAM52B,KAAK8N,eAAe4U,QAAQrX,GAASA,EAAK7wB,gBAAkBvS,EAASO,KAA2B,IAApB6iC,EAAKlL,aAClFn0B,QAER+qD,EAAW,GAAKA,EAAW,GAE5BpW,KAAKC,UAAU8V,EAAM12B,KAAK/kB,cAAgB0lC,KAAKC,UAAUgW,EAAM52B,KAAK/kB,aACpEgjB,EAAS44B,EAAc,EACnBH,EAAM1gB,gBAAkB4gB,EAAM5gB,cAE9B0gB,EAAM12B,KAAKrC,UAAUM,GAIrB24B,EAAM52B,KAAKrC,UAAUM,IAGpBy4B,EAAM12B,KAAK2M,QAAUiqB,EAAM52B,KAAK2M,OAEjC+pB,EAAM1gB,gBAAkB4gB,EAAM5gB,gBAC1B0gB,EAAMtsD,MAAQwsD,EAAMxsD,MACpB6zB,EAAS44B,EAAc,EACvBH,EAAM12B,KAAKrC,UAAUM,IAIO,IAAxB24B,EAAM5gB,gBACN4gB,EAAM5gB,eAAiB,EACvB4gB,EAAM52B,KAAK00B,kBAAkB,IAKjD,MACSqC,EAAW,GAChB94B,EAAS44B,EAAc,EACnBH,EAAM12B,KAAKrL,SAAWiiC,EAAM52B,KAAKrL,SAEjC+hC,EAAM12B,KAAKrC,UAAUM,GAIrB24B,EAAM52B,KAAKrC,UAAUM,IAGpBy4B,EAAM12B,KAAKiW,WAChBygB,EAAM1gB,eAAiB0gB,EAAM12B,KAAKkW,mBAClCwgB,EAAM12B,KAAK00B,iBAAiBgC,EAAM1gB,gBAE7B4gB,EAAM52B,KAAKiW,YAChB2gB,EAAM5gB,eAAiB4gB,EAAM52B,KAAKkW,mBAClC0gB,EAAM52B,KAAK00B,iBAAiBkC,EAAM5gB,eAE1C,CAIJ,OADApN,EAAMuO,aAAelZ,GACd,CACX,CACA,IAAK04B,EACD,MAAM,IAAIptD,EAAa,eAAgB,sBAK3C,GAAIotD,EAAML,SAAWI,EAAMJ,SAAWM,EAAMN,SACpCI,EAAMjB,SAAWkB,EAAMnB,SAAWmB,EAAMlB,SAAWmB,EAAMpB,SAAS,CAqBlE,OApBmBmB,EAAMnB,QAAUmB,EAAMlB,QAC3BiB,EAAMjB,QAAUmB,EAAMpB,QAlNpD,SAAoBlzC,EAAMo0C,EAAOE,GAC7B,MAAMrB,EAAQjzC,EAAKlY,KAAOQ,EAAQ8rD,EAAMjB,QAASmB,EAAMpB,SACvDlzC,EAAK0d,KAAK01B,WAAW,EAAGpzC,EAAK0d,KAAK21B,WAAW,GAAKJ,GAClDjzC,EAAKlY,MAAQmrD,EACbjzC,EAAKkzC,SAAWD,EAChBjzC,EAAKmzC,SAAWF,CACpB,CA+MoB2B,CAAWP,EAAOD,EAAOE,IAGzB34B,EAAS44B,EAAc,EACvBF,EAAM32B,KAAKrC,UAAUM,IACQ,IAAzB24B,EAAM52B,KAAKuiB,YACXqU,EAAM5gB,eAAiB,EACvB4gB,EAAM52B,KAAK00B,kBAAkB,IAE7BgC,EAAMjB,SAAWmB,EAAMpB,UAAoC,IAAzBkB,EAAM12B,KAAKuiB,YAC7CmU,EAAM1gB,cAAgB,EACtB0gB,EAAM12B,KAAK00B,iBAAiB,KAIpC9rB,EAAMuO,aAAelZ,GACd,CACX,CAGJ,OAAIy4B,EAAMJ,QAAUK,EAAML,QAAUM,EAAMN,QAEtCI,EAAM12B,KAAKkO,eAAe/xB,MAAO,EAEjCy6C,EAAM52B,KAAKkO,eAAe/xB,MAAO,EAEjCysB,EAAMuO,aAAelZ,GACd,IAGP04B,EAAML,QAAUI,EAAMJ,QAAUK,EAAMlB,SAAWmB,EAAMpB,UAEvDmB,EAAM32B,KAAKkO,eAAe/xB,MAAO,GAEjCw6C,EAAML,QAAUM,EAAMN,QAAUI,EAAMjB,SAAWkB,EAAMnB,UAEvDmB,EAAM32B,KAAKkO,eAAe/xB,MAAO,GAEjCu6C,EAAMJ,QAAUI,EAAMjB,SAAWkB,EAAMnB,SAEvCH,GAAkBqB,EAAOC,EAAO,GAEhCC,EAAMN,QAAUK,EAAMlB,SAAWmB,EAAMpB,SAEvCH,GAAkBuB,EAAOD,GAAQ,IAGjCD,EAAMjB,SAAWkB,EAAMnB,QAAU,IAAOmB,EAAMlB,SAAWmB,EAAMpB,WAE/Dv3B,EAAS44B,EAAc,EACvBF,EAAM32B,KAAKrC,UAAUM,IACQ,IAAzB24B,EAAM52B,KAAKuiB,YACXqU,EAAM5gB,eAAiB,EACvB4gB,EAAM52B,KAAK00B,kBAAkB,IAE7BgC,EAAMjB,SAAWmB,EAAMpB,UAAoC,IAAzBkB,EAAM12B,KAAKuiB,YAC7CmU,EAAM1gB,cAAgB,EACtB0gB,EAAM12B,KAAK00B,iBAAiB,KAGpC9rB,EAAMuO,aAAelZ,GACd,EACX,CACAtyB,kBAAkByqB,GACd,QAAKA,IAELA,EAAMpb,SAASglB,GAASA,EAAK6e,gBACtB,EACX,CACAh3C,YAAYs4C,GACR,IAAIlsC,EAAIoF,EAAIq0C,EACZ/jD,MAAMw2C,GAGN/5C,KAAKqvD,QAAU,EACfrvD,KAAKovD,QAAU,EAEfpvD,KAAK6vD,eAAiB,GACtB7vD,KAAK+wD,gBAAkB,CAAC,EACxB/wD,KAAKkuB,KAAkC,QAA1BrgB,EAAKksC,EAAW7rB,YAAyB,IAAPrgB,EAAgBA,EAAK,SACpE7N,KAAKsuB,aAAkD,QAAlCrb,EAAK8mC,EAAWzrB,oBAAiC,IAAPrb,EAAgBA,EAAK,EAEpFjT,KAAK46C,WAAa5sB,EAAO0hB,cAAc1vC,KAAKuuB,SAAUvuB,KAAK06C,UAC3Dh3C,EAAQ1D,KAAK46C,WAAY,eAAgB,gCAAgC56C,KAAKuuB,uBAAuBvuB,KAAK06C,aAE1G16C,KAAKivB,WAAY,EACjBjvB,KAAKszB,WAAa,EAElBtzB,KAAKgxD,oBAAqB,EAE1BhxD,KAAKixD,WAAa,GAClBjxD,KAAKi2C,UAAY,GACjBj2C,KAAK8nC,eAAiBznC,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK8nC,gBAAiB,CAExEkT,iBAAkBjB,EAAWiB,kBAAoBhtB,EAAOyC,oBAExDwqB,UAAWlB,EAAWkB,WAAan4C,GAAU4sD,qBACjD1vD,KAAKkxD,oBACLlxD,KAAK6tD,YAED9T,EAAWoX,UACXnxD,KAAKoxD,WAGLpxD,KAAKsuD,iBAAsD,QAApChH,EAAKvN,EAAWpQ,sBAAmC,IAAP2d,EAAgBA,EAAKze,GAAKC,IAEjG9oC,KAAKi3B,QACLj3B,KAAK8tD,WACT,CACA72B,QACI1zB,MAAM0zB,QAEN,MAAMo6B,EAAiBrxD,KAAKixD,WAAW19C,KAAK+9C,GAAaA,EAASz8C,aAClE7U,KAAKuxD,iBACLvxD,KAAKixD,WAAWr8C,SAAQ,CAAC08C,EAAUh/C,KAC/B,MAAMk/C,EAAgBH,EAAe/+C,GACjCk/C,GACAF,EAAS58C,SAAS88C,EAAc,IAExC,MAAMn6B,EAAQr3B,KAAKq3B,MAKnB,OAJIA,GACAr3B,KAAKo3B,SAASC,GAElBr3B,KAAKyxD,wBACEzxD,IACX,CACAo8C,QAAQH,GAOJ,OANAj8C,KAAKi8C,KAAOA,EACZj8C,KAAKyxD,wBAEDzxD,KAAKgzB,MACLhzB,KAAKgzB,KAAKkX,aAAalqC,KAAKmuD,oBAEzBnuD,IACX,CAEA6tD,YAEI,OADA7tD,KAAK4tD,QAAQ,IAAI/kB,GAAK,CAAEe,OAAQ5pC,KAAKmnC,YAC9BnnC,IACX,CAEAuxD,iBACIvxD,KAAKixD,WAAa,GAClB,MAAMrhB,EAAgB5vC,KAAK8vC,mBACrBx8B,EAAOtT,KAAKk9C,UAClB,IAAImO,EACAsF,EAIAloB,EACA6V,EACArxC,EALAgiB,GAAY,EAMZ2gB,IAAkB/G,GAAKC,IACvBL,EAAQ,EACR6V,EAAMhrC,EAAK1N,OACXqH,EAAO,IAGPw7B,EAAQn1B,EAAK1N,OAAS,EACtB04C,GAAO,EACPrxC,GAAQ,GAEZ,IAAK,IAAIvE,EAAI+/B,EAAO//B,IAAM41C,EAAK51C,GAAKuE,EAAM,CAEtC,MAAMykD,EAAY1xD,KAAK6vD,eAAennD,GAAG+xC,SACnCz2C,EAAO0tD,EAAU1tD,UAGNJ,IAAbynD,EACAA,EAAWrnD,GAGX2sD,EAAW1rD,KAAK+C,IAAIqjD,EAAWrnD,GACd,IAAb2sD,GAA+B,KAAbA,EAClB1hC,GAAaA,GAGbA,GAAY,EACZjvB,KAAKgxD,oBAAqB,IAGlC3F,EAAWrnD,EACX,MAAM2tD,EAAW,IAAIvF,GAAS,CAC1B79B,SAAUvuB,KAAKuuB,SACfi+B,UAAWxsD,KAAK06C,SAChBzrB,YACA0a,eAAgBiG,EAChB8c,kBAAmBgF,EAAUruD,KAC7B23C,iBAAkBh7C,KAAK8nC,eAAekT,iBACtCxmB,QAASk9B,EAAUr1C,YACnBiwC,iBAAkBoF,EAAUpF,iBAC5BC,mBAAoBmF,EAAUnF,mBAC9BvoD,KAAM0tD,EAAU1tD,OAEpBhE,KAAKuU,gBAAgBo9C,GACrB3xD,KAAKixD,WAAWjxD,KAAK6vD,eAAennD,GAAG4J,OAASq/C,CACpD,CACJ,CAEAP,WACIpxD,KAAKsuD,iBAAiBtuD,KAAK4xD,gCAC/B,CACAA,gCAGI5xD,KAAKqvD,QAAUrvD,KAAK6vD,eAAe,GAAGpV,SAASz2C,KAC/ChE,KAAKovD,QAAUpvD,KAAK6vD,eAAe7vD,KAAKy6C,SAAS70C,OAAS,GAAG60C,SAASz2C,KAItE,OAFiBhE,KAAKqvD,QAAUrvD,KAAKovD,SAAW,EAD5B,EAE0BvmB,GAAKC,GAAKD,GAAKE,IAEjE,CAEAmoB,oBACI,IAAI7F,EACJ,IAAK,IAAI3iD,EAAI,EAAGA,EAAI1I,KAAKsT,KAAK1N,SAAU8C,EAAG,CACvC,MAAMvI,EAAMH,KAAKsT,KAAK5K,GAGlB1I,KAAK46C,WAAW1+B,OAChBlc,KAAK46C,WAAWnnB,SAAWtzB,GAC/B,MAAMkuB,EAAU,CAAEC,aAActuB,KAAKsuB,cAAgB,EAAGC,SAAUvuB,KAAKuuB,UACjE4U,EAAQnV,EAAO6jC,cAAc1xD,EAAKH,KAAKkuB,KAAMG,GACnD,IAAK8U,EACD,MAAM,IAAIhgC,EAAa,eAAgB,oCAAoChD,KAG7D,MAAdgjC,EAAMhjC,MACgB,MAAlBH,KAAKuuB,UAAsC,MAAlBvuB,KAAKuuB,SAC9B4U,EAAMn/B,KAAO,EAGbm/B,EAAMn/B,KAAO,GAIrB,MAAMA,EAAOm/B,EAAMn/B,KACHJ,MAAZynD,EACAA,EAAWrnD,EAGuB,KAA9BiB,KAAK+C,IAAIqjD,EAAWrnD,KACpBhE,KAAKivB,WAAY,EACjBkU,EAAMlU,WAAY,EAGdjvB,KAAKy6C,SAAS70C,OAAS,IACvB5F,KAAKy6C,SAAS/xC,EAAI,GAAGumB,WAAY,IAI7Co8B,EAAWrnD,EACXhE,KAAKy6C,SAAShmC,KAAK0uB,EACvB,CAGAnjC,KAAKy6C,SAAS7lC,SAAQ,CAAC6lC,EAAUnoC,KAC7BtS,KAAK6vD,eAAep7C,KAAK,CAAEgmC,WAAUnoC,SAAQ,IAEjDtS,KAAK6vD,eAAejsB,MAAK,CAACn/B,EAAGC,IAAMD,EAAEg2C,SAASz2C,KAAOU,EAAE+1C,SAASz2C,MACpE,CAEA4S,iBACI,IAAI/I,EAAIoF,EACR,IAAKjT,KAAKw4C,aACN,MAAM,IAAIr1C,EAAa,kBAAmB,qDAE9C,MAAQsH,MAAO1B,EAAC,UAAEkyB,EAAS,oBAAEge,GAAwBj5C,KAAK8Q,aACpDnN,EAAI3D,KAAK+4C,eAAiB9d,EAAYge,EAC5C,IAAI6Y,EAAO,EACPC,EAAO,EACX,MAAMC,GAAsH,QAAlG/+C,EAAgC,QAA1BpF,EAAK7N,KAAK+6B,kBAA+B,IAAPltB,OAAgB,EAASA,EAAG01B,gCAA6C,IAAPtwB,EAAgBA,EAAK,GAAK,EACxJy9C,EAAgC,EAAlBsB,EACpB,GAAIhyD,KAAKmnC,SAAU,CACf,MAAMr+B,EAAI9I,KAAK0qC,GAAG,GACZunB,EAAOjkC,EAAOmC,mBAAmBnwB,KAAKuuB,UACxC0jC,EAAKhrD,OAAO,IAAMgrD,EAAKhrD,OAAO,IAC9B6qD,EAAOhpD,EAAIkpD,EACXD,EAAOjpD,EAAIkpD,IAGXF,EAAOhpD,EAAI9I,KAAK46C,WAAWrnB,WAAam9B,EACxCqB,EAAOjpD,EAAI9I,KAAK46C,WAAWpnB,WAAak9B,EAEhD,MACK,GAAI1wD,KAAK46C,WAAW5nB,KAAM,CAC3B,MAAM0X,EAAK1qC,KAAKoyC,iBAChB1H,EAAGM,OAASgnB,EAAkBhyD,KAAK8vC,mBACnCgiB,EAAO7sD,KAAK4lC,IAAIH,EAAGK,KAAML,EAAGM,OAC5B+mB,EAAO9sD,KAAK8E,IAAI2gC,EAAGK,KAAML,EAAGM,MAChC,KACK,CACD8mB,EAAO,EACPC,EAAO,EACP,IAAK,IAAIrpD,EAAI,EAAGA,EAAI1I,KAAK0qC,GAAG9kC,SAAU8C,EAAG,CACrC,MAAMixC,EAAK35C,KAAK0qC,GAAGhiC,GACT,IAANA,GACAopD,EAAOnY,EACPoY,EAAOpY,IAGPmY,EAAO7sD,KAAK4lC,IAAI8O,EAAImY,GACpBC,EAAO9sD,KAAK8E,IAAI4vC,EAAIoY,GAE5B,CACAD,GAAQE,EACRD,GAAQC,CACZ,CACA,OAAO,IAAIppD,EAAYjF,EAAGmuD,EAAM/oD,EAAGgpD,EAAOD,EAC9C,CAGAthB,cAAciL,GACV,IAAKz7C,KAAKy6C,SAAS70C,OACf,MAAM,IAAIzC,EAAa,aAAc,yEAEzC,IAAI+uD,EAAalyD,KAAKy6C,SAAS,GAAGz2C,KAElC,IAAK,IAAI0E,EAAI,EAAGA,EAAI1I,KAAKy6C,SAAS70C,OAAQ8C,IAAK,CAC3C,MAAMypD,EAAWnyD,KAAKy6C,SAAS/xC,GAAG1E,KAC9By3C,EACI0W,EAAWD,IACXA,EAAaC,GAGbA,EAAWD,IACXA,EAAaC,EAEzB,CACA,OAAOD,CACX,CAIA/qB,SACI,OAAOnnC,KAAK46C,WAAW1+B,IAC3B,CAEAk2C,UACI,OAAQpyD,KAAKmnC,UAAYnnC,KAAKsT,KAAK1N,OAAS,CAChD,CAEAiqC,UACI,OAAO7vC,KAAK46C,WAAW5nB,IAC3B,CACA+6B,UACI,OAAOxqD,MAAMwqD,YAAc/tD,KAAKmnC,QACpC,CACAsK,WACI,MAAsB,MAAlBzxC,KAAK06C,SACE16C,KAAK4uD,kBAKLrrD,MAAMkuC,YAAczxC,KAAK2pC,eAAiBd,GAAKG,OAAS,GAAKhpC,KAAK2pC,gBAAkB,EAEnG,CAGAqI,eAAeqC,GACX,MAAMlC,EAAUnyC,KAAKoyC,iBACrB,OAAOntC,KAAK4lC,IAAI7qC,KAAKo4B,aAAa4Z,eAAeqC,GAAWlC,EAAQpH,KAAO/qC,KAAK8nC,eAAeiT,oBAAsB1G,EAAW,GACpI,CACApC,kBAAkBoC,GACd,MAAMlC,EAAUnyC,KAAKoyC,iBACrB,OAAOntC,KAAK8E,IAAI/J,KAAKo4B,aAAa4Z,eAAeqC,GAAWlC,EAAQnH,MAAQhrC,KAAK8nC,eAAeiT,mBAAqB1G,EACzH,CAGAjd,SAASC,GACL9zB,MAAM6zB,SAASC,GACf,MAAMqT,EAAK1qC,KAAKixD,WAAW19C,KAAKo+C,IAC5BA,EAASv6B,SAASC,GACXs6B,EAASzoD,UAGpB,GADAlJ,KAAKq7C,MAAM3Q,GACP1qC,KAAKgzB,KAAM,CACX,MAAM,MAAEwW,EAAK,SAAEC,GAAazpC,KAAKqyD,oBACjCryD,KAAKgzB,KAAKqX,WAAWb,EAAOC,EAChC,CACA,OAAOzpC,IACX,CAEA4sD,cACI,OAAO5sD,KAAKivB,SAChB,CAEAqjC,iBAAiBrjC,GAEb,OADAjvB,KAAKivB,UAAYA,EACVjvB,IACX,CAEA88C,eACI,IAAIC,EAAY/8C,KAAK+4C,eAIrB,OAHAgE,GAAa/8C,KAAK47C,gBAAkB57C,KAAKw0B,QAAUx0B,KAAKu5C,qBACpDv5C,KAAKm6B,kBACL4iB,GAAa/8C,KAAKm6B,gBAAgBo4B,iBAC/BxV,CACX,CAEAC,cACI,IAAIC,EAAUj9C,KAAK+4C,eAEnB,OADAkE,GAAWj9C,KAAKw0B,QAAUx0B,KAAKi5C,oBACxBgE,CACX,CAEAvB,iBACI,IAAI8W,EAAWxyD,KAAKy6C,SAAS,GAAGz2C,KAChC,GAAIhE,KAAKy6C,SAAS70C,OAAS,EAAG,CAC1B,MAAMylD,EAAWrrD,KAAKy6C,SAASz6C,KAAKy6C,SAAS70C,OAAS,GAAG5B,KAGzDwuD,EAAWhuD,EAFCS,KAAK8E,IAAIyoD,EAAUnH,GACnBpmD,KAAK4lC,IAAI2nB,EAAUnH,GAEnC,CACA,OAAOmH,CACX,CAGA9pB,mBAAmBjV,EAAUnhB,EAAO+b,EAAU,CAAC,GAC3C,IAAIxgB,EAAIoF,EACR,IAAKjT,KAAKw4C,aACN,MAAM,IAAIr1C,EAAa,kBAAmB,wDAE9C,GAAuB,IAAnBnD,KAAK0qC,GAAG9kC,OACR,MAAM,IAAIzC,EAAa,YAAa,yCAExC,MAAM,MAAE81B,EAAK,MAAEE,EAAK,KAAEE,EAAI,MAAEE,GAAUZ,GAASC,SAC/C,IAAIj1B,EAAI,EAiBR,OAhBI8vB,IAAa4F,EAEb11B,GAAI,EAEC8vB,IAAa8F,GAElB51B,EAAI3D,KAAK47C,gBAAkB57C,KAAKw0B,QAAU,EACtCx0B,KAAK2pC,iBAAmBd,GAAKC,IAC7B9oC,KAAK+tD,YACJ1/B,EAAQi8B,gBAtpBA,EAAC1wB,EAAMtnB,IAAUA,KAAWsnB,EAAKkW,qBAAuBjH,GAAKC,GAAKlP,EAAK6gB,SAAS70C,OAAS,EAAI,GAspB3E6sD,CAAiBzyD,KAAMsS,MAClD3O,GAAwI,QAAlIsP,EAAsE,QAAhEpF,EAAK7N,gBAAmC,EAASA,KAAKizB,YAAyB,IAAPplB,OAAgB,EAASA,EAAGiD,aAAarG,aAA0B,IAAPwI,EAAgBA,EAAK,IAGpKwgB,IAAa0F,GAAS1F,IAAawF,IACxCt1B,EAAI3D,KAAK47C,gBAAkB,GAExB,CACHj4C,EAAG3D,KAAK+4C,eAAiBp1C,EACzBmF,EAAG9I,KAAK0qC,GAAGp4B,GAEnB,CAGAoC,SAASpG,GACL,OAAO/K,MAAMoR,cAAcrG,EAC/B,CACAokD,aAAapkD,GACT,MAAM0kB,EAAOhzB,KAAKiwC,UAGlB,OAFIjd,GACAA,EAAKte,SAASpG,GACXtO,IACX,CACA2yD,eACI,IAAI9kD,EACJ,OAA4B,QAApBA,EAAK7N,KAAKgzB,YAAyB,IAAPnlB,OAAgB,EAASA,EAAGgH,UACpE,CACA+9C,mBAAmBtkD,GACftO,KAAK+wD,gBAAkBziD,CAC3B,CACAukD,qBACI,OAAO7yD,KAAK+wD,eAChB,CACA+B,aAAaxkD,GACT,IAAIT,EACiB,QAApBA,EAAK7N,KAAKizB,YAAyB,IAAPplB,GAAyBA,EAAG6G,SAASpG,EACtE,CACAykD,eACI,IAAIllD,EACJ,OAA4B,QAApBA,EAAK7N,KAAKizB,YAAyB,IAAPplB,OAAgB,EAASA,EAAGgH,UACpE,CAKAm+C,YAAY1gD,EAAOhE,GAEf,OADAtO,KAAKixD,WAAW3+C,GAAOoC,SAASpG,GACzBtO,IACX,CACAsvD,WAAWh9C,EAAOtO,GAGd,OAFAhE,KAAKy6C,SAASnoC,GAAOtO,KAAOA,EAC5BhE,KAAKi3B,QACEj3B,IACX,CACAuvD,WAAWj9C,GACP,OAAOtS,KAAKy6C,SAASnoC,GAAOtO,IAChC,CAGAosD,qBAEI,OAAOpwD,KAAK47C,iBAAmB57C,KAAKivB,UAAY,EAAI,EACxD,CAGAwiC,wBACIzxD,KAAKu7C,uBAAuBv7C,KAAKivB,WAAajvB,KAAK2pC,iBAAmBd,GAAKE,KAAO/oC,KAAK47C,gBAAkB,GAGzG57C,KAAKw7C,yBAAyBx7C,KAAK+tD,WAAa/tD,KAAKivB,WAAajvB,KAAK2pC,iBAAmBd,GAAKC,GAAK9oC,KAAK47C,gBAAkB,EAC/H,CAEArD,YACI,GAAIv4C,KAAKw4C,aACL,OACJ,IAAIya,EAAkB,EAClBjzD,KAAKm6B,kBACLn6B,KAAKm6B,gBAAgBoe,YAGmB,IAApCv4C,KAAKm6B,gBAAgBvK,aACrBqjC,EAAkBnwD,GAAU6sD,qBAGpC,IAAIllD,EAAQzK,KAAK47C,gBAAkB57C,KAAKi5C,oBAAsBj5C,KAAKu5C,qBAAuB0Z,EAEtFjzD,KAAKkzD,kBAAoBlzD,KAAK2pC,iBAAmBd,GAAKC,KACtDr+B,GAASzK,KAAK47C,iBAGlB57C,KAAK05B,SAASjvB,GACdzK,KAAKw4C,cAAe,CACxB,CAoBA6Z,oBAEI,IAEIc,EACAC,EAGAC,EACAC,EAPAC,EAAQC,IACRC,GAAWD,IAGXE,EAAc1zD,KAAKo4B,aAAa+X,cAChCwjB,EAAa,EAGbC,EAA0BF,EAC1BG,EAAyBF,EAuB7B,OAtBA3zD,KAAKixD,WAAWr8C,SAAS+8C,IACrB,MAAM3tD,EAAO2tD,EAAS9E,UAChB/jD,EAAI6oD,EAASzoD,OACnBqqD,EAAOtuD,KAAK4lC,IAAI/hC,EAAGyqD,GACnBE,EAAUxuD,KAAK8E,IAAIjB,EAAG2qD,QACH7vD,IAAfwvD,GAA4BzB,EAAS/E,gBACrCwG,EAAazB,EAAS5Y,qBAEJn1C,IAAlBuvD,GAAgCxB,EAAS/E,gBACzCuG,EAAgBxB,EAAS5Y,gBAE7B2a,EAAczuD,KAAK8E,IAAI/F,EAAM0vD,GAC7BC,EAAa1uD,KAAK4lC,IAAI7mC,EAAM2vD,GACxBhC,EAAS/E,eACTyG,OAAgDzvD,IAAzByvD,EAAqCrvD,EAAOiB,KAAK8E,IAAI/F,EAAMqvD,GAClFC,OAA8C1vD,IAAxB0vD,EAAoCtvD,EAAOiB,KAAK4lC,IAAI7mC,EAAMsvD,KAGhFM,EAA0B3uD,KAAK8E,IAAI/F,EAAM4vD,GACzCC,EAAyB5uD,KAAK4lC,IAAI7mC,EAAM6vD,GAC5C,GACD7zD,MACI,CACHwpC,MAAO+pB,EACP9pB,SAAUgqB,EACVK,YAAaV,EACbW,gBAAiBZ,EACjBa,aAAcN,EACdO,YAAaN,EACbO,uBAAwBb,EACxBc,sBAAuBb,EACvBc,2BAA4BR,EAC5BS,0BAA2BR,EAEnC,CAEAS,oBACI,OAAOt0D,KAAK+4C,eAAiB/4C,KAAKw0B,OACtC,CAEA+/B,kBAEI,OADev0D,KAAKs0D,oBACJt0D,KAAK47C,eACzB,CACI4Y,gBACA,OAAOx0D,KAAKixD,WAAW/sD,OAC3B,CAEIuwD,iBAEA,OA50BJrwD,QAAQC,KAAK,uEAAwE,iDA40B1ErE,KAAKw0D,SAChB,CAEAE,kBACI,MAAMr9B,EAAQr3B,KAAKo4B,cACb,WAAEwiB,EAAY9S,gBAAgB,UAAEmT,IAAiBj7C,KACjD41B,EAAM51B,KAAK8V,eACXrL,EAAQmwC,EAAWhrB,WAAyB,EAAZqrB,EAChC0Z,EAAc,GAAK/Z,EAAWhrB,WAAaqrB,GAAapS,GAAKG,MAAQ,EAC3E,GAAIhpC,KAAKmnC,SACL,OACJ,IAAKvR,EACD,MAAM,IAAIzyB,EAAa,kBAAmB,wCAE9C,MAAM,aAAE6wD,EAAY,YAAEC,EAAW,uBAAEC,EAAsB,2BAAEE,EAA0B,sBAAED,EAAqB,0BAAEE,EAAyB,YAAEP,EAAW,gBAAEC,GAAqB/zD,KAAKqyD,oBAEhL,GAAI2B,EAAe,GAAKC,EAAc,EAClC,OACJ,MAAMW,EAAQ3vD,KAAK4lC,IAAIipB,QAAiDA,EAAc,EAAGC,QAAyDA,EAAkB,GAC9Jc,EAAiB,CAAC/rD,EAAGgsD,EAAQ7lC,KAC/B,IAAItrB,EAEAA,EADAsrB,GAAa6lC,EACTF,EAAQ3Z,EACP6Z,GACAf,QAAyDA,EAAkB,GAAK9Y,GAEhF6Y,QAAiDA,EAAc,GAAK7Y,EAC7E,MAAM8Z,EAAcD,GAAU7lC,EAAY0lC,EAAclqD,EACxDmrB,EAAIQ,YACJR,EAAIS,OAAO1yB,EAAGmF,GACd8sB,EAAIU,OAAO3yB,EAAIoxD,EAAajsD,GAC5B8sB,EAAIhH,QAAQ,EAEVtgB,EAAQjO,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG6f,EAAM29B,6BAA8Bh1D,KAAK6yD,sBACvF7yD,KAAK8U,WAAW8gB,EAAKtnB,GAErB,IAAK,IAAItK,EAAO,EAAGA,GAAQgwD,IAAgBhwD,EAAM,CAC7C,MAAM8wD,OAA6BlxD,IAApBmwD,GAAiC/vD,GAAQowD,EAClDnlC,OAAuCrrB,IAA3BswD,GAAwClwD,GAAQkwD,EAClEW,EAAex9B,EAAM+1B,YAAYppD,GAAO8wD,EAAQ7lC,EACpD,CAEA,IAAK,IAAIjrB,EAAO,EAAGA,GAAQiwD,IAAejwD,EAAM,CAC5C,MAAM8wD,OAA6BlxD,IAApBmwD,GAAiC/vD,GAAQqwD,EAClDplC,OAAsCrrB,IAA1BuwD,GAAuCnwD,GAAQmwD,EACjEU,EAAex9B,EAAM+1B,YAAYppD,GAAO8wD,EAAQ7lC,EACpD,CACAjvB,KAAK2V,aAAaigB,EAAKtnB,EAC3B,CAEA2mD,cAAcC,GACV,MAAMt/B,EAAM51B,KAAK8V,eACjB,IAAK,IAAIpN,EAAI,EAAGA,EAAI1I,KAAKi2C,UAAUrwC,OAAQ8C,IAAK,CAC5C,MAAMi/B,EAAW3nC,KAAKi2C,UAAUvtC,GAC1B4J,EAAQq1B,EAAS3N,aACjB23B,EAAW3xD,KAAKixD,WAAW3+C,GACjC,GAAIq/C,GAAYuD,EAAe,CAC3B,MAAMC,EAAgBxD,EAAS98C,WAC/B88C,EAAS78C,WAAW8gB,EAAKu/B,GACzBxtB,EAAS7wB,WAAW8e,GACpB+R,EAAS9xB,gBACT87C,EAASh8C,aAAaigB,EAAKu/B,EAC/B,CACJ,CACJ,CACAjC,iBACI,MAAMrjB,OAAwBjsC,IAAd5D,KAAKgzB,KACf+6B,EAAkC,GAAxB/tD,KAAK46C,WAAW3nB,KAC1BmiC,OAA0BxxD,IAAd5D,KAAKi8C,KACvB,OAAOpM,GAAWke,GAAWqH,CACjC,CAEAC,WACI,IAAIxnD,EAAIoF,EAAIq0C,EAAIgO,EAAIC,EACpB,MAAM3/B,EAAM51B,KAAK8V,eACjB,IAAK8f,EACD,MAAM,IAAIzyB,EAAa,kBAAmB,wCAE9C,GAAInD,KAAKkzD,iBAAkB,CACvB,MAAM,MAAE1pB,EAAK,SAAEC,GAAazpC,KAAKqyD,oBAE3BmD,EAAiBx1D,KAAKgzB,KAAKsX,YAC3BmrB,EAAQz1D,KAAKyxC,WAKbikB,EAAQ11D,KAAK8vC,qBAAuBjH,GAAKE,KAEvCS,EACIgsB,EACA,GACCx1D,KAAK46C,WAAa56C,KAAK46C,WAAWznB,oBAAsB,GAAKnzB,KAAK21D,qBACuB,QAAxF1iD,EAA0B,QAApBpF,EAAK7N,KAAKizB,YAAyB,IAAPplB,OAAgB,EAASA,EAAGiD,aAAa2jB,eAA4B,IAAPxhB,EAAgBA,EAAK,IAAM,EAAIjT,KAAK21D,qBAE1IlsB,EACI+rB,EACA,GACCx1D,KAAK46C,WAAa56C,KAAK46C,WAAW1nB,kBAAoB,GAAKlzB,KAAK21D,qBACyB,QAAxFL,EAA0B,QAApBhO,EAAKtnD,KAAKizB,YAAyB,IAAPq0B,OAAgB,EAASA,EAAGx2C,aAAa2jB,eAA4B,IAAP6gC,EAAgBA,EAAK,IAAM,EAAIt1D,KAAK21D,qBAE7H,QAApBJ,EAAKv1D,KAAKizB,YAAyB,IAAPsiC,GAAyBA,EAAGt9B,OAAOrC,EAAK6/B,EAAOC,EAChF,CACJ,CAEAE,gBACI,MAAMhgC,EAAM51B,KAAK8V,eACjB9V,KAAKixD,WAAWr8C,SAAS+8C,IACrBA,EAAS78C,WAAW8gB,GACpBA,EAAI8V,UAAU,WAAYimB,EAAS9+C,aAAa,MAAO,CAAE84B,aAAa,IACtEgmB,EAAS76C,WAAW8e,GAAK7f,OACzB/V,KAAKi1D,cAActD,GACnB/7B,EAAIgW,aACJ+lB,EAASh8C,aAAaigB,EAAI,GAElC,CACAm5B,SAASC,GAIL,MAAMp5B,EAAM51B,KAAK8V,eACbk5C,GACAhvD,KAAK4tD,QAAQ,IAAI/kB,GAAKmmB,IAItBhvD,KAAKkzD,kBAAoBlzD,KAAKgzB,MAC9BhzB,KAAKgzB,KAAKoY,sBAEVprC,KAAKgzB,MACLhzB,KAAKgzB,KAAKlc,WAAW8e,GAAK7f,MAElC,CAEA4/C,oBACI,OAAO,CACX,CAIAxH,mBACI,MAAM0H,EAAuBtyD,MAAM4qD,mBACnC,IAAKnuD,KAAK46C,WAAW5nB,KACjB,OAAO6iC,EAEX,MAAMlsB,EAAiB3pC,KAAK8vC,mBAC5B,GAAInG,IAAmB3pC,KAAK4xD,gCACxB,OAAOiE,EAEX,IAAIC,EAUAA,EARAnsB,IAAmBd,GAAKC,GADR,EASkB9oC,KAAKovD,QAGnBpvD,KAAKqvD,QAZT,EAepB,MAAM0G,EAAkCD,EAAoB,IAC5D,GAAIC,GAAmC,EACnC,OAAOF,EAEX,MAAMx+B,EAAQr3B,KAAK+6B,WACnB,IAAIi7B,EAAwB,GAI5B,OAHapyD,MAATyzB,IACA2+B,EAAwB3+B,EAAMkM,0BAE3BsyB,EAAuBE,EAAkCC,CACpE,CAEAjgD,OACI,IAAiC,IAA7B/V,KAAK8nC,eAAe/xB,KACpB,OACJ,GAAuB,IAAnB/V,KAAK0qC,GAAG9kC,OACR,MAAM,IAAIzC,EAAa,YAAa,qCAExC,MAAMyyB,EAAM51B,KAAK8V,eACXmgD,EAASj2D,KAAKs0D,oBACd4B,EAAmBl2D,KAAK6vC,YAAc7vC,KAAKi8C,KAGjD,GADAj8C,KAAKixD,WAAWr8C,SAAS+8C,GAAaA,EAAStoD,KAAK4sD,KAChDj2D,KAAKgzB,KAAM,CAEX,MAAMmjC,EAAQn2D,KAAKyxC,WACnBzxC,KAAKgzB,KAAKgX,mBAAmBmsB,EAAOA,EACxC,EAxgCR,YAAcpyD,GACNjB,GAAUy/B,OACV1+B,EAAI,qBAAsBE,EAClC,CAsgCQ,CAAE,aAAc/D,KAAKoyD,UAAY,UAAY,SAAUpyD,KAAKsT,MAE5DtT,KAAK8U,aACL8gB,EAAI8V,UAAU,YAAa1rC,KAAK6S,aAAa,OAC7C7S,KAAK00D,kBACDwB,GACAl2D,KAAK+uD,WACT/uD,KAAK41D,gBACL51D,KAAKq1D,WACLz/B,EAAIgW,aACJ5rC,KAAK2V,eACL3V,KAAKsW,aACT,EAEJxT,GAAUy/B,OAAQ,ECviClB,MAAM6zB,WAAiBriD,EACRrS,sBACP,OAAOG,EAASu0D,QACpB,CAaA30D,YAAYuuB,EAAOjrB,GACfxB,QACAvD,KAAKq2D,SAASrmC,GACdhwB,KAAK+E,KAAOA,EACZ/E,KAAK8nC,eAAiB,CAClBwuB,IAAK,EACLC,IAAK,GACLC,aAAc,EACdC,cAAe,EACfC,aAAc,EACdjiC,QAAS,EACTkiC,YAAa,GAEjB32D,KAAK2X,WACT,CACAsyB,aAAalJ,GAET,OADA/gC,KAAK+gC,UAAYA,EACV/gC,IACX,CAMAq2D,SAASrmC,GACL,IAAKA,EAAM4mC,aAAe5mC,EAAMk6B,UAC5B,MAAM,IAAI/mD,EAAa,eAAgB,yDAQ3C,GANK6sB,EAAM6mC,gBACP7mC,EAAM6mC,cAAgB,CAAC,IAEtB7mC,EAAM8mC,eACP9mC,EAAM8mC,aAAe,CAAC,IAEtB9mC,EAAM6mC,cAAcjxD,SAAWoqB,EAAM8mC,aAAalxD,OAClD,MAAM,IAAIzC,EAAa,eAAgB,gDAG3C,OADAnD,KAAKgwB,MAAQA,EACNhwB,IACX,CAIA+2D,YACI,OAAQ/2D,KAAKgwB,MAAM4mC,aAAe52D,KAAKgwB,MAAMk6B,SACjD,CACA8M,UAAU5oC,GACN,GAA+B,IAA3BA,EAAO6oC,SAASrxD,QAA0C,IAA1BwoB,EAAO8oC,QAAQtxD,OAC/C,MAAM,IAAIzC,EAAa,eAAgB,yBAE3C,MAAMyyB,EAAM51B,KAAK8V,eACjB,IAAIwgD,EAAMt2D,KAAK8nC,eAAewuB,IAC1BC,EAAMv2D,KAAK8nC,eAAeyuB,IAC1BtxD,KAAK+C,IAAIomB,EAAO+oC,UAAY/oC,EAAOgpC,YAAc,KACjDd,EAAM,EACNC,EAAM,GAEV,MAAME,EAAgBz2D,KAAK8nC,eAAe2uB,cACpCC,EAAe12D,KAAK8nC,eAAe4uB,aACnCjiC,EAAUz0B,KAAK8nC,eAAerT,QAAUrG,EAAO2S,UAI/C81B,EAAgB72D,KAAKgwB,MAAM6mC,cAE3BC,EAAe92D,KAAKgwB,MAAM8mC,aAChC92D,KAAK8U,aACL8gB,EAAI8V,UAAU,WAAY1rC,KAAK6S,aAAa,OAC5C,IAAK,IAAInK,EAAI,EAAGA,EAAImuD,EAAcjxD,SAAU8C,EAAG,CAC3C,MAAMs5C,GAAQ5zB,EAAO+oC,UAAYT,GAAgBtoC,EAAOgpC,WAAaX,IAAkB,EACjFY,EAAajpC,EAAO6oC,SAASJ,EAAcnuD,IAAM+rB,EACjD6iC,EAAYlpC,EAAO8oC,QAAQJ,EAAapuD,IAAM+rB,EACpD,GAAIhvB,MAAM4xD,IAAe5xD,MAAM6xD,GAC3B,MAAM,IAAIn0D,EAAa,eAAgB,kCAE3C,MAAMo0D,GAAYF,EAAaC,GAAa,EAAIhB,EAAMloC,EAAO2S,UACvDy2B,GAAeH,EAAaC,GAAa,EAAIf,EAAMnoC,EAAO2S,UAChEnL,EAAIQ,YACJR,EAAIS,OAAOjI,EAAOgpC,WAAaX,EAAeY,GAC9CzhC,EAAIW,iBAAiByrB,EAAMuV,EAAUnpC,EAAO+oC,UAAYT,EAAcY,GACtE1hC,EAAIW,iBAAiByrB,EAAMwV,EAAappC,EAAOgpC,WAAaX,EAAeY,GAC3EzhC,EAAI+f,YACJ/f,EAAIa,MACR,CACAb,EAAIgW,aACJ5rC,KAAK2V,cACT,CACA0sC,WAAW+U,EAAYD,GACnB,IAAItpD,EAAIoF,EAAIq0C,EACZ,IAAKtnD,KAAK+E,KACN,OACJ,MAAM6wB,EAAM51B,KAAK8V,eACjB,IAAI2hD,GAAYL,EAAaD,GAAa,EAC1CM,GAAY7hC,EAAI2sB,YAAYviD,KAAK+E,MAAM0F,MAAQ,EAC/C,MAAM4sB,EAAqG,QAA5FpkB,EAAsC,QAAhCpF,EAAK7N,KAAKgwB,MAAM4mC,kBAA+B,IAAP/oD,OAAgB,EAASA,EAAGuqB,oBAAiC,IAAPnlB,EAAgBA,EAAqC,QAA/Bq0C,EAAKtnD,KAAKgwB,MAAMk6B,iBAA8B,IAAP5C,OAAgB,EAASA,EAAGlvB,aACxMf,IACAzB,EAAI5gB,OACJ4gB,EAAI7e,QAAQ/W,KAAKiX,UACjB2e,EAAIyc,SAASryC,KAAK+E,KAAM0yD,EAAWz3D,KAAK8nC,eAAe0uB,aAAcn/B,EAAM2a,iBAAmB,GAC9Fpc,EAAIhgB,UAEZ,CAIA8hD,WACI,OAAO13D,KAAKgwB,KAChB,CACAja,OACI/V,KAAK8V,eACL9V,KAAKsW,cACL,MAAMsgD,EAAa52D,KAAKgwB,MAAM4mC,WACxB1M,EAAYlqD,KAAKgwB,MAAMk6B,UAE7B,IAAIkN,EAAa,EACbD,EAAY,EACZF,EAAW,CAAC,GACZC,EAAU,CAAC,GACXvtB,EAAiB,EACrB,GAAIitB,EACAQ,EAAaR,EAAW9Z,eAAiB98C,KAAK8nC,eAAe6uB,YAC7DhtB,EAAiBitB,EAAW9mB,mBAC5BmnB,EAAWL,EAAW9kB,aAErB,GAAIoY,EAAW,CAEhBkN,EADclN,EAAU9xB,aACLu/B,eACnBV,EAAW/M,EAAUpY,QACrB9xC,KAAKgwB,MAAM6mC,cAAgB72D,KAAKgwB,MAAM8mC,YAC1C,CACA,GAAI5M,EACAiN,EAAYjN,EAAUlN,cAAgBh9C,KAAK8nC,eAAe6uB,YAC1DhtB,EAAiBugB,EAAUpa,mBAC3BonB,EAAUhN,EAAUpY,aAEnB,GAAI8kB,EAAY,CAEjBO,EADcP,EAAWx+B,aACPw/B,aAClBV,EAAUN,EAAW9kB,QACrB9xC,KAAKgwB,MAAM8mC,aAAe92D,KAAKgwB,MAAM6mC,aACzC,CAYA,OAXI72D,KAAK+gC,YACL4I,EAAiB3pC,KAAK+gC,WAE1B/gC,KAAKg3D,UAAU,CACXI,aACAD,YACAF,WACAC,UACAn2B,UAAW4I,IAEf3pC,KAAKqiD,WAAW+U,EAAYD,IACrB,CACX,EAGJf,GAASj/C,UAAY9W,OAAOmX,OAAO,CAAC,EAAGzD,EAAQoD,WC5KxC,MAAM0gD,WAAezB,GACb10D,sBACP,OAAOG,EAASg2D,MACpB,CACAtyD,sBAAsByqB,GAClB,OAAO,IAAI6nC,GAAO7nC,EAAO,IAC7B,CACAzqB,qBAAqByqB,GACjB,OAAO,IAAI6nC,GAAO7nC,EAAO,IAC7B,CAYAvuB,YAAYuuB,EAAOjrB,GACfxB,MAAMysB,EAAOjrB,GACb/E,KAAK8nC,eAAewuB,IAAM,EAC1Bt2D,KAAK8nC,eAAeyuB,IAAM,GAC1Bv2D,KAAK8nC,eAAerT,QAAU,EAC9Bz0B,KAAK+gC,WAAa,CACtB,EC3BG,IAAI+2B,IACX,SAAWA,GACPA,EAAUA,EAAkB,OAAI,GAAK,SACrCA,EAAUA,EAAgB,KAAI,GAAK,OACnCA,EAAUA,EAAgB,KAAI,GAAK,MACtC,CAJD,CAIGA,KAAcA,GAAY,CAAC,IAIvB,MAAMC,WAAchkD,EACZrS,sBACP,OAAOG,EAASk2D,KACpB,CAOWC,kBACP,OAAOF,EACX,CACAr2D,YAAYw2D,GAYR,IAAIC,EACJ,GAZA30D,QACAvD,KAAKm4D,qBAAuB,EAC5Bn4D,KAAKo4D,KAAON,GAAUO,OACtBr4D,KAAKw4C,cAAe,EACpBx4C,KAAKs4D,UAAY,IAAIhzD,EAAS,EAAG,GACjCtF,KAAKu4D,iBAAmB,EACxBv4D,KAAKgnC,UAAY,GACjBhnC,KAAKquB,QAAU,CACXmqC,cAAexqC,EAAO2C,gBAIN,iBAATsnC,EAAmB,CAE1B,MAAM73B,EAAQ63B,EAAK73B,MAAM,gBACrBA,IACA83B,EAAY,CACRplC,UAAWjuB,SAASu7B,EAAM,IAC1BrN,WAAYluB,SAASu7B,EAAM,KAGvC,MAEI83B,EAAYD,EAGhBj4D,KAAKi4D,KAAO53D,OAAOmX,OAAO,CAAEsb,UAAW,EAAGC,WAAY,EAAG9hB,WAAY+c,EAAO9V,YAAcggD,GAE1Fl4D,KAAKy4D,WAAa,IAAInzD,EAAStF,KAAKi4D,KAAKnlC,WAAa9yB,KAAKi4D,KAAKhnD,WAAajR,KAAKi4D,KAAKllC,YAAa,GAEpG/yB,KAAK04D,kBAAoB14D,KAAKy4D,WAAW/wD,OAC7C,CAEAixD,gBACI,OAAO34D,KAAKy4D,UAChB,CAEAG,eACI,OAAO54D,KAAKs4D,SAChB,CAEAO,sBACI,OAAO74D,KAAKu4D,gBAChB,CAEAO,uBACI,OAAO94D,KAAK04D,iBAChB,CAEAjyB,eACI,OAAOzmC,KAAKgnC,SAChB,CAEA+xB,UACI,OAAO/4D,KAAKo4D,IAChB,CAKAY,QAAQZ,GAEJ,OADAp4D,KAAKo4D,KAAOA,EACLp4D,IACX,CAEAi5D,0BACI,OAAOj5D,KAAKm4D,oBAChB,CAEAe,sBACI,OAAOl5D,KAAKm4D,qBAAuBn4D,KAAKi4D,KAAKhnD,UACjD,CAEAmmB,SAASC,GAIL,OAHAr3B,KAAKq3B,MAAQA,EAEbr3B,KAAK2J,iBAAc/F,EACZ5D,IACX,CACA+6B,WACI,OAAO/6B,KAAKq3B,KAChB,CAEAzgB,iBACI,IAAK5W,KAAK2J,YAAa,CACnB,MAAM0tB,EAAQr3B,KAAKo4B,aACnB,IAAIzuB,EACJ,IAAK,IAAIjB,EAAI,EAAGA,EAAI1I,KAAKgnC,UAAUphC,SAAU8C,EAAG,CAC5C,MAAMywD,EAAWn5D,KAAKgnC,UAAUt+B,GAC3BywD,EAASp+B,YACVo+B,EAAS/hC,SAASC,GACtB,MAAM7a,EAAK28C,EAASviD,iBAChB4F,IACA7S,EAAcA,EAAcA,EAAYD,UAAU8S,GAAMA,EAEhE,CACAxc,KAAK2J,YAAcA,CACvB,CACA,OAAO3J,KAAK2J,WAChB,CAEAyvD,UAAUC,GAEN,OADAr5D,KAAKo4D,KAAOiB,EAASvB,GAAUO,OAASP,GAAUwB,KAC3Ct5D,IACX,CAEAu5D,aACI,OAAIv5D,KAAKo4D,OAASN,GAAUO,QAAUr4D,KAAKo4D,OAASN,GAAU0B,MACnDx5D,KAAKs4D,UAAUrxD,OAAOjH,KAAKy4D,WAK1C,CAQAgB,iBAAiBC,GAGb,OAFA15D,KAAKquB,QAAQmqC,cAAgBkB,EAC7B15D,KAAK25D,aAAe,EACb35D,IACX,CAQA45D,0BACI,MAAMnB,EAAaz4D,KAAKs4D,UAAUl3D,QAGlC,OADApB,KAAK25D,aAAex0D,EAASnF,KAAKgnC,UAAUzzB,KAD/B4lD,GAAal0D,KAAK+G,IAAIhM,KAAKquB,QAAQmqC,cAAeW,EAASvyB,WAAWxlC,QAAUq3D,MAEtFz4D,KAAK25D,YAChB,CAEAE,QAAQC,GACC95D,KAAK25D,eACN35D,KAAK25D,aAAe35D,KAAK45D,2BAE7B,MAAMnB,EAAaz4D,KAAKs4D,UAAUl3D,QAGlC,MAFY,CAAC24D,GAAM90D,KAAK+G,IAAIhM,KAAKquB,QAAQmqC,cAAeuB,EAAItB,GACjDuB,CAAIF,GAAa95D,KAAK25D,YAErC,CAEAM,YAAYd,GACR,IAAKA,EAASzyB,oBAAqB,CAC/B,MAAMtW,EAAQ+oC,EAASvyB,WAIvB,GAFA5mC,KAAKs4D,UAAU/xD,IAAI6pB,GACnBpwB,KAAK25D,aAAe,GACf35D,KAAKo4D,OAASN,GAAUO,QAAUr4D,KAAKo4D,OAASN,GAAU0B,OAC3Dx5D,KAAKs4D,UAAUhxD,YAAYtH,KAAKy4D,YAEhC,MADAz4D,KAAKs4D,UAAUxxD,SAASspB,GAClB,IAAIjtB,EAAa,cAAe,mBAGtCitB,EAAM5oB,SAASxH,KAAK04D,qBACpB14D,KAAK04D,kBAAoBtoC,EAAM1oB,SAEnC1H,KAAKm4D,qBAAuBn4D,KAAKs4D,UAAUryD,YAE3CjG,KAAKy4D,WAAWlyD,IAAI,EAAGvG,KAAKs4D,UAAUryD,YAC1C,CAIA,OAFAjG,KAAKgnC,UAAUvyB,KAAK0kD,GACpBA,EAAS7hB,SAASt3C,MACXA,IACX,CAEAk6D,aAAalzB,GACT,IAAK,IAAIt+B,EAAI,EAAGA,EAAIs+B,EAAUphC,SAAU8C,EACpC1I,KAAKi6D,YAAYjzB,EAAUt+B,IAE/B,OAAO1I,IACX,CAEAu4C,YACI,GAAIv4C,KAAKw4C,aACL,OAAOx4C,KACX,MAAMq3B,EAAQr3B,KAAKo4B,aAOnB,OANAp4B,KAAKgnC,UAAUpyB,SAASukD,IACfA,EAASp+B,YACVo+B,EAAS/hC,SAASC,EACtB,IAEJr3B,KAAKw4C,cAAe,EACbx4C,IACX,CACAo4B,aACI,OAAO10B,EAAQ1D,KAAKq3B,MAAO,UAAW,iCAC1C,CASAthB,KAAKhB,EAAU/U,KAAK8V,eAAgBuhB,GAGhC,IAAI1tB,EAFJ0tB,EAAQA,QAAqCA,EAAQr3B,KAAKq3B,MAC1Dr3B,KAAKsW,cAEL,IAAK,IAAI5N,EAAI,EAAGA,EAAI1I,KAAKgnC,UAAUphC,SAAU8C,EAAG,CAC5C,MAAMywD,EAAWn5D,KAAKgnC,UAAUt+B,GAE5B2uB,GACA8hC,EAAS/hC,SAASC,GAEtB3zB,EAAQy1D,EAASp+B,WAAY,eAAgB,mDAC7C,MAAMve,EAAK28C,EAASviD,iBAChB4F,IACA7S,EAAcA,EAAcA,EAAYD,UAAU8S,GAAMA,GAE5D28C,EAASriD,WAAW/B,GACpBokD,EAAStjD,eACb,CACA7V,KAAK2J,YAAcA,CACvB,ECvOJ,MAAMnH,WAAuBm2B,GACdj3B,sBACP,OAAOG,EAASW,cACpB,CAEA+C,cAAc40D,EAAkB33B,GAG5B,IAAK23B,GAAgD,IAA5BA,EAAiBv0D,OACtC,OAAO,EACX,MAAMw0D,EAAa,GACnB,IAAI1P,EAAY,KACZK,EAAS,EACb,IAAK,IAAIriD,EAAI,EAAGA,EAAIyxD,EAAiBv0D,SAAU8C,EAAG,CAC9C,MAAM2xD,EAAkBF,EAAiBzxD,GACnCkxB,EAAOygC,EAAgB1gC,UACvB2gC,EAAez3D,EAAY+2B,GAC3B+X,EAAU2oB,EAXQ,EACF,EAWtB,GAAIA,GAAgB1gC,IAAS8wB,EAAW,CAEpC,IAAK,IAAI9lD,EAAI,EAAGA,EAAIg1B,EAAKtmB,KAAK1N,SAAUhB,EACpCmmD,EAAS9lD,KAAK8E,IAAI6vB,EAAKyJ,yBAA0B0nB,GAErDL,EAAY9wB,CAChB,CACAwgC,EAAW3lD,KAAK,CAAE3O,MAAOilD,EAAQsP,kBAAiB1oB,WACtD,CAEA,IACI4oB,EADAC,EAAcJ,EAAW,GAAGt0D,MAEhC,IAAK,IAAI4C,EAAI,EAAGA,EAAI0xD,EAAWx0D,SAAU8C,EAAG,CACxC,MAAM2xD,EAAkBD,EAAW1xD,GAAG2xD,gBACtCA,EAAgB9hB,YAChBgiB,EAAcF,EAAgBzqC,WAAawqC,EAAW1xD,GAAGipC,QACzD6oB,EAAcv1D,KAAK8E,IAAIwwD,EAAaC,EACxC,CACA,IAAK,IAAI9xD,EAAI,EAAGA,EAAI0xD,EAAWx0D,SAAU8C,EAAG,CACxC,MAAM2xD,EAAkBD,EAAW1xD,GAAG2xD,gBACtCE,EAAcF,EAAgBzqC,WAAawqC,EAAW1xD,GAAGipC,QACzD0oB,EAAgB5/B,2BAA2B+/B,EAAcv1D,KAAK4lC,IAAI0vB,EAAaC,GAAe13D,GAAU6sD,mBAC5G,CAEA,OADAntB,EAAMK,YAAc23B,GACb,CACX,CAEA/4D,YAAYg5D,EAAaC,GAkBrB,OAjBAn3D,QACAvD,KAAKw4C,cAAe,EACpBx4C,KAAKyzB,SAAWkF,GAASC,SAASS,KAClCr5B,KAAKy6D,YAAcA,EACnBz6D,KAAKyK,MAAQ,EACbzK,KAAK06D,UAAYA,EACjB16D,KAAK26D,UAAO/2D,EACZ5D,KAAKumC,MAAQ,IAAIwxB,GAAM,CACnBjlC,UAAW,EACXC,WAAY,EACZ9hB,WAAY+c,EAAO9V,aACpBkhD,WAAU,GACbp5D,KAAK8nC,eAAiB,CAClB8yB,aAAc,GAElB56D,KAAK66D,MAAQ,GACb76D,KAAKumC,MAAM2zB,aAAal6D,KAAKy6D,aACtBz6D,IACX,CACAu4C,YACQv4C,KAAKw4C,eAEJx4C,KAAKusC,YACNvsC,KAAKusC,UAAY,IAAIuuB,IAEzB96D,KAAKusC,UAAUwuB,WAAW,CAAC/6D,KAAKumC,QAAQy0B,OAAO,CAACh7D,KAAKumC,OAAQ,EAAG,CAAC,GACjEvmC,KAAK05B,SAAS15B,KAAKusC,UAAU0uB,oBAC7Bj7D,KAAKw4C,cAAe,EACxB,CACA0iB,UAAUT,GAEN,IADAA,EAAcA,GAAez6D,KAAKy6D,aAClB70D,OAAS,EAAG,CACxB,MAAMq2C,EAAO,IAAIkf,GAAKV,GACtBxe,EAAKnU,eAAeszB,WAAa,EACjCnf,EAAKnU,eAAeuzB,oBAAsB,EAC1Cr7D,KAAK66D,MAAMpmD,KAAKwnC,EACpB,CACA,OAAOj8C,IACX,CACA05B,SAASjvB,GAEL,OADAzK,KAAKyK,MAAQA,EACNzK,IACX,CACA4vB,WACI,OAAO5vB,KAAKyK,MAAQ3H,GAAU6sD,kBAClC,CACA9nB,gBACI,OAAO7nC,KAAKy6D,WAChB,CACA1kD,OACI,MAAM6f,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAQlB,GAPA75B,KAAKsW,cAvGb,YAAcvS,GACNvB,GAAe+/B,OACf1+B,EAAI,0BAA2BE,EACvC,CAqGQ,CAAE,gCAAiC61B,GACnC55B,KAAK26B,sBAAsB36B,KAAK6nC,gBAAiBjO,GAEjD55B,KAAKy6D,YAAY7lD,SAAS0mD,GAAcA,EAAUxkD,WAAW8e,GAAK7f,SAElE/V,KAAK66D,MAAMjmD,SAASqnC,GAASA,EAAKnlC,WAAW8e,GAAK7f,SAC9C/V,KAAK06D,UAAW,CAEhB,MAAMJ,EAAez3D,EAAY+2B,GAC3B2hC,EAAWjB,EAAelE,GAAWyB,GAC3C73D,KAAK26D,KAAO,IAAIY,EAAS,CACrBrR,UAAWlqD,KAAKy6D,YAAY,GAC5B7D,WAAYh9B,EACZi9B,cAAe,CAAC,GAChBC,aAAc,CAAC,KAEnB92D,KAAK26D,KAAK7yB,eAAeyuB,IAAM,GAC/Bv2D,KAAK26D,KAAK7yB,eAAerT,SAAW6lC,EAAe,EAAI,GAAKt6D,KAAK8nC,eAAe8yB,aAChF56D,KAAK26D,KAAK7jD,WAAW8e,GAAK7f,MAC9B,CACJ,EAEJvT,GAAe+/B,OAAQ,ECnIhB,MAAMi5B,WAAqB7iC,GACnBj3B,sBACP,OAAOG,EAAS25D,YACpB,CAEAj2D,cAAck2D,EAAQj5B,GAClB,IAAKi5B,GAA4B,IAAlBA,EAAO71D,OAClB,OAAO,EACX,IAAI6E,EAAQ,EACZ,IAAK,IAAI/B,EAAI,EAAGA,EAAI+yD,EAAO71D,SAAU8C,EAAG,CACpC,MAAMgzD,EAAQD,EAAO/yD,GACrBgzD,EAAMnjB,YACN9tC,GAASixD,EAAM9rC,UACnB,CAEA,OADA4S,EAAMK,YAAcp4B,GACb,CACX,CACAhJ,YAAYm5B,GACRr3B,QACAvD,KAAKw4C,cAAe,EACpBx4C,KAAKyzB,SAAWkF,GAASC,SAASS,KAClCr5B,KAAK46B,SAAWA,EAChB56B,KAAK46B,SAAShmB,SAASumB,IACnBA,EAAQ0b,gBAAe,EAAM,IAEjC72C,KAAKyK,MAAQ,EACbzK,KAAKusC,UAAY,IAAIuuB,GACrB96D,KAAKumC,MAAQ,IAAIwxB,GAAM,CACnBjlC,UAAW,EACXC,WAAY,EACZ9hB,WAAY+c,EAAO9V,aACpBkhD,WAAU,GACbp5D,KAAKumC,MAAM2zB,aAAal6D,KAAK46B,SACjC,CACA2d,YACQv4C,KAAKw4C,eAETx4C,KAAKusC,UAAUwuB,WAAW,CAAC/6D,KAAKumC,QAAQy0B,OAAO,CAACh7D,KAAKumC,OAAQ,GAC7DvmC,KAAK05B,SAAS15B,KAAKusC,UAAU0uB,oBAC7Bj7D,KAAKw4C,cAAe,EACxB,CACA9e,SAASjvB,GAEL,OADAzK,KAAKyK,MAAQA,EACNzK,IACX,CACA4vB,WACI,OAAO5vB,KAAKyK,KAChB,CACAsL,OACI,MAAM6f,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cACLtW,KAAK26B,sBAAsB36B,KAAK46B,SAAUhB,GAC1C55B,KAAK46B,SAAShmB,SAASumB,GAAYA,EAAQrkB,WAAW8e,GAAK/f,iBAC/D,ECzDG,MAAM8lD,GACTp2D,sBAAsBq2D,GAClB,MAAMC,EAAWD,EAASE,UACpBxpD,EAAQupD,EAAS5lD,QAAQ2lD,GAC/B,GAAItpD,EAAQ,EAAIupD,EAASj2D,OACrB,OAAOi2D,EAASvpD,EAAQ,EAChC,CACA7Q,YAAY4sB,GACRruB,KAAKw4C,cAAe,EACpBx4C,KAAK04C,eAAgB,EACrB14C,KAAK+7D,OAAS1tC,GAAWA,EAAQ0tC,OAAS1tC,EAAQ0tC,OAAS,EAC3D/7D,KAAKg8D,YAAc,IAAI12D,EAAS,EAAG,GACnCtF,KAAKi8D,SAAW,IAAI32D,EAAS,EAAG,GAChCtF,KAAKk8D,iBAAct4D,EACnB5D,KAAKm8D,cAAWv4D,EAChB5D,KAAKo8D,iBAAcx4D,EACnB5D,KAAK60C,QAAU,EACf70C,KAAK2D,EAAI,EACT3D,KAAKq8D,MAAQ,EACbr8D,KAAKs8D,QAAU,EACft8D,KAAKgnC,UAAY,GACjBhnC,KAAKu8D,iBAAmB,CAAC,EAEzBv8D,KAAKq5C,OAAS,EACdr5C,KAAK48C,QAAU,EACf58C,KAAKi5C,oBAAsB,EAC3Bj5C,KAAKu5C,qBAAuB,EAC5Bv5C,KAAKi7B,UAAY,EACjBj7B,KAAKk7B,WAAa,EAClBl7B,KAAKw8D,YAAc,EACnBx8D,KAAKy8D,aAAe,EACpBz8D,KAAK87D,UAAY,GACjB97D,KAAKyK,MAAQ,EACbzK,KAAKs2C,iBAAmB,CAIpBC,QAAS,CAAEnd,KAAM,EAAGE,MAAO,GAEnC,CACAojC,YACI,OAAO18D,KAAK+7D,MAChB,CACA9yD,OACI,OAAOjJ,KAAK2D,CAChB,CACA0F,KAAK1F,GAID,OAHA3D,KAAK2D,EAAIA,EACT3D,KAAKq8D,MAAQ14D,EACb3D,KAAKs8D,QAAU,EACRt8D,IACX,CACA28D,WACI,OAAO38D,KAAKq8D,KAChB,CACAO,SAASP,GACLr8D,KAAKq8D,MAAQA,EACbr8D,KAAK2D,EAAI04D,EAAQr8D,KAAKs8D,OAC1B,CACAO,aACI,OAAO78D,KAAKs8D,OAChB,CACAjhC,WAAWihC,GACPt8D,KAAKs8D,QAAUA,EACft8D,KAAK2D,EAAI3D,KAAKq8D,MAAQC,CAC1B,CACA1sC,WACI,OAAO5vB,KAAKyK,MAAuB,EAAfzK,KAAK60C,OAC7B,CACAgJ,WAAWhJ,GAEP,OADA70C,KAAK60C,QAAUA,EACR70C,IACX,CACA88D,cACI,OAAO98D,KAAKi8D,QAChB,CACAc,cACI,OAAO/8D,KAAKm8D,QAChB,CACAa,iBACI,OAAOh9D,KAAKk8D,WAChB,CACAe,iBACI,OAAOj9D,KAAKo8D,WAChB,CACA31B,eACI,OAAOzmC,KAAKgnC,SAChB,CAMAk2B,oBAAoBC,GAChB,OAAOn9D,KAAKu8D,iBAAiBY,EACjC,CACAC,sBACI,OAAOp9D,KAAKu8D,gBAChB,CACAc,4BACI,OAAOr9D,KAAKgnC,UAAUsV,QAAQ6c,GAAaA,EAASliB,mBACxD,CAEAnmC,aACI,MAAM,MAAErG,EAAK,QAAEmyC,EAAO,OAAEvD,EAAM,oBAAEJ,EAAmB,qBAAEM,EAAoB,UAAEte,EAAS,WAAEC,EAAU,YAAEshC,EAAW,aAAEC,GAAkBz8D,KACjI,MAAO,CACHyK,QACAmyC,UACAvD,SACAJ,sBACAM,uBACAte,YACAC,aACAshC,cACAC,eAER,CACAa,iBACI,OAAOt9D,KAAKg8D,WAChB,CACAuB,eAAeC,GACXx9D,KAAKg8D,YAAcwB,EACnBx9D,KAAKw4C,cAAe,CACxB,CACAyhB,YAAYd,EAAUgE,GAClB,IAAKhE,EACD,MAAM,IAAIh2D,EAAa,cAAe,2BAE1C,IAAKg2D,EAASzyB,oBAAqB,CAC/B,MAAMtW,EAAQ+oC,EAASvyB,WACnBxW,EAAM9oB,YAAYtH,KAAKi8D,YACvBj8D,KAAKi8D,SAAW7rC,EAAM1oB,QACtB1H,KAAKk8D,YAAc/C,IAEF,MAAjBn5D,KAAKm8D,UAIA/rC,EAAM5oB,SAASxH,KAAKm8D,aAHzBn8D,KAAKm8D,SAAW/rC,EAAM1oB,QACtB1H,KAAKo8D,YAAcjD,EAM3B,CAKA,OAJAA,EAAS9gB,eAAer4C,MACxBA,KAAKgnC,UAAUvyB,KAAK0kD,GACpBn5D,KAAKu8D,iBAAiBY,GAAc,GAAKhE,EACzCn5D,KAAKw4C,cAAe,EACbx4C,IACX,CACAu4C,YACI,GAAIv4C,KAAKw4C,aACL,OAAOx4C,KACX,IAAK,IAAI0I,EAAI,EAAGA,EAAI1I,KAAKgnC,UAAUphC,SAAU8C,EAAG,CAC5C,MAAMywD,EAAWn5D,KAAKgnC,UAAUt+B,GAChCywD,EAAS5gB,YACT,MAAM/nC,EAAU2oD,EAASroD,aAEzB9Q,KAAKi5C,oBAAsBh0C,KAAK8E,IAAI/J,KAAKi5C,oBAAqBzoC,EAAQyoC,qBACtEj5C,KAAKu5C,qBAAuBt0C,KAAK8E,IAAI/J,KAAKu5C,qBAAsB/oC,EAAQ+oC,sBAExEv5C,KAAKq5C,OAASp0C,KAAK8E,IAAI/J,KAAKq5C,OAAQ7oC,EAAQ6oC,QAE5Cr5C,KAAK48C,QAAU33C,KAAK8E,IAAI/J,KAAK48C,QAASpsC,EAAQi/B,YAAc,GAE5DzvC,KAAKi7B,UAAYh2B,KAAK8E,IAAI/J,KAAKi7B,UAAWzqB,EAAQyqB,WAClDj7B,KAAKk7B,WAAaj2B,KAAK8E,IAAI/J,KAAKk7B,WAAY1qB,EAAQ0qB,YAEpDl7B,KAAKw8D,YAAcv3D,KAAK8E,IAAI/J,KAAKw8D,YAAahsD,EAAQyqB,UAAYzqB,EAAQyoC,qBAC1Ej5C,KAAKy8D,aAAex3D,KAAK8E,IAAI/J,KAAKy8D,aAAcjsD,EAAQ0qB,WAAa1qB,EAAQ+oC,sBAE7Ev5C,KAAKyK,MAAQzK,KAAKq5C,OAASr5C,KAAKw8D,YAAcx8D,KAAKy8D,YACvD,CACA,OAAOz8D,IACX,CACAy4C,aACI,OAAIz4C,KAAK04C,gBAET14C,KAAK04C,eAAgB,GADV14C,IAGf,CACA+2C,sBACI,OAAO/2C,KAAKs2C,gBAChB,EC1KJ,MAAMmnB,WAAiB9kC,GAERj3B,sBACP,OAAOG,EAAS47D,QACpB,CACW1Z,wBAEP,OADkB/1B,EAAO0U,mBACRtxB,aAAa,sBAClC,CAEA7L,cAAcgnB,EAAWiW,GACrB,IAAKjW,GAAkC,IAArBA,EAAU3mB,OACxB,OAAO,EACX,IAAI6E,EAAQ,EACRsmC,EAAcvO,EAAMuO,YACpBlO,EAAaL,EAAMK,WACnBygB,EAAU,EACd,IAAK,IAAI56C,EAAI,EAAGA,EAAI6jB,EAAU3mB,SAAU8C,EAAG,CACvC,MAAMg1D,EAAWnxC,EAAU7jB,GACrB2qC,EAAY,EAiBlB,GAhBIoqB,GAASE,gBAAgB1nD,QAAQynD,EAASzrD,OAAS,IACnDyrD,EAASlpC,SAAWuc,EAAc,GAElC0sB,GAASG,eAAe3nD,QAAQynD,EAASzrD,OAAS,IAClDyrD,EAASlpC,SAAWqO,EAAa,GAEjC66B,EAASG,eAAiBH,EAASlpC,QAAU,EAC7CqO,GAAc66B,EAASG,cAElBH,EAASG,eAAiBH,EAASlpC,SAAW,EACnDuc,GAAe2sB,EAASG,cAAgBJ,GAAS1Z,WAGjDt5C,EAAQxF,KAAK8E,IAAI2zD,EAAS9tC,WAAYnlB,GAGtCgzD,GAASK,qBAAqB7nD,QAAQynD,EAASzrD,OAAS,EAAG,CAGtCvO,EAAQg6D,EAAS9jC,KAAM,kBAC3B4W,iBAAmB,GAAKktB,EAASpjC,gBAAkB3B,GAASC,SAASK,OAClFuJ,EAAMkO,eAAiB2C,EACvBqqB,EAASjpC,SAAW6uB,EACpBA,GAAWoa,EAASpuC,MAAM+E,KAAKjrB,SAG/Bo5B,EAAMhJ,WAAa6Z,EACnBqqB,EAASjpC,SAAW6uB,EACpBA,GAAWoa,EAASpuC,MAAM+E,KAAKjrB,OAEvC,MAEQs0D,EAASpjC,gBAAkB3B,GAASC,SAASK,OAC7CykC,EAASljC,YAAYgI,EAAMkO,eAC3BlO,EAAMkO,eAAiB2C,IAGvBqqB,EAASljC,YAAYgI,EAAMhJ,WAC3BgJ,EAAMhJ,WAAa6Z,EAG/B,CAKA,OAFA7Q,EAAMK,WAAaA,EAAap4B,EAAQ,EACxC+3B,EAAMuO,YAAcA,EAActmC,EAAQ,GACnC,CACX,CAKWszD,oCACP,MAAO,CAAC,OAAQ,WAAY,QAChC,CAKWH,4BACP,MAAO,CAAC,QACZ,CAKWI,uCACP,MAAO,CAAC,OAAQ,OAAQ,WAAY,WAAY,OAAQ,gBAAiB,cAAe,QAC5F,CAKWL,6BACP,MAAO,CAAC,OAAQ,OAAQ,WAAY,WAAY,WAAY,QAAS,OACzE,CAEWG,kCACP,MAAO,CAAC,OAAQ,gBAAiB,cACrC,CAKAhtD,aACI,MAAMmtD,EAAkBjwC,EAAO0U,mBAAmB5xB,aAAa4sD,SAC/D,IAAKO,EACD,MAAM,IAAI96D,EAAa,aAAc,oBACzC,OAAO86D,EAAgBj+D,KAAK09D,SAASr6D,KACzC,CAKA5B,YAAYwQ,GACR1O,QACAvD,KAAKiS,KAAOA,EACZjS,KAAKk+D,SAAU,EACfl+D,KAAK8nC,eAAiB,CAClBC,WAAY/Z,EAAOyC,oBACnB0tC,uBAAwB,EACxBC,uBAAwB,GAE5Bp+D,KAAK09D,SAAW1vC,EAAOqwC,cAAcr+D,KAAKiS,MAI1C,MAAMzB,EAAUxQ,KAAK8Q,aAQrB,GANA9Q,KAAKs+D,wBAAyB,EAG9Bt+D,KAAK69D,cAAgBrtD,GAAWA,EAAQqtD,cAAgBrtD,EAAQqtD,cAAgB,EAChF79D,KAAKu+D,cAAgB/tD,GAAWA,EAAQ+tD,cAAgB/tD,EAAQ+tD,cAAgB,EAChFv+D,KAAKg+D,0BAA4BP,GAASO,0BAA0B/nD,QAAQjW,KAAKiS,OAAS,GACrFjS,KAAK09D,SACN,MAAM,IAAIv6D,EAAa,gBAAiB,wBAAwBnD,KAAKiS,SAEzEjS,KAAKw0B,QAAUhkB,EAAUA,EAAQ8rD,QAAU,EAC3Ct8D,KAAKy0B,QAAUjkB,EAAUA,EAAQ8yC,QAAU,EAC3CtjD,KAAKsvB,MAAQ,IAAIG,EAAMzvB,KAAK09D,SAASr6D,KAAMrD,KAAK8nC,eAAeC,WAAY,CACvEzmC,SAAU,YAAYtB,KAAK09D,SAASr6D,SAGpCo6D,GAASM,uBAAuB9nD,QAAQjW,KAAKiS,OAAS,IACtDjS,KAAKk+D,SAAU,GAId1tD,GACDxQ,KAAKsvB,MAAM0I,UAAU,GAAK,EAElC,CAEAwmC,WAAWN,GAEP,OADAl+D,KAAKk+D,QAAUA,EACRl+D,IACX,CAEAy+D,mBAAmBC,GACf,MAAMrvC,EAAQrvB,KAAK8nC,eAAeC,WAAa,IAG/C,OAFA/nC,KAAK2+D,gBAAkB,IAAIlvC,EAAMzB,EAAOka,gBAAgBw2B,GAAOr7D,KAAMgsB,GACrErvB,KAAK2+D,gBAAgB3mC,UAAU,GAAK,GAC7Bh4B,IACX,CAEA4+D,mBAAmBF,GACf,MAAMrvC,EAAQrvB,KAAK8nC,eAAeC,WAAa,IAG/C,OAFA/nC,KAAK6+D,gBAAkB,IAAIpvC,EAAMzB,EAAOka,gBAAgBw2B,GAAOr7D,KAAMgsB,GACrErvB,KAAK6+D,gBAAgB7mC,UAAU,GAAK,GAC7Bh4B,IACX,CAEA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cACL,MAAMwoD,EAAUllC,EAAKkW,mBACfzY,EAAQuC,EAAKxB,aACnBp4B,KAAK8U,aACL8gB,EAAI8V,UAAU,WAAY1rC,KAAK6S,aAAa,OAE5C,MAAMksD,EAAcnlC,EAAKiY,YAAYrH,aACrC,IAAI1hC,EAAIg2D,IAAYj2B,GAAKE,KAAOg2B,EAAY/zB,MAAQ+zB,EAAYh0B,KAE5D9nC,EAAU22B,KACNA,EAAKiW,UACDivB,IAAYj2B,GAAKE,OACjBjgC,EAAIuuB,EAAM2a,eAAehyC,KAAKw5B,YAKlC1wB,EAAIuuB,EAAM2a,eAAehyC,KAAKw5B,YAGtC,MAAMwlC,EAAyBF,IAAYj2B,GAAKE,KAC1C4I,EAAUta,EAAMkM,yBACtB,IAAImtB,EAAc,GAEbsO,GAA0BplC,EAAKuiB,YAChCuU,GAAe,IAEnB,MACMuO,EAAqBn2D,EADN6oC,GAAW3xC,KAAKw5B,UAAYk3B,GAG3CjoB,EAAQ7O,EAAK8O,mBAAmB1oC,KAAKyzB,SAAUzzB,KAAKsS,OAC1D,IAAI4sD,EAASz2B,EAAM9kC,EAGfw7D,EAASn/D,KAAKg+D,0BACZv1B,EAAM3/B,EACN7D,KAAK4lC,IAAIxT,EAAM2a,eAAehyC,KAAKw5B,WAAYylC,GAGrD,GAFAE,GAAUn/D,KAAKy0B,QAEXz0B,KAAKk+D,QAAS,CACd,IAAIkB,EAAc,EAClB,MAAMC,EAASH,GAAU7nC,EAAMpuB,OAAS,IACxC,QAAyBrF,IAArB5D,KAAKo/D,YACLA,EAAcp/D,KAAKo/D,gBAElB,CACDA,GAAep/D,KAAKsvB,MAAMxe,aAAarG,MAAQ,EAC/C,MAAM60D,EAAc3D,GAAY4D,eAAe3lC,EAAKkB,kBAEhDskC,GADAE,EAC+C,IAA/BA,EAAYr2D,OAASo2D,GAGuB,IAA5ChoC,EAAMpuB,OAASouB,EAAMzH,WAAayvC,GAEtDr/D,KAAKo/D,YAAcA,CACvB,CACAF,GAAUE,CACd,EApPR,YAAcr7D,GACN05D,GAASl7B,OACT1+B,EAAI,oBAAqBE,EACjC,CAkPQ,CAAE,uBAAwB/D,KAAK09D,SAAUwB,EAAQC,GAC7Cn/D,KAAK6+D,kBACL7+D,KAAK6+D,gBAAgB5mC,OAAOrC,EAAKspC,EAAQC,GACzCA,GAAUn/D,KAAK6+D,gBAAgB/tD,aAAapG,OAC5Cy0D,GAAUn/D,KAAK8nC,eAAeq2B,wBAE9Bn+D,KAAKu+D,eAAiB3kC,EAAKiW,WAAyC,IAA5BjW,EAAKkW,qBAC7CqvB,GAAUn/D,KAAKu+D,eAEf3kC,EAAK4W,gBAAkB,GAAKitB,GAASM,uBAAuB9nD,QAAQjW,KAAKiS,OAAS,IAClFktD,EAASvlC,EAAKxB,aAAaxhB,iBAAiB1N,OAAS,IAEzDlJ,KAAKsvB,MAAM2I,OAAOrC,EAAKspC,EAASl/D,KAAKw0B,QAAS2qC,GAC1Cn/D,KAAK2+D,kBACLQ,GAAUn/D,KAAKsvB,MAAMxe,aAAapG,OAAS1K,KAAK8nC,eAAes2B,uBAC/Dp+D,KAAK2+D,gBAAgB1mC,OAAOrC,EAAKspC,EAAQC,IAE7CvpC,EAAIgW,aACJ5rC,KAAK2V,cACT,EAGJ8nD,GAASl7B,OAAQ,EC7QV,MAAMi9B,WAAoB7mC,GAClBj3B,sBACP,OAAOG,EAAS29D,WACpB,CAEAj6D,sBAAsByqB,GAClB,IAAK,MAAM4J,KAAQ5J,EACf,IAAK,IAAItnB,EAAI,EAAGA,EAAIkxB,EAAKtmB,KAAK1N,OAAQ8C,IAClCkxB,EAAKgO,YAAY,IAAI43B,GAAYxrC,EAAiBqF,MAAO3wB,GACzDkxB,EAAKgO,YAAY,IAAI43B,GAAYxrC,EAAiBuF,OAAQ7wB,EAGtE,CAEAnD,cAAck6D,EAAaj9B,GACvB,IAAKi9B,GAAsC,IAAvBA,EAAY75D,OAC5B,OAAO,EACX,IAAI85D,EAAW,EACXC,EAAW,EACf,IAAK,IAAIj3D,EAAI,EAAGA,EAAI+2D,EAAY75D,SAAU8C,EAAG,CACzC,MAAMk3D,EAAcH,EAAY/2D,GAC1BkxB,EAAOgmC,EAAYjmC,UACnBkxB,EAAM+U,EAAYtlC,cAClBhoB,EAAQstD,EAAY5lC,aAC1B,IAAIl0B,EAAQ,EACR+kD,IAAQ72B,EAAiBuF,QACzBzzB,EAAQ8zB,EAAK2iB,sBAAsBjqC,GACnCqtD,EAAWA,EAAW75D,EAAQ85D,EAAYn1D,MAAQk1D,EAAW75D,EAAQ85D,EAAYn1D,OAEjFogD,IAAQ72B,EAAiBqF,OACzBvzB,EAAQ8zB,EAAK4iB,qBAAqBlqC,GAClCotD,EAAWA,EAAW55D,EAAQ85D,EAAYn1D,MAAQi1D,EAAW55D,EAAQ85D,EAAYn1D,OAErFm1D,EAAYroC,UAAUzxB,EAC1B,CAGA,OAFA08B,EAAMK,YAAc68B,EACpBl9B,EAAMuO,aAAe4uB,GACd,CACX,CAMAl+D,YAAYgyB,GACR,IAAI5lB,EACJtK,QACAvD,KAAKyzB,SAAWA,QAA2CA,EAAWkF,GAASC,SAASS,KACxFr5B,KAAKm0B,MAAuF,QAA9EtmB,EAAKmgB,EAAO0U,mBAAmBtxB,aAAa,oCAAiD,IAAPvD,EAAgBA,EAAKnL,GAAKm9D,SAAS,WACvI7/D,KAAK05B,SAAS1L,EAAO0U,mBAAmBtxB,aAAa,6BACzD,CAEA0oB,QAAQF,GACJ,IAAI/rB,EAAIoF,EAQR,OAPAjT,KAAK45B,KAAOA,EACZ55B,KAAKm0B,MAAuF,QAA9EtmB,EAAKmgB,EAAO0U,mBAAmBtxB,aAAa,oCAAiD,IAAPvD,EAAgBA,EAAKnL,GAAKm9D,SAAS,WACvI7/D,KAAK05B,SAAS1L,EAAO0U,mBAAmBtxB,aAAa,8BACjD/O,EAAYu3B,KACZ55B,KAAKm0B,MAAyF,QAAhFlhB,EAAK+a,EAAO0U,mBAAmBtxB,aAAa,sCAAmD,IAAP6B,EAAgBA,EAAKvQ,GAAKm9D,SAAS,aACzI7/D,KAAK05B,SAAS1L,EAAO0U,mBAAmBtxB,aAAa,iCAElDpR,IACX,CAEA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cACL,MAAMmyB,EAAQ7O,EAAK8O,mBAAmB1oC,KAAKyzB,SAAUzzB,KAAKsS,MAAO,CAAEg4C,gBAAgB,IAC7E3mD,EAAI8kC,EAAM9kC,EAAI3D,KAAKw0B,QACnB1rB,EAAI2/B,EAAM3/B,EAAI9I,KAAKy0B,QACrBz0B,KAAKyzB,UAAYkF,GAASC,SAASW,MACnC9J,EAAMk+B,YAAY/3B,EAAKjyB,EAAI,EAAGmF,EAAG9I,KAAKm0B,MAAO,2BAA4B,CACrE7yB,SAAU,+CAGTtB,KAAKyzB,UAAYkF,GAASC,SAASS,MACxC5J,EAAMk+B,YAAY/3B,EAAKjyB,EAAI,EAAGmF,EAAG9I,KAAKm0B,MAAO,0BAA2B,CACpE7yB,SAAU,6CAGtB,EClFG,SAASw+D,GAAappD,GACzB,IAAKA,EACD,OAAO,EACX,MAAMmsC,EAASr/C,IACf,MAEqC,mBAA7Bq/C,EAAOkd,mBAAoCrpD,aAAmBmsC,EAAOkd,mBAG1C,mBAAvBrpD,EAAQG,YAA0D,mBAAtBH,EAAQspD,SACpE,CAEO,SAASC,GAAUvpD,GACtB,IAAKA,EACD,OAAO,EACX,MAAMmsC,EAASr/C,IACf,MAEkC,mBAA1Bq/C,EAAOqd,gBAAiCxpD,aAAmBmsC,EAAOqd,gBAEtC,mBAAxBxpD,EAAQypD,aAAuD,iBAAlBzpD,EAAQpI,KACrE,CCnBO,MAAM8xD,WAAsBx9D,GACpBomC,mBACP,OAAO,GACX,CACWC,oBACP,OAAO,GACX,CACWo3B,uCACP,OAAO,KACX,CAKA96D,0BAA0BkF,EAAOC,GAC7B,MAAM41D,EAAQtgE,KAAKqgE,0BAUnB,OATIp7D,KAAK8E,IAAIU,EAAOC,GAAU41D,IAC1Bj8D,EAAK,uDAAyDi8D,GAC1D71D,EAAQ61D,IACR71D,EAAQ61D,GAER51D,EAAS41D,IACT51D,EAAS41D,IAGV,CAAC71D,EAAOC,EACnB,CACAjJ,YAAYsT,GACRxR,QAEAvD,KAAK8qD,WAAa,EAClB9qD,KAAKugE,UAAYxrD,EACZA,EAAQyrD,OAOTxgE,KAAKwgE,OAASzrD,EAAQyrD,OANtBxgE,KAAKwgE,OAAS,CACV/1D,MAAO21D,GAAcp3B,MACrBt+B,OAAQ01D,GAAcn3B,OAMlC,CAIA12B,QACIvS,KAAKugE,UAAUE,UAAU,EAAG,EAAGzgE,KAAKwgE,OAAO/1D,MAAOzK,KAAKwgE,OAAO91D,OAClE,CAEAghC,UAAUg1B,EAAK1uD,EAAIkC,GAEnB,CACA03B,aAEA,CAEArlC,IAAIiO,GAEJ,CACAc,aAAahH,GAET,OADAtO,KAAKugE,UAAUlrD,UAAY/G,EACpBtO,IACX,CAGA2gE,uBAAuBryD,GAEnB,OAAOtO,IACX,CACAwV,eAAelH,GAEX,OADAtO,KAAKugE,UAAUhrD,YAAcjH,EACtBtO,IACX,CACAkV,eAAeugC,GAEX,OADAz1C,KAAKugE,UAAUtrD,YAAcwgC,EACtBz1C,IACX,CACAoV,cAAcwrD,GAKV,MAAMl7D,EAAI1F,KAAKugE,UAAUM,eACnBxxC,EAAQpqB,KAAKmH,KAAK1G,EAAEjB,EAAIiB,EAAEjB,EAAIiB,EAAEhB,EAAIgB,EAAEhB,EAAIgB,EAAEuG,EAAIvG,EAAEuG,EAAIvG,EAAEW,EAAIX,EAAEW,GAEpE,OADArG,KAAKugE,UAAUprD,WAAaka,EAAQuxC,EAC7B5gE,IACX,CACA0V,aAAajL,GAET,OADAzK,KAAKugE,UAAU9qD,UAAYhL,EACpBzK,IACX,CACA8gE,WAAWC,GAEP,OADA/gE,KAAKugE,UAAUS,QAAUD,EAClB/gE,IACX,CACAihE,YAAYC,GAER,OADAlhE,KAAKugE,UAAUU,YAAYC,GACpBlhE,IACX,CACAqvB,MAAM1rB,EAAGmF,GAEL,OADA9I,KAAKugE,UAAUlxC,MAAM1rB,EAAGmF,GACjB9I,IACX,CACAmhE,OAAO12D,EAAOC,EAAQ02D,GAClB,IAAIvzD,EACJ,MAAM2yD,EAASxgE,KAAKugE,UAAUC,OACxBa,EAA+H,QAAxHxzD,EAAKuzD,QAA2DA,EAAmB59D,IAAe49D,wBAAqC,IAAPvzD,EAAgBA,EAAK,EAclK,OAZCpD,EAAOC,GAAU01D,GAAckB,mBAAmB72D,EAAQ42D,EAAK32D,EAAS22D,GAEzE52D,EAASA,EAAQ42D,EAAO,EACxB32D,EAAUA,EAAS22D,EAAO,EAC1Bb,EAAO/1D,MAAQA,EAAQ42D,EACvBb,EAAO91D,OAASA,EAAS22D,EAGrBvB,GAAaU,KACbA,EAAOlyD,MAAM7D,MAAQA,EAAQ,KAC7B+1D,EAAOlyD,MAAM5D,OAASA,EAAS,MAE5B1K,KAAKqvB,MAAMgyC,EAAKA,EAC3B,CACAE,KAAK59D,EAAGmF,EAAG2B,EAAOC,GAEd,OADA1K,KAAKugE,UAAUgB,KAAK59D,EAAGmF,EAAG2B,EAAOC,GAC1B1K,IACX,CACAmgD,SAASx8C,EAAGmF,EAAG2B,EAAOC,GAElB,OADA1K,KAAKugE,UAAUpgB,SAASx8C,EAAGmF,EAAG2B,EAAOC,GAC9B1K,IACX,CAIAygE,UAAU98D,EAAGmF,EAAG2B,EAAOC,GAEnB,OADA1K,KAAKugE,UAAUE,UAAU98D,EAAGmF,EAAG2B,EAAOC,GAC/B1K,IACX,CACAo2B,YAEI,OADAp2B,KAAKugE,UAAUnqC,YACRp2B,IACX,CACAq2B,OAAO1yB,EAAGmF,GAEN,OADA9I,KAAKugE,UAAUlqC,OAAO1yB,EAAGmF,GAClB9I,IACX,CACAs2B,OAAO3yB,EAAGmF,GAEN,OADA9I,KAAKugE,UAAUjqC,OAAO3yB,EAAGmF,GAClB9I,IACX,CACAw2B,cAAcgrC,EAAMC,EAAMC,EAAMC,EAAMh+D,EAAGmF,GAErC,OADA9I,KAAKugE,UAAU/pC,cAAcgrC,EAAMC,EAAMC,EAAMC,EAAMh+D,EAAGmF,GACjD9I,IACX,CACAu2B,iBAAiBqrC,EAAKC,EAAKl+D,EAAGmF,GAE1B,OADA9I,KAAKugE,UAAUhqC,iBAAiBqrC,EAAKC,EAAKl+D,EAAGmF,GACtC9I,IACX,CACA01C,IAAI/xC,EAAGmF,EAAGuhD,EAAQyX,EAAYC,EAAUC,GAEpC,OADAhiE,KAAKugE,UAAU7qB,IAAI/xC,EAAGmF,EAAGuhD,EAAQyX,EAAYC,EAAUC,GAChDhiE,IACX,CACAy2B,OAEI,OADAz2B,KAAKugE,UAAU9pC,OACRz2B,IACX,CACA4uB,SAEI,OADA5uB,KAAKugE,UAAU3xC,SACR5uB,IACX,CACA21C,YAEI,OADA31C,KAAKugE,UAAU5qB,YACR31C,IACX,CACAuiD,YAAYx9C,GACR,MAAMyL,EAAUxQ,KAAKugE,UAAUhe,YAAYx9C,GAC3C,IAAI+D,EAAI,EACJ4B,EAAS,EAUb,OATI8F,EAAQyxD,uBACRn5D,GAAK0H,EAAQyxD,sBACbv3D,EAAS8F,EAAQ0xD,uBAAyB1xD,EAAQyxD,wBAGlDn5D,GAAK0H,EAAQ2xD,wBACbz3D,EAAS8F,EAAQ4xD,yBAA2B5xD,EAAQ2xD,yBAGjD,CACHx+D,EAAG,EACHmF,EAAGA,EACH2B,MAAO+F,EAAQ/F,MACfC,OAAQA,EAEhB,CACA2nC,SAASttC,EAAMpB,EAAGmF,GAEd,OADA9I,KAAKugE,UAAUluB,SAASttC,EAAMpB,EAAGmF,GAC1B9I,IACX,CACAgV,OAEI,OADAhV,KAAKugE,UAAUvrD,OACRhV,IACX,CACA4V,UAEI,OADA5V,KAAKugE,UAAU3qD,UACR5V,IACX,CACIqV,cAAU/G,GACVtO,KAAKugE,UAAUlrD,UAAY/G,CAC/B,CACI+G,gBACA,OAAOrV,KAAKugE,UAAUlrD,SAC1B,CACIE,gBAAYjH,GACZtO,KAAKugE,UAAUhrD,YAAcjH,CACjC,CACIiH,kBACA,OAAOvV,KAAKugE,UAAUhrD,WAC1B,CASAwB,QAAQxO,EAAG6F,EAAMC,EAAQC,GACrB,MAAMY,EAAWxB,EAAK+J,SAASlP,EAAG6F,EAAMC,EAAQC,GAGhD,OAFAtO,KAAKugE,UAAUzxD,KAAOpB,EAAKsJ,YAAY9H,GACvClP,KAAK8qD,WAAap9C,EAAKuK,wBAAwB/I,EAASd,MACjDpO,IACX,CAEA0X,UACI,OAAO1X,KAAKugE,UAAUzxD,IAC1B,EC5OJ,MAAMuzD,GAAuB,CACzBC,KAAM,CACF3+D,GAAG,EACHmF,GAAG,EACH2B,OAAO,EACPC,QAAQ,EACR,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,GAEjB62D,KAAM,CACF,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,GAEjBx8D,KAAM,CACF0F,OAAO,EACPC,QAAQ,IAIV63D,GAAS,6BACTC,GAAS,EAAIv9D,KAAKC,GAmDxB,MAAMu9D,WAAmB7/D,GACrBnB,YAAYiV,GACRnT,QACAvD,KAAKyK,MAAQ,EACbzK,KAAK0K,OAAS,EACd1K,KAAK80B,UAAY,EACjB90B,KAAK0iE,oBAAsB,QAE3B1iE,KAAK2iE,cAAgB,GACrB3iE,KAAK0W,QAAUA,EACf1W,KAAK80B,UAAY7vB,KAAK+G,IAAI,GAAIgiB,EAAO+C,yBAErC,MAAM6xC,EAAM5iE,KAAKuvC,OAAO,OACxBvvC,KAAK0W,QAAQypD,YAAYyC,GACzB5iE,KAAK4iE,IAAMA,EACX5iE,KAAK6iE,OAAS7iE,KAAK4iE,IACnB5iE,KAAKy7D,OAAS,CAACz7D,KAAK4iE,KACpB5iE,KAAKsiE,KAAO,GACZtiE,KAAK8iE,IAAM,CAAEn/D,EAAGwG,IAAKrB,EAAGqB,KACxBnK,KAAKyV,UAAY,EACjB,MAAMstD,EAAwB,CAC1B,cAAer1D,EAAKe,WACpB,YAAaf,EAAKE,KAAO,KACzB,cAAetB,EAAWoC,OAC1B,aAAcnC,EAAUmC,QAE5B1O,KAAKwiC,MAAQniC,OAAOmX,OAAO,CAAEwrD,OAAQ,EAAGC,OAAQ,GAAKF,GACrD/iE,KAAKkjE,WAAa7iE,OAAOmX,OAAO,CAAE,eAAgB,GAAK,mBAAoB,OAAQif,KAAM,QAAS7H,OAAQ,SAAWm0C,GACrH/iE,KAAKmjE,gBAAkB,GACvBnjE,KAAKojE,gBAAgBR,EAAK5iE,KAAKkjE,YAC/BljE,KAAKmjE,gBAAgB1uD,KAAKpU,OAAOmX,OAAO,CAAC,EAAGxX,KAAKkjE,aACjDljE,KAAKqjE,kBAAoB,CACrB54D,MAAO,EACPgrC,MAAO,SAEXz1C,KAAKsjE,YAAc,EACvB,CACAvuC,MAAMnwB,GACF,OAAOK,KAAK8vB,MAAMnwB,EAAI5E,KAAK80B,WAAa90B,KAAK80B,SACjD,CACAya,OAAOg0B,GACH,OAAO30D,SAAS40D,gBAAgBjB,GAAQgB,EAC5C,CAEA73B,UAAUg1B,EAAK1uD,EAAIkC,GACf,MAAMwnD,EAAQ17D,KAAKuvC,OAAO,KAa1B,OAZAvvC,KAAKy7D,OAAOhnD,KAAKinD,GACjB17D,KAAK6iE,OAAO1C,YAAYzE,GACxB17D,KAAK6iE,OAASnH,EACVgF,GACAhF,EAAM3oD,aAAa,QAASjO,EAAO47D,IACnC1uD,GACA0pD,EAAM3oD,aAAa,KAAMjO,EAAOkN,IAChCkC,GAASA,EAAMy3B,aACf+vB,EAAM3oD,aAAa,iBAAkB,gBAEzC/S,KAAKojE,gBAAgB1H,EAAO17D,KAAKkjE,YACjCljE,KAAKmjE,gBAAgB1uD,KAAKpU,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKmjE,gBAAgBnjE,KAAKmjE,gBAAgBv9D,OAAS,IAAK5F,KAAKkjE,aAChHxH,CACX,CACA9vB,aACI5rC,KAAKy7D,OAAOzjB,MACZh4C,KAAKmjE,gBAAgBnrB,MACrBh4C,KAAK6iE,OAAS7iE,KAAKy7D,OAAOz7D,KAAKy7D,OAAO71D,OAAS,EACnD,CACAW,IAAIkM,GACAzS,KAAK6iE,OAAO1C,YAAY1tD,EAC5B,CACA6C,aAAahH,GAET,OADAtO,KAAKkjE,WAAWzsC,KAAOnoB,EAChBtO,IACX,CAKA2gE,uBAAuBryD,GAEnB,OADAtO,KAAK0iE,oBAAsBp0D,EACpBtO,IACX,CACAwV,eAAelH,GAEX,OADAtO,KAAKkjE,WAAWt0C,OAAStgB,EAClBtO,IACX,CACAkV,eAAeugC,GAEX,OADAz1C,KAAKqjE,kBAAkB5tB,MAAQA,EACxBz1C,IACX,CAMAoV,cAAcwrD,GAEV,OADA5gE,KAAKqjE,kBAAkB54D,MAAQm2D,EACxB5gE,IACX,CAKA0V,aAAajL,GAGT,OAFAzK,KAAKkjE,WAAW,gBAAkBz4D,EAClCzK,KAAKyV,UAAYhL,EACVzK,IACX,CAOAihE,YAAYwC,GACR,GAAiD,mBAA7CpjE,OAAOS,UAAUmH,SAASjH,KAAKyiE,GAE/B,OADAzjE,KAAKkjE,WAAW,oBAAsBO,EAASt/D,KAAK,KAC7CnE,KAGP,MAAM,IAAImD,EAAa,gBAAiB,yCAEhD,CAKA29D,WAAWC,GAEP,OADA/gE,KAAKkjE,WAAW,kBAAoBnC,EAC7B/gE,IACX,CAMAmhE,OAAO12D,EAAOC,GACV1K,KAAKyK,MAAQA,EACbzK,KAAK0K,OAASA,EACd1K,KAAK0W,QAAQpI,MAAM7D,MAAQA,EAAMxC,WACjCjI,KAAK4iE,IAAIt0D,MAAM7D,MAAQA,EAAMxC,WAC7BjI,KAAK4iE,IAAIt0D,MAAM5D,OAASA,EAAOzC,WAC/B,MAAMi7D,EAAa,CACfz4D,QACAC,UAIJ,OAFA1K,KAAKojE,gBAAgBpjE,KAAK4iE,IAAKM,GAC/BljE,KAAKqvB,MAAMrvB,KAAKwiC,MAAMwgC,OAAQhjE,KAAKwiC,MAAMygC,QAClCjjE,IACX,CACAqvB,MAAM1rB,EAAGmF,GAYL9I,KAAKwiC,MAAMwgC,OAAShjE,KAAKwiC,MAAMwgC,OAAShjE,KAAKwiC,MAAMwgC,OAASr/D,EAAIA,EAChE3D,KAAKwiC,MAAMygC,OAASjjE,KAAKwiC,MAAMygC,OAASjjE,KAAKwiC,MAAMygC,OAASn6D,EAAIA,EAChE,MAAM46D,EAAe1jE,KAAKyK,MAAQzK,KAAKwiC,MAAMwgC,OACvCW,EAAgB3jE,KAAK0K,OAAS1K,KAAKwiC,MAAMygC,OAE/C,OADAjjE,KAAK4jE,WAAW,EAAG,EAAGF,EAAcC,GAC7B3jE,IACX,CAKA4jE,WAAWC,EAAiB/R,EAAMrnD,EAAOC,GACrC,GAA+B,iBAApBm5D,EACP7jE,KAAK4iE,IAAI7vD,aAAa,UAAW8wD,OAEhC,CACD,MAAMC,EAAgBD,EAAkB,IAAM/R,EAAO,IAAMrnD,EAAQ,IAAMC,EACzE1K,KAAK4iE,IAAI7vD,aAAa,UAAW+wD,EACrC,CACJ,CAEAV,gBAAgB1sD,EAASwsD,GACrB,MAAMa,EAAoB1B,GAAqB3rD,EAAQstD,UACvD,IAAK,MAAMC,KAAYf,EACfa,GAAqBA,EAAkBE,KAGvCf,EAAWe,IACqB,GAA/BjkE,KAAKmjE,gBAAgBv9D,QAClBs9D,EAAWe,IAAajkE,KAAKmjE,gBAAgBnjE,KAAKmjE,gBAAgBv9D,OAAS,GAAGq+D,IAClFvtD,EAAQwtD,eAAe,KAAMD,EAAUf,EAAWe,IAE1D,OAAOvtD,CACX,CAEAnE,QASI,KAAOvS,KAAK4iE,IAAIuB,WACZnkE,KAAK4iE,IAAIwB,YAAYpkE,KAAK4iE,IAAIuB,WAGlCnkE,KAAKqvB,MAAMrvB,KAAKwiC,MAAMwgC,OAAQhjE,KAAKwiC,MAAMygC,OAC7C,CAEA1B,KAAK59D,EAAGmF,EAAG2B,EAAOC,EAAQw4D,GAElBx4D,EAAS,IACT5B,GAAK4B,EACLA,IAAW,GAEf,MAAM25D,EAAYrkE,KAAKuvC,OAAO,QAQ9B,OAPA2zB,EAAaA,QAA+CA,EAAa,CAAEzsC,KAAM,OAAQ,eAAgBz2B,KAAKyV,UAAWmZ,OAAQ,SACjIjrB,EAAI3D,KAAK+0B,MAAMpxB,GACfmF,EAAI9I,KAAK+0B,MAAMjsB,GACf2B,EAAQzK,KAAK+0B,MAAMtqB,GACnBC,EAAS1K,KAAK+0B,MAAMrqB,GACpB1K,KAAKojE,gBAAgBiB,EAAWhkE,OAAOmX,OAAO,CAAE7T,IAAGmF,IAAG2B,QAAOC,UAAUw4D,IACvEljE,KAAKuG,IAAI89D,GACFrkE,IACX,CACAmgD,SAASx8C,EAAGmF,EAAG2B,EAAOC,GAClB,MAAMw4D,EAAa,CAAEzsC,KAAMz2B,KAAKkjE,WAAWzsC,KAAM7H,OAAQ,QAEzD,OADA5uB,KAAKuhE,KAAK59D,EAAGmF,EAAG2B,EAAOC,EAAQw4D,GACxBljE,IACX,CACAygE,UAAU98D,EAAGmF,EAAG2B,EAAOC,GAQnB,OADA1K,KAAKuhE,KAAK59D,EAAGmF,EAAG2B,EAAOC,EAAQ,CAAE+rB,KAAMz2B,KAAK0iE,oBAAqB9zC,OAAQ,SAClE5uB,IACX,CAEAo2B,YAII,OAHAp2B,KAAKsiE,KAAO,GACZtiE,KAAK8iE,IAAIn/D,EAAIwG,IACbnK,KAAK8iE,IAAIh6D,EAAIqB,IACNnK,IACX,CACAq2B,OAAO1yB,EAAGmF,GAMN,OALAnF,EAAI3D,KAAK+0B,MAAMpxB,GACfmF,EAAI9I,KAAK+0B,MAAMjsB,GACf9I,KAAKsiE,MAAQ,IAAM3+D,EAAI,IAAMmF,EAC7B9I,KAAK8iE,IAAIn/D,EAAIA,EACb3D,KAAK8iE,IAAIh6D,EAAIA,EACN9I,IACX,CACAs2B,OAAO3yB,EAAGmF,GAMN,OALAnF,EAAI3D,KAAK+0B,MAAMpxB,GACfmF,EAAI9I,KAAK+0B,MAAMjsB,GACf9I,KAAKsiE,MAAQ,IAAM3+D,EAAI,IAAMmF,EAC7B9I,KAAK8iE,IAAIn/D,EAAIA,EACb3D,KAAK8iE,IAAIh6D,EAAIA,EACN9I,IACX,CACAw2B,cAActsB,EAAIE,EAAIC,EAAIC,EAAI3G,EAAGmF,GAU7B,OATAnF,EAAI3D,KAAK+0B,MAAMpxB,GACfmF,EAAI9I,KAAK+0B,MAAMjsB,GACfoB,EAAKlK,KAAK+0B,MAAM7qB,GAChBE,EAAKpK,KAAK+0B,MAAM3qB,GAChBC,EAAKrK,KAAK+0B,MAAM1qB,GAChBC,EAAKtK,KAAK+0B,MAAMzqB,GAChBtK,KAAKsiE,MAAQ,IAAMp4D,EAAK,IAAME,EAAK,IAAMC,EAAK,IAAMC,EAAK,IAAM3G,EAAI,IAAMmF,EACzE9I,KAAK8iE,IAAIn/D,EAAIA,EACb3D,KAAK8iE,IAAIh6D,EAAIA,EACN9I,IACX,CACAu2B,iBAAiBrsB,EAAIE,EAAIzG,EAAGmF,GAQxB,OAPAnF,EAAI3D,KAAK+0B,MAAMpxB,GACfmF,EAAI9I,KAAK+0B,MAAMjsB,GACfoB,EAAKlK,KAAK+0B,MAAM7qB,GAChBE,EAAKpK,KAAK+0B,MAAM3qB,GAChBpK,KAAKsiE,MAAQ,IAAMp4D,EAAK,IAAME,EAAK,IAAMzG,EAAI,IAAMmF,EACnD9I,KAAK8iE,IAAIn/D,EAAIA,EACb3D,KAAK8iE,IAAIh6D,EAAIA,EACN9I,IACX,CACA01C,IAAI/xC,EAAGmF,EAAGuhD,EAAQyX,EAAYC,EAAUC,GACpC,IAAIsC,EAAK3gE,EAAI0mD,EAASplD,KAAKs/D,IAAIzC,GAC3B0C,EAAK17D,EAAIuhD,EAASplD,KAAKw/D,IAAI3C,GAC/BwC,EAAKtkE,KAAK+0B,MAAMuvC,GAChBE,EAAKxkE,KAAK+0B,MAAMyvC,GAGhB,MAAME,EAAe1/D,EAAe88D,GAC9B6C,EAAa3/D,EAAe+8D,GAClC,IAAMC,GAAoBD,EAAWD,GAAcU,IAC9CR,GAAoBF,EAAaC,GAAYS,IAC9CkC,IAAiBC,EAAY,CAC7B,IAAIz6D,EAAKvG,EAAI0mD,EAASplD,KAAKs/D,IAAIzC,EAAa78D,KAAKC,IAC7CkF,EAAKtB,EAAIuhD,EAASplD,KAAKw/D,IAAI3C,EAAa78D,KAAKC,IAGjDgF,EAAKlK,KAAK+0B,MAAM7qB,GAChBE,EAAKpK,KAAK+0B,MAAM3qB,GAChBigD,EAASrqD,KAAK+0B,MAAMs1B,GACpBrqD,KAAKsiE,MAAQ,IAAIgC,KAAME,MAAOna,KAAUA,WAAgBngD,KAAME,KAC9DpK,KAAKsiE,MAAQ,IAAIjY,KAAUA,WAAgBia,KAAME,IACjDxkE,KAAK8iE,IAAIn/D,EAAI2gE,EACbtkE,KAAK8iE,IAAIh6D,EAAI07D,CACjB,KACK,CACD,IAIII,EAJA16D,EAAKvG,EAAI0mD,EAASplD,KAAKs/D,IAAIxC,GAC3B33D,EAAKtB,EAAIuhD,EAASplD,KAAKw/D,IAAI1C,GAC/BD,EAAa4C,EACb3C,EAAW4C,EAGPC,EADA3/D,KAAK+C,IAAI+5D,EAAWD,GAAc78D,KAAKC,GAC/B88D,GAGCA,EAETF,EAAaC,IACb6C,GAASA,GAEb,MAAMC,GAAS7C,EACf93D,EAAKlK,KAAK+0B,MAAM7qB,GAChBE,EAAKpK,KAAK+0B,MAAM3qB,GAChBigD,EAASrqD,KAAK+0B,MAAMs1B,GACpBrqD,KAAKsiE,MAAQ,IAAIgC,KAAME,MAAOna,KAAUA,QAAaua,MAAUC,KAAS36D,KAAME,IAC9EpK,KAAK8iE,IAAIn/D,EAAIuG,EACblK,KAAK8iE,IAAIh6D,EAAIsB,CACjB,CACA,OAAOpK,IACX,CACA21C,YAEI,OADA31C,KAAKsiE,MAAQ,IACNtiE,IACX,CACA8kE,iBACI,MAAMC,EAAK/kE,KAAKqjE,kBAIhB,MAAO,2BAA2B0B,EAAGt6D,MAAQ,SAASs6D,EAAGtvB,QAC7D,CACAhf,KAAKysC,GACD,MAAMZ,EAAOtiE,KAAKuvC,OAAO,QAUzB,YAT0B,IAAf2zB,IACPA,EAAa7iE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKkjE,YAAa,CAAEt0C,OAAQ,UAE7Es0C,EAAW78D,EAAIrG,KAAKsiE,KAChBtiE,KAAKqjE,kBAAkB54D,MAAQ,IAC/By4D,EAAW50D,MAAQtO,KAAK8kE,kBAE5B9kE,KAAKojE,gBAAgBd,EAAMY,GAC3BljE,KAAKuG,IAAI+7D,GACFtiE,IACX,CACA4uB,SACI,MAAM0zC,EAAOtiE,KAAKuvC,OAAO,QACnB2zB,EAAa7iE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKkjE,YAAa,CAAEzsC,KAAM,OAAQ,eAAgBz2B,KAAKyV,UAAWpP,EAAGrG,KAAKsiE,OAM7H,OALItiE,KAAKqjE,kBAAkB54D,MAAQ,IAC/By4D,EAAW50D,MAAQtO,KAAK8kE,kBAE5B9kE,KAAKojE,gBAAgBd,EAAMY,GAC3BljE,KAAKuG,IAAI+7D,GACFtiE,IACX,CAEAuiD,YAAYx9C,GACR,OAAO09D,GAAWuC,iBAAiBhvC,OAAOjxB,EAAM/E,KAAK4iE,IAAK5iE,KAAKkjE,WACnE,CACA7wB,SAASttC,EAAMpB,EAAGmF,GACd,IAAK/D,GAAQA,EAAKa,QAAU,EACxB,OAAO5F,KAEX2D,EAAI3D,KAAK+0B,MAAMpxB,GACfmF,EAAI9I,KAAK+0B,MAAMjsB,GACf,MAAMo6D,EAAa7iE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKkjE,YAAa,CAAEt0C,OAAQ,OAAQjrB,IACnFmF,MACEm8D,EAAMjlE,KAAKuvC,OAAO,QAIxB,OAHA01B,EAAIC,YAAcngE,EAClB/E,KAAKojE,gBAAgB6B,EAAK/B,GAC1BljE,KAAKuG,IAAI0+D,GACFjlE,IACX,CAEAgV,OAyBI,OAxBAhV,KAAKsjE,YAAY7uD,KAAK,CAClB+tB,MAAO,CACH,cAAexiC,KAAKwiC,MAAM,eAC1B,cAAexiC,KAAKwiC,MAAM,eAC1B,aAAcxiC,KAAKwiC,MAAM,cACzB,YAAaxiC,KAAKwiC,MAAM,aACxBnT,MAAOrvB,KAAKwiC,MAAMnT,OAEtB6zC,WAAY,CACR,cAAeljE,KAAKkjE,WAAW,eAC/B,cAAeljE,KAAKkjE,WAAW,eAC/B,aAAcljE,KAAKkjE,WAAW,cAC9B,YAAaljE,KAAKkjE,WAAW,aAC7BzsC,KAAMz2B,KAAKkjE,WAAWzsC,KACtB7H,OAAQ5uB,KAAKkjE,WAAWt0C,OACxB,eAAgB5uB,KAAKkjE,WAAW,gBAChC,mBAAoBljE,KAAKkjE,WAAW,qBAExCG,kBAAmB,CACf54D,MAAOzK,KAAKqjE,kBAAkB54D,MAC9BgrC,MAAOz1C,KAAKqjE,kBAAkB5tB,OAElChgC,UAAWzV,KAAKyV,YAEbzV,IACX,CAEA4V,UACI,MAAMuvD,EAAanlE,KAAKsjE,YAAYtrB,MACpC,GAAImtB,EAAY,CACZ,MAAM3iC,EAAQ2iC,EACdnlE,KAAKwiC,MAAM,eAAiBA,EAAMA,MAAM,eACxCxiC,KAAKwiC,MAAM,eAAiBA,EAAMA,MAAM,eACxCxiC,KAAKwiC,MAAM,cAAgBA,EAAMA,MAAM,cACvCxiC,KAAKwiC,MAAM,aAAeA,EAAMA,MAAM,aACtCxiC,KAAKwiC,MAAMnT,MAAQmT,EAAMA,MAAMnT,MAC/BrvB,KAAKkjE,WAAW,eAAiB1gC,EAAM0gC,WAAW,eAClDljE,KAAKkjE,WAAW,eAAiB1gC,EAAM0gC,WAAW,eAClDljE,KAAKkjE,WAAW,cAAgB1gC,EAAM0gC,WAAW,cACjDljE,KAAKkjE,WAAW,aAAe1gC,EAAM0gC,WAAW,aAChDljE,KAAKkjE,WAAWzsC,KAAO+L,EAAM0gC,WAAWzsC,KACxCz2B,KAAKkjE,WAAWt0C,OAAS4T,EAAM0gC,WAAWt0C,OAC1C5uB,KAAKkjE,WAAW,gBAAkB1gC,EAAM0gC,WAAW,gBACnDljE,KAAKkjE,WAAW,oBAAsB1gC,EAAM0gC,WAAW,oBACvDljE,KAAKqjE,kBAAkB54D,MAAQ+3B,EAAM6gC,kBAAkB54D,MACvDzK,KAAKqjE,kBAAkB5tB,MAAQjT,EAAM6gC,kBAAkB5tB,MACvDz1C,KAAKyV,UAAY+sB,EAAM/sB,SAC3B,CACA,OAAOzV,IACX,CACIqV,cAAU/G,GACVtO,KAAKsV,aAAahH,EACtB,CACI+G,gBACA,OAAOrV,KAAKkjE,WAAWzsC,IAC3B,CACIlhB,gBAAYjH,GACZtO,KAAKwV,eAAelH,EACxB,CACIiH,kBACA,OAAOvV,KAAKkjE,WAAWt0C,MAC3B,CAWA7X,QAAQxO,EAAG6F,EAAMC,EAAQC,GACrB,MAAMY,EAAWxB,EAAK+J,SAASlP,EAAG6F,EAAMC,EAAQC,GAChDtO,KAAK2iE,cAAgBj1D,EAAKsJ,YAAY9H,GACtC,MAAMk2D,EAAiB,CACnB,cAAel2D,EAASV,OACxB,YAAaU,EAASd,KACtB,cAAec,EAASb,OACxB,aAAca,EAASZ,OAI3B,OAFAtO,KAAKkjE,WAAa7iE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKkjE,YAAakC,GACpEplE,KAAKwiC,MAAQniC,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKwiC,OAAQ4iC,GACnDplE,IACX,CAEA0X,UACI,OAAO1X,KAAK2iE,aAChB,EC1iBG,IAAI0C,GAMAC,GCLAC,GCHAC,GH8iBX/C,GAAWuC,iBAAmB,IAlhB9B,MACIvjE,cAGIzB,KAAK+1B,MAAQ,CAAC,CAClB,CACAC,OAAOjxB,EAAM69D,EAAKM,GACd,IAAI1qC,EAAUx4B,KAAK+1B,MAAMhxB,QACTnB,IAAZ40B,IACAA,EAAU,CAAC,EACXx4B,KAAK+1B,MAAMhxB,GAAQyzB,GAEvB,MAIMr4B,EAAM,GAJG+iE,EAAW,kBACbA,EAAW,gBACTA,EAAW,kBACZA,EAAW,gBAEzB,IAAIxqC,EAAQF,EAAQr4B,GAKpB,YAJcyD,IAAV80B,IACAA,EAAQ14B,KAAKylE,YAAY1gE,EAAM69D,EAAKM,GACpC1qC,EAAQr4B,GAAOu4B,GAEZA,CACX,CACA+sC,YAAY1gE,EAAM69D,EAAKM,GACnB,IAAI+B,EAAMjlE,KAAKilE,IACVA,IAGDA,EAAMr2D,SAAS40D,gBAAgBjB,GAAQ,QACvCviE,KAAKilE,IAAMA,GAEfA,EAAIC,YAAcngE,EACdm+D,EAAW,gBACX+B,EAAIf,eAAe,KAAM,cAAehB,EAAW,gBACnDA,EAAW,cACX+B,EAAIf,eAAe,KAAM,YAAa,GAAGhB,EAAW,gBACpDA,EAAW,eACX+B,EAAIf,eAAe,KAAM,aAAchB,EAAW,eAClDA,EAAW,gBACX+B,EAAIf,eAAe,KAAM,cAAe,GAAGhB,EAAW,kBAC1DN,EAAIzC,YAAY8E,GAChB,MAAM5wC,EAAO4wC,EAAIS,UAEjB,OADA9C,EAAIwB,YAAYa,GACT,CAAEthE,EAAG0wB,EAAK1wB,EAAGmF,EAAGurB,EAAKvrB,EAAG2B,MAAO4pB,EAAK5pB,MAAOC,OAAQ2pB,EAAK3pB,OACnE,GCtEJ,SAAW26D,GACPA,EAAiBA,EAAyB,OAAI,GAAK,SACnDA,EAAiBA,EAAsB,IAAI,GAAK,KACnD,CAHD,CAGGA,KAAqBA,GAAmB,CAAC,IAG5C,SAAWC,GACPA,EAAoBA,EAA0B,KAAI,GAAK,OACvDA,EAAoBA,EAAwB,GAAI,GAAK,KACrDA,EAAoBA,EAA0B,KAAI,GAAK,MAC1D,CAJD,CAIGA,KAAwBA,GAAsB,CAAC,IAIlD,MAAMK,GACFpgE,oBAAoBqgE,EAAWC,EAASp7D,EAAOC,EAAQo7D,EAAa,QAChE,MAAMC,EAAW,IAAIJ,GAASC,EAAWC,GACrCp7D,GAASC,GACTq7D,EAAS5E,OAAO12D,EAAOC,GAE3B,MAAMkrB,EAAMmwC,EAASlvD,aAGrB,OAFA+e,EAAI+qC,uBAAuBmF,GAC3BH,GAASK,YAAcpwC,EAChBA,CACX,CACArwB,wBAAwBqgE,EAAWn7D,EAAOC,EAAQo7D,GAC9C,OAAOH,GAASM,aAAaL,EAAWD,GAASO,SAASC,OAAQ17D,EAAOC,EAAQo7D,EACrF,CACAvgE,qBAAqBqgE,EAAWn7D,EAAOC,EAAQo7D,GAC3C,OAAOH,GAASM,aAAaL,EAAWD,GAASO,SAASE,IAAK37D,EAAOC,EAAQo7D,EAClF,CAIAvgE,sBAAsBwP,EAASsxD,EAAOC,EAAOC,EAAKC,EAAKC,GACnD1xD,EAAQqhB,YACR,MAAMswC,EAAKH,EAAMF,EACXM,EAAKH,EAAMF,EACXM,EAAQ3hE,KAAK4hE,MAAMF,EAAID,GAC7B,IAAI/iE,EAAI0iE,EACJv9D,EAAIw9D,EACRvxD,EAAQshB,OAAOgwC,EAAOC,GACtB,IAAIQ,EAAM,EACN/wD,GAAO,EACX,OAAU2wD,EAAK,EAAI/iE,GAAK4iE,EAAM5iE,GAAK4iE,MAASI,EAAK,EAAI79D,GAAK09D,EAAM19D,GAAK09D,IAAO,CACxE,MAAMO,EAAaN,EAAYK,IAAQL,EAAY7gE,QAC7CohE,EAAKrjE,EAAIsB,KAAKs/D,IAAIqC,GAASG,EACjCpjE,EAAI+iE,EAAK,EAAIzhE,KAAK8E,IAAIw8D,EAAKS,GAAM/hE,KAAK4lC,IAAI07B,EAAKS,GAC/C,MAAMC,EAAKn+D,EAAI7D,KAAKw/D,IAAImC,GAASG,EACjCj+D,EAAI69D,EAAK,EAAI1hE,KAAK8E,IAAIy8D,EAAKS,GAAMhiE,KAAK4lC,IAAI27B,EAAKS,GAC3ClxD,EACAhB,EAAQuhB,OAAO3yB,EAAGmF,GAGlBiM,EAAQshB,OAAO1yB,EAAGmF,GAEtBiN,GAAQA,CACZ,CACAhB,EAAQ4gC,YACR5gC,EAAQ6Z,QACZ,CACAntB,YAAYylE,EAAMC,GACd,GAAIxkE,EAAgBukE,GAEhBlnE,KAAK41B,IAAMsxC,MAEV,CACD,QAAatjE,IAATujE,EAEA,MAAM,IAAIhkE,EAAa,kBAAmB,4BAE9C,MAAM0iE,EAAUsB,EAChB,IAAIzwD,EACJ,GAAmB,iBAARwwD,EAAkB,CACzB,MAAME,EAAex4D,SAASgE,eAAes0D,GAC7C,IAAKE,EACD,MAAM,IAAIjkE,EAAa,eAAgB,+BAA+BikE,MAE1E1wD,EAAU0wD,CACd,MAEI1wD,EAAUwwD,EAGd,GAAIrB,IAAYF,GAASO,SAASC,OAAQ,CACtC,IAAKrG,GAAappD,GACd,MAAM,IAAIvT,EAAa,aAAc,iDAEzC,MAAM4R,EAAU2B,EAAQG,WAAW,KAAM,CAAEwwD,oBAAoB,IAC/D,IAAKtyD,EACD,MAAM,IAAI5R,EAAa,aAAc,4BAEzCnD,KAAK41B,IAAM,IAAIwqC,GAAcrrD,EACjC,KACK,IAAI8wD,IAAYF,GAASO,SAASE,IAOnC,MAAM,IAAIjjE,EAAa,iBAAkB,2BAA2B0iE,KANpE,IAAK5F,GAAUvpD,GACX,MAAM,IAAIvT,EAAa,aAAc,2CAEzCnD,KAAK41B,IAAM,IAAI6sC,GAAW/rD,EAI9B,CACJ,CACJ,CACAyqD,OAAO12D,EAAOC,GAEV,OADA1K,KAAK41B,IAAIurC,OAAO12D,EAAOC,GAChB1K,IACX,CACA6W,aACI,OAAO7W,KAAK41B,GAChB,EAEJ+vC,GAASO,SAAWb,GACpBM,GAAS2B,YAAchC,GAIvBK,GAASK,iBAAcpiE,EGlHvB,MAAM2jE,WAAqB5uC,GACZj3B,sBACP,OAAOG,EAAS0lE,YACpB,CACW/2D,qBACP,IAAI3C,EACJ,OAAuE,QAA9DA,EAAKmgB,EAAO0U,mBAAmB5xB,aAAa02D,oBAAiC,IAAP35D,EAAgBA,EAAK,CAChG45D,gBAAiB,EACjBC,YAAa,EACbC,YAAa,EACbC,aAAc,EAEtB,CAGAriE,cAAcilD,EAAMhoB,GAIhB,MAAMK,EAAaL,EAAMK,WAInBkO,EAAcvO,EAAMuO,YAE1B,IAAKyZ,GAAwB,IAAhBA,EAAK5kD,OACd,OAAO,EACX,MAAM6kD,EAAY,GAClB,IAAIC,EAAY,KACZmd,EAAkC,EAClCxrD,EAAc,EAElB,IAAK,IAAI3T,EAAI,EAAGA,EAAI8hD,EAAK5kD,SAAU8C,EAAG,CAClC,MAAM6P,EAAMiyC,EAAK9hD,GACXkxB,EAAOrhB,EAAIohB,UACXkxB,EAAMtyC,EAAI+hB,cAChB,IAAKz3B,EAAY+2B,GACb,MAAM,IAAIz2B,EAAa,eAE3B,MAAMmP,EAAQiG,EAAIyhB,aACZmJ,EAAQvJ,EAAKwJ,cAAc9wB,GAC3B6lC,EAAKve,EAAKM,qBACVsV,EAAoC,EAAbj3B,EAAI8xC,OAAcr8B,EAAOiD,oBAAsB,GAW5E,GAVIknB,IACI0S,IAAQ72B,EAAiBiF,OACzB1gB,EAAIihB,UAAY2e,EAAGwE,WAAWjM,cAC9BlO,EAAMkO,eAAiBlB,GAElBqb,IAAQ72B,EAAiBmF,QAC9B5gB,EAAIihB,UAAY2e,EAAGwE,WAAWnjB,UAC9BgJ,EAAMhJ,WAAagW,IAGvB5V,IAAS8wB,EAAW,CACpB,IAAK,IAAI9lD,EAAI,EAAGA,EAAIg1B,EAAKtmB,KAAK1N,SAAUhB,EAChCimD,IAAQlyB,GAASC,SAASS,OAC1BwuC,EAAkC5iE,KAAK8E,IAAI6vB,EAAKyJ,yBAA0BwkC,IAE1D,IAAhB92B,IACA10B,EAAcpX,KAAK8E,IAAI6vB,EAAK0hB,0BAA2Bj/B,IAG/DquC,EAAY9wB,CAChB,CACA,MAAMkuC,EAA6B3kC,EAAMn/B,KACzCymD,EAAUh2C,KAAK,CACXo2C,MACAjxB,OACArhB,MACAvU,KAAM8jE,EACN/c,OAAQ8c,EACR7c,OAAQ3uC,GAEhB,CAEAouC,EAAU7mB,MAAK,CAACn/B,EAAGC,IAAMA,EAAEV,KAAOS,EAAET,OACpC,IAAI+jE,EAAa,EACbrI,EAAW,EACXC,EAAW,EACX1V,EAAY,KACZC,EAAY,KAChB,IAAK,IAAIxhD,EAAI,EAAGA,EAAI+hD,EAAU7kD,SAAU8C,EAAG,CACvC,MAAMkxB,EAAO6wB,EAAU/hD,GAAGkxB,KACpBixB,EAAMJ,EAAU/hD,GAAGmiD,IACnBtyC,EAAMkyC,EAAU/hD,GAAG6P,IACnBvU,EAAOymD,EAAU/hD,GAAG1E,KACpBgnD,EAASP,EAAU/hD,GAAGsiD,OAExBhnD,IAASimD,GAAarwB,IAASswB,IAC/B6d,EAAah3B,EAAcia,GAE/B,MAAMgd,EAAYzvD,EAAIqX,WAnEN,EAoEhB,IAAIq4C,EAAc,EACdpd,IAAQlyB,GAASC,SAASS,MAC1B9gB,EAAIgf,UAAUsL,EAAaglC,GAC3BI,EAAcD,EACdtI,EAAWz6D,KAAK8E,IAAIk+D,EAAavI,IAE5B7U,IAAQlyB,GAASC,SAASW,QAC/BhhB,EAAIgf,UAAUwwC,GACdE,GAAeD,EACfrI,EAAWsI,EAActI,EAAWsI,EAActI,GAEtD1V,EAAYjmD,EACZkmD,EAAYtwB,CAChB,CAGA,OAFA4I,EAAMK,YAAc68B,EACpBl9B,EAAMuO,aAAe4uB,GACd,CACX,CACAl+D,YAAYkqD,GACRpoD,QACAvD,KAAKkoE,cAAgBvc,EACrB3rD,KAAKyzB,SAAWkF,GAASC,SAASK,MAClCj5B,KAAKw0B,QAAU,EACfx0B,KAAKy0B,QAAU,EACfz0B,KAAKw5B,UAAY,EACjBx5B,KAAKmoE,YAAc,EACnBnoE,KAAK+rD,SAAW,EAChB/rD,KAAKuqC,SAAW,EAChBvqC,KAAKooE,QAAS,EACdpoE,KAAKqoE,IAAM1C,GAAS2B,YAAYvoB,KAChC/+C,KAAKqqD,OAAS,EACdrqD,KAAKsoE,YAAa,EAClBtoE,KAAK05B,SAAuB,EAAd15B,KAAKqqD,OAAa,GAChCrqD,KAAK2X,WACT,CACA4wD,eAAeF,GAIX,OAHIA,GAAO1C,GAAS2B,YAAYvoB,MAAQspB,GAAO1C,GAAS2B,YAAYv+B,OAChE/oC,KAAKqoE,IAAMA,GAERroE,IACX,CACAwoE,gBAAgB7c,GAEZ,OADA3rD,KAAKkoE,cAAgBvc,EACd3rD,IACX,CACAksD,WAAWvoD,GAEP,OADA3D,KAAK+rD,SAAWpoD,EACT3D,IACX,CACAmsD,WAAWrjD,GAEP,OADA9I,KAAKuqC,SAAWzhC,EACT9I,IACX,CACAyoE,YAAY7uC,GAER,OADA55B,KAAKkqD,UAAYtwB,EACV55B,IACX,CACA0oE,UAAUN,GAEN,OADApoE,KAAKooE,OAASA,EACPpoE,IACX,CACA2oE,cAAcL,GAEV,OADAtoE,KAAKsoE,WAAaA,EACXtoE,IACX,CACA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cACL,MAAMmyB,EAAQ7O,EAAK8O,mBAAmB1oC,KAAKyzB,SAAUzzB,KAAKsS,OACpDs9B,EAAgBhW,EAAKiW,UAAYjW,EAAKkW,mBAAqBjH,GAAKC,GACtE,IAAIuX,EAAQ5X,EAAM9kC,EAAI3D,KAAKw0B,QAAUx0B,KAAK+rD,SACtCra,EAAW,CAAC,EACZ9X,EAAKiW,YACL6B,EAAW9X,EAAKiY,YAAYrH,cAEhC,IAAI+V,EAAQ9X,EAAM3/B,EAAI9I,KAAKy0B,QAAUz0B,KAAKuqC,SAC1C,OAAQvqC,KAAKyzB,UACT,KAAKkF,GAASC,SAASK,MAGfsnB,EADW3mB,EAAKkY,QACLzsC,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IACrCk1B,EAAKiW,WAAaD,GAAiB/G,GAAKC,KACxCyX,EAAQ7O,EAAS3G,KAAOw8B,GAAa/2D,QAAQk3D,aAEjDnnB,GAASvgD,KAAKqqD,OAASkd,GAAa/2D,QAAQi3D,gBAAkBznE,KAAKw5B,UAAYxL,EAAOiD,oBAE1F,MACJ,KAAK0H,GAASC,SAASO,MAGfonB,EADW3mB,EAAKkY,QACLzsC,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IACrCk1B,EAAKiW,WAAaD,GAAiB/G,GAAKE,OACxCwX,EAAQ7O,EAAS3G,KAAOw8B,GAAa/2D,QAAQk3D,aAEjDnnB,GAASvgD,KAAKqqD,OAASkd,GAAa/2D,QAAQi3D,gBAAkBznE,KAAKw5B,UAAYxL,EAAOiD,oBAE1F,MACJ,KAAK0H,GAASC,SAASS,KACnBgnB,GAASrgD,KAAKqqD,OAAS,EAAIkd,GAAa/2D,QAAQm3D,YAChD,MACJ,KAAKhvC,GAASC,SAASW,MACnB8mB,GAASrgD,KAAKqqD,OAAS,EAAIkd,GAAa/2D,QAAQo3D,aAChD,MACJ,QACI,MAAM,IAAIzkE,EAAa,kBAAmB,gBAAgBnD,KAAKyzB,uBAEvEmC,EAAI5gB,OACAhV,KAAKsoE,aACL1yC,EAAIQ,YACJR,EAAI8f,IAAI2K,EAAOE,EAAOvgD,KAAKqqD,OAAQ,EAAa,EAAVplD,KAAKC,IAAQ,GACnD0wB,EAAIlgB,aAAa,KACjBkgB,EAAIhH,UAERgH,EAAI7e,QAAQ/W,KAAKiX,UACjB,MAAMtT,EAAI08C,EAAQzqB,EAAI2sB,YAAYviD,KAAKkoE,eAAez9D,MAAQ,EAC9DmrB,EAAIyc,SAAS,GAAKryC,KAAKkoE,cAAevkE,EAAG48C,EAAQ,KACjD,MAAM+K,EAAWtrD,KAAKkqD,UACtB,GAAInnD,EAAgBuoD,GAAW,CAE3B,MAAMhN,EAAMgN,EAAS7Z,WAAa7X,EAAK3wB,OAAS,EAUhD,IAAI2/D,EACAC,EACJ,OAXAjzC,EAAIpgB,eAAe,WACnBogB,EAAIkrC,WAAW,SACflrC,EAAIlgB,aAAa,IACb1V,KAAKooE,OACLzC,GAASmD,eAAelzC,EAAKyqB,EAAQ,GAAIE,EAAOF,EAAQ/B,EAAKiC,EAAO,CAAC,EAAG,IAGxEolB,GAASmD,eAAelzC,EAAKyqB,EAAQ,GAAIE,EAAOF,EAAQ/B,EAAKiC,EAAO,CAAC,EAAG,IAIpEvgD,KAAKqoE,KACT,KAAK1C,GAAS2B,YAAYx+B,GACtB8/B,GAAO,GACPC,EAAU7oE,KAAKooE,OAAS,CAAC,EAAG,GAAK,CAAC,EAAG,GACrCzC,GAASmD,eAAelzC,EAAKyqB,EAAQ/B,EAAKiC,EAAOF,EAAQ/B,EAAKiC,EAAQqoB,EAAKC,GAC3E,MACJ,KAAKlD,GAAS2B,YAAYv+B,KACtB6/B,EAAM,GACNC,EAAU7oE,KAAKooE,OAAS,CAAC,EAAG,GAAK,CAAC,EAAG,GACrCzC,GAASmD,eAAelzC,EAAKyqB,EAAQ/B,EAAKiC,EAAOF,EAAQ/B,EAAKiC,EAAQqoB,EAAKC,GAKvF,CACAjzC,EAAIhgB,SACR,EAEJ2xD,GAAapwD,UAAY,CACrB3I,OAAQd,EAAKe,WACbL,KAAMV,EAAKE,KACXS,OAAQ/B,EAAWqhC,KACnBr/B,MAAO/B,EAAUmC,QCvPrB,MAAMq6D,WAAepwC,GACNj3B,sBACP,OAAOG,EAASknE,MACpB,CAEAxjE,cAAcyjE,EAASxmC,GACnB,MAAMK,EAAaL,EAAMK,WAEzB,IAAKmmC,GAA8B,IAAnBA,EAAQpjE,OACpB,OAAO,EACX,MAAMqjE,EAAaD,EAAQz1D,KAAKqb,IAC5B,MAAMgL,EAAOhL,EAAO+K,UACdrnB,EAAQsc,EAAOoL,aACrB,GAAIn3B,EAAY+2B,GAAO,CAEnB,MAAM,KAAE51B,GAAS41B,EAAKwJ,cAAc9wB,GAEpC,MAAO,CAAEtO,OAAM8B,MADD8zB,EAAKyJ,yBACGzU,SAC1B,CACK,GAAI3rB,EAAU22B,GAAO,CAEtB,MAAQnxB,IAAKygE,GAAWtvC,EAAKuvC,eAAe72D,GAC5C,MAAO,CAAEtO,KAAMklE,EAAQpjE,MAAO,EAAG8oB,SACrC,CAEI,MAAM,IAAIzrB,EAAa,WAAY,uBACvC,IAEEimE,EAAcvmC,EAEdhL,EAASoxC,EAAW5jE,QAAO,CAACwyB,GAAUjJ,SAAQ9oB,YAChD8oB,EAAO2I,UAAU6xC,EAActjE,GACxBb,KAAK8E,IAAI6kB,EAAOgB,WAzBJ,EAyBiCiI,KACrD,GAEH,OADA2K,EAAMK,YAAchL,GACb,CACX,CACAp2B,YAAYwQ,EAAMoc,GACd9qB,QACAvD,KAAKquB,QAAUhuB,OAAOmX,OAAO,CAAE6xD,YAAY,GAAQh7C,GAEnDruB,KAAKqpE,WAAarpE,KAAKquB,QAAQg7C,WAE/BrpE,KAAKiS,KAAOA,EACZjS,KAAKyzB,SAAWkF,GAASC,SAASS,KAClCr5B,KAAK8nC,eAAiB,CAClBC,WAAY/Z,EAAOyC,qBAEvBzwB,KAAK2X,YACL3X,KAAKu3B,UAAU,GACfv3B,KAAK05B,SAAS,GAClB,CACAY,cACI,OAAOt6B,KAAKyzB,QAChB,CACA61C,WAAW1vC,GAEP,OADA55B,KAAKupE,SAAW3vC,EACT55B,IACX,CACA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cACL,MAAMmyB,EAAQ7O,EAAK8O,mBAAmB1oC,KAAKyzB,SAAUzzB,KAAKsS,OAC1D,IAAIo4B,EAAK9Q,EAAKkY,QACV/G,EAAOtC,EAAM3/B,EACbm3C,EAAOxX,EAAM3/B,EACjB,MAAMnF,EAAI8kC,EAAM9kC,EAAI,EACd6lE,EAAa5vC,EAAKxB,aAAamL,yBAC/BvT,EAAQhwB,KAAKo6B,uBAAuBsiB,WAAW9iB,EAAKxlB,eAC1D,IAAK,IAAI1L,EAAI,EAAGA,EAAIsnB,EAAMpqB,OAAQ8C,IAAK,CACnC,MAAMkxB,EAAO5J,EAAMtnB,GACnB,GAAIjG,EAAOm3B,GAAO,CAGd8Q,EAAK9Q,EAAKkY,QACV,IAAK,IAAIltC,EAAI,EAAGA,EAAI8lC,EAAG9kC,OAAQhB,KACvB5E,KAAK45B,OAAS5J,EAAMtnB,IAAM1I,KAAKqpE,cAC/Bt+B,EAAO9lC,KAAK4lC,IAAIE,EAAML,EAAG9lC,IACzBq7C,EAAOh7C,KAAK8E,IAAIk2C,EAAMvV,EAAG9lC,IAGrC,CACJ,CACA,IAAI6kE,EAAQ,GACRC,EAAgB,EAChBC,EAAU,EACVnT,EAAe,EACfoT,EAAS,EACb,OAAQ5pE,KAAKiS,MACT,KAAK82D,GAAOc,KAAKC,WACbL,EAAQ,mBACRC,GAAiB,EACjBC,EAAU5+B,EAAOy+B,EAAa,EAAI,GAClCvpB,GAAQupB,EAAa,EACrB,MACJ,KAAKT,GAAOc,KAAKE,SACbN,EAAQ,qBACRC,EAAgB,GAChBC,EAAU1pB,EAAOupB,EAAa,EAC9Bz+B,GAAQy+B,EAAa,EACrB,MACJ,KAAKT,GAAOc,KAAKG,UACjB,KAAKjB,GAAOc,KAAKI,cACbR,EAAQ,mBACRC,GAAiB,EACjBlT,EAAex2D,KAAKw0B,QAAUk1C,EAAgB,EAC1C7mE,EAAY+2B,IACZmR,GAAQ,IAAMy+B,EAEVvpB,IADCA,EAAOlV,GAAQ,GAAM,EACd,GAAMy+B,EAGNA,EAEZG,EAAU5+B,EAAOy+B,EACjBI,EAAS3pB,EAAOupB,EAAa,IAG7Bz+B,GAAQ,IAAMy+B,EACdvpB,GAAQupB,EACRG,EAAU5+B,EAAO,IAAOy+B,EACxBI,EAAS3pB,EAAO,IAAOupB,GAE3B,MACJ,KAAKT,GAAOc,KAAKK,QACjB,KAAKnB,GAAOc,KAAKM,YACbV,EAAQ,qBACRC,GAAiB,EACjBlT,EAAex2D,KAAKw0B,QAAUk1C,EAAgB,EAC1C7mE,EAAY+2B,IACZ+vC,EAAUH,EAAa,EACvBz+B,GAAQ,GAAMy+B,GACTvpB,EAAOlV,GAAQ,GAAM,IACtBkV,GAAQupB,EAAa,GAEzBG,EAAU1pB,EAAO,GAAMupB,EACvBI,EAAS7+B,EAAO,KAAOy+B,IAGvBz+B,GAAQ,IAAOy+B,EACfvpB,GAAQ,GAAMupB,EACdG,EAAU1pB,EAAO,IAAOupB,EACxBI,EAAS7+B,EAAOy+B,GAEpB,MACJ,KAAKT,GAAOc,KAAKO,uBACbr/B,GAAQ,GAAMy+B,EACdvpB,GAAQupB,EACR,MACJ,QACI,MAAM,IAAIrmE,EAAa,cAAe,mBAAmBnD,KAAKiS,uBAEtE,IAAIo4D,EAAa,WAEjB,GAAIrqE,KAAKiS,OAAS82D,GAAOc,KAAKC,YAAc9pE,KAAKiS,OAAS82D,GAAOc,KAAKE,SAClEn0C,EAAIuqB,SAASx8C,EAAI3D,KAAKw0B,QAASuW,EAAM,EAAGkV,EAAOlV,QAI/C,GADAs/B,EAAa,SACTxnE,EAAY+2B,GACZ,IAAK,IAAIlxB,EAAIqiC,EAAMriC,GAAKu3C,EAAMv3C,GAAK8gE,EAC/B/5C,EAAMk+B,YAAY/3B,EAAKjyB,EAAI3D,KAAKw0B,QAAU,EAAG9rB,EAAG1I,KAAK8nC,eAAeC,WAAY,2BAGnF,CACD,IAAIr/B,EACJ,IAAKA,EAAIqiC,EAAMriC,GAAKu3C,EAAMv3C,GAAK,GAC3B+mB,EAAMk+B,YAAY/3B,EAAKjyB,EAAI3D,KAAKw0B,QAAU,EAAG9rB,EAAG1I,KAAK8nC,eAAeC,WAAY,uBAEhF/nC,KAAKiS,OAAS82D,GAAOc,KAAKI,gBAC1BL,EAASlhE,EAAI,IAAO8gE,EAE5B,CAEAxpE,KAAKiS,OAAS82D,GAAOc,KAAKO,yBAI9B36C,EAAMk+B,YAAY/3B,EAAKjyB,EAAI3D,KAAKw0B,QAAUk1C,EAAeC,EAAS3pE,KAAK8nC,eAAeC,WAAY0hC,EAAO,CACrGnoE,SAAU,UAAU+oE,KAAcZ,MAGlCzpE,KAAKiS,OAAS82D,GAAOc,KAAKI,eAAiBjqE,KAAKiS,OAAS82D,GAAOc,KAAKM,cACrEv0C,EAAI5gB,OACJ4gB,EAAI7e,QAAQ/W,KAAKiX,UACjB2e,EAAIyc,SAAS,IAAK1uC,EAAI6yD,EAAcoT,GACpCh0C,EAAIhgB,WAEZ,EAEJmzD,GAAOc,KAAO,CACVC,WAAY,EACZC,SAAU,EACVC,UAAW,EACXE,QAAS,EACTD,cAAe,EACfE,YAAa,EACbC,uBAAwB,GAE5BrB,GAAO5xD,UAAY,CACf3I,OAAQd,EAAK8D,MACbpD,KAAMV,EAAKE,KACXS,OAAQ/B,EAAWqhC,KACnBr/B,MAAO/B,EAAUkD,QChNd,MAAM66D,WAAgB3xC,GACdj3B,sBACP,OAAOG,EAASyoE,OACpB,CAEA/kE,cAAcglE,EAAU/nC,EAAOztB,GAC3B,IAAKw1D,GAAgC,IAApBA,EAAS3kE,OACtB,OAAO,EAEX,IAAI4zB,EAAYgJ,EAAMkO,cAClBjmC,EAAQ,EACR3E,EAAQ08B,EAAMuO,YAAc,EAEhC,MAAM4P,EAAQ5rC,EAAQ2nC,WAAWgE,GAAKh/C,UACtC,GAAIi/C,GAASA,EAAM/6C,OAAS,EAAG,CAE3B4zB,GADmBmnB,EAAMptC,KAAKiJ,GAAOA,EAAGglC,kBAAiBn8C,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IAAMspB,EAAOiD,oBAC9D,CAC1C,MAEIuR,EAAMkO,eAAiB,EAG3B,IAAK,IAAIhoC,EAAI,EAAGA,EAAI6hE,EAAS3kE,SAAU8C,EAAG,CACtC,MAAM8hE,EAAUD,EAAS7hE,GACzB8hE,EAAQjzC,UAAUzxB,GAClB0kE,EAAQhwC,YAAYhB,GACpB/uB,GAAS+/D,EAAQ56C,WACjB9pB,GAAS2E,CACb,CAEA,OADA+3B,EAAMuO,aAAetmC,GACd,CACX,CACAhJ,cACI8B,QACAvD,KAAKyzB,SAAWkF,GAASC,SAASW,MAClCv5B,KAAK8nC,eAAiB,CAClB2iC,OAAO,EACPC,cAAe,GACfC,YAAa,EACbC,WAAY,EACZC,WAAY,GAEhB7qE,KAAK8qE,gBAAgB9qE,KAAK8nC,eAAe4iC,cAC7C,CAEAK,SAASN,GAEL,OADAzqE,KAAK8nC,eAAe2iC,MAAQA,EACrBzqE,IACX,CAEA8qE,gBAAgBrgE,GAGZ,OAFAzK,KAAK8nC,eAAe4iC,cAAgBjgE,EACpCzK,KAAK05B,SAASjvB,GACPzK,IACX,CAEA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cACL,MACM00D,EADQpxC,EAAK8O,mBAAmB/P,GAASC,SAASW,MAAOv5B,KAAKsS,OACnD3O,EAAI3D,KAAKw0B,QACpBy2C,EAAKrxC,EAAKoY,eAAehyC,KAAKw5B,WAAa,EACjD8wC,GAAQY,cAAct1C,EAAKo1C,EAAIC,EAAIjrE,KAAK8nC,eAC5C,CAKAviC,qBAAqBqwB,EAAKjyB,EAAGmF,EAAGqiE,GAC5B,MAAM,MAAEV,EAAK,cAAEC,EAAa,WAAEE,EAAU,WAAEC,EAAU,YAAEF,GAAgBQ,EAChEC,EAAYV,EAAgBE,EAElC,IAAIliE,EACJ,GAFAktB,EAAIQ,YAEAq0C,EAAO,CAEP,IADA70C,EAAIS,OAAO1yB,EAAGmF,EAAI+hE,EAAa,GAC1BniE,EAAI,EAAGA,EAAI0iE,EAAY,IAAK1iE,EAC7BktB,EAAIU,OAAO3yB,EAAIinE,EAAY9hE,EAAI6hE,EAAc,GAC7ChnE,GAAKinE,EACLh1C,EAAIU,OAAO3yB,EAAIinE,EAAY9hE,EAAI6hE,EAAc,GAC7ChnE,GAAKinE,EAET,IAAKliE,EAAI,EAAGA,EAAI0iE,EAAY,IAAK1iE,EAC7BktB,EAAIU,OAAO3yB,EAAIinE,EAAY9hE,EAAI6hE,EAAc,EAAIE,EAAa,GAC9DlnE,GAAKinE,EACLh1C,EAAIU,OAAO3yB,EAAIinE,EAAY9hE,EAAI6hE,EAAc,EAAIE,EAAa,GAC9DlnE,GAAKinE,EAETh1C,EAAIa,MACR,KACK,CAED,IADAb,EAAIS,OAAO1yB,EAAGmF,EAAI+hE,GACbniE,EAAI,EAAGA,EAAI0iE,EAAY,IAAK1iE,EAC7BktB,EAAIW,iBAAiB5yB,EAAIinE,EAAa,EAAG9hE,EAAI6hE,EAAc,EAAGhnE,EAAIinE,EAAY9hE,GAC9EnF,GAAKinE,EACLh1C,EAAIW,iBAAiB5yB,EAAIinE,EAAa,EAAG9hE,EAAI6hE,EAAc,EAAGhnE,EAAIinE,EAAY9hE,GAC9EnF,GAAKinE,EAET,IAAKliE,EAAI,EAAGA,EAAI0iE,EAAY,IAAK1iE,EAC7BktB,EAAIW,iBAAiB5yB,EAAIinE,EAAa,EAAG9hE,EAAI6hE,EAAc,EAAIE,EAAYlnE,EAAIinE,EAAY9hE,EAAI+hE,GAC/FlnE,GAAKinE,EACLh1C,EAAIW,iBAAiB5yB,EAAIinE,EAAa,EAAG9hE,EAAI6hE,EAAc,EAAIE,EAAYlnE,EAAIinE,EAAY9hE,EAAI+hE,GAC/FlnE,GAAKinE,EAETh1C,EAAIa,MACR,CACJ,ECnFJ,SAAS,MAAK1yB,GACNsnE,GAAgB9oC,OAChB1+B,EAAI,2BAA4BE,EACxC,CACA,MAAMsnE,GACF5pE,cAEIzB,KAAKwiC,MAAQ,CACTK,WAAY,EACZkO,YAAa,EACbvX,UAAW,EACXkX,cAAe,GAInB1wC,KAAKsrE,QAAU,CAAC,EAChBtrE,KAAKw4C,cAAe,EACpBx4C,KAAK04C,eAAgB,EACrB14C,KAAKurE,WAAY,EACjBvrE,KAAKyK,MAAQ,EACbzK,KAAK2xC,QAAU,CACnB,CACA/J,YAAY4jC,GAER,OADA,GAAE,qDACKxrE,KAAKo4C,UAAUozB,EAC1B,CAOApzB,UAAUozB,GACN,MAAMlqE,EAAWkqE,EAAOp3D,cAOxB,OANKpU,KAAKsrE,QAAQhqE,KACdtB,KAAKsrE,QAAQhqE,GAAY,IAE7BtB,KAAKsrE,QAAQhqE,GAAUmT,KAAK+2D,GAC5BA,EAAOnxC,mBAAmBr6B,MAC1BA,KAAKw4C,cAAe,EACbx4C,IACX,CAIA0nC,aAAapmC,GAET,OADA,GAAE,uDACKtB,KAAK08C,WAAWp7C,EAC3B,CACAo7C,WAAWp7C,GACP,IAAIuM,EACJ,OAAyC,QAAjCA,EAAK7N,KAAKsrE,QAAQhqE,UAA8B,IAAPuM,EAAgBA,EAAK,EAC1E,CAIA+hB,WACI,OAAO5vB,KAAKyK,KAChB,CACAghE,eACI,OAAOzrE,KAAKwiC,MAAMK,UACtB,CACA0vB,gBACI,OAAOvyD,KAAKwiC,MAAMuO,WACtB,CACA4L,WACI,OAAO38C,KAAKwiC,KAChB,CACA1xB,aACI,IAAK9Q,KAAKurE,UACN,MAAM,IAAIpoE,EAAa,oBAAqB,sCAEhD,MAAO,CACHsH,MAAOzK,KAAKwiC,MAAMK,WAAa7iC,KAAKwiC,MAAMuO,YAAc/wC,KAAK2xC,QAC7DA,QAAS3xC,KAAK2xC,QAEtB,CACA4G,YACI,GAAIv4C,KAAKw4C,aACL,OACJ,GAAE,iCACF,MAAMhW,EAAQxiC,KAAKwiC,MACb8oC,EAAUtrE,KAAKsrE,QAErBxoE,GAAUk4D,OAAOsQ,EAAQzpE,EAASiB,WAAY0/B,GAC9Cg9B,GAAYxE,OAAOsQ,EAAQzpE,EAAS29D,aAAch9B,GAClDpgC,GAAI44D,OAAOsQ,EAAQzpE,EAASO,KAAMogC,GAClC+nB,GAAeyQ,OAAOsQ,EAAQzpE,EAAS0oD,gBAAiB/nB,GACxD1gC,GAAWk5D,OAAOsQ,EAAQzpE,EAASC,YAAa0gC,GAChDumC,GAAO/N,OAAOsQ,EAAQzpE,EAASknE,QAASvmC,GACxChgC,GAAew4D,OAAOsQ,EAAQzpE,EAASW,gBAAiBggC,GACxDg5B,GAAaR,OAAOsQ,EAAQzpE,EAAS25D,cAAeh5B,GACpD+kC,GAAavM,OAAOsQ,EAAQzpE,EAAS0lE,cAAe/kC,GACpDyQ,GAAa+nB,OAAOsQ,EAAQzpE,EAASoxC,cAAezQ,GACpDi7B,GAASzC,OAAOsQ,EAAQzpE,EAAS47D,UAAWj7B,GAC5CxgC,GAAWg5D,OAAOsQ,EAAQzpE,EAASG,YAAawgC,GAChDmgB,GAAYqY,OAAOsQ,EAAQzpE,EAAS8gD,aAAcngB,GAClDke,GAAKsa,OAAOsQ,EAAQzpE,EAAS6+C,MAAOle,GACpC8nC,GAAQtP,OAAOsQ,EAAQzpE,EAASyoE,SAAU9nC,EAAOxiC,MAEjDA,KAAKyK,MAAQ+3B,EAAMK,WAAaL,EAAMuO,YACtC/wC,KAAKw4C,cAAe,CACxB,CACAC,aACQz4C,KAAK04C,gBAET,GAAE,kCAEF51C,GAAU21C,WAAWz4C,KAAK08C,WAAW76C,EAASiB,YAClD,EAEJuoE,GAAgB9oC,OAAQ,EC3HxB,MAAMmpC,WAAajuB,GACJ/7C,sBACP,OAAOG,EAAS6pE,IACpB,CAKWC,mBACP,MAAO,CACH3xD,OAAQ,CACJ3W,KAAM,QACNW,KAAM,GAEVkW,KAAM,CACF7W,KAAM,QACNW,KAAM,GAEVoW,KAAM,CACF/W,KAAM,QACNW,KAAM,GAEVmW,MAAO,CACH9W,KAAM,QACNW,KAAM,GAEVsW,WAAY,CACRjX,KAAM,2BACNW,KAAM,GAEVqW,QAAS,CACLhX,KAAM,QACNW,KAAM,GAEV,gBAAiB,CACbX,KAAM,QACNW,KAAM,GAEV,aAAc,CACVX,KAAM,QACNW,KAAM,GAEV,aAAc,CACVX,KAAM,QACNW,KAAM,GAEVuW,QAAS,CACLlX,KAAM,QACNW,KAAM,GAEVwW,OAAQ,CACJnX,KAAM,QACNW,KAAM,GAEV4nE,IAAK,CACDvoE,KAAM,iBACNW,KAAM,KAGlB,CACW6nE,6BACP,MAAO,CACH,MAAO,WACP,MAAO,WAEf,CAEApqE,YAAYwQ,EAAM7D,EAAMihC,GACpB9rC,QAKAvD,KAAKkuB,KAAOw9C,GAAKC,MAAc,OAC/B3rE,KAAKu6B,YAAY4iB,GAAsBsC,OACvCz/C,KAAK0/C,QAAQztC,EAAM7D,EAAMihC,GACzBrvC,KAAK05B,SAASjK,EAAMG,SAAS5vB,KAAKkuB,KAAK7qB,KAAMqoE,GAAK7L,SAAS7/D,KAAKoO,MAAO,QAAQpO,KAAKoO,SArF5F,YAAcrK,GACN2nE,GAAKnpC,OACL1+B,EAAI,gBAAiBE,EAC7B,CAmFQ,CAAE,iBAAkBkO,EACxB,CAEAytC,QAAQztC,EAAM7D,EAAMihC,GAChBrvC,KAAKiS,KAAOA,EACZjS,KAAKkuB,KAAOw9C,GAAKC,MAAM15D,GAEnBjS,KAAKoO,UADIxK,IAATwK,EACY,UAGAA,EAEhB,MAAMq0B,EAAYzU,EAAO0U,mBAEzB,QAAmB9+B,IAAfyrC,EAA0B,CAC1B,MAAMhsC,EAAOqoE,GAAKG,gBAAgBx8B,GAC5Blb,EAASu3C,GAAK7L,SAAS7/D,KAAKoO,MAAQ,EAAK,EACzCpK,EAAOy+B,EAAUrxB,aAAa,QAAQpR,KAAKoO,oBAAoBihC,KAAcrvC,KAAKiS,aAClFuiB,EAAUiO,EAAUrxB,aAAa,QAAQpR,KAAKoO,oBAAoBihC,KAAcrvC,KAAKiS,eAC3FjS,KAAKqvC,WAAa,CAAEhsC,OAAM8wB,QAAOnwB,OAAMwwB,WACvCx0B,KAAK8rE,WAAa,IAAIr8C,EAAMzvB,KAAKqvC,WAAWhsC,KAAMrD,KAAKqvC,WAAWlb,OAClEn0B,KAAK8rE,WAAWt7D,QAAQilB,MAAQ,EAChCz1B,KAAK8rE,WAAWv0C,UAAUv3B,KAAKqvC,WAAW7a,QAC9C,MAEIx0B,KAAKqvC,gBAAazrC,EAEtB,OAAO5D,IACX,CAEA4vB,WAII,MAHkB,QAAd5vB,KAAKiS,MACLvO,EAAQ1D,KAAKq3B,MAAO,YAAa,kCAE9Br3B,KAAKyK,KAChB,CAEAlF,gBAAgB6I,GAEZ,MAAe,WAARA,EAAoB4f,EAAOyC,oBAAuBzC,EAAOyC,oBAAsB,EAAK,CAC/F,CAEA2G,SAASC,GAEL,OADAr3B,KAAKq3B,MAAQA,EACNr3B,IACX,CAEA+V,OACI,MAAMshB,EAAQr3B,KAAKo4B,aACbxC,EAAMyB,EAAMvhB,eAClB9V,KAAKsW,cACLtW,KAAK8U,WAAW8gB,GAChBA,EAAI8V,UAAU,OAAQ1rC,KAAK6S,aAAa,OACxC4c,EAAMk+B,YAAY/3B,EAAK51B,KAAK2D,EAAG0zB,EAAMmM,YAAYxjC,KAAKkuB,KAAKlqB,MAAO0nE,GAAK7L,SAAS7/D,KAAKoO,MAAOpO,KAAKkuB,KAAK7qB,KAAM,CACxG/B,SAAU,QAAQtB,KAAKoO,cAEHxK,IAApB5D,KAAKqvC,iBAAgDzrC,IAApB5D,KAAK8rE,aACtC9rE,KAAK09C,iBAAiB19C,KAAK8rE,WAAYz0C,EAAOr3B,KAAKqvC,WAAWrrC,MAC9DhE,KAAK8rE,WAAW10C,SAASC,GACzBr3B,KAAK8rE,WAAWh1D,WAAW8e,GAC3B51B,KAAK8rE,WAAWzzC,cAAcr4B,KAAK2D,IAEvCiyB,EAAIgW,aACJ5rC,KAAK2V,aAAaigB,EACtB,EAGJ81C,GAAKnpC,OAAQ,ECtJb,MAAMwpC,WAAqBtuB,GACZ/7C,sBACP,OAAOG,EAASkqE,YACpB,CAEAtqE,YAAYsuB,EAASi8C,EAAeC,GAChC1oE,QACAvD,KAAKksE,QAAU,GACflsE,KAAKmsE,UAAUp8C,EAASi8C,EAAeC,GACvCjsE,KAAKu6B,YAAY4iB,GAAsBsC,OACvCz/C,KAAKosE,eAAiBp+C,EAAOyC,oBAC7BzwB,KAAKmR,OAAS,GACdnR,KAAKqsE,WAAa,GAClBrsE,KAAKssE,eAAgB,CACzB,CAIAC,eAAe7zD,EAAK8zD,GAChB,MAAMC,EAAez+C,EAAOka,gBAAgBxvB,EAAIzG,MAC1Cqd,EAAQ,IAAIG,EAAMg9C,EAAappE,KAAMrD,KAAKosE,gBAEhD,IAAIM,EAAa,EACjB,GAAiB,MAAbh0D,EAAIzG,MAAgBu6D,EAAS,CAC7B,MAAM76B,EAAUo6B,GAAajpC,kBAAkB0pC,EAAQv6D,MACvD,GAAI0/B,EAAS,CAET+6B,EADgBF,EAAQxoE,MAAQ0U,EAAI1U,KACb2tC,EAAQ3Y,MAAQ2Y,EAAQzY,KACnD,CACJ,CAEAl5B,KAAK09C,iBAAiBpuB,EAAOtvB,KAAKo4B,aAAc1f,EAAI1U,MACpDhE,KAAKmR,OAAOsD,KAAK6a,GACjB,MAAMq9C,EAAY3sE,KAAKqsE,WAAWrsE,KAAKqsE,WAAWzmE,OAAS,GACrD6pC,EAAangB,EAAMxe,aAAarG,MAAQiiE,EAE9C1sE,KAAKqsE,WAAW53D,KAAKk4D,EAAYl9B,GAEjCzvC,KAAKyK,OAASglC,CAClB,CAGAm9B,UAAU98C,GAGN,OAFA9vB,KAAKurE,WAAY,EACjBvrE,KAAKgsE,cAAgBl8C,EACd9vB,IACX,CACA6sE,uBAAuB/8C,GAEnB,MAAMg9C,EAAiB9+C,EAAO8T,aAAahS,GAErCi9C,EAAkB/sE,KAAKksE,QAAQtmE,OAAS,GAAKknE,EAAelnE,OAAS,GAAKknE,EAAe,GAAG76D,OAASjS,KAAKksE,QAAQ,GAAGj6D,KAErH+6D,EAAWD,EAAkBD,EAAelnE,OAASknE,EAAelnE,OAAS5F,KAAKksE,QAAQtmE,OAEhG,GAAIonE,EAAW,EACX,OAEJ,MAAMC,EAAY,GAClB,IAAK,IAAIvkE,EAAI,EAAGA,EAAIskE,EAAUtkE,IAAK,CAC/B,IAAI4J,EAAQ5J,EACPqkE,IACDz6D,EAAQw6D,EAAelnE,OAASonE,EAAWtkE,GAE/C,MAAMgQ,EAAMo0D,EAAex6D,GAC3B26D,EAAUx4D,KAAK,CAAExC,KAAM,IAAKjO,KAAM0U,EAAI1U,MAC1C,CAGA,OADAhE,KAAKksE,QAAUe,EAAUC,OAAOltE,KAAKksE,SAC9B,CACHA,QAASe,EACTh7D,KAAM66D,EAAe,GAAG76D,KAEhC,CAEAk7D,WAAW91C,GAGP,OAFAr3B,KAAKssE,eAAgB,EACrBj1C,EAAMuQ,YAAY5nC,MACXA,IACX,CAGAotE,gBAAgBl/C,EAAMjc,EAAMi6D,EAAUlsE,KAAKksE,SACvC,IACImB,EAuCA3kE,EAxCA4kE,EAAS,EAEb,OAAQp/C,GAEJ,IAAK,UACY,MAATjc,EACAo7D,EAAc,CAAC,IAAK,GAAK,EAAG,EAAG,KAAM,GAAK,GAE1CC,GAAU,EACd,MACJ,IAAK,gBACY,MAATr7D,EACAo7D,EAAc,CAAC,EAAG,EAAG,GAAK,IAAK,EAAG,EAAG,KAErCC,EAAS,IACb,MACJ,IAAK,OACDA,EAAS,GACT,MACJ,IAAK,QACY,MAATr7D,EACAo7D,EAAc,CAAC,EAAG,EAAG,IAAK,GAAK,EAAG,EAAG,KAErCC,GAAU,GACd,MACJ,IAAK,aACL,IAAK,aACY,MAATr7D,EACAo7D,EAAc,CAAC,GAAK,IAAK,EAAG,EAAG,IAAK,IAAK,GAEzCC,EAAS,EACb,MACJ,IAAK,OACL,IAAK,SACDA,EAAS,EAOjB,QAA2B,IAAhBD,EACP,IAAK3kE,EAAI,EAAGA,EAAIwjE,EAAQtmE,SAAU8C,EAC9BwjE,EAAQxjE,GAAG1E,KAAOqpE,EAAY3kE,QAGjC,GAAe,IAAX4kE,EACL,IAAK5kE,EAAI,EAAGA,EAAIwjE,EAAQtmE,SAAU8C,EAC9BwjE,EAAQxjE,GAAG1E,MAAQspE,CAG/B,CACA1vB,WAAWtrC,GAGP,OAFKtS,KAAKurE,WACNvrE,KAAKg7D,SACqB,IAAvBh7D,KAAKmR,OAAOvL,SAAkB5F,KAAKssE,eAAiBh6D,EAAQ,EAAK,EAAItS,KAAK60C,OACrF,CACAjlB,WAGI,OAFK5vB,KAAKurE,WACNvrE,KAAKg7D,SACFh7D,KAAKyK,KAChB,CACA0hE,UAAUp8C,EAASi8C,EAAeC,GAK9B,OAJAjsE,KAAKurE,WAAY,EACjBvrE,KAAK+vB,QAAUA,EACf/vB,KAAKgsE,cAAgBA,EACrBhsE,KAAKisE,aAAeA,EACbjsE,IACX,CAIAutE,SAAStB,GAGL,OAFAjsE,KAAKurE,WAAY,EACjBvrE,KAAKisE,aAAeA,EACbjsE,IACX,CACAwtE,sBAAsBvB,GAClB,MAAMliE,EAAM9E,KAAK4lC,IAAIohC,EAAarmE,OAAQ5F,KAAKksE,QAAQtmE,QACvD,IAAK,IAAI8C,EAAI,EAAGA,EAAIqB,IAAOrB,EACnBujE,EAAavjE,KACb1I,KAAKksE,QAAQxjE,GAAGuJ,KAAOg6D,EAAavjE,GAGhD,CACAsyD,SACI,MAAM3jC,EAAQr3B,KAAKo4B,aACnBp4B,KAAKyK,MAAQ,EACbzK,KAAKmR,OAAS,GACdnR,KAAKqsE,WAAa,CAAC,GACnBrsE,KAAKksE,QAAUl+C,EAAO8T,aAAap+B,EAAQ1D,KAAK+vB,UAChD,MAAMm8C,EAAUlsE,KAAKksE,QACfuB,EAAsBvB,EAAQtmE,OAAS,EAAIsmE,EAAQ,GAAGj6D,UAAOrO,EACnE,IAAI8pE,EAOJ,GANI1tE,KAAKgsE,gBACL0B,EAAgB1tE,KAAK6sE,uBAAuB7sE,KAAKgsE,gBAEjDhsE,KAAKisE,cACLjsE,KAAKwtE,sBAAsBxtE,KAAKisE,cAEhCjsE,KAAKksE,QAAQtmE,OAAS,EAAG,CACzB,MAAMsoB,GAAQluB,KAAKyzB,WAAa0pB,GAAsBoB,IAAMlnB,EAAMs2C,aAAet2C,EAAMu2C,YAAcv2C,EAAMu2C,UACvGF,GACA1tE,KAAKotE,gBAAgBl/C,EAAMw/C,EAAcz7D,KAAMy7D,EAAcxB,SAEjElsE,KAAKotE,gBAAgBl/C,EAAMu/C,EAAqBvB,GAChD,IAAK,IAAIxjE,EAAI,EAAGA,EAAI1I,KAAKksE,QAAQtmE,SAAU8C,EACvC1I,KAAKusE,eAAevsE,KAAKksE,QAAQxjE,GAAI1I,KAAKksE,QAAQxjE,EAAI,GAE9D,CACA1I,KAAKurE,WAAY,CACrB,CAIAr6D,YAGI,OAFKlR,KAAKurE,WACNvrE,KAAKg7D,SACFh7D,KAAKmR,MAChB,CACA4E,OACI,MAAMshB,EAAQr3B,KAAKo4B,aACbxC,EAAMyB,EAAMvhB,eACb9V,KAAKurE,WACNvrE,KAAKg7D,SACTh7D,KAAKsW,cACLtW,KAAK8U,WAAW8gB,GAChBA,EAAI8V,UAAU,eAAgB1rC,KAAK6S,aAAa,OAChD,IAAK,IAAInK,EAAI,EAAGA,EAAI1I,KAAKmR,OAAOvL,OAAQ8C,IAAK,CACzC,MAAM4mB,EAAQtvB,KAAKmR,OAAOzI,GACpB/E,EAAI3D,KAAK2D,EAAI3D,KAAKqsE,WAAW3jE,GACnC4mB,EAAM8H,SAASC,GACf/H,EAAMxY,WAAW8e,GACjBtG,EAAM+I,cAAc10B,EACxB,CACAiyB,EAAIgW,aACJ5rC,KAAK2V,aAAaigB,EACtB,EAIJm2C,GAAajpC,kBAAoB,CAC7B,IAAK,CACD9J,MAAO,EACPE,MAAO,GAEXx0B,EAAG,CACCs0B,MAAO,EACPE,MAAO,GAEXt0B,EAAG,CACCo0B,MAAO,EACPE,MAAO,GAEX,KAAM,CACFF,MAAO,EACPE,MAAO,GAEX1c,GAAI,CACAwc,MAAO,EACPE,MAAO,GAEXzc,GAAI,CACAuc,MAAO,EACPE,MAAO,GAEX7yB,EAAG,CACC2yB,MAAO,EACPE,MAAO,GAEXtc,IAAK,CACDoc,MAAO,EACPE,MAAO,GAEX,KAAM,CACFF,MAAO,EACPE,MAAO,GAEX,IAAK,CACDF,MAAO,EACPE,MAAO,GAEX,KAAM,CACFF,MAAO,EACPE,MAAO,GAEX,MAAO,CACHF,MAAO,EACPE,MAAO,GAEXxc,GAAI,CACAsc,MAAO,EACPE,MAAO,IAEXvc,IAAK,CACDqc,MAAO,EACPE,MAAO,KC5Rf,MAAM20C,WAAmBpwB,GACV/7C,sBACP,OAAOG,EAASgsE,UACpB,CACApsE,YAAYwQ,EAAMtO,EAAG8wB,GACjBlxB,QACAvD,KAAK8tE,YAAc77D,EACnBjS,KAAK2D,EAAIA,EACT3D,KAAKw0B,QAAU,EACfx0B,KAAKy0B,QAAUA,EACfz0B,KAAK2X,WACT,CACAo2D,UAAUpqE,GAEN,OADA3D,KAAKw0B,QAAU7wB,EACR3D,IACX,CACAguE,UAAUllE,GAEN,OADA9I,KAAKy0B,QAAU3rB,EACR9I,IACX,CACA+V,KAAKshB,EAAO1zB,GAER,OADA3D,KAAKsW,cACGtW,KAAK8tE,aACT,KAAKD,GAAW57D,KAAKg8D,WACjBjuE,KAAKkuE,cAAc72C,EAAO1zB,EAAI0zB,EAAMzH,YACpC,MACJ,KAAKi+C,GAAW57D,KAAKk8D,UACjBnuE,KAAKouE,eAAe/2C,EAAO1zB,EAAG,QAAQ,GACtC,MACJ,KAAKkqE,GAAW57D,KAAKo8D,WACjBruE,KAAKsuE,eAAej3C,EAAO1zB,GAC3B,MACJ,KAAKkqE,GAAW57D,KAAKs8D,YACjBvuE,KAAKsuE,eAAej3C,EAAO1zB,EAAI0zB,EAAMzH,YACrC,MACJ,KAAKi+C,GAAW57D,KAAKu8D,GACjBxuE,KAAKouE,eAAe/2C,EAAO1zB,EAAG,QAAQ,GACtC,MACJ,KAAKkqE,GAAW57D,KAAKw8D,WACjBzuE,KAAKouE,eAAe/2C,EAAO1zB,EAAG,WAAW,GACzC,MACJ,KAAKkqE,GAAW57D,KAAKy8D,WACjB1uE,KAAKouE,eAAe/2C,EAAO1zB,EAAG,gBAAgB,GAC9C,MACJ,KAAKkqE,GAAW57D,KAAK08D,GACjB3uE,KAAKouE,eAAe/2C,EAAO1zB,EAAG,QAAQ,GACtC,MACJ,KAAKkqE,GAAW57D,KAAK28D,WACjB5uE,KAAKouE,eAAe/2C,EAAO1zB,EAAG,WAAW,GACzC,MACJ,KAAKkqE,GAAW57D,KAAK48D,WACjB7uE,KAAKouE,eAAe/2C,EAAO1zB,EAAG,gBAAgB,GAC9C,MACJ,KAAKkqE,GAAW57D,KAAK68D,KACjB9uE,KAAKouE,eAAe/2C,EAAO1zB,EAAG,QAAQ,GACtC,MACJ,KAAKkqE,GAAW57D,KAAK88D,QACjB/uE,KAAKouE,eAAe/2C,EAAO1zB,EAAG,MAAM,GAK5C,OAAO3D,IACX,CACAkuE,cAAc72C,EAAO1zB,GACjB,MAAMmF,EAAIuuB,EAAM2a,eAAe3a,EAAM8Y,eAAiBnwC,KAAKy0B,QAE3D,OADAhF,EAAMk+B,YAAYt2B,EAAMvhB,eAAgB9V,KAAK2D,EAAIA,EAAI3D,KAAKw0B,QAAS1rB,EAAIklB,EAAO0U,mBAAmBtxB,aAAa,gCAAiC,GAAI,OAAQ,CAAE9P,SAAU,SAChKtB,IACX,CACAsuE,eAAej3C,EAAO1zB,GAClB,MAAMmF,EAAIuuB,EAAM2a,eAAe3a,EAAM8Y,eAAiBnwC,KAAKy0B,QAE3D,OADAhF,EAAMk+B,YAAYt2B,EAAMvhB,eAAgB9V,KAAK2D,EAAIA,EAAI3D,KAAKw0B,QAAS1rB,EAAIklB,EAAO0U,mBAAmBtxB,aAAa,iCAAkC,GAAI,QAAS,CAAE9P,SAAU,UAClKtB,IACX,CACAouE,eAAe/2C,EAAO1zB,EAAGoB,EAAMiqE,GAC3B,IAAInhE,EACJ,MAAM+nB,EAAMyB,EAAMvhB,eAClB8f,EAAI5gB,OACJ4gB,EAAI7e,QAAQ/W,KAAKiX,UACjB,IAAIg4D,EAAS,EACTC,EAAW,EACf,MAAMC,EAAgB93C,EAAMwlB,gBAAkB78C,KAAK2D,EACnD,OAAQ3D,KAAK8tE,aAET,KAAKD,GAAW57D,KAAKk8D,UAEjBc,EAASjvE,KAAK2D,EAAI0zB,EAAM+3C,sBACxBF,EACID,EACIr5C,EAAI2sB,YAAYx9C,GAAM0F,MACtBujB,EAAO0U,mBAAmBtxB,aAAa,sCAC/C,MAEJ,KAAKy8D,GAAW57D,KAAKu8D,GACrB,KAAKX,GAAW57D,KAAKy8D,WACrB,KAAKb,GAAW57D,KAAK08D,GACrB,KAAKd,GAAW57D,KAAK48D,WACrB,KAAKhB,GAAW57D,KAAK68D,KACjBG,EACIjvE,KAAK2D,EACDA,EACA3D,KAAKw0B,QACL6C,EAAMzH,WACN5B,EAAO0U,mBAAmBtxB,aAAa,sCACvC+9D,EACAv5C,EAAI2sB,YAAYx9C,GAAM0F,MAC9B,MAEJ,QACIwkE,EACIjvE,KAAK2D,EACDA,EACA3D,KAAKw0B,QACL6C,EAAMzH,WACN5B,EAAO0U,mBAAmBtxB,aAAa,sCACvC+9D,EACAv5C,EAAI2sB,YAAYx9C,GAAM0F,MACtBujB,EAAO0U,mBAAmBtxB,aAAa,sCAC/C89D,EACID,EACIr5C,EAAI2sB,YAAYx9C,GAAM0F,MACtBujB,EAAO0U,mBAAmBtxB,aAAa,sCAGvD,MAAMtI,EAAIuuB,EAAM2a,eAAe3a,EAAM8Y,eACjCnwC,KAAKy0B,QACLzG,EAAO0U,mBAAmBtxB,aAAa,sCAQ3C,OAPI49D,GACAv/C,EAAMk+B,YAAY/3B,EAAKs5C,EAAUpmE,EAAqG,EAAlG4E,EAAKqK,wBAAiD,QAAxBlK,EAAK7N,KAAKiX,gBAA6B,IAAPpJ,OAAgB,EAASA,EAAGO,MAAW,OAAQ,CAC7I9M,SAAU,SAGlBs0B,EAAIyc,SAASttC,EAAMkqE,EAAQnmE,EAAI,GAC/B8sB,EAAIhgB,UACG5V,IACX,EAEJ6tE,GAAW12D,UAAY,CACnB3I,OAAQd,EAAK8D,MACbpD,KAAM4f,EAAOyC,oBAAsB,EACnCpiB,OAAQ/B,EAAWqhC,KACnBr/B,MAAO/B,EAAUmC,QAErBm/D,GAAW57D,KAAO,CACd8sC,KAAM,EACNovB,UAAW,EACXF,WAAY,EACZI,WAAY,EACZE,YAAa,EACbC,GAAI,EACJC,WAAY,EACZC,WAAY,EACZC,GAAI,EACJC,WAAY,GACZC,WAAY,GACZC,KAAM,GACNC,QAAS,IC7Jb,MAAMM,WAAqB5xB,GACZ/7C,sBACP,OAAOG,EAASwtE,YACpB,CACA5tE,YAAY6tE,EAAS3rE,EAAG4rB,EAASggD,GAAW,GACxChsE,QACAvD,KAAK05B,SAAS,IACd15B,KAAKsvE,QAAUA,EACftvE,KAAK2D,EAAIA,EACT3D,KAAKwvE,QAAU,EACfxvE,KAAKuvB,QAAUA,EACfvvB,KAAKuvE,SAAWA,EAChBvvE,KAAK2X,WACT,CACA83D,gBAAgBH,GAEZ,OADAtvE,KAAKsvE,QAAUA,EACRtvE,IACX,CACA+tE,UAAUpqE,GAEN,OADA3D,KAAKwvE,QAAU7rE,EACR3D,IACX,CACAguE,UAAUllE,GAEN,OADA9I,KAAKuvB,QAAUzmB,EACR9I,IACX,CACA+V,KAAKshB,EAAOm4C,GACR,MAEM55C,EAAMyB,EAAMvhB,eAClB9V,KAAKsW,cACLsf,EAAI5gB,OACJ4gB,EAAIlgB,aALgB,GAMpBkgB,EAAI7e,QAAQ/W,KAAKiX,UACjB,MAAMq4B,EAAgBzD,GAAc0D,OAAOvvC,KAAKiX,UAC1C0Y,EAAY2f,EAAcV,oBAAoB5uC,KAAKsvE,SACnDI,EAAQpgC,EAAcf,kBAAkBvuC,KAAKsvE,SAC7CxkB,EAAa4kB,EAAMhlE,OACnBilE,GAAY,EAAID,EAAMvhC,KACtB1jC,EAAQklB,EAAY,EACpBjlB,EAASogD,EAAa,EAEtBhiD,EAAIuuB,EAAM2a,eAAe,KAAOhyC,KAAKuvB,QACrC5rB,EAAI3D,KAAK2D,EAAI6rE,EAQnB,OAPIxvE,KAAKuvE,WACL35C,EAAIQ,YACJR,EAAI2rC,KAAK59D,EAAGmF,EAAI4B,EAASilE,EAAUllE,EAAOC,GAC1CkrB,EAAIhH,UAERgH,EAAIyc,SAASryC,KAAKsvE,QAAS3rE,EArBX,EAqBwBmF,EArBxB,GAsBhB8sB,EAAIhgB,UACG5V,IACX,EAEJqvE,GAAal4D,UAAY,CACrB3I,OAAQd,EAAKe,WACbL,KAAM,GACNC,OAAQ/B,EAAWqhC,KACnBr/B,MAAO/B,EAAUmC,QCxDrB,MAAMkhE,WAAmBnyB,GACV/7C,sBACP,OAAOG,EAAS+tE,UACpB,CACAnuE,YAAYouE,EAAOlsE,EAAG4rB,GAClBhsB,QAEAvD,KAAK8nC,eAAiB,CAAEkT,iBAAkB,IAC1Ch7C,KAAK6vE,MAAQA,EACb7vE,KAAKyzB,SAAW0pB,GAAsBlkB,MACtCj5B,KAAK2D,EAAIA,EACT3D,KAAKwvE,QAAU,GACfxvE,KAAKuvB,QAAUA,EACfvvB,KAAK2X,WACT,CACAm4D,SAASD,GAEL,OADA7vE,KAAK6vE,MAAQA,EACN7vE,IACX,CACA+tE,UAAUpqE,GAEN,OADA3D,KAAKwvE,QAAU7rE,EACR3D,IACX,CACAguE,UAAUllE,GAEN,OADA9I,KAAKuvB,QAAUzmB,EACR9I,IACX,CACA+V,KAAKshB,EAAOm4C,GACR,MAAM55C,EAAMyB,EAAMvhB,eAClB9V,KAAKsW,cACL,MAAM+X,EAAUruB,KAAK8nC,eACfzY,EAAQhB,EAAQ2sB,iBAAmBhtB,EAAOyC,oBAC1C9f,EAAO3Q,KAAK6vE,MAAMl/D,KAClB4d,EAAWvuB,KAAK6vE,MAAMthD,SACtBurB,EAAO95C,KAAK6vE,MAAM/1B,MAAQ,EAC1Bi2B,EAAM/vE,KAAK6vE,MAAME,IACvB,IAAIpsE,EAAI3D,KAAK2D,EAAI3D,KAAKwvE,QAAUA,EAChC,MAAM1mE,EAAIuuB,EAAM2a,eAAe,GAAKhyC,KAAKuvB,QACzCqG,EAAI5gB,OACJ,MAAMs6B,EAAgBzD,GAAc0D,OAAOvvC,KAAKiX,UAMhD,GALItG,IACAilB,EAAI7e,QAAQ/W,KAAKiX,UACjB2e,EAAIyc,SAAS1hC,EAAMhN,EAAGmF,GACtBnF,GAAK2rC,EAAcV,oBAAoBj+B,IAEvC4d,GAAYwhD,EAAK,CAEjB,MAAMC,EAAe3vE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKiX,UAAW,CAAE5I,OAAQ,SAAUC,MAAO,WAChGsnB,EAAI7e,QAAQi5D,GACZ,MAAMC,EAAoBpkC,GAAc0D,OAAOygC,GAC3Cr/D,IACAhN,GAAKssE,EAAkBrhC,oBAAoB,KAC3ChZ,EAAIyc,SAAS,IAAK1uC,EAAGmF,GACrBnF,GAAKssE,EAAkBrhC,oBAAoB,MAE/C,MAAMgM,EAAa5sB,EAAO0hB,cAAcnhB,GAKxC,GAJA5qB,GAAK,EAAI0rB,EACTI,EAAMk+B,YAAY/3B,EAAKjyB,EAAGmF,EAAGulB,EAAQ2sB,iBAAkBJ,EAAWrqB,WAClE5sB,GAAK8rB,EAAMG,SAASgrB,EAAWrqB,UAAWlC,EAAQ2sB,kBAE9CJ,EAAW5nB,KAAM,CACjB,IAAIk9C,EAAc,GACdt1B,EAAWjnB,aACXu8C,GAAe,GAAKt1B,EAAWjnB,WAAa,IAChDu8C,GAAe7gD,EACf,MAAMma,EAAQ1gC,EAAIonE,EAElB,GADAt6C,EAAIuqB,SAASx8C,EAAI0rB,EAAOma,EAAOna,EAAO6gD,GAClCt1B,EAAWv3C,MAAQu3C,EAAW/mB,iBAAkB,CAChD,MAAMs8C,EAAc1gD,EAAMk+B,YAAY/3B,EAAKjyB,EAAG6lC,EAAOnb,EAAQ2sB,iBAAkBJ,EAAW/mB,iBAAkB,CACxGvyB,SAAU,oBAEdqC,GAAMwsE,EAAY1lE,MAAQujB,EAAOyC,oBAAuB0/C,EAAYrhE,KAAK+B,UAAUI,UACvF,CACJ,CAEA,IAAK,IAAIvI,EAAI,EAAGA,EAAIoxC,EAAMpxC,IACtB/E,GAAK,EAAI0rB,EACTuG,EAAIQ,YACJR,EAAI8f,IAAI/xC,EAAGmF,EAAI,EAAIumB,EAAO,EAAIA,EAAO,EAAa,EAAVpqB,KAAKC,IAAQ,GACrD0wB,EAAIa,OAERb,EAAIyc,SAAS,MAAQ09B,GAAOp/D,EAAO,IAAM,IAAKhN,EAAI,EAAI0rB,EAAOvmB,EACjE,CAEA,OADA8sB,EAAIhgB,UACG5V,IACX,EAEJ4vE,GAAWz4D,UAAY,CACnB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWqhC,KACnBr/B,MAAO/B,EAAUmC,QV1FrB,SAAW62D,GACPA,EAAkBA,EAAwB,KAAI,GAAK,OACnDA,EAAkBA,EAA0B,OAAI,GAAK,SACrDA,EAAkBA,EAAyB,MAAI,GAAK,OACvD,CAJD,CAIGA,KAAsBA,GAAoB,CAAC,IAO9C,MAAM6K,WAAiB1tE,GACRhB,sBACP,OAAOG,EAASuuE,QACpB,CAEWC,oBACP,MAAO,CACHC,MAAO,CACHjtE,KAAM,SAEVupB,GAAI,CACAvpB,KAAM,iBAEVmpB,QAAS,CACLnpB,KAAM,mBAEVktE,cAAe,CACXltE,KAAM,sBAEVmtE,cAAe,CACXntE,KAAM,mBAEVkF,EAAG,CACClF,KAAM,gBAEVotE,EAAG,CACCptE,KAAM,gBAEVgvB,EAAG,CACChvB,KAAM,gBAEVgF,EAAG,CACChF,KAAM,oBAEVqtE,EAAG,CACCrtE,KAAM,YAEVstE,KAAM,CACFttE,KAAM,QAEVutE,WAAY,CACRvtE,KAAM,oBAEVwtE,YAAa,CACTxtE,KAAM,mBAEVytE,iBAAkB,CACdztE,KAAM,WAEV0tE,eAAgB,CACZ1tE,KAAM,iBAEV2tE,OAAQ,CACJ3tE,KAAM,mBAEVm6D,KAAM,CACFn6D,KAAM,kBAEVqpB,KAAM,CACFrpB,KAAM,gBAEVspB,cAAe,CACXtpB,KAAM,qBAGlB,CACA5B,YAAYs4C,GAaR,GAZAx2C,MAAMw2C,GACN/5C,KAAK+E,KAAOg1C,EAAWh1C,MAAQ,GAC/B/E,KAAKixE,YAAcl3B,EAAWk3B,YAC9BjxE,KAAKkxE,UAAYn3B,EAAWm3B,UAC5BlxE,KAAK+W,QAAQgjC,EAAWjrC,MACxB9O,KAAKgE,KAAO+1C,EAAW/1C,MAAQ,EAC/BhE,KAAKmxE,OAASp3B,EAAWo3B,SAAU,EACnCnxE,KAAKq2C,aAAe0D,EAAW1D,eAAgB,EAC/Cr2C,KAAKoxE,cAAgB7L,GAAkBlsC,KAInC0gB,EAAWzqB,MAAO,CAClB,MAAM+hD,EAASjB,GAASC,OAAOt2B,EAAWzqB,OAC1C,IAAK+hD,EACD,MAAM,IAAIluE,EAAa,uBAAyB42C,EAAWzqB,OAC/DtvB,KAAKsvB,MAAQ,IAAIG,EAAM4hD,EAAOhuE,KAAM2qB,EAAOyC,oBAAqB,CAAEnvB,SAAU,aAC5EtB,KAAK05B,SAAS15B,KAAKsvB,MAAMxe,aAAarG,MAC1C,MAEIzK,KAAKsvB,WAAQ1rB,CAErB,CAEAytC,iBAAiBH,GAEb,OADAlxC,KAAKoxE,cAAgBlgC,EACdlxC,IACX,CAEA8sD,QAAQ9oD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA6sD,UACI,OAAO7sD,KAAKgE,IAChB,CAEAu9C,UACI,OAAOvhD,KAAK+E,IAChB,CAEAwzC,YACI,GAAIv4C,KAAKw4C,aACL,OACJ,MAAM3d,EAAc76B,KAAK82C,iBAAiB,0CAC1C,GAAI92C,KAAKmxE,OACLnxE,KAAK05B,SAAS,QAGd,GAAI15B,KAAKsvB,WAGJ,CACD,MAAMsG,EAAM51B,KAAK8V,eACjB8f,EAAI7e,QAAQ/W,KAAKiX,UACjBjX,KAAK05B,SAAS9D,EAAI2sB,YAAYviD,KAAK+E,MAAM0F,MAC7C,CAEAzK,KAAKoxE,gBAAkB7L,GAAkBxsC,OACzC/4B,KAAKi5C,oBAAsBj5C,KAAKyK,MAAQ,EAEnCzK,KAAKoxE,gBAAkB7L,GAAkBhsC,QAC9Cv5B,KAAKi5C,oBAAsBj5C,KAAKyK,OAGpCzK,KAAKu5C,qBAAuB1e,EAAY/pB,aAAa8rC,QAAU,EAC/D58C,KAAKw4C,cAAe,CACxB,CAKAziC,OACI,MAAM6f,EAAM51B,KAAK8V,eACXuhB,EAAQr3B,KAAKo4B,aACbyC,EAAc76B,KAAK82C,iBAAiB,qCAC1C92C,KAAKsW,cAEL,IAAI3S,EAAI3D,KAAK+4C,eAAiBle,EAAY/pB,aAAa8rC,QAAU,EAEjE,MAAMnyC,EAAQzK,KAAK4vB,WAOnB,IAAI9mB,EACJ,GAPI9I,KAAKoxE,gBAAkB7L,GAAkBxsC,OACzCp1B,GAAK8G,EAAQ,EAERzK,KAAKoxE,gBAAkB7L,GAAkBhsC,QAC9C51B,GAAK8G,GAGLzK,KAAKsvB,MACLxmB,EAAIuuB,EAAMmM,YAAYxjC,KAAKgE,MAAQ,GACnChE,KAAKsvB,MAAM2I,OAAOrC,EAAKjyB,EAAGmF,OAEzB,CACDA,EAAIuuB,EAAMmM,YAAYxjC,KAAKgE,MAAQ,GACnChE,KAAK8U,WAAW8gB,GAChBA,EAAI7e,QAAQ/W,KAAKiX,UACjB2e,EAAIyc,SAASryC,KAAK+E,KAAMpB,EAAGmF,GAC3B,MAAM4B,EAASkrB,EAAI2sB,YAAYviD,KAAK+E,MAAM2F,QAGpC,OAAE8D,EAAM,KAAEJ,EAAI,OAAEC,EAAM,MAAEC,GAAUtO,KAAKiX,SAEvC0xC,EAAkBj7C,EAAK02C,UAAUh2C,EAAM,SACzCpO,KAAKixE,cACLr7C,EAAI7e,QAAQvI,EAAQm6C,EAAiBt6C,EAAQC,GAC7CsnB,EAAIyc,SAASryC,KAAKixE,YAAattE,EAAI3D,KAAKyK,MAAQ,EAAG3B,EAAI4B,EAAS,MAEhE1K,KAAKkxE,YACLt7C,EAAI7e,QAAQvI,EAAQm6C,EAAiBt6C,EAAQC,GAC7CsnB,EAAIyc,SAASryC,KAAKkxE,UAAWvtE,EAAI3D,KAAKyK,MAAQ,EAAG3B,EAAI4B,EAAS,IAAM,IAExE1K,KAAK2V,aAAaigB,EACtB,CACJ,EAEJw6C,GAASj5D,UAAY,CACjB3I,OAAQd,EAAKe,WACbL,KAAM,GACNC,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUmC,QAErB0hE,GAASkB,cAAgB/L,GW1MzB,MAAMgM,WAAkB9zB,GACT/7C,sBACP,OAAOG,EAAS0vE,SACpB,CACA9vE,YAAYsD,EAAM0uB,EAAUpF,EAAU,CAAC,GACnC9qB,QACAvD,KAAK05B,SAAS,IACd15B,KAAK+E,KAAOA,EACZ/E,KAAKyzB,SAAWA,EAChBzzB,KAAKquB,QAAUhuB,OAAOmX,OAAO,CAAEg4D,QAAS,EAAGjgD,QAAS,EAAG6hD,cAAehB,GAASkB,cAAcv4C,QAAU1K,GACvGruB,KAAK2X,WACT,CACA65D,aAAazsE,GAET,OADA/E,KAAK+E,KAAOA,EACL/E,IACX,CACA+tE,UAAUpqE,GAEN,OADA3D,KAAKwvE,QAAU7rE,EACR3D,IACX,CACAguE,UAAUllE,GAEN,OADA9I,KAAKuvB,QAAUzmB,EACR9I,IACX,CACAyxE,QAAQ1sE,GAEJ,OADA/E,KAAK+E,KAAOA,EACL/E,IACX,CACA+V,KAAKshB,GACD,MAAMzB,EAAMyB,EAAMvhB,eAClB9V,KAAKsW,cACLsf,EAAI5gB,OACJ4gB,EAAIlgB,aAAa,GACjBkgB,EAAI7e,QAAQ/W,KAAKiX,UACjB,MAAMs6B,EAAa3b,EAAI2sB,YAAY,GAAKviD,KAAK+E,MAAM0F,MACnD,IAAI9G,EACAmF,EACJ,OAAQ9I,KAAKyzB,UACT,KAAK0pB,GAAsB9jB,KAC3B,KAAK8jB,GAAsB5jB,MACvBzwB,GAAKuuB,EAAMmM,YAAY,GAAKnM,EAAMq6C,kBAAoB,EAAI1xE,KAAKquB,QAAQkB,QAEnE5rB,EADA3D,KAAKyzB,WAAa0pB,GAAsB9jB,KACpChC,EAAMpuB,OAASsoC,EAAa,GAAKvxC,KAAKquB,QAAQmhD,QAG9Cn4C,EAAMpuB,OAASouB,EAAMzH,WAAa,GAAK5vB,KAAKquB,QAAQmhD,QAE5D,MACJ,KAAKryB,GAAsBlkB,MAC3B,KAAKkkB,GAAsBhkB,MACvBx1B,EAAI0zB,EAAMpuB,OAASjJ,KAAKquB,QAAQmhD,QAC5BxvE,KAAKquB,QAAQ+iD,gBAAkB7L,GAAkBxsC,OACjDp1B,GAAK0zB,EAAMzH,WAAa,EAAI2hB,EAAa,EAEpCvxC,KAAKquB,QAAQ+iD,gBAAkB7L,GAAkBhsC,QACtD51B,GAAK0zB,EAAMzH,WAAa2hB,GAGxBzoC,EADA9I,KAAKyzB,WAAa0pB,GAAsBlkB,MACpC5B,EAAM2a,eAAe,GAAKhyC,KAAKquB,QAAQkB,QAGvC8H,EAAM4a,kBAAkB,GAAKjyC,KAAKquB,QAAQkB,QAElD,MACJ,QACI,MAAM,IAAIpsB,EAAa,kBAAmB,uCAIlD,OAFAyyB,EAAIyc,SAAS,GAAKryC,KAAK+E,KAAMpB,EAAGmF,EAAI,GACpC8sB,EAAIhgB,UACG5V,IACX,EAEJuxE,GAAUp6D,UAAY,CAClB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUmC,QV7ErB,SAAW82D,GACPA,EAAUA,EAAgB,KAAI,GAAK,OACnCA,EAAUA,EAAiB,MAAI,GAAK,QACpCA,EAAUA,EAAe,IAAI,GAAK,MAClCA,EAAUA,EAAe,IAAI,GAAK,MAClCA,EAAUA,EAAqB,UAAI,GAAK,WAC3C,CAND,CAMGA,KAAcA,GAAY,CAAC,IAC9B,MAAMmM,WAAcl0B,GACL/7C,sBACP,OAAOG,EAAS8vE,KACpB,CACW1/D,kBACP,OAAOuzD,EACX,CACA/jE,YAAYwQ,EAAM05C,EAAQhoD,EAAG8wB,GACzBlxB,QACAvD,KAAK4xE,MAAQ3/D,EACbjS,KAAK2D,EAAIA,EACT3D,KAAKy0B,QAAUA,EACfz0B,KAAK2rD,OAASA,EACd3rD,KAAK2X,WACT,CACAq2D,UAAUllE,GAEN,OADA9I,KAAKy0B,QAAU3rB,EACR9I,IACX,CACA+V,KAAKshB,EAAO1zB,GACR,MAAMiyB,EAAMyB,EAAMvhB,eAClB9V,KAAKsW,cACL,IAAI7L,EAAQ4sB,EAAMzH,WAAajsB,EAC/B,MAAMkuE,EAAQx6C,EAAM2a,eAAe3a,EAAM8Y,eAAiBnwC,KAAKy0B,QACzDq9C,EAAc,IAAMz6C,EAAMkM,yBAChC,OAAQvjC,KAAK4xE,OACT,KAAKpM,GAAU/lB,MACX7pB,EAAIuqB,SAASngD,KAAK2D,EAAIA,EAAGkuE,EAAO,EAAGC,GACnC,MACJ,KAAKtM,GAAUjnB,IACX9zC,GAAS,EACTmrB,EAAIuqB,SAASngD,KAAK2D,EAAIA,EAAI8G,EAAOonE,EAAO,EAAGC,GAC3C,MACJ,KAAKtM,GAAUuM,UACXtnE,GAAS,EACTmrB,EAAIuqB,SAASngD,KAAK2D,EAAIA,EAAGkuE,EAAO,EAAGC,GACnCl8C,EAAIuqB,SAASngD,KAAK2D,EAAIA,EAAI8G,EAAOonE,EAAO,EAAGC,GAanD,OAPI9xE,KAAK4xE,QAAUpM,GAAU/lB,OAASz/C,KAAK4xE,QAAUpM,GAAUuM,YAC3Dn8C,EAAI5gB,OACJ4gB,EAAI7e,QAAQ/W,KAAKiX,UACjB2e,EAAIyc,SAASryC,KAAK2rD,OAAQ3rD,KAAK2D,EAAIA,EAAI,EAAGkuE,EAAQ,IAClDj8C,EAAIhgB,WAERggB,EAAIuqB,SAASngD,KAAK2D,EAAIA,EAAGkuE,EAAOpnE,EAAO,GAChCzK,IACX,EAEJ2xE,GAAMx6D,UAAY,CACd3I,OAAQd,EAAKe,WACbL,KAAM,EACNC,OAAQ/B,EAAWqhC,KACnBr/B,MAAO/B,EAAUmC,QW9Dd,MAAMsjE,WAA2BviD,EACpChuB,YAAYwwE,EAAeC,EAAWC,EAAW9uE,EAAM8wB,EAAO9F,GAC1D,IAAIxgB,EACJtK,MAAMF,EAAM8wB,EAAO9F,GACnBruB,KAAKiyE,cAAgBA,EACrBjyE,KAAK62B,UAAY,GACjB72B,KAAK82B,UAAY,GACjB,IAAIs7C,EAAW,EACX1nE,EAAS,EACb,IAAK,IAAIhC,EAAI,EAAGA,EAAIwpE,EAAUtsE,SAAU8C,EAAG,CACvC,IAAI2pE,EAAcH,EAAUxpE,GAC5B,OAAQwpE,EAAUxpE,IACd,IAAK,IACD2pE,EAAc,QACd,MACJ,IAAK,IACDA,EAAcF,EAAUvsE,OAAS,EAAI,YAAc,OACnD,MACJ,IAAK,IACDysE,EAAcF,EAAUvsE,OAAS,EAAI,kBAAoB,aACzD,MACJ,IAAK,IACDysE,EAAcF,EAAUvsE,OAAS,EAAI,mBAAqB,cAGlE,MAAM0sE,EAAW,IAAI7iD,EAAM,UAAY4iD,EAAaryE,KAAKiyE,cAAc99C,OACvEn0B,KAAK62B,UAAUpiB,KAAK69D,GACpBF,GAAmD,QAAtCvkE,EAAKykE,EAASxhE,aAAarG,aAA0B,IAAPoD,EAAgBA,EAAK,EAChFnD,EAASzF,KAAK8E,IAAIW,EAAQ4nE,EAASxhE,aAAapG,OACpD,CACA,IAAI6nE,EAAW,EACf,IAAK,IAAI7pE,EAAI,EAAGA,EAAIypE,EAAUvsE,SAAU8C,EAAG,CACvC,IAAI2pE,EAAcF,EAAUzpE,GAC5B,OAAQypE,EAAUzpE,IACd,IAAK,IACD2pE,EAAc,YACd,MACJ,IAAK,IACDA,EAAc,kBACd,MACJ,IAAK,IACDA,EAAc,mBAGtB,MAAMG,EAAW,IAAI/iD,EAAM,UAAY4iD,EAAaryE,KAAKiyE,cAAc99C,OACvEn0B,KAAK82B,UAAUriB,KAAK+9D,GACpBD,GAAY7uE,EAAQ8uE,EAAS1hE,aAAarG,OAC1CC,EAASzF,KAAK8E,IAAIW,EAAQ8nE,EAAS1hE,aAAapG,OACpD,CAGA1K,KAAKyyE,UAAY/nE,EAAS,GAAK,EAAI,EACnC1K,KAAKyK,MAAQxF,KAAK8E,IAAIqoE,EAAUG,GAChCvyE,KAAKq/C,KAAOr/C,KAAK8Q,aAAa0kB,MAC9Bx1B,KAAK0yE,WAAa1yE,KAAKyK,MAAQ2nE,GAAY,EAC3CpyE,KAAK2yE,WAAa3yE,KAAKyK,MAAQ8nE,GAAY,EAC3CvyE,KAAKi3B,OACT,CACAnmB,aACI,MAAO,CACH0kB,MAAOx1B,KAAKq/C,KACZ5pB,MAAOz1B,KAAKq/C,KAAOr/C,KAAKyK,MACxBA,MAAOzK,KAAKyK,MAEpB,CACA4tB,cAAc10B,GACV,MAAM0zB,EAAQr3B,KAAKo4B,aACbxC,EAAM51B,KAAK8V,eACjB,IAAI88D,EAAUjvE,EAAI3D,KAAK0yE,UACnB5pE,EAAI,EAEJA,EADA9I,KAAK82B,UAAUlxB,OAAS,EACpByxB,EAAMmM,YAAYxjC,KAAKiyE,cAAcY,QAAU7yE,KAAKyyE,YAEnDp7C,EAAMmM,YAAYxjC,KAAKiyE,cAAcY,SAAWx7C,EAAMmM,YAAYxjC,KAAKiyE,cAAca,aAAe,EAC7G,IAAK,IAAIpqE,EAAI,EAAGA,EAAI1I,KAAK62B,UAAUjxB,SAAU8C,EAAG,CAC5C,MAAM4mB,EAAQtvB,KAAK62B,UAAUnuB,GAC7B+mB,EAAMyG,cAAcN,EAAKtG,EAAMxe,aAAayjB,QAASv0B,KAAKqvB,MAAOujD,EAAU5yE,KAAKw0B,QAAS1rB,GACzF8pE,GAAWlvE,EAAQ4rB,EAAMxe,aAAarG,MAC1C,CACAmoE,EAAUjvE,EAAI3D,KAAK2yE,UACnB7pE,EAAIuuB,EAAMmM,YAAYxjC,KAAKiyE,cAAca,WAAa9yE,KAAKyyE,WAC3D,IAAK,IAAI/pE,EAAI,EAAGA,EAAI1I,KAAK82B,UAAUlxB,SAAU8C,EAAG,CAC5C,MAAM4mB,EAAQtvB,KAAK82B,UAAUpuB,GAC7B1I,KAAKiyE,cAAcv0B,iBAAiBpuB,EAAO+H,EAAOr3B,KAAKiyE,cAAcplB,WACrEp9B,EAAMyG,cAAcN,EAAKtG,EAAMxe,aAAayjB,QAASv0B,KAAKqvB,MAAOujD,EAAUtjD,EAAMxe,aAAa0jB,QAAS1rB,GACvG8pE,GAAWlvE,EAAQ4rB,EAAMxe,aAAarG,MAC1C,CACJ,ECjEG,MAAMsoE,WAAsBt1B,GACpB/7C,sBACP,OAAOG,EAASkxE,aACpB,CACW5hE,oBACP,MAAO,CACHmH,EAAG,CACCjV,KAAM,gBACNW,KAAM,GAEV,KAAM,CACFX,KAAM,mBACNW,KAAM,GAGlB,CACAvC,YAAYuxE,EAAW,MAAOC,EAAgB,GAAIC,GAAgB,GAC9D3vE,QACAvD,KAAKgzE,SAAW,MAChBhzE,KAAKgE,KAAO,EACZhE,KAAKmzE,YAAa,EAClBnzE,KAAKkzE,cAAgBA,EACrB,MAAMr+B,EAAUo+B,EAEVxwC,EAAYzU,EAAO0U,mBACzB1iC,KAAKm0B,MAAQsO,EAAUrxB,aAAa,iBAAmB4c,EAAOyC,oBAC9D,MAAM2iD,EAAgB3wC,EAAUrxB,aAAa,mBAAoB,GACjEpR,KAAK6yE,QAAU,EAAIO,EACnBpzE,KAAK8yE,WAAa,EAAIM,EACtBpzE,KAAKu6B,YAAY4iB,GAAsBsC,OACvCz/C,KAAKqzE,WAAWL,GAChBhzE,KAAK69C,WAAWhJ,EACpB,CAMAy+B,cAAcN,GACV,IAAInlE,EAAIoF,EACR,GAAiB,MAAb+/D,GAAiC,OAAbA,EAAmB,CACvC,MAAM,KAAEhvE,EAAI,KAAEX,GAAS0vE,GAAc5hE,OAAO6hE,GAC5C,MAAO,CACHhvE,OACAuU,KAAK,EACL+W,MAAO,IAAIG,EAAMpsB,EAAM2qB,EAAOyC,qBAEtC,CACIzwB,KAAKkzE,eAjEY,CAACF,IAC1B,MAAMO,EAAUP,EAASrqE,MAAM,KAC/B,GAAuB,IAAnB4qE,EAAQ3tE,QAA+B,MAAf2tE,EAAQ,IAA6B,MAAfA,EAAQ,GACtD,MAAM,IAAIpwE,EAAa,mBAAoB,sBAAsB6vE,sDAErEO,EAAQ3+D,SAAS+2C,IAEb,GAAoC,GAAhC,gBAAgB6nB,KAAK7nB,GACrB,MAAM,IAAIxoD,EAAa,mBAAoB,sBAAsB6vE,oCACrE,GACF,EAwDMS,CAAqBT,GAEzB,MAAM99C,EAAQ89C,EAASrqE,MAAM,KAC7B,MAAO,CACH3E,KAAM,EACNuU,KAAK,EACL+W,MAAOtvB,KAAK0zE,uBAA2C,QAAnB7lE,EAAKqnB,EAAM,UAAuB,IAAPrnB,EAAgBA,EAAK,GAAwB,QAAnBoF,EAAKiiB,EAAM,UAAuB,IAAPjiB,EAAgBA,EAAK,IAEjJ,CAKAygE,uBAAuBxB,EAAWC,GAE9B,OAAO,IAAIH,GAAmBhyE,KAAMkyE,EAAWC,EAAW,WAAYnyE,KAAKm0B,MAC/E,CAKAw/C,UACI,MAAM,KAAE3vE,EAAI,WAAEmvE,EAAU,MAAE7jD,GAAUtvB,KACpC,MAAO,CAAEgE,OAAMuU,IAAK46D,EAAY7jD,QACpC,CAMA+jD,WAAWL,GACPhzE,KAAKgzE,SAAWA,EAChB,MAAMn/D,EAAO7T,KAAKszE,cAAcN,GAIhC,OAHAhzE,KAAK4zE,SAAS//D,EAAKyb,OACnBtvB,KAAKmzE,WAAat/D,EAAK0E,IACvBvY,KAAKgE,KAAO6P,EAAK7P,KACVhE,IACX,CAIA6zE,cACI,OAAO7zE,KAAKgzE,QAChB,CAKAnmB,UACI,OAAO7sD,KAAKgE,IAChB,CAMA8oD,QAAQ9oD,GACJhE,KAAKgE,KAAOA,CAChB,CAKA23C,WACI,OAAO37C,KAAKsvB,KAChB,CAKAskD,SAAStkD,GACLtvB,KAAKsvB,MAAQA,EACbtvB,KAAK05B,SAASh2B,EAAQ1D,KAAKsvB,MAAMxe,aAAarG,OAClD,CAKAqpE,eACI,OAAO9zE,KAAKmzE,UAChB,CAIAY,aAAaC,GACTh0E,KAAKmzE,WAAaa,CACtB,CAKAj+D,OACI,MAAMshB,EAAQr3B,KAAKo4B,aACbxC,EAAMyB,EAAMvhB,eAClB9V,KAAKsW,cACLtW,KAAK8U,WAAW8gB,GAChBA,EAAI8V,UAAU,gBAAiB1rC,KAAK6S,aAAa,OACjD7S,KAAKsvB,MAAM8H,SAASC,GACpBr3B,KAAKsvB,MAAMxY,WAAW8e,GACtB51B,KAAK09C,iBAAiB19C,KAAKsvB,MAAO+H,EAAOr3B,KAAKgE,MAC9ChE,KAAKsvB,MAAM+I,cAAcr4B,KAAK2D,GAC9BiyB,EAAIgW,aACJ5rC,KAAK2V,aAAaigB,EACtB,EChKJ,MAAMq+C,GAA2B,CAC7B,CAAC/xE,GAAQR,UAAW,EACpB,CAACgqE,GAAKhqE,UAAW,EACjB,CAACqqE,GAAarqE,UAAW,EACzB,CAACqxE,GAAcrxE,UAAW,GAExBwyE,GAA2B,CAC7B,CAACnB,GAAcrxE,UAAW,EAC1B,CAACqqE,GAAarqE,UAAW,EACzB,CAACQ,GAAQR,UAAW,EACpB,CAACgqE,GAAKhqE,UAAW,GAErB,MAAMyyE,WAAcpgE,EACLrS,sBACP,OAAOG,EAASsyE,KACpB,CAGWC,4BACP,MAAM3xC,EAAYzU,EAAO0U,mBACzB,OAAOD,EAAUrxB,aAAa,iBAAmBqxB,EAAUrxB,aAAa,sBAC5E,CAEWw2D,0BAEP,OADkB55C,EAAO0U,mBACRtxB,aAAa,sBAClC,CACA3P,YAAYkC,EAAGmF,EAAG2B,EAAO4jB,GACrB9qB,QAEAvD,KAAK0K,OAAS,EACd1K,KAAK2D,EAAIA,EACT3D,KAAK8I,EAAIA,EACT9I,KAAKyK,MAAQA,EACbzK,KAAKurE,WAAY,EACjBvrE,KAAK4yE,QAAUjvE,EAAI,EACnB3D,KAAKq0E,MAAQ1wE,EAAI8G,EACjBzK,KAAKi2C,UAAY,GACjBj2C,KAAKs0E,QAAU,EACft0E,KAAKkuB,KAAO,SACZluB,KAAKu0E,aAAU3wE,EACf5D,KAAK2X,YACL3X,KAAKquB,QAAUhuB,OAAOmX,OAAO,CAAEg9D,mBAAoB,GAAIC,UAAW,EAAGC,WAAY,UAAWC,UAAU,EAAMC,WAAW,EAAMC,yBAA0B7mD,EAAOiD,oBAAqB6jD,qBAAsB,EAAGC,qBAAsB,EAAGC,kBAAmB,EAAGC,qBAAsB,EAAGC,YAAa,IAAM7mD,GACvSruB,KAAKm1E,OAAS,CAAExxE,EAAG3D,KAAK2D,EAAGmF,EAAG9I,KAAK8I,EAAGC,EAAG/I,KAAKyK,MAAOzB,EAAG,GACxDhJ,KAAKo1E,uBAAyB,CAAE7/D,YAAa,OAAQE,UAAW,KAChEzV,KAAKq1E,aAELr1E,KAAK4nC,YAAY,IAAI1lC,GAAQlC,KAAKquB,QAAQsmD,SAAWv3B,GAAYe,OAASf,GAAY2B,OAEtF/+C,KAAKs1E,eAAe,IAAIpzE,GAAQlC,KAAKquB,QAAQumD,UAAYx3B,GAAYe,OAASf,GAAY2B,MAC9F,CAEAw2B,0BAA0BjnE,GACtBtO,KAAKo1E,uBAAyB9mE,CAClC,CAEA0mD,4BACI,OAAO30D,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK6U,YAAa7U,KAAKo1E,uBAClE,CACA3+B,MAAM9E,GACF,OAAO3xC,KAAKquB,QAAQwmD,yBAA2BljC,CACnD,CACA0jC,aACIr1E,KAAKquB,QAAQ6mD,YAAc,GAC3B,IAAK,IAAIxsE,EAAI,EAAGA,EAAI1I,KAAKquB,QAAQomD,UAAW/rE,IACxC1I,KAAKquB,QAAQ6mD,YAAYzgE,KAAK,CAAE+gE,SAAS,IAE7Cx1E,KAAK0K,QAAU1K,KAAKquB,QAAQomD,UAAYz0E,KAAKquB,QAAQymD,sBAAwB90E,KAAKquB,QAAQwmD,yBAC1F70E,KAAKquB,QAAQ4mD,qBAAuBj1E,KAAKquB,QAAQomD,SACrD,CACAgB,cAAc9xE,GAIV,OAHK3D,KAAKurE,WACNvrE,KAAKg7D,SACTh7D,KAAK4yE,QAAUjvE,EACR3D,IACX,CACA68C,gBAGI,OAFK78C,KAAKurE,WACNvrE,KAAKg7D,SACFh7D,KAAK4yE,OAChB,CACA8C,cAGI,OAFK11E,KAAKurE,WACNvrE,KAAKg7D,SACFh7D,KAAKq0E,KAChB,CACA1c,eACI,OAAO33D,KAAK4yE,OAChB,CACAhb,aACI,OAAO53D,KAAKq0E,KAChB,CACAprE,OACI,OAAOjJ,KAAK2D,CAChB,CACAwsC,cACI,OAAOnwC,KAAKquB,QAAQomD,SACxB,CACAkB,YAAY/wE,GAGR,OAFA5E,KAAKquB,QAAQomD,UAAY7vE,EACzB5E,KAAKq1E,aACEr1E,IACX,CACAsJ,KAAKR,GAED,OADA9I,KAAK8I,EAAIA,EACF9I,IACX,CACAkJ,OACI,OAAOlJ,KAAK8I,CAChB,CACAopC,iBACI,OAAOlyC,KAAKwjC,YAAY,GAAKxV,EAAO8C,qBAAuB,CAC/D,CACAovB,uBACI,OAAOlgD,KAAKwjC,YAAYxjC,KAAKmwC,cAAgB,GAAKniB,EAAO8C,qBAAuB,CACpF,CACAznB,KAAK1F,GACD,MAAMmC,EAAQnC,EAAI3D,KAAK2D,EACvB3D,KAAKurE,WAAY,EACjBvrE,KAAK2D,EAAIA,EACT3D,KAAK4yE,SAAW9sE,EAChB9F,KAAKq0E,OAASvuE,EACd,IAAK,IAAI4C,EAAI,EAAGA,EAAI1I,KAAKi2C,UAAUrwC,OAAQ8C,IAAK,CAC5C,MAAMktE,EAAM51E,KAAKi2C,UAAUvtC,GAC3BktE,EAAIvsE,KAAKusE,EAAI3sE,OAASnD,EAC1B,CACA,OAAO9F,IACX,CACA05B,SAASjvB,GAML,OALAzK,KAAKurE,WAAY,EACjBvrE,KAAKyK,MAAQA,EACbzK,KAAKq0E,MAAQr0E,KAAK2D,EAAI8G,EAGfzK,IACX,CACA4vB,WACI,OAAO5vB,KAAKyK,KAChB,CACAoK,WACI,OAAOxU,OAAOmX,OAAO,CAAEnC,UAAWrV,KAAKquB,QAAQqmD,WAAYn/D,YAAavV,KAAKquB,QAAQqmD,WAAYj/D,UAAWuY,EAAO8C,sBAAwBvtB,MAAMsR,WACrJ,CAIAghE,WAAWvB,GAEP,OADAt0E,KAAKs0E,QAAUA,EACRt0E,IACX,CAIA81E,aACI,OAAO91E,KAAKs0E,OAChB,CAOAyB,kBAAkBzjE,EAAQ,GACtB,GAAqB,iBAAVA,EACP,MAAM,IAAInP,EAAa,eAAgB,0BAI3C,GAFKnD,KAAKurE,WACNvrE,KAAKg7D,SACqD,IAA1Dh7D,KAAK0nC,aAAayV,GAAsBsC,OAAO75C,OAC/C,OAAO,EAGX,GAAI5F,KAAKi2C,UAAU3jC,GAAOgoB,gBAAkB6iB,GAAsB5jB,MAC9D,OAAO,EAEX,IAAIq5C,EAAU5yE,KAAK4yE,QAAU5yE,KAAK2D,EAClC,MAAMqyE,EAAah2E,KAAKi2C,UAAU,GAIlC,OAHI+/B,EAAWr2B,YAAcvC,GAAYqB,cAAgBm0B,EAAUoD,EAAWpmD,aAC1EgjD,GAAWoD,EAAWpmD,YAEnBgjD,CACX,CAEAqD,kBAAkBhkE,EAAM8lB,EAAS,GAE7B,OADA/3B,KAAKi2C,UAAUxhC,KAAK,IAAIo5D,GAAW57D,EAAMjS,KAAK2D,EAAGo0B,IAC1C/3B,IACX,CAEAk2E,aAAajkE,EAAMkkE,EAAUrtE,GAEzB,OADA9I,KAAKi2C,UAAUxhC,KAAK,IAAIk9D,GAAM1/D,EAAMkkE,EAAUn2E,KAAK2D,EAAGmF,IAC/C9I,IACX,CAEAo2E,WAAW9G,EAASxmE,EAAGwzD,EAAU,EAAG3uD,EAAU4hE,GAAW,GACrD,MAAM8G,EAAe,IAAIhH,GAAaC,EAAStvE,KAAK2D,EAAI24D,EAASxzD,EAAGymE,GAIpE,OAHI5hE,GACA0oE,EAAaz+D,YAAYjK,GAC7B3N,KAAKi2C,UAAUxhC,KAAK4hE,GACbr2E,IACX,CAEA8vE,SAASD,EAAO/mE,GAEZ,OADA9I,KAAKi2C,UAAUxhC,KAAK,IAAIm7D,GAAWC,EAAO7vE,KAAK2D,EAAGmF,IAC3C9I,IACX,CAEAyxE,QAAQ1sE,EAAM0uB,EAAUpF,EAAU,CAAC,GAE/B,OADAruB,KAAKi2C,UAAUxhC,KAAK,IAAI88D,GAAUxsE,EAAM0uB,EAAUpF,IAC3CruB,IACX,CACAsqC,YACI,OAAOtqC,KAAK0K,MAChB,CACA64B,yBACI,OAAOvjC,KAAKquB,QAAQwmD,wBACxB,CACAj+D,iBACI,OAAO,IAAIhO,EAAY5I,KAAK2D,EAAG3D,KAAK8I,EAAG9I,KAAKyK,MAAOzK,KAAKk1C,aAAel1C,KAAK8I,EAChF,CACAosC,aACI,MAAM7mB,EAAUruB,KAAKquB,QACfsjB,EAAUtjB,EAAQwmD,yBAExB,OADqB70E,KAAKwjC,YAAYnV,EAAQomD,WAAapmD,EAAQ0mD,qBAAuBpjC,CAE9F,CACA+/B,iBACI,OAAO1xE,KAAKwjC,YAAYxjC,KAAKquB,QAAQomD,UACzC,CAGAjxC,YAAYx/B,GACR,MAAMqqB,EAAUruB,KAAKquB,QACfsjB,EAAUtjB,EAAQwmD,yBAClBlF,EAAWthD,EAAQymD,qBAEzB,OADU90E,KAAK8I,EAAI9E,EAAO2tC,EAAUg+B,EAAWh+B,CAEnD,CACA2kC,YAAYxtE,GAGR,MAAMulB,EAAUruB,KAAKquB,QACfsjB,EAAUtjB,EAAQwmD,yBAClBlF,EAAWthD,EAAQymD,qBACzB,OAAQhsE,EAAI9I,KAAK8I,GAAK6oC,EAAUg+B,CACpC,CACA39B,eAAehuC,EAAO,GAClB,OAAOhE,KAAKwjC,aAAax/B,EAAOhE,KAAKquB,QAAQ2mD,kBACjD,CACA/iC,kBAAkBjuC,EAAO,GACrB,OAAOhE,KAAKwjC,YAAYxjC,KAAKquB,QAAQ4mD,qBAAuBjxE,EAChE,CACAopD,YAAYppD,GACR,MAAMqqB,EAAUruB,KAAKquB,QACfsjB,EAAUtjB,EAAQwmD,yBAClBlF,EAAWthD,EAAQymD,qBACzB,OAAO90E,KAAK8I,EAAI6mE,EAAWh+B,EAAU,EAAIA,EAAU3tC,EAAO2tC,CAC9D,CACArZ,gBACI,OAAOt4B,KAAKwjC,YAAY,EAC5B,CAGAoE,YAAYD,EAAUlU,GAOlB,YANiB7vB,IAAb6vB,GACAkU,EAASpN,YAAY9G,GAEzBkU,EAASvQ,SAASp3B,MAClBA,KAAKurE,WAAY,EACjBvrE,KAAKi2C,UAAUxhC,KAAKkzB,GACb3nC,IACX,CACAs1E,eAAe3tC,GAEX,OADA3nC,KAAK4nC,YAAYD,EAAUwV,GAAsBoB,KAC1Cv+C,IACX,CAEAu2E,cAActkE,GAEV,MAAM,OAAEksC,EAAM,aAAEM,EAAY,KAAEM,GAAS3B,GAKvC,OAJInrC,IAASksC,GAAUlsC,IAASwsC,GAAgBxsC,IAAS8sC,IACrD/+C,KAAKi2C,UAAU,GAAGyJ,QAAQztC,GAC1BjS,KAAKurE,WAAY,GAEdvrE,IACX,CACAw2E,cAAcvkE,GAMV,OAJIA,IAASmrC,GAAYqB,eACrBz+C,KAAKi2C,UAAU,GAAGyJ,QAAQztC,GAC1BjS,KAAKurE,WAAY,GAEdvrE,IACX,CACAy2E,QAAQC,EAAUtoE,EAAMihC,EAAY5b,QACf7vB,IAAb6vB,IACAA,EAAW0pB,GAAsBsC,OAEjChsB,IAAa0pB,GAAsBoB,IACnCv+C,KAAKu0E,QAAUmC,EAGf12E,KAAKkuB,KAAOwoD,EAEhB,MAAM38D,EAAQ/Z,KAAK0nC,aAAajU,EAAUi4C,GAAKhqE,UAO/C,OANqB,IAAjBqY,EAAMnU,OACN5F,KAAK22E,QAAQD,EAAUtoE,EAAMihC,EAAY5b,GAGzC1Z,EAAM,GAAG2lC,QAAQg3B,EAAUtoE,EAAMihC,GAE9BrvC,IACX,CACA4tE,UACI,OAAO5tE,KAAKkuB,IAChB,CACA0oD,WAAWF,EAAUtoE,EAAMihC,GAEvB,OADArvC,KAAKy2E,QAAQC,EAAUtoE,EAAMihC,EAAY8N,GAAsBoB,KACxDv+C,IACX,CACA2tE,aACI,OAAO3tE,KAAKu0E,OAChB,CACAsC,gBAAgB9mD,EAASi8C,EAAev4C,QACnB7vB,IAAb6vB,IACAA,EAAW0pB,GAAsBsC,OAErC,MAAMpnC,EAAgBrY,KAAK0nC,aAAajU,EAAUs4C,GAAarqE,UAO/D,OAN6B,IAAzB2W,EAAczS,OACd5F,KAAK82E,gBAAgB/mD,EAASi8C,EAAev4C,GAG7Cpb,EAAc,GAAG8zD,UAAUp8C,EAASi8C,GAEjChsE,IACX,CACA+2E,mBAAmBhnD,EAASi8C,GAExB,OADAhsE,KAAK62E,gBAAgB9mD,EAASi8C,EAAe7uB,GAAsBoB,KAC5Dv+C,IACX,CACAg3E,iBAAiBhE,EAAUC,EAAex/C,QACrB7vB,IAAb6vB,IACAA,EAAW0pB,GAAsBsC,OAErC,MAAMw3B,EAAiBj3E,KAAK0nC,aAAajU,EAAUs/C,GAAcrxE,UAOjE,OAN8B,IAA1Bu1E,EAAerxE,OACf5F,KAAKk3E,iBAAiBlE,EAAUC,EAAex/C,GAG/CwjD,EAAe,GAAG5D,WAAWL,GAE1BhzE,IACX,CACAm3E,oBAAoBnE,EAAUC,GAE1B,OADAjzE,KAAKg3E,iBAAiBhE,EAAUC,EAAe91B,GAAsBoB,KAC9Dv+C,IACX,CAWA82E,gBAAgB/mD,EAASi8C,EAAev4C,GAKpC,YAJiB7vB,IAAb6vB,IACAA,EAAW0pB,GAAsBsC,OAErCz/C,KAAK4nC,YAAY,IAAImkC,GAAah8C,EAASi8C,GAAezxC,YAAY9G,GAAWA,GAC1EzzB,IACX,CAaA22E,QAAQzoD,EAAM9f,EAAMihC,EAAY5b,GAQ5B,YAPiB7vB,IAAb6vB,GAA0BA,IAAa0pB,GAAsBsC,MAC7Dz/C,KAAKkuB,KAAOA,EAEPuF,IAAa0pB,GAAsBoB,MACxCv+C,KAAKu0E,QAAUrmD,GAEnBluB,KAAK4nC,YAAY,IAAI8jC,GAAKx9C,EAAM9f,EAAMihC,GAAa5b,GAC5CzzB,IACX,CACAo3E,WAAWlpD,EAAM9f,EAAMihC,GAEnB,OADArvC,KAAK22E,QAAQzoD,EAAM9f,EAAMihC,EAAY8N,GAAsBoB,KACpDv+C,IACX,CAYAk3E,iBAAiBlE,EAAUC,EAAex/C,GAEtC,OADAzzB,KAAK4nC,YAAY,IAAImrC,GAAcC,EAAUC,GAAgBx/C,GACtDzzB,IACX,CACAq3E,oBAAoBrE,EAAUC,GAE1B,OADAjzE,KAAKk3E,iBAAiBlE,EAAUC,EAAe91B,GAAsBoB,KAC9Dv+C,IACX,CAEAs3E,iBAEI,OADAt3E,KAAK22E,QAAQ,UACN32E,IACX,CAMA0nC,aAAajU,EAAUnyB,GACnB,MAAMi2E,OAA0B3zE,IAAb6vB,EACb+jD,OAA0B5zE,IAAbtC,EACnB,OAAIi2E,GAAcC,EACPx3E,KAAKi2C,UAEPshC,EAEEv3E,KAAKi2C,UAAUqG,QAAQjqB,GAAM/wB,IAAa+wB,EAAEje,gBAE9CojE,EAEEx3E,KAAKi2C,UAAUqG,QAAQjqB,GAAMoB,IAAapB,EAAEiI,gBAI5Ct6B,KAAKi2C,UAAUqG,QAAQjqB,GAAMoB,IAAapB,EAAEiI,eAAiBh5B,IAAa+wB,EAAEje,eAE3F,CAKAqjE,eAAeC,EAAOC,GAClB,IAAK,IAAIjvE,EAAIgvE,EAAM9xE,OAAS,EAAG8C,GAAK,EAAGA,IACnC,IAAK,IAAI+7C,EAAI,EAAGA,EAAI/7C,EAAG+7C,IACnB,GAAIkzB,EAAMD,EAAMjzB,GAAGrwC,eAAiBujE,EAAMD,EAAMjzB,EAAI,GAAGrwC,eAAgB,CACnE,MAAMwjE,EAAOF,EAAMjzB,GACnBizB,EAAMjzB,GAAKizB,EAAMjzB,EAAI,GACrBizB,EAAMjzB,EAAI,GAAKmzB,CACnB,CAGZ,CACA5c,SACI,MAAMgb,EAAah2E,KAAKi2C,UAAU,GAC5B4hC,EAAa73E,KAAKi2C,UAAU,GAC5B6hC,EAAe93E,KAAK0nC,aAAayV,GAAsBsC,OACvDs4B,EAAe/3E,KAAK0nC,aAAayV,GAAsBoB,KAU7D,IAAI9zC,EACAoqC,EACAlN,EAXJ3nC,KAAKy3E,eAAeK,EAAc7D,IAClCj0E,KAAKy3E,eAAeM,EAAc7D,IAC9B4D,EAAalyE,OAAS,GAAKowE,EAAWr2B,YAAcvC,GAAYqB,eAChEq5B,EAAarjE,KAAKqjE,EAAa1hE,OAAO,EAAG,GAAG,IAC5C0hE,EAAa1hE,OAAO,EAAG,EAAG,IAAIlU,GAAQk7C,GAAYe,UAElD45B,EAAa9hE,QAAQ4hE,GAAc,GACnCE,EAAa3hE,OAAO,EAAG,EAAG,IAAIlU,GAAQk7C,GAAY2B,OAKtD,IAAIuuB,EAAS,EACT3pE,EAAI3D,KAAK2D,EACb,IAAK,IAAI+E,EAAI,EAAGA,EAAIovE,EAAalyE,OAAQ8C,IACrCi/B,EAAWmwC,EAAapvE,GACxBmsC,EAAUlN,EAASiW,WAAWl1C,EAAI4kE,GAClC7iE,EAAQk9B,EAAS/X,WACjBjsB,GAAKkxC,EACLlN,EAASt+B,KAAK1F,GACdA,GAAK8G,EACDoqC,EAAUpqC,IAAU,GACpB6iE,IAERttE,KAAK4yE,QAAUjvE,EACfA,EAAI3D,KAAK2D,EAAI3D,KAAKyK,MAClB,MAAMy0C,EAAS,CACX9lB,KAAM,EACNE,MAAO,EACPkmB,aAAc,EACdD,YAAa,GAEjB,IAAIy4B,EAAiB,EACrB,IAAK,IAAItvE,EAAI,EAAGA,EAAIqvE,EAAanyE,OAAQ8C,IAAK,CAC1Ci/B,EAAWowC,EAAarvE,GACxBsvE,EAAiB/1E,EAAU0lC,GAAYj/B,EAAIsvE,EAC3C94B,EAAO5lB,MAAQ,EACf4lB,EAAO9lB,KAAO,EACd8lB,EAAOM,aAAe,EACtBN,EAAOK,YAAc,EACrB,MAAMxB,EAAgBpW,EAASqW,mBAC3BD,GACU,IAANr1C,IACAw2C,EAAO5lB,MAAQykB,EAAcuB,MAAQ,EACrCJ,EAAOM,aAAezB,EAAcyB,cAAgB,GAExDN,EAAO9lB,MAAQ2kB,EAAcsB,MAAQ,EACrCH,EAAOK,YAAcxB,EAAcwB,aAAe,EAC9C72C,IAAMqvE,EAAanyE,OAAS,IAC5Bs5C,EAAOK,YAAc,KAIzBL,EAAOM,aAAe7X,EAASiW,WAAWl1C,EAAIsvE,GACpC,IAANtvE,IACAw2C,EAAO5lB,MAAQqO,EAAS/X,YAElB,IAANlnB,IACAw2C,EAAO9lB,KAAOuO,EAAS/X,aAG/BjsB,GAAKu7C,EAAOM,aACZ77C,GAAKu7C,EAAO5lB,MACZqO,EAASt+B,KAAK1F,GACdA,GAAKu7C,EAAO9lB,KACZz1B,GAAKu7C,EAAOK,WAChB,CACAv/C,KAAKq0E,MAAgC,IAAxB0D,EAAanyE,OAAe5F,KAAK2D,EAAI3D,KAAKyK,MAAQ9G,EAC/D3D,KAAKurE,WAAY,CACrB,CAIAx1D,OACI,MAAM6f,EAAM51B,KAAK8V,eACjB9V,KAAKsW,cACLtW,KAAK8U,aACL8gB,EAAI8V,UAAU,QAAS1rC,KAAK6S,aAAa,OACpC7S,KAAKurE,WACNvrE,KAAKg7D,SACT,MAAMyZ,EAAYz0E,KAAKquB,QAAQomD,UACzBhqE,EAAQzK,KAAKyK,MACb9G,EAAI3D,KAAK2D,EACf,IAAImF,EAEJ,IAAK,IAAI9E,EAAO,EAAGA,EAAOywE,EAAWzwE,IACjC8E,EAAI9I,KAAKwjC,YAAYx/B,GACjBhE,KAAKquB,QAAQ6mD,YAAYlxE,GAAMwxE,UAC/B5/C,EAAIQ,YACJR,EAAIS,OAAO1yB,EAAGmF,GACd8sB,EAAIU,OAAO3yB,EAAI8G,EAAO3B,GACtB8sB,EAAIhH,UAGZgH,EAAIgW,aACJ5rC,KAAK2V,eAEL,IAAK,IAAIjN,EAAI,EAAGA,EAAI1I,KAAKi2C,UAAUrwC,OAAQ8C,IAAK,CAC5C,MAAMi/B,EAAW3nC,KAAKi2C,UAAUvtC,GAEH,mBAAlBi/B,EAAS5xB,OAChB4xB,EAAS7yB,WAAW8gB,GACpB+R,EAAS5xB,KAAK/V,KAAMA,KAAK+1E,kBAAkBrtE,IAC3Ci/B,EAAShyB,aAAaigB,GAE9B,CAEA,GAAI51B,KAAKs0E,QAAU,EAAG,CAClB1+C,EAAI5gB,OACJ4gB,EAAI7e,QAAQ/W,KAAKiX,UACjB,MAAM0Y,EAAYiG,EAAI2sB,YAAY,GAAKviD,KAAKs0E,SAAS7pE,MACrD3B,EAAI9I,KAAKgyC,eAAe,GAAK,EAC7Bpc,EAAIyc,SAAS,GAAKryC,KAAKs0E,QAASt0E,KAAK2D,EAAIgsB,EAAY,EAAG7mB,GACxD8sB,EAAIhgB,SACR,CACA,OAAO5V,IACX,CACAovE,sBACI,OAAOpvE,KAAKquB,QAAQmmD,kBACxB,CAKAyD,oBACI,OAAOj4E,KAAKquB,QAAQ6mD,WACxB,CAQAgD,iBAAiBC,EAAajD,GAC1B,GAAIiD,GAAen4E,KAAKquB,QAAQomD,WAAa0D,EAAc,EACvD,MAAM,IAAIh1E,EAAa,mBAAoB,iFAE/C,QAA4BS,IAAxBsxE,EAAYM,QACZ,MAAM,IAAIryE,EAAa,mBAAoB,oEAE/C,GAAmC,kBAAxB+xE,EAAYM,QACnB,MAAM,IAAIryE,EAAa,mBAAoB,4EAG/C,OADAnD,KAAKquB,QAAQ6mD,YAAYiD,GAAejD,EACjCl1E,IACX,CAUAo4E,kBAAkBC,GACd,GAAIA,EAAoBzyE,SAAW5F,KAAKquB,QAAQomD,UAC5C,MAAM,IAAItxE,EAAa,mBAAoB,2FAK/C,IAAK,MAAM+xE,KAAemD,EAE0Bz0E,MAA5Cy0E,EAAoBnD,GAAaM,UACjC6C,EAAoBnD,GAAel1E,KAAKquB,QAAQ6mD,YAAYA,IAEhEl1E,KAAKquB,QAAQ6mD,YAAYA,GAAe70E,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKquB,QAAQ6mD,YAAYA,IAAemD,EAAoBnD,IAGxI,OADAl1E,KAAKquB,QAAQ6mD,YAAcmD,EACpBr4E,IACX,CACAuF,0BAA0B+yE,GACtB,MAAMC,EAAwBj3E,IAC1B,IAAIk3E,EAAY,EAEhBF,EAAO1jE,SAASyiB,IACZ,MAAM4e,EAAY5e,EAAMqQ,aAAayV,GAAsBsC,MAAOn+C,GAE9D20C,EAAUrwC,OAAS,GAAKqwC,EAAU,GAAGhtC,OAASuvE,IAC9CA,EAAYviC,EAAU,GAAGhtC,OAAM,IAEvC,IAAIwvE,EAAU,EACdH,EAAO1jE,SAASyiB,IACZohD,EAAU,EACQphD,EAAMqQ,aAAayV,GAAsBsC,MAAOn+C,GAExDsT,SAAS+yB,IACX6wC,EAAY7wC,EAAS1+B,OAASwvE,IAC9BA,EAAUD,EAAY7wC,EAAS1+B,OAAM,IAE7C,MAAMyvE,EAAerhD,EAAMqQ,aAAayV,GAAsBsC,OAC9D,IAAIk5B,GAAU,EAEdD,EAAa9jE,SAAS+yB,IACdA,EAASvzB,gBAAkB9S,IAC3Bq3E,GAAU,GACVA,GAAWF,EAAU,GACrB9wC,EAASt+B,KAAKs+B,EAAS1+B,OAASwvE,EAAQ,IAGhDphD,EAAMo+C,cAAcp+C,EAAMwlB,gBAAkB47B,EAAQ,GACtD,EAGNH,EAAO1jE,SAASyiB,IACPA,EAAMk0C,WACPl0C,EAAM2jC,QAAQ,IAGtBud,EAAqB12E,EAAS6pE,MAE9B6M,EAAqB12E,EAASkqE,cAE9BwM,EAAqB12E,EAASkxE,eAC9B,IAAI6F,EAAO,EAEXN,EAAO1jE,SAASyiB,IACRA,EAAMwlB,gBAAkB+7B,IACxBA,EAAOvhD,EAAMwlB,gBAAe,IAEpCy7B,EAAO1jE,SAASyiB,IACZA,EAAMo+C,cAAcmD,EAAK,IAE7BA,EAAO,EAEPN,EAAO1jE,SAASyiB,IACMA,EAAMqQ,aAAayV,GAAsBsC,MAAO59C,EAASK,SACjE0S,SAAS+yB,IACXA,EAASgY,WAAavC,GAAYqB,cAC9B9W,EAAS1+B,OAAS2vE,IAClBA,EAAOjxC,EAAS1+B,OAAM,GAChC,IAENqvE,EAAO1jE,SAASyiB,IACMA,EAAMqQ,aAAayV,GAAsBsC,MAAO59C,EAASK,SACjE0S,SAAS+yB,IACXA,EAASgY,WAAavC,GAAYqB,cAClC9W,EAASt+B,KAAKuvE,EAAK,GACzB,GAEV,ECjtBJ,SAASC,GAAmBjjD,EAAK3jB,EAAM6mE,EAAM/tC,EAAMkV,GAC/C,GAAIhuC,IAAS8mE,GAAe9mE,KAAK+mE,kBAAoB/mE,IAAS8mE,GAAe9mE,KAAKgnE,kBAC9E,MAAM,IAAI91E,EAAa,mBAAoB,uDAE/C,IAAIqxB,EAAU,EACV0kD,EAAgB,IAEhBjnE,IAAS8mE,GAAe9mE,KAAKgnE,oBAC7BzkD,GAAW,EACX0kD,EAAgB,GAGpBtjD,EAAIuqB,SAAS24B,EAAOtkD,EAASuW,EAAM,EAAGkV,EAAOlV,GAE7CnV,EAAIuqB,SAAS24B,EARW,EAQa/tC,EAAMmuC,EAAej5B,EAAOlV,EACrE,CDosBAopC,GAAMh9D,UAAY,CACd3I,OAAQd,EAAKe,WACbL,KAAM,EACNC,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUmC,QCtsBrB,MAAMqqE,WAAuBhlE,EACdrS,sBACP,OAAOG,EAASk3E,cACpB,CACAt3E,YAAY03E,EAAWC,GACnB71E,QACAvD,KAAKg/C,UAAYhxB,EAAO8C,qBACxB9wB,KAAKyK,MAAQ,EACbzK,KAAKm5E,UAAYA,EACjBn5E,KAAKo5E,aAAeA,EACpBp5E,KAAKiS,KAAO8mE,GAAe9mE,KAAKosC,OAChCr+C,KAAK2X,YAGL3X,KAAKw0B,QAAU,EACfx0B,KAAKq5E,MAAQ,EACjB,CAKA35B,QAAQztC,GACJ,MAAMqnE,EAA0B,iBAATrnE,EAAoB8mE,GAAe96B,WAAWhsC,GAAQA,EAK7E,OAHI5R,OAAOmsC,OAAOusC,GAAe9mE,MAAM6B,SAASwlE,KAC5Ct5E,KAAKiS,KAAOqnE,GAETt5E,IACX,CAKA2/C,UACI,OAAO3/C,KAAKiS,IAChB,CAEAw/D,QAAQ1sE,EAAMspB,EAAU,CAAC,GAKrB,OAJAruB,KAAKq5E,MAAM5kE,KAAK,CACZ8kE,QAASx0E,EACTspB,QAAShuB,OAAOmX,OAAO,CAAEg4D,QAAS,EAAGjgD,QAAS,GAAKlB,KAEhDruB,IACX,CACAu3B,UAAU/C,GACN,GAAuB,iBAAZA,EACP,MAAM,IAAIrxB,EAAa,cAAe,4BAG1C,OADAnD,KAAKw0B,QAAUA,EACRx0B,IACX,CACAs3B,YACI,OAAOt3B,KAAKw0B,OAChB,CAEAze,OACI,MAAM6f,EAAM51B,KAAK8V,eACjB9V,KAAKsW,cACL,IAAIy0B,EAAO/qC,KAAKm5E,UAAU31C,YAAY,GAClCyc,EAAOjgD,KAAKo5E,aAAa51C,YAAYxjC,KAAKo5E,aAAajpC,cAAgB,GAAKnwC,KAAKg/C,UACjFv0C,EAAQzK,KAAKyK,MACbquE,EAAO94E,KAAKm5E,UAAUlwE,QACIjJ,KAAKiS,OAAS8mE,GAAe9mE,KAAKunE,cAC5Dx5E,KAAKiS,OAAS8mE,GAAe9mE,KAAKgnE,mBAClCj5E,KAAKiS,OAAS8mE,GAAe9mE,KAAKwnE,eAElCX,EAAO94E,KAAKm5E,UAAUlwE,OAASjJ,KAAKm5E,UAAUvpD,YAElD,IAAI8pD,EAAoBz5B,EAAOlV,EAC/B,OAAQ/qC,KAAKiS,MACT,KAAK8mE,GAAe9mE,KAAKksC,OAGzB,KAAK46B,GAAe9mE,KAAK0nE,YAGzB,KAAKZ,GAAe9mE,KAAKunE,aACrB/uE,EAAQ,EACR,MACJ,KAAKsuE,GAAe9mE,KAAKosC,OACrBy6B,GAAQ94E,KAAKyK,MAAQ,EACrBsgC,GAAQ/qC,KAAKg/C,UACb06B,GAAqB,GACrB,MACJ,KAAKX,GAAe9mE,KAAK2nE,MAAO,CAC5BnvE,EAAQ,GAER,MAAMP,EAAKlK,KAAKm5E,UAAUlwE,OAAS,EAAIjJ,KAAKw0B,QACtCpqB,EAAK2gC,EACL8uC,EAAK3vE,EACL4vE,EAAK75B,EACL51C,EAAKH,EAAKO,EACVH,EAAKF,EAAKsvE,EAAoB,EAC9BK,EAAO1vE,EAAK,GAAMI,EAClBuvE,EAAO5vE,EAAK,GAAMsvE,EAClBO,EAAO/vE,EAAK,IAAMO,EAClByvE,EAAO5vE,EAAK,KAAQovE,EACpBS,EAAOF,EACPG,EAAO9vE,EAAK,KAAQovE,EACpBW,EAAON,EACPO,EAAOR,EAAK,GAAMJ,EAClBa,EAAOlwE,EAAKI,EACZ+vE,EAAOF,EACPG,EAAOvwE,EAAK,GAAMO,EAClBiwE,EAAOpwE,EAAK,KAAQovE,EACpBiB,EAAOF,EACPG,EAAOtwE,EAAK,KAAQovE,EACpBmB,EAAON,EACPO,EAAOd,EACbpkD,EAAIQ,YACJR,EAAIS,OAAOnsB,EAAIE,GACfwrB,EAAIY,cAAcujD,EAAMC,EAAMC,EAAMC,EAAM7vE,EAAIC,GAC9CsrB,EAAIY,cAAc2jD,EAAMC,EAAMC,EAAMC,EAAMT,EAAIC,GAC9ClkD,EAAIY,cAAc+jD,EAAMC,EAAMC,EAAMC,EAAMrwE,EAAIC,GAC9CsrB,EAAIY,cAAcmkD,EAAMC,EAAMC,EAAMC,EAAM5wE,EAAIE,GAC9CwrB,EAAIa,OACJb,EAAIhH,SACJ,KACJ,CACA,KAAKmqD,GAAe9mE,KAAK8oE,QACrBhwC,GAAQ,EACRkV,GAAQ,EACRy5B,EAAoBz5B,EAAOlV,EAC3Btb,EAAMk+B,YAAY/3B,EAAKkjD,EAAO,EAAG/tC,EAAM,GAAI,cAC3Ctb,EAAMk+B,YAAY/3B,EAAKkjD,EAAO,EAAG74B,EAAM,GAAI,iBAC3C64B,GAAQ94E,KAAKyK,MAAQ,EACrB,MACJ,KAAKsuE,GAAe9mE,KAAK+mE,iBACrBH,GAAmBjjD,EAAK51B,KAAKiS,KAAM6mE,EAAO94E,KAAKw0B,QAASuW,EAAMkV,EAAOjgD,KAAKg/C,WAC1E,MACJ,KAAK+5B,GAAe9mE,KAAKgnE,kBACrBJ,GAAmBjjD,EAAK51B,KAAKiS,KAAM6mE,EAAM/tC,EAAMkV,EAAOjgD,KAAKg/C,WAC3D,MACJ,KAAK+5B,GAAe9mE,KAAKwnE,YACrBhvE,EAAQ,EACRivE,GAAqB15E,KAAKg/C,UAC1B,MACJ,KAAK+5B,GAAe9mE,KAAK8sC,KACrB,MACJ,QACI,MAAM,IAAI57C,EAAa,cAAe,qCAAqCnD,KAAKiS,qBAEpFjS,KAAKiS,OAAS8mE,GAAe9mE,KAAK2nE,OAClC55E,KAAKiS,OAAS8mE,GAAe9mE,KAAK+mE,kBAClCh5E,KAAKiS,OAAS8mE,GAAe9mE,KAAKgnE,mBAClCj5E,KAAKiS,OAAS8mE,GAAe9mE,KAAK8sC,MAClCnpB,EAAIuqB,SAAS24B,EAAM/tC,EAAMtgC,EAAOivE,GAGhC15E,KAAKiS,OAAS8mE,GAAe9mE,KAAKwnE,aAClC7jD,EAAIuqB,SAAS24B,EAAO,EAAG/tC,EAAMtgC,EAAOivE,GAExC9jD,EAAI5gB,OACJ4gB,EAAIlgB,aAAa,GACjBkgB,EAAI7e,QAAQ/W,KAAKiX,UAEjB,IAAK,IAAIvO,EAAI,EAAGA,EAAI1I,KAAKq5E,MAAMzzE,OAAQ8C,IAAK,CACxC,MAAM3D,EAAO/E,KAAKq5E,MAAM3wE,GAClB6oC,EAAa3b,EAAI2sB,YAAY,GAAKx9C,EAAKw0E,SAAS9uE,MAChD9G,EAAI3D,KAAKm5E,UAAUlwE,OAASsoC,EAAa,GAAKxsC,EAAKspB,QAAQmhD,QAC3D1mE,GAAK9I,KAAKm5E,UAAU31C,YAAY,GAAKxjC,KAAKo5E,aAAa1H,kBAAoB,EAAI3sE,EAAKspB,QAAQkB,QAClGqG,EAAIyc,SAAS,GAAKttC,EAAKw0E,QAAS51E,EAAGmF,EAAI,EAC3C,CACA8sB,EAAIhgB,SACR,ECtHJ,SAASolE,GAA4BhrD,EAAOirD,EAAcC,EAAeh0E,GAErE,IAAIi0E,EAAeF,EAEnB,IAAK,IAAIG,EAAYF,EAAgB,EAAGE,EAAYprD,EAAMpqB,OAAQw1E,IAAa,CAC3E,MAAMxhD,EAAO5J,EAAMorD,GACnB,GAAI34E,EAAOm3B,KAAUA,EAAKuN,WAAavN,EAAK8M,oBAAqB,CAC7Dy0C,EAAevhD,EAAK8hB,iBACpB,KACJ,CACJ,CAEA,GAAIx0C,GAAW+zE,IAAiBE,EAAc,CAG1CA,EAAe32E,EAFHS,KAAK8E,IAAIkxE,EAAcE,GACvBl2E,KAAK4lC,IAAIowC,EAAcE,GAEvC,CACA,OAAOA,CACX,CDsGApC,GAAe5hE,UAAY,CACvB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUmC,QAOrBqqE,GAAe9mE,KAAO,CAClBunE,aAAc,EACdG,YAAa,EACbx7B,OAAQ,EACRE,OAAQ,EACRu7B,MAAO,EACPmB,QAAS,EACT/B,iBAAkB,EAClBC,kBAAmB,EACnBQ,YAAa,EACb16B,KAAM,GAeVg6B,GAAe96B,WAAa,CACxBo9B,YAAatC,GAAe9mE,KAAKunE,aACjC8B,WAAYvC,GAAe9mE,KAAK0nE,YAChCz7B,OAAQ66B,GAAe9mE,KAAKksC,OAC5BC,OAAQ26B,GAAe9mE,KAAKosC,OAC5Bk9B,MAAOxC,GAAe9mE,KAAK2nE,MAC3B4B,QAASzC,GAAe9mE,KAAK8oE,QAC7BU,eAAgB1C,GAAe9mE,KAAK+mE,iBACpC0C,gBAAiB3C,GAAe9mE,KAAKgnE,kBACrC0C,WAAY5C,GAAe9mE,KAAKwnE,YAChC36B,KAAMi6B,GAAe9mE,KAAK8sC,MCnI9B,MAAM+b,GAKFv1D,oBAAoByqB,EAAOrsB,EAAI,GAAG,eAAEi4E,EAAiB,IAAO,CAAC,GACzD5rD,EAAM3qB,QAAO,CAACw2E,EAAajiD,KACvBA,EAAKse,qBAAqB,IAAImzB,IAC9B,MAAM7N,GAAO,IAAI7B,IAAc1B,YAAYrgC,GAAM2e,YAC3C/nC,EAAUgtD,EAAK1sD,aAErB,OADA0sD,EAAKn0D,KAAKwyE,EAAcrrE,EAAQgsD,aACzBqf,EAAcre,EAAK5tC,WAAapf,EAAQisD,aAAemf,CAAc,GAC7Ej4E,EACP,CAEA4B,qBAAqBqwB,EAAK2W,EAAWrU,EAAM9tB,EAAIE,EAAI+jB,GAE/C,MAAM1qB,EAAIu0B,GADV7J,EAAUhuB,OAAOmX,OAAO,CAAEskE,aAAc9tD,EAAO0U,mBAAmBtxB,aAAa,kBAAoBid,IAC1EytD,aACnBC,EAAcxvC,EAAUwvC,YAQ9BnmD,EAAI5gB,OACJ4gB,EAAI7e,QAAQrJ,EAAKe,WAAY,GAC7BstE,EAAYC,KAAKpnE,SAASqnE,IAT1B,IAAgB/xE,EAAIG,EAAIorC,EAARvrC,EAULvG,EAAIs4E,EAAI/xE,GAVCG,EAUG1G,EAAIs4E,EAAI5xE,GAVPorC,EAUW,wBAT/B7f,EAAIQ,YACJR,EAAIpgB,eAAeigC,GACnB7f,EAAItgB,aAAamgC,GACjB7f,EAAIlgB,aAAa,GACjBkgB,EAAIuqB,SAASj2C,EAAIE,EAAInF,KAAK8E,IAAIM,EAAKH,EAAI,GAAII,EAAKF,GAMhDwrB,EAAItgB,aAAa,SACjBsgB,EAAIyc,SAASptC,KAAK8vB,MAAMknD,EAAI5xE,GAAK4xE,EAAI/xE,IAAIjC,WAAYtE,EAAIs4E,EAAI/xE,GAAII,EAAK,GAAG,IAE7EsrB,EAAItgB,aAAa,OACjBsgB,EAAIyc,SAAS,UAAU9F,EAAU2vC,WAAa,GAAGC,QAAQ,cAAc5vC,EAAUzG,YAAc,GAAGq2C,QAAQ,WAAWJ,EAAYK,MAAMD,QAAQ,KAAMx4E,EAAI,GAAI2G,EAAK,IAClKsrB,EAAIhgB,SACR,CAgBArQ,qBAAqBqwB,EAAKyB,EAAOrH,EAAO5B,GACpC,IAAIC,EAAU,CACVguD,WAAW,EACXC,aAAa,GAEK,iBAAXluD,EACPC,EAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG6W,GAAUD,GAE7B,kBAAXA,IACZC,EAAQguD,UAAYjuD,GAGxB,MAAMmY,EAAQ,IAAIwxB,GAAM/pC,EAAO6E,SAASmmC,QAAQjB,GAAMC,KAAKsB,MAAMY,aAAalqC,GAExE6qC,EAAQxsC,EAAQguD,UAAYlhB,GAAKohB,iBAAiBh2C,GAAS,GASjE,OAPA,IAAIu0B,IACCC,WAAW,CAACx0B,IACZi2C,cAAc,CAACj2C,GAAQlP,EAAO,CAAEilD,YAAajuD,EAAQiuD,YAAajlD,UAEvEkP,EAAMnP,SAASC,GAAOthB,KAAK6f,EAAKyB,GAChCwjC,EAAMjmD,SAASqnC,GAASA,EAAKnlC,WAAW8e,GAAK7f,SAEtCwwB,EAAM3vB,gBACjB,CAcArR,wBAAwBqwB,EAAK6mD,EAAUplD,EAAOqlD,EAAU1sD,EAAO2sD,EAAUvuD,GACrE,IAAI+8C,EAAO,CACPkR,UAAWM,EACXL,aAAa,GAEK,iBAAXluD,EACP+8C,EAAO9qE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG2zD,GAAO/8C,GAEvB,kBAAXA,IACZ+8C,EAAKkR,UAAYjuD,GAGrB,MAAMwuD,EAAY,IAAI7kB,GAAM/pC,EAAO6E,SAASmmC,QAAQjB,GAAMC,KAAKsB,MAAMY,aAAalqC,GAE5E6sD,EAAW,IAAI9kB,GAAM/pC,EAAO6E,SAASmmC,QAAQjB,GAAMC,KAAKsB,MAAMY,aAAawiB,GAE3E7hB,EAAQsQ,EAAKkR,UAAYlhB,GAAKohB,iBAAiBK,GAAa,IAElE,IAAI9hB,IACCC,WAAW,CAAC6hB,IACZ7hB,WAAW,CAAC8hB,IACZL,cAAc,CAACI,EAAWC,GAAWxlD,EAAO,CAAEilD,YAAanR,EAAKmR,cAErEM,EAAU7mE,KAAK6f,EAAKyB,GACpBwlD,EAAS9mE,KAAK6f,EAAK6mD,GACnB5hB,EAAMjmD,SAASqnC,GAASA,EAAKnlC,WAAW8e,GAAK7f,SAE7C,IAAIgjE,GAAe1hD,EAAOolD,GAAU3lE,WAAW8e,GAAK7f,MACxD,CAOAxQ,yBAAyByhC,EAAW81C,EAAeC,GAC/C/1C,EAAUpyB,SAAQ,CAACooE,EAAc1qE,KAC7B,GAAIzP,EAAYm6E,IAAiBA,EAAa71C,SAAU,CACpD,GAAI61C,EAAazlC,cAAgBwlC,EAC7B,OAGJ,MAAMtpD,EAAWupD,EAAattC,gBAAgBjc,SAAS/E,cACvD,GAAiB,QAAb+E,GAAmC,QAAbA,EACtB,OAEJ,GAAIqpD,GAAiBE,EAAahhC,UAAW,CAEzC,MAAM7Y,EAAQ65C,EAAa55C,cAAc,GACzC,GAAc,IAAV9wB,EACA6wB,EAAMn/B,KAAOg3E,GAA4Bh0C,EAAW7D,EAAMn/B,KAAMsO,GAAO,QAEtE,GAAIA,EAAQ,GAAKA,EAAQ00B,EAAUphC,OAAQ,CAE5C,MAAMq3E,EAAej2C,EAAU10B,EAAQ,GACvC,GAAIzP,EAAYo6E,GACZ,GAAIA,EAAa91C,SACbhE,EAAMn/B,KAAOi5E,EAAa75C,cAAc,GAAGp/B,SAE1C,CACD,MAAMwuD,EAAWyqB,EAAavhC,iBAE9BvY,EAAMn/B,KAAOg3E,GAA4Bh0C,EAAWwrB,EAAUlgD,GAAO,EACzE,CAER,CACA0qE,EAAa1tB,WAAW,EAAGnsB,EAAMn/B,KACrC,CACJ,IAER,CACAvC,YAAY4sB,GACRruB,KAAKk9E,iBAAmB78E,OAAOmX,OAAO,CAAE2lE,eAAe,EAAO3kB,cAAexqC,EAAO2C,eAAgBysD,cAAe,GAAK/uD,GACxHruB,KAAKq9E,aAAe,EACpBr9E,KAAKk8E,UAAY,EACjBl8E,KAAK8lC,WAAa,EAClB9lC,KAAKs9E,cAAgB,CAAC,EAEtBt9E,KAAKu9E,cAAgB,EAErBv9E,KAAKw9E,kBAAmB,EAExBx9E,KAAKy9E,aAAe,CAChBlqE,IAAK,CAAC,EACNmqE,MAAO,GACPC,KAAM,GACNxlB,qBAAsB,GAE1Bn4D,KAAK49E,iBAAmB,GAGxB59E,KAAK+7E,YAAc,CACfK,MAAO,EACPJ,KAAM,IAEVh8E,KAAKomC,OAAS,GACdpmC,KAAK69E,YAAc,EACvB,CAOAC,WAAW13C,EAAQ02C,GACf,IAAK12C,IAAWA,EAAOxgC,OACnB,MAAM,IAAIzC,EAAa,cAAe,6BAE1CijC,EAAOxxB,SAAS2xB,GAAUu0B,GAAUijB,kBAAkBx3C,EAAME,eAAgBq2C,IAChF,CAqBAkB,0BAA0B53C,GACtB,MAAM63C,EAAmBjwD,EAAO0U,mBAAmBtxB,aAAa,8BAGhE,IAAI8sE,EAAoB,EACpBC,EAAO,EACPC,EAAO,EACX,MAAMl/B,EAAS,GACT/mC,EAAY,GAElB,GAAInY,KAAKw9E,iBACL,OAAOx9E,KAAKu9E,cAEhB,IAAKn3C,EACD,MAAM,IAAIjjC,EAAa,cAAe,sDAE1CnD,KAAKq+E,mBAAmBj4C,GAExB,MAAQu3C,KAAMW,EAAa/qE,IAAKgrE,GAAev+E,KAAKy9E,aACpDz9E,KAAKu9E,cAAgB,EAGrBe,EAAY1pE,SAAS4oD,IACjB,MAAMzoD,EAAUwpE,EAAW/gB,GAC3BzoD,EAAQwjC,YAGJxjC,EAAQ0xB,eAAe7gC,OAASwgC,EAAOxgC,SACvCs4E,GAAqB,GAGzBnpE,EAAQ0xB,eAAe7xB,SAASlP,IAC5By4E,GAAQz4E,EAAEoL,aAAarG,MACvB2zE,GAAQ14E,EAAEkhC,WAAWxlC,QACrB89C,EAAOzqC,KAAK/O,EAAEoL,aAAarG,OAC3B0N,EAAU1D,KAAK/O,EAAEkhC,WAAWxlC,QAAQ,IAExC,MAAMqJ,EAAQsK,EAAQ6a,WACtB5vB,KAAKu9E,eAAiB9yE,CAAK,IAE/BzK,KAAKw9E,kBAAmB,EAExB,MAAMgB,EAAOL,EAAO,EAAIA,EAAOj/B,EAAOt5C,OAAS,EAAIs5C,EAAOt5C,OACpD64E,EAAOt5E,EAAS+5C,EAAO3rC,KAAKmrE,GAAOz5E,KAAK+G,IAAI0yE,EAAKF,EAAM,MACvDG,EAAQ15E,KAAK+G,IAAIyyE,EAAOv/B,EAAOt5C,OAAQ,IAAO44E,EAC9CI,EAAOR,EAAOjmE,EAAUvS,OACxBi5E,EAAO15E,EAASgT,EAAU5E,KAAKmrE,GAAOz5E,KAAK+G,IAAI0yE,EAAKE,EAAM,MAC1DE,EAAQ75E,KAAK+G,IAAI6yE,EAAO1mE,EAAUvS,OAAQ,IAAOg5E,EAEjDG,EAAS95E,KAAK8E,IAAI+0E,EAAOH,GAASL,EAAY14E,OAASq4E,EACvDe,EAAef,EAAmBC,EACxC,OAAOl+E,KAAKu9E,cAAgBt4E,KAAK8E,IAAIi1E,EAAcD,EACvD,CAKA9jB,mBACI,IAAKj7D,KAAKw9E,iBACN,MAAM,IAAIr6E,EAAa,kBAAmB,qFAE9C,OAAOnD,KAAKu9E,aAChB,CAEAh4E,+BAA+B6gC,GAC3B,IAAKA,IAAWA,EAAOxgC,OACnB,MAAM,IAAIzC,EAAa,cAAe,uBAE1C,MAAMs1D,EAAaryB,EAAO,GAAGuyB,gBAU7B,OAT6BvyB,EAAO/gC,QAAO,CAACw2E,EAAat1C,KACrD,IAAKA,EAAMoyB,gBAAgB1xD,OAAOwxD,GAC9B,MAAM,IAAIt1D,EAAa,eAAgB,yDAE3C,GAAIojC,EAAMwyB,YAAchB,GAAMC,KAAKK,SAAW9xB,EAAMgzB,aAChD,MAAM,IAAIp2D,EAAa,kBAAmB,qCAE9C,OAAO8B,KAAK8E,IAAI8xE,EAAav2E,EAASO,IAAIg2E,EAAat1C,EAAM0yB,2BAA2B,GACzF,EAEP,CAEAgmB,uBAAuB74C,GACnB,GAAqB,GAAjBA,EAAOxgC,OACP,OACJ,MAAMuyD,EAAuB2C,GAAU7B,wBAAwB7yB,GAEzD84C,EAAmB,IAAI3mD,IACvBsjC,EAAW,GAGjBz1B,EAAOxxB,SAAS2xB,IAGZ,MAAM+xB,EAAY,IAAIhzD,EAAS,EAAG6yD,GAClC5xB,EAAME,eAAe7xB,SAASukD,IAC1B,MAAMgmB,EAAe7mB,EAAUtyD,UAC/B,IAAIo5E,EAAwBF,EAAiB1+E,IAAI24D,EAASp+B,YAM1D,GAJKqkD,IACDF,EAAiBh5E,IAAIizD,EAASp+B,WAAY,CAAC,GAC3CqkD,EAAwBF,EAAiB1+E,IAAI24D,EAASp+B,eAEpDqkD,EAAwBA,EAAsBD,QAAgBv7E,GAAY,CAC5E,MAAMy7E,EAAa,IAAIhU,GACvBxP,EAASpnD,KAAK4qE,GAEdD,EAAsBD,GAAgBE,CAC1C,CAGAlmB,EAASjhB,qBAAqBknC,EAAsBD,IACpD7mB,EAAU/xD,IAAI4yD,EAASvyB,WAAW,GACpC,IAEN5mC,KAAK49E,iBAAiBnpE,KAAK,CACvBlB,IAAK2rE,EACLxB,MAAO7hB,EACP1D,wBAER,CAKAkmB,mBAAmBj4C,GACf,MACMy1B,EAnbd,SAAwBz1B,EAAQk5C,EAAaC,GACzC,GAAqB,GAAjBn5C,EAAOxgC,OACP,MAAO,CACH2N,IAAK,CAAC,EACNmqE,MAAO,GACPC,KAAM,GACNxlB,qBAAsB,GAG9B,MAAM+mB,EAAmB,CAAC,EACpBM,EAAW,GACX3jB,EAAW,GACX1D,EAAuB2C,GAAU7B,wBAAwB7yB,GAsB/D,OAnBAA,EAAOxxB,SAAQ,CAAC2xB,EAAO42B,KAGnB,MAAM7E,EAAY,IAAIhzD,EAAS,EAAG6yD,GAClC5xB,EAAME,eAAe7xB,SAASukD,IAC1B,MAAMgmB,EAAe7mB,EAAUtyD,UAE/B,IAAKk5E,EAAiBC,GAAe,CACjC,MAAME,EAAaC,EAAY,CAAEvjB,OAAQojB,IACzCtjB,EAASpnD,KAAK4qE,GACdH,EAAiBC,GAAgBE,EAEjCG,EAAS/qE,KAAK0qE,EAClB,CAEAI,EAAapmB,EAAU+lB,EAAiBC,GAAehiB,GACvD7E,EAAU/xD,IAAI4yD,EAASvyB,WAAW,GACpC,IAEC,CACHrzB,IAAK2rE,EACLxB,MAAO7hB,EACP8hB,KAAM6B,EAAS57C,MAAK,CAACn/B,EAAGC,IAAMD,EAAIC,IAClCyzD,uBAER,CA2YyBsnB,CAAer5C,GAASo3B,GAAS,IAAI7B,GAAY6B,KADvD,CAACrE,EAAUpkD,EAASooD,IAAepoD,EAAQklD,YAAYd,EAAUgE,KAE5En9D,KAAKy9E,aAAe5hB,EACpB,MAAM6jB,EAAe1/E,KAAKy9E,aAAaC,MAIvC,OAHAgC,EAAa9qE,SAASG,IAClBA,EAAQ+mD,UAAY4jB,CAAY,IAE7B7jB,CACX,CAKA8jB,kBACI,OAAO3/E,KAAKy9E,YAChB,CAOAllC,UAAU8kC,EAAe,EAAGuC,EAAkBC,EAAaxoD,GAEvD,MAAMwkC,EAAW77D,KAAKy9E,aACtB,IAAK5hB,EACD,MAAM,IAAI14D,EAAa,iBAAkB,mCAE7C,MAAQw6E,KAAMW,EAAa/qE,IAAKgrE,GAAe1iB,EAE/C77D,KAAK69E,YAAc,GAGfgC,GAAexoD,GACfwoD,EAAYjrE,SAAS2xB,GAAUA,EAAMnP,SAASC,GAAOkhB,cAIzD,IAAI50C,EAAI,EACJmC,EAAQ,EACZ9F,KAAKu9E,cAAgB,EACrB,IAAI9kB,EAAa,EAEjB6lB,EAAY1pE,SAAS4oD,IACjB,MAAMzoD,EAAUwpE,EAAW/gB,GAG3BzoD,EAAQwjC,YACR,MAAM9tC,EAAQsK,EAAQ6a,WACtB5vB,KAAKu9E,eAAiB9yE,EACtB,MAAMwxD,EAAWlnD,EAAQ+nD,cAAc17D,QACvCq3D,GAAcwD,EACd,MAAMzrD,EAAUuE,EAAQjE,aACxBnN,EAAIA,EAAImC,EAAQ0K,EAAQgsD,YACxBznD,EAAQ1L,KAAK1F,GAEbmC,EAAQ2E,EAAQ+F,EAAQgsD,WAAW,IAGvC,MAAM,cAAE2gB,EAAa,cAAE3kB,EAAa,cAAE4kB,GAAkBp9E,KAAKk9E,iBAEvDvjB,EAAex0D,EAASm5E,EAAY/qE,KAD7BiqD,GAASv4D,KAAK+G,IAAIwsD,EAAgB+lB,EAAW/gB,GAAMV,cAAc17D,QAAUq3D,MAKxF,GAHAz4D,KAAKu9E,cAAgB55E,EAAImC,EACzB9F,KAAKw9E,kBAAmB,EAEpBH,GAAgB,EAChB,OAAOr9E,KAAK8/E,WAGhB,MAAMC,EAAexB,EAAWD,EAAY,IACtCtY,EAAcuY,EAAWD,EAAYA,EAAY14E,OAAS,IAGhE,SAASo6E,EAAwBC,GA8D7B,OA7DkB3B,EAAY/qE,KAAI,CAACiqD,EAAM90D,KACrC,MAAMqM,EAAUwpE,EAAW/gB,GACrBp3B,EAASrxB,EAAQqoD,sBACvB,IAAI8iB,EACJ,GAAIx3E,EAAI,EAAG,CACP,MAAMy3E,EAAc5B,EAAWD,EAAY51E,EAAI,IAI/C,IAAK,IAAI+7C,EAAI/7C,EAAI,EAAG+7C,GAAK,EAAGA,IAAK,CAC7B,MACM27B,EADW7B,EAAWD,EAAY75B,IACZ2Y,sBAEtBijB,EAAiB,GAMvB,GALAhgF,OAAOiT,KAAK8yB,GAAQxxB,SAASmlD,IACrBqmB,EAAWrmB,IACXsmB,EAAe5rE,KAAKslD,EACxB,IAEAsmB,EAAez6E,OAAS,EAAG,CAE3B,IAAIq2D,EAAW,EACXqkB,EAAqB9sB,IACrB+sB,EAAmB,EAqBvB,GApBAF,EAAezrE,SAASmlD,IACpB,MAAM3pC,EAAQgwD,EAAWrmB,GAAGnzB,WAAWxlC,QACnCgvB,EAAQ6rC,IACRikB,EAAeE,EAAWrmB,GAC1BkC,EAAW7rC,GAGf,MAAMowD,EAAep6C,EAAO2zB,GACtB0mB,EAAiBD,EAAav3E,QAC/Bu3E,EAAa1vE,aAAamqB,UAAYulD,EAAa1vE,aAAamoC,qBAC/DynC,EAAcN,EAAWrmB,GAAGjpD,aAC5B6vE,EAAkBP,EAAWrmB,GAAG9wD,OAASy3E,EAAYrnC,OAASqnC,EAAYxlD,WAAawlD,EAAYnnC,qBAEzG+mC,EAAqBr7E,KAAK4lC,IAAIy1C,EAAoBG,EAAiBE,EAAgB,IAIvFL,EAAqBr7E,KAAK4lC,IAAIy1C,EAAoBvrE,EAAQ9L,QAAUk3E,EAAYl3E,OAAgC,IAAvBg3E,IAGrF9C,EAAe,CACf,MAAMz3E,EAAI+yD,EACV8nB,EAAoBt7E,KAAK+G,IAAIwsD,EAAgByD,EAAWv2D,GAAMi0D,EAAgBsmB,CAClF,WACiC,IAAjBC,IACZK,EAAmBL,EAAa7oC,WAAWwiB,QAAQoC,GAAYgkB,GAEnE,MAAO,CACHM,mBACAD,qBACAM,aAAcV,EAEtB,CACJ,CACJ,CACA,MAAO,CAAEK,iBAAkB,EAAGM,eAAgB,EAAGP,mBAAoB,EAAG,GAGhF,CACA,SAASQ,EAAsBC,GAE3B,MAAMC,EAAUf,EAAuB,EACvC,IAAIgB,EAAa,EAsBjB,OArBA3C,EAAY1pE,SAAQ,CAAC4oD,EAAMlrD,KACvB,MAAMyC,EAAUwpE,EAAW/gB,GAC3B,GAAIlrD,EAAQ,EAAG,CACX,MAAM4uE,EAAWnsE,EAAQ9L,OACnBk4E,EAAQJ,EAAezuE,GACvB8uE,EAAU19E,EAAQy9E,EAAMP,cAAc33E,OAASk4E,EAAMZ,kBAAoBW,EAAWD,GAC1F,IAAII,EAAkB,EAClBD,EAAU,EACVH,GAAcG,EAETA,EAAU,IACfC,EAAkBp8E,KAAK4lC,IAAIs2C,EAAMb,mBAAoBr7E,KAAK+C,IAAIo5E,IAC9DH,IAAeI,GAEnBtsE,EAAQ1L,KAAK63E,EAAWD,EAC5B,CAEAlsE,EAAQsoD,4BAA4BzoD,SAASukD,IACzCA,EAASjiB,gBAAgB8pC,EAAUjsE,EAAQ9L,OAAO,GACpD,IAEC+8D,EAAY/8D,OAAS82E,EAAa92E,MAC7C,CACA,MAAMg3E,EAAuB5C,EACzBrX,EAAYl1D,aAAauoC,OACzB2sB,EAAYl1D,aAAa2rD,aACzBsjB,EAAajvE,aAAa0rD,YACxB/5B,EAAYzU,EAAO0U,mBACnB4+C,EAAmB7+C,EAAUrxB,aAAa,uBAC1CmwE,EAAmB9+C,EAAUrxB,aAAa,uBAC1Cu2D,EAAcllC,EAAUrxB,aAAa,iBAC3C,IAAIowE,EAAcvB,EAClB,MAAMwB,EAAYzB,EAAwBwB,GAC1C,IAAIE,EAAcZ,EAAsBW,GAExC,GAA2B,IAAvBnD,EAAY14E,OACZ,OAAO,EACX,MASM+7E,EATkB,EAACH,EAAaC,KAClC,IAAIG,EAASJ,EAAc,EAC3B,GAAIC,EAAU77E,OAAS,EACnB,IAAK,IAAIi8E,EAAK,EAAGA,EAAKJ,EAAU77E,SAAUi8E,EACtCD,EAAS38E,KAAK4lC,IAAI42C,EAAUI,GAAItB,iBAAmB,EAAGqB,GAG9D,OAAOA,CAAM,EAEGE,CAAgBN,EAAaC,GAI3CM,EAAkBC,IACpB,IAAIC,EAAsB,EAC1B,MAAMC,EAAelc,GAAeA,EAAYhJ,iBAChD,GAAIklB,EAAc,CACd,MAAM37C,EAAQ27C,EAAa7qC,WAG3B,GAAI9Q,EAAMqyB,eAAex3D,QAAUmlC,EAAMoyB,gBAAgBv3D,QACrD,OAA0B,EAAnBmgF,EAAuBI,EAAcA,EAAcJ,EAE9D,MAAMY,EAAYD,EAAatyD,WAC/BqyD,EACI17C,EAAMszB,QAAQmM,EAAYlJ,cAAc17D,SAAW4gF,GAAkBG,EAAYxa,EACzF,CACA,OAA0B,EAAnB4Z,EAAuBU,EAAsBA,EAAsBV,CAAgB,EAE9F,IAAIa,EAAaL,EAAeP,GAC5Ba,EAAaD,GAAcb,EAAmBD,GAClD,MAAM1I,EAAOqH,EAAuBoC,EACpC,IAAI7rC,EAAa4mC,EAGjB,KAAQsE,EAAc9I,GAAQpiC,EAAa,GAAOkrC,EAAcU,EAAaxJ,GAAQpiC,EAAa,GAC9FgrC,GAAeE,EAAc9I,EAC7BwJ,EAAaL,EAAeP,GAC5Ba,EAAaD,GAAcb,EAAmBD,GAC9CI,EAAcZ,EAAsBd,EAAwBwB,IAC5DhrC,IAGJ,OADAx2C,KAAKq9E,aAAeA,EACbr9E,KAAK8/E,UAChB,CAEAA,WACI,MAAMjkB,EAAW77D,KAAKy9E,aAChBJ,EAAer9E,KAAKq9E,aAG1Br9E,KAAK+7E,YAAc,CAAEK,MAAO,EAAGJ,KAAM,IACrCngB,EAAS8hB,KAAK/oE,SAAQ,CAAC4oD,EAAMlrD,KACzB,GAAc,IAAVA,EACA,OACJ,MAAMgwE,EAAWzmB,EAAS8hB,KAAKrrE,EAAQ,GACjC6tE,EAActkB,EAAStoD,IAAI+uE,GAC3BvtE,EAAU8mD,EAAStoD,IAAIiqD,GACvB+kB,EAAcpC,EAAYrvE,aAC1B0xE,EAAcztE,EAAQjE,aAEtB6vE,EAAkBR,EAAYl3E,OAASs5E,EAAYlpC,OAASkpC,EAAY9lB,aAExEgkB,EAAiB1rE,EAAQ9L,OAASu5E,EAAYhmB,YAC9Cyf,EAAMwE,EAAiBE,EAC7B3gF,KAAK+7E,YAAYK,OAASH,EAC1Bj8E,KAAK+7E,YAAYC,KAAKvnE,KAAK,CAAEvK,GAAIy2E,EAAiBt2E,GAAIo2E,IAEtD1rE,EAAQgiC,sBAAsBR,QAAQnd,KAAO6iD,EAC7CkE,EAAYppC,sBAAsBR,QAAQjd,MAAQ2iD,CAAG,IAIzDj8E,KAAKs9E,cAAgB,CAAC,EACtB,MAAMA,EAAgBt9E,KAAKs9E,cAW3Bt9E,KAAKomC,OAAOxxB,SAAS2xB,IACjBA,EAAME,eAAe7xB,SAAQ,CAACglB,EAAMlxB,EAAGsnB,KACnC,MAAMzB,EAAWqL,EAAKgN,WAAWl/B,QAAQvB,WAAW8B,WAC9CuI,EAAUopB,EAAK9oB,aACfwlC,EAAmB1c,EAAKmd,sBACxB0rC,EAAe7oD,EAAK3wB,OAASuH,EAAQ6oC,OAAS7oC,EAAQ0qB,WAAa1qB,EAAQ+oC,qBACjF,IAAI9C,EAAQ,EACZ,GAAI/tC,EAAIsnB,EAAMpqB,OAAS,EAAG,CACtB,MAAM88E,EAAY1yD,EAAMtnB,EAAI,GACtBi6E,EAAeD,EAAU5xE,aAE/B2lC,EADsBisC,EAAUz5E,OAAS05E,EAAa1nD,UAAY0nD,EAAa1pC,oBACvDwpC,EACxBnsC,EAAiBG,MAAMC,KAAOgsC,EAAUz5E,OAAS2wB,EAAK3wB,OACtDy5E,EAAU3rC,sBAAsBR,QAAQnd,KAAOqd,CACnD,MAEIA,EAAQ4mC,EAAeoF,EACvBnsC,EAAiBG,MAAMC,KAAO2mC,EAAezjD,EAAK3wB,OAEtDqtC,EAAiBC,QAAQjd,MAAQmd,EA7BzC,SAAqBloB,EAAUkoB,GAC3B,MAAMmsC,EAAQtF,EAAc/uD,QACd3qB,IAAVg/E,EACAtF,EAAc/uD,GAAY,CAAEooB,KAAMF,EAAOosC,MAAO,IAGhDD,EAAMC,OAAS,EACfD,EAAMjsC,MAAQisC,EAAMjsC,KAAOF,GAAS,EAE5C,CAqBQqsC,CAAYv0D,EAAU+nB,EAAiBG,MAAMC,KAAK,GACpD,IAIN,IAAIqsC,EAAiB,EAcrB,OAbA/iF,KAAKomC,OAAOxxB,SAAS2xB,IACjBA,EAAME,eAAe7xB,SAASglB,IAC1B,MAAMrL,EAAWqL,EAAKgN,WAAWl/B,QAAQvB,WAAW8B,WAC9CuI,EAAUopB,EAAKmd,sBACrBvmC,EAAQimC,MAAME,KAAO2mC,EAAc/uD,GAAUooB,KAC7CnmC,EAAQ+d,SAAWA,EACnB/d,EAAQgmC,YAAc,EACtBhmC,EAAQimC,MAAMG,UAAYpmC,EAAQimC,MAAMC,KAAOlmC,EAAQimC,MAAME,KAC7DosC,GAAkB99E,KAAK+G,IAAIwE,EAAQimC,MAAMG,UAAW,EAAE,GACxD,IAEN52C,KAAKk8E,UAAYj3E,KAAKmH,KAAK22E,GAC3B/iF,KAAK69E,YAAYppE,KAAKzU,KAAKk8E,WACpBl8E,KAAKk8E,SAChB,CASA8G,KAAK30D,GACD,IAAIxgB,EACJ,MAAMguD,EAAW77D,KAAKy9E,aACtB,IAAK5hB,EACD,OAAO,EAEX,MAAMonB,EAAmF,QAA1Ep1E,EAAKwgB,aAAyC,EAASA,EAAQ40D,aAA0B,IAAPp1E,EAAgBA,EAAK,GAYtH,IAAI/H,EAAQ,EAsBZ,OArBA9F,KAAK8lC,WAAa,EAClB+1B,EAAS8hB,KAAK/oE,SAAQ,CAAC4oD,EAAMlrD,EAAOqrE,KAChC,MAAM5oE,EAAU8mD,EAAStoD,IAAIiqD,GACvB2iB,EAAc7tE,EAAQ,EAAIupD,EAAStoD,IAAIoqE,EAAKrrE,EAAQ,SAAM1O,EAC1D07D,EAAchtD,EAAQqrE,EAAK/3E,OAAS,EAAIi2D,EAAStoD,IAAIoqE,EAAKrrE,EAAQ,SAAM1O,GAdlF,SAAcs/E,EAASp9E,EAAO4/C,EAAMx4C,GAChCg2E,EAAQ75E,KAAK65E,EAAQj6E,OAASnD,GAC9Bo9E,EAAQnsC,sBAAsBR,QAAQnd,MAAQtzB,EAC9Co9E,EAAQnsC,sBAAsBR,QAAQjd,OAASxzB,EAC3C4/C,IACAA,EAAK3O,sBAAsBR,QAAQjd,OAASxzB,GAC5CoH,IACAA,EAAK6pC,sBAAsBR,QAAQnd,MAAQtzB,EACnD,CAOI2D,CAAKsL,EAASjP,EAAOq6E,EAAa7gB,GAClC,MAAM6jB,GAAQh+E,EAAS4P,EAAQ0xB,eAAelzB,KAAK7N,GAAMA,EAAEqxC,sBAAsBN,MAAMG,aACnFusC,EAAO,EACPr9E,GAASb,KAAK4lC,IAAI91B,EAAQgiC,sBAAsBR,QAAQjd,MAAOr0B,KAAK+C,IAAIm7E,IAEnEA,EAAO,IAERr9E,EADAw5D,EACQr6D,KAAK4lC,IAAIy0B,EAAYvoB,sBAAsBR,QAAQjd,MAAOr0B,KAAK+C,IAAIm7E,IAGnE,GAGhBr9E,GAASm9E,EACTjjF,KAAK8lC,YAAchgC,CAAK,IAErB9F,KAAK8/E,UAChB,CAMArnC,aAOI,OANAz4C,KAAK49E,iBAAiBhpE,SAASgpE,IAC3BA,EAAiBF,MAAM9oE,SAASujC,GAAOA,EAAGM,cAAa,IAE3Dz4C,KAAKy9E,aAAaE,KAAK/oE,SAAS4oD,IAC5Bx9D,KAAKy9E,aAAalqE,IAAIiqD,GAAM/kB,YAAY,IAErCz4C,IACX,CAKA+6D,WAAW30B,GAGP,OAFApmC,KAAKi/E,uBAAuB74C,GAC5BpmC,KAAKw9E,kBAAmB,EACjBx9E,IACX,CAWAg7D,OAAO50B,EAAQi3C,EAAchvD,GACzB,MAAM88C,EAAO9qE,OAAOmX,OAAO,CAAE8kE,aAAa,GAASjuD,GACnDruB,KAAKomC,OAASA,EACd,MAAMoyB,EAAgBx4D,KAAKk9E,iBAAiB1kB,cAU5C,OATIA,GACAx4D,KAAKomC,OAAOxxB,SAASmlD,GAAMA,EAAEN,iBAAiBjB,KAElDx4D,KAAK89E,WAAW13C,EAAQ+kC,EAAKmR,aAC7Bt8E,KAAKq+E,mBAAmBj4C,GACxBpmC,KAAKu4C,UAAU8kC,EAAclS,EAAKp2D,QAASqxB,EAAQ+kC,EAAK9zC,OAEpD8zC,EAAK9zC,OACLr3B,KAAKy4C,aACFz4C,IACX,CAEAw8E,cAAcp2C,EAAQ/O,EAAO+rD,GACzB,MAAM/0D,EAAUhuB,OAAOmX,OAAO,CAAEzC,QAASsiB,EAAMxgB,cAAgBusE,GAEzD/F,EAAehmD,EAAMq+C,cAAgBr+C,EAAMwlB,gBAAkBs3B,GAAMC,eAEzE,OAhyBR,YAAcrwE,GACN+2D,GAAUv4B,OACV1+B,EAAI,qBAAsBE,EAClC,CA4xBQ,CAAE,+BAAgCs5E,GAC3Br9E,KAAKg7D,OAAO50B,EAAQi3C,EAAchvD,EAC7C,CACAyM,eAAe0iC,GACX,IAAI3vD,EACJ,OAAoC,QAA5BA,EAAK7N,KAAKy9E,oBAAiC,IAAP5vE,OAAgB,EAASA,EAAG0F,IAAIiqD,EAChF,EC7yBG,IAAI6lB,GDgzBXvoB,GAAUv4B,OAAQ,EC/yBlB,SAAW8gD,GACPA,EAAeA,EAAuB,QAAK,GAAK,SAChDA,EAAeA,EAAoB,IAAI,GAAK,KAC/C,CAHD,CAGGA,KAAmBA,GAAiB,CAAC,IACjC,MAAMC,WAAevvE,EACbrS,sBACP,OAAOG,EAASyhF,MACpB,CACWC,0BACP,OAAOF,GAAe/yC,GAC1B,CACWkzC,6BACP,OAAOH,GAAe1yC,MAC1B,CACW8yC,4BACP,OAAO,EACX,CACWjzE,qBACP,MAAMkzE,EAAgB11D,EAAO0U,mBAAmB5xB,aAAa0mC,OAC7D,IAAKksC,EACD,MAAM,IAAIvgF,EAAa,aAAc,kBACzC,OAAOugF,CACX,CACAjiF,YAAYuuB,EAAO3B,EAAU,CAAC,GAI1B,GAHA9qB,QACAvD,KAAK2jF,iBAAmB,GACxB3jF,KAAK4jF,aAAe,IACf5zD,IAAUA,EAAMpqB,OACjB,MAAM,IAAIzC,EAAa,eAAgB,iCAE3CnD,KAAKquB,QAAUA,EACfruB,KAAKgwB,MAAQA,EACbhwB,KAAK6jF,UAAsCjgF,MAA1B5D,KAAKquB,QAAQw1D,UAAyB7jF,KAAKquB,QAAQw1D,UAAY7zD,EAAMpqB,OAGlF5F,KAAKquB,QAAQy1D,gBACb9jF,KAAK+jF,kCAET/jF,KAAKgkF,eAAiBhkF,KAAKquB,QAAQ21D,gBAAkBhkF,KAAKquB,QAAQy1D,gBAAkB,EACtDlgF,MAA1B5D,KAAKquB,QAAQ41D,UACbjkF,KAAKikF,UAAYjkF,KAAKquB,QAAQ41D,UAG9BjkF,KAAKikF,UAAYj0D,EAAMk3B,MAAMttB,IAAUA,EAAKuiB,YAEhDn8C,KAAKkkF,QACuBtgF,MAAxB5D,KAAKquB,QAAQ61D,QAAuBlkF,KAAKquB,QAAQ61D,QAAUj/E,KAAK+C,IAAIhI,KAAKgkF,eAAiBhkF,KAAK6jF,WAAa,EAChH7jF,KAAKm0B,MAAsC,EAA7BnG,EAAOyC,oBAA2B,EAChDzwB,KAAK81B,MAAQ,GACb91B,KAAK61B,MAAQ,IACb71B,KAAKyK,MAAQ,IACbzK,KAAKmkF,kBAAkBnkF,KAAKquB,QAAQ+1D,UAAYd,GAAOC,cACvDzoB,GAAUijB,kBAAkB/tD,GAAO,GAAM,GACzChwB,KAAKqkF,gBACLrkF,KAAKskF,QACT,CACAA,SACI,IAAK,IAAI57E,EAAI,EAAGA,EAAI1I,KAAKgwB,MAAMpqB,OAAQ8C,IAAK,CAC3B1I,KAAKgwB,MAAMtnB,GACnBuvC,UAAUj4C,KACnB,CACJ,CACAukF,SACI,IAAK,IAAI77E,EAAI,EAAGA,EAAI1I,KAAKgwB,MAAMpqB,OAAQ8C,IAAK,CAC3B1I,KAAKgwB,MAAMtnB,GACnBgvC,YAAY13C,KACrB,CACJ,CAIAwkF,aAAaP,GAET,OADAjkF,KAAKikF,YAAcA,EACZjkF,IACX,CAIAykF,WAAWP,GAEP,OADAlkF,KAAKkkF,UAAYA,EACVlkF,IACX,CAIAmkF,kBAAkBC,GAOd,OANIA,IAAad,GAAOC,cAAgBa,IAAad,GAAOE,kBAExDp/E,QAAQC,KAAK,4BAA4B+/E,kCACzCA,EAAWd,GAAOC,cAEtBvjF,KAAKokF,SAAWA,EACTpkF,IACX,CACA03D,WACI,OAAO13D,KAAKgwB,KAChB,CACA6nB,eACI,OAAO73C,KAAK6jF,SAChB,CACAE,kCAEI3/E,QAAQC,KAAK,kGAAmG,4GAA6G,kDACjO,CACAqgF,mBAEI,OADA1kF,KAAK+jF,kCACE/jF,KAAK83C,kBAChB,CACA6sC,iBAAiBC,GAEb,OADA5kF,KAAK+jF,kCACE/jF,KAAK6kF,iBAAiBD,EACjC,CACA9sC,mBACI,OAAO93C,KAAKgkF,cAChB,CACAa,iBAAiB70D,GACbhwB,KAAKukF,SACLvkF,KAAKgkF,eAAiBh0D,EACtBhwB,KAAKqkF,gBACLrkF,KAAKskF,QACT,CACAD,gBACIrkF,KAAK2jF,iBAAmB,GACxB,IAAI/+E,EAAI5E,KAAK6jF,UACb,KAAOj/E,GAAK,GACR5E,KAAK2jF,iBAAiBmB,QAAQ,IAAIr1D,EAAM,UAAa7qB,EAAI,GAAK5E,KAAKm0B,QACnEvvB,EAAIC,UAAUD,EAAI,IAAIqD,WAAY,IAItC,IAFAjI,KAAK4jF,aAAe,GACpBh/E,EAAI5E,KAAKgkF,eACFp/E,GAAK,GACR5E,KAAK4jF,aAAakB,QAAQ,IAAIr1D,EAAM,UAAa7qB,EAAI,GAAK5E,KAAKm0B,QAC/DvvB,EAAIC,UAAUD,EAAI,IAAIqD,WAAY,GAE1C,CAIA88E,uBACI,MAAMX,EAAWpkF,KAAKokF,SAChBxtB,EAAa52D,KAAKgwB,MAAM,GAC9B,IAAIg1D,EAAiBC,EAAaruB,EAAYwtB,GAC1Cc,EAAiBD,EAAaruB,EAAYwtB,GAG9C,SAASa,EAAarrD,EAAMwqD,GACxB,OAAOxqD,EAAK6d,iBAAiB6E,QAAQ9E,GAAWA,EAAO4sC,WAAaA,IAAUx+E,MAClF,CAMA,OALA5F,KAAKgwB,MAAMpb,SAASglB,IAChB,MAAMurD,EAAcF,EAAarrD,EAAMwqD,GACvCY,EAAiBG,EAAcH,EAAiBG,EAAcH,EAC9DE,EAAiBC,EAAcD,EAAiBC,EAAcD,CAAc,IAEzEF,EAAiBE,CAC5B,CAEAE,eAGI,MAAMC,EAAyBrlF,KAAK+kF,uBAAyBzB,GAAOG,gBAAkBzjF,KAAKokF,SAErF75C,EAAWvqC,KAAKquB,QAAQkc,UAAY,EAGpCqsB,EAAa52D,KAAKgwB,MAAM,GAC9B,IAAI8F,EACJ,GAAI91B,KAAKokF,WAAad,GAAOC,aAAc,CACvCztD,EAAQ8gC,EAAWx+B,aAAaoL,YAAY,GAAK8/C,GAAO9yE,QAAQ80E,kBAEhE,IAAK,IAAI58E,EAAI,EAAGA,EAAI1I,KAAKgwB,MAAMpqB,SAAU8C,EAAG,CACxC,MAAMkxB,EAAO55B,KAAKgwB,MAAMtnB,GACxB,IAAI68E,EAAW,EACf,MAAMptC,EAAKve,EAAKM,qBACZie,IACAotC,EAAWtgF,KAAK8E,IAAIw7E,EAAUptC,EAAGwE,WAAWjM,gBAEhD,MAAM80C,EAAO5rD,EAAKoY,eAAeuzC,GAAYjC,GAAO9yE,QAAQi1E,eAC5D,GAAI7rD,EAAKiW,WAAajW,EAAKuN,SAAU,CACjC,MAAM0qC,EAAQj4C,EAAKkW,qBAAuBjH,GAAKC,GACzClP,EAAKwY,iBAAiBrH,KAAOu4C,GAAO9yE,QAAQk1E,WAC5C9rD,EAAKwY,iBAAiBpH,MAAQs4C,GAAO9yE,QAAQi1E,eACnD3vD,EAAQ7wB,KAAK4lC,IAAIgnC,EAAO/7C,GACpByvD,EAAW,IACXzvD,EAAQ7wB,KAAK4lC,IAAI26C,EAAM1vD,GAE/B,CACJ,CACJ,KACK,CACD,IAAI6vD,EAAYrC,GAAO9yE,QAAQsiE,WAE/B9yE,KAAKgwB,MAAMpb,SAASgxE,IAChB,MAAMztC,EAAKytC,EAAG1rD,qBACVie,IACAwtC,EAAY1gF,KAAK8E,IAAI47E,EAAWxtC,EAAGwE,WAAWnjB,UAAY,GAC9D,IAEJ1D,EAAQ8gC,EAAWx+B,aAAaoL,YAAYmiD,GAAarC,GAAO9yE,QAAQi1E,eACxE,IAAK,IAAI/8E,EAAI,EAAGA,EAAI1I,KAAKgwB,MAAMpqB,SAAU8C,EACrC,GAAI1I,KAAKgwB,MAAMtnB,GAAGmnC,WAAa7vC,KAAKgwB,MAAMtnB,GAAGy+B,SAAU,CACnD,MAAM0+C,EAAW7lF,KAAKgwB,MAAMtnB,GAAGonC,qBAAuBjH,GAAKC,GACrD9oC,KAAKgwB,MAAMtnB,GAAG0pC,iBAAiBpH,MAAQs4C,GAAO9yE,QAAQi1E,eACtDzlF,KAAKgwB,MAAMtnB,GAAG0pC,iBAAiBrH,KAAOu4C,GAAO9yE,QAAQk1E,WACvDG,EAAW/vD,IACXA,EAAQ+vD,EAEhB,CAER,CACA,OAAO/vD,EAAQuvD,EAAyB96C,CAC5C,CACAx0B,OACI,MAAM6f,EAAM51B,KAAK8V,eACjB9V,KAAKsW,cAEL,MAAMsgD,EAAa52D,KAAKgwB,MAAM,GACxBk6B,EAAYlqD,KAAKgwB,MAAMhwB,KAAKgwB,MAAMpqB,OAAS,GAC5C5F,KAAKikF,WAKNjkF,KAAK61B,MAAQ+gC,EAAW5Z,cAAgB,EACxCh9C,KAAKyK,MAAQy/C,EAAUpN,eAAiB98C,KAAK61B,MAAQ,IALrD71B,KAAK61B,MAAQ+gC,EAAWnlB,WACxBzxC,KAAKyK,MAAQy/C,EAAUzY,WAAazxC,KAAK61B,OAO7C71B,KAAK81B,MAAQ91B,KAAKolF,eAClB,MAAMU,EAAgB,CAACr7E,EAAO6kB,IAAU7kB,EAAQ/G,EAAQ4rB,EAAMxe,aAAarG,OAE3E,IAAIA,EAAQzK,KAAK2jF,iBAAiBt+E,OAAOygF,EAAe,GACpD9lF,KAAKkkF,UACLz5E,EAAQzK,KAAK4jF,aAAav+E,OAAOygF,EAAer7E,GAChDA,GAAsB,IAAbzK,KAAKm0B,OAElB,MACM4xD,EADoB/lF,KAAK61B,MAAQ71B,KAAKyK,MAAQ,EACPA,EAAQ,EAErD,GAAIzK,KAAKikF,UAAW,CAChB,MAAMhjC,EAAajhD,KAAKyK,MAAQ,EAAIA,EAAQ,EAAI,EAE5Cw2C,EAAa,IACbrrB,EAAIuqB,SAASngD,KAAK61B,MAAO71B,KAAK81B,MAAOmrB,EAAY,GACjDrrB,EAAIuqB,SAASngD,KAAK61B,MAAQ71B,KAAKyK,MAAQ,EAAIA,EAAQ,EAAI,EAAGzK,KAAK81B,MAAOmrB,EAAY,GAClFrrB,EAAIuqB,SAASngD,KAAK61B,MAAO71B,KAAK81B,OAAS91B,KAAKokF,WAAad,GAAOE,gBAAkB,EAAI,GAAI,EAAmB,GAAhBxjF,KAAKokF,UAClGxuD,EAAIuqB,SAASngD,KAAK61B,MAAQ71B,KAAKyK,MAAOzK,KAAK81B,OAAS91B,KAAKokF,WAAad,GAAOE,gBAAkB,EAAI,GAAI,EAAmB,GAAhBxjF,KAAKokF,UAEvH,CAEA,MAAM4B,EAASh4D,EAAO0U,mBAAmBtxB,aAAa,gBAAiB,GACvE,IAAI26C,EAAW,EAMf,GALA/rD,KAAK2jF,iBAAiB/uE,SAAS0a,IAC3BA,EAAM2I,OAAOrC,EAAKmwD,EAAmBh6B,EAAU/rD,KAAK81B,MAAQ91B,KAAKm0B,MAAQ,EAAI,EAAI6xD,GACjFj6B,GAAYroD,EAAQ4rB,EAAMxe,aAAarG,MAAM,IAG7CzK,KAAKkkF,QAAS,CACd,MAAM+B,EAAUF,EAAmBh6B,EAAwB,IAAb/rD,KAAKm0B,MAC7C+xD,EAA4B,IAAblmF,KAAKm0B,MAC1ByB,EAAIQ,YACJR,EAAI8f,IAAIuwC,EAASjmF,KAAK81B,MAAqB,IAAb91B,KAAKm0B,MAAc+xD,EAAc,EAAa,EAAVjhF,KAAKC,IAAQ,GAC/E0wB,EAAI+f,YACJ/f,EAAIa,OACJb,EAAIQ,YACJR,EAAI8f,IAAIuwC,EAASjmF,KAAK81B,MAAqB,IAAb91B,KAAKm0B,MAAc+xD,EAAc,EAAa,EAAVjhF,KAAKC,IAAQ,GAC/E0wB,EAAI+f,YACJ/f,EAAIa,OACJs1B,GAAyB,IAAb/rD,KAAKm0B,MACjBn0B,KAAK4jF,aAAahvE,SAAS0a,IACvBA,EAAM2I,OAAOrC,EAAKmwD,EAAmBh6B,EAAU/rD,KAAK81B,MAAQ91B,KAAKm0B,MAAQ,EAAI,EAAI6xD,GACjFj6B,GAAYroD,EAAQ4rB,EAAMxe,aAAarG,MAAM,GAErD,CACJ,EC3TJ,SAAS07E,GAAuBn2D,GAC5B,IAAIo2D,EAAU,EAQd,OAPAp2D,EAAMpb,SAASglB,IACPA,EAAK6gB,UACL7gB,EAAK6gB,SAAS7lC,SAASyxE,IACnBD,GAAWC,EAAQriF,KAAO,CAAC,GAEnC,IAEAoiF,GAAW,EACJv9C,GAAKE,KAETF,GAAKC,EAChB,CAQO,MAAMw9C,GAAY,IACZC,GAAa,IACbC,GAAY,IAElB,MAAMrrB,WAAapnD,EACXrS,sBACP,OAAOG,EAASs5D,IACpB,CAEArrB,mBACI,OAAO9vC,KAAK2pC,cAChB,CAMApkC,4BAA4BkhF,GACnBA,GAAyB,MAAbA,IACbA,EAAW,OAEf,MAkBMhrB,EAlBW,CACb,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,OAAQ,CAAC,QACT,OAAQ,CAAC,QACT,OAAQ,CAAC,QACT,OAAQ,CAAC,SAEWgrB,GACxB,QAAe7iF,IAAX63D,EAiBA,OAAOA,EAAOloD,KAAKmoD,IAAU,IAAIp2D,GAAWkD,MAAMkzD,KAjB5B,CAGtB,MAAMgrB,EAAY7hF,SAAS4hF,EAAS99E,MAAM,KAAK,GAAI,IAC7Cg+E,EAAY9hF,SAAS4hF,EAAS99E,MAAM,KAAK,GAAI,IAEnD,GADoB+9E,EAAY,GAAM,EAElC,MAAO,CAAC,IAAIphF,EAAS,EAAGqhF,IAEvB,GAAIA,EAAY,EACjB,MAAO,CAAC,IAAIrhF,EAAS,EAAGqhF,IAEvB,GAAIA,GAAa,EAClB,MAAO,CAAC,IAAIrhF,EAAS,EAAGqhF,GAEhC,CAIA,MAAO,CAAC,IAAIrhF,EAAS,EAAG,GAC5B,CAQAC,wBAAwBghC,EAAOoD,EAAgB8xB,GAC3C,OAAON,GAAKyrB,cAAcrgD,EAAME,eAAgB,CAAEg1B,SAAQ9xB,kBAC9D,CA0BApkC,qBAAqByqB,EAAO62D,EAAS,CAAC,GAC7BA,EAAOprB,QAAWorB,EAAOprB,OAAO71D,SACjCihF,EAAOprB,OAAS,CAAC,IAAIn2D,EAAS,EAAG,KAGrC,MAAMwhF,EAAaD,EAAOprB,OAAOloD,KAAKmoD,IAClC,IAAKA,EAAM30D,SACP,MAAM,IAAI5D,EAAa,oBAAqB,0DAEhD,OAAOu4D,EAAMh0D,QAAQX,SAASinB,EAAO9V,WAAY,EAAE,IAEjD6uE,EAAmB/2D,EACzB,IAAIg3D,EAAmB,EACnBC,EAAa,GACbC,EAAe,GAInB,SAASC,IACDL,EAAWlhF,OAAS,EAAIohF,EACxBA,GAAoB,EAGpBA,EAAmB,CAE3B,EACA,WACI,IAAII,EAAY,GAEZC,EAAyB,IAAI/hF,EAAS,EAAG,GAC7CyhF,EAAiBnyE,SAAS0yE,IAEtB,GADAF,EAAY,GACRE,EAAgB5gD,oBAGhB,OAFAugD,EAAWxyE,KAAKyyE,QAChBA,EAAeE,GAGnBF,EAAazyE,KAAK6yE,GAClB,MAAMC,EAAgBT,EAAWE,GAAkBt/E,QAC7C+wD,GAxBS+uB,EAwBkBN,EAvB9BM,EAASniF,QAAO,CAACoiF,EAAM7tD,IAASA,EAAKgN,WAAWl/B,QAAQnB,IAAIkhF,IAAO,IAAIniF,EAAS,EAAG,KAuBvCiB,IAAI8gF,GAxB3D,IAAuBG,EA0Bf,MAAME,EAAa15D,EAAOw/B,iBAAiB85B,EAAgBzrC,eAAiB,EAK5E,GAJI6rC,GAAcJ,EAAgB/vC,cAC9BgwC,EAAcvhF,WAAa,GAG3ByyD,EAAWnxD,YAAYigF,GAAgB,CAGvC,IAAKG,EAAY,CACb,MAAM9tD,EAAOstD,EAAalvC,MACtBpe,GACAwtD,EAAU3yE,KAAKmlB,EACvB,CACAqtD,EAAWxyE,KAAKyyE,GAKhB,GACIG,EAAyB5uB,EAAW3xD,SAASggF,EAAWE,IACxDG,UACKE,EAAuB9/E,kBAAkBu/E,EAAWE,KAC7DE,EAAeE,CACnB,MACS3uB,EAAWxxD,OAAOsgF,KACvBN,EAAWxyE,KAAKyyE,GAChBG,EAAyB,IAAI/hF,EAAS,EAAG,GACzC4hF,EAAeE,EACfD,IACJ,IAGAD,EAAathF,OAAS,GACtBqhF,EAAWxyE,KAAKyyE,EAExB,CA2GAS,GA3FA,WACI,MAAMC,EAAkB,GACxBX,EAAWryE,SAAS8mD,IAChB,IAAImsB,EAAY,GAChBnsB,EAAM9mD,SAAQ,CAACglB,EAAMtnB,EAAOopD,KACxB,MAAMosB,EAA0B,IAAVx1E,GAAeA,IAAUopD,EAAM91D,OAAS,EACxDq9B,EAAWy4B,EAAMppD,EAAQ,GACzBy1E,GAAoBlB,EAAOmB,YAAcpuD,EAAKuN,SAC9C8gD,EAA0BpB,EAAOmB,YAAcnB,EAAOqB,kBAAoBtuD,EAAKuN,UAAY2gD,EACjG,IAAIK,GAAoB,EACxB,GAAItB,EAAOuB,0BAA4BnlD,IAAarJ,EAAKuN,WAAalE,EAASkE,SAAU,CACrF,MAAMkhD,EAAgBplD,EAAS6M,mBAE/Bq4C,EADyBvuD,EAAKkW,qBACWu4C,CAC7C,CACA,MAAMC,EAAuBzjF,SAAS+0B,EAAKiiB,cAAe,IAAM,EAE5CksC,GAAoBE,GAA2BE,GAAqBG,GAGhFT,EAAUjiF,OAAS,GACnBgiF,EAAgBnzE,KAAKozE,GAKzBA,EAAYM,EAAoB,CAACvuD,GAAQ,IAIzCiuD,EAAUpzE,KAAKmlB,EACnB,IAGAiuD,EAAUjiF,OAAS,GACnBgiF,EAAgBnzE,KAAKozE,EACzB,IAEJZ,EAAaW,CACjB,CAqDAW,GAnDItB,EAAWryE,SAAS8mD,IAChB,IAAI9rB,EACJ,GAAIi3C,EAAOuB,yBAA0B,CACjC,MAAMxuD,EAclB,SAAuB8hC,GACnB,IAAK,IAAIhzD,EAAI,EAAGA,EAAIgzD,EAAM91D,OAAQ8C,IAAK,CACnC,MAAMkxB,EAAO8hC,EAAMhzD,GACnB,IAAKkxB,EAAKuN,SACN,OAAOvN,CAEf,CACA,OAAO,CACX,CAtByB4uD,CAAc9sB,GAC3B9rB,EAAgBhW,EAAOA,EAAKkW,mBAAqBjH,GAAKC,EAC1D,MAGQ8G,EADAi3C,EAAOl9C,eACSk9C,EAAOl9C,eAGPw8C,GAAuBzqB,IAevD,SAA4BA,EAAO36B,GAC/B26B,EAAM9mD,SAASglB,IACXA,EAAK00B,iBAAiBvtB,EAAU,GAExC,CAhBQ0nD,CAAmB/sB,EAAO9rB,EAAc,IAwChD,MAAM84C,EA7GKzB,EAAW3qC,QAAQof,IACtB,GAAIA,EAAM91D,OAAS,EAAG,CAClB,IAAI+iF,GAAW,EAMf,OALAjtB,EAAM9mD,SAASglB,IACPA,EAAK+e,qBAAuB3qB,EAAOmsB,gBAAgB,OACnDwuC,GAAW,EACf,IAEGA,CACX,CACA,OAAO,CAAK,IAqGdC,EAxBN,WACI,MAAMC,EAAgB,GAYtB,OAVA5B,EAAWryE,SAAS8mD,IAChB,IAAIlkB,EACJkkB,EAAM9mD,SAASglB,IACX,MAAMkvD,EAAalvD,EAAK2d,YACpBuxC,GAActxC,IAAWsxC,IACzBtxC,EAASsxC,EACTD,EAAcp0E,KAAK+iC,GACvB,GACF,IAECqxC,CACX,CAUmBE,GAEbluB,EAAQ,GA+Bd,OA9BA6tB,EAAiB9zE,SAAS8mD,IACtB,MAAMzf,EAAO,IAAIkf,GAAKO,GAClBmrB,EAAOmC,gBACP/sC,EAAKnU,eAAekhD,eAAgB,GAEpCnC,EAAOoC,mBACPhtC,EAAKnU,eAAeohD,sBAAwBl7D,EAAOmsB,gBAAgB0sC,EAAOoC,oBAEpD,IAAtBpC,EAAOsC,aACPltC,EAAKnU,eAAeqhD,YAAa,EACjCltC,EAAKnU,eAAeshD,iBAAmBvC,EAAOuC,kBAElDvuB,EAAMpmD,KAAKwnC,EAAK,IAGpB2sC,EAAWh0E,SAAS4iC,IAEhB,MAAMzW,EAAYyW,EAAOxnB,MAAM,GAAG2Z,iBAAmBd,GAAKE,KAAOs6C,GAAe1yC,OAAS0yC,GAAe/yC,IACxGkH,EAAO2sC,kBAAkBpjD,GAEzB,IAAIkjD,GAAY,EAChB,IAAK,IAAIv7E,EAAI,EAAGA,EAAI8uC,EAAOxnB,MAAMpqB,OAAQ8C,IAAK,CAE1C,IADa8uC,EAAOxnB,MAAMtnB,GAChByzC,UAAW,CACjB8nC,GAAY,EACZ,KACJ,CACJ,CACAzsC,EAAOgtC,aAAaP,EAAU,IAE3BppB,CACX,CACAp5D,YAAYuuB,EAAOmhC,GAAY,GAU3B,GATA5tD,QACAvD,KAAKqpF,MAAQ,EACbrpF,KAAKy0B,QAAU,EAMfz0B,KAAKspF,wBAA0B,CAAC,GAC3Bt5D,GAA0B,IAAjBA,EAAMpqB,OAChB,MAAM,IAAIzC,EAAa,eAAgB,+BAE3C,GAAqB,IAAjB6sB,EAAMpqB,OACN,MAAM,IAAIzC,EAAa,eAAgB,2BAI3C,GADAnD,KAAKowB,MAAQJ,EAAM,GAAG2oB,oBAClB34C,KAAKowB,OAASpC,EAAOmsB,gBAAgB,KACrC,MAAM,IAAIh3C,EAAa,eAAgB,mEAE3C,IAAIuF,EACAkxB,EACJ55B,KAAK2pC,eAAiB3Z,EAAM,GAAG8f,mBAC/B,IAAInG,EAAiB3pC,KAAK2pC,eAE1B,GAAIwnB,GAAatuD,EAAYmtB,EAAM,IAC/B2Z,EAAiBw8C,GAAuBn2D,QAEvC,GAAImhC,GAAaluD,EAAU+sB,EAAM,IAAK,CAEvC,MAAMu5D,EAAcv5D,EAAM3qB,QAAO,CAACoiF,EAAM7tD,IAAS6tD,EAAO7tD,EAAKkW,oBAAoB,GACjFnG,EAAiB4/C,GAAe,EAAI1gD,GAAKC,GAAKD,GAAKE,IACvD,CAEA,IAAKrgC,EAAI,EAAGA,EAAIsnB,EAAMpqB,SAAU8C,EAC5BkxB,EAAO5J,EAAMtnB,GACTyoD,IACAv3B,EAAK00B,iBAAiB3kB,GACtB3pC,KAAK2pC,eAAiBA,GAE1B/P,EAAKwiB,QAAQp8C,MAEjBA,KAAK04C,eAAgB,EACrB14C,KAAKgwB,MAAQA,EACbhwB,KAAK2zB,WAAa3zB,KAAKouD,eACvBpuD,KAAKwpF,iBAAmB,GACxBxpF,KAAK8nC,eAAiB,CAClBszB,WAAY,EACZquB,UAAW,IACXC,WAAY,IACZC,iBAAkB,GAClBC,WAAY,IACZZ,eAAe,EACfa,kBAAmB,EACnBxuB,oBAAqB,GACrB8tB,YAAY,EACZW,qBAAsB,GAE9B,CAEApyB,WACI,OAAO13D,KAAKgwB,KAChB,CAEAo+B,eAGI,OAFmBpuD,KAAKgwB,MAAMzc,KAAKqmB,GAASA,EAAK8V,gBAAgB/b,aACjCtuB,QAAO,CAAC0E,EAAKggF,IAAeA,EAAYhgF,EAAMggF,EAAYhgF,GAE9F,CAEAigF,iBAAiBC,GAEb,OADAjqF,KAAKwpF,iBAAmBS,EACjBjqF,IACX,CAcAkqF,qBAAqB9O,EAAW+O,GAE5B,OADAnqF,KAAKspF,wBAAwBlO,GAAa+O,EACnCnqF,IACX,CAKAoqF,uBAAuBhP,GAEnB,cADOp7E,KAAKspF,wBAAwBlO,GAC7Bp7E,IACX,CAEAqqF,UAAU1mF,EAAGyzD,EAAYC,EAAYgyB,GACjC,OAAOhyB,GAAc1zD,EAAIyzD,GAAciyB,CAC3C,CAEAiB,iBACI,MAAM,MAAEt6D,EAAO2Z,eAAgBiG,EAAe9H,gBAAgB,UAAE2hD,EAAS,UAAEC,EAAS,iBAAEC,EAAgB,WAAEC,IAAkB5pF,KACpHuqF,EAAYv6D,EAAM,GAClBw6D,EAnbd,SAAsBD,EAAWj/B,GAC7B,MAAMm/B,EAAgBF,EAAUn4C,iBAAiBrH,KAC3C2/C,EAAaH,EAAU94C,WAG7B,OAFqB6Z,EAASlZ,iBAAiBrH,KAExB0/C,IADLn/B,EAAS7Z,WAC0Bi5C,EACzD,CA6a6BC,CAAaJ,EAAWv6D,EAAMA,EAAMpqB,OAAS,IAC5DytC,GAAao2C,EAAYC,GAAaC,EAC5C,IAAIiB,EAAUplF,OAAOqlF,UACjBC,EAAY,EACZ/yD,EAAS,EAEb,IAAK,IAAIsxD,EAAQK,EAAWL,GAASI,EAAWJ,GAASh2C,EAAW,CAChE,IAAI03C,EAAqB,EACrBC,EAAa,EAEjB,IAAK,IAAItiF,EAAI,EAAGA,EAAIsnB,EAAMpqB,SAAU8C,EAAG,CACnC,MAAMkxB,EAAO5J,EAAMtnB,GACnB,GAAIkxB,EAAKiW,WAAajW,EAAKuN,SAAU,CACjC,MAAM8jD,EAAmBjrF,KAAKqqF,UAAUzwD,EAAK6X,WAAY84C,EAAU94C,WAAY84C,EAAUn4C,iBAAiBrH,KAAMs+C,GAAS2B,EACnHl2C,EAAWlb,EAAKwY,iBAAiBrH,KAEvC,GAAI+J,EAAWlF,EAAgBq7C,EAAmBr7C,EAAe,CAC7D,MAAMs7C,EAAOjmF,KAAK+C,IAAI8sC,EAAWm2C,GACjCD,GAAcE,GAAQt7C,EACtBm7C,GAAsBG,EAAOxiF,CACjC,MAGIqiF,IAAuBj2C,EAAWm2C,GAAoBr7C,CAE9D,CACJ,CAGA,MAAMu7C,EAAaX,EAAe,EAI5BrH,EAAOyG,EAHa3kF,KAAK+C,IAAImjF,EAAa9B,GAGFpkF,KAAK+C,IAAI+iF,GAEnD5H,EAAOyH,IACPA,EAAUzH,EACV2H,EAAYzB,EACZtxD,EAASizD,EAEjB,CACAhrF,KAAKqpF,MAAQyB,EACb9qF,KAAKy0B,QAAUsD,CACnB,CAEAqzD,qBACI,MAAM,MAAEp7D,EAAK,eAAE2Z,EAAgB7B,gBAAgB,WAAEszB,EAAU,qBAAE0uB,EAAoB,iBAAEV,IAAwBppF,KAG3G,IAAIo8E,EAAQ,EACRiP,EAAW,EACXC,EAAmB,EACnBC,EAAiB,EACrB,IAAK,IAAI7iF,EAAI,EAAGA,EAAIsnB,EAAMpqB,OAAQ8C,IAAK,CAEnC,MAAMkxB,EAAO5J,EAAMtnB,GACbosC,EAAWlb,EAAKwY,iBAAiBrH,KACvCqxC,GAAStnC,EAGLnL,IAAmBd,GAAKE,MAAQwiD,EAAiBz2C,GACjDy2C,EAAiBz2C,EACjBu2C,EAAWpmF,KAAK8E,OAAO6vB,EAAKkY,SAC5Bw5C,EAAmB1xD,EAAKw0B,gBAEnBzkB,IAAmBd,GAAKC,KAA0B,IAAnByiD,GAAwBA,EAAiBz2C,KAC7Ey2C,EAAiBz2C,EACjBu2C,EAAWpmF,KAAK4lC,OAAOjR,EAAKkY,SAC5Bw5C,EAAmB1xD,EAAKw0B,eAEhC,CAGA,IAAIkf,EAAS8O,EAAQpsD,EAAMpqB,OAK3B,MACM4lF,EAAc1B,EAAuBwB,GADZ,IAAblwB,GAEZqwB,EAAYJ,EAAWG,GAAe7hD,EACxCA,IAAmBd,GAAKE,MAAQukC,EAASme,EACzCne,EAAS+d,EAAWG,EAEf7hD,IAAmBd,GAAKC,IAAMwkC,EAASme,IAC5Cne,EAAS+d,EAAWG,GAEnBpC,GAIIz/C,IAAmBd,GAAKE,MAAQukC,EAAS8b,GAGzCz/C,IAAmBd,GAAKC,IAAMwkC,EAAS8b,KAF5CppF,KAAK8nC,eAAeshD,iBAAmB9b,GAHvCttE,KAAK8nC,eAAeshD,iBAAmB9b,EAS3CttE,KAAKqpF,MAAQ,EACbrpF,KAAKy0B,QAAU,CACnB,CAEAi3D,iBAGI,IAAIC,EAFc3rF,KAAKgwB,MAAM,GACGoiB,iBAAiBrH,KAOjD,OAHI/qC,KAAK8nC,eAAeqhD,YAAcnpF,KAAK8nC,eAAeshD,mBACtDuC,EAAQ3rF,KAAK8nC,eAAeshD,kBAEzBuC,CACX,CAKAC,sBACI,MAAM,MAAE57D,EAAK,MAAEq5D,EAAK,QAAE50D,EAAO,WAAEd,EAAYmU,gBAAgB,cAAEkhD,EAAa,kBAAEa,EAAiB,WAAEzuB,IAAkBp7D,KAC3GuqF,EAAYv6D,EAAM,GAClBy6D,EAAgBzqF,KAAK0rF,iBACrBhB,EAAaH,EAAU94C,WAC7B,IAAK,IAAI/oC,EAAI,EAAGA,EAAIsnB,EAAMpqB,SAAU8C,EAAG,CACnC,MAAMkxB,EAAO5J,EAAMtnB,GACbsqB,EAAO4G,EAAKqW,UAClB,GAAIjd,EAAM,CACN,MAAMmjC,EAAQv8B,EAAK6X,YACX1G,KAAM+J,GAAalb,EAAKwY,iBAC1By5C,EAAiB7rF,KAAKqqF,UAAUl0B,EAAOu0B,EAAYD,EAAepB,GAAS50D,EAC3Eq3D,EAAmB94D,EAAKoX,eACxB2hD,EAAgBnyD,EAAKkW,qBAAuBjH,GAAKC,GAAKgM,EAAW+2C,EAAiBA,EAAiB/2C,EAEzG,IAAIk3C,EAAqB,EACzB,GAAIpyD,EAAKkW,qBAAuB9vC,KAAK2pC,eAAgB,CAEjDqiD,GAAsB,EAAsB,KAD1BpyD,EAAK8V,gBAAgB/b,WACA,IAAY3zB,KAAK8nC,eAAeszB,UAQ3E,CAGA,GAFApoC,EAAKkX,aAAa4hD,EAAmBC,EAAgBC,GACrDh5D,EAAKqY,sBACDzR,EAAKuN,UAAY6hD,EAAe,CAChC,MACMiD,GAAkBt4D,EAAa,GADnBynC,EACoC,IADpCA,EAElBpoC,EAAKiY,eAAc,GAAME,YAAW,EAAM8gD,EAAiBpC,EAC/D,CACJ,CACJ,CACJ,CAEAqC,oBAAoB39D,EAAU49D,EAAW3uB,EAAM4uB,EAAWhR,GACtD,GAAiB,MAAb7sD,EACA,OAAO+3D,GAEX,MAAM+F,EAAsBrsF,KAAKspF,wBAAwBlO,GACzD,GAAIiR,EACA,OAAOA,EACX,MAAMC,EAAkB,GAAGt+D,EAAOw/B,iBAAiBj/B,GAAY,EACzDg+D,EAAsBJ,EAAYn+D,EAAOmsB,gBAAgBmyC,GACzDE,EAAsBJ,EAAYp+D,EAAOmsB,gBAAgBmyC,GACzDG,EAAiBjvB,EAAOxvC,EAAOmsB,gBAAgBmyC,GACrD,OAAIC,GAAuBC,GAAuBC,EACvCjG,GAEF+F,IAAwBC,GAAuBC,EAC7CnG,IAEDiG,GAAuBC,GAAuBC,EAC7ClG,GAEJvmF,KAAKksF,oBAAoBI,EAAiBH,EAAW3uB,EAAM4uB,EAAWhR,EACjF,CAEAsR,aAAan+D,GACT,MAAMo+D,EAAmB3+D,EAAOmsB,gBAAgB5rB,GAChD,IAAIq+D,GAAe,EACnB,MAAMC,EAAa,GACnB,IAAIC,EACJ,MAAMzxB,EAAsBr7D,KAAK8nC,eAAeuzB,oBAChD,IAAI0xB,GAAwB,EACxBC,EAAa,EACjB,IAAK,IAAItkF,EAAI,EAAGA,EAAI1I,KAAKgwB,MAAMpqB,SAAU8C,EAAG,CACxC,MAAMkxB,EAAO55B,KAAKgwB,MAAMtnB,GAGxBskF,GADcpzD,EAAKgN,WAAWxlC,QAE9B,IAAI6rF,GAAe,EAEfpoF,SAAS0pB,EAAU,KAAO,IAE1B0+D,GAAqD,IAAtCjtF,KAAKwpF,iBAAiBvzE,QAAQvN,GAGzC1I,KAAK8nC,eAAeohD,uBAAyB8D,GAAchtF,KAAK8nC,eAAeohD,wBAC/E8D,EAAa,EACbC,GAAe,IAGvB,MAAMR,EAAiB7yD,EAAK+e,oBAAsBg0C,EAC5CrhD,EAAS1R,EAAK6X,WAAa5I,GAAKG,MAAQ,EAGxC0hB,EAAY1qD,KAAKgwB,MAAMtnB,EAAI,GAC3BwkF,EAAYltF,KAAKgwB,MAAMtnB,EAAI,GAC3B8jF,EAAsBU,GAAaA,EAAUv0C,oBAAsBg0C,EACnEJ,EAAsB7hC,GAAaA,EAAU/R,oBAAsBg0C,EACnEQ,EAAaziC,GAAawiC,GAAaT,IAAmBF,IAAwBC,EAExF,GAAIC,EAEA,GAAIG,EAGAE,EAAeD,EAAWA,EAAWjnF,OAAS,GAC9CknF,EAAaxuC,IAAMhT,EAEf2hD,IACAL,GAAe,EACXM,IAAcV,QAA4C5oF,IAArBkpF,EAAaxuC,MAGlDwuC,EAAaxuC,IAAMwuC,EAAarkD,MAAQ4yB,QAI/C,CAID,GAFAyxB,EAAe,CAAErkD,MAAO6C,EAAQgT,SAAK16C,GACrCgpF,GAAe,EACXO,EAAY,CAEZ,MAAMhB,EAAYzhC,EAAU/R,oBACtByzC,EAAYc,EAAUv0C,oBACtB6kB,EAAO5jC,EAAK+e,oBACZy0C,EAAiBptF,KAAKksF,oBAAoB39D,EAAU49D,EAAW3uB,EAAM4uB,EAAW1jF,GAClF,CAAC49E,GAAWE,IAAW1yE,SAASs5E,GAChCN,EAAaxuC,IAAMwuC,EAAarkD,MAAQ4yB,EAGxCyxB,EAAaxuC,IAAMwuC,EAAarkD,MAAQ4yB,CAEhD,MACUmxB,EAYDS,IAGLH,EAAaxuC,IAAMwuC,EAAarkD,MAAQ4yB,EACxCuxB,GAAe,GAXXE,EAAaxuC,KAHZyuC,GAA+B,IAANrkF,IAAYwkF,EAGnBJ,EAAarkD,MAAQ4yB,EAIrByxB,EAAarkD,MAAQ4yB,EAShDwxB,EAAWp4E,KAAKq4E,EACpB,MAIAF,GAAe,EAInBG,EAAwBE,CAC5B,CAEA,MAAMI,EAAYR,EAAWA,EAAWjnF,OAAS,GAIjD,OAHIynF,QAA+BzpF,IAAlBypF,EAAU/uC,MACvB+uC,EAAU/uC,IAAM+uC,EAAU5kD,MAAQ4yB,GAE/BwxB,CACX,CAEAS,UAAU13D,GACN51B,KAAKgwB,MAAMpb,SAASglB,IAChB,MAAM5G,EAAO4G,EAAKqW,UAClB,GAAIjd,EAAM,CACN,MAAMsY,EAAS1R,EAAK6X,WACpBze,EAAKgX,mBAAmBsB,EAAQA,GAChCtY,EAAKlc,WAAW8e,GAAK7f,MACzB,IACD/V,KACP,CAEAutF,cAAc33D,GACV,MAAM43D,EAAuB,CAAC,IAAK,IAAK,KAAM,KAAM,MAC9CjD,EAAYvqF,KAAKgwB,MAAM,GAC7B,IAAI27D,EAAQ3rF,KAAK0rF,iBACjB,MAAMhB,EAAaH,EAAU94C,WACvBg8C,EAAgBztF,KAAK8nC,eAAeszB,WAAap7D,KAAK2pC,eAE5D,IAAK,IAAIjhC,EAAI,EAAGA,EAAI8kF,EAAqB5nF,SAAU8C,EAAG,CAClD,MAAM6lB,EAAWi/D,EAAqB9kF,GAChCglF,EAAY1tF,KAAK0sF,aAAan+D,GACpC,IAAK,IAAIk2B,EAAI,EAAGA,EAAIipC,EAAU9nF,SAAU6+C,EAAG,CACvC,MAAMkpC,EAAYD,EAAUjpC,GACtBmpC,EAAaD,EAAUllD,MACvBolD,EAAa7tF,KAAKqqF,UAAUuD,EAAYlD,EAAYiB,EAAO3rF,KAAKqpF,OAChEyE,EAAYH,EAAUrvC,IAC5B,IAAIwvC,EAWA,MAAM,IAAI3qF,EAAa,cAAe,wBAX3B,CACX,MAAM4qF,EAAY/tF,KAAKqqF,UAAUyD,EAAWpD,EAAYiB,EAAO3rF,KAAKqpF,OACpEzzD,EAAIQ,YACJR,EAAIS,OAAOu3D,EAAYC,GACvBj4D,EAAIU,OAAOs3D,EAAYC,EAAaJ,GACpC73D,EAAIU,OAAOw3D,EAAY,EAAGC,EAAYN,GACtC73D,EAAIU,OAAOw3D,EAAY,EAAGC,GAC1Bn4D,EAAI+f,YACJ/f,EAAIa,MACR,CAIJ,CACAk1D,GAAyB,IAAhB8B,CACb,CACJ,CAEAl1C,YACI,OAAOv4C,IACX,CAMAy4C,aACQz4C,KAAK04C,gBAGLz1C,EAAUjD,KAAKgwB,MAAM,KAAOhwB,KAAK8nC,eAAeqhD,WAChDnpF,KAAKorF,qBAGLprF,KAAKsqF,iBAETtqF,KAAK4rF,sBACL5rF,KAAK04C,eAAgB,EACzB,CAEA3iC,OACI,MAAM6f,EAAM51B,KAAK8V,eACjB9V,KAAKsW,cACDtW,KAAK0nF,aAEJ1nF,KAAK04C,eACN14C,KAAKy4C,aAETz4C,KAAKstF,UAAU13D,GACf51B,KAAK8U,aACL8gB,EAAI8V,UAAU,OAAQ1rC,KAAK6S,aAAa,OACxC7S,KAAKutF,cAAc33D,GACnBA,EAAIgW,aACJ5rC,KAAK2V,eACT,EC9yBG,MAAMq4E,WAAiBtrF,GACfhB,sBACP,OAAOG,EAASmsF,QACpB,CACAvsF,YAAYwQ,EAAM7D,EAAMihC,GACpB9rC,MAAM,CAAEgrB,SAAU,MAClBvuB,KAAKiS,KAAOA,EACZ,MAAMic,EAAO,IAAIw9C,GAAKz5D,EAAM7D,EAAMihC,GAClCrvC,KAAKkuB,KAAOA,EAAKA,KACjBluB,KAAKqvC,WAAanhB,EAAKmhB,WACvBrvC,KAAKoO,UAAgBxK,IAATwK,EAAqB,UAAYA,EAC7CpO,KAAK05B,SAASjK,EAAMG,SAAS5vB,KAAKkuB,KAAK7qB,KAAMqoE,GAAK7L,SAAS7/D,KAAKoO,MAAO,YAAYpO,KAAKoO,SAExFpO,KAAKq2C,cAAe,CACxB,CAEAqJ,QAAQztC,EAAM7D,EAAMihC,GAChBrvC,KAAKiS,KAAOA,EACZjS,KAAKoO,KAAOA,EACZ,MAAM8f,EAAO,IAAIw9C,GAAKz5D,EAAM7D,EAAMihC,GAIlC,OAHArvC,KAAKkuB,KAAOA,EAAKA,KACjBluB,KAAKqvC,WAAanhB,EAAKmhB,WACvBrvC,KAAK05B,SAASjK,EAAMG,SAAS5vB,KAAKkuB,KAAK7qB,KAAMqoE,GAAK7L,SAAS7/D,KAAKoO,MAAO,YAAYpO,KAAKoO,SACjFpO,IACX,CAEA4tE,UACI,OAAO5tE,KAAKkuB,IAChB,CACAqqB,YAEI,OADAv4C,KAAKw4C,cAAe,EACbx4C,IACX,CAEA+V,OACI,MAAMshB,EAAQr3B,KAAKo4B,aACbxC,EAAM51B,KAAK8V,eACjB9V,KAAKsW,cACL,MAAM23E,EAAQjuF,KAAK+4C,eAKnB,GAJAtpB,EAAMk+B,YAAY/3B,EAAKq4D,EAAO52D,EAAMmM,YAAYxjC,KAAKkuB,KAAKlqB,MAAO0nE,GAAK7L,SAAS7/D,KAAKoO,MAAOpO,KAAKkuB,KAAK7qB,KAAM,CACvG/B,SAAU,YAAYtB,KAAKoO,cAGPxK,IAApB5D,KAAKqvC,WAA0B,CAC/B,MAAMy8B,EAAa,IAAIr8C,EAAMzvB,KAAKqvC,WAAWhsC,KAAMrD,KAAKqvC,WAAWlb,OACnE23C,EAAWh1D,WAAW8e,GACtBk2C,EAAW10C,SAASC,GACpBy0C,EAAWr0C,UAAUJ,EAAMmM,YAAYxjC,KAAKqvC,WAAWrrC,MAAQqzB,EAAMiB,iBACrEwzC,EAAWv0C,UAAUv3B,KAAKqvC,WAAW7a,SACrCs3C,EAAWzzC,cAAc41D,EAC7B,CACJ,ECtBJ,MAAMC,WAAkBxrF,GAEThB,sBACP,OAAOG,EAASqsF,SACpB,CAEAzsF,YAAYs4C,GACRx2C,MAAMw2C,GACN/5C,KAAKquB,QAAU,CAEX8/D,YAAa,EACbC,aAAc,EAEd35D,QAAS,GAGbz0B,KAAKquF,aAAc,EAEnBruF,KAAKgE,KAAO+1C,EAAW/1C,MAAQ,EAE/BhE,KAAK0K,OAAS,EAClB,CAEAoiD,QAAQ9oD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEAsuF,UAAU5jF,GAEN,OADA1K,KAAK0K,OAASA,EACP1K,IACX,CAGAuuF,eAAeC,GAEX,OADAxuF,KAAKquF,YAAcG,EACZxuF,IACX,CAEAu4C,YAEI,OADAv4C,KAAKw4C,cAAe,EACbx4C,IACX,CAEA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACXuhB,EAAQr3B,KAAKo4B,aACnBp4B,KAAKsW,cACL,MAAMm4E,EAAezuF,KAAK86B,iBACpB4zD,EAAe/yB,GAAY4D,eAAekvB,GAC1CE,EAAU3uF,KAAK+4C,eACfs7B,EAAQqa,EAAeA,EAAazlF,OAASouB,EAAMpuB,OAASouB,EAAMzH,WAClE9mB,EAAIuuB,EAAMmM,YAAYxjC,KAAKgE,MAAQ,GAAK,GA5EtD,YAAcD,GACNmqF,GAAU3rD,OACV1+B,EAAI,qBAAsBE,EAClC,CA0EQ,CAAE,WAAY/D,KAAKquF,YAAc,eAAiB,aAAcruF,KAAK0K,OAAQ,IAAKikF,EAAUta,GAxEpG,SAAuBz+C,EAAKxH,GACxB,MAAMugE,EAAUvgE,EAAOugE,QACjBta,EAAQjmD,EAAOimD,MACfvrE,EAAIslB,EAAOtlB,EACX8lF,EAAcxgE,EAAO1jB,OAAS,EACpCkrB,EAAIQ,YACAhI,EAAOygE,SACPj5D,EAAIS,OAAOs4D,EAAS7lF,EAAI8lF,GACxBh5D,EAAIU,OAAO+9C,EAAOvrE,GAClB8sB,EAAIU,OAAOq4D,EAAS7lF,EAAI8lF,KAGxBh5D,EAAIS,OAAOg+C,EAAOvrE,EAAI8lF,GACtBh5D,EAAIU,OAAOq4D,EAAS7lF,GACpB8sB,EAAIU,OAAO+9C,EAAOvrE,EAAI8lF,IAE1Bh5D,EAAIhH,SACJgH,EAAI+f,WACR,CAuDQm5C,CAAcl5D,EAAK,CACf+4D,QAASA,EAAU3uF,KAAKquB,QAAQ8/D,YAChC9Z,MAAOA,EAAQr0E,KAAKquB,QAAQ+/D,aAC5BtlF,EAAGA,EAAI9I,KAAKquB,QAAQoG,QACpB/pB,OAAQ1K,KAAK0K,OACbmkF,QAAS7uF,KAAKquF,aAEtB,EC3FG,IAAIU,GD6FXb,GAAU3rD,OAAQ,EC5FlB,SAAWwsD,GACPA,EAAcA,EAAyB,UAAI,GAAK,YAChDA,EAAcA,EAAwB,SAAI,GAAK,UAClD,CAHD,CAGGA,KAAkBA,GAAgB,CAAC,IAC/B,MAAMC,WAAcj7E,EACZrS,sBACP,OAAOG,EAASmtF,KACpB,CACWp2D,sBACP,OAAOm2D,EACX,CACWl2D,4BACP,MAAO,CACHo2D,SAAUF,GAAcG,UACxBC,QAASJ,GAAcK,SAE/B,CAOA3tF,YAAY4tF,EAAMC,EAAIjhE,GAClB9qB,QACAvD,KAAK8nC,eAAiBznC,OAAOmX,OAAO,CAAEwnC,UAAW,EAAGxqB,QAAS,EAAGC,QAAS,GAAIhB,SAAUs7D,GAAcG,UAAWK,aAAcR,GAAcG,UAAWM,QAAQ,EAAOC,IAAK,CACnK,CAAE9rF,EAAG,EAAGmF,EAAG,IACX,CAAEnF,EAAG,EAAGmF,EAAG,MACVulB,GACTruB,KAAKqvF,KAAOA,EACZrvF,KAAKsvF,GAAKA,CACd,CACAj5B,SAASg5B,EAAMC,GACX,IAAKD,IAASC,EACV,MAAM,IAAInsF,EAAa,eAAgB,kDAI3C,OAFAnD,KAAKqvF,KAAOA,EACZrvF,KAAKsvF,GAAKA,EACHtvF,IACX,CAIA+2D,YACI,OAAQ/2D,KAAKqvF,OAASrvF,KAAKsvF,EAC/B,CACAI,YAAYthE,GACR,MAAMwH,EAAM51B,KAAK8V,eACX0e,EAAUx0B,KAAK8nC,eAAetT,QAC9BC,EAAUz0B,KAAK8nC,eAAerT,QAAUrG,EAAO2S,UAC/C4uD,EAAUvhE,EAAOuhE,QAAUn7D,EAC3Bo7D,EAAUxhE,EAAOwhE,QAAUn7D,EAC3Bo7D,EAASzhE,EAAOyhE,OAASr7D,EACzBs7D,EAAS1hE,EAAO0hE,OAASr7D,EACzBuqB,EAAYh/C,KAAK8nC,eAAekX,UAChCywC,EAAMzvF,KAAK8nC,eAAe2nD,KACxB9rF,EAAGosF,EAAMjnF,EAAGknF,GAASP,EAAI,IACzB9rF,EAAG69D,EAAM14D,EAAG24D,GAASguB,EAAI,GAC3BQ,GAAcJ,EAASF,IAAYF,EAAI7pF,OAAS,GACtDgwB,EAAIQ,YACJR,EAAIS,OAAOs5D,EAASC,GACpBh6D,EAAIY,cAAcm5D,EAAUM,EAAaF,EAAMH,EAAUI,EAAO5hE,EAAO2S,UAAW8uD,EAASI,EAAazuB,EAAMsuB,EAASruB,EAAOrzC,EAAO2S,UAAW8uD,EAAQC,GACxJl6D,EAAIY,cAAcq5D,EAASI,EAAazuB,EAAMsuB,GAAUruB,EAAOziB,GAAa5wB,EAAO2S,UAAW4uD,EAAUM,EAAaF,EAAMH,GAAWI,EAAOhxC,GAAa5wB,EAAO2S,UAAW4uD,EAASC,GACrLh6D,EAAIhH,SACJgH,EAAI+f,YACJ/f,EAAIa,MACR,CACA1gB,OACI/V,KAAK8V,eACL9V,KAAKsW,cACL,MAAMsgD,EAAa52D,KAAKqvF,KAClBnlC,EAAYlqD,KAAKsvF,GACvB,IAAIK,EACAE,EACAD,EACAE,EACAnmD,EAAiB,EACjByZ,EAAS,QACT8sC,EAAa,QACjB,SAAS51D,EAAY7G,GACjB,MAA2B,iBAAbA,EAAwBu7D,GAAMn2D,eAAepF,GAAYA,CAC3E,CACA,MAAMA,EAAW6G,EAAYt6B,KAAK8nC,eAAerU,UAC3C87D,EAAej1D,EAAYt6B,KAAK8nC,eAAeynD,cAWrD,GAVI97D,IAAas7D,GAAcK,WAC3BhsC,EAAS,OACT8sC,EAAa,QAEbX,IAAiBR,GAAcG,UAC/BgB,EAAa,QAERX,IAAiBR,GAAcK,WACpCc,EAAa,QAEbt5B,EACA+4B,EAAU/4B,EAAW9Z,eACrBnT,EAAiBitB,EAAW9mB,mBAC5B8/C,EAAUh5B,EAAWxkB,iBAAiBgR,OAErC,CAEDusC,EADczlC,EAAU9xB,aACRu/B,eAChBi4B,EAAU1lC,EAAU9X,iBAAiBgR,EACzC,CACA,GAAI8G,EACA2lC,EAAS3lC,EAAUlN,cACnBrT,EAAiBugB,EAAUpa,mBAC3BggD,EAAS5lC,EAAU9X,iBAAiB89C,OAEnC,CAEDL,EADcj5B,EAAWx+B,aACVw/B,aACfk4B,EAASl5B,EAAWxkB,iBAAiB89C,EACzC,CAQA,OAPAlwF,KAAK0vF,YAAY,CACbC,UACAE,SACAD,UACAE,SACA/uD,UAAW4I,IAAiD,IAA/B3pC,KAAK8nC,eAAe0nD,QAAmB,EAAI,MAErE,CACX,EC5HJ,SAAS,MAAKzrF,GACNosF,GAAO5tD,OACP1+B,EAAI,kBAAmBE,EAC/B,CAOA,SAASqsF,GAAenvF,GACpB,GAAI,kBAAmBA,EACnB,OAAOA,EAAEovF,cACb,GAAI,YAAapvF,EACb,OAAOmvF,GAAenvF,EAAEqvF,SAC5B,MAAMA,EAAUrvF,EAChB,OAAuB,IAAnBqvF,EAAQ1qF,OACDwqF,GAAeE,EAAQ,IACX,IAAnBA,EAAQ1qF,OACD,KACJ0qF,EAAQ/8E,IAAI68E,GACvB,CAIA,MAAMD,GAGF1uF,YAAY8uF,GACRvwF,KAAKuwF,QAAUA,EACfvwF,KAAKgE,KAAO,GACZhE,KAAK6qD,IAAM,EACX7qD,KAAKwwF,UA5BQ,CA6BjB,CAIAhoF,MAAMxE,GACFhE,KAAKgE,KAAOA,EACZhE,KAAK6qD,IAAM,EACX7qD,KAAKwwF,UApCQ,EAqCb,MAAMpjF,EAASpN,KAAKywF,OAAOzwF,KAAKuwF,QAAQnwC,SAExC,OADAhzC,EAAOojF,SAAWxwF,KAAKwwF,SAChBpjF,CACX,CACAsjF,UAAUC,IAzCO,IA0CT3wF,KAAKwwF,WACLxwF,KAAKwwF,SAAWxwF,KAAK6qD,KACzB7qD,KAAK6qD,IAAM8lC,CACf,CACAC,eACI5wF,KAAKwwF,UA/CQ,CAgDjB,CAGAK,WAAWC,EAAOC,GAAU,GACxB,MAAMC,EAASD,EAAU,IAAIE,OAAO,MAAQH,EAAQ,MAAQ,IAAIG,OAAO,MAAQH,EAAQ,UAEjF1jF,EADcpN,KAAKgE,KAAKE,MAAMlE,KAAK6qD,KACdzqB,MAAM4wD,GACjC,OAAe,OAAX5jF,EACO,CACH8jF,SAAS,EACTb,cAAejjF,EAAO,GACtB+jF,aAAc/jF,EAAO,GAAGxH,OACxBilD,IAAK7qD,KAAK6qD,KAIP,CAAEqmC,SAAS,EAAOrmC,IAAK7qD,KAAK6qD,IAE3C,CAKAumC,UAAUC,EAAMC,GAAQ,GACpB,MAAMhB,EAAU,GACVzlC,EAAM7qD,KAAK6qD,IACjB,IAAI0mC,GAAa,EACbC,GAAW,EAGf,GAFAF,GAAkB,IAAVA,IAAiC,IAAfD,EAAKC,MAE3BD,EAAKZ,OACL,IAAK,MAAMvjF,KAAQmkF,EAAKZ,OAAQ,CAC5B,MAAMgB,EAAWzxF,KAAK6qD,IAChBz9C,EAASpN,KAAKywF,OAAOvjF,GAG3B,GAAIE,EAAO8jF,SAGP,GAFAZ,EAAQ77E,KAAKrH,GACbokF,GAAW,EACPH,EAAKK,GACL,WAIJ,GADAH,GAAa,GACRF,EAAKK,GAAI,CACV1xF,KAAK6qD,IAAM4mC,EACX,KACJ,CAER,CAEJ,MAAME,EAAUN,EAAKK,IAAMF,GAAaD,EAClCL,EAAUS,IAAoB,IAAVL,EACpBM,EAAaD,EAAS,EAAI,EAShC,OARIL,IAAUK,IACV3xF,KAAK6qD,IAAMA,GACXqmC,EACAlxF,KAAK4wF,eAGL5wF,KAAK0wF,UAAU7lC,GAEZ,CAAEqmC,UAASZ,UAASsB,aAC/B,CAGAC,gBAAgBR,EAAMC,GAAQ,GAC1B,MAAMhB,EAAU,GACVzlC,EAAM7qD,KAAK6qD,IACjB,IAAI+mC,EAAa,EACbE,GAAO,EACX,EAAG,CACC,MAAM1kF,EAASpN,KAAKoxF,UAAUC,GAC1BjkF,EAAO8jF,SAAW9jF,EAAOkjF,SACzBsB,IACAtB,EAAQ77E,KAAKrH,EAAOkjF,UAGpBwB,GAAO,CAEf,OAASA,GACT,MAAMZ,EAAUU,EAAa,IAAe,IAAVN,EASlC,OARIA,GAAWM,EAAa,IACxB5xF,KAAK6qD,IAAMA,GACXqmC,EACAlxF,KAAK4wF,eAGL5wF,KAAK0wF,UAAU7lC,GAEZ,CAAEqmC,UAASZ,UAASsB,aAC/B,CAEAG,iBAAiBV,GACb,OAAOrxF,KAAK6xF,gBAAgBR,GAAM,EACtC,CAIAZ,OAAOuB,GAEH,GADA,GAAE,4BAA6BA,IAC1BA,EACD,MAAM,IAAI7uF,EAAa,yBAE3B,IAAIiK,EAOJ,MAAMikF,EAAOW,EAASC,KAAKjyF,KAAKuwF,QAAnByB,GACb,GAAIX,EAAKP,MAIL1jF,EAASpN,KAAK6wF,WAAWQ,EAAKP,OAAwB,IAAjBO,EAAKN,SACtC3jF,EAAO8jF,UAGPlxF,KAAK6qD,KAAOz9C,EAAO+jF,kBAGtB,KAAIE,EAAKZ,OAcV,MADA,GAAEY,GACI,IAAIluF,EAAa,gDAAkDkuF,GAXrEjkF,EADAikF,EAAKa,UACIlyF,KAAK6xF,gBAAgBR,GAEzBA,EAAKc,WACDnyF,KAAK+xF,iBAAiBV,GAGtBrxF,KAAKoxF,UAAUC,EAMhC,CAIA,MAAMe,EAAU,GAQhB,OAPAhlF,EAAOglF,QAAUA,EACbhlF,EAAOkjF,SACPljF,EAAOkjF,QAAQ17E,SAAS3T,GAAMmxF,EAAQ39E,KAAK27E,GAAenvF,MAE1DowF,EAAKgB,KAAOjlF,EAAO8jF,SACnBG,EAAKgB,IAAI,CAAED,YAERhlF,CACX,ECtMJ,SAAS,MAAKrJ,GACNuuF,GAAU/vD,OACV1+B,EAAI,qBAAsBE,EAClC,CDqMAosF,GAAO5tD,OAAQ,ECpMR,MAAMgwD,GACT9wF,YAAYiyC,GACR1zC,KAAK0zC,QAAUA,CACnB,CACA0M,QACI,OAAOpgD,KAAKo1B,IAChB,CACAA,OACI,MAAO,CACHq7D,OAAQ,CAACzwF,KAAKwyF,MAAOxyF,KAAKyyF,OAAQzyF,KAAK0yF,KAE/C,CACAF,QACI,MAAO,CACH/B,OAAQ,CAACzwF,KAAK2yF,YAAa3yF,KAAK4yF,QAChCP,IAAK,IAAMryF,KAAK0zC,QAAQm/C,cAEhC,CACAJ,SACI,MAAO,CACHhC,OAAQ,CAACzwF,KAAK8yF,MAAO9yF,KAAKwyF,OAC1BL,YAAY,EAEpB,CACAS,SACI,MAAO,CACHnC,OAAQ,CAACzwF,KAAK+yF,SAAU/yF,KAAKi/C,KAAMj/C,KAAKgzF,KAAMhzF,KAAKizF,MAE3D,CACAN,cACI,MAAO,CACHlC,OAAQ,CAACzwF,KAAKkzF,MAAOlzF,KAAKmzF,YAC1BzB,IAAI,EAEZ,CACAwB,QACI,MAAO,CACHzC,OAAQ,CAACzwF,KAAKozF,OAAQpzF,KAAKqzF,MAAOrzF,KAAKszF,QAEvCjB,IAAM7vD,GAAUxiC,KAAK0zC,QAAQ6/C,SAAS/wD,EAAM4vD,QAAQ,IAE5D,CACAiB,QACI,MAAO,CACH5C,OAAQ,CAACzwF,KAAKwzF,MACdtB,WAAW,EAEnB,CACAsB,OACI,MAAO,CACH/C,OAAQ,CAACzwF,KAAKyzF,SAAUzzF,KAAK0zF,WAAY1zF,KAAK2zF,QAEtD,CACAR,aACI,MAAO,CACH1C,OAAQ,CAACzwF,KAAKyzF,SAAUzzF,KAAK0zF,WAAY1zF,KAAK2zF,QAC9CtB,IAAM7vD,IAEF,MAAMn6B,EAAIm6B,EACVxiC,KAAK0zC,QAAQkgD,cAAcvrF,EAAE+pF,QAAQ,GAAI/pF,EAAE+pF,QAAQ,GAAI/pF,EAAE+pF,QAAQ,GAAG,EAGhF,CACAsB,aACI,MAAO,CACHjD,OAAQ,CAACzwF,KAAK6zF,WAAY7zF,KAAK8zF,aAC/BxC,OAAO,EACPI,IAAI,EAEZ,CACAsB,OACI,MAAO,CACHvC,OAAQ,CAACzwF,KAAK+zF,KACd5B,YAAY,EAEZE,IAAM7vD,GAAUxiC,KAAK0zC,QAAQsgD,YAAYxxD,EAAM4vD,SAEvD,CACAnzC,OACI,MAAO,CACHwxC,OAAQ,CAACzwF,KAAKi0F,MAAOj0F,KAAKk0F,WAAYl0F,KAAKm0F,OAC3C7C,OAAO,EAEPe,IAAM7vD,GAAUxiC,KAAK0zC,QAAQ0gD,YAAY5xD,EAAM4vD,QAAQ,IAE/D,CACAW,WACI,MAAO,CACHtC,OAAQ,CAACzwF,KAAKi0F,MAAOj0F,KAAKq0F,WAC1B/C,OAAO,EAEPe,IAAM7vD,GAAUxiC,KAAK0zC,QAAQ4gD,gBAAgB9xD,EAAM4vD,QAAQ,IAEnE,CACAa,OACI,MAAO,CACHxC,OAAQ,CAACzwF,KAAKu0F,SAAUv0F,KAAKw0F,OAAQx0F,KAAKy0F,QAASz0F,KAAK00F,UACxDpD,OAAO,EAEf,CACAmD,UACI,MAAO,CACHhE,OAAQ,CAACzwF,KAAK8yF,MAAO9yF,KAAKw0F,QAC1BrC,YAAY,EAEpB,CACAqC,SAEI,MAAO,CACH/D,OAAQ,CAACzwF,KAAK20F,IAAK30F,KAAK40F,OAAQ50F,KAAK60F,KAErCxC,IAAM7vD,GAAUxiC,KAAK0zC,QAAQohD,cAActyD,EAAM4vD,QAAQ,GAAY5vD,EAAM4vD,QAAQ,GAJ1DluF,MAAM,GAAI,IAM3C,CACA2wF,MACI,MAAO,CACHpE,OAAQ,CAACzwF,KAAK+0F,KAAM/0F,KAAKg1F,MACzBtD,IAAI,EAEZ,CACAiD,MACI,MAAO,CAAE7D,MAAO,uBACpB,CACAkE,OACI,MAAO,CAAElE,MAAO,cACpB,CACAiE,OACI,MAAO,CAAEjE,MAAO,cACpB,CACA2C,WACI,MAAO,CAAE3C,MAAO,WACpB,CACA6C,SACI,MAAO,CAAE7C,MAAO,SACpB,CACAgD,cACI,MAAO,CAAEhD,MAAO,cACpB,CACA+C,aACI,MAAO,CAAE/C,MAAO,8CACpB,CACAuD,YACI,MAAO,CAAEvD,MAAO,YACpB,CACAqD,QACI,MAAO,CAAErD,MAAO,eACpB,CACAsC,SACI,MAAO,CAAEtC,MAAO,MACpB,CACAwC,SACI,MAAO,CAAExC,MAAO,MACpB,CACAgC,QACI,MAAO,CAAEhC,MAAO,MACpB,CACAiD,MACI,MAAO,CAAEjD,MAAO,MACpB,CACAmD,QACI,MAAO,CAAEnD,MAAO,MACpB,CACAoD,aACI,MAAO,CAAEpD,MAAO,OACpB,CACA8D,SACI,MAAO,CAAE9D,MAAO,MACpB,CACAyD,WACI,MAAO,CAAEzD,MAAO,MACpB,CACA4D,WACI,MAAO,CAAE5D,MAAO,MACpB,CACA4B,MACI,MAAO,CAAE5B,MAAO,IACpB,EAEG,MAAMmE,GACTxzF,YAAY8sB,GACRvuB,KAAKk1F,MAAQ,GACbl1F,KAAK85C,KAAO,EACZ95C,KAAKquB,QAAU,CAAC,EAChBruB,KAAKuuB,SAAWA,CACpB,EAEG,MAAM4mE,GACT1zF,YAAYhC,GACRO,KAAKo1F,YAAc,GACnBp1F,KAAKP,QAAUA,EACfO,KAAKi3B,OACT,CACAA,MAAM5I,GACFruB,KAAKquB,QAAUhuB,OAAOmX,OAAO,CAAEwb,KAAM,OAAQ9E,KAAM,UAAYG,GAC/DruB,KAAKq1F,SAAW,CAAErlE,MAAO,GAAI1T,YAAa,IAC1Ctc,KAAKs1F,gBAAkB,IACvBt1F,KAAKu1F,YACT,CACAvhD,aACI,OAAOh0C,KAAKP,OAChB,CACA+1F,cACI,OAAOx1F,KAAKq1F,QAChB,CACAI,cAAcC,GACV11F,KAAKo1F,YAAY3gF,KAAKihF,EAC1B,CACAH,aACI,GAAE,cACFv1F,KAAK21F,MAAQ,IAAIV,GAAMj1F,KAAKs1F,gBAChC,CACAtB,YAAYl6C,GACR,GAAE,eAAgBA,GACdA,IACA95C,KAAK21F,MAAM77C,KAAOA,EAAKl0C,OAC/B,CACA0uF,gBAAgB/lE,GACZ,GAAE,mBAAoBA,GACtBvuB,KAAKs1F,gBAAkBt1F,KAAK21F,MAAMpnE,SAAWA,GAAYvuB,KAAKs1F,eAClE,CACAlB,YAAYniF,GACR,GAAE,eAAgBA,GACdA,IACAjS,KAAK21F,MAAM1jF,KAAOA,EAC1B,CACA6iF,cAAc30F,EAAKiB,GACf,GAAE,sBAAuBjB,EAAK,SAAUiB,GACxCpB,KAAK21F,MAAMtnE,QAAQluB,GAAOiB,CAC9B,CACAw0F,QAAQz1F,EAAKu+D,EAAOtiD,GAChB,GAAE,WAAYjc,EAAKu+D,EAAOtiD,GAC1Bpc,KAAK21F,MAAMT,MAAMzgF,KAAK,CAClBtU,IAAKA,EACLu+D,QACAtiD,UAER,CACAw3E,cAAczzF,EAAKu+D,EAAOtiD,GACtB,GAAE,iBAAkBjc,EAAKu+D,EAAOtiD,GAChCpc,KAAK41F,QAAQz1F,EAAKu+D,EAAOtiD,EAC7B,CAEAm3E,SAASvjE,GACL,GAAE,cACsB,iBAAbA,EAAM,GACbhwB,KAAK4zF,cAAc5jE,EAAM,IAGzBA,EAAMpb,SAAShQ,IACPA,GACA5E,KAAK41F,WAAWhxF,EAAE,IAG9B,GAAE,WACN,CACAiuF,cACI,GAAE,eACF,MAAM,QAAEpzF,GAAYO,KACpB,IAAKP,EACD,OACJ,MAAM4uB,EAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKquB,SAAUruB,KAAK21F,MAAMtnE,SAGpE2E,EAAOtvB,EAAQ2qB,EAAQ2E,KAAM,eAAgB,+BAA+B7kB,cAE5E+f,EAAOxqB,EAAQ2qB,EAAQH,KAAM,eAAgB,+BAA+B/f,eAC5E,MAAE+mF,EAAK,SAAE3mE,EAAQ,KAAEurB,EAAI,KAAE7nC,GAASjS,KAAK21F,MAIvCE,EAAsBv6D,GAAMhf,YAC5BhJ,EAAO4hF,EAAM3hF,KAAKuiF,IACpB,IAAIjoF,EACJ,OAAOioF,EAAU31F,KACZ01F,EAAoB/hF,SAAoC,QAA1BjG,EAAKioF,EAAUp3B,aAA0B,IAAP7wD,EAAgBA,EAAK,IAAMioF,EAAUp3B,MAAQ,IAC9G,IACAo3B,EAAU15E,MAAM,IAElB+0C,EAAqB,SAATn+B,EAEZ4G,EAA2E,MAAnE3nB,aAAmC,EAASA,EAAK9D,eACzD1O,EAAQs2F,UAAU,CAAExnE,WAAUurB,SAC9Br6C,EAAQqD,UAAU,CAAEwQ,OAAMib,WAAUurB,OAAM7nC,OAAMic,OAAMijC,cACvDA,GACDv3B,EAAK00B,iBAA0B,OAATt7B,EAAgB6V,GAAKC,GAAKD,GAAKE,MAEzD,MAAMzsB,EAAc,GACpB44E,EAAMtgF,SAAQ,CAACkhF,EAAWxjF,KACtB,MAAMosD,EAAQo3B,EAAUp3B,MACxB,GAAqB,iBAAVA,EAAoB,CAC3B,MAAM9jD,EAAanb,EAAQqC,WAAW,CAAEmQ,KAAMysD,IAC9C9kC,EAAKgO,YAAYhtB,EAAYtI,GAC7BgK,EAAY7H,KAAKmG,EACrB,MAEI0B,EAAY7H,UAAK7Q,EACrB,IAGJ,IAAK,IAAI8E,EAAI,EAAGA,EAAIoxC,EAAMpxC,IACtBtG,GAAI4zF,eAAe,CAACp8D,GAAO,CAAE6vB,KAAK,IACtCzpD,KAAKo1F,YAAYxgF,SAAS8gF,GAAeA,EAAWrnE,EAASuL,EAAM55B,QACnEA,KAAKq1F,SAASrlE,MAAMvb,KAAKmlB,GACzB55B,KAAKq1F,SAAS/4E,YAAY7H,KAAK6H,GAC/Btc,KAAKu1F,YACT,EAKJ,SAASU,GAAM5nE,EAASuL,QACDh2B,IAAfyqB,EAAQrc,IAEZ4nB,EAAK7mB,aAAa,KAAMsb,EAAQrc,GACpC,CAEA,MAAMkkF,GAAsB,UAI5B,SAASC,GAAS9nE,EAASuL,QACDh2B,IAAlByqB,EAAQnc,OAEZmc,EAAQnc,MAAMvJ,MAAMutF,IAAqBthF,SAASjB,GAAcimB,EAAK1jB,SAASvC,IAClF,CAIA,MAAM2+E,GACF7wF,YAAY4sB,EAAU,CAAC,GACnBruB,KAAKo2F,SAAW,CACZloE,KAAM,SACN+pC,KAAM,MACNjlC,KAAM,QAEVhzB,KAAKg3B,WAAW3I,EACpB,CASAnoB,IAAIkwF,GAEA,OADAp2F,KAAKo2F,SAAW/1F,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKo2F,UAAWA,GACzDp2F,IACX,CAKAg3B,WAAW3I,GACP,IAAIxgB,EAAIoF,EAER,MAAMxT,EAAU4uB,EAAQ5uB,QAClBi0C,EAAqC,QAA1B7lC,EAAKwgB,EAAQqlB,eAA4B,IAAP7lC,EAAgBA,EAAK,IAAIsnF,GAAQ11F,GAQpF,OAPAO,KAAKquB,QAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAE49E,YAAa,CAACa,GAAOE,GAAUljD,GAAaojD,cAAe9rC,GAAe8rC,eAAgBC,cAAc,GAASjoE,GAAU,CAAE5uB,UACtKi0C,YACJ1zC,KAAKP,QAAUA,EACfO,KAAK0zC,QAAUA,EACf1zC,KAAKuwF,QAAU,IAAIgC,GAAiBvyF,KAAK0zC,SACzC1zC,KAAKu2F,OAAS,IAAIpG,GAAOnwF,KAAKuwF,SACM,QAAnCt9E,EAAKjT,KAAKquB,QAAQ+mE,mBAAgC,IAAPniF,GAAyBA,EAAG2B,SAAS8gF,GAAe11F,KAAKy1F,cAAcC,KAC5G11F,IACX,CACA8W,WAAW/B,GAEP,OADA/U,KAAKP,QAAQqX,WAAW/B,GACjB/U,IACX,CACAwI,MAAMxE,EAAMqqB,EAAU,CAAC,GACnBruB,KAAK0zC,QAAQzc,MAAM5I,GACnB,MAAMjhB,EAASpN,KAAKu2F,OAAO/tF,MAAMxE,GACjC,IAAKoJ,EAAO8jF,SAAWlxF,KAAKquB,QAAQioE,aAEhC,MADA,GAAElpF,GACI,IAAIjK,EAAa,uBAAyBa,GAEpD,OAAOoJ,CACX,CACA6uC,KAAKjsB,EAAO3B,GAER,OADAruB,KAAKP,QAAQ07D,KAAK,CAAEnrC,QAAO3B,YACpB2B,CACX,CACAwnB,OAAOxnB,EAAO3B,GAEV,OADAruB,KAAKP,QAAQ6jF,OAAO,CAAEtzD,QAAO3B,YACtB2B,CACX,CACAA,MAAMhsB,EAAMqqB,EAAU,CAAC,GAGnB,OAFAA,EAAUhuB,OAAOmX,OAAO,CAAE0W,KAAMluB,KAAKo2F,SAASloE,KAAM8E,KAAMhzB,KAAKo2F,SAASpjE,MAAQ3E,GAChFruB,KAAKwI,MAAMxE,EAAMqqB,GACVruB,KAAK0zC,QAAQ8hD,cAAcxlE,KACtC,CACAuW,MAAMvW,EAAO3B,EAAU,CAAC,GAEpB,OADAA,EAAUhuB,OAAOmX,OAAO,CAAEygD,KAAMj4D,KAAKo2F,SAASn+B,MAAQ5pC,GAC/CruB,KAAKP,QAAQs4D,MAAM1pC,GAAS6rC,aAAalqC,EACpD,CACAylE,cAAcC,GACV11F,KAAK0zC,QAAQ+hD,cAAcC,EAC/B,EAEJpD,GAAU/vD,OAAQ,EC1ZlB,MAAMi0D,GAAY,uEACX,MAAMT,WAAkB/yF,GAChBtB,sBACP,OAAOG,EAASk0F,SACpB,CACAt0F,YAAYg1F,GACR,IAAKA,EACD,MAAM,IAAItzF,EAAa,eAAgBqzF,IAE3C,IAAIz8C,EACJ,GAAyB,iBAAd08C,EAEP18C,EAAa,CAAExrB,SAAUkoE,OAExB,IAAyB,iBAAdA,EAIZ,MAAM,IAAItzF,EAAa,eAAgBqzF,IAHvCz8C,EAAa08C,CAIjB,CACAlzF,MAAMw2C,GAEN/5C,KAAK05B,SAAS,EAClB,CAIAyN,SACI,OAAO,CACX,CACA/P,SAASC,GAEL,OADA9zB,MAAM6zB,SAASC,GACRr3B,IACX,CAGAk4C,qBAAqBC,GAEjB,OAAOn4C,IACX,CACAu4C,YAEI,OADAv4C,KAAKw4C,cAAe,EACbx4C,IACX,CACA+V,OAEI/V,KAAKsW,cACL,IAAK,IAAI5N,EAAI,EAAGA,EAAI1I,KAAKi2C,UAAUrwC,SAAU8C,EAAG,CAC5C,MAAMi/B,EAAW3nC,KAAKi2C,UAAUvtC,GAC5B3G,EAAa4lC,KACbA,EAAS7wB,WAAW9W,KAAK6W,cACzB8wB,EAAS9xB,gBAEjB,CACJ,ECvDG,MAAM6gF,WAAkBh0F,GAChBhB,sBACP,OAAOG,EAAS60F,SACpB,CACAj1F,YAAY6tB,EAAOyqB,EAAY1rB,GAC3B9qB,MAAMw2C,GACN/5C,KAAKquB,QAAUhuB,OAAOmX,OAAO,CAAEm/E,aAAa,EAAO3yF,KAAM,GAAKqqB,GAE9DruB,KAAKq2C,aAAer2C,KAAKquB,QAAQsoE,YACjC32F,KAAK4zE,SAAStkD,EAClB,CACAskD,SAAStkD,GAGL,OAFAtvB,KAAKsvB,MAAQA,EACbtvB,KAAK05B,SAAS15B,KAAKsvB,MAAMxe,aAAarG,OAC/BzK,IACX,CACA4W,iBACI,OAAO5W,KAAKsvB,MAAM1Y,gBACtB,CACA2hC,YAKI,OAJKv4C,KAAKw4C,cAAgBx4C,KAAKm6B,iBAC3Bn6B,KAAKm6B,gBAAgBoe,YAEzBv4C,KAAKw4C,cAAe,EACbx4C,IACX,CACAi1D,gBACI,MAAMr/B,EAAM51B,KAAK8V,eACjB,IAAK,IAAIpN,EAAI,EAAGA,EAAI1I,KAAKi2C,UAAUrwC,OAAQ8C,IAAK,CAC5C,MAAMi/B,EAAW3nC,KAAKi2C,UAAUvtC,GAChCi/B,EAAS7wB,WAAW8e,GACpB+R,EAAS9xB,eACb,CACJ,CAEA+lC,gBACI,OAAO57C,KAAKsvB,MAAMxe,aAAarG,KACnC,CACAsL,OACI,MAAMshB,EAAQr3B,KAAKo4B,aACbxC,EAAMyB,EAAMvhB,eAClB9V,KAAKsW,cACLtW,KAAK8U,WAAW8gB,GAChBA,EAAI8V,UAAU,YAAa1rC,KAAK6S,aAAa,OAE7C,MAAMyc,EAAQtvB,KAAKsvB,MACdA,EAAMzY,cACPyY,EAAMxY,WAAW8e,GAErBtG,EAAM8H,SAASC,GACf/H,EAAMmI,UAAUJ,EAAMmM,YAAYxjC,KAAKquB,QAAQrqB,MAAQqzB,EAAMiB,iBAC7D,MAAM30B,EAAI3D,KAAKi3C,kBAAoBj3C,KAAK+4C,eAAiB/4C,KAAK4vB,WAAa,EAAI5vB,KAAK+4C,eACpFzpB,EAAM+I,cAAc10B,GACpB3D,KAAKi1D,gBACLr/B,EAAIgW,aACJ5rC,KAAK2V,aAAaigB,EACtB,ECvDG,MAAMtzB,WAAkBQ,GAChBpB,sBACP,OAAOG,EAASS,SACpB,CACWotD,gCACP,OAAO,CACX,CACWknC,mBACP,MAAO,GACX,CACAn1F,YAAYs4C,GACRx2C,MAAMlD,OAAOmX,OAAO,CAAEwjC,iBAAkBhtB,EAAOyC,oBAAsBnuB,GAAUs0F,MAAO37C,UAAW34C,GAAUotD,oBAAsB3V,IACjI/5C,KAAK62F,MAAQ98C,EAAW88C,QAAS,EACjC72F,KAAK26D,MAAO,EACZ36D,KAAKuxD,iBACLvxD,KAAKyK,MAAQ,CACjB,CACA0jD,mBACI,GAAInuD,KAAK6uD,wBACL,OAAO7uD,KAAK6uD,wBAEhB,MAAMjU,EAAa56C,KAAK0vC,gBACxB,GAAIkL,EAAY,CACZ,IAAIk8C,EAAMvzF,MAAM4qD,mBAChB,GAAIvT,EAAW5nB,KAAM,CACjB,MAAM+jE,EAAiB/2F,KAAK21D,oBAC5BmhC,GAAOjuD,GAAKI,OAAS6tD,GAAOC,EAAiBluD,GAAKI,MACtD,CACA,OAAO6tD,CACX,CACA,OAAO,CACX,CACAnhC,oBACI,OAAO31D,KAAK8nC,eAAekT,iBAAmBhtB,EAAOyC,mBACzD,CACA1a,OACIxS,MAAMwS,OACN/V,KAAKsW,cACL,MAAM0c,EAAOhzB,KAAKgzB,KAClB,GAAIhzB,KAAK62F,OAAS7jE,EAAM,CACpB,MAAM+jE,EAAiB/2F,KAAK21D,oBAEtBqhC,EAAcD,EAAiB,IACrC,IAAIE,EACJ,MAAMh7C,EAAOj8C,KAAKi8C,KAClB,GAAIA,EAEKA,EAAKvD,eACNuD,EAAKxD,aAETw+C,EAAYj3F,KAAKk3F,yBAAyB,EAAIF,EAAa,EAAIA,EAAa,CACxEhkE,KAAM,EAAIgkE,EACV/6C,KAAM,EAAI+6C,QAGb,CACD,MAAMrtD,EAAiB3pC,KAAK8vC,mBACtBqnD,EAAiBn3F,KAAKqyD,oBACtBmD,EAAiBxiC,EAAKsX,YAC5B,IAAI3mC,EAAI3D,KAAK+4C,eACTjwC,EAAI6gC,IAAmBd,GAAKE,KAC1BouD,EAAe3tD,MAAQgsB,EACvB2hC,EAAe1tD,SAAW+rB,EAChC,MAAM4hC,EAAuBztD,IAAmBd,GAAKE,KAAO/oC,KAAK46C,WAAWznB,oBAAsBnzB,KAAK46C,WAAW1nB,kBAClH,IAAImkE,EAAiBrpE,EAAO6C,YAC5BwmE,GAAkBA,EAAiB,IACnCA,GAAkBD,EAClBtuF,GAAKuuF,EAAiBN,EAAiBptD,EACvC,MAAM4kB,EAAU5kB,IAAmBd,GAAKC,GAClC,CACE5+B,GAAI,EACJE,GAAI,EACJC,GAAI,GACJC,IAAK,GAEP,CACEJ,IAAK,EACLE,GAAI,EACJC,GAAI,GACJC,GAAI,GAEZ3G,GAAK4qD,EAAQrkD,GAAK8sF,EAClBluF,GAAKylD,EAAQnkD,GAAK4sF,EAClBC,EAAY,CACR/sF,GAAIvG,EACJyG,GAAItB,EACJuB,GAAI1G,EAAI4qD,EAAQlkD,GAAK2sF,EACrB1sF,GAAIxB,EAAIylD,EAAQjkD,GAAK0sF,EAE7B,CAEA,MAAMphE,EAAM51B,KAAK8V,eACjB8f,EAAI5gB,OACJ4gB,EAAIlgB,aAAa,EAAIshF,GACrBphE,EAAIQ,YACJR,EAAIS,OAAO4gE,EAAU/sF,GAAI+sF,EAAU7sF,IACnCwrB,EAAIU,OAAO2gE,EAAU5sF,GAAI4sF,EAAU3sF,IACnCsrB,EAAI+f,YACJ/f,EAAIhH,SACJgH,EAAIhgB,SACR,CACJ,CACAshF,yBAAyBI,EAAiBC,EAAiBC,GACvD,MAAMv7C,EAAOj8C,KAAKi8C,KAClB,IAAKA,EACD,MAAM,IAAI94C,EAAa,SAAU,mCACrC,MAAMs0F,EAAax7C,EAAKotC,MAElBrmB,EADgB/mB,EAAKjsB,MAAMisB,EAAKjsB,MAAMpqB,OAAS,KAAO5F,MAC5B,EAAI,EAC9B03F,EAAazyF,KAAK0yF,KAAKF,EAAaz0B,GAEpC40B,EACE3yF,KAAKs/D,IAAImzB,GAAcH,EADzBK,EAEE3yF,KAAKw/D,IAAIizB,GAAcH,EAE/BD,GAAmBt3F,KAAK8vC,mBACxB,MAAM+nD,EAAc5yF,KAAK0yF,MAAMC,EAAkBN,GAAmBM,GAC9DE,EAAqB7yF,KAAKs/D,IAAIszB,GAAeL,EAAYxkE,KAAOgwC,EAChE+0B,EAAqB9yF,KAAKw/D,IAAIozB,GAAeL,EAAYxkE,KACzDglE,EAAqB/yF,KAAKs/D,IAAIszB,GAAeL,EAAYv7C,KAAO+mB,EAChEi1B,EAAqBhzF,KAAKw/D,IAAIozB,GAAeL,EAAYv7C,KACzDka,EAAQn2D,KAAKyxC,WACbymD,EAASj8C,EAAKjsB,MAAM,GAAGyhB,WACvB0mD,EAAQl8C,EAAKyvC,kBAAoBv1B,EAAQ+hC,GAAUT,EAOzD,MANY,CACRvtF,GAAIisD,EAAQ2hC,EACZ1tF,GAAI+tF,EAAQb,EAAkBS,EAC9B1tF,GAAI8rD,EAAQyhC,EAAkB50B,EAASg1B,EACvC1tF,GAAI6tF,EAAQP,EAAkBK,EAGtC,ECpIG,MAAMG,WAAmB11F,GACjBhB,sBACP,OAAOG,EAASu2F,UACpB,CACA32F,YAAYsuB,EAASi8C,EAAeC,GAChC1oE,MAAM,CAAEgrB,SAAU,MAClBvuB,KAAK8hC,aAAe,IAAIiqC,GAAah8C,EAASi8C,EAAeC,GAE7DjsE,KAAKq2C,cAAe,CACxB,CAGA6B,qBAAqBC,GAEjB,OAAOn4C,IACX,CACAu4C,YAII,OAHAv4C,KAAKw4C,cAAe,EACpBx4C,KAAK8hC,aAAa1K,SAASp3B,KAAKo4B,cAChCp4B,KAAK05B,SAAS15B,KAAK8hC,aAAalS,YACzB5vB,IACX,CACA+V,OACI,MAAM6f,EAAM51B,KAAKo4B,aAAatiB,eAC9B9V,KAAKsW,cACLtW,KAAK8hC,aAAaz4B,KAAKrJ,KAAK+4C,gBAC5B/4C,KAAK8hC,aAAahrB,WAAW8e,GAC7B51B,KAAK8hC,aAAa/rB,MACtB,ECrBJ,IAAIsiF,GAYG,MAAMC,WAAyBvkF,EACvBrS,sBACP,OAAOG,EAASy2F,gBACpB,CAMA72F,YAAY82F,EAAoBlqE,GAC5B,IAAIxgB,EACJtK,QACAvD,KAAKw4F,GAAK,CAAEp/D,KAAMjvB,IAAKmvB,MAAOnvB,KAC9BnK,KAAKy4F,gBAAiB,EACtBz4F,KAAK04F,iBAAkB,EACvB14F,KAAK24F,kBAAmB,EACxB34F,KAAK44F,kBAAmB,EACxB54F,KAAKu4F,mBAAqBA,EAE1Bv4F,KAAKy4F,eAAiD,iBAAzBpqE,EAAQwqE,aACrC74F,KAAK04F,gBAAmD,iBAA1BrqE,EAAQyqE,cACtC94F,KAAK24F,iBAAqD,iBAA3BtqE,EAAQ0qE,eACvC/4F,KAAK44F,iBAAqD,iBAA3BvqE,EAAQ2qE,eACvC,MAAMv2D,EAAYzU,EAAO0U,mBACzB1iC,KAAK8nC,eAAiBznC,OAAOmX,OAAO,CAAEyhF,aAAa,EAAOC,aAAa,EAAMC,aAAc,GAAKC,mBAAsE,QAAjDvrF,EAAK40B,EAAUrxB,aAAa,uBAAoC,IAAPvD,EAAgBA,EAAKmgB,EAAOyC,oBAAqBzsB,KAAM,EAAG6wE,yBAA0B7mD,EAAOiD,oBAAqBooE,gBAAiB,EAAGC,2BAA4BtrE,EAAOyC,oBAAqBooE,aAAc,EAAGC,cAAe,EAAGC,eAAgB,EAAGC,eAAgB,GAAK3qE,GACrb,MAAM+kD,EAAgB3wC,EAAUrxB,aAAa,mBAAoB,GACjEpR,KAAK8nC,eAAeqxD,aAAe/lB,CACvC,CACAmmB,QACI,OAAOv5F,KAAKw4F,EAChB,CACAphE,SAASC,GAEL,OADAr3B,KAAKq3B,MAAQA,EACNr3B,IACX,CACA+6B,WACI,OAAO/6B,KAAKq3B,KAChB,CACAe,aACI,OAAO10B,EAAQ1D,KAAKq3B,MAAO,UAAW,iCAC1C,CACAmiE,SAASniE,EAAOzB,EAAKwD,EAAME,EAAOmgE,GAC9B,MAAMprE,EAAUruB,KAAK8nC,eACfh/B,EAAIuuB,EAAMmM,YAAYnV,EAAQrqB,MAC9B6wC,EAA2B,IAAhBvb,EAAQF,GAGzB,IAAIsgE,EAFJtgE,GAAQyb,EACRvb,GAASub,EAGL6kD,EADA15F,KAAK24F,iBACwC,GAAzBtqE,EAAQ0qE,eAGc,IAAtBU,EAExB,MAAME,EAAiBtrE,EAAQgrE,gBACzB5mD,EAAM3pC,EAAI2wF,EACVG,EAAM9wF,EAAI2wF,EACVI,EAAezgE,EAAOugE,EACtBG,EAAgBxgE,EAAQqgE,EACxBI,EAAUjxF,EAAI4wF,EACdM,EAAalxF,EAAI4wF,EACvB9jE,EAAI5gB,OACJ4gB,EAAIQ,YACJR,EAAIS,OAAO+C,EAAMqZ,GACjB7c,EAAIU,OAAOujE,EAAcpnD,GACzB7c,EAAIU,OAAOujE,EAAcE,GACzBnkE,EAAIU,OAAOwjE,EAAeC,GAC1BnkE,EAAIU,OAAOwjE,EAAernD,GAC1B7c,EAAIU,OAAOgD,EAAOmZ,GAClB7c,EAAIU,OAAOgD,EAAOsgE,GAClBhkE,EAAIU,OAAOwjE,EAAeF,GAC1BhkE,EAAIU,OAAOwjE,EAAeE,GAC1BpkE,EAAIU,OAAOujE,EAAcG,GACzBpkE,EAAIU,OAAOujE,EAAcD,GACzBhkE,EAAIU,OAAO8C,EAAMwgE,GACjBhkE,EAAI+f,YACJ/f,EAAIa,MACR,CACAwjE,YAAY5iE,EAAOzB,EAAKwD,EAAME,EAAOmgE,GACjC,MAAMS,EAAKj1F,KAAK4C,MAAM7H,KAAKu4F,mBAAqB,GAC1C3zF,EAAI5E,KAAKu4F,mBAAqB,EAC9B4B,EAAKl1F,KAAK4C,MAAMjD,EAAI,GACpBw1F,EAAKx1F,EAAI,EACTypB,EAAUruB,KAAK8nC,eAGrBuwD,QAAiBz0F,EACjB,MAAMsY,EAlGd,WACI,IAAKm8E,GAAgB,CACjB,MAAM/mC,EAAW,IAAIlF,GAAS,CAAE79B,SAAU,IAAKi+B,UAAW,MAC1D6rC,GAAiB,CACbr9C,iBAAkBsW,EAASxpB,eAAekT,iBAC1CyR,WAAY6E,EAAS7E,WACrBhiD,MAAO6mD,EAAS1hC,WAExB,CACA,OAAOyoE,EACX,CAwFqBgC,GACPC,EAAajsE,EAAQirE,2BACrBiB,EAAar+E,EAAKzR,OAAS6vF,EAAap+E,EAAK8+B,kBAC7C7pC,EAAS,CACX,EAAG,CACC1G,MAAoB,GAAb8vF,EACP7vF,OAAQ+uF,GAEZ,EAAG,CACChvF,MAAO8vF,IAIT5oD,EAAU3xC,KAAK44F,iBAAmBvqE,EAAQ2qE,eAAiB,GAEjE,IAAIr1F,EAAIy1B,EAAwB,IAAhBE,EAAQF,GAAsB,IADhC8gE,EAAK/oF,EAAO,GAAG1G,MAAQ0vF,EAAKhpF,EAAO,GAAG1G,MAAQ2vF,EAAKjpF,EAAO,GAAG1G,OAASyvF,EAAKC,EAAKC,EAAK,GAAKzoD,GAExG,MAAM3tC,EAAOqqB,EAAQrqB,KACfuvD,EAAOl8B,EAAMmM,YAAYx/B,EAAO,GAChCw2F,EAAUnjE,EAAMmM,YAAYx/B,GAC5ByvD,EAAUp8B,EAAMmM,YAAYx/B,EAAO,GACzC4xB,EAAI5gB,OACJ4gB,EAAIpgB,eAAe,QACnBogB,EAAIlgB,aAAa,GACjB,IAAK,IAAIhN,EAAI,EAAGA,EAAIwxF,IAAMxxF,EACtBktB,EAAIuqB,SAASx8C,EAAG62F,EAAUrpF,EAAO,GAAGzG,OAAQyG,EAAO,GAAG1G,MAAO0G,EAAO,GAAGzG,QACvEkrB,EAAIuqB,SAASx8C,EAAG8vD,EAAUtiD,EAAO,GAAGzG,OAAQyG,EAAO,GAAG1G,MAAO0G,EAAO,GAAGzG,QACvE/G,GAAKwN,EAAO,GAAG1G,MAAQknC,EAE3B,IAAK,IAAIjpC,EAAI,EAAGA,EAAIyxF,IAAMzxF,EACtBktB,EAAIuqB,SAASx8C,EAAG62F,EAAUrpF,EAAO,GAAGzG,OAAQyG,EAAO,GAAG1G,MAAO0G,EAAO,GAAGzG,QACvE/G,GAAKwN,EAAO,GAAG1G,MAAQknC,EAE3B,IAAK,IAAIjpC,EAAI,EAAGA,EAAI0xF,IAAM1xF,EACtB+mB,EAAMk+B,YAAY/3B,EAAKjyB,EAAG4vD,EAAM+mC,EAAYp+E,EAAKuwC,YACjD9oD,GAAKwN,EAAO,GAAG1G,MAAQknC,EAE3B/b,EAAIhgB,SACR,CACAG,OACI,MAAM6f,EAAM51B,KAAK8V,eACjB9V,KAAKsW,cACL,MAAM+gB,EAAQr3B,KAAKo4B,aACnB,IAAIgB,EAAO/B,EAAMwlB,gBACbvjB,EAAQjC,EAAMq+C,cAKlB,MAAMoC,EAAezgD,EAAMqQ,aAAayV,GAAsBsC,OAClC,IAAxBq4B,EAAalyE,QAAgB3D,EAAU61E,EAAa,MACpD1+C,GAAQ0+C,EAAa,GAAGloD,YAE5B,MAAMvB,EAAUruB,KAAK8nC,eACjB9nC,KAAKy4F,iBACLr/D,EAAO/B,EAAMpuB,OAASolB,EAAQwqE,cAE9B74F,KAAK04F,kBACLp/D,EAAQjC,EAAMpuB,OAASouB,EAAMzH,WAAavB,EAAQyqE,eAEtD94F,KAAKw4F,GAAGp/D,KAAOA,EACfp5B,KAAKw4F,GAAGl/D,MAAQA,EAChB,MAAMmgE,EAAsBprE,EAAQwmD,yBAOpC,GANIxmD,EAAQ4qE,YACRj5F,KAAKi6F,YAAY5iE,EAAOzB,EAAKwD,EAAME,EAAOmgE,GAG1Cz5F,KAAKw5F,SAASniE,EAAOzB,EAAKwD,EAAME,EAAOmgE,GAEvCprE,EAAQ6qE,YAAa,CACrB,MAAMlmB,EAAW,IAAMhzE,KAAKu4F,mBACtBkC,EAAU,IAAI1nB,GAAcC,EAAU,GAAG,GAC/CynB,EAAQtmE,MAAQ9F,EAAQ+qE,mBACxBqB,EAAQpnB,WAAWL,GACnBynB,EAAQrjE,SAASC,GACjBojE,EAAQpxF,KAAK+vB,EAAwB,IAAhBE,EAAQF,GAA2D,GAA7CqhE,EAAQ9mB,UAAUrkD,MAAMxe,aAAarG,OAChFgwF,EAAQ3nB,WAAazkD,EAAQ8qE,YAC7BsB,EAAQ3jF,WAAW8e,GAAK7f,MAC5B,CACJ,EC3KJ,SAAS2kF,GAAe/pF,EAAMoE,EAASpR,EAAGmF,EAAGqrB,GACzC,MAAMwmE,EAAaC,GAAavqB,OAAO1/D,GACjC2e,EAAQ,IAAIG,EAAMkrE,EAAWt3F,KAAM8wB,EAAO,CAAE7yB,SAAU,iBAE5DguB,EAAM2I,OAAOljB,EAASpR,GAAK2rB,EAAMxe,aAAarG,MAAQujB,EAAOiD,qBAAuB,EAAGnoB,EAC3F,CAQA,MAAM8xF,WAAqB7mF,EACZrS,sBACP,OAAOG,EAAS+4F,YACpB,CAKAr1F,qBAAqByqB,GAEjB,OADc,IAAI4qE,GAAa5qE,EAEnC,CAEAzqB,uBAAuByqB,GACnB,MAAM6qE,EAAQ,IAAID,GAAa5qE,GAG/B,OAFA6qE,EAAMn7C,QAAQk7C,GAAa3oF,KAAK6oF,OAChCD,EAAME,cAAc,cACbF,CACX,CAEAt1F,sBAAsByqB,GAClB,MAAM6qE,EAAQ,IAAID,GAAa5qE,GAG/B,OAFA6qE,EAAMn7C,QAAQk7C,GAAa3oF,KAAKszC,MAChCs1C,EAAME,cAAc,YAAa,aAC1BF,CACX,CACAp5F,YAAYuuB,GACRzsB,QACAvD,KAAKgwB,MAAQA,EACbhwB,KAAKiS,KAAO2oF,GAAa3oF,KAAKszC,KAC9BvlD,KAAKgE,KAAO,EAEZhE,KAAKg7F,oBAAsB,GAC3Bh7F,KAAKi7F,oBAAsB,GAC3Bj7F,KAAK2X,YACL3X,KAAK8nC,eAAiB,CAClBozD,eAAgB,GAChBC,kBAAmB,EACnBC,mBAAoB,EACpB3lD,MAAO,QAEf,CAEAiK,QAAQztC,GAKJ,OAJAA,EAAuB,iBAATA,EAAoB2oF,GAAa38C,WAAWhsC,GAAQA,IACtD2oF,GAAa3oF,KAAKszC,MAAQtzC,GAAQ2oF,GAAa3oF,KAAK6oF,QAC5D96F,KAAKiS,KAAOA,GAETjS,IACX,CAKA+6F,cAAcM,EAASv6C,GAGnB,OAFA9gD,KAAKg7F,oBAAsBK,GAAW,GACtCr7F,KAAKi7F,oBAAsBn6C,GAAW,GAC/B9gD,IACX,CAEA8sD,QAAQ9oD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEAs7F,gBACI,MAAM1lE,EAAM51B,KAAK8V,eACjB,IACIylF,EACAC,EAFAC,GAAqB,EAIzBz7F,KAAKgwB,MAAMpb,SAAQ,CAACglB,EAAMtnB,EAAO0d,KAC7B,IAAIniB,EAEJ4tF,GAAsBA,EAEtB,MAAM93F,EAAIi2B,EAAKmf,eACTjwC,EAAI8wB,EAAKxB,aAAa6Z,kBAAkBjyC,KAAKgE,KAAO,GAE1D,GAAIL,EAAI43F,EACJ,MAAM,IAAIp4F,EAAa,uBAAwB,gEAKnD,MAAMu4F,EAAe1rE,EAAM1d,EAAQ,KAAOsnB,EACpC+hE,EAAe3rE,EAAM1d,EAAQ,KAAOsnB,EAC1C,IAAIpF,EAAU,EACd,MAAML,EAAsH,QAA7GtmB,EAAKmgB,EAAO0U,mBAAmBtxB,aAAa,gBAAgBqqF,EAAqB,OAAS,qBAAkC,IAAP5tF,EAAgBA,EAAKmgB,EAAOyC,oBAChK,GAAIgrE,EAGA,GADAjnE,EAAUmnE,EAAe,EAAI,EACzB37F,KAAKiS,OAAS2oF,GAAa3oF,KAAK6oF,OAAUa,EAgB1C/lE,EAAIQ,YACJR,EAAIS,OAAO1yB,EAAGmF,EAAI9I,KAAK8nC,eAAeozD,gBACtCtlE,EAAIU,OAAO3yB,EAAI6wB,EAAS1rB,GACxB8sB,EAAIhH,SACJgH,EAAI+f,iBAlBJ,GAAI31C,KAAKg7F,oBAAqB,CAE1B,MAAMzpD,EAAa3b,EAAI2sB,YAAYviD,KAAKg7F,qBAAqBvwF,MAC7DmrB,EAAIyc,SAASryC,KAAKg7F,oBAAqBr3F,EAAI4tC,EAAa,EAAGzoC,GAC3D0rB,EAAU+c,EAAa,EAAIvxC,KAAK8nC,eAAeqzD,iBACnD,MAGIT,GAAe,gBAAiB9kE,EAAKjyB,EAAGmF,EAAGqrB,GAC3CK,EAAU,GAAKx0B,KAAK8nC,eAAeqzD,uBAc3C3mE,EAAUknE,GAAgB,EAAI,EAE9B9lE,EAAIQ,YACJR,EAAIS,OAAOklE,EAAQC,GACnB5lE,EAAIU,OAAO3yB,EAAI6wB,EAAS1rB,GACxB8sB,EAAIU,OAAO3yB,EAAGmF,EAAI9I,KAAK8nC,eAAeozD,gBACtCtlE,EAAIhH,SACJgH,EAAI+f,YAGR4lD,EAAS53F,EAAI6wB,EACbgnE,EAAS1yF,CAAC,GAElB,CAKA8yF,WACI,MAAMhmE,EAAM51B,KAAK8V,eACjB,IAAI2lF,GAAqB,EAEzBz7F,KAAKgwB,MAAMpb,SAASglB,IAChB,IAAI/rB,EACJ4tF,GAAsBA,EACtB,MAAMpkE,EAAQuC,EAAKxB,aACbz0B,EAAIi2B,EAAKmf,eACTjwC,EAAIuuB,EAAM4a,kBAAkBjyC,KAAKgE,KAAO,GACxCmwB,EAAsH,QAA7GtmB,EAAKmgB,EAAO0U,mBAAmBtxB,aAAa,gBAAgBqqF,EAAqB,OAAS,qBAAkC,IAAP5tF,EAAgBA,EAAKmgB,EAAOyC,oBAChK,IAAI8gB,EAAa,EACbkqD,EACIz7F,KAAKg7F,qBACLzpD,EAAa3b,EAAI2sB,YAAYviD,KAAKg7F,qBAAqBvwF,MACvDmrB,EAAIyc,SAASryC,KAAKg7F,oBAAqBr3F,EAAI4tC,EAAa,EAAGzoC,IAG3D4xF,GAAe,gBAAiB9kE,EAAKjyB,EAAGmF,EAAGqrB,GAI3Cn0B,KAAKi7F,qBACL1pD,EAAa3b,EAAI2sB,YAAYviD,KAAKi7F,qBAAqBxwF,MACvDmrB,EAAIyc,SAASryC,KAAKi7F,oBAAqBt3F,EAAI4tC,EAAa,EAAGzoC,IAG3D4xF,GAAe,gBAAiB9kE,EAAKjyB,EAAGmF,EAAGqrB,EAEnD,GAER,CAEApe,OACI,MAAM6f,EAAM51B,KAAK8V,eACjB9V,KAAKsW,cACLsf,EAAI5gB,OACJ4gB,EAAIpgB,eAAexV,KAAK8nC,eAAe2N,OACvC7f,EAAItgB,aAAatV,KAAK8nC,eAAe2N,OACrC7f,EAAI7e,QAAQ/W,KAAKiX,UApMzB,YAAclT,GACN62F,GAAar4D,OACb1+B,EAAI,wBAAyBE,EACrC,CAkMQ,CAAE,2BACE/D,KAAKiS,OAAS2oF,GAAa3oF,KAAK8oE,SAAW/6E,KAAKiS,OAAS2oF,GAAa3oF,KAAK6oF,OAC3EllE,EAAIlgB,aAAa1V,KAAK8nC,eAAeszD,oBACrCp7F,KAAKs7F,iBAEAt7F,KAAKiS,OAAS2oF,GAAa3oF,KAAKszC,MACrCvlD,KAAK47F,WAEThmE,EAAIhgB,SACR,EAGJglF,GAAar4D,OAAQ,EACrBq4D,GAAazjF,UAAY,CACrB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWqhC,KACnBr/B,MAAO/B,EAAUkD,QAGrBmrF,GAAavqB,OAAS,CAClBwrB,cAAe,CACXx4F,KAAM,oBAEVy4F,cAAe,CACXz4F,KAAM,oBAIdu3F,GAAa3oF,KAAO,CAChBszC,KAAM,EACNw1B,QAAS,EACT+f,MAAO,GAGXF,GAAa38C,WAAa,CACtBl5C,KAAM61F,GAAa3oF,KAAKszC,KACxBi2B,QAASof,GAAa3oF,KAAK8oE,QAC3BghB,MAAOnB,GAAa3oF,KAAK6oF,OC9O7B,MAAMkB,GAAQ,CACV,EAAK,aACL,EAAK,cACL,EAAK,cACLnF,MAAO,kBAEJ,MAAMoF,WAAmBvF,GACjBh1F,sBACP,OAAOG,EAASo6F,UACpB,CACAx6F,YAAYwQ,EAAM8nC,EAAY1rB,GAK1B9qB,MAHc,IAAIksB,EADAusE,GAAM/pF,IAAS,aACE+b,EAAO0U,mBAAmBtxB,aAAa,mBAAoB,IAAK,CAC/F9P,SAAU,eAEDjB,OAAOmX,OAAO,CAAE+W,SAAU,IAAK4nB,aAAuB,UAATlkC,GAAoB8nC,GAAa1rB,EAC/F,ECHJ,SAAS6tE,GAActmE,EAAK0uC,EAAIE,EAAIt6D,EAAIE,EAAIC,EAAIC,GAE5CsrB,EAAIQ,YACJR,EAAIS,OAAOiuC,EAAIE,GACf5uC,EAAIU,OAAOpsB,EAAIE,GACfwrB,EAAIU,OAAOjsB,EAAIC,GACfsrB,EAAIU,OAAOguC,EAAIE,GACf5uC,EAAI+f,YACJ/f,EAAIa,MACR,CACA,MAAM0lE,WAAkBpoF,EACTrS,sBACP,OAAOG,EAASs6F,SACpB,CAaA16F,YAAYuuB,GACRzsB,QACAvD,KAAKq2D,SAASrmC,GACdhwB,KAAK+E,KAAO,GACZ/E,KAAK2X,YACL3X,KAAK8nC,eAAiB,CAElB+wD,aAAc,EACdC,cAAe,EAEf73C,WAAY,EAEZm7C,eAAWx4F,EAEXy4F,aAAa,EAEb5mD,WAAO7xC,EAEP04F,kBAAkB,EAClBC,gBAAgB,EAEhBC,iBAAkB,GAElBC,gBAAiBx3F,KAAKC,GAAK,EAE3Bw3F,uBAAwBP,GAAUQ,qBAAqBrsD,IACvDssD,mBAAoBT,GAAU52B,kBAAkBxsC,OAExD,CAEA04C,QAAQ1sE,GAEJ,OADA/E,KAAK+E,KAAOA,EACL/E,IACX,CAEAq2D,SAASrmC,GACL,IAAKA,EAAM4mC,aAAe5mC,EAAMk6B,UAC5B,MAAM,IAAI/mD,EAAa,eAAgB,2DAM3C,GAJK6sB,EAAM6mC,gBACP7mC,EAAM6mC,cAAgB,CAAC,IACtB7mC,EAAM8mC,eACP9mC,EAAM8mC,aAAe,CAAC,IACtB9mC,EAAM6mC,cAAcjxD,SAAWoqB,EAAM8mC,aAAalxD,OAClD,MAAM,IAAIzC,EAAa,eAAgB,qDAO3C,OALAnD,KAAKgwB,MAAQA,EACbhwB,KAAK42D,WAAa5mC,EAAM4mC,WACxB52D,KAAK62D,cAAgB7mC,EAAM6mC,cAC3B72D,KAAKkqD,UAAYl6B,EAAMk6B,UACvBlqD,KAAK82D,aAAe9mC,EAAM8mC,aACnB92D,IACX,CAEA68F,iBACI,MAAMjnE,EAAM51B,KAAK8V,eACXgyB,EAAiB9nC,KAAK8nC,eACxBA,EAAes0D,WACfxmE,EAAIqrC,YAAYn5B,EAAes0D,WAE/Bt0D,EAAemZ,YACfrrB,EAAIlgB,aAAaoyB,EAAemZ,YAEhCnZ,EAAeu0D,YACfzmE,EAAIkrC,WAAW,SAGflrC,EAAIkrC,WAAW,SAEvB,CAEAg8B,iBACI,MAAMlnE,EAAM51B,KAAK8V,eACjB8f,EAAI7e,QAAQ/W,KAAKiX,UACjB,MACMw+B,EADiBz1C,KAAK8nC,eACC2N,MACzBA,IACA7f,EAAIpgB,eAAeigC,GACnB7f,EAAItgB,aAAamgC,GAEzB,CAEAsnD,cAAcnnE,EAAKonE,EAAKC,GACpB,MAAMC,EAAcl9F,KAAK8nC,eAAew0D,kBAAoBt8F,KAAK8nC,eAAey0D,eAC1EryF,EAAK8yF,EAAIr5F,EACTyG,EAAK4yF,EAAIl0F,EACTuB,EAAK4yF,EAAIt5F,EACT2G,EAAK2yF,EAAIn0F,EAGTq0F,EAAWl4F,KAAKmH,MAAM/B,EAAKH,IAAOG,EAAKH,IAAOI,EAAKF,IAAOE,EAAKF,IAC/DgzF,GAASD,EAAWn9F,KAAK8nC,eAAe00D,iBAAmB,GAAKW,EACtE,IAAI9oB,EACAgpB,EACAzqB,EACA0qB,EACAt9F,KAAK8nC,eAAey0D,gBAAkBW,GACtC7oB,EAAQpvE,KAAK8vB,MAAM7qB,GAAMG,EAAKH,GAAMkzF,GACpCC,EAAQp4F,KAAK8vB,MAAM3qB,GAAME,EAAKF,GAAMgzF,KAGpC/oB,EAAQhqE,EACRgzF,EAAQ/yF,GAERtK,KAAK8nC,eAAew0D,kBAAoBY,GACxCtqB,EAAU1oE,GAAMG,EAAKH,IAAO,EAAIkzF,GAChCE,EAAUlzF,GAAME,EAAKF,IAAO,EAAIgzF,KAGhCxqB,EAAU1oE,EACVozF,EAAUlzF,GAEVpK,KAAK8nC,eAAe2N,QACpB7f,EAAIpgB,eAAexV,KAAK8nC,eAAe2N,OACvC7f,EAAItgB,aAAatV,KAAK8nC,eAAe2N,QAGzC7f,EAAIQ,YACJR,EAAIS,OAAOu8C,EAAS0qB,GACpB1nE,EAAIU,OAAO+9C,EAAOgpB,GAClBznE,EAAIhH,SACJgH,EAAI+f,YAEJ,MAAM4nD,EAAat4F,KAAK4hE,MAAMv8D,EAAKF,EAAIC,EAAKH,GAEtClB,EAAI/D,KAAK+C,IAAIhI,KAAK8nC,eAAe00D,iBAAmBv3F,KAAKs/D,IAAIvkE,KAAK8nC,eAAe20D,kBACvF,IAAIe,EACAC,EACAC,EACA7rB,EACA8rB,EACA9X,GACA7lF,KAAK8nC,eAAey0D,gBAAkBW,KACtCM,EAASD,EAAat4F,KAAKC,GAAKlF,KAAK8nC,eAAe20D,gBACpDiB,EAAQrzF,EAAKpF,KAAKs/D,IAAIi5B,GAAUx0F,EAChC6oE,EAAQvnE,EAAKrF,KAAKw/D,IAAI+4B,GAAUx0F,EAChCy0F,EAASF,EAAat4F,KAAKC,GAAKlF,KAAK8nC,eAAe20D,gBACpDkB,EAAWtzF,EAAKpF,KAAKs/D,IAAIk5B,GAAUz0F,EACnC68E,EAAWv7E,EAAKrF,KAAKw/D,IAAIg5B,GAAUz0F,EACnCkzF,GAActmE,EAAK8nE,EAAO7rB,EAAOxnE,EAAIC,EAAIqzF,EAAU9X,KAEnD7lF,KAAK8nC,eAAew0D,kBAAoBY,KACxCM,EAASD,EAAav9F,KAAK8nC,eAAe20D,gBAC1CiB,EAAQxzF,EAAKjF,KAAKs/D,IAAIi5B,GAAUx0F,EAChC6oE,EAAQznE,EAAKnF,KAAKw/D,IAAI+4B,GAAUx0F,EAChCy0F,EAASF,EAAav9F,KAAK8nC,eAAe20D,gBAC1CkB,EAAWzzF,EAAKjF,KAAKs/D,IAAIk5B,GAAUz0F,EACnC68E,EAAWz7E,EAAKnF,KAAKw/D,IAAIg5B,GAAUz0F,EACnCkzF,GAActmE,EAAK8nE,EAAO7rB,EAAO3nE,EAAIE,EAAIuzF,EAAU9X,GAE3D,CAEA9vE,OACI,MAAM6f,EAAM51B,KAAK8V,eACjB9V,KAAKsW,cACL,MAAMsgD,EAAa52D,KAAK42D,WAClB1M,EAAYlqD,KAAKkqD,UACjBpiB,EAAiB9nC,KAAK8nC,eAC5BlS,EAAI5gB,OACJhV,KAAK68F,iBAEL,IAAIe,EAAiB,CAAEj6F,EAAG,EAAGmF,EAAG,GAC5B+0F,EAAe,CAAEl6F,EAAG,EAAGmF,EAAG,GAC9B9I,KAAK62D,cAAcjiD,SAAQ,CAACkpF,EAAap1F,KACrC,MAAMq1F,EAAa/9F,KAAK82D,aAAapuD,GAErCk1F,EAAiBhnC,EAAWluB,mBAAmB,EAAGo1D,GAClDD,EAAe3zC,EAAUxhB,mBAAmB,EAAGq1D,GAC/C,MAAMC,EAAgBJ,EAAe90F,EAAI+0F,EAAa/0F,EAEtD80F,EAAej6F,GAAKizD,EAAW9lD,aAAaoqB,WAAa4M,EAAe+wD,aACxEgF,EAAal6F,GAAKumD,EAAUp5C,aAAamqB,UAAY6M,EAAegxD,cAEpE,MAAMmF,EAAiBrnC,EAAWlnB,gBAAgB9f,WAC1BgnC,EAAWxzB,cAAc06D,GAAa7uE,WACL,IAAlC2nC,EAAW9mB,qBAC9B8tD,EAAej6F,GAAKs6F,EAAiBn2D,EAAe+wD,cAGjC3uC,EAAU9mB,cAAc26D,GAAY9uE,YACH,IAAlCi7B,EAAUpa,qBAC5B+tD,EAAal6F,GAAKs6F,EAAiBn2D,EAAegxD,eAGtD8E,EAAe90F,GAAKk1F,GAAiB,EAAI,EACzCH,EAAa/0F,GAAKk1F,EAAgB,EAAI,EACtCh+F,KAAK+8F,cAAcnnE,EAAKgoE,EAAgBC,EAAa,IAEzDjoE,EAAIhgB,UAEJ,MAAM27B,EAAa3b,EAAI2sB,YAAYviD,KAAK+E,MAAM0F,MACxC2mE,EAAgBtpC,EAAe80D,mBACrC,IAAIj5F,EAAI,EACR,GAAIytE,IAAkB+qB,GAAU52B,kBAAkBlsC,KAC9C11B,EAAIi6F,EAAej6F,OAElB,GAAIytE,IAAkB+qB,GAAU52B,kBAAkBxsC,OAAQ,CAG3Dp1B,GAFgBk6F,EAAal6F,EAAIi6F,EAAej6F,GACrB,EAAIi6F,EAAej6F,EAC/B4tC,EAAa,CAChC,MACS6/B,IAAkB+qB,GAAU52B,kBAAkBhsC,QACnD51B,EAAIk6F,EAAal6F,EAAI4tC,GAGzB,IAAIzoC,EAAI,EACR,MAAMo1F,EAAoBp2D,EAAe40D,uBAYzC,OAXIwB,IAAsB/B,GAAUQ,qBAAqBrsD,IACrDxnC,EAAI8tD,EAAWx+B,aAAa4Z,iBAEvBksD,IAAsB/B,GAAUQ,qBAAqBhsD,SAC1D7nC,EAAI8tD,EAAWx+B,aAAa6Z,kBAAkBjkB,EAAOkD,0BAGzD0E,EAAI5gB,OACJhV,KAAK88F,iBACLlnE,EAAIyc,SAASryC,KAAK+E,KAAMpB,EAAGmF,GAC3B8sB,EAAIhgB,UACG5V,IACX,EAGJm8F,GAAUhlF,UAAY9W,OAAOmX,OAAO,CAAC,EAAGzD,EAAQoD,WAEhDglF,GAAUQ,qBAAuB,CAC7BrsD,IAAK,EACLK,OAAQ,GAEZwrD,GAAU52B,kBAAoBA,GCnQvB,MAAM44B,WAAepqF,EACbrS,sBACP,OAAOG,EAASs8F,MACpB,CACA18F,YAAY2sB,EAAS,CAAC,GAClB7qB,QACAvD,KAAKg3B,WAAW5I,GAChBpuB,KAAKo+F,WAAa,GAClBp+F,KAAKq+F,eAAiB,GACtBr+F,KAAKs+F,WAAa,EACtB,CAEAtnE,WAAW3I,EAAU,CAAC,GAClB,IAAKA,EAAQ5uB,QACT,MAAM,IAAI0D,EAAa,YAAa,kDAExCnD,KAAKP,QAAU4uB,EAAQ5uB,QACvBO,KAAKquB,QAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAE/X,QAASO,KAAKP,QAASkE,EAAG,GAAImF,EAAG,GAAI2B,MAAO,IAAK8zF,mBAAoB,GAAIC,WAAW,EAAOC,iBAAiB,EAAOC,gBAAgB,EAAOC,iBAAkB,EAAGC,WAAW,GAASvwE,GAAU,CAAEwwE,QAASx+F,OAAOmX,OAAO,CAAEyrE,MAAO,IAAO50D,EAAQwwE,SAAUC,cAAez+F,OAAOmX,OAAO,CAAC,EAAG6W,EAAQywE,kBACzS,IAAjC9+F,KAAKquB,QAAQowE,sBAAsD,IAAlBpwE,EAAQ5jB,QACzDzK,KAAKquB,QAAQmwE,WAAY,EAEjC,CAEAv1F,OACI,OAAOjJ,KAAKquB,QAAQ1qB,CACxB,CAEA0F,KAAK1F,GACD3D,KAAKquB,QAAQ1qB,EAAIA,EACjB3D,KAAKo+F,WAAWxpF,SAASvM,IACrBA,EAAEgB,KAAK1F,EAAE,GAEjB,CAEAuF,OACI,OAAOlJ,KAAKquB,QAAQvlB,CACxB,CAEAQ,KAAKR,GACD9I,KAAKquB,QAAQvlB,EAAIA,EACjB9I,KAAKo+F,WAAWxpF,SAASvM,IACrBA,EAAEiB,KAAKR,EAAE,GAEjB,CAEAi2F,YACI,OAAO/+F,KAAKo+F,UAChB,CAEAY,YACI,OAAOh/F,KAAKs+F,UAChB,CAEAxnF,WAAW/B,GAGP,OAFAxR,MAAMuT,WAAW/B,GACjB/U,KAAKP,QAAQqX,WAAW/B,GACjB/U,IACX,CAKAi/F,aAAahtF,EAAO,UAMhB,OALAjS,KAAKk/F,UAAYl/F,KAAKP,QAAQs5E,eAAe,CACzCI,UAAWn5E,KAAKo+F,WAAW,GAC3BhlB,aAAcp5E,KAAKo+F,WAAWp+F,KAAKo+F,WAAWx4F,OAAS,GACvDqM,SAEGjS,KAAKk/F,SAChB,CAeAC,SAAS/wE,GACL,IAAIvgB,EACJ,MAAMuxF,EAAe/+F,OAAOmX,OAAO,CAAEm9D,UAAU,GAASvmD,EAAOC,SACzDgJ,EAAgC,QAAvBxpB,EAAKugB,EAAOiJ,aAA0B,IAAPxpB,EAAgBA,EAAK7N,KAAKP,QAAQ00E,MAAM,CAAExwE,EAAG3D,KAAKquB,QAAQ1qB,EAAGmF,EAAG9I,KAAKquB,QAAQvlB,EAAG2B,MAAOzK,KAAKquB,QAAQ5jB,MAAO4jB,QAAS+wE,IAC5J3uB,EAAIpwE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAE6nF,WAAY,EAAGC,WAAY,EAAGC,kBAAkB,EAAOd,iBAAiB,GAASrwE,GAAS,CAAEC,QAAS+wE,IACvIxpE,EAAM51B,KAAK6W,aAWjB,OAVA45D,EAAErqC,OAAOxxB,SAAS2xB,IACdA,EACKzvB,WAAW8e,GACXwB,SAASC,GACToP,eACA7xB,SAASukD,GAAaA,EAAS/hC,SAASC,KAC7Cr3B,KAAKs+F,WAAW7pF,KAAK8xB,EAAM,IAE/BvmC,KAAKo+F,WAAW3pF,KAAK4iB,GACrBr3B,KAAKq+F,eAAe5pF,KAAKg8D,GAClBp5C,CACX,CAIAmoE,UAAUp5D,GACN,MAAMxQ,EAAM51B,KAAK6W,aACjBuvB,EAAOxxB,SAAS2xB,IACZA,EAAMzvB,WAAW8e,GACjB51B,KAAKs+F,WAAW7pF,KAAK8xB,EAAM,GAEnC,CAEAy0B,SACI,MAAMykC,EAAkBz/F,KAAKquB,QAAQwwE,QACrC,IAAIxhB,EAAe,EACnB,MAAM9wC,EAAY,IAAIuuB,GAAU2kC,GAChCz/F,KAAKusC,UAAYA,EACjB,IAAIzjC,EAAI9I,KAAKquB,QAAQvlB,EACjBu2D,EAAS,EACb,MAAMqgC,EAAqB,GAC3B1/F,KAAKo+F,WAAWxpF,SAAQ,CAAC+qF,EAAMrtF,KAC3BxJ,GAAQ62F,EAAKlpD,MAAMz2C,KAAKq+F,eAAe/rF,GAAO+sF,YAC9CM,EAAKr2F,KAAKR,GACVA,GAAQ62F,EAAKlpD,MAAMz2C,KAAKq+F,eAAe/rF,GAAOgtF,YAC9Cx2F,GAAQ62F,EAAKlpD,MAAMz2C,KAAKquB,QAAQkwE,oBAC5Bv+F,KAAKq+F,eAAe/rF,GAAOitF,mBAC3BG,EAAmBjrF,KAAK,CAAE3L,IAAGuuB,MAAOsoE,IACpC72F,GAAK,IAETu2D,EAASp6D,KAAK8E,IAAIs1D,EAAQsgC,EAAK9iD,gBAAgB,IAGnD78C,KAAKs+F,WAAW1pF,SAAS2xB,IACrBA,EAAME,eAAe7xB,SAASukD,IAC1B,MAAM9hC,EAAQ8hC,EAASp+B,WACnB1D,GACA8hC,EAAS/hC,SAASC,EAAM,GAC9B,IAGNkV,EAAUwuB,WAAW/6D,KAAKs+F,YAE1Bt+F,KAAKo+F,WAAWxpF,SAAS+qF,GAASA,EAAKlqB,cAAcpW,KACjDr/D,KAAKquB,QAAQmwE,WAAax+F,KAAKs+F,WAAW14F,OAAS,GACnDy3E,EAAe9wC,EAAUyxC,0BAA0Bh+E,KAAKs+F,YACxDt+F,KAAKquB,QAAQ5jB,MAAQ4yE,EAAelJ,GAAMvM,cAAgBvI,EAASr/D,KAAKquB,QAAQ1qB,GAChF3D,KAAKo+F,WAAWxpF,SAAS+qF,IACrBA,EAAKjmE,SAAS15B,KAAKquB,QAAQ5jB,MAAM,KAIrC4yE,EAAer9E,KAAKquB,QAAQuwE,UACtB5+F,KAAKquB,QAAQ5jB,OAAS40D,EAASr/D,KAAKquB,QAAQ1qB,GAC5C3D,KAAKquB,QAAQ5jB,OAAS40D,EAASr/D,KAAKquB,QAAQ1qB,GAAKwwE,GAAMC,eAE7Dp0E,KAAKs+F,WAAW14F,OAAS,GACzB2mC,EAAUyuB,OAAOh7D,KAAKs+F,WAAYt+F,KAAKquB,QAAQowE,gBAAkB,EAAIphB,EAAcr9E,KAAKquB,QAAQywE,eAEpGvyD,EAAUkM,aACV,IAAK,IAAI/vC,EAAI,EAAGA,EAAI1I,KAAKquB,QAAQswE,iBAAkBj2F,IAC/C6jC,EAAUy2C,KAAKyc,GAEnBz/F,KAAKq/D,OAASA,EACdr/D,KAAK0/F,mBAAqBA,EAC1B1/F,KAAK4/F,MAAQ92F,EACb9I,KAAK2J,YAAc,IAAIf,EAAY5I,KAAKquB,QAAQ1qB,EAAG3D,KAAKquB,QAAQvlB,EAAG9I,KAAKquB,QAAQ5jB,MAAOzK,KAAK4/F,MAAQ5/F,KAAKquB,QAAQvlB,GACjHqrE,GAAM0rB,mBAAmB7/F,KAAKo+F,WAClC,CAEAroF,OAEI,MAAM6f,EAAM51B,KAAK8V,eACjB,KAAK9V,KAAKusC,WAAcvsC,KAAKq/D,QAAWr/D,KAAK4/F,OAAU5/F,KAAK0/F,oBACxD,MAAM,IAAIv8F,EAAa,cAAe,yCAE1CnD,KAAKsW,cACDtW,KAAKquB,QAAQqwE,gBACb5jC,GAAUglC,cAAclqE,EAAK51B,KAAKusC,UAAWvsC,KAAKq/D,OAAQr/D,KAAKquB,QAAQvlB,EAAG9I,KAAK4/F,OAEnF5/F,KAAK0/F,mBAAmB9qF,SAASvO,IAC7BrG,KAAKs+F,WAAW1pF,SAAS2xB,IACrBA,EAAME,eAAe7xB,SAASukD,IACtBA,EAASp+B,aAAe10B,EAAEgxB,OAC1B30B,GAAKq9F,YAAYnqE,EAAKujC,EAAU9yD,EAAEyC,EAAE,GAC1C,GACJ,GAEV,EC1GG,MAAM5F,WAAgBF,GACdtB,sBACP,OAAOG,EAASqB,OACpB,CAGAzB,YAAYs4C,EAAY/J,GAAY,GAChCzsC,MAAMw2C,GACN/5C,KAAKggG,cAAgB,GAErBhgG,KAAK4wC,eAAiB,IACX5wC,KAAKigG,UAAU1sF,KAAK5P,GAAMA,EAAE8E,MAAKpD,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IAG1E1E,KAAKywC,YAAc,IACRzwC,KAAKigG,UAAU1sF,KAAK5P,GAAMA,EAAE8E,MAAKpD,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IAE1E1E,KAAKkgG,OAAQ,EAGblgG,KAAKigG,UAAYlmD,EAAWkmD,WAAa,GAEzCjgG,KAAK8nC,eAAiBznC,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK8nC,gBAAiB,CAExEkT,iBAAkBhtB,EAAO0B,qBAEzBsgB,YAEAmwD,UAAWnwD,EAEXowD,yBAAyB,EAEzB3rE,QAAS,EAETpF,MAAO,EAEPvgB,KAAM,GAAGpB,EAAKE,UAAUF,EAAKe,eACjCzO,KAAK46C,WAAa5sB,EAAO0hB,cAAc1vC,KAAKuuB,SAAUvuB,KAAK06C,UAC3Dh3C,EAAQ1D,KAAK46C,WAAY,eAAgB,gCAAgC56C,KAAKuuB,uBAAuBvuB,KAAK06C,aAC1G16C,KAAK6tD,YACD9T,EAAWpQ,eACX3pC,KAAKsuD,iBAAiBvU,EAAWpQ,gBAGjC3pC,KAAKsuD,iBAAiBzlB,GAAKC,IAG/B9oC,KAAKkgG,OAAQ,EACblgG,KAAKqhD,aACT,CACApqB,QAII,OAHA1zB,MAAM0zB,QACFj3B,KAAKq3B,OACLr3B,KAAKo3B,SAASp3B,KAAKq3B,OAChBr3B,IACX,CAGAqgG,SAASH,GAGL,OAFAlgG,KAAKkgG,MAAQA,EACblgG,KAAKqhD,cACErhD,IACX,CAEA6vC,UACI,QAAI7vC,KAAK8nC,eAAekI,SAG5B,CAEAme,mBACI,MAAMvT,EAAa56C,KAAK0vC,gBACxB,OAAoC,MAAhC1vC,KAAK6uD,wBACE7uD,KAAK6uD,wBAEZjU,EACO56C,KAAK8vC,qBAAuBjH,GAAKC,GAClC8R,EAAWxnB,0BACXwnB,EAAWvnB,4BAEd,CACX,CAEAguB,cACIrhD,KAAKggG,cAAgB,GACrBhgG,KAAKyK,MAAQ,EACb,IAAK,IAAI/B,EAAI,EAAGA,EAAI1I,KAAKigG,UAAUr6F,SAAU8C,EAAG,CAC5C,IAAI0mB,EAAOpvB,KAAKigG,UAAUv3F,GAAG0mB,KACzBpvB,KAAKkgG,QACL9wE,EAAO,IAAMA,EAAO,KACxB,MAAMwrB,EAAa5sB,EAAOsyE,gBAAgBlxE,EAAKnnB,WAAYjI,KAAK8nC,eAAezY,OAC/ErvB,KAAKggG,cAAcvrF,KAAKmmC,GACxB56C,KAAKyK,MAAQxF,KAAK8E,IAAI6wC,EAAWhrB,WAAY5vB,KAAKyK,MACtD,CAMAzK,KAAK46C,WAAWhrB,SAAW,IAAM5vB,KAAKyK,KAC1C,CAEA2sB,SAASC,GACL9zB,MAAM6zB,SAASC,GACf,MAAMzB,EAAMyB,EAAMxgB,aAGlB,GAFA7W,KAAK8W,WAAW8e,GAEZA,EAAK,CACL51B,KAAKyK,MAAQ,EACb,IAAK,IAAI/B,EAAI,EAAGA,EAAI1I,KAAKggG,cAAcp6F,SAAU8C,EAAG,CAChD,MAAMkyC,EAAa56C,KAAKggG,cAAct3F,GAChC3D,EAAO,GAAK61C,EAAW71C,KACF,MAAvBA,EAAK2pB,gBACLkH,EAAI5gB,OACJ4gB,EAAI7e,QAAQ/W,KAAK8nC,eAAeh5B,MAChC8rC,EAAWnwC,MAAQmrB,EAAI2sB,YAAYx9C,GAAM0F,MACzCmrB,EAAIhgB,UACJglC,EAAWhrB,SAAW,IAAMgrB,EAAWnwC,OAE3CzK,KAAKyK,MAAQxF,KAAK8E,IAAI6wC,EAAWhrB,WAAY5vB,KAAKyK,MACtD,CACAzK,KAAK46C,WAAWhrB,SAAW,IAAM5vB,KAAKyK,KAC1C,CAGA,MAAMigC,EAAK1qC,KAAKigG,UAAU1sF,KAAI,EAAG9K,IAAKzE,KAAWqzB,EAAMmM,YAAYh+B,OAAOxB,GAAQ,KAKlF,OAJAhE,KAAKq7C,MAAM3Q,GACP1qC,KAAKgzB,MACLhzB,KAAKgzB,KAAKqX,WAAWrqC,KAAKugG,WAAYvgG,KAAKugG,YAExCvgG,IACX,CAEAmpE,eACI,OAAOnpE,KAAKigG,SAChB,CAGAv3D,mBAAmBjV,EAAUnhB,GACzB,IAAKtS,KAAKw4C,aACN,MAAM,IAAIr1C,EAAa,kBAAmB,wDAE9C,GAAuB,IAAnBnD,KAAK0qC,GAAG9kC,OACR,MAAM,IAAIzC,EAAa,YAAa,yCAExC,IAAIQ,EAAI,EACR,GAAI8vB,IAAakF,GAASC,SAASS,KAC/B11B,GAAI,OAEH,GAAI8vB,IAAakF,GAASC,SAASW,MACpC51B,EAAI3D,KAAKyK,MAAQ,OAEhB,GAAIgpB,IAAakF,GAASC,SAASO,OAAS1F,IAAakF,GAASC,SAASK,MAAO,CAEnFt1B,EADyB3D,KAAK46C,WAAWhrB,WAClB,CAC3B,CACA,MAAO,CACHjsB,EAAG3D,KAAK+4C,eAAiBp1C,EACzBmF,EAAG9I,KAAK0qC,GAAGp4B,GAEnB,CAEAopC,iBACI,OAAOl2C,OAAOxF,KAAKigG,UAAU,GAAGx3F,IACpC,CAEA8vC,YACQv4C,KAAKw4C,eAELx4C,KAAKm6B,iBACLn6B,KAAKm6B,gBAAgBoe,YAEzBv4C,KAAKw4C,cAAe,EACxB,CAEA/G,WACI,OAAOzxC,KAAK4uD,iBAChB,CAEA2xC,WACI,MAIMC,EAJYxgG,KAAKo4B,aAAa+X,cAIH,GAC3BswD,EAAgB53D,GAAKC,KAAO9oC,KAAK2pC,gBAFnB,GAEiD62D,EACrE,OAAOxgG,KAAKo4B,aAAaoL,YAAYi9D,EACzC,CAEAruD,iBACI,OAAOpyC,KAAK6xC,YAAYrH,YAC5B,CAEA6qB,WACI,IAAIxnD,EACJ,MAAM,KAAEouC,EAAI,WAAErB,EAAY9S,gBAAgB,UAAEkI,IAAiBhwC,KACvD+U,EAAU/U,KAAK8V,eACfo9C,EAAyBtvD,MAARq4C,GAAqBjM,EAE5C,GAAI4K,EAAW3nB,MAAQigC,EAAgB,CACnC,MAAMwtC,EAAS1gG,KAAKyxC,WACdkvD,EAAS3gG,KAAK8vC,qBAAuBjH,GAAKE,KAExC/oC,KAAKugG,WAAavgG,KAAK6xC,YAAYvH,aAAetqC,KAAK46C,WAAa56C,KAAK46C,WAAWznB,oBAAsB,GAE1GnzB,KAAKugG,WAAavgG,KAAK6xC,YAAYvH,aAAetqC,KAAK46C,WAAa56C,KAAK46C,WAAW1nB,kBAAoB,GAG3F,QAApBrlB,EAAK7N,KAAKizB,YAAyB,IAAPplB,GAAyBA,EAAGoqB,OAAOljB,EAAS2rF,EAAQC,EAErF,CACJ,CAEA1rC,gBACIj1D,KAAKi2C,UAAUrhC,SAAS+yB,IAEhBxlC,EAAMwlC,KAAc3nC,KAAK8nC,eAAeq4D,YAG5Cx4D,EAAS7wB,WAAW9W,KAAK6W,cACzB8wB,EAAS9xB,gBAAe,GAEhC,CAEA+qF,kBACI,MAAMzqC,EAAQn2D,KAAKyxC,WACb0mD,EAAQn4F,KAAKugG,WACb3qE,EAAM51B,KAAK8V,eACXi5C,EAAW/uD,KAAK8nC,eAAekI,UAC/B6wD,EAAc7gG,KAAK8nC,eAAes4D,wBACxC,GAAIrxC,GAAY8xC,EAAa,CACzB,MAGMC,EA5RlB,SAA6Bv1D,EAAQw1D,EAAgB1pE,EAAOsS,GACxD,MAAMq3D,EAA6B,IAAnBr3D,EACVs3D,GAAgC,IAApBt3D,EACZu3D,EAAe7pE,EAAMkM,yBACrB49D,EAAc9pE,EAAM8Y,cACpBixD,EAAa,GA2CnB,OA1CAL,EAAensF,SAASysF,IACpB,MAAMC,EAAqBD,EAAQprF,QAAQkrF,IAAgB,EACrDI,EAAsBF,EAAQprF,QAAQ,IAAM,EAClD,GAAK+qF,GAAWO,GAAyBN,GAAaK,EAClD,OAKmB,IAAnBD,EAAQz7F,QACRy7F,EAAQ5sF,KAAK4sF,EAAQ,IAEzB,MAAMG,EAAU,GAEhBH,EAAQzsF,SAAQ,CAACs0D,EAAQ52D,EAAO+uF,KAC5B,MAAMI,EAAwB,IAAXv4B,EACbw4B,EAAgBx4B,IAAWi4B,EAGjC,IAAIr4F,EAAIuuB,EAAMmM,YAAY0lC,EAAS,GAGrB,IAAV52D,GAAgBmvF,EAGXnvF,IAAU+uF,EAAQz7F,OAAS,GAAM87F,IACtC54F,GAAKo4F,EAAe,EAAI,GAHxBp4F,GAAKo4F,EAAe,EAAI,EAM5BM,EAAQ/sF,KAAK3L,GAGU,IAAnB6gC,GAAwB83D,EACxBD,EAAQ/sF,KAAK82B,EAAS,IAEG,IAApB5B,GAAyB+3D,GAC9BF,EAAQ/sF,KAAK82B,EAAS,EAC1B,IAGJ61D,EAAW3sF,KAAK+sF,EAAQ59D,MAAK,CAACn/B,EAAGC,IAAMD,EAAIC,IAAG,IAE3C08F,CACX,CA2O8BO,CAAoBxJ,EArTlD,SAA+B1jB,EAAWmtB,GACtC,MAAMC,EAAe,GACrB,IAAInmC,EAAQ,GACZ,IAAK,IAAIwN,EAAS,EAAGA,GAAUuL,EAAWvL,IACtB04B,EAAa3rF,QAAQizD,IAAW,GAK5C24B,EAAaptF,KAAKinD,GAClBA,EAAQ,IAJRA,EAAMjnD,KAAKy0D,GASnB,OAFIxN,EAAM91D,OAAS,GACfi8F,EAAaptF,KAAKinD,GACfmmC,CACX,CAoSkCC,CAFL9hG,KAAKo4B,aAAa+X,cACfnwC,KAAKigG,UAAU1sF,KAAKkgB,GAAajuB,OAAOiuB,EAAShrB,QAETzI,KAAKo4B,aAAcp4B,KAAK8vC,oBACpFla,EAAI5gB,OACJ4gB,EAAIlgB,aAAamzB,GAAKG,OACtB83D,EAAUlsF,SAASugE,IACO,IAAlBA,EAAOvvE,SAEXgwB,EAAIQ,YACJR,EAAIS,OAAO8/B,EAAOgf,EAAO,IACzBv/C,EAAIU,OAAO6/B,EAAOgf,EAAOA,EAAOvvE,OAAS,IACzCgwB,EAAIhH,SACJgH,EAAI+f,YAAW,IAEnB/f,EAAIhgB,SACR,CACJ,CAEAmsF,gBACI,IAAIl0F,EACJ,MAAM+nB,EAAM51B,KAAK8V,eACXnS,EAAI3D,KAAK+4C,eACTrO,EAAK1qC,KAAK0qC,GAChB,IAAK,IAAIhiC,EAAI,EAAGA,EAAI1I,KAAKigG,UAAUr6F,SAAU8C,EAAG,CAC5C,MAAMI,EAAI4hC,EAAGhiC,GAAK1I,KAAK8nC,eAAerT,QAChCmmB,EAAa56C,KAAKggG,cAAct3F,GAGhCs5F,EAAQr+F,EADW3D,KAAK46C,WAAWhrB,WACJ,EAAIgrB,EAAWhrB,WAAa,EAGjE,GADAgG,EAAI6qC,UAAUuhC,EAAQ,EAAGl5F,EAAI,EAAG8xC,EAAWhrB,WAAa,EAAG,GACvDgrB,EAAWv3C,KACXosB,EAAMk+B,YAAY/3B,EAAKosE,EAAOl5F,EAAG9I,KAAK8nC,eAAekT,iBAAmBh7C,KAAK8nC,eAAezY,MAAOurB,EAAWv3C,UAE7G,CACDuyB,EAAI5gB,OACJ4gB,EAAI7e,QAAQ/W,KAAK8nC,eAAeh5B,MAChC,MAAM/J,EAAkC,QAA1B8I,EAAK+sC,EAAW71C,YAAyB,IAAP8I,EAAgBA,EAAK,GACrE+nB,EAAIyc,SAASttC,EAAMi9F,EAAOl5F,EAAI,EAAI9I,KAAK8nC,eAAezY,OACtDuG,EAAIhgB,SACR,CACJ,CACJ,CAEAG,OACI,MAAM6f,EAAM51B,KAAK8V,eACjB,GAAuB,IAAnB9V,KAAK0qC,GAAG9kC,OACR,MAAM,IAAIzC,EAAa,YAAa,qCAExCnD,KAAKsW,cACL,MAAM2rF,EAA2Br+F,MAAb5D,KAAKi8C,MAAqBj8C,KAAK8nC,eAAekI,UAKlE,GAJAhwC,KAAK8U,aACL8gB,EAAI8V,UAAU,UAAW1rC,KAAK6S,aAAa,MAAO,CAAE84B,aAAa,IACjE3rC,KAAK+hG,gBACL/hG,KAAK4gG,kBACD5gG,KAAKgzB,MAAQivE,EAAa,CAC1B,MAAM32D,EAAStrC,KAAKyxC,WACpBzxC,KAAKgzB,KAAKgX,mBAAmBsB,EAAQA,GACrCtrC,KAAKgzB,KAAKlc,WAAW8e,GAAK7f,MAC9B,CACA/V,KAAKq1D,WACLr1D,KAAKi1D,gBACLr/B,EAAIgW,aACJ5rC,KAAK2V,cACT,ECrYG,MAAMusF,WAAiB/tB,GACfzyE,sBACP,OAAOG,EAASqgG,QACpB,CACAzgG,YAAYkC,EAAGmF,EAAG2B,EAAO4jB,GAErB9qB,MAAMI,EAAGmF,EAAG2B,EADQpK,OAAOmX,OAAO,CAAEq9D,yBAA0B,GAAIJ,UAAW,EAAGO,kBAAmB,GAAK3mD,GAE5G,CACAiK,gBACI,OAAOt4B,KAAKwjC,YAAY,IAC5B,CAEA2+D,cAEI,OADAniG,KAAK22E,QAAQ,OACN32E,IACX,ECJJ,SAAS,MAAK+D,GACNq+F,GAAY7/D,OACZ1+B,EAAI,uBAAwBE,EACpC,CACO,IAAIs+F,IACX,SAAWA,GACPA,EAAoBA,EAAyB,IAAI,GAAK,MACtDA,EAAoBA,EAA4B,QAAK,GAAK,QAC7D,CAHD,CAGGA,KAAwBA,GAAsB,CAAC,IAClD,MAAMD,WAAoBruF,EACXrS,sBACP,OAAOG,EAASugG,WACpB,CACWxpE,sBACP,OAAOypE,EACX,CACWxpE,4BACP,MAAO,CACH4Z,IAAK4vD,GAAoB/xD,IACzBoC,OAAQ2vD,GAAoB1xD,OAEpC,CAIW2xD,uBAEP,OADA,GAAE,6DACKD,EACX,CAIWE,6BAEP,OADA,GAAE,8DACKH,GAAYvpE,cACvB,CACAp3B,aAAY,MAAEgnC,EAAK,KAAE+5D,EAAI,KAAEz9F,EAAO,GAAE,YAAEksE,EAAc,GAAE,SAAEx9C,EAAW4uE,GAAoB/xD,MACnF/sC,QACAvD,KAAKyoC,MAAQA,EACbzoC,KAAKwiG,KAAOA,EACZxiG,KAAK+E,KAAOA,EACZ/E,KAAKixE,YAAcA,EACnBjxE,KAAKyzB,SAA+B,iBAAbA,EAAwB2uE,GAAYvpE,eAAepF,GAAYA,EACtFzzB,KAAKgE,KAAO,EACZhE,KAAK2X,YACL3X,KAAK8nC,eAAiB,CAClBsgC,QAAQ,EACRlH,KAAM,CAAC,GACPzrB,MAAO,QACPwL,WAAY,EACZwhD,cAAc,EACdvH,eAAgB,EAGhBwH,uBAAuB,EAE/B,CAMA5tF,WAAW8gB,GACPA,EAAI7e,QAAQ/W,KAAK8O,MACjB,MAAMuf,EAAUruB,KAAK8nC,eAIrB,OAHAlS,EAAIpgB,eAAe6Y,EAAQonB,OAC3B7f,EAAItgB,aAAa+Y,EAAQonB,OACzB7f,EAAIlgB,aAAa2Y,EAAQ4yB,YAClBjhD,IACX,CAGA0oE,UAAUN,EAAQlH,GAId,OAHAlhE,KAAK8nC,eAAesgC,OAASA,EACzBlH,IACAlhE,KAAK8nC,eAAeo5B,KAAOA,GACxBlhE,IACX,CAEA8sD,QAAQ9oD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACjB9V,KAAKsW,cACL,IAAIxN,EAAI,EACR,OAAQ9I,KAAKyzB,UACT,KAAK4uE,GAAoB/xD,IACrBxnC,EAAI9I,KAAKyoC,MAAMrQ,aAAa4Z,eAAehyC,KAAKgE,MAChD,MACJ,KAAKq+F,GAAoB1xD,OACrB7nC,EAAI9I,KAAKyoC,MAAMrQ,aAAa6Z,kBAAkBjyC,KAAKgE,KAAOgqB,EAAOkD,yBACjE,MACJ,QACI,MAAM,IAAI/tB,EAAa,kBAAmB,gBAAgBnD,KAAKyzB,wBAGvE,MAAMgV,EAAQ,CAAE9kC,EAAG3D,KAAKyoC,MAAMsQ,eAAgBjwC,KACxC05F,EAAO,CAAE7+F,EAAG3D,KAAKwiG,KAAKzpD,eAAgBjwC,KAC5C,GAAE,gCAAiC2/B,EAAO,QAAS+5D,EAAM,KAAM15F,GAC/D,MAAMoyF,EAAiBl7F,KAAK8nC,eAAeozD,eAAiBl7F,KAAKyzB,SACjEmC,EAAI5gB,OACJhV,KAAK8U,WAAW8gB,GAEhBA,EAAIyc,SAASryC,KAAK+E,KAAM0jC,EAAM9kC,EAAG8kC,EAAM3/B,GAEvC,MAAM65F,EAAe/sE,EAAI2sB,YAAYviD,KAAK+E,MACpC69F,EAAaD,EAAal4F,MAC1Bo4F,EAAcF,EAAaj4F,OAE3Bo4F,EAAUr6D,EAAM3/B,EAAI+5F,EAAc,KAGlC,OAAEr0F,EAAM,KAAEJ,EAAI,OAAEC,EAAM,MAAEC,GAAUtO,KAAKiX,SAEvC0xC,EAAkBj7C,EAAK02C,UAAUh2C,EAAM,SAC7CwnB,EAAI7e,QAAQvI,EAAQm6C,EAAiBt6C,EAAQC,GAC7CsnB,EAAIyc,SAASryC,KAAKixE,YAAaxoC,EAAM9kC,EAAIi/F,EAAa,EAAGE,GAEzD,MAAMC,EAAgBntE,EAAI2sB,YAAYviD,KAAKixE,aACrC+xB,EAAcD,EAAct4F,MAC5Bw4F,EAAeF,EAAcr4F,OAEnC,IAAIkoE,EAAUnqC,EAAM9kC,EAChBu/F,EAASJ,EACb,MAAMzuB,EAAQmuB,EAAK7+F,EAAI3D,KAAKwiG,KAAK9yD,gBAAgB9f,WAE7C5vB,KAAKyzB,WAAa4uE,GAAoB/xD,KACtCsiC,GAAWgwB,EAAaI,EAAc,EACtCE,GAAUD,EAAe,KAEpBjjG,KAAKyzB,WAAa4uE,GAAoB1xD,SAC3CuyD,GAAUD,EAAe,IACzBrwB,GAAWgwB,EAAa,EACnB5iG,KAAK8nC,eAAe46D,wBACrB9vB,GAAWowB,IAGfhjG,KAAK8nC,eAAesgC,QAEpBzC,GAASmD,eAAelzC,EAAKg9C,EAASswB,EAAQ7uB,EAAO6uB,EAAQljG,KAAK8nC,eAAeo5B,MAE7ElhE,KAAK8nC,eAAe26D,cACpB98B,GAASmD,eAAelzC,EAAKy+C,EAAO6uB,EAAS,EAAIljG,KAAKyzB,SAAU4gD,EAAO6uB,EAAShI,EAAgBl7F,KAAK8nC,eAAeo5B,QAIxHtrC,EAAIQ,YACJR,EAAIS,OAAOu8C,EAASswB,GAEpBttE,EAAIU,OAAO+9C,EAAO6uB,GACdljG,KAAK8nC,eAAe26D,cAEpB7sE,EAAIU,OAAO+9C,EAAO6uB,EAAShI,GAE/BtlE,EAAIhH,SACJgH,EAAI+f,aAER/f,EAAIhgB,SACR,ECvKJ,SAAS,MAAK7R,GACNo/F,GAAa5gE,OACb1+B,EAAI,wBAAyBE,EACrC,CDsKAq+F,GAAY7/D,OAAQ,EACpB6/D,GAAYjrF,UAAY,CACpB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUkD,QCnKrB,MAAM0zF,WAAqBzgG,GACZhB,sBACP,OAAOG,EAASshG,YACpB,CAEW9yB,oBACP,MAAO,CACH9nE,EAAG,CACClF,KAAM,eACNoH,MAAO,IAEXgmE,EAAG,CACCptE,KAAM,eACNoH,MAAO,IAEX4nB,EAAG,CACChvB,KAAM,eACNoH,MAAO,IAEXpC,EAAG,CACChF,KAAM,mBACNoH,MAAO,IAEXimE,EAAG,CACCrtE,KAAM,WACNoH,MAAO,IAEXxJ,EAAG,CACCoC,KAAM,qBACNoH,MAAO,IAGnB,CAUAhJ,YAAYs4C,GACRx2C,MAAMw2C,GACN/5C,KAAKojG,UAAYrpD,EAAWh1C,MAAQ,IAAIoJ,cACxCnO,KAAKgE,KAAO+1C,EAAW/1C,MAAQ,EAC/BhE,KAAKmR,OAAS,GACdnR,KAAK8nC,eAAiBznC,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK8nC,gBAAiB,CAAEu7D,gBAAiBr1E,EAAOyC,sBACtG,GAAE,sBAAuBzwB,KAAKojG,SAClC,CAEAt2C,QAAQ9oD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEAu4C,YACI,IAAI+qD,EAAc,EAoBlB,OAhBAtjG,KAAKmR,OAAS,GAEdnR,KAAKojG,SAASz6F,MAAM,IAAIiM,SAAS2uF,IAE7B,MAAM5I,EAAawI,GAAa9yB,OAAOkzB,GACvC,IAAK5I,EACD,MAAM,IAAIx3F,EAAa,+BAAiCogG,GAC5D,MAAMn1F,EAAO1K,EAAQ1D,KAAK8nC,eAAeu7D,iBACnC/zE,EAAQ,IAAIG,EAAMkrE,EAAWt3F,KAAM+K,EAAM,CAAE9M,SAAU,aAE3DtB,KAAKmR,OAAOsD,KAAK6a,GACjBg0E,GAAe3I,EAAWlwF,KAAK,IAGnCzK,KAAK05B,SAAS4pE,GACdtjG,KAAKw4C,cAAe,EACbx4C,IACX,CAEA+V,OACI/V,KAAKsW,cACL,MAAM3S,EAAI3D,KAAK+4C,eACTjwC,EAAI9I,KAAKo4B,aAAaoL,YAAYxjC,KAAKgE,MAAQ,GACrD,GAAE,uBAAwBhE,KAAKojG,UAC/B,IAAII,EAAW7/F,EACf3D,KAAKmR,OAAOyD,SAAQ,CAAC0a,EAAOhd,KACxB,MAAMmxF,EAAiBzjG,KAAKojG,SAAS9wF,GACrCgd,EAAM2I,OAAOj4B,KAAK8V,eAAgB0tF,EAAU16F,GAC5C06F,GAAYL,GAAa9yB,OAAOozB,GAAgBh5F,KAAK,GAE7D,EAGJ04F,GAAa5gE,OAAQ,EC5Gd,MAAMmhE,WAAoBhhG,GAClBhB,sBACP,OAAOG,EAAS6hG,WACpB,CACAjiG,YAAYuxE,EAAUC,GAClB1vE,MAAM,CAAEgrB,SAAU,MAClBvuB,KAAKy6F,QAAU,IAAI1nB,GAAcC,EAAUC,GAC3CjzE,KAAK05B,SAAS15B,KAAKy6F,QAAQ9+C,WAAW7qC,aAAarG,OAEnDzK,KAAKq2C,cAAe,CACxB,CAGA6B,qBAAqBC,GAEjB,OAAOn4C,IACX,CACAu4C,YAEI,OADAv4C,KAAKw4C,cAAe,EACbx4C,IACX,CACA+V,OACI,MAAMshB,EAAQr3B,KAAKo4B,aACbxC,EAAM51B,KAAK8V,eACjB9V,KAAKsW,cACL,MAAMqtF,EAAU3jG,KAAKy6F,QAAQ9+C,WACxBgoD,EAAQ9sF,cACT8sF,EAAQ7sF,WAAW8e,GAEvB+tE,EAAQvsE,SAASC,GACjBssE,EAAQlsE,UAAUJ,EAAMmM,YAAY,GAAKnM,EAAMiB,iBAC/CqrE,EAAQtrE,cAAcr4B,KAAK+4C,eAC/B,ECxBJ,MAAM6qD,WAAuB7vF,EACdrS,sBACP,OAAOG,EAAS+hG,cACpB,CAMAniG,YAAYoiG,GACRtgG,QACIsgG,EAAap7D,QACbzoC,KAAKyoC,MAAQo7D,EAAap7D,OAC1Bo7D,EAAarB,OACbxiG,KAAKwiG,KAAOqB,EAAarB,MAC7BxiG,KAAKgE,KAAO,EACZhE,KAAK8nC,eAAiB,CAClB2iC,OAAO,EACPE,YAAa,EACbC,WAAY,EACZC,WAAY,EACZH,cAAe,EAEvB,CAEA5d,QAAQ9oD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA+qE,SAASN,GAEL,OADAzqE,KAAK8nC,eAAe2iC,MAAQA,EACrBzqE,IACX,CAEA+V,OACI,MAAM6f,EAAM51B,KAAK8V,eACjB9V,KAAKsW,cACL,MAAMxN,EAAK9I,KAAKyoC,OAASzoC,KAAKyoC,MAAMrQ,aAAa4Z,eAAehyC,KAAKgE,OAChEhE,KAAKwiG,MAAQxiG,KAAKwiG,KAAKpqE,aAAa4Z,eAAehyC,KAAKgE,OACzD,EAGE4uE,EAAW5yE,KAAKyoC,OAASzoC,KAAKyoC,MAAMsQ,gBAAoB/4C,KAAKwiG,MAAQxiG,KAAKwiG,KAAKpqE,aAAau/B,gBAAmB,EAG/GmsC,EAAU9jG,KAAKwiG,MAAQxiG,KAAKwiG,KAAKzpD,eAAiB/4C,KAAKwiG,KAAK5yE,WAAa,GAC1E5vB,KAAKyoC,OAASzoC,KAAKyoC,MAAMrQ,aAAaw/B,aAAe,IACtD,EACJ53D,KAAK8nC,eAAe4iC,cAAgBo5B,EAASlxB,EAtDrD,YAAc7uE,GACN6/F,GAAerhE,OACf1+B,EAAI,0BAA2BE,EACvC,CAoDQ,CAAE,qCAAsC6uE,EAAS,UAAWkxB,EAAQ,KAAMh7F,GAC1EwhE,GAAQY,cAAct1C,EAAKg9C,EAAS9pE,EAAG9I,KAAK8nC,eAChD,EClBJ,SAAS,MAAK/jC,GACNggG,GAAQxhE,OACR1+B,EAAI,mBAAoBE,EAChC,CDkBA6/F,GAAerhE,OAAQ,ECdvB,MAAMwhE,GAUFx+F,wBAAwBqgE,EAAWn7D,EAAQ,IAAKC,EAAS,KACrD,OAAO,IAAIq5F,GAAQ,CAAEh+B,SAAU,CAAEH,YAAWn7D,QAAOC,WACvD,CAQAjJ,YAAY4sB,EAAU,CAAC,GACnB,GAAE,gBAAiBA,GACnBruB,KAAKquB,QAAU,CACXgJ,MAAO,CACHof,MAAO,IAEXsvB,SAAU,CACNH,UAAW,GACXn7D,MAAO,IACPC,OAAQ,IACRo7D,WAAY,QAEhBh3D,KAAMi1F,GAAQ5sF,WAElBnX,KAAKg3B,WAAW3I,EACpB,CACA4I,QACIj3B,KAAKgkG,QAAU,GACfhkG,KAAKikG,QAAU,GACfjkG,KAAKs4E,OAAS,GACdt4E,KAAKomC,OAAS,GACdpmC,KAAKq3B,WAAQzzB,CACjB,CACAozB,WAAW3I,GACPruB,KAAKquB,QAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKquB,SAAUA,GAC9DruB,KAAKkkG,eACLlkG,KAAKi3B,OACT,CACAitE,eACI,MAAM,UAAEt+B,EAAS,MAAEn7D,EAAK,OAAEC,EAAM,WAAEo7D,GAAe9lE,KAAKquB,QAAQ03C,SAC9D,GAAiB,MAAbH,EACA,OAEJ,GAAiB,IAAbA,EAEA,MADA,GAAE5lE,MACI,IAAImD,EAAa,gDAE3B,IAAI0iE,EAAU7lE,KAAKquB,QAAQ03C,SAASF,QACpC,QAAgBjiE,IAAZiiE,EAAuB,CAOnBA,EADA/F,GALSlxD,SAASgE,eAAegzD,IAMvBD,GAASO,SAASC,OAGlBR,GAASO,SAASE,GAEpC,CACApmE,KAAK+U,QAAU4wD,GAASM,aAAaL,EAAWC,EAASp7D,EAAOC,EAAQo7D,EAC5E,CACAjvD,aACI,OAAO7W,KAAK+U,OAChB,CACA+B,WAAW/B,GAEP,OADA/U,KAAK+U,QAAUA,EACR/U,IACX,CACA+6B,WACI,OAAO/6B,KAAKq3B,KAChB,CACA2nE,YACI,OAAOh/F,KAAKomC,MAChB,CAEA+tC,MAAM/lD,GACF,MAAMm/B,EAAavtD,KAAKquB,QAAQgJ,MAAMof,MAChCg6B,EAAIpwE,OAAOmX,OAAO,CAAE7T,EAAG,EAAGmF,EAAG,EAAG2B,MAAOzK,KAAKquB,QAAQ03C,SAASt7D,MAAqB,EAAb8iD,EAAkBl/B,QAAS,CAAEwmD,yBAAuC,EAAbtnB,IAAsBn/B,GAClJiJ,EAAQ,IAAI88C,GAAM1D,EAAE9sE,EAAG8sE,EAAE3nE,EAAG2nE,EAAEhmE,MAAOgmE,EAAEpiD,SAI7C,OAHAruB,KAAKs4E,OAAO7jE,KAAK4iB,GACjBA,EAAMvgB,WAAW9W,KAAK+U,SACtB/U,KAAKq3B,MAAQA,EACNA,CACX,CACA6qE,SAAS9zE,GACL,MAAMm/B,EAAavtD,KAAKquB,QAAQgJ,MAAMof,MAChCg6B,EAAIpwE,OAAOmX,OAAO,CAAE7T,EAAG,EAAGmF,EAAG,EAAG2B,MAAOzK,KAAKquB,QAAQ03C,SAASt7D,MAAqB,EAAb8iD,EAAkBl/B,QAAS,CAAEwmD,yBAAuC,IAAbtnB,IAAsBn/B,GAClJiJ,EAAQ,IAAI6qE,GAASzxB,EAAE9sE,EAAG8sE,EAAE3nE,EAAG2nE,EAAEhmE,MAAOgmE,EAAEpiD,SAIhD,OAHAruB,KAAKs4E,OAAO7jE,KAAK4iB,GACjBA,EAAMvgB,WAAW9W,KAAK+U,SACtB/U,KAAKq3B,MAAQA,EACNA,CACX,CACAv0B,UAAUi3C,GACN,MAAMngB,EAAO,IAAI92B,GAAUi3C,GAK3B,OAJI/5C,KAAKq3B,OACLuC,EAAKxC,SAASp3B,KAAKq3B,OACvBuC,EAAK9iB,WAAW9W,KAAK+U,SACrB/U,KAAKgkG,QAAQvvF,KAAKmlB,GACXA,CACX,CACA88D,UAAUpnE,EAAOyqB,EAAY1rB,GACzB,MAAMuL,EAAO,IAAI88D,GAAUpnE,EAAOyqB,EAAY1rB,GAK9C,OAJIruB,KAAKq3B,OACLuC,EAAKxC,SAASp3B,KAAKq3B,OACvBuC,EAAK9iB,WAAW9W,KAAK+U,SACrB/U,KAAKgkG,QAAQvvF,KAAKmlB,GACXA,CACX,CACAqiE,WAAWhqF,EAAM8nC,EAAY1rB,GACzB,MAAMuL,EAAO,IAAIqiE,GAAWhqF,EAAM8nC,EAAY1rB,GAK9C,OAJIruB,KAAKq3B,OACLuC,EAAKxC,SAASp3B,KAAKq3B,OACvBuC,EAAK9iB,WAAW9W,KAAK+U,SACrB/U,KAAKgkG,QAAQvvF,KAAKmlB,GACXA,CACX,CACAm8D,UAAUh8C,GACN,MAAMoqD,EAAY,IAAIpO,GAAUh8C,GAKhC,OAJI/5C,KAAKq3B,OACL8sE,EAAU/sE,SAASp3B,KAAKq3B,OAC5B8sE,EAAUrtF,WAAW9W,KAAK+U,SAC1B/U,KAAKgkG,QAAQvvF,KAAK0vF,GACXA,CACX,CACA/zB,SAASr2B,GACL,MAAMqqD,EAAW,IAAIh0B,GAASr2B,GAK9B,OAJI/5C,KAAKq3B,OACL+sE,EAAShtE,SAASp3B,KAAKq3B,OAC3B+sE,EAASttF,WAAW9W,KAAK+U,SACzB/U,KAAKgkG,QAAQvvF,KAAK2vF,GACXA,CACX,CACA5jD,QAAQpyB,EAAS,CAAC,GACd,MAAMi2E,EAAU,IAAI7jD,GAAQpyB,EAAOnc,MAKnC,OAJIjS,KAAKq3B,OACLgtE,EAAQjtE,SAASp3B,KAAKq3B,OAC1BgtE,EAAQvtF,WAAW9W,KAAK+U,SACxB/U,KAAKgkG,QAAQvvF,KAAK4vF,GACXA,CACX,CACArW,SAAS5/D,GACL,MAAMqiD,EAAIpwE,OAAOmX,OAAO,CAAEvF,KAAM,SAAUoc,QAAS,CAC3CjgB,KAAM,UACNihC,gBAAYzrC,IACXwqB,GACHk2E,EAAW,IAAItW,GAASvd,EAAEx+D,KAAMw+D,EAAEpiD,QAAQjgB,KAAMqiE,EAAEpiD,QAAQghB,YAKhE,OAJIrvC,KAAKq3B,OACLitE,EAASltE,SAASp3B,KAAKq3B,OAC3BitE,EAASxtF,WAAW9W,KAAK+U,SACzB/U,KAAKgkG,QAAQvvF,KAAK6vF,GACXA,CACX,CACAZ,YAAYt1E,GACR,MAAMqiD,EAAIpwE,OAAOmX,OAAO,CAAEygD,KAAM,OAAS7pC,GACnCm2E,EAAc,IAAIb,GAAYjzB,EAAExY,MAKtC,OAJIj4D,KAAKq3B,OACLktE,EAAYntE,SAASp3B,KAAKq3B,OAC9BktE,EAAYztF,WAAW9W,KAAK+U,SAC5B/U,KAAKgkG,QAAQvvF,KAAK8vF,GACXA,CACX,CACAnM,WAAWhqE,GACP,MAAMo2E,EAAa,IAAIpM,GAAWhqE,EAAOjuB,IAAKiuB,EAAOw+C,UAAWx+C,EAAOm/C,UAKvE,OAJIvtE,KAAKq3B,OACLmtE,EAAWptE,SAASp3B,KAAKq3B,OAC7BmtE,EAAW1tF,WAAW9W,KAAK+U,SAC3B/U,KAAKgkG,QAAQvvF,KAAK+vF,GACXA,CACX,CACAthG,QAAQ62C,GACJ,MAAMngB,EAAO,IAAI12B,GAAQ62C,GAKzB,OAJI/5C,KAAKq3B,OACLuC,EAAKxC,SAASp3B,KAAKq3B,OACvBuC,EAAK9iB,WAAW9W,KAAK+U,SACrB/U,KAAKgkG,QAAQvvF,KAAKmlB,GACXA,CACX,CACAt3B,UAAUy3C,GACN,MAAMngB,EAAO,IAAIt3B,GAAUy3C,GAI3B,OAHI/5C,KAAKq3B,OACLuC,EAAKxC,SAASp3B,KAAKq3B,OACvBuC,EAAK9iB,WAAW9W,KAAK+U,SACd6kB,CACX,CACAp3B,eAAe4rB,GACX,MAAMstC,EAAQ,IAAIl5D,GAAe4rB,EAAO4B,MAAO5B,EAAOusC,MAEtD,OADAe,EAAM5kD,WAAW9W,KAAK+U,SACf2mD,CACX,CACA55D,WAAWssB,GACP,MAAMswC,EAAQ,IAAI58D,GAAWssB,EAAOnc,MAEpC,OADAysD,EAAM5nD,WAAW9W,KAAK+U,SACf2pD,CACX,CACA18D,WAAWosB,GACP,MAAMqiD,EAAIpwE,OAAOmX,OAAO,CAAEzS,KAAM,IAAK0/F,SAAU51D,GAA4B9V,OAAQ2rE,SAAU51D,GAA0B6B,QAAUviB,GAC3HihB,EAAa,IAAIrtC,GAAWyuE,EAAE1rE,MAKpC,OAJAsqC,EAAWgC,iBAAiBo/B,EAAEg0B,UAC9Bp1D,EAAW4B,yBAAyBw/B,EAAEi0B,UACtCr1D,EAAWt4B,QAAQ05D,EAAE3hE,MACrBugC,EAAWv4B,WAAW9W,KAAK+U,SACpBs6B,CACX,CACAsT,YAAYv0B,GACR,MAAMqiD,EAAIpwE,OAAOmX,OAAO,CAAEktF,SAAU,MAAOD,SAAU,SAAUE,SAAS,EAAMv+C,aAAa,GAAQh4B,GAC7Fq1B,EAAc,IAAId,GAiBxB,OAhBAc,EAAY6E,cAAcmoB,EAAEg0B,UAC5BhhD,EAAY2E,YAAYqoB,EAAEi0B,UAC1BjhD,EAAYkC,iBAAiB8qB,EAAEk0B,SAC/BlhD,EAAY4C,eAAeoqB,EAAErqB,aAGD,iBAAjBqqB,EAAE1hE,YAAiD,iBAAf0hE,EAAE9iE,SACjB,iBAAjB8iE,EAAEzhE,WACTy0C,EAAY1sC,QAAQ05D,EAAE1hE,WAAY0hE,EAAE9iE,SAAU8iE,EAAEzhE,YAEhDy0C,EAAY1sC,QAAQ05D,EAAE1hE,WAAY0hE,EAAE9iE,SAAU,IAEvB,iBAAf8iE,EAAE9iE,UACd81C,EAAY7rC,YAAY64D,EAAE9iE,UAE9B81C,EAAY3sC,WAAW9W,KAAK+U,SACrB0uC,CACX,CACAxQ,aAAa7kB,GACT,IAAIvgB,EACJ,MAAMulC,EAAe,IAAIH,GAAoF,QAAtEplC,EAAKugB,aAAuC,EAASA,EAAOnc,YAAyB,IAAPpE,EAAgBA,EAAK,MAM1I,OALyEjK,OAApEwqB,aAAuC,EAASA,EAAOqF,WACxD2f,EAAa7Y,YAAYnM,EAAOqF,UACyC7vB,OAAxEwqB,aAAuC,EAASA,EAAOgmB,eACxDhB,EAAae,gBAAgB/lB,EAAOgmB,cACxChB,EAAat8B,WAAW9W,KAAK+U,SACtBq+B,CACX,CACAqqB,SAASxrD,EAAMmc,GACX,MAAMC,EAAUhuB,OAAOmX,OAAO,CAAEvF,OAAMwhB,SAAU,EAAG7Y,WAAY,IAAMwT,GAC/DsvC,EAAW,IAAID,GAASxrD,GAY9B,OAXAyrD,EAASnjC,YAAYlM,EAAQoF,UACzBpF,EAAQu2E,iBACRlnC,EAASe,mBAAmBpwC,EAAQu2E,iBAEpCv2E,EAAQw2E,iBACRnnC,EAASkB,mBAAmBvwC,EAAQw2E,sBAET,IAApBx2E,EAAQ6vC,SACfR,EAASc,WAAWnwC,EAAQ6vC,SAEhCR,EAAS5mD,WAAW9W,KAAK+U,SAClB2oD,CACX,CACAylC,aAAa/0E,GACT,MAAMqiD,EAAIpwE,OAAOmX,OAAO,CAAEzS,KAAM,IAAKwpB,SAAU,IAAKurB,KAAM,EAAG91C,KAAM,GAAKoqB,GAClErpB,EAAO,IAAIo+F,GAAa,CAC1Bp+F,KAAM0rE,EAAE1rE,KACRf,KAAMysE,EAAEzsE,KACRuqB,SAAUkiD,EAAEliD,SACZurB,KAAM22B,EAAE32B,OAMZ,OAJI95C,KAAKq3B,OACLtyB,EAAKqyB,SAASp3B,KAAKq3B,OACvBtyB,EAAK+R,WAAW9W,KAAK+U,SACrB/U,KAAKgkG,QAAQvvF,KAAK1P,GACXA,CACX,CACA6mD,UAAUx9B,GACN,MAAMqiD,EAAIpwE,OAAOmX,OAAO,CAAEm0C,OAAQ,IAAKl4B,SAAU,QAAUrF,GACrDy9B,EAAY,IAAItB,GAAekmB,EAAE9kB,QAGvC,OAFAE,EAAUtxB,YAAYk2C,EAAEh9C,UACxBo4B,EAAU/0C,WAAW9W,KAAK+U,SACnB82C,CACX,CACA0b,aAAan5C,EAAQk6C,GAAa,GAC9B,MAAMd,EAAe,IAAID,GAAan5C,EAAOu9B,QAI7C,OAHA6b,EAAajtC,YAAYnM,EAAOqF,UAChC+zC,EAAa1wD,WAAW9W,KAAK+U,SAC7ByyD,EAAamB,cAAcL,GACpBd,CACX,CACA7L,cACI,OAAO,IAAIA,EACf,CACA0P,kBACI,OAAO,IAAIA,EACf,CACAitB,iBAAiBlqE,GACb,MAAM02E,EAAcphG,EAAQ0qB,EAAOmqE,mBAAoB,sBACjDwM,EAAmB,IAAIzM,GAAiBwM,EAAa12E,GAG3D,OAFA22E,EAAiBjuF,WAAW9W,KAAK+U,SACjC/U,KAAKgkG,QAAQvvF,KAAKswF,GACXA,CACX,CACAhtC,MAAM3pC,GACF,MAAMqiD,EAAIpwE,OAAOmX,OAAO,CAAEygD,KAAM,OAAS7pC,GACnCmY,EAAQ,IAAIwxB,GAAM0Y,EAAExY,MAE1B,OADAj4D,KAAKomC,OAAO3xB,KAAK8xB,GACVA,CACX,CACAwyC,eAAe3qD,GACX,MAAM8wE,EAAY,IAAInmB,GAAe3qD,EAAO+qD,UAAW/qD,EAAOgrD,cAG9D,OAFA8lB,EAAUx/C,QAAQtxB,EAAOnc,MAAM6E,WAAW9W,KAAK+U,SAC/C/U,KAAKgkG,QAAQvvF,KAAKyqF,GACXA,CACX,CACApkC,UAAUzsC,GACN,OAAO,IAAIysC,GAAUzsC,EACzB,CACAi1D,OAAOl1D,GACH,MAAMqiD,EAAIpwE,OAAOmX,OAAO,CAAEwY,MAAO,GAAI3B,QAAS,CAAC,GAAKD,GAC9CopB,EAAS,IAAI8rC,GAAO7S,EAAEzgD,MAAOygD,EAAEpiD,SAASvX,WAAW9W,KAAK+U,SAE9D,OADA/U,KAAKgkG,QAAQvvF,KAAK+iC,GACXA,CACX,CACA2jB,KAAK/sC,GACD,IAAIvgB,EAAIoF,EAAIq0C,EAAIgO,EAAIC,EACpB,MAAMtZ,EAAO,IAAIkf,GAAK/sC,EAAO4B,MAAiC,QAAzBniB,EAAKugB,EAAOC,eAA4B,IAAPxgB,OAAgB,EAASA,EAAGujD,UAAUt6C,WAAW9W,KAAK+U,SAQ5H,OAPAknC,EAAK+tC,iBAA8G,QAA5F1iC,EAA+B,QAAzBr0C,EAAKmb,EAAOC,eAA4B,IAAPpb,OAAgB,EAASA,EAAG+xF,2BAAwC,IAAP19C,EAAgBA,EAAK,KAClH,QAAzBgO,EAAKlnC,EAAOC,eAA4B,IAAPinC,OAAgB,EAASA,EAAG2vC,wBAC9D5kG,OAAOm4B,QAAkC,QAAzB+8B,EAAKnnC,EAAOC,eAA4B,IAAPknC,OAAgB,EAASA,EAAG0vC,uBAAuBrwF,SAAQ,EAAEwmE,EAAWr6C,MACrHkb,EAAKiuC,qBAAqB1kF,OAAO41E,GAAYr6C,EAAU,IAG/D/gC,KAAKgkG,QAAQvvF,KAAKwnC,GACXA,CACX,CACA+yC,MAAM5gE,GACF,MAAM82E,EAAQ,IAAIlW,GAAM5gE,EAAOihE,KAAMjhE,EAAOkhE,GAAIlhE,EAAOC,SAASvX,WAAW9W,KAAK+U,SAEhF,OADA/U,KAAKgkG,QAAQvvF,KAAKywF,GACXA,CACX,CACA9uC,SAAShoC,GACL,IAAIvgB,EACJ,MAAMs3F,EAAM,IAAI/uC,GAAS,CACrBQ,WAAYxoC,EAAOihE,KACnBnlC,UAAW97B,EAAOkhE,GAClBz4B,cAAezoC,EAAOyoC,cACtBC,aAAc1oC,EAAO0oC,cACtB1oC,EAAOrpB,MAKV,OAJ8B,QAAzB8I,EAAKugB,EAAOC,eAA4B,IAAPxgB,OAAgB,EAASA,EAAGkzB,YAC9DokE,EAAIl7D,aAAa7b,EAAOC,QAAQ0S,WACpCokE,EAAIruF,WAAW9W,KAAK+U,SACpB/U,KAAKgkG,QAAQvvF,KAAK0wF,GACXA,CACX,CACAhJ,UAAU/tE,GACN,IAAIvgB,EAAIoF,EACR,MAAMjP,EAAO,IAAIm4F,GAAU,CACvBvlC,WAAYxoC,EAAOihE,KACnBnlC,UAAW97B,EAAOkhE,GAClBz4B,cAAezoC,EAAOyoC,cACtBC,aAAc1oC,EAAO0oC,eAQzB,OAN8B,QAAzBjpD,EAAKugB,EAAOC,eAA4B,IAAPxgB,OAAgB,EAASA,EAAG9I,OAC9Df,EAAKytE,QAAQrjD,EAAOC,QAAQtpB,OACF,QAAzBkO,EAAKmb,EAAOC,eAA4B,IAAPpb,OAAgB,EAASA,EAAGnE,OAC9D9K,EAAK+S,QAAQqX,EAAOC,QAAQvf,MAChC9K,EAAK8S,WAAW9W,KAAK+U,SACrB/U,KAAKgkG,QAAQvvF,KAAKzQ,GACXA,CACX,CACA4/F,eAAex1E,GACX,MAAMg3E,EAAiB,IAAIxB,GAAe,CACtCn7D,MAAOra,EAAOihE,KACdmT,KAAMp0E,EAAOkhE,KAQjB,OANIlhE,EAAOC,QAAQrqB,MACfohG,EAAet4C,QAAQ1+B,EAAOC,QAAQrqB,MACtCoqB,EAAOC,QAAQo8C,OACf26B,EAAer6B,SAAS38C,EAAOC,QAAQo8C,OAC3C26B,EAAetuF,WAAW9W,KAAK+U,SAC/B/U,KAAKgkG,QAAQvvF,KAAK2wF,GACXA,CACX,CACAhD,YAAYh0E,GACR,MAAMi3E,EAAc,IAAIjD,GAAY,CAChC35D,MAAOra,EAAOihE,KACdmT,KAAMp0E,EAAOkhE,GACbvqF,KAAMqpB,EAAOrpB,KACbksE,YAAa7iD,EAAOC,QAAQ4iD,YAC5Bx9C,SAAUrF,EAAOC,QAAQoF,WAQ7B,OANIrF,EAAOC,QAAQrqB,MACfqhG,EAAYv4C,QAAQ1+B,EAAOC,QAAQrqB,MACnCoqB,EAAOC,QAAQvf,MACfu2F,EAAYtuF,QAAQqX,EAAOC,QAAQvf,MACvCu2F,EAAYvuF,WAAW9W,KAAK+U,SAC5B/U,KAAKgkG,QAAQvvF,KAAK4wF,GACXA,CACX,CACAlH,OAAO/vE,EAAS,CAAC,GACbA,EAAO3uB,QAAUO,KACjB,MAAMslG,EAAS,IAAInH,GAAO/vE,GAAQtX,WAAW9W,KAAK+U,SAElD,OADA/U,KAAKikG,QAAQxvF,KAAK6wF,GACXA,CACX,CAYAhT,UAAUjkE,EAAU,CAAC,GAEjB,OADAA,EAAQ5uB,QAAUO,KACX,IAAIsyF,GAAUjkE,EACzB,CACAusE,aAAaxsE,GACT,MAAMqiD,EAAIpwE,OAAOmX,OAAO,CAAEwY,MAAO,GAAI3B,QAAS,CACtC/f,MAAO,UACN8f,GACHysE,EAAQ,IAAID,GAAanqB,EAAEzgD,OAIjC,OAHA6qE,EAAMn7C,QAAQk7C,GAAa38C,WAAWwyB,EAAEpiD,QAAQ/f,QAChDusF,EAAM/jF,WAAW9W,KAAK+U,SACtB/U,KAAKgkG,QAAQvvF,KAAKomF,GACXA,CACX,CACAr/B,aAAaptC,GACT,MAAMqiD,EAAIpwE,OAAOmX,OAAO,CAAEwY,MAAO,IAAM5B,GACjCstC,EAAQ,IAAIF,GAAaiV,EAAEzgD,OAEjC,OADA0rC,EAAM5kD,WAAW9W,KAAK+U,SACf2mD,CACX,CAEA3lD,OACI,MAAM6f,EAAM51B,KAAK+U,QACjB/U,KAAKikG,QAAQrvF,SAASvM,GAAMA,EAAEyO,WAAW8e,GAAKolC,WAC9Ch7D,KAAKs4E,OAAO1jE,SAASvM,GAAMA,EAAEyO,WAAW8e,GAAK7f,SAC7C/V,KAAKomC,OAAOxxB,SAASmlD,GAAMA,EAAEjjD,WAAW8e,GAAK7f,SAC7C/V,KAAKgkG,QAAQpvF,SAASjU,IACbA,EAAE0V,cACH1V,EAAEmW,WAAW8e,GAAK7f,MAAM,IAEhC/V,KAAKikG,QAAQrvF,SAASvM,GAAMA,EAAEyO,WAAW8e,GAAK7f,SAC9C/V,KAAKi3B,OACT,EAGJ8sE,GAAQxhE,OAAQ,EAEhBwhE,GAAQ5sF,UAAY9W,OAAOmX,OAAO,CAAC,EAAGzD,EAAQoD,WCjfvC,MAAMouF,WAAqBriG,GACnBxB,sBACP,OAAOG,EAAS0jG,YACpB,CACA9jG,YAAYs4C,GACRx2C,MAAMw2C,GAAY,GAClB/5C,KAAK8nC,eAAiBznC,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK8nC,gBAAiB,CAExErT,QAAS,GAETpF,MAAO,GAEPvgB,KAAM,SAASpB,EAAKe,eACxBzO,KAAKqhD,aACT,ECnBG,MAAMmkD,GACT/jG,YAAYtB,GACRH,KAAK6mC,MAAQ,IAAIvL,GACjBt7B,KAAKylG,OAAOtlG,EAChB,CACAslG,OAAOtlG,GAGH,OAFAH,KAAKG,IAAMA,EACXH,KAAKi3B,QACEj3B,IACX,CACA0lG,SACI,OAAO1lG,KAAKG,GAChB,CACA82B,QACIj3B,KAAKsR,SAAWtR,KAAK6mC,MAAMvG,YAAYtgC,KAAKG,KAC5CH,KAAKugC,UAAYvgC,KAAKsR,SAAS9R,KAC3BQ,KAAKsR,SAASsJ,aACd5a,KAAKugC,WAAavgC,KAAKsR,SAASsJ,YAEpC,IAD0B0gB,GAAMkD,WAAWx+B,KAAKsR,SAASW,MAErD,MAAM,IAAI9O,EAAa,eAAgB,yBAAyBnD,KAAKG,OAEzEH,KAAKqvB,MAAQrvB,KAAK6mC,MAAMvF,cAActhC,KAAK6mC,MAAMrG,aAAaxgC,KAAKugC,WAAYjF,GAAMkD,WAAWx+B,KAAKsR,SAASW,OAC9GjS,KAAKmiC,SAAW,CAAC,EACjBniC,KAAK2lG,gBAAkB,CAAC,EACxB3lG,KAAK4lG,wBAA0B,CAAC,EAChC,MAAM1jE,EAAe5G,GAAMK,aAAa37B,KAAKsR,SAAS9R,MACtD,IAAK,IAAIkJ,EAAI,EAAGA,EAAI4yB,GAAMG,MAAM71B,SAAU8C,EAAG,CACzC,MAAM4J,GAAS4vB,EAAex5B,GAAK4yB,GAAMG,MAAM71B,OACzCw8B,EAAW9G,GAAMG,MAAMnpB,GACvB+vB,EAAWriC,KAAK6mC,MAAM5F,oBAAoBmB,EAAUpiC,KAAKqvB,MAAM3mB,IACrE1I,KAAKmiC,SAASC,GAAYC,EAC1BriC,KAAK2lG,gBAAgB3lG,KAAKqvB,MAAM3mB,IAAM25B,EACtCriC,KAAK4lG,wBAAwB5lG,KAAKqvB,MAAM3mB,IAAM25B,CAClD,CACA,OAAOriC,IACX,CACA6lG,cAAc1lG,GACV,MAAMX,EAAOQ,KAAK6mC,MAAMvG,YAAYngC,GAAKX,KACnC01B,EAAQl1B,KAAK6mC,MAAM3G,aAAalgC,KAAKmiC,SAAS3iC,IACpD,MAAO,CACHo6B,KAAM55B,KAAKmiC,SAAS3iC,GACpBob,WAAYsa,EAAMta,WAE1B,CACAkrF,WAAWlsE,GACPA,EAAOA,EAAKzrB,cACZ,MAAM+mB,EAAQl1B,KAAK6mC,MAAM3G,aAAatG,GAEhCmsE,EAAY/lG,KAAKmiC,SAASjN,EAAM11B,MAChCwmG,EAAWhmG,KAAK6mC,MAAM3G,aAAa6lE,GACzC,GAAIA,IAAcnsE,EACd,MAAO,CACHA,KAAMmsE,EACNnrF,WAAYsa,EAAMta,WAClBqrF,QAAQ,GAIhB,MAAMC,EAAYlmG,KAAK2lG,gBAAgB3lG,KAAK6mC,MAAMrG,aAAa5G,IAC/D,GAAiB,MAAbssE,EACA,MAAO,CACHtsE,KAAMssE,EACNtrF,WAAY5a,KAAK6mC,MAAM3G,aAAagmE,GAAWtrF,WAC/CqrF,QAAQ,GAIhB,MAAME,EAAoBnmG,KAAK4lG,wBAAwB5lG,KAAK6mC,MAAMrG,aAAa5G,IAC/E,OAAyB,MAArBusE,GACAnmG,KAAKmiC,SAAS6jE,EAASxmG,MAAQ2mG,SACxBnmG,KAAK2lG,gBAAgB3lG,KAAK6mC,MAAMrG,aAAaulE,IACpD/lG,KAAK2lG,gBAAgB3lG,KAAK6mC,MAAMrG,aAAa5G,IAASusE,EAC/C,CACHvsE,KAAMusE,EACNvrF,WAAY5a,KAAK6mC,MAAM3G,aAAaimE,GAAmBvrF,WACvDqrF,QAAQ,IAIZD,EAASxmG,OAASo6B,UACX55B,KAAK2lG,gBAAgB3lG,KAAK6mC,MAAMrG,aAAaxgC,KAAKmiC,SAASjN,EAAM11B,QACxEQ,KAAK2lG,gBAAgB3lG,KAAK6mC,MAAMrG,aAAawlE,EAASxmG,OAASwmG,EAASxmG,KACxEQ,KAAKmiC,SAAS6jE,EAASxmG,MAAQwmG,EAASxmG,KACjC,CACHo6B,KAAMosE,EAASxmG,KACfob,gBAAYhX,EACZqiG,QAAQ,YAITjmG,KAAK2lG,gBAAgB3lG,KAAK6mC,MAAMrG,aAAaxgC,KAAKmiC,SAASjN,EAAM11B,QACxEQ,KAAK2lG,gBAAgB3lG,KAAK6mC,MAAMrG,aAAa5G,IAASA,SAC/C55B,KAAKmiC,SAAS6jE,EAASxmG,MAC9BQ,KAAKmiC,SAAS6jE,EAASxmG,MAAQo6B,EACxB,CACHA,OACAhf,WAAYsa,EAAMta,WAClBqrF,QAAQ,GAEhB,EChGJ,MAAMG,WAAqBryF,EACZrS,sBACP,OAAOG,EAASukG,YACpB,CAeA7gG,4BAA4BqwB,EAAK2W,EAAWvc,EAAO/d,EAAMwhB,EAAUpF,GAC/D,IAAIxgB,EAAIoF,EACR,MAAMozF,EAAM95D,EAAU+5D,cACtB,GAAW,MAAPD,EACA,MAAM,IAAIljG,EAAa,eAAgB,+DAE3C,MAAMojG,EAAaF,GAA2C,QAAnCx4F,EAAKwgB,EAAQm4E,wBAAqC,IAAP34F,EAAgBA,EAAK,GACrF44F,EAAaJ,GAA4C,QAApCpzF,EAAKob,EAAQq4E,yBAAsC,IAAPzzF,EAAgBA,EAAK,GACtF0zF,EAAkB,CACpBj8F,OAAQ2jB,EAAQ3jB,OAChB+pB,QAASpG,EAAQoG,QACjBmyE,cAAeL,EACfM,eAAgBJ,EAChBC,kBAAmB,EACnBF,iBAAkB,GAEtB,IAAIJ,GAAa,CACbxvC,WAAY5mC,EAAM4mC,WAClB1M,UAAWl6B,EAAMk6B,WAClBj4C,GACE6E,WAAW8e,GACXkxE,iBAAiBH,GACjBpsE,YAAY9G,GACZ1d,MACT,CAaAtU,YAAYuuB,EAAO/d,GACf1O,QACAvD,KAAKq2D,SAASrmC,GACdhwB,KAAK+mG,QAAU90F,EACfjS,KAAKyzB,SAAWkF,GAASC,SAASO,MAClCn5B,KAAK8nC,eAAiB,CAClBp9B,OAAQ,GACR+pB,QAAS,EACTmyE,cAAe,EACfC,eAAgB,EAChBH,kBAAmB,EACnBF,iBAAkB,EAE1B,CACAjsE,YAAY9G,GAIR,OAHIA,IAAakF,GAASC,SAASK,OAASxF,IAAakF,GAASC,SAASO,QACvEn5B,KAAKyzB,SAAWA,GAEbzzB,IACX,CACA8mG,iBAAiBz4E,GAOb,OANsB,MAAlBA,EAAQ3jB,QACW,MAAnB2jB,EAAQoG,SACiB,MAAzBpG,EAAQu4E,eACkB,MAA1Bv4E,EAAQw4E,iBACR7mG,KAAK8nC,eAAiBzZ,GAEnBruB,IACX,CAMAq2D,SAASrmC,GACL,IAAKA,EAAM4mC,aAAe5mC,EAAMk6B,UAC5B,MAAM,IAAI/mD,EAAa,eAAgB,6DAK3C,OAHAnD,KAAKgwB,MAAQA,EACbhwB,KAAK42D,WAAa5mC,EAAM4mC,WACxB52D,KAAKkqD,UAAYl6B,EAAMk6B,UAChBlqD,IACX,CACA8uF,cAAc1gE,GACV,MAAMwH,EAAM51B,KAAK8V,eACjB,IAAIkxF,EAAMhnG,KAAK8nC,eAAerT,QAAU,GACpCA,EAAUrG,EAAOwhE,QACjB5vF,KAAKyzB,WAAakF,GAASC,SAASK,QACpC+tE,EAAa,GAANA,EACPvyE,EAAUrG,EAAOwhE,QAAUxhE,EAAO64E,cAEtC,MAAMC,EAAUlnG,KAAK8nC,eAAe8+D,cAC9BO,EAAUnnG,KAAK8nC,eAAe++D,eAEpC,OADAjxE,EAAIQ,YACIp2B,KAAK+mG,SACT,KAAKX,GAAan0F,KAAKm1F,MACnBxxE,EAAIS,OAAOjI,EAAOyhE,OAASsX,EAAS1yE,EAAUuyE,GAC9CpxE,EAAIU,OAAOlI,EAAOuhE,QAAUuX,EAASzyE,EAAUz0B,KAAK8nC,eAAep9B,OAAS,EAAIs8F,GAChFpxE,EAAIU,OAAOlI,EAAOyhE,OAASsX,EAAS1yE,EAAUz0B,KAAK8nC,eAAep9B,OAASs8F,GAC3E,MACJ,KAAKZ,GAAan0F,KAAKo1F,QACnBzxE,EAAIS,OAAOjI,EAAOuhE,QAAUuX,EAASzyE,EAAUuyE,GAC/CpxE,EAAIU,OAAOlI,EAAOyhE,OAASsX,EAAS1yE,EAAUz0B,KAAK8nC,eAAep9B,OAAS,EAAIs8F,GAC/EpxE,EAAIU,OAAOlI,EAAOuhE,QAAUuX,EAASzyE,EAAUz0B,KAAK8nC,eAAep9B,OAASs8F,GAMpFpxE,EAAIhH,SACJgH,EAAI+f,WACR,CACA5/B,OACI/V,KAAK8V,eACL9V,KAAKsW,cACL,MAAMi0E,EAAYvqF,KAAK42D,WACjBtL,EAAWtrD,KAAKkqD,UACtB,IAAKqgC,IAAcj/B,EACf,MAAM,IAAInoD,EAAa,SAAU,0BACrC,MAAMslC,EAAQ8hD,EAAU7hD,mBAAmB1oC,KAAKyzB,SAAU,GACpD6qB,EAAMgN,EAAS5iB,mBAAmB1oC,KAAKyzB,SAAU,GACvDzzB,KAAK8uF,cAAc,CACfa,QAASlnD,EAAM9kC,EACfksF,OAAQvxC,EAAI36C,EACZisF,QAASrF,EAAUnyD,aAAalvB,OAASqhF,EAAUnyD,aAAakS,YAChEwlD,OAAQxkC,EAASlzB,aAAalvB,OAASoiD,EAASlzB,aAAakS,YAC7D28D,aAAc1c,EAAUnyD,aAAakS,aAE7C,EAEJ87D,GAAan0F,KAAO,CAChBm1F,MAAO,EACPC,QAAS,GCrJb,MAAMC,WAAiBzvC,GACRn2D,sBACP,OAAOG,EAASylG,QACpB,CACWC,sBACP,OAAO,CACX,CACWC,wBACP,OAAQ,CACZ,CACAjiG,qBAAqByqB,GACjB,OAAO,IAAIs3E,GAASt3E,EAAOs3E,GAASC,SACxC,CACAhiG,uBAAuByqB,GACnB,OAAO,IAAIs3E,GAASt3E,EAAOs3E,GAASE,WACxC,CAgBA/lG,YAAYuuB,EAAO+Q,GAGf,GAFAx9B,MAAMysB,EAAO,QAER+Q,EAAW,CACZ,IAAI0mE,EAAaz3E,EAAM4mC,WAAWuS,eAAe,GAAG/5C,KAC1B,iBAAfq4E,IACPA,EAAa5iG,SAAS4iG,EAAY,KAEtC,IAAIC,EAAY13E,EAAMk6B,UAAUif,eAAe,GAAG/5C,KACzB,iBAAds4E,IACPA,EAAY7iG,SAAS6iG,EAAW,KAKhC3mE,EADAt7B,MAAMgiG,IAAehiG,MAAMiiG,GACfJ,GAASC,SAGTE,EAAaC,EAAYJ,GAASE,WAAaF,GAASC,QAE5E,CACAvnG,KAAK+gC,UAAYA,EACjB/gC,KAAK8nC,eAAewuB,IAAM,GAC1Bt2D,KAAK8nC,eAAeyuB,IAAM,GAC1Bv2D,KAAK8nC,eAAerT,QAAU,GAC9Bz0B,KAAK2X,WACT,CACAq/C,UAAU5oC,GACN,GAA+B,IAA3BA,EAAO6oC,SAASrxD,QAA0C,IAA1BwoB,EAAO8oC,QAAQtxD,OAC/C,MAAM,IAAIzC,EAAa,eAAgB,yBAE3C,MAAMyyB,EAAM51B,KAAK8V,eACXshD,EAAahpC,EAAOgpC,WACpBH,EAAW7oC,EAAO6oC,SAClBE,EAAY/oC,EAAO+oC,UACnBp2B,EAAY3S,EAAO2S,UACzB,GAAIA,IAAcumE,GAASC,UAAYxmE,IAAcumE,GAASE,WAC1D,MAAM,IAAIrkG,EAAa,WAAY,2BAGvC,MAAM0zD,EAAgB72D,KAAKgwB,MAAM6mC,cACjC,IAAK,IAAInuD,EAAI,EAAGA,EAAImuD,EAAcjxD,SAAU8C,EAAG,CAC3C,MAAMi/F,EAAU1wC,EAASJ,EAAcnuD,IAAM1I,KAAK8nC,eAAerT,QACjE,GAAIhvB,MAAMkiG,GACN,MAAM,IAAIxkG,EAAa,eAAgB,oCAE3CyyB,EAAIQ,YACJR,EAAIS,OAAO+gC,EAAYuwC,EAAU,EAAI5mE,GACrCnL,EAAIU,OAAO6gC,EAAWwwC,EAAU,EAAI5mE,GACpCnL,EAAI+f,YACJ/f,EAAIhH,QACR,CACA5uB,KAAKsW,aACT,EAEJgxF,GAASnwF,UAAY,CACjB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWqhC,KACnBr/B,MAAO/B,EAAUkD,QCxFd,MAAMm4F,WAAgBjvE,GACdj3B,sBACP,OAAOG,EAAS+lG,OACpB,CAIAnmG,YAAY8W,GACRhV,QACAvD,KAAKuY,IAAMA,EACXvY,KAAKyzB,SAAWkF,GAASC,SAASG,OAClC/4B,KAAKqD,KAAO,WAEZrD,KAAK6nG,gBAAkB,EACvB7nG,KAAK8nG,mBAAqB,CAC9B,CAEA/xF,OACI,IAAIlI,EACJ,MAAM+nB,EAAM51B,KAAK8V,eACX8jB,EAAO55B,KAAK65B,oBAClB75B,KAAKsW,cACL,MAAMs5B,EAAgBhW,EAAKkW,mBAE3B,IAAInsC,EADUi2B,EAAK8O,mBAAmB1oC,KAAKyzB,SAAUzzB,KAAKsS,OAC5C3O,EACd,MAAM47B,EAAKl9B,EAAYu3B,GACjBvK,EAAQkQ,EAAKj9B,GAAUs0F,MAAQ,EAC/Bt1F,EAAW,YAAWi+B,EAAK,QAAU,WACrCkD,EAAYzU,EAAO0U,mBACzB,IAAIqlE,EAAYtlE,EAAUrxB,aAAa,GAAG9P,aAAsBsuC,EAEhEm4D,GAAa/nG,KAAK6nG,gBAClB,MAAMn9F,EAAS1K,KAAKuY,IAAMwvF,EAC1B,IAAIj/F,EAAI8wB,EAAKwY,iBAAiBpH,MAAQtgC,EAElC5B,GADA8mC,EAAgB,EACXnN,EAAUrxB,aAAa,GAAG9P,qBAA8B+tB,EAGxDoT,EAAUrxB,aAAa,GAAG9P,mBAA4B+tB,EAE/D,MAAM+Y,EAAmE,QAAtDv6B,EAAK40B,EAAUrxB,aAAa,GAAG9P,kBAAsC,IAAPuM,EAAgBA,EAAKnL,GAAKm9D,SAAStgC,EAAK,QAAU,WACnI57B,GAAK8+B,EAAUrxB,aAAa,GAAG9P,gBAAuBsuC,IAAkB/G,GAAKC,GAAK,KAAO,UACzF,IAAK,IAAIpgC,EAAI,EAAGA,EAAI1I,KAAKuY,MAAO7P,EAC5B+mB,EAAMk+B,YAAY/3B,EAAKjyB,EAAGmF,EAAGs/B,EAAWpoC,KAAKqD,KAAM,CAAE/B,WAAU+tB,MAAOrvB,KAAK8nG,qBAC3Eh/F,GAAKi/F,CAEb,ECpDG,MAAMC,GACEC,mBACP,MAAO,CACHC,SAAU,0BACVC,OAAQ,0BACRC,MAAO,0BACPlpE,GAAI,gCACJmpE,cAAe,sBAEvB,CAKA5mG,YAAY6mG,EAAe,mCACvBtoG,KAAKuoG,aAAe,GAEpBvoG,KAAKwoG,UAAUF,EACnB,CAEAG,cAActoE,GACV,IAAItyB,EACJ,OAA6D,QAArDA,EAAKmgB,EAAO6jC,cAAc1xB,GAAYtR,iBAA8B,IAAPhhB,EAAgBA,GAAM,CAC/F,CAKA26F,UAAUF,GACFN,GAAOC,MAAMK,KACbA,EAAeN,GAAOC,MAAMK,IAEhCtoG,KAAKuoG,aAAe,GACpB,MAAMj1F,EAAOg1F,EAAa3/F,MAAM,WAChC,GAAoB,IAAhB2K,EAAK1N,OACL,MAAM,IAAIzC,EAAa,eAAgB,0BAA0BmlG,KAErE,IAAK,IAAI5/F,EAAI,EAAGA,EAAI4K,EAAK1N,SAAU8C,EAC/B1I,KAAKuoG,aAAa7/F,GAAK1I,KAAKyoG,cAAcn1F,EAAK5K,GAEvD,CAEAggG,kBAAkBC,GACd,MAAMtgG,EAAI7C,OAAOmjG,GACjB,GAAItgG,EAAI,GAAKA,EAAIrI,KAAKuoG,aAAa3iG,OAC/B,MAAM,IAAIzC,EAAa,eAAgB,uCAAuCnD,KAAKuoG,aAAa3iG,UAAU+iG,KAE9G,OAAO3oG,KAAKuoG,aAAalgG,EAAI,EACjC,CAEAugG,gBAAgBC,EAASF,GACrB,MAAMG,EAAc9oG,KAAK0oG,kBAAkBC,GACrCpgG,EAAI/C,OAAOqjG,GACjB,GAAItgG,EAAI,EACJ,MAAM,IAAIpF,EAAa,eAAgB,oCAAoC0lG,KAE/E,OAAOC,EAAcvgG,CACzB,CAEAwgG,eAAeF,EAASF,GACpB,MAAMx5E,EAAYnvB,KAAK4oG,gBAAgBC,EAASF,GAC1CvsF,EAASnX,KAAK4C,MAAMsnB,EAAY,IAChC/tB,EAAQ+tB,EAAY,GAC1B,MAAO,GAAGnB,EAAOg7E,cAAc5nG,MAAUgb,GAC7C,ECrEJ,IAAI,GAAwC,SAAU3P,EAASC,EAAYC,EAAGC,GAE1E,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAU5L,GAAS,IAAM6L,EAAKL,EAAUM,KAAK9L,GAAS,CAAE,MAAOT,GAAKoM,EAAOpM,EAAI,CAAE,CAC1F,SAASwM,EAAS/L,GAAS,IAAM6L,EAAKL,EAAiB,MAAExL,GAAS,CAAE,MAAOT,GAAKoM,EAAOpM,EAAI,CAAE,CAC7F,SAASsM,EAAKG,GAJlB,IAAehM,EAIagM,EAAOC,KAAOP,EAAQM,EAAOhM,QAJ1CA,EAIyDgM,EAAOhM,MAJhDA,aAAiBuL,EAAIvL,EAAQ,IAAIuL,GAAE,SAAUG,GAAWA,EAAQ1L,EAAQ,KAIjBkM,KAAKN,EAAWG,EAAW,CAC7GF,GAAML,EAAYA,EAAUW,MAAMd,EAASC,GAAc,KAAKQ,OAClE,GACJ,EAmFA,MAAM+7F,GACSC,mBACP,MAAO,CAEHC,QC/FW,QDiGXn1F,GChGM,2CDkGNo1F,KCjGQ,2BDmGhB,CA2BA7jG,uBAAuB8jG,GAEnB,MAAMr5F,EAAQq5F,EAAU91F,KAAK7D,GAAahC,EAAKqC,KAAKL,KAIpD,OAHAse,EAAOC,iBAAmBje,EAC1Byf,EAAMxB,iBAAmBje,EAAM9L,QAC/BurB,EAAMgJ,kBAAoB4wE,EAAUllG,KAAK,KAClC6L,CACX,CAKAzK,sBAAsBmK,EAAU45F,GAC5B,OAAO,GAAUtpG,UAAM,OAAQ,GAAQ,YAGvC,GACJ,CACAuF,sBAEI,OADcyoB,EAAOC,iBACR1a,KAAKzE,GAASA,EAAK8B,WACpC,CACArL,2BACI,OAAOyoB,EAAOC,gBAClB,CACW8C,qCACP,OAAO/C,EAAO+C,uBAClB,CACWA,mCAAwB+D,GAC/B9G,EAAO+C,wBAA0B+D,CACrC,CACWnE,4BACP,OAAO3C,EAAO2C,cAClB,CACWA,0BAAe+oC,GACtB1rC,EAAO2C,eAAiB+oC,CAC5B,CACWjpC,iCACP,OAAOzC,EAAOyC,mBAClB,CACWA,+BAAoBrvB,GAC3B4sB,EAAOyC,oBAAsBrvB,CACjC,CACWsuB,kCACP,OAAO1B,EAAO0B,oBAClB,CACWA,gCAAqBtuB,GAC5B4sB,EAAO0B,qBAAuBtuB,CAClC,CACW8W,wBACP,OAAO8V,EAAO9V,UAClB,CACWA,sBAAW9W,GAClB4sB,EAAO9V,WAAa9W,CACxB,CACW4vB,kCACP,OAAOhD,EAAOgD,oBAClB,CACWA,gCAAqB5vB,GAC5B4sB,EAAOgD,qBAAuB5vB,CAClC,CACW6vB,iCACP,OAAOjD,EAAOiD,mBAClB,CACWA,+BAAoB7vB,GAC3B4sB,EAAOiD,oBAAsB7vB,CACjC,CACW0vB,kCACP,OAAO9C,EAAO8C,oBAClB,CACWA,gCAAqB1vB,GAC5B4sB,EAAO8C,qBAAuB1vB,CAClC,CACWyvB,yBACP,OAAO7C,EAAO6C,WAClB,CACWA,uBAAYzvB,GACnB4sB,EAAO6C,YAAczvB,CACzB,CACWwvB,wBACP,OAAO5C,EAAO4C,UAClB,CACWA,sBAAWxvB,GAClB4sB,EAAO4C,WAAaxvB,CACxB,CACWyxB,qBACP,OAAO7E,EAAO6E,OAClB,CACW1B,2BACP,OAAOnD,EAAOmD,aAClB,CACWQ,qBACP,OAAO3D,EAAO2D,OAClB,CACApsB,oBAAoBuqB,GAChB,OAAO9B,EAAO8T,aAAahS,EAC/B,CACAvqB,uBAAuBuqB,GACnB,OAAO9B,EAAOu7E,gBAAgBz5E,EAClC,CACAvqB,0BACI,OAAOyoB,EAAOw7E,kBAClB,CACAjkG,sBAAsB2oB,GAClB,OAAOF,EAAOW,eAAeT,EACjC,CAEA3oB,qBAAqBpF,EAAK+tB,EAAME,GAC5B,OAAOJ,EAAO6jC,cAAc1xD,EAAK+tB,EAAME,EAC3C,CACA7oB,uBAAuBgpB,GACnB,OAAOP,EAAOmsB,gBAAgB5rB,EAClC,EAEJ06E,GAAKnnG,WAAaA,GAClBmnG,GAAKjnG,WAAaA,GAClBinG,GAAKh2D,aAAeA,GACpBg2D,GAAK/mG,QAAUA,GACf+mG,GAAKzoD,QAAUA,GACfyoD,GAAK9tC,KAAOA,GACZ8tC,GAAKvoD,KAAOA,GACZuoD,GAAKrgG,YAAcA,EACnBqgG,GAAKh/F,uBAAyBA,EAC9Bg/F,GAAK7oC,cAAgBA,GACrB6oC,GAAKtmD,YAAcA,GACnBsmD,GAAKv9B,KAAOA,GACZu9B,GAAKjb,SAAWA,GAChBib,GAAK/a,UAAYA,GACjB+a,GAAKja,MAAQA,GACbia,GAAK7mG,IAAMA,GACX6mG,GAAK3W,UAAYA,GACjB2W,GAAKl1F,QAAUA,EACfk1F,GAAKlF,QAAUA,GACfkF,GAAKv7F,KAAOA,EACZu7F,GAAKnuC,UAAYA,GACjBmuC,GAAK3jG,SAAWA,EAChB2jG,GAAK1+C,eAAiBA,GACtB0+C,GAAKlT,UAAYA,GACjBkT,GAAKx5E,MAAQA,EACbw5E,GAAKvS,UAAYA,GACjBuS,GAAK3mG,UAAYA,GACjB2mG,GAAKzmG,eAAiBA,GACtBymG,GAAK1D,aAAeA,GACpB0D,GAAKzD,WAAaA,GAClByD,GAAKl9B,aAAeA,GACpBk9B,GAAK7Q,WAAaA,GAClB6Q,GAAKtwE,SAAWA,GAChBswE,GAAK59B,gBAAkBA,GACvB49B,GAAK3Q,iBAAmBA,GACxB2Q,GAAK3tE,MAAQA,GACb2tE,GAAKvmG,KAAOA,GACZumG,GAAK78C,SAAWA,GAChB68C,GAAKztC,aAAeA,GACpBytC,GAAKxrC,SAAWA,GAChBwrC,GAAKzpC,YAAcA,GACnBypC,GAAK9Y,OAASA,GACd8Y,GAAKrO,aAAeA,GACpBqO,GAAK92F,SAAWA,EAChB82F,GAAKrmG,cAAgBA,GACrBqmG,GAAKtjC,SAAWA,GAChBsjC,GAAKhN,WAAaA,GAClBgN,GAAKp7B,WAAaA,GAClBo7B,GAAK90B,MAAQA,GACb80B,GAAKlwB,eAAiBA,GACtBkwB,GAAK7C,aAAeA,GACpB6C,GAAK9M,UAAYA,GACjB8M,GAAKxrD,cAAgBA,GACrBwrD,GAAKnmG,UAAYA,GACjBmmG,GAAKr5B,WAAaA,GAClBq5B,GAAK13B,UAAYA,GACjB03B,GAAK7yC,SAAWA,GAChB6yC,GAAKpgE,KAAOA,GACZogE,GAAK1hC,aAAeA,GACpB0hC,GAAKlgC,OAASA,GACdkgC,GAAKxmC,WAAaA,GAClBwmC,GAAK9K,OAASA,GACd8K,GAAK/lG,QAAUA,GACf+lG,GAAK3B,SAAWA,GAChB2B,GAAK/G,SAAWA,GAChB+G,GAAKpxC,OAASA,GACdoxC,GAAK7G,YAAcA,GACnB6G,GAAK9F,aAAeA,GACpB8F,GAAKp9D,cAAgBA,GACrBo9D,GAAK74B,SAAWA,GAChB64B,GAAKttC,YAAcA,GACnBstC,GAAKl2B,cAAgBA,GACrBk2B,GAAKvF,YAAcA,GACnBuF,GAAKrB,QAAUA,GACfqB,GAAKjB,OAASA,GACdiB,GAAK3lB,OAASA,GACd2lB,GAAK3+B,QAAUA,GACf2+B,GAAKrF,eAAiBA,GACtBqF,GAAKlxC,MAAQA,GACbkxC,GAAKt3B,MAAQA,GAGbs3B,GAAKp6D,4BAA8BA,GACnCo6D,GAAKn6D,0BAA4BA,GACjCm6D,GAAK5rD,6BAA+BA,GACpC4rD,GAAK3rD,2BAA6BA,GAClC2rD,GAAK1rD,YAAcA,GACnB0rD,GAAKzrD,gBAAkBA,GACvByrD,GAAKla,cAAgBA,GACrBka,GAAK38F,WAAaA,EAClB28F,GAAK18F,UAAYA,EACjB08F,GAAKj1E,iBAAmBA,EACxBi1E,GAAK5jC,iBAAmBA,GACxB4jC,GAAK3jC,oBAAsBA,GAC3B2jC,GAAK7rD,YAAcA,GACnB6rD,GAAK9rD,sBAAwBA,GAC7B8rD,GAAKzjC,UAAYA,GACjByjC,GAAK5G,oBAAsBA,GAC3B4G,GAAK1jC,kBAAoBA,GACzB0jC,GAAKnxC,UAAYA,GErVV,MAAM2xC,GAAqB,CAC9B93D,QAAS,GACTxgC,OAAQ,CACJ,IAAK,CACDqkB,MAAO,EACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,EACjBvV,aAAc,KAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,EACjBvV,aAAc,KAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB07D,EAAG,CACCl0E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,OAAQ,EACRC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,iBAAkB,EAClBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,GACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,GACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,OAAQ,GACRC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,iBAAkB,GAClBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,GACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,kBACPC,MAAO,IACP5Y,GAAI,kBACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,GACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBp0B,EAAG,CACC4b,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBl0B,EAAG,CACC0b,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB11B,EAAG,CACCkd,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBt0B,EAAG,CACC8b,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBn0B,EAAG,CACC2b,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBv1B,EAAG,CACC+c,MAAO,GACPC,MAAO,IACP4Y,MAAO,GACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBx0B,EAAG,CACCgc,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBlR,EAAG,CACCtH,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB27D,EAAG,CACCn0E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB47D,EAAG,CACCp0E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB67D,EAAG,CACCr0E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB1L,EAAG,CACC9M,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBvP,EAAG,CACCjJ,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB87D,EAAG,CACCt0E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB+7D,EAAG,CACCv0E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBrhC,EAAG,CACC6oB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBg8D,EAAG,CACCx0E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB/xB,EAAG,CACCuZ,MAAO,GACPC,MAAO,IACP4Y,MAAO,GACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBnR,EAAG,CACCrH,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBhR,EAAG,CACCxH,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBi8D,EAAG,CACCz0E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBk8D,EAAG,CACC10E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB/Q,EAAG,CACCzH,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB7xB,EAAG,CACCqZ,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBm8D,EAAG,CACC30E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBo8D,EAAG,CACC50E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,KAAM,CACFxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,OAAQ,GACRC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,KACJ6tB,iBAAkB,GAClBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBq8D,EAAG,CACC70E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,OAAQ,EACR5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBvpC,EAAG,CACC+wB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBtpC,EAAG,CACC8wB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB/hC,EAAG,CACCupB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB3nC,EAAG,CACCmvB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBrtC,EAAG,CACC60B,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBzlC,EAAG,CACCitB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBvtC,EAAG,CACC+0B,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBhlC,EAAG,CACCwsB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBtlC,EAAG,CACC8sB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElByW,EAAG,CACCjvB,OAAQ,IACRC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,iBAAkB,IAClBvV,aAAc,KAElBx6B,EAAG,CACCgiB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBs8D,EAAG,CACC90E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB3b,EAAG,CACCmD,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBppC,EAAG,CACC4wB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB5tC,EAAG,CACCo1B,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElByiC,EAAG,CACCj7C,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB1lC,EAAG,CACCktB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB/sC,EAAG,CACCu0B,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB3lC,EAAG,CACCmtB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBtoC,EAAG,CACC8vB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB5nC,EAAG,CACCovB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB+rB,EAAG,CACCvkC,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBjlC,EAAG,CACCysB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBrqC,EAAG,CACC6xB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBllC,EAAG,CACC0sB,OAAQ,GACRC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,iBAAkB,GAClBvV,aAAc,KAElB0iC,EAAG,CACCl7C,MAAO,GACPC,MAAO,IACP4Y,OAAQ,EACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,EACPC,MAAO,EACP4Y,MAAO,EACPC,MAAO,EACP5Y,GAAI,EACJ6tB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,EACPC,MAAO,EACP4Y,MAAO,EACPC,MAAO,EACP5Y,GAAI,EACJ6tB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,EACPC,MAAO,EACP4Y,MAAO,EACPC,MAAO,EACP5Y,GAAI,EACJ6tB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,EACPC,MAAO,EACP4Y,MAAO,EACPC,MAAO,EACP5Y,GAAI,EACJ6tB,gBAAiB,EACjBvV,aAAc,MAGtBj/B,WAAY,iBACZkC,WAAY,IACZs5F,YAAa,4BC71BJC,GAAiB,CAC1B74D,QAAS,GACTxgC,OAAQ,CACJ,IAAK,CACDqkB,MAAO,EACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,EACjBvV,aAAc,KAElB,EAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,EAAK,CACDxY,MAAO,iBACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,kBACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,iBACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,GAClBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,KACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB07D,EAAG,CACCl0E,MAAO,kBACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,KACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,EACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,GACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,kBACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,iBACPC,MAAO,mBACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBp0B,EAAG,CACC4b,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBl0B,EAAG,CACC0b,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB11B,EAAG,CACCkd,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBt0B,EAAG,CACC8b,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBn0B,EAAG,CACC2b,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBv1B,EAAG,CACC+c,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBx0B,EAAG,CACCgc,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBlR,EAAG,CACCtH,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB27D,EAAG,CACCn0E,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB47D,EAAG,CACCp0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB67D,EAAG,CACCr0E,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB1L,EAAG,CACC9M,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBvP,EAAG,CACCjJ,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB87D,EAAG,CACCt0E,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB+7D,EAAG,CACCv0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBrhC,EAAG,CACC6oB,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBg8D,EAAG,CACCx0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB/xB,EAAG,CACCuZ,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBnR,EAAG,CACCrH,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBhR,EAAG,CACCxH,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBi8D,EAAG,CACCz0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBk8D,EAAG,CACC10E,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB/Q,EAAG,CACCzH,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB7xB,EAAG,CACCqZ,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBm8D,EAAG,CACC30E,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBo8D,EAAG,CACC50E,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,KAAM,CACFxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBq8D,EAAG,CACC70E,MAAO,IACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,EACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,KACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBvpC,EAAG,CACC+wB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBtpC,EAAG,CACC8wB,OAAQ,GACRC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,GAClBvV,aAAc,MAElB/hC,EAAG,CACCupB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB3nC,EAAG,CACCmvB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBrtC,EAAG,CACC60B,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBzlC,EAAG,CACCitB,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBvtC,EAAG,CACC+0B,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBhlC,EAAG,CACCwsB,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBtlC,EAAG,CACC8sB,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElByW,EAAG,CACCjvB,OAAQ,GACRC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,GAClBvV,aAAc,KAElBx6B,EAAG,CACCgiB,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBs8D,EAAG,CACC90E,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB3b,EAAG,CACCmD,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBppC,EAAG,CACC4wB,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB5tC,EAAG,CACCo1B,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElByiC,EAAG,CACCj7C,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB1lC,EAAG,CACCktB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB/sC,EAAG,CACCu0B,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB3lC,EAAG,CACCmtB,MAAO,IACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBtoC,EAAG,CACC8vB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB5nC,EAAG,CACCovB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB+rB,EAAG,CACCvkC,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBjlC,EAAG,CACCysB,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBrqC,EAAG,CACC6xB,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBllC,EAAG,CACC0sB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB0iC,EAAG,CACCl7C,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,OAGtBj/B,WAAY,cACZkC,WAAY,KACZs5F,YAAa,4BC71BJE,GAAe,CACxBt5F,OAAQ,CACJ,EAAK,CACDqkB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,EACPC,MAAO,EACP4Y,MAAO,EACPC,MAAO,EACP5Y,GAAI,EACJ6tB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB07D,EAAG,CACCl0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,OAAQ,EACRC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,EAClBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBp0B,EAAG,CACC4b,MAAO,EACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,EACjBvV,aAAc,MAElBl0B,EAAG,CACC0b,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB11B,EAAG,CACCkd,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBt0B,EAAG,CACC8b,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBn0B,EAAG,CACC2b,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBv1B,EAAG,CACC+c,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBx0B,EAAG,CACCgc,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBlR,EAAG,CACCtH,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB27D,EAAG,CACCn0E,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB47D,EAAG,CACCp0E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB67D,EAAG,CACCr0E,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB1L,EAAG,CACC9M,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBvP,EAAG,CACCjJ,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB87D,EAAG,CACCt0E,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB+7D,EAAG,CACCv0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBrhC,EAAG,CACC6oB,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBg8D,EAAG,CACCx0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB/xB,EAAG,CACCuZ,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBnR,EAAG,CACCrH,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBhR,EAAG,CACCxH,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBi8D,EAAG,CACCz0E,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBk8D,EAAG,CACC10E,OAAQ,EACRC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,EAClBvV,aAAc,MAElB/Q,EAAG,CACCzH,MAAO,EACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,EACjBvV,aAAc,MAElB7xB,EAAG,CACCqZ,MAAO,EACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,EACjBvV,aAAc,MAElBm8D,EAAG,CACC30E,OAAQ,EACRC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,EAClBvV,aAAc,MAElBo8D,EAAG,CACC50E,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,KAAM,CACFxY,OAAQ,EACRC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,EAClBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBq8D,EAAG,CACC70E,OAAQ,GACRC,MAAO,KACP4Y,OAAQ,IACRC,OAAQ,IACR5Y,GAAI,IACJ6tB,iBAAkB,GAClBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,KACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBvpC,EAAG,CACC+wB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBtpC,EAAG,CACC8wB,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB/hC,EAAG,CACCupB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB3nC,EAAG,CACCmvB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBrtC,EAAG,CACC60B,MAAO,GACPC,MAAO,mBACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBzlC,EAAG,CACCitB,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBvtC,EAAG,CACC+0B,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBhlC,EAAG,CACCwsB,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBtlC,EAAG,CACC8sB,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElByW,EAAG,CACCjvB,OAAQ,GACRC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,GAClBvV,aAAc,KAElBx6B,EAAG,CACCgiB,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBs8D,EAAG,CACC90E,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB3b,EAAG,CACCmD,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBppC,EAAG,CACC4wB,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB5tC,EAAG,CACCo1B,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElByiC,EAAG,CACCj7C,MAAO,IACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB1lC,EAAG,CACCktB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB/sC,EAAG,CACCu0B,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB3lC,EAAG,CACCmtB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBtoC,EAAG,CACC8vB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB5nC,EAAG,CACCovB,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB+rB,EAAG,CACCvkC,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBjlC,EAAG,CACCysB,MAAO,EACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,EACjBvV,aAAc,MAElBrqC,EAAG,CACC6xB,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBllC,EAAG,CACC0sB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB0iC,EAAG,CACCl7C,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,OAGtBj/B,WAAY,QACZkC,WAAY,KACZs5F,YAAa,4BC51BJG,GAAW,CACpBC,OAAO,EACPh6F,KAAM,OACNghC,QAAS,GACTi5D,YAAa,2BACbn+D,MAAM,EACNE,QAAQ,EACRQ,YAAY,EACZD,QAAQ,EACR/7B,OAAQ,CACJ,EAAK,CACDqkB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,mBACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,EACPC,MAAO,EACP4Y,MAAO,EACPC,MAAO,EACP5Y,GAAI,EACJ6tB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB07D,EAAG,CACCl0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,EACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBp0B,EAAG,CACC4b,OAAQ,EACRC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,EAClBvV,aAAc,MAElBl0B,EAAG,CACC0b,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB11B,EAAG,CACCkd,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBt0B,EAAG,CACC8b,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBn0B,EAAG,CACC2b,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBv1B,EAAG,CACC+c,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBx0B,EAAG,CACCgc,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBlR,EAAG,CACCtH,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB27D,EAAG,CACCn0E,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB47D,EAAG,CACCp0E,MAAO,kBACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB67D,EAAG,CACCr0E,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB1L,EAAG,CACC9M,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBvP,EAAG,CACCjJ,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB87D,EAAG,CACCt0E,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB+7D,EAAG,CACCv0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBrhC,EAAG,CACC6oB,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBg8D,EAAG,CACCx0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB/xB,EAAG,CACCuZ,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBnR,EAAG,CACCrH,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBhR,EAAG,CACCxH,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBi8D,EAAG,CACCz0E,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBk8D,EAAG,CACC10E,MAAO,EACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,EACjBvV,aAAc,MAElB/Q,EAAG,CACCzH,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB7xB,EAAG,CACCqZ,MAAO,EACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,EACjBvV,aAAc,MAElBm8D,EAAG,CACC30E,MAAO,EACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,EACjBvV,aAAc,MAElBo8D,EAAG,CACC50E,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,KAAM,CACFxY,MAAO,EACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBq8D,EAAG,CACC70E,OAAQ,GACRC,MAAO,KACP4Y,OAAQ,IACRC,OAAQ,IACR5Y,GAAI,IACJ6tB,iBAAkB,GAClBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,KACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBvpC,EAAG,CACC+wB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBtpC,EAAG,CACC8wB,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB/hC,EAAG,CACCupB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB3nC,EAAG,CACCmvB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBrtC,EAAG,CACC60B,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBzlC,EAAG,CACCitB,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBvtC,EAAG,CACC+0B,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBhlC,EAAG,CACCwsB,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBtlC,EAAG,CACC8sB,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElByW,EAAG,CACCjvB,OAAQ,GACRC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,GAClBvV,aAAc,KAElBx6B,EAAG,CACCgiB,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBs8D,EAAG,CACC90E,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB3b,EAAG,CACCmD,MAAO,IACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBppC,EAAG,CACC4wB,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB5tC,EAAG,CACCo1B,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElByiC,EAAG,CACCj7C,MAAO,IACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB1lC,EAAG,CACCktB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB/sC,EAAG,CACCu0B,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB3lC,EAAG,CACCmtB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBtoC,EAAG,CACC8vB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB5nC,EAAG,CACCovB,MAAO,IACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB+rB,EAAG,CACCvkC,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBjlC,EAAG,CACCysB,MAAO,EACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,EACjBvV,aAAc,MAElBrqC,EAAG,CACC6xB,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBllC,EAAG,CACC0sB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB0iC,EAAG,CACCl7C,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,OAGtBj/B,WAAY,aACZkC,WAAY,KACZs5F,YAAa,4BCp2BJM,GAAY,CACrBF,OAAO,EACPh6F,KAAM,QACNghC,QAAS,GACTi5D,YAAa,sBACbn+D,MAAM,EACNE,QAAQ,EACRQ,YAAY,EACZD,QAAQ,EACR/7B,OAAQ,CACJ,EAAK,CACDqkB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,EAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,EACPC,MAAO,EACP4Y,MAAO,EACPC,MAAO,EACP5Y,GAAI,EACJ6tB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,kBACPC,MAAO,kBACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,EACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB07D,EAAG,CACCl0E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,kBACPC,MAAO,kBACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,mBACPC,MAAO,iBACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,OAAQ,GACRC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,GAClBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,MAElBp0B,EAAG,CACC4b,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBl0B,EAAG,CACC0b,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB11B,EAAG,CACCkd,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBt0B,EAAG,CACC8b,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBn0B,EAAG,CACC2b,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBv1B,EAAG,CACC+c,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBx0B,EAAG,CACCgc,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBlR,EAAG,CACCtH,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB27D,EAAG,CACCn0E,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB47D,EAAG,CACCp0E,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB67D,EAAG,CACCr0E,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB1L,EAAG,CACC9M,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBvP,EAAG,CACCjJ,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB87D,EAAG,CACCt0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB+7D,EAAG,CACCv0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBrhC,EAAG,CACC6oB,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBg8D,EAAG,CACCx0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,mBACRC,MAAO,KACP5Y,GAAI,iBACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB/xB,EAAG,CACCuZ,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBnR,EAAG,CACCrH,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBhR,EAAG,CACCxH,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBi8D,EAAG,CACCz0E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBk8D,EAAG,CACC10E,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB/Q,EAAG,CACCzH,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB7xB,EAAG,CACCqZ,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBm8D,EAAG,CACC30E,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBo8D,EAAG,CACC50E,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,KAAM,CACFxY,OAAQ,GACRC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,GAClBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,IACPC,MAAO,KACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBq8D,EAAG,CACC70E,MAAO,EACPC,MAAO,KACP4Y,OAAQ,IACRC,OAAQ,IACR5Y,GAAI,IACJ6tB,gBAAiB,EACjBvV,aAAc,MAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,IACP4Y,MAAO,KACPC,MAAO,kBACP5Y,GAAI,mBACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBvpC,EAAG,CACC+wB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBtpC,EAAG,CACC8wB,MAAO,EACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,EACjBvV,aAAc,MAElB/hC,EAAG,CACCupB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB3nC,EAAG,CACCmvB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBrtC,EAAG,CACC60B,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBzlC,EAAG,CACCitB,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElBvtC,EAAG,CACC+0B,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBhlC,EAAG,CACCwsB,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBtlC,EAAG,CACC8sB,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElByW,EAAG,CACCjvB,OAAQ,IACRC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,iBAAkB,IAClBvV,aAAc,KAElBx6B,EAAG,CACCgiB,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBs8D,EAAG,CACC90E,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB3b,EAAG,CACCmD,MAAO,GACPC,MAAO,KACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBppC,EAAG,CACC4wB,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB5tC,EAAG,CACCo1B,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,MAElByiC,EAAG,CACCj7C,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB1lC,EAAG,CACCktB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,kBACP5Y,GAAI,mBACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB/sC,EAAG,CACCu0B,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB3lC,EAAG,CACCmtB,MAAO,IACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,kBACP5Y,GAAI,kBACJ6tB,gBAAiB,IACjBvV,aAAc,KAElBtoC,EAAG,CACC8vB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB5nC,EAAG,CACCovB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB+rB,EAAG,CACCvkC,MAAO,GACPC,MAAO,IACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBjlC,EAAG,CACCysB,MAAO,GACPC,MAAO,KACP4Y,OAAQ,GACRC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBrqC,EAAG,CACC6xB,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,MAElBllC,EAAG,CACC0sB,MAAO,GACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,IACP5Y,GAAI,KACJ6tB,gBAAiB,GACjBvV,aAAc,MAElB0iC,EAAG,CACCl7C,MAAO,GACPC,MAAO,IACP4Y,MAAO,EACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,IACPC,MAAO,IACP4Y,OAAQ,IACRC,MAAO,KACP5Y,GAAI,KACJ6tB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDxY,MAAO,GACPC,MAAO,KACP4Y,MAAO,IACPC,MAAO,IACP5Y,GAAI,IACJ6tB,gBAAiB,GACjBvV,aAAc,OAGtBj/B,WAAY,QACZkC,WAAY,KACZs5F,YAAa,4BC/1BjB,MAAMO,GAUFvlG,qBAAqBH,EAAK2lG,EAAKC,GAC3B,GAAI5lG,EAAIQ,OAAS,EAAG,CAChB,MAAMqlG,EAAS,GACf,IAAIC,EACJ9lG,EAAIw+B,KAAKmnE,GACT,IAAK,IAAIriG,EAAI,EAAGA,EAAItD,EAAIQ,SAAU8C,EACpB,IAANA,GAAYsiG,EAAG5lG,EAAIsD,GAAIwiG,IACvBD,EAAOx2F,KAAKrP,EAAIsD,IAEpBwiG,EAAO9lG,EAAIsD,GAEf,OAAOuiG,CACX,CAEI,OAAO7lG,CAEf,CAGAG,gBAAgBH,EAAKxE,GACjB,IAAI8H,EAAItD,EAAIQ,OACZ,KAAO8C,KACH,GAAItD,EAAIsD,KAAO9H,EACX,OAAO,EAGf,OAAO,CACX,CAEA2E,wBAAwB4lG,GACpB,IAAKA,EACD,MAAM,IAAIhoG,EAAa,cAAe,4BAA8BgoG,GAExE,MAAM3qC,EAAS5xD,SAASgE,eAAeu4F,GACvC,IAAM3qC,IAAUA,EAAO3pD,WACnB,MAAM,IAAI1T,EAAa,0BAA2B,8CAEtD,OAAOq9D,EAAO3pD,WAAW,KAC7B,CAGAtR,iBAAiB8C,EAAGE,GAChB,MAAM6iG,GAAa,IAAIC,MAAOC,UAC9B/iG,IAEA1E,EAAIwE,GADY,IAAIgjG,MAAOC,UAAYF,EACtB,KACrB,CAEA7lG,oBAEI,OADY,IAAInC,OACLmB,KACf,EAEJumG,GAAI7B,KAAOA,GC1DX,IAAI,GAAwC,SAAUx8F,EAASC,EAAYC,EAAGC,GAE1E,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAU5L,GAAS,IAAM6L,EAAKL,EAAUM,KAAK9L,GAAS,CAAE,MAAOT,GAAKoM,EAAOpM,EAAI,CAAE,CAC1F,SAASwM,EAAS/L,GAAS,IAAM6L,EAAKL,EAAiB,MAAExL,GAAS,CAAE,MAAOT,GAAKoM,EAAOpM,EAAI,CAAE,CAC7F,SAASsM,EAAKG,GAJlB,IAAehM,EAIagM,EAAOC,KAAOP,EAAQM,EAAOhM,QAJ1CA,EAIyDgM,EAAOhM,MAJhDA,aAAiBuL,EAAIvL,EAAQ,IAAIuL,GAAE,SAAUG,GAAWA,EAAQ1L,EAAQ,KAIjBkM,KAAKN,EAAWG,EAAW,CAC7GF,GAAML,EAAYA,EAAUW,MAAMd,EAASC,GAAc,KAAKQ,OAClE,GACJ,EAOA,MAAMq+F,GAAc,CAChBC,QAAS,4BACTC,SAAU,6BACVC,SAAU,6BACVC,OAAQ,2BACRC,OAAQ,4B,OASZ3C,GAAK4C,eAAiB,CAACn8F,EAAU45F,IAAqB,QAAU,OAAQ,OAAQ,GAAQ,YACpF,MAAMx6F,EAAOpB,EAAKqC,KAAKL,GAEvB,GAAIZ,EAAKiC,UACL,OAEJ,IAAKu4F,EAAkB,CAEnB,KAAI55F,KAAY67F,IAIZ,MAAM,IAAIpoG,EAAa,cAAe,cAAcuM,qBAHpD45F,EAAmBiC,GAAY77F,EAKvC,CACA,IAAIo8F,EACJ,GAAgC,iBAArBxC,EAA+B,CACtC,MAAM3pG,QAAeosG,OAAiCzC,GAEhD0C,EADIxoG,IACyB,YAG/BsoG,OAFuB,IAAhBE,QAAgE,IAA1BA,EAAYt8F,GAE5Cs8F,EAAYt8F,GAKZ/P,EAAO+N,IAE5B,MAEIo+F,EAAaxC,EAEjBx6F,EAAK2B,QAAQq7F,EAAWv7F,MACxBzB,EAAK4B,WAAWo7F,EAAWt7F,QAC/B,ICjEO,WAEH,CACI,MAAMy7F,EAAWxB,IACX,WAAE17F,EAAU,WAAEkC,EAAU,OAAEE,GAAW86F,EAC3Cv+F,EAAKqC,KAAKhB,EAAYk9F,GAGtB,MAAM3+D,EAAe,IACrBzB,GAAcqgE,aAAa,CACvB19F,OAAQO,EACRkC,aACAE,SACAm8B,eACAH,YAAY,EACZV,MAAM,EACNE,QAAQ,EACRS,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACRi/D,YAAa,qBAErB,CAEA,CACI,MAAMF,EAAWvB,IACX,WAAE37F,EAAU,WAAEkC,EAAU,OAAEE,GAAW86F,EAC3Cv+F,EAAKqC,KAAKhB,EAAYk9F,GAGtB,MAAM3+D,EAAe,IACrBzB,GAAcqgE,aAAa,CACvB19F,OAAQO,EACRkC,aACAE,SACAm8B,eACAH,YAAY,EACZV,MAAM,EACNE,QAAQ,EACRS,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACRi/D,YAAa,qBAErB,CAEA,CACI,MAAMF,EAAWpB,IACX,WAAE97F,EAAU,WAAEkC,EAAU,OAAEE,GAAW86F,EAC3Cv+F,EAAKqC,KAAKhB,EAAYk9F,GAGtB,MAAM3+D,EAAe,IACrBzB,GAAcqgE,aAAa,CACvB19F,OAAQO,EACRkC,aACAE,SACAm8B,eACAH,YAAY,EACZV,MAAM,EACNE,QAAQ,EACRS,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACRi/D,YAAa,sBAErB,CAEA,CACI,MAAMF,EAAWzB,IACX,WAAEz7F,EAAU,WAAEkC,EAAU,OAAEE,GAAW86F,EAC3Cv+F,EAAKqC,KAAKhB,EAAYk9F,GAGtB,MAAM3+D,EAAe,IACrBzB,GAAcqgE,aAAa,CACvB19F,OAAQO,EACRkC,aACAE,SACAm8B,eACAH,YAAY,EACZV,MAAM,EACNE,QAAQ,EACRS,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACRi/D,YAAa,8DAErB,CAEA,CACI,MAAMF,EAAWxC,IACX,WAAE16F,EAAU,WAAEkC,EAAU,OAAEE,GAAW86F,EAC3Cv+F,EAAKqC,KAAKhB,EAAYk9F,GAGtB,MAAM3+D,EAAe,IACrBzB,GAAcqgE,aAAa,CACvB19F,OAAQO,EACRkC,aACAE,SACAm8B,eACAH,YAAY,EACZV,MAAM,EACNE,QAAQ,EACRS,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACRi/D,YAAa,mDAErB,CACJ,CD5CAC,G,atGlEA","sources":["webpack://Vex/webpack/universalModuleDefinition","webpack://Vex/webpack/bootstrap","webpack://Vex/webpack/runtime/define property getters","webpack://Vex/webpack/runtime/global","webpack://Vex/webpack/runtime/hasOwnProperty shorthand","webpack://Vex/webpack/runtime/make namespace object","webpack://Vex/./src/typeguard.ts","webpack://Vex/./src/util.ts","webpack://Vex/./src/fraction.ts","webpack://Vex/./src/boundingbox.ts","webpack://Vex/./src/boundingboxcomputation.ts","webpack://Vex/./src/font.ts","webpack://Vex/./src/registry.ts","webpack://Vex/./src/element.ts","webpack://Vex/./src/tables.ts","webpack://Vex/./src/glyph.ts","webpack://Vex/./src/modifier.ts","webpack://Vex/./src/music.ts","webpack://Vex/./src/accidental.ts","webpack://Vex/./src/stem.ts","webpack://Vex/./src/textformatter.ts","webpack://Vex/./src/annotation.ts","webpack://Vex/./src/articulation.ts","webpack://Vex/./src/rendercontext.ts","webpack://Vex/./src/tickable.ts","webpack://Vex/./src/note.ts","webpack://Vex/./src/stavemodifier.ts","webpack://Vex/./src/stavebarline.ts","webpack://Vex/./src/chordsymbol.ts","webpack://Vex/./src/barnote.ts","webpack://Vex/./src/bend.ts","webpack://Vex/./src/dot.ts","webpack://Vex/./src/frethandfinger.ts","webpack://Vex/./src/notehead.ts","webpack://Vex/./src/stemmablenote.ts","webpack://Vex/./src/stavenote.ts","webpack://Vex/./src/stavetie.ts","webpack://Vex/./src/tabtie.ts","webpack://Vex/./src/voice.ts","webpack://Vex/./src/gracenotegroup.ts","webpack://Vex/./src/notesubgroup.ts","webpack://Vex/./src/tickcontext.ts","webpack://Vex/./src/ornament.ts","webpack://Vex/./src/parenthesis.ts","webpack://Vex/./src/web.ts","webpack://Vex/./src/canvascontext.ts","webpack://Vex/./src/svgcontext.ts","webpack://Vex/./src/renderer.ts","webpack://Vex/./src/textnote.ts","webpack://Vex/./src/stavevolta.ts","webpack://Vex/./src/stringnumber.ts","webpack://Vex/./src/strokes.ts","webpack://Vex/./src/vibrato.ts","webpack://Vex/./src/modifiercontext.ts","webpack://Vex/./src/clef.ts","webpack://Vex/./src/keysignature.ts","webpack://Vex/./src/staverepetition.ts","webpack://Vex/./src/stavesection.ts","webpack://Vex/./src/stavetempo.ts","webpack://Vex/./src/stavetext.ts","webpack://Vex/./src/timesigglyph.ts","webpack://Vex/./src/timesignature.ts","webpack://Vex/./src/stave.ts","webpack://Vex/./src/staveconnector.ts","webpack://Vex/./src/formatter.ts","webpack://Vex/./src/tuplet.ts","webpack://Vex/./src/beam.ts","webpack://Vex/./src/clefnote.ts","webpack://Vex/./src/crescendo.ts","webpack://Vex/./src/curve.ts","webpack://Vex/./src/parser.ts","webpack://Vex/./src/easyscore.ts","webpack://Vex/./src/ghostnote.ts","webpack://Vex/./src/glyphnote.ts","webpack://Vex/./src/gracenote.ts","webpack://Vex/./src/keysignote.ts","webpack://Vex/./src/multimeasurerest.ts","webpack://Vex/./src/pedalmarking.ts","webpack://Vex/./src/repeatnote.ts","webpack://Vex/./src/staveline.ts","webpack://Vex/./src/system.ts","webpack://Vex/./src/tabnote.ts","webpack://Vex/./src/tabstave.ts","webpack://Vex/./src/textbracket.ts","webpack://Vex/./src/textdynamics.ts","webpack://Vex/./src/timesignote.ts","webpack://Vex/./src/vibratobracket.ts","webpack://Vex/./src/factory.ts","webpack://Vex/./src/gracetabnote.ts","webpack://Vex/./src/keymanager.ts","webpack://Vex/./src/stavehairpin.ts","webpack://Vex/./src/tabslide.ts","webpack://Vex/./src/tremolo.ts","webpack://Vex/./src/tuning.ts","webpack://Vex/./src/flow.ts","webpack://Vex/./src/version.ts","webpack://Vex/./src/fonts/petalumascript_glyphs.ts","webpack://Vex/./src/fonts/robotoslab_glyphs.ts","webpack://Vex/./src/fonts/sans_bold_text_metrics.ts","webpack://Vex/./src/fonts/sans_text_metrics.ts","webpack://Vex/./src/fonts/serif_text_metrics.ts","webpack://Vex/./src/vex.ts","webpack://Vex/./entry/vexflow-core.ts","webpack://Vex/./src/fonts/textfonts.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","export const VERSION = '4.2.2';\nexport const ID = '7ad933bdf12b4137ce04d3f332a838887d08a595';\nexport const DATE = '2023-07-03T19:56:22.952Z';\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Ron B. Yeh\n//\n// A smaller initial bundle that supports dynamic importing of music engraving fonts.\n//\n// vexflow-core.ts is the entry point for output file vexflow-core.js.\n// It does not preload / bundle any music fonts by default.\n// All music fonts will be loaded dynamically via: `Flow.fetchMusicFont(fontName)`\n// Remember to call `Flow.setMusicFont(fontName)` after fetching the font module.\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Flow } from '../src/flow';\nimport { Font } from '../src/font';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nimport { globalObject, RuntimeError } from '../src/util';\n// fontModules maps font names => font module paths, which can be loaded at runtime by vexflow-core.js.\n// ADD_MUSIC_FONT\nconst fontModules = {\n Bravura: './vexflow-font-bravura.js',\n Gonville: './vexflow-font-gonville.js',\n Petaluma: './vexflow-font-petaluma.js',\n Leland: './vexflow-font-leland.js',\n Custom: './vexflow-font-custom.js',\n};\n/**\n * @param fontName the name of the music font to load.\n * @param fontModuleOrPath Either a font module object (containing a .data and .metrics properties) or a path to a font module.\n * The font module is assumed to be in the same directory as the vexflow-core.js entry point.\n *\n * This replaces the default empty implementation in flow.ts.\n */\nFlow.fetchMusicFont = (fontName, fontModuleOrPath) => __awaiter(void 0, void 0, void 0, function* () {\n const font = Font.load(fontName);\n // If the font has already been loaded before we do nothing.\n if (font.hasData()) {\n return;\n }\n if (!fontModuleOrPath) {\n // Determine the font module path.\n if (fontName in fontModules) {\n fontModuleOrPath = fontModules[fontName];\n }\n else {\n throw new RuntimeError('UnknownFont', `Music font ${fontName} does not exist.`);\n }\n }\n let fontModule;\n if (typeof fontModuleOrPath === 'string') {\n const module = yield import(/* webpackIgnore: true */ fontModuleOrPath);\n const g = globalObject();\n const VexFlowFont = g['VexFlowFont'];\n if (typeof VexFlowFont !== 'undefined' && typeof VexFlowFont[fontName] !== 'undefined') {\n // CJS font modules will set a global variable named: VexFlowFont.Bravura | VexFlowFont.Gonville | VexFlowFont.Petaluma | etc.\n fontModule = VexFlowFont[fontName];\n }\n else {\n // ESM font modules will export an object named \"Font\" with properties named \"data\" and \"metrics\".\n // See vexflow-font-bravura.ts for an example.\n fontModule = module.Font;\n }\n }\n else {\n fontModule = fontModuleOrPath;\n }\n font.setData(fontModule.data);\n font.setMetrics(fontModule.metrics);\n});\n// Load the two text fonts that ChordSymbol & Annotation use.\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","static","Number","isNaN","t","GCD","length","LCM","shift","LCMM","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","fontInfo","st","trim","wt","sz","scaleFactor","parsedWeight","ITALIC","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","loadWebFont","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","defaultRegistry","registry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","ID","children","attrs","newID","getCategory","rendered","getDefaultRegistry","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","toCSSString","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","validate","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","convertSizeToPointValue","fontSizeInPixels","convertSizeToPixelValue","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","MUSIC_FONT_STACK","clef","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","clefProperties","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integer","noteValue","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","artic","spec","keySpec","notes","acc_list","durationNumber","durationToFraction","ticks","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","UNISON","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySignature","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","state","musicFont","currentMusicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accidentalLinePositionsAndSpaceNeeds","prevNote","extraXSpaceNeededForLeftDisplacedNotehead","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","extraXSpaceNeeded","spacingBetweenStaveLines","sort","staveLineAccidentalLayoutMetrics","maxExtraXSpaceNeeded","accidentalLinePositionAndSpaceNeeds","priorLineMetric","currentLineMetric","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","accidentalCodes","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","registeredFonts","formatterInfo","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","isBold","italic","isItalic","perfectMatch","find","partialMatch","fontSizeInPt","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","create","verticalSpaceNeeded","glyphWidth","getGlyphProps","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","articulationCodes","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","durationString","dots","noteStruct","durationProps","parseDuration","customTypes","durationToTicks","currentTicks","parsedNoteStruct","parseNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","glyphCode","engravingFontResolution","spacingBetweenBlocks","metric","getMetricForGlyph","yOffset","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","symbolModifier","SUPERSCRIPT","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","scaleSize","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","isSuperscript","sub","isSubscript","superSubScale","adj","symbolType","GLYPH","superSubFontSize","getWidthForGlyph","getYShiftForGlyph","getXShiftForGlyph","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","durationToNumber","breve_lines","drawSlashNoteHead","renderGlyph","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","noteUHead","noteLHead","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","keyProperties","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","format","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","TickContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","tick","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","ornamentCodes","adjustForStemDirection","stemUpYOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","getNextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","getPoint","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","dpr","sanitizeCanvasDims","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","elementId","backend","background","renderer","lastContext","buildContext","Backends","CANVAS","SVG","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","extraXSpaceForDisplacedNotehead","glyphLine","num_shiftR","num_width","num_x_shift","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","drawDashedLine","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","accList","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","lineShift","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","getInfo","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClef","clefSpec","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","paddingBetween","accumulator","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","auto_beam","align_rests","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","AlignRestsToNotes","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","buildAndAttach","setId","commaSeparatedRegex","setClass","defaults","easyScoreHook","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","pedal","MIXED","setCustomText","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","formatBegModifiers","plotDebugging","plotMetrics","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","tabToGlyphProps","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","integerToNote","Flow","BUILD","VERSION","DATE","fontNames","fontModuleOrPath","hasKeySignature","getKeySignatures","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","generatedOn","RobotoSlabFont","SansFontBold","SansFont","smufl","Description","SerifFont","Vex","cmp","eq","newArr","last","canvasSelector","start_time","Date","getTime","fontModules","Bravura","Gonville","Petaluma","Leland","Custom","fetchMusicFont","fontModule","import","VexFlowFont","fontData","registerInfo","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-debug-with-tests.js b/build/cjs/vexflow-debug-with-tests.js new file mode 100644 index 0000000000..f8f755b951 --- /dev/null +++ b/build/cjs/vexflow-debug-with-tests.js @@ -0,0 +1,54774 @@ +/*! + * VexFlow 4.2.2 2023-07-03T19:56:22.952Z 7ad933bdf12b4137ce04d3f332a838887d08a595 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["Vex"] = factory(); + else + root["Vex"] = factory(); +})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/version.ts": +/*!************************!*\ + !*** ./src/version.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "DATE": () => (/* binding */ DATE), +/* harmony export */ "ID": () => (/* binding */ ID), +/* harmony export */ "VERSION": () => (/* binding */ VERSION) +/* harmony export */ }); +const VERSION = '4.2.2'; +const ID = '7ad933bdf12b4137ce04d3f332a838887d08a595'; +const DATE = '2023-07-03T19:56:22.952Z'; + + +/***/ }), + +/***/ "./src/accidental.ts": +/*!***************************!*\ + !*** ./src/accidental.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Accidental": () => (/* binding */ Accidental) +/* harmony export */ }); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// @author Mohit Cheppudira +// @author Greg Ristow (modifications) + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Accidental.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Accidental', args); +} +/** + * An `Accidental` inherits from `Modifier`, and is formatted within a + * `ModifierContext`. Accidentals are modifiers that can be attached to + * notes. Support is included for both western and microtonal accidentals. + * + * See `tests/accidental_tests.ts` for usage examples. + */ +class Accidental extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + /** Accidentals category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Accidental; + } + /** Arrange accidentals inside a ModifierContext. */ + static format(accidentals, state) { + // If there are no accidentals, no need to format their positions. + if (!accidentals || accidentals.length === 0) + return; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); + const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding'); + const leftShift = state.left_shift + noteheadAccidentalPadding; + const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing'); + const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals + const accidentalLinePositionsAndSpaceNeeds = []; + let prevNote = undefined; + let extraXSpaceNeededForLeftDisplacedNotehead = 0; + // First determine the accidentals' Y positions from the note.keys + for (let i = 0; i < accidentals.length; ++i) { + const acc = accidentals[i]; + const note = acc.getNote(); + const stave = note.getStave(); + const index = acc.checkIndex(); + const props = note.getKeyProps()[index]; + if (note !== prevNote) { + // Iterate through all notes to get the displaced pixels + for (let n = 0; n < note.keys.length; ++n) { + // If the current extra left-space needed isn't as big as this note's, + // then we need to use this note's. + extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead); + } + prevNote = note; + } + if (stave) { + const lineSpace = stave.getSpacingBetweenLines(); + const y = stave.getYForLine(props.line); + const accLine = Math.round((y / lineSpace) * 2) / 2; + accidentalLinePositionsAndSpaceNeeds.push({ + y, + line: accLine, + extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead, + acc, + spacingBetweenStaveLines: lineSpace, + }); + } + else { + accidentalLinePositionsAndSpaceNeeds.push({ + line: props.line, + extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead, + acc, + }); + } + } + // Sort accidentals by line number. + accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line); + const staveLineAccidentalLayoutMetrics = []; + // amount by which all accidentals must be shifted right or left for + // stem flipping, notehead shifting concerns. + let maxExtraXSpaceNeeded = 0; + // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics) + // from accidentalLinePositionsAndSpaceNeeds + for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) { + const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i]; + const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1]; + let currentLineMetric; + // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric + if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) { + currentLineMetric = { + line: accidentalLinePositionAndSpaceNeeds.line, + flatLine: true, + dblSharpLine: true, + numAcc: 0, + width: 0, + column: 0, + }; + staveLineAccidentalLayoutMetrics.push(currentLineMetric); + } + else { + currentLineMetric = priorLineMetric; + } + // if this accidental is not a flat, the accidental needs 3.0 lines lower + // clearance instead of 2.5 lines for b or bb. + if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' && + accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') { + currentLineMetric.flatLine = false; + } + // if this accidental is not a double sharp, the accidental needs 3.0 lines above + if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') { + currentLineMetric.dblSharpLine = false; + } + // Track how many accidentals are on this line: + currentLineMetric.numAcc++; + // Track the total x_offset needed for this line which will be needed + // for formatting lines w/ multiple accidentals: + // width = accidental width + universal spacing between accidentals + currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing; + // if this extraXSpaceNeeded is the largest so far, use it as the starting point for + // all accidental columns. + maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded); + } + // ### Place Accidentals in Columns + // + // Default to a classic triangular layout (middle accidental farthest left), + // but follow exceptions as outlined in G. Read's _Music Notation_ and + // Elaine Gould's _Behind Bars_. + // + // Additionally, this implements different vertical collision rules for + // flats (only need 2.5 lines clearance below) and double sharps (only + // need 2.5 lines of clearance above or below). + // + // Classic layouts and exception patterns are found in the 'tables.js' + // in 'Tables.accidentalColumnsTable' + // + // Beyond 6 vertical accidentals, default to the parallel ascending lines approach, + // using as few columns as possible for the verticle structure. + // + // TODO (?): Allow column to be specified for an accidental at run-time? + let totalColumns = 0; + // establish the boundaries for a group of notes with clashing accidentals: + for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) { + let noFurtherConflicts = false; + const groupStart = i; + let groupEnd = i; + while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) { + // if this note conflicts with the next: + if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) { + // include the next note in the group: + groupEnd++; + } + else { + noFurtherConflicts = true; + } + } + // Gets an a line from the `lineList`, relative to the current group + const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index]; + const getGroupLines = (indexes) => indexes.map(getGroupLine); + const lineDifference = (indexA, indexB) => { + const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line); + return a - b; + }; + const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2)); + // Set columns for the lines in this group: + const groupLength = groupEnd - groupStart + 1; + // Set the accidental column for each line of the group + let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd]) + ? 'a' + : 'b'; + switch (groupLength) { + case 3: + if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) { + endCase = 'second_on_bottom'; + } + break; + case 4: + if (notColliding([0, 2], [1, 3])) { + endCase = 'spaced_out_tetrachord'; + } + break; + case 5: + if (endCase === 'b' && notColliding([1, 3])) { + endCase = 'spaced_out_pentachord'; + if (notColliding([0, 2], [2, 4])) { + endCase = 'very_spaced_out_pentachord'; + } + } + break; + case 6: + if (notColliding([0, 3], [1, 4], [2, 5])) { + endCase = 'spaced_out_hexachord'; + } + if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) { + endCase = 'very_spaced_out_hexachord'; + } + break; + default: + break; + } + let groupMember; + let column; + // If the group contains seven members or more, use ascending parallel lines + // of accidentals, using as few columns as possible while avoiding collisions. + if (groupLength >= 7) { + // First, determine how many columns to use: + let patternLength = 2; + let collisionDetected = true; + while (collisionDetected === true) { + collisionDetected = false; + for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) { + if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) { + collisionDetected = true; + patternLength++; + break; + } + } + } + // Then, assign a column to each line of accidentals + for (groupMember = i; groupMember <= groupEnd; groupMember++) { + column = ((groupMember - i) % patternLength) + 1; + staveLineAccidentalLayoutMetrics[groupMember].column = column; + totalColumns = totalColumns > column ? totalColumns : column; + } + } + else { + // If the group contains fewer than seven members, use the layouts from + // the Tables.accidentalColumnsTable (See: tables.ts). + for (groupMember = i; groupMember <= groupEnd; groupMember++) { + column = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i]; + staveLineAccidentalLayoutMetrics[groupMember].column = column; + totalColumns = totalColumns > column ? totalColumns : column; + } + } + // Increment i to the last note that was set, so that if a lower set of notes + // does not conflict at all with this group, it can have its own classic shape. + i = groupEnd; + } + // ### Convert Columns to x_offsets + // + // This keeps columns aligned, even if they have different accidentals within them + // which sometimes results in a larger x_offset than is an accidental might need + // to preserve the symmetry of the accidental shape. + // + // Neither A.C. Vinci nor G. Read address this, and it typically only happens in + // music with complex chord clusters. + // + // TODO (?): Optionally allow closer compression of accidentals, instead of forcing + // parallel columns. + // track each column's max width, which will be used as initial shift of later columns: + const columnWidths = []; + const columnXOffsets = []; + for (let i = 0; i <= totalColumns; i++) { + columnWidths[i] = 0; + columnXOffsets[i] = 0; + } + columnWidths[0] = leftShift + maxExtraXSpaceNeeded; + columnXOffsets[0] = leftShift; + // Fill columnWidths with widest needed x-space; + // this is what keeps the columns parallel. + staveLineAccidentalLayoutMetrics.forEach((line) => { + if (line.width > columnWidths[line.column]) + columnWidths[line.column] = line.width; + }); + for (let i = 1; i < columnWidths.length; i++) { + // this column's offset = this column's width + previous column's offset + columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1]; + } + const totalShift = columnXOffsets[columnXOffsets.length - 1]; + // Set the xShift for each accidental according to column offsets: + let accCount = 0; + staveLineAccidentalLayoutMetrics.forEach((line) => { + let lineWidth = 0; + const lastAccOnLine = accCount + line.numAcc; + // handle all of the accidentals on a given line: + for (accCount; accCount < lastAccOnLine; accCount++) { + const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded; + accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift); + // keep track of the width of accidentals we've added so far, so that when + // we loop, we add space for them. + lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing; + L('Line, accCount, shift: ', line.line, accCount, xShift); + } + }); + // update the overall layout with the full width of the accidental shapes: + state.left_shift = totalShift + additionalPadding; + } + /** Helper function to determine whether two lines of accidentals collide vertically */ + static checkCollision(line1, line2) { + let clearance = line2.line - line1.line; + let clearanceRequired = 3; + // But less clearance is required for certain accidentals: b, bb and ##. + if (clearance > 0) { + // then line 2 is on top + clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0; + if (line1.dblSharpLine) + clearance -= 0.5; + } + else { + // line 1 is on top + clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0; + if (line2.dblSharpLine) + clearance -= 0.5; + } + const collision = Math.abs(clearance) < clearanceRequired; + L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision); + return collision; + } + /** + * Use this method to automatically apply accidentals to a set of `voices`. + * The accidentals will be remembered between all the voices provided. + * Optionally, you can also provide an initial `keySignature`. + */ + static applyAccidentals(voices, keySignature) { + const tickPositions = []; + const tickNoteMap = {}; + // Sort the tickables in each voice by their tick position in the voice. + voices.forEach((voice) => { + const tickPosition = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); + const tickable = voice.getTickables(); + tickable.forEach((t) => { + if (t.shouldIgnoreTicks()) + return; + const notesAtPosition = tickNoteMap[tickPosition.value()]; + if (!notesAtPosition) { + tickPositions.push(tickPosition.value()); + tickNoteMap[tickPosition.value()] = [t]; + } + else { + notesAtPosition.push(t); + } + tickPosition.add(t.getTicks()); + }); + }); + const music = new _music__WEBPACK_IMPORTED_MODULE_3__.Music(); + // Default key signature is C major. + if (!keySignature) + keySignature = 'C'; + // Get the scale map, which represents the current state of each pitch. + const scaleMapKey = music.createScaleMap(keySignature); + const scaleMap = {}; + tickPositions.forEach((tickPos) => { + const tickables = tickNoteMap[tickPos]; + // Array to store all pitches that modified accidental states + // at this tick position + const modifiedPitches = []; + const processNote = (t) => { + // Only StaveNote implements .addModifier(), which is used below. + if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t) || t.isRest() || t.shouldIgnoreTicks()) { + return; + } + // Go through each key and determine if an accidental should be applied. + const staveNote = t; + staveNote.keys.forEach((keyString, keyIndex) => { + const key = music.getNoteParts(keyString.split('/')[0]); + const octave = keyString.split('/')[1]; + // Force a natural for every key without an accidental + const accidentalString = key.accidental || 'n'; + const pitch = key.root + accidentalString; + // Determine if the current pitch has the same accidental + // as the scale state + if (!scaleMap[key.root + octave]) + scaleMap[key.root + octave] = scaleMapKey[key.root]; + const sameAccidental = scaleMap[key.root + octave] === pitch; + // Determine if an identical pitch in the chord already + // modified the accidental state + const previouslyModified = modifiedPitches.indexOf(keyString) > -1; + // Remove accidentals + staveNote.getModifiers().forEach((modifier, index) => { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isAccidental)(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) { + staveNote.getModifiers().splice(index, 1); + } + }); + // Add the accidental to the StaveNote + if (!sameAccidental || (sameAccidental && previouslyModified)) { + // Modify the scale map so that the root pitch has an + // updated state + scaleMap[key.root + octave] = pitch; + // Create the accidental + const accidental = new Accidental(accidentalString); + // Attach the accidental to the StaveNote + staveNote.addModifier(accidental, keyIndex); + // Add the pitch to list of pitches that modified accidentals + modifiedPitches.push(keyString); + } + }); + // process grace notes + staveNote.getModifiers().forEach((modifier) => { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNoteGroup)(modifier)) { + modifier.getGraceNotes().forEach(processNote); + } + }); + }; + tickables.forEach(processNote); + }); + } + /** + * Create accidental. + * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`. + * For example: `#`, `##`, `b`, `n`, etc. + */ + constructor(type) { + super(); + L('New accidental: ', type); + this.type = type; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; + this.render_options = { + // Font size for glyphs + font_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, + // Padding between accidental and parentheses on each side + parenLeftPadding: 2, + parenRightPadding: 2, + }; + this.accidental = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes(this.type); + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`); + // Cautionary accidentals have parentheses around them + this.cautionary = false; + this.reset(); + } + reset() { + const fontScale = this.render_options.font_scale; + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.accidental.code, fontScale); + this.glyph.setOriginX(1.0); + if (this.cautionary) { + this.parenLeft = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('{').code, fontScale); + this.parenRight = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('}').code, fontScale); + this.parenLeft.setOriginX(1.0); + this.parenRight.setOriginX(1.0); + } + } + /** Get width in pixels. */ + getWidth() { + if (this.cautionary) { + const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft); + const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight); + const parenWidth = parenLeft.getMetrics().width + + parenRight.getMetrics().width + + this.render_options.parenLeftPadding + + this.render_options.parenRightPadding; + return this.glyph.getMetrics().width + parenWidth; + } + else { + return this.glyph.getMetrics().width; + } + } + /** Attach this accidental to `note`, which must be a `StaveNote`. */ + setNote(note) { + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(note, 'ArgumentError', `Bad note value: ${note}`); + this.note = note; + // Accidentals attached to grace notes are rendered smaller. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNote)(note)) { + this.render_options.font_scale = 25; + this.reset(); + } + return this; + } + /** If called, draws parenthesis around accidental. */ + setAsCautionary() { + this.cautionary = true; + this.render_options.font_scale = 28; + this.reset(); + return this; + } + /** Render accidental onto canvas. */ + draw() { + const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + // Figure out the start `x` and `y` coordinates for note and index. + const start = note.getModifierStartXY(position, index); + let accX = start.x + x_shift; + const accY = start.y + y_shift; + L('Rendering: ', type, accX, accY); + if (!cautionary) { + glyph.render(ctx, accX, accY); + } + else { + const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft); + const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight); + // Render the accidental in parentheses. + parenRight.render(ctx, accX, accY); + accX -= parenRight.getMetrics().width; + accX -= parenRightPadding; + accX -= this.accidental.parenRightPaddingAdjustment; + glyph.render(ctx, accX, accY); + accX -= glyph.getMetrics().width; + accX -= parenLeftPadding; + parenLeft.render(ctx, accX, accY); + } + } +} +/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */ +Accidental.DEBUG = false; + + + +/***/ }), + +/***/ "./src/annotation.ts": +/*!***************************!*\ + !*** ./src/annotation.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Annotation": () => (/* binding */ Annotation), +/* harmony export */ "AnnotationHorizontalJustify": () => (/* binding */ AnnotationHorizontalJustify), +/* harmony export */ "AnnotationVerticalJustify": () => (/* binding */ AnnotationVerticalJustify) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Annotation.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Annotation', args); +} +var AnnotationHorizontalJustify; +(function (AnnotationHorizontalJustify) { + AnnotationHorizontalJustify[AnnotationHorizontalJustify["LEFT"] = 1] = "LEFT"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER"] = 2] = "CENTER"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["RIGHT"] = 3] = "RIGHT"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {})); +var AnnotationVerticalJustify; +(function (AnnotationVerticalJustify) { + AnnotationVerticalJustify[AnnotationVerticalJustify["TOP"] = 1] = "TOP"; + AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER"] = 2] = "CENTER"; + AnnotationVerticalJustify[AnnotationVerticalJustify["BOTTOM"] = 3] = "BOTTOM"; + AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {})); +/** + * Annotations are modifiers that can be attached to + * notes. + * + * See `tests/annotation_tests.ts` for usage examples. + */ +class Annotation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + /** Annotations category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Annotation; + } + // Use the same padding for annotations as note head so the + // words don't run into each other. + static get minAnnotationPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** Arrange annotations within a `ModifierContext` */ + static format(annotations, state) { + if (!annotations || annotations.length === 0) + return false; + let leftWidth = 0; + let rightWidth = 0; + let maxLeftGlyphWidth = 0; + let maxRightGlyphWidth = 0; + for (let i = 0; i < annotations.length; ++i) { + const annotation = annotations[i]; + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(annotation.textFont); + // Text height is expressed in fractional stave spaces. + const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + let verticalSpaceNeeded = textLines; + const note = annotation.checkAttachedNote(); + const glyphWidth = note.getGlyphProps().getWidth(); + // Get the text width from the font metrics. + const textWidth = textFormatter.getWidthForTextInPx(annotation.text); + if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) { + maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); + leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding; + } + else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { + maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); + rightWidth = Math.max(rightWidth, textWidth); + } + else { + leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding; + rightWidth = Math.max(rightWidth, textWidth / 2); + maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); + maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); + } + const stave = note.getStave(); + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + let stemHeight = 0; + let lines = 5; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + if (note.render_options.draw_stem) { + const stem = note.getStem(); + if (stem) { + stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + } + } + else { + stemHeight = 0; + } + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) { + const stem = note.getStem(); + if (stem && note.getNoteType() === 'n') { + stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + } + } + if (stave) { + lines = stave.getNumLines(); + } + if (annotation.verticalJustification === this.VerticalJustify.TOP) { + let noteLine = note.getLineNumber(true); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + noteLine = lines - (note.leastString() - 0.5); + } + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + noteLine += stemHeight; + } + const curTop = noteLine + state.top_text_line + 0.5; + if (curTop < lines) { + annotation.setTextLine(lines - noteLine); + verticalSpaceNeeded += lines - noteLine; + state.top_text_line = verticalSpaceNeeded; + } + else { + annotation.setTextLine(state.top_text_line); + state.top_text_line += verticalSpaceNeeded; + } + } + else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) { + let noteLine = lines - note.getLineNumber(); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + noteLine = note.greatestString() - 1; + } + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + noteLine += stemHeight; + } + const curBottom = noteLine + state.text_line + 1; + if (curBottom < lines) { + annotation.setTextLine(lines - curBottom); + verticalSpaceNeeded += lines - curBottom; + state.text_line = verticalSpaceNeeded; + } + else { + annotation.setTextLine(state.text_line); + state.text_line += verticalSpaceNeeded; + } + } + else { + annotation.setTextLine(state.text_line); + } + } + const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); + const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); + state.left_shift += leftOverlap; + state.right_shift += rightOverlap; + return true; + } + /** + * Annotations inherit from `Modifier` and is positioned correctly when + * in a `ModifierContext`. + * Create a new `Annotation` with the string `text`. + */ + constructor(text) { + super(); + this.text = text; + this.horizontalJustification = AnnotationHorizontalJustify.CENTER; + // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM. + // this is to support legacy application that may expect this. + this.verticalJustification = AnnotationVerticalJustify.TOP; + this.resetFont(); + // The default width is calculated from the text. + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.textWidth(text)); + } + /** + * Set vertical position of text (above or below stave). + * @param just value in `AnnotationVerticalJustify`. + */ + setVerticalJustification(just) { + this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just; + return this; + } + /** + * Get horizontal justification. + */ + getJustification() { + return this.horizontalJustification; + } + /** + * Set horizontal justification. + * @param justification value in `Annotation.Justify`. + */ + setJustification(just) { + this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just; + return this; + } + /** Render text beside the note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE, this.index); + this.setRendered(); + // We're changing context parameters. Save current state. + ctx.save(); + // Apply style might not save context, if this.style is undefined, so we + // still need to save context state just before this, since we will be + // changing ctx parameters below. + this.applyStyle(); + ctx.openGroup('annotation', this.getAttribute('id')); + ctx.setFont(this.textFont); + const text_width = textFormatter.getWidthForTextInPx(this.text); + const text_height = textFormatter.getYForStringInPx(this.text).height; + let x; + let y; + if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) { + x = start.x; + } + else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { + x = start.x - text_width; + } + else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) { + x = start.x - text_width / 2; + } /* CENTER_STEM */ + else { + x = note.getStemX() - text_width / 2; + } + let stem_ext = {}; + let spacing = 0; + const has_stem = note.hasStem(); + const stave = note.checkStave(); + // The position of the text varies based on whether or not the note + // has a stem. + if (has_stem) { + stem_ext = note.checkStem().getExtents(); + spacing = stave.getSpacingBetweenLines(); + } + if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) { + // Use the largest (lowest) Y value + const ys = note.getYs(); + y = ys.reduce((a, b) => (a > b ? a : b)); + y += (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE + text_height; + if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line); + } + } + else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) { + const yt = note.getYForTopText(this.text_line) - 1; + const yb = stave.getYForBottomText(this.text_line); + y = yt + (yb - yt) / 2 + text_height / 2; + } + else if (this.verticalJustification === AnnotationVerticalJustify.TOP) { + const topY = Math.min(...note.getYs()); + y = topY - (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + // If the stem is above the stave already, go with default line width vs. actual + // since the lines between don't really matter. + spacing = stem_ext.topY < stave.getTopLineTopY() ? _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE : spacing; + y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1)); + } + } /* CENTER_STEM */ + else { + const extents = note.getStemExtents(); + y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2; + } + L('Rendering annotation: ', this.text, x, y); + ctx.fillText(this.text, x, y); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */ +Annotation.DEBUG = false; +Annotation.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); +/** Text annotations can be positioned and justified relative to the note. */ +Annotation.HorizontalJustify = AnnotationHorizontalJustify; +Annotation.HorizontalJustifyString = { + left: AnnotationHorizontalJustify.LEFT, + right: AnnotationHorizontalJustify.RIGHT, + center: AnnotationHorizontalJustify.CENTER, + centerStem: AnnotationHorizontalJustify.CENTER_STEM, +}; +Annotation.VerticalJustify = AnnotationVerticalJustify; +Annotation.VerticalJustifyString = { + above: AnnotationVerticalJustify.TOP, + top: AnnotationVerticalJustify.TOP, + below: AnnotationVerticalJustify.BOTTOM, + bottom: AnnotationVerticalJustify.BOTTOM, + center: AnnotationVerticalJustify.CENTER, + centerStem: AnnotationVerticalJustify.CENTER_STEM, +}; + + + +/***/ }), + +/***/ "./src/articulation.ts": +/*!*****************************!*\ + !*** ./src/articulation.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Articulation": () => (/* binding */ Articulation) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Larry Kuhns. +// MIT License + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Articulation.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.Articulation', args); +} +const { ABOVE, BELOW } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position; +function roundToNearestHalf(mathFn, value) { + return mathFn(value / 0.5) * 0.5; +} +// This includes both staff and ledger lines +function isWithinLines(line, position) { + return position === ABOVE ? line <= 5 : line >= 1; +} +function getRoundingFunction(line, position) { + if (isWithinLines(line, position)) { + if (position === ABOVE) { + return Math.ceil; + } + else { + return Math.floor; + } + } + else { + return Math.round; + } +} +function snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) { + // Initially, snap to nearest staff line or space + const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line); + const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position); + const onStaffLine = snappedLine % 1 === 0; + if (canSnapToStaffSpace && onStaffLine) { + const HALF_STAFF_SPACE = 0.5; + return snappedLine + HALF_STAFF_SPACE * -offsetDirection; + } + else { + return snappedLine; + } +} +// Helper function for checking if a Note object is either a StaveNote or a GraceNote. +const isStaveOrGraceNote = (note) => (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note) || (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note); +function getTopY(note, textLine) { + const stemDirection = note.getStemDirection(); + const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); + if (isStaveOrGraceNote(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return stemTipY; + } + else { + return stemBaseY; + } + } + else { + return Math.min(...note.getYs()); + } + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return stemTipY; + } + else { + return note.checkStave().getYForTopText(textLine); + } + } + else { + return note.checkStave().getYForTopText(textLine); + } + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); + } +} +function getBottomY(note, textLine) { + const stemDirection = note.getStemDirection(); + const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); + if (isStaveOrGraceNote(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return stemBaseY; + } + else { + return stemTipY; + } + } + else { + return Math.max(...note.getYs()); + } + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return note.checkStave().getYForBottomText(textLine); + } + else { + return stemTipY; + } + } + else { + return note.checkStave().getYForBottomText(textLine); + } + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); + } +} +/** + * Get the initial offset of the articulation from the y value of the starting position. + * This is required because the top/bottom text positions already have spacing applied to + * provide a "visually pleasant" default position. However the y values provided from + * the stavenote's top/bottom do *not* have any pre-applied spacing. This function + * normalizes this asymmetry. + * @param note + * @param position + * @returns + */ +function getInitialOffset(note, position) { + const isOnStemTip = (position === ABOVE && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) || + (position === BELOW && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN); + if (isStaveOrGraceNote(note)) { + if (note.hasStem() && isOnStemTip) { + return 0.5; + } + else { + // this amount is larger than the stem-tip offset because we start from + // the center of the notehead + return 1; + } + } + else { + if (note.hasStem() && isOnStemTip) { + return 1; + } + else { + return 0; + } + } +} +/** + * Articulations and Accents are modifiers that can be + * attached to notes. The complete list of articulations is available in + * `tables.ts` under `Vex.Flow.articulationCodes`. + * + * See `tests/articulation_tests.ts` for usage examples. + */ +class Articulation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + /** Articulations category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Articulation; + } + /** + * FIXME: + * Most of the complex formatting logic (ie: snapping to space) is + * actually done in .render(). But that logic belongs in this method. + * + * Unfortunately, this isn't possible because, by this point, stem lengths + * have not yet been finalized. Finalized stem lengths are required to determine the + * initial position of any stem-side articulation. + * + * This indicates that all objects should have their stave set before being + * formatted. It can't be an optional if you want accurate vertical positioning. + * Consistently positioned articulations that play nice with other modifiers + * won't be possible until we stop relying on render-time formatting. + * + * Ideally, when this function has completed, the vertical articulation positions + * should be ready to render without further adjustment. But the current state + * is far from this ideal. + */ + static format(articulations, state) { + if (!articulations || articulations.length === 0) + return false; + const margin = 0.5; + let maxGlyphWidth = 0; + const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(articulation.glyph.getMetrics().height) / 10 + margin); + articulations.forEach((articulation) => { + const note = articulation.checkAttachedNote(); + maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth); + let lines = 5; + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + let stemHeight = 0; + // Decide if we need to consider beam direction in placement. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStemmableNote)(note)) { + const stem = note.getStem(); + if (stem) { + stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + } + } + const stave = note.getStave(); + if (stave) { + lines = stave.getNumLines(); + } + if (articulation.getPosition() === ABOVE) { + let noteLine = note.getLineNumber(true); + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + noteLine += stemHeight; + } + let increment = getIncrement(articulation, state.top_text_line, ABOVE); + const curTop = noteLine + state.top_text_line + 0.5; + // If articulation must be above stave, add lines between note and stave top + if (!articulation.articulation.between_lines && curTop < lines) { + increment += lines - curTop; + } + articulation.setTextLine(state.top_text_line); + state.top_text_line += increment; + } + else if (articulation.getPosition() === BELOW) { + let noteLine = Math.max(lines - note.getLineNumber(), 0); + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + noteLine += stemHeight; + } + let increment = getIncrement(articulation, state.text_line, BELOW); + const curBottom = noteLine + state.text_line + 0.5; + // if articulation must be below stave, add lines from note to stave bottom + if (!articulation.articulation.between_lines && curBottom < lines) { + increment += lines - curBottom; + } + articulation.setTextLine(state.text_line); + state.text_line += increment; + } + }); + const width = articulations + .map((articulation) => articulation.getWidth()) + .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth)); + const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0)); + state.left_shift += overlap / 2; + state.right_shift += overlap / 2; + return true; + } + static easyScoreHook({ articulations }, note, builder) { + if (!articulations) + return; + const articNameToCode = { + staccato: 'a.', + tenuto: 'a-', + accent: 'a>', + }; + articulations + .split(',') + .map((articString) => articString.trim().split('.')) + .map(([name, position]) => { + const artic = { type: articNameToCode[name] }; + if (position) + artic.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.PositionString[position]; + return builder.getFactory().Articulation(artic); + }) + .map((artic) => note.addModifier(artic, 0)); + } + /** + * Create a new articulation. + * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code. + * + * Notes (by default): + * - Glyph codes ending with 'Above' will be positioned ABOVE + * - Glyph codes ending with 'Below' will be positioned BELOW + */ + constructor(type) { + super(); + this.type = type; + this.position = ABOVE; + this.render_options = { + font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, + }; + this.reset(); + } + reset() { + this.articulation = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.articulationCodes(this.type); + // Use type as glyph code, if not defined as articulation code + if (!this.articulation) { + this.articulation = { code: this.type, between_lines: false }; + if (this.type.endsWith('Above')) + this.position = ABOVE; + if (this.type.endsWith('Below')) + this.position = BELOW; + } + const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code; + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale); + (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`); + this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width)); + } + /** Set if articulation should be rendered between lines. */ + setBetweenLines(betweenLines = true) { + this.articulation.between_lines = betweenLines; + return this; + } + /** Render articulation in position next to note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const index = this.checkIndex(); + const { position, glyph, text_line: textLine } = this; + const canSitBetweenLines = this.articulation.between_lines; + const stave = note.checkStave(); + const staffSpace = stave.getSpacingBetweenLines(); + const isTab = (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note); + // Articulations are centered over/under the note head. + const { x } = note.getModifierStartXY(position, index); + const shouldSitOutsideStaff = !canSitBetweenLines || isTab; + const initialOffset = getInitialOffset(note, position); + const padding = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0); + let y = { + [ABOVE]: () => { + glyph.setOrigin(0.5, 1); + const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace; + return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y; + }, + [BELOW]: () => { + glyph.setOrigin(0.5, 0); + const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace; + return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y; + }, + }[position](); + if (!isTab) { + const offsetDirection = position === ABOVE ? -1 : +1; + const noteLine = note.getKeyProps()[index].line; + const distanceFromNote = (note.getYs()[index] - y) / staffSpace; + const articLine = distanceFromNote + Number(noteLine); + const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection); + if (isWithinLines(snappedLine, position)) + glyph.setOrigin(0.5, 0.5); + y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection; + } + L(`Rendering articulation at (x: ${x}, y: ${y})`); + glyph.render(ctx, x, y); + } +} +/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */ +Articulation.DEBUG = false; +Articulation.INITIAL_OFFSET = -0.5; + + + +/***/ }), + +/***/ "./src/barnote.ts": +/*!************************!*\ + !*** ./src/barnote.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BarNote": () => (/* binding */ BarNote) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + +// eslint-disable-next-line +function L(...args) { + if (BarNote.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.BarNote', args); +} +/** + * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can + * be added to a voice and rendered in the middle of a stave. Since it has no + * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter. + * + * See `tests/barnote_tests.ts` for usage examples. + */ +class BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.BarNote; + } + constructor(type = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.SINGLE) { + super({ duration: 'b' }); + this.metrics = { + widths: {}, + }; + const TYPE = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType; + this.metrics.widths = { + [TYPE.SINGLE]: 8, + [TYPE.DOUBLE]: 12, + [TYPE.END]: 15, + [TYPE.REPEAT_BEGIN]: 14, + [TYPE.REPEAT_END]: 14, + [TYPE.REPEAT_BOTH]: 18, + [TYPE.NONE]: 0, + }; + // Tell the formatter that bar notes have no duration. + this.ignore_ticks = true; + this.setType(type); + } + /** Get the type of bar note.*/ + getType() { + return this.type; + } + /** Set the type of bar note. */ + setType(type) { + this.type = typeof type === 'string' ? _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.typeString[type] : type; + // Set width to width of relevant `Barline`. + this.setWidth(this.metrics.widths[this.type]); + return this; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + /** Overridden to ignore. */ + preFormat() { + this.preFormatted = true; + return this; + } + /** Render note to stave. */ + draw() { + const ctx = this.checkContext(); + L('Rendering bar line at: ', this.getAbsoluteX()); + this.applyStyle(ctx); + const barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline(this.type); + barline.setX(this.getAbsoluteX()); + barline.draw(this.checkStave()); + this.restoreStyle(ctx); + this.setRendered(); + } +} +/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */ +BarNote.DEBUG = false; + + + +/***/ }), + +/***/ "./src/beam.ts": +/*!*********************!*\ + !*** ./src/beam.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BEAM_BOTH": () => (/* binding */ BEAM_BOTH), +/* harmony export */ "BEAM_LEFT": () => (/* binding */ BEAM_LEFT), +/* harmony export */ "BEAM_RIGHT": () => (/* binding */ BEAM_RIGHT), +/* harmony export */ "Beam": () => (/* binding */ Beam) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +function calculateStemDirection(notes) { + let lineSum = 0; + notes.forEach((note) => { + if (note.keyProps) { + note.keyProps.forEach((keyProp) => { + lineSum += keyProp.line - 3; + }); + } + }); + if (lineSum >= 0) { + return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; + } + return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; +} +function getStemSlope(firstNote, lastNote) { + const firstStemTipY = firstNote.getStemExtents().topY; + const firstStemX = firstNote.getStemX(); + const lastStemTipY = lastNote.getStemExtents().topY; + const lastStemX = lastNote.getStemX(); + return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX); +} +const BEAM_LEFT = 'L'; +const BEAM_RIGHT = 'R'; +const BEAM_BOTH = 'B'; +/** `Beams` span over a set of `StemmableNotes`. */ +class Beam extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Beam; + } + /** Get the direction of the beam */ + getStemDirection() { + return this.stem_direction; + } + /** + * Get the default beam groups for a provided time signature. + * Attempt to guess if the time signature is not found in table. + * Currently this is fairly naive. + */ + static getDefaultBeamGroups(time_sig) { + if (!time_sig || time_sig === 'c') { + time_sig = '4/4'; + } + const defaults = { + '1/2': ['1/2'], + '2/2': ['1/2'], + '3/2': ['1/2'], + '4/2': ['1/2'], + '1/4': ['1/4'], + '2/4': ['1/4'], + '3/4': ['1/4'], + '4/4': ['1/4'], + '1/8': ['1/8'], + '2/8': ['2/8'], + '3/8': ['3/8'], + '4/8': ['2/8'], + '1/16': ['1/16'], + '2/16': ['2/16'], + '3/16': ['3/16'], + '4/16': ['2/16'], + }; + const groups = defaults[time_sig]; + if (groups === undefined) { + // If no beam groups found, naively determine + // the beam groupings from the time signature + const beatTotal = parseInt(time_sig.split('/')[0], 10); + const beatValue = parseInt(time_sig.split('/')[1], 10); + const tripleMeter = beatTotal % 3 === 0; + if (tripleMeter) { + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(3, beatValue)]; + } + else if (beatValue > 4) { + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, beatValue)]; + } + else if (beatValue <= 4) { + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, beatValue)]; + } + } + else { + return groups.map((group) => new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction().parse(group)); + } + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4)]; + } + /** + * A helper function to automatically build basic beams for a voice. For more + * complex auto-beaming use `Beam.generateBeams()`. + * @param voice the voice to generate the beams for + * @param stem_direction a stem direction to apply to the entire voice + * @param groups an array of `Fraction` representing beat groupings for the beam + */ + static applyAndGetBeams(voice, stem_direction, groups) { + return Beam.generateBeams(voice.getTickables(), { groups, stem_direction }); + } + /** + * A helper function to autimatically build beams for a voice with + * configuration options. + * + * Example configuration object: + * + * ``` + * config = { + * groups: [new Vex.Flow.Fraction(2, 8)], + * stem_direction: -1, + * beam_rests: true, + * beam_middle_only: true, + * show_stemlets: false + * }; + * ``` + * @param notes an array of notes to create the beams for + * @param config the configuration object + * @param config.stem_direction set to apply the same direction to all notes + * @param config.beam_rests set to `true` to include rests in the beams + * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat + * @param config.show_stemlets set to `true` to draw stemlets for rests + * @param config.maintain_stem_directions set to `true` to not apply new stem directions + * @param config.groups array of `Fractions` that represent the beat structure to beam the notes + * + */ + static generateBeams(notes, config = {}) { + if (!config.groups || !config.groups.length) { + config.groups = [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 8)]; + } + // Convert beam groups to tick amounts + const tickGroups = config.groups.map((group) => { + if (!group.multiply) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions'); + } + return group.clone().multiply(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RESOLUTION, 1); + }); + const unprocessedNotes = notes; + let currentTickGroup = 0; + let noteGroups = []; + let currentGroup = []; + function getTotalTicks(vf_notes) { + return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1)); + } + function nextTickGroup() { + if (tickGroups.length - 1 > currentTickGroup) { + currentTickGroup += 1; + } + else { + currentTickGroup = 0; + } + } + function createGroups() { + let nextGroup = []; + // number of ticks in current group + let currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); + unprocessedNotes.forEach((unprocessedNote) => { + nextGroup = []; + if (unprocessedNote.shouldIgnoreTicks()) { + noteGroups.push(currentGroup); + currentGroup = nextGroup; + return; // Ignore untickables (like bar notes) + } + currentGroup.push(unprocessedNote); + const ticksPerGroup = tickGroups[currentTickGroup].clone(); + const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks); + // Double the amount of ticks in a group, if it's an unbeamable tuplet + const unbeamable = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(unprocessedNote.getDuration()) < 8; + if (unbeamable && unprocessedNote.getTuplet()) { + ticksPerGroup.numerator *= 2; + } + // If the note that was just added overflows the group tick total + if (totalTicks.greaterThan(ticksPerGroup)) { + // If the overflow note can be beamed, start the next group + // with it. Unbeamable notes leave the group overflowed. + if (!unbeamable) { + const note = currentGroup.pop(); + if (note) + nextGroup.push(note); + } + noteGroups.push(currentGroup); + // We have overflown, so we're going to next tick group. As we might have + // overflown by more than 1 group, we need to go forward as many times as + // needed, decreasing currentGroupTotalTicks by as many ticks as there are + // in current groups as we go forward. + do { + currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]); + nextTickGroup(); + } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup])); + currentGroup = nextGroup; + } + else if (totalTicks.equals(ticksPerGroup)) { + noteGroups.push(currentGroup); + currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); + currentGroup = nextGroup; + nextTickGroup(); + } + }); + // Adds any remainder notes beam + if (currentGroup.length > 0) { + noteGroups.push(currentGroup); + } + } + function getBeamGroups() { + return noteGroups.filter((group) => { + if (group.length > 1) { + let beamable = true; + group.forEach((note) => { + if (note.getIntrinsicTicks() >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) { + beamable = false; + } + }); + return beamable; + } + return false; + }); + } + // Splits up groups by Rest + function sanitizeGroups() { + const sanitizedGroups = []; + noteGroups.forEach((group) => { + let tempGroup = []; + group.forEach((note, index, group) => { + const isFirstOrLast = index === 0 || index === group.length - 1; + const prevNote = group[index - 1]; + const breaksOnEachRest = !config.beam_rests && note.isRest(); + const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast; + let breakOnStemChange = false; + if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) { + const prevDirection = prevNote.getStemDirection(); + const currentDirection = note.getStemDirection(); + breakOnStemChange = currentDirection !== prevDirection; + } + const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8; + // Determine if the group should be broken at this note + const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration; + if (shouldBreak) { + // Add current group + if (tempGroup.length > 0) { + sanitizedGroups.push(tempGroup); + } + // Start a new group. Include the current note if the group + // was broken up by stem direction, as that note needs to start + // the next group of notes + tempGroup = breakOnStemChange ? [note] : []; + } + else { + // Add note to group + tempGroup.push(note); + } + }); + // If there is a remaining group, add it as well + if (tempGroup.length > 0) { + sanitizedGroups.push(tempGroup); + } + }); + noteGroups = sanitizedGroups; + } + function formatStems() { + noteGroups.forEach((group) => { + let stemDirection; + if (config.maintain_stem_directions) { + const note = findFirstNote(group); + stemDirection = note ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + } + else { + if (config.stem_direction) { + stemDirection = config.stem_direction; + } + else { + stemDirection = calculateStemDirection(group); + } + } + applyStemDirection(group, stemDirection); + }); + } + function findFirstNote(group) { + for (let i = 0; i < group.length; i++) { + const note = group[i]; + if (!note.isRest()) { + return note; + } + } + return false; + } + function applyStemDirection(group, direction) { + group.forEach((note) => { + note.setStemDirection(direction); + }); + } + // Get all of the tuplets in all of the note groups + function getTuplets() { + const uniqueTuplets = []; + // Go through all of the note groups and inspect for tuplets + noteGroups.forEach((group) => { + let tuplet; + group.forEach((note) => { + const noteTuplet = note.getTuplet(); + if (noteTuplet && tuplet !== noteTuplet) { + tuplet = noteTuplet; + uniqueTuplets.push(tuplet); + } + }); + }); + return uniqueTuplets; + } + // Using closures to store the variables throughout the various functions + // IMO Keeps it this process lot cleaner - but not super consistent with + // the rest of the API's style - Silverwolf90 (Cyril) + createGroups(); + sanitizeGroups(); + formatStems(); + // Get the notes to be beamed + const beamedNoteGroups = getBeamGroups(); + // Get the tuplets in order to format them accurately + const allTuplets = getTuplets(); + // Create a Vex.Flow.Beam from each group of notes to be beamed + const beams = []; + beamedNoteGroups.forEach((group) => { + const beam = new Beam(group); + if (config.show_stemlets) { + beam.render_options.show_stemlets = true; + } + if (config.secondary_breaks) { + beam.render_options.secondary_break_ticks = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(config.secondary_breaks); + } + if (config.flat_beams === true) { + beam.render_options.flat_beams = true; + beam.render_options.flat_beam_offset = config.flat_beam_offset; + } + beams.push(beam); + }); + // Reformat tuplets + allTuplets.forEach((tuplet) => { + // Set the tuplet location based on the stem direction + const direction = tuplet.notes[0].stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.BOTTOM : _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.TOP; + tuplet.setTupletLocation(direction); + // If any of the notes in the tuplet are not beamed, draw a bracket. + let bracketed = false; + for (let i = 0; i < tuplet.notes.length; i++) { + const note = tuplet.notes[i]; + if (!note.hasBeam()) { + bracketed = true; + break; + } + } + tuplet.setBracketed(bracketed); + }); + return beams; + } + constructor(notes, auto_stem = false) { + super(); + this.slope = 0; + this.y_shift = 0; + /** + * Overrides to default beam directions for secondary-level beams that do not + * connect to any other note. See further explanation at + * `setPartialBeamSideAt` + */ + this.forcedPartialDirections = {}; + if (!notes || notes.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for beam.'); + } + if (notes.length === 1) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Too few notes for beam.'); + } + // Validate beam line, direction and ticks. + this.ticks = notes[0].getIntrinsicTicks(); + if (this.ticks >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.'); + } + let i; // shared iterator + let note; + this.stem_direction = notes[0].getStemDirection(); + let stem_direction = this.stem_direction; + // Figure out optimal stem direction based on given notes + if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(notes[0])) { + stem_direction = calculateStemDirection(notes); + } + else if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(notes[0])) { + // Auto Stem TabNotes + const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0); + stem_direction = stem_weight > -1 ? _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; + } + // Apply stem directions and attach beam to notes + for (i = 0; i < notes.length; ++i) { + note = notes[i]; + if (auto_stem) { + note.setStemDirection(stem_direction); + this.stem_direction = stem_direction; + } + note.setBeam(this); + } + this.postFormatted = false; + this.notes = notes; + this.beam_count = this.getBeamCount(); + this.break_on_indices = []; + this.render_options = { + beam_width: 5, + max_slope: 0.25, + min_slope: -0.25, + slope_iterations: 20, + slope_cost: 100, + show_stemlets: false, + stemlet_extension: 7, + partial_beam_length: 10, + flat_beams: false, + min_flat_beam_offset: 15, + }; + } + /** Get the notes in this beam. */ + getNotes() { + return this.notes; + } + /** Get the max number of beams in the set of notes. */ + getBeamCount() { + const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count); + const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max)); + return maxBeamCount; + } + /** Set which note `indices` to break the secondary beam at. */ + breakSecondaryAt(indices) { + this.break_on_indices = indices; + return this; + } + /** + * Forces the direction of a partial beam (a secondary-level beam that exists + * on one note only of the beam group). This is useful in rhythms such as 6/8 + * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the + * first sixteenth note can help imply whether the rhythm is to be felt as + * three groups of eighth notes (typical) or as two groups of three-sixteenths + * (less common): + * ``` + * ┌───┬──┬──┐ ┌──┬──┬──┐ + * │ ├─ │ ─┤ vs │ ─┤ │ ─┤ + * │ │ │ │ │ │ │ │ + * ``` + */ + setPartialBeamSideAt(noteIndex, side) { + this.forcedPartialDirections[noteIndex] = side; + return this; + } + /** + * Restore the default direction of a partial beam (a secondary-level beam + * that does not connect to any other notes). + */ + unsetPartialBeamSideAt(noteIndex) { + delete this.forcedPartialDirections[noteIndex]; + return this; + } + /** Return the y coordinate for linear function. */ + getSlopeY(x, first_x_px, first_y_px, slope) { + return first_y_px + (x - first_x_px) * slope; + } + /** Calculate the best possible slope for the provided notes. */ + calculateSlope() { + const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this; + const firstNote = notes[0]; + const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]); + const increment = (max_slope - min_slope) / slope_iterations; + let minCost = Number.MAX_VALUE; + let bestSlope = 0; + let yShift = 0; + // iterate through slope values to find best weighted fit + for (let slope = min_slope; slope <= max_slope; slope += increment) { + let totalStemExtension = 0; + let yShiftTemp = 0; + // iterate through notes, calculating y shift and stem extension + for (let i = 1; i < notes.length; ++i) { + const note = notes[i]; + if (note.hasStem() || note.isRest()) { + const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp; + const stemTipY = note.getStemExtents().topY; + // beam needs to be shifted up to accommodate note + if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) { + const diff = Math.abs(stemTipY - adjustedStemTipY); + yShiftTemp += diff * -stemDirection; + totalStemExtension += diff * i; + } + else { + // beam overshoots note, account for the difference + totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection; + } + } + } + // most engraving books suggest aiming for a slope about half the angle of the + // difference between the first and last notes' stem length; + const idealSlope = initialSlope / 2; + const distanceFromIdeal = Math.abs(idealSlope - slope); + // This tries to align most beams to something closer to the idealSlope, but + // doesn't go crazy. To disable, set this.render_options.slope_cost = 0 + const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension); + // update state when a more ideal slope is found + if (cost < minCost) { + minCost = cost; + bestSlope = slope; + yShift = yShiftTemp; + } + } + this.slope = bestSlope; + this.y_shift = yShift; + } + /** Calculate a slope and y-shift for flat beams. */ + calculateFlatSlope() { + const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this; + // If a flat beam offset has not yet been supplied or calculated, + // generate one based on the notes in this particular note group + let total = 0; + let extremeY = 0; // Store the highest or lowest note here + let extremeBeamCount = 0; // The beam count of the extreme note + let currentExtreme = 0; + for (let i = 0; i < notes.length; i++) { + // Total up all of the offsets so we can average them out later + const note = notes[i]; + const stemTipY = note.getStemExtents().topY; + total += stemTipY; + // Store the highest (stems-up) or lowest (stems-down) note so the + // offset can be adjusted in case the average isn't enough + if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && currentExtreme < stemTipY) { + currentExtreme = stemTipY; + extremeY = Math.max(...note.getYs()); + extremeBeamCount = note.getBeamCount(); + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) { + currentExtreme = stemTipY; + extremeY = Math.min(...note.getYs()); + extremeBeamCount = note.getBeamCount(); + } + } + // Average the offsets to try and come up with a reasonable one that + // works for all of the notes in the beam group. + let offset = total / notes.length; + // In case the average isn't long enough, add or subtract some more + // based on the highest or lowest note (again, based on the stem + // direction). This also takes into account the added height due to + // the width of the beams. + const beamWidth = beam_width * 1.5; + const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth; + const newOffset = extremeY + extremeTest * -stem_direction; + if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset < newOffset) { + offset = extremeY + extremeTest; + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset > newOffset) { + offset = extremeY - extremeTest; + } + if (!flat_beam_offset) { + // Set the offset for the group based on the calculations above. + this.render_options.flat_beam_offset = offset; + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset > flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset < flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + // for flat beams, the slope and y_shift are simply 0 + this.slope = 0; + this.y_shift = 0; + } + /** Return the Beam y offset. */ + getBeamYToDraw() { + const firstNote = this.notes[0]; + const firstStemTipY = firstNote.getStemExtents().topY; + let beamY = firstStemTipY; + // For flat beams, set the first and last Y to the offset, rather than + // using the note's stem extents. + if (this.render_options.flat_beams && this.render_options.flat_beam_offset) { + beamY = this.render_options.flat_beam_offset; + } + return beamY; + } + /** + * Create new stems for the notes in the beam, so that each stem + * extends into the beams. + */ + applyStemExtensions() { + const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this; + const firstNote = notes[0]; + const firstStemTipY = this.getBeamYToDraw(); + const firstStemX = firstNote.getStemX(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const stem = note.getStem(); + if (stem) { + const stemX = note.getStemX(); + const { topY: stemTipY } = note.getStemExtents(); + const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift; + const preBeamExtension = stem.getExtension(); + const beamExtension = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY; + // Determine necessary extension for cross-stave notes in the beam group + let crossStemExtension = 0; + if (note.getStemDirection() !== this.stem_direction) { + const beamCount = note.getGlyphProps().beam_count; + crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width; + /* This will be required if the partial beams are moved to the note side. + if (i > 0 && note.getGlyph().beam_count > 1) { + const prevBeamCount = this.notes[i - 1].getGlyph().beam_count; + const beamDiff = Math.abs(prevBeamCount - beamCount); + if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5); + } + */ + } + stem.setExtension(preBeamExtension + beamExtension + crossStemExtension); + stem.adjustHeightForBeam(); + if (note.isRest() && show_stemlets) { + const beamWidth = beam_width; + const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth; + stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension); + } + } + } + } + /** Return upper level beam direction. */ + lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) { + if (duration === '4') { + return BEAM_LEFT; + } + const forcedBeamDirection = this.forcedPartialDirections[noteIndex]; + if (forcedBeamDirection) + return forcedBeamDirection; + const lookup_duration = `${_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(duration) / 2}`; + const prev_note_gets_beam = prev_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); + const next_note_gets_beam = next_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); + const note_gets_beam = tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); + if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { + return BEAM_BOTH; + } + else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) { + return BEAM_LEFT; + } + else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { + return BEAM_RIGHT; + } + return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex); + } + /** Get the x coordinates for the beam lines of specific `duration`. */ + getBeamLines(duration) { + const tick_of_duration = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(duration); + let beam_started = false; + const beam_lines = []; + let current_beam = undefined; + const partial_beam_length = this.render_options.partial_beam_length; + let previous_should_break = false; + let tick_tally = 0; + for (let i = 0; i < this.notes.length; ++i) { + const note = this.notes[i]; + // See if we need to break secondary beams on this note. + const ticks = note.getTicks().value(); + tick_tally += ticks; + let should_break = false; + // 8th note beams are always drawn. + if (parseInt(duration, 10) >= 8) { + // First, check to see if any indices were set up through breakSecondaryAt() + should_break = this.break_on_indices.indexOf(i) !== -1; + // If the secondary breaks were auto-configured in the render options, + // handle that as well. + if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) { + tick_tally = 0; + should_break = true; + } + } + const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration; + const stem_x = note.getStemX() - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.WIDTH / 2; + // Check to see if the next note in the group will get a beam at this + // level. This will help to inform the partial beam logic below. + const prev_note = this.notes[i - 1]; + const next_note = this.notes[i + 1]; + const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration; + const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration; + const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; + // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; + if (note_gets_beam) { + // This note gets a beam at the current level + if (beam_started) { + // We're currently in the middle of a beam. Just continue it on to + // the stem X of the current note. + current_beam = beam_lines[beam_lines.length - 1]; + current_beam.end = stem_x; + // If a secondary beam break is set up, end the beam right now. + if (should_break) { + beam_started = false; + if (next_note && !next_note_gets_beam && current_beam.end === undefined) { + // This note gets a beam,.but the next one does not. This means + // we need a partial pointing right. + current_beam.end = current_beam.start - partial_beam_length; + } + } + } + else { + // No beam started yet. Start a new one. + current_beam = { start: stem_x, end: undefined }; + beam_started = true; + if (beam_alone) { + // previous and next beam exists and does not get a beam but current gets it. + const prev_tick = prev_note.getIntrinsicTicks(); + const next_tick = next_note.getIntrinsicTicks(); + const tick = note.getIntrinsicTicks(); + const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i); + if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) { + current_beam.end = current_beam.start - partial_beam_length; + } + else { + current_beam.end = current_beam.start + partial_beam_length; + } + } + else if (!next_note_gets_beam) { + // The next note doesn't get a beam. Draw a partial. + if ((previous_should_break || i === 0) && next_note) { + // This is the first note (but not the last one), or it is + // following a secondary break. Draw a partial to the right. + current_beam.end = current_beam.start + partial_beam_length; + } + else { + // By default, draw a partial to the left. + current_beam.end = current_beam.start - partial_beam_length; + } + } + else if (should_break) { + // This note should have a secondary break after it. Even though + // we just started a beam, it needs to end immediately. + current_beam.end = current_beam.start - partial_beam_length; + beam_started = false; + } + beam_lines.push(current_beam); + } + } + else { + // The current note does not get a beam. + beam_started = false; + } + // Store the secondary break flag to inform the partial beam logic in + // the next iteration of the loop. + previous_should_break = should_break; + } + // Add a partial beam pointing left if this is the last note in the group + const last_beam = beam_lines[beam_lines.length - 1]; + if (last_beam && last_beam.end === undefined) { + last_beam.end = last_beam.start - partial_beam_length; + } + return beam_lines; + } + /** Render the stems for each note. */ + drawStems(ctx) { + this.notes.forEach((note) => { + const stem = note.getStem(); + if (stem) { + const stem_x = note.getStemX(); + stem.setNoteHeadXBounds(stem_x, stem_x); + stem.setContext(ctx).draw(); + } + }, this); + } + // Render the beam lines + drawBeamLines(ctx) { + const valid_beam_durations = ['4', '8', '16', '32', '64']; + const firstNote = this.notes[0]; + let beamY = this.getBeamYToDraw(); + const firstStemX = firstNote.getStemX(); + const beamThickness = this.render_options.beam_width * this.stem_direction; + // Draw the beams. + for (let i = 0; i < valid_beam_durations.length; ++i) { + const duration = valid_beam_durations[i]; + const beamLines = this.getBeamLines(duration); + for (let j = 0; j < beamLines.length; ++j) { + const beam_line = beamLines[j]; + const startBeamX = beam_line.start; + const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope); + const lastBeamX = beam_line.end; + if (lastBeamX) { + const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope); + ctx.beginPath(); + ctx.moveTo(startBeamX, startBeamY); + ctx.lineTo(startBeamX, startBeamY + beamThickness); + ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness); + ctx.lineTo(lastBeamX + 1, lastBeamY); + ctx.closePath(); + ctx.fill(); + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoLastBeamX', 'lastBeamX undefined.'); + } + } + beamY += beamThickness * 1.5; + } + } + /** Pre-format the beam. */ + preFormat() { + return this; + } + /** + * Post-format the beam. This can only be called after + * the notes in the beam have both `x` and `y` values. ie: they've + * been formatted and have staves. + */ + postFormat() { + if (this.postFormatted) + return; + // Calculate a smart slope if we're not forcing the beams to be flat. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(this.notes[0]) || this.render_options.flat_beams) { + this.calculateFlatSlope(); + } + else { + this.calculateSlope(); + } + this.applyStemExtensions(); + this.postFormatted = true; + } + /** Render the beam to the canvas context */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + if (this.unbeamable) + return; + if (!this.postFormatted) { + this.postFormat(); + } + this.drawStems(ctx); + this.applyStyle(); + ctx.openGroup('beam', this.getAttribute('id')); + this.drawBeamLines(ctx); + ctx.closeGroup(); + this.restoreStyle(); + } +} + + +/***/ }), + +/***/ "./src/bend.ts": +/*!*********************!*\ + !*** ./src/bend.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Bend": () => (/* binding */ Bend) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +/** Bend implements tablature bends. */ +class Bend extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Bend; + } + static get UP() { + return 0; + } + static get DOWN() { + return 1; + } + // Arrange bends in `ModifierContext` + static format(bends, state) { + if (!bends || bends.length === 0) + return false; + let last_width = 0; + // Format Bends + for (let i = 0; i < bends.length; ++i) { + const bend = bends[i]; + const note = bend.checkAttachedNote(); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isTabNote)(note)) { + const stringPos = note.leastString() - 1; + if (state.top_text_line < stringPos) { + state.top_text_line = stringPos; + } + } + bend.setXShift(last_width); + last_width = bend.getWidth(); + bend.setTextLine(state.top_text_line); + } + state.right_shift += last_width; + state.top_text_line += 1; + return true; + } + /** + * Example of a phrase: + * ``` + * [{ + * type: UP, + * text: "whole" + * width: 8; + * }, + * { + * type: DOWN, + * text: "whole" + * width: 8; + * }, + * { + * type: UP, + * text: "half" + * width: 8; + * }, + * { + * type: UP, + * text: "whole" + * width: 8; + * }, + * { + * type: DOWN, + * text: "1 1/2" + * width: 8; + * }] + * ``` + * @param text text for bend ("Full", "Half", etc.) (DEPRECATED) + * @param release if true, render a release. (DEPRECATED) + * @param phrase if set, ignore "text" and "release", and use the more sophisticated phrase specified + */ + constructor(text, release = false, phrase) { + super(); + this.text = text; + this.x_shift = 0; + this.release = release; + this.tap = ''; + this.resetFont(); + this.render_options = { + line_width: 1.5, + line_style: '#777777', + bend_width: 8, + release_width: 8, + }; + if (phrase) { + this.phrase = phrase; + } + else { + // Backward compatibility + this.phrase = [{ type: Bend.UP, text: this.text }]; + if (this.release) + this.phrase.push({ type: Bend.DOWN, text: '' }); + } + this.updateWidth(); + } + /** Set horizontal shift in pixels. */ + setXShift(value) { + this.x_shift = value; + this.updateWidth(); + return this; + } + setTap(value) { + this.tap = value; + return this; + } + /** Get text provided in the constructor. */ + getText() { + return this.text; + } + getTextHeight() { + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); + return textFormatter.maxHeight; + } + /** Recalculate width. */ + updateWidth() { + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); + const measureText = (text) => { + return textFormatter.getWidthForTextInPx(text); + }; + let totalWidth = 0; + for (let i = 0; i < this.phrase.length; ++i) { + const bend = this.phrase[i]; + if (bend.width !== undefined) { + totalWidth += bend.width; + } + else { + const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width; + bend.width = Math.max(additional_width, measureText(bend.text)) + 3; + bend.draw_width = bend.width / 2; + totalWidth += bend.width; + } + } + this.setWidth(totalWidth + this.x_shift); + return this; + } + /** Draw the bend on the rendering context. */ + draw() { + var _a; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index); + start.x += 3; + start.y += 0.5; + const x_shift = this.x_shift; + const stave = note.checkStave(); + const spacing = stave.getSpacingBetweenLines(); + const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b)); + // this.text_line is relative to top string in the group. + const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3; + const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1; + const renderBend = (x, y, width, height) => { + const cp_x = x + width; + const cp_y = y; + ctx.save(); + ctx.beginPath(); + ctx.setLineWidth(this.render_options.line_width); + ctx.setStrokeStyle(this.render_options.line_style); + ctx.setFillStyle(this.render_options.line_style); + ctx.moveTo(x, y); + ctx.quadraticCurveTo(cp_x, cp_y, x + width, height); + ctx.stroke(); + ctx.restore(); + }; + const renderRelease = (x, y, width, height) => { + ctx.save(); + ctx.beginPath(); + ctx.setLineWidth(this.render_options.line_width); + ctx.setStrokeStyle(this.render_options.line_style); + ctx.setFillStyle(this.render_options.line_style); + ctx.moveTo(x, height); + ctx.quadraticCurveTo(x + width, height, x + width, y); + ctx.stroke(); + ctx.restore(); + }; + const renderArrowHead = (x, y, direction) => { + const width = 4; + const yBase = y + width * direction; + ctx.beginPath(); + ctx.moveTo(x, y); // tip of the arrow + ctx.lineTo(x - width, yBase); + ctx.lineTo(x + width, yBase); + ctx.closePath(); + ctx.fill(); + }; + const renderText = (x, text) => { + ctx.save(); + ctx.setFont(this.textFont); + const render_x = x - ctx.measureText(text).width / 2; + ctx.fillText(text, render_x, annotation_y); + ctx.restore(); + }; + let last_bend = undefined; + let last_bend_draw_width = 0; + let last_drawn_width = 0; + if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) { + const tapStart = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.CENTER, this.index); + renderText(tapStart.x, this.tap); + } + for (let i = 0; i < this.phrase.length; ++i) { + const bend = this.phrase[i]; + if (!bend.draw_width) + bend.draw_width = 0; + if (i === 0) + bend.draw_width += x_shift; + last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0); + if (bend.type === Bend.UP) { + if (last_bend && last_bend.type === Bend.UP) { + renderArrowHead(start.x, bend_height, +1); + } + renderBend(start.x, start.y, last_drawn_width, bend_height); + } + if (bend.type === Bend.DOWN) { + if (last_bend && last_bend.type === Bend.UP) { + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + if (last_bend && last_bend.type === Bend.DOWN) { + renderArrowHead(start.x, start.y, -1); + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + if (!last_bend) { + last_drawn_width = bend.draw_width; + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + } + renderText(start.x + last_drawn_width, bend.text); + last_bend = bend; + last_bend_draw_width = bend.draw_width; + last_bend.x = start.x; + start.x += last_drawn_width; + } + if (!last_bend || last_bend.x == undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoLastBendForBend', 'Internal error.'); + } + // Final arrowhead and text + if (last_bend.type === Bend.UP) { + renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1); + } + else if (last_bend.type === Bend.DOWN) { + renderArrowHead(last_bend.x + last_drawn_width, start.y, -1); + } + } +} +/** Default text font. */ +Bend.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); + + + +/***/ }), + +/***/ "./src/boundingbox.ts": +/*!****************************!*\ + !*** ./src/boundingbox.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BoundingBox": () => (/* binding */ BoundingBox) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +class BoundingBox { + /** + * Create a new copy. + */ + static copy(that) { + return new BoundingBox(that.x, that.y, that.w, that.h); + } + constructor(x, y, w, h) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + } + /** Get x position. */ + getX() { + return this.x; + } + /** Get y position. */ + getY() { + return this.y; + } + /** Get width. */ + getW() { + return this.w; + } + /** Get height. */ + getH() { + return this.h; + } + /** Set x position. */ + setX(x) { + this.x = x; + return this; + } + /** Set y position. */ + setY(y) { + this.y = y; + return this; + } + /** Set width. */ + setW(w) { + this.w = w; + return this; + } + /** Set height. */ + setH(h) { + this.h = h; + return this; + } + /** Move to position. */ + move(x, y) { + this.x += x; + this.y += y; + return this; + } + /** Clone. */ + clone() { + return BoundingBox.copy(this); + } + /** + * Merge my box with given box. Creates a bigger bounding box unless + * the given box is contained in this one. + */ + mergeWith(boundingBox) { + const that = boundingBox; + const new_x = this.x < that.x ? this.x : that.x; + const new_y = this.y < that.y ? this.y : that.y; + const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x; + const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y; + this.x = new_x; + this.y = new_y; + this.w = new_w; + this.h = new_h; + return this; + } +} + + +/***/ }), + +/***/ "./src/boundingboxcomputation.ts": +/*!***************************************!*\ + !*** ./src/boundingboxcomputation.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BoundingBoxComputation": () => (/* binding */ BoundingBoxComputation) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +/** + * BoundingBoxComputation computes metrics for a bounding box by continuously + * taking canvas path commands. + * + * Warning: This class is merely a crutch to get bounding box information without + * explicit metadata. This is likely to get deprecated following SMuFL support. + * + * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License) + */ +class BoundingBoxComputation { + constructor() { + this.x1 = Number.NaN; + this.y1 = Number.NaN; + this.x2 = Number.NaN; + this.y2 = Number.NaN; + } + /** Get calculated X1. */ + getX1() { + return this.x1; + } + /** Get calculated Y1. */ + getY1() { + return this.y1; + } + /** Get calculated width. */ + width() { + return this.x2 - this.x1; + } + /** Get calculated height. */ + height() { + return this.y2 - this.y1; + } + /** Add point to BoundingBox. */ + addPoint(x, y) { + if (isNaN(this.x1) || x < this.x1) + this.x1 = x; + if (isNaN(this.x2) || x > this.x2) + this.x2 = x; + if (isNaN(this.y1) || y < this.y1) + this.y1 = y; + if (isNaN(this.y2) || y > this.y2) + this.y2 = y; + } + /** Add X to BoundingBox. */ + addX(x) { + this.addPoint(x, this.y1); + } + /** Add Y to BoundingBox. */ + addY(y) { + this.addPoint(this.x1, y); + } + /** Add quadratic curve to BoundingBox. */ + addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) { + this.addPoint(p0x, p0y); + this.addPoint(p2x, p2y); + const p01x = p1x - p0x; + const p12x = p2x - p1x; + let denom = p01x - p12x; + if (denom != 0) { + const t = p01x / denom; + if (t > 0 && t < 1) { + const it = 1 - t; + this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x); + } + } + const p01y = p1y - p0y; + const p12y = p2y - p1y; + denom = p01y - p12y; + if (denom != 0) { + const t = p01y / denom; + if (t > 0 && t < 1) { + const it = 1 - t; + this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y); + } + } + } + /** Add bezier curve to BoundingBox. */ + addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { + // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html + const p0 = [p0x, p0y]; + const p1 = [p1x, p1y]; + const p2 = [p2x, p2y]; + const p3 = [p3x, p3y]; + let i; + this.addPoint(p0[0], p0[1]); + this.addPoint(p3[0], p3[1]); + const f = (t, i) => Math.pow(1 - t, 3) * p0[i] + + 3 * Math.pow(1 - t, 2) * t * p1[i] + + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + + Math.pow(t, 3) * p3[i]; + for (i = 0; i <= 1; i++) { + const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; + const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; + const c = 3 * p1[i] - 3 * p0[i]; + if (a === 0) { + if (b === 0) + continue; + const t = -c / b; + if (0 < t && t < 1) { + if (i === 0) + this.addX(f(t, i)); + if (i === 1) + this.addY(f(t, i)); + } + continue; + } + const b2ac = Math.pow(b, 2) - 4 * c * a; + if (b2ac < 0) + continue; + const t1 = (-b + Math.sqrt(b2ac)) / (2 * a); + if (0 < t1 && t1 < 1) { + if (i === 0) + this.addX(f(t1, i)); + if (i === 1) + this.addY(f(t1, i)); + } + const t2 = (-b - Math.sqrt(b2ac)) / (2 * a); + if (0 < t2 && t2 < 1) { + if (i === 0) + this.addX(f(t2, i)); + if (i === 1) + this.addY(f(t2, i)); + } + } + } +} + + +/***/ }), + +/***/ "./src/canvascontext.ts": +/*!******************************!*\ + !*** ./src/canvascontext.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CanvasContext": () => (/* binding */ CanvasContext) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + +/** + * A rendering context for the Canvas backend. This class serves as a proxy for the + * underlying CanvasRenderingContext2D object, part of the browser's API. + */ +class CanvasContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext { + static get WIDTH() { + return 600; + } + static get HEIGHT() { + return 400; + } + static get CANVAS_BROWSER_SIZE_LIMIT() { + return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size. + } + /** + * Ensure that width and height do not exceed the browser limit. + * @returns array of [width, height] clamped to the browser limit. + */ + static sanitizeCanvasDims(width, height) { + const limit = this.CANVAS_BROWSER_SIZE_LIMIT; + if (Math.max(width, height) > limit) { + (0,_util__WEBPACK_IMPORTED_MODULE_2__.warn)('Canvas dimensions exceed browser limit. Cropping to ' + limit); + if (width > limit) { + width = limit; + } + if (height > limit) { + height = limit; + } + } + return [width, height]; + } + constructor(context) { + super(); + /** Height of one line of text (in pixels). */ + this.textHeight = 0; + this.context2D = context; + if (!context.canvas) { + this.canvas = { + width: CanvasContext.WIDTH, + height: CanvasContext.HEIGHT, + }; + } + else { + this.canvas = context.canvas; + } + } + /** + * Set all pixels to transparent black rgba(0,0,0,0). + */ + clear() { + this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height); + } + // eslint-disable-next-line + openGroup(cls, id, attrs) { + // Containers not implemented. + } + closeGroup() { + // Containers not implemented. + } + // eslint-disable-next-line + add(child) { + // Containers not implemented. + } + setFillStyle(style) { + this.context2D.fillStyle = style; + return this; + } + /** CanvasContext ignores `setBackgroundFillStyle()`. */ + // eslint-disable-next-line + setBackgroundFillStyle(style) { + // DO NOTHING + return this; + } + setStrokeStyle(style) { + this.context2D.strokeStyle = style; + return this; + } + setShadowColor(color) { + this.context2D.shadowColor = color; + return this; + } + setShadowBlur(blur) { + // CanvasRenderingContext2D does not scale the shadow blur by the current + // transform, so we have to do it manually. We assume uniform scaling + // (though allow for rotation) because the blur can only be scaled + // uniformly anyway. + const t = this.context2D.getTransform(); + const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d); + this.context2D.shadowBlur = scale * blur; + return this; + } + setLineWidth(width) { + this.context2D.lineWidth = width; + return this; + } + setLineCap(capType) { + this.context2D.lineCap = capType; + return this; + } + setLineDash(dash) { + this.context2D.setLineDash(dash); + return this; + } + scale(x, y) { + this.context2D.scale(x, y); + return this; + } + resize(width, height, devicePixelRatio) { + var _a; + const canvas = this.context2D.canvas; + const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : (0,_util__WEBPACK_IMPORTED_MODULE_2__.globalObject)().devicePixelRatio) !== null && _a !== void 0 ? _a : 1; + // Scale the canvas size by the device pixel ratio clamping to the maximum supported size. + [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr); + // Divide back down by the pixel ratio and convert to integers. + width = (width / dpr) | 0; + height = (height / dpr) | 0; + canvas.width = width * dpr; + canvas.height = height * dpr; + // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas. + // Only HTMLCanvasElement has a style attribute. + if ((0,_web__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas)(canvas)) { + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + return this.scale(dpr, dpr); + } + rect(x, y, width, height) { + this.context2D.rect(x, y, width, height); + return this; + } + fillRect(x, y, width, height) { + this.context2D.fillRect(x, y, width, height); + return this; + } + /** + * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0). + */ + clearRect(x, y, width, height) { + this.context2D.clearRect(x, y, width, height); + return this; + } + beginPath() { + this.context2D.beginPath(); + return this; + } + moveTo(x, y) { + this.context2D.moveTo(x, y); + return this; + } + lineTo(x, y) { + this.context2D.lineTo(x, y); + return this; + } + bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { + this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + return this; + } + quadraticCurveTo(cpx, cpy, x, y) { + this.context2D.quadraticCurveTo(cpx, cpy, x, y); + return this; + } + arc(x, y, radius, startAngle, endAngle, counterclockwise) { + this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise); + return this; + } + fill() { + this.context2D.fill(); + return this; + } + stroke() { + this.context2D.stroke(); + return this; + } + closePath() { + this.context2D.closePath(); + return this; + } + measureText(text) { + const metrics = this.context2D.measureText(text); + let y = 0; + let height = 0; + if (metrics.fontBoundingBoxAscent) { + y = -metrics.fontBoundingBoxAscent; + height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent; + } + else { + y = -metrics.actualBoundingBoxAscent; + height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent; + } + // Return x, y, width & height in the same manner as svg getBBox + return { + x: 0, + y: y, + width: metrics.width, + height: height, + }; + } + fillText(text, x, y) { + this.context2D.fillText(text, x, y); + return this; + } + save() { + this.context2D.save(); + return this; + } + restore() { + this.context2D.restore(); + return this; + } + set fillStyle(style) { + this.context2D.fillStyle = style; + } + get fillStyle() { + return this.context2D.fillStyle; + } + set strokeStyle(style) { + this.context2D.strokeStyle = style; + } + get strokeStyle() { + return this.context2D.strokeStyle; + } + /** + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + */ + setFont(f, size, weight, style) { + const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style); + this.context2D.font = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo); + this.textHeight = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(fontInfo.size); + return this; + } + /** Return a string of the form `'italic bold 15pt Arial'` */ + getFont() { + return this.context2D.font; + } +} + + +/***/ }), + +/***/ "./src/chordsymbol.ts": +/*!****************************!*\ + !*** ./src/chordsymbol.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ChordSymbol": () => (/* binding */ ChordSymbol), +/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* binding */ ChordSymbolHorizontalJustify), +/* harmony export */ "ChordSymbolVerticalJustify": () => (/* binding */ ChordSymbolVerticalJustify), +/* harmony export */ "SymbolModifiers": () => (/* binding */ SymbolModifiers), +/* harmony export */ "SymbolTypes": () => (/* binding */ SymbolTypes) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Author: Aaron (@AaronDavidNewman) +// +// This implements chord symbols above/below a chord. +// Chord symbols are modifiers that can be attached to notes. +// They can contain multiple 'blocks' which represent text or +// glyphs with various positioning options. +// +// See `tests/chordsymbol_tests.ts` for usage examples. + + + + + + + +// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (ChordSymbol.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.ChordSymbol', args); +} +var ChordSymbolHorizontalJustify; +(function (ChordSymbolHorizontalJustify) { + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["LEFT"] = 1] = "LEFT"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER"] = 2] = "CENTER"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["RIGHT"] = 3] = "RIGHT"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {})); +var ChordSymbolVerticalJustify; +(function (ChordSymbolVerticalJustify) { + ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["TOP"] = 1] = "TOP"; + ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["BOTTOM"] = 2] = "BOTTOM"; +})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {})); +var SymbolTypes; +(function (SymbolTypes) { + SymbolTypes[SymbolTypes["GLYPH"] = 1] = "GLYPH"; + SymbolTypes[SymbolTypes["TEXT"] = 2] = "TEXT"; + SymbolTypes[SymbolTypes["LINE"] = 3] = "LINE"; +})(SymbolTypes || (SymbolTypes = {})); +var SymbolModifiers; +(function (SymbolModifiers) { + SymbolModifiers[SymbolModifiers["NONE"] = 1] = "NONE"; + SymbolModifiers[SymbolModifiers["SUBSCRIPT"] = 2] = "SUBSCRIPT"; + SymbolModifiers[SymbolModifiers["SUPERSCRIPT"] = 3] = "SUPERSCRIPT"; +})(SymbolModifiers || (SymbolModifiers = {})); +/** + * ChordSymbol is a modifier that creates a chord symbol above/below a chord. + * As a modifier, it is attached to an existing note. + */ +class ChordSymbol extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.ChordSymbol; + } + static get superSubRatio() { + return ChordSymbol.metrics.global.superSubRatio; + } + /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */ + static set NO_TEXT_FORMAT(val) { + ChordSymbol.noFormat = val; + } + static get NO_TEXT_FORMAT() { + return ChordSymbol.noFormat; + } + static getMetricForGlyph(glyphCode) { + if (ChordSymbol.metrics.glyphs[glyphCode]) { + return ChordSymbol.metrics.glyphs[glyphCode]; + } + return undefined; + } + static get engravingFontResolution() { + return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getResolution(); + } + static get spacingBetweenBlocks() { + return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution; + } + static getWidthForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0.65; // probably should do something here. + } + return metric.advanceWidth / ChordSymbol.engravingFontResolution; + } + static getYShiftForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0; + } + return metric.yOffset / ChordSymbol.engravingFontResolution; + } + static getXShiftForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0; + } + return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution; + } + static get superscriptOffset() { + return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution; + } + static get subscriptOffset() { + return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution; + } + static get kerningOffset() { + return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution; + } + static get metrics() { + const chordSymbol = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().chordSymbol; + if (!chordSymbol) + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `chordSymbol missing`); + return chordSymbol; + } + static get lowerKerningText() { + // For example, see: `bravura_metrics.ts` + // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters. + // ['D', 'F', 'P', 'T', 'V', 'Y'] + return ChordSymbol.metrics.global.lowerKerningText; + } + static get upperKerningText() { + return ChordSymbol.metrics.global.upperKerningText; + } + static isSuperscript(block) { + return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT; + } + static isSubscript(block) { + return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT; + } + static get minPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** + * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks. + * Estimate how many lines above/below the staff we need. + */ + static format(symbols, state) { + var _a; + if (!symbols || symbols.length === 0) + return false; + let width = 0; + let nonSuperWidth = 0; + let leftWidth = 0; + let rightWidth = 0; + let maxLeftGlyphWidth = 0; + let maxRightGlyphWidth = 0; + for (const symbol of symbols) { + const fontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size); + const fontAdj = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(fontSize, 0.05); + const glyphAdj = fontAdj * 2; + const note = symbol.checkAttachedNote(); + let symbolWidth = 0; + let lineSpaces = 1; + let vAlign = false; + for (let j = 0; j < symbol.symbolBlocks.length; ++j) { + const block = symbol.symbolBlocks[j]; + const sup = ChordSymbol.isSuperscript(block); + const sub = ChordSymbol.isSubscript(block); + const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1; + const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale; + // If there are super/subscripts, they extend beyond the line so + // assume they take up 2 lines + if (sup || sub) { + lineSpaces = 2; + } + // If there is a symbol-specific offset, add it but consider font + // size since font and glyphs will be interspersed. + const fontSize = symbol.textFormatter.fontSizeInPixels; + const superSubFontSize = fontSize * superSubScale; + if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) { + block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize; + block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize; + block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize; + block.glyph.scale = block.glyph.scale * adj; + } + else if (block.symbolType === SymbolTypes.TEXT) { + block.width = block.width * superSubFontSize; + block.yShift += symbol.getYOffsetForText(block.text) * adj; + } + if (block.symbolType === SymbolTypes.GLYPH && + block.glyph !== undefined && + block.glyph.code === ChordSymbol.glyphs.over.code) { + lineSpaces = 2; + } + block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale; + // If a subscript immediately follows a superscript block, try to + // overlay them. + if (sup && j > 0) { + const prev = symbol.symbolBlocks[j - 1]; + if (!ChordSymbol.isSuperscript(prev)) { + nonSuperWidth = width; + } + } + if (sub && nonSuperWidth > 0) { + vAlign = true; + // slide the symbol over so it lines up with superscript + block.xShift = block.xShift + (nonSuperWidth - width); + width = nonSuperWidth; + nonSuperWidth = 0; + // If we have vertically lined up, turn kerning off. + symbol.setEnableKerning(false); + } + if (!sup && !sub) { + nonSuperWidth = 0; + } + block.vAlign = vAlign; + width += block.width; + symbolWidth = width; + } + // make kerning adjustments after computing super/subscripts + symbol.updateKerningAdjustments(); + symbol.updateOverBarAdjustments(); + if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) { + symbol.setTextLine(state.top_text_line); + state.top_text_line += lineSpaces; + } + else { + symbol.setTextLine(state.text_line + 1); + state.text_line += lineSpaces + 1; + } + if (symbol.getReportWidth() && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) { + const glyphWidth = note.getGlyphProps().getWidth(); + if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) { + maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); + leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding; + } + else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) { + maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); + rightWidth = Math.max(rightWidth, symbolWidth); + } + else { + leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding; + rightWidth = Math.max(rightWidth, symbolWidth / 2); + maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); + maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); + } + } + width = 0; // reset symbol width + } + const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); + const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); + state.left_shift += leftOverlap; + state.right_shift += rightOverlap; + return true; + } + constructor() { + super(); + this.symbolBlocks = []; + this.horizontal = ChordSymbolHorizontalJustify.LEFT; + this.vertical = ChordSymbolVerticalJustify.TOP; + this.useKerning = true; + this.reportWidth = true; + this.resetFont(); + } + /** + * Default text font. + * Choose a font family that works well with the current music engraving font. + * @override `Element.TEXT_FONT`. + */ + static get TEXT_FONT() { + let family = 'Roboto Slab, Times, serif'; + if (_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getName() === 'Petaluma') { + // Fixes Issue #1180 + family = 'PetalumaScript, Arial, sans-serif'; + } + return { + family, + size: 12, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, + }; + } + /** + * The offset is specified in `em`. Scale this value by the font size in pixels. + */ + get superscriptOffset() { + return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels; + } + get subscriptOffset() { + return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels; + } + setReportWidth(value) { + this.reportWidth = value; + return this; + } + getReportWidth() { + return this.reportWidth; + } + updateOverBarAdjustments() { + const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash'); + if (barIndex < 0) { + return; + } + const bar = this.symbolBlocks[barIndex]; + const xoff = bar.width / 4; + const yoff = 0.25 * this.textFormatter.fontSizeInPixels; + let symIndex = 0; + for (symIndex === 0; symIndex < barIndex; ++symIndex) { + const symbol = this.symbolBlocks[symIndex]; + symbol.xShift = symbol.xShift + xoff; + symbol.yShift = symbol.yShift - yoff; + } + for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) { + const symbol = this.symbolBlocks[symIndex]; + symbol.xShift = symbol.xShift - xoff; + symbol.yShift = symbol.yShift + yoff; + } + } + updateKerningAdjustments() { + let accum = 0; + for (let j = 0; j < this.symbolBlocks.length; ++j) { + const symbol = this.symbolBlocks[j]; + accum += this.getKerningAdjustment(j); + symbol.xShift += accum; + } + } + /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */ + getKerningAdjustment(j) { + if (!this.useKerning) { + return 0; + } + const currSymbol = this.symbolBlocks[j]; + const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined; + let adjustment = 0; + // Move things into the '/' over bar + if (currSymbol.symbolType === SymbolTypes.GLYPH && + currSymbol.glyph !== undefined && + currSymbol.glyph.code === ChordSymbol.glyphs.over.code) { + adjustment += currSymbol.glyph.metrics.x_shift; + } + if (prevSymbol !== undefined && + prevSymbol.symbolType === SymbolTypes.GLYPH && + prevSymbol.glyph !== undefined && + prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) { + adjustment += prevSymbol.glyph.metrics.x_shift; + } + // For superscripts that follow a letter without much top part, move it to the left slightly + let preKernUpper = false; + let preKernLower = false; + if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) { + preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); + preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); + } + const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels; + // TODO: adjust kern for font size. + // Where should this constant live? + if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) { + adjustment += kerningOffsetPixels; + } + if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) { + if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') { + adjustment += kerningOffsetPixels / 2; + } + if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) { + adjustment += kerningOffsetPixels / 2; + } + } + return adjustment; + } + /** + * ChordSymbol allows multiple blocks so we can mix glyphs and font text. + * Each block can have its own vertical orientation. + */ + // eslint-disable-next-line + getSymbolBlock(params = {}) { + var _a, _b, _c; + const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT; + const symbolBlock = { + text: (_b = params.text) !== null && _b !== void 0 ? _b : '', + symbolType, + symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE, + xShift: 0, + yShift: 0, + vAlign: false, + width: 0, + }; + // Note: symbol widths are resolution and font-independent. + // We convert to pixel values when we know what the font is. + if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') { + const glyphArgs = ChordSymbol.glyphs[params.glyph]; + const glyphPoints = 20; + symbolBlock.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' }); + } + else if (symbolType === SymbolTypes.TEXT) { + symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text); + } + else if (symbolType === SymbolTypes.LINE) { + symbolBlock.width = params.width; + } + return symbolBlock; + } + /** Add a symbol to this chord, could be text, glyph or line. */ + // eslint-disable-next-line + addSymbolBlock(parameters) { + this.symbolBlocks.push(this.getSymbolBlock(parameters)); + return this; + } + // ### Convenience functions for creating different types of chord symbol parts. + /** Add a text block. */ + // eslint-disable-next-line + addText(text, parameters = {}) { + const symbolType = SymbolTypes.TEXT; + return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType })); + } + /** Add a text block with superscript modifier. */ + addTextSuperscript(text) { + const symbolType = SymbolTypes.TEXT; + const symbolModifier = SymbolModifiers.SUPERSCRIPT; + return this.addSymbolBlock({ text, symbolType, symbolModifier }); + } + /** Add a text block with subscript modifier. */ + addTextSubscript(text) { + const symbolType = SymbolTypes.TEXT; + const symbolModifier = SymbolModifiers.SUBSCRIPT; + return this.addSymbolBlock({ text, symbolType, symbolModifier }); + } + /** Add a glyph block with superscript modifier. */ + addGlyphSuperscript(glyph) { + const symbolType = SymbolTypes.GLYPH; + const symbolModifier = SymbolModifiers.SUPERSCRIPT; + return this.addSymbolBlock({ glyph, symbolType, symbolModifier }); + } + /** Add a glyph block. */ + // eslint-disable-next-line + addGlyph(glyph, params = {}) { + const symbolType = SymbolTypes.GLYPH; + return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType })); + } + /** + * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font. + * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else. + */ + // eslint-disable-next-line + addGlyphOrText(text, params = {}) { + let str = ''; + for (let i = 0; i < text.length; ++i) { + const char = text[i]; + if (ChordSymbol.glyphs[char]) { + if (str.length > 0) { + this.addText(str, params); + str = ''; + } + this.addGlyph(char, params); + } + else { + // Collect consecutive characters with no glyphs. + str += char; + } + } + if (str.length > 0) { + this.addText(str, params); + } + return this; + } + /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */ + // eslint-disable-next-line + addLine(width, params = {}) { + const symbolType = SymbolTypes.LINE; + return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width })); + } + /** + * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`). + * + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + * + * @override See: Element. + */ + setFont(f, size, weight, style) { + super.setFont(f, size, weight, style); + this.textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); + return this; + } + setEnableKerning(val) { + this.useKerning = val; + return this; + } + /** Set vertical position of text (above or below stave). */ + setVertical(vj) { + this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj; + return this; + } + getVertical() { + return this.vertical; + } + /** Set horizontal justification. */ + setHorizontal(hj) { + this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj; + return this; + } + getHorizontal() { + return this.horizontal; + } + getWidth() { + let width = 0; + this.symbolBlocks.forEach((symbol) => { + width += symbol.vAlign ? 0 : symbol.width; + }); + return width; + } + getYOffsetForText(text) { + var _a; + let acc = 0; + let i = 0; + for (i = 0; i < text.length; ++i) { + const metrics = this.textFormatter.getGlyphMetrics(text[i]); + if (metrics) { + const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0; + acc = yMax < acc ? yMax : acc; + } + } + const resolution = this.textFormatter.getResolution(); + return i > 0 ? -1 * (acc / resolution) : 0; + } + /** Render text and glyphs above/below the note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + // We're changing context parameters. Save current state. + ctx.save(); + this.applyStyle(); + ctx.openGroup('chordsymbol', this.getAttribute('id')); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE, this.index); + ctx.setFont(this.textFont); + let y; + // The position of the text varies based on whether or not the note + // has a stem. + const hasStem = note.hasStem(); + const stave = note.checkStave(); + if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) { + // HACK: We need to compensate for the text's height since its origin is bottom-right. + y = stave.getYForBottomText(this.text_line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK); + if (hasStem) { + const stem_ext = note.checkStem().getExtents(); + const spacing = stave.getSpacingBetweenLines(); + const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY; + y = Math.max(y, stem_base + spacing * (this.text_line + 2)); + } + } + else { + // (this.vertical === VerticalJustify.TOP) + const topY = Math.min(...note.getYs()); + y = Math.min(stave.getYForTopText(this.text_line), topY - 10); + if (hasStem) { + const stem_ext = note.checkStem().getExtents(); + const spacing = stave.getSpacingBetweenLines(); + y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line); + } + } + let x = start.x; + if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) { + x = start.x; + } + else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) { + x = start.x + this.getWidth(); + } + else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) { + x = start.x - this.getWidth() / 2; + } + else { + // HorizontalJustify.CENTER_STEM + x = note.getStemX() - this.getWidth() / 2; + } + L('Rendering ChordSymbol: ', this.textFormatter, x, y); + this.symbolBlocks.forEach((symbol) => { + const isSuper = ChordSymbol.isSuperscript(symbol); + const isSub = ChordSymbol.isSubscript(symbol); + let curY = y; + L('shift was ', symbol.xShift, symbol.yShift); + L('curY pre sub ', curY); + if (isSuper) { + curY += this.superscriptOffset; + } + if (isSub) { + curY += this.subscriptOffset; + } + L('curY sup/sub ', curY); + if (symbol.symbolType === SymbolTypes.TEXT) { + if (isSuper || isSub) { + ctx.save(); + if (this.textFont) { + const { family, size, weight, style } = this.textFont; + const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, ChordSymbol.superSubRatio); + ctx.setFont(family, smallerFontSize, weight, style); + } + } + // TODO??? + // We estimate the text width, fill it in with the empirical value so the formatting is even. + // const textDim = ctx.measureText(symbol.text); + // symbol.width = textDim.width; + L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift); + ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift); + if (isSuper || isSub) { + ctx.restore(); + } + } + else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) { + curY += symbol.yShift; + L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY); + symbol.glyph.render(ctx, x + symbol.xShift, curY); + } + else if (symbol.symbolType === SymbolTypes.LINE) { + L('Rendering Line : ', symbol.width, x, curY); + ctx.beginPath(); + ctx.setLineWidth(1); // ? + ctx.moveTo(x, y); + ctx.lineTo(x + symbol.width, curY); + ctx.stroke(); + } + x += symbol.width; + if (symbol.vAlign) { + x += symbol.xShift; + } + }); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +ChordSymbol.DEBUG = false; +// Chord symbols can be positioned and justified relative to the note. +ChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify; +ChordSymbol.HorizontalJustifyString = { + left: ChordSymbolHorizontalJustify.LEFT, + right: ChordSymbolHorizontalJustify.RIGHT, + center: ChordSymbolHorizontalJustify.CENTER, + centerStem: ChordSymbolHorizontalJustify.CENTER_STEM, +}; +ChordSymbol.VerticalJustify = ChordSymbolVerticalJustify; +ChordSymbol.VerticalJustifyString = { + top: ChordSymbolVerticalJustify.TOP, + above: ChordSymbolVerticalJustify.TOP, + below: ChordSymbolVerticalJustify.BOTTOM, + bottom: ChordSymbolVerticalJustify.BOTTOM, +}; +// Glyph data +ChordSymbol.glyphs = { + diminished: { + code: 'csymDiminished', + }, + dim: { + code: 'csymDiminished', + }, + halfDiminished: { + code: 'csymHalfDiminished', + }, + '+': { + code: 'csymAugmented', + }, + augmented: { + code: 'csymAugmented', + }, + majorSeventh: { + code: 'csymMajorSeventh', + }, + minor: { + code: 'csymMinor', + }, + '-': { + code: 'csymMinor', + }, + '(': { + code: 'csymParensLeftTall', + }, + leftParen: { + code: 'csymParensLeftTall', + }, + ')': { + code: 'csymParensRightTall', + }, + rightParen: { + code: 'csymParensRightTall', + }, + leftBracket: { + code: 'csymBracketLeftTall', + }, + rightBracket: { + code: 'csymBracketRightTall', + }, + leftParenTall: { + code: 'csymParensLeftVeryTall', + }, + rightParenTall: { + code: 'csymParensRightVeryTall', + }, + '/': { + code: 'csymDiagonalArrangementSlash', + }, + over: { + code: 'csymDiagonalArrangementSlash', + }, + '#': { + code: 'accidentalSharp', + }, + b: { + code: 'accidentalFlat', + }, +}; +ChordSymbol.symbolTypes = SymbolTypes; +ChordSymbol.symbolModifiers = SymbolModifiers; +/** Currently unused. */ +ChordSymbol.noFormat = false; + + + +/***/ }), + +/***/ "./src/clef.ts": +/*!*********************!*\ + !*** ./src/clef.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Clef": () => (/* binding */ Clef) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013. +// Co-author: Benjamin W. Bohl +// MIT License + + + + + +// eslint-disable-next-line +function L(...args) { + if (Clef.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.Clef', args); +} +/** + * Clef implements various types of clefs that can be rendered on a stave. + * + * See `tests/clef_tests.ts` for usage examples. + */ +class Clef extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Clef; + } + /** + * Every clef name is associated with a glyph code from the font file + * and a default stave line number. + */ + static get types() { + return { + treble: { + code: 'gClef', + line: 3, + }, + bass: { + code: 'fClef', + line: 1, + }, + alto: { + code: 'cClef', + line: 2, + }, + tenor: { + code: 'cClef', + line: 1, + }, + percussion: { + code: 'unpitchedPercussionClef1', + line: 2, + }, + soprano: { + code: 'cClef', + line: 4, + }, + 'mezzo-soprano': { + code: 'cClef', + line: 3, + }, + 'baritone-c': { + code: 'cClef', + line: 0, + }, + 'baritone-f': { + code: 'fClef', + line: 2, + }, + subbass: { + code: 'fClef', + line: 0, + }, + french: { + code: 'gClef', + line: 4, + }, + tab: { + code: '6stringTabClef', + line: 2.5, + }, + }; + } + static get annotationSmufl() { + return { + '8va': 'timeSig8', + '8vb': 'timeSig8', + }; + } + /** Create a new clef. */ + constructor(type, size, annotation) { + super(); + /** + * The attribute `clef` must be a key from + * `Clef.types` + */ + this.clef = Clef.types['treble']; + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); + this.setType(type, size, annotation); + this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`)); + L('Creating clef:', type); + } + /** Set clef type, size and annotation. */ + setType(type, size, annotation) { + this.type = type; + this.clef = Clef.types[type]; + if (size === undefined) { + this.size = 'default'; + } + else { + this.size = size; + } + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont(); + // If an annotation, such as 8va, is specified, add it to the Clef object. + if (annotation !== undefined) { + const code = Clef.annotationSmufl[annotation]; + const point = (Clef.getPoint(this.size) / 5) * 3; + const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`); + const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`); + this.annotation = { code, point, line, x_shift }; + this.attachment = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.annotation.code, this.annotation.point); + this.attachment.metrics.x_max = 0; + this.attachment.setXShift(this.annotation.x_shift); + } + else { + this.annotation = undefined; + } + return this; + } + /** Get clef width. */ + getWidth() { + if (this.type === 'tab') { + (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'ClefError', "Can't get width without stave."); + } + return this.width; + } + /** Get point for clefs. */ + static getPoint(size) { + // for sizes other than 'default', clef is 2/3 of the default value + return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 3) * 2; + } + /** Set associated stave. */ + setStave(stave) { + this.stave = stave; + return this; + } + /** Render clef. */ + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('clef', this.getAttribute('id')); + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, { + category: `clef_${this.size}`, + }); + if (this.annotation !== undefined && this.attachment !== undefined) { + this.placeGlyphOnLine(this.attachment, stave, this.annotation.line); + this.attachment.setStave(stave); + this.attachment.setContext(ctx); + this.attachment.renderToStave(this.x); + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} +/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */ +Clef.DEBUG = false; + + + +/***/ }), + +/***/ "./src/clefnote.ts": +/*!*************************!*\ + !*** ./src/clefnote.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ClefNote": () => (/* binding */ ClefNote) +/* harmony export */ }); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2014 +// MIT License + + + + +/** ClefNote implements clef annotations in measures. */ +class ClefNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.ClefNote; + } + constructor(type, size, annotation) { + super({ duration: 'b' }); + this.type = type; + const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation); + this.clef = clef.clef; + this.annotation = clef.annotation; + this.size = size === undefined ? 'default' : size; + this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`)); + // Note properties + this.ignore_ticks = true; + } + /** Set clef type, size and annotation. */ + setType(type, size, annotation) { + this.type = type; + this.size = size; + const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation); + this.clef = clef.clef; + this.annotation = clef.annotation; + this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`)); + return this; + } + /** Get associated clef. */ + getClef() { + return this.clef; + } + preFormat() { + this.preFormatted = true; + return this; + } + /** Render clef note. */ + draw() { + const stave = this.checkStave(); + const ctx = this.checkContext(); + this.setRendered(); + const abs_x = this.getAbsoluteX(); + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), this.clef.code, { + category: `clefNote_${this.size}`, + }); + // If the Vex.Flow.Clef has an annotation, such as 8va, draw it. + if (this.annotation !== undefined) { + const attachment = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.annotation.code, this.annotation.point); + attachment.setContext(ctx); + attachment.setStave(stave); + attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs()); + attachment.setXShift(this.annotation.x_shift); + attachment.renderToStave(abs_x); + } + } +} + + +/***/ }), + +/***/ "./src/crescendo.ts": +/*!**************************!*\ + !*** ./src/crescendo.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Crescendo": () => (/* binding */ Crescendo) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// This file implements the `Crescendo` object which draws crescendos and +// decrescendo dynamics markings. A `Crescendo` is initialized with a +// duration and formatted as part of a `Voice` like any other `Note` +// type in VexFlow. This object would most likely be formatted in a Voice +// with `TextNotes` - which are used to represent other dynamics markings. + + + + +// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (Crescendo.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Crescendo', args); +} +// Private helper to draw the hairpin +function renderHairpin(ctx, params) { + const begin_x = params.begin_x; + const end_x = params.end_x; + const y = params.y; + const half_height = params.height / 2; + ctx.beginPath(); + if (params.reverse) { + ctx.moveTo(begin_x, y - half_height); + ctx.lineTo(end_x, y); + ctx.lineTo(begin_x, y + half_height); + } + else { + ctx.moveTo(end_x, y - half_height); + ctx.lineTo(begin_x, y); + ctx.lineTo(end_x, y + half_height); + } + ctx.stroke(); + ctx.closePath(); +} +class Crescendo extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + /** Crescendo category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Crescendo; + } + // Initialize the crescendo's properties + constructor(noteStruct) { + super(noteStruct); + this.options = { + // Extensions to the length of the crescendo on either side + extend_left: 0, + extend_right: 0, + // Vertical shift + y_shift: 0, + }; + // Whether the object is a decrescendo + this.decrescendo = false; + // The staff line to be placed on + this.line = noteStruct.line || 0; + // The height at the open end of the cresc/decresc + this.height = 15; + } + // Set the line to center the element on + setLine(line) { + this.line = line; + return this; + } + // Set the full height at the open end + setHeight(height) { + this.height = height; + return this; + } + // Set whether the sign should be a descresendo by passing a bool + // to `decresc` + setDecrescendo(decresc) { + this.decrescendo = decresc; + return this; + } + // Preformat the note + preFormat() { + this.preFormatted = true; + return this; + } + // Render the Crescendo object onto the canvas + draw() { + const ctx = this.checkContext(); + const stave = this.checkStave(); + this.setRendered(); + const tick_context = this.getTickContext(); + const next_context = _tickcontext__WEBPACK_IMPORTED_MODULE_1__.TickContext.getNextContext(tick_context); + const begin_x = this.getAbsoluteX(); + const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth(); + const y = stave.getYForLine(this.line + -3) + 1; + L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x); + renderHairpin(ctx, { + begin_x: begin_x - this.options.extend_left, + end_x: end_x + this.options.extend_right, + y: y + this.options.y_shift, + height: this.height, + reverse: this.decrescendo, + }); + } +} +Crescendo.DEBUG = false; + + + +/***/ }), + +/***/ "./src/curve.ts": +/*!**********************!*\ + !*** ./src/curve.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Curve": () => (/* binding */ Curve), +/* harmony export */ "CurvePosition": () => (/* binding */ CurvePosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// +// This class implements curves (for slurs) + + + +var CurvePosition; +(function (CurvePosition) { + CurvePosition[CurvePosition["NEAR_HEAD"] = 1] = "NEAR_HEAD"; + CurvePosition[CurvePosition["NEAR_TOP"] = 2] = "NEAR_TOP"; +})(CurvePosition || (CurvePosition = {})); +class Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Curve; + } + static get Position() { + return CurvePosition; + } + static get PositionString() { + return { + nearHead: CurvePosition.NEAR_HEAD, + nearTop: CurvePosition.NEAR_TOP, + }; + } + // from: Start note + // to: End note + // options: + // cps: List of control points + // x_shift: pixels to shift + // y_shift: pixels to shift + constructor(from, to, options) { + super(); + this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [ + { x: 0, y: 10 }, + { x: 0, y: 10 }, + ] }, options); + this.from = from; + this.to = to; + } + setNotes(from, to) { + if (!from && !to) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.'); + } + this.from = from; + this.to = to; + return this; + } + /** + * @return {boolean} Returns true if this is a partial bar. + */ + isPartial() { + return !this.from || !this.to; + } + renderCurve(params) { + const ctx = this.checkContext(); + const x_shift = this.render_options.x_shift; + const y_shift = this.render_options.y_shift * params.direction; + const first_x = params.first_x + x_shift; + const first_y = params.first_y + y_shift; + const last_x = params.last_x - x_shift; + const last_y = params.last_y + y_shift; + const thickness = this.render_options.thickness; + const cps = this.render_options.cps; + const { x: cp0x, y: cp0y } = cps[0]; + const { x: cp1x, y: cp1y } = cps[1]; + const cp_spacing = (last_x - first_x) / (cps.length + 2); + ctx.beginPath(); + ctx.moveTo(first_x, first_y); + ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y); + ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y); + ctx.stroke(); + ctx.closePath(); + ctx.fill(); + } + draw() { + this.checkContext(); + this.setRendered(); + const first_note = this.from; + const last_note = this.to; + let first_x; + let last_x; + let first_y; + let last_y; + let stem_direction = 0; + let metric = 'baseY'; + let end_metric = 'baseY'; + function getPosition(position) { + return typeof position === 'string' ? Curve.PositionString[position] : position; + } + const position = getPosition(this.render_options.position); + const position_end = getPosition(this.render_options.position_end); + if (position === CurvePosition.NEAR_TOP) { + metric = 'topY'; + end_metric = 'topY'; + } + if (position_end === CurvePosition.NEAR_HEAD) { + end_metric = 'baseY'; + } + else if (position_end === CurvePosition.NEAR_TOP) { + end_metric = 'topY'; + } + if (first_note) { + first_x = first_note.getTieRightX(); + stem_direction = first_note.getStemDirection(); + first_y = first_note.getStemExtents()[metric]; + } + else { + const stave = last_note.checkStave(); + first_x = stave.getTieStartX(); + first_y = last_note.getStemExtents()[metric]; + } + if (last_note) { + last_x = last_note.getTieLeftX(); + stem_direction = last_note.getStemDirection(); + last_y = last_note.getStemExtents()[end_metric]; + } + else { + const stave = first_note.checkStave(); + last_x = stave.getTieEndX(); + last_y = first_note.getStemExtents()[end_metric]; + } + this.renderCurve({ + first_x, + last_x, + first_y, + last_y, + direction: stem_direction * (this.render_options.invert === true ? -1 : 1), + }); + return true; + } +} + + +/***/ }), + +/***/ "./src/dot.ts": +/*!********************!*\ + !*** ./src/dot.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Dot": () => (/* binding */ Dot) +/* harmony export */ }); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// +// This class implements dot modifiers for notes. + + + +class Dot extends _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Dot; + } + /** Returns the dots associated to a Note. */ + static getDots(note) { + return note.getModifiersByType(Dot.CATEGORY); + } + /** Add a dot on the specified keys to the notes. */ + static buildAndAttach(notes, options) { + for (const note of notes) { + if (options === null || options === void 0 ? void 0 : options.all) { + for (let i = 0; i < note.keys.length; i++) { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, i); + } + } + else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index); + } + else { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, 0); + } + } + } + // Arrange dots inside a ModifierContext. + static format(dots, state) { + const right_shift = state.right_shift; + const dot_spacing = 1; + if (!dots || dots.length === 0) + return false; + const dot_list = []; + const max_shift_map = {}; + for (let i = 0; i < dots.length; ++i) { + const dot = dots[i]; + const note = dot.getNote(); + let props; + let shift; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isStaveNote)(note)) { + const index = dot.checkIndex(); + props = note.getKeyProps()[index]; + // consider right displaced head with no previous modifier + shift = note.getFirstDotPx(); + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) { + props = { line: 0.5 }; // Shim key props for dot placement + shift = right_shift; + } + else { + // note object is not StaveNote or TabNote. + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('Internal', 'Unexpected instance.'); + } + const note_id = note.getAttribute('id'); + dot_list.push({ line: props.line, note, note_id, dot }); + max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift); + } + // Sort dots by line number. + dot_list.sort((a, b) => b.line - a.line); + let dot_shift = right_shift; + let x_width = 0; + let last_line = null; + let last_note = null; + let prev_dotted_space = null; + let half_shiftY = 0; + for (let i = 0; i < dot_list.length; ++i) { + const { dot, note, note_id, line } = dot_list[i]; + // Reset the position of the dot every line. + if (line !== last_line || note !== last_note) { + dot_shift = max_shift_map[note_id]; + } + if (!note.isRest() && line !== last_line) { + if (Math.abs(line % 1) === 0.5) { + // note is on a space, so no dot shift + half_shiftY = 0; + } + else { + // note is on a line, so shift dot to space above the line + half_shiftY = 0.5; + if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) { + // previous note on a space, so shift dot to space below the line + half_shiftY = -0.5; + } + else if (line + half_shiftY === prev_dotted_space) { + // previous space is dotted, so shift dot to space below the line + half_shiftY = -0.5; + } + } + } + // convert half_shiftY to a multiplier for dots.draw() + if (note.isRest()) { + dot.dot_shiftY += -half_shiftY; + } + else { + dot.dot_shiftY = -half_shiftY; + } + prev_dotted_space = line + half_shiftY; + dot.setXShift(dot_shift); + dot_shift += dot.getWidth() + dot_spacing; // spacing + x_width = dot_shift > x_width ? dot_shift : x_width; + last_line = line; + last_note = note; + } + // Update state. + state.right_shift += x_width; + return true; + } + constructor() { + super(); + this.position = _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier.Position.RIGHT; + this.radius = 2; + this.setWidth(5); + this.dot_shiftY = 0; + } + setNote(note) { + this.note = note; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isGraceNote)(note)) { + this.radius *= 0.5; + this.setWidth(3); + } + return this; + } + setDotShiftY(y) { + this.dot_shiftY = y; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stave = note.checkStave(); + const lineSpace = stave.getSpacingBetweenLines(); + const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); + // Set the starting y coordinate to the base of the stem for TabNotes. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) { + start.y = note.getStemExtents().baseY; + } + const x = start.x + this.x_shift + this.width - this.radius; + const y = start.y + this.y_shift + this.dot_shiftY * lineSpace; + ctx.beginPath(); + ctx.arc(x, y, this.radius, 0, Math.PI * 2, false); + ctx.fill(); + } +} + + +/***/ }), + +/***/ "./src/easyscore.ts": +/*!**************************!*\ + !*** ./src/easyscore.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Builder": () => (/* binding */ Builder), +/* harmony export */ "EasyScore": () => (/* binding */ EasyScore), +/* harmony export */ "EasyScoreGrammar": () => (/* binding */ EasyScoreGrammar), +/* harmony export */ "Piece": () => (/* binding */ Piece) +/* harmony export */ }); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (EasyScore.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.EasyScore', args); +} +class EasyScoreGrammar { + constructor(builder) { + this.builder = builder; + } + begin() { + return this.LINE; + } + LINE() { + return { + expect: [this.PIECE, this.PIECES, this.EOL], + }; + } + PIECE() { + return { + expect: [this.CHORDORNOTE, this.PARAMS], + run: () => this.builder.commitPiece(), + }; + } + PIECES() { + return { + expect: [this.COMMA, this.PIECE], + zeroOrMore: true, + }; + } + PARAMS() { + return { + expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS], + }; + } + CHORDORNOTE() { + return { + expect: [this.CHORD, this.SINGLENOTE], + or: true, + }; + } + CHORD() { + return { + expect: [this.LPAREN, this.NOTES, this.RPAREN], + // eslint-disable-next-line + run: (state) => this.builder.addChord(state.matches[1]), + }; + } + NOTES() { + return { + expect: [this.NOTE], + oneOrMore: true, + }; + } + NOTE() { + return { + expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], + }; + } + SINGLENOTE() { + return { + expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], + run: (state) => { + // eslint-disable-next-line + const s = state; + this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]); + }, + }; + } + ACCIDENTAL() { + return { + expect: [this.MICROTONES, this.ACCIDENTALS], + maybe: true, + or: true, + }; + } + DOTS() { + return { + expect: [this.DOT], + zeroOrMore: true, + // eslint-disable-next-line + run: (state) => this.builder.setNoteDots(state.matches), + }; + } + TYPE() { + return { + expect: [this.SLASH, this.MAYBESLASH, this.TYPES], + maybe: true, + // eslint-disable-next-line + run: (state) => this.builder.setNoteType(state.matches[2]), + }; + } + DURATION() { + return { + expect: [this.SLASH, this.DURATIONS], + maybe: true, + // eslint-disable-next-line + run: (state) => this.builder.setNoteDuration(state.matches[1]), + }; + } + OPTS() { + return { + expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET], + maybe: true, + }; + } + KEYVALS() { + return { + expect: [this.COMMA, this.KEYVAL], + zeroOrMore: true, + }; + } + KEYVAL() { + const unquote = (str) => str.slice(1, -1); + return { + expect: [this.KEY, this.EQUALS, this.VAL], + // eslint-disable-next-line + run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])), + }; + } + VAL() { + return { + expect: [this.SVAL, this.DVAL], + or: true, + }; + } + KEY() { + return { token: '[a-zA-Z][a-zA-Z0-9]*' }; + } + DVAL() { + return { token: '["][^"]*["]' }; + } + SVAL() { + return { token: "['][^']*[']" }; + } + NOTENAME() { + return { token: '[a-gA-G]' }; + } + OCTAVE() { + return { token: '[0-9]+' }; + } + ACCIDENTALS() { + return { token: 'bb|b|##|#|n' }; + } + MICROTONES() { + return { token: 'bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o' }; + } + DURATIONS() { + return { token: '[0-9whq]+' }; + } + TYPES() { + return { token: '[rRsSmMhHgG]' }; + } + LPAREN() { + return { token: '[(]' }; + } + RPAREN() { + return { token: '[)]' }; + } + COMMA() { + return { token: '[,]' }; + } + DOT() { + return { token: '[.]' }; + } + SLASH() { + return { token: '[/]' }; + } + MAYBESLASH() { + return { token: '[/]?' }; + } + EQUALS() { + return { token: '[=]' }; + } + LBRACKET() { + return { token: '\\[' }; + } + RBRACKET() { + return { token: '\\]' }; + } + EOL() { + return { token: '$' }; + } +} +class Piece { + constructor(duration) { + this.chord = []; + this.dots = 0; + this.options = {}; + this.duration = duration; + } +} +class Builder { + constructor(factory) { + this.commitHooks = []; + this.factory = factory; + this.reset(); + } + reset(options) { + this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options); + this.elements = { notes: [], accidentals: [] }; + this.rollingDuration = '8'; + this.resetPiece(); + } + getFactory() { + return this.factory; + } + getElements() { + return this.elements; + } + addCommitHook(commitHook) { + this.commitHooks.push(commitHook); + } + resetPiece() { + L('resetPiece'); + this.piece = new Piece(this.rollingDuration); + } + setNoteDots(dots) { + L('setNoteDots:', dots); + if (dots) + this.piece.dots = dots.length; + } + setNoteDuration(duration) { + L('setNoteDuration:', duration); + this.rollingDuration = this.piece.duration = duration || this.rollingDuration; + } + setNoteType(type) { + L('setNoteType:', type); + if (type) + this.piece.type = type; + } + addNoteOption(key, value) { + L('addNoteOption: key:', key, 'value:', value); + this.piece.options[key] = value; + } + addNote(key, accid, octave) { + L('addNote:', key, accid, octave); + this.piece.chord.push({ + key: key, + accid, + octave, + }); + } + addSingleNote(key, accid, octave) { + L('addSingleNote:', key, accid, octave); + this.addNote(key, accid, octave); + } + // notes is an array with 3 entries + addChord(notes) { + L('startChord'); + if (typeof notes[0] !== 'object') { + this.addSingleNote(notes[0]); + } + else { + notes.forEach((n) => { + if (n) + this.addNote(...n); // n => [string, string | null, string] + }); + } + L('endChord'); + } + commitPiece() { + L('commitPiece'); + const { factory } = this; + if (!factory) + return; + const options = Object.assign(Object.assign({}, this.options), this.piece.options); + // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed. + // e.g., auto | up | down + const stem = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase(); + // e.g., treble | bass + const clef = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase(); + const { chord, duration, dots, type } = this.piece; + // Create a string[] that will be assigned to the .keys property of the StaveNote. + // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave} + // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included. + const standardAccidentals = _music__WEBPACK_IMPORTED_MODULE_3__.Music.accidentals; + const keys = chord.map((notePiece) => { + var _a; + return notePiece.key + + (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') + + '/' + + notePiece.octave; + }); + const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase. + // Build a GhostNote or StaveNote using the information we gathered. + const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g' + ? factory.GhostNote({ duration, dots }) + : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem }); + if (!auto_stem) + note.setStemDirection(stem === 'up' ? _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.DOWN); + // Attach accidentals. + const accidentals = []; + chord.forEach((notePiece, index) => { + const accid = notePiece.accid; + if (typeof accid === 'string') { + const accidental = factory.Accidental({ type: accid }); + note.addModifier(accidental, index); + accidentals.push(accidental); + } + else { + accidentals.push(undefined); + } + }); + // Attach dots. + for (let i = 0; i < dots; i++) + _dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([note], { all: true }); + this.commitHooks.forEach((commitHook) => commitHook(options, note, this)); + this.elements.notes.push(note); + this.elements.accidentals.push(accidentals); + this.resetPiece(); + } +} +/** + * Commit hook used by EasyScore.setOptions(). + */ +function setId(options, note) { + if (options.id === undefined) + return; + note.setAttribute('id', options.id); +} +// Used by setClass() below. +const commaSeparatedRegex = /\s*,\s*/; +/** + * Commit hook used by EasyScore.setOptions(). + */ +function setClass(options, note) { + if (options.class === undefined) + return; + options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className)); +} +/** + * EasyScore implements a parser for a simple language to generate VexFlow objects. + */ +class EasyScore { + constructor(options = {}) { + this.defaults = { + clef: 'treble', + time: '4/4', + stem: 'auto', + }; + this.setOptions(options); + } + /** + * Set the score defaults. + * clef must be set appropriately to avoid errors when adding Staves. + * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types} + * @param defaults.time default time signature ( 4/4 | 9/8 ...) + * @param defaults.stem default stem arrangement (auto | up | down) + * @returns this + */ + set(defaults) { + this.defaults = Object.assign(Object.assign({}, this.defaults), defaults); + return this; + } + /** + * @param options.factory is required. + * @returns this + */ + setOptions(options) { + var _a, _b; + // eslint-disable-next-line + const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore(). + const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory); + this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, _articulation__WEBPACK_IMPORTED_MODULE_0__.Articulation.easyScoreHook, _frethandfinger__WEBPACK_IMPORTED_MODULE_2__.FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory, + builder }); + this.factory = factory; + this.builder = builder; + this.grammar = new EasyScoreGrammar(this.builder); + this.parser = new _parser__WEBPACK_IMPORTED_MODULE_4__.Parser(this.grammar); + (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook)); + return this; + } + setContext(context) { + this.factory.setContext(context); + return this; + } + parse(line, options = {}) { + this.builder.reset(options); + const result = this.parser.parse(line); + if (!result.success && this.options.throwOnError) { + L(result); + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('Error parsing line: ' + line); + } + return result; + } + beam(notes, options) { + this.factory.Beam({ notes, options }); + return notes; + } + tuplet(notes, options) { + this.factory.Tuplet({ notes, options }); + return notes; + } + notes(line, options = {}) { + options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options); + this.parse(line, options); + return this.builder.getElements().notes; + } + voice(notes, options = {}) { + options = Object.assign({ time: this.defaults.time }, options); + return this.factory.Voice(options).addTickables(notes); + } + addCommitHook(commitHook) { + this.builder.addCommitHook(commitHook); + } +} +EasyScore.DEBUG = false; + + + +/***/ }), + +/***/ "./src/element.ts": +/*!************************!*\ + !*** ./src/element.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Element": () => (/* binding */ Element) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Mohit Cheppudira +// MIT License + + + + +/** + * Element implements a generic base class for VexFlow, with implementations + * of general functions and properties that can be inherited by all VexFlow elements. + * + * The Element is an abstract class that needs to be subclassed to work. It handles + * style and text-font properties for the Element and any child elements, along with + * working with the Registry to create unique ids, but does not have any tools for + * formatting x or y positions or connections to a Stave. + */ +class Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Element; + } + static newID() { + return `auto${Element.ID++}`; + } + constructor() { + var _a; + // all Element objects keep a list of children that they are responsible and which + // inherit the style of their parents. + this.children = []; + this.attrs = { + id: Element.newID(), + type: this.getCategory(), + class: '', + }; + this.rendered = false; + // If a default registry exist, then register with it right away. + (_a = _registry__WEBPACK_IMPORTED_MODULE_1__.Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this); + } + /** + * Adds a child Element to the Element, which lets it inherit the + * same style as the parent when setGroupStyle() is called. + * + * Examples of children are noteheads and stems. Modifiers such + * as Accidentals are generally not set as children. + * + * Note that StaveNote calls setGroupStyle() when setStyle() is called. + */ + addChildElement(child) { + this.children.push(child); + return this; + } + getCategory() { + return this.constructor.CATEGORY; + } + /** + * Set the element style used to render. + * + * Example: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.draw(); + * ``` + * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave), + * the style can be applied to all of them by means of the context: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.getContext().setFillStyle('red'); + * element.getContext().setStrokeStyle('red'); + * element.draw(); + * ``` + * or using drawWithStyle: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.drawWithStyle(); + * ``` + */ + setStyle(style) { + this.style = style; + return this; + } + /** Set the element & associated children style used for rendering. */ + setGroupStyle(style) { + this.style = style; + this.children.forEach((child) => child.setGroupStyle(style)); + return this; + } + /** Get the element style used for rendering. */ + getStyle() { + return this.style; + } + /** Apply the element style to `context`. */ + applyStyle(context = this.context, style = this.getStyle()) { + if (!style) + return this; + if (!context) + return this; + context.save(); + if (style.shadowColor) + context.setShadowColor(style.shadowColor); + if (style.shadowBlur) + context.setShadowBlur(style.shadowBlur); + if (style.fillStyle) + context.setFillStyle(style.fillStyle); + if (style.strokeStyle) + context.setStrokeStyle(style.strokeStyle); + if (style.lineWidth) + context.setLineWidth(style.lineWidth); + return this; + } + /** Restore the style of `context`. */ + restoreStyle(context = this.context, style = this.getStyle()) { + if (!style) + return this; + if (!context) + return this; + context.restore(); + return this; + } + /** + * Draw the element and all its sub-elements (ie.: Modifiers in a Stave) + * with the element's style (see `getStyle()` and `setStyle()`) + */ + drawWithStyle() { + this.checkContext(); + this.applyStyle(); + this.draw(); + this.restoreStyle(); + } + /** Check if it has a class label (An element can have multiple class labels). */ + hasClass(className) { + var _a; + if (!this.attrs.class) + return false; + return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1; + } + /** Add a class label (An element can have multiple class labels). */ + addClass(className) { + var _a; + if (this.hasClass(className)) + return this; + if (!this.attrs.class) + this.attrs.class = `${className}`; + else + this.attrs.class = `${this.attrs.class} ${className}`; + (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ + id: this.attrs.id, + name: 'class', + value: className, + oldValue: undefined, + }); + return this; + } + /** Remove a class label (An element can have multiple class labels). */ + removeClass(className) { + var _a, _b; + if (!this.hasClass(className)) + return this; + const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' '); + if (arr) { + arr.splice(arr.indexOf(className)); + this.attrs.class = arr.join(' '); + } + (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({ + id: this.attrs.id, + name: 'class', + value: undefined, + oldValue: className, + }); + return this; + } + /** Call back from registry after the element is registered. */ + onRegister(registry) { + this.registry = registry; + return this; + } + /** Return the rendered status. */ + isRendered() { + return this.rendered; + } + /** Set the rendered status. */ + setRendered(rendered = true) { + this.rendered = rendered; + return this; + } + /** Return the element attributes. */ + getAttributes() { + return this.attrs; + } + /** Return an attribute, such as 'id', 'type' or 'class'. */ + // eslint-disable-next-line + getAttribute(name) { + return this.attrs[name]; + } + /** Return associated SVGElement. */ + getSVGElement(suffix = '') { + const id = (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(this.attrs.id + suffix); + const element = document.getElementById(id); + if (element) + return element; + } + /** Set an attribute such as 'id', 'class', or 'type'. */ + setAttribute(name, value) { + var _a; + const oldID = this.attrs.id; + const oldValue = this.attrs[name]; + this.attrs[name] = value; + // Register with old id to support id changes. + (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue }); + return this; + } + /** Get the boundingBox. */ + getBoundingBox() { + return this.boundingBox; + } + /** Return the context, such as an SVGContext or CanvasContext object. */ + getContext() { + return this.context; + } + /** Set the context to an SVGContext or CanvasContext object */ + setContext(context) { + this.context = context; + return this; + } + /** Validate and return the rendering context. */ + checkContext() { + return (0,_util__WEBPACK_IMPORTED_MODULE_3__.defined)(this.context, 'NoContext', 'No rendering context attached to instance.'); + } + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Font Handling + /** + * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied + * to text (not glyphs). + */ + set font(f) { + this.setFont(f); + } + /** Returns the CSS compatible font string for the text font. */ + get font() { + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont); + } + /** + * Set the element's text font family, size, weight, style + * (e.g., `Arial`, `10pt`, `bold`, `italic`). + * + * This attribute does not determine the font used for musical Glyphs like treble clefs. + * + * @param font is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + * If no arguments are provided, then the font is set to the default font. + * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property. + */ + setFont(font, size, weight, style) { + // Allow subclasses to override `TEXT_FONT`. + const defaultTextFont = this.constructor.TEXT_FONT; + const fontIsObject = typeof font === 'object'; + const fontIsString = typeof font === 'string'; + const fontIsUndefined = font === undefined; + const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined; + if (fontIsObject) { + // `font` is case 1) a FontInfo object + this.textFont = Object.assign(Object.assign({}, defaultTextFont), font); + } + else if (fontIsString && sizeWeightStyleAreUndefined) { + // `font` is case 2) CSS font shorthand. + this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.fromCSSString(font); + } + else if (fontIsUndefined && sizeWeightStyleAreUndefined) { + // All arguments are undefined. Do not check for `arguments.length === 0`, + // which fails on the edge case: `setFont(undefined)`. + // TODO: See if we can remove this case entirely without introducing a visual diff. + // The else case below seems like it should be equivalent to this case. + this.textFont = Object.assign({}, defaultTextFont); + } + else { + // `font` is case 3) a font family string (e.g., 'Times New Roman'). + // The other parameters represent the size, weight, and style. + // It is okay for `font` to be undefined while one or more of the other arguments is provided. + // Following CSS conventions, unspecified params are reset to the default. + this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style); + } + return this; + } + /** + * Get the css string describing this Element's text font. e.g., + * 'bold 10pt Arial'. + */ + getFont() { + if (!this.textFont) { + this.resetFont(); + } + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont); + } + /** + * Reset the text font to the style indicated by the static `TEXT_FONT` property. + * Subclasses can call this to initialize `textFont` for the first time. + */ + resetFont() { + this.setFont(); + } + /** Return a copy of the current FontInfo object. */ + get fontInfo() { + if (!this.textFont) { + this.resetFont(); + } + // We can cast to Required here, because + // we just called resetFont() above to ensure this.textFont is set. + return Object.assign({}, this.textFont); + } + set fontInfo(fontInfo) { + this.setFont(fontInfo); + } + /** Change the font size, while keeping everything else the same. */ + setFontSize(size) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style); + return this; + } + /** + * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). + * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes. + */ + getFontSize() { + return this.fontSize; + } + /** + * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property. + * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt'). + */ + set fontSize(size) { + this.setFontSize(size); + } + /** + * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). + */ + get fontSize() { + let size = this.fontInfo.size; + if (typeof size === 'number') { + size = `${size}pt`; + } + return size; + } + /** + * @returns the font size in `pt`. + */ + get fontSizeInPoints() { + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(this.fontSize); + } + /** + * @returns the font size in `px`. + */ + get fontSizeInPixels() { + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(this.fontSize); + } + /** + * @returns a CSS font-style string (e.g., 'italic'). + */ + get fontStyle() { + return this.fontInfo.style; + } + set fontStyle(style) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style); + } + /** + * @returns a CSS font-weight string (e.g., 'bold'). + * As in CSS, font-weight is always returned as a string, even if it was set as a number. + */ + get fontWeight() { + return this.fontInfo.weight + ''; + } + set fontWeight(weight) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style); + } +} +Element.ID = 1000; +/** + * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)` + * to customize the font for musical symbols placed on the score. + */ +Element.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/factory.ts": +/*!************************!*\ + !*** ./src/factory.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Factory": () => (/* binding */ Factory) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Mohit Cheppudira +// MIT License + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Factory.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_39__.log)('Vex.Flow.Factory', args); +} +/** + * Factory implements a high level API around VexFlow. + */ +class Factory { + /** + * Static simplified function to access constructor without providing FactoryOptions + * + * Example: + * + * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 + * + * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );` + */ + static newFromElementId(elementId, width = 500, height = 200) { + return new Factory({ renderer: { elementId, width, height } }); + } + /** + * Example: + * + * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 + * + * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});` + */ + constructor(options = {}) { + L('New factory: ', options); + this.options = { + stave: { + space: 10, + }, + renderer: { + elementId: '', + width: 500, + height: 200, + background: '#FFF', + }, + font: Factory.TEXT_FONT, + }; + this.setOptions(options); + } + reset() { + this.renderQ = []; + this.systems = []; + this.staves = []; + this.voices = []; + this.stave = undefined; // current stave + } + setOptions(options) { + this.options = Object.assign(Object.assign({}, this.options), options); + this.initRenderer(); + this.reset(); + } + initRenderer() { + const { elementId, width, height, background } = this.options.renderer; + if (elementId == null) { + return; + } + if (elementId == '') { + L(this); + throw new _util__WEBPACK_IMPORTED_MODULE_39__.RuntimeError('renderer.elementId not set in FactoryOptions'); + } + let backend = this.options.renderer.backend; + if (backend === undefined) { + const elem = document.getElementById(elementId); + // We use a custom type check here, because node-canvas mimics canvas, + // but is not an instance of window.HTMLCanvasElement. + // In fact, `window` might be undefined here. + // See: https://www.npmjs.com/package/canvas + if ((0,_web__WEBPACK_IMPORTED_MODULE_42__.isHTMLCanvas)(elem)) { + backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.CANVAS; + } + else { + backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.SVG; + } + } + this.context = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.buildContext(elementId, backend, width, height, background); + } + getContext() { + return this.context; + } + setContext(context) { + this.context = context; + return this; + } + getStave() { + return this.stave; + } + getVoices() { + return this.voices; + } + /** Return pixels from current stave spacing. */ + Stave(params) { + const staveSpace = this.options.stave.space; + const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params); + const stave = new _stave__WEBPACK_IMPORTED_MODULE_24__.Stave(p.x, p.y, p.width, p.options); + this.staves.push(stave); + stave.setContext(this.context); + this.stave = stave; + return stave; + } + TabStave(params) { + const staveSpace = this.options.stave.space; + const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params); + const stave = new _tabstave__WEBPACK_IMPORTED_MODULE_32__.TabStave(p.x, p.y, p.width, p.options); + this.staves.push(stave); + stave.setContext(this.context); + this.stave = stave; + return stave; + } + StaveNote(noteStruct) { + const note = new _stavenote__WEBPACK_IMPORTED_MODULE_27__.StaveNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GlyphNote(glyph, noteStruct, options) { + const note = new _glyphnote__WEBPACK_IMPORTED_MODULE_13__.GlyphNote(glyph, noteStruct, options); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + RepeatNote(type, noteStruct, options) { + const note = new _repeatnote__WEBPACK_IMPORTED_MODULE_23__.RepeatNote(type, noteStruct, options); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GhostNote(noteStruct) { + const ghostNote = new _ghostnote__WEBPACK_IMPORTED_MODULE_12__.GhostNote(noteStruct); + if (this.stave) + ghostNote.setStave(this.stave); + ghostNote.setContext(this.context); + this.renderQ.push(ghostNote); + return ghostNote; + } + TextNote(noteStruct) { + const textNote = new _textnote__WEBPACK_IMPORTED_MODULE_35__.TextNote(noteStruct); + if (this.stave) + textNote.setStave(this.stave); + textNote.setContext(this.context); + this.renderQ.push(textNote); + return textNote; + } + BarNote(params = {}) { + const barNote = new _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote(params.type); + if (this.stave) + barNote.setStave(this.stave); + barNote.setContext(this.context); + this.renderQ.push(barNote); + return barNote; + } + ClefNote(params) { + const p = Object.assign({ type: 'treble', options: { + size: 'default', + annotation: undefined, + } }, params); + const clefNote = new _clefnote__WEBPACK_IMPORTED_MODULE_6__.ClefNote(p.type, p.options.size, p.options.annotation); + if (this.stave) + clefNote.setStave(this.stave); + clefNote.setContext(this.context); + this.renderQ.push(clefNote); + return clefNote; + } + TimeSigNote(params) { + const p = Object.assign({ time: '4/4' }, params); + const timeSigNote = new _timesignote__WEBPACK_IMPORTED_MODULE_37__.TimeSigNote(p.time); + if (this.stave) + timeSigNote.setStave(this.stave); + timeSigNote.setContext(this.context); + this.renderQ.push(timeSigNote); + return timeSigNote; + } + KeySigNote(params) { + const keySigNote = new _keysignote__WEBPACK_IMPORTED_MODULE_16__.KeySigNote(params.key, params.cancelKey, params.alterKey); + if (this.stave) + keySigNote.setStave(this.stave); + keySigNote.setContext(this.context); + this.renderQ.push(keySigNote); + return keySigNote; + } + TabNote(noteStruct) { + const note = new _tabnote__WEBPACK_IMPORTED_MODULE_31__.TabNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GraceNote(noteStruct) { + const note = new _gracenote__WEBPACK_IMPORTED_MODULE_14__.GraceNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + return note; + } + GraceNoteGroup(params) { + const group = new _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__.GraceNoteGroup(params.notes, params.slur); + group.setContext(this.context); + return group; + } + Accidental(params) { + const accid = new _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental(params.type); + accid.setContext(this.context); + return accid; + } + Annotation(params) { + const p = Object.assign({ text: 'p', hJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify.CENTER, vJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM }, params); + const annotation = new _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(p.text); + annotation.setJustification(p.hJustify); + annotation.setVerticalJustification(p.vJustify); + annotation.setFont(p.font); + annotation.setContext(this.context); + return annotation; + } + ChordSymbol(params) { + const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params); + const chordSymbol = new _chordsymbol__WEBPACK_IMPORTED_MODULE_5__.ChordSymbol(); + chordSymbol.setHorizontal(p.hJustify); + chordSymbol.setVertical(p.vJustify); + chordSymbol.setEnableKerning(p.kerning); + chordSymbol.setReportWidth(p.reportWidth); + // There is a default font based on the engraving font. Only set then + // font if it is specific, else use the default + if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') { + if (typeof p.fontWeight === 'string') + chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight); + else + chordSymbol.setFont(p.fontFamily, p.fontSize, ''); + } + else if (typeof p.fontSize === 'number') { + chordSymbol.setFontSize(p.fontSize); + } + chordSymbol.setContext(this.context); + return chordSymbol; + } + Articulation(params) { + var _a; + const articulation = new _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.'); + if ((params === null || params === void 0 ? void 0 : params.position) != undefined) + articulation.setPosition(params.position); + if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined) + articulation.setBetweenLines(params.betweenLines); + articulation.setContext(this.context); + return articulation; + } + Ornament(type, params) { + const options = Object.assign({ type, position: 0, accidental: '' }, params); + const ornament = new _ornament__WEBPACK_IMPORTED_MODULE_20__.Ornament(type); + ornament.setPosition(options.position); + if (options.upperAccidental) { + ornament.setUpperAccidental(options.upperAccidental); + } + if (options.lowerAccidental) { + ornament.setLowerAccidental(options.lowerAccidental); + } + if (typeof options.delayed !== 'undefined') { + ornament.setDelayed(options.delayed); + } + ornament.setContext(this.context); + return ornament; + } + TextDynamics(params) { + const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params); + const text = new _textdynamics__WEBPACK_IMPORTED_MODULE_34__.TextDynamics({ + text: p.text, + line: p.line, + duration: p.duration, + dots: p.dots, + }); + if (this.stave) + text.setStave(this.stave); + text.setContext(this.context); + this.renderQ.push(text); + return text; + } + Fingering(params) { + const p = Object.assign({ number: '0', position: 'left' }, params); + const fingering = new _frethandfinger__WEBPACK_IMPORTED_MODULE_11__.FretHandFinger(p.number); + fingering.setPosition(p.position); + fingering.setContext(this.context); + return fingering; + } + StringNumber(params, drawCircle = true) { + const stringNumber = new _stringnumber__WEBPACK_IMPORTED_MODULE_29__.StringNumber(params.number); + stringNumber.setPosition(params.position); + stringNumber.setContext(this.context); + stringNumber.setDrawCircle(drawCircle); + return stringNumber; + } + TickContext() { + return new _tickcontext__WEBPACK_IMPORTED_MODULE_36__.TickContext(); + } + ModifierContext() { + return new _modifiercontext__WEBPACK_IMPORTED_MODULE_17__.ModifierContext(); + } + MultiMeasureRest(params) { + const numMeasures = (0,_util__WEBPACK_IMPORTED_MODULE_39__.defined)(params.number_of_measures, 'NoNumberOfMeasures'); + const multiMeasureRest = new _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__.MultiMeasureRest(numMeasures, params); + multiMeasureRest.setContext(this.context); + this.renderQ.push(multiMeasureRest); + return multiMeasureRest; + } + Voice(params) { + const p = Object.assign({ time: '4/4' }, params); + const voice = new _voice__WEBPACK_IMPORTED_MODULE_41__.Voice(p.time); + this.voices.push(voice); + return voice; + } + StaveConnector(params) { + const connector = new _staveconnector__WEBPACK_IMPORTED_MODULE_25__.StaveConnector(params.top_stave, params.bottom_stave); + connector.setType(params.type).setContext(this.context); + this.renderQ.push(connector); + return connector; + } + Formatter(options) { + return new _formatter__WEBPACK_IMPORTED_MODULE_10__.Formatter(options); + } + Tuplet(params) { + const p = Object.assign({ notes: [], options: {} }, params); + const tuplet = new _tuplet__WEBPACK_IMPORTED_MODULE_38__.Tuplet(p.notes, p.options).setContext(this.context); + this.renderQ.push(tuplet); + return tuplet; + } + Beam(params) { + var _a, _b, _c, _d, _e; + const beam = new _beam__WEBPACK_IMPORTED_MODULE_4__.Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context); + beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []); + if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) { + Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => { + beam.setPartialBeamSideAt(Number(noteIndex), direction); + }); + } + this.renderQ.push(beam); + return beam; + } + Curve(params) { + const curve = new _curve__WEBPACK_IMPORTED_MODULE_7__.Curve(params.from, params.to, params.options).setContext(this.context); + this.renderQ.push(curve); + return curve; + } + StaveTie(params) { + var _a; + const tie = new _stavetie__WEBPACK_IMPORTED_MODULE_28__.StaveTie({ + first_note: params.from, + last_note: params.to, + first_indices: params.first_indices, + last_indices: params.last_indices, + }, params.text); + if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction) + tie.setDirection(params.options.direction); + tie.setContext(this.context); + this.renderQ.push(tie); + return tie; + } + StaveLine(params) { + var _a, _b; + const line = new _staveline__WEBPACK_IMPORTED_MODULE_26__.StaveLine({ + first_note: params.from, + last_note: params.to, + first_indices: params.first_indices, + last_indices: params.last_indices, + }); + if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text) + line.setText(params.options.text); + if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font) + line.setFont(params.options.font); + line.setContext(this.context); + this.renderQ.push(line); + return line; + } + VibratoBracket(params) { + const vibratoBracket = new _vibratobracket__WEBPACK_IMPORTED_MODULE_40__.VibratoBracket({ + start: params.from, + stop: params.to, + }); + if (params.options.line) + vibratoBracket.setLine(params.options.line); + if (params.options.harsh) + vibratoBracket.setHarsh(params.options.harsh); + vibratoBracket.setContext(this.context); + this.renderQ.push(vibratoBracket); + return vibratoBracket; + } + TextBracket(params) { + const textBracket = new _textbracket__WEBPACK_IMPORTED_MODULE_33__.TextBracket({ + start: params.from, + stop: params.to, + text: params.text, + superscript: params.options.superscript, + position: params.options.position, + }); + if (params.options.line) + textBracket.setLine(params.options.line); + if (params.options.font) + textBracket.setFont(params.options.font); + textBracket.setContext(this.context); + this.renderQ.push(textBracket); + return textBracket; + } + System(params = {}) { + params.factory = this; + const system = new _system__WEBPACK_IMPORTED_MODULE_30__.System(params).setContext(this.context); + this.systems.push(system); + return system; + } + /** + * Creates EasyScore. Normally the first step after constructing a Factory. For example: + * ``` + * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }}); + * const score: EasyScore = vf.EasyScore(); + * ``` + * @param options.factory optional instance of Factory + * @param options.builder instance of Builder + * @param options.commitHooks function to call after a note element is created + * @param options.throwOnError throw error in case of parsing error + */ + EasyScore(options = {}) { + options.factory = this; + return new _easyscore__WEBPACK_IMPORTED_MODULE_8__.EasyScore(options); + } + PedalMarking(params) { + const p = Object.assign({ notes: [], options: { + style: 'mixed', + } }, params); + const pedal = new _pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking(p.notes); + pedal.setType(_pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking.typeString[p.options.style]); + pedal.setContext(this.context); + this.renderQ.push(pedal); + return pedal; + } + NoteSubGroup(params) { + const p = Object.assign({ notes: [] }, params); + const group = new _notesubgroup__WEBPACK_IMPORTED_MODULE_19__.NoteSubGroup(p.notes); + group.setContext(this.context); + return group; + } + /** Render the score. */ + draw() { + const ctx = this.context; + this.systems.forEach((s) => s.setContext(ctx).format()); + this.staves.forEach((s) => s.setContext(ctx).draw()); + this.voices.forEach((v) => v.setContext(ctx).draw()); + this.renderQ.forEach((e) => { + if (!e.isRendered()) + e.setContext(ctx).draw(); + }); + this.systems.forEach((s) => s.setContext(ctx).draw()); + this.reset(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */ +Factory.DEBUG = false; +/** Default text font. */ +Factory.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_9__.Element.TEXT_FONT); + + + +/***/ }), + +/***/ "./src/flow.ts": +/*!*********************!*\ + !*** ./src/flow.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Flow": () => (/* binding */ Flow) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ "./src/factory.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); +/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.ts"); +/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./tuning */ "./src/tuning.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./version */ "./src/version.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +class Flow { + static get BUILD() { + return { + /** version number. */ + VERSION: _version__WEBPACK_IMPORTED_MODULE_78__.VERSION, + /** git commit ID that this library was built from. */ + ID: _version__WEBPACK_IMPORTED_MODULE_78__.ID, + /** The date when this library was compiled. */ + DATE: _version__WEBPACK_IMPORTED_MODULE_78__.DATE, + }; + } + /** + * Examples: + * ``` + * Vex.Flow.setMusicFont('Petaluma'); + * Vex.Flow.setMusicFont('Bravura', 'Gonville'); + * ``` + * + * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom). + * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of: + * 'Bravura', 'Gonville', 'Custom'. + * + * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`, + * which includes a single music font. Calling this method is unnecessary. + * + * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts. + * In this case, the default music font stack is empty. + * Example: + * ``` + * await Vex.Flow.fetchMusicFont('Petaluma'); + * Vex.Flow.setMusicFont('Petaluma'); + * ... (do VexFlow stuff) ... + * ``` + * See `demos/fonts/` for more examples. + * + * @returns an array of Font objects corresponding to the provided `fontNames`. + */ + static setMusicFont(...fontNames) { + // Convert the array of font names into an array of Font objects. + const fonts = fontNames.map((fontName) => _font__WEBPACK_IMPORTED_MODULE_18__.Font.load(fontName)); + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK = fonts; + _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.MUSIC_FONT_STACK = fonts.slice(); + _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.CURRENT_CACHE_KEY = fontNames.join(','); + return fonts; + } + /** + * Used with vexflow-core which supports dynamic font loading. + */ + // eslint-disable-next-line + static fetchMusicFont(fontName, fontModuleOrPath) { + return __awaiter(this, void 0, void 0, function* () { + // The default implementation does nothing. + // See vexflow-core.ts for the implementation that vexflow-core.js uses. + }); + } + static getMusicFont() { + const fonts = _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK; + return fonts.map((font) => font.getName()); + } + static getMusicFontStack() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK; + } + static get RENDER_PRECISION_PLACES() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES; + } + static set RENDER_PRECISION_PLACES(precision) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES = precision; + } + static get SOFTMAX_FACTOR() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR; + } + static set SOFTMAX_FACTOR(factor) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR = factor; + } + static get NOTATION_FONT_SCALE() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE; + } + static set NOTATION_FONT_SCALE(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE = value; + } + static get TABLATURE_FONT_SCALE() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE; + } + static set TABLATURE_FONT_SCALE(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE = value; + } + static get RESOLUTION() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION; + } + static set RESOLUTION(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION = value; + } + static get SLASH_NOTEHEAD_WIDTH() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH; + } + static set SLASH_NOTEHEAD_WIDTH(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH = value; + } + static get STAVE_LINE_DISTANCE() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE; + } + static set STAVE_LINE_DISTANCE(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE = value; + } + static get STAVE_LINE_THICKNESS() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS; + } + static set STAVE_LINE_THICKNESS(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS = value; + } + static get STEM_HEIGHT() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT; + } + static set STEM_HEIGHT(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT = value; + } + static get STEM_WIDTH() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH; + } + static set STEM_WIDTH(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH = value; + } + static get TIME4_4() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TIME4_4; + } + static get accidentalMap() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.accidentalMap; + } + static get unicode() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.unicode; + } + static keySignature(spec) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keySignature(spec); + } + static hasKeySignature(spec) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.hasKeySignature(spec); + } + static getKeySignatures() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.getKeySignatures(); + } + static clefProperties(clef) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.clefProperties(clef); + } + // eslint-disable-next-line + static keyProperties(key, clef, params) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keyProperties(key, clef, params); + } + static durationToTicks(duration) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.durationToTicks(duration); + } +} +Flow.Accidental = _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental; +Flow.Annotation = _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation; +Flow.Articulation = _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation; +Flow.Barline = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.Barline; +Flow.BarNote = _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote; +Flow.Beam = _beam__WEBPACK_IMPORTED_MODULE_4__.Beam; +Flow.Bend = _bend__WEBPACK_IMPORTED_MODULE_5__.Bend; +Flow.BoundingBox = _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox; +Flow.BoundingBoxComputation = _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation; +Flow.CanvasContext = _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext; +Flow.ChordSymbol = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol; +Flow.Clef = _clef__WEBPACK_IMPORTED_MODULE_10__.Clef; +Flow.ClefNote = _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote; +Flow.Crescendo = _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo; +Flow.Curve = _curve__WEBPACK_IMPORTED_MODULE_13__.Curve; +Flow.Dot = _dot__WEBPACK_IMPORTED_MODULE_14__.Dot; +Flow.EasyScore = _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore; +Flow.Element = _element__WEBPACK_IMPORTED_MODULE_16__.Element; +Flow.Factory = _factory__WEBPACK_IMPORTED_MODULE_17__.Factory; +Flow.Font = _font__WEBPACK_IMPORTED_MODULE_18__.Font; +Flow.Formatter = _formatter__WEBPACK_IMPORTED_MODULE_19__.Formatter; +Flow.Fraction = _fraction__WEBPACK_IMPORTED_MODULE_20__.Fraction; +Flow.FretHandFinger = _frethandfinger__WEBPACK_IMPORTED_MODULE_21__.FretHandFinger; +Flow.GhostNote = _ghostnote__WEBPACK_IMPORTED_MODULE_22__.GhostNote; +Flow.Glyph = _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph; +Flow.GlyphNote = _glyphnote__WEBPACK_IMPORTED_MODULE_24__.GlyphNote; +Flow.GraceNote = _gracenote__WEBPACK_IMPORTED_MODULE_25__.GraceNote; +Flow.GraceNoteGroup = _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__.GraceNoteGroup; +Flow.GraceTabNote = _gracetabnote__WEBPACK_IMPORTED_MODULE_27__.GraceTabNote; +Flow.KeyManager = _keymanager__WEBPACK_IMPORTED_MODULE_28__.KeyManager; +Flow.KeySignature = _keysignature__WEBPACK_IMPORTED_MODULE_29__.KeySignature; +Flow.KeySigNote = _keysignote__WEBPACK_IMPORTED_MODULE_30__.KeySigNote; +Flow.Modifier = _modifier__WEBPACK_IMPORTED_MODULE_31__.Modifier; +Flow.ModifierContext = _modifiercontext__WEBPACK_IMPORTED_MODULE_32__.ModifierContext; +Flow.MultiMeasureRest = _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__.MultiMeasureRest; +Flow.Music = _music__WEBPACK_IMPORTED_MODULE_34__.Music; +Flow.Note = _note__WEBPACK_IMPORTED_MODULE_35__.Note; +Flow.NoteHead = _notehead__WEBPACK_IMPORTED_MODULE_36__.NoteHead; +Flow.NoteSubGroup = _notesubgroup__WEBPACK_IMPORTED_MODULE_37__.NoteSubGroup; +Flow.Ornament = _ornament__WEBPACK_IMPORTED_MODULE_38__.Ornament; +Flow.Parenthesis = _parenthesis__WEBPACK_IMPORTED_MODULE_39__.Parenthesis; +Flow.Parser = _parser__WEBPACK_IMPORTED_MODULE_40__.Parser; +Flow.PedalMarking = _pedalmarking__WEBPACK_IMPORTED_MODULE_41__.PedalMarking; +Flow.Registry = _registry__WEBPACK_IMPORTED_MODULE_42__.Registry; +Flow.RenderContext = _rendercontext__WEBPACK_IMPORTED_MODULE_43__.RenderContext; +Flow.Renderer = _renderer__WEBPACK_IMPORTED_MODULE_44__.Renderer; +Flow.RepeatNote = _repeatnote__WEBPACK_IMPORTED_MODULE_45__.RepeatNote; +Flow.Repetition = _staverepetition__WEBPACK_IMPORTED_MODULE_53__.Repetition; +Flow.Stave = _stave__WEBPACK_IMPORTED_MODULE_46__.Stave; +Flow.StaveConnector = _staveconnector__WEBPACK_IMPORTED_MODULE_48__.StaveConnector; +Flow.StaveHairpin = _stavehairpin__WEBPACK_IMPORTED_MODULE_49__.StaveHairpin; +Flow.StaveLine = _staveline__WEBPACK_IMPORTED_MODULE_50__.StaveLine; +Flow.StaveModifier = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifier; +Flow.StaveNote = _stavenote__WEBPACK_IMPORTED_MODULE_52__.StaveNote; +Flow.StaveTempo = _stavetempo__WEBPACK_IMPORTED_MODULE_54__.StaveTempo; +Flow.StaveText = _stavetext__WEBPACK_IMPORTED_MODULE_55__.StaveText; +Flow.StaveTie = _stavetie__WEBPACK_IMPORTED_MODULE_56__.StaveTie; +Flow.Stem = _stem__WEBPACK_IMPORTED_MODULE_58__.Stem; +Flow.StringNumber = _stringnumber__WEBPACK_IMPORTED_MODULE_59__.StringNumber; +Flow.Stroke = _strokes__WEBPACK_IMPORTED_MODULE_60__.Stroke; +Flow.SVGContext = _svgcontext__WEBPACK_IMPORTED_MODULE_61__.SVGContext; +Flow.System = _system__WEBPACK_IMPORTED_MODULE_62__.System; +Flow.TabNote = _tabnote__WEBPACK_IMPORTED_MODULE_64__.TabNote; +Flow.TabSlide = _tabslide__WEBPACK_IMPORTED_MODULE_65__.TabSlide; +Flow.TabStave = _tabstave__WEBPACK_IMPORTED_MODULE_66__.TabStave; +Flow.TabTie = _tabtie__WEBPACK_IMPORTED_MODULE_67__.TabTie; +Flow.TextBracket = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracket; +Flow.TextDynamics = _textdynamics__WEBPACK_IMPORTED_MODULE_69__.TextDynamics; +Flow.TextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_70__.TextFormatter; +Flow.TextNote = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextNote; +Flow.TickContext = _tickcontext__WEBPACK_IMPORTED_MODULE_72__.TickContext; +Flow.TimeSignature = _timesignature__WEBPACK_IMPORTED_MODULE_73__.TimeSignature; +Flow.TimeSigNote = _timesignote__WEBPACK_IMPORTED_MODULE_74__.TimeSigNote; +Flow.Tremolo = _tremolo__WEBPACK_IMPORTED_MODULE_75__.Tremolo; +Flow.Tuning = _tuning__WEBPACK_IMPORTED_MODULE_76__.Tuning; +Flow.Tuplet = _tuplet__WEBPACK_IMPORTED_MODULE_77__.Tuplet; +Flow.Vibrato = _vibrato__WEBPACK_IMPORTED_MODULE_79__.Vibrato; +Flow.VibratoBracket = _vibratobracket__WEBPACK_IMPORTED_MODULE_80__.VibratoBracket; +Flow.Voice = _voice__WEBPACK_IMPORTED_MODULE_81__.Voice; +Flow.Volta = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.Volta; +// Exported Enums. +// Sorted by the module / file they are exported from. +Flow.AnnotationHorizontalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify; +Flow.AnnotationVerticalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify; +Flow.ChordSymbolHorizontalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify; +Flow.ChordSymbolVerticalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify; +Flow.SymbolTypes = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes; +Flow.SymbolModifiers = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers; +Flow.CurvePosition = _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition; +Flow.FontWeight = _font__WEBPACK_IMPORTED_MODULE_18__.FontWeight; +Flow.FontStyle = _font__WEBPACK_IMPORTED_MODULE_18__.FontStyle; +Flow.ModifierPosition = _modifier__WEBPACK_IMPORTED_MODULE_31__.ModifierPosition; +Flow.RendererBackends = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererBackends; +Flow.RendererLineEndType = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererLineEndType; +Flow.BarlineType = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.BarlineType; +Flow.StaveModifierPosition = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifierPosition; +Flow.VoltaType = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.VoltaType; +Flow.TextBracketPosition = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracketPosition; +Flow.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextJustification; +Flow.VoiceMode = _voice__WEBPACK_IMPORTED_MODULE_81__.VoiceMode; + + + +/***/ }), + +/***/ "./src/font.ts": +/*!*********************!*\ + !*** ./src/font.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Font": () => (/* binding */ Font), +/* harmony export */ "FontStyle": () => (/* binding */ FontStyle), +/* harmony export */ "FontWeight": () => (/* binding */ FontWeight) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +var FontWeight; +(function (FontWeight) { + FontWeight["NORMAL"] = "normal"; + FontWeight["BOLD"] = "bold"; +})(FontWeight || (FontWeight = {})); +var FontStyle; +(function (FontStyle) { + FontStyle["NORMAL"] = "normal"; + FontStyle["ITALIC"] = "italic"; +})(FontStyle || (FontStyle = {})); +// Internal element for parsing CSS font shorthand strings. +let fontParser; +const Fonts = {}; +class Font { + /** + * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') + * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported + * units (e.g., pt, em, %). + * @returns the number of pixels that is equivalent to `fontSize` + */ + static convertSizeToPixelValue(fontSize = Font.SIZE) { + var _a; + if (typeof fontSize === 'number') { + // Assume the numeric fontSize is specified in pt. + return fontSize * Font.scaleToPxFrom.pt; + } + else { + const value = parseFloat(fontSize); + if (isNaN(value)) { + return 0; + } + const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces. + const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1; + return value * conversionFactor; + } + } + /** + * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') + * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported + * units (e.g., pt, em, %). + * @returns the number of points that is equivalent to `fontSize` + */ + static convertSizeToPointValue(fontSize = Font.SIZE) { + var _a; + if (typeof fontSize === 'number') { + // Assume the numeric fontSize is specified in pt. + return fontSize; + } + else { + const value = parseFloat(fontSize); + if (isNaN(value)) { + return 0; + } + const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces. + const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt; + return value * conversionFactor; + } + } + /** + * @param f + * @param size + * @param weight + * @param style + * @returns the `size` field will include the units (e.g., '12pt', '16px'). + */ + static validate(f, size, weight, style) { + // If f is a string but all other arguments are undefined, we assume that + // f is CSS font shorthand (e.g., 'italic bold 10pt Arial'). + if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) { + return Font.fromCSSString(f); + } + let family; + if (typeof f === 'object') { + // f is a FontInfo object, so we extract its fields. + family = f.family; + size = f.size; + weight = f.weight; + style = f.style; + } + else { + // f is a string representing the font family name or undefined. + family = f; + } + family = family !== null && family !== void 0 ? family : Font.SANS_SERIF; + size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt'; + weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL; + style = style !== null && style !== void 0 ? style : FontStyle.NORMAL; + if (weight === '') { + weight = FontWeight.NORMAL; + } + if (style === '') { + style = FontStyle.NORMAL; + } + // If size is a number, we assume the unit is `pt`. + if (typeof size === 'number') { + size = `${size}pt`; + } + // If weight is a number (e.g., 900), turn it into a string representation of that number. + if (typeof weight === 'number') { + weight = weight.toString(); + } + // At this point, `family`, `size`, `weight`, and `style` are all strings. + return { family, size, weight, style }; + } + /** + * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial'). + */ + static fromCSSString(cssFontShorthand) { + // Let the browser parse this string for us. + // First, create a span element. + // Then, set its style.font and extract it back out. + if (!fontParser) { + fontParser = document.createElement('span'); + } + fontParser.style.font = cssFontShorthand; + const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style; + return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle }; + } + /** + * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`. + */ + static toCSSString(fontInfo) { + var _a; + if (!fontInfo) { + return ''; + } + let style; + const st = fontInfo.style; + if (st === FontStyle.NORMAL || st === '' || st === undefined) { + style = ''; // no space! Omit the style section. + } + else { + style = st.trim() + ' '; + } + let weight; + const wt = fontInfo.weight; + if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) { + weight = ''; // no space! Omit the weight section. + } + else if (typeof wt === 'number') { + weight = wt + ' '; + } + else { + weight = wt.trim() + ' '; + } + let size; + const sz = fontInfo.size; + if (sz === undefined) { + size = Font.SIZE + 'pt '; + } + else if (typeof sz === 'number') { + size = sz + 'pt '; + } + else { + // size is already a string. + size = sz.trim() + ' '; + } + const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF; + return `${style}${weight}${size}${family}`; + } + /** + * @param fontSize a number representing a font size, or a string font size with units. + * @param scaleFactor multiply the size by this factor. + * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48). + * If the fontSize argument was a number, the return value will be a number. + * If the fontSize argument was a string, the return value will be a string. + */ + static scaleSize(fontSize, scaleFactor) { + if (typeof fontSize === 'number') { + return (fontSize * scaleFactor); + } + else { + const value = parseFloat(fontSize); + const unit = fontSize.replace(/[\d.\s]/g, ''); // Remove all numbers, dots, spaces. + return `${value * scaleFactor}${unit}`; + } + } + /** + * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec). + * @returns true if the font weight indicates bold. + */ + static isBold(weight) { + if (!weight) { + return false; + } + else if (typeof weight === 'number') { + return weight >= 600; + } + else { + // a string can be 'bold' or '700' + const parsedWeight = parseInt(weight, 10); + if (isNaN(parsedWeight)) { + return weight.toLowerCase() === 'bold'; + } + else { + return parsedWeight >= 600; + } + } + } + /** + * @param style + * @returns true if the font style indicates 'italic'. + */ + static isItalic(style) { + if (!style) { + return false; + } + else { + return style.toLowerCase() === FontStyle.ITALIC; + } + } + /** + * @param fontName + * @param woffURL The absolute or relative URL to the woff file. + * @param includeWoff2 If true, we assume that a woff2 file is in + * the same folder as the woff file, and will append a `2` to the url. + */ + // Support distributions of the typescript compiler that do not yet include the FontFace API declarations. + // eslint-disable-next-line + // @ts-ignore + static loadWebFont(fontName, woffURL, includeWoff2 = true) { + return __awaiter(this, void 0, void 0, function* () { + const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : ''; + const woff1URL = `url(${woffURL}) format('woff')`; + const woffURLs = woff2URL + woff1URL; + // eslint-disable-next-line + // @ts-ignore + const fontFace = new FontFace(fontName, woffURLs); + yield fontFace.load(); + // eslint-disable-next-line + // @ts-ignore + document.fonts.add(fontFace); + return fontFace; + }); + } + /** + * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls: + * `await Vex.Flow.Font.loadWebFonts();` + * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts), + * and a @font-face { font-family: ... } rule in your CSS. + * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial, + * depending on the current music engraving font. + * + * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts + * for your app. + */ + static loadWebFonts() { + return __awaiter(this, void 0, void 0, function* () { + const host = Font.WEB_FONT_HOST; + const files = Font.WEB_FONT_FILES; + for (const fontName in files) { + const fontPath = files[fontName]; + Font.loadWebFont(fontName, host + fontPath); + } + }); + } + /** + * @param fontName + * @param data optionally set the Font object's `.data` property. + * This is usually done when setting up a font for the first time. + * @param metrics optionally set the Font object's `.metrics` property. + * This is usually done when setting up a font for the first time. + * @returns a Font object with the given `fontName`. + * Reuse an existing Font object if a matching one is found. + */ + static load(fontName, data, metrics) { + let font = Fonts[fontName]; + if (!font) { + font = new Font(fontName); + Fonts[fontName] = font; + } + if (data) { + font.setData(data); + } + if (metrics) { + font.setMetrics(metrics); + } + return font; + } + /** + * Use `Font.load(fontName)` to get a Font object. + * Do not call this constructor directly. + */ + constructor(fontName) { + this.name = fontName; + } + getName() { + return this.name; + } + getData() { + return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.data, 'FontError', 'Missing font data'); + } + getMetrics() { + return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.metrics, 'FontError', 'Missing metrics'); + } + setData(data) { + this.data = data; + } + setMetrics(metrics) { + this.metrics = metrics; + } + hasData() { + return this.data !== undefined; + } + getResolution() { + return this.getData().resolution; + } + getGlyphs() { + return this.getData().glyphs; + } + /** + * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts). + * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY). + * @param defaultValue is returned if the lookup fails. + * @returns the retrieved value (or `defaultValue` if the lookup fails). + */ + // eslint-disable-next-line + lookupMetric(key, defaultValue) { + const keyParts = key.split('.'); + // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key). + let currObj = this.getMetrics(); + for (let i = 0; i < keyParts.length; i++) { + const keyPart = keyParts[i]; + const value = currObj[keyPart]; + if (value === undefined) { + // If the key lookup fails, we fall back to the defaultValue. + return defaultValue; + } + // The most recent lookup succeeded, so we drill deeper into the object. + currObj = value; + } + // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value. + return currObj; + } + /** For debugging. */ + toString() { + return '[' + this.name + ' Font]'; + } +} +////////////////////////////////////////////////////////////////////////////////////////////////// +// STATIC MEMBERS +/** Default sans-serif font family. */ +Font.SANS_SERIF = 'Arial, sans-serif'; +/** Default serif font family. */ +Font.SERIF = 'Times New Roman, serif'; +/** Default font size in `pt`. */ +Font.SIZE = 10; +// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in +/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */ +Font.scaleToPxFrom = { + pt: 4 / 3, + px: 1, + em: 16, + '%': 4 / 25, + in: 96, + mm: 96 / 25.4, + cm: 96 / 2.54, +}; +/** + * Customize this field to specify a different CDN for delivering web fonts. + * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/ + * Or you can use your own host. + */ +Font.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/'; +/** + * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when + * `await Font.loadWebFonts()` is called. Customize this field to specify a different + * set of fonts to load. See: `Font.loadWebFonts()`. + */ +Font.WEB_FONT_FILES = { + 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff', + PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff', +}; + + + +/***/ }), + +/***/ "./src/fonts/bravura_glyphs.ts": +/*!*************************************!*\ + !*** ./src/fonts/bravura_glyphs.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BravuraFont": () => (/* binding */ BravuraFont) +/* harmony export */ }); +const BravuraFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 469, + y_min: 0, + y_max: 295, + ha: 295, + o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z', + }, + bracketBottom: { + x_min: 0, + x_max: 469, + y_min: -295, + y_max: 0, + ha: 295, + o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z', + }, + barlineTick: { + x_min: 0, + x_max: 36, + y_min: 868, + y_max: 1120, + ha: 252, + o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z', + }, + breathMarkTick: { + x_min: 0, + x_max: 500, + y_min: 0, + y_max: 502, + ha: 502, + o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z', + }, + segno: { + x_min: 4, + x_max: 550, + y_min: -27, + y_max: 759, + ha: 786, + o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z', + }, + coda: { + x_min: -4, + x_max: 955, + y_min: -158, + y_max: 898, + ha: 1056, + o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z', + }, + gClef: { + x_min: 0, + x_max: 671, + y_min: -658, + y_max: 1098, + ha: 1756, + o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z', + }, + cClef: { + x_min: 0, + x_max: 699, + y_min: -506, + y_max: 506, + ha: 1012, + o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z', + }, + fClef: { + x_min: -5, + x_max: 684, + y_min: -635, + y_max: 262, + ha: 897, + o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 382, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z', + }, + '6stringTabClef': { + x_min: -3, + x_max: 408, + y_min: -748, + y_max: 764, + ha: 1512, + o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z', + }, + timeSig0: { + x_min: 20, + x_max: 450, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z', + }, + timeSig1: { + x_min: 20, + x_max: 314, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z', + }, + timeSig2: { + x_min: 20, + x_max: 426, + y_min: -257, + y_max: 254, + ha: 511, + o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z', + }, + timeSig3: { + x_min: 20, + x_max: 401, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z', + }, + timeSig4: { + x_min: 20, + x_max: 450, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z', + }, + timeSig5: { + x_min: 20, + x_max: 383, + y_min: -251, + y_max: 246, + ha: 497, + o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z', + }, + timeSig6: { + x_min: 20, + x_max: 414, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z', + }, + timeSig7: { + x_min: 20, + x_max: 421, + y_min: -250, + y_max: 249, + ha: 499, + o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z', + }, + timeSig8: { + x_min: 20, + x_max: 416, + y_min: -259, + y_max: 259, + ha: 518, + o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z', + }, + timeSig9: { + x_min: 20, + x_max: 414, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z', + }, + timeSigCommon: { + x_min: 5, + x_max: 424, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 418, + y_min: -359, + y_max: 361, + ha: 720, + o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z', + }, + timeSigPlus: { + x_min: -1, + x_max: 499, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z', + }, + timeSigPlusSmall: { + x_min: -1, + x_max: 255, + y_min: -133, + y_max: 123, + ha: 256, + o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 448, + y_min: -35, + y_max: 40, + ha: 75, + o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z', + }, + timeSigParensRight: { + x_min: 0, + x_max: 184, + y_min: -489, + y_max: 491, + ha: 980, + o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z', + }, + timeSigParensRightSmall: { + x_min: 0, + x_max: 110, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z', + }, + timeSigParensLeft: { + x_min: 0, + x_max: 184, + y_min: -489, + y_max: 491, + ha: 980, + o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z', + }, + timeSigParensLeftSmall: { + x_min: 0, + x_max: 110, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 599, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 422, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 295, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 295, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z', + }, + noteheadXDoubleWhole: { + x_min: 0, + x_max: 546, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 377, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 334, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 290, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z', + }, + noteheadCircleXDoubleWhole: { + x_min: 0, + x_max: 422, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z', + }, + noteheadCircleXWhole: { + x_min: 0, + x_max: 249, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z', + }, + noteheadCircleXHalf: { + x_min: 0, + x_max: 250, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 249, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z', + }, + noteheadCircledDoubleWhole: { + x_min: 0, + x_max: 603, + y_min: -218, + y_max: 213, + ha: 431, + o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z', + }, + noteheadCircledWhole: { + x_min: 0, + x_max: 437, + y_min: -225, + y_max: 211, + ha: 436, + o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z', + }, + noteheadCircledHalf: { + x_min: -18, + x_max: 311, + y_min: -162, + y_max: 167, + ha: 329, + o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z', + }, + noteheadCircledBlack: { + x_min: -21, + x_max: 321, + y_min: -171, + y_max: 167, + ha: 338, + o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 416, + y_min: -190, + y_max: 198, + ha: 388, + o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 313, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 313, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z', + }, + noteheadTriangleDownDoubleWhole: { + x_min: 0, + x_max: 483, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z', + }, + noteheadTriangleDownWhole: { + x_min: 0, + x_max: 319, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z', + }, + noteheadTriangleDownHalf: { + x_min: 0, + x_max: 285, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z', + }, + noteheadTriangleDownBlack: { + x_min: 0, + x_max: 292, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 207 -180 l 420 180 l 0 180 z', + }, + noteheadTriangleUpDoubleWhole: { + x_min: 0, + x_max: 483, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 319, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 285, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 293, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 422 -180 l 207 180 l 0 -180 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: 0, + x_max: 596, + y_min: -179, + y_max: 168, + ha: 347, + o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z', + }, + noteheadSlashedWhole1: { + x_min: -22, + x_max: 433, + y_min: -157, + y_max: 148, + ha: 305, + o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z', + }, + noteheadSlashedHalf1: { + x_min: -67, + x_max: 386, + y_min: -142, + y_max: 160, + ha: 302, + o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z', + }, + noteheadSlashedBlack1: { + x_min: -80, + x_max: 375, + y_min: -165, + y_max: 167, + ha: 332, + o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: 0, + x_max: 596, + y_min: -178, + y_max: 169, + ha: 347, + o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z', + }, + noteheadSlashedWhole2: { + x_min: -18, + x_max: 436, + y_min: -154, + y_max: 151, + ha: 305, + o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z', + }, + noteheadSlashedHalf2: { + x_min: -73, + x_max: 380, + y_min: -134, + y_max: 168, + ha: 302, + o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z', + }, + noteheadSlashedBlack2: { + x_min: -79, + x_max: 376, + y_min: -164, + y_max: 168, + ha: 332, + o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 432, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 270, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 251, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 250, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z', + }, + noteheadParenthesis: { + x_min: -73, + x_max: 368, + y_min: -180, + y_max: 182, + ha: 362, + o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z', + }, + noteheadParenthesisRight: { + x_min: -36, + x_max: 73, + y_min: -181, + y_max: 181, + ha: 362, + o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 109, + y_min: -181, + y_max: 181, + ha: 362, + o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 315, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 339, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 488 -180 l 0 180 l 0 -180 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 339, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 488 180 l 0 -180 l 488 -180 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 278, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z', + }, + augmentationDot: { + x_min: 0, + x_max: 100, + y_min: -50, + y_max: 50, + ha: 100, + o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z', + }, + tremolo1: { + x_min: -150, + x_max: 150, + y_min: -93, + y_max: 94, + ha: 187, + o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z', + }, + flag8thUp: { + x_min: 0, + x_max: 264, + y_min: -810, + y_max: 9, + ha: 819, + o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z', + }, + flag8thDown: { + x_min: 0, + x_max: 306, + y_min: -14, + y_max: 808, + ha: 822, + o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z', + }, + flag16thUp: { + x_min: 0, + x_max: 279, + y_min: -813, + y_max: 2, + ha: 815, + o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z', + }, + flag16thDown: { + x_min: 0, + x_max: 291, + y_min: -9, + y_max: 812, + ha: 821, + o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 149, + ha: 961, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag32ndDown: { + x_min: 0, + x_max: 273, + y_min: -172, + y_max: 812, + ha: 984, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z', + }, + flag64thUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 347, + ha: 1159, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag64thDown: { + x_min: 0, + x_max: 273, + y_min: -376, + y_max: 812, + ha: 1188, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z', + }, + flag128thUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 533, + ha: 1345, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag128thDown: { + x_min: 0, + x_max: 273, + y_min: -580, + y_max: 812, + ha: 1392, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z', + }, + accidentalFlat: { + x_min: 0, + x_max: 226, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 168, + y_min: -335, + y_max: 341, + ha: 676, + o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 249, + y_min: -348, + y_max: 350, + ha: 698, + o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 247, + y_min: -125, + y_max: 127, + ha: 252, + o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 411, + y_min: -175, + y_max: 437, + ha: 612, + o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 141, + y_min: -248, + y_max: 247, + ha: 495, + o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 141, + y_min: -248, + y_max: 247, + ha: 495, + o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 1, + x_max: 227, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 1, + x_max: 466, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 179, + y_min: -353, + y_max: 307, + ha: 660, + o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 3, + x_max: 317, + y_min: -347, + y_max: 369, + ha: 716, + o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 1, + x_max: 287, + y_min: -174, + y_max: 438, + ha: 612, + o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 341, + y_min: -350, + y_max: 348, + ha: 698, + o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z', + }, + accidentalBakiyeFlat: { + x_min: -1, + x_max: 286, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 229, + y_min: -337, + y_max: 322, + ha: 659, + o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z', + }, + accidentalKucukMucennebSharp: { + x_min: -1, + x_max: 339, + y_min: -338, + y_max: 321, + ha: 659, + o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z', + }, + accidentalKoron: { + x_min: 0, + x_max: 300, + y_min: -472, + y_max: 157, + ha: 629, + o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z', + }, + accidentalSori: { + x_min: 0, + x_max: 421, + y_min: -318, + y_max: 328, + ha: 646, + o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 339, + y_min: 1, + y_max: 245, + ha: 244, + o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 339, + y_min: -244, + y_max: 0, + ha: 244, + o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z', + }, + articTenutoAbove: { + x_min: -1, + x_max: 338, + y_min: 0, + y_max: 48, + ha: 48, + o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z', + }, + articTenutoBelow: { + x_min: -1, + x_max: 338, + y_min: -48, + y_max: 0, + ha: 48, + o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z', + }, + articStaccatoAbove: { + x_min: 0, + x_max: 84, + y_min: 0, + y_max: 84, + ha: 84, + o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z', + }, + articStaccatoBelow: { + x_min: 0, + x_max: 84, + y_min: -84, + y_max: 0, + ha: 84, + o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z', + }, + articStaccatissimoAbove: { + x_min: 1, + x_max: 100, + y_min: -2, + y_max: 293, + ha: 295, + o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z', + }, + articStaccatissimoBelow: { + x_min: 1, + x_max: 100, + y_min: -295, + y_max: 0, + ha: 295, + o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z', + }, + articMarcatoAbove: { + x_min: -1, + x_max: 235, + y_min: -1, + y_max: 253, + ha: 254, + o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z', + }, + articMarcatoBelow: { + x_min: -1, + x_max: 235, + y_min: -254, + y_max: 0, + ha: 254, + o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z', + }, + fermataAbove: { + x_min: 3, + x_max: 605, + y_min: -3, + y_max: 329, + ha: 332, + o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z', + }, + fermataBelow: { + x_min: 3, + x_max: 605, + y_min: -332, + y_max: 0, + ha: 332, + o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 603, + y_min: -1, + y_max: 333, + ha: 334, + o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 603, + y_min: -333, + y_max: 1, + ha: 334, + o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 715, + y_min: 0, + y_max: 408, + ha: 408, + o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 715, + y_min: -408, + y_max: 0, + ha: 408, + o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z', + }, + fermataVeryShortAbove: { + x_min: 0, + x_max: 726, + y_min: 0, + y_max: 449, + ha: 449, + o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z', + }, + fermataVeryShortBelow: { + x_min: 0, + x_max: 726, + y_min: -449, + y_max: 0, + ha: 449, + o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 604, + y_min: 0, + y_max: 341, + ha: 341, + o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 604, + y_min: -341, + y_max: 0, + ha: 341, + o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z', + }, + breathMarkComma: { + x_min: 1, + x_max: 152, + y_min: 2, + y_max: 251, + ha: 249, + o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', + }, + breathMarkUpbow: { + x_min: 1, + x_max: 249, + y_min: 1, + y_max: 495, + ha: 494, + o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', + }, + caesura: { + x_min: 0, + x_max: 384, + y_min: -1, + y_max: 532, + ha: 533, + o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 373, + y_min: 0, + y_max: 530, + ha: 530, + o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z', + }, + restMaxima: { + x_min: 0, + x_max: 381, + y_min: -249, + y_max: 250, + ha: 499, + o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 125, + y_min: 0, + y_max: 250, + ha: 250, + o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z', + }, + restWhole: { + x_min: 0, + x_max: 282, + y_min: -135, + y_max: 9, + ha: 144, + o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z', + }, + restWholeLegerLine: { + x_min: -117, + x_max: 399, + y_min: -135, + y_max: 20, + ha: 155, + o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z', + }, + restHalf: { + x_min: 0, + x_max: 282, + y_min: -2, + y_max: 142, + ha: 144, + o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z', + }, + restHalfLegerLine: { + x_min: -117, + x_max: 399, + y_min: -13, + y_max: 142, + ha: 155, + o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z', + }, + restQuarter: { + x_min: 1, + x_max: 270, + y_min: -375, + y_max: 373, + ha: 748, + o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z', + }, + rest8th: { + x_min: 0, + x_max: 247, + y_min: -251, + y_max: 174, + ha: 425, + o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z', + }, + rest16th: { + x_min: 0, + x_max: 320, + y_min: -500, + y_max: 179, + ha: 679, + o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z', + }, + rest32nd: { + x_min: 0, + x_max: 363, + y_min: -500, + y_max: 426, + ha: 926, + o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z', + }, + rest64th: { + x_min: 0, + x_max: 423, + y_min: -753, + y_max: 430, + ha: 1183, + o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z', + }, + rest128th: { + x_min: 0, + x_max: 485, + y_min: -750, + y_max: 689, + ha: 1439, + o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z', + }, + dynamicPiano: { + x_min: -89, + x_max: 366, + y_min: -142, + y_max: 274, + ha: 416, + o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z', + }, + dynamicMezzo: { + x_min: -20, + x_max: 446, + y_min: -10, + y_max: 274, + ha: 284, + o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z', + }, + dynamicForte: { + x_min: -141, + x_max: 364, + y_min: -152, + y_max: 444, + ha: 596, + o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z', + }, + dynamicRinforzando: { + x_min: -20, + x_max: 277, + y_min: 0, + y_max: 274, + ha: 274, + o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 229, + y_min: -10, + y_max: 273, + ha: 283, + o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z', + }, + dynamicZ: { + x_min: -30, + x_max: 244, + y_min: -10, + y_max: 268, + ha: 278, + o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z', + }, + ornamentTrill: { + x_min: 0, + x_max: 521, + y_min: -10, + y_max: 390, + ha: 400, + o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 460, + y_min: 0, + y_max: 218, + ha: 218, + o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 460, + y_min: -90, + y_max: 306, + ha: 396, + o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z', + }, + ornamentMordent: { + x_min: 1, + x_max: 729, + y_min: -73, + y_max: 319, + ha: 392, + o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 725, + y_min: 0, + y_max: 245, + ha: 245, + o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z', + }, + ornamentTremblement: { + x_min: 1, + x_max: 985, + y_min: 0, + y_max: 244, + ha: 244, + o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 1119, + y_min: 0, + y_max: 481, + ha: 481, + o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 2, + x_max: 1150, + y_min: -367, + y_max: 245, + ha: 612, + o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 1048, + y_min: -367, + y_max: 331, + ha: 698, + o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 949, + y_min: 0, + y_max: 381, + ha: 381, + o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 1278, + y_min: 0, + y_max: 247, + ha: 247, + o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: 0, + x_max: 1277, + y_min: -62, + y_max: 333, + ha: 395, + o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 859, + y_min: -222, + y_max: 246, + ha: 468, + o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z', + }, + brassScoop: { + x_min: 1, + x_max: 320, + y_min: -373, + y_max: 13, + ha: 386, + o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z', + }, + brassDoitMedium: { + x_min: 0, + x_max: 489, + y_min: -40, + y_max: 346, + ha: 386, + o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z', + }, + brassFallLipShort: { + x_min: 1, + x_max: 293, + y_min: -345, + y_max: 42, + ha: 387, + o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z', + }, + brassLiftMedium: { + x_min: 0, + x_max: 811, + y_min: 0, + y_max: 852, + ha: 852, + o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z', + }, + brassFallRoughMedium: { + x_min: 0, + x_max: 811, + y_min: 0, + y_max: 852, + ha: 852, + o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z', + }, + brassBend: { + x_min: 0, + x_max: 392, + y_min: 0, + y_max: 282, + ha: 282, + o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 272, + y_min: 0, + y_max: 272, + ha: 272, + o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', + }, + brassMuteOpen: { + x_min: 0, + x_max: 304, + y_min: 0, + y_max: 304, + ha: 304, + o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z', + }, + brassFlip: { + x_min: 0, + x_max: 379, + y_min: 0, + y_max: 282, + ha: 282, + o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z', + }, + brassJazzTurn: { + x_min: 0, + x_max: 620, + y_min: 0, + y_max: 245, + ha: 245, + o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z', + }, + brassSmear: { + x_min: 1, + x_max: 306, + y_min: 0, + y_max: 170, + ha: 170, + o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 312, + y_min: 0, + y_max: 318, + ha: 318, + o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z', + }, + stringsUpBow: { + x_min: 1, + x_max: 249, + y_min: 1, + y_max: 495, + ha: 494, + o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 200, + ha: 200, + o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 300, + ha: 300, + o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 300, + ha: 300, + o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z', + }, + pluckedLeftHandPizzicato: { + x_min: 0, + x_max: 272, + y_min: 0, + y_max: 272, + ha: 272, + o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 1019, + y_min: -8, + y_max: 555, + ha: 563, + o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 450, + y_min: 0, + y_max: 450, + ha: 450, + o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z', + }, + pictChokeCymbal: { + x_min: 1, + x_max: 152, + y_min: 2, + y_max: 251, + ha: 249, + o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', + }, + wiggleArpeggiatoUp: { + x_min: -33, + x_max: 292, + y_min: 0, + y_max: 119, + ha: 119, + o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z', + }, + arrowheadBlackUp: { + x_min: 0, + x_max: 228, + y_min: 0, + y_max: 299, + ha: 299, + o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z', + }, + arrowheadBlackDown: { + x_min: 0, + x_max: 228, + y_min: 0, + y_max: 299, + ha: 299, + o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z', + }, + arpeggiatoUp: { + x_min: 1, + x_max: 229, + y_min: 7, + y_max: 1511, + ha: 1504, + o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z', + }, + arpeggiatoDown: { + x_min: 1, + x_max: 229, + y_min: -4, + y_max: 1500, + ha: 1504, + o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 532, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 762, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1232, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 532, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z', + }, + csymDiminished: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 473, + ha: 473, + o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z', + }, + csymHalfDiminished: { + x_min: -16, + x_max: 488, + y_min: -15, + y_max: 489, + ha: 504, + o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z', + }, + csymAugmented: { + x_min: 0, + x_max: 395, + y_min: 1, + y_max: 396, + ha: 395, + o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 558, + y_min: 1, + y_max: 477, + ha: 476, + o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z', + }, + csymMinor: { + x_min: 0, + x_max: 325, + y_min: 216, + y_max: 260, + ha: 44, + o: 'm 468 374 l 0 374 l 0 311 l 468 311 z', + }, + csymParensLeftTall: { + x_min: 1, + x_max: 185, + y_min: 0, + y_max: 997, + ha: 997, + o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z', + }, + csymParensRightTall: { + x_min: -20, + x_max: 164, + y_min: 0, + y_max: 997, + ha: 997, + o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z', + }, + csymBracketLeftTall: { + x_min: 0, + x_max: 155, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z', + }, + csymBracketRightTall: { + x_min: 1, + x_max: 156, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z', + }, + csymParensLeftVeryTall: { + x_min: 0, + x_max: 122, + y_min: 0, + y_max: 993, + ha: 993, + o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z', + }, + csymParensRightVeryTall: { + x_min: -15, + x_max: 107, + y_min: 0, + y_max: 993, + ha: 993, + o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z', + }, + csymDiagonalArrangementSlash: { + x_min: 0, + x_max: 999, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z', + }, + accSagittal5v7KleismaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z', + }, + accSagittal5v7KleismaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z', + }, + accSagittal5CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z', + }, + accSagittal5CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z', + }, + accSagittal7CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z', + }, + accSagittal7CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z', + }, + accSagittal25SmallDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z', + }, + accSagittal25SmallDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z', + }, + accSagittal35MediumDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z', + }, + accSagittal35MediumDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittal11MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z', + }, + accSagittal11MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z', + }, + accSagittal11LargeDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z', + }, + accSagittal11LargeDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal35LargeDiesisUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal35LargeDiesisDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalSharp25SDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z', + }, + accSagittalFlat25SUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z', + }, + accSagittalSharp7CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z', + }, + accSagittalFlat7CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z', + }, + accSagittalSharp5CDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z', + }, + accSagittalFlat5CUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z', + }, + accSagittalSharp5v7kDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z', + }, + accSagittalFlat5v7kUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z', + }, + accSagittalSharp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z', + }, + accSagittalFlat: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z', + }, + accSagittalSharp5v7kUp: { + x_min: 0, + x_max: 312, + y_min: -361, + y_max: 172, + ha: 533, + o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z', + }, + accSagittalFlat5v7kDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 361, + ha: 533, + o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z', + }, + accSagittalSharp5CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z', + }, + accSagittalFlat5CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z', + }, + accSagittalSharp7CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z', + }, + accSagittalFlat7CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z', + }, + accSagittalSharp25SUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z', + }, + accSagittalFlat25SDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z', + }, + accSagittalSharp35MUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z', + }, + accSagittalFlat35MDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z', + }, + accSagittalSharp11MUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z', + }, + accSagittalFlat11MDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z', + }, + accSagittalSharp11LUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat11LDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalSharp35LUp: { + x_min: 0, + x_max: 500, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat35LDown: { + x_min: 0, + x_max: 500, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalDoubleSharp25SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z', + }, + accSagittalDoubleFlat25SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z', + }, + accSagittalDoubleSharp7CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z', + }, + accSagittalDoubleFlat7CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z', + }, + accSagittalDoubleSharp5CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z', + }, + accSagittalDoubleFlat5CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z', + }, + accSagittalDoubleSharp5v7kDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z', + }, + accSagittalDoubleFlat5v7kUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z', + }, + accSagittalDoubleSharp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z', + }, + accSagittalDoubleFlat: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z', + }, + accSagittal7v11KleismaUp: { + x_min: 0, + x_max: 219, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z', + }, + accSagittal7v11KleismaDown: { + x_min: 0, + x_max: 219, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', + }, + accSagittal17CommaUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal17CommaDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal55CommaUp: { + x_min: 0, + x_max: 219, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z', + }, + accSagittal55CommaDown: { + x_min: 0, + x_max: 219, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z', + }, + accSagittal7v11CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z', + }, + accSagittal7v11CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal5v11SmallDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z', + }, + accSagittal5v11SmallDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalSharp5v11SDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat5v11SUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp7v11CDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z', + }, + accSagittalFlat7v11CUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z', + }, + accSagittalSharp55CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z', + }, + accSagittalFlat55CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z', + }, + accSagittalSharp17CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z', + }, + accSagittalFlat17CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z', + }, + accSagittalSharp7v11kDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z', + }, + accSagittalFlat7v11kUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z', + }, + accSagittalSharp7v11kUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z', + }, + accSagittalFlat7v11kDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z', + }, + accSagittalSharp17CUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat17CDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp55CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z', + }, + accSagittalFlat55CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z', + }, + accSagittalSharp7v11CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z', + }, + accSagittalFlat7v11CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z', + }, + accSagittalSharp5v11SUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z', + }, + accSagittalFlat5v11SDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalDoubleSharp5v11SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat5v11SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp7v11CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z', + }, + accSagittalDoubleFlat7v11CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z', + }, + accSagittalDoubleSharp55CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z', + }, + accSagittalDoubleFlat55CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z', + }, + accSagittalDoubleSharp17CDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z', + }, + accSagittalDoubleFlat17CUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z', + }, + accSagittalDoubleSharp7v11kDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z', + }, + accSagittalDoubleFlat7v11kUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z', + }, + accSagittal23CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z', + }, + accSagittal23CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z', + }, + accSagittal5v19CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z', + }, + accSagittal5v19CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittal5v23SmallDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z', + }, + accSagittal5v23SmallDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittalSharp5v23SDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z', + }, + accSagittalFlat5v23SUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z', + }, + accSagittalSharp5v19CDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z', + }, + accSagittalFlat5v19CUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z', + }, + accSagittalSharp23CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z', + }, + accSagittalFlat23CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z', + }, + accSagittalSharp23CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z', + }, + accSagittalFlat23CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z', + }, + accSagittalSharp5v19CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', + }, + accSagittalFlat5v19CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z', + }, + accSagittalSharp5v23SUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', + }, + accSagittalFlat5v23SDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z', + }, + accSagittalDoubleSharp5v23SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z', + }, + accSagittalDoubleFlat5v23SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z', + }, + accSagittalDoubleSharp5v19CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z', + }, + accSagittalDoubleFlat5v19CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z', + }, + accSagittalDoubleSharp23CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', + }, + accSagittalDoubleFlat23CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z', + }, + accSagittal19SchismaUp: { + x_min: 0, + x_max: 125, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z', + }, + accSagittal19SchismaDown: { + x_min: 0, + x_max: 125, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', + }, + accSagittal17KleismaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal17KleismaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal143CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z', + }, + accSagittal143CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal11v49CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z', + }, + accSagittal11v49CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z', + }, + accSagittal19CommaUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', + }, + accSagittal19CommaDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', + }, + accSagittal7v19CommaUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', + }, + accSagittal7v19CommaDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', + }, + accSagittal49SmallDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal49SmallDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal23SmallDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal23SmallDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal5v13MediumDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z', + }, + accSagittal5v13MediumDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z', + }, + accSagittal11v19MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z', + }, + accSagittal11v19MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z', + }, + accSagittal49MediumDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z', + }, + accSagittal49MediumDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z', + }, + accSagittal5v49MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z', + }, + accSagittal5v49MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z', + }, + accSagittal49LargeDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z', + }, + accSagittal49LargeDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z', + }, + accSagittal11v19LargeDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z', + }, + accSagittal11v19LargeDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z', + }, + accSagittal5v13LargeDiesisUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z', + }, + accSagittal5v13LargeDiesisDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z', + }, + accSagittalSharp23SDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z', + }, + accSagittalFlat23SUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp49SDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z', + }, + accSagittalFlat49SUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z', + }, + accSagittalSharp7v19CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z', + }, + accSagittalFlat7v19CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z', + }, + accSagittalSharp19CDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z', + }, + accSagittalFlat19CUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z', + }, + accSagittalSharp11v49CDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat11v49CUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z', + }, + accSagittalSharp143CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat143CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp17kDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z', + }, + accSagittalFlat17kUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z', + }, + accSagittalSharp19sDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z', + }, + accSagittalFlat19sUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z', + }, + accSagittalSharp19sUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z', + }, + accSagittalFlat19sDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z', + }, + accSagittalSharp17kUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat17kDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp143CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', + }, + accSagittalFlat143CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp11v49CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z', + }, + accSagittalFlat11v49CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z', + }, + accSagittalSharp19CUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat19CDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalSharp7v19CUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat7v19CDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalSharp49SUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat49SDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp23SUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat23SDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp5v13MUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z', + }, + accSagittalFlat5v13MDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z', + }, + accSagittalSharp11v19MUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat11v19MDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalSharp49MUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z', + }, + accSagittalFlat49MDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z', + }, + accSagittalSharp5v49MUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z', + }, + accSagittalFlat5v49MDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z', + }, + accSagittalSharp49LUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z', + }, + accSagittalFlat49LDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z', + }, + accSagittalSharp11v19LUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z', + }, + accSagittalFlat11v19LDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z', + }, + accSagittalSharp5v13LUp: { + x_min: 0, + x_max: 500, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat5v13LDown: { + x_min: 0, + x_max: 500, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalDoubleSharp23SDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', + }, + accSagittalDoubleFlat23SUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z', + }, + accSagittalDoubleSharp49SDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z', + }, + accSagittalDoubleFlat49SUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z', + }, + accSagittalDoubleSharp7v19CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', + }, + accSagittalDoubleFlat7v19CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z', + }, + accSagittalDoubleSharp19CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z', + }, + accSagittalDoubleFlat19CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z', + }, + accSagittalDoubleSharp11v49CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat11v49CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp143CDown: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat143CUp: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp17kDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z', + }, + accSagittalDoubleFlat17kUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z', + }, + accSagittalDoubleSharp19sDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalDoubleFlat19sUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalShaftUp: { + x_min: 0, + x_max: 31, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z', + }, + accSagittalShaftDown: { + x_min: 0, + x_max: 31, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z', + }, + accSagittalAcute: { + x_min: 0, + x_max: 125, + y_min: -62, + y_max: 125, + ha: 187, + o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z', + }, + accSagittalGrave: { + x_min: 0, + x_max: 125, + y_min: -125, + y_max: 62, + ha: 187, + o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z', + }, + accSagittal1MinaUp: { + x_min: -7, + x_max: 124, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal1MinaDown: { + x_min: -7, + x_max: 124, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal2MinasUp: { + x_min: -7, + x_max: 218, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal2MinasDown: { + x_min: -7, + x_max: 218, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal1TinaUp: { + x_min: 0, + x_max: 93, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z', + }, + accSagittal1TinaDown: { + x_min: 0, + x_max: 93, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z', + }, + accSagittal2TinasUp: { + x_min: 0, + x_max: 94, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal2TinasDown: { + x_min: 0, + x_max: 94, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z', + }, + accSagittal3TinasUp: { + x_min: -7, + x_max: 124, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal3TinasDown: { + x_min: -7, + x_max: 124, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal4TinasUp: { + x_min: 0, + x_max: 187, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', + }, + accSagittal4TinasDown: { + x_min: 0, + x_max: 187, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', + }, + accSagittal5TinasUp: { + x_min: 0, + x_max: 218, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal5TinasDown: { + x_min: 0, + x_max: 218, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', + }, + accSagittal6TinasUp: { + x_min: -7, + x_max: 218, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal6TinasDown: { + x_min: -7, + x_max: 218, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal7TinasUp: { + x_min: 0, + x_max: 281, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', + }, + accSagittal7TinasDown: { + x_min: 0, + x_max: 281, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', + }, + accSagittal8TinasUp: { + x_min: 0, + x_max: 312, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal8TinasDown: { + x_min: 0, + x_max: 312, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', + }, + accSagittal9TinasUp: { + x_min: -7, + x_max: 312, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal9TinasDown: { + x_min: -7, + x_max: 312, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittalFractionalTinaUp: { + x_min: -3, + x_max: 35, + y_min: 73, + y_max: 111, + ha: 38, + o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z', + }, + accSagittalFractionalTinaDown: { + x_min: -3, + x_max: 35, + y_min: -111, + y_max: -73, + ha: 38, + o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 164, + y_min: -194, + y_max: 421, + ha: 615, + o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 414, + y_min: -194, + y_max: 421, + ha: 615, + o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z', + }, + accidentalWilsonPlus: { + x_min: 0, + x_max: 281, + y_min: -203, + y_max: 203, + ha: 406, + o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z', + }, + accidentalWilsonMinus: { + x_min: 0, + x_max: 281, + y_min: -186, + y_max: 186, + ha: 372, + o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z', + }, + }, + fontFamily: 'Bravura', + resolution: 1000, + generatedOn: '2022-12-18T09:06:51.407Z', +}; + + +/***/ }), + +/***/ "./src/fonts/common_metrics.ts": +/*!*************************************!*\ + !*** ./src/fonts/common_metrics.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CommonMetrics": () => (/* binding */ CommonMetrics) +/* harmony export */ }); +const CommonMetrics = { + smufl: true, + stave: { + padding: 12, + endPaddingMax: 10, + endPaddingMin: 5, + unalignedNotePadding: 10, + }, + accidental: { + noteheadAccidentalPadding: 1, + leftPadding: 2, + accidentalSpacing: 3, + }, + chordSymbol: { + global: { + superscriptOffset: -400, + subscriptOffset: 300, + kerningOffset: -250, + lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], + upperKerningText: ['A', 'L'], + spacing: 100, + superSubRatio: 0.66, + }, + glyphs: { + csymDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymHalfDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymAugmented: { + leftSideBearing: 0, + advanceWidth: 530, + yOffset: 0, + }, + csymParensLeftTall: { + leftSideBearing: -20, + advanceWidth: 184, + yOffset: 250, + }, + csymParensRightTall: { + leftSideBearing: 0, + advanceWidth: 189, + yOffset: 250, + }, + csymBracketLeftTall: { + leftSideBearing: 0, + advanceWidth: 328, + yOffset: 0, + }, + csymBracketRightTall: { + leftSideBearing: 1, + advanceWidth: 600, + yOffset: 0, + }, + csymParensLeftVeryTall: { + leftSideBearing: 50, + advanceWidth: 121, + yOffset: 350, + }, + csymParensRightVeryTall: { + leftSideBearing: 0, + advanceWidth: 111, + yOffset: 350, + }, + csymDiagonalArrangementSlash: { + leftSideBearing: 250, + advanceWidth: 990, + yOffset: 300, + }, + csymMinor: { + leftSideBearing: 0, + advanceWidth: 482, + yOffset: 0, + }, + csymMajorSeventh: { + leftSideBearing: 200, + yOffset: 0, + advanceWidth: 600, + }, + accidentalSharp: { + leftSideBearing: 20, + advanceWidth: 250, + yOffset: -302, + }, + accidentalFlat: { + leftSideBearing: -20, + advanceWidth: 226, + yOffset: -184, + }, + }, + }, + clef_default: { + width: 26, + annotations: { + '8va': { + treble: { + line: -2, + shiftX: 12, + }, + }, + '8vb': { + treble: { + line: 6.5, + shiftX: 10, + }, + bass: { + line: 4, + shiftX: 1, + }, + }, + }, + }, + clef_small: { + width: 20, + annotations: { + '8va': { + treble: { + line: -0.2, + shiftX: 8, + }, + }, + '8vb': { + treble: { + line: 5.3, + shiftX: 6, + }, + bass: { + line: 3.1, + shiftX: 0.5, + }, + }, + }, + }, + ornament: { + brassScoop: { + xOffset: -12, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 20, + }, + brassDoitMedium: { + xOffset: 16, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 22, + }, + brassFallLipShort: { + xOffset: 16, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 15, + }, + brassLiftMedium: { + xOffset: 16, + yOffset: 5, + stemUpYOffset: 0, + reportedWidth: 5, + }, + brassFallRoughMedium: { + xOffset: 16, + yOffset: 28, + stemUpYOffset: 0, + reportedWidth: 5, + }, + brassBend: { + xOffset: 2, + yOffset: -8, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassMuteClosed: { + xOffset: 3, + yOffset: -8, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassMuteOpen: { + xOffset: 3, + yOffset: -7, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassFlip: { + xOffset: 10, + yOffset: 0, + stemUpYOffset: 7, + reportedWidth: 10, + }, + brassJazzTurn: { + xOffset: 0, + yOffset: 0, + stemUpYOffset: 8, + reportedWidth: 31, + }, + brassSmear: { + xOffset: 10, + yOffset: 0, + stemUpYOffset: 8, + reportedWidth: 5, + }, + }, + parenthesis: { + default: { + width: 7, + }, + gracenote: { + width: 3, + }, + }, + pedalMarking: {}, + // These are for numeric digits, such as in time signatures + digits: { + // used by TimeSignature objects + shiftLine: -1, + // used by tuplets + shiftY: -6, + }, + articulation: { + articStaccatissimoAbove: { + padding: 2, + }, + articStaccatissimoBelow: { + padding: 2, + }, + }, + tremolo: { + default: { + spacing: 7, + offsetYStemUp: -8, + offsetYStemDown: 8, + offsetXStemUp: 11, + offsetXStemDown: 1, + }, + grace: { + spacing: (7 * 3) / 5, + offsetYStemUp: -(8 * 3) / 5, + offsetYStemDown: (8 * 3) / 5, + offsetXStemUp: 7, + offsetXStemDown: 1, + }, + }, + staveRepetition: { + symbolText: { + offsetX: 12, + offsetY: 25, + spacing: 5, + }, + coda: { + offsetY: 25, + }, + segno: { + offsetY: 10, + }, + }, + noteHead: { + minPadding: 2, + }, + stem: { + heightAdjustmentForFlag: -3, + // These are stem (Y) offsets to the note heads. To shift the + // noteheads (x-position) themselves, see glyphs.notehead.custom. + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadTriangleUpBlack: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadTriangleUpWhole: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadXHalf: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadXBlack: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadXWhole: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadHalf: { + offsetYBaseStemUp: -2.55, + offsetYBaseStemDown: 2.65, + }, + noteheadBlack: { + offsetYBaseStemUp: -2, + offsetYBaseStemDown: 2, + }, + noteheadSquareWhite: { + offsetYBaseStemDown: -5, + offsetYBaseStemUp: 5, + }, + }, + }, + stringNumber: { + verticalPadding: 8, + stemPadding: 2, + leftPadding: 5, + rightPadding: 6, + }, + tuplet: { + noteHeadOffset: 20, + stemOffset: 10, + bottomLine: 4, + topModifierOffset: 15, + }, + // Values under here are used by the Glyph class to reposition and rescale + // glyphs based on their category. This should be the first stop for + // custom font glyph repositioning. + // + // The glyph loader first looks up a specific set of settings based on the + // glyph code, and if not found, uses the defaults from the category. See + // glyphs.textNote for an example of this. + // + // Details in Glyph.lookupFontMetrics. + glyphs: { + coda: { + shiftX: -7, + shiftY: 8, + }, + segno: { + shiftX: -7, + }, + flag: { + shiftX: -0.75, + staveTempo: { + shiftX: -1, + }, + }, + clef_default: {}, + clef_small: { + gClef: { + shiftY: 1.5, + }, + }, + clefNote_default: {}, + clefNote_small: {}, + stroke_straight: { + arrowheadBlackDown: { + shiftX: -4.5, + }, + arrowheadBlackUp: { + shiftX: -0.85, + }, + }, + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: -1, + shiftY: 1, + }, + arrowheadBlackUp: { + shiftX: -1, + shiftY: 1, + }, + }, + textNote: { + breathMarkTick: { + shiftY: 9, + }, + breathMarkComma: {}, + segno: { + shiftX: -7, + shiftY: 8, + }, + coda: { + shiftX: -7, + shiftY: 8, + }, + ornamentTrill: { + shiftX: -8, + shiftY: 8, + }, + ornamentTurn: {}, + ornamentTurnSlash: {}, + ornamentMordent: { + shiftX: -8, + }, + ornamentShortTrill: { + shiftX: -8, + }, + }, + noteHead: {}, + chordSymbol: { + scale: 0.8, + }, + }, +}; + + +/***/ }), + +/***/ "./src/fonts/custom_glyphs.ts": +/*!************************************!*\ + !*** ./src/fonts/custom_glyphs.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CustomFont": () => (/* binding */ CustomFont) +/* harmony export */ }); +const CustomFont = { + resolution: 1000, + fontFamily: 'VexFlowCustom', + glyphs: { + vexAccidentalMicrotonal1: { + x_min: -171.5, + x_max: 483.1875, + ha: 493, + o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ', + }, + vexAccidentalMicrotonal3: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ', + }, + vexAccidentalMicrotonal4: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ', + }, + vexNoteHeadRectBlack: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ', + }, + vexNoteHeadRectWhite: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100', + }, + vexWiggleArpeggioUp: { + x_min: 58.53125, + x_max: 228.671875, + ha: 294, + o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ', + }, + }, +}; + + +/***/ }), + +/***/ "./src/fonts/gonville_glyphs.ts": +/*!**************************************!*\ + !*** ./src/fonts/gonville_glyphs.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GonvilleSmuflFont": () => (/* binding */ GonvilleSmuflFont) +/* harmony export */ }); +const GonvilleSmuflFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 412, + y_min: -18, + y_max: 223, + ha: 241, + o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z', + }, + bracketBottom: { + x_min: 0, + x_max: 412, + y_min: -223, + y_max: 18, + ha: 241, + o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z', + }, + barlineTick: { + x_min: -59, + x_max: 59, + y_min: -139, + y_max: 139, + ha: 279, + o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z', + }, + breathMarkTick: { + x_min: -151, + x_max: 272, + y_min: 0, + y_max: 429, + ha: 429, + o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z', + }, + segno: { + x_min: 7, + x_max: 493, + y_min: -50, + y_max: 650, + ha: 699, + o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z', + }, + coda: { + x_min: 22, + x_max: 478, + y_min: -31, + y_max: 531, + ha: 563, + o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z', + }, + gClef: { + x_min: 0, + x_max: 623, + y_min: -632, + y_max: 1082, + ha: 1713, + o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z', + }, + cClef: { + x_min: 0, + x_max: 643, + y_min: -508, + y_max: 508, + ha: 1016, + o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z', + }, + fClef: { + x_min: 0, + x_max: 661, + y_min: -545, + y_max: 254, + ha: 798, + o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z', + }, + unpitchedPercussionClef1: { + x_min: -4, + x_max: 337, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 501, + y_min: -735, + y_max: 753, + ha: 1487, + o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z', + }, + timeSig0: { + x_min: 0, + x_max: 380, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z', + }, + timeSig1: { + x_min: 0, + x_max: 254, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z', + }, + timeSig2: { + x_min: 0, + x_max: 337, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z', + }, + timeSig3: { + x_min: 0, + x_max: 302, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z', + }, + timeSig4: { + x_min: 0, + x_max: 345, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z', + }, + timeSig5: { + x_min: 0, + x_max: 302, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z', + }, + timeSig6: { + x_min: 0, + x_max: 349, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z', + }, + timeSig7: { + x_min: 0, + x_max: 326, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z', + }, + timeSig8: { + x_min: 0, + x_max: 360, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z', + }, + timeSig9: { + x_min: 0, + x_max: 349, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z', + }, + timeSigCommon: { + x_min: 0, + x_max: 409, + y_min: -233, + y_max: 233, + ha: 466, + o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 409, + y_min: -394, + y_max: 394, + ha: 788, + o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 235, + y_min: -118, + y_max: 118, + ha: 235, + o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z', + }, + timeSigPlusSmall: { + x_min: 0, + x_max: 235, + y_min: -118, + y_max: 118, + ha: 235, + o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 235, + y_min: -23, + y_max: 23, + ha: 46, + o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z', + }, + timeSigParensRight: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + timeSigParensRightSmall: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + timeSigParensLeft: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + timeSigParensLeftSmall: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 663, + y_min: -174, + y_max: 174, + ha: 349, + o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 455, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 316, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 316, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 440, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 300, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 300, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 357, + y_min: -178, + y_max: 178, + ha: 357, + o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 462, + y_min: -149, + y_max: 149, + ha: 297, + o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 323, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 322, + y_min: -149, + y_max: 149, + ha: 297, + o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 462, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 322, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 322, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z', + }, + augmentationDot: { + x_min: -63, + x_max: 63, + y_min: -63, + y_max: 63, + ha: 126, + o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z', + }, + tremolo1: { + x_min: -252, + x_max: 216, + y_min: -185, + y_max: 148, + ha: 333, + o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z', + }, + flag8thUp: { + x_min: -17, + x_max: 234, + y_min: -745, + y_max: -4, + ha: 741, + o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z', + }, + flag8thDown: { + x_min: -15, + x_max: 271, + y_min: 4, + y_max: 745, + ha: 741, + o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z', + }, + flag16thUp: { + x_min: -17, + x_max: 234, + y_min: -847, + y_max: -4, + ha: 843, + o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z', + }, + flag16thDown: { + x_min: -15, + x_max: 267, + y_min: 4, + y_max: 745, + ha: 741, + o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z', + }, + flag32ndUp: { + x_min: -17, + x_max: 233, + y_min: -1005, + y_max: 96, + ha: 1101, + o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z', + }, + flag32ndDown: { + x_min: -15, + x_max: 270, + y_min: -96, + y_max: 895, + ha: 991, + o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z', + }, + flag64thUp: { + x_min: -17, + x_max: 233, + y_min: -933, + y_max: 296, + ha: 1230, + o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z', + }, + flag64thDown: { + x_min: -15, + x_max: 271, + y_min: -296, + y_max: 820, + ha: 1116, + o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z', + }, + flag128thUp: { + x_min: -17, + x_max: 231, + y_min: -987, + y_max: 496, + ha: 1484, + o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z', + }, + flag128thDown: { + x_min: -15, + x_max: 270, + y_min: -496, + y_max: 870, + ha: 1366, + o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z', + }, + accidentalFlat: { + x_min: -15, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 176, + y_min: -334, + y_max: 334, + ha: 667, + o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 239, + y_min: -388, + y_max: 388, + ha: 775, + o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 271, + y_min: -135, + y_max: 135, + ha: 271, + o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z', + }, + accidentalDoubleFlat: { + x_min: -15, + x_max: 356, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z', + }, + accidentalParensLeft: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + accidentalParensRight: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 200, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 446, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 142, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 0, + x_max: 335, + y_min: -391, + y_max: 391, + ha: 782, + o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z', + }, + accidentalBuyukMucennebFlat: { + x_min: -125, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 284, + y_min: -388, + y_max: 388, + ha: 775, + o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z', + }, + accidentalBakiyeFlat: { + x_min: -129, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 142, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 188, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z', + }, + articAccentAbove: { + x_min: -256, + x_max: 19, + y_min: -114, + y_max: 114, + ha: 227, + o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z', + }, + articAccentBelow: { + x_min: -256, + x_max: 19, + y_min: -114, + y_max: 114, + ha: 227, + o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z', + }, + articTenutoAbove: { + x_min: -154, + x_max: 154, + y_min: -15, + y_max: 15, + ha: 30, + o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z', + }, + articTenutoBelow: { + x_min: -154, + x_max: 154, + y_min: -15, + y_max: 15, + ha: 30, + o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z', + }, + articStaccatoAbove: { + x_min: -49, + x_max: 49, + y_min: -49, + y_max: 49, + ha: 99, + o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z', + }, + articStaccatoBelow: { + x_min: -49, + x_max: 49, + y_min: -49, + y_max: 49, + ha: 99, + o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z', + }, + articStaccatissimoAbove: { + x_min: -53, + x_max: 53, + y_min: 0, + y_max: 184, + ha: 184, + o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z', + }, + articStaccatissimoBelow: { + x_min: -53, + x_max: 53, + y_min: -184, + y_max: 0, + ha: 184, + o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z', + }, + articMarcatoAbove: { + x_min: -114, + x_max: 114, + y_min: -256, + y_max: 19, + ha: 275, + o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z', + }, + articMarcatoBelow: { + x_min: -114, + x_max: 114, + y_min: -19, + y_max: 256, + ha: 275, + o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z', + }, + fermataAbove: { + x_min: -324, + x_max: 324, + y_min: 0, + y_max: 353, + ha: 353, + o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataBelow: { + x_min: -324, + x_max: 324, + y_min: -353, + y_max: 0, + ha: 353, + o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataLongAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 364, + ha: 364, + o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z', + }, + fermataLongBelow: { + x_min: -286, + x_max: 286, + y_min: -364, + y_max: 0, + ha: 364, + o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataVeryLongAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 438, + ha: 438, + o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataVeryLongBelow: { + x_min: -286, + x_max: 286, + y_min: -438, + y_max: 0, + ha: 438, + o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataVeryShortAbove: { + x_min: -351, + x_max: 351, + y_min: 0, + y_max: 571, + ha: 571, + o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z', + }, + fermataVeryShortBelow: { + x_min: -351, + x_max: 351, + y_min: -571, + y_max: 0, + ha: 571, + o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z', + }, + fermataShortAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 469, + ha: 469, + o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataShortBelow: { + x_min: -286, + x_max: 286, + y_min: -469, + y_max: 0, + ha: 469, + o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 168, + y_min: -155, + y_max: 155, + ha: 311, + o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z', + }, + breathMarkUpbow: { + x_min: -125, + x_max: 125, + y_min: 0, + y_max: 409, + ha: 409, + o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z', + }, + caesura: { + x_min: 0, + x_max: 457, + y_min: -202, + y_max: 303, + ha: 504, + o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 370, + y_min: -207, + y_max: 310, + ha: 517, + o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z', + }, + restMaxima: { + x_min: 0, + x_max: 853, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 284, + y_min: 0, + y_max: 250, + ha: 250, + o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z', + }, + restWhole: { + x_min: 0, + x_max: 330, + y_min: -125, + y_max: 0, + ha: 125, + o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z', + }, + restWholeLegerLine: { + x_min: 0, + x_max: 542, + y_min: -125, + y_max: 11, + ha: 137, + o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z', + }, + restHalf: { + x_min: 0, + x_max: 330, + y_min: 0, + y_max: 125, + ha: 125, + o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z', + }, + restHalfLegerLine: { + x_min: 0, + x_max: 542, + y_min: -11, + y_max: 125, + ha: 137, + o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z', + }, + restQuarter: { + x_min: 0, + x_max: 221, + y_min: -365, + y_max: 365, + ha: 730, + o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z', + }, + rest8th: { + x_min: 0, + x_max: 258, + y_min: -197, + y_max: 219, + ha: 416, + o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z', + }, + rest16th: { + x_min: 0, + x_max: 331, + y_min: -443, + y_max: 219, + ha: 662, + o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z', + }, + rest32nd: { + x_min: 0, + x_max: 405, + y_min: -443, + y_max: 466, + ha: 909, + o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z', + }, + rest64th: { + x_min: 0, + x_max: 479, + y_min: -689, + y_max: 466, + ha: 1155, + o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z', + }, + rest128th: { + x_min: 0, + x_max: 553, + y_min: -689, + y_max: 712, + ha: 1401, + o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z', + }, + dynamicPiano: { + x_min: -39, + x_max: 378, + y_min: -178, + y_max: 277, + ha: 455, + o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z', + }, + dynamicMezzo: { + x_min: 35, + x_max: 493, + y_min: -19, + y_max: 272, + ha: 291, + o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z', + }, + dynamicForte: { + x_min: -87, + x_max: 440, + y_min: -182, + y_max: 415, + ha: 597, + o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z', + }, + dynamicRinforzando: { + x_min: 58, + x_max: 357, + y_min: 0, + y_max: 275, + ha: 275, + o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z', + }, + dynamicSforzando: { + x_min: 52, + x_max: 278, + y_min: -22, + y_max: 270, + ha: 292, + o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z', + }, + dynamicZ: { + x_min: 23, + x_max: 309, + y_min: 2, + y_max: 250, + ha: 248, + o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z', + }, + ornamentTrill: { + x_min: -249, + x_max: 249, + y_min: 0, + y_max: 376, + ha: 376, + o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z', + }, + ornamentTurn: { + x_min: -310, + x_max: 310, + y_min: -143, + y_max: 143, + ha: 286, + o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z', + }, + ornamentTurnSlash: { + x_min: -310, + x_max: 310, + y_min: -201, + y_max: 201, + ha: 402, + o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z', + }, + ornamentMordent: { + x_min: -296, + x_max: 296, + y_min: -215, + y_max: 198, + ha: 413, + o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z', + }, + ornamentShortTrill: { + x_min: -296, + x_max: 296, + y_min: -127, + y_max: 127, + ha: 253, + o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z', + }, + ornamentTremblement: { + x_min: -419, + x_max: 419, + y_min: -127, + y_max: 127, + ha: 253, + o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z', + }, + ornamentPrecompAppoggTrill: { + x_min: -419, + x_max: 419, + y_min: -127, + y_max: 255, + ha: 381, + o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: -433, + x_max: 433, + y_min: -243, + y_max: 127, + ha: 370, + o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: -433, + x_max: 433, + y_min: -243, + y_max: 198, + ha: 442, + o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: -433, + x_max: 433, + y_min: -127, + y_max: 244, + ha: 370, + o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: -439, + x_max: 439, + y_min: -127, + y_max: 236, + ha: 363, + o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: -439, + x_max: 439, + y_min: -215, + y_max: 236, + ha: 451, + o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: -439, + x_max: 439, + y_min: -236, + y_max: 127, + ha: 362, + o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z', + }, + stringsDownBow: { + x_min: -168, + x_max: 168, + y_min: 0, + y_max: 353, + ha: 353, + o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z', + }, + stringsUpBow: { + x_min: -110, + x_max: 110, + y_min: 0, + y_max: 277, + ha: 277, + o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z', + }, + stringsHarmonic: { + x_min: -82, + x_max: 82, + y_min: -82, + y_max: 82, + ha: 163, + o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: -110, + x_max: 110, + y_min: -110, + y_max: 205, + ha: 315, + o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: -110, + x_max: 110, + y_min: -205, + y_max: 110, + ha: 315, + o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z', + }, + pluckedLeftHandPizzicato: { + x_min: -155, + x_max: 155, + y_min: -157, + y_max: 157, + ha: 315, + o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 782, + y_min: -1, + y_max: 500, + ha: 501, + o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 435, + y_min: 65, + y_max: 500, + ha: 435, + o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z', + }, + pictChokeCymbal: { + x_min: 0, + x_max: 168, + y_min: -155, + y_max: 155, + ha: 311, + o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z', + }, + wiggleArpeggiatoUp: { + x_min: -8, + x_max: 269, + y_min: 0, + y_max: 126, + ha: 126, + o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z', + }, + arrowheadBlackUp: { + x_min: 11, + x_max: 239, + y_min: -6, + y_max: 269, + ha: 275, + o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z', + }, + arrowheadBlackDown: { + x_min: 11, + x_max: 239, + y_min: 6, + y_max: 281, + ha: 275, + o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z', + }, + }, + fontFamily: 'GonvilleSmufl', + resolution: 1000, + generatedOn: '2023-04-20T22:11:26.009Z', +}; + + +/***/ }), + +/***/ "./src/fonts/leland_glyphs.ts": +/*!************************************!*\ + !*** ./src/fonts/leland_glyphs.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "LelandFont": () => (/* binding */ LelandFont) +/* harmony export */ }); +const LelandFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 491, + y_min: 0, + y_max: 279, + ha: 279, + o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z', + }, + bracketBottom: { + x_min: 0, + x_max: 491, + y_min: -279, + y_max: 0, + ha: 279, + o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z', + }, + segno: { + x_min: 0, + x_max: 654, + y_min: 0, + y_max: 869, + ha: 869, + o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z', + }, + coda: { + x_min: 0, + x_max: 745, + y_min: -113, + y_max: 735, + ha: 848, + o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z', + }, + gClef: { + x_min: 0, + x_max: 640, + y_min: -666, + y_max: 1112, + ha: 1778, + o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z', + }, + cClef: { + x_min: 0, + x_max: 627, + y_min: -480, + y_max: 482, + ha: 962, + o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z', + }, + fClef: { + x_min: 0, + x_max: 664, + y_min: -617, + y_max: 251, + ha: 868, + o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 352, + y_min: -252, + y_max: 252, + ha: 504, + o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 439, + y_min: -743, + y_max: 746, + ha: 1489, + o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z', + }, + timeSig0: { + x_min: 15, + x_max: 389, + y_min: -254, + y_max: 255, + ha: 509, + o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z', + }, + timeSig1: { + x_min: 15, + x_max: 336, + y_min: -243, + y_max: 245, + ha: 488, + o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z', + }, + timeSig2: { + x_min: 15, + x_max: 377, + y_min: -243, + y_max: 245, + ha: 488, + o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z', + }, + timeSig3: { + x_min: 15, + x_max: 364, + y_min: -244, + y_max: 244, + ha: 488, + o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z', + }, + timeSig4: { + x_min: 14, + x_max: 442, + y_min: -248, + y_max: 249, + ha: 497, + o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z', + }, + timeSig5: { + x_min: 15, + x_max: 362, + y_min: -244, + y_max: 246, + ha: 490, + o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z', + }, + timeSig6: { + x_min: 15, + x_max: 387, + y_min: -244, + y_max: 245, + ha: 489, + o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z', + }, + timeSig7: { + x_min: 15, + x_max: 366, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z', + }, + timeSig8: { + x_min: 15, + x_max: 393, + y_min: -248, + y_max: 246, + ha: 494, + o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z', + }, + timeSig9: { + x_min: 15, + x_max: 387, + y_min: -244, + y_max: 245, + ha: 489, + o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z', + }, + timeSigCommon: { + x_min: 0, + x_max: 463, + y_min: -256, + y_max: 258, + ha: 514, + o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 463, + y_min: -376, + y_max: 388, + ha: 764, + o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 408, + y_min: -204, + y_max: 204, + ha: 408, + o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 538, + y_min: -178, + y_max: 179, + ha: 357, + o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 373, + y_min: -134, + y_max: 136, + ha: 270, + o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 325, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 325, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 325, + y_min: -132, + y_max: 132, + ha: 264, + o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 325, + y_min: -162, + y_max: 163, + ha: 325, + o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 432, + y_min: -179, + y_max: 177, + ha: 356, + o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 310, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 223 176 l 0 -196 l 446 -196 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: -66, + x_max: 456, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z', + }, + noteheadSlashedWhole1: { + x_min: -75, + x_max: 448, + y_min: -211, + y_max: 214, + ha: 425, + o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z', + }, + noteheadSlashedHalf1: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z', + }, + noteheadSlashedBlack1: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: -66, + x_max: 456, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z', + }, + noteheadSlashedWhole2: { + x_min: -75, + x_max: 448, + y_min: -212, + y_max: 214, + ha: 426, + o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z', + }, + noteheadSlashedHalf2: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z', + }, + noteheadSlashedBlack2: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 373, + y_min: -178, + y_max: 179, + ha: 357, + o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 373, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 335, + y_min: -132, + y_max: 133, + ha: 265, + o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 335, + y_min: -132, + y_max: 133, + ha: 265, + o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z', + }, + noteheadParenthesisRight: { + x_min: 0, + x_max: 75, + y_min: -209, + y_max: 212, + ha: 421, + o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 75, + y_min: -212, + y_max: 209, + ha: 421, + o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 339, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 0 176 l 0 -196 l 488 -196 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 339, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 488 176 l 0 -196 l 488 -196 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 310, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z', + }, + augmentationDot: { + x_min: 0, + x_max: 100, + y_min: -50, + y_max: 50, + ha: 100, + o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z', + }, + tremolo1: { + x_min: 0, + x_max: 290, + y_min: -93, + y_max: 96, + ha: 189, + o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z', + }, + flag8thUp: { + x_min: 0, + x_max: 289, + y_min: -817, + y_max: 12, + ha: 829, + o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z', + }, + flag8thDown: { + x_min: 0, + x_max: 309, + y_min: -12, + y_max: 817, + ha: 829, + o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z', + }, + flag16thUp: { + x_min: 0, + x_max: 279, + y_min: -820, + y_max: 12, + ha: 832, + o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z', + }, + flag16thDown: { + x_min: 0, + x_max: 309, + y_min: -26, + y_max: 803, + ha: 829, + o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 279, + y_min: -821, + y_max: 186, + ha: 1007, + o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z', + }, + flag32ndDown: { + x_min: 0, + x_max: 309, + y_min: -216, + y_max: 803, + ha: 1019, + o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', + }, + flag64thUp: { + x_min: 0, + x_max: 279, + y_min: -822, + y_max: 373, + ha: 1195, + o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z', + }, + flag64thDown: { + x_min: 0, + x_max: 309, + y_min: -403, + y_max: 804, + ha: 1207, + o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z', + }, + flag128thUp: { + x_min: 0, + x_max: 279, + y_min: -821, + y_max: 573, + ha: 1394, + o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z', + }, + flag128thDown: { + x_min: 0, + x_max: 309, + y_min: -591, + y_max: 803, + ha: 1394, + o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z', + }, + accidentalFlat: { + x_min: 0, + x_max: 203, + y_min: -176, + y_max: 453, + ha: 629, + o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 171, + y_min: -323, + y_max: 325, + ha: 648, + o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 244, + y_min: -333, + y_max: 334, + ha: 667, + o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 275, + y_min: -137, + y_max: 138, + ha: 275, + o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 371, + y_min: -176, + y_max: 453, + ha: 629, + o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 75, + y_min: -212, + y_max: 209, + ha: 421, + o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 75, + y_min: -209, + y_max: 212, + ha: 421, + o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 193, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 422, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 180, + y_min: -316, + y_max: 320, + ha: 636, + o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 0, + x_max: 290, + y_min: -328, + y_max: 339, + ha: 667, + o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 0, + x_max: 277, + y_min: -176, + y_max: 454, + ha: 630, + o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 348, + y_min: -332, + y_max: 334, + ha: 666, + o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z', + }, + accidentalBakiyeFlat: { + x_min: 0, + x_max: 277, + y_min: -176, + y_max: 454, + ha: 630, + o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 348, + y_min: -316, + y_max: 318, + ha: 634, + o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 361, + y_min: 0, + y_max: 235, + ha: 235, + o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 361, + y_min: -235, + y_max: 0, + ha: 235, + o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z', + }, + articTenutoAbove: { + x_min: 0, + x_max: 316, + y_min: 0, + y_max: 46, + ha: 46, + o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z', + }, + articTenutoBelow: { + x_min: 0, + x_max: 316, + y_min: -46, + y_max: 0, + ha: 46, + o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z', + }, + articStaccatoAbove: { + x_min: 0, + x_max: 78, + y_min: 0, + y_max: 78, + ha: 78, + o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z', + }, + articStaccatoBelow: { + x_min: 0, + x_max: 78, + y_min: -78, + y_max: 0, + ha: 78, + o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z', + }, + articStaccatissimoAbove: { + x_min: 0, + x_max: 127, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z', + }, + articStaccatissimoBelow: { + x_min: 0, + x_max: 127, + y_min: -248, + y_max: 0, + ha: 248, + o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z', + }, + articMarcatoAbove: { + x_min: 1, + x_max: 296, + y_min: 0, + y_max: 253, + ha: 253, + o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z', + }, + articMarcatoBelow: { + x_min: 0, + x_max: 295, + y_min: -253, + y_max: 0, + ha: 253, + o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z', + }, + fermataAbove: { + x_min: 0, + x_max: 622, + y_min: 0, + y_max: 368, + ha: 368, + o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z', + }, + fermataBelow: { + x_min: 0, + x_max: 622, + y_min: -368, + y_max: 0, + ha: 368, + o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 623, + y_min: 0, + y_max: 368, + ha: 368, + o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 623, + y_min: -368, + y_max: 0, + ha: 368, + o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 842, + y_min: 0, + y_max: 549, + ha: 549, + o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 842, + y_min: -549, + y_max: 0, + ha: 549, + o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 642, + y_min: 0, + y_max: 454, + ha: 454, + o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 642, + y_min: -454, + y_max: 0, + ha: 454, + o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 191, + y_min: 0, + y_max: 321, + ha: 321, + o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z', + }, + caesura: { + x_min: 0, + x_max: 380, + y_min: 0, + y_max: 490, + ha: 490, + o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 368, + y_min: 0, + y_max: 491, + ha: 491, + o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z', + }, + restMaxima: { + x_min: 0, + x_max: 450, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 125, + y_min: -11, + y_max: 262, + ha: 273, + o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z', + }, + restWhole: { + x_min: 0, + x_max: 325, + y_min: -131, + y_max: 5, + ha: 136, + o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z', + }, + restWholeLegerLine: { + x_min: -139, + x_max: 464, + y_min: -122, + y_max: 14, + ha: 136, + o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z', + }, + restHalf: { + x_min: 0, + x_max: 325, + y_min: -4, + y_max: 132, + ha: 136, + o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z', + }, + restHalfLegerLine: { + x_min: -139, + x_max: 464, + y_min: -14, + y_max: 122, + ha: 136, + o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z', + }, + restQuarter: { + x_min: 0, + x_max: 235, + y_min: -331, + y_max: 401, + ha: 732, + o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z', + }, + rest8th: { + x_min: 0, + x_max: 276, + y_min: -255, + y_max: 204, + ha: 459, + o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z', + }, + rest16th: { + x_min: 1, + x_max: 344, + y_min: -507, + y_max: 204, + ha: 711, + o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z', + }, + rest32nd: { + x_min: 0, + x_max: 391, + y_min: -507, + y_max: 460, + ha: 967, + o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z', + }, + rest64th: { + x_min: 0, + x_max: 423, + y_min: -758, + y_max: 464, + ha: 1222, + o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z', + }, + rest128th: { + x_min: -1, + x_max: 475, + y_min: -759, + y_max: 717, + ha: 1476, + o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z', + }, + dynamicPiano: { + x_min: -95, + x_max: 317, + y_min: -163, + y_max: 263, + ha: 426, + o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z', + }, + dynamicMezzo: { + x_min: -7, + x_max: 374, + y_min: -2, + y_max: 251, + ha: 253, + o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z', + }, + dynamicForte: { + x_min: -137, + x_max: 334, + y_min: -193, + y_max: 421, + ha: 614, + o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z', + }, + dynamicRinforzando: { + x_min: -12, + x_max: 230, + y_min: 0, + y_max: 254, + ha: 254, + o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 208, + y_min: -5, + y_max: 263, + ha: 268, + o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z', + }, + dynamicZ: { + x_min: -42, + x_max: 239, + y_min: -1, + y_max: 258, + ha: 259, + o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z', + }, + ornamentTrill: { + x_min: -12, + x_max: 383, + y_min: 0, + y_max: 383, + ha: 383, + o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 456, + y_min: 0, + y_max: 232, + ha: 232, + o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 456, + y_min: -80, + y_max: 313, + ha: 393, + o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', + }, + ornamentMordent: { + x_min: 0, + x_max: 473, + y_min: -77, + y_max: 316, + ha: 393, + o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z', + }, + ornamentTremblement: { + x_min: 0, + x_max: 654, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 680, + y_min: 0, + y_max: 388, + ha: 388, + o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 0, + x_max: 662, + y_min: -158, + y_max: 248, + ha: 406, + o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 662, + y_min: -158, + y_max: 321, + ha: 479, + o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 662, + y_min: 0, + y_max: 406, + ha: 406, + o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 857, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 565, + y_min: -171, + y_max: 249, + ha: 420, + o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 312, + y_min: 0, + y_max: 312, + ha: 312, + o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z', + }, + brassMuteOpen: { + x_min: 0, + x_max: 280, + y_min: 0, + y_max: 280, + ha: 280, + o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 315, + y_min: 0, + y_max: 293, + ha: 293, + o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z', + }, + stringsUpBow: { + x_min: 0, + x_max: 262, + y_min: 0, + y_max: 343, + ha: 343, + o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 181, + y_min: 0, + y_max: 181, + ha: 181, + o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 269, + y_min: 0, + y_max: 389, + ha: 389, + o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 269, + y_min: 0, + y_max: 389, + ha: 389, + o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 981, + y_min: -10, + y_max: 545, + ha: 555, + o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 473, + ha: 473, + o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z', + }, + wiggleArpeggiatoUp: { + x_min: -22, + x_max: 242, + y_min: 0, + y_max: 164, + ha: 164, + o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 481, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 735, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1243, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 481, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z', + }, + csymDiminished: { + x_min: 0, + x_max: 501, + y_min: 0, + y_max: 501, + ha: 501, + o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z', + }, + csymHalfDiminished: { + x_min: -1, + x_max: 502, + y_min: -1, + y_max: 502, + ha: 503, + o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z', + }, + csymAugmented: { + x_min: 1, + x_max: 321, + y_min: 90, + y_max: 410, + ha: 320, + o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 500, + y_min: 10, + y_max: 490, + ha: 480, + o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 160, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 416, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', + }, + }, + fontFamily: 'Leland', + resolution: 1000, + generatedOn: '2022-12-19T23:52:37.756Z', +}; + + +/***/ }), + +/***/ "./src/fonts/load_all.ts": +/*!*******************************!*\ + !*** ./src/fonts/load_all.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadAllMusicFonts": () => (/* binding */ loadAllMusicFonts) +/* harmony export */ }); +/* harmony import */ var _load_bravura__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./load_bravura */ "./src/fonts/load_bravura.ts"); +/* harmony import */ var _load_custom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./load_custom */ "./src/fonts/load_custom.ts"); +/* harmony import */ var _load_gonville__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load_gonville */ "./src/fonts/load_gonville.ts"); +/* harmony import */ var _load_leland__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./load_leland */ "./src/fonts/load_leland.ts"); +/* harmony import */ var _load_petaluma__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load_petaluma */ "./src/fonts/load_petaluma.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// vexflow.js statically bundles & preloads all of our music engraving fonts. + + + + + +// ADD_MUSIC_FONT +// import { loadXXX } from './load_xxx'; +// Populate our font "database" with all our music fonts. +function loadAllMusicFonts() { + (0,_load_bravura__WEBPACK_IMPORTED_MODULE_0__.loadBravura)(); + (0,_load_gonville__WEBPACK_IMPORTED_MODULE_2__.loadGonville)(); + (0,_load_petaluma__WEBPACK_IMPORTED_MODULE_4__.loadPetaluma)(); + (0,_load_custom__WEBPACK_IMPORTED_MODULE_1__.loadCustom)(); + (0,_load_leland__WEBPACK_IMPORTED_MODULE_3__.loadLeland)(); + // ADD_MUSIC_FONT + // loadXXX(); +} + + +/***/ }), + +/***/ "./src/fonts/load_bravura.ts": +/*!***********************************!*\ + !*** ./src/fonts/load_bravura.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadBravura": () => (/* binding */ loadBravura) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bravura_glyphs */ "./src/fonts/bravura_glyphs.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base. +// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts +// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js). +// ADD_MUSIC_FONT +// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts. +// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts. +// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js +// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary. + + + +function loadBravura() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Bravura', _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__.BravuraFont, _common_metrics__WEBPACK_IMPORTED_MODULE_2__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_custom.ts": +/*!**********************************!*\ + !*** ./src/fonts/load_custom.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadCustom": () => (/* binding */ loadCustom) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./custom_glyphs */ "./src/fonts/custom_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +function loadCustom() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Custom', _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__.CustomFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_gonville.ts": +/*!************************************!*\ + !*** ./src/fonts/load_gonville.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadGonville": () => (/* binding */ loadGonville) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gonville_glyphs */ "./src/fonts/gonville_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +function loadGonville() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Gonville', _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__.GonvilleSmuflFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_leland.ts": +/*!**********************************!*\ + !*** ./src/fonts/load_leland.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadLeland": () => (/* binding */ loadLeland) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./leland_glyphs */ "./src/fonts/leland_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +function loadLeland() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Leland', _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__.LelandFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_petaluma.ts": +/*!************************************!*\ + !*** ./src/fonts/load_petaluma.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadPetaluma": () => (/* binding */ loadPetaluma) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petaluma_glyphs */ "./src/fonts/petaluma_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +const petalumaChordMetrics = { + csymDiminished: { + leftSideBearing: -95, + advanceWidth: 506, + yOffset: 0, + }, + csymHalfDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymAugmented: { + leftSideBearing: -25, + advanceWidth: 530, + yOffset: 0, + }, + csymParensLeftTall: { + leftSideBearing: 0, + advanceWidth: 155, + yOffset: 150, + }, + csymParensRightTall: { + leftSideBearing: 40, + advanceWidth: 189, + yOffset: 150, + }, + csymBracketLeftTall: { + leftSideBearing: 0, + advanceWidth: 328, + yOffset: 0, + }, + csymBracketRightTall: { + leftSideBearing: 1, + advanceWidth: 600, + yOffset: 0, + }, + csymParensLeftVeryTall: { + leftSideBearing: 0, + advanceWidth: 210, + yOffset: 250, + }, + csymParensRightVeryTall: { + leftSideBearing: -100, + advanceWidth: 111, + yOffset: 250, + }, + csymDiagonalArrangementSlash: { + leftSideBearing: -1, + advanceWidth: 990, + yOffset: 0, + }, + csymMinor: { + leftSideBearing: 0, + advanceWidth: 482, + yOffset: 0, + }, + csymMajorSeventh: { + leftSideBearing: 100, + yOffset: 0, + advanceWidth: 600, + }, + accidentalSharp: { + leftSideBearing: 0, + advanceWidth: 425, + yOffset: -422, + }, + accidentalFlat: { + leftSideBearing: -10, + advanceWidth: 228, + yOffset: -284, + }, +}; +function loadPetaluma() { + const metrics = JSON.parse(JSON.stringify(_common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics)); + const chordMetrics = metrics.chordSymbol; + if (chordMetrics) { + chordMetrics.glyphs = petalumaChordMetrics; + } + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Petaluma', _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaFont, metrics); +} + + +/***/ }), + +/***/ "./src/fonts/petaluma_glyphs.ts": +/*!**************************************!*\ + !*** ./src/fonts/petaluma_glyphs.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PetalumaFont": () => (/* binding */ PetalumaFont) +/* harmony export */ }); +const PetalumaFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 508, + y_min: 0, + y_max: 370, + ha: 370, + o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z', + }, + bracketBottom: { + x_min: 0, + x_max: 496, + y_min: -393, + y_max: 0, + ha: 393, + o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z', + }, + barlineTick: { + x_min: 0, + x_max: 56, + y_min: 877, + y_max: 1122, + ha: 245, + o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z', + }, + breathMarkTick: { + x_min: 0, + x_max: 568, + y_min: 0, + y_max: 621, + ha: 621, + o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z', + }, + segno: { + x_min: 0, + x_max: 798, + y_min: -65, + y_max: 806, + ha: 871, + o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z', + }, + coda: { + x_min: 0, + x_max: 1380, + y_min: -196, + y_max: 1037, + ha: 1233, + o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z', + }, + gClef: { + x_min: 0, + x_max: 664, + y_min: -559, + y_max: 1009, + ha: 1568, + o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z', + }, + cClef: { + x_min: 0, + x_max: 731, + y_min: -543, + y_max: 543, + ha: 1086, + o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z', + }, + fClef: { + x_min: 0, + x_max: 776, + y_min: -496, + y_max: 216, + ha: 712, + o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 379, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 438, + y_min: -768, + y_max: 767, + ha: 1535, + o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z', + }, + timeSig0: { + x_min: 20, + x_max: 513, + y_min: -358, + y_max: 359, + ha: 717, + o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z', + }, + timeSig1: { + x_min: 20, + x_max: 283, + y_min: -364, + y_max: 366, + ha: 730, + o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z', + }, + timeSig2: { + x_min: 20, + x_max: 660, + y_min: -379, + y_max: 382, + ha: 761, + o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z', + }, + timeSig3: { + x_min: 20, + x_max: 540, + y_min: -392, + y_max: 392, + ha: 784, + o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z', + }, + timeSig4: { + x_min: 20, + x_max: 633, + y_min: -490, + y_max: 491, + ha: 981, + o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z', + }, + timeSig5: { + x_min: 20, + x_max: 583, + y_min: -389, + y_max: 389, + ha: 778, + o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z', + }, + timeSig6: { + x_min: 20, + x_max: 565, + y_min: -363, + y_max: 363, + ha: 726, + o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z', + }, + timeSig7: { + x_min: 20, + x_max: 592, + y_min: -345, + y_max: 345, + ha: 690, + o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z', + }, + timeSig8: { + x_min: 20, + x_max: 504, + y_min: -428, + y_max: 428, + ha: 856, + o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z', + }, + timeSig9: { + x_min: 20, + x_max: 494, + y_min: -421, + y_max: 421, + ha: 842, + o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z', + }, + timeSigCommon: { + x_min: 20, + x_max: 585, + y_min: -298, + y_max: 294, + ha: 592, + o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z', + }, + timeSigCutCommon: { + x_min: 20, + x_max: 695, + y_min: -687, + y_max: 687, + ha: 1374, + o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 661, + y_min: -358, + y_max: 358, + ha: 716, + o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z', + }, + timeSigPlusSmall: { + x_min: 0, + x_max: 418, + y_min: -197, + y_max: 199, + ha: 396, + o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 662, + y_min: -54, + y_max: 55, + ha: 109, + o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z', + }, + timeSigParensRight: { + x_min: 0, + x_max: 274, + y_min: -723, + y_max: 725, + ha: 1448, + o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z', + }, + timeSigParensRightSmall: { + x_min: 0, + x_max: 154, + y_min: -422, + y_max: 422, + ha: 844, + o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z', + }, + timeSigParensLeft: { + x_min: 1, + x_max: 400, + y_min: -728, + y_max: 728, + ha: 1456, + o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z', + }, + timeSigParensLeftSmall: { + x_min: 0, + x_max: 173, + y_min: -405, + y_max: 404, + ha: 809, + o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 614, + y_min: -223, + y_max: 223, + ha: 446, + o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 380, + y_min: -186, + y_max: 165, + ha: 351, + o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 334, + y_min: -174, + y_max: 175, + ha: 349, + o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 334, + y_min: -164, + y_max: 164, + ha: 328, + o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z', + }, + noteheadXDoubleWhole: { + x_min: 0, + x_max: 730, + y_min: -266, + y_max: 267, + ha: 533, + o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 506, + y_min: -143, + y_max: 144, + ha: 287, + o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 421, + y_min: -146, + y_max: 151, + ha: 297, + o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 289, + y_min: -156, + y_max: 157, + ha: 313, + o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z', + }, + noteheadCircleXDoubleWhole: { + x_min: 0, + x_max: 437, + y_min: -220, + y_max: 219, + ha: 439, + o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z', + }, + noteheadCircleXWhole: { + x_min: 0, + x_max: 323, + y_min: -190, + y_max: 184, + ha: 374, + o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z', + }, + noteheadCircleXHalf: { + x_min: 0, + x_max: 309, + y_min: -179, + y_max: 179, + ha: 358, + o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 344, + y_min: -179, + y_max: 175, + ha: 354, + o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z', + }, + noteheadCircledDoubleWhole: { + x_min: 0, + x_max: 672, + y_min: -291, + y_max: 291, + ha: 582, + o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z', + }, + noteheadCircledWhole: { + x_min: -50, + x_max: 472, + y_min: -231, + y_max: 232, + ha: 463, + o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z', + }, + noteheadCircledHalf: { + x_min: -50, + x_max: 393, + y_min: -175, + y_max: 175, + ha: 350, + o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z', + }, + noteheadCircledBlack: { + x_min: -70, + x_max: 326, + y_min: -168, + y_max: 192, + ha: 360, + o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 474, + y_min: -209, + y_max: 211, + ha: 420, + o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 350, + y_min: -131, + y_max: 131, + ha: 262, + o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 342, + y_min: -130, + y_max: 132, + ha: 262, + o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z', + }, + noteheadTriangleDownDoubleWhole: { + x_min: 0, + x_max: 510, + y_min: -213, + y_max: 213, + ha: 426, + o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z', + }, + noteheadTriangleDownWhole: { + x_min: 0, + x_max: 366, + y_min: -145, + y_max: 138, + ha: 283, + o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z', + }, + noteheadTriangleDownHalf: { + x_min: 0, + x_max: 341, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z', + }, + noteheadTriangleDownBlack: { + x_min: 0, + x_max: 346, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z', + }, + noteheadTriangleUpDoubleWhole: { + x_min: 0, + x_max: 510, + y_min: -213, + y_max: 213, + ha: 426, + o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 366, + y_min: -145, + y_max: 138, + ha: 283, + o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 341, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 346, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: 0, + x_max: 697, + y_min: -290, + y_max: 290, + ha: 580, + o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z', + }, + noteheadSlashedWhole1: { + x_min: -76, + x_max: 498, + y_min: -168, + y_max: 168, + ha: 336, + o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z', + }, + noteheadSlashedHalf1: { + x_min: -79, + x_max: 471, + y_min: -184, + y_max: 184, + ha: 368, + o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z', + }, + noteheadSlashedBlack1: { + x_min: -110, + x_max: 452, + y_min: -190, + y_max: 190, + ha: 380, + o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: 0, + x_max: 697, + y_min: -295, + y_max: 295, + ha: 590, + o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z', + }, + noteheadSlashedWhole2: { + x_min: -83, + x_max: 510, + y_min: -201, + y_max: 198, + ha: 399, + o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z', + }, + noteheadSlashedHalf2: { + x_min: -73, + x_max: 454, + y_min: -188, + y_max: 188, + ha: 376, + o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z', + }, + noteheadSlashedBlack2: { + x_min: -84, + x_max: 405, + y_min: -189, + y_max: 189, + ha: 378, + o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 429, + y_min: -221, + y_max: 221, + ha: 442, + o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 271, + y_min: -132, + y_max: 132, + ha: 264, + o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 295, + y_min: -148, + y_max: 148, + ha: 296, + o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 310, + y_min: -146, + y_max: 146, + ha: 292, + o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z', + }, + noteheadParenthesis: { + x_min: -70, + x_max: 329, + y_min: -196, + y_max: 201, + ha: 397, + o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z', + }, + noteheadParenthesisRight: { + x_min: -30, + x_max: 82, + y_min: -199, + y_max: 206, + ha: 405, + o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 106, + y_min: -197, + y_max: 197, + ha: 394, + o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 328, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 391, + y_min: -142, + y_max: 142, + ha: 284, + o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 398, + y_min: -139, + y_max: 140, + ha: 279, + o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 334, + y_min: -134, + y_max: 136, + ha: 270, + o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z', + }, + augmentationDot: { + x_min: 0, + x_max: 96, + y_min: -57, + y_max: 57, + ha: 114, + o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z', + }, + tremolo1: { + x_min: -158, + x_max: 156, + y_min: -88, + y_max: 88, + ha: 176, + o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z', + }, + flag8thUp: { + x_min: 0, + x_max: 261, + y_min: -819, + y_max: 0, + ha: 819, + o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z', + }, + flag8thDown: { + x_min: 0, + x_max: 261, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z', + }, + flag16thUp: { + x_min: 0, + x_max: 327, + y_min: -819, + y_max: 0, + ha: 819, + o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z', + }, + flag16thDown: { + x_min: 0, + x_max: 327, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 268, + y_min: -849, + y_max: 149, + ha: 999, + o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z', + }, + flag32ndDown: { + x_min: -3, + x_max: 268, + y_min: -169, + y_max: 829, + ha: 999, + o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z', + }, + flag64thUp: { + x_min: -4, + x_max: 282, + y_min: -824, + y_max: 347, + ha: 1171, + o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z', + }, + flag64thDown: { + x_min: -5, + x_max: 281, + y_min: -375, + y_max: 796, + ha: 1171, + o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z', + }, + flag128thUp: { + x_min: 0, + x_max: 252, + y_min: -804, + y_max: 530, + ha: 1334, + o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z', + }, + flag128thDown: { + x_min: -1, + x_max: 252, + y_min: -580, + y_max: 754, + ha: 1334, + o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z', + }, + accidentalFlat: { + x_min: 1, + x_max: 209, + y_min: -208, + y_max: 472, + ha: 680, + o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 214, + y_min: -456, + y_max: 462, + ha: 918, + o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z', + }, + accidentalSharp: { + x_min: -22, + x_max: 390, + y_min: -384, + y_max: 383, + ha: 767, + o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 287, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 359, + y_min: -220, + y_max: 446, + ha: 666, + o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 130, + y_min: -270, + y_max: 268, + ha: 538, + o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 139, + y_min: -275, + y_max: 277, + ha: 552, + o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 208, + y_min: -240, + y_max: 440, + ha: 680, + o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 422, + y_min: -240, + y_max: 440, + ha: 680, + o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 300, + y_min: -338, + y_max: 351, + ha: 689, + o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: -23, + x_max: 388, + y_min: -373, + y_max: 445, + ha: 818, + o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 2, + x_max: 287, + y_min: -248, + y_max: 432, + ha: 680, + o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z', + }, + accidentalBuyukMucennebSharp: { + x_min: -1, + x_max: 467, + y_min: -460, + y_max: 350, + ha: 810, + o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z', + }, + accidentalBakiyeFlat: { + x_min: 2, + x_max: 287, + y_min: -236, + y_max: 444, + ha: 680, + o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 300, + y_min: -338, + y_max: 351, + ha: 689, + o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 359, + y_min: -420, + y_max: 343, + ha: 763, + o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z', + }, + accidentalKoron: { + x_min: 0, + x_max: 303, + y_min: -462, + y_max: 180, + ha: 642, + o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z', + }, + accidentalSori: { + x_min: 0, + x_max: 434, + y_min: -295, + y_max: 325, + ha: 620, + o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 425, + y_min: 0, + y_max: 326, + ha: 326, + o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 425, + y_min: -326, + y_max: 0, + ha: 326, + o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z', + }, + articTenutoAbove: { + x_min: 0, + x_max: 471, + y_min: 0, + y_max: 56, + ha: 56, + o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z', + }, + articTenutoBelow: { + x_min: 0, + x_max: 471, + y_min: -59, + y_max: -3, + ha: 56, + o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z', + }, + articStaccatoAbove: { + x_min: 1, + x_max: 112, + y_min: 0, + y_max: 156, + ha: 156, + o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z', + }, + articStaccatoBelow: { + x_min: 1, + x_max: 112, + y_min: -156, + y_max: 0, + ha: 156, + o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z', + }, + articStaccatissimoAbove: { + x_min: 0, + x_max: 139, + y_min: 0, + y_max: 411, + ha: 411, + o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z', + }, + articStaccatissimoBelow: { + x_min: 0, + x_max: 139, + y_min: -411, + y_max: 0, + ha: 411, + o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z', + }, + articMarcatoAbove: { + x_min: 0, + x_max: 396, + y_min: 0, + y_max: 328, + ha: 328, + o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z', + }, + articMarcatoBelow: { + x_min: 0, + x_max: 396, + y_min: -328, + y_max: 0, + ha: 328, + o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z', + }, + fermataAbove: { + x_min: 0, + x_max: 472, + y_min: 2, + y_max: 454, + ha: 452, + o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z', + }, + fermataBelow: { + x_min: 0, + x_max: 519, + y_min: -430, + y_max: -1, + ha: 429, + o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 591, + y_min: -6, + y_max: 337, + ha: 343, + o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 602, + y_min: -335, + y_max: 7, + ha: 342, + o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 715, + y_min: -14, + y_max: 437, + ha: 451, + o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 686, + y_min: -427, + y_max: 30, + ha: 457, + o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z', + }, + fermataVeryShortAbove: { + x_min: 0, + x_max: 711, + y_min: -31, + y_max: 496, + ha: 527, + o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z', + }, + fermataVeryShortBelow: { + x_min: 0, + x_max: 697, + y_min: -475, + y_max: 13, + ha: 488, + o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 545, + y_min: -18, + y_max: 348, + ha: 366, + o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 565, + y_min: -335, + y_max: 10, + ha: 345, + o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 148, + y_min: 0, + y_max: 275, + ha: 275, + o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z', + }, + breathMarkUpbow: { + x_min: 0, + x_max: 254, + y_min: 0, + y_max: 595, + ha: 595, + o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z', + }, + caesura: { + x_min: 0, + x_max: 566, + y_min: 0, + y_max: 562, + ha: 563, + o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 386, + y_min: -10, + y_max: 584, + ha: 594, + o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z', + }, + restMaxima: { + x_min: 0, + x_max: 366, + y_min: -255, + y_max: 255, + ha: 510, + o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 122, + y_min: 0, + y_max: 249, + ha: 249, + o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z', + }, + restWhole: { + x_min: 1, + x_max: 500, + y_min: -120, + y_max: 14, + ha: 134, + o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z', + }, + restWholeLegerLine: { + x_min: -197, + x_max: 685, + y_min: -157, + y_max: 29, + ha: 186, + o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z', + }, + restHalf: { + x_min: 0, + x_max: 518, + y_min: 0, + y_max: 162, + ha: 162, + o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z', + }, + restHalfLegerLine: { + x_min: -120, + x_max: 448, + y_min: -20, + y_max: 143, + ha: 163, + o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z', + }, + restQuarter: { + x_min: 0, + x_max: 263, + y_min: -415, + y_max: 415, + ha: 830, + o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z', + }, + rest8th: { + x_min: 0, + x_max: 289, + y_min: -260, + y_max: 261, + ha: 521, + o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z', + }, + rest16th: { + x_min: 0, + x_max: 333, + y_min: -328, + y_max: 244, + ha: 572, + o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z', + }, + rest32nd: { + x_min: 0, + x_max: 347, + y_min: -498, + y_max: 483, + ha: 981, + o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z', + }, + rest64th: { + x_min: 0, + x_max: 428, + y_min: -720, + y_max: 474, + ha: 1194, + o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z', + }, + rest128th: { + x_min: 1, + x_max: 491, + y_min: -711, + y_max: 719, + ha: 1430, + o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z', + }, + dynamicPiano: { + x_min: -49, + x_max: 327, + y_min: -142, + y_max: 515, + ha: 657, + o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z', + }, + dynamicMezzo: { + x_min: -18, + x_max: 559, + y_min: -50, + y_max: 365, + ha: 415, + o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z', + }, + dynamicForte: { + x_min: -144, + x_max: 311, + y_min: -115, + y_max: 504, + ha: 619, + o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z', + }, + dynamicRinforzando: { + x_min: -75, + x_max: 322, + y_min: -90, + y_max: 325, + ha: 415, + o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 296, + y_min: 0, + y_max: 379, + ha: 379, + o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z', + }, + dynamicZ: { + x_min: -43, + x_max: 331, + y_min: 0, + y_max: 328, + ha: 328, + o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z', + }, + ornamentTrill: { + x_min: 1, + x_max: 551, + y_min: -18, + y_max: 539, + ha: 557, + o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 574, + y_min: 0, + y_max: 312, + ha: 312, + o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 574, + y_min: -106, + y_max: 405, + ha: 511, + o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z', + }, + ornamentMordent: { + x_min: 0, + x_max: 700, + y_min: 0, + y_max: 497, + ha: 497, + o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 747, + y_min: 0, + y_max: 243, + ha: 243, + o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z', + }, + ornamentTremblement: { + x_min: 0, + x_max: 982, + y_min: 0, + y_max: 224, + ha: 224, + o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 1066, + y_min: -50, + y_max: 533, + ha: 583, + o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 0, + x_max: 1088, + y_min: -380, + y_max: 252, + ha: 632, + o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 1185, + y_min: -380, + y_max: 465, + ha: 845, + o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 1003, + y_min: -20, + y_max: 521, + ha: 541, + o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 1246, + y_min: -30, + y_max: 296, + ha: 326, + o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: 0, + x_max: 1226, + y_min: -237, + y_max: 436, + ha: 673, + o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 833, + y_min: -309, + y_max: 319, + ha: 628, + o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z', + }, + brassScoop: { + x_min: 0, + x_max: 312, + y_min: -390, + y_max: 28, + ha: 418, + o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z', + }, + brassDoitMedium: { + x_min: 0, + x_max: 476, + y_min: -50, + y_max: 333, + ha: 383, + o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z', + }, + brassFallLipShort: { + x_min: 0, + x_max: 298, + y_min: -344, + y_max: 65, + ha: 409, + o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z', + }, + brassLiftMedium: { + x_min: 0, + x_max: 807, + y_min: 0, + y_max: 838, + ha: 838, + o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z', + }, + brassFallRoughMedium: { + x_min: 0, + x_max: 791, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z', + }, + brassBend: { + x_min: 0, + x_max: 381, + y_min: 0, + y_max: 367, + ha: 367, + o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 274, + y_min: 0, + y_max: 260, + ha: 260, + o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z', + }, + brassMuteOpen: { + x_min: 1, + x_max: 313, + y_min: 0, + y_max: 309, + ha: 309, + o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z', + }, + brassFlip: { + x_min: 0, + x_max: 402, + y_min: 0, + y_max: 361, + ha: 361, + o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z', + }, + brassJazzTurn: { + x_min: 0, + x_max: 646, + y_min: 0, + y_max: 212, + ha: 212, + o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z', + }, + brassSmear: { + x_min: 0, + x_max: 334, + y_min: 0, + y_max: 151, + ha: 151, + o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 306, + y_min: 0, + y_max: 366, + ha: 366, + o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z', + }, + stringsUpBow: { + x_min: 0, + x_max: 219, + y_min: 0, + y_max: 489, + ha: 489, + o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 191, + y_min: 0, + y_max: 202, + ha: 202, + o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 201, + y_min: 0, + y_max: 325, + ha: 325, + o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 211, + y_min: 0, + y_max: 307, + ha: 307, + o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z', + }, + pluckedLeftHandPizzicato: { + x_min: 0, + x_max: 271, + y_min: 0, + y_max: 284, + ha: 284, + o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 944, + y_min: -13, + y_max: 550, + ha: 563, + o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 437, + y_min: 0, + y_max: 461, + ha: 461, + o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z', + }, + pictChokeCymbal: { + x_min: 1, + x_max: 147, + y_min: 0, + y_max: 242, + ha: 242, + o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z', + }, + wiggleArpeggiatoUp: { + x_min: -22, + x_max: 300, + y_min: 0, + y_max: 176, + ha: 176, + o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z', + }, + arpeggiatoUp: { + x_min: 0, + x_max: 262, + y_min: 0, + y_max: 1459, + ha: 1459, + o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z', + }, + arpeggiatoDown: { + x_min: 0, + x_max: 218, + y_min: 0, + y_max: 1440, + ha: 1440, + o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 599, + y_min: -250, + y_max: 175, + ha: 425, + o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 775, + y_min: -247, + y_max: 363, + ha: 610, + o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1374, + y_min: -304, + y_max: 304, + ha: 608, + o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 630, + y_min: -225, + y_max: 265, + ha: 490, + o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z', + }, + csymDiminished: { + x_min: 0, + x_max: 506, + y_min: 0, + y_max: 500, + ha: 500, + o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z', + }, + csymHalfDiminished: { + x_min: -32, + x_max: 496, + y_min: -33, + y_max: 492, + ha: 525, + o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z', + }, + csymAugmented: { + x_min: 0, + x_max: 530, + y_min: 0, + y_max: 539, + ha: 539, + o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 593, + y_min: 0, + y_max: 569, + ha: 569, + o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z', + }, + csymMinor: { + x_min: 0, + x_max: 482, + y_min: 193, + y_max: 265, + ha: 72, + o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z', + }, + csymParensLeftTall: { + x_min: 0, + x_max: 185, + y_min: 0, + y_max: 1034, + ha: 1034, + o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z', + }, + csymParensRightTall: { + x_min: -40, + x_max: 189, + y_min: 0, + y_max: 1058, + ha: 1058, + o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z', + }, + csymBracketLeftTall: { + x_min: 0, + x_max: 328, + y_min: 2, + y_max: 807, + ha: 805, + o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z', + }, + csymBracketRightTall: { + x_min: 1, + x_max: 306, + y_min: 0, + y_max: 829, + ha: 829, + o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z', + }, + csymParensLeftVeryTall: { + x_min: 0, + x_max: 116, + y_min: 0, + y_max: 934, + ha: 934, + o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z', + }, + csymParensRightVeryTall: { + x_min: -20, + x_max: 111, + y_min: 0, + y_max: 1009, + ha: 1009, + o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z', + }, + csymDiagonalArrangementSlash: { + x_min: 0, + x_max: 990, + y_min: -27, + y_max: 1028, + ha: 1054, + o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 208, + y_min: -231, + y_max: 449, + ha: 680, + o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 335, + y_min: -231, + y_max: 449, + ha: 680, + o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z', + }, + accidentalWilsonPlus: { + x_min: 0, + x_max: 298, + y_min: -218, + y_max: 218, + ha: 436, + o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z', + }, + accidentalWilsonMinus: { + x_min: 0, + x_max: 284, + y_min: -163, + y_max: 163, + ha: 326, + o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z', + }, + }, + fontFamily: 'Petaluma', + resolution: 1000, + generatedOn: '2022-12-18T09:07:50.817Z', +}; + + +/***/ }), + +/***/ "./src/fonts/petalumascript_glyphs.ts": +/*!********************************************!*\ + !*** ./src/fonts/petalumascript_glyphs.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PetalumaScriptFont": () => (/* binding */ PetalumaScriptFont) +/* harmony export */ }); +const PetalumaScriptFont = { + spacing: 50, + glyphs: { + ' ': { + x_min: 0, + x_max: 250, + y_min: 0, + y_max: 500, + ha: 500, + leftSideBearing: 0, + advanceWidth: 250, + }, + '0': { + x_min: 33, + x_max: 534, + y_min: -13, + y_max: 751, + ha: 764, + leftSideBearing: 33, + advanceWidth: 570, + }, + '1': { + x_min: 48, + x_max: 235, + y_min: -17, + y_max: 734, + ha: 751, + leftSideBearing: 48, + advanceWidth: 286, + }, + '2': { + x_min: 56, + x_max: 571, + y_min: -19, + y_max: 741, + ha: 760, + leftSideBearing: 56, + advanceWidth: 626, + }, + '3': { + x_min: 50, + x_max: 528, + y_min: -7, + y_max: 731, + ha: 738, + leftSideBearing: 50, + advanceWidth: 589, + }, + '4': { + x_min: 38, + x_max: 564, + y_min: -13, + y_max: 743, + ha: 756, + leftSideBearing: 38, + advanceWidth: 614, + }, + '5': { + x_min: 42, + x_max: 601, + y_min: -34, + y_max: 743, + ha: 777, + leftSideBearing: 42, + advanceWidth: 648, + }, + '6': { + x_min: 47, + x_max: 606, + y_min: -16, + y_max: 743, + ha: 759, + leftSideBearing: 47, + advanceWidth: 667, + }, + '7': { + x_min: 47, + x_max: 567, + y_min: 5, + y_max: 739, + ha: 734, + leftSideBearing: 0, + advanceWidth: 615, + }, + '8': { + x_min: 40, + x_max: 541, + y_min: -15, + y_max: 752, + ha: 767, + leftSideBearing: 40, + advanceWidth: 585, + }, + '9': { + x_min: 40, + x_max: 537, + y_min: -52, + y_max: 736, + ha: 788, + leftSideBearing: 40, + advanceWidth: 592, + }, + '!': { + x_min: 49, + x_max: 180, + y_min: -7, + y_max: 761, + ha: 768, + leftSideBearing: 49, + advanceWidth: 230, + }, + '"': { + x_min: 39, + x_max: 304, + y_min: 596, + y_max: 804, + ha: 208, + leftSideBearing: 39, + advanceWidth: 353, + }, + '#': { + x_min: 33, + x_max: 599, + y_min: -8, + y_max: 765, + ha: 773, + leftSideBearing: 33, + advanceWidth: 648, + }, + $: { + x_min: 53, + x_max: 495, + y_min: -111, + y_max: 823, + ha: 934, + leftSideBearing: 53, + advanceWidth: 560, + }, + '%': { + x_min: 35, + x_max: 656, + y_min: -128, + y_max: 808, + ha: 936, + leftSideBearing: 35, + advanceWidth: 711, + }, + '&': { + x_min: 53, + x_max: 441, + y_min: -3, + y_max: 753, + ha: 756, + leftSideBearing: 53, + advanceWidth: 500, + }, + "'": { + x_min: 43, + x_max: 161, + y_min: 590, + y_max: 811, + ha: 221, + leftSideBearing: 43, + advanceWidth: 217, + }, + '(': { + x_min: 41, + x_max: 311, + y_min: -36, + y_max: 845, + ha: 881, + leftSideBearing: 41, + advanceWidth: 308, + }, + ')': { + x_min: -8, + x_max: 257, + y_min: -21, + y_max: 852, + ha: 873, + leftSideBearing: -8, + advanceWidth: 280, + }, + '*': { + x_min: 59, + x_max: 539, + y_min: 175, + y_max: 589, + ha: 414, + leftSideBearing: 59, + advanceWidth: 601, + }, + '+': { + x_min: 33, + x_max: 361, + y_min: 180, + y_max: 587, + ha: 407, + leftSideBearing: 33, + advanceWidth: 400, + }, + ',': { + x_min: 15, + x_max: 176, + y_min: -129, + y_max: 92, + ha: 221, + leftSideBearing: 15, + advanceWidth: 205, + }, + '-': { + x_min: 40, + x_max: 380, + y_min: 317, + y_max: 452, + ha: 135, + leftSideBearing: 40, + advanceWidth: 422, + }, + '.': { + x_min: 48, + x_max: 185, + y_min: -56, + y_max: 84, + ha: 140, + leftSideBearing: 48, + advanceWidth: 227, + }, + '/': { + x_min: -58, + x_max: 654, + y_min: -122, + y_max: 844, + ha: 966, + leftSideBearing: -58, + advanceWidth: 626, + }, + ':': { + x_min: 65, + x_max: 225, + y_min: 97, + y_max: 536, + ha: 439, + leftSideBearing: 65, + advanceWidth: 302, + }, + ';': { + x_min: 13, + x_max: 295, + y_min: -139, + y_max: 536, + ha: 675, + leftSideBearing: 13, + advanceWidth: 334, + }, + '<': { + x_min: 28, + x_max: 438, + y_min: -1, + y_max: 607, + ha: 608, + leftSideBearing: 28, + advanceWidth: 475, + }, + '=': { + x_min: 40, + x_max: 383, + y_min: 199.9598640852289, + y_max: 541, + ha: 341.0401359147711, + leftSideBearing: 40, + advanceWidth: 422, + }, + '>': { + x_min: 35, + x_max: 421, + y_min: 28, + y_max: 632, + ha: 604, + leftSideBearing: 35, + advanceWidth: 466, + }, + '?': { + x_min: 45, + x_max: 548, + y_min: -17, + y_max: 767, + ha: 784, + leftSideBearing: 45, + advanceWidth: 592, + }, + '@': { + x_min: 51, + x_max: 730, + y_min: -78, + y_max: 753, + ha: 831, + leftSideBearing: 51, + advanceWidth: 781, + }, + A: { + x_min: 37, + x_max: 554, + y_min: -4, + y_max: 746, + ha: 750, + leftSideBearing: 37, + advanceWidth: 617, + }, + B: { + x_min: 37, + x_max: 532, + y_min: 3, + y_max: 783, + ha: 780, + leftSideBearing: 37, + advanceWidth: 579, + }, + C: { + x_min: 37, + x_max: 583, + y_min: -3, + y_max: 775, + ha: 778, + leftSideBearing: 37, + advanceWidth: 623, + }, + D: { + x_min: 50, + x_max: 530, + y_min: -15, + y_max: 749, + ha: 764, + leftSideBearing: 50, + advanceWidth: 579, + }, + E: { + x_min: 45, + x_max: 531, + y_min: -1, + y_max: 743, + ha: 744, + leftSideBearing: 45, + advanceWidth: 585, + }, + F: { + x_min: 45, + x_max: 459, + y_min: 23, + y_max: 727, + ha: 704, + leftSideBearing: 45, + advanceWidth: 510, + }, + G: { + x_min: 31, + x_max: 577, + y_min: -8, + y_max: 733, + ha: 741, + leftSideBearing: 31, + advanceWidth: 611, + }, + H: { + x_min: 37, + x_max: 493, + y_min: -22, + y_max: 758, + ha: 780, + leftSideBearing: 37, + advanceWidth: 535, + }, + I: { + x_min: 47, + x_max: 501, + y_min: -3, + y_max: 731, + ha: 734, + leftSideBearing: 47, + advanceWidth: 541, + }, + J: { + x_min: 33, + x_max: 531, + y_min: -23, + y_max: 725, + ha: 748, + leftSideBearing: 33, + advanceWidth: 573, + }, + K: { + x_min: 43, + x_max: 505, + y_min: -10, + y_max: 740, + ha: 750, + leftSideBearing: 43, + advanceWidth: 560, + }, + L: { + x_min: 49, + x_max: 457, + y_min: -2, + y_max: 746, + ha: 748, + leftSideBearing: 49, + advanceWidth: 510, + }, + M: { + x_min: 35, + x_max: 699, + y_min: 1, + y_max: 744, + ha: 743, + leftSideBearing: 35, + advanceWidth: 743, + }, + N: { + x_min: 34, + x_max: 533, + y_min: -17, + y_max: 761, + ha: 778, + leftSideBearing: 34, + advanceWidth: 579, + }, + O: { + x_min: 41, + x_max: 608, + y_min: -5, + y_max: 735, + ha: 740, + leftSideBearing: 41, + advanceWidth: 667, + }, + P: { + x_min: 53, + x_max: 451, + y_min: -18, + y_max: 735, + ha: 753, + leftSideBearing: 53, + advanceWidth: 497, + }, + Q: { + x_min: 40, + x_max: 599, + y_min: -67, + y_max: 744, + ha: 811, + leftSideBearing: 40, + advanceWidth: 648, + }, + R: { + x_min: 39, + x_max: 487, + y_min: 16, + y_max: 735, + ha: 719, + leftSideBearing: 39, + advanceWidth: 535, + }, + S: { + x_min: 35, + x_max: 552, + y_min: -47, + y_max: 708, + ha: 755, + leftSideBearing: 35, + advanceWidth: 604, + }, + T: { + x_min: 26, + x_max: 656, + y_min: -13, + y_max: 718, + ha: 731, + leftSideBearing: 26, + advanceWidth: 705, + }, + U: { + x_min: 41, + x_max: 518, + y_min: -20, + y_max: 748, + ha: 768, + leftSideBearing: 41, + advanceWidth: 567, + }, + V: { + x_min: 47, + x_max: 509, + y_min: -26, + y_max: 744, + ha: 770, + leftSideBearing: 47, + advanceWidth: 567, + }, + W: { + x_min: 44, + x_max: 789, + y_min: -35, + y_max: 720, + ha: 755, + leftSideBearing: 44, + advanceWidth: 833, + }, + X: { + x_min: 63, + x_max: 635, + y_min: -10, + y_max: 745, + ha: 755, + leftSideBearing: 63, + advanceWidth: 680, + }, + Y: { + x_min: 43, + x_max: 503, + y_min: -21, + y_max: 734, + ha: 755, + leftSideBearing: 43, + advanceWidth: 541, + }, + Z: { + x_min: 42, + x_max: 584, + y_min: -10, + y_max: 739, + ha: 749, + leftSideBearing: 42, + advanceWidth: 629, + }, + '[': { + x_min: 46, + x_max: 346, + y_min: -150, + y_max: 884, + ha: 1034, + leftSideBearing: 46, + advanceWidth: 291, + }, + '\\': { + x_min: 20, + x_max: 616, + y_min: -100, + y_max: 797, + ha: 897, + leftSideBearing: 20, + advanceWidth: 645, + }, + ']': { + x_min: -76, + x_max: 226, + y_min: -150, + y_max: 881, + ha: 1031, + leftSideBearing: -76, + advanceWidth: 297, + }, + '^': { + x_min: 43, + x_max: 437, + y_min: 517, + y_max: 812, + ha: 295, + leftSideBearing: 43, + advanceWidth: 478, + }, + _: { + x_min: 29, + x_max: 563, + y_min: -110, + y_max: -1, + ha: 109, + leftSideBearing: 29, + advanceWidth: 598, + }, + '`': { + x_min: 54, + x_max: 321, + y_min: 540, + y_max: 747, + ha: 207, + leftSideBearing: 54, + advanceWidth: 368, + }, + a: { + x_min: 20, + x_max: 447, + y_min: -17, + y_max: 495, + ha: 512, + leftSideBearing: 20, + advanceWidth: 494, + }, + b: { + x_min: 37, + x_max: 466, + y_min: -27, + y_max: 770, + ha: 797, + leftSideBearing: 37, + advanceWidth: 510, + }, + c: { + x_min: 35, + x_max: 456, + y_min: -9, + y_max: 507, + ha: 516, + leftSideBearing: 35, + advanceWidth: 460, + }, + d: { + x_min: 45, + x_max: 520, + y_min: -15, + y_max: 764, + ha: 779, + leftSideBearing: 45, + advanceWidth: 560, + }, + e: { + x_min: 33, + x_max: 370, + y_min: -5, + y_max: 501, + ha: 506, + leftSideBearing: 33, + advanceWidth: 397, + }, + f: { + x_min: 35, + x_max: 411, + y_min: -13, + y_max: 695, + ha: 708, + leftSideBearing: 35, + advanceWidth: 453, + }, + g: { + x_min: 33, + x_max: 551, + y_min: -257, + y_max: 505, + ha: 762, + leftSideBearing: 33, + advanceWidth: 611, + }, + h: { + x_min: 32, + x_max: 458, + y_min: -29, + y_max: 743, + ha: 772, + leftSideBearing: 32, + advanceWidth: 491, + }, + i: { + x_min: 45, + x_max: 167, + y_min: -13, + y_max: 631, + ha: 644, + leftSideBearing: 45, + advanceWidth: 220, + }, + j: { + x_min: -127, + x_max: 261, + y_min: -231, + y_max: 601, + ha: 832, + leftSideBearing: -127, + advanceWidth: 308, + }, + k: { + x_min: 39, + x_max: 443, + y_min: -3, + y_max: 700, + ha: 703, + leftSideBearing: 39, + advanceWidth: 497, + }, + l: { + x_min: 58, + x_max: 168, + y_min: -8, + y_max: 686, + ha: 694, + leftSideBearing: 58, + advanceWidth: 227, + }, + m: { + x_min: 39, + x_max: 688, + y_min: -14, + y_max: 501, + ha: 515, + leftSideBearing: 39, + advanceWidth: 718, + }, + n: { + x_min: 45, + x_max: 491, + y_min: -32, + y_max: 512, + ha: 544, + leftSideBearing: 45, + advanceWidth: 541, + }, + o: { + x_min: 41, + x_max: 424, + y_min: -12, + y_max: 493, + ha: 505, + leftSideBearing: 41, + advanceWidth: 447, + }, + p: { + x_min: 25, + x_max: 529, + y_min: -260, + y_max: 500, + ha: 760, + leftSideBearing: 25, + advanceWidth: 573, + }, + q: { + x_min: 53, + x_max: 603, + y_min: -235, + y_max: 514, + ha: 749, + leftSideBearing: 53, + advanceWidth: 623, + }, + r: { + x_min: 32, + x_max: 407, + y_min: -7, + y_max: 492, + ha: 499, + leftSideBearing: 32, + advanceWidth: 460, + }, + s: { + x_min: 49, + x_max: 416, + y_min: -12, + y_max: 519, + ha: 531, + leftSideBearing: 49, + advanceWidth: 460, + }, + t: { + x_min: 32, + x_max: 442, + y_min: -5, + y_max: 684, + ha: 689, + leftSideBearing: 32, + advanceWidth: 469, + }, + u: { + x_min: 41, + x_max: 487, + y_min: -5, + y_max: 507, + ha: 512, + leftSideBearing: 41, + advanceWidth: 510, + }, + v: { + x_min: 16, + x_max: 441, + y_min: -20, + y_max: 542, + ha: 562, + leftSideBearing: 16, + advanceWidth: 456, + }, + w: { + x_min: 39, + x_max: 639, + y_min: -22, + y_max: 505, + ha: 527, + leftSideBearing: 39, + advanceWidth: 661, + }, + x: { + x_min: 15, + x_max: 505, + y_min: -39, + y_max: 539, + ha: 578, + leftSideBearing: 15, + advanceWidth: 541, + }, + y: { + x_min: -98, + x_max: 501, + y_min: -242, + y_max: 511, + ha: 753, + leftSideBearing: -98, + advanceWidth: 548, + }, + z: { + x_min: 27, + x_max: 479, + y_min: -3, + y_max: 494, + ha: 497, + leftSideBearing: 27, + advanceWidth: 494, + }, + '{': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '|': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '}': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '~': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + }, + fontFamily: 'PetalumaScript', + resolution: 1000, + generatedOn: '2020-06-14T18:33:25.407Z', +}; + + +/***/ }), + +/***/ "./src/fonts/robotoslab_glyphs.ts": +/*!****************************************!*\ + !*** ./src/fonts/robotoslab_glyphs.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RobotoSlabFont": () => (/* binding */ RobotoSlabFont) +/* harmony export */ }); +const RobotoSlabFont = { + spacing: 50, + glyphs: { + ' ': { + x_min: 0, + x_max: 509, + y_min: 0, + y_max: 2000, + ha: 2000, + leftSideBearing: 0, + advanceWidth: 509, + }, + '0': { + x_min: 121, + x_max: 1048, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 121, + advanceWidth: 1168, + }, + '1': { + x_min: 117, + x_max: 767, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 117, + advanceWidth: 844, + }, + '2': { + x_min: 75.8474576645637, + x_max: 1040, + y_min: 0, + y_max: 1477, + ha: 1477, + leftSideBearing: 75, + advanceWidth: 1131, + }, + '3': { + x_min: 74.85365853658536, + x_max: 994, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 74, + advanceWidth: 1106, + }, + '4': { + x_min: 63, + x_max: 1114, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 63, + advanceWidth: 1187, + }, + '5': { + x_min: 96.8448275474953, + x_max: 982, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 96, + advanceWidth: 1081, + }, + '6': { + x_min: 121, + x_max: 1067, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 121, + advanceWidth: 1144, + }, + '7': { + x_min: 76, + x_max: 1060, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: -30, + advanceWidth: 1128, + }, + '8': { + x_min: 92, + x_max: 1039, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 92, + advanceWidth: 1131, + }, + '9': { + x_min: 84, + x_max: 1026, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 84, + advanceWidth: 1154, + }, + '!': { + x_min: 143, + x_max: 340, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 143, + advanceWidth: 483, + }, + '"': { + x_min: 166, + x_max: 634, + y_min: 1055, + y_max: 1560, + ha: 505, + leftSideBearing: 166, + advanceWidth: 770, + }, + '#': { + x_min: 63, + x_max: 1179, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 63, + advanceWidth: 1246, + }, + $: { + x_min: 81.92156915727656, + x_max: 1012, + y_min: -208, + y_max: 1693, + ha: 1901, + leftSideBearing: 81, + advanceWidth: 1110, + }, + '%': { + x_min: 77, + x_max: 1384, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 77, + advanceWidth: 1460, + }, + '&': { + x_min: 74, + x_max: 1242, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 74, + advanceWidth: 1289, + }, + "'": { + x_min: 166, + x_max: 324, + y_min: 1055, + y_max: 1560, + ha: 505, + leftSideBearing: 166, + advanceWidth: 460, + }, + '(': { + x_min: 114, + x_max: 650, + y_min: -463, + y_max: 1636, + ha: 2099, + leftSideBearing: 114, + advanceWidth: 662, + }, + ')': { + x_min: 11, + x_max: 547, + y_min: -463, + y_max: 1636, + ha: 2099, + leftSideBearing: 11, + advanceWidth: 654, + }, + '*': { + x_min: 66, + x_max: 893, + y_min: 607, + y_max: 1456, + ha: 849, + leftSideBearing: 66, + advanceWidth: 958, + }, + '+': { + x_min: 73, + x_max: 1071, + y_min: 146, + y_max: 1206, + ha: 1060, + leftSideBearing: 73, + advanceWidth: 1145, + }, + ',': { + x_min: 23, + x_max: 315, + y_min: -311, + y_max: 221, + ha: 532, + leftSideBearing: 23, + advanceWidth: 404, + }, + '-': { + x_min: 154, + x_max: 643, + y_min: 538, + y_max: 692, + ha: 154, + leftSideBearing: 154, + advanceWidth: 797, + }, + '.': { + x_min: 145, + x_max: 342, + y_min: 0, + y_max: 202, + ha: 202, + leftSideBearing: 145, + advanceWidth: 493, + }, + '/': { + x_min: 0, + x_max: 774, + y_min: -125, + y_max: 1456, + ha: 1581, + leftSideBearing: 0, + advanceWidth: 824, + }, + ':': { + x_min: 145, + x_max: 342, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 145, + advanceWidth: 419, + }, + ';': { + x_min: 53, + x_max: 345, + y_min: -311, + y_max: 1082, + ha: 1393, + leftSideBearing: 53, + advanceWidth: 424, + }, + '<': { + x_min: 76, + x_max: 892, + y_min: 107, + y_max: 1013, + ha: 906, + leftSideBearing: 76, + advanceWidth: 1017, + }, + '=': { + x_min: 147, + x_max: 981, + y_min: 407, + y_max: 987, + ha: 580, + leftSideBearing: 147, + advanceWidth: 1127, + }, + '>': { + x_min: 125, + x_max: 980, + y_min: 87, + y_max: 993, + ha: 906, + leftSideBearing: 125, + advanceWidth: 1060, + }, + '?': { + x_min: 65.92660602419838, + x_max: 890, + y_min: 0, + y_max: 1477, + ha: 1477, + leftSideBearing: 65, + advanceWidth: 953, + }, + '@': { + x_min: 84.3592218305664, + x_max: 1705.2346925277395, + y_min: -453, + y_max: 1431, + ha: 1884, + leftSideBearing: 84, + advanceWidth: 1821, + }, + A: { + x_min: 70, + x_max: 1463, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 70, + advanceWidth: 1533, + }, + B: { + x_min: 81, + x_max: 1253, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1322, + }, + C: { + x_min: 80, + x_max: 1174, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 80, + advanceWidth: 1290, + }, + D: { + x_min: 81, + x_max: 1291, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1356, + }, + E: { + x_min: 81, + x_max: 1190, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1306, + }, + F: { + x_min: 81, + x_max: 1176, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1256, + }, + G: { + x_min: 80, + x_max: 1226, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 80, + advanceWidth: 1346, + }, + H: { + x_min: 81, + x_max: 1497, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1578, + }, + I: { + x_min: 81, + x_max: 604, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 685, + }, + J: { + x_min: 60, + x_max: 1100, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 60, + advanceWidth: 1169, + }, + K: { + x_min: 81, + x_max: 1427, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1501, + }, + L: { + x_min: 81, + x_max: 1130, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1210, + }, + M: { + x_min: 94, + x_max: 1888, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 94, + advanceWidth: 1982, + }, + N: { + x_min: 83, + x_max: 1509, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 83, + advanceWidth: 1592, + }, + O: { + x_min: 70, + x_max: 1281, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 70, + advanceWidth: 1351, + }, + P: { + x_min: 81, + x_max: 1242, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1297, + }, + Q: { + x_min: 70, + x_max: 1348, + y_min: -245, + y_max: 1477, + ha: 1722, + leftSideBearing: 70, + advanceWidth: 1376, + }, + R: { + x_min: 81, + x_max: 1285, + y_min: 0, + y_max: 1455, + ha: 1455, + leftSideBearing: 81, + advanceWidth: 1385, + }, + S: { + x_min: 115, + x_max: 1116, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 115, + advanceWidth: 1206, + }, + T: { + x_min: 96, + x_max: 1306, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 96, + advanceWidth: 1406, + }, + U: { + x_min: 70, + x_max: 1452, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 70, + advanceWidth: 1522, + }, + V: { + x_min: 65, + x_max: 1443, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 65, + advanceWidth: 1508, + }, + W: { + x_min: 72, + x_max: 2057, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 72, + advanceWidth: 2129, + }, + X: { + x_min: 80, + x_max: 1449, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 80, + advanceWidth: 1529, + }, + Y: { + x_min: 65, + x_max: 1396, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 65, + advanceWidth: 1461, + }, + Z: { + x_min: 90, + x_max: 1107, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 90, + advanceWidth: 1197, + }, + '[': { + x_min: 157, + x_max: 541, + y_min: -312, + y_max: 1664, + ha: 1976, + leftSideBearing: 157, + advanceWidth: 573, + }, + '\\': { + x_min: 36, + x_max: 830, + y_min: -125, + y_max: 1456, + ha: 1581, + leftSideBearing: 36, + advanceWidth: 841, + }, + ']': { + x_min: 23, + x_max: 408, + y_min: -312, + y_max: 1664, + ha: 1976, + leftSideBearing: 23, + advanceWidth: 552, + }, + '^': { + x_min: 71, + x_max: 802, + y_min: 729, + y_max: 1456, + ha: 727, + leftSideBearing: 71, + advanceWidth: 864, + }, + _: { + x_min: 119, + x_max: 1041, + y_min: -154, + y_max: 0, + ha: 154, + leftSideBearing: 119, + advanceWidth: 1168, + }, + '`': { + x_min: 40, + x_max: 456, + y_min: 1288, + y_max: 1560, + ha: 272, + leftSideBearing: 40, + advanceWidth: 496, + }, + a: { + x_min: 79, + x_max: 1053, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 79, + advanceWidth: 1132, + }, + b: { + x_min: -16, + x_max: 1071, + y_min: -21, + y_max: 1560, + ha: 1581, + leftSideBearing: -16, + advanceWidth: 1145, + }, + c: { + x_min: 78, + x_max: 988, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 78, + advanceWidth: 1067, + }, + d: { + x_min: 78, + x_max: 1156, + y_min: -21, + y_max: 1560, + ha: 1581, + leftSideBearing: 78, + advanceWidth: 1218, + }, + e: { + x_min: 74, + x_max: 980, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 74, + advanceWidth: 1059, + }, + f: { + x_min: 64, + x_max: 731, + y_min: 0, + y_max: 1581, + ha: 1581, + leftSideBearing: 64, + advanceWidth: 725, + }, + g: { + x_min: 78, + x_max: 1133, + y_min: -437, + y_max: 1102, + ha: 1539, + leftSideBearing: 78, + advanceWidth: 1157, + }, + h: { + x_min: 49, + x_max: 1255, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 49, + advanceWidth: 1315, + }, + i: { + x_min: 67, + x_max: 590, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 67, + advanceWidth: 652, + }, + j: { + x_min: -56, + x_max: 381, + y_min: -437, + y_max: 1560, + ha: 1997, + leftSideBearing: -56, + advanceWidth: 525, + }, + k: { + x_min: 64, + x_max: 1248, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 64, + advanceWidth: 1287, + }, + l: { + x_min: 64, + x_max: 587, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 64, + advanceWidth: 653, + }, + m: { + x_min: 74, + x_max: 1905, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 74, + advanceWidth: 1977, + }, + n: { + x_min: 74, + x_max: 1278, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 74, + advanceWidth: 1343, + }, + o: { + x_min: 78, + x_max: 1046, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 78, + advanceWidth: 1124, + }, + p: { + x_min: 34, + x_max: 1119, + y_min: -416, + y_max: 1102, + ha: 1518, + leftSideBearing: 34, + advanceWidth: 1197, + }, + q: { + x_min: 78, + x_max: 1135, + y_min: -416, + y_max: 1102, + ha: 1518, + leftSideBearing: 78, + advanceWidth: 1139, + }, + r: { + x_min: 72, + x_max: 808, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 72, + advanceWidth: 854, + }, + s: { + x_min: 104, + x_max: 933, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 104, + advanceWidth: 1022, + }, + t: { + x_min: 24, + x_max: 678, + y_min: -17, + y_max: 1343, + ha: 1360, + leftSideBearing: 24, + advanceWidth: 730, + }, + u: { + x_min: 52, + x_max: 1181, + y_min: -21, + y_max: 1082, + ha: 1103, + leftSideBearing: 52, + advanceWidth: 1245, + }, + v: { + x_min: 26, + x_max: 1176, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 26, + advanceWidth: 1206, + }, + w: { + x_min: 52, + x_max: 1777, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 52, + advanceWidth: 1823, + }, + x: { + x_min: 42, + x_max: 1163, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 42, + advanceWidth: 1203, + }, + y: { + x_min: 24, + x_max: 1172, + y_min: -437, + y_max: 1082, + ha: 1519, + leftSideBearing: 24, + advanceWidth: 1192, + }, + z: { + x_min: 88, + x_max: 960, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 88, + advanceWidth: 1032, + }, + '{': { + x_min: 63, + x_max: 671, + y_min: -364, + y_max: 1597, + ha: 1961, + leftSideBearing: 63, + advanceWidth: 701, + }, + '|': { + x_min: 150, + x_max: 307, + y_min: -270, + y_max: 1456, + ha: 1726, + leftSideBearing: 150, + advanceWidth: 451, + }, + '}': { + x_min: 27, + x_max: 635, + y_min: -364, + y_max: 1597, + ha: 1961, + leftSideBearing: 27, + advanceWidth: 701, + }, + '~': { + x_min: 121, + x_max: 1257, + y_min: 401, + y_max: 803, + ha: 402, + leftSideBearing: 121, + advanceWidth: 1386, + }, + }, + fontFamily: 'Roboto Slab', + resolution: 2048, + generatedOn: '2020-06-15T19:12:58.120Z', +}; + + +/***/ }), + +/***/ "./src/fonts/sans_bold_text_metrics.ts": +/*!*********************************************!*\ + !*** ./src/fonts/sans_bold_text_metrics.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SansFontBold": () => (/* binding */ SansFontBold) +/* harmony export */ }); +const SansFontBold = { + glyphs: { + '0': { + x_min: 86, + x_max: 1038, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 86, + advanceWidth: 1139, + }, + '1': { + x_min: 162, + x_max: 806, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 162, + advanceWidth: 1139, + }, + '2': { + x_min: 51, + x_max: 1036, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 51, + advanceWidth: 1139, + }, + '3': { + x_min: 77, + x_max: 1051, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 77, + advanceWidth: 1139, + }, + '4': { + x_min: 38, + x_max: 1092, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 38, + advanceWidth: 1139, + }, + '5': { + x_min: 91, + x_max: 1077, + y_min: -25, + y_max: 1446, + ha: 1471, + leftSideBearing: 91, + advanceWidth: 1139, + }, + '6': { + x_min: 87, + x_max: 1066, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 87, + advanceWidth: 1139, + }, + '7': { + x_min: 87, + x_max: 1048, + y_min: 0, + y_max: 1446, + ha: 1446, + leftSideBearing: 87, + advanceWidth: 1139, + }, + '8': { + x_min: 83, + x_max: 1047, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 83, + advanceWidth: 1139, + }, + '9': { + x_min: 65, + x_max: 1044, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 65, + advanceWidth: 1139, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 569, + }, + '!': { + x_min: 184, + x_max: 488, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 184, + advanceWidth: 682, + }, + '"': { + x_min: 112, + x_max: 869, + y_min: 945, + y_max: 1466, + ha: 521, + leftSideBearing: 112, + advanceWidth: 971, + }, + '#': { + x_min: 18, + x_max: 1115, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 18, + advanceWidth: 1139, + }, + $: { + x_min: 70, + x_max: 1048, + y_min: -205, + y_max: 1584, + ha: 1789, + leftSideBearing: 70, + advanceWidth: 1139, + }, + '%': { + x_min: 89, + x_max: 1725, + y_min: -59, + y_max: 1491, + ha: 1550, + leftSideBearing: 89, + advanceWidth: 1821, + }, + '&': { + x_min: 90, + x_max: 1446, + y_min: -38, + y_max: 1491, + ha: 1529, + leftSideBearing: 90, + advanceWidth: 1479, + }, + "'": { + x_min: 92, + x_max: 398, + y_min: 945, + y_max: 1466, + ha: 521, + leftSideBearing: 92, + advanceWidth: 487, + }, + '(': { + x_min: 107, + x_max: 616, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 107, + advanceWidth: 682, + }, + ')': { + x_min: 67, + x_max: 576, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 67, + advanceWidth: 682, + }, + '*': { + x_min: 28, + x_max: 753, + y_min: 792, + y_max: 1491, + ha: 699, + leftSideBearing: 28, + advanceWidth: 797, + }, + '+': { + x_min: 85, + x_max: 1110, + y_min: 211, + y_max: 1236, + ha: 1025, + leftSideBearing: 85, + advanceWidth: 1196, + }, + ',': { + x_min: 117, + x_max: 421, + y_min: -327, + y_max: 281, + ha: 608, + leftSideBearing: 117, + advanceWidth: 569, + }, + '-': { + x_min: 115, + x_max: 667, + y_min: 391, + y_max: 672, + ha: 281, + leftSideBearing: 115, + advanceWidth: 682, + }, + '.': { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 281, + ha: 281, + leftSideBearing: 147, + advanceWidth: 569, + }, + '/': { + x_min: -3, + x_max: 571, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: -3, + advanceWidth: 569, + }, + ':': { + x_min: 201, + x_max: 482, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 201, + advanceWidth: 682, + }, + ';': { + x_min: 170, + x_max: 474, + y_min: -327, + y_max: 1062, + ha: 1389, + leftSideBearing: 170, + advanceWidth: 682, + }, + '<': { + x_min: 95, + x_max: 1100, + y_min: 167, + y_max: 1281, + ha: 1114, + leftSideBearing: 95, + advanceWidth: 1196, + }, + '=': { + x_min: 85, + x_max: 1110, + y_min: 372, + y_max: 1074, + ha: 702, + leftSideBearing: 85, + advanceWidth: 1196, + }, + '>': { + x_min: 95, + x_max: 1101, + y_min: 166, + y_max: 1279, + ha: 1113, + leftSideBearing: 95, + advanceWidth: 1196, + }, + '?': { + x_min: 106, + x_max: 1158, + y_min: 0, + y_max: 1481, + ha: 1481, + leftSideBearing: 106, + advanceWidth: 1251, + }, + '@': { + x_min: 61, + x_max: 1990, + y_min: -431, + y_max: 1492, + ha: 1923, + leftSideBearing: 61, + advanceWidth: 1997, + }, + A: { + x_min: 0, + x_max: 1471, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 0, + advanceWidth: 1479, + }, + B: { + x_min: 150, + x_max: 1378, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + C: { + x_min: 97, + x_max: 1374, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 97, + advanceWidth: 1479, + }, + D: { + x_min: 148, + x_max: 1377, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 148, + advanceWidth: 1479, + }, + E: { + x_min: 149, + x_max: 1264, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 149, + advanceWidth: 1366, + }, + F: { + x_min: 151, + x_max: 1156, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 151, + advanceWidth: 1251, + }, + G: { + x_min: 98, + x_max: 1469, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 98, + advanceWidth: 1593, + }, + H: { + x_min: 150, + x_max: 1322, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + I: { + x_min: 140, + x_max: 436, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 140, + advanceWidth: 569, + }, + J: { + x_min: 35, + x_max: 973, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 35, + advanceWidth: 1139, + }, + K: { + x_min: 153, + x_max: 1475, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 153, + advanceWidth: 1479, + }, + L: { + x_min: 157, + x_max: 1189, + y_min: 0, + y_max: 1454, + ha: 1454, + leftSideBearing: 157, + advanceWidth: 1251, + }, + M: { + x_min: 145, + x_max: 1561, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 145, + advanceWidth: 1706, + }, + N: { + x_min: 152, + x_max: 1315, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 152, + advanceWidth: 1479, + }, + O: { + x_min: 89, + x_max: 1511, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 89, + advanceWidth: 1593, + }, + P: { + x_min: 149, + x_max: 1272, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 149, + advanceWidth: 1366, + }, + Q: { + x_min: 89, + x_max: 1566, + y_min: -147, + y_max: 1491, + ha: 1638, + leftSideBearing: 89, + advanceWidth: 1593, + }, + R: { + x_min: 150, + x_max: 1468, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + S: { + x_min: 74, + x_max: 1266, + y_min: -26, + y_max: 1491, + ha: 1517, + leftSideBearing: 74, + advanceWidth: 1366, + }, + T: { + x_min: 44, + x_max: 1209, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 44, + advanceWidth: 1251, + }, + U: { + x_min: 147, + x_max: 1316, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 147, + advanceWidth: 1479, + }, + V: { + x_min: -1, + x_max: 1364, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -1, + advanceWidth: 1366, + }, + W: { + x_min: 7, + x_max: 1931, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 7, + advanceWidth: 1933, + }, + X: { + x_min: 0, + x_max: 1363, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 0, + advanceWidth: 1366, + }, + Y: { + x_min: -3, + x_max: 1368, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -3, + advanceWidth: 1366, + }, + Z: { + x_min: 22, + x_max: 1213, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 22, + advanceWidth: 1251, + }, + '[': { + x_min: 146, + x_max: 644, + y_min: -413, + y_max: 1466, + ha: 1879, + leftSideBearing: 146, + advanceWidth: 682, + }, + '\\': { + x_min: -3, + x_max: 571, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: -3, + advanceWidth: 569, + }, + ']': { + x_min: 38, + x_max: 536, + y_min: -413, + y_max: 1466, + ha: 1879, + leftSideBearing: 38, + advanceWidth: 682, + }, + '^': { + x_min: 115, + x_max: 1080, + y_min: 692, + y_max: 1491, + ha: 799, + leftSideBearing: 115, + advanceWidth: 1196, + }, + _: { + x_min: -19, + x_max: 1149, + y_min: -405, + y_max: -223, + ha: 182, + leftSideBearing: -19, + advanceWidth: 1139, + }, + '`': { + x_min: 42, + x_max: 495, + y_min: 1192, + y_max: 1491, + ha: 299, + leftSideBearing: 42, + advanceWidth: 682, + }, + a: { + x_min: 73, + x_max: 1070, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 73, + advanceWidth: 1139, + }, + b: { + x_min: 135, + x_max: 1172, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 135, + advanceWidth: 1251, + }, + c: { + x_min: 85, + x_max: 1087, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 85, + advanceWidth: 1139, + }, + d: { + x_min: 84, + x_max: 1121, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 84, + advanceWidth: 1251, + }, + e: { + x_min: 65, + x_max: 1057.2517482517483, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 65, + advanceWidth: 1139, + }, + f: { + x_min: 24, + x_max: 742, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 24, + advanceWidth: 682, + }, + g: { + x_min: 84, + x_max: 1120, + y_min: -431, + y_max: 1086, + ha: 1517, + leftSideBearing: 84, + advanceWidth: 1251, + }, + h: { + x_min: 146, + x_max: 1113, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 146, + advanceWidth: 1251, + }, + i: { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 147, + advanceWidth: 569, + }, + j: { + x_min: -94, + x_max: 422, + y_min: -431, + y_max: 1466, + ha: 1897, + leftSideBearing: -94, + advanceWidth: 569, + }, + k: { + x_min: 137, + x_max: 1119, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 137, + advanceWidth: 1139, + }, + l: { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 147, + advanceWidth: 569, + }, + m: { + x_min: 126, + x_max: 1688, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 126, + advanceWidth: 1821, + }, + n: { + x_min: 145, + x_max: 1113, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 145, + advanceWidth: 1251, + }, + o: { + x_min: 82, + x_max: 1178, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 82, + advanceWidth: 1251, + }, + p: { + x_min: 139, + x_max: 1175, + y_min: -404, + y_max: 1086, + ha: 1490, + leftSideBearing: 139, + advanceWidth: 1251, + }, + q: { + x_min: 91, + x_max: 1122, + y_min: -404, + y_max: 1086, + ha: 1490, + leftSideBearing: 91, + advanceWidth: 1251, + }, + r: { + x_min: 135, + x_max: 823, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 797, + }, + s: { + x_min: 48, + x_max: 1040, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 48, + advanceWidth: 1139, + }, + t: { + x_min: 31, + x_max: 657, + y_min: -24, + y_max: 1437, + ha: 1461, + leftSideBearing: 31, + advanceWidth: 682, + }, + u: { + x_min: 141, + x_max: 1107, + y_min: -24, + y_max: 1062, + ha: 1086, + leftSideBearing: 141, + advanceWidth: 1251, + }, + v: { + x_min: 11, + x_max: 1114, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 11, + advanceWidth: 1139, + }, + w: { + x_min: 9, + x_max: 1592, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 9, + advanceWidth: 1593, + }, + x: { + x_min: 12, + x_max: 1120, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 12, + advanceWidth: 1139, + }, + y: { + x_min: 14, + x_max: 1106, + y_min: -431, + y_max: 1062, + ha: 1493, + leftSideBearing: 14, + advanceWidth: 1139, + }, + z: { + x_min: 34, + x_max: 982, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 34, + advanceWidth: 1024, + }, + '{': { + x_min: 60, + x_max: 744, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 60, + advanceWidth: 797, + }, + '|': { + x_min: 176, + x_max: 399, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 176, + advanceWidth: 573, + }, + '}': { + x_min: 45, + x_max: 729, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 45, + advanceWidth: 797, + }, + '~': { + x_min: 67, + x_max: 1129, + y_min: 519, + y_max: 924, + ha: 405, + leftSideBearing: 67, + advanceWidth: 1196, + }, + }, + fontFamily: 'Arial', + resolution: 2048, + generatedOn: '2022-11-04T20:05:21.000Z', +}; + + +/***/ }), + +/***/ "./src/fonts/sans_text_metrics.ts": +/*!****************************************!*\ + !*** ./src/fonts/sans_text_metrics.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SansFont": () => (/* binding */ SansFont) +/* harmony export */ }); +const SansFont = { + smufl: false, + name: 'SANS', + spacing: 50, + Description: 'Built-in sans-serif font', + bold: true, + italic: true, + monospaced: false, + serifs: false, + glyphs: { + '0': { + x_min: 85, + x_max: 1041, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 85, + advanceWidth: 1139, + }, + '1': { + x_min: 223, + x_max: 763, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 223, + advanceWidth: 1139, + }, + '2': { + x_min: 61.840001123045234, + x_max: 1031, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 61, + advanceWidth: 1139, + }, + '3': { + x_min: 86, + x_max: 1046, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 86, + advanceWidth: 1139, + }, + '4': { + x_min: 26, + x_max: 1040, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 26, + advanceWidth: 1139, + }, + '5': { + x_min: 85, + x_max: 1057, + y_min: -25, + y_max: 1446, + ha: 1471, + leftSideBearing: 85, + advanceWidth: 1139, + }, + '6': { + x_min: 77, + x_max: 1045, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 77, + advanceWidth: 1139, + }, + '7': { + x_min: 97, + x_max: 1046, + y_min: 0, + y_max: 1447, + ha: 1447, + leftSideBearing: 97, + advanceWidth: 1139, + }, + '8': { + x_min: 83, + x_max: 1049, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 83, + advanceWidth: 1139, + }, + '9': { + x_min: 85, + x_max: 1049, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 85, + advanceWidth: 1139, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 569, + }, + '!': { + x_min: 176, + x_max: 399, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 176, + advanceWidth: 569, + }, + '"': { + x_min: 94, + x_max: 631, + y_min: 947, + y_max: 1466, + ha: 519, + leftSideBearing: 94, + advanceWidth: 727, + }, + '#': { + x_min: 21, + x_max: 1113, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 21, + advanceWidth: 1139, + }, + $: { + x_min: 73, + x_max: 1043, + y_min: -211, + y_max: 1601, + ha: 1812, + leftSideBearing: 73, + advanceWidth: 1139, + }, + '%': { + x_min: 119, + x_max: 1695, + y_min: -54, + y_max: 1491, + ha: 1545, + leftSideBearing: 119, + advanceWidth: 1821, + }, + '&': { + x_min: 88, + x_max: 1319, + y_min: -34, + y_max: 1491, + ha: 1525, + leftSideBearing: 88, + advanceWidth: 1366, + }, + "'": { + x_min: 90, + x_max: 295, + y_min: 947, + y_max: 1466, + ha: 519, + leftSideBearing: 90, + advanceWidth: 391, + }, + '(': { + x_min: 124, + x_max: 608, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 124, + advanceWidth: 682, + }, + ')': { + x_min: 124, + x_max: 608, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 124, + advanceWidth: 682, + }, + '*': { + x_min: 64, + x_max: 725, + y_min: 867, + y_max: 1491, + ha: 624, + leftSideBearing: 64, + advanceWidth: 797, + }, + '+': { + x_min: 114, + x_max: 1082, + y_min: 237, + y_max: 1206, + ha: 969, + leftSideBearing: 114, + advanceWidth: 1196, + }, + ',': { + x_min: 170, + x_max: 387, + y_min: -290, + y_max: 205, + ha: 495, + leftSideBearing: 170, + advanceWidth: 569, + }, + '-': { + x_min: 65, + x_max: 618, + y_min: 440, + y_max: 621, + ha: 181, + leftSideBearing: 65, + advanceWidth: 682, + }, + '.': { + x_min: 186, + x_max: 391, + y_min: 0, + y_max: 205, + ha: 205, + leftSideBearing: 186, + advanceWidth: 569, + }, + '/': { + x_min: 0, + x_max: 569, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 0, + advanceWidth: 569, + }, + ':': { + x_min: 185, + x_max: 390, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 185, + advanceWidth: 569, + }, + ';': { + x_min: 170, + x_max: 387, + y_min: -290, + y_max: 1062, + ha: 1352, + leftSideBearing: 170, + advanceWidth: 569, + }, + '<': { + x_min: 112, + x_max: 1083, + y_min: 226, + y_max: 1219, + ha: 993, + leftSideBearing: 112, + advanceWidth: 1196, + }, + '=': { + x_min: 114, + x_max: 1082, + y_min: 417, + y_max: 1030, + ha: 613, + leftSideBearing: 114, + advanceWidth: 1196, + }, + '>': { + x_min: 112, + x_max: 1083, + y_min: 226, + y_max: 1219, + ha: 993, + leftSideBearing: 112, + advanceWidth: 1196, + }, + '?': { + x_min: 90, + x_max: 1036, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 90, + advanceWidth: 1139, + }, + '@': { + x_min: 111, + x_max: 2005, + y_min: -431, + y_max: 1493, + ha: 1924, + leftSideBearing: 111, + advanceWidth: 2079, + }, + A: { + x_min: -3, + x_max: 1369, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -3, + advanceWidth: 1366, + }, + B: { + x_min: 150, + x_max: 1257, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1366, + }, + C: { + x_min: 102, + x_max: 1398, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 102, + advanceWidth: 1479, + }, + D: { + x_min: 158, + x_max: 1370, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 158, + advanceWidth: 1479, + }, + E: { + x_min: 162, + x_max: 1256, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 162, + advanceWidth: 1366, + }, + F: { + x_min: 168, + x_max: 1157, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 168, + advanceWidth: 1251, + }, + G: { + x_min: 109, + x_max: 1465, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 109, + advanceWidth: 1593, + }, + H: { + x_min: 164, + x_max: 1314, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 164, + advanceWidth: 1479, + }, + I: { + x_min: 191, + x_max: 385, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 191, + advanceWidth: 569, + }, + J: { + x_min: 58.84976474807333, + x_max: 865, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 58, + advanceWidth: 1024, + }, + K: { + x_min: 150, + x_max: 1362, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1366, + }, + L: { + x_min: 150, + x_max: 1066, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1139, + }, + M: { + x_min: 152, + x_max: 1551, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 152, + advanceWidth: 1706, + }, + N: { + x_min: 156, + x_max: 1311, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 156, + advanceWidth: 1479, + }, + O: { + x_min: 99, + x_max: 1501, + y_min: -25, + y_max: 1492, + ha: 1517, + leftSideBearing: 99, + advanceWidth: 1593, + }, + P: { + x_min: 158, + x_max: 1277, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 158, + advanceWidth: 1366, + }, + Q: { + x_min: 88, + x_max: 1518, + y_min: -114, + y_max: 1492, + ha: 1606, + leftSideBearing: 88, + advanceWidth: 1593, + }, + R: { + x_min: 161, + x_max: 1453, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 161, + advanceWidth: 1479, + }, + S: { + x_min: 92, + x_max: 1259, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 92, + advanceWidth: 1366, + }, + T: { + x_min: 48, + x_max: 1210, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 48, + advanceWidth: 1251, + }, + U: { + x_min: 161, + x_max: 1314, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 161, + advanceWidth: 1479, + }, + V: { + x_min: 9, + x_max: 1350, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 9, + advanceWidth: 1366, + }, + W: { + x_min: 25, + x_max: 1910, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 25, + advanceWidth: 1933, + }, + X: { + x_min: 9, + x_max: 1353, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 9, + advanceWidth: 1366, + }, + Y: { + x_min: 6, + x_max: 1350, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 6, + advanceWidth: 1366, + }, + Z: { + x_min: 41, + x_max: 1200, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 41, + advanceWidth: 1251, + }, + '[': { + x_min: 139, + x_max: 536, + y_min: -407, + y_max: 1466, + ha: 1873, + leftSideBearing: 139, + advanceWidth: 569, + }, + '\\': { + x_min: 0, + x_max: 569, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 0, + advanceWidth: 569, + }, + ']': { + x_min: 39, + x_max: 436, + y_min: -407, + y_max: 1466, + ha: 1873, + leftSideBearing: 39, + advanceWidth: 569, + }, + '^': { + x_min: 54, + x_max: 907, + y_min: 690, + y_max: 1491, + ha: 801, + leftSideBearing: 54, + advanceWidth: 961, + }, + _: { + x_min: -31, + x_max: 1162, + y_min: -407, + y_max: -277, + ha: 130, + leftSideBearing: -31, + advanceWidth: 1139, + }, + '`': { + x_min: 89, + x_max: 465, + y_min: 1194, + y_max: 1474, + ha: 280, + leftSideBearing: 89, + advanceWidth: 682, + }, + a: { + x_min: 74, + x_max: 1052, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 74, + advanceWidth: 1139, + }, + b: { + x_min: 134, + x_max: 1055, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 134, + advanceWidth: 1139, + }, + c: { + x_min: 80, + x_max: 1005, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 80, + advanceWidth: 1024, + }, + d: { + x_min: 70, + x_max: 991, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 70, + advanceWidth: 1139, + }, + e: { + x_min: 75, + x_max: 1054, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 75, + advanceWidth: 1139, + }, + f: { + x_min: 19, + x_max: 640, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 19, + advanceWidth: 569, + }, + g: { + x_min: 66, + x_max: 1002, + y_min: -431, + y_max: 1086, + ha: 1517, + leftSideBearing: 66, + advanceWidth: 1139, + }, + h: { + x_min: 135, + x_max: 1000, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 135, + advanceWidth: 1139, + }, + i: { + x_min: 136, + x_max: 316, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 136, + advanceWidth: 455, + }, + j: { + x_min: -94, + x_max: 314, + y_min: -431, + y_max: 1466, + ha: 1897, + leftSideBearing: -94, + advanceWidth: 455, + }, + k: { + x_min: 136, + x_max: 1016, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 136, + advanceWidth: 1024, + }, + l: { + x_min: 131, + x_max: 311, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 131, + advanceWidth: 455, + }, + m: { + x_min: 135, + x_max: 1574, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 1706, + }, + n: { + x_min: 135, + x_max: 998, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 1139, + }, + o: { + x_min: 68, + x_max: 1063, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 68, + advanceWidth: 1139, + }, + p: { + x_min: 135, + x_max: 1057, + y_min: -407, + y_max: 1086, + ha: 1493, + leftSideBearing: 135, + advanceWidth: 1139, + }, + q: { + x_min: 72, + x_max: 992, + y_min: -407, + y_max: 1086, + ha: 1493, + leftSideBearing: 72, + advanceWidth: 1139, + }, + r: { + x_min: 133, + x_max: 710, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 133, + advanceWidth: 682, + }, + s: { + x_min: 63, + x_max: 945, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 63, + advanceWidth: 1024, + }, + t: { + x_min: 36, + x_max: 554, + y_min: -14, + y_max: 1433, + ha: 1447, + leftSideBearing: 36, + advanceWidth: 569, + }, + u: { + x_min: 131, + x_max: 992, + y_min: -24, + y_max: 1062, + ha: 1086, + leftSideBearing: 131, + advanceWidth: 1139, + }, + v: { + x_min: 26, + x_max: 1000, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 26, + advanceWidth: 1024, + }, + w: { + x_min: 6, + x_max: 1463, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 6, + advanceWidth: 1479, + }, + x: { + x_min: 15, + x_max: 1009, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 15, + advanceWidth: 1024, + }, + y: { + x_min: 33, + x_max: 1006, + y_min: -431, + y_max: 1062, + ha: 1493, + leftSideBearing: 33, + advanceWidth: 1024, + }, + z: { + x_min: 40, + x_max: 980, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 40, + advanceWidth: 1024, + }, + '{': { + x_min: 57, + x_max: 636, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 57, + advanceWidth: 684, + }, + '|': { + x_min: 188, + x_max: 345, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 188, + advanceWidth: 532, + }, + '}': { + x_min: 47, + x_max: 626, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 47, + advanceWidth: 684, + }, + '~': { + x_min: 87, + x_max: 1110, + y_min: 557, + y_max: 885, + ha: 328, + leftSideBearing: 87, + advanceWidth: 1196, + }, + }, + fontFamily: 'sans-serif', + resolution: 2048, + generatedOn: '2020-10-18T18:48:11.823Z', +}; + + +/***/ }), + +/***/ "./src/fonts/serif_text_metrics.ts": +/*!*****************************************!*\ + !*** ./src/fonts/serif_text_metrics.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SerifFont": () => (/* binding */ SerifFont) +/* harmony export */ }); +const SerifFont = { + smufl: false, + name: 'SERIF', + spacing: 50, + Description: 'Built-in serif font', + bold: true, + italic: true, + monospaced: false, + serifs: true, + glyphs: { + '0': { + x_min: 49, + x_max: 975, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 49, + advanceWidth: 1024, + }, + '1': { + x_min: 227, + x_max: 811, + y_min: 0, + y_max: 1383, + ha: 1383, + leftSideBearing: 227, + advanceWidth: 1024, + }, + '2': { + x_min: 61, + x_max: 965, + y_min: 0, + y_max: 1383, + ha: 1383, + leftSideBearing: 61, + advanceWidth: 1024, + }, + '3': { + x_min: 88, + x_max: 883, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 88, + advanceWidth: 1024, + }, + '4': { + x_min: 25, + x_max: 967, + y_min: 0, + y_max: 1384, + ha: 1384, + leftSideBearing: 25, + advanceWidth: 1024, + }, + '5': { + x_min: 66, + x_max: 898, + y_min: -27, + y_max: 1409, + ha: 1436, + leftSideBearing: 66, + advanceWidth: 1024, + }, + '6': { + x_min: 70, + x_max: 958, + y_min: -27, + y_max: 1401, + ha: 1428, + leftSideBearing: 70, + advanceWidth: 1024, + }, + '7': { + x_min: 41, + x_max: 920, + y_min: -16, + y_max: 1356, + ha: 1372, + leftSideBearing: 41, + advanceWidth: 1024, + }, + '8': { + x_min: 115, + x_max: 911, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 115, + advanceWidth: 1024, + }, + '9': { + x_min: 61, + x_max: 940, + y_min: -41, + y_max: 1383, + ha: 1424, + leftSideBearing: 61, + advanceWidth: 1024, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 512, + }, + '!': { + x_min: 266, + x_max: 488, + y_min: -22, + y_max: 1383, + ha: 1405, + leftSideBearing: 266, + advanceWidth: 682, + }, + '"': { + x_min: 157.2000021972655, + x_max: 678.2500021457677, + y_min: 881, + y_max: 1385, + ha: 504, + leftSideBearing: 157, + advanceWidth: 836, + }, + '#': { + x_min: 10, + x_max: 1016, + y_min: -1, + y_max: 1356, + ha: 1357, + leftSideBearing: 10, + advanceWidth: 1024, + }, + $: { + x_min: 90, + x_max: 936, + y_min: -180, + y_max: 1492, + ha: 1672, + leftSideBearing: 90, + advanceWidth: 1024, + }, + '%': { + x_min: 125, + x_max: 1581, + y_min: -30, + y_max: 1388, + ha: 1418, + leftSideBearing: 125, + advanceWidth: 1706, + }, + '&': { + x_min: 86, + x_max: 1536, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 86, + advanceWidth: 1593, + }, + "'": { + x_min: 97.20000219726548, + x_max: 273.2500021457677, + y_min: 881, + y_max: 1385, + ha: 504, + leftSideBearing: 97, + advanceWidth: 369, + }, + '(': { + x_min: 98, + x_max: 623, + y_min: -363, + y_max: 1383, + ha: 1746, + leftSideBearing: 98, + advanceWidth: 682, + }, + ')': { + x_min: 59, + x_max: 584, + y_min: -363, + y_max: 1383, + ha: 1746, + leftSideBearing: 59, + advanceWidth: 682, + }, + '*': { + x_min: 137.96078522291893, + x_max: 886.039214777081, + y_min: 543, + y_max: 1383, + ha: 840, + leftSideBearing: 137, + advanceWidth: 1024, + }, + '+': { + x_min: 61, + x_max: 1093, + y_min: 2, + y_max: 1034, + ha: 1032, + leftSideBearing: 61, + advanceWidth: 1155, + }, + ',': { + x_min: 115, + x_max: 399, + y_min: -291, + y_max: 208, + ha: 499, + leftSideBearing: 115, + advanceWidth: 512, + }, + '-': { + x_min: 80, + x_max: 584, + y_min: 396, + y_max: 525, + ha: 129, + leftSideBearing: 80, + advanceWidth: 682, + }, + '.': { + x_min: 143, + x_max: 371, + y_min: -22, + y_max: 205, + ha: 227, + leftSideBearing: 143, + advanceWidth: 512, + }, + '/': { + x_min: -17, + x_max: 586, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: -17, + advanceWidth: 569, + }, + ':': { + x_min: 166, + x_max: 394, + y_min: -22, + y_max: 943, + ha: 965, + leftSideBearing: 166, + advanceWidth: 569, + }, + ';': { + x_min: 164, + x_max: 448, + y_min: -290, + y_max: 943, + ha: 1233, + leftSideBearing: 164, + advanceWidth: 569, + }, + '<': { + x_min: 57, + x_max: 1098, + y_min: -15, + y_max: 1051, + ha: 1066, + leftSideBearing: 57, + advanceWidth: 1155, + }, + '=': { + x_min: 61, + x_max: 1093, + y_min: 246, + y_max: 791, + ha: 545, + leftSideBearing: 61, + advanceWidth: 1155, + }, + '>': { + x_min: 57, + x_max: 1098, + y_min: -15, + y_max: 1051, + ha: 1066, + leftSideBearing: 57, + advanceWidth: 1155, + }, + '?': { + x_min: 139, + x_max: 848, + y_min: -15, + y_max: 1383, + ha: 1398, + leftSideBearing: 139, + advanceWidth: 909, + }, + '@': { + x_min: 238, + x_max: 1657, + y_min: -29, + y_max: 1386, + ha: 1415, + leftSideBearing: 238, + advanceWidth: 1886, + }, + A: { + x_min: 31, + x_max: 1445, + y_min: 0, + y_max: 1380, + ha: 1380, + leftSideBearing: 31, + advanceWidth: 1479, + }, + B: { + x_min: 35, + x_max: 1214, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1366, + }, + C: { + x_min: 57, + x_max: 1296, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 57, + advanceWidth: 1366, + }, + D: { + x_min: 33, + x_max: 1403, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 33, + advanceWidth: 1479, + }, + E: { + x_min: 25, + x_max: 1222, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1251, + }, + F: { + x_min: 25, + x_max: 1119, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1139, + }, + G: { + x_min: 66, + x_max: 1452, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 66, + advanceWidth: 1479, + }, + H: { + x_min: 39, + x_max: 1438, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 39, + advanceWidth: 1479, + }, + I: { + x_min: 37, + x_max: 642, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 37, + advanceWidth: 682, + }, + J: { + x_min: 20, + x_max: 758, + y_min: -28, + y_max: 1356, + ha: 1384, + leftSideBearing: 20, + advanceWidth: 797, + }, + K: { + x_min: 70, + x_max: 1479, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 70, + advanceWidth: 1479, + }, + L: { + x_min: 25, + x_max: 1224, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1251, + }, + M: { + x_min: 25, + x_max: 1768, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1821, + }, + N: { + x_min: 25, + x_max: 1450, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 25, + advanceWidth: 1479, + }, + O: { + x_min: 70, + x_max: 1409, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 70, + advanceWidth: 1479, + }, + P: { + x_min: 33, + x_max: 1110, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 33, + advanceWidth: 1139, + }, + Q: { + x_min: 70, + x_max: 1435, + y_min: -364.28571588721996, + y_max: 1383, + ha: 1747.28571588722, + leftSideBearing: 70, + advanceWidth: 1479, + }, + R: { + x_min: 35, + x_max: 1347, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1366, + }, + S: { + x_min: 86, + x_max: 1006, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 86, + advanceWidth: 1139, + }, + T: { + x_min: 35, + x_max: 1214, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1251, + }, + U: { + x_min: 29, + x_max: 1444, + y_min: -28, + y_max: 1356, + ha: 1384, + leftSideBearing: 29, + advanceWidth: 1479, + }, + V: { + x_min: 33, + x_max: 1428, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 33, + advanceWidth: 1479, + }, + W: { + x_min: 10, + x_max: 1906, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 10, + advanceWidth: 1933, + }, + X: { + x_min: 20, + x_max: 1449, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 20, + advanceWidth: 1479, + }, + Y: { + x_min: 45, + x_max: 1441, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 45, + advanceWidth: 1479, + }, + Z: { + x_min: 18, + x_max: 1222, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 18, + advanceWidth: 1251, + }, + '[': { + x_min: 180, + x_max: 612, + y_min: -319, + y_max: 1355, + ha: 1674, + leftSideBearing: 180, + advanceWidth: 682, + }, + '\\': { + x_min: -17, + x_max: 586, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: -17, + advanceWidth: 569, + }, + ']': { + x_min: 70, + x_max: 502, + y_min: -319, + y_max: 1355, + ha: 1674, + leftSideBearing: 70, + advanceWidth: 682, + }, + '^': { + x_min: 49, + x_max: 914, + y_min: 608, + y_max: 1355, + ha: 747, + leftSideBearing: 49, + advanceWidth: 961, + }, + _: { + x_min: 0, + x_max: 1024, + y_min: -255, + y_max: -153, + ha: 102, + leftSideBearing: 0, + advanceWidth: 1024, + }, + '`': { + x_min: 39, + x_max: 499, + y_min: 1037, + y_max: 1392.509803639748, + ha: 355.50980363974804, + leftSideBearing: 39, + advanceWidth: 682, + }, + a: { + x_min: 76, + x_max: 905, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 76, + advanceWidth: 909, + }, + b: { + x_min: 6, + x_max: 958, + y_min: -20, + y_max: 1399, + ha: 1419, + leftSideBearing: 6, + advanceWidth: 1024, + }, + c: { + x_min: 51, + x_max: 843, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 51, + advanceWidth: 909, + }, + d: { + x_min: 55, + x_max: 1006, + y_min: -20, + y_max: 1399, + ha: 1419, + leftSideBearing: 55, + advanceWidth: 1024, + }, + e: { + x_min: 51, + x_max: 868, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 51, + advanceWidth: 909, + }, + f: { + x_min: 41, + x_max: 783, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 41, + advanceWidth: 682, + }, + g: { + x_min: 57, + x_max: 963, + y_min: -446, + y_max: 942, + ha: 1388, + leftSideBearing: 57, + advanceWidth: 1024, + }, + h: { + x_min: 18, + x_max: 997, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 18, + advanceWidth: 1024, + }, + i: { + x_min: 33, + x_max: 516, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 33, + advanceWidth: 569, + }, + j: { + x_min: -142, + x_max: 397, + y_min: -446, + y_max: 1399, + ha: 1845, + leftSideBearing: -142, + advanceWidth: 569, + }, + k: { + x_min: 14, + x_max: 1029, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 14, + advanceWidth: 1024, + }, + l: { + x_min: 39, + x_max: 523, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 39, + advanceWidth: 569, + }, + m: { + x_min: 33, + x_max: 1587, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 33, + advanceWidth: 1593, + }, + n: { + x_min: 33, + x_max: 993, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 33, + advanceWidth: 1024, + }, + o: { + x_min: 59, + x_max: 963, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 59, + advanceWidth: 1024, + }, + p: { + x_min: 10, + x_max: 964, + y_min: -443, + y_max: 944, + ha: 1387, + leftSideBearing: 10, + advanceWidth: 1024, + }, + q: { + x_min: 49, + x_max: 999, + y_min: -443, + y_max: 942.0135137169275, + ha: 1385.0135137169275, + leftSideBearing: 49, + advanceWidth: 1024, + }, + r: { + x_min: 10, + x_max: 685, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 10, + advanceWidth: 682, + }, + s: { + x_min: 104, + x_max: 713, + y_min: -20, + y_max: 942.0263161804552, + ha: 962.0263161804552, + leftSideBearing: 104, + advanceWidth: 797, + }, + t: { + x_min: 27, + x_max: 572, + y_min: -18, + y_max: 1186, + ha: 1204, + leftSideBearing: 27, + advanceWidth: 569, + }, + u: { + x_min: 18, + x_max: 981, + y_min: -21, + y_max: 921, + ha: 942, + leftSideBearing: 18, + advanceWidth: 1024, + }, + v: { + x_min: 39, + x_max: 976, + y_min: -28, + y_max: 921, + ha: 949, + leftSideBearing: 39, + advanceWidth: 1024, + }, + w: { + x_min: 43, + x_max: 1423, + y_min: -28, + y_max: 921, + ha: 949, + leftSideBearing: 43, + advanceWidth: 1479, + }, + x: { + x_min: 35, + x_max: 989, + y_min: 0, + y_max: 921, + ha: 921, + leftSideBearing: 35, + advanceWidth: 1024, + }, + y: { + x_min: 29, + x_max: 976, + y_min: -445, + y_max: 921, + ha: 1366, + leftSideBearing: 29, + advanceWidth: 1024, + }, + z: { + x_min: 55, + x_max: 855, + y_min: 0, + y_max: 921, + ha: 921, + leftSideBearing: 55, + advanceWidth: 909, + }, + '{': { + x_min: 205, + x_max: 717, + y_min: -377, + y_max: 1397, + ha: 1774, + leftSideBearing: 205, + advanceWidth: 983, + }, + '|': { + x_min: 137, + x_max: 273, + y_min: -512, + y_max: 1535, + ha: 2047, + leftSideBearing: 137, + advanceWidth: 410, + }, + '}': { + x_min: 266, + x_max: 778, + y_min: -377, + y_max: 1397, + ha: 1774, + leftSideBearing: 266, + advanceWidth: 983, + }, + '~': { + x_min: 82, + x_max: 1028, + y_min: 380, + y_max: 666, + ha: 286, + leftSideBearing: 82, + advanceWidth: 1108, + }, + }, + fontFamily: 'serif', + resolution: 2048, + generatedOn: '2020-10-18T19:03:12.514Z', +}; + + +/***/ }), + +/***/ "./src/fonts/textfonts.ts": +/*!********************************!*\ + !*** ./src/fonts/textfonts.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadTextFonts": () => (/* binding */ loadTextFonts) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petalumascript_glyphs */ "./src/fonts/petalumascript_glyphs.ts"); +/* harmony import */ var _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./robotoslab_glyphs */ "./src/fonts/robotoslab_glyphs.ts"); +/* harmony import */ var _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sans_bold_text_metrics */ "./src/fonts/sans_bold_text_metrics.ts"); +/* harmony import */ var _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sans_text_metrics */ "./src/fonts/sans_text_metrics.ts"); +/* harmony import */ var _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serif_text_metrics */ "./src/fonts/serif_text_metrics.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +function loadTextFonts() { + // Sans-serif fallback font, very close to Arial + { + const fontData = _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__.SansFontBold; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // Usually @ is the tallest and widest character, although not the + // highest since it starts below the baseline. + const maxSizeGlyph = '@'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: true, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Generic SANS font', + }); + } + // Sans-serif fallback font, very close to Arial + { + const fontData = _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__.SansFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // Usually @ is the tallest and widest character, although not the + // highest since it starts below the baseline. + const maxSizeGlyph = '@'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Generic SANS font', + }); + } + // Serif fallback font, very close to Times + { + const fontData = _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__.SerifFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // M is wider, but H is taller. :-) + // Lowercase b is also taller in this font. + const maxSizeGlyph = '@'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: true, + description: 'Generic SERIF font', + }); + } + // Roboto Slab + { + const fontData = _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__.RobotoSlabFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // Previously we used 'H', but it isn't actually the tallest or the widest. + // Interestingly, the lowercase 'b' is the tallest glyph. + const maxSizeGlyph = 'b'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: true, + description: 'Text font to pair with the Bravura / Gonville music fonts.', + }); + } + // PetalumaScript + { + const fontData = _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaScriptFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // M is wider, but H is taller. :-) + // Lowercase b is also taller in this font. + const maxSizeGlyph = 'b'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Text font to pair with the Petaluma music font.', + }); + } +} + + +/***/ }), + +/***/ "./src/formatter.ts": +/*!**************************!*\ + !*** ./src/formatter.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Formatter": () => (/* binding */ Formatter) +/* harmony export */ }); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + + + + + +/** + * Create `Alignment`s for each tick in `voices`. Also calculate the + * total number of ticks in voices. + */ +function createContexts(voices, makeContext, addToContext) { + if (voices.length == 0) + return { + map: {}, + array: [], + list: [], + resolutionMultiplier: 0, + }; + // Initialize tick maps. + const tickToContextMap = {}; + const tickList = []; + const contexts = []; + const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); + // For each voice, extract notes and create a context for every + // new tick that hasn't been seen before. + voices.forEach((voice, voiceIndex) => { + // Use resolution multiplier as denominator so that no additional expansion + // of fractional tick values is needed. + const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier); + voice.getTickables().forEach((tickable) => { + const integerTicks = ticksUsed.numerator; + // If we have no tick context for this tick, create one. + if (!tickToContextMap[integerTicks]) { + const newContext = makeContext({ tickID: integerTicks }); + contexts.push(newContext); + tickToContextMap[integerTicks] = newContext; + // Maintain a list of unique integerTicks. + tickList.push(integerTicks); + } + // Add this tickable to the TickContext. + addToContext(tickable, tickToContextMap[integerTicks], voiceIndex); + ticksUsed.add(tickable.getTicks()); + }); + }); + return { + map: tickToContextMap, + array: contexts, + list: tickList.sort((a, b) => a - b), + resolutionMultiplier, + }; +} +// eslint-disable-next-line +function L(...args) { + if (Formatter.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_9__.log)('Vex.Flow.Formatter', args); +} +/** + * Get the rest line number of the next non-rest note(s). + * @param notes array of Notes + * @param currRestLine + * @param currNoteIndex current note index + * @param compare if true, return the midpoint between the current rest line and the next rest line + * @returns a line number, which determines the vertical position of a rest. + */ +function getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) { + // If no valid next note group, nextRestLine is same as current. + let nextRestLine = currRestLine; + // Start with the next note and keep going until we find a valid non-rest note group. + for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) { + const note = notes[noteIndex]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isNote)(note) && !note.isRest() && !note.shouldIgnoreTicks()) { + nextRestLine = note.getLineForRest(); + break; + } + } + // Locate the mid point between two lines. + if (compare && currRestLine !== nextRestLine) { + const top = Math.max(currRestLine, nextRestLine); + const bot = Math.min(currRestLine, nextRestLine); + nextRestLine = (0,_util__WEBPACK_IMPORTED_MODULE_9__.midLine)(top, bot); + } + return nextRestLine; +} +/** + * Format implements the formatting and layout algorithms that are used + * to position notes in a voice. The algorithm can align multiple voices both + * within a stave, and across multiple staves. + * + * To do this, the formatter breaks up voices into a grid of rational-valued + * `ticks`, to which each note is assigned. Then, minimum widths are assigned + * to each tick based on the widths of the notes and modifiers in that tick. This + * establishes the smallest amount of space required for each tick. + * + * Finally, the formatter distributes the left over space proportionally to + * all the ticks, setting the `x` values of the notes in each tick. + * + * See `tests/formatter_tests.ts` for usage examples. The helper functions included + * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples. + */ +class Formatter { + /** + * Helper function to layout "notes" one after the other without + * regard for proportions. Useful for tests and debugging. + */ + static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) { + notes.reduce((accumulator, note) => { + note.addToModifierContext(new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext()); + const tick = new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext().addTickable(note).preFormat(); + const metrics = tick.getMetrics(); + tick.setX(accumulator + metrics.totalLeftPx); + return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween; + }, x); + } + /** Helper function to plot formatter debug info. */ + static plotDebugging(ctx, formatter, xPos, y1, y2, options) { + options = Object.assign({ stavePadding: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.padding') }, options); + const x = xPos + options.stavePadding; + const contextGaps = formatter.contextGaps; + function stroke(x1, x2, color) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(1); + ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1); + } + ctx.save(); + ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, 8); + contextGaps.gaps.forEach((gap) => { + stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)'); + ctx.setFillStyle('green'); + ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12); + }); + ctx.setFillStyle('red'); + ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27); + ctx.restore(); + } + /** + * Helper function to format and draw a single voice. Returns a bounding + * box for the notation. + * @param ctx the rendering context + * @param stave the stave to which to draw (`Stave` or `TabStave`) + * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.) + * @param params one of below: + * * Setting `autobeam` only `(context, stave, notes, true)` or + * `(ctx, stave, notes, {autobeam: true})` + * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})` + * * Setting both a struct is needed `(context, stave, notes, { + * autobeam: true, align_rests: true})` + * * `autobeam` automatically generates beams for the notes. + * * `align_rests` aligns rests with nearby notes. + */ + static FormatAndDraw(ctx, stave, notes, params) { + let options = { + auto_beam: false, + align_rests: false, + }; + if (typeof params === 'object') { + options = Object.assign(Object.assign({}, options), params); + } + else if (typeof params === 'boolean') { + options.auto_beam = params; + } + // Start by creating a voice and adding all the notes to it. + const voice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes); + // Then create beams, if requested. + const beams = options.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(voice) : []; + // Instantiate a `Formatter` and format the notes. + new Formatter() + .joinVoices([voice]) // , { align_rests: options.align_rests }) + .formatToStave([voice], stave, { align_rests: options.align_rests, stave }); + // Render the voice and beams to the stave. + voice.setStave(stave).draw(ctx, stave); + beams.forEach((beam) => beam.setContext(ctx).draw()); + // Return the bounding box of the voice. + return voice.getBoundingBox(); + } + /** + * Helper function to format and draw aligned tab and stave notes in two + * separate staves. + * @param ctx the rendering context + * @param tabstave a `TabStave` instance on which to render `TabNote`s. + * @param stave a `Stave` instance on which to render `Note`s. + * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.) + * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.) + * @param autobeam automatically generate beams. + * @param params a configuration object: + * * `autobeam` automatically generates beams for the notes. + * * `align_rests` aligns rests with nearby notes. + */ + static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) { + let opts = { + auto_beam: autobeam, + align_rests: false, + }; + if (typeof params === 'object') { + opts = Object.assign(Object.assign({}, opts), params); + } + else if (typeof params === 'boolean') { + opts.auto_beam = params; + } + // Create a `4/4` voice for `notes`. + const notevoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes); + // Create a `4/4` voice for `tabnotes`. + const tabvoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(tabnotes); + // Then create beams, if requested. + const beams = opts.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(notevoice) : []; + // Instantiate a `Formatter` and align tab and stave notes. + new Formatter() + .joinVoices([notevoice]) // , { align_rests: opts.align_rests }) + .joinVoices([tabvoice]) + .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests }); + // Render voices and beams to staves. + notevoice.draw(ctx, stave); + tabvoice.draw(ctx, tabstave); + beams.forEach((beam) => beam.setContext(ctx).draw()); + // Draw a connector between tab and note staves. + new _staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave, tabstave).setContext(ctx).draw(); + } + /** + * Automatically set the vertical position of rests based on previous/next note positions. + * @param tickables an array of Tickables. + * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes. + * @param alignTuplets If `false`, ignores tuplets. + */ + static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) { + tickables.forEach((currTickable, index) => { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(currTickable) && currTickable.isRest()) { + if (currTickable.getTuplet() && !alignTuplets) { + return; + } + // If activated rests not on default can be rendered as specified. + const position = currTickable.getGlyphProps().position.toUpperCase(); + if (position !== 'R/4' && position !== 'B/4') { + return; + } + if (alignAllNotes || currTickable.getBeam()) { + // Align rests with previous/next notes. + const props = currTickable.getKeyProps()[0]; + if (index === 0) { + props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false); + } + else if (index > 0 && index < tickables.length) { + // If previous tickable is a rest, use its line number. + const prevTickable = tickables[index - 1]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(prevTickable)) { + if (prevTickable.isRest()) { + props.line = prevTickable.getKeyProps()[0].line; + } + else { + const restLine = prevTickable.getLineForRest(); + // Get the rest line for next valid non-rest note group. + props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true); + } + } + } + currTickable.setKeyLine(0, props.line); + } + } + }); + } + constructor(options) { + this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options); + this.justifyWidth = 0; + this.totalCost = 0; + this.totalShift = 0; + this.durationStats = {}; + // Minimum width required to render all the notes in the voices. + this.minTotalWidth = 0; + // This is set to `true` after `minTotalWidth` is calculated. + this.hasMinTotalWidth = false; + // Arrays of tick and modifier contexts. + this.tickContexts = { + map: {}, + array: [], + list: [], + resolutionMultiplier: 0, + }; + this.modifierContexts = []; + // Gaps between contexts, for free movement of notes post + // formatting. + this.contextGaps = { + total: 0, + gaps: [], + }; + this.voices = []; + this.lossHistory = []; + } + /** + * Find all the rests in each of the `voices` and align them to neighboring notes. + * + * @param voices + * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests. + */ + alignRests(voices, alignAllNotes) { + if (!voices || !voices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format rests'); + } + voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes)); + } + /** + * Estimate the width required to render 'voices'. This is done by: + * 1. Sum the widths of all the tick contexts + * 2. Estimate the padding. + * The latter is done by calculating the padding 3 different ways, and taking the + * greatest value: + * 1. the padding required for unaligned notes in different voices + * 2. the padding based on the stddev of the tickable widths + * 3. the padding based on the stddev of the tickable durations. + * + * The last 2 quantities estimate a 'width entropy', where notes might need more + * room than the proportional formatting gives them. A measure of all same duration + * and width will need no extra padding, and all these quantities will be + * zero in that case. + * + * Note: joinVoices has to be called before calling preCalculateMinTotalWidth. + * + * @param voices the voices that contain the notes + * @returns the estimated width in pixels + */ + preCalculateMinTotalWidth(voices) { + const unalignedPadding = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding'); + // Calculate additional padding based on 3 methods: + // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations + let unalignedCtxCount = 0; + let wsum = 0; + let dsum = 0; + const widths = []; + const durations = []; + // Cache results. + if (this.hasMinTotalWidth) + return this.minTotalWidth; + // Create tick contexts. + if (!voices) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', "'voices' required to run preCalculateMinTotalWidth"); + } + this.createTickContexts(voices); + // eslint-disable-next-line + const { list: contextList, map: contextMap } = this.tickContexts; + this.minTotalWidth = 0; + // Go through each tick context and calculate total width, + // and also accumulate values used in padding hints + contextList.forEach((tick) => { + const context = contextMap[tick]; + context.preFormat(); + // If this TC doesn't have all the voices on it, it's unaligned. + // so increment the unaligned padding accumulator + if (context.getTickables().length < voices.length) { + unalignedCtxCount += 1; + } + // Calculate the 'width entropy' over all the Tickables. + context.getTickables().forEach((t) => { + wsum += t.getMetrics().width; + dsum += t.getTicks().value(); + widths.push(t.getMetrics().width); + durations.push(t.getTicks().value()); + }); + const width = context.getWidth(); + this.minTotalWidth += width; + }); + this.hasMinTotalWidth = true; + // normalized (0-1) STDDEV of widths/durations gives us padding hints. + const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length; + const wvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(widths.map((ll) => Math.pow(ll - wavg, 2))); + const wpads = Math.pow(wvar / widths.length, 0.5) / wavg; + const davg = dsum / durations.length; + const dvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(durations.map((ll) => Math.pow(ll - davg, 2))); + const dpads = Math.pow(dvar / durations.length, 0.5) / davg; + // Find max of 3 methods pad the width with that + const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding; + const unalignedPad = unalignedPadding * unalignedCtxCount; + return this.minTotalWidth + Math.max(unalignedPad, padmax); + } + /** + * Get minimum width required to render all voices. Either `format` or + * `preCalculateMinTotalWidth` must be called before this method. + */ + getMinTotalWidth() { + if (!this.hasMinTotalWidth) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoMinTotalWidth', "Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'"); + } + return this.minTotalWidth; + } + /** Calculate the resolution multiplier for `voices`. */ + static getResolutionMultiplier(voices) { + if (!voices || !voices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format'); + } + const totalTicks = voices[0].getTotalTicks(); + const resolutionMultiplier = voices.reduce((accumulator, voice) => { + if (!voice.getTotalTicks().equals(totalTicks)) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.'); + } + if (voice.getMode() === _voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.STRICT && !voice.isComplete()) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('IncompleteVoice', 'Voice does not have enough notes.'); + } + return Math.max(accumulator, _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction.LCM(accumulator, voice.getResolutionMultiplier())); + }, 1); + return resolutionMultiplier; + } + /** Create a `ModifierContext` for each tick in `voices`. */ + createModifierContexts(voices) { + if (voices.length == 0) + return; + const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); + // Initialize tick maps. + const tickToContextMap = new Map(); + const contexts = []; + // For each voice, extract notes and create a context for every + // new tick that hasn't been seen before. + voices.forEach((voice) => { + // Use resolution multiplier as denominator so that no additional expansion + // of fractional tick values is needed. + const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier); + voice.getTickables().forEach((tickable) => { + const integerTicks = ticksUsed.numerator; + let staveTickToContextMap = tickToContextMap.get(tickable.getStave()); + // If we have no tick context for this tick, create one. + if (!staveTickToContextMap) { + tickToContextMap.set(tickable.getStave(), {}); + staveTickToContextMap = tickToContextMap.get(tickable.getStave()); + } + if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) { + const newContext = new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext(); + contexts.push(newContext); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + staveTickToContextMap[integerTicks] = newContext; + } + // Add this tickable to the TickContext. + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + tickable.addToModifierContext(staveTickToContextMap[integerTicks]); + ticksUsed.add(tickable.getTicks()); + }); + }); + this.modifierContexts.push({ + map: tickToContextMap, + array: contexts, + resolutionMultiplier, + }); + } + /** + * Create a `TickContext` for each tick in `voices`. Also calculate the + * total number of ticks in voices. + */ + createTickContexts(voices) { + const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex); + const contexts = createContexts(voices, (tick) => new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext(tick), fn); + this.tickContexts = contexts; + const contextArray = this.tickContexts.array; + contextArray.forEach((context) => { + context.tContexts = contextArray; + }); + return contexts; + } + /** + * Get the AlignmentContexts of TickContexts that were created by createTickContexts. + * Returns undefined if createTickContexts has not yet been run. + */ + getTickContexts() { + return this.tickContexts; + } + /** + * This is the core formatter logic. Format voices and justify them + * to `justifyWidth` pixels. `renderingContext` is required to justify elements + * that can't retrieve widths without a canvas. This method sets the `x` positions + * of all the tickables/notes in the formatter. + */ + preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) { + // Initialize context maps. + const contexts = this.tickContexts; + if (!contexts) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoTickContexts', 'preFormat requires TickContexts'); + } + const { list: contextList, map: contextMap } = contexts; + // Reset loss history for evaluator. + this.lossHistory = []; + // If voices and a stave were provided, set the Stave for each voice + // and preFormat to apply Y values to the notes; + if (voicesParam && stave) { + voicesParam.forEach((voice) => voice.setStave(stave).preFormat()); + } + // Now distribute the ticks to each tick context, and assign them their + // own X positions. + let x = 0; + let shift = 0; + this.minTotalWidth = 0; + let totalTicks = 0; + // Pass 1: Give each note maximum width requested by context. + contextList.forEach((tick) => { + const context = contextMap[tick]; + // Make sure that all tickables in this context have calculated their + // space requirements. + context.preFormat(); + const width = context.getWidth(); + this.minTotalWidth += width; + const maxTicks = context.getMaxTicks().value(); + totalTicks += maxTicks; + const metrics = context.getMetrics(); + x = x + shift + metrics.totalLeftPx; + context.setX(x); + // Calculate shift for the next tick. + shift = width - metrics.totalLeftPx; + }); + // Use softmax based on all notes across all staves. (options.globalSoftmax) + const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions; + const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks)); + const expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(contextList.map(exp)); + this.minTotalWidth = x + shift; + this.hasMinTotalWidth = true; + // No justification needed. End formatting. + if (justifyWidth <= 0) + return this.evaluate(); + // Start justification. Subtract the right extra pixels of the final context because the formatter + // justifies based on the context's X position, which is the left-most part of the note head. + const firstContext = contextMap[contextList[0]]; + const lastContext = contextMap[contextList[contextList.length - 1]]; + // Calculate the "distance error" between the tick contexts. The expected distance is the spacing proportional to + // the softmax of the ticks. + function calculateIdealDistances(adjustedJustifyWidth) { + const distances = contextList.map((tick, i) => { + const context = contextMap[tick]; + const voices = context.getTickablesByVoice(); + let backTickable; + if (i > 0) { + const prevContext = contextMap[contextList[i - 1]]; + // Go through each tickable and search backwards for another tickable + // in the same voice. If found, use that duration (ticks) to calculate + // the expected distance. + for (let j = i - 1; j >= 0; j--) { + const backTick = contextMap[contextList[j]]; + const backVoices = backTick.getTickablesByVoice(); + // Look for matching voices between tick contexts. + const matchingVoices = []; + Object.keys(voices).forEach((v) => { + if (backVoices[v]) { + matchingVoices.push(v); + } + }); + if (matchingVoices.length > 0) { + // Found matching voices, get largest duration + let maxTicks = 0; + let maxNegativeShiftPx = Infinity; + let expectedDistance = 0; + matchingVoices.forEach((v) => { + const ticks = backVoices[v].getTicks().value(); + if (ticks > maxTicks) { + backTickable = backVoices[v]; + maxTicks = ticks; + } + // Calculate the limits of the shift based on modifiers, etc. + const thisTickable = voices[v]; + const insideLeftEdge = thisTickable.getX() - + (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx); + const backMetrics = backVoices[v].getMetrics(); + const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx; + // Don't allow shifting if notes in the same voice can collide + maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge); + }); + // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right + // so that two different tick contexts don't align across staves. + maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05)); + // Calculate the expected distance of the current context from the last matching tickable. The + // distance is scaled down by the softmax for the voice. + if (globalSoftmax) { + const t = totalTicks; + expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth; + } + else if (typeof backTickable !== 'undefined') { + expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth; + } + return { + expectedDistance, + maxNegativeShiftPx, + fromTickable: backTickable, + }; + } + } + } + return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 }; + }); + return distances; + } + function shiftToIdealDistances(idealDistances) { + // Distribute ticks to the contexts based on the calculated distance error. + const centerX = adjustedJustifyWidth / 2; + let spaceAccum = 0; + contextList.forEach((tick, index) => { + const context = contextMap[tick]; + if (index > 0) { + const contextX = context.getX(); + const ideal = idealDistances[index]; + const errorPx = (0,_util__WEBPACK_IMPORTED_MODULE_9__.defined)(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum); + let negativeShiftPx = 0; + if (errorPx > 0) { + spaceAccum += errorPx; + } + else if (errorPx < 0) { + negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx)); + spaceAccum += -negativeShiftPx; + } + context.setX(contextX + spaceAccum); + } + // Move center aligned tickables to middle + context.getCenterAlignedTickables().forEach((tickable) => { + tickable.setCenterXShift(centerX - context.getX()); + }); + }); + return lastContext.getX() - firstContext.getX(); + } + const adjustedJustifyWidth = justifyWidth - + lastContext.getMetrics().notePx - + lastContext.getMetrics().totalRightPx - + firstContext.getMetrics().totalLeftPx; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont(); + const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin'); + const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax'); + const leftPadding = musicFont.lookupMetric('stave.padding'); + let targetWidth = adjustedJustifyWidth; + const distances = calculateIdealDistances(targetWidth); + let actualWidth = shiftToIdealDistances(distances); + // Just one context. Done formatting. + if (contextList.length === 1) + return 0; + const calcMinDistance = (targetWidth, distances) => { + let mdCalc = targetWidth / 2; + if (distances.length > 1) { + for (let di = 1; di < distances.length; ++di) { + mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc); + } + } + return mdCalc; + }; + const minDistance = calcMinDistance(targetWidth, distances); + // right justify to either the configured padding, or the min distance between notes, whichever is greatest. + // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break + // existing visual regression tests. + const paddingMaxCalc = (curTargetWidth) => { + let lastTickablePadding = 0; + const lastTickable = lastContext && lastContext.getMaxTickable(); + if (lastTickable) { + const voice = lastTickable.getVoice(); + // If the number of actual ticks in the measure <> configured ticks, right-justify + // because the softmax won't yield the correct value + if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) { + return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding; + } + const tickWidth = lastTickable.getWidth(); + lastTickablePadding = + voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding); + } + return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding; + }; + let paddingMax = paddingMaxCalc(targetWidth); + let paddingMin = paddingMax - (configMaxPadding - configMinPadding); + const maxX = adjustedJustifyWidth - paddingMin; + let iterations = maxIterations; + // Adjust justification width until the right margin is as close as possible to the calculated padding, + // without going over + while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) { + targetWidth -= actualWidth - maxX; + paddingMax = paddingMaxCalc(targetWidth); + paddingMin = paddingMax - (configMaxPadding - configMinPadding); + actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth)); + iterations--; + } + this.justifyWidth = justifyWidth; + return this.evaluate(); + } + /** Calculate the total cost of this formatting decision. */ + evaluate() { + const contexts = this.tickContexts; + const justifyWidth = this.justifyWidth; + // Calculate available slack per tick context. This works out how much freedom + // to move a context has in either direction, without affecting other notes. + this.contextGaps = { total: 0, gaps: [] }; + contexts.list.forEach((tick, index) => { + if (index === 0) + return; + const prevTick = contexts.list[index - 1]; + const prevContext = contexts.map[prevTick]; + const context = contexts.map[tick]; + const prevMetrics = prevContext.getMetrics(); + const currMetrics = context.getMetrics(); + // Calculate X position of right edge of previous note + const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx; + // Calculate X position of left edge of current note + const insideLeftEdge = context.getX() - currMetrics.totalLeftPx; + const gap = insideLeftEdge - insideRightEdge; + this.contextGaps.total += gap; + this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge }); + // Tell the tick contexts how much they can reposition themselves. + context.getFormatterMetrics().freedom.left = gap; + prevContext.getFormatterMetrics().freedom.right = gap; + }); + // Calculate mean distance in each voice for each duration type, then calculate + // how far each note is from the mean. + this.durationStats = {}; + const durationStats = this.durationStats; + function updateStats(duration, space) { + const stats = durationStats[duration]; + if (stats === undefined) { + durationStats[duration] = { mean: space, count: 1 }; + } + else { + stats.count += 1; + stats.mean = (stats.mean + space) / 2; + } + } + this.voices.forEach((voice) => { + voice.getTickables().forEach((note, i, notes) => { + const duration = note.getTicks().clone().simplify().toString(); + const metrics = note.getMetrics(); + const formatterMetrics = note.getFormatterMetrics(); + const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx; + let space = 0; + if (i < notes.length - 1) { + const rightNote = notes[i + 1]; + const rightMetrics = rightNote.getMetrics(); + const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx; + space = rightNoteEdge - leftNoteEdge; + formatterMetrics.space.used = rightNote.getX() - note.getX(); + rightNote.getFormatterMetrics().freedom.left = space; + } + else { + space = justifyWidth - leftNoteEdge; + formatterMetrics.space.used = justifyWidth - note.getX(); + } + formatterMetrics.freedom.right = space; + updateStats(duration, formatterMetrics.space.used); + }); + }); + // Calculate how much each note deviates from the mean. Loss function is square + // root of the sum of squared deviations. + let totalDeviation = 0; + this.voices.forEach((voice) => { + voice.getTickables().forEach((note) => { + const duration = note.getTicks().clone().simplify().toString(); + const metrics = note.getFormatterMetrics(); + metrics.space.mean = durationStats[duration].mean; + metrics.duration = duration; + metrics.iterations += 1; + metrics.space.deviation = metrics.space.used - metrics.space.mean; + totalDeviation += Math.pow(metrics.space.deviation, 2); + }); + }); + this.totalCost = Math.sqrt(totalDeviation); + this.lossHistory.push(this.totalCost); + return this.totalCost; + } + /** + * Run a single iteration of rejustification. At a high level, this method calculates + * the overall "loss" (or cost) of this layout, and repositions tickcontexts in an + * attempt to reduce the cost. You can call this method multiple times until it finds + * and oscillates around a global minimum. + * @param options[alpha] the "learning rate" for the formatter. It determines how much of a shift + * the formatter should make based on its cost function. + */ + tune(options) { + var _a; + const contexts = this.tickContexts; + if (!contexts) { + return 0; + } + const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5; + // Move `current` tickcontext by `shift` pixels, and adjust the freedom + // on adjacent tickcontexts. + function move(current, shift, prev, next) { + current.setX(current.getX() + shift); + current.getFormatterMetrics().freedom.left += shift; + current.getFormatterMetrics().freedom.right -= shift; + if (prev) + prev.getFormatterMetrics().freedom.right += shift; + if (next) + next.getFormatterMetrics().freedom.left -= shift; + } + let shift = 0; + this.totalShift = 0; + contexts.list.forEach((tick, index, list) => { + const context = contexts.map[tick]; + const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined; + const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined; + move(context, shift, prevContext, nextContext); + const cost = -(0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation)); + if (cost > 0) { + shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost)); + } + else if (cost < 0) { + if (nextContext) { + shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost)); + } + else { + shift = 0; + } + } + shift *= alpha; + this.totalShift += shift; + }); + return this.evaluate(); + } + /** + * This is the top-level call for all formatting logic completed + * after `x` *and* `y` values have been computed for the notes + * in the voices. + */ + postFormat() { + this.modifierContexts.forEach((modifierContexts) => { + modifierContexts.array.forEach((mc) => mc.postFormat()); + }); + this.tickContexts.list.forEach((tick) => { + this.tickContexts.map[tick].postFormat(); + }); + return this; + } + /** + * Take all `voices` and create `ModifierContext`s out of them. This tells + * the formatters that the voices belong on a single stave. + */ + joinVoices(voices) { + this.createModifierContexts(voices); + this.hasMinTotalWidth = false; + return this; + } + /** + * Align rests in voices, justify the contexts, and position the notes + * so voices are aligned and ready to render onto the stave. This method + * mutates the `x` positions of all tickables in `voices`. + * + * Voices are full justified to fit in `justifyWidth` pixels. + * + * Set `options.context` to the rendering context. Set `options.align_rests` + * to true to enable rest alignment. + */ + format(voices, justifyWidth, options) { + const opts = Object.assign({ align_rests: false }, options); + this.voices = voices; + const softmaxFactor = this.formatterOptions.softmaxFactor; + if (softmaxFactor) { + this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor)); + } + this.alignRests(voices, opts.align_rests); + this.createTickContexts(voices); + this.preFormat(justifyWidth, opts.context, voices, opts.stave); + // Only postFormat if a stave was supplied for y value formatting + if (opts.stave) + this.postFormat(); + return this; + } + // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`. + formatToStave(voices, stave, optionsParam) { + const options = Object.assign({ context: stave.getContext() }, optionsParam); + // eslint-disable-next-line + const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + L('Formatting voices to width: ', justifyWidth); + return this.format(voices, justifyWidth, options); + } + getTickContext(tick) { + var _a; + return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick]; + } +} +// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`. +Formatter.DEBUG = false; + + + +/***/ }), + +/***/ "./src/fraction.ts": +/*!*************************!*\ + !*** ./src/fraction.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Fraction": () => (/* binding */ Fraction) +/* harmony export */ }); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Author: Joshua Koo / @zz85 +// Author: @incompleteopus + + +/** Fraction represents a rational number. */ +class Fraction { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.Fraction; + } + /** + * GCD: Greatest common divisor using the Euclidean algorithm. + * Note: GCD(0, 0) => 0 and GCD(0, n) => n. + */ + static GCD(a, b) { + if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`); + } + let t; + while (b !== 0) { + t = b; + b = a % b; + a = t; + } + return a; + } + /** LCM: Lowest common multiple. */ + static LCM(a, b) { + return (a * b) / Fraction.GCD(a, b); + } + /** Lowest common multiple for more than two numbers. */ + static LCMM(args) { + if (args.length === 0) { + return 0; + } + else if (args.length === 1) { + return args[0]; + } + else if (args.length === 2) { + return Fraction.LCM(args[0], args[1]); + } + else { + // args.shift() removes the first number. + // LCM the first number with the rest of the numbers. + return Fraction.LCM(args.shift(), Fraction.LCMM(args)); + } + } + /** Set the numerator and denominator. */ + constructor(numerator, denominator) { + this.numerator = 1; + this.denominator = 1; + this.set(numerator, denominator); + } + /** Set the numerator and denominator. */ + set(numerator = 1, denominator = 1) { + this.numerator = numerator; + this.denominator = denominator; + return this; + } + /** Return the value of the fraction. */ + value() { + return this.numerator / this.denominator; + } + /** Simplify numerator and denominator using GCD. */ + simplify() { + let u = this.numerator; + let d = this.denominator; + const gcd = Fraction.GCD(u, d); + u /= gcd; + d /= gcd; + if (d < 0) { + d = -d; + u = -u; + } + return this.set(u, d); + } + /** Add value of another fraction. */ + add(param1 = 0, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + const lcm = Fraction.LCM(this.denominator, otherDenominator); + const a = lcm / this.denominator; + const b = lcm / otherDenominator; + const u = this.numerator * a + otherNumerator * b; + return this.set(u, lcm); + } + /** Substract value of another fraction. */ + subtract(param1 = 0, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + const lcm = Fraction.LCM(this.denominator, otherDenominator); + const a = lcm / this.denominator; + const b = lcm / otherDenominator; + const u = this.numerator * a - otherNumerator * b; + return this.set(u, lcm); + } + /** Multiply by value of another fraction. */ + multiply(param1 = 1, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator); + } + /** Divide by value of another Fraction. */ + divide(param1 = 1, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator); + } + /** Simplify both sides and check if they are equal. */ + equals(compare) { + const a = Fraction.__staticFractionA.copy(compare).simplify(); + const b = Fraction.__staticFractionB.copy(this).simplify(); + return a.numerator === b.numerator && a.denominator === b.denominator; + } + /** Greater than operator. */ + greaterThan(compare) { + const a = Fraction.__staticFractionB.copy(this); + a.subtract(compare); + return a.numerator > 0; + } + /** Greater than or equals operator. */ + greaterThanEquals(compare) { + const a = Fraction.__staticFractionB.copy(this); + a.subtract(compare); + return a.numerator >= 0; + } + /** Less than operator. */ + lessThan(compare) { + return !this.greaterThanEquals(compare); + } + /** Less than or equals operator. */ + lessThanEquals(compare) { + return !this.greaterThan(compare); + } + /** Return a new copy with current values. */ + clone() { + return new Fraction(this.numerator, this.denominator); + } + /** Copy value of another fraction. */ + copy(other) { + if (typeof other === 'number') { + return this.set(other, 1); + } + else { + return this.set(other.numerator, other.denominator); + } + } + /** Return the integer component (eg. 5/2 => 2). */ + quotient() { + return Math.floor(this.numerator / this.denominator); + } + /** Return the remainder component (eg. 5/2 => 1). */ + remainder() { + return this.numerator % this.denominator; + } + /** Calculate absolute value. */ + makeAbs() { + this.denominator = Math.abs(this.denominator); + this.numerator = Math.abs(this.numerator); + return this; + } + /** Return a raw string representation (eg. "5/2"). */ + toString() { + return `${this.numerator}/${this.denominator}`; + } + /** Return a simplified string respresentation. */ + toSimplifiedString() { + return Fraction.__staticFractionTmp.copy(this).simplify().toString(); + } + /** Return string representation in mixed form. */ + toMixedString() { + let s = ''; + const q = this.quotient(); + const f = Fraction.__staticFractionTmp.copy(this); + if (q < 0) { + f.makeAbs(); + } + if (q !== 0) { + s += q; + if (f.numerator !== 0) { + s += ` ${f.toSimplifiedString()}`; + } + } + else if (f.numerator === 0) { + s = '0'; + } + else { + s = f.toSimplifiedString(); + } + return s; + } + /** Parse a fraction string. */ + parse(str) { + const i = str.split('/'); + const n = parseInt(i[0], 10); + const d = i[1] ? parseInt(i[1], 10) : 1; + return this.set(n, d); + } +} +// Cached objects for comparisons. +Fraction.__staticFractionA = new Fraction(); +Fraction.__staticFractionB = new Fraction(); +Fraction.__staticFractionTmp = new Fraction(); + +/** Helper function to extract the numerator and denominator from another fraction. */ +function getNumeratorAndDenominator(n, d = 1) { + if (typeof n === 'number') { + // Both params are numbers, so we return them as [numerator, denominator]. + return [n, d]; + } + else { + // First param is a Fraction object. We ignore the second param. + return [n.numerator, n.denominator]; + } +} + + +/***/ }), + +/***/ "./src/frethandfinger.ts": +/*!*******************************!*\ + !*** ./src/frethandfinger.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FretHandFinger": () => (/* binding */ FretHandFinger) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// Author Larry Kuhns 2013 +// Class to draws string numbers into the notation. + + + + + + +class FretHandFinger extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.FretHandFinger; + } + // Arrange fingerings inside a ModifierContext. + static format(nums, state) { + const { left_shift, right_shift } = state; + const num_spacing = 1; + if (!nums || nums.length === 0) + return false; + const nums_list = []; + let prev_note = null; + let shiftLeft = 0; + let shiftRight = 0; + for (let i = 0; i < nums.length; ++i) { + const num = nums[i]; + const note = num.getNote(); + const pos = num.getPosition(); + const index = num.checkIndex(); + const props = note.getKeyProps()[index]; + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_3__.TextFormatter.create(num.textFont); + const textHeight = textFormatter.maxHeight; + if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) { + state.top_text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5; + } + if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) { + state.text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5; + } + if (note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + if (left_shift === 0) { + shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft); + } + if (right_shift === 0) { + shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight); + } + } + prev_note = note; + } + nums_list.push({ + note, + num, + pos, + line: props.line, + shiftL: shiftLeft, + shiftR: shiftRight, + }); + } + // Sort fingernumbers by line number. + nums_list.sort((a, b) => b.line - a.line); + let numShiftL = 0; + let numShiftR = 0; + let xWidthL = 0; + let xWidthR = 0; + let lastLine = null; + let lastNote = null; + for (let i = 0; i < nums_list.length; ++i) { + let num_shift = 0; + const { note, pos, num, line, shiftL, shiftR } = nums_list[i]; + // Reset the position of the string number every line. + if (line !== lastLine || note !== lastNote) { + numShiftL = left_shift + shiftL; + numShiftR = right_shift + shiftR; + } + const numWidth = num.getWidth() + num_spacing; + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + num.setXShift(left_shift + numShiftL); + num_shift = left_shift + numWidth; // spacing + xWidthL = num_shift > xWidthL ? num_shift : xWidthL; + } + else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { + num.setXShift(numShiftR); + num_shift = shiftRight + numWidth; // spacing + xWidthR = num_shift > xWidthR ? num_shift : xWidthR; + } + lastLine = line; + lastNote = note; + } + state.left_shift += xWidthL; + state.right_shift += xWidthR; + return true; + } + static easyScoreHook({ fingerings } = {}, note, builder) { + fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => { + const split = fingeringString.trim().split('.'); + const params = { number: split[0] }; + if (split[1]) + params.position = split[1]; + return builder.getFactory().Fingering(params); + }).map((fingering, index) => note.addModifier(fingering, index)); + } + constructor(finger) { + super(); + this.finger = finger; + this.width = 7; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; // Default position above stem or note head + this.x_shift = 0; + this.y_shift = 0; + this.x_offset = 0; // Horizontal offset from default + this.y_offset = 0; // Vertical offset from default + this.resetFont(); + } + setFretHandFinger(finger) { + this.finger = finger; + return this; + } + getFretHandFinger() { + return this.finger; + } + setOffsetX(x) { + this.x_offset = x; + return this; + } + setOffsetY(y) { + this.y_offset = y; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + let dot_x = start.x + this.x_shift + this.x_offset; + let dot_y = start.y + this.y_shift + this.y_offset + 5; + switch (this.position) { + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE: + dot_x -= 4; + dot_y -= 12; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW: + dot_x -= 2; + dot_y += 10; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT: + dot_x -= this.width; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT: + dot_x += 1; + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} does not exist`); + } + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText('' + this.finger, dot_x, dot_y); + ctx.restore(); + } +} +FretHandFinger.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 9, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/ghostnote.ts": +/*!**************************!*\ + !*** ./src/ghostnote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GhostNote": () => (/* binding */ GhostNote) +/* harmony export */ }); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description + + + +const ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.'; +class GhostNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_0__.StemmableNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GhostNote; + } + constructor(parameter) { + if (!parameter) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG); + } + let noteStruct; + if (typeof parameter === 'string') { + // Preserve backwards-compatibility + noteStruct = { duration: parameter }; + } + else if (typeof parameter === 'object') { + noteStruct = parameter; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG); + } + super(noteStruct); + // Note properties + this.setWidth(0); + } + /** + * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. + */ + isRest() { + return true; + } + setStave(stave) { + super.setStave(stave); + return this; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + // Draw Annotations + this.setRendered(); + for (let i = 0; i < this.modifiers.length; ++i) { + const modifier = this.modifiers[i]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isAnnotation)(modifier)) { + modifier.setContext(this.getContext()); + modifier.drawWithStyle(); + } + } + } +} + + +/***/ }), + +/***/ "./src/glyph.ts": +/*!**********************!*\ + !*** ./src/glyph.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Glyph": () => (/* binding */ Glyph), +/* harmony export */ "OutlineCode": () => (/* binding */ OutlineCode) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +var OutlineCode; +(function (OutlineCode) { + OutlineCode[OutlineCode["MOVE"] = 0] = "MOVE"; + OutlineCode[OutlineCode["LINE"] = 1] = "LINE"; + OutlineCode[OutlineCode["QUADRATIC"] = 2] = "QUADRATIC"; + OutlineCode[OutlineCode["BEZIER"] = 3] = "BEZIER"; +})(OutlineCode || (OutlineCode = {})); +class GlyphCacheEntry { + constructor(fontStack, code, category) { + this.point = -1; + this.metrics = Glyph.loadMetrics(fontStack, code, category); + this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift); + if (category) { + this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1); + } + } +} +class GlyphCache { + constructor() { + this.cache = new Map(); + } + lookup(code, category) { + let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY); + if (entries === undefined) { + entries = {}; + this.cache.set(Glyph.CURRENT_CACHE_KEY, entries); + } + const key = category ? `${code}%${category}` : code; + let entry = entries[key]; + if (entry === undefined) { + entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category); + entries[key] = entry; + } + return entry; + } +} +class GlyphOutline { + constructor(outline, originX, originY, scale) { + this.outline = outline; + this.originX = originX; + this.originY = originY; + this.scale = scale; + this.i = 0; + this.precision = 1; + // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale. + this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RENDER_PRECISION_PLACES); + } + done() { + return this.i >= this.outline.length; + } + next() { + return Math.round((this.outline[this.i++] * this.precision) / this.precision); + } + nextX() { + return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision; + } + nextY() { + return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision; + } + static parse(str) { + const result = []; + const parts = str.split(' '); + let i = 0; + while (i < parts.length) { + switch (parts[i++]) { + case 'm': + result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'l': + result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'q': + result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'b': + result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); + break; + } + } + return result; + } +} +class Glyph extends _element__WEBPACK_IMPORTED_MODULE_2__.Element { + ////////////////////////////////////////////////////////////////////////////////////////////////// + // STATIC MEMBERS + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Glyph; + } + /** + * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails, + * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue. + * + * @param font + * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc. + * @param code + * @param key + * @param defaultValue + */ + static lookupFontMetric(font, category, code, key, defaultValue) { + let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined); + if (value === undefined) { + // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time). + value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue); + } + return value; + } + static lookupGlyph(fontStack, code) { + (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(fontStack, 'BadFontStack', 'Font stack is misconfigured'); + let glyph; + let font; + for (let i = 0; i < fontStack.length; i++) { + font = fontStack[i]; + glyph = font.getGlyphs()[code]; + if (glyph) + return { glyph, font }; + } + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`); + } + static loadMetrics(fontStack, code, category) { + const { glyph, font } = Glyph.lookupGlyph(fontStack, code); + if (!glyph.o) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`); + let x_shift = 0; + let y_shift = 0; + let scale = 1; + if (category && font) { + x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0); + y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0); + scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1); + } + const x_min = glyph.x_min; + const x_max = glyph.x_max; + const ha = glyph.ha; + if (!glyph.cached_outline) { + glyph.cached_outline = GlyphOutline.parse(glyph.o); + } + return { + x_min, + x_max, + x_shift, + y_shift, + scale, + ha, + outline: glyph.cached_outline, + font, + width: x_max - x_min, + height: ha, + }; + } + /** + * Renders glyphs from the default font stack. + * + * @param ctx Canvas or SVG context + * @param x_pos x coordinate + * @param y_pos y coordinate + * @param point the point size of the font + * @param code the glyph code in font.getGlyphs() + * @param options + * @returns + */ + static renderGlyph(ctx, x_pos, y_pos, point, code, options) { + var _a; + const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category); + const metrics = data.metrics; + if (data.point != -1) { + point = data.point; + } + const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1; + const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale; + Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale); + return metrics; + } + static renderOutline(ctx, outline, scale, x_pos, y_pos) { + const go = new GlyphOutline(outline, x_pos, y_pos, scale); + ctx.beginPath(); + let x, y; + while (!go.done()) { + switch (go.next()) { + case OutlineCode.MOVE: + ctx.moveTo(go.nextX(), go.nextY()); + break; + case OutlineCode.LINE: + ctx.lineTo(go.nextX(), go.nextY()); + break; + case OutlineCode.QUADRATIC: + x = go.nextX(); + y = go.nextY(); + ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y); + break; + case OutlineCode.BEZIER: + x = go.nextX(); + y = go.nextY(); + ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); + break; + } + } + ctx.fill(); + } + static getOutlineBoundingBox(outline, scale, x_pos, y_pos) { + const go = new GlyphOutline(outline, x_pos, y_pos, scale); + const bboxComp = new _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation(); + // (penX, penY) hold the pen position: the start of each stroke. + let penX = x_pos; + let penY = y_pos; + let x, y; + while (!go.done()) { + switch (go.next()) { + case OutlineCode.MOVE: + // Note that we don't add any points to the bounding box until a srroke is actually drawn. + penX = go.nextX(); + penY = go.nextY(); + break; + case OutlineCode.LINE: + bboxComp.addPoint(penX, penY); + penX = go.nextX(); + penY = go.nextY(); + bboxComp.addPoint(penX, penY); + break; + case OutlineCode.QUADRATIC: + x = go.nextX(); + y = go.nextY(); + bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y); + penX = x; + penY = y; + break; + case OutlineCode.BEZIER: + x = go.nextX(); + y = go.nextY(); + bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); + penX = x; + penY = y; + break; + } + } + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()); + } + static getWidth(code, point, category) { + const data = Glyph.cache.lookup(code, category); + if (data.point != -1) { + point = data.point; + } + const scale = (point * 72) / (data.metrics.font.getResolution() * 100); + return data.bbox.getW() * scale; + } + /** + * @param code + * @param point + * @param options + */ + constructor(code, point, options) { + super(); + ////////////////////////////////////////////////////////////////////////////////////////////////// + // INSTANCE MEMBERS + this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(0, 0, 0, 0); + this.topGlyphs = []; + this.botGlyphs = []; + this.options = {}; + this.scale = 1; + this.code = code; + this.point = point; + this.originShift = { x: 0, y: 0 }; + this.x_shift = 0; + this.y_shift = 0; + if (options) { + this.setOptions(options); + } + else { + this.reset(); + } + } + // eslint-disable-next-line + draw(...args) { + // DO NOTHING. + } + getCode() { + return this.code; + } + // eslint-disable-next-line + setOptions(options) { + this.options = Object.assign(Object.assign({}, this.options), options); + this.reset(); + } + setPoint(point) { + this.point = point; + return this; + } + setStave(stave) { + this.stave = stave; + return this; + } + getXShift() { + return this.x_shift; + } + setXShift(x_shift) { + this.x_shift = x_shift; + return this; + } + getYshift() { + return this.y_shift; + } + setYShift(y_shift) { + this.y_shift = y_shift; + return this; + } + reset() { + const data = Glyph.cache.lookup(this.code, this.options.category); + this.metrics = data.metrics; + // Override point from metrics file + if (data.point != -1) { + this.point = data.point; + } + this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100); + this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale); + } + checkMetrics() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`); + } + getMetrics() { + const metrics = this.checkMetrics(); + const metricsScale = metrics.scale; + return { + x_min: metrics.x_min * this.scale * metricsScale, + x_max: metrics.x_max * this.scale * metricsScale, + width: this.bbox.getW(), + height: this.bbox.getH(), + scale: this.scale * metricsScale, + x_shift: metrics.x_shift, + y_shift: metrics.y_shift, + outline: metrics.outline, + font: metrics.font, + ha: metrics.ha, + }; + } + setOriginX(x) { + const { bbox } = this; + const originX = Math.abs(bbox.getX() / bbox.getW()); + const xShift = (x - originX) * bbox.getW(); + this.originShift.x = -xShift; + } + setOriginY(y) { + const { bbox } = this; + const originY = Math.abs(bbox.getY() / bbox.getH()); + const yShift = (y - originY) * bbox.getH(); + this.originShift.y = -yShift; + } + setOrigin(x, y) { + this.setOriginX(x); + this.setOriginY(y); + } + render(ctx, x, y) { + const metrics = this.checkMetrics(); + const outline = metrics.outline; + const scale = this.scale * metrics.scale; + this.setRendered(); + this.applyStyle(ctx); + const xPos = x + this.originShift.x + metrics.x_shift; + const yPos = y + this.originShift.y + metrics.y_shift; + Glyph.renderOutline(ctx, outline, scale, xPos, yPos); + this.restoreStyle(ctx); + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + renderToStave(x) { + const context = this.checkContext(); + const metrics = this.checkMetrics(); + const stave = this.checkStave(); + const outline = metrics.outline; + const scale = this.scale * metrics.scale; + this.setRendered(); + this.applyStyle(); + const xPos = x + this.x_shift + metrics.x_shift; + const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift; + Glyph.renderOutline(context, outline, scale, xPos, yPos); + this.restoreStyle(); + } +} +Glyph.cache = new GlyphCache(); +// The current cache key for GlyphCache above. +// Computed when Flow.setMusicFont(...) is called. +// It is set to a comma separated list of font names. +Glyph.CURRENT_CACHE_KEY = ''; +// Used by the GlyphCache above. +// Set when Flow.setMusicFont(...) is called. +Glyph.MUSIC_FONT_STACK = []; + + + +/***/ }), + +/***/ "./src/glyphnote.ts": +/*!**************************!*\ + !*** ./src/glyphnote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GlyphNote": () => (/* binding */ GlyphNote) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Any glyph that is set to appear on a Stave and take up musical time and graphical space. + + +class GlyphNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GlyphNote; + } + constructor(glyph, noteStruct, options) { + super(noteStruct); + this.options = Object.assign({ ignoreTicks: false, line: 2 }, options); + // Note properties + this.ignore_ticks = this.options.ignoreTicks; + this.setGlyph(glyph); + } + setGlyph(glyph) { + this.glyph = glyph; + this.setWidth(this.glyph.getMetrics().width); + return this; + } + getBoundingBox() { + return this.glyph.getBoundingBox(); + } + preFormat() { + if (!this.preFormatted && this.modifierContext) { + this.modifierContext.preFormat(); + } + this.preFormatted = true; + return this; + } + drawModifiers() { + const ctx = this.checkContext(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + modifier.setContext(ctx); + modifier.drawWithStyle(); + } + } + /** Get the glyph width. */ + getGlyphWidth() { + return this.glyph.getMetrics().width; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('glyphNote', this.getAttribute('id')); + // Context is set when setStave is called on Note + const glyph = this.glyph; + if (!glyph.getContext()) { + glyph.setContext(ctx); + } + glyph.setStave(stave); + glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs()); + const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX(); + glyph.renderToStave(x); + this.drawModifiers(); + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} + + +/***/ }), + +/***/ "./src/gracenote.ts": +/*!**************************!*\ + !*** ./src/gracenote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceNote": () => (/* binding */ GraceNote) +/* harmony export */ }); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + + + + +class GraceNote extends _stavenote__WEBPACK_IMPORTED_MODULE_0__.StaveNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.GraceNote; + } + static get LEDGER_LINE_OFFSET() { + return 2; + } + static get SCALE() { + return 0.66; + } + constructor(noteStruct) { + super(Object.assign({ glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct)); + this.slash = noteStruct.slash || false; + this.slur = true; + this.buildNoteHeads(); + this.width = 3; + } + getStemExtension() { + if (this.stem_extension_override) { + return this.stem_extension_override; + } + const glyphProps = this.getGlyphProps(); + if (glyphProps) { + let ret = super.getStemExtension(); + if (glyphProps.stem) { + const staveNoteScale = this.getStaveNoteScale(); + ret = (_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT + ret) * staveNoteScale - _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT; + } + return ret; + } + return 0; + } + getStaveNoteScale() { + return this.render_options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; + } + draw() { + super.draw(); + this.setRendered(); + const stem = this.stem; + if (this.slash && stem) { + const staveNoteScale = this.getStaveNoteScale(); + // some magic numbers are based on the staveNoteScale 0.66. + const offsetScale = staveNoteScale / 0.66; + let slashBBox = undefined; + const beam = this.beam; + if (beam) { + // FIXME: should render slash after beam? + if (!beam.postFormatted) { + beam.postFormat(); + } + slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, { + stem: 6 * offsetScale, + beam: 5 * offsetScale, + }); + } + else { + const stem_direction = this.getStemDirection(); + const noteHeadBounds = this.getNoteHeadBounds(); + const noteStemHeight = stem.getHeight(); + let x = this.getAbsoluteX(); + let y = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN + ? noteHeadBounds.y_top - noteStemHeight + : noteHeadBounds.y_bottom - noteStemHeight; + const defaultStemExtention = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension; + let defaultOffsetY = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STEM_HEIGHT; + defaultOffsetY -= defaultOffsetY / 2.8; + defaultOffsetY += defaultStemExtention; + y += defaultOffsetY * staveNoteScale * stem_direction; + const offsets = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP + ? { + x1: 1, + y1: 0, + x2: 13, + y2: -9, + } + : { + x1: -4, + y1: 1, + x2: 13, + y2: 9, + }; + x += offsets.x1 * offsetScale; + y += offsets.y1 * offsetScale; + slashBBox = { + x1: x, + y1: y, + x2: x + offsets.x2 * offsetScale, + y2: y + offsets.y2 * offsetScale, + }; + } + // FIXME: avoid staff lines, ledger lines or others. + const ctx = this.checkContext(); + ctx.save(); + ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value. + ctx.beginPath(); + ctx.moveTo(slashBBox.x1, slashBBox.y1); + ctx.lineTo(slashBBox.x2, slashBBox.y2); + ctx.closePath(); + ctx.stroke(); + ctx.restore(); + } + } + calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) { + const beam = this.beam; + if (!beam) + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoBeam', "Can't calculate without a beam."); + const beam_slope = beam.slope; + const isBeamEndNote = beam.notes[beam.notes.length - 1] === this; + const scaleX = isBeamEndNote ? -1 : 1; + const beam_angle = Math.atan(beam_slope * scaleX); + // slash line intersecting point on beam. + const iPointOnBeam = { + dx: Math.cos(beam_angle) * slashBeamOffset, + dy: Math.sin(beam_angle) * slashBeamOffset, + }; + slashStemOffset *= this.getStemDirection(); + const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx); + const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX; + const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem; + const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX; + const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam; + const stemX = this.getStemX(); + const stem0X = beam.notes[0].getStemX(); + const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope; + const ret = { + x1: stemX - protrusion_stem_dx, + y1: stemY + slashStemOffset - protrusion_stem_dy, + x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx, + y2: stemY + iPointOnBeam.dy + protrusion_beam_dy, + }; + return ret; + } +} + + +/***/ }), + +/***/ "./src/gracenotegroup.ts": +/*!*******************************!*\ + !*** ./src/gracenotegroup.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceNoteGroup": () => (/* binding */ GraceNoteGroup) +/* harmony export */ }); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This file implements `GraceNoteGroup` which is used to format and +// render grace notes. + + + + + + + + + + +// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (GraceNoteGroup.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_8__.log)('Vex.Flow.GraceNoteGroup', args); +} +/** GraceNoteGroup is used to format and render grace notes. */ +class GraceNoteGroup extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_7__.Category.GraceNoteGroup; + } + /** Arranges groups inside a `ModifierContext`. */ + static format(gracenote_groups, state) { + const group_spacing_stave = 4; + const group_spacing_tab = 0; + if (!gracenote_groups || gracenote_groups.length === 0) + return false; + const group_list = []; + let prev_note = null; + let shiftL = 0; + for (let i = 0; i < gracenote_groups.length; ++i) { + const gracenote_group = gracenote_groups[i]; + const note = gracenote_group.getNote(); + const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note); + const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab; + if (is_stavenote && note !== prev_note) { + // Iterate through all notes to get the displaced pixels + for (let n = 0; n < note.keys.length; ++n) { + shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL); + } + prev_note = note; + } + group_list.push({ shift: shiftL, gracenote_group, spacing }); + } + // If first note left shift in case it is displaced + let group_shift = group_list[0].shift; + let formatWidth; + for (let i = 0; i < group_list.length; ++i) { + const gracenote_group = group_list[i].gracenote_group; + gracenote_group.preFormat(); + formatWidth = gracenote_group.getWidth() + group_list[i].spacing; + group_shift = Math.max(formatWidth, group_shift); + } + for (let i = 0; i < group_list.length; ++i) { + const gracenote_group = group_list[i].gracenote_group; + formatWidth = gracenote_group.getWidth() + group_list[i].spacing; + gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding); + } + state.left_shift += group_shift; + return true; + } + //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */ + constructor(grace_notes, show_slur) { + super(); + this.preFormatted = false; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; + this.grace_notes = grace_notes; + this.width = 0; + this.show_slur = show_slur; + this.slur = undefined; + this.voice = new _voice__WEBPACK_IMPORTED_MODULE_9__.Voice({ + num_beats: 4, + beat_value: 4, + resolution: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.RESOLUTION, + }).setStrict(false); + this.render_options = { + slur_y_shift: 0, + }; + this.beams = []; + this.voice.addTickables(this.grace_notes); + return this; + } + preFormat() { + if (this.preFormatted) + return; + if (!this.formatter) { + this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter(); + } + this.formatter.joinVoices([this.voice]).format([this.voice], 0, {}); + this.setWidth(this.formatter.getMinTotalWidth()); + this.preFormatted = true; + } + beamNotes(grace_notes) { + grace_notes = grace_notes || this.grace_notes; + if (grace_notes.length > 1) { + const beam = new _beam__WEBPACK_IMPORTED_MODULE_0__.Beam(grace_notes); + beam.render_options.beam_width = 3; + beam.render_options.partial_beam_length = 4; + this.beams.push(beam); + } + return this; + } + setWidth(width) { + this.width = width; + return this; + } + getWidth() { + return this.width + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding; + } + getGraceNotes() { + return this.grace_notes; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + L('Drawing grace note group for:', note); + this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function + // Draw grace notes. + this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw()); + // Draw beams. + this.beams.forEach((beam) => beam.setContext(ctx).draw()); + if (this.show_slur) { + // Create and draw slur. + const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note); + const TieClass = is_stavenote ? _stavetie__WEBPACK_IMPORTED_MODULE_4__.StaveTie : _tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie; + this.slur = new TieClass({ + last_note: this.grace_notes[0], + first_note: note, + first_indices: [0], + last_indices: [0], + }); + this.slur.render_options.cp2 = 12; + this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift; + this.slur.setContext(ctx).draw(); + } + } +} +GraceNoteGroup.DEBUG = false; + + + +/***/ }), + +/***/ "./src/gracetabnote.ts": +/*!*****************************!*\ + !*** ./src/gracetabnote.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceTabNote": () => (/* binding */ GraceTabNote) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Balazs Forian-Szabo +// +// ## Description +// +// A basic implementation of grace notes +// to be rendered on a tab stave. +// +// See `tests/gracetabnote_tests.ts` for usage examples. + + + +class GraceTabNote extends _tabnote__WEBPACK_IMPORTED_MODULE_1__.TabNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.GraceTabNote; + } + constructor(noteStruct) { + super(noteStruct, false); + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // vertical shift from stave line + y_shift: 0.3, + // grace glyph scale + scale: 0.6, + // grace tablature font + font: `7.5pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` }); + this.updateWidth(); + } +} + + +/***/ }), + +/***/ "./src/index.ts": +/*!**********************!*\ + !*** ./src/index.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Accidental": () => (/* reexport safe */ _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental), +/* harmony export */ "Annotation": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation), +/* harmony export */ "AnnotationHorizontalJustify": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify), +/* harmony export */ "AnnotationVerticalJustify": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify), +/* harmony export */ "Articulation": () => (/* reexport safe */ _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation), +/* harmony export */ "BEAM_BOTH": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_BOTH), +/* harmony export */ "BEAM_LEFT": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_LEFT), +/* harmony export */ "BEAM_RIGHT": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_RIGHT), +/* harmony export */ "BarNote": () => (/* reexport safe */ _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote), +/* harmony export */ "Barline": () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.Barline), +/* harmony export */ "BarlineType": () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.BarlineType), +/* harmony export */ "Beam": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.Beam), +/* harmony export */ "Bend": () => (/* reexport safe */ _bend__WEBPACK_IMPORTED_MODULE_5__.Bend), +/* harmony export */ "BoundingBox": () => (/* reexport safe */ _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox), +/* harmony export */ "BoundingBoxComputation": () => (/* reexport safe */ _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation), +/* harmony export */ "Builder": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Builder), +/* harmony export */ "CanvasContext": () => (/* reexport safe */ _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext), +/* harmony export */ "Category": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.Category), +/* harmony export */ "ChordSymbol": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol), +/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify), +/* harmony export */ "ChordSymbolVerticalJustify": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify), +/* harmony export */ "Clef": () => (/* reexport safe */ _clef__WEBPACK_IMPORTED_MODULE_10__.Clef), +/* harmony export */ "ClefNote": () => (/* reexport safe */ _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote), +/* harmony export */ "Crescendo": () => (/* reexport safe */ _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo), +/* harmony export */ "Curve": () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.Curve), +/* harmony export */ "CurvePosition": () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition), +/* harmony export */ "Dot": () => (/* reexport safe */ _dot__WEBPACK_IMPORTED_MODULE_14__.Dot), +/* harmony export */ "EasyScore": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore), +/* harmony export */ "EasyScoreGrammar": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScoreGrammar), +/* harmony export */ "Element": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_16__.Element), +/* harmony export */ "Factory": () => (/* reexport safe */ _factory__WEBPACK_IMPORTED_MODULE_17__.Factory), +/* harmony export */ "Flow": () => (/* reexport safe */ _flow__WEBPACK_IMPORTED_MODULE_18__.Flow), +/* harmony export */ "Font": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.Font), +/* harmony export */ "FontStyle": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontStyle), +/* harmony export */ "FontWeight": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontWeight), +/* harmony export */ "Formatter": () => (/* reexport safe */ _formatter__WEBPACK_IMPORTED_MODULE_20__.Formatter), +/* harmony export */ "Fraction": () => (/* reexport safe */ _fraction__WEBPACK_IMPORTED_MODULE_21__.Fraction), +/* harmony export */ "FretHandFinger": () => (/* reexport safe */ _frethandfinger__WEBPACK_IMPORTED_MODULE_22__.FretHandFinger), +/* harmony export */ "GhostNote": () => (/* reexport safe */ _ghostnote__WEBPACK_IMPORTED_MODULE_23__.GhostNote), +/* harmony export */ "Glyph": () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.Glyph), +/* harmony export */ "GlyphNote": () => (/* reexport safe */ _glyphnote__WEBPACK_IMPORTED_MODULE_25__.GlyphNote), +/* harmony export */ "GraceNote": () => (/* reexport safe */ _gracenote__WEBPACK_IMPORTED_MODULE_26__.GraceNote), +/* harmony export */ "GraceNoteGroup": () => (/* reexport safe */ _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__.GraceNoteGroup), +/* harmony export */ "GraceTabNote": () => (/* reexport safe */ _gracetabnote__WEBPACK_IMPORTED_MODULE_28__.GraceTabNote), +/* harmony export */ "KeyManager": () => (/* reexport safe */ _keymanager__WEBPACK_IMPORTED_MODULE_29__.KeyManager), +/* harmony export */ "KeySigNote": () => (/* reexport safe */ _keysignote__WEBPACK_IMPORTED_MODULE_31__.KeySigNote), +/* harmony export */ "KeySignature": () => (/* reexport safe */ _keysignature__WEBPACK_IMPORTED_MODULE_30__.KeySignature), +/* harmony export */ "Modifier": () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.Modifier), +/* harmony export */ "ModifierContext": () => (/* reexport safe */ _modifiercontext__WEBPACK_IMPORTED_MODULE_33__.ModifierContext), +/* harmony export */ "ModifierPosition": () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.ModifierPosition), +/* harmony export */ "MultiMeasureRest": () => (/* reexport safe */ _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__.MultiMeasureRest), +/* harmony export */ "Music": () => (/* reexport safe */ _music__WEBPACK_IMPORTED_MODULE_35__.Music), +/* harmony export */ "Note": () => (/* reexport safe */ _note__WEBPACK_IMPORTED_MODULE_36__.Note), +/* harmony export */ "NoteHead": () => (/* reexport safe */ _notehead__WEBPACK_IMPORTED_MODULE_37__.NoteHead), +/* harmony export */ "NoteSubGroup": () => (/* reexport safe */ _notesubgroup__WEBPACK_IMPORTED_MODULE_38__.NoteSubGroup), +/* harmony export */ "Ornament": () => (/* reexport safe */ _ornament__WEBPACK_IMPORTED_MODULE_39__.Ornament), +/* harmony export */ "OutlineCode": () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.OutlineCode), +/* harmony export */ "Parenthesis": () => (/* reexport safe */ _parenthesis__WEBPACK_IMPORTED_MODULE_40__.Parenthesis), +/* harmony export */ "Parser": () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_41__.Parser), +/* harmony export */ "PedalMarking": () => (/* reexport safe */ _pedalmarking__WEBPACK_IMPORTED_MODULE_42__.PedalMarking), +/* harmony export */ "Piece": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Piece), +/* harmony export */ "Registry": () => (/* reexport safe */ _registry__WEBPACK_IMPORTED_MODULE_43__.Registry), +/* harmony export */ "RenderContext": () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.RenderContext), +/* harmony export */ "Renderer": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.Renderer), +/* harmony export */ "RendererBackends": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererBackends), +/* harmony export */ "RendererLineEndType": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererLineEndType), +/* harmony export */ "RepeatNote": () => (/* reexport safe */ _repeatnote__WEBPACK_IMPORTED_MODULE_46__.RepeatNote), +/* harmony export */ "Repetition": () => (/* reexport safe */ _staverepetition__WEBPACK_IMPORTED_MODULE_54__.Repetition), +/* harmony export */ "RuntimeError": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.RuntimeError), +/* harmony export */ "SVGContext": () => (/* reexport safe */ _svgcontext__WEBPACK_IMPORTED_MODULE_64__.SVGContext), +/* harmony export */ "Stave": () => (/* reexport safe */ _stave__WEBPACK_IMPORTED_MODULE_47__.Stave), +/* harmony export */ "StaveConnector": () => (/* reexport safe */ _staveconnector__WEBPACK_IMPORTED_MODULE_49__.StaveConnector), +/* harmony export */ "StaveHairpin": () => (/* reexport safe */ _stavehairpin__WEBPACK_IMPORTED_MODULE_50__.StaveHairpin), +/* harmony export */ "StaveLine": () => (/* reexport safe */ _staveline__WEBPACK_IMPORTED_MODULE_51__.StaveLine), +/* harmony export */ "StaveModifier": () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifier), +/* harmony export */ "StaveModifierPosition": () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifierPosition), +/* harmony export */ "StaveNote": () => (/* reexport safe */ _stavenote__WEBPACK_IMPORTED_MODULE_53__.StaveNote), +/* harmony export */ "StaveSection": () => (/* reexport safe */ _stavesection__WEBPACK_IMPORTED_MODULE_55__.StaveSection), +/* harmony export */ "StaveTempo": () => (/* reexport safe */ _stavetempo__WEBPACK_IMPORTED_MODULE_56__.StaveTempo), +/* harmony export */ "StaveText": () => (/* reexport safe */ _stavetext__WEBPACK_IMPORTED_MODULE_57__.StaveText), +/* harmony export */ "StaveTie": () => (/* reexport safe */ _stavetie__WEBPACK_IMPORTED_MODULE_58__.StaveTie), +/* harmony export */ "Stem": () => (/* reexport safe */ _stem__WEBPACK_IMPORTED_MODULE_60__.Stem), +/* harmony export */ "StemmableNote": () => (/* reexport safe */ _stemmablenote__WEBPACK_IMPORTED_MODULE_61__.StemmableNote), +/* harmony export */ "StringNumber": () => (/* reexport safe */ _stringnumber__WEBPACK_IMPORTED_MODULE_62__.StringNumber), +/* harmony export */ "Stroke": () => (/* reexport safe */ _strokes__WEBPACK_IMPORTED_MODULE_63__.Stroke), +/* harmony export */ "SymbolModifiers": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers), +/* harmony export */ "SymbolTypes": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes), +/* harmony export */ "System": () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_65__.System), +/* harmony export */ "TabNote": () => (/* reexport safe */ _tabnote__WEBPACK_IMPORTED_MODULE_66__.TabNote), +/* harmony export */ "TabSlide": () => (/* reexport safe */ _tabslide__WEBPACK_IMPORTED_MODULE_67__.TabSlide), +/* harmony export */ "TabStave": () => (/* reexport safe */ _tabstave__WEBPACK_IMPORTED_MODULE_68__.TabStave), +/* harmony export */ "TabTie": () => (/* reexport safe */ _tabtie__WEBPACK_IMPORTED_MODULE_69__.TabTie), +/* harmony export */ "TextBracket": () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracket), +/* harmony export */ "TextBracketPosition": () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracketPosition), +/* harmony export */ "TextDynamics": () => (/* reexport safe */ _textdynamics__WEBPACK_IMPORTED_MODULE_71__.TextDynamics), +/* harmony export */ "TextFormatter": () => (/* reexport safe */ _textformatter__WEBPACK_IMPORTED_MODULE_72__.TextFormatter), +/* harmony export */ "TextJustification": () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextJustification), +/* harmony export */ "TextNote": () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextNote), +/* harmony export */ "TickContext": () => (/* reexport safe */ _tickcontext__WEBPACK_IMPORTED_MODULE_75__.TickContext), +/* harmony export */ "Tickable": () => (/* reexport safe */ _tickable__WEBPACK_IMPORTED_MODULE_74__.Tickable), +/* harmony export */ "TimeSigNote": () => (/* reexport safe */ _timesignote__WEBPACK_IMPORTED_MODULE_78__.TimeSigNote), +/* harmony export */ "TimeSignature": () => (/* reexport safe */ _timesignature__WEBPACK_IMPORTED_MODULE_77__.TimeSignature), +/* harmony export */ "TimeSignatureGlyph": () => (/* reexport safe */ _timesigglyph__WEBPACK_IMPORTED_MODULE_76__.TimeSignatureGlyph), +/* harmony export */ "Tremolo": () => (/* reexport safe */ _tremolo__WEBPACK_IMPORTED_MODULE_79__.Tremolo), +/* harmony export */ "Tuning": () => (/* reexport safe */ _tuning__WEBPACK_IMPORTED_MODULE_80__.Tuning), +/* harmony export */ "Tuplet": () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.Tuplet), +/* harmony export */ "TupletLocation": () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.TupletLocation), +/* harmony export */ "Vex": () => (/* reexport safe */ _vex__WEBPACK_IMPORTED_MODULE_84__.Vex), +/* harmony export */ "Vibrato": () => (/* reexport safe */ _vibrato__WEBPACK_IMPORTED_MODULE_85__.Vibrato), +/* harmony export */ "VibratoBracket": () => (/* reexport safe */ _vibratobracket__WEBPACK_IMPORTED_MODULE_86__.VibratoBracket), +/* harmony export */ "Voice": () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.Voice), +/* harmony export */ "VoiceMode": () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.VoiceMode), +/* harmony export */ "Volta": () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.Volta), +/* harmony export */ "VoltaType": () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.VoltaType), +/* harmony export */ "defined": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.defined), +/* harmony export */ "drawDot": () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.drawDot), +/* harmony export */ "globalObject": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.globalObject), +/* harmony export */ "isAccidental": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAccidental), +/* harmony export */ "isAnnotation": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAnnotation), +/* harmony export */ "isBarline": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isBarline), +/* harmony export */ "isCategory": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isCategory), +/* harmony export */ "isDot": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isDot), +/* harmony export */ "isGraceNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNote), +/* harmony export */ "isGraceNoteGroup": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNoteGroup), +/* harmony export */ "isHTMLCanvas": () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLCanvas), +/* harmony export */ "isHTMLDiv": () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLDiv), +/* harmony export */ "isNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isNote), +/* harmony export */ "isRenderContext": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isRenderContext), +/* harmony export */ "isStaveNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStaveNote), +/* harmony export */ "isStemmableNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStemmableNote), +/* harmony export */ "isTabNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isTabNote), +/* harmony export */ "log": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.log), +/* harmony export */ "midLine": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.midLine), +/* harmony export */ "normalizeAngle": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.normalizeAngle), +/* harmony export */ "prefix": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.prefix), +/* harmony export */ "sumArray": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.sumArray), +/* harmony export */ "warn": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.warn) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ "./src/factory.ts"); +/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./flow */ "./src/flow.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); +/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./tickable */ "./src/tickable.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.ts"); +/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./tuning */ "./src/tuning.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./vex */ "./src/vex.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + + + + + + + + + + + + + + +// Do not export './fonts/*' because they are used by the entry/* files. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*. + + + + + + + + + + + + + + + + + + +// Do not export './version'. It is accessible via Vex.Flow.BUILD. + + + + + + + +/***/ }), + +/***/ "./src/keymanager.ts": +/*!***************************!*\ + !*** ./src/keymanager.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeyManager": () => (/* binding */ KeyManager) +/* harmony export */ }); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This class implements diatonic key management. + + +class KeyManager { + constructor(key) { + this.music = new _music__WEBPACK_IMPORTED_MODULE_0__.Music(); + this.setKey(key); + } + setKey(key) { + this.key = key; + this.reset(); + return this; + } + getKey() { + return this.key; + } + reset() { + this.keyParts = this.music.getKeyParts(this.key); + this.keyString = this.keyParts.root; + if (this.keyParts.accidental) + this.keyString += this.keyParts.accidental; + const is_supported_type = _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]; + if (!is_supported_type) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Unsupported key type: ${this.key}`); + } + this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]); + this.scaleMap = {}; + this.scaleMapByValue = {}; + this.originalScaleMapByValue = {}; + const noteLocation = _music__WEBPACK_IMPORTED_MODULE_0__.Music.root_indices[this.keyParts.root]; + for (let i = 0; i < _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; ++i) { + const index = (noteLocation + i) % _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; + const rootName = _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots[index]; + const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]); + this.scaleMap[rootName] = noteName; + this.scaleMapByValue[this.scale[i]] = noteName; + this.originalScaleMapByValue[this.scale[i]] = noteName; + } + return this; + } + getAccidental(key) { + const root = this.music.getKeyParts(key).root; + const parts = this.music.getNoteParts(this.scaleMap[root]); + return { + note: this.scaleMap[root], + accidental: parts.accidental, + }; + } + selectNote(note) { + note = note.toLowerCase(); + const parts = this.music.getNoteParts(note); + // First look for matching note in our altered scale + const scaleNote = this.scaleMap[parts.root]; + const modparts = this.music.getNoteParts(scaleNote); + if (scaleNote === note) { + return { + note: scaleNote, + accidental: parts.accidental, + change: false, + }; + } + // Then search for a note of equivalent value in our altered scale + const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)]; + if (valueNote != null) { + return { + note: valueNote, + accidental: this.music.getNoteParts(valueNote).accidental, + change: false, + }; + } + // Then search for a note of equivalent value in the original scale + const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)]; + if (originalValueNote != null) { + this.scaleMap[modparts.root] = originalValueNote; + delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)]; + this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote; + return { + note: originalValueNote, + accidental: this.music.getNoteParts(originalValueNote).accidental, + change: true, + }; + } + // Then try to unmodify a currently modified note. + if (modparts.root === note) { + delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; + this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root; + this.scaleMap[modparts.root] = modparts.root; + return { + note: modparts.root, + accidental: undefined, + change: true, + }; + } + // Last resort -- shitshoot + delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; + this.scaleMapByValue[this.music.getNoteValue(note)] = note; + delete this.scaleMap[modparts.root]; + this.scaleMap[modparts.root] = note; + return { + note, + accidental: parts.accidental, + change: true, + }; + } +} + + +/***/ }), + +/***/ "./src/keysignature.ts": +/*!*****************************!*\ + !*** ./src/keysignature.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeySignature": () => (/* binding */ KeySignature) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Cyril Silverman +// +// ## Description +// +// This file implements key signatures. A key signature sits on a stave +// and indicates the notes with implicit accidentals. + + + + + +class KeySignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.KeySignature; + } + // Create a new Key Signature based on a `key_spec` + constructor(keySpec, cancelKeySpec, alterKeySpec) { + super(); + this.accList = []; + this.setKeySig(keySpec, cancelKeySpec, alterKeySpec); + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); + this.glyphFontScale = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; + this.glyphs = []; + this.xPositions = []; // relative to this.x + this.paddingForced = false; + } + // Add an accidental glyph to the `KeySignature` instance which represents + // the provided `acc`. If `nextAcc` is also provided, the appropriate + // spacing will be included in the glyph's position + convertToGlyph(acc, nextAcc) { + const accGlyphData = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.accidentalCodes(acc.type); + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(accGlyphData.code, this.glyphFontScale); + // Determine spacing between current accidental and the next accidental + let extraWidth = 1; + if (acc.type === 'n' && nextAcc) { + const spacing = KeySignature.accidentalSpacing[nextAcc.type]; + if (spacing) { + const isAbove = nextAcc.line >= acc.line; + extraWidth = isAbove ? spacing.above : spacing.below; + } + } + // Place the glyph on the stave + this.placeGlyphOnLine(glyph, this.checkStave(), acc.line); + this.glyphs.push(glyph); + const xPosition = this.xPositions[this.xPositions.length - 1]; + const glyphWidth = glyph.getMetrics().width + extraWidth; + // Store the next accidental's x position + this.xPositions.push(xPosition + glyphWidth); + // Expand size of key signature + this.width += glyphWidth; + } + // Cancel out a key signature provided in the `spec` parameter. This will + // place appropriate natural accidentals before the key signature. + cancelKey(spec) { + this.formatted = false; + this.cancelKeySpec = spec; + return this; + } + convertToCancelAccList(spec) { + // Get the accidental list for the cancelled key signature + const cancel_accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature(spec); + // If the cancelled key has a different accidental type, ie: # vs b + const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type; + // Determine how many naturals needed to add + const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length; + // Return if no naturals needed + if (naturals < 1) + return undefined; + // Get the line position for each natural + const cancelled = []; + for (let i = 0; i < naturals; i++) { + let index = i; + if (!different_types) { + index = cancel_accList.length - naturals + i; + } + const acc = cancel_accList[index]; + cancelled.push({ type: 'n', line: acc.line }); + } + // Combine naturals with main accidental list for the key signature + this.accList = cancelled.concat(this.accList); + return { + accList: cancelled, + type: cancel_accList[0].type, + }; + } + // Deprecated + addToStave(stave) { + this.paddingForced = true; + stave.addModifier(this); + return this; + } + // Apply the accidental staff line placement based on the `clef` and + // the accidental `type` for the key signature ('# or 'b'). + convertAccLines(clef, type, accList = this.accList) { + let offset = 0.0; // if clef === "treble" + let customLines; // when clef doesn't follow treble key sig shape + switch (clef) { + // Treble & Subbass both have offsets of 0, so are not included. + case 'soprano': + if (type === '#') + customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1]; + else + offset = -1; + break; + case 'mezzo-soprano': + if (type === 'b') + customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5]; + else + offset = 1.5; + break; + case 'alto': + offset = 0.5; + break; + case 'tenor': + if (type === '#') + customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5]; + else + offset = -0.5; + break; + case 'baritone-f': + case 'baritone-c': + if (type === 'b') + customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2]; + else + offset = 2; + break; + case 'bass': + case 'french': + offset = 1; + break; + default: + break; + } + // If there's a special case, assign those lines/spaces: + let i; + if (typeof customLines !== 'undefined') { + for (i = 0; i < accList.length; ++i) { + accList[i].line = customLines[i]; + } + } + else if (offset !== 0) { + for (i = 0; i < accList.length; ++i) { + accList[i].line += offset; + } + } + } + getPadding(index) { + if (!this.formatted) + this.format(); + return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding; + } + getWidth() { + if (!this.formatted) + this.format(); + return this.width; + } + setKeySig(keySpec, cancelKeySpec, alterKeySpec) { + this.formatted = false; + this.keySpec = keySpec; + this.cancelKeySpec = cancelKeySpec; + this.alterKeySpec = alterKeySpec; + return this; + } + // Alter the accidentals of a key spec one by one. + // Each alteration is a new accidental that replaces the + // original accidental (or the canceled one). + alterKey(alterKeySpec) { + this.formatted = false; + this.alterKeySpec = alterKeySpec; + return this; + } + convertToAlterAccList(alterKeySpec) { + const max = Math.min(alterKeySpec.length, this.accList.length); + for (let i = 0; i < max; ++i) { + if (alterKeySpec[i]) { + this.accList[i].type = alterKeySpec[i]; + } + } + } + format() { + const stave = this.checkStave(); + this.width = 0; + this.glyphs = []; + this.xPositions = [0]; // initialize with initial x position + this.accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature((0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.keySpec)); + const accList = this.accList; + const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined; + let cancelAccList; + if (this.cancelKeySpec) { + cancelAccList = this.convertToCancelAccList(this.cancelKeySpec); + } + if (this.alterKeySpec) { + this.convertToAlterAccList(this.alterKeySpec); + } + if (this.accList.length > 0) { + const clef = (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef(); + if (cancelAccList) { + this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList); + } + this.convertAccLines(clef, firstAccidentalType, accList); + for (let i = 0; i < this.accList.length; ++i) { + this.convertToGlyph(this.accList[i], this.accList[i + 1]); + } + } + this.formatted = true; + } + /** + * Return the Glyph objects making up this KeySignature. + */ + getGlyphs() { + if (!this.formatted) + this.format(); + return this.glyphs; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + if (!this.formatted) + this.format(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('keysignature', this.getAttribute('id')); + for (let i = 0; i < this.glyphs.length; i++) { + const glyph = this.glyphs[i]; + const x = this.x + this.xPositions[i]; + glyph.setStave(stave); + glyph.setContext(ctx); + glyph.renderToStave(x); + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} +// Space between natural and following accidental depending +// on vertical position +KeySignature.accidentalSpacing = { + '#': { + above: 6, + below: 4, + }, + b: { + above: 4, + below: 7, + }, + n: { + above: 4, + below: 1, + }, + '##': { + above: 6, + below: 4, + }, + bb: { + above: 4, + below: 7, + }, + db: { + above: 4, + below: 7, + }, + d: { + above: 4, + below: 7, + }, + bbs: { + above: 4, + below: 7, + }, + '++': { + above: 6, + below: 4, + }, + '+': { + above: 6, + below: 4, + }, + '+-': { + above: 6, + below: 4, + }, + '++-': { + above: 6, + below: 4, + }, + bs: { + above: 4, + below: 10, + }, + bss: { + above: 4, + below: 10, + }, +}; + + + +/***/ }), + +/***/ "./src/keysignote.ts": +/*!***************************!*\ + !*** ./src/keysignote.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeySigNote": () => (/* binding */ KeySigNote) +/* harmony export */ }); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Mark Meeus 2019 + + + +class KeySigNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.KeySigNote; + } + constructor(keySpec, cancelKeySpec, alterKeySpec) { + super({ duration: 'b' }); + this.keySignature = new _keysignature__WEBPACK_IMPORTED_MODULE_0__.KeySignature(keySpec, cancelKeySpec, alterKeySpec); + // Note properties + this.ignore_ticks = true; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + preFormat() { + this.preFormatted = true; + this.keySignature.setStave(this.checkStave()); + this.setWidth(this.keySignature.getWidth()); + return this; + } + draw() { + const ctx = this.checkStave().checkContext(); + this.setRendered(); + this.keySignature.setX(this.getAbsoluteX()); + this.keySignature.setContext(ctx); + this.keySignature.draw(); + } +} + + +/***/ }), + +/***/ "./src/modifier.ts": +/*!*************************!*\ + !*** ./src/modifier.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Modifier": () => (/* binding */ Modifier), +/* harmony export */ "ModifierPosition": () => (/* binding */ ModifierPosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +var ModifierPosition; +(function (ModifierPosition) { + ModifierPosition[ModifierPosition["CENTER"] = 0] = "CENTER"; + ModifierPosition[ModifierPosition["LEFT"] = 1] = "LEFT"; + ModifierPosition[ModifierPosition["RIGHT"] = 2] = "RIGHT"; + ModifierPosition[ModifierPosition["ABOVE"] = 3] = "ABOVE"; + ModifierPosition[ModifierPosition["BELOW"] = 4] = "BELOW"; +})(ModifierPosition || (ModifierPosition = {})); +// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`. +// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); } +/** + * `Modifier` is an abstract interface for notational elements that modify + * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc. + * + * For a `Modifier` instance to be positioned correctly, it must be part of + * a `ModifierContext`. All modifiers in the same context are rendered relative to + * one another. + * + * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also, + * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same + * `ModifierContext`. This ensures that multiple voices don't trample all over each other. + */ +class Modifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + /** + * Modifiers category string. Every modifier has a different category. + * The `ModifierContext` uses this to determine the type and order of the modifiers. + */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Modifier; + } + /** Modifiers can be positioned almost anywhere, relative to a note. */ + static get Position() { + return ModifierPosition; + } + static get PositionString() { + return { + center: ModifierPosition.CENTER, + above: ModifierPosition.ABOVE, + below: ModifierPosition.BELOW, + left: ModifierPosition.LEFT, + right: ModifierPosition.RIGHT, + }; + } + constructor() { + super(); + this.width = 0; + // The `text_line` is reserved space above or below a stave. + this.text_line = 0; + this.position = Modifier.Position.LEFT; + this.x_shift = 0; + this.y_shift = 0; + this.spacingFromNextModifier = 0; + } + /** Called when position changes. */ + reset() { + // DO NOTHING. + } + /** Get modifier widths. */ + getWidth() { + return this.width; + } + /** Set modifier widths. */ + setWidth(width) { + this.width = width; + return this; + } + /** Get attached note (`StaveNote`, `TabNote`, etc.) */ + getNote() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', 'Modifier has no note.'); + } + /** + * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.). + * Also verifies that the index is valid. + */ + checkAttachedNote() { + const category = this.getCategory(); + (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', `Can't draw ${category} without an index.`); + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', `Can't draw ${category} without a note.`); + } + /** + * Set attached note. + * @param note (`StaveNote`, `TabNote`, etc.) + */ + setNote(note) { + this.note = note; + return this; + } + /** Get note index, which is a specific note in a chord. */ + getIndex() { + return this.index; + } + /** Check and get note index, which is a specific note in a chord. */ + checkIndex() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', 'Modifier has an invalid index.'); + } + /** Set note index, which is a specific note in a chord. */ + setIndex(index) { + this.index = index; + return this; + } + /** Get `ModifierContext`. */ + getModifierContext() { + return this.modifierContext; + } + /** Check and get `ModifierContext`. */ + checkModifierContext() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.modifierContext, 'NoModifierContext', 'Modifier Context Required'); + } + /** Every modifier must be part of a `ModifierContext`. */ + setModifierContext(c) { + this.modifierContext = c; + return this; + } + /** Get position. */ + getPosition() { + return this.position; + } + /** + * Set position. + * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW + */ + setPosition(position) { + this.position = typeof position === 'string' ? Modifier.PositionString[position] : position; + this.reset(); + return this; + } + /** Set the `text_line` for the modifier. */ + setTextLine(line) { + this.text_line = line; + return this; + } + /** Shift modifier down `y` pixels. Negative values shift up. */ + setYShift(y) { + this.y_shift = y; + return this; + } + /** Set spacing from next modifier. */ + setSpacingFromNextModifier(x) { + this.spacingFromNextModifier = x; + } + /** Get spacing from next modifier. */ + getSpacingFromNextModifier() { + return this.spacingFromNextModifier; + } + /** + * Shift modifier `x` pixels in the direction of the modifier. Negative values + * shift reverse. + */ + setXShift(x) { + this.x_shift = 0; + if (this.position === Modifier.Position.LEFT) { + this.x_shift -= x; + } + else { + this.x_shift += x; + } + return this; + } + /** Get shift modifier `x` */ + getXShift() { + return this.x_shift; + } + /** Render the modifier onto the canvas. */ + draw() { + this.checkContext(); + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NotImplemented', 'draw() not implemented for this modifier.'); + } + // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset + alignSubNotesWithNote(subNotes, note) { + // Shift over the tick contexts of each note + const tickContext = note.getTickContext(); + const metrics = tickContext.getMetrics(); + const stave = note.getStave(); + const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier(); + subNotes.forEach((subNote) => { + const subTickContext = subNote.getTickContext(); + if (stave) + subNote.setStave(stave); + subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render + }); + } +} + + +/***/ }), + +/***/ "./src/modifiercontext.ts": +/*!********************************!*\ + !*** ./src/modifiercontext.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ModifierContext": () => (/* binding */ ModifierContext) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This class implements various types of members to notes (e.g. bends, +// fingering positions etc.). The ModifierContext works with tickables +// that are at the same tick to ensure that they and their modifiers +// all have proper alignment. (Note that the ModifierContext also +// runs the spacing of the tickable). +// +// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works + + + + + + + + + + + + + + + + + +// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (ModifierContext.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_15__.log)('Vex.Flow.ModifierContext', args); +} +class ModifierContext { + constructor() { + // Formatting data. + this.state = { + left_shift: 0, + right_shift: 0, + text_line: 0, + top_text_line: 0, + }; + // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers, + // StaveNotes, TabNotes, etc. + this.members = {}; + this.preFormatted = false; + this.postFormatted = false; + this.formatted = false; + this.width = 0; + this.spacing = 0; + } + addModifier(member) { + L('addModifier is deprecated, use addMember instead.'); + return this.addMember(member); + } + /** + * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote. + * Here we add a new member to this.members, and create a new array if needed. + * @param member + * @returns this + */ + addMember(member) { + const category = member.getCategory(); + if (!this.members[category]) { + this.members[category] = []; + } + this.members[category].push(member); + member.setModifierContext(this); + this.preFormatted = false; + return this; + } + /** + * @deprecated + */ + getModifiers(category) { + L('getModifiers is deprecated, use getMembers instead.'); + return this.getMembers(category); + } + getMembers(category) { + var _a; + return (_a = this.members[category]) !== null && _a !== void 0 ? _a : []; + } + /** + * Get the width of the entire + */ + getWidth() { + return this.width; + } + getLeftShift() { + return this.state.left_shift; + } + getRightShift() { + return this.state.right_shift; + } + getState() { + return this.state; + } + getMetrics() { + if (!this.formatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('UnformattedMember', 'Unformatted member has no metrics.'); + } + return { + width: this.state.left_shift + this.state.right_shift + this.spacing, + spacing: this.spacing, + }; + } + preFormat() { + if (this.preFormatted) + return; + L('Preformatting ModifierContext'); + const state = this.state; + const members = this.members; + // The ordering below determines when different members are formatted and rendered. + _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote], state); + _parenthesis__WEBPACK_IMPORTED_MODULE_10__.Parenthesis.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Parenthesis], state); + _dot__WEBPACK_IMPORTED_MODULE_5__.Dot.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Dot], state); + _frethandfinger__WEBPACK_IMPORTED_MODULE_6__.FretHandFinger.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.FretHandFinger], state); + _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Accidental], state); + _strokes__WEBPACK_IMPORTED_MODULE_13__.Stroke.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stroke], state); + _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__.GraceNoteGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.GraceNoteGroup], state); + _notesubgroup__WEBPACK_IMPORTED_MODULE_8__.NoteSubGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.NoteSubGroup], state); + _stringnumber__WEBPACK_IMPORTED_MODULE_12__.StringNumber.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StringNumber], state); + _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Articulation], state); + _ornament__WEBPACK_IMPORTED_MODULE_9__.Ornament.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Ornament], state); + _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Annotation], state); + _chordsymbol__WEBPACK_IMPORTED_MODULE_4__.ChordSymbol.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.ChordSymbol], state); + _bend__WEBPACK_IMPORTED_MODULE_3__.Bend.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Bend], state); + _vibrato__WEBPACK_IMPORTED_MODULE_16__.Vibrato.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Vibrato], state, this); + // Update width of this member context + this.width = state.left_shift + state.right_shift; + this.preFormatted = true; + } + postFormat() { + if (this.postFormatted) + return; + L('Postformatting ModifierContext'); + // If post-formatting is required for an element, add more lines below. + _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.postFormat(this.getMembers(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote)); + } +} +ModifierContext.DEBUG = false; + + + +/***/ }), + +/***/ "./src/multimeasurerest.ts": +/*!*********************************!*\ + !*** ./src/multimeasurerest.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MultiMeasureRest": () => (/* binding */ MultiMeasureRest) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// +// This class implements multiple measure rests. + + + + + + + + +let semibreve_rest; +function get_semibreve_rest() { + if (!semibreve_rest) { + const noteHead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ duration: 'w', note_type: 'r' }); + semibreve_rest = { + glyph_font_scale: noteHead.render_options.glyph_font_scale, + glyph_code: noteHead.glyph_code, + width: noteHead.getWidth(), + }; + } + return semibreve_rest; +} +class MultiMeasureRest extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.MultiMeasureRest; + } + /** + * + * @param number_of_measures Number of measures. + * @param options The options object. + */ + constructor(number_of_measures, options) { + var _a; + super(); + this.xs = { left: NaN, right: NaN }; + this.hasPaddingLeft = false; + this.hasPaddingRight = false; + this.hasLineThickness = false; + this.hasSymbolSpacing = false; + this.number_of_measures = number_of_measures; + // Keep track of whether these four options were provided. + this.hasPaddingLeft = typeof options.padding_left === 'number'; + this.hasPaddingRight = typeof options.padding_right === 'number'; + this.hasLineThickness = typeof options.line_thickness === 'number'; + this.hasSymbolSpacing = typeof options.symbol_spacing === 'number'; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); + this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options); + const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); + this.render_options.number_line += fontLineShift; + } + getXs() { + return this.xs; + } + setStave(stave) { + this.stave = stave; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + drawLine(stave, ctx, left, right, spacingBetweenLines) { + const options = this.render_options; + const y = stave.getYForLine(options.line); + const padding = (right - left) * 0.1; + left += padding; + right -= padding; + let lineThicknessHalf; + if (this.hasLineThickness) { + lineThicknessHalf = options.line_thickness * 0.5; + } + else { + lineThicknessHalf = spacingBetweenLines * 0.25; + } + const serifThickness = options.serif_thickness; + const top = y - spacingBetweenLines; + const bot = y + spacingBetweenLines; + const leftIndented = left + serifThickness; + const rightIndented = right - serifThickness; + const lineTop = y - lineThicknessHalf; + const lineBottom = y + lineThicknessHalf; + ctx.save(); + ctx.beginPath(); + ctx.moveTo(left, top); + ctx.lineTo(leftIndented, top); + ctx.lineTo(leftIndented, lineTop); + ctx.lineTo(rightIndented, lineTop); + ctx.lineTo(rightIndented, top); + ctx.lineTo(right, top); + ctx.lineTo(right, bot); + ctx.lineTo(rightIndented, bot); + ctx.lineTo(rightIndented, lineBottom); + ctx.lineTo(leftIndented, lineBottom); + ctx.lineTo(leftIndented, bot); + ctx.lineTo(left, bot); + ctx.closePath(); + ctx.fill(); + } + drawSymbols(stave, ctx, left, right, spacingBetweenLines) { + const n4 = Math.floor(this.number_of_measures / 4); + const n = this.number_of_measures % 4; + const n2 = Math.floor(n / 2); + const n1 = n % 2; + const options = this.render_options; + // FIXME: TODO: invalidate semibreve_rest at the appropriate time + // (e.g., if the system font settings are changed). + semibreve_rest = undefined; + const rest = get_semibreve_rest(); + const rest_scale = options.semibreve_rest_glyph_scale; + const rest_width = rest.width * (rest_scale / rest.glyph_font_scale); + const glyphs = { + 2: { + width: rest_width * 0.5, + height: spacingBetweenLines, + }, + 1: { + width: rest_width, + }, + }; + /* 10: normal spacingBetweenLines */ + const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10; + const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing; + let x = left + (right - left) * 0.5 - width * 0.5; + const line = options.line; + const yTop = stave.getYForLine(line - 1); + const yMiddle = stave.getYForLine(line); + const yBottom = stave.getYForLine(line + 1); + ctx.save(); + ctx.setStrokeStyle('none'); + ctx.setLineWidth(0); + for (let i = 0; i < n4; ++i) { + ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); + ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height); + x += glyphs[2].width + spacing; + } + for (let i = 0; i < n2; ++i) { + ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); + x += glyphs[2].width + spacing; + } + for (let i = 0; i < n1; ++i) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code); + x += glyphs[1].width + spacing; + } + ctx.restore(); + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const stave = this.checkStave(); + let left = stave.getNoteStartX(); + let right = stave.getNoteEndX(); + // FIXME: getNoteStartX() returns x + 5(barline width) + // getNoteEndX() returns x + width(no barline width) + // See Stave constructor. How do we fix this? + // Here, we subtract the barline width. + const begModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.BEGIN); + if (begModifiers.length === 1 && (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isBarline)(begModifiers[0])) { + left -= begModifiers[0].getWidth(); + } + const options = this.render_options; + if (this.hasPaddingLeft) { + left = stave.getX() + options.padding_left; + } + if (this.hasPaddingRight) { + right = stave.getX() + stave.getWidth() - options.padding_right; + } + this.xs.left = left; + this.xs.right = right; + const spacingBetweenLines = options.spacing_between_lines_px; + if (options.use_symbols) { + this.drawSymbols(stave, ctx, left, right, spacingBetweenLines); + } + else { + this.drawLine(stave, ctx, left, right, spacingBetweenLines); + } + if (options.show_number) { + const timeSpec = '/' + this.number_of_measures; + const timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_5__.TimeSignature(timeSpec, 0, false); + timeSig.point = options.number_glyph_point; + timeSig.setTimeSig(timeSpec); + timeSig.setStave(stave); + timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5); + timeSig.bottomLine = options.number_line; + timeSig.setContext(ctx).draw(); + } + } +} + + +/***/ }), + +/***/ "./src/music.ts": +/*!**********************!*\ + !*** ./src/music.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Music": () => (/* binding */ Music) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + +/** Music implements some standard music theory routines. */ +class Music { + /** Number of an canonical notes (12). */ + static get NUM_TONES() { + return this.canonical_notes.length; + } + /** Names of root notes ('c', 'd',...) */ + static get roots() { + return ['c', 'd', 'e', 'f', 'g', 'a', 'b']; + } + /** Values of the root notes.*/ + static get root_values() { + return [0, 2, 4, 5, 7, 9, 11]; + } + /** Indices of the root notes.*/ + static get root_indices() { + return { + c: 0, + d: 1, + e: 2, + f: 3, + g: 4, + a: 5, + b: 6, + }; + } + /** Names of canonical notes ('c', 'c#', 'd',...). */ + static get canonical_notes() { + return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b']; + } + /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */ + static get diatonic_intervals() { + return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave']; + } + /** NoteAccidental associated to diatonic intervals. */ + static get diatonic_accidentals() { + return { + unison: { note: 0, accidental: 0 }, + m2: { note: 1, accidental: -1 }, + M2: { note: 1, accidental: 0 }, + m3: { note: 2, accidental: -1 }, + M3: { note: 2, accidental: 0 }, + p4: { note: 3, accidental: 0 }, + dim5: { note: 4, accidental: -1 }, + p5: { note: 4, accidental: 0 }, + m6: { note: 5, accidental: -1 }, + M6: { note: 5, accidental: 0 }, + b7: { note: 6, accidental: -1 }, + M7: { note: 6, accidental: 0 }, + octave: { note: 7, accidental: 0 }, + }; + } + /** Semitones shift associated to intervals .*/ + static get intervals() { + return { + u: 0, + unison: 0, + m2: 1, + b2: 1, + min2: 1, + S: 1, + H: 1, + 2: 2, + M2: 2, + maj2: 2, + T: 2, + W: 2, + m3: 3, + b3: 3, + min3: 3, + M3: 4, + 3: 4, + maj3: 4, + 4: 5, + p4: 5, + '#4': 6, + b5: 6, + aug4: 6, + dim5: 6, + 5: 7, + p5: 7, + '#5': 8, + b6: 8, + aug5: 8, + 6: 9, + M6: 9, + maj6: 9, + b7: 10, + m7: 10, + min7: 10, + dom7: 10, + M7: 11, + maj7: 11, + 8: 12, + octave: 12, + }; + } + /** Semitones shifts associated with scales. */ + static get scales() { + return { + major: [2, 2, 1, 2, 2, 2, 1], + minor: [2, 1, 2, 2, 1, 2, 2], + ionian: [2, 2, 1, 2, 2, 2, 1], + dorian: [2, 1, 2, 2, 2, 1, 2], + phyrgian: [1, 2, 2, 2, 1, 2, 2], + lydian: [2, 2, 2, 1, 2, 2, 1], + mixolydian: [2, 2, 1, 2, 2, 1, 2], + aeolian: [2, 1, 2, 2, 1, 2, 2], + locrian: [1, 2, 2, 1, 2, 2, 2], + }; + } + /** Scales associated with m (minor) and M (major). */ + static get scaleTypes() { + return { + M: Music.scales.major, + m: Music.scales.minor, + }; + } + /** Accidentals abbreviations. */ + static get accidentals() { + return ['bb', 'b', 'n', '#', '##']; + } + /** Note values. */ + static get noteValues() { + return { + c: { root_index: 0, int_val: 0 }, + cn: { root_index: 0, int_val: 0 }, + 'c#': { root_index: 0, int_val: 1 }, + 'c##': { root_index: 0, int_val: 2 }, + cb: { root_index: 0, int_val: 11 }, + cbb: { root_index: 0, int_val: 10 }, + d: { root_index: 1, int_val: 2 }, + dn: { root_index: 1, int_val: 2 }, + 'd#': { root_index: 1, int_val: 3 }, + 'd##': { root_index: 1, int_val: 4 }, + db: { root_index: 1, int_val: 1 }, + dbb: { root_index: 1, int_val: 0 }, + e: { root_index: 2, int_val: 4 }, + en: { root_index: 2, int_val: 4 }, + 'e#': { root_index: 2, int_val: 5 }, + 'e##': { root_index: 2, int_val: 6 }, + eb: { root_index: 2, int_val: 3 }, + ebb: { root_index: 2, int_val: 2 }, + f: { root_index: 3, int_val: 5 }, + fn: { root_index: 3, int_val: 5 }, + 'f#': { root_index: 3, int_val: 6 }, + 'f##': { root_index: 3, int_val: 7 }, + fb: { root_index: 3, int_val: 4 }, + fbb: { root_index: 3, int_val: 3 }, + g: { root_index: 4, int_val: 7 }, + gn: { root_index: 4, int_val: 7 }, + 'g#': { root_index: 4, int_val: 8 }, + 'g##': { root_index: 4, int_val: 9 }, + gb: { root_index: 4, int_val: 6 }, + gbb: { root_index: 4, int_val: 5 }, + a: { root_index: 5, int_val: 9 }, + an: { root_index: 5, int_val: 9 }, + 'a#': { root_index: 5, int_val: 10 }, + 'a##': { root_index: 5, int_val: 11 }, + ab: { root_index: 5, int_val: 8 }, + abb: { root_index: 5, int_val: 7 }, + b: { root_index: 6, int_val: 11 }, + bn: { root_index: 6, int_val: 11 }, + 'b#': { root_index: 6, int_val: 0 }, + 'b##': { root_index: 6, int_val: 1 }, + bb: { root_index: 6, int_val: 10 }, + bbb: { root_index: 6, int_val: 9 }, + }; + } + isValidNoteValue(note) { + return note >= 0 && note < Music.canonical_notes.length; + } + isValidIntervalValue(interval) { + return interval >= 0 && interval < Music.diatonic_intervals.length; + } + /** Return root and accidental associated to a note. */ + getNoteParts(noteString) { + if (!noteString || noteString.length < 1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + if (noteString.length > 3) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + const note = noteString.toLowerCase(); + const regex = /^([cdefgab])(b|bb|n|#|##)?$/; + const match = regex.exec(note); + if (match !== null) { + const root = match[1]; + const accidental = match[2]; + return { + root, + accidental, + }; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + } + /** Return root, accidental and type associated to a key. */ + getKeyParts(keyString) { + if (!keyString || keyString.length < 1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid key: ' + keyString); + } + const key = keyString.toLowerCase(); + // Support Major, Minor, Melodic Minor, and Harmonic Minor key types. + const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/; + const match = regex.exec(key); + if (match !== null) { + const root = match[1]; + const accidental = match[2]; + let type = match[3]; + // Unspecified type implies major + if (!type) + type = 'M'; + return { + root, + accidental, + type, + }; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid key: ${keyString}`); + } + } + /** Note value associated to a note name. */ + getNoteValue(noteString) { + const value = Music.noteValues[noteString]; + if (value === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note name: ${noteString}`); + } + return value.int_val; + } + /** Interval value associated to an interval name. */ + getIntervalValue(intervalString) { + const value = Music.intervals[intervalString]; + if (value === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`); + } + return value; + } + /** Canonical note name associated to a value. */ + getCanonicalNoteName(noteValue) { + if (!this.isValidNoteValue(noteValue)) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note value: ${noteValue}`); + } + return Music.canonical_notes[noteValue]; + } + /** Interval name associated to a value. */ + getCanonicalIntervalName(intervalValue) { + if (!this.isValidIntervalValue(intervalValue)) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`); + } + return Music.diatonic_intervals[intervalValue]; + } + /** + * Given a note, interval, and interval direction, produce the relative note. + */ + getRelativeNoteValue(noteValue, intervalValue, direction = 1) { + if (direction !== 1 && direction !== -1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`); + } + let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES; + if (sum < 0) + sum += Music.NUM_TONES; + return sum; + } + /** + * Given a root and note value, produce the relative note name. + */ + getRelativeNoteName(root, noteValue) { + const parts = this.getNoteParts(root); + const rootValue = this.getNoteValue(parts.root); + let interval = noteValue - rootValue; + if (Math.abs(interval) > Music.NUM_TONES - 3) { + let multiplier = 1; + if (interval > 0) + multiplier = -1; + // Possibly wrap around. (Add +1 for modulo operator) + const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier; + if (Math.abs(reverse_interval) > 2) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); + } + else { + interval = reverse_interval; + } + } + if (Math.abs(interval) > 2) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); + } + let relativeNoteName = parts.root; + if (interval > 0) { + for (let i = 1; i <= interval; ++i) { + relativeNoteName += '#'; + } + } + else if (interval < 0) { + for (let i = -1; i >= interval; --i) { + relativeNoteName += 'b'; + } + } + return relativeNoteName; + } + /** + * Return scale tones, given intervals. Each successive interval is + * relative to the previous one, e.g., Major Scale: + * + * TTSTTTS = [2,2,1,2,2,2,1] + * + * When used with key = 0, returns C scale (which is isomorphic to + * interval list). + */ + getScaleTones(key, intervals) { + const tones = [key]; + let nextNote = key; + for (let i = 0; i < intervals.length; i++) { + nextNote = this.getRelativeNoteValue(nextNote, intervals[i]); + if (nextNote !== key) + tones.push(nextNote); + } + return tones; + } + /** + * Return the interval of a note, given a diatonic scale. + * e.g., given the scale C, and the note E, returns M3. + */ + getIntervalBetween(note1, note2, direction = 1) { + if (direction !== 1 && direction !== -1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`); + } + if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`); + } + let difference = direction === 1 ? note2 - note1 : note1 - note2; + if (difference < 0) + difference += Music.NUM_TONES; + return difference; + } + /** + * Create a scale map that represents the pitch state for a + * `keySignature`. For example, passing a `G` to `keySignature` would + * return a scale map with every note naturalized except for `F` which + * has an `F#` state. + */ + createScaleMap(keySignature) { + const keySigParts = this.getKeyParts(keySignature); + if (!keySigParts.type) + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: undefined'); + const scaleName = Music.scaleTypes[keySigParts.type]; + let keySigString = keySigParts.root; + if (keySigParts.accidental) + keySigString += keySigParts.accidental; + if (!scaleName) + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature); + const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName); + const noteLocation = Music.root_indices[keySigParts.root]; + const scaleMap = {}; + for (let i = 0; i < Music.roots.length; ++i) { + const index = (noteLocation + i) % Music.roots.length; + const rootName = Music.roots[index]; + let noteName = this.getRelativeNoteName(rootName, scale[i]); + if (noteName.length === 1) { + noteName += 'n'; + } + scaleMap[rootName] = noteName; + } + return scaleMap; + } +} + + +/***/ }), + +/***/ "./src/note.ts": +/*!*********************!*\ + !*** ./src/note.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Note": () => (/* binding */ Note) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickable */ "./src/tickable.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +/** + * Note implements an abstract interface for notes and chords that + * are rendered on a stave. Notes have some common properties: All of them + * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.) + * + * Some notes have stems, heads, dots, etc. Most notational elements that + * surround a note are called *modifiers*, and every note has an associated + * array of them. All notes also have a rendering context and belong to a stave. + */ +class Note extends _tickable__WEBPACK_IMPORTED_MODULE_3__.Tickable { + ////////////////////////////////////////////////////////////////////////////////////////////////// + // STATIC MEMBERS + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Note; + } + /** Debug helper. Displays various note metrics for the given note. */ + static plotMetrics(ctx, note, yPos) { + const metrics = note.getMetrics(); + const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx; + const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx; + const xAbs = note.getAbsoluteX(); + const xPost1 = note.getAbsoluteX() + metrics.notePx; + const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx; + const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx; + const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0); + const xWidth = xEnd - xStart; + ctx.save(); + ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8); + ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos); + const y = yPos + 7; + function stroke(x1, x2, color, yy = y) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(3); + ctx.moveTo(x1 + note.getXShift(), yy); + ctx.lineTo(x2 + note.getXShift(), yy); + ctx.stroke(); + } + stroke(xStart, xPre1, 'red'); + stroke(xPre1, xAbs, '#999'); + stroke(xAbs, xPost1, 'green'); + stroke(xPost1, xPost2, '#999'); + stroke(xPost2, xEnd, 'red'); + stroke(xEnd, xFreedomRight, '#DD0'); + stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift + (0,_rendercontext__WEBPACK_IMPORTED_MODULE_1__.drawDot)(ctx, xAbs + note.getXShift(), y, 'blue'); + const formatterMetrics = note.getFormatterMetrics(); + if (formatterMetrics.iterations > 0) { + const spaceDeviation = formatterMetrics.space.deviation; + const prefix = spaceDeviation >= 0 ? '+' : ''; + ctx.setFillStyle('red'); + ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10); + } + ctx.restore(); + } + static parseDuration(durationString) { + if (!durationString) { + return undefined; + } + const regexp = /(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/; + const result = regexp.exec(durationString); + if (!result) { + return undefined; + } + const duration = result[1]; + const dots = result[2].length; + const type = result[3] || 'n'; + return { duration, dots, type }; + } + static parseNoteStruct(noteStruct) { + // Preserve backwards-compatibility + const durationProps = Note.parseDuration(noteStruct.duration); + if (!durationProps) { + return undefined; + } + // If specified type is invalid, return undefined. + let type = noteStruct.type; + if (type && !_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.validTypes[type]) { + return undefined; + } + // If no type specified, check duration or custom types + const customTypes = []; + if (!type) { + type = durationProps.type || 'n'; + // If we have keys, try and check if we've got a custom glyph + if (noteStruct.keys !== undefined) { + noteStruct.keys.forEach((k, i) => { + const result = k.split('/'); + // We have a custom glyph specified after the note eg. /X2 + customTypes[i] = (result && result.length === 3 ? result[2] : type); + }); + } + } + // Calculate the tick duration of the note + let ticks = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.durationToTicks(durationProps.duration); + if (!ticks) { + return undefined; + } + // Are there any dots? + const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots; + if (typeof dots !== 'number') { + return undefined; + } + // Add ticks as necessary depending on the numbr of dots + let currentTicks = ticks; + for (let i = 0; i < dots; i++) { + if (currentTicks <= 1) + return undefined; + currentTicks = currentTicks / 2; + ticks += currentTicks; + } + return { + duration: durationProps.duration, + type, + customTypes, + dots, + ticks, + }; + } + /** + * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for + * positioning and layout. + * + * @param noteStruct To create a new note you need to provide a `noteStruct`. + */ + constructor(noteStruct) { + super(); + if (!noteStruct) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.'); + } + /** Parses `noteStruct` and get note properties. */ + const parsedNoteStruct = Note.parseNoteStruct(noteStruct); + if (!parsedNoteStruct) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`); + } + // Set note properties from parameters. + this.keys = noteStruct.keys || []; + // per-pitch properties + this.keyProps = []; + this.duration = parsedNoteStruct.duration; + this.noteType = parsedNoteStruct.type; + this.customTypes = parsedNoteStruct.customTypes; + if (noteStruct.duration_override) { + // Custom duration + this.setDuration(noteStruct.duration_override); + } + else { + // Default duration + this.setIntrinsicTicks(parsedNoteStruct.ticks); + } + this.modifiers = []; + // Get the glyph code for this note from the font. + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, this.noteType); + this.customGlyphs = this.customTypes.map((t) => _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, t)); + // Note to play for audio players. + this.playNote = undefined; + // Positioning contexts used by the Formatter. + this.ignore_ticks = false; + // Positioning variables + this.width = 0; // Width in pixels calculated after preFormat + this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head + this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head + this.x_shift = 0; // X shift from tick context X + this.ys = []; // list of y coordinates for each note + // we need to hold on to these for ties and beams. + if (noteStruct.align_center) { + this.setCenterAlignment(noteStruct.align_center); + } + // The render surface. + this.render_options = { + annotation_spacing: 5, + glyph_font_scale: 1, + stroke_px: 1, + scale: 1, + font: '', + y_shift: 0, + }; + } + /** + * Get the play note, which is arbitrary data that can be used by an + * audio player. + */ + getPlayNote() { + return this.playNote; + } + /** + * Set the play note, which is arbitrary data that can be used by an + * audio player. + */ + setPlayNote(note) { + this.playNote = note; + return this; + } + /** + * @returns true if this note is a type of rest. + * + * Rests don't have pitches, but take up space in the score. + * Subclasses should override this default implementation. + */ + isRest() { + return false; + } + /** Add stroke. */ + addStroke(index, stroke) { + stroke.setNote(this); + stroke.setIndex(index); + this.modifiers.push(stroke); + this.preFormatted = false; + return this; + } + /** Get the target stave. */ + getStave() { + return this.stave; + } + /** Check and get the target stave. */ + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + /** Set the target stave. */ + setStave(stave) { + this.stave = stave; + this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed. + this.setContext(this.stave.getContext()); + return this; + } + /** Get spacing to the left of the notes. */ + getLeftDisplacedHeadPx() { + return this.leftDisplacedHeadPx; + } + /** Get spacing to the right of the notes. */ + getRightDisplacedHeadPx() { + return this.rightDisplacedHeadPx; + } + /** Set spacing to the left of the notes. */ + setLeftDisplacedHeadPx(x) { + this.leftDisplacedHeadPx = x; + return this; + } + /** Set spacing to the right of the notes. */ + setRightDisplacedHeadPx(x) { + this.rightDisplacedHeadPx = x; + return this; + } + /** True if this note has no duration (e.g., bar notes, spacers, etc.). */ + shouldIgnoreTicks() { + return this.ignore_ticks; + } + /** Get the stave line number for the note. */ + // eslint-disable-next-line + getLineNumber(isTopNote) { + return 0; + } + /** Get the stave line number for rest. */ + getLineForRest() { + return 0; + } + /** + * @deprecated Use `getGlyphProps()` instead. + */ + // eslint-disable-next-line + getGlyph() { + return this.glyphProps; + } + /** Get the glyph associated with this note. */ + getGlyphProps() { + return this.glyphProps; + } + /** Get the glyph width. */ + getGlyphWidth() { + return this.glyphProps.getWidth(this.render_options.glyph_font_scale); + } + /** + * Set Y positions for this note. Each Y value is associated with + * an individual pitch/key within the note/chord. + */ + setYs(ys) { + this.ys = ys; + return this; + } + /** + * Get Y positions for this note. Each Y value is associated with + * an individual pitch/key within the note/chord. + */ + getYs() { + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoYValues', 'No Y-values calculated for this note.'); + } + return this.ys; + } + /** + * Get the Y position of the space above the stave onto which text can + * be rendered. + */ + getYForTopText(text_line) { + return this.checkStave().getYForTopText(text_line); + } + /** Return the voice that this note belongs in. */ + getVoice() { + if (!this.voice) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoVoice', 'Note has no voice.'); + return this.voice; + } + /** Attach this note to `voice`. */ + setVoice(voice) { + this.voice = voice; + this.preFormatted = false; + return this; + } + /** Get the `TickContext` for this note. */ + getTickContext() { + return this.checkTickContext(); + } + /** Set the `TickContext` for this note. */ + setTickContext(tc) { + this.tickContext = tc; + this.preFormatted = false; + return this; + } + /** Accessor to duration. */ + getDuration() { + return this.duration; + } + /** Accessor to isDotted. */ + isDotted() { + return this.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Dot).length > 0; + } + /** Accessor to hasStem. */ + hasStem() { + return false; + } + /** Accessor to note type. */ + getNoteType() { + return this.noteType; + } + /** Get the beam. */ + getBeam() { + return this.beam; + } + /** Check and get the beam. */ + checkBeam() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.beam, 'NoBeam', 'No beam attached to instance'); + } + /** Check it has a beam. */ + hasBeam() { + return this.beam != undefined; + } + /** Set the beam. */ + setBeam(beam) { + this.beam = beam; + return this; + } + /** + * Attach a modifier to this note. + * @param modifier the Modifier to add. + * @param index of the key to modify. + * @returns this + */ + addModifier(modifier, index = 0) { + const signature = 'Note.addModifier(modifier: Modifier, index: number=0)'; + // Backwards compatibility with 3.0.9. + if (typeof index === 'string') { + index = parseInt(index); + // eslint-disable-next-line + console.warn(signature + ' expected a number for `index`, but received a string.'); + } + // Some versions of VexFlow had the two parameters reversed. + // Check here and throw an error if the argument types are not correct. + if (typeof modifier !== 'object' || typeof index !== 'number') { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.'); + } + modifier.setNote(this); + modifier.setIndex(index); + super.addModifier(modifier); + return this; + } + /** Get all modifiers of a specific type in `this.modifiers`. */ + getModifiersByType(type) { + return this.modifiers.filter((modifier) => modifier.getCategory() === type); + } + /** Get the coordinates for where modifiers begin. */ + // eslint-disable-next-line + getModifierStartXY(position, index, options) { + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + return { + x: this.getAbsoluteX(), + y: this.ys[0], + }; + } + getRightParenthesisPx(index) { + const props = this.getKeyProps()[index]; + return props.displaced ? this.getRightDisplacedHeadPx() : 0; + } + getLeftParenthesisPx(index) { + const props = this.getKeyProps()[index]; + return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift; + } + getFirstDotPx() { + let px = this.getRightDisplacedHeadPx(); + if (this.checkModifierContext().getMembers('Parenthesis').length !== 0) + px += _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'); + return px; + } + /** Get the metrics for this note. */ + getMetrics() { + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', "Can't call getMetrics on an unformatted note."); + } + const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0; + const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0; + const width = this.getWidth(); + const glyphWidth = this.getGlyphWidth(); + const notePx = width - + modLeftPx - // subtract left modifiers + modRightPx - // subtract right modifiers + this.leftDisplacedHeadPx - // subtract left displaced head + this.rightDisplacedHeadPx; // subtract right displaced head + // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory. + return { + width, + glyphWidth, + notePx, + // Modifier spacing. + modLeftPx, + modRightPx, + // Displaced note head on left or right. + leftDisplacedHeadPx: this.leftDisplacedHeadPx, + rightDisplacedHeadPx: this.rightDisplacedHeadPx, + glyphPx: 0, + }; + } + /** + * Get the absolute `X` position of this note's tick context. This + * excludes x_shift, so you'll need to factor it in if you're + * looking for the post-formatted x-position. + */ + getAbsoluteX() { + const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); + // Position note to left edge of tick context. + let x = tickContext.getX(); + if (this.stave) { + x += this.stave.getNoteStartX() + _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('stave.padding'); + } + if (this.isCenterAligned()) { + x += this.getCenterXShift(); + } + return x; + } + /** Get point for notes. */ + static getPoint(size) { + // for sizes other than 'default', note is 2/3 of the default value + return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 5) * 3; + } + /** Get the direction of the stem. */ + getStemDirection() { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + } + /** Get the top and bottom `y` values of the stem. */ + getStemExtents() { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + } + /** Get the `x` coordinate to the right of the note. */ + getTieRightX() { + let tieStartX = this.getAbsoluteX(); + const note_glyph_width = this.glyphProps.getWidth(); + tieStartX += note_glyph_width / 2; + tieStartX += -this.width / 2 + this.width + 2; + return tieStartX; + } + /** Get the `x` coordinate to the left of the note. */ + getTieLeftX() { + let tieEndX = this.getAbsoluteX(); + const note_glyph_width = this.glyphProps.getWidth(); + tieEndX += note_glyph_width / 2; + tieEndX -= this.width / 2 + 2; + return tieEndX; + } + // Get the pitches in the note + getKeys() { + return this.keys; + } + // Get the properties for all the keys in the note + getKeyProps() { + return this.keyProps; + } +} + + +/***/ }), + +/***/ "./src/notehead.ts": +/*!*************************!*\ + !*** ./src/notehead.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NoteHead": () => (/* binding */ NoteHead) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (NoteHead.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.NoteHead', args); +} +/** + * Draw slashnote head manually. No glyph exists for this. + * @param ctx the Canvas context + * @param duration the duration of the note. ex: "4" + * @param x the x coordinate to draw at + * @param y the y coordinate to draw at + * @param stem_direction the direction of the stem + */ +function drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) { + const width = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.SLASH_NOTEHEAD_WIDTH; + ctx.save(); + ctx.setLineWidth(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH); + let fill = false; + if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToNumber(duration) > 2) { + fill = true; + } + if (!fill) + x -= (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH / 2) * stem_direction; + ctx.beginPath(); + ctx.moveTo(x, y + staveSpace); + ctx.lineTo(x, y + 1); + ctx.lineTo(x + width, y - staveSpace); + ctx.lineTo(x + width, y); + ctx.lineTo(x, y + staveSpace); + ctx.closePath(); + if (fill) { + ctx.fill(); + } + else { + ctx.stroke(); + } + if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToFraction(duration).equals(0.5)) { + const breve_lines = [-3, -1, width + 1, width + 3]; + for (let i = 0; i < breve_lines.length; i++) { + ctx.beginPath(); + ctx.moveTo(x + breve_lines[i], y - 10); + ctx.lineTo(x + breve_lines[i], y + 11); + ctx.stroke(); + } + } + ctx.restore(); +} +/** + * `NoteHeads` are typically not manipulated + * directly, but used internally in `StaveNote`. + * + * See `tests/notehead_tests.ts` for usage examples. + */ +class NoteHead extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.NoteHead; + } + constructor(noteStruct) { + super(noteStruct); + this.custom_glyph = false; + this.stem_up_x_offset = 0; + this.stem_down_x_offset = 0; + this.index = noteStruct.index; + this.x = noteStruct.x || 0; + this.y = noteStruct.y || 0; + if (noteStruct.note_type) + this.noteType = noteStruct.note_type; + this.displaced = noteStruct.displaced || false; + this.stem_direction = noteStruct.stem_direction || _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; + this.line = noteStruct.line || 0; + // Get glyph code based on duration and note type. This could be + // regular notes, rests, or other custom codes. + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.getGlyphProps(this.duration, this.noteType); + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + // Swap out the glyph with ledger lines + if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) { + this.glyphProps.code_head = this.glyphProps.ledger_code_head; + } + this.glyph_code = this.glyphProps.code_head; + this.x_shift = noteStruct.x_shift || 0; + if (noteStruct.custom_glyph_code) { + this.custom_glyph = true; + this.glyph_code = noteStruct.custom_glyph_code; + this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0; + this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0; + } + this.setStyle(noteStruct.style); + this.slashed = noteStruct.slashed || false; + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // font size for note heads + glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE }); + this.setWidth(this.custom_glyph && + !this.glyph_code.startsWith('noteheadSlashed') && + !this.glyph_code.startsWith('noteheadCircled') + ? _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale) + : this.glyphProps.getWidth(this.render_options.glyph_font_scale)); + } + /** Get the width of the notehead. */ + getWidth() { + return this.width; + } + /** Determine if the notehead is displaced. */ + isDisplaced() { + return this.displaced === true; + } + /** Set the X coordinate. */ + setX(x) { + this.x = x; + return this; + } + /** Get the Y coordinate. */ + getY() { + return this.y; + } + /** Set the Y coordinate. */ + setY(y) { + this.y = y; + return this; + } + /** Get the stave line the notehead is placed on. */ + getLine() { + return this.line; + } + /** Set the stave line the notehead is placed on. */ + setLine(line) { + this.line = line; + return this; + } + /** Get the canvas `x` coordinate position of the notehead. */ + getAbsoluteX() { + // If the note has not been preformatted, then get the static x value + // Otherwise, it's been formatted and we should use it's x value relative + // to its tick context + const x = !this.preFormatted ? this.x : super.getAbsoluteX(); + // For a more natural displaced notehead, we adjust the displacement amount + // by half the stem width in order to maintain a slight overlap with the stem + const displacementStemAdjustment = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); + const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction; + const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction; + return (x + + fontShift + + (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0)); + } + /** Get the `BoundingBox` for the `NoteHead`. */ + getBoundingBox() { + const spacing = this.checkStave().getSpacingBetweenLines(); + const half_spacing = spacing / 2; + const min_y = this.y - half_spacing; + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing); + } + /** Set notehead to a provided `stave`. */ + setStave(stave) { + const line = this.getLine(); + this.stave = stave; + if (this.stave) { + this.setY(this.stave.getYForNote(line)); + this.setContext(this.stave.getContext()); + } + return this; + } + /** Pre-render formatting. */ + preFormat() { + if (this.preFormatted) + return this; + const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx; + this.setWidth(width); + this.preFormatted = true; + return this; + } + /** Draw the notehead. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let head_x = this.getAbsoluteX(); + if (this.custom_glyph) { + // head_x += this.x_shift; + head_x += + this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? this.stem_up_x_offset + + (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0) + : this.stem_down_x_offset; + } + const y = this.y; + L("Drawing note head '", this.noteType, this.duration, "' at", head_x, y); + // Begin and end positions for head. + const stem_direction = this.stem_direction; + const glyph_font_scale = this.render_options.glyph_font_scale; + const categorySuffix = `${this.glyph_code}Stem${stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? 'Up' : 'Down'}`; + if (this.noteType === 's') { + const staveSpace = this.checkStave().getSpacingBetweenLines(); + drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace); + } + else { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, { + category: `noteHead.${categorySuffix}`, + }); + } + } +} +/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */ +NoteHead.DEBUG = false; + + + +/***/ }), + +/***/ "./src/notesubgroup.ts": +/*!*****************************!*\ + !*** ./src/notesubgroup.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NoteSubGroup": () => (/* binding */ NoteSubGroup) +/* harmony export */ }); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2016 +// +// ## Description +// +// This file implements `NoteSubGroup` which is used to format and +// render notes as a `Modifier` +// ex) ClefNote, TimeSigNote and BarNote. + + + + + +class NoteSubGroup extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.NoteSubGroup; + } + // Arrange groups inside a `ModifierContext` + static format(groups, state) { + if (!groups || groups.length === 0) + return false; + let width = 0; + for (let i = 0; i < groups.length; ++i) { + const group = groups[i]; + group.preFormat(); + width += group.getWidth(); + } + state.left_shift += width; + return true; + } + constructor(subNotes) { + super(); + this.preFormatted = false; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; + this.subNotes = subNotes; + this.subNotes.forEach((subNote) => { + subNote.setIgnoreTicks(false); + }); + this.width = 0; + this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_0__.Formatter(); + this.voice = new _voice__WEBPACK_IMPORTED_MODULE_4__.Voice({ + num_beats: 4, + beat_value: 4, + resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION, + }).setStrict(false); + this.voice.addTickables(this.subNotes); + } + preFormat() { + if (this.preFormatted) + return; + this.formatter.joinVoices([this.voice]).format([this.voice], 0); + this.setWidth(this.formatter.getMinTotalWidth()); + this.preFormatted = true; + } + setWidth(width) { + this.width = width; + return this; + } + getWidth() { + return this.width; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + this.alignSubNotesWithNote(this.subNotes, note); // Modifier function + this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle()); + } +} + + +/***/ }), + +/***/ "./src/ornament.ts": +/*!*************************!*\ + !*** ./src/ornament.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Ornament": () => (/* binding */ Ornament) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Cyril Silverman +// MIT License + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Ornament.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Ornament', args); +} +/** + * Ornament implements ornaments as modifiers that can be + * attached to notes. The complete list of ornaments is available in + * `tables.ts` under `Vex.Flow.ornamentCodes`. + * + * See `tests/ornament_tests.ts` for usage examples. + */ +class Ornament extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + /** Ornaments category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Ornament; + } + static get minPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** Arrange ornaments inside `ModifierContext` */ + static format(ornaments, state) { + if (!ornaments || ornaments.length === 0) + return false; + let width = 0; // width is used by ornaments, which are always centered on the note head + let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately + let left_shift = state.left_shift; + let yOffset = 0; + for (let i = 0; i < ornaments.length; ++i) { + const ornament = ornaments[i]; + const increment = 2; + if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) { + ornament.x_shift += right_shift + 2; + } + if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) { + ornament.x_shift -= left_shift + 2; + } + if (ornament.reportedWidth && ornament.x_shift < 0) { + left_shift += ornament.reportedWidth; + } + else if (ornament.reportedWidth && ornament.x_shift >= 0) { + right_shift += ornament.reportedWidth + Ornament.minPadding; + } + else { + width = Math.max(ornament.getWidth(), width); + } + // articulations above/below the line can be stacked. + if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) { + // Unfortunately we don't know the stem direction. So we base it + // on the line number, but also allow it to be overridden. + const ornamentNote = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(ornament.note, 'NoAttachedNote'); + if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { + state.top_text_line += increment; + ornament.y_shift += yOffset; + yOffset -= ornament.glyph.bbox.getH(); + } + else { + state.text_line += increment; + ornament.y_shift += yOffset; + yOffset += ornament.glyph.bbox.getH(); + } + } + else { + if (ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { + ornament.setTextLine(state.top_text_line); + state.top_text_line += increment; + } + else { + ornament.setTextLine(state.text_line); + state.text_line += increment; + } + } + } + // Note: 'legit' ornaments don't consider other modifiers when calculating their + // X position, but jazz ornaments sometimes need to. + state.left_shift = left_shift + width / 2; + state.right_shift = right_shift + width / 2; + return true; + } + /** + * ornamentNoteTransition means the jazz ornament represents an effect from one note to another, + * these are generally on the top of the staff. + */ + static get ornamentNoteTransition() { + return ['flip', 'jazzTurn', 'smear']; + } + /** + * ornamentAttack indicates something that happens in the attach, placed before the note and + * any accidentals + */ + static get ornamentAttack() { + return ['scoop']; + } + /** + * The ornament is aligned based on the note head, but without regard to whether the + * stem goes up or down. + */ + static get ornamentAlignWithNoteHead() { + return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop']; + } + /** + * An ornament that happens on the release of the note, generally placed after the + * note and overlapping the next beat/measure.. + */ + static get ornamentRelease() { + return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip']; + } + /** ornamentArticulation goes above/below the note based on space availablity */ + static get ornamentArticulation() { + return ['bend', 'plungerClosed', 'plungerOpen']; + } + /** + * Legacy ornaments have hard-coded metrics. If additional ornament types are + * added, get their metrics here. + */ + getMetrics() { + const ornamentMetrics = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().ornament; + if (!ornamentMetrics) + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `ornament missing`); + return ornamentMetrics[this.ornament.code]; + } + /** + * Create a new ornament of type `type`, which is an entry in + * `Vex.Flow.ornamentCodes` in `tables.ts`. + */ + constructor(type) { + super(); + this.type = type; + this.delayed = false; + this.render_options = { + font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, + accidentalLowerPadding: 3, + accidentalUpperPadding: 3, + }; + this.ornament = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.ornamentCodes(this.type); + // new ornaments have their origin at the origin, and have more specific + // metrics. Legacy ornaments do some + // x scaling, and have hard-coded metrics + const metrics = this.getMetrics(); + // some jazz ornaments are above or below depending on stem direction. + this.adjustForStemDirection = false; + // some jazz ornaments like falls are supposed to overlap with future bars + // and so we report a different width than they actually take up. + this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0; + this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0; + this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0; + if (!this.ornament) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`); + } + this.x_shift = metrics ? metrics.xOffset : 0; + this.y_shift = metrics ? metrics.yOffset : 0; + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.ornament.code, this.render_options.font_scale, { + category: `ornament.${this.ornament.code}`, + }); + // Is this a jazz ornament that goes between this note and the next note. + if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { + this.delayed = true; + } + // Legacy ornaments need this. I don't know why, but horizontal spacing issues + // happen if I don't set it. + if (!metrics) { + this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift + } + } + /** Set whether the ornament is to be delayed. */ + setDelayed(delayed) { + this.delayed = delayed; + return this; + } + /** Set the upper accidental for the ornament. */ + setUpperAccidental(accid) { + const scale = this.render_options.font_scale / 1.3; + this.accidentalUpper = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale); + this.accidentalUpper.setOrigin(0.5, 1.0); + return this; + } + /** Set the lower accidental for the ornament. */ + setLowerAccidental(accid) { + const scale = this.render_options.font_scale / 1.3; + this.accidentalLower = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale); + this.accidentalLower.setOrigin(0.5, 1.0); + return this; + } + /** Render ornament in position next to note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stemDir = note.getStemDirection(); + const stave = note.checkStave(); + this.applyStyle(); + ctx.openGroup('ornament', this.getAttribute('id')); + // Get stem extents + const stemExtents = note.checkStem().getExtents(); + let y = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? stemExtents.baseY : stemExtents.topY; + // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + if (note.hasStem()) { + if (stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + y = stave.getYForTopText(this.text_line); + } + } + else { + // Without a stem + y = stave.getYForTopText(this.text_line); + } + } + const isPlacedOnNoteheadSide = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; + const spacing = stave.getSpacingBetweenLines(); + let lineSpacing = 1; + // Beamed stems are longer than quarter note stems, adjust accordingly + if (!isPlacedOnNoteheadSide && note.hasBeam()) { + lineSpacing += 0.5; + } + const totalSpacing = spacing * (this.text_line + lineSpacing); + const glyphYBetweenLines = y - totalSpacing; + // Get initial coordinates for the modifier position + const start = note.getModifierStartXY(this.position, this.index); + let glyphX = start.x; + // If the ornament is aligned with the note head, don't consider the stave y + // but use the 'natural' modifier y + let glyphY = this.ornamentAlignWithNoteHead + ? start.y + : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines); + glyphY += this.y_shift; + // Ajdust x position if ornament is delayed + if (this.delayed) { + let delayXShift = 0; + const startX = glyphX - (stave.getX() - 10); + if (this.delayXShift !== undefined) { + delayXShift = this.delayXShift; + } + else { + delayXShift += this.glyph.getMetrics().width / 2; + const nextContext = _tickcontext__WEBPACK_IMPORTED_MODULE_4__.TickContext.getNextContext(note.getTickContext()); + if (nextContext) { + delayXShift += (nextContext.getX() - startX) * 0.5; + } + else { + delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5; + } + this.delayXShift = delayXShift; + } + glyphX += delayXShift; + } + L('Rendering ornament: ', this.ornament, glyphX, glyphY); + if (this.accidentalLower) { + this.accidentalLower.render(ctx, glyphX, glyphY); + glyphY -= this.accidentalLower.getMetrics().height; + glyphY -= this.render_options.accidentalLowerPadding; + } + if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) { + glyphY += this.stemUpYOffset; + } + if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { + glyphY = note.checkStave().getBoundingBox().getY() + 40; + } + this.glyph.render(ctx, glyphX + this.x_shift, glyphY); + if (this.accidentalUpper) { + glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding; + this.accidentalUpper.render(ctx, glyphX, glyphY); + } + ctx.closeGroup(); + this.restoreStyle(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */ +Ornament.DEBUG = false; + + + +/***/ }), + +/***/ "./src/parenthesis.ts": +/*!****************************!*\ + !*** ./src/parenthesis.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Parenthesis": () => (/* binding */ Parenthesis) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Rodrigo Vilar +// MIT License + + + + + +/** Parenthesis implements parenthesis modifiers for notes. */ +class Parenthesis extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Parenthesis; + } + /** Add parentheses to the notes. */ + static buildAndAttach(notes) { + for (const note of notes) { + for (let i = 0; i < note.keys.length; i++) { + note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT), i); + note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT), i); + } + } + } + /** Arrange parentheses inside a ModifierContext. */ + static format(parentheses, state) { + if (!parentheses || parentheses.length === 0) + return false; + let x_widthL = 0; + let x_widthR = 0; + for (let i = 0; i < parentheses.length; ++i) { + const parenthesis = parentheses[i]; + const note = parenthesis.getNote(); + const pos = parenthesis.getPosition(); + const index = parenthesis.checkIndex(); + let shift = 0; + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT) { + shift = note.getRightParenthesisPx(index); + x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width; + } + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT) { + shift = note.getLeftParenthesisPx(index); + x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width; + } + parenthesis.setXShift(shift); + } + state.left_shift += x_widthL; + state.right_shift += x_widthR; + return true; + } + /** + * Constructor + * + * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT + */ + constructor(position) { + var _a; + super(); + this.position = position !== null && position !== void 0 ? position : _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; + this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default'); + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); + } + /** Set the associated note. */ + setNote(note) { + var _a, _b; + this.note = note; + this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default'); + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note)) { + this.point = (_b = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('gracenote'); + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width')); + } + return this; + } + /** Render the parenthesis. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); + const x = start.x + this.x_shift; + const y = start.y + this.y_shift; + if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', { + category: `noteHead.standard.noteheadParenthesisRight`, + }); + } + else if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', { + category: `noteHead.standard.noteheadParenthesisLeft`, + }); + } + } +} + + +/***/ }), + +/***/ "./src/parser.ts": +/*!***********************!*\ + !*** ./src/parser.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Parser": () => (/* binding */ Parser) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// A generic text parsing class for VexFlow. + +// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (Parser.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_0__.log)('Vex.Flow.Parser', args); +} +const NO_ERROR_POS = -1; +// Converts parser results into an easy to reference list that can be +// used in triggers. This function returns: +// - nested array in which the leaf elements are string or null +// - string (including empty strings) +// - null +function flattenMatches(r) { + if ('matchedString' in r) + return r.matchedString; // string + if ('results' in r) + return flattenMatches(r.results); + const results = r; + if (results.length === 1) + return flattenMatches(results[0]); + if (results.length === 0) + return null; + return results.map(flattenMatches); // nested array +} +// This is the base parser class. Given an arbitrary context-free grammar, it +// can parse any line and execute code when specific rules are met (e.g., +// when a string is terminated.) +class Parser { + // For an example of a simple grammar, take a look at tests/parser_tests.ts or + // the EasyScore grammar in easyscore.ts. + constructor(grammar) { + this.grammar = grammar; + this.line = ''; + this.pos = 0; + this.errorPos = NO_ERROR_POS; + } + // Parse `line` using current grammar. Returns `{success: true}` if the + // line parsed correctly, otherwise returns `{success: false, errorPos: N}` + // where `errorPos` is the location of the error in the string. + parse(line) { + this.line = line; + this.pos = 0; + this.errorPos = NO_ERROR_POS; + const result = this.expect(this.grammar.begin()); + result.errorPos = this.errorPos; + return result; + } + matchFail(returnPos) { + if (this.errorPos === NO_ERROR_POS) + this.errorPos = this.pos; + this.pos = returnPos; + } + matchSuccess() { + this.errorPos = NO_ERROR_POS; + } + // Look for `token` in this.line[this.pos], and return success + // if one is found. `token` is specified as a regular expression. + matchToken(token, noSpace = false) { + const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\s*)'); + const workingLine = this.line.slice(this.pos); + const result = workingLine.match(regexp); + if (result !== null) { + return { + success: true, + matchedString: result[2], + incrementPos: result[1].length, + pos: this.pos, + }; + } + else { + return { success: false, pos: this.pos }; + } + } + // Execute rule to match a sequence of tokens (or rules). If `maybe` is + // set, then return success even if the token is not found, but reset + // the position before exiting. + // TODO: expectOne(...) is never called with the `maybe` parameter. + expectOne(rule, maybe = false) { + const results = []; + const pos = this.pos; + let allMatches = true; + let oneMatch = false; + maybe = maybe === true || rule.maybe === true; + // Execute all sub rules in sequence. + if (rule.expect) { + for (const next of rule.expect) { + const localPos = this.pos; + const result = this.expect(next); + // If `rule.or` is set, then return success if any one + // of the subrules match, else all subrules must match. + if (result.success) { + results.push(result); + oneMatch = true; + if (rule.or) + break; + } + else { + allMatches = false; + if (!rule.or) { + this.pos = localPos; + break; + } + } + } + } + const gotOne = (rule.or && oneMatch) || allMatches; + const success = gotOne || maybe === true; + const numMatches = gotOne ? 1 : 0; + if (maybe && !gotOne) + this.pos = pos; + if (success) { + this.matchSuccess(); + } + else { + this.matchFail(pos); + } + return { success, results, numMatches }; + } + // Try to match multiple (one or more) instances of the rule. If `maybe` is set, + // then a failed match is also a success (but the position is reset). + expectOneOrMore(rule, maybe = false) { + const results = []; + const pos = this.pos; + let numMatches = 0; + let more = true; + do { + const result = this.expectOne(rule); + if (result.success && result.results) { + numMatches++; + results.push(result.results); + } + else { + more = false; + } + } while (more); + const success = numMatches > 0 || maybe === true; + if (maybe && !(numMatches > 0)) + this.pos = pos; + if (success) { + this.matchSuccess(); + } + else { + this.matchFail(pos); + } + return { success, results, numMatches }; + } + // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`. + expectZeroOrMore(rule) { + return this.expectOneOrMore(rule, true); + } + // Execute the rule produced by the provided `rules` function. This + // offloads to one of the above matchers and consolidates the results. It is also + // responsible for executing any code triggered by the rule (in `rule.run`.) + expect(ruleFunc) { + L('Evaluating rule function:', ruleFunc); + if (!ruleFunc) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Invalid rule function'); + } + let result; + // Get rule from Grammar class. + // expect(...) handles both lexing & parsing: + // - lexer rules produce tokens. + // - parser rules produce expressions which may trigger code via the + // { run: () => ... } trigger functions in easyscore.ts. + // These functions build the VexFlow objects that are displayed on screen. + const rule = ruleFunc.bind(this.grammar)(); + if (rule.token) { + // A lexer rule has a `token` property. + // Base case: parse the regex and throw an error if the + // line doesn't match. + result = this.matchToken(rule.token, rule.noSpace === true); + if (result.success) { + // Token match! Update position and throw away parsed portion + // of string. + this.pos += result.incrementPos; + } + } + else if (rule.expect) { + // A parser rule has an `expect` property. + if (rule.oneOrMore) { + result = this.expectOneOrMore(rule); + } + else if (rule.zeroOrMore) { + result = this.expectZeroOrMore(rule); + } + else { + result = this.expectOne(rule); + } + } + else { + L(rule); + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Bad grammar! No `token` or `expect` property ' + rule); + } + // If there's a trigger attached to this rule, then run it. + // Make the matches accessible through `state.matches` in the + // `run: (state) => ...` trigger. + const matches = []; + result.matches = matches; + if (result.results) { + result.results.forEach((r) => matches.push(flattenMatches(r))); + } + if (rule.run && result.success) { + rule.run({ matches }); + } + return result; + } +} +Parser.DEBUG = false; + + + +/***/ }), + +/***/ "./src/pedalmarking.ts": +/*!*****************************!*\ + !*** ./src/pedalmarking.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PedalMarking": () => (/* binding */ PedalMarking) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +// eslint-disable-next-line +function L(...args) { + if (PedalMarking.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.PedalMarking', args); +} +/** + * Draws a pedal glyph with the provided `name` on a rendering `context` + * at the coordinates `x` and `y. Takes into account the glyph data + * coordinate shifts. + */ +function drawPedalGlyph(name, context, x, y, point) { + const glyph_data = PedalMarking.GLYPHS[name]; + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph(glyph_data.code, point, { category: 'pedalMarking' }); + // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2) + glyph.render(context, x - (glyph.getMetrics().width - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE) / 2, y); +} +/** + * PedalMarking implements different types of pedal markings. These notation + * elements indicate to the performer when to depress and release the a pedal. + * + * In order to create "Sostenuto", and "una corda" markings, you must set + * custom text for the release/depress pedal markings. + */ +class PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.PedalMarking; + } + /** + * Create a sustain pedal marking. Returns the defaults PedalMarking. + * Which uses the traditional "Ped" and "*"" markings. + */ + static createSustain(notes) { + const pedal = new PedalMarking(notes); + return pedal; + } + /** Create a sostenuto pedal marking */ + static createSostenuto(notes) { + const pedal = new PedalMarking(notes); + pedal.setType(PedalMarking.type.MIXED); + pedal.setCustomText('Sost. Ped.'); + return pedal; + } + /** Create an una corda pedal marking */ + static createUnaCorda(notes) { + const pedal = new PedalMarking(notes); + pedal.setType(PedalMarking.type.TEXT); + pedal.setCustomText('una corda', 'tre corda'); + return pedal; + } + constructor(notes) { + super(); + this.notes = notes; + this.type = PedalMarking.type.TEXT; + this.line = 0; + // Custom text for the release/depress markings + this.custom_depress_text = ''; + this.custom_release_text = ''; + this.resetFont(); + this.render_options = { + bracket_height: 10, + text_margin_right: 6, + bracket_line_width: 1, + color: 'black', + }; + } + /** Set pedal type. */ + setType(type) { + type = typeof type === 'string' ? PedalMarking.typeString[type] : type; + if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) { + this.type = type; + } + return this; + } + /** + * Set custom text for the `depress`/`release` pedal markings. No text is + * set if the parameter is falsy. + */ + setCustomText(depress, release) { + this.custom_depress_text = depress || ''; + this.custom_release_text = release || ''; + return this; + } + /** Set the staff line to render the markings on. */ + setLine(line) { + this.line = line; + return this; + } + /** Draw the bracket based pedal markings. */ + drawBracketed() { + const ctx = this.checkContext(); + let is_pedal_depressed = false; + let prev_x; + let prev_y; + // Iterate through each note + this.notes.forEach((note, index, notes) => { + var _a; + // Each note triggers the opposite pedal action + is_pedal_depressed = !is_pedal_depressed; + // Get the initial coordinates for the note + const x = note.getAbsoluteX(); + const y = note.checkStave().getYForBottomText(this.line + 3); + // Throw if current note is positioned before the previous note + if (x < prev_x) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions'); + } + // Determine if the previous or next note are the same + // as the current note. We need to keep track of this for + // when adjustments are made for the release+depress action + const next_is_same = notes[index + 1] === note; + const prev_is_same = notes[index - 1] === note; + let x_shift = 0; + const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + if (is_pedal_depressed) { + // Adjustment for release+depress + x_shift = prev_is_same ? 5 : 0; + if (this.type === PedalMarking.type.MIXED && !prev_is_same) { + // For MIXED style, start with text instead of bracket + if (this.custom_depress_text) { + // If we have custom text, use instead of the default "Ped" glyph + const text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x - text_width / 2, y); + x_shift = text_width / 2 + this.render_options.text_margin_right; + } + else { + // Render the Ped glyph in position + drawPedalGlyph('pedal_depress', ctx, x, y, point); + x_shift = 20 + this.render_options.text_margin_right; + } + } + else { + // Draw start bracket + ctx.beginPath(); + ctx.moveTo(x, y - this.render_options.bracket_height); + ctx.lineTo(x + x_shift, y); + ctx.stroke(); + ctx.closePath(); + } + } + else { + // Adjustment for release+depress + x_shift = next_is_same ? -5 : 0; + // Draw end bracket + ctx.beginPath(); + ctx.moveTo(prev_x, prev_y); + ctx.lineTo(x + x_shift, y); + ctx.lineTo(x, y - this.render_options.bracket_height); + ctx.stroke(); + ctx.closePath(); + } + // Store previous coordinates + prev_x = x + x_shift; + prev_y = y; + }); + } + /** + * Draw the text based pedal markings. This defaults to the traditional + * "Ped" and "*"" symbols if no custom text has been provided. + */ + drawText() { + const ctx = this.checkContext(); + let is_pedal_depressed = false; + // Iterate through each note, placing glyphs or custom text accordingly + this.notes.forEach((note) => { + var _a; + is_pedal_depressed = !is_pedal_depressed; + const stave = note.checkStave(); + const x = note.getAbsoluteX(); + const y = stave.getYForBottomText(this.line + 3); + const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + let text_width = 0; + if (is_pedal_depressed) { + if (this.custom_depress_text) { + text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x - text_width / 2, y); + } + else { + drawPedalGlyph('pedal_depress', ctx, x, y, point); + } + } + else { + if (this.custom_release_text) { + text_width = ctx.measureText(this.custom_release_text).width; + ctx.fillText(this.custom_release_text, x - text_width / 2, y); + } + else { + drawPedalGlyph('pedal_release', ctx, x, y, point); + } + } + }); + } + /** Render the pedal marking in position on the rendering context. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setStrokeStyle(this.render_options.color); + ctx.setFillStyle(this.render_options.color); + ctx.setFont(this.textFont); + L('Rendering Pedal Marking'); + if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) { + ctx.setLineWidth(this.render_options.bracket_line_width); + this.drawBracketed(); + } + else if (this.type === PedalMarking.type.TEXT) { + this.drawText(); + } + ctx.restore(); + } +} +/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */ +PedalMarking.DEBUG = false; +PedalMarking.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 12, + weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, +}; +/** Glyph data */ +PedalMarking.GLYPHS = { + pedal_depress: { + code: 'keyboardPedalPed', + }, + pedal_release: { + code: 'keyboardPedalUp', + }, +}; +/** Pedal type as number. */ +PedalMarking.type = { + TEXT: 1, + BRACKET: 2, + MIXED: 3, +}; +/** Pedal type as string. */ +PedalMarking.typeString = { + text: PedalMarking.type.TEXT, + bracket: PedalMarking.type.BRACKET, + mixed: PedalMarking.type.MIXED, +}; + + + +/***/ }), + +/***/ "./src/registry.ts": +/*!*************************!*\ + !*** ./src/registry.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Registry": () => (/* binding */ Registry) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Mohit Cheppudira +// +// ## Description +// +// This file implements a registry for VexFlow elements. It allows users +// to track, query, and manage some subset of generated elements, and +// dynamically get and set attributes. +// +// There are two ways to register with a registry: +// +// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or, +// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future +// elements will automatically register with it. +// +// Once an element is registered, selected attributes are tracked and indexed by +// the registry. This allows fast look up of elements by attributes like id, type, +// and class. + +// Indexes are represented as maps of maps of maps. This allows +// for both multi-labeling (e.g., an element can have multiple classes) +// and efficient lookup. +class Index { + constructor() { + this.id = {}; + this.type = {}; + this.class = {}; + } +} +class Registry { + static getDefaultRegistry() { + return Registry.defaultRegistry; + } + // If you call `enableDefaultRegistry`, any new elements will auto-register with + // the provided registry as soon as they're constructed. + static enableDefaultRegistry(registry) { + Registry.defaultRegistry = registry; + } + static disableDefaultRegistry() { + Registry.defaultRegistry = undefined; + } + constructor() { + this.index = new Index(); + } + clear() { + this.index = new Index(); + return this; + } + setIndexValue(name, value, id, elem) { + const index = this.index; + if (!index[name][value]) { + index[name][value] = {}; + } + index[name][value][id] = elem; + } + // Updates the indexes for element 'id'. If an element's attribute changes + // from A -> B, make sure to remove the element from A. + updateIndex({ id, name, value, oldValue }) { + const elem = this.getElementById(id); + if (oldValue !== undefined && this.index[name][oldValue]) { + delete this.index[name][oldValue][id]; + } + if (value && elem) { + this.setIndexValue(name, value, elem.getAttribute('id'), elem); + } + } + /** + * Register element `elem` with this registry. + * This adds the element to its index and watches it for attribute changes. + * @param elem + * @param id + * @returns this + */ + register(elem, id) { + id = id || elem.getAttribute('id'); + if (!id) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError("Can't add element without `id` attribute to registry"); + } + // Manually add id to index, then update other indexes. + elem.setAttribute('id', id); + this.setIndexValue('id', id, id, elem); + this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined }); + elem.onRegister(this); + return this; + } + getElementById(id) { + var _a, _b; + return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found. + } + getElementsByAttribute(attribute, value) { + const index_attr = this.index[attribute]; + if (index_attr) { + const index_attr_val = index_attr[value]; + if (index_attr_val) { + const keys = Object.keys(index_attr_val); + return keys.map((k) => index_attr_val[k]); + } + } + return []; + } + getElementsByType(type) { + return this.getElementsByAttribute('type', type); + } + getElementsByClass(className) { + return this.getElementsByAttribute('class', className); + } + // This is called by the element when an attribute value changes. If an indexed + // attribute changes, then update the local index. + onUpdate(info) { + const allowedNames = ['id', 'type', 'class']; + if (allowedNames.includes(info.name)) { + this.updateIndex(info); + } + return this; + } +} + + +/***/ }), + +/***/ "./src/rendercontext.ts": +/*!******************************!*\ + !*** ./src/rendercontext.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RenderContext": () => (/* binding */ RenderContext), +/* harmony export */ "drawDot": () => (/* binding */ drawDot) +/* harmony export */ }); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021. +// MIT License + +class RenderContext { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.RenderContext; + } + set font(f) { + this.setFont(f); + } + get font() { + return this.getFont(); + } + /** + * This is kept for backwards compatibility with 3.0.9. + * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand. + */ + setRawFont(f) { + this.setFont(f); + return this; + } +} +/** + * Draw a tiny dot marker on the specified context. A great debugging aid. + * @param ctx context + * @param x dot x coordinate + * @param y dot y coordinate + * @param color + */ +function drawDot(ctx, x, y, color = '#F55') { + ctx.save(); + ctx.setFillStyle(color); + // draw a circle + ctx.beginPath(); + ctx.arc(x, y, 3, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + ctx.restore(); +} + + +/***/ }), + +/***/ "./src/renderer.ts": +/*!*************************!*\ + !*** ./src/renderer.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Renderer": () => (/* binding */ Renderer), +/* harmony export */ "RendererBackends": () => (/* binding */ RendererBackends), +/* harmony export */ "RendererLineEndType": () => (/* binding */ RendererLineEndType) +/* harmony export */ }); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +var RendererBackends; +(function (RendererBackends) { + RendererBackends[RendererBackends["CANVAS"] = 1] = "CANVAS"; + RendererBackends[RendererBackends["SVG"] = 2] = "SVG"; +})(RendererBackends || (RendererBackends = {})); +// End of line types +var RendererLineEndType; +(function (RendererLineEndType) { + RendererLineEndType[RendererLineEndType["NONE"] = 1] = "NONE"; + RendererLineEndType[RendererLineEndType["UP"] = 2] = "UP"; + RendererLineEndType[RendererLineEndType["DOWN"] = 3] = "DOWN"; +})(RendererLineEndType || (RendererLineEndType = {})); +/** + * Support Canvas & SVG rendering contexts. + */ +class Renderer { + static buildContext(elementId, backend, width, height, background = '#FFF') { + const renderer = new Renderer(elementId, backend); + if (width && height) { + renderer.resize(width, height); + } + const ctx = renderer.getContext(); + ctx.setBackgroundFillStyle(background); + Renderer.lastContext = ctx; + return ctx; + } + static getCanvasContext(elementId, width, height, background) { + return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background); + } + static getSVGContext(elementId, width, height, background) { + return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background); + } + // Draw a dashed line (horizontal, vertical or diagonal + // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space. + // setting the second number to 0 draws a solid line. + static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) { + context.beginPath(); + const dx = toX - fromX; + const dy = toY - fromY; + const angle = Math.atan2(dy, dx); + let x = fromX; + let y = fromY; + context.moveTo(fromX, fromY); + let idx = 0; + let draw = true; + while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) { + const dashLength = dashPattern[idx++ % dashPattern.length]; + const nx = x + Math.cos(angle) * dashLength; + x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx); + const ny = y + Math.sin(angle) * dashLength; + y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny); + if (draw) { + context.lineTo(x, y); + } + else { + context.moveTo(x, y); + } + draw = !draw; + } + context.closePath(); + context.stroke(); + } + constructor(arg0, arg1) { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_2__.isRenderContext)(arg0)) { + // The user has provided what looks like a RenderContext, let's just use it. + this.ctx = arg0; + } + else { + if (arg1 === undefined) { + // The backend must be specified if the render context isn't directly provided. + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidArgument', 'Missing backend argument'); + } + const backend = arg1; + let element; + if (typeof arg0 == 'string') { + const maybeElement = document.getElementById(arg0); + if (!maybeElement) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElementId', `Can't find element with ID "${maybeElement}"`); + } + element = maybeElement; + } + else { + element = arg0; + } + // Verify backend and create context + if (backend === Renderer.Backends.CANVAS) { + if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLCanvas)(element)) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.'); + } + const context = element.getContext('2d', { willReadFrequently: true }); + if (!context) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', "Can't get canvas context"); + } + this.ctx = new _canvascontext__WEBPACK_IMPORTED_MODULE_0__.CanvasContext(context); + } + else if (backend === Renderer.Backends.SVG) { + if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLDiv)(element)) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.'); + } + this.ctx = new _svgcontext__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element); + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidBackend', `No support for backend: ${backend}`); + } + } + } + resize(width, height) { + this.ctx.resize(width, height); + return this; + } + getContext() { + return this.ctx; + } +} +Renderer.Backends = RendererBackends; +Renderer.LineEndType = RendererLineEndType; +// Used by vexflow_test_helpers.ts +// Should this be private? +// Can we do this in a cleaner way? +Renderer.lastContext = undefined; + + + +/***/ }), + +/***/ "./src/repeatnote.ts": +/*!***************************!*\ + !*** ./src/repeatnote.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RepeatNote": () => (/* binding */ RepeatNote) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + + + +// Map `type` to SMuFL glyph code. +const CODES = { + '1': 'repeat1Bar', + '2': 'repeat2Bars', + '4': 'repeat4Bars', + slash: 'repeatBarSlash', +}; +class RepeatNote extends _glyphnote__WEBPACK_IMPORTED_MODULE_1__.GlyphNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.RepeatNote; + } + constructor(type, noteStruct, options) { + const glyphCode = CODES[type] || 'repeat1Bar'; + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyphCode, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), { + category: 'repeatNote', + }); + super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options); + } +} + + +/***/ }), + +/***/ "./src/stave.ts": +/*!**********************!*\ + !*** ./src/stave.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Stave": () => (/* binding */ Stave) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + + + + + + + + + + +// Used by Stave.format() to sort the modifiers at the beginning and end of a stave. +// The keys (computed property names) match the CATEGORY property in the +// Barline, Clef, KeySignature, TimeSignature classes. +const SORT_ORDER_BEG_MODIFIERS = { + [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 0, + [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 1, + [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 2, + [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 3, +}; +const SORT_ORDER_END_MODIFIERS = { + [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 0, + [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 1, + [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 2, + [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 3, +}; +class Stave extends _element__WEBPACK_IMPORTED_MODULE_2__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stave; + } + // This is the sum of the padding that normally goes on left + right of a stave during + // drawing. Used to size staves correctly with content width. + static get defaultPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont(); + return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax'); + } + // Right padding, used by system if startX is already determined. + static get rightPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont(); + return musicFont.lookupMetric('stave.endPaddingMax'); + } + constructor(x, y, width, options) { + super(); + // Initialized by the constructor via this.resetLines(). + this.height = 0; + this.x = x; + this.y = y; + this.width = width; + this.formatted = false; + this.start_x = x + 5; + this.end_x = x + width; + this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.) + this.measure = 0; + this.clef = 'treble'; + this.endClef = undefined; + this.resetFont(); + this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options); + this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 }; + this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 }; + this.resetLines(); + // beg bar + this.addModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.left_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); + // end bar + this.addEndModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.right_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); + } + /** Set default style for ledger lines. */ + setDefaultLedgerLineStyle(style) { + this.defaultLedgerLineStyle = style; + } + /** Get default style for ledger lines. */ + getDefaultLedgerLineStyle() { + return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle); + } + space(spacing) { + return this.options.spacing_between_lines_px * spacing; + } + resetLines() { + this.options.line_config = []; + for (let i = 0; i < this.options.num_lines; i++) { + this.options.line_config.push({ visible: true }); + } + this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px; + this.options.bottom_text_position = this.options.num_lines; + } + setNoteStartX(x) { + if (!this.formatted) + this.format(); + this.start_x = x; + return this; + } + getNoteStartX() { + if (!this.formatted) + this.format(); + return this.start_x; + } + getNoteEndX() { + if (!this.formatted) + this.format(); + return this.end_x; + } + getTieStartX() { + return this.start_x; + } + getTieEndX() { + return this.end_x; + } + getX() { + return this.x; + } + getNumLines() { + return this.options.num_lines; + } + setNumLines(n) { + this.options.num_lines = n; + this.resetLines(); + return this; + } + setY(y) { + this.y = y; + return this; + } + getY() { + return this.y; + } + getTopLineTopY() { + return this.getYForLine(0) - _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2; + } + getBottomLineBottomY() { + return this.getYForLine(this.getNumLines() - 1) + _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2; + } + setX(x) { + const shift = x - this.x; + this.formatted = false; + this.x = x; + this.start_x += shift; + this.end_x += shift; + for (let i = 0; i < this.modifiers.length; i++) { + const mod = this.modifiers[i]; + mod.setX(mod.getX() + shift); + } + return this; + } + setWidth(width) { + this.formatted = false; + this.width = width; + this.end_x = this.x + width; + // reset the x position of the end barline (TODO(0xfe): This makes no sense) + // this.modifiers[1].setX(this.end_x); + return this; + } + getWidth() { + return this.width; + } + getStyle() { + return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS }, super.getStyle()); + } + /** + * Set the measure number of this Stave. + */ + setMeasure(measure) { + this.measure = measure; + return this; + } + /** + * Return the measure number of this Stave. + */ + getMeasure() { + return this.measure; + } + /** + * Gets the pixels to shift from the beginning of the stave + * following the modifier at the provided index + * @param {Number} index The index from which to determine the shift + * @return {Number} The amount of pixels shifted + */ + getModifierXShift(index = 0) { + if (typeof index !== 'number') { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('InvalidIndex', 'Must be of number type'); + } + if (!this.formatted) + this.format(); + if (this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN).length === 1) { + return 0; + } + // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test' + if (this.modifiers[index].getPosition() === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.RIGHT) { + return 0; + } + let start_x = this.start_x - this.x; + const begBarline = this.modifiers[0]; + if (begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) { + start_x -= begBarline.getWidth(); + } + return start_x; + } + /** Coda & Segno Symbol functions */ + setRepetitionType(type, yShift = 0) { + this.modifiers.push(new _staverepetition__WEBPACK_IMPORTED_MODULE_7__.Repetition(type, this.x, yShift)); + return this; + } + // Volta functions + setVoltaType(type, number_t, y) { + this.modifiers.push(new _stavevolta__WEBPACK_IMPORTED_MODULE_11__.Volta(type, number_t, this.x, y)); + return this; + } + // Section functions + setSection(section, y, xOffset = 0, fontSize, drawRect = true) { + const staveSection = new _stavesection__WEBPACK_IMPORTED_MODULE_8__.StaveSection(section, this.x + xOffset, y, drawRect); + if (fontSize) + staveSection.setFontSize(fontSize); + this.modifiers.push(staveSection); + return this; + } + // Tempo functions + setTempo(tempo, y) { + this.modifiers.push(new _stavetempo__WEBPACK_IMPORTED_MODULE_9__.StaveTempo(tempo, this.x, y)); + return this; + } + // Text functions + setText(text, position, options = {}) { + this.modifiers.push(new _stavetext__WEBPACK_IMPORTED_MODULE_10__.StaveText(text, position, options)); + return this; + } + getHeight() { + return this.height; + } + getSpacingBetweenLines() { + return this.options.spacing_between_lines_px; + } + getBoundingBox() { + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y); + } + getBottomY() { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing; + return score_bottom; + } + getBottomLineY() { + return this.getYForLine(this.options.num_lines); + } + // This returns + /** @returns the y for the *center* of a staff line */ + getYForLine(line) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + const y = this.y + line * spacing + headroom * spacing; + return y; + } + getLineForY(y) { + // Does the reverse of getYForLine - somewhat dumb and just calls + // getYForLine until the right value is reaches + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + return (y - this.y) / spacing - headroom; + } + getYForTopText(line = 0) { + return this.getYForLine(-line - this.options.top_text_position); + } + getYForBottomText(line = 0) { + return this.getYForLine(this.options.bottom_text_position + line); + } + getYForNote(line) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + return this.y + headroom * spacing + 5 * spacing - line * spacing; + } + getYForGlyphs() { + return this.getYForLine(3); + } + // This method adds a stave modifier to the stave. Note that the first two + // modifiers (BarLines) are automatically added upon construction. + addModifier(modifier, position) { + if (position !== undefined) { + modifier.setPosition(position); + } + modifier.setStave(this); + this.formatted = false; + this.modifiers.push(modifier); + return this; + } + addEndModifier(modifier) { + this.addModifier(modifier, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + // Bar Line functions + setBegBarType(type) { + // Only valid bar types at beginning of stave is none, single or begin repeat + const { SINGLE, REPEAT_BEGIN, NONE } = _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType; + if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) { + this.modifiers[0].setType(type); + this.formatted = false; + } + return this; + } + setEndBarType(type) { + // Repeat end not valid at end of stave + if (type !== _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) { + this.modifiers[1].setType(type); + this.formatted = false; + } + return this; + } + setClef(clefSpec, size, annotation, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) { + this.endClef = clefSpec; + } + else { + this.clef = clefSpec; + } + const clefs = this.getModifiers(position, _clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY); + if (clefs.length === 0) { + this.addClef(clefSpec, size, annotation, position); + } + else { + clefs[0].setType(clefSpec, size, annotation); + } + return this; + } + getClef() { + return this.clef; + } + setEndClef(clefSpec, size, annotation) { + this.setClef(clefSpec, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + getEndClef() { + return this.endClef; + } + setKeySignature(keySpec, cancelKeySpec, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + const keySignatures = this.getModifiers(position, _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY); + if (keySignatures.length === 0) { + this.addKeySignature(keySpec, cancelKeySpec, position); + } + else { + keySignatures[0].setKeySig(keySpec, cancelKeySpec); + } + return this; + } + setEndKeySignature(keySpec, cancelKeySpec) { + this.setKeySignature(keySpec, cancelKeySpec, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + setTimeSignature(timeSpec, customPadding, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + const timeSignatures = this.getModifiers(position, _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY); + if (timeSignatures.length === 0) { + this.addTimeSignature(timeSpec, customPadding, position); + } + else { + timeSignatures[0].setTimeSig(timeSpec); + } + return this; + } + setEndTimeSignature(timeSpec, customPadding) { + this.setTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + /** + * Add a key signature to the stave. + * + * Example: + * `stave.addKeySignature('Db');` + * @param keySpec new key specification `[A-G][b|#]?` + * @param cancelKeySpec + * @param position + * @returns + */ + addKeySignature(keySpec, cancelKeySpec, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + this.addModifier(new _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature(keySpec, cancelKeySpec).setPosition(position), position); + return this; + } + /** + * Add a clef to the stave. + * + * Example: + * + * stave.addClef('treble') + * @param clef clef (treble|bass|...) see {@link Clef.types} + * @param size + * @param annotation + * @param position + * @returns + */ + addClef(clef, size, annotation, position) { + if (position === undefined || position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN) { + this.clef = clef; + } + else if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) { + this.endClef = clef; + } + this.addModifier(new _clef__WEBPACK_IMPORTED_MODULE_1__.Clef(clef, size, annotation), position); + return this; + } + addEndClef(clef, size, annotation) { + this.addClef(clef, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + /** + * Add a time signature to the stave + * + * Example: + * + * `stave.addTimeSignature('4/4');` + * @param timeSpec time signature specification `(C\||C|\d\/\d)` + * @param customPadding + * @param position + * @returns + */ + addTimeSignature(timeSpec, customPadding, position) { + this.addModifier(new _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature(timeSpec, customPadding), position); + return this; + } + addEndTimeSignature(timeSpec, customPadding) { + this.addTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + // Deprecated + addTrebleGlyph() { + this.addClef('treble'); + return this; + } + /** + * @param position + * @param category + * @returns array of StaveModifiers that match the provided position and category. + */ + getModifiers(position, category) { + const noPosition = position === undefined; + const noCategory = category === undefined; + if (noPosition && noCategory) { + return this.modifiers; + } + else if (noPosition) { + // A category was provided. + return this.modifiers.filter((m) => category === m.getCategory()); + } + else if (noCategory) { + // A position was provided. + return this.modifiers.filter((m) => position === m.getPosition()); + } + else { + // Both position and category were provided! + return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory()); + } + } + /** + * Use the modifier's `getCategory()` as a key for the `order` array. + * The retrieved value is used to sort modifiers from left to right (0 to to 3). + */ + sortByCategory(items, order) { + for (let i = items.length - 1; i >= 0; i--) { + for (let j = 0; j < i; j++) { + if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) { + const temp = items[j]; + items[j] = items[j + 1]; + items[j + 1] = temp; + } + } + } + } + format() { + const begBarline = this.modifiers[0]; + const endBarline = this.modifiers[1]; + const begModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN); + const endModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS); + this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS); + if (begModifiers.length > 1 && begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) { + begModifiers.push(begModifiers.splice(0, 1)[0]); + begModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE)); + } + if (endModifiers.indexOf(endBarline) > 0) { + endModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); + } + let width; + let padding; + let modifier; + let offset = 0; + let x = this.x; + for (let i = 0; i < begModifiers.length; i++) { + modifier = begModifiers[i]; + padding = modifier.getPadding(i + offset); + width = modifier.getWidth(); + x += padding; + modifier.setX(x); + x += width; + if (padding + width === 0) + offset--; + } + this.start_x = x; + x = this.x + this.width; + const widths = { + left: 0, + right: 0, + paddingRight: 0, + paddingLeft: 0, + }; + let lastBarlineIdx = 0; + for (let i = 0; i < endModifiers.length; i++) { + modifier = endModifiers[i]; + lastBarlineIdx = (0,_typeguard__WEBPACK_IMPORTED_MODULE_14__.isBarline)(modifier) ? i : lastBarlineIdx; + widths.right = 0; + widths.left = 0; + widths.paddingRight = 0; + widths.paddingLeft = 0; + const layoutMetrics = modifier.getLayoutMetrics(); + if (layoutMetrics) { + if (i !== 0) { + widths.right = layoutMetrics.xMax || 0; + widths.paddingRight = layoutMetrics.paddingRight || 0; + } + widths.left = -layoutMetrics.xMin || 0; + widths.paddingLeft = layoutMetrics.paddingLeft || 0; + if (i === endModifiers.length - 1) { + widths.paddingLeft = 0; + } + } + else { + widths.paddingRight = modifier.getPadding(i - lastBarlineIdx); + if (i !== 0) { + widths.right = modifier.getWidth(); + } + if (i === 0) { + widths.left = modifier.getWidth(); + } + } + x -= widths.paddingRight; + x -= widths.right; + modifier.setX(x); + x -= widths.left; + x -= widths.paddingLeft; + } + this.end_x = endModifiers.length === 1 ? this.x + this.width : x; + this.formatted = true; + } + /** + * All drawing functions below need the context to be set. + */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + this.applyStyle(); + ctx.openGroup('stave', this.getAttribute('id')); + if (!this.formatted) + this.format(); + const num_lines = this.options.num_lines; + const width = this.width; + const x = this.x; + let y; + // Render lines + for (let line = 0; line < num_lines; line++) { + y = this.getYForLine(line); + if (this.options.line_config[line].visible) { + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + width, y); + ctx.stroke(); + } + } + ctx.closeGroup(); + this.restoreStyle(); + // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.) + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + // Only draw modifier if it has a draw function + if (typeof modifier.draw === 'function') { + modifier.applyStyle(ctx); + modifier.draw(this, this.getModifierXShift(i)); + modifier.restoreStyle(ctx); + } + } + // Render measure numbers + if (this.measure > 0) { + ctx.save(); + ctx.setFont(this.textFont); + const textWidth = ctx.measureText('' + this.measure).width; + y = this.getYForTopText(0) + 3; + ctx.fillText('' + this.measure, this.x - textWidth / 2, y); + ctx.restore(); + } + return this; + } + getVerticalBarWidth() { + return this.options.vertical_bar_width; + } + /** + * Get the current configuration for the Stave. + * @return {Array} An array of configuration objects. + */ + getConfigForLines() { + return this.options.line_config; + } + /** + * Configure properties of the lines in the Stave + * @param line_number The index of the line to configure. + * @param line_config An configuration object for the specified line. + * @throws RuntimeError "StaveConfigError" When the specified line number is out of + * range of the number of lines specified in the constructor. + */ + setConfigForLine(line_number, line_config) { + if (line_number >= this.options.num_lines || line_number < 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.'); + } + if (line_config.visible === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', "The line configuration object is missing the 'visible' property."); + } + if (typeof line_config.visible !== 'boolean') { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', "The line configuration objects 'visible' property must be true or false."); + } + this.options.line_config[line_number] = line_config; + return this; + } + /** + * Set the staff line configuration array for all of the lines at once. + * @param lines_configuration An array of line configuration objects. These objects + * are of the same format as the single one passed in to setLineConfiguration(). + * The caller can set null for any line config entry if it is desired that the default be used + * @throws RuntimeError "StaveConfigError" When the lines_configuration array does not have + * exactly the same number of elements as the num_lines configuration object set in + * the constructor. + */ + setConfigForLines(lines_configuration) { + if (lines_configuration.length !== this.options.num_lines) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave'); + } + // Make sure the defaults are present in case an incomplete set of + // configuration options were supplied. + // eslint-disable-next-line + for (const line_config in lines_configuration) { + // Allow '{}' to be used if the caller just wants the default for a particular node. + if (lines_configuration[line_config].visible == undefined) { + lines_configuration[line_config] = this.options.line_config[line_config]; + } + this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]); + } + this.options.line_config = lines_configuration; + return this; + } + static formatBegModifiers(staves) { + const adjustCategoryStartX = (category) => { + let minStartX = 0; + // Calculate min start X for the category + staves.forEach((stave) => { + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category); + // Consider only the first instance + if (modifiers.length > 0 && modifiers[0].getX() > minStartX) + minStartX = modifiers[0].getX(); + }); + let adjustX = 0; + staves.forEach((stave) => { + adjustX = 0; + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category); + // Calculate adjustement required for the stave + modifiers.forEach((modifier) => { + if (minStartX - modifier.getX() > adjustX) + adjustX = minStartX - modifier.getX(); + }); + const allModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN); + let bAdjust = false; + // Apply adjustment to all the modifiers in and beyond the category + allModifiers.forEach((modifier) => { + if (modifier.getCategory() === category) + bAdjust = true; + if (bAdjust && adjustX > 0) + modifier.setX(modifier.getX() + adjustX); + }); + // Apply adjustment also to note start. + stave.setNoteStartX(stave.getNoteStartX() + adjustX); + }); + }; + // Make sure that staves are formatted + staves.forEach((stave) => { + if (!stave.formatted) + stave.format(); + }); + // Align Clefs + adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Clef); + // Align key signatures + adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.KeySignature); + // Align time signatures + adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.TimeSignature); + let maxX = 0; + // align note start + staves.forEach((stave) => { + if (stave.getNoteStartX() > maxX) + maxX = stave.getNoteStartX(); + }); + staves.forEach((stave) => { + stave.setNoteStartX(maxX); + }); + maxX = 0; + // align REPEAT_BEGIN + staves.forEach((stave) => { + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline); + modifiers.forEach((modifier) => { + if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) + if (modifier.getX() > maxX) + maxX = modifier.getX(); + }); + }); + staves.forEach((stave) => { + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline); + modifiers.forEach((modifier) => { + if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) + modifier.setX(maxX); + }); + }); + } +} +Stave.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF, + size: 8, + weight: _font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_3__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavebarline.ts": +/*!*****************************!*\ + !*** ./src/stavebarline.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Barline": () => (/* binding */ Barline), +/* harmony export */ "BarlineType": () => (/* binding */ BarlineType) +/* harmony export */ }); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Author Larry Kuhns 2011 + + + +var BarlineType; +(function (BarlineType) { + BarlineType[BarlineType["SINGLE"] = 1] = "SINGLE"; + BarlineType[BarlineType["DOUBLE"] = 2] = "DOUBLE"; + BarlineType[BarlineType["END"] = 3] = "END"; + BarlineType[BarlineType["REPEAT_BEGIN"] = 4] = "REPEAT_BEGIN"; + BarlineType[BarlineType["REPEAT_END"] = 5] = "REPEAT_END"; + BarlineType[BarlineType["REPEAT_BOTH"] = 6] = "REPEAT_BOTH"; + BarlineType[BarlineType["NONE"] = 7] = "NONE"; +})(BarlineType || (BarlineType = {})); +class Barline extends _stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Barline; + } + static get type() { + return BarlineType; + } + static get typeString() { + return { + single: BarlineType.SINGLE, + double: BarlineType.DOUBLE, + end: BarlineType.END, + repeatBegin: BarlineType.REPEAT_BEGIN, + repeatEnd: BarlineType.REPEAT_END, + repeatBoth: BarlineType.REPEAT_BOTH, + none: BarlineType.NONE, + }; + } + constructor(type) { + super(); + this.thickness = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STAVE_LINE_THICKNESS; + const TYPE = BarlineType; + this.widths = {}; + this.widths[TYPE.SINGLE] = 5; + this.widths[TYPE.DOUBLE] = 5; + this.widths[TYPE.END] = 5; + this.widths[TYPE.REPEAT_BEGIN] = 5; + this.widths[TYPE.REPEAT_END] = 5; + this.widths[TYPE.REPEAT_BOTH] = 5; + this.widths[TYPE.NONE] = 5; + this.paddings = {}; + this.paddings[TYPE.SINGLE] = 0; + this.paddings[TYPE.DOUBLE] = 0; + this.paddings[TYPE.END] = 0; + this.paddings[TYPE.REPEAT_BEGIN] = 15; + this.paddings[TYPE.REPEAT_END] = 15; + this.paddings[TYPE.REPEAT_BOTH] = 15; + this.paddings[TYPE.NONE] = 0; + this.layoutMetricsMap = {}; + this.layoutMetricsMap[TYPE.SINGLE] = { + xMin: 0, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.DOUBLE] = { + xMin: -3, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.END] = { + xMin: -5, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_END] = { + xMin: -10, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = { + xMin: -2, + xMax: 10, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_BOTH] = { + xMin: -10, + xMax: 10, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.NONE] = { + xMin: 0, + xMax: 0, + paddingLeft: 5, + paddingRight: 5, + }; + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition.BEGIN); + this.setType(type); + } + getType() { + return this.type; + } + setType(type) { + this.type = typeof type === 'string' ? Barline.typeString[type] : type; + this.setWidth(this.widths[this.type]); + this.setPadding(this.paddings[this.type]); + this.setLayoutMetrics(this.layoutMetricsMap[this.type]); + return this; + } + // Draw barlines + draw(stave) { + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('stavebarline', this.getAttribute('id')); + switch (this.type) { + case BarlineType.SINGLE: + this.drawVerticalBar(stave, this.x, false); + break; + case BarlineType.DOUBLE: + this.drawVerticalBar(stave, this.x, true); + break; + case BarlineType.END: + this.drawVerticalEndBar(stave, this.x); + break; + case BarlineType.REPEAT_BEGIN: + // If the barline is shifted over (in front of clef/time/key) + // Draw vertical bar at the beginning. + this.drawRepeatBar(stave, this.x, true); + if (stave.getX() !== this.x) { + this.drawVerticalBar(stave, stave.getX()); + } + break; + case BarlineType.REPEAT_END: + this.drawRepeatBar(stave, this.x, false); + break; + case BarlineType.REPEAT_BOTH: + this.drawRepeatBar(stave, this.x, false); + this.drawRepeatBar(stave, this.x, true); + break; + default: + // Default is NONE, so nothing to draw + break; + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } + drawVerticalBar(stave, x, double_bar) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + if (double_bar) { + staveCtx.fillRect(x - 3, topY, 1, botY - topY); + } + staveCtx.fillRect(x, topY, 1, botY - topY); + } + drawVerticalEndBar(stave, x) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + staveCtx.fillRect(x - 5, topY, 1, botY - topY); + staveCtx.fillRect(x - 2, topY, 3, botY - topY); + } + drawRepeatBar(stave, x, begin) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + let x_shift = 3; + if (!begin) { + x_shift = -5; + } + staveCtx.fillRect(x + x_shift, topY, 1, botY - topY); + staveCtx.fillRect(x - 2, topY, 3, botY - topY); + const dot_radius = 2; + // Shift dots left or right + if (begin) { + x_shift += 4; + } + else { + x_shift -= 4; + } + const dot_x = x + x_shift + dot_radius / 2; + // calculate the y offset based on number of stave lines + let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines(); + y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2; + let dot_y = topY + y_offset + dot_radius / 2; + // draw the top repeat dot + staveCtx.beginPath(); + staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); + staveCtx.fill(); + // draw the bottom repeat dot + dot_y += stave.getSpacingBetweenLines(); + staveCtx.beginPath(); + staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); + staveCtx.fill(); + } +} + + +/***/ }), + +/***/ "./src/staveconnector.ts": +/*!*******************************!*\ + !*** ./src/staveconnector.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveConnector": () => (/* binding */ StaveConnector) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +function drawBoldDoubleLine(ctx, type, topX, topY, botY) { + if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.'); + } + let x_shift = 3; + let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues + const thickLineOffset = 2; // For aesthetics + if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) { + x_shift = -5; // Flips the side of the thin line + variableWidth = 3; + } + // Thin line + ctx.fillRect(topX + x_shift, topY, 1, botY - topY); + // Thick line + ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY); +} +/** StaveConnector implements the connector lines between staves of a system. */ +class StaveConnector extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StaveConnector; + } + constructor(top_stave, bottom_stave) { + super(); + this.thickness = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_THICKNESS; + this.width = 3; + this.top_stave = top_stave; + this.bottom_stave = bottom_stave; + this.type = StaveConnector.type.DOUBLE; + this.resetFont(); + // 1. Offset Bold Double Left to align with offset Repeat Begin bars + // 2. Offset BRACE type not to overlap with another StaveConnector + this.x_shift = 0; + this.texts = []; + } + /** + * Set type. + * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString} + */ + setType(type) { + const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type; + // Be certain that the type is a valid type: + if (Object.values(StaveConnector.type).includes(newType)) { + this.type = newType; + } + return this; + } + /** + * Get type. + * @returns number {@link StaveConnector.type} + */ + getType() { + return this.type; + } + /** Set optional associated Text. */ + setText(text, options = {}) { + this.texts.push({ + content: text, + options: Object.assign({ shift_x: 0, shift_y: 0 }, options), + }); + return this; + } + setXShift(x_shift) { + if (typeof x_shift !== 'number') { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', 'x_shift must be a Number'); + } + this.x_shift = x_shift; + return this; + } + getXShift() { + return this.x_shift; + } + /** Render connector and associated text. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let topY = this.top_stave.getYForLine(0); + let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness; + let width = this.width; + let topX = this.top_stave.getX(); + const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT || + this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT || + this.type === StaveConnector.type.THIN_DOUBLE; + if (isRightSidedConnector) { + topX = this.top_stave.getX() + this.top_stave.getWidth(); + } + let attachment_height = botY - topY; + switch (this.type) { + case StaveConnector.type.SINGLE: + width = 1; + break; + case StaveConnector.type.SINGLE_LEFT: + width = 1; + break; + case StaveConnector.type.SINGLE_RIGHT: + width = 1; + break; + case StaveConnector.type.DOUBLE: + topX -= this.width + 2; + topY -= this.thickness; + attachment_height += 0.5; + break; + case StaveConnector.type.BRACE: { + width = 12; + // May need additional code to draw brace + const x1 = this.top_stave.getX() - 2 + this.x_shift; + const y1 = topY; + const x3 = x1; + const y3 = botY; + const x2 = x1 - width; + const y2 = y1 + attachment_height / 2.0; + const cpx1 = x2 - 0.9 * width; + const cpy1 = y1 + 0.2 * attachment_height; + const cpx2 = x1 + 1.1 * width; + const cpy2 = y2 - 0.135 * attachment_height; + const cpx3 = cpx2; + const cpy3 = y2 + 0.135 * attachment_height; + const cpx4 = cpx1; + const cpy4 = y3 - 0.2 * attachment_height; + const cpx5 = x2 - width; + const cpy5 = cpy4; + const cpx6 = x1 + 0.4 * width; + const cpy6 = y2 + 0.135 * attachment_height; + const cpx7 = cpx6; + const cpy7 = y2 - 0.135 * attachment_height; + const cpx8 = cpx5; + const cpy8 = cpy1; + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2); + ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3); + ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2); + ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1); + ctx.fill(); + ctx.stroke(); + break; + } + case StaveConnector.type.BRACKET: + topY -= 6; + botY += 6; + attachment_height = botY - topY; + _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop'); + _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom'); + topX -= this.width + 2; + break; + case StaveConnector.type.BOLD_DOUBLE_LEFT: + drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness); + break; + case StaveConnector.type.BOLD_DOUBLE_RIGHT: + drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness); + break; + case StaveConnector.type.THIN_DOUBLE: + width = 1; + attachment_height -= this.thickness; + break; + case StaveConnector.type.NONE: + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`); + } + if (this.type !== StaveConnector.type.BRACE && + this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT && + this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT && + this.type !== StaveConnector.type.NONE) { + ctx.fillRect(topX, topY, width, attachment_height); + } + // If the connector is a thin double barline, draw the paralell line + if (this.type === StaveConnector.type.THIN_DOUBLE) { + ctx.fillRect(topX - 3, topY, width, attachment_height); + } + ctx.save(); + ctx.setLineWidth(2); + ctx.setFont(this.textFont); + // Add stave connector text + for (let i = 0; i < this.texts.length; i++) { + const text = this.texts[i]; + const text_width = ctx.measureText('' + text.content).width; + const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x; + const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y; + ctx.fillText('' + text.content, x, y + 4); + } + ctx.restore(); + } +} +StaveConnector.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 16, + weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, +}; +/** + * SINGLE_LEFT and SINGLE are the same value for compatibility + * with older versions of vexflow which didn't have right sided + * stave connectors. + */ +StaveConnector.type = { + SINGLE_RIGHT: 0, + SINGLE_LEFT: 1, + SINGLE: 1, + DOUBLE: 2, + BRACE: 3, + BRACKET: 4, + BOLD_DOUBLE_LEFT: 5, + BOLD_DOUBLE_RIGHT: 6, + THIN_DOUBLE: 7, + NONE: 8, +}; +/** + * Connector type: + * * "singleRight" + * * "singleLeft" + * * "single" + * * "double" + * * "brace" + * * "bracket" + * * "boldDoubleLeft" + * * "boldDoubleRight" + * * "thinDouble" + * * "none" + */ +StaveConnector.typeString = { + singleRight: StaveConnector.type.SINGLE_RIGHT, + singleLeft: StaveConnector.type.SINGLE_LEFT, + single: StaveConnector.type.SINGLE, + double: StaveConnector.type.DOUBLE, + brace: StaveConnector.type.BRACE, + bracket: StaveConnector.type.BRACKET, + boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT, + boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT, + thinDouble: StaveConnector.type.THIN_DOUBLE, + none: StaveConnector.type.NONE, +}; + + + +/***/ }), + +/***/ "./src/stavehairpin.ts": +/*!*****************************!*\ + !*** ./src/stavehairpin.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveHairpin": () => (/* binding */ StaveHairpin) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/ +// +// This class implements hairpins between notes. +// Hairpins can be either crescendo or decrescendo. + + + + +class StaveHairpin extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.StaveHairpin; + } + /* Helper function to convert ticks into pixels. + * Requires a Formatter with voices joined and formatted (to + * get pixels per tick) + * + * options is struct that has: + * + * { + * height: px, + * y_shift: px, // vertical offset + * left_shift_ticks: 0, // left horizontal offset expressed in ticks + * right_shift_ticks: 0 // right horizontal offset expressed in ticks + * } + * + **/ + static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) { + var _a, _b; + const ppt = formatter.pixelsPerTick; + if (ppt == null) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.'); + } + const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0); + const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0); + const hairpin_options = { + height: options.height, + y_shift: options.y_shift, + left_shift_px: l_shift_px, + right_shift_px: r_shift_px, + right_shift_ticks: 0, + left_shift_ticks: 0, + }; + new StaveHairpin({ + first_note: notes.first_note, + last_note: notes.last_note, + }, type) + .setContext(ctx) + .setRenderOptions(hairpin_options) + .setPosition(position) + .draw(); + } + /** + * Create a new hairpin from the specified notes. + * + * @param {!Object} notes The notes to tie up. + * Notes is a struct that has: + * + * { + * first_note: Note, + * last_note: Note, + * } + * @param {!Object} type The type of hairpin + */ + constructor(notes, type) { + super(); + this.setNotes(notes); + this.hairpin = type; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW; + this.render_options = { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, + right_shift_ticks: 0, + left_shift_ticks: 0, + }; + } + setPosition(position) { + if (position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE || position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW) { + this.position = position; + } + return this; + } + setRenderOptions(options) { + if (options.height != null && + options.y_shift != null && + options.left_shift_px != null && + options.right_shift_px != null) { + this.render_options = options; + } + return this; + } + /** + * Set the notes to attach this hairpin to. + * + * @param {!Object} notes The start and end notes. + */ + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.'); + } + this.notes = notes; + this.first_note = notes.first_note; + this.last_note = notes.last_note; + return this; + } + renderHairpin(params) { + const ctx = this.checkContext(); + let dis = this.render_options.y_shift + 20; + let y_shift = params.first_y; + if (this.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { + dis = -dis + 30; + y_shift = params.first_y - params.staff_height; + } + const l_shift = this.render_options.left_shift_px; + const r_shift = this.render_options.right_shift_px; + ctx.beginPath(); + switch (this.hairpin) { + case StaveHairpin.type.CRESC: + ctx.moveTo(params.last_x + r_shift, y_shift + dis); + ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis); + ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis); + break; + case StaveHairpin.type.DECRESC: + ctx.moveTo(params.first_x + l_shift, y_shift + dis); + ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis); + ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis); + break; + default: + // Default is NONE, so nothing to draw + break; + } + ctx.stroke(); + ctx.closePath(); + } + draw() { + this.checkContext(); + this.setRendered(); + const firstNote = this.first_note; + const lastNote = this.last_note; + if (!firstNote || !lastNote) + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NoNote', 'Notes required to draw'); + const start = firstNote.getModifierStartXY(this.position, 0); + const end = lastNote.getModifierStartXY(this.position, 0); + this.renderHairpin({ + first_x: start.x, + last_x: end.x, + first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(), + last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(), + staff_height: firstNote.checkStave().getHeight(), + }); + } +} +StaveHairpin.type = { + CRESC: 1, + DECRESC: 2, +}; + + + +/***/ }), + +/***/ "./src/staveline.ts": +/*!**************************!*\ + !*** ./src/staveline.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveLine": () => (/* binding */ StaveLine) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This file implements `StaveLine` which are simply lines that connect +// two notes. This object is highly configurable, see the `render_options`. +// A simple line is often used for notating glissando articulations, but you +// can format a `StaveLine` with arrows or colors for more pedagogical +// purposes, such as diagrams. + + + + + +// Attribution: Arrow rendering implementations based off of +// Patrick Horgan's article, "Drawing lines and arcs with +// arrow heads on HTML5 Canvas" +// +// Draw an arrow head that connects between 3 coordinates. +function drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) { + // all cases do this. + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x0, y0); + ctx.closePath(); + ctx.fill(); +} +class StaveLine extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveLine; + } + // Initialize the StaveLine with the given `notes`. + // + // `notes` is a struct that has: + // + // ``` + // { + // first_note: Note, + // last_note: Note, + // first_indices: [n1, n2, n3], + // last_indices: [n1, n2, n3] + // } + // ``` + constructor(notes) { + super(); + this.setNotes(notes); + this.text = ''; + this.resetFont(); + this.render_options = { + // Space to add to the left or the right + padding_left: 4, + padding_right: 3, + // The width of the line in pixels + line_width: 1, + // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?). + line_dash: undefined, + // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?). + rounded_end: true, + // The color of the line and arrowheads + color: undefined, + // Flags to draw arrows on each end of the line + draw_start_arrow: false, + draw_end_arrow: false, + // The length of the arrowhead sides + arrowhead_length: 10, + // The angle of the arrowhead + arrowhead_angle: Math.PI / 8, + // The position of the text + text_position_vertical: StaveLine.TextVerticalPosition.TOP, + text_justification: StaveLine.TextJustification.CENTER, + }; + } + // The the annotation for the `StaveLine` + setText(text) { + this.text = text; + return this; + } + // Set the notes for the `StaveLine` + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.'); + } + if (!notes.first_indices) + notes.first_indices = [0]; + if (!notes.last_indices) + notes.last_indices = [0]; + if (notes.first_indices.length !== notes.last_indices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Connected notes must have same number of indices.'); + } + this.notes = notes; + this.first_note = notes.first_note; + this.first_indices = notes.first_indices; + this.last_note = notes.last_note; + this.last_indices = notes.last_indices; + return this; + } + // Apply the style of the `StaveLine` to the context + applyLineStyle() { + const ctx = this.checkContext(); + const render_options = this.render_options; + if (render_options.line_dash) { + ctx.setLineDash(render_options.line_dash); + } + if (render_options.line_width) { + ctx.setLineWidth(render_options.line_width); + } + if (render_options.rounded_end) { + ctx.setLineCap('round'); + } + else { + ctx.setLineCap('square'); + } + } + // Apply the text styling to the context + applyFontStyle() { + const ctx = this.checkContext(); + ctx.setFont(this.textFont); + const render_options = this.render_options; + const color = render_options.color; + if (color) { + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + } + } + // Helper function to draw a line with arrow heads + drawArrowLine(ctx, pt1, pt2) { + const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow; + const x1 = pt1.x; + const y1 = pt1.y; + const x2 = pt2.x; + const y2 = pt2.y; + // For ends with arrow we actually want to stop before we get to the arrow + // so that wide lines won't put a flat end on the arrow. + const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + const ratio = (distance - this.render_options.arrowhead_length / 3) / distance; + let end_x; + let end_y; + let start_x; + let start_y; + if (this.render_options.draw_end_arrow || both_arrows) { + end_x = Math.round(x1 + (x2 - x1) * ratio); + end_y = Math.round(y1 + (y2 - y1) * ratio); + } + else { + end_x = x2; + end_y = y2; + } + if (this.render_options.draw_start_arrow || both_arrows) { + start_x = x1 + (x2 - x1) * (1 - ratio); + start_y = y1 + (y2 - y1) * (1 - ratio); + } + else { + start_x = x1; + start_y = y1; + } + if (this.render_options.color) { + ctx.setStrokeStyle(this.render_options.color); + ctx.setFillStyle(this.render_options.color); + } + // Draw the shaft of the arrow + ctx.beginPath(); + ctx.moveTo(start_x, start_y); + ctx.lineTo(end_x, end_y); + ctx.stroke(); + ctx.closePath(); + // calculate the angle of the line + const line_angle = Math.atan2(y2 - y1, x2 - x1); + // h is the line length of a side of the arrow head + const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle)); + let angle1; + let angle2; + let top_x; + let top_y; + let bottom_x; + let bottom_y; + if (this.render_options.draw_end_arrow || both_arrows) { + angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle; + top_x = x2 + Math.cos(angle1) * h; + top_y = y2 + Math.sin(angle1) * h; + angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle; + bottom_x = x2 + Math.cos(angle2) * h; + bottom_y = y2 + Math.sin(angle2) * h; + drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y); + } + if (this.render_options.draw_start_arrow || both_arrows) { + angle1 = line_angle + this.render_options.arrowhead_angle; + top_x = x1 + Math.cos(angle1) * h; + top_y = y1 + Math.sin(angle1) * h; + angle2 = line_angle - this.render_options.arrowhead_angle; + bottom_x = x1 + Math.cos(angle2) * h; + bottom_y = y1 + Math.sin(angle2) * h; + drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y); + } + } + // Renders the `StaveLine` on the context + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const first_note = this.first_note; + const last_note = this.last_note; + const render_options = this.render_options; + ctx.save(); + this.applyLineStyle(); + // Cycle through each set of indices and draw lines + let start_position = { x: 0, y: 0 }; + let end_position = { x: 0, y: 0 }; + this.first_indices.forEach((first_index, i) => { + const last_index = this.last_indices[i]; + // Get initial coordinates for the start/end of the line + start_position = first_note.getModifierStartXY(2, first_index); + end_position = last_note.getModifierStartXY(1, last_index); + const upwards_slope = start_position.y > end_position.y; + // Adjust `x` coordinates for modifiers + start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left; + end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right; + // Adjust first `x` coordinates for displacements + const notehead_width = first_note.getGlyphProps().getWidth(); + const first_displaced = first_note.getKeyProps()[first_index].displaced; + if (first_displaced && first_note.getStemDirection() === 1) { + start_position.x += notehead_width + render_options.padding_left; + } + // Adjust last `x` coordinates for displacements + const last_displaced = last_note.getKeyProps()[last_index].displaced; + if (last_displaced && last_note.getStemDirection() === -1) { + end_position.x -= notehead_width + render_options.padding_right; + } + // Adjust y position better if it's not coming from the center of the note + start_position.y += upwards_slope ? -3 : 1; + end_position.y += upwards_slope ? 2 : 0; + this.drawArrowLine(ctx, start_position, end_position); + }); + ctx.restore(); + // Determine the x coordinate where to start the text + const text_width = ctx.measureText(this.text).width; + const justification = render_options.text_justification; + let x = 0; + if (justification === StaveLine.TextJustification.LEFT) { + x = start_position.x; + } + else if (justification === StaveLine.TextJustification.CENTER) { + const delta_x = end_position.x - start_position.x; + const center_x = delta_x / 2 + start_position.x; + x = center_x - text_width / 2; + } + else if (justification === StaveLine.TextJustification.RIGHT) { + x = end_position.x - text_width; + } + // Determine the y value to start the text + let y = 0; + const vertical_position = render_options.text_position_vertical; + if (vertical_position === StaveLine.TextVerticalPosition.TOP) { + y = first_note.checkStave().getYForTopText(); + } + else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) { + y = first_note.checkStave().getYForBottomText(_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.TEXT_HEIGHT_OFFSET_HACK); + } + // Draw the text + ctx.save(); + this.applyFontStyle(); + ctx.fillText(this.text, x, y); + ctx.restore(); + return this; + } +} +/** Default text font. */ +StaveLine.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); +// Text Positioning +StaveLine.TextVerticalPosition = { + TOP: 1, + BOTTOM: 2, +}; +StaveLine.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification; + + + +/***/ }), + +/***/ "./src/stavemodifier.ts": +/*!******************************!*\ + !*** ./src/stavemodifier.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveModifier": () => (/* binding */ StaveModifier), +/* harmony export */ "StaveModifierPosition": () => (/* binding */ StaveModifierPosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// A base class for stave modifiers (e.g. clefs, key signatures) + + + +var StaveModifierPosition; +(function (StaveModifierPosition) { + StaveModifierPosition[StaveModifierPosition["CENTER"] = 0] = "CENTER"; + StaveModifierPosition[StaveModifierPosition["LEFT"] = 1] = "LEFT"; + StaveModifierPosition[StaveModifierPosition["RIGHT"] = 2] = "RIGHT"; + StaveModifierPosition[StaveModifierPosition["ABOVE"] = 3] = "ABOVE"; + StaveModifierPosition[StaveModifierPosition["BELOW"] = 4] = "BELOW"; + StaveModifierPosition[StaveModifierPosition["BEGIN"] = 5] = "BEGIN"; + StaveModifierPosition[StaveModifierPosition["END"] = 6] = "END"; +})(StaveModifierPosition || (StaveModifierPosition = {})); +class StaveModifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveModifier; + } + static get Position() { + return StaveModifierPosition; + } + constructor() { + super(); + this.width = 0; + this.x = 0; + this.padding = 10; + this.position = StaveModifierPosition.ABOVE; + } + getPosition() { + return this.position; + } + setPosition(position) { + this.position = position; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + setStave(stave) { + this.stave = stave; + return this; + } + getWidth() { + return this.width; + } + setWidth(width) { + this.width = width; + return this; + } + getX() { + return this.x; + } + setX(x) { + this.x = x; + return this; + } + /** + * Runs setYShift() for the Glyph object so that it matches the position of line for + * the Stave provided. A `customShift` can also be given (measured in the same units + * as `setYShift` not in lines) and this will be added after all other positions are + * calculated from the Stave. + * + * Note that this routine only sets the yShift; it does not actually "place" (meaning + * draw) the Glyph on the Stave. Call .draw() afterwards to do that. + */ + placeGlyphOnLine(glyph, stave, line, customShift = 0) { + glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift); + } + getPadding(index) { + return index !== undefined && index < 2 ? 0 : this.padding; + } + setPadding(padding) { + this.padding = padding; + return this; + } + setLayoutMetrics(layoutMetrics) { + this.layoutMetrics = layoutMetrics; + return this; + } + getLayoutMetrics() { + return this.layoutMetrics; + } + // eslint-disable-next-line + draw(...args) { + // DO NOTHING. + } +} + + +/***/ }), + +/***/ "./src/stavenote.ts": +/*!**************************!*\ + !*** ./src/stavenote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveNote": () => (/* binding */ StaveNote) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// This file implements notes for standard notation. This consists of one or +// more `NoteHeads`, an optional stem, and an optional flag. +// +// Throughout these comments, a "note" refers to the entire `StaveNote`, +// and a "key" refers to a specific pitch/notehead within a note. +// +// See `tests/stavenote_tests.ts` for usage examples. + + + + + + + + +function showDeprecationWarningForNoteHeads() { + // eslint-disable-next-line + console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.'); +} +// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (StaveNote.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_7__.log)('Vex.Flow.StaveNote', args); +} +const isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? note.keyProps.length - 1 : 0); +// Helper methods for rest positioning in ModifierContext. +function shiftRestVertical(rest, note, dir) { + const delta = dir; + rest.line += delta; + rest.maxLine += delta; + rest.minLine += delta; + rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta); +} +// Called from formatNotes :: center a rest between two notes +function centerRest(rest, noteU, noteL) { + const delta = rest.line - (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(noteU.minLine, noteL.maxLine); + rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta); + rest.line -= delta; + rest.maxLine -= delta; + rest.minLine -= delta; +} +class StaveNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.StaveNote; + } + /** + * @deprecated Use Stem.UP. + */ + static get STEM_UP() { + return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; + } + /** + * @deprecated Use Stem.DOWN. + */ + static get STEM_DOWN() { + return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN; + } + static get LEDGER_LINE_OFFSET() { + return 3; + } + static get minNoteheadPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** Format notes inside a ModifierContext. */ + static format(notes, state) { + var _a, _b; + if (!notes || notes.length < 2) + return false; + const notesList = []; + for (let i = 0; i < notes.length; i++) { + // Formatting uses sortedKeyProps to calculate line and minL. + const props = notes[i].sortedKeyProps; + const line = props[0].keyProps.line; + let minL = props[props.length - 1].keyProps.line; + const stemDirection = notes[i].getStemDirection(); + const stemMax = notes[i].getStemLength() / 10; + const stemMin = notes[i].getStemMinimumLength() / 10; + let maxL; + if (notes[i].isRest()) { + maxL = line + notes[i].glyphProps.line_above; + minL = line - notes[i].glyphProps.line_below; + } + else { + maxL = + stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line; + minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax; + } + notesList.push({ + line: props[0].keyProps.line, + maxLine: maxL, + minLine: minL, + isrest: notes[i].isRest(), + stemDirection: stemDirection, + stemMax, + stemMin, + voice_shift: notes[i].getVoiceShiftWidth(), + is_displaced: notes[i].isDisplaced(), + note: notes[i], + }); + } + let voices = 0; + let noteU = undefined; + let noteM = undefined; + let noteL = undefined; + const draw = [false, false, false]; + for (let i = 0; i < notesList.length; i++) { + draw[i] = notesList[i].note.render_options.draw == false ? false : true; + } + if (draw[0] && draw[1] && draw[2]) { + // Three visible notes + voices = 3; + noteU = notesList[0]; + noteM = notesList[1]; + noteL = notesList[2]; + } + else if (draw[0] && draw[1]) { + // Two visible notes, 0 & 1 + voices = 2; + noteU = notesList[0]; + noteL = notesList[1]; + } + else if (draw[0] && draw[2]) { + // Two visible notes, 0 & 2 + voices = 2; + noteU = notesList[0]; + noteL = notesList[2]; + } + else if (draw[1] && draw[2]) { + // Two visible notes, 1 & 2 + voices = 2; + noteU = notesList[1]; + noteL = notesList[2]; + } + else { + // No shift required for less than 2 visible notes + return true; + } + // for two voice backward compatibility, ensure upper voice is stems up + // for three voices, the voices must be in order (upper, middle, lower) + if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) { + noteU = notesList[1]; + noteL = notesList[0]; + } + const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift); + let xShift = 0; + // Test for two voice note intersection + if (voices === 2) { + const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5; + if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) { + noteL.note.render_options.draw = false; + } + else if (noteU.minLine <= noteL.maxLine + lineSpacing) { + if (noteU.isrest) { + // shift rest up + shiftRestVertical(noteU, noteL, 1); + } + else if (noteL.isrest) { + // shift rest down + shiftRestVertical(noteL, noteU, -1); + } + else { + //Instead of shifting notes, remove the appropriate flag + //If we are sharing a line, switch one notes stem direction. + //If we are sharing a line and in the same voice, only then offset one note + const lineDiff = Math.abs(noteU.line - noteL.line); + if (noteU.note.hasStem() && noteL.note.hasStem()) { + const noteUHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration); + const noteLHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration); + if ( + // If unison is not configured, shift + !_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.UNISON || + // If we have different noteheads, shift + noteUHead !== noteLHead || + // If we have different dot values, shift + noteU.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0) + .length !== + noteL.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0) + .length || + // If the notes are quite close but not on the same line, shift + (lineDiff < 1 && lineDiff > 0) || + // If styles are different, shift + JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) { + xShift = voiceXShift + 2; + if (noteU.stemDirection === noteL.stemDirection) { + // upper voice is middle voice, so shift it right + noteU.note.setXShift(xShift); + } + else { + // shift lower voice right + noteL.note.setXShift(xShift); + } + } + else if (noteU.note.voice !== noteL.note.voice) { + //If we are not in the same voice + if (noteU.stemDirection === noteL.stemDirection) { + if (noteU.line != noteL.line) { + xShift = voiceXShift + 2; + noteU.note.setXShift(xShift); + } + else { + //same line, swap stem direction for one note + if (noteL.stemDirection === 1) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + } + } + } //Very close whole notes + } + else if (lineDiff < 1) { + xShift = voiceXShift + 2; + if (noteU.note.duration < noteL.note.duration) { + // upper voice is shorter, so shift it right + noteU.note.setXShift(xShift); + } + else { + // shift lower voice right + noteL.note.setXShift(xShift); + } + } + else if (noteU.note.hasStem()) { + noteU.stemDirection = -noteU.note.getStemDirection(); + noteU.note.setStemDirection(noteU.stemDirection); + } + else if (noteL.note.hasStem()) { + noteL.stemDirection = -noteL.note.getStemDirection(); + noteL.note.setStemDirection(noteL.stemDirection); + } + } + } + // format complete + state.right_shift += xShift; + return true; + } + if (!noteM) + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('InvalidState', 'noteM not defined.'); + // For three voices, test if rests can be repositioned + // + // Special case 1 :: middle voice rest between two notes + // + if (noteM.isrest && !noteU.isrest && !noteL.isrest) { + if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) { + const restHeight = noteM.maxLine - noteM.minLine; + const space = noteU.minLine - noteL.maxLine; + if (restHeight < space) { + // center middle voice rest between the upper and lower voices + centerRest(noteM, noteU, noteL); + } + else { + xShift = voiceXShift + 2; // shift middle rest right + noteM.note.setXShift(xShift); + if (noteL.note.hasBeam() === false) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { + noteU.stemDirection = 1; + noteU.note.setStemDirection(1); + } + } + // format complete + state.right_shift += xShift; + return true; + } + } + // Special case 2 :: all voices are rests + if (noteU.isrest && noteM.isrest && noteL.isrest) { + // Hide upper voice rest + noteU.note.render_options.draw = false; + // Hide lower voice rest + noteL.note.render_options.draw = false; + // format complete + state.right_shift += xShift; + return true; + } + // Test if any other rests can be repositioned + if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) { + // Hide middle voice rest + noteM.note.render_options.draw = false; + } + if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) { + // Hide middle voice rest + noteM.note.render_options.draw = false; + } + if (noteU.isrest && noteU.minLine <= noteM.maxLine) { + // shift upper voice rest up; + shiftRestVertical(noteU, noteM, 1); + } + if (noteL.isrest && noteM.minLine <= noteL.maxLine) { + // shift lower voice rest down + shiftRestVertical(noteL, noteM, -1); + } + // If middle voice intersects upper or lower voice + if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) { + // shift middle note right + xShift = voiceXShift + 2; + noteM.note.setXShift(xShift); + if (noteL.note.hasBeam() === false) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { + noteU.stemDirection = 1; + noteU.note.setStemDirection(1); + } + } + state.right_shift += xShift; + return true; + } + static postFormat(notes) { + if (!notes) + return false; + notes.forEach((note) => note.postFormat()); + return true; + } + constructor(noteStruct) { + var _a, _b, _c; + super(noteStruct); + ////////////////////////////////////////////////////////////////////////////////////////////////// + // INSTANCE MEMBERS + this.minLine = 0; + this.maxLine = 0; + // Sorted variant of keyProps used internally + this.sortedKeyProps = []; + this.ledgerLineStyle = {}; + this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble'; + this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0; + // Pull note rendering properties. + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType); + (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + // if true, displace note to right + this.displaced = false; + this.dot_shiftY = 0; + // for displaced ledger lines + this.use_default_head_x = false; + // Drawing + this._noteHeads = []; + this.modifiers = []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // font size for note heads and rests + glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.NOTATION_FONT_SCALE, + // number of stroke px to the left and right of head + stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET }); + this.calculateKeyProps(); + this.buildStem(); + // Set the stem direction + if (noteStruct.auto_stem) { + this.autoStem(); + } + else { + this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); + } + this.reset(); + this.buildFlag(); + } + reset() { + super.reset(); + // Save prior noteHead styles & reapply them after making new noteheads. + const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle()); + this.buildNoteHeads(); + this._noteHeads.forEach((noteHead, index) => { + const noteHeadStyle = noteHeadStyles[index]; + if (noteHeadStyle) + noteHead.setStyle(noteHeadStyle); + }); + const stave = this.stave; + if (stave) { + this.setStave(stave); + } + this.calcNoteDisplacements(); + return this; + } + setBeam(beam) { + this.beam = beam; + this.calcNoteDisplacements(); + // Update stem extension if a beam is assigned. + if (this.stem) { + this.stem.setExtension(this.getStemExtension()); + } + return this; + } + // Builds a `Stem` for the note + buildStem() { + this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem({ hide: !!this.isRest() })); + return this; + } + // Builds a `NoteHead` for each key in the note + buildNoteHeads() { + this._noteHeads = []; + const stemDirection = this.getStemDirection(); + const keys = this.getKeys(); + let lastLine = undefined; + let lineDiff = undefined; + let displaced = false; + // Draw notes from bottom to top. + // For down-stem notes, we draw from top to bottom. + let start; + let end; + let step; + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + start = 0; + end = keys.length; + step = 1; + } + else { + start = keys.length - 1; + end = -1; + step = -1; + } + for (let i = start; i !== end; i += step) { + // Building noteheads rely on sortedKeNotes in order to calculate the displacements + const noteProps = this.sortedKeyProps[i].keyProps; + const line = noteProps.line; + // Keep track of last line with a note head, so that consecutive heads + // are correctly displaced. + if (lastLine === undefined) { + lastLine = line; + } + else { + lineDiff = Math.abs(lastLine - line); + if (lineDiff === 0 || lineDiff === 0.5) { + displaced = !displaced; + } + else { + displaced = false; + this.use_default_head_x = true; + } + } + lastLine = line; + const notehead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ + duration: this.duration, + note_type: this.noteType, + displaced, + stem_direction: stemDirection, + custom_glyph_code: noteProps.code, + glyph_font_scale: this.render_options.glyph_font_scale, + x_shift: noteProps.shift_right, + stem_up_x_offset: noteProps.stem_up_x_offset, + stem_down_x_offset: noteProps.stem_down_x_offset, + line: noteProps.line, + }); + this.addChildElement(notehead); + this._noteHeads[this.sortedKeyProps[i].index] = notehead; + } + } + // Automatically sets the stem direction based on the keys in the note + autoStem() { + this.setStemDirection(this.calculateOptimalStemDirection()); + } + calculateOptimalStemDirection() { + // Figure out optimal stem direction based on given notes + // minLine & maxLine rely on sortedKeyProps + this.minLine = this.sortedKeyProps[0].keyProps.line; + this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line; + const MIDDLE_LINE = 3; + const decider = (this.minLine + this.maxLine) / 2; + const stemDirection = decider < MIDDLE_LINE ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN; + return stemDirection; + } + // Calculates and stores the properties for each key in the note + calculateKeyProps() { + let lastLine; + for (let i = 0; i < this.keys.length; ++i) { + const key = this.keys[i]; + // All rests use the same position on the line. + // if (this.glyph.rest) key = this.glyph.position; + if (this.glyphProps.rest) + this.glyphProps.position = key; + const options = { octave_shift: this.octave_shift || 0, duration: this.duration }; + const props = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.keyProperties(key, this.clef, options); + if (!props) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('BadArguments', `Invalid key for note properties: ${key}`); + } + // Override line placement for default rests + if (props.key === 'R') { + if (this.duration === '1' || this.duration === 'w') { + props.line = 4; + } + else { + props.line = 3; + } + } + // Calculate displacement of this note + const line = props.line; + if (lastLine == undefined) { + lastLine = line; + } + else { + if (Math.abs(lastLine - line) === 0.5) { + this.displaced = true; + props.displaced = true; + // Have to mark the previous note as + // displaced as well, for modifier placement + if (this.keyProps.length > 0) { + this.keyProps[i - 1].displaced = true; + } + } + } + lastLine = line; + this.keyProps.push(props); + } + // Sort the notes from lowest line to highest line in sortedKeyProps + // Warn no longer required as keyProps remains unsorted + this.keyProps.forEach((keyProps, index) => { + this.sortedKeyProps.push({ keyProps, index }); + }); + this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line); + } + // Get the `BoundingBox` for the entire note + getBoundingBox() { + var _a, _b; + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call getBoundingBox on an unformatted note."); + } + const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics(); + const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx; + let minY = 0; + let maxY = 0; + const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2; + const lineSpacing = halfLineSpacing * 2; + if (this.isRest()) { + const y = this.ys[0]; + const frac = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToFraction(this.duration); + if (frac.equals(1) || frac.equals(2)) { + minY = y - halfLineSpacing; + maxY = y + halfLineSpacing; + } + else { + minY = y - this.glyphProps.line_above * lineSpacing; + maxY = y + this.glyphProps.line_below * lineSpacing; + } + } + else if (this.glyphProps.stem) { + const ys = this.getStemExtents(); + ys.baseY += halfLineSpacing * this.getStemDirection(); + minY = Math.min(ys.topY, ys.baseY); + maxY = Math.max(ys.topY, ys.baseY); + } + else { + minY = 0; + maxY = 0; + for (let i = 0; i < this.ys.length; ++i) { + const yy = this.ys[i]; + if (i === 0) { + minY = yy; + maxY = yy; + } + else { + minY = Math.min(yy, minY); + maxY = Math.max(yy, maxY); + } + } + minY -= halfLineSpacing; + maxY += halfLineSpacing; + } + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(x, minY, w, maxY - minY); + } + // Gets the line number of the bottom note in the chord. + // If `isTopNote` is `true` then get the top note's line number instead + getLineNumber(isTopNote) { + if (!this.keyProps.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoKeyProps', "Can't get bottom note line, because note is not initialized properly."); + } + let resultLine = this.keyProps[0].line; + // No precondition assumed for sortedness of keyProps array + for (let i = 0; i < this.keyProps.length; i++) { + const thisLine = this.keyProps[i].line; + if (isTopNote) { + if (thisLine > resultLine) + resultLine = thisLine; + } + else { + if (thisLine < resultLine) + resultLine = thisLine; + } + } + return resultLine; + } + /** + * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. + */ + isRest() { + return this.glyphProps.rest; + } + // Determine if the current note is a chord + isChord() { + return !this.isRest() && this.keys.length > 1; + } + // Determine if the `StaveNote` has a stem + hasStem() { + return this.glyphProps.stem; + } + hasFlag() { + return super.hasFlag() && !this.isRest(); + } + getStemX() { + if (this.noteType === 'r') { + return this.getCenterGlyphX(); + } + else { + // We adjust the origin of the stem because we want the stem left-aligned + // with the notehead if stemmed-down, and right-aligned if stemmed-up + return super.getStemX() + (this.stem_direction ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / (2 * -this.stem_direction) : 0); + } + } + // Get the `y` coordinate for text placed on the top/bottom of a + // note at a desired `text_line` + getYForTopText(textLine) { + const extents = this.getStemExtents(); + return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); + } + getYForBottomText(textLine) { + const extents = this.getStemExtents(); + return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); + } + // Sets the current note to the provided `stave`. This applies + // `y` values to the `NoteHeads`. + setStave(stave) { + super.setStave(stave); + const ys = this._noteHeads.map((notehead) => { + notehead.setStave(stave); + return notehead.getY(); + }); + this.setYs(ys); + if (this.stem) { + const { y_top, y_bottom } = this.getNoteHeadBounds(); + this.stem.setYBounds(y_top, y_bottom); + } + return this; + } + // Check if note is shifted to the right + isDisplaced() { + return this.displaced; + } + // Sets whether shift note to the right. `displaced` is a `boolean` + setNoteDisplaced(displaced) { + this.displaced = displaced; + return this; + } + // Get the starting `x` coordinate for a `StaveTie` + getTieRightX() { + let tieStartX = this.getAbsoluteX(); + tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx; + if (this.modifierContext) + tieStartX += this.modifierContext.getRightShift(); + return tieStartX; + } + // Get the ending `x` coordinate for a `StaveTie` + getTieLeftX() { + let tieEndX = this.getAbsoluteX(); + tieEndX += this.x_shift - this.leftDisplacedHeadPx; + return tieEndX; + } + // Get the stave line on which to place a rest + getLineForRest() { + let restLine = this.keyProps[0].line; + if (this.keyProps.length > 1) { + const lastLine = this.keyProps[this.keyProps.length - 1].line; + const top = Math.max(restLine, lastLine); + const bot = Math.min(restLine, lastLine); + restLine = (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(top, bot); + } + return restLine; + } + // Get the default `x` and `y` coordinates for the provided `position` + // and key `index` + getModifierStartXY(position, index, options = {}) { + var _a, _b; + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); + } + const { ABOVE, BELOW, LEFT, RIGHT } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position; + let x = 0; + if (position === LEFT) { + // FIXME: Left modifier padding, move to font file + x = -1 * 2; + } + else if (position === RIGHT) { + // FIXME: Right modifier padding, move to font file + x = this.getGlyphWidth() + this.x_shift + 2; + if (this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP && + this.hasFlag() && + (options.forceFlagRight || isInnerNoteIndex(this, index))) { + x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0; + } + } + else if (position === BELOW || position === ABOVE) { + x = this.getGlyphWidth() / 2; + } + return { + x: this.getAbsoluteX() + x, + y: this.ys[index], + }; + } + // Sets the style of the complete StaveNote, including all keys + // and the stem. + setStyle(style) { + return super.setGroupStyle(style); + } + setStemStyle(style) { + const stem = this.getStem(); + if (stem) + stem.setStyle(style); + return this; + } + getStemStyle() { + var _a; + return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle(); + } + setLedgerLineStyle(style) { + this.ledgerLineStyle = style; + } + getLedgerLineStyle() { + return this.ledgerLineStyle; + } + setFlagStyle(style) { + var _a; + (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style); + } + getFlagStyle() { + var _a; + return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle(); + } + // Sets the notehead at `index` to the provided coloring `style`. + // + // `style` is an `object` with the following properties: `shadowColor`, + // `shadowBlur`, `fillStyle`, `strokeStyle` + setKeyStyle(index, style) { + this._noteHeads[index].setStyle(style); + return this; + } + setKeyLine(index, line) { + this.keyProps[index].line = line; + this.reset(); + return this; + } + getKeyLine(index) { + return this.keyProps[index].line; + } + // Get the width of the note if it is displaced. Used for `Voice` + // formatting + getVoiceShiftWidth() { + // TODO: may need to accommodate for dot here. + return this.getGlyphWidth() * (this.displaced ? 2 : 1); + } + // Calculates and sets the extra pixels to the left or right + // if the note is displaced. + calcNoteDisplacements() { + this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN ? this.getGlyphWidth() : 0); + // For upstems with flags, the extra space is unnecessary, since it's taken + // up by the flag. + this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? this.getGlyphWidth() : 0); + } + // Pre-render formatting + preFormat() { + if (this.preFormatted) + return; + let noteHeadPadding = 0; + if (this.modifierContext) { + this.modifierContext.preFormat(); + // If there are no modifiers on this note, make sure there is adequate padding + // between the notes. + if (this.modifierContext.getWidth() === 0) { + noteHeadPadding = StaveNote.minNoteheadPadding; + } + } + let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding; + // For upward flagged notes, the width of the flag needs to be added + if (this.shouldDrawFlag() && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + width += this.getGlyphWidth(); + // TODO: Add flag width as a separate metric + } + this.setWidth(width); + this.preFormatted = true; + } + /** + * @typedef {Object} noteHeadBounds + * @property {number} y_top the highest notehead bound + * @property {number} y_bottom the lowest notehead bound + * @property {number|Null} displaced_x the starting x for displaced noteheads + * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads + * @property {number} highest_line the highest notehead line in traditional music line + * numbering (bottom line = 1, top line = 5) + * @property {number} lowest_line the lowest notehead line + * @property {number|false} highest_displaced_line the highest staff line number + * for a displaced notehead + * @property {number|false} lowest_displaced_line + * @property {number} highest_non_displaced_line + * @property {number} lowest_non_displaced_line + */ + /** + * Get the staff line and y value for the highest & lowest noteheads + * @returns {noteHeadBounds} + */ + getNoteHeadBounds() { + // Top and bottom Y values for stem. + let yTop = +Infinity; + let yBottom = -Infinity; + let nonDisplacedX; + let displacedX; + let highestLine = this.checkStave().getNumLines(); + let lowestLine = 1; + let highestDisplacedLine; + let lowestDisplacedLine; + let highestNonDisplacedLine = highestLine; + let lowestNonDisplacedLine = lowestLine; + this._noteHeads.forEach((notehead) => { + const line = notehead.getLine(); + const y = notehead.getY(); + yTop = Math.min(y, yTop); + yBottom = Math.max(y, yBottom); + if (displacedX === undefined && notehead.isDisplaced()) { + displacedX = notehead.getAbsoluteX(); + } + if (nonDisplacedX === undefined && !notehead.isDisplaced()) { + nonDisplacedX = notehead.getAbsoluteX(); + } + highestLine = Math.max(line, highestLine); + lowestLine = Math.min(line, lowestLine); + if (notehead.isDisplaced()) { + highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine); + lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine); + } + else { + highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine); + lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine); + } + }, this); + return { + y_top: yTop, + y_bottom: yBottom, + displaced_x: displacedX, + non_displaced_x: nonDisplacedX, + highest_line: highestLine, + lowest_line: lowestLine, + highest_displaced_line: highestDisplacedLine, + lowest_displaced_line: lowestDisplacedLine, + highest_non_displaced_line: highestNonDisplacedLine, + lowest_non_displaced_line: lowestNonDisplacedLine, + }; + } + // Get the starting `x` coordinate for the noteheads + getNoteHeadBeginX() { + return this.getAbsoluteX() + this.x_shift; + } + // Get the ending `x` coordinate for the noteheads + getNoteHeadEndX() { + const xBegin = this.getNoteHeadBeginX(); + return xBegin + this.getGlyphWidth(); + } + get noteHeads() { + return this._noteHeads.slice(); + } + /** @deprecated use StaveNote.noteHeads instead. */ + get note_heads() { + showDeprecationWarningForNoteHeads(); + return this.noteHeads; + } + // Draw the ledger lines between the stave and the highest/lowest keys + drawLedgerLines() { + const stave = this.checkStave(); + const { glyphProps, render_options: { stroke_px }, } = this; + const ctx = this.checkContext(); + const width = glyphProps.getWidth() + stroke_px * 2; + const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2; + if (this.isRest()) + return; + if (!ctx) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); + } + const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds(); + // Early out if there are no ledger lines to draw. + if (highest_line < 6 && lowest_line > 0) + return; + const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0); + const drawLedgerLine = (y, normal, displaced) => { + let x; + if (displaced && normal) + x = min_x - stroke_px; + else if (normal) + x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px; + else + x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px; + const ledgerWidth = normal && displaced ? doubleWidth : width; + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + ledgerWidth, y); + ctx.stroke(); + }; + const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle()); + this.applyStyle(ctx, style); + // Draw ledger lines below the staff: + for (let line = 6; line <= highest_line; ++line) { + const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line; + const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line; + drawLedgerLine(stave.getYForNote(line), normal, displaced); + } + // Draw ledger lines above the staff: + for (let line = 0; line >= lowest_line; --line) { + const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line; + const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line; + drawLedgerLine(stave.getYForNote(line), normal, displaced); + } + this.restoreStyle(ctx, style); + } + // Draw all key modifiers + drawModifiers(noteheadParam) { + const ctx = this.checkContext(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + const index = modifier.checkIndex(); + const notehead = this._noteHeads[index]; + if (notehead == noteheadParam) { + const noteheadStyle = notehead.getStyle(); + notehead.applyStyle(ctx, noteheadStyle); + modifier.setContext(ctx); + modifier.drawWithStyle(); + notehead.restoreStyle(ctx, noteheadStyle); + } + } + } + shouldDrawFlag() { + const hasStem = this.stem !== undefined; + const hasFlag = this.glyphProps.flag == true; + const hasNoBeam = this.beam === undefined; + return hasStem && hasFlag && hasNoBeam; + } + // Draw the flag for the note + drawFlag() { + var _a, _b, _c, _d, _e; + const ctx = this.checkContext(); + if (!ctx) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); + } + if (this.shouldDrawFlag()) { + const { y_top, y_bottom } = this.getNoteHeadBounds(); + // eslint-disable-next-line + const noteStemHeight = this.stem.getHeight(); + const flagX = this.getStemX(); + // What's with the magic +/- 2 + // ANSWER: a corner of the note stem pokes out beyond the tip of the flag. + // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely. + // Alternatively, we could shorten the stem. + const flagY = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN + ? // Down stems are below the note head and have flags on the right. + y_top - + noteStemHeight + + 2 - + (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() - + ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale()) + : // Up stems are above the note head and have flags on the right. + y_bottom - + noteStemHeight - + 2 + + (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() - + ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale()); + // Draw the Flag + (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY); + } + } + // Draw the NoteHeads + drawNoteHeads() { + const ctx = this.checkContext(); + this._noteHeads.forEach((notehead) => { + notehead.applyStyle(ctx); + ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true }); + notehead.setContext(ctx).draw(); + this.drawModifiers(notehead); + ctx.closeGroup(); + notehead.restoreStyle(ctx); + }); + } + drawStem(stemOptions) { + // GCR TODO: I can't find any context in which this is called with the stemStruct + // argument in the codebase or tests. Nor can I find a case where super.drawStem + // is called at all. Perhaps these should be removed? + const ctx = this.checkContext(); + if (stemOptions) { + this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem(stemOptions)); + } + // If we will render a flag, we shorten the stem so that the tip + // does not poke through the flag. + if (this.shouldDrawFlag() && this.stem) { + this.stem.adjustHeightForFlag(); + } + if (this.stem) { + this.stem.setContext(ctx).draw(); + } + } + /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */ + getStaveNoteScale() { + return 1.0; + } + /** + * Override stemmablenote stem extension to adjust for distance from middle line. + */ + getStemExtension() { + const super_stem_extension = super.getStemExtension(); + if (!this.glyphProps.stem) { + return super_stem_extension; + } + const stem_direction = this.getStemDirection(); + if (stem_direction !== this.calculateOptimalStemDirection()) { + return super_stem_extension; // no adjustment for manually set stem direction. + } + let mid_line_distance; + const MIDDLE_LINE = 3; + if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + // Note that the use of maxLine here instead of minLine might + // seem counterintuitive, but in the case of (say) treble clef + // chord(F2, E4) stem up, we do not want to extend the stem because + // of F2, when a normal octave-length stem above E4 is fine. + // + // maxLine and minLine are set in calculateOptimalStemDirection() so + // will be known. + mid_line_distance = MIDDLE_LINE - this.maxLine; + } + else { + mid_line_distance = this.minLine - MIDDLE_LINE; + } + // how many lines more than an octave is the relevant notehead? + const lines_over_octave_from_mid_line = mid_line_distance - 3.5; + if (lines_over_octave_from_mid_line <= 0) { + return super_stem_extension; + } + const stave = this.getStave(); + let spacing_between_lines = 10; + if (stave != undefined) { + spacing_between_lines = stave.getSpacingBetweenLines(); + } + return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines; + } + // Draws all the `StaveNote` parts. This is the main drawing method. + draw() { + if (this.render_options.draw === false) + return; + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', "Can't draw note without Y values."); + } + const ctx = this.checkContext(); + const xBegin = this.getNoteHeadBeginX(); + const shouldRenderStem = this.hasStem() && !this.beam; + // Format note head x positions + this._noteHeads.forEach((notehead) => notehead.setX(xBegin)); + if (this.stem) { + // Format stem x positions + const stemX = this.getStemX(); + this.stem.setNoteHeadXBounds(stemX, stemX); + } + L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys); + // Apply the overall style -- may be contradicted by local settings: + this.applyStyle(); + ctx.openGroup('stavenote', this.getAttribute('id')); + this.drawLedgerLines(); + if (shouldRenderStem) + this.drawStem(); + this.drawNoteHeads(); + this.drawFlag(); + ctx.closeGroup(); + this.restoreStyle(); + this.setRendered(); + } +} +StaveNote.DEBUG = false; + + + +/***/ }), + +/***/ "./src/staverepetition.ts": +/*!********************************!*\ + !*** ./src/staverepetition.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Repetition": () => (/* binding */ Repetition) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Larry Kuhns 2011 + + + + + +class Repetition extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Repetition; + } + constructor(type, x, y_shift) { + super(); + this.symbol_type = type; + this.x = x; + this.x_shift = 0; + this.y_shift = y_shift; + this.resetFont(); + } + setShiftX(x) { + this.x_shift = x; + return this; + } + setShiftY(y) { + this.y_shift = y; + return this; + } + draw(stave, x) { + this.setRendered(); + switch (this.symbol_type) { + case Repetition.type.CODA_RIGHT: + this.drawCodaFixed(stave, x + stave.getWidth()); + break; + case Repetition.type.CODA_LEFT: + this.drawSymbolText(stave, x, 'Coda', true); + break; + case Repetition.type.SEGNO_LEFT: + this.drawSignoFixed(stave, x); + break; + case Repetition.type.SEGNO_RIGHT: + this.drawSignoFixed(stave, x + stave.getWidth()); + break; + case Repetition.type.DC: + this.drawSymbolText(stave, x, 'D.C.', false); + break; + case Repetition.type.DC_AL_CODA: + this.drawSymbolText(stave, x, 'D.C. al', true); + break; + case Repetition.type.DC_AL_FINE: + this.drawSymbolText(stave, x, 'D.C. al Fine', false); + break; + case Repetition.type.DS: + this.drawSymbolText(stave, x, 'D.S.', false); + break; + case Repetition.type.DS_AL_CODA: + this.drawSymbolText(stave, x, 'D.S. al', true); + break; + case Repetition.type.DS_AL_FINE: + this.drawSymbolText(stave, x, 'D.S. al Fine', false); + break; + case Repetition.type.FINE: + this.drawSymbolText(stave, x, 'Fine', false); + break; + case Repetition.type.TO_CODA: + this.drawSymbolText(stave, x, 'To', true); + break; + default: + break; + } + return this; + } + drawCodaFixed(stave, x) { + const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' }); + return this; + } + drawSignoFixed(stave, x) { + const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' }); + return this; + } + drawSymbolText(stave, x, text, draw_coda) { + var _a; + const ctx = stave.checkContext(); + ctx.save(); + ctx.setFont(this.textFont); + let text_x = 0; + let symbol_x = 0; + const modifierWidth = stave.getNoteStartX() - this.x; + switch (this.symbol_type) { + // To the left with symbol + case Repetition.type.CODA_LEFT: + // Offset Coda text to right of stave beginning + text_x = this.x + stave.getVerticalBarWidth(); + symbol_x = + text_x + + ctx.measureText(text).width + + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + break; + // To the right without symbol + case Repetition.type.DC: + case Repetition.type.DC_AL_FINE: + case Repetition.type.DS: + case Repetition.type.DS_AL_FINE: + case Repetition.type.FINE: + text_x = + this.x + + x + + this.x_shift + + stave.getWidth() - + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - + modifierWidth - + ctx.measureText(text).width; + break; + // To the right with symbol + default: + text_x = + this.x + + x + + this.x_shift + + stave.getWidth() - + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - + modifierWidth - + ctx.measureText(text).width - + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + symbol_x = + text_x + + ctx.measureText(text).width + + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + break; + } + const y = stave.getYForTopText(stave.getNumLines()) + + this.y_shift + + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY'); + if (draw_coda) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, symbol_x, y, _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', { + category: 'coda', + }); + } + ctx.fillText(text, text_x, y + 5); + ctx.restore(); + return this; + } +} +Repetition.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE / 3, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; +Repetition.type = { + NONE: 1, + CODA_LEFT: 2, + CODA_RIGHT: 3, + SEGNO_LEFT: 4, + SEGNO_RIGHT: 5, + DC: 6, + DC_AL_CODA: 7, + DC_AL_FINE: 8, + DS: 9, + DS_AL_CODA: 10, + DS_AL_FINE: 11, + FINE: 12, + TO_CODA: 13, // To Coda at end of stave +}; + + + +/***/ }), + +/***/ "./src/stavesection.ts": +/*!*****************************!*\ + !*** ./src/stavesection.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveSection": () => (/* binding */ StaveSection) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Larry Kuhns 2011 + + + + +class StaveSection extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveSection; + } + constructor(section, x, shift_y, drawRect = true) { + super(); + this.setWidth(16); + this.section = section; + this.x = x; + this.shift_x = 0; + this.shift_y = shift_y; + this.drawRect = drawRect; + this.resetFont(); + } + setStaveSection(section) { + this.section = section; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + draw(stave, shift_x) { + const borderWidth = 2; + const padding = 2; + const ctx = stave.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setLineWidth(borderWidth); + ctx.setFont(this.textFont); + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); + const textWidth = textFormatter.getWidthForTextInPx(this.section); + const textY = textFormatter.getYForStringInPx(this.section); + const textHeight = textY.height; + const headroom = -1 * textY.yMin; + const width = textWidth + 2 * padding; // add left & right padding + const height = textHeight + 2 * padding; // add top & bottom padding + // Seems to be a good default y + const y = stave.getYForTopText(1.5) + this.shift_y; + const x = this.x + shift_x; + if (this.drawRect) { + ctx.beginPath(); + ctx.rect(x, y - height + headroom, width, height); + ctx.stroke(); + } + ctx.fillText(this.section, x + padding, y - padding); + ctx.restore(); + return this; + } +} +StaveSection.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 10, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavetempo.ts": +/*!***************************!*\ + !*** ./src/stavetempo.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveTempo": () => (/* binding */ StaveTempo) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Radosaw Eichler 2012 + + + + + + +class StaveTempo extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StaveTempo; + } + constructor(tempo, x, shift_y) { + super(); + /** Font size for note. */ + this.render_options = { glyph_font_scale: 30 }; + this.tempo = tempo; + this.position = _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifierPosition.ABOVE; + this.x = x; + this.shift_x = 10; + this.shift_y = shift_y; + this.resetFont(); + } + setTempo(tempo) { + this.tempo = tempo; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + draw(stave, shift_x) { + const ctx = stave.checkContext(); + this.setRendered(); + const options = this.render_options; + const scale = options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + const name = this.tempo.name; + const duration = this.tempo.duration; + const dots = this.tempo.dots || 0; + const bpm = this.tempo.bpm; + let x = this.x + this.shift_x + shift_x; + const y = stave.getYForTopText(1) + this.shift_y; + ctx.save(); + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); + if (name) { + ctx.setFont(this.textFont); + ctx.fillText(name, x, y); + x += textFormatter.getWidthForTextInPx(name); + } + if (duration && bpm) { + // Override the weight and style. + const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' }); + ctx.setFont(noteTextFont); + const noteTextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(noteTextFont); + if (name) { + x += noteTextFormatter.getWidthForTextInPx('|'); + ctx.fillText('(', x, y); + x += noteTextFormatter.getWidthForTextInPx('('); + } + const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(duration); + x += 3 * scale; + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head); + x += _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale); + // Draw stem and flags + if (glyphProps.stem) { + let stem_height = 30; + if (glyphProps.beam_count) + stem_height += 3 * (glyphProps.beam_count - 1); + stem_height *= scale; + const y_top = y - stem_height; + ctx.fillRect(x - scale, y_top, scale, stem_height); + if (glyphProps.code && glyphProps.code_flag_upstem) { + const flagMetrics = _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, { + category: 'flag.staveTempo', + }); + x += (flagMetrics.width * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution; + } + } + // Draw dot + for (let i = 0; i < dots; i++) { + x += 6 * scale; + ctx.beginPath(); + ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false); + ctx.fill(); + } + ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y); + } + ctx.restore(); + return this; + } +} +StaveTempo.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: 14, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavetext.ts": +/*!**************************!*\ + !*** ./src/stavetext.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveText": () => (/* binding */ StaveText) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2014 + + + + + +class StaveText extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveText; + } + constructor(text, position, options = {}) { + super(); + this.setWidth(16); + this.text = text; + this.position = position; + this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: _textnote__WEBPACK_IMPORTED_MODULE_2__.TextNote.Justification.CENTER }, options); + this.resetFont(); + } + setStaveText(text) { + this.text = text; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + setText(text) { + this.text = text; + return this; + } + draw(stave) { + const ctx = stave.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setLineWidth(2); + ctx.setFont(this.textFont); + const text_width = ctx.measureText('' + this.text).width; + let x; + let y; + switch (this.position) { + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT: + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.RIGHT: + y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y; + if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT) { + x = stave.getX() - text_width - 24 + this.options.shift_x; + } + else { + x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x; + } + break; + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE: + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BELOW: + x = stave.getX() + this.options.shift_x; + if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.CENTER) { + x += stave.getWidth() / 2 - text_width / 2; + } + else if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.RIGHT) { + x += stave.getWidth() - text_width; + } + if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE) { + y = stave.getYForTopText(2) + this.options.shift_y; + } + else { + y = stave.getYForBottomText(2) + this.options.shift_y; + } + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.'); + } + ctx.fillText('' + this.text, x, y + 4); + ctx.restore(); + return this; + } +} +StaveText.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: 16, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavetie.ts": +/*!*************************!*\ + !*** ./src/stavetie.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveTie": () => (/* binding */ StaveTie) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// This class implements varies types of ties between contiguous notes. The +// ties include: regular ties, hammer ons, pull offs, and slides. + + + +class StaveTie extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveTie; + } + /** + * @param notes is a struct that has: + * + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * + * @param text + */ + constructor(notes, text) { + super(); + this.setNotes(notes); + this.text = text; + this.render_options = { + cp1: 8, + cp2: 12, + text_shift_x: 0, + first_x_shift: 0, + last_x_shift: 0, + y_shift: 7, + tie_spacing: 0, + }; + this.resetFont(); + } + setDirection(direction) { + this.direction = direction; + return this; + } + /** + * Set the notes to attach this tie to. + * + * @param {!Object} notes The notes to tie up. + */ + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.'); + } + if (!notes.first_indices) { + notes.first_indices = [0]; + } + if (!notes.last_indices) { + notes.last_indices = [0]; + } + if (notes.first_indices.length !== notes.last_indices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tied notes must have same number of indices.'); + } + this.notes = notes; + return this; + } + /** + * @return {boolean} Returns true if this is a partial bar. + */ + isPartial() { + return !this.notes.first_note || !this.notes.last_note; + } + renderTie(params) { + if (params.first_ys.length === 0 || params.last_ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'No Y-values to render'); + } + const ctx = this.checkContext(); + let cp1 = this.render_options.cp1; + let cp2 = this.render_options.cp2; + if (Math.abs(params.last_x_px - params.first_x_px) < 10) { + cp1 = 2; + cp2 = 8; + } + const first_x_shift = this.render_options.first_x_shift; + const last_x_shift = this.render_options.last_x_shift; + const y_shift = this.render_options.y_shift * params.direction; + // setNotes(...) verified that first_indices and last_indices are not undefined. + // As a result, we use the ! non-null assertion operator here. + // eslint-disable-next-line + const first_indices = this.notes.first_indices; + // eslint-disable-next-line + const last_indices = this.notes.last_indices; + this.applyStyle(); + ctx.openGroup('stavetie', this.getAttribute('id')); + for (let i = 0; i < first_indices.length; ++i) { + const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2; + const first_y_px = params.first_ys[first_indices[i]] + y_shift; + const last_y_px = params.last_ys[last_indices[i]] + y_shift; + if (isNaN(first_y_px) || isNaN(last_y_px)) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Bad indices for tie rendering.'); + } + const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction; + const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction; + ctx.beginPath(); + ctx.moveTo(params.first_x_px + first_x_shift, first_y_px); + ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px); + ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px); + ctx.closePath(); + ctx.fill(); + } + ctx.closeGroup(); + this.restoreStyle(); + } + renderText(first_x_px, last_x_px) { + var _a, _b, _c; + if (!this.text) + return; + const ctx = this.checkContext(); + let center_x = (first_x_px + last_x_px) / 2; + center_x -= ctx.measureText(this.text).width / 2; + const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave(); + if (stave) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1); + ctx.restore(); + } + } + /** + * Returns the TieNotes structure of the first and last note this tie connects. + */ + getNotes() { + return this.notes; + } + draw() { + this.checkContext(); + this.setRendered(); + const first_note = this.notes.first_note; + const last_note = this.notes.last_note; + // Provide some default values so the compiler doesn't complain. + let first_x_px = 0; + let last_x_px = 0; + let first_ys = [0]; + let last_ys = [0]; + let stem_direction = 0; + if (first_note) { + first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing; + stem_direction = first_note.getStemDirection(); + first_ys = first_note.getYs(); + } + else if (last_note) { + const stave = last_note.checkStave(); + first_x_px = stave.getTieStartX(); + first_ys = last_note.getYs(); + this.notes.first_indices = this.notes.last_indices; + } + if (last_note) { + last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing; + stem_direction = last_note.getStemDirection(); + last_ys = last_note.getYs(); + } + else if (first_note) { + const stave = first_note.checkStave(); + last_x_px = stave.getTieEndX(); + last_ys = first_note.getYs(); + this.notes.last_indices = this.notes.first_indices; + } + if (this.direction) { + stem_direction = this.direction; + } + this.renderTie({ + first_x_px, + last_x_px, + first_ys, + last_ys, + direction: stem_direction, + }); + this.renderText(first_x_px, last_x_px); + return true; + } +} +/** Default text font. */ +StaveTie.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); + + + +/***/ }), + +/***/ "./src/stavevolta.ts": +/*!***************************!*\ + !*** ./src/stavevolta.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Volta": () => (/* binding */ Volta), +/* harmony export */ "VoltaType": () => (/* binding */ VoltaType) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Larry Kuhns 2011 + + + +var VoltaType; +(function (VoltaType) { + VoltaType[VoltaType["NONE"] = 1] = "NONE"; + VoltaType[VoltaType["BEGIN"] = 2] = "BEGIN"; + VoltaType[VoltaType["MID"] = 3] = "MID"; + VoltaType[VoltaType["END"] = 4] = "END"; + VoltaType[VoltaType["BEGIN_END"] = 5] = "BEGIN_END"; +})(VoltaType || (VoltaType = {})); +class Volta extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Volta; + } + static get type() { + return VoltaType; + } + constructor(type, number, x, y_shift) { + super(); + this.volta = type; + this.x = x; + this.y_shift = y_shift; + this.number = number; + this.resetFont(); + } + setShiftY(y) { + this.y_shift = y; + return this; + } + draw(stave, x) { + const ctx = stave.checkContext(); + this.setRendered(); + let width = stave.getWidth() - x; // don't include x (offset) for width + const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + const vert_height = 1.5 * stave.getSpacingBetweenLines(); + switch (this.volta) { + case VoltaType.BEGIN: + ctx.fillRect(this.x + x, top_y, 1, vert_height); + break; + case VoltaType.END: + width -= 5; + ctx.fillRect(this.x + x + width, top_y, 1, vert_height); + break; + case VoltaType.BEGIN_END: + width -= 3; + ctx.fillRect(this.x + x, top_y, 1, vert_height); + ctx.fillRect(this.x + x + width, top_y, 1, vert_height); + break; + default: + break; + } + // If the beginning of a volta, draw measure number + if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText(this.number, this.x + x + 5, top_y + 15); + ctx.restore(); + } + ctx.fillRect(this.x + x, top_y, width, 1); + return this; + } +} +Volta.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 9, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stem.ts": +/*!*********************!*\ + !*** ./src/stem.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Stem": () => (/* binding */ Stem) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// This file implements the `Stem` object. Generally this object is handled +// by its parent `StemmableNote`. + + + + +// eslint-disable-next-line +function L(...args) { + if (Stem.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Stem', args); +} +class Stem extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Stem; + } + // Stem directions + static get UP() { + return 1; + } + static get DOWN() { + return -1; + } + // Theme + static get WIDTH() { + return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_WIDTH; + } + static get HEIGHT() { + return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_HEIGHT; + } + constructor(options) { + super(); + this.stem_up_y_offset = 0; + this.stem_down_y_offset = 0; + this.stem_up_y_base_offset = 0; + this.stem_down_y_base_offset = 0; + // Default notehead x bounds + this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0; + this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0; + // Y bounds for top/bottom most notehead + this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0; + this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0; + // Stem top extension + this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0; + // Direction of the stem + this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0; + // Flag to override all draw calls + this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false; + this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false; + this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0; + // Use to adjust the rendered height without affecting + // the results of `.getExtents()` + this.renderHeightAdjustment = 0; + this.setOptions(options); + } + setOptions(options) { + // Changing where the stem meets the head + this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0; + this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0; + this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0; + this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0; + } + // Set the x bounds for the default notehead + setNoteHeadXBounds(x_begin, x_end) { + this.x_begin = x_begin; + this.x_end = x_end; + return this; + } + // Set the direction of the stem in relation to the noteheads + setDirection(direction) { + this.stem_direction = direction; + } + // Set the extension for the stem, generally for flags or beams + setExtension(ext) { + this.stem_extension = ext; + } + getExtension() { + return this.stem_extension; + } + // The the y bounds for the top and bottom noteheads + setYBounds(y_top, y_bottom) { + this.y_top = y_top; + this.y_bottom = y_bottom; + } + // Gets the entire height for the stem + getHeight() { + const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset; + const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping. + return unsigned_height * this.stem_direction; + } + getBoundingBox() { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NotImplemented', 'getBoundingBox() not implemented.'); + } + // Get the y coordinates for the very base of the stem to the top of + // the extension + getExtents() { + const isStemUp = this.stem_direction === Stem.UP; + const ys = [this.y_top, this.y_bottom]; + const stemHeight = Stem.HEIGHT + this.stem_extension; + const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys); + const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys); + const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction; + return { topY: stemTipY, baseY: outerMostNoteheadY }; + } + setVisibility(isVisible) { + this.hide = !isVisible; + return this; + } + setStemlet(isStemlet, stemletHeight) { + this.isStemlet = isStemlet; + this.stemletHeight = stemletHeight; + return this; + } + adjustHeightForFlag() { + this.renderHeightAdjustment = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3); + } + adjustHeightForBeam() { + this.renderHeightAdjustment = -Stem.WIDTH / 2; + } + // Render the stem onto the canvas + draw() { + this.setRendered(); + if (this.hide) + return; + const ctx = this.checkContext(); + let stem_x; + let stem_y; + const stem_direction = this.stem_direction; + let y_base_offset = 0; + if (stem_direction === Stem.DOWN) { + // Down stems are rendered to the left of the head. + stem_x = this.x_begin; + stem_y = this.y_top + this.stem_down_y_offset; + y_base_offset = this.stem_down_y_base_offset; + } + else { + // Up stems are rendered to the right of the head. + stem_x = this.x_end; + stem_y = this.y_bottom - this.stem_up_y_offset; + y_base_offset = this.stem_up_y_base_offset; + } + const stemHeight = this.getHeight(); + L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom); + // The offset from the stem's base which is required fo satisfy the stemlet height + const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0; + // Draw the stem + ctx.save(); + this.applyStyle(); + ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true }); + ctx.beginPath(); + ctx.setLineWidth(Stem.WIDTH); + ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset); + ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction); + ctx.stroke(); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */ +Stem.DEBUG = false; + + + +/***/ }), + +/***/ "./src/stemmablenote.ts": +/*!******************************!*\ + !*** ./src/stemmablenote.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StemmableNote": () => (/* binding */ StemmableNote) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// `StemmableNote` is an abstract interface for notes with optional stems. +// Examples of stemmable notes are `StaveNote` and `TabNote` + + + + + + +class StemmableNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StemmableNote; + } + constructor(noteStruct) { + super(noteStruct); + } + // Get and set the note's `Stem` + getStem() { + return this.stem; + } + checkStem() { + if (!this.stem) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to instance'); + } + return this.stem; + } + setStem(stem) { + this.stem = stem; + this.addChildElement(stem); + return this; + } + // Builds and sets a new stem + buildStem() { + const stem = new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(); + this.setStem(stem); + return this; + } + buildFlag(category = 'flag') { + const { glyphProps } = this; + if (this.hasFlag()) { + const flagCode = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem; + if (flagCode) + this.flag = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(flagCode, this.render_options.glyph_font_scale, { category }); + } + } + // Get the custom glyph associated with the outer note head on the base of the stem. + getBaseCustomNoteHeadGlyphProps() { + if (this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + return this.customGlyphs[this.customGlyphs.length - 1]; + } + else { + return this.customGlyphs[0]; + } + } + // Get the full length of stem + getStemLength() { + return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT + this.getStemExtension(); + } + // Get the number of beams for this duration + getBeamCount() { + const glyphProps = this.getGlyphProps(); + if (glyphProps) { + return glyphProps.beam_count; + } + else { + return 0; + } + } + // Get the minimum length of stem + getStemMinimumLength() { + const frac = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToFraction(this.duration); + let length = frac.value() <= 1 ? 0 : 20; + // if note is flagged, cannot shorten beam + switch (this.duration) { + case '8': + if (this.beam == undefined) + length = 35; + break; + case '16': + length = this.beam == undefined ? 35 : 25; + break; + case '32': + length = this.beam == undefined ? 45 : 35; + break; + case '64': + length = this.beam == undefined ? 50 : 40; + break; + case '128': + length = this.beam == undefined ? 55 : 45; + break; + default: + break; + } + return length; + } + // Get/set the direction of the stem + getStemDirection() { + if (!this.stem_direction) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + return this.stem_direction; + } + setStemDirection(direction) { + if (!direction) + direction = _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + if (direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArgument', `Invalid stem direction: ${direction}`); + } + this.stem_direction = direction; + // Reset and reformat everything. Flag has to be built before calling getStemExtension. + this.reset(); + if (this.hasFlag()) { + this.buildFlag(); + } + this.beam = undefined; + if (this.stem) { + this.stem.setDirection(direction); + this.stem.setExtension(this.getStemExtension()); + // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten + // the stem appropriately. If there's no custom note head, lookup the standard notehead. + const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps(); + // Get the font-specific customizations for the note heads. + const offsets = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, { + offsetYBaseStemUp: 0, + offsetYTopStemUp: 0, + offsetYBaseStemDown: 0, + offsetYTopStemDown: 0, + }); + // Configure the stem to use these offsets. + this.stem.setOptions({ + stem_up_y_offset: offsets.offsetYTopStemUp, + stem_down_y_offset: offsets.offsetYTopStemDown, + stem_up_y_base_offset: offsets.offsetYBaseStemUp, + stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset, + }); + } + if (this.preFormatted) { + this.preFormat(); + } + return this; + } + // Get the `x` coordinate of the stem + getStemX() { + const x_begin = this.getAbsoluteX() + this.x_shift; + const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth(); + const stem_x = this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? x_begin : x_end; + return stem_x; + } + // Get the `x` coordinate for the center of the glyph. + // Used for `TabNote` stems and stemlets over rests + getCenterGlyphX() { + return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2; + } + // Get the stem extension for the current duration + getStemExtension() { + const glyphProps = this.getGlyphProps(); + if (this.stem_extension_override != undefined) { + return this.stem_extension_override; + } + // Use stem_beam_extension with beams + if (this.beam) { + return glyphProps.stem_beam_extension; + } + if (glyphProps) { + return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension; + } + return 0; + } + // Set the stem length to a specific. Will override the default length. + setStemLength(height) { + this.stem_extension_override = height - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT; + return this; + } + // Get the top and bottom `y` values of the stem. + getStemExtents() { + if (!this.stem) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + return this.stem.getExtents(); + } + /** Gets the `y` value for the top modifiers at a specific `textLine`. */ + getYForTopText(textLine) { + const stave = this.checkStave(); + if (this.hasStem()) { + const extents = this.getStemExtents(); + if (!extents) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.'); + return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); + } + else { + return stave.getYForTopText(textLine); + } + } + /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */ + getYForBottomText(textLine) { + const stave = this.checkStave(); + if (this.hasStem()) { + const extents = this.getStemExtents(); + if (!extents) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.'); + return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); + } + else { + return stave.getYForBottomText(textLine); + } + } + hasFlag() { + return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(this.duration).flag == true && !this.beam; + } + /** Post formats the note. */ + postFormat() { + var _a; + (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat(); + this.postFormatted = true; + return this; + } + /** Renders the stem onto the canvas. */ + drawStem(stemOptions) { + var _a; + this.checkContext(); + this.setRendered(); + this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(stemOptions)); + (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw(); + } +} + + +/***/ }), + +/***/ "./src/stringnumber.ts": +/*!*****************************!*\ + !*** ./src/stringnumber.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StringNumber": () => (/* binding */ StringNumber) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Larry Kuhns +// +// This file implements the `StringNumber` class which renders string +// number annotations beside notes. + + + + + + + +class StringNumber extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StringNumber; + } + static get metrics() { + var _a; + return ((_a = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : { + verticalPadding: 0, + stemPadding: 0, + leftPadding: 0, + rightPadding: 0, + }); + } + // ## Static Methods + // Arrange string numbers inside a `ModifierContext` + static format(nums, state) { + /** + * The modifier context's left_shift state. + */ + const left_shift = state.left_shift; + /** + * The modifier context's right_shift state. + */ + const right_shift = state.right_shift; + const num_spacing = 1; + if (!nums || nums.length === 0) + return false; + const nums_list = []; + let prev_note = null; + let extraXSpaceForDisplacedNotehead = 0; + let shift_right = 0; + const modLines = 0; + for (let i = 0; i < nums.length; ++i) { + const num = nums[i]; + const note = num.getNote(); + const pos = num.getPosition(); + if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(note)) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoStaveNote'); + } + const index = num.checkIndex(); + const props = note.getKeyProps()[index]; + const mc = note.getModifierContext(); + const verticalSpaceNeeded = (num.radius * 2) / _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE + 0.5; + if (mc) { + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) { + num.text_line = mc.getState().top_text_line; + state.top_text_line += verticalSpaceNeeded; + } + else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) { + num.text_line = mc.getState().text_line; + state.text_line += verticalSpaceNeeded; + } + } + if (note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead); + } + if (right_shift === 0) { + shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right); + } + } + prev_note = note; + } + const glyphLine = modLines === 0 ? props.line : modLines; + nums_list.push({ + pos, + note, + num, + line: glyphLine, + shiftL: extraXSpaceForDisplacedNotehead, + shiftR: shift_right, + }); + } + // Sort string numbers by line number. + nums_list.sort((a, b) => b.line - a.line); + let num_shiftR = 0; + let x_widthL = 0; + let x_widthR = 0; + let last_line = null; + let last_note = null; + for (let i = 0; i < nums_list.length; ++i) { + const note = nums_list[i].note; + const pos = nums_list[i].pos; + const num = nums_list[i].num; + const line = nums_list[i].line; + const shiftR = nums_list[i].shiftR; + // Reset the position of the string number every line. + if (line !== last_line || note !== last_note) { + num_shiftR = right_shift + shiftR; + } + const num_width = num.getWidth() + num_spacing; + let num_x_shift = 0; + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + num.setXShift(left_shift + extraXSpaceForDisplacedNotehead); + num_x_shift = num_width; // spacing + x_widthL = Math.max(num_x_shift, x_widthL); + } + else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { + num.setXShift(num_shiftR); + num_x_shift += num_width; // spacing + x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR; + } + last_line = line; + last_note = note; + } + state.left_shift += x_widthL; + state.right_shift += x_widthR; + return true; + } + constructor(number) { + super(); + this.string_number = number; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE; // Default position above stem or note head + this.x_shift = 0; + this.y_shift = 0; + this.text_line = 0; + this.stem_offset = 0; + this.x_offset = 0; // Horizontal offset from default + this.y_offset = 0; // Vertical offset from default + this.dashed = true; // true - draw dashed extension false - no extension + this.leg = _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line + this.radius = 8; + this.drawCircle = true; + this.setWidth(this.radius * 2 + 4); + this.resetFont(); + } + setLineEndType(leg) { + if (leg >= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE && leg <= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN) { + this.leg = leg; + } + return this; + } + setStringNumber(number) { + this.string_number = number; + return this; + } + setOffsetX(x) { + this.x_offset = x; + return this; + } + setOffsetY(y) { + this.y_offset = y; + return this; + } + setLastNote(note) { + this.last_note = note; + return this; + } + setDashed(dashed) { + this.dashed = dashed; + return this; + } + setDrawCircle(drawCircle) { + this.drawCircle = drawCircle; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; + let dot_x = start.x + this.x_shift + this.x_offset; + let stem_ext = {}; + if (note.hasStem()) { + stem_ext = note.checkStem().getExtents(); + } + let dot_y = start.y + this.y_shift + this.y_offset; + switch (this.position) { + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE: + { + const ys = note.getYs(); + dot_y = ys.reduce((a, b) => (a < b ? a : b)); + if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + dot_y = stem_ext.topY + StringNumber.metrics.stemPadding; + } + dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE; + } + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW: + { + const ys = note.getYs(); + dot_y = ys.reduce((a, b) => (a > b ? a : b)); + if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN) { + dot_y = stem_ext.topY - StringNumber.metrics.stemPadding; + } + dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE; + } + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT: + dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT: + dot_x += this.radius / 2 + StringNumber.metrics.rightPadding; + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid`); + } + ctx.save(); + if (this.drawCircle) { + ctx.beginPath(); + ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false); + ctx.setLineWidth(1.5); + ctx.stroke(); + } + ctx.setFont(this.textFont); + const x = dot_x - ctx.measureText(this.string_number).width / 2; + ctx.fillText('' + this.string_number, x, dot_y + 4.5); + const lastNote = this.last_note; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(lastNote)) { + // Only StemmableNote objects have getStemX(). + const end = lastNote.getStemX() - note.getX() + 5; + ctx.setStrokeStyle('#000000'); + ctx.setLineCap('round'); + ctx.setLineWidth(0.6); + if (this.dashed) { + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]); + } + else { + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]); + } + let len; + let pattern; + switch (this.leg) { + case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.UP: + len = -10; + pattern = this.dashed ? [3, 3] : [3, 0]; + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); + break; + case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN: + len = 10; + pattern = this.dashed ? [3, 3] : [3, 0]; + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); + break; + default: + break; + } + } + ctx.restore(); + } +} +StringNumber.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/strokes.ts": +/*!************************!*\ + !*** ./src/strokes.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Stroke": () => (/* binding */ Stroke) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Larry Kuhns +// +// This file implements the `Stroke` class which renders chord strokes +// that can be arpeggiated, brushed, rasquedo, etc. + + + + + + +class Stroke extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Stroke; + } + // Arrange strokes inside `ModifierContext` + static format(strokes, state) { + const left_shift = state.left_shift; + const stroke_spacing = 0; + if (!strokes || strokes.length === 0) + return false; + const strokeList = strokes.map((stroke) => { + const note = stroke.getNote(); + const index = stroke.checkIndex(); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + // Only StaveNote objects have getKeyProps(). + const { line } = note.getKeyProps()[index]; + const shift = note.getLeftDisplacedHeadPx(); + return { line, shift, stroke }; + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + // Only TabNote objects have getPositions(). + const { str: string } = note.getPositions()[index]; + return { line: string, shift: 0, stroke }; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Internal', 'Unexpected instance.'); + } + }); + const strokeShift = left_shift; + // There can only be one stroke .. if more than one, they overlay each other + const xShift = strokeList.reduce((xShift, { stroke, shift }) => { + stroke.setXShift(strokeShift + shift); + return Math.max(stroke.getWidth() + stroke_spacing, xShift); + }, 0); + state.left_shift += xShift; + return true; + } + constructor(type, options) { + super(); + this.options = Object.assign({ all_voices: true }, options); + // multi voice - span stroke across all voices if true + this.all_voices = this.options.all_voices; + // multi voice - end note of stroke, set in draw() + this.type = type; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; + this.render_options = { + font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, + }; + this.resetFont(); + this.setXShift(0); + this.setWidth(10); + } + getPosition() { + return this.position; + } + addEndNote(note) { + this.note_end = note; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + let ys = note.getYs(); + let topY = start.y; + let botY = start.y; + const x = start.x - 5; + const line_space = note.checkStave().getSpacingBetweenLines(); + const notes = this.checkModifierContext().getMembers(note.getCategory()); + for (let i = 0; i < notes.length; i++) { + const note = notes[i]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isNote)(note)) { + // Only Note objects have getYs(). + // note is an instance of either StaveNote or TabNote. + ys = note.getYs(); + for (let n = 0; n < ys.length; n++) { + if (this.note === notes[i] || this.all_voices) { + topY = Math.min(topY, ys[n]); + botY = Math.max(botY, ys[n]); + } + } + } + } + let arrow = ''; + let arrow_shift_x = 0; + let arrow_y = 0; + let text_shift_x = 0; + let text_y = 0; + switch (this.type) { + case Stroke.Type.BRUSH_DOWN: + arrow = 'arrowheadBlackUp'; + arrow_shift_x = -3; + arrow_y = topY - line_space / 2 + 10; + botY += line_space / 2; + break; + case Stroke.Type.BRUSH_UP: + arrow = 'arrowheadBlackDown'; + arrow_shift_x = 0.5; + arrow_y = botY + line_space / 2; + topY -= line_space / 2; + break; + case Stroke.Type.ROLL_DOWN: + case Stroke.Type.RASQUEDO_DOWN: + arrow = 'arrowheadBlackUp'; + arrow_shift_x = -3; + text_shift_x = this.x_shift + arrow_shift_x - 2; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + topY += 1.5 * line_space; + if ((botY - topY) % 2 !== 0) { + botY += 0.5 * line_space; + } + else { + botY += line_space; + } + arrow_y = topY - line_space; + text_y = botY + line_space + 2; + } + else { + topY += 1.5 * line_space; + botY += line_space; + arrow_y = topY - 0.75 * line_space; + text_y = botY + 0.25 * line_space; + } + break; + case Stroke.Type.ROLL_UP: + case Stroke.Type.RASQUEDO_UP: + arrow = 'arrowheadBlackDown'; + arrow_shift_x = -4; + text_shift_x = this.x_shift + arrow_shift_x - 1; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + arrow_y = line_space / 2; + topY += 0.5 * line_space; + if ((botY - topY) % 2 === 0) { + botY += line_space / 2; + } + arrow_y = botY + 0.5 * line_space; + text_y = topY - 1.25 * line_space; + } + else { + topY += 0.25 * line_space; + botY += 0.5 * line_space; + arrow_y = botY + 0.25 * line_space; + text_y = topY - line_space; + } + break; + case Stroke.Type.ARPEGGIO_DIRECTIONLESS: + topY += 0.5 * line_space; + botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`); + } + let strokeLine = 'straight'; + // Draw the stroke + if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) { + ctx.fillRect(x + this.x_shift, topY, 1, botY - topY); + } + else { + strokeLine = 'wiggly'; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + for (let i = topY; i <= botY; i += line_space) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); + } + } + else { + let i; + for (i = topY; i <= botY; i += 10) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); + } + if (this.type === Stroke.Type.RASQUEDO_DOWN) { + text_y = i + 0.25 * line_space; + } + } + } + if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) { + return; // skip drawing arrow heads or text + } + // Draw the arrow head + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, { + category: `stroke_${strokeLine}.${arrow}`, + }); + // Draw the rasquedo "R" + if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText('R', x + text_shift_x, text_y); + ctx.restore(); + } + } +} +Stroke.Type = { + BRUSH_DOWN: 1, + BRUSH_UP: 2, + ROLL_DOWN: 3, + ROLL_UP: 4, + RASQUEDO_DOWN: 5, + RASQUEDO_UP: 6, + ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow +}; +Stroke.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC, +}; + + + +/***/ }), + +/***/ "./src/svgcontext.ts": +/*!***************************!*\ + !*** ./src/svgcontext.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SVGContext": () => (/* binding */ SVGContext) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// @author Gregory Ristow (2015) + + + + +/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */ +const ATTRIBUTES_TO_IGNORE = { + path: { + x: true, + y: true, + width: true, + height: true, + 'font-family': true, + 'font-weight': true, + 'font-style': true, + 'font-size': true, + }, + rect: { + 'font-family': true, + 'font-weight': true, + 'font-style': true, + 'font-size': true, + }, + text: { + width: true, + height: true, + }, +}; +/** Create the SVG in the SVG namespace. */ +const SVG_NS = 'http://www.w3.org/2000/svg'; +const TWO_PI = 2 * Math.PI; +class MeasureTextCache { + constructor() { + // The cache is keyed first by the text string, then by the font attributes + // joined together. + this.cache = {}; + } + lookup(text, svg, attributes) { + let entries = this.cache[text]; + if (entries === undefined) { + entries = {}; + this.cache[text] = entries; + } + const family = attributes['font-family']; + const size = attributes['font-size']; + const weight = attributes['font-weight']; + const style = attributes['font-style']; + const key = `${family}%${size}%${weight}%${style}`; + let entry = entries[key]; + if (entry === undefined) { + entry = this.measureImpl(text, svg, attributes); + entries[key] = entry; + } + return entry; + } + measureImpl(text, svg, attributes) { + let txt = this.txt; + if (!txt) { + // Create the SVG text element that will be used to measure text in the event + // of a cache miss. + txt = document.createElementNS(SVG_NS, 'text'); + this.txt = txt; + } + txt.textContent = text; + if (attributes['font-family']) + txt.setAttributeNS(null, 'font-family', attributes['font-family']); + if (attributes['font-size']) + txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`); + if (attributes['font-style']) + txt.setAttributeNS(null, 'font-style', attributes['font-style']); + if (attributes['font-weight']) + txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`); + svg.appendChild(txt); + const bbox = txt.getBBox(); + svg.removeChild(txt); + return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }; + } +} +/** + * SVG rendering context with an API similar to CanvasRenderingContext2D. + */ +class SVGContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext { + constructor(element) { + super(); + this.width = 0; + this.height = 0; + this.precision = 1; + this.backgroundFillStyle = 'white'; + /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */ + this.fontCSSString = ''; + this.element = element; + this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RENDER_PRECISION_PLACES); + // Create a SVG element and add it to the container element. + const svg = this.create('svg'); + this.element.appendChild(svg); + this.svg = svg; + this.parent = this.svg; + this.groups = [this.svg]; + this.path = ''; + this.pen = { x: NaN, y: NaN }; + this.lineWidth = 1.0; + const defaultFontAttributes = { + 'font-family': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + 'font-size': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE + 'pt', + 'font-weight': _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + 'font-style': _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, + }; + this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes); + this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes); + this.groupAttributes = []; + this.applyAttributes(svg, this.attributes); + this.groupAttributes.push(Object.assign({}, this.attributes)); + this.shadow_attributes = { + width: 0, + color: 'black', + }; + this.state_stack = []; + } + round(n) { + return Math.round(n * this.precision) / this.precision; + } + create(svgElementType) { + return document.createElementNS(SVG_NS, svgElementType); + } + // Allow grouping elements in containers for interactivity. + openGroup(cls, id, attrs) { + const group = this.create('g'); + this.groups.push(group); + this.parent.appendChild(group); + this.parent = group; + if (cls) + group.setAttribute('class', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(cls)); + if (id) + group.setAttribute('id', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(id)); + if (attrs && attrs.pointerBBox) { + group.setAttribute('pointer-events', 'bounding-box'); + } + this.applyAttributes(group, this.attributes); + this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes)); + return group; + } + closeGroup() { + this.groups.pop(); + this.groupAttributes.pop(); + this.parent = this.groups[this.groups.length - 1]; + } + add(elem) { + this.parent.appendChild(elem); + } + setFillStyle(style) { + this.attributes.fill = style; + return this; + } + /** + * Used to set the fill color for `clearRect()`. This allows us to simulate + * cutting a "hole" into the SVG drawing. + */ + setBackgroundFillStyle(style) { + this.backgroundFillStyle = style; + return this; + } + setStrokeStyle(style) { + this.attributes.stroke = style; + return this; + } + setShadowColor(color) { + this.shadow_attributes.color = color; + return this; + } + /** + * @param blur A non-negative float specifying the level of shadow blur, where 0 + * represents no blur and larger numbers represent increasingly more blur. + * @returns this + */ + setShadowBlur(blur) { + this.shadow_attributes.width = blur; + return this; + } + /** + * @param width + * @returns this + */ + setLineWidth(width) { + this.attributes['stroke-width'] = width; + this.lineWidth = width; + return this; + } + /** + * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...] + * @returns this + * + * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray) + */ + setLineDash(lineDash) { + if (Object.prototype.toString.call(lineDash) === '[object Array]') { + this.attributes['stroke-dasharray'] = lineDash.join(','); + return this; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('ArgumentError', 'lineDash must be an array of integers.'); + } + } + /** + * @param capType + * @returns this + */ + setLineCap(capType) { + this.attributes['stroke-linecap'] = capType; + return this; + } + // ### Sizing & Scaling Methods: + // TODO (GCR): See note at scale() -- separate our internal + // conception of pixel-based width/height from the style.width + // and style.height properties eventually to allow users to + // apply responsive sizing attributes to the SVG. + resize(width, height) { + this.width = width; + this.height = height; + this.element.style.width = width.toString(); + this.svg.style.width = width.toString(); + this.svg.style.height = height.toString(); + const attributes = { + width, + height, + }; + this.applyAttributes(this.svg, attributes); + this.scale(this.state.scaleX, this.state.scaleY); + return this; + } + scale(x, y) { + // uses viewBox to scale + // TODO (GCR): we may at some point want to distinguish the + // style.width / style.height properties that are applied to + // the SVG object from our internal conception of the SVG + // width/height. This would allow us to create automatically + // scaling SVG's that filled their containers, for instance. + // + // As this isn't implemented in Canvas contexts, + // I've left as is for now, but in using the viewBox to + // handle internal scaling, am trying to make it possible + // for us to eventually move in that direction. + this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x; + this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y; + const visibleWidth = this.width / this.state.scaleX; + const visibleHeight = this.height / this.state.scaleY; + this.setViewBox(0, 0, visibleWidth, visibleHeight); + return this; + } + /** + * 1 arg: string in the "x y w h" format + * 4 args: x:number, y:number, w:number, h:number + */ + setViewBox(viewBox_or_minX, minY, width, height) { + if (typeof viewBox_or_minX === 'string') { + this.svg.setAttribute('viewBox', viewBox_or_minX); + } + else { + const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height; + this.svg.setAttribute('viewBox', viewBoxString); + } + } + // ### Drawing helper methods: + applyAttributes(element, attributes) { + const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName]; + for (const attrName in attributes) { + if (attrNamesToIgnore && attrNamesToIgnore[attrName]) { + continue; + } + if (attributes[attrName] && + (this.groupAttributes.length == 0 || + attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName])) + element.setAttributeNS(null, attrName, attributes[attrName]); + } + return element; + } + // ### Shape & Path Methods: + clear() { + // Clear the SVG by removing all inner children. + // (This approach is usually slightly more efficient + // than removing the old SVG & adding a new one to + // the container element, since it does not cause the + // container to resize twice. Also, the resize + // triggered by removing the entire SVG can trigger + // a touchcancel event when the element resizes away + // from a touch point.) + while (this.svg.lastChild) { + this.svg.removeChild(this.svg.lastChild); + } + // Replace the viewbox attribute we just removed. + this.scale(this.state.scaleX, this.state.scaleY); + } + // ## Rectangles: + rect(x, y, width, height, attributes) { + // Avoid invalid negative height attributes by flipping the rectangle on its head: + if (height < 0) { + y += height; + height *= -1; + } + const rectangle = this.create('rect'); + attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' }; + x = this.round(x); + y = this.round(y); + width = this.round(width); + height = this.round(height); + this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes)); + this.add(rectangle); + return this; + } + fillRect(x, y, width, height) { + const attributes = { fill: this.attributes.fill, stroke: 'none' }; + this.rect(x, y, width, height, attributes); + return this; + } + clearRect(x, y, width, height) { + // Currently this fills a rect with the backgroundFillStyle, rather + // than "cut a hole" into the existing shapes. + // + // Since tabNote seems to be the only module that makes use of this + // it may be worth creating a separate tabStave that would + // draw lines around locations of tablature fingering. + this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' }); + return this; + } + // ## Paths: + beginPath() { + this.path = ''; + this.pen.x = NaN; + this.pen.y = NaN; + return this; + } + moveTo(x, y) { + x = this.round(x); + y = this.round(y); + this.path += 'M' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + lineTo(x, y) { + x = this.round(x); + y = this.round(y); + this.path += 'L' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + bezierCurveTo(x1, y1, x2, y2, x, y) { + x = this.round(x); + y = this.round(y); + x1 = this.round(x1); + y1 = this.round(y1); + x2 = this.round(x2); + y2 = this.round(y2); + this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + quadraticCurveTo(x1, y1, x, y) { + x = this.round(x); + y = this.round(y); + x1 = this.round(x1); + y1 = this.round(y1); + this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + arc(x, y, radius, startAngle, endAngle, counterclockwise) { + let x0 = x + radius * Math.cos(startAngle); + let y0 = y + radius * Math.sin(startAngle); + x0 = this.round(x0); + y0 = this.round(y0); + // svg behavior different from canvas. Don't normalize angles if + // we are drawing a circle because they both normalize to 0 + const tmpStartTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(startAngle); + const tmpEndTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(endAngle); + if ((!counterclockwise && endAngle - startAngle >= TWO_PI) || + (counterclockwise && startAngle - endAngle >= TWO_PI) || + tmpStartTest === tmpEndTest) { + let x1 = x + radius * Math.cos(startAngle + Math.PI); + let y1 = y + radius * Math.sin(startAngle + Math.PI); + // There's no way to specify a completely circular arc in SVG so we have to + // use two semi-circular arcs. + x1 = this.round(x1); + y1 = this.round(y1); + radius = this.round(radius); + this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `; + this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`; + this.pen.x = x0; + this.pen.y = y0; + } + else { + let x1 = x + radius * Math.cos(endAngle); + let y1 = y + radius * Math.sin(endAngle); + startAngle = tmpStartTest; + endAngle = tmpEndTest; + let large; + if (Math.abs(endAngle - startAngle) < Math.PI) { + large = counterclockwise; + } + else { + large = !counterclockwise; + } + if (startAngle > endAngle) { + large = !large; + } + const sweep = !counterclockwise; + x1 = this.round(x1); + y1 = this.round(y1); + radius = this.round(radius); + this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`; + this.pen.x = x1; + this.pen.y = y1; + } + return this; + } + closePath() { + this.path += 'Z'; + return this; + } + getShadowStyle() { + const sa = this.shadow_attributes; + // A CSS drop-shadow filter blur looks different than a canvas shadowBlur + // of the same radius, so we scale the drop-shadow radius here to make it + // look close to the canvas shadow. + return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`; + } + fill(attributes) { + const path = this.create('path'); + if (typeof attributes === 'undefined') { + attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' }); + } + attributes.d = this.path; + if (this.shadow_attributes.width > 0) { + attributes.style = this.getShadowStyle(); + } + this.applyAttributes(path, attributes); + this.add(path); + return this; + } + stroke() { + const path = this.create('path'); + const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path }); + if (this.shadow_attributes.width > 0) { + attributes.style = this.getShadowStyle(); + } + this.applyAttributes(path, attributes); + this.add(path); + return this; + } + // ## Text Methods: + measureText(text) { + return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes); + } + fillText(text, x, y) { + if (!text || text.length <= 0) { + return this; + } + x = this.round(x); + y = this.round(y); + const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x, + y }); + const txt = this.create('text'); + txt.textContent = text; + this.applyAttributes(txt, attributes); + this.add(txt); + return this; + } + // TODO: State should be deep-copied. + save() { + this.state_stack.push({ + state: { + 'font-family': this.state['font-family'], + 'font-weight': this.state['font-weight'], + 'font-style': this.state['font-style'], + 'font-size': this.state['font-size'], + scale: this.state.scale, + }, + attributes: { + 'font-family': this.attributes['font-family'], + 'font-weight': this.attributes['font-weight'], + 'font-style': this.attributes['font-style'], + 'font-size': this.attributes['font-size'], + fill: this.attributes.fill, + stroke: this.attributes.stroke, + 'stroke-width': this.attributes['stroke-width'], + 'stroke-dasharray': this.attributes['stroke-dasharray'], + }, + shadow_attributes: { + width: this.shadow_attributes.width, + color: this.shadow_attributes.color, + }, + lineWidth: this.lineWidth, + }); + return this; + } + // TODO: State should be deep-restored. + restore() { + const savedState = this.state_stack.pop(); + if (savedState) { + const state = savedState; + this.state['font-family'] = state.state['font-family']; + this.state['font-weight'] = state.state['font-weight']; + this.state['font-style'] = state.state['font-style']; + this.state['font-size'] = state.state['font-size']; + this.state.scale = state.state.scale; + this.attributes['font-family'] = state.attributes['font-family']; + this.attributes['font-weight'] = state.attributes['font-weight']; + this.attributes['font-style'] = state.attributes['font-style']; + this.attributes['font-size'] = state.attributes['font-size']; + this.attributes.fill = state.attributes.fill; + this.attributes.stroke = state.attributes.stroke; + this.attributes['stroke-width'] = state.attributes['stroke-width']; + this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray']; + this.shadow_attributes.width = state.shadow_attributes.width; + this.shadow_attributes.color = state.shadow_attributes.color; + this.lineWidth = state.lineWidth; + } + return this; + } + set fillStyle(style) { + this.setFillStyle(style); + } + get fillStyle() { + return this.attributes.fill; + } + set strokeStyle(style) { + this.setStrokeStyle(style); + } + get strokeStyle() { + return this.attributes.stroke; + } + /** + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted + * into the font-weight attribute (e.g., font-weight="bold") + * @param style is a string (e.g., 'italic', 'normal') that is inserted into the + * font-style attribute (e.g., font-style="italic") + */ + setFont(f, size, weight, style) { + const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style); + this.fontCSSString = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo); + const fontAttributes = { + 'font-family': fontInfo.family, + 'font-size': fontInfo.size, + 'font-weight': fontInfo.weight, + 'font-style': fontInfo.style, + }; + this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes); + this.state = Object.assign(Object.assign({}, this.state), fontAttributes); + return this; + } + /** Return a string of the form `'italic bold 15pt Arial'` */ + getFont() { + return this.fontCSSString; + } +} +SVGContext.measureTextCache = new MeasureTextCache(); + + + +/***/ }), + +/***/ "./src/system.ts": +/*!***********************!*\ + !*** ./src/system.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "System": () => (/* binding */ System) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +/** + * System implements a musical system, which is a collection of staves, + * each which can have one or more voices. All voices across all staves in + * the system are formatted together. + */ +class System extends _element__WEBPACK_IMPORTED_MODULE_1__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.System; + } + constructor(params = {}) { + super(); + this.setOptions(params); + this.partStaves = []; + this.partStaveInfos = []; + this.partVoices = []; + } + /** Set formatting options. */ + setOptions(options = {}) { + if (!options.factory) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.'); + } + this.factory = options.factory; + this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) }); + if (this.options.noJustification === false && typeof options.width === 'undefined') { + this.options.autoWidth = true; + } + } + /** Get origin X. */ + getX() { + return this.options.x; + } + /** Set origin X. */ + setX(x) { + this.options.x = x; + this.partStaves.forEach((s) => { + s.setX(x); + }); + } + /** Get origin y. */ + getY() { + return this.options.y; + } + /** Set origin y. */ + setY(y) { + this.options.y = y; + this.partStaves.forEach((s) => { + s.setY(y); + }); + } + /** Get associated staves. */ + getStaves() { + return this.partStaves; + } + /** Get associated voices. */ + getVoices() { + return this.partVoices; + } + /** Set associated context. */ + setContext(context) { + super.setContext(context); + this.factory.setContext(context); + return this; + } + /** + * Add connector between staves. + * @param type see {@link StaveConnector.typeString} + */ + addConnector(type = 'double') { + this.connector = this.factory.StaveConnector({ + top_stave: this.partStaves[0], + bottom_stave: this.partStaves[this.partStaves.length - 1], + type, + }); + return this.connector; + } + /** + * Add a stave to the system. + * + * Example (one voice): + * + * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});` + * + * Example (two voices): + * + * `system.addStave({voices: [` + * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),` + * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))` + * `]});` + */ + addStave(params) { + var _a; + const staveOptions = Object.assign({ left_bar: false }, params.options); + const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions }); + const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions }); + const ctx = this.getContext(); + p.voices.forEach((voice) => { + voice + .setContext(ctx) + .setStave(stave) + .getTickables() + .forEach((tickable) => tickable.setStave(stave)); + this.partVoices.push(voice); + }); + this.partStaves.push(stave); + this.partStaveInfos.push(p); + return stave; + } + /** + * Add voices to the system with stave already assigned. + */ + addVoices(voices) { + const ctx = this.getContext(); + voices.forEach((voice) => { + voice.setContext(ctx); + this.partVoices.push(voice); + }); + } + /** Format the system. */ + format() { + const options_details = this.options.details; + let justifyWidth = 0; + const formatter = new _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(options_details); + this.formatter = formatter; + let y = this.options.y; + let startX = 0; + const debugNoteMetricsYs = []; + this.partStaves.forEach((part, index) => { + y = y + part.space(this.partStaveInfos[index].spaceAbove); + part.setY(y); + y = y + part.space(this.partStaveInfos[index].spaceBelow); + y = y + part.space(this.options.spaceBetweenStaves); + if (this.partStaveInfos[index].debugNoteMetrics) { + debugNoteMetricsYs.push({ y, stave: part }); + y += 15; + } + startX = Math.max(startX, part.getNoteStartX()); + }); + // Re-assign Stave to update y position + this.partVoices.forEach((voice) => { + voice.getTickables().forEach((tickable) => { + const stave = tickable.getStave(); + if (stave) + tickable.setStave(stave); + }); + }); + // Join the voices + formatter.joinVoices(this.partVoices); + // Update the start position of all staves. + this.partStaves.forEach((part) => part.setNoteStartX(startX)); + if (this.options.autoWidth && this.partVoices.length > 0) { + justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices); + this.options.width = justifyWidth + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.rightPadding + (startX - this.options.x); + this.partStaves.forEach((part) => { + part.setWidth(this.options.width); + }); + } + else { + justifyWidth = this.options.noPadding + ? this.options.width - (startX - this.options.x) + : this.options.width - (startX - this.options.x) - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + } + if (this.partVoices.length > 0) { + formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions); + } + formatter.postFormat(); + for (let i = 0; i < this.options.formatIterations; i++) { + formatter.tune(options_details); + } + this.startX = startX; + this.debugNoteMetricsYs = debugNoteMetricsYs; + this.lastY = y; + this.boundingBox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y); + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.formatBegModifiers(this.partStaves); + } + /** Render the system. */ + draw() { + // Render debugging information, if requested. + const ctx = this.checkContext(); + if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFormatter', 'format() must be called before draw()'); + } + this.setRendered(); + if (this.options.debugFormatter) { + _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY); + } + this.debugNoteMetricsYs.forEach((d) => { + this.partVoices.forEach((voice) => { + voice.getTickables().forEach((tickable) => { + if (tickable.getStave() === d.stave) + _note__WEBPACK_IMPORTED_MODULE_3__.Note.plotMetrics(ctx, tickable, d.y); + }); + }); + }); + } +} + + +/***/ }), + +/***/ "./src/tables.ts": +/*!***********************!*\ + !*** ./src/tables.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tables": () => (/* binding */ Tables) +/* harmony export */ }); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + + +const RESOLUTION = 16384; +/** + * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow. + * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks. + */ +const durations = { + '1/2': RESOLUTION * 2, + 1: RESOLUTION / 1, + 2: RESOLUTION / 2, + 4: RESOLUTION / 4, + 8: RESOLUTION / 8, + 16: RESOLUTION / 16, + 32: RESOLUTION / 32, + 64: RESOLUTION / 64, + 128: RESOLUTION / 128, + 256: RESOLUTION / 256, +}; +const durationAliases = { + w: '1', + h: '2', + q: '4', + // This is the default duration used to render bars (BarNote). Bars no longer + // consume ticks, so this should be a no-op. + // TODO(0xfe): This needs to be cleaned up. + b: '256', +}; +const keySignatures = { + C: { num: 0 }, + Am: { num: 0 }, + F: { acc: 'b', num: 1 }, + Dm: { acc: 'b', num: 1 }, + Bb: { acc: 'b', num: 2 }, + Gm: { acc: 'b', num: 2 }, + Eb: { acc: 'b', num: 3 }, + Cm: { acc: 'b', num: 3 }, + Ab: { acc: 'b', num: 4 }, + Fm: { acc: 'b', num: 4 }, + Db: { acc: 'b', num: 5 }, + Bbm: { acc: 'b', num: 5 }, + Gb: { acc: 'b', num: 6 }, + Ebm: { acc: 'b', num: 6 }, + Cb: { acc: 'b', num: 7 }, + Abm: { acc: 'b', num: 7 }, + G: { acc: '#', num: 1 }, + Em: { acc: '#', num: 1 }, + D: { acc: '#', num: 2 }, + Bm: { acc: '#', num: 2 }, + A: { acc: '#', num: 3 }, + 'F#m': { acc: '#', num: 3 }, + E: { acc: '#', num: 4 }, + 'C#m': { acc: '#', num: 4 }, + B: { acc: '#', num: 5 }, + 'G#m': { acc: '#', num: 5 }, + 'F#': { acc: '#', num: 6 }, + 'D#m': { acc: '#', num: 6 }, + 'C#': { acc: '#', num: 7 }, + 'A#m': { acc: '#', num: 7 }, +}; +const clefs = { + treble: { line_shift: 0 }, + bass: { line_shift: 6 }, + tenor: { line_shift: 4 }, + alto: { line_shift: 3 }, + soprano: { line_shift: 1 }, + percussion: { line_shift: 0 }, + 'mezzo-soprano': { line_shift: 2 }, + 'baritone-c': { line_shift: 5 }, + 'baritone-f': { line_shift: 5 }, + subbass: { line_shift: 7 }, + french: { line_shift: -1 }, +}; +const notesInfo = { + C: { index: 0, int_val: 0 }, + CN: { index: 0, int_val: 0, accidental: 'n' }, + 'C#': { index: 0, int_val: 1, accidental: '#' }, + 'C##': { index: 0, int_val: 2, accidental: '##' }, + CB: { index: 0, int_val: 11, accidental: 'b' }, + CBB: { index: 0, int_val: 10, accidental: 'bb' }, + D: { index: 1, int_val: 2 }, + DN: { index: 1, int_val: 2, accidental: 'n' }, + 'D#': { index: 1, int_val: 3, accidental: '#' }, + 'D##': { index: 1, int_val: 4, accidental: '##' }, + DB: { index: 1, int_val: 1, accidental: 'b' }, + DBB: { index: 1, int_val: 0, accidental: 'bb' }, + E: { index: 2, int_val: 4 }, + EN: { index: 2, int_val: 4, accidental: 'n' }, + 'E#': { index: 2, int_val: 5, accidental: '#' }, + 'E##': { index: 2, int_val: 6, accidental: '##' }, + EB: { index: 2, int_val: 3, accidental: 'b' }, + EBB: { index: 2, int_val: 2, accidental: 'bb' }, + F: { index: 3, int_val: 5 }, + FN: { index: 3, int_val: 5, accidental: 'n' }, + 'F#': { index: 3, int_val: 6, accidental: '#' }, + 'F##': { index: 3, int_val: 7, accidental: '##' }, + FB: { index: 3, int_val: 4, accidental: 'b' }, + FBB: { index: 3, int_val: 3, accidental: 'bb' }, + G: { index: 4, int_val: 7 }, + GN: { index: 4, int_val: 7, accidental: 'n' }, + 'G#': { index: 4, int_val: 8, accidental: '#' }, + 'G##': { index: 4, int_val: 9, accidental: '##' }, + GB: { index: 4, int_val: 6, accidental: 'b' }, + GBB: { index: 4, int_val: 5, accidental: 'bb' }, + A: { index: 5, int_val: 9 }, + AN: { index: 5, int_val: 9, accidental: 'n' }, + 'A#': { index: 5, int_val: 10, accidental: '#' }, + 'A##': { index: 5, int_val: 11, accidental: '##' }, + AB: { index: 5, int_val: 8, accidental: 'b' }, + ABB: { index: 5, int_val: 7, accidental: 'bb' }, + B: { index: 6, int_val: 11 }, + BN: { index: 6, int_val: 11, accidental: 'n' }, + 'B#': { index: 6, int_val: 12, accidental: '#' }, + 'B##': { index: 6, int_val: 13, accidental: '##' }, + BB: { index: 6, int_val: 10, accidental: 'b' }, + BBB: { index: 6, int_val: 9, accidental: 'bb' }, + R: { index: 6, rest: true }, + X: { + index: 6, + accidental: '', + octave: 4, + code: 'noteheadXBlack', + shift_right: 5.5, + }, +}; +const validNoteTypes = { + n: { name: 'note' }, + r: { name: 'rest' }, + h: { name: 'harmonic' }, + m: { name: 'muted' }, + s: { name: 'slash' }, + g: { name: 'ghost' }, + d: { name: 'diamond' }, + x: { name: 'x' }, + ci: { name: 'circled' }, + cx: { name: 'circle x' }, + sf: { name: 'slashed' }, + sb: { name: 'slashed backward' }, + sq: { name: 'square' }, + tu: { name: 'triangle up' }, + td: { name: 'triangle down' }, +}; +const accidentals = { + '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 }, + '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 }, + b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 }, + bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 }, + n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 }, + '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 }, + '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 }, + db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 }, + d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 }, + '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 }, + '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 }, + '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 }, + bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 }, + bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 }, + o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 }, + k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 }, + bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 }, + '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 }, + ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 }, + afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 }, + accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 }, + accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 }, + accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 }, + accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 }, + accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 }, + accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 }, + accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 }, + accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 }, + accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 }, + accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 }, + accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 }, + accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 }, + accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 }, + accidentalNarrowReversedFlatAndFlat: { + code: 'accidentalNarrowReversedFlatAndFlat', + parenRightPaddingAdjustment: -1, + }, + accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 }, + accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 }, +}; +// Helps determine the layout of accidentals. +const accidentalColumns = { + 1: { + a: [1], + b: [1], + }, + 2: { + a: [1, 2], + }, + 3: { + a: [1, 3, 2], + b: [1, 2, 1], + second_on_bottom: [1, 2, 3], + }, + 4: { + a: [1, 3, 4, 2], + b: [1, 2, 3, 1], + spaced_out_tetrachord: [1, 2, 1, 2], + }, + 5: { + a: [1, 3, 5, 4, 2], + b: [1, 2, 4, 3, 1], + spaced_out_pentachord: [1, 2, 3, 2, 1], + very_spaced_out_pentachord: [1, 2, 1, 2, 1], + }, + 6: { + a: [1, 3, 5, 6, 4, 2], + b: [1, 2, 4, 5, 3, 1], + spaced_out_hexachord: [1, 3, 2, 1, 3, 2], + very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2], + }, +}; +const articulations = { + 'a.': { code: 'augmentationDot', between_lines: true }, + av: { + aboveCode: 'articStaccatissimoAbove', + belowCode: 'articStaccatissimoBelow', + between_lines: true, + }, + 'a>': { + aboveCode: 'articAccentAbove', + belowCode: 'articAccentBelow', + between_lines: true, + }, + 'a-': { + aboveCode: 'articTenutoAbove', + belowCode: 'articTenutoBelow', + between_lines: true, + }, + 'a^': { + aboveCode: 'articMarcatoAbove', + belowCode: 'articMarcatoBelow', + between_lines: false, + }, + 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false }, + ao: { + aboveCode: 'pluckedSnapPizzicatoAbove', + belowCode: 'pluckedSnapPizzicatoBelow', + between_lines: false, + }, + ah: { code: 'stringsHarmonic', between_lines: false }, + 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false }, + 'a@a': { code: 'fermataAbove', between_lines: false }, + 'a@u': { code: 'fermataBelow', between_lines: false }, + 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false }, + 'a@as': { code: 'fermataShortAbove', between_lines: false }, + 'a@us': { code: 'fermataShortBelow', between_lines: false }, + 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false }, + 'a@al': { code: 'fermataLongAbove', between_lines: false }, + 'a@ul': { code: 'fermataLongBelow', between_lines: false }, + 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false }, + 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false }, + 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false }, + 'a|': { code: 'stringsUpBow', between_lines: false }, + am: { code: 'stringsDownBow', between_lines: false }, + 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked +}; +const ornaments = { + mordent: { code: 'ornamentShortTrill' }, + mordent_inverted: { code: 'ornamentMordent' }, + turn: { code: 'ornamentTurn' }, + turn_inverted: { code: 'ornamentTurnSlash' }, + tr: { code: 'ornamentTrill' }, + upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' }, + downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' }, + prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' }, + pralldown: { code: 'ornamentPrecompTrillLowerSuffix' }, + upmordent: { code: 'ornamentPrecompSlideTrillBach' }, + downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' }, + lineprall: { code: 'ornamentPrecompAppoggTrill' }, + prallprall: { code: 'ornamentTremblement' }, + scoop: { code: 'brassScoop' }, + doit: { code: 'brassDoitMedium' }, + fall: { code: 'brassFallLipShort' }, + doitLong: { code: 'brassLiftMedium' }, + fallLong: { code: 'brassFallRoughMedium' }, + bend: { code: 'brassBend' }, + plungerClosed: { code: 'brassMuteClosed' }, + plungerOpen: { code: 'brassMuteOpen' }, + flip: { code: 'brassFlip' }, + jazzTurn: { code: 'brassJazzTurn' }, + smear: { code: 'brassSmear' }, +}; +class Tables { + /** + * @returns the `Font` object at the head of the music font stack. + */ + static currentMusicFont() { + if (Tables.MUSIC_FONT_STACK.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).'); + } + else { + return Tables.MUSIC_FONT_STACK[0]; + } + } + static clefProperties(clef) { + if (!clef || !(clef in clefs)) + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArgument', 'Invalid clef: ' + clef); + return clefs[clef]; + } + /** + * @param keyOctaveGlyph a string in the format "key/octave" (e.g., "c/5") or "key/octave/custom-note-head-code" (e.g., "g/5/t3"). + * @param clef + * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.). + * @returns properties for the specified note. + */ + static keyProperties(keyOctaveGlyph, clef = 'treble', params) { + let options = { octave_shift: 0, duration: '4' }; + if (typeof params === 'object') { + options = Object.assign(Object.assign({}, options), params); + } + const duration = Tables.sanitizeDuration(options.duration); + const pieces = keyOctaveGlyph.split('/'); + if (pieces.length < 2) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`); + } + const key = pieces[0].toUpperCase(); + const value = notesInfo[key]; + if (!value) + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Invalid key name: ' + key); + if (value.octave) + pieces[1] = value.octave.toString(); + let octave = parseInt(pieces[1], 10); + // Octave_shift is the shift to compensate for clef 8va/8vb. + octave += -1 * options.octave_shift; + const baseIndex = octave * 7 - 4 * 7; + let line = (baseIndex + value.index) / 2; + line += Tables.clefProperties(clef).line_shift; + let stroke = 0; + if (line <= 0 && (line * 2) % 2 === 0) + stroke = 1; // stroke up + if (line >= 6 && (line * 2) % 2 === 0) + stroke = -1; // stroke down + // Integer value for note arithmetic. + const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined; + // If the user specified a glyph, overwrite the glyph code. + const code = value.code; + const shift_right = value.shift_right; + let customNoteHeadProps = {}; + if (pieces.length > 2 && pieces[2]) { + const glyphName = pieces[2].toUpperCase(); + customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {}; + } + return Object.assign({ key, + octave, + line, + int_value, accidental: value.accidental, code, + stroke, + shift_right, displaced: false }, customNoteHeadProps); + } + static integerToNote(integer) { + if (typeof integer === 'undefined' || integer < 0 || integer > 11) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`); + } + const table = { + 0: 'C', + 1: 'C#', + 2: 'D', + 3: 'D#', + 4: 'E', + 5: 'F', + 6: 'F#', + 7: 'G', + 8: 'G#', + 9: 'A', + 10: 'A#', + 11: 'B', + }; + const noteValue = table[integer]; + if (!noteValue) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`); + } + return noteValue; + } + static tabToGlyphProps(fret, scale = 1.0) { + let glyph = undefined; + let width = 0; + let shift_y = 0; + if (fret.toUpperCase() === 'X') { + const glyphMetrics = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics(); + glyph = 'accidentalDoubleSharp'; + if (glyphMetrics.width == undefined || glyphMetrics.height == undefined) + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidMetrics', 'Width and height required'); + width = glyphMetrics.width; + shift_y = -glyphMetrics.height / 2; + } + else { + width = Tables.textWidth(fret); + } + return { + text: fret, + code: glyph, + getWidth: () => width * scale, + shift_y, + }; + } + // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size. + // TODO: The actual width depends on the font family, size, weight, style. + static textWidth(text) { + return 7 * text.toString().length; + } + static articulationCodes(artic) { + return articulations[artic]; + } + static accidentalCodes(acc) { + return accidentals[acc]; + } + static ornamentCodes(acc) { + return ornaments[acc]; + } + static keySignature(spec) { + const keySpec = keySignatures[spec]; + if (!keySpec) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`); + } + if (!keySpec.acc) { + return []; + } + const accidentalList = { + b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5], + '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2], + }; + const notes = accidentalList[keySpec.acc]; + const acc_list = []; + for (let i = 0; i < keySpec.num; ++i) { + const line = notes[i]; + acc_list.push({ type: keySpec.acc, line }); + } + return acc_list; + } + static getKeySignatures() { + return keySignatures; + } + static hasKeySignature(spec) { + return spec in keySignatures; + } + /** + * Convert duration aliases to the number based duration. + * If the input isn't an alias, simply return the input. + * @param duration + * @returns Example: 'q' -> '4', '8' -> '8' + */ + static sanitizeDuration(duration) { + const durationNumber = durationAliases[duration]; + if (durationNumber !== undefined) { + duration = durationNumber; + } + if (durations[duration] === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`); + } + return duration; + } + /** Convert the `duration` to a fraction. */ + static durationToFraction(duration) { + return new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction().parse(Tables.sanitizeDuration(duration)); + } + /** Convert the `duration` to a number. */ + static durationToNumber(duration) { + return Tables.durationToFraction(duration).value(); + } + /* Convert the `duration` to total ticks. */ + static durationToTicks(duration) { + duration = Tables.sanitizeDuration(duration); + const ticks = durations[duration]; + if (ticks === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidDuration'); + } + return ticks; + } + static codeNoteHead(type, duration) { + let code = ''; + switch (type) { + /* Diamond */ + case 'D0': + code = 'noteheadDiamondWhole'; + break; + case 'D1': + code = 'noteheadDiamondHalf'; + break; + case 'D2': + code = 'noteheadDiamondBlack'; + break; + case 'D3': + code = 'noteheadDiamondBlack'; + break; + /* Triangle */ + case 'T0': + code = 'noteheadTriangleUpWhole'; + break; + case 'T1': + code = 'noteheadTriangleUpHalf'; + break; + case 'T2': + code = 'noteheadTriangleUpBlack'; + break; + case 'T3': + code = 'noteheadTriangleUpBlack'; + break; + /* Cross */ + case 'X0': + code = 'noteheadXWhole'; + break; + case 'X1': + code = 'noteheadXHalf'; + break; + case 'X2': + code = 'noteheadXBlack'; + break; + case 'X3': + code = 'noteheadCircleX'; + break; + /* Square */ + case 'S1': + code = 'noteheadSquareWhite'; + break; + case 'S2': + code = 'noteheadSquareBlack'; + break; + /* Rectangle */ + case 'R1': + code = 'vexNoteHeadRectWhite'; // no smufl code + break; + case 'R2': + code = 'vexNoteHeadRectBlack'; // no smufl code + break; + case 'DO': + code = 'noteheadTriangleUpBlack'; + break; + case 'RE': + code = 'noteheadMoonBlack'; + break; + case 'MI': + code = 'noteheadDiamondBlack'; + break; + case 'FA': + code = 'noteheadTriangleLeftBlack'; + break; + case 'FAUP': + code = 'noteheadTriangleRightBlack'; + break; + case 'SO': + code = 'noteheadBlack'; + break; + case 'LA': + code = 'noteheadSquareBlack'; + break; + case 'TI': + code = 'noteheadTriangleRoundDownBlack'; + break; + case 'D': + case 'H': // left for backwards compatibility + switch (duration) { + case '1/2': + code = 'noteheadDiamondDoubleWhole'; + break; + case '1': + code = 'noteheadDiamondWhole'; + break; + case '2': + code = 'noteheadDiamondHalf'; + break; + default: + code = 'noteheadDiamondBlack'; + break; + } + break; + case 'N': + case 'G': + switch (duration) { + case '1/2': + code = 'noteheadDoubleWhole'; + break; + case '1': + code = 'noteheadWhole'; + break; + case '2': + code = 'noteheadHalf'; + break; + default: + code = 'noteheadBlack'; + break; + } + break; + case 'M': // left for backwards compatibility + case 'X': + switch (duration) { + case '1/2': + code = 'noteheadXDoubleWhole'; + break; + case '1': + code = 'noteheadXWhole'; + break; + case '2': + code = 'noteheadXHalf'; + break; + default: + code = 'noteheadXBlack'; + break; + } + break; + case 'CX': + switch (duration) { + case '1/2': + code = 'noteheadCircleXDoubleWhole'; + break; + case '1': + code = 'noteheadCircleXWhole'; + break; + case '2': + code = 'noteheadCircleXHalf'; + break; + default: + code = 'noteheadCircleX'; + break; + } + break; + case 'CI': + switch (duration) { + case '1/2': + code = 'noteheadCircledDoubleWhole'; + break; + case '1': + code = 'noteheadCircledWhole'; + break; + case '2': + code = 'noteheadCircledHalf'; + break; + default: + code = 'noteheadCircledBlack'; + break; + } + break; + case 'SQ': + switch (duration) { + case '1/2': + code = 'noteheadDoubleWholeSquare'; + break; + case '1': + code = 'noteheadSquareWhite'; + break; + case '2': + code = 'noteheadSquareWhite'; + break; + default: + code = 'noteheadSquareBlack'; + break; + } + break; + case 'TU': + switch (duration) { + case '1/2': + code = 'noteheadTriangleUpDoubleWhole'; + break; + case '1': + code = 'noteheadTriangleUpWhole'; + break; + case '2': + code = 'noteheadTriangleUpHalf'; + break; + default: + code = 'noteheadTriangleUpBlack'; + break; + } + break; + case 'TD': + switch (duration) { + case '1/2': + code = 'noteheadTriangleDownDoubleWhole'; + break; + case '1': + code = 'noteheadTriangleDownWhole'; + break; + case '2': + code = 'noteheadTriangleDownHalf'; + break; + default: + code = 'noteheadTriangleDownBlack'; + break; + } + break; + case 'SF': + switch (duration) { + case '1/2': + code = 'noteheadSlashedDoubleWhole1'; + break; + case '1': + code = 'noteheadSlashedWhole1'; + break; + case '2': + code = 'noteheadSlashedHalf1'; + break; + default: + code = 'noteheadSlashedBlack1'; + } + break; + case 'SB': + switch (duration) { + case '1/2': + code = 'noteheadSlashedDoubleWhole2'; + break; + case '1': + code = 'noteheadSlashedWhole2'; + break; + case '2': + code = 'noteheadSlashedHalf2'; + break; + default: + code = 'noteheadSlashedBlack2'; + } + break; + } + return code; + } + // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads. + // The default type is a regular note ('n'). + static getGlyphProps(duration, type = 'n') { + duration = Tables.sanitizeDuration(duration); + // Lookup duration for default glyph head code + let code = durationCodes[duration]; + if (code === undefined) { + code = durationCodes['4']; + } + // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash) + let glyphTypeProperties = code[type]; + // Try and get it from the custom list of note heads + const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration); + if (codeNoteHead != '') + glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead }); + const code_head = glyphTypeProperties.code_head; + // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale). + // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH). + const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(code_head, scale); + // Merge duration props for 'duration' with the note head properties. + return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties); + } +} +Tables.UNISON = true; +Tables.SOFTMAX_FACTOR = 10; +Tables.STEM_WIDTH = 1.5; +Tables.STEM_HEIGHT = 35; +Tables.STAVE_LINE_THICKNESS = 1; +Tables.RENDER_PRECISION_PLACES = 3; +Tables.RESOLUTION = RESOLUTION; +/** + * Customize this by calling Flow.setMusicFont(...fontNames); + */ +Tables.MUSIC_FONT_STACK = []; +Tables.NOTATION_FONT_SCALE = 39; +Tables.TABLATURE_FONT_SCALE = 39; +Tables.SLASH_NOTEHEAD_WIDTH = 15; +Tables.STAVE_LINE_DISTANCE = 10; +// HACK: +// Since text origins are positioned at the baseline, we must +// compensate for the ascender of the text. Of course, 1 staff space is +// a very poor approximation. +// +// This will be deprecated in the future. This is a temporary solution until +// we have more robust text metrics. +Tables.TEXT_HEIGHT_OFFSET_HACK = 1; +Tables.accidentalMap = accidentals; +Tables.accidentalColumnsTable = accidentalColumns; +Tables.unicode = { + // ♯ accidental sharp + sharp: String.fromCharCode(0x266f), + // ♭ accidental flat + flat: String.fromCharCode(0x266d), + // ♮ accidental natural + natural: String.fromCharCode(0x266e), + // △ major seventh + triangle: String.fromCharCode(0x25b3), + // ø half-diminished + 'o-with-slash': String.fromCharCode(0x00f8), + // ° diminished + degrees: String.fromCharCode(0x00b0), + // ○ diminished + circle: String.fromCharCode(0x25cb), +}; +/* The list of valid note types. Used by note.ts during parseNoteStruct(). */ +Tables.validTypes = validNoteTypes; +// Default time signature. +Tables.TIME4_4 = { + num_beats: 4, + beat_value: 4, + resolution: RESOLUTION, +}; + +// 1/2, 1, 2, 4, 8, 16, 32, 64, 128 +// NOTE: There is no 256 here! However, there are other mentions of 256 in this file. +// For example, in durations has a 256 key, and sanitizeDuration() can return 256. +// The sanitizeDuration() bit may need to be removed by 0xfe. +const durationCodes = { + '1/2': { + common: { + code_head: '', + stem: false, + flag: false, + stem_up_extension: -Tables.STEM_HEIGHT, + stem_down_extension: -Tables.STEM_HEIGHT, + tabnote_stem_up_extension: -Tables.STEM_HEIGHT, + tabnote_stem_down_extension: -Tables.STEM_HEIGHT, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Breve rest + code_head: 'restDoubleWhole', + rest: true, + position: 'B/5', + dot_shiftY: 0.5, + }, + s: { + // Breve note slash - + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 1: { + common: { + code_head: '', + stem: false, + flag: false, + stem_up_extension: -Tables.STEM_HEIGHT, + stem_down_extension: -Tables.STEM_HEIGHT, + tabnote_stem_up_extension: -Tables.STEM_HEIGHT, + tabnote_stem_down_extension: -Tables.STEM_HEIGHT, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Whole rest + code_head: 'restWhole', + ledger_code_head: 'restWholeLegerLine', + rest: true, + position: 'D/5', + dot_shiftY: 0.5, + }, + s: { + // Whole note slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 2: { + common: { + code_head: '', + stem: true, + flag: false, + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Half rest + code_head: 'restHalf', + ledger_code_head: 'restHalfLegerLine', + stem: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + }, + s: { + // Half note slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 4: { + common: { + code_head: '', + stem: true, + flag: false, + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Quarter rest + code_head: 'restQuarter', + stem: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.5, + line_below: 1.5, + }, + s: { + // Quarter slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 8: { + common: { + code_head: '', + stem: true, + flag: true, + beam_count: 1, + stem_beam_extension: 0, + code_flag_upstem: 'flag8thUp', + code_flag_downstem: 'flag8thDown', + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Eighth rest + code_head: 'rest8th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.0, + line_below: 1.0, + }, + s: { + // Eighth slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 16: { + common: { + code_head: '', + beam_count: 2, + stem_beam_extension: 0, + stem: true, + flag: true, + code_flag_upstem: 'flag16thUp', + code_flag_downstem: 'flag16thDown', + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Sixteenth rest + code_head: 'rest16th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.0, + line_below: 2.0, + }, + s: { + // Sixteenth slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 32: { + common: { + code_head: '', + beam_count: 3, + stem_beam_extension: 7.5, + stem: true, + flag: true, + code_flag_upstem: 'flag32ndUp', + code_flag_downstem: 'flag32ndDown', + stem_up_extension: 9, + stem_down_extension: 9, + tabnote_stem_up_extension: 9, + tabnote_stem_down_extension: 9, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Thirty-second rest + code_head: 'rest32nd', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -1.5, + line_above: 2.0, + line_below: 2.0, + }, + s: { + // Thirty-second slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 64: { + common: { + code_head: '', + beam_count: 4, + stem_beam_extension: 15, + stem: true, + flag: true, + code_flag_upstem: 'flag64thUp', + code_flag_downstem: 'flag64thDown', + stem_up_extension: 13, + stem_down_extension: 13, + tabnote_stem_up_extension: 13, + tabnote_stem_down_extension: 13, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Sixty-fourth rest + code_head: 'rest64th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -1.5, + line_above: 2.0, + line_below: 3.0, + }, + s: { + // Sixty-fourth slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 128: { + common: { + code_head: '', + beam_count: 5, + stem_beam_extension: 22.5, + stem: true, + flag: true, + code_flag_upstem: 'flag128thUp', + code_flag_downstem: 'flag128thDown', + stem_up_extension: 22, + stem_down_extension: 22, + tabnote_stem_up_extension: 22, + tabnote_stem_down_extension: 22, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Hundred-twenty-eight rest + code_head: 'rest128th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -2.5, + line_above: 3.0, + line_below: 3.0, + }, + s: { + // Hundred-twenty-eight slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, +}; + + +/***/ }), + +/***/ "./src/tabnote.ts": +/*!************************!*\ + !*** ./src/tabnote.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabNote": () => (/* binding */ TabNote) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// The file implements notes for Tablature notation. This consists of one or +// more fret positions, and can either be drawn with or without stems. +// +// See `tests/tabnote_tests.ts` for usage examples. + + + + + + + + +// Gets the unused strings grouped together if consecutive. +// +// Parameters: +// * num_lines - The number of lines +// * strings_used - An array of numbers representing which strings have fret positions +function getUnusedStringGroups(num_lines, strings_used) { + const stem_through = []; + let group = []; + for (let string = 1; string <= num_lines; string++) { + const is_used = strings_used.indexOf(string) > -1; + if (!is_used) { + group.push(string); + } + else { + stem_through.push(group); + group = []; + } + } + if (group.length > 0) + stem_through.push(group); + return stem_through; +} +// Gets groups of points that outline the partial stem lines +// between fret positions +// +// Parameters: +// * stem_Y - The `y` coordinate the stem is located on +// * unused_strings - An array of groups of unused strings +// * stave - The stave to use for reference +// * stem_direction - The direction of the stem +function getPartialStemLines(stem_y, unused_strings, stave, stem_direction) { + const up_stem = stem_direction !== 1; + const down_stem = stem_direction !== -1; + const line_spacing = stave.getSpacingBetweenLines(); + const total_lines = stave.getNumLines(); + const stem_lines = []; + unused_strings.forEach((strings) => { + const containsLastString = strings.indexOf(total_lines) > -1; + const containsFirstString = strings.indexOf(1) > -1; + if ((up_stem && containsFirstString) || (down_stem && containsLastString)) { + return; + } + // If there's only one string in the group, push a duplicate value. + // We do this because we need 2 strings to convert into upper/lower y + // values. + if (strings.length === 1) { + strings.push(strings[0]); + } + const line_ys = []; + // Iterate through each group string and store it's y position + strings.forEach((string, index, strings) => { + const isTopBound = string === 1; + const isBottomBound = string === total_lines; + // Get the y value for the appropriate staff line, + // we adjust for a 0 index array, since string numbers are index 1 + let y = stave.getYForLine(string - 1); + // Unless the string is the first or last, add padding to each side + // of the line + if (index === 0 && !isTopBound) { + y -= line_spacing / 2 - 1; + } + else if (index === strings.length - 1 && !isBottomBound) { + y += line_spacing / 2 - 1; + } + // Store the y value + line_ys.push(y); + // Store a subsequent y value connecting this group to the main + // stem above/below the stave if it's the top/bottom string + if (stem_direction === 1 && isTopBound) { + line_ys.push(stem_y - 2); + } + else if (stem_direction === -1 && isBottomBound) { + line_ys.push(stem_y + 2); + } + }); + // Add the sorted y values to the + stem_lines.push(line_ys.sort((a, b) => a - b)); + }); + return stem_lines; +} +class TabNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.TabNote; + } + // Initialize the TabNote with a `noteStruct` full of properties + // and whether to `draw_stem` when rendering the note + constructor(noteStruct, draw_stem = false) { + super(noteStruct); + this.glyphPropsArr = []; + // Return the number of the greatest string, which is the string lowest on the display + this.greatestString = () => { + return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b)); + }; + // Return the number of the least string, which is the string highest on the display + this.leastString = () => { + return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b)); + }; + this.ghost = false; // Renders parenthesis around notes + // Note properties + // The fret positions in the note. An array of `{ str: X, fret: X }` + this.positions = noteStruct.positions || []; + // Render Options + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // font size for note heads and rests + glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.TABLATURE_FONT_SCALE, + // Flag to draw a stem + draw_stem, + // Flag to draw dot modifiers + draw_dots: draw_stem, + // Flag to extend the main stem through the stave and fret positions + draw_stem_through_stave: false, + // vertical shift from stave line + y_shift: 0, + // normal glyph scale + scale: 1.0, + // default tablature font + font: `${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE}pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` }); + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType); + (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + this.buildStem(); + if (noteStruct.stem_direction) { + this.setStemDirection(noteStruct.stem_direction); + } + else { + this.setStemDirection(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); + } + // Renders parenthesis around notes + this.ghost = false; + this.updateWidth(); + } + reset() { + super.reset(); + if (this.stave) + this.setStave(this.stave); + return this; + } + // Set as ghost `TabNote`, surrounds the fret positions with parenthesis. + // Often used for indicating frets that are being bent to + setGhost(ghost) { + this.ghost = ghost; + this.updateWidth(); + return this; + } + // Determine if the note has a stem + hasStem() { + if (this.render_options.draw_stem) + return true; + return false; + } + // Get the default stem extension for the note + getStemExtension() { + const glyphProps = this.getGlyphProps(); + if (this.stem_extension_override != null) { + return this.stem_extension_override; + } + if (glyphProps) { + return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? glyphProps.tabnote_stem_up_extension + : glyphProps.tabnote_stem_down_extension; + } + return 0; + } + // Calculate and store the width of the note + updateWidth() { + this.glyphPropsArr = []; + this.width = 0; + for (let i = 0; i < this.positions.length; ++i) { + let fret = this.positions[i].fret; + if (this.ghost) + fret = '(' + fret + ')'; + const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.tabToGlyphProps(fret.toString(), this.render_options.scale); + this.glyphPropsArr.push(glyphProps); + this.width = Math.max(glyphProps.getWidth(), this.width); + } + // For some reason we associate a notehead glyph with a TabNote, and this + // glyph is used for certain width calculations. Of course, this is totally + // incorrect since a notehead is a poor approximation for the dimensions of + // a fret number which can have multiple digits. As a result, we must + // overwrite getWidth() to return the correct width + this.glyphProps.getWidth = () => this.width; + } + // Set the `stave` to the note + setStave(stave) { + super.setStave(stave); + const ctx = stave.getContext(); + this.setContext(ctx); + // Calculate the fret number width based on font used + if (ctx) { + this.width = 0; + for (let i = 0; i < this.glyphPropsArr.length; ++i) { + const glyphProps = this.glyphPropsArr[i]; + const text = '' + glyphProps.text; + if (text.toUpperCase() !== 'X') { + ctx.save(); + ctx.setFont(this.render_options.font); + glyphProps.width = ctx.measureText(text).width; + ctx.restore(); + glyphProps.getWidth = () => glyphProps.width; + } + this.width = Math.max(glyphProps.getWidth(), this.width); + } + this.glyphProps.getWidth = () => this.width; + } + // we subtract 1 from `line` because getYForLine expects a 0-based index, + // while the position.str is a 1-based index + const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1)); + this.setYs(ys); + if (this.stem) { + this.stem.setYBounds(this.getStemY(), this.getStemY()); + } + return this; + } + // Get the fret positions for the note + getPositions() { + return this.positions; + } + // Get the default `x` and `y` coordinates for a modifier at a specific + // `position` at a fret position `index` + getModifierStartXY(position, index) { + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); + } + let x = 0; + if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT) { + x = -1 * 2; // FIXME: modifier padding, move to font file + } + else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.RIGHT) { + x = this.width + 2; // FIXME: modifier padding, move to font file + } + else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.BELOW || position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE) { + const note_glyph_width = this.glyphProps.getWidth(); + x = note_glyph_width / 2; + } + return { + x: this.getAbsoluteX() + x, + y: this.ys[index], + }; + } + // Get the default line for rest + getLineForRest() { + return Number(this.positions[0].str); + } + // Pre-render formatting + preFormat() { + if (this.preFormatted) + return; + if (this.modifierContext) + this.modifierContext.preFormat(); + // width is already set during init() + this.preFormatted = true; + } + // Get the x position for the stem + getStemX() { + return this.getCenterGlyphX(); + } + // Get the y position for the stem + getStemY() { + const num_lines = this.checkStave().getNumLines(); + // The decimal staff line amounts provide optimal spacing between the + // fret number and the stem + const stemUpLine = -0.5; + const stemDownLine = num_lines - 0.5; + const stemStartLine = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP === this.stem_direction ? stemUpLine : stemDownLine; + return this.checkStave().getYForLine(stemStartLine); + } + // Get the stem extents for the tabnote + getStemExtents() { + return this.checkStem().getExtents(); + } + // Draw the fal onto the context + drawFlag() { + var _a; + const { beam, glyphProps, render_options: { draw_stem }, } = this; + const context = this.checkContext(); + const shouldDrawFlag = beam == undefined && draw_stem; + // Now it's the flag's turn. + if (glyphProps.flag && shouldDrawFlag) { + const flag_x = this.getStemX(); + const flag_y = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN + ? // Down stems are below the note head and have flags on the right. + this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0) + : // Up stems are above the note head and have flags on the right. + this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0); + // Draw the Flag + //this.flag?.setOptions({ category: 'flag.tabStem' }); + (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y); + //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' }); + } + } + // Render the modifiers onto the context. + drawModifiers() { + this.modifiers.forEach((modifier) => { + // Only draw the dots if enabled. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isDot)(modifier) && !this.render_options.draw_dots) { + return; + } + modifier.setContext(this.getContext()); + modifier.drawWithStyle(); + }); + } + // Render the stem extension through the fret positions + drawStemThrough() { + const stemX = this.getStemX(); + const stemY = this.getStemY(); + const ctx = this.checkContext(); + const drawStem = this.render_options.draw_stem; + const stemThrough = this.render_options.draw_stem_through_stave; + if (drawStem && stemThrough) { + const numLines = this.checkStave().getNumLines(); + const stringsUsed = this.positions.map((position) => Number(position.str)); + const unusedStrings = getUnusedStringGroups(numLines, stringsUsed); + const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection()); + ctx.save(); + ctx.setLineWidth(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH); + stemLines.forEach((bounds) => { + if (bounds.length === 0) + return; + ctx.beginPath(); + ctx.moveTo(stemX, bounds[0]); + ctx.lineTo(stemX, bounds[bounds.length - 1]); + ctx.stroke(); + ctx.closePath(); + }); + ctx.restore(); + } + } + // Render the fret positions onto the context + drawPositions() { + var _a; + const ctx = this.checkContext(); + const x = this.getAbsoluteX(); + const ys = this.ys; + for (let i = 0; i < this.positions.length; ++i) { + const y = ys[i] + this.render_options.y_shift; + const glyphProps = this.glyphPropsArr[i]; + // Center the fret text beneath the notation note head + const note_glyph_width = this.glyphProps.getWidth(); + const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2; + // FIXME: Magic numbers. + ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6); + if (glyphProps.code) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code); + } + else { + ctx.save(); + ctx.setFont(this.render_options.font); + const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : ''; + ctx.fillText(text, tab_x, y + 5 * this.render_options.scale); + ctx.restore(); + } + } + } + // The main rendering function for the entire note. + draw() { + const ctx = this.checkContext(); + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', "Can't draw note without Y values."); + } + this.setRendered(); + const render_stem = this.beam == undefined && this.render_options.draw_stem; + this.applyStyle(); + ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true }); + this.drawPositions(); + this.drawStemThrough(); + if (this.stem && render_stem) { + const stem_x = this.getStemX(); + this.stem.setNoteHeadXBounds(stem_x, stem_x); + this.stem.setContext(ctx).draw(); + } + this.drawFlag(); + this.drawModifiers(); + ctx.closeGroup(); + this.restoreStyle(); + } +} + + +/***/ }), + +/***/ "./src/tabslide.ts": +/*!*************************!*\ + !*** ./src/tabslide.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabSlide": () => (/* binding */ TabSlide) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// This class implements varies types of ties between contiguous notes. The +// ties include: regular ties, hammer ons, pull offs, and slides. + + + + +class TabSlide extends _tabtie__WEBPACK_IMPORTED_MODULE_1__.TabTie { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TabSlide; + } + static get SLIDE_UP() { + return 1; + } + static get SLIDE_DOWN() { + return -1; + } + static createSlideUp(notes) { + return new TabSlide(notes, TabSlide.SLIDE_UP); + } + static createSlideDown(notes) { + return new TabSlide(notes, TabSlide.SLIDE_DOWN); + } + /** + * @param notes is a struct of the form: + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * @param notes.first_note the starting note of the slide + * @param notes.last_note the ending note of the slide + * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed. + * @param notes.last_indices currently unused. we assume it's the same as first_indices. + * + * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN + */ + constructor(notes, direction) { + super(notes, 'sl.'); + // Determine the direction automatically if it is not provided. + if (!direction) { + let first_fret = notes.first_note.getPositions()[0].fret; + if (typeof first_fret === 'string') { + first_fret = parseInt(first_fret, 10); + } + let last_fret = notes.last_note.getPositions()[0].fret; + if (typeof last_fret === 'string') { + last_fret = parseInt(last_fret, 10); + } + // If either of the frets are 'X', parseInt() above will return NaN. + // Choose TabSlide.SLIDE_UP by default. + if (isNaN(first_fret) || isNaN(last_fret)) { + direction = TabSlide.SLIDE_UP; + } + else { + direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP; + } + } + this.direction = direction; + this.render_options.cp1 = 11; + this.render_options.cp2 = 14; + this.render_options.y_shift = 0.5; + this.resetFont(); + } + renderTie(params) { + if (params.first_ys.length === 0 || params.last_ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'No Y-values to render'); + } + const ctx = this.checkContext(); + const first_x_px = params.first_x_px; + const first_ys = params.first_ys; + const last_x_px = params.last_x_px; + const direction = params.direction; + if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadSlide', 'Invalid slide direction'); + } + // eslint-disable-next-line + const first_indices = this.notes.first_indices; + for (let i = 0; i < first_indices.length; ++i) { + const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift; + if (isNaN(slide_y)) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Bad indices for slide rendering.'); + } + ctx.beginPath(); + ctx.moveTo(first_x_px, slide_y + 3 * direction); + ctx.lineTo(last_x_px, slide_y - 3 * direction); + ctx.closePath(); + ctx.stroke(); + } + this.setRendered(); + } +} +TabSlide.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: 10, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC, +}; + + + +/***/ }), + +/***/ "./src/tabstave.ts": +/*!*************************!*\ + !*** ./src/tabstave.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabStave": () => (/* binding */ TabStave) +/* harmony export */ }); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + +class TabStave extends _stave__WEBPACK_IMPORTED_MODULE_0__.Stave { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabStave; + } + constructor(x, y, width, options) { + const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options); + super(x, y, width, tab_options); + } + getYForGlyphs() { + return this.getYForLine(2.5); + } + // Deprecated + addTabGlyph() { + this.addClef('tab'); + return this; + } +} + + +/***/ }), + +/***/ "./src/tabtie.ts": +/*!***********************!*\ + !*** ./src/tabtie.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabTie": () => (/* binding */ TabTie) +/* harmony export */ }); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// This class implements varies types of ties between contiguous notes. The +// ties include: regular ties, hammer ons, pull offs, and slides. + + +class TabTie extends _stavetie__WEBPACK_IMPORTED_MODULE_0__.StaveTie { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabTie; + } + static createHammeron(notes) { + return new TabTie(notes, 'H'); + } + static createPulloff(notes) { + return new TabTie(notes, 'P'); + } + /** + * @param notes is a struct that has: + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * + * @param text + */ + constructor(notes, text) { + super(notes, text); + this.render_options.cp1 = 9; + this.render_options.cp2 = 11; + this.render_options.y_shift = 3; + this.direction = -1; // Tab tie's are always face up. + } +} + + +/***/ }), + +/***/ "./src/textbracket.ts": +/*!****************************!*\ + !*** ./src/textbracket.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextBracket": () => (/* binding */ TextBracket), +/* harmony export */ "TextBracketPosition": () => (/* binding */ TextBracketPosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Cyril Silverman +// +// This file implements `TextBrackets` which extend between two notes. +// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created +// using this class. + + + + + + +// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (TextBracket.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.TextBracket', args); +} +var TextBracketPosition; +(function (TextBracketPosition) { + TextBracketPosition[TextBracketPosition["TOP"] = 1] = "TOP"; + TextBracketPosition[TextBracketPosition["BOTTOM"] = -1] = "BOTTOM"; +})(TextBracketPosition || (TextBracketPosition = {})); +class TextBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextBracket; + } + static get Position() { + return TextBracketPosition; + } + static get PositionString() { + return { + top: TextBracketPosition.TOP, + bottom: TextBracketPosition.BOTTOM, + }; + } + /** + * @deprecated Use `TextBracket.Position` instead. + */ + static get Positions() { + L('Positions is deprecated, use TextBracketPosition instead.'); + return TextBracketPosition; + } + /** + * @deprecated Use `TextBracket.PositionString` instead. + */ + static get PositionsString() { + L('PositionsString is deprecated, use PositionString instead.'); + return TextBracket.PositionString; + } + constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) { + super(); + this.start = start; + this.stop = stop; + this.text = text; + this.superscript = superscript; + this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position; + this.line = 1; + this.resetFont(); + this.render_options = { + dashed: true, + dash: [5], + color: 'black', + line_width: 1, + show_bracket: true, + bracket_height: 8, + // In the BOTTOM position, the bracket line can extend + // under the superscript. + underline_superscript: true, + }; + } + /** + * Apply the text backet styling to the provided context. + * @param ctx + * @returns this + */ + applyStyle(ctx) { + ctx.setFont(this.font); + const options = this.render_options; + ctx.setStrokeStyle(options.color); + ctx.setFillStyle(options.color); + ctx.setLineWidth(options.line_width); + return this; + } + // Set whether the bracket line should be `dashed`. You can also + // optionally set the `dash` pattern by passing in an array of numbers + setDashed(dashed, dash) { + this.render_options.dashed = dashed; + if (dash) + this.render_options.dash = dash; + return this; + } + // Set the rendering `context` for the octave bracket + setLine(line) { + this.line = line; + return this; + } + // Draw the octave bracket on the rendering context + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let y = 0; + switch (this.position) { + case TextBracketPosition.TOP: + y = this.start.checkStave().getYForTopText(this.line); + break; + case TextBracketPosition.BOTTOM: + y = this.start.checkStave().getYForBottomText(this.line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK); + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`); + } + // Get the preliminary start and stop coordintates for the bracket + const start = { x: this.start.getAbsoluteX(), y }; + const stop = { x: this.stop.getAbsoluteX(), y }; + L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y); + const bracket_height = this.render_options.bracket_height * this.position; + ctx.save(); + this.applyStyle(ctx); + // Draw text + ctx.fillText(this.text, start.x, start.y); + // Get the width and height for the octave number + const main_measure = ctx.measureText(this.text); + const main_width = main_measure.width; + const main_height = main_measure.height; + // Calculate the y position for the super script + const super_y = start.y - main_height / 2.5; + // We called this.resetFont() in the constructor, so we know this.textFont is available. + // eslint-disable-next-line + const { family, size, weight, style } = this.textFont; + // To draw the superscript, we scale the font size by 1/1.4. + const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_1__.Font.scaleSize(size, 0.714286); + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.superscript, start.x + main_width + 1, super_y); + // Determine width and height of the superscript + const super_measure = ctx.measureText(this.superscript); + const super_width = super_measure.width; + const super_height = super_measure.height; + // Setup initial coordinates for the bracket line + let start_x = start.x; + let line_y = super_y; + const end_x = stop.x + this.stop.getGlyphProps().getWidth(); + // Adjust x and y coordinates based on position + if (this.position === TextBracketPosition.TOP) { + start_x += main_width + super_width + 5; + line_y -= super_height / 2.7; + } + else if (this.position === TextBracketPosition.BOTTOM) { + line_y += super_height / 2.7; + start_x += main_width + 2; + if (!this.render_options.underline_superscript) { + start_x += super_width; + } + } + if (this.render_options.dashed) { + // Main line + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash); + // Ending Bracket + if (this.render_options.show_bracket) { + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash); + } + } + else { + ctx.beginPath(); + ctx.moveTo(start_x, line_y); + // Main line + ctx.lineTo(end_x, line_y); + if (this.render_options.show_bracket) { + // Ending bracket + ctx.lineTo(end_x, line_y + bracket_height); + } + ctx.stroke(); + ctx.closePath(); + } + ctx.restore(); + } +} +TextBracket.DEBUG = false; +TextBracket.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 15, + weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, +}; + + + +/***/ }), + +/***/ "./src/textdynamics.ts": +/*!*****************************!*\ + !*** ./src/textdynamics.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextDynamics": () => (/* binding */ TextDynamics) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +// eslint-disable-next-line +function L(...args) { + if (TextDynamics.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.TextDynamics', args); +} +/** + * `TextDynamics` renders traditional + * text dynamics markings, **ie: p, f, sfz, rfz, ppp** + * + * You can render any dynamics string that contains a combination of + * the following letters: P, M, F, Z, R, S + */ +class TextDynamics extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.TextDynamics; + } + /** The glyph data for each dynamics letter. */ + static get GLYPHS() { + return { + f: { + code: 'dynamicForte', + width: 12, + }, + p: { + code: 'dynamicPiano', + width: 14, + }, + m: { + code: 'dynamicMezzo', + width: 17, + }, + s: { + code: 'dynamicSforzando', + width: 10, + }, + z: { + code: 'dynamicZ', + width: 12, + }, + r: { + code: 'dynamicRinforzando', + width: 12, + }, + }; + } + /** + * Create the dynamics marking. + * + * A `TextDynamics` object inherits from `Note` so that it can be formatted + * within a `Voice`. + * + * @param noteStruct an object that contains a `duration` property and a + * `sequence` of letters that represents the letters to render. + */ + constructor(noteStruct) { + super(noteStruct); + this.sequence = (noteStruct.text || '').toLowerCase(); + this.line = noteStruct.line || 0; + this.glyphs = []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE }); + L('New Dynamics Text: ', this.sequence); + } + /** Set the Stave line on which the note should be placed. */ + setLine(line) { + this.line = line; + return this; + } + /** Preformat the dynamics text. */ + preFormat() { + let total_width = 0; + // length of this.glyphs must be <= + // length of this.sequence, so if we're formatted before + // create new glyphs. + this.glyphs = []; + // Iterate through each letter + this.sequence.split('').forEach((letter) => { + // Get the glyph data for the letter + const glyph_data = TextDynamics.GLYPHS[letter]; + if (!glyph_data) + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('Invalid dynamics character: ' + letter); + const size = (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.render_options.glyph_font_size); + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyph_data.code, size, { category: 'textNote' }); + // Add the glyph + this.glyphs.push(glyph); + total_width += glyph_data.width; + }); + // Store the width of the text + this.setWidth(total_width); + this.preFormatted = true; + return this; + } + /** Draw the dynamics text on the rendering context. */ + draw() { + this.setRendered(); + const x = this.getAbsoluteX(); + const y = this.checkStave().getYForLine(this.line + -3); + L('Rendering Dynamics: ', this.sequence); + let letter_x = x; + this.glyphs.forEach((glyph, index) => { + const current_letter = this.sequence[index]; + glyph.render(this.checkContext(), letter_x, y); + letter_x += TextDynamics.GLYPHS[current_letter].width; + }); + } +} +/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */ +TextDynamics.DEBUG = false; + + + +/***/ }), + +/***/ "./src/textformatter.ts": +/*!******************************!*\ + !*** ./src/textformatter.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextFormatter": () => (/* binding */ TextFormatter) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + +// eslint-disable-next-line +function L(...args) { + if (TextFormatter.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)('Vex.Flow.TextFormatter', args); +} +/** + * Text widths are stored in a cache, so we don't have to recompute widths + * for the same font + string combination. + * + * The cache is first keyed by the font information. The key is of the form: + * `${family}-${size}-${weight}-${style}` + * The second level key is the specific text to be measured. + * + * The stored value is the measured width in `em` units. + * textWidth == textWidthCache[cacheKey][textToMeasure] + */ +const textWidthCache = {}; +const textHeightCache = {}; +/** + * Applications may register additional fonts via `TextFormatter.registerInfo(info)`. + * The metrics for those fonts will be made available to the application. + */ +const registry = {}; +class TextFormatter { + /** + * Return all registered font families. + */ + static getFontFamilies() { + const registeredFonts = []; + for (const fontFamily in registry) { + const formatterInfo = registry[fontFamily]; + registeredFonts.push(Object.assign({}, formatterInfo)); + } + return registeredFonts; + } + /** + * Call `TextFormatter.registerInfo(info)` to register font information before using this method. + * + * This method creates a formatter for the font that most closely matches the requested font. + * We compare font family, bold, and italic attributes. + * This method will return a fallback formatter if there are no matches. + */ + static create(requestedFont = {}) { + L('create: ', requestedFont); + if (!requestedFont.family) { + requestedFont.family = _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF; + } + // TODO: One potential (small) optimization is to cache the TextFormatter object + // returned for each font info. We would probably want to clear the cache if + // the registry is ever updated. + const candidates = []; + // The incoming font family is a string of comma-separated font family names. + // (e.g., `PetalumaScript, Arial, sans-serif`). + const requestedFamilies = requestedFont.family.split(/\s*,\s*/); + for (const requestedFamily of requestedFamilies) { + for (const fontFamily in registry) { + // Support cases where the registry contains 'Roboto Slab Medium', + // but the requestedFont.family is 'Roboto Slab'. + if (fontFamily.startsWith(requestedFamily)) { + candidates.push(registry[fontFamily]); + } + } + if (candidates.length > 0) { + break; + } + } + let formatter; + if (candidates.length === 0) { + // No match, so return a fallback text formatter. + formatter = new TextFormatter(Object.values(registry)[0]); + } + else if (candidates.length === 1) { + formatter = new TextFormatter(candidates[0]); + } + else { + const bold = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isBold(requestedFont.weight); + const italic = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isItalic(requestedFont.style); + const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic); + if (perfectMatch) { + formatter = new TextFormatter(perfectMatch); + } + else { + const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold); + if (partialMatch) { + formatter = new TextFormatter(partialMatch); + } + else { + formatter = new TextFormatter(candidates[0]); + } + } + } + const fontSize = requestedFont.size; + if (typeof fontSize !== 'undefined') { + const fontSizeInPt = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(fontSize); + formatter.setFontSize(fontSizeInPt); + } + return formatter; + } + /** + * @param fontFamily used as a key to the font registry. + * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)` + */ + static getInfo(fontFamily) { + return registry[fontFamily]; + } + /** + * Apps may register their own fonts and metrics, and those metrics + * will be available to the app for formatting. + * + * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory. + * @param info + * @param overwrite + */ + static registerInfo(info, overwrite = false) { + L('registerInfo: ', info, overwrite); + const fontFamily = info.family; + const currFontInfo = registry[fontFamily]; + if (currFontInfo === undefined || overwrite) { + registry[fontFamily] = info; + } + } + /** + * Use `TextFormatter.create(...)` to build an instance from information previously + * registered via `TextFormatter.registerInfo(info)`. + */ + constructor(formatterInfo) { + /** Font family. */ + this.family = ''; + /** Specified in `pt` units. */ + this.size = 14; + /** Font metrics are extracted at 1000 upem (units per em). */ + this.resolution = 1000; + /** + * For text formatting, we do not require glyph outlines, but instead rely on glyph + * bounding box metrics such as: + * ``` + * { + * x_min: 48, + * x_max: 235, + * y_min: -17, + * y_max: 734, + * ha: 751, + * leftSideBearing: 48, + * advanceWidth: 286, + * } + * ``` + */ + this.glyphs = {}; + this.serifs = false; + this.monospaced = false; + this.italic = false; + this.bold = false; + this.superscriptOffset = 0; + this.subscriptOffset = 0; + this.maxSizeGlyph = '@'; + // This is an internal key used to index the `textWidthCache`. + this.cacheKey = ''; + this.updateParams(formatterInfo); + } + get localHeightCache() { + var _a; + if (textHeightCache[this.cacheKey] === undefined) { + textHeightCache[this.cacheKey] = {}; + } + return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {}; + } + updateParams(params) { + if (params.family) + this.family = params.family; + if (params.resolution) + this.resolution = params.resolution; + if (params.glyphs) + this.glyphs = params.glyphs; + if (params.serifs) + this.serifs = params.serifs; + if (params.monospaced) + this.monospaced = params.monospaced; + if (params.italic) + this.italic = params.italic; + if (params.bold) + this.bold = params.bold; + if (params.maxSizeGlyph) + this.maxSizeGlyph = params.maxSizeGlyph; + if (params.superscriptOffset) + this.superscriptOffset = params.superscriptOffset; + if (params.subscriptOffset) + this.subscriptOffset = params.subscriptOffset; + this.updateCacheKey(); + } + /** Create a hash with the current font data, so we can cache computed widths. */ + updateCacheKey() { + const family = this.family.replace(/\s+/g, '_'); + const size = this.size; + const weight = this.bold ? _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD : _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL; + const style = this.italic ? _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC : _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL; + // Use the same key format as SVGContext. + this.cacheKey = `${family}%${size}%${weight}%${style}`; + } + /** + * The glyphs table is indexed by the character (e.g., 'C', '@'). + * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts. + */ + getGlyphMetrics(character) { + if (this.glyphs[character]) { + return this.glyphs[character]; + } + else { + return this.glyphs[this.maxSizeGlyph]; + } + } + get maxHeight() { + const metrics = this.getGlyphMetrics(this.maxSizeGlyph); + return (metrics.ha / this.resolution) * this.fontSizeInPixels; + } + /** + * Retrieve the character's advanceWidth as a fraction of an `em` unit. + * For the space character ' ' as defined in the: + * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25. + * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485. + */ + getWidthForCharacterInEm(c) { + var _a; + const metrics = this.getGlyphMetrics(c); + if (!metrics) { + // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript. + return 0.65; + } + else { + const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0; + return advanceWidth / this.resolution; + } + } + /** + * Retrieve the character's y bounds (ymin, ymax) and height. + */ + getYForCharacterInPx(c) { + const metrics = this.getGlyphMetrics(c); + const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; + if (!metrics) { + return rv; + } + else { + if (typeof metrics.y_min === 'number') { + rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels; + } + if (typeof metrics.y_max === 'number') { + rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels; + } + rv.height = rv.yMax - rv.yMin; + return rv; + } + } + getYForStringInPx(str) { + const entry = this.localHeightCache; + const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; + const cache = entry[str]; + if (cache !== undefined) { + return cache; + } + for (let i = 0; i < str.length; ++i) { + const curY = this.getYForCharacterInPx(str[i]); + extent.yMin = Math.min(extent.yMin, curY.yMin); + extent.yMax = Math.max(extent.yMax, curY.yMax); + extent.height = extent.yMax - extent.yMin; + } + entry[str] = extent; + return extent; + } + /** + * Retrieve the total width of `text` in `em` units. + */ + getWidthForTextInEm(text) { + const key = this.cacheKey; + // Get the cache for this specific font family, size, weight, style combination. + // The cache contains previously computed widths for different `text` strings. + let cachedWidths = textWidthCache[key]; + if (cachedWidths === undefined) { + cachedWidths = {}; + textWidthCache[key] = cachedWidths; + } + let width = cachedWidths[text]; + if (width === undefined) { + width = 0; + for (let i = 0; i < text.length; ++i) { + width += this.getWidthForCharacterInEm(text[i]); + } + cachedWidths[text] = width; + } + return width; + } + /** The width of the text (in `em`) is scaled by the font size (in `px`). */ + getWidthForTextInPx(text) { + return this.getWidthForTextInEm(text) * this.fontSizeInPixels; + } + /** + * @param size in pt. + */ + setFontSize(size) { + this.size = size; + // The width cache key depends on the current font size. + this.updateCacheKey(); + return this; + } + /** `this.size` is specified in points. Convert to pixels. */ + get fontSizeInPixels() { + return this.size * _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleToPxFrom.pt; + } + getResolution() { + return this.resolution; + } +} +/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */ +TextFormatter.DEBUG = false; + + + +/***/ }), + +/***/ "./src/textnote.ts": +/*!*************************!*\ + !*** ./src/textnote.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextJustification": () => (/* binding */ TextJustification), +/* harmony export */ "TextNote": () => (/* binding */ TextNote) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +var TextJustification; +(function (TextJustification) { + TextJustification[TextJustification["LEFT"] = 1] = "LEFT"; + TextJustification[TextJustification["CENTER"] = 2] = "CENTER"; + TextJustification[TextJustification["RIGHT"] = 3] = "RIGHT"; +})(TextJustification || (TextJustification = {})); +/** + * `TextNote` is a notation element that is positioned in time. Generally + * meant for objects that sit above/below the staff and inline with each other. + * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. + * Examples of this would be such as dynamics, lyrics, chord changes, etc. + */ +class TextNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextNote; + } + /** Glyph data. */ + static get GLYPHS() { + return { + segno: { + code: 'segno', + }, + tr: { + code: 'ornamentTrill', + }, + mordent: { + code: 'ornamentMordent', + }, + mordent_upper: { + code: 'ornamentShortTrill', + }, + mordent_lower: { + code: 'ornamentMordent', + }, + f: { + code: 'dynamicForte', + }, + p: { + code: 'dynamicPiano', + }, + m: { + code: 'dynamicMezzo', + }, + s: { + code: 'dynamicSforzando', + }, + z: { + code: 'dynamicZ', + }, + coda: { + code: 'coda', + }, + pedal_open: { + code: 'keyboardPedalPed', + }, + pedal_close: { + code: 'keyboardPedalUp', + }, + caesura_straight: { + code: 'caesura', + }, + caesura_curved: { + code: 'caesuraCurved', + }, + breath: { + code: 'breathMarkComma', + }, + tick: { + code: 'breathMarkTick', + }, + turn: { + code: 'ornamentTurn', + }, + turn_inverted: { + code: 'ornamentTurnSlash', + }, + }; + } + constructor(noteStruct) { + super(noteStruct); + this.text = noteStruct.text || ''; + this.superscript = noteStruct.superscript; + this.subscript = noteStruct.subscript; + this.setFont(noteStruct.font); + this.line = noteStruct.line || 0; + this.smooth = noteStruct.smooth || false; + this.ignore_ticks = noteStruct.ignore_ticks || false; + this.justification = TextJustification.LEFT; + // Determine and set initial note width. Note that the text width is + // an approximation and isn't very accurate. The only way to accurately + // measure the length of text is with `CanvasRenderingContext2D.measureText()`. + if (noteStruct.glyph) { + const struct = TextNote.GLYPHS[noteStruct.glyph]; + if (!struct) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Invalid glyph type: ' + noteStruct.glyph); + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(struct.code, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, { category: 'textNote' }); + this.setWidth(this.glyph.getMetrics().width); + } + else { + this.glyph = undefined; + } + } + /** Set the horizontal justification of the TextNote. */ + setJustification(just) { + this.justification = just; + return this; + } + /** Set the Stave line on which the note should be placed. */ + setLine(line) { + this.line = line; + return this; + } + /** Return the Stave line on which the TextNote is placed. */ + getLine() { + return this.line; + } + /** Return the unformatted text of this TextNote. */ + getText() { + return this.text; + } + /** Pre-render formatting. */ + preFormat() { + if (this.preFormatted) + return; + const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`); + if (this.smooth) { + this.setWidth(0); + } + else { + if (this.glyph) { + // Width already set. + } + else { + const ctx = this.checkContext(); + ctx.setFont(this.textFont); + this.setWidth(ctx.measureText(this.text).width); + } + } + if (this.justification === TextJustification.CENTER) { + this.leftDisplacedHeadPx = this.width / 2; + } + else if (this.justification === TextJustification.RIGHT) { + this.leftDisplacedHeadPx = this.width; + } + // We reposition to the center of the note head + this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2; + this.preFormatted = true; + } + /** + * Renders the TextNote. + * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. + */ + draw() { + const ctx = this.checkContext(); + const stave = this.checkStave(); + const tickContext = this.checkTickContext(`Can't draw without a TickContext.`); + this.setRendered(); + // Reposition to center of note head + let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2; + // Align based on tick-context width. + const width = this.getWidth(); + if (this.justification === TextJustification.CENTER) { + x -= width / 2; + } + else if (this.justification === TextJustification.RIGHT) { + x -= width; + } + let y; + if (this.glyph) { + y = stave.getYForLine(this.line + -3); + this.glyph.render(ctx, x, y); + } + else { + y = stave.getYForLine(this.line + -3); + this.applyStyle(ctx); + ctx.setFont(this.textFont); + ctx.fillText(this.text, x, y); + const height = ctx.measureText(this.text).height; + // We called this.setFont(...) in the constructor, so we know this.textFont is available. + // eslint-disable-next-line + const { family, size, weight, style } = this.textFont; + // Scale the font size by 1/1.3. + const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, 0.769231); + if (this.superscript) { + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2); + } + if (this.subscript) { + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1); + } + this.restoreStyle(ctx); + } + } +} +TextNote.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 12, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; +TextNote.Justification = TextJustification; + + + +/***/ }), + +/***/ "./src/tickable.ts": +/*!*************************!*\ + !*** ./src/tickable.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tickable": () => (/* binding */ Tickable) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +/** + * Tickable represents a element that sit on a score and + * has a duration, i.e., Tickables occupy space in the musical rendering dimension. + */ +class Tickable extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Tickable; + } + constructor() { + super(); + this._preFormatted = false; + this._postFormatted = false; + // These properties represent the duration of + // this tickable element. + this.ticks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); // Fractional value of ticks + this.intrinsicTicks = 0; // Floating point value of ticks + this.tickMultiplier = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 1); + // Formatter metrics + this.width = 0; + this.x_shift = 0; // Shift from tick context + this.modifiers = []; + this.tupletStack = []; + this.align_center = false; + this.center_x_shift = 0; // Shift from tick context if center aligned + // This flag tells the formatter to ignore this tickable during + // formatting and justification. It is set by tickables such as BarNote. + this.ignore_ticks = false; + // This is a space for an external formatting class or function to maintain + // metrics. + this.formatterMetrics = { + // The freedom of a tickable is the distance it can move without colliding + // with neighboring elements. A formatter can set these values during its + // formatting pass, which a different formatter can then use to fine tune. + freedom: { left: 0, right: 0 }, + // The simplified rational duration of this tick as a string. It can be + // used as an index to a map or hashtable. + duration: '', + // The number of formatting iterations undergone. + iterations: 0, + // The space in pixels allocated by this formatter, along with the mean space + // for tickables of this duration, and the deviation from the mean. + space: { + used: 0, + mean: 0, + deviation: 0, + }, + }; + } + /** Reset the Tickable, this function will be overloaded. */ + reset() { + return this; + } + /** Return the ticks. */ + getTicks() { + return this.ticks; + } + /** Check if it ignores the ticks. */ + shouldIgnoreTicks() { + return this.ignore_ticks; + } + /** Ignore the ticks. */ + setIgnoreTicks(flag) { + this.ignore_ticks = flag; + return this; + } + /** Set width of note. Used by the formatter for positioning. */ + setWidth(width) { + this.width = width; + } + /** Get width of note. Used by the formatter for positioning. */ + getWidth() { + if (!this._preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('UnformattedNote', "Can't call GetWidth on an unformatted note."); + } + return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0); + } + /** Displace note by `x` pixels. Used by the formatter. */ + setXShift(x) { + this.x_shift = x; + return this; + } + /** Get the `x` displaced pixels of the note. */ + getXShift() { + return this.x_shift; + } + /** Get `x` position of this tick context. */ + getX() { + const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`); + return tickContext.getX() + this.x_shift; + } + /** Return the formatterMetrics. */ + getFormatterMetrics() { + return this.formatterMetrics; + } + /** Return the center `x` shift. */ + getCenterXShift() { + if (this.isCenterAligned()) { + return this.center_x_shift; + } + return 0; + } + /** Set the center `x` shift. */ + setCenterXShift(centerXShift) { + this.center_x_shift = centerXShift; + return this; + } + // Check if tickable is center aligned. */ + isCenterAligned() { + return this.align_center; + } + // Set/unset center alignment. */ + setCenterAlignment(align_center) { + this.align_center = align_center; + return this; + } + /** + * Return the associated voice. Every tickable must be associated with a voice. + * This allows formatters and preFormatter to associate them with the right modifierContexts. + */ + getVoice() { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.voice, 'NoVoice', 'Tickable has no voice.'); + } + /** Set the associated voice. */ + setVoice(voice) { + this.voice = voice; + } + /** Get the tuplet. */ + getTuplet() { + return this.tuplet; + } + /** Return a list of Tuplets. */ + getTupletStack() { + return this.tupletStack; + } + /** + * Reset the specific Tuplet (if this is not provided, all tuplets are reset). + * Remove any prior tuplets from the tick calculation and + * reset the intrinsic tick value. + */ + resetTuplet(tuplet) { + let noteCount; + let notesOccupied; + if (tuplet) { + const i = this.tupletStack.indexOf(tuplet); + if (i !== -1) { + this.tupletStack.splice(i, 1); + noteCount = tuplet.getNoteCount(); + notesOccupied = tuplet.getNotesOccupied(); + // Revert old multiplier by inverting numerator & denom.: + this.applyTickMultiplier(noteCount, notesOccupied); + } + return this; + } + while (this.tupletStack.length) { + tuplet = this.tupletStack.pop(); + noteCount = tuplet.getNoteCount(); + notesOccupied = tuplet.getNotesOccupied(); + // Revert old multiplier by inverting numerator & denom.: + this.applyTickMultiplier(noteCount, notesOccupied); + } + return this; + } + /** Attach to new tuplet. */ + setTuplet(tuplet) { + if (tuplet) { + this.tupletStack.push(tuplet); + const noteCount = tuplet.getNoteCount(); + const notesOccupied = tuplet.getNotesOccupied(); + this.applyTickMultiplier(notesOccupied, noteCount); + } + this.tuplet = tuplet; + return this; + } + /** + * Add self to the provided ModifierContext `mc`. + * If this tickable has modifiers, set modifierContext. + * @returns this + */ + addToModifierContext(mc) { + this.modifierContext = mc; + for (let i = 0; i < this.modifiers.length; ++i) { + this.modifierContext.addMember(this.modifiers[i]); + } + this.modifierContext.addMember(this); + this._preFormatted = false; + return this; + } + /** + * Optional, if tickable has modifiers, associate a Modifier. + * @param mod the modifier + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + addModifier(modifier, index = 0) { + this.modifiers.push(modifier); + this._preFormatted = false; + return this; + } + /** Get the list of associated modifiers. */ + getModifiers() { + return this.modifiers; + } + /** Set the Tick Context. */ + setTickContext(tc) { + this.tickContext = tc; + this._preFormatted = false; + } + checkTickContext(message = 'Tickable has no tick context.') { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.tickContext, 'NoTickContext', message); + } + /** Preformat the Tickable. */ + preFormat() { + if (this._preFormatted) + return; + this.width = 0; + if (this.modifierContext) { + this.modifierContext.preFormat(); + this.width += this.modifierContext.getWidth(); + } + } + /** Set preformatted status. */ + set preFormatted(value) { + this._preFormatted = value; + } + get preFormatted() { + return this._preFormatted; + } + /** Postformat the Tickable. */ + postFormat() { + if (this._postFormatted) + return this; + this._postFormatted = true; + return this; + } + /** Set postformatted status. */ + set postFormatted(value) { + this._postFormatted = value; + } + get postFormatted() { + return this._postFormatted; + } + /** Return the intrinsic ticks. */ + getIntrinsicTicks() { + return this.intrinsicTicks; + } + /** Set the intrinsic ticks. */ + setIntrinsicTicks(intrinsicTicks) { + this.intrinsicTicks = intrinsicTicks; + this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); + } + /** Get the tick multiplier. */ + getTickMultiplier() { + return this.tickMultiplier; + } + /** Apply a tick multiplier. */ + applyTickMultiplier(numerator, denominator) { + this.tickMultiplier.multiply(numerator, denominator); + this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); + } + /** Set the duration. */ + setDuration(duration) { + const ticks = duration.numerator * (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION / duration.denominator); + this.ticks = this.tickMultiplier.clone().multiply(ticks); + this.intrinsicTicks = this.ticks.value(); + } + getAbsoluteX() { + const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); + return tickContext.getX(); + } + /** Attach this note to a modifier context. */ + setModifierContext(mc) { + this.modifierContext = mc; + return this; + } + /** Get `ModifierContext`. */ + getModifierContext() { + return this.modifierContext; + } + /** Check and get `ModifierContext`. */ + checkModifierContext() { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.'); + } +} + + +/***/ }), + +/***/ "./src/tickcontext.ts": +/*!****************************!*\ + !*** ./src/tickcontext.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TickContext": () => (/* binding */ TickContext) +/* harmony export */ }); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// A formatter for abstract tickable objects, such as notes, chords, +// tabs, etc. + + +/** + * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc. + */ +class TickContext { + static getNextContext(tContext) { + const contexts = tContext.tContexts; + const index = contexts.indexOf(tContext); + if (index + 1 < contexts.length) + return contexts[index + 1]; + } + constructor(options) { + this.preFormatted = false; + this.postFormatted = false; + this.tickID = options && options.tickID ? options.tickID : 0; + this.currentTick = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); + this.maxTicks = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); + this.maxTickable = undefined; // Biggest tickable + this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks + this.minTickable = undefined; + this.padding = 1; // padding on each side (width += padding * 2) + this.x = 0; + this.xBase = 0; // base x position without xOffset + this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO) + this.tickables = []; // Notes, tabs, chords, lyrics. + this.tickablesByVoice = {}; // Tickables indexed by voice number + // Formatting metrics + this.notePx = 0; // width of widest note in this context + this.glyphPx = 0; // width of glyph (note head) + this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes + this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes + this.modLeftPx = 0; // Left modifier pixels + this.modRightPx = 0; // Right modifier pixels + this.totalLeftPx = 0; // Total left pixels + this.totalRightPx = 0; // Total right pixels + this.tContexts = []; // Parent array of tick contexts + this.width = 0; + this.formatterMetrics = { + // The freedom of a tickcontext is the distance it can move without colliding + // with neighboring elements. A formatter can set these values during its + // formatting pass, which a different formatter can then use to fine tune. + freedom: { left: 0, right: 0 }, + }; + } + getTickID() { + return this.tickID; + } + getX() { + return this.x; + } + setX(x) { + this.x = x; + this.xBase = x; + this.xOffset = 0; + return this; + } + getXBase() { + return this.xBase; + } // use of xBase and xOffset is optional, avoids offset creep + setXBase(xBase) { + this.xBase = xBase; + this.x = xBase + this.xOffset; + } + getXOffset() { + return this.xOffset; + } + setXOffset(xOffset) { + this.xOffset = xOffset; + this.x = this.xBase + xOffset; + } + getWidth() { + return this.width + this.padding * 2; + } + setPadding(padding) { + this.padding = padding; + return this; + } + getMaxTicks() { + return this.maxTicks; + } + getMinTicks() { + return this.minTicks; + } + getMaxTickable() { + return this.maxTickable; + } + getMinTickable() { + return this.minTickable; + } + getTickables() { + return this.tickables; + } + /** + * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex). + * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63 + * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable. + */ + getTickableForVoice(voiceIndex) { + return this.tickablesByVoice[voiceIndex]; + } + getTickablesByVoice() { + return this.tickablesByVoice; + } + getCenterAlignedTickables() { + return this.tickables.filter((tickable) => tickable.isCenterAligned()); + } + /** Gets widths context, note and left/right modifiers for formatting. */ + getMetrics() { + const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this; + return { + width, + glyphPx, + notePx, + leftDisplacedHeadPx, + rightDisplacedHeadPx, + modLeftPx, + modRightPx, + totalLeftPx, + totalRightPx, + }; + } + getCurrentTick() { + return this.currentTick; + } + setCurrentTick(tick) { + this.currentTick = tick; + this.preFormatted = false; + } + addTickable(tickable, voiceIndex) { + if (!tickable) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid tickable added.'); + } + if (!tickable.shouldIgnoreTicks()) { + const ticks = tickable.getTicks(); + if (ticks.greaterThan(this.maxTicks)) { + this.maxTicks = ticks.clone(); + this.maxTickable = tickable; + } + if (this.minTicks == null) { + this.minTicks = ticks.clone(); + this.minTickable = tickable; + } + else if (ticks.lessThan(this.minTicks)) { + this.minTicks = ticks.clone(); + this.minTickable = tickable; + } + } + tickable.setTickContext(this); + this.tickables.push(tickable); + this.tickablesByVoice[voiceIndex || 0] = tickable; + this.preFormatted = false; + return this; + } + preFormat() { + if (this.preFormatted) + return this; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + tickable.preFormat(); + const metrics = tickable.getMetrics(); + // Maintain max displaced head pixels from all tickables in the context + this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx); + this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx); + // Maintain the widest note for all tickables in the context + this.notePx = Math.max(this.notePx, metrics.notePx); + // Maintain the widest note head + this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0); + // Total modifier shift + this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx); + this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx); + // Total shift + this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx); + this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx); + // Recalculate the tick context total width + this.width = this.notePx + this.totalLeftPx + this.totalRightPx; + } + return this; + } + postFormat() { + if (this.postFormatted) + return this; + this.postFormatted = true; + return this; + } + getFormatterMetrics() { + return this.formatterMetrics; + } +} + + +/***/ }), + +/***/ "./src/timesigglyph.ts": +/*!*****************************!*\ + !*** ./src/timesigglyph.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSignatureGlyph": () => (/* binding */ TimeSignatureGlyph) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// Renders time signatures glyphs for staffs +// This class is used by TimeSignature to render the associated glyphs + + +class TimeSignatureGlyph extends _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph { + constructor(timeSignature, topDigits, botDigits, code, point, options) { + var _a; + super(code, point, options); + this.timeSignature = timeSignature; + this.topGlyphs = []; + this.botGlyphs = []; + let topWidth = 0; + let height = 0; + for (let i = 0; i < topDigits.length; ++i) { + let timeSigType = topDigits[i]; + switch (topDigits[i]) { + case '-': + timeSigType = 'Minus'; + break; + case '+': + timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus'; + break; + case '(': + timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft'; + break; + case ')': + timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight'; + break; + } + const topGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point); + this.topGlyphs.push(topGlyph); + topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0; + height = Math.max(height, topGlyph.getMetrics().height); + } + let botWidth = 0; + for (let i = 0; i < botDigits.length; ++i) { + let timeSigType = botDigits[i]; + switch (botDigits[i]) { + case '+': + timeSigType = 'PlusSmall'; + break; + case '(': + timeSigType = 'ParensLeftSmall'; + break; + case ')': + timeSigType = 'ParensRightSmall'; + break; + } + const botGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point); + this.botGlyphs.push(botGlyph); + botWidth += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(botGlyph.getMetrics().width); + height = Math.max(height, botGlyph.getMetrics().height); + } + // If the height of the digits is more than two staff spaces (20), shift to the next line + // in order to center the digits on lines 1 and 5 rather than 2 and 4. + this.lineShift = height > 22 ? 1 : 0; + this.width = Math.max(topWidth, botWidth); + this.xMin = this.getMetrics().x_min; + this.topStartX = (this.width - topWidth) / 2.0; + this.botStartX = (this.width - botWidth) / 2.0; + this.reset(); + } + getMetrics() { + return { + x_min: this.xMin, + x_max: this.xMin + this.width, + width: this.width, + }; + } + renderToStave(x) { + const stave = this.checkStave(); + const ctx = this.checkContext(); + let start_x = x + this.topStartX; + let y = 0; + if (this.botGlyphs.length > 0) + y = stave.getYForLine(this.timeSignature.topLine - this.lineShift); + else + y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2; + for (let i = 0; i < this.topGlyphs.length; ++i) { + const glyph = this.topGlyphs[i]; + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y); + start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width); + } + start_x = x + this.botStartX; + y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift); + for (let i = 0; i < this.botGlyphs.length; ++i) { + const glyph = this.botGlyphs[i]; + this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine()); + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y); + start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width); + } + } +} + + +/***/ }), + +/***/ "./src/timesignature.ts": +/*!******************************!*\ + !*** ./src/timesignature.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSignature": () => (/* binding */ TimeSignature) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// Implements time signatures glyphs for staffs +// See tables.js for the internal time signatures +// representation + + + + + + +const assertIsValidTimeSig = (timeSpec) => { + const numbers = timeSpec.split('/'); + if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form "/"`); + } + numbers.forEach((number) => { + // Characters consisting in number 0..9, '+', '-', '(' or ')' + if (/^[0-9+\-()]+$/.test(number) == false) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`); + } + }); +}; +/** + * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from + * a provided "timeSpec" such as "4/4", "C|" (cut time), or even something more advanced + * such as "3/4(6/8)" or "2/4+5/8". + */ +class TimeSignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TimeSignature; + } + static get glyphs() { + return { + C: { + code: 'timeSigCommon', + line: 2, + }, + 'C|': { + code: 'timeSigCutCommon', + line: 2, + }, + }; + } + constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) { + super(); + this.timeSpec = '4/4'; + this.line = 0; + this.is_numeric = true; + this.validate_args = validate_args; + const padding = customPadding; + // point must be defined before parsing spec. + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont(); + this.point = musicFont.lookupMetric('digits.point') || _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; + const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); + this.topLine = 2 + fontLineShift; + this.bottomLine = 4 + fontLineShift; + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); + this.setTimeSig(timeSpec); + this.setPadding(padding); + } + /** + * Return TimeSignatureInfo given a string, consisting of line (number), + * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or + * TimeSignatureGlyph object). + */ + parseTimeSpec(timeSpec) { + var _a, _b; + if (timeSpec === 'C' || timeSpec === 'C|') { + const { line, code } = TimeSignature.glyphs[timeSpec]; + return { + line, + num: false, + glyph: new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE), + }; + } + if (this.validate_args) { + assertIsValidTimeSig(timeSpec); + } + const parts = timeSpec.split('/'); + return { + line: 0, + num: true, + glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''), + }; + } + /** + * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both + * top and bottom digits along with plus signs etc.) + */ + makeTimeSignatureGlyph(topDigits, botDigits) { + // note that 'code' is ignored by TimeSignatureGlyph when rendering. + return new _timesigglyph__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point); + } + /** + * Returns {line, num (=getIsNumeric), glyph} -- + * but these can also be accessed directly w/ getters and setters. + */ + getInfo() { + const { line, is_numeric, glyph } = this; + return { line, num: is_numeric, glyph }; + } + /** + * Set a new time signature specification without changing customPadding, etc. + * + * The getter for this is `getTimeSpec` not `getTimeSig`. + */ + setTimeSig(timeSpec) { + this.timeSpec = timeSpec; + const info = this.parseTimeSpec(timeSpec); + this.setGlyph(info.glyph); + this.is_numeric = info.num; + this.line = info.line; + return this; + } + /** + * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature + */ + getTimeSpec() { + return this.timeSpec; + } + /** + * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/ + * denominator time signatures such as 3/4 and 2 for cut/common. + */ + getLine() { + return this.line; + } + /** + * Set the line number that the TimeSignature sits on. Half-values are acceptable + * for spaces, etc. Can be altered, for instance, for signatures that sit above the + * staff in large orchestral scores. + */ + setLine(line) { + this.line = line; + } + /** + * Get the Glyph object used to create the time signature. Numeric time signatures + * such as 3/8 have a composite Glyph stored as a single Glyph object. + */ + getGlyph() { + return this.glyph; + } + /** + * Set the Glyph object used to draw the time signature, and update the width of the + * TimeSignature to match. The Glyph must define width in its metrics. + */ + setGlyph(glyph) { + this.glyph = glyph; + this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width)); + } + /** + * Return a boolean on whether this TimeSignature is drawn with one or more numbers + * (such as 4/4) or not (as in cut time). + */ + getIsNumeric() { + return this.is_numeric; + } + /** + * Set whether this TimeSignature is drawn with one or more numbers. + */ + setIsNumeric(isNumeric) { + this.is_numeric = isNumeric; + } + /** + * Draw the time signature on a Stave using its RenderContext. Both setStave + * and setContext must already be run. + */ + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('timesignature', this.getAttribute('id')); + this.glyph.setStave(stave); + this.glyph.setContext(ctx); + this.placeGlyphOnLine(this.glyph, stave, this.line); + this.glyph.renderToStave(this.x); + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} + + +/***/ }), + +/***/ "./src/timesignote.ts": +/*!****************************!*\ + !*** ./src/timesignote.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSigNote": () => (/* binding */ TimeSigNote) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2014 + + + +class TimeSigNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TimeSigNote; + } + constructor(timeSpec, customPadding) { + super({ duration: 'b' }); + this.timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_1__.TimeSignature(timeSpec, customPadding); + this.setWidth(this.timeSig.getGlyph().getMetrics().width); + // Note properties + this.ignore_ticks = true; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + const stave = this.checkStave(); + const ctx = this.checkContext(); + this.setRendered(); + const tsGlyph = this.timeSig.getGlyph(); + if (!tsGlyph.getContext()) { + tsGlyph.setContext(ctx); + } + tsGlyph.setStave(stave); + tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs()); + tsGlyph.renderToStave(this.getAbsoluteX()); + } +} + + +/***/ }), + +/***/ "./src/tremolo.ts": +/*!************************!*\ + !*** ./src/tremolo.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tremolo": () => (/* binding */ Tremolo) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Mike Corrigan +// MIT License + + + + + + + +/** Tremolo implements tremolo notation. */ +class Tremolo extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Tremolo; + } + /** + * @param num number of bars + */ + constructor(num) { + super(); + this.num = num; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.CENTER; + this.code = 'tremolo1'; + // big strokes scales initialised to 1 (no scale) + this.y_spacing_scale = 1; + this.extra_stroke_scale = 1; + } + /** Draw the tremolo on the rendering context. */ + draw() { + var _a; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stemDirection = note.getStemDirection(); + const start = note.getModifierStartXY(this.position, this.index); + let x = start.x; + const gn = (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isGraceNote)(note); + const scale = gn ? _gracenote__WEBPACK_IMPORTED_MODULE_1__.GraceNote.SCALE : 1; + const category = `tremolo.${gn ? 'grace' : 'default'}`; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont(); + let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection; + // add y_spacing_scale for big strokes (#1258) + y_spacing *= this.y_spacing_scale; + const height = this.num * y_spacing; + let y = note.getStemExtents().baseY - height; + if (stemDirection < 0) { + y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale; + } + else { + y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale; + } + const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_3__.Note.getPoint(gn ? 'grace' : 'default'); + x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP ? 'Up' : 'Down'}`); + for (let i = 0; i < this.num; ++i) { + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale }); + y += y_spacing; + } + } +} + + +/***/ }), + +/***/ "./src/tuning.ts": +/*!***********************!*\ + !*** ./src/tuning.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tuning": () => (/* binding */ Tuning) +/* harmony export */ }); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + +/** `Tuning` implements varies types of tunings for tablature. */ +class Tuning { + static get names() { + return { + standard: 'E/5,B/4,G/4,D/4,A/3,E/3', + dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3', + dropd: 'E/5,B/4,G/4,D/4,A/3,D/3', + eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3', + standardBanjo: 'D/5,B/4,G/4,D/4,G/5', + }; + } + /** + * Constructor. + * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings + */ + constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') { + this.tuningValues = []; + // Default to standard tuning. + this.setTuning(tuningString); + } + /** Return the note number associated to the note string. */ + noteToInteger(noteString) { + var _a; + return (_a = _tables__WEBPACK_IMPORTED_MODULE_0__.Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1; + } + /** + * Set tuning identified by tuning name (eg. 'dagdad') + * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings + */ + setTuning(tuningString) { + if (Tuning.names[tuningString]) { + tuningString = Tuning.names[tuningString]; + } + this.tuningValues = []; + const keys = tuningString.split(/\s*,\s*/); + if (keys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`); + } + for (let i = 0; i < keys.length; ++i) { + this.tuningValues[i] = this.noteToInteger(keys[i]); + } + } + /** Return the note number associated with a tablature string. */ + getValueForString(stringNum) { + const s = Number(stringNum); + if (s < 1 || s > this.tuningValues.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`); + } + return this.tuningValues[s - 1]; + } + /** Return the note number associated with a tablature string and fret. */ + getValueForFret(fretNum, stringNum) { + const stringValue = this.getValueForString(stringNum); + const f = Number(fretNum); + if (f < 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`); + } + return stringValue + f; + } + /** Return the note string associated with tablature string and fret. */ + getNoteForFret(fretNum, stringNum) { + const noteValue = this.getValueForFret(fretNum, stringNum); + const octave = Math.floor(noteValue / 12); + const value = noteValue % 12; + return `${_tables__WEBPACK_IMPORTED_MODULE_0__.Tables.integerToNote(value)}/${octave}`; + } +} + + +/***/ }), + +/***/ "./src/tuplet.ts": +/*!***********************!*\ + !*** ./src/tuplet.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tuplet": () => (/* binding */ Tuplet), +/* harmony export */ "TupletLocation": () => (/* binding */ TupletLocation) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +/** + * ## Description + * + * Create a new tuplet from the specified notes. The notes must + * be part of the same voice. If they are of different rhythmic + * values, then options.num_notes must be set. + * + * @constructor + * @param {Array.} A set of notes: staveNotes, + * notes, etc... any class that inherits stemmableNote at some + * point in its prototype chain. + * @param options: object { + * + * num_notes: fit this many notes into... + * notes_occupied: ...the space of this many notes + * + * Together, these two properties make up the tuplet ratio + * in the form of num_notes : notes_occupied. + * num_notes defaults to the number of notes passed in, so + * it is important that if you omit this property, all of + * the notes passed should be of the same note value. + * notes_occupied defaults to 2 -- so you should almost + * certainly pass this parameter for anything other than + * a basic triplet. + * + * location: + * default 1, which is above the notes: ┌─── 3 ───┐ + * -1 is below the notes └─── 3 ───┘ + * + * bracketed: boolean, draw a bracket around the tuplet number + * when true: ┌─── 3 ───┐ when false: 3 + * defaults to true if notes are not beamed, false otherwise + * + * ratioed: boolean + * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐ + * defaults to true if the difference between num_notes and + * notes_occupied is greater than 1. + * + * y_offset: int, default 0 + * manually offset a tuplet, for instance to avoid collisions + * with articulations, etc... + * } + */ + + + + + + + +var TupletLocation; +(function (TupletLocation) { + TupletLocation[TupletLocation["BOTTOM"] = -1] = "BOTTOM"; + TupletLocation[TupletLocation["TOP"] = 1] = "TOP"; +})(TupletLocation || (TupletLocation = {})); +class Tuplet extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Tuplet; + } + static get LOCATION_TOP() { + return TupletLocation.TOP; + } + static get LOCATION_BOTTOM() { + return TupletLocation.BOTTOM; + } + static get NESTING_OFFSET() { + return 15; + } + static get metrics() { + const tupletMetrics = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().tuplet; + if (!tupletMetrics) + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `tuplet missing`); + return tupletMetrics; + } + constructor(notes, options = {}) { + super(); + this.numerator_glyphs = []; + this.denom_glyphs = []; + if (!notes || !notes.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for tuplet.'); + } + this.options = options; + this.notes = notes; + this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length; + // We accept beats_occupied, but warn that it's deprecated: + // the preferred property name is now notes_occupied. + if (this.options.beats_occupied) { + this.beatsOccupiedDeprecationWarning(); + } + this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2; + if (this.options.bracketed != undefined) { + this.bracketed = this.options.bracketed; + } + else { + this.bracketed = notes.some((note) => !note.hasBeam()); + } + this.ratioed = + this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1; + this.point = (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE * 3) / 5; + this.y_pos = 16; + this.x_pos = 100; + this.width = 200; + this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP); + _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter.AlignRestsToNotes(notes, true, true); + this.resolveGlyphs(); + this.attach(); + } + attach() { + for (let i = 0; i < this.notes.length; i++) { + const note = this.notes[i]; + note.setTuplet(this); + } + } + detach() { + for (let i = 0; i < this.notes.length; i++) { + const note = this.notes[i]; + note.resetTuplet(this); + } + } + /** + * Set whether or not the bracket is drawn. + */ + setBracketed(bracketed) { + this.bracketed = !!bracketed; + return this; + } + /** + * Set whether or not the ratio is shown. + */ + setRatioed(ratioed) { + this.ratioed = !!ratioed; + return this; + } + /** + * Set the tuplet indicator to be displayed either on the top or bottom of the stave. + */ + setTupletLocation(location) { + if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) { + // eslint-disable-next-line + console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`); + location = Tuplet.LOCATION_TOP; + } + this.location = location; + return this; + } + getNotes() { + return this.notes; + } + getNoteCount() { + return this.num_notes; + } + beatsOccupiedDeprecationWarning() { + // eslint-disable-next-line + console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.'); + } + getBeatsOccupied() { + this.beatsOccupiedDeprecationWarning(); + return this.getNotesOccupied(); + } + setBeatsOccupied(beats) { + this.beatsOccupiedDeprecationWarning(); + return this.setNotesOccupied(beats); + } + getNotesOccupied() { + return this.notes_occupied; + } + setNotesOccupied(notes) { + this.detach(); + this.notes_occupied = notes; + this.resolveGlyphs(); + this.attach(); + } + resolveGlyphs() { + this.numerator_glyphs = []; + let n = this.num_notes; + while (n >= 1) { + this.numerator_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point)); + n = parseInt((n / 10).toString(), 10); + } + this.denom_glyphs = []; + n = this.notes_occupied; + while (n >= 1) { + this.denom_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point)); + n = parseInt((n / 10).toString(), 10); + } + } + // determine how many tuplets are nested within this tuplet + // on the same side (above/below), to calculate a y + // offset for this tuplet: + getNestedTupletCount() { + const location = this.location; + const first_note = this.notes[0]; + let maxTupletCount = countTuplets(first_note, location); + let minTupletCount = countTuplets(first_note, location); + // Count the tuplets that are on the same side (above/below) + // as this tuplet: + function countTuplets(note, location) { + return note.getTupletStack().filter((tuplet) => tuplet.location === location).length; + } + this.notes.forEach((note) => { + const tupletCount = countTuplets(note, location); + maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount; + minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount; + }); + return maxTupletCount - minTupletCount; + } + // determine the y position of the tuplet: + getYPosition() { + // offset the tuplet for any nested tuplets between + // it and the notes: + const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location; + // offset the tuplet for any manual y_offset: + const y_offset = this.options.y_offset || 0; + // now iterate through the notes and find our highest + // or lowest locations, to form a base y_pos + const first_note = this.notes[0]; + let y_pos; + if (this.location === Tuplet.LOCATION_TOP) { + y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset; + // check modifiers above note to see if they will collide with tuplet beam + for (let i = 0; i < this.notes.length; ++i) { + const note = this.notes[i]; + let modLines = 0; + const mc = note.getModifierContext(); + if (mc) { + modLines = Math.max(modLines, mc.getState().top_text_line); + } + const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset; + if (note.hasStem() || note.isRest()) { + const top_y = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? note.getStemExtents().topY - Tuplet.metrics.stemOffset + : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset; + y_pos = Math.min(top_y, y_pos); + if (modLines > 0) { + y_pos = Math.min(modY, y_pos); + } + } + } + } + else { + let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4 + // check modifiers below note to see if they will collide with tuplet beam + this.notes.forEach((nn) => { + const mc = nn.getModifierContext(); + if (mc) { + lineCheck = Math.max(lineCheck, mc.getState().text_line + 1); + } + }); + y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset; + for (let i = 0; i < this.notes.length; ++i) { + if (this.notes[i].hasStem() || this.notes[i].isRest()) { + const bottom_y = this.notes[i].getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset + : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset; + if (bottom_y > y_pos) { + y_pos = bottom_y; + } + } + } + } + return y_pos + nested_tuplet_y_offset + y_offset; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + // determine x value of left bound of tuplet + const first_note = this.notes[0]; + const last_note = this.notes[this.notes.length - 1]; + if (!this.bracketed) { + this.x_pos = first_note.getStemX(); + this.width = last_note.getStemX() - this.x_pos; + } + else { + this.x_pos = first_note.getTieLeftX() - 5; + this.width = last_note.getTieRightX() - this.x_pos + 5; + } + // determine y value for tuplet + this.y_pos = this.getYPosition(); + const addGlyphWidth = (width, glyph) => width + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); + // calculate total width of tuplet notation + let width = this.numerator_glyphs.reduce(addGlyphWidth, 0); + if (this.ratioed) { + width = this.denom_glyphs.reduce(addGlyphWidth, width); + width += this.point * 0.32; + } + const notation_center_x = this.x_pos + this.width / 2; + const notation_start_x = notation_center_x - width / 2; + // draw bracket if the tuplet is not beamed + if (this.bracketed) { + const line_width = this.width / 2 - width / 2 - 5; + // only draw the bracket if it has positive length + if (line_width > 0) { + ctx.fillRect(this.x_pos, this.y_pos, line_width, 1); + ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1); + ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); + ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); + } + } + // draw numerator glyphs + const shiftY = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().lookupMetric('digits.shiftY', 0); + let x_offset = 0; + this.numerator_glyphs.forEach((glyph) => { + glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); + x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); + }); + // display colon and denominator if the ratio is to be shown + if (this.ratioed) { + const colon_x = notation_start_x + x_offset + this.point * 0.16; + const colon_radius = this.point * 0.06; + ctx.beginPath(); + ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + x_offset += this.point * 0.32; + this.denom_glyphs.forEach((glyph) => { + glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); + x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); + }); + } + } +} + + +/***/ }), + +/***/ "./src/typeguard.ts": +/*!**************************!*\ + !*** ./src/typeguard.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Category": () => (/* binding */ Category), +/* harmony export */ "isAccidental": () => (/* binding */ isAccidental), +/* harmony export */ "isAnnotation": () => (/* binding */ isAnnotation), +/* harmony export */ "isBarline": () => (/* binding */ isBarline), +/* harmony export */ "isCategory": () => (/* binding */ isCategory), +/* harmony export */ "isDot": () => (/* binding */ isDot), +/* harmony export */ "isGraceNote": () => (/* binding */ isGraceNote), +/* harmony export */ "isGraceNoteGroup": () => (/* binding */ isGraceNoteGroup), +/* harmony export */ "isNote": () => (/* binding */ isNote), +/* harmony export */ "isRenderContext": () => (/* binding */ isRenderContext), +/* harmony export */ "isStaveNote": () => (/* binding */ isStaveNote), +/* harmony export */ "isStemmableNote": () => (/* binding */ isStemmableNote), +/* harmony export */ "isTabNote": () => (/* binding */ isTabNote) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Ron B. Yeh +// MIT License +/* eslint-disable @typescript-eslint/no-explicit-any */ +/** + * Use instead of `instanceof` as a more flexible type guard. + * @param obj check if this object's CATEGORY matches the provided category. + * @param category a string representing a category of VexFlow objects. + * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`. + * If `false`, we do not check the superclass or other ancestors. + * @returns true if `obj` has a static `CATEGORY` property that matches `category`. + */ +function isCategory(obj, category, checkAncestors = true) { + // obj is undefined, a number, a primitive string, or null. + if (typeof obj !== 'object' || obj === null) { + return false; + } + // `obj.constructor` is a reference to the constructor function that created the `obj` instance. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor + let constructorFcn = obj.constructor; + // Check if the object's static .CATEGORY matches the provided category. + if (checkAncestors) { + // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY. + while (obj !== null) { + constructorFcn = obj.constructor; + if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) { + return true; + } + obj = Object.getPrototypeOf(obj); + } + return false; + } + else { + // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string. + return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category; + } +} +const isAccidental = (obj) => isCategory(obj, Category.Accidental); +const isAnnotation = (obj) => isCategory(obj, Category.Annotation); +const isBarline = (obj) => isCategory(obj, Category.Barline); +const isDot = (obj) => isCategory(obj, Category.Dot); +const isGraceNote = (obj) => isCategory(obj, Category.GraceNote); +const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup); +const isNote = (obj) => isCategory(obj, Category.Note); +const isRenderContext = (obj) => isCategory(obj, Category.RenderContext); +const isStaveNote = (obj) => isCategory(obj, Category.StaveNote); +const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote); +const isTabNote = (obj) => isCategory(obj, Category.TabNote); +// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites. +// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums +var Category; +(function (Category) { + Category["Accidental"] = "Accidental"; + Category["Annotation"] = "Annotation"; + Category["Articulation"] = "Articulation"; + Category["Barline"] = "Barline"; + Category["BarNote"] = "BarNote"; + Category["Beam"] = "Beam"; + Category["Bend"] = "Bend"; + Category["ChordSymbol"] = "ChordSymbol"; + Category["Clef"] = "Clef"; + Category["ClefNote"] = "ClefNote"; + Category["Crescendo"] = "Crescendo"; + Category["Curve"] = "Curve"; + Category["Dot"] = "Dot"; + Category["Element"] = "Element"; + Category["Fraction"] = "Fraction"; + Category["FretHandFinger"] = "FretHandFinger"; + Category["GhostNote"] = "GhostNote"; + Category["Glyph"] = "Glyph"; + Category["GlyphNote"] = "GlyphNote"; + Category["GraceNote"] = "GraceNote"; + Category["GraceNoteGroup"] = "GraceNoteGroup"; + Category["GraceTabNote"] = "GraceTabNote"; + Category["KeySignature"] = "KeySignature"; + Category["KeySigNote"] = "KeySigNote"; + Category["Modifier"] = "Modifier"; + Category["MultiMeasureRest"] = "MultiMeasureRest"; + Category["Note"] = "Note"; + Category["NoteHead"] = "NoteHead"; + Category["NoteSubGroup"] = "NoteSubGroup"; + Category["Ornament"] = "Ornament"; + Category["Parenthesis"] = "Parenthesis"; + Category["PedalMarking"] = "PedalMarking"; + Category["RenderContext"] = "RenderContext"; + Category["RepeatNote"] = "RepeatNote"; + Category["Repetition"] = "Repetition"; + Category["Stave"] = "Stave"; + Category["StaveConnector"] = "StaveConnector"; + Category["StaveHairpin"] = "StaveHairpin"; + Category["StaveLine"] = "StaveLine"; + Category["StaveModifier"] = "StaveModifier"; + Category["StaveNote"] = "StaveNote"; + Category["StaveSection"] = "StaveSection"; + Category["StaveTempo"] = "StaveTempo"; + Category["StaveText"] = "StaveText"; + Category["StaveTie"] = "StaveTie"; + Category["Stem"] = "Stem"; + Category["StemmableNote"] = "StemmableNote"; + Category["StringNumber"] = "StringNumber"; + Category["Stroke"] = "Stroke"; + Category["System"] = "System"; + Category["TabNote"] = "TabNote"; + Category["TabSlide"] = "TabSlide"; + Category["TabStave"] = "TabStave"; + Category["TabTie"] = "TabTie"; + Category["TextBracket"] = "TextBracket"; + Category["TextDynamics"] = "TextDynamics"; + Category["TextNote"] = "TextNote"; + Category["Tickable"] = "Tickable"; + Category["TimeSignature"] = "TimeSignature"; + Category["TimeSigNote"] = "TimeSigNote"; + Category["Tremolo"] = "Tremolo"; + Category["Tuplet"] = "Tuplet"; + Category["Vibrato"] = "Vibrato"; + Category["VibratoBracket"] = "VibratoBracket"; + Category["Voice"] = "Voice"; + Category["Volta"] = "Volta"; +})(Category || (Category = {})); + + +/***/ }), + +/***/ "./src/util.ts": +/*!*********************!*\ + !*** ./src/util.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RuntimeError": () => (/* binding */ RuntimeError), +/* harmony export */ "defined": () => (/* binding */ defined), +/* harmony export */ "globalObject": () => (/* binding */ globalObject), +/* harmony export */ "log": () => (/* binding */ log), +/* harmony export */ "midLine": () => (/* binding */ midLine), +/* harmony export */ "normalizeAngle": () => (/* binding */ normalizeAngle), +/* harmony export */ "prefix": () => (/* binding */ prefix), +/* harmony export */ "sumArray": () => (/* binding */ sumArray), +/* harmony export */ "warn": () => (/* binding */ warn) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Note: Keep this module free of imports to reduce the chance of circular dependencies. +/** `RuntimeError` will be thrown by VexFlow classes in case of error. */ +class RuntimeError extends Error { + constructor(code, message = '') { + super('[RuntimeError] ' + code + ': ' + message); + this.code = code; + } +} +/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */ +// eslint-disable-next-line +function globalObject() { + if (typeof globalThis !== 'undefined') { + return globalThis; + } + if (typeof self !== 'undefined') { + return self; + } + if (typeof window !== 'undefined') { + return window; + } + if (typeof __webpack_require__.g !== 'undefined') { + return __webpack_require__.g; + } + return Function('return this')(); +} +/** + * Check that `x` is of type `T` and not `undefined`. + * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message. + */ +function defined(x, code = 'undefined', message = '') { + if (x === undefined) { + throw new RuntimeError(code, message); + } + return x; +} +/** Default log function sends all arguments to console. */ +// eslint-disable-next-line +function log(block, ...args) { + if (!args) + return; + const line = Array.prototype.slice.call(args).join(' '); + globalObject().console.log(block + ': ' + line); +} +/** Dump warning to console. */ +// eslint-disable-next-line +function warn(...args) { + const line = args.join(' '); + const err = new Error(); + globalObject().console.log('Warning: ', line, err.stack); +} +/** Round number to nearest fractional value (`.5`, `.25`, etc.) */ +function roundN(x, n) { + return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n; +} +/** Locate the mid point between stave lines. Returns a fractional line if a space. */ +function midLine(a, b) { + let mid_line = b + (a - b) / 2; + if (mid_line % 2 > 0) { + mid_line = roundN(mid_line * 10, 5) / 10; + } + return mid_line; +} +/** + * Used by various classes (e.g., SVGContext) to provide a + * unique prefix to element names (or other keys in shared namespaces). + */ +function prefix(text) { + return `vf-${text}`; +} +/** + * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi). + */ +function normalizeAngle(a) { + a = a % (2 * Math.PI); + if (a < 0) { + a += 2 * Math.PI; + } + return a; +} +/** + * Return the sum of an array of numbers. + */ +function sumArray(arr) { + return arr.reduce((a, b) => a + b, 0); +} + + +/***/ }), + +/***/ "./src/vex.ts": +/*!********************!*\ + !*** ./src/vex.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Vex": () => (/* binding */ Vex) +/* harmony export */ }); +/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flow */ "./src/flow.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Utility methods used by the rest of the VexFlow codebase. + + +class Vex { + // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead. + // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) { + // arr.forEach(callbackFn); + // } + /** + * Take `arr` and return a new list consisting of the sorted, unique, + * contents of arr. Does not modify `arr`. + */ + // eslint-disable-next-line + static sortAndUnique(arr, cmp, eq) { + if (arr.length > 1) { + const newArr = []; + let last; + arr.sort(cmp); + for (let i = 0; i < arr.length; ++i) { + if (i === 0 || !eq(arr[i], last)) { + newArr.push(arr[i]); + } + last = arr[i]; + } + return newArr; + } + else { + return arr; + } + } + /** Check if array `arr` contains `obj`. */ + // eslint-disable-next-line + static contains(arr, obj) { + let i = arr.length; + while (i--) { + if (arr[i] === obj) { + return true; + } + } + return false; + } + // Get the 2D Canvas context from DOM element `canvas_sel`. + static getCanvasContext(canvasSelector) { + if (!canvasSelector) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector); + } + const canvas = document.getElementById(canvasSelector); + if (!(canvas && canvas.getContext)) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas'); + } + return canvas.getContext('2d'); + } + /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */ + // eslint-disable-next-line + static benchmark(s, f) { + const start_time = new Date().getTime(); + f(); + const elapsed = new Date().getTime() - start_time; + (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)(s, elapsed + 'ms'); + } + // Get stack trace. + static stackTrace() { + const err = new Error(); + return err.stack; + } +} +Vex.Flow = _flow__WEBPACK_IMPORTED_MODULE_0__.Flow; + + + +/***/ }), + +/***/ "./src/vibrato.ts": +/*!************************!*\ + !*** ./src/vibrato.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Vibrato": () => (/* binding */ Vibrato) +/* harmony export */ }); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + +/** `Vibrato` implements diverse vibratos. */ +class Vibrato extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Vibrato; + } + /** Arrange vibratos inside a `ModifierContext`. */ + static format(vibratos, state, context) { + if (!vibratos || vibratos.length === 0) + return false; + // Vibratos are always on top. + let text_line = state.top_text_line; + let width = 0; + let shift = state.right_shift - 7; + // If there's a bend, drop the text line + const bends = context.getMembers(_bend__WEBPACK_IMPORTED_MODULE_0__.Bend.CATEGORY); + if (bends && bends.length > 0) { + const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE; + text_line = text_line - (bendHeight + 1); + } + else { + state.top_text_line += 1; + } + // Format Vibratos + for (let i = 0; i < vibratos.length; ++i) { + const vibrato = vibratos[i]; + vibrato.setXShift(shift); + vibrato.setTextLine(text_line); + width += vibrato.getWidth(); + shift += width; + } + state.right_shift += width; + return true; + } + constructor() { + super(); + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT; + this.render_options = { + harsh: false, + vibrato_width: 20, + wave_height: 6, + wave_width: 4, + wave_girth: 2, + }; + this.setVibratoWidth(this.render_options.vibrato_width); + } + /** Set harsh vibrato. */ + setHarsh(harsh) { + this.render_options.harsh = harsh; + return this; + } + /** Set vibrato width in pixels. */ + setVibratoWidth(width) { + this.render_options.vibrato_width = width; + this.setWidth(width); + return this; + } + /** Draw the vibrato on the rendering context. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index); + const vx = start.x + this.x_shift; + const vy = note.getYForTopText(this.text_line) + 2; + Vibrato.renderVibrato(ctx, vx, vy, this.render_options); + } + /** + * Static rendering method that can be called from + * other classes (e.g. VibratoBracket). + */ + static renderVibrato(ctx, x, y, opts) { + const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts; + const num_waves = vibrato_width / wave_width; + ctx.beginPath(); + let i; + if (harsh) { + ctx.moveTo(x, y + wave_girth + 1); + for (i = 0; i < num_waves / 2; ++i) { + ctx.lineTo(x + wave_width, y - wave_height / 2); + x += wave_width; + ctx.lineTo(x + wave_width, y + wave_height / 2); + x += wave_width; + } + for (i = 0; i < num_waves / 2; ++i) { + ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1); + x -= wave_width; + ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1); + x -= wave_width; + } + ctx.fill(); + } + else { + ctx.moveTo(x, y + wave_girth); + for (i = 0; i < num_waves / 2; ++i) { + ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y); + x += wave_width; + ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y); + x += wave_width; + } + for (i = 0; i < num_waves / 2; ++i) { + ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); + x -= wave_width; + ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); + x -= wave_width; + } + ctx.fill(); + } + } +} + + +/***/ }), + +/***/ "./src/vibratobracket.ts": +/*!*******************************!*\ + !*** ./src/vibratobracket.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VibratoBracket": () => (/* binding */ VibratoBracket) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Balazs Forian-Szabo +// MIT License + + + + +// eslint-disable-next-line +function L(...args) { + if (VibratoBracket.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_2__.log)('Vex.Flow.VibratoBracket', args); +} +/** `VibratoBracket` renders vibrato effect between two notes. */ +class VibratoBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.VibratoBracket; + } + /** + * Either the stop or start note must be set, or both of them. + * An undefined value for the start or stop note indicates that the vibrato + * is drawn from the beginning or until the end of the stave accordingly. + */ + constructor(bracket_data) { + super(); + if (bracket_data.start) + this.start = bracket_data.start; + if (bracket_data.stop) + this.stop = bracket_data.stop; + this.line = 1; + this.render_options = { + harsh: false, + wave_height: 6, + wave_width: 4, + wave_girth: 2, + vibrato_width: 0, + }; + } + /** Set line position of the vibrato bracket. */ + setLine(line) { + this.line = line; + return this; + } + /** Set harsh vibrato bracket. */ + setHarsh(harsh) { + this.render_options.harsh = harsh; + return this; + } + /** Draw the vibrato bracket on the rendering context. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const y = (this.start && this.start.checkStave().getYForTopText(this.line)) || + (this.stop && this.stop.checkStave().getYForTopText(this.line)) || + 0; + // If start note is not set then vibrato will be drawn + // from the beginning of the stave + const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0; + // If stop note is not set then vibrato will be drawn + // until the end of the stave + const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) || + (this.start && this.start.checkStave().getTieEndX() - 10) || + 0; + this.render_options.vibrato_width = stop_x - start_x; + L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y); + _vibrato__WEBPACK_IMPORTED_MODULE_3__.Vibrato.renderVibrato(ctx, start_x, y, this.render_options); + } +} +/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */ +VibratoBracket.DEBUG = false; + + + +/***/ }), + +/***/ "./src/voice.ts": +/*!**********************!*\ + !*** ./src/voice.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Voice": () => (/* binding */ Voice), +/* harmony export */ "VoiceMode": () => (/* binding */ VoiceMode) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +var VoiceMode; +(function (VoiceMode) { + VoiceMode[VoiceMode["STRICT"] = 1] = "STRICT"; + VoiceMode[VoiceMode["SOFT"] = 2] = "SOFT"; + VoiceMode[VoiceMode["FULL"] = 3] = "FULL"; +})(VoiceMode || (VoiceMode = {})); +/** + * `Voice` is mainly a container object to group `Tickables` for formatting. + */ +class Voice extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Voice; + } + /** + * Modes allow the addition of ticks in three different ways: + * - STRICT: This is the default. Ticks must fill the voice. + * - SOFT: Ticks can be added without restrictions. + * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length. + */ + static get Mode() { + return VoiceMode; + } + constructor(time) { + super(); + this.resolutionMultiplier = 1; + this.mode = VoiceMode.STRICT; + this.preFormatted = false; + this.ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); + this.largestTickWidth = 0; + this.tickables = []; + this.options = { + softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.SOFTMAX_FACTOR, + }; + // Convert the `time` string into a VoiceTime object if necessary. + let voiceTime; + if (typeof time === 'string') { + // Time signature shortcut: "4/4", "3/8", etc. + const match = time.match(/(\d+)\/(\d+)/); + if (match) { + voiceTime = { + num_beats: parseInt(match[1]), + beat_value: parseInt(match[2]), + }; + } + } + else { + voiceTime = time; + } + // Default time signature is 4/4. + this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION }, voiceTime); + // Recalculate total ticks. + this.totalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1); + // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration. + this.smallestTickCount = this.totalTicks.clone(); + } + /** Get the total ticks in the voice. */ + getTotalTicks() { + return this.totalTicks; + } + /** Get the total ticks used in the voice by all the tickables. */ + getTicksUsed() { + return this.ticksUsed; + } + /** Get the largest width of all the tickables. */ + getLargestTickWidth() { + return this.largestTickWidth; + } + /** Get the tick count for the shortest tickable */ + getSmallestTickCount() { + return this.smallestTickCount; + } + /** Get the tickables in the voice. */ + getTickables() { + return this.tickables; + } + /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */ + getMode() { + return this.mode; + } + /** + * Set the voice mode. + * @param mode value from `VoiceMode` or Voice.Mode + */ + setMode(mode) { + this.mode = mode; + return this; + } + /** Get the resolution multiplier for the voice. */ + getResolutionMultiplier() { + return this.resolutionMultiplier; + } + /** Get the actual tick resolution for the voice. */ + getActualResolution() { + return this.resolutionMultiplier * this.time.resolution; + } + /** Set the voice's stave. */ + setStave(stave) { + this.stave = stave; + // Reset the bounding box so we can reformat. + this.boundingBox = undefined; + return this; + } + getStave() { + return this.stave; + } + /** Get the bounding box for the voice. */ + getBoundingBox() { + if (!this.boundingBox) { + const stave = this.checkStave(); + let boundingBox = undefined; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + if (!tickable.getStave()) + tickable.setStave(stave); + const bb = tickable.getBoundingBox(); + if (bb) { + boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; + } + } + this.boundingBox = boundingBox; + } + return this.boundingBox; + } + /** Set the voice mode to strict or soft. */ + setStrict(strict) { + this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT; + return this; + } + /** Determine if the voice is complete according to the voice mode. */ + isComplete() { + if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) { + return this.ticksUsed.equals(this.totalTicks); + } + else { + return true; + } + } + /** + * We use softmax to layout the tickables proportional to the exponent of + * their duration. The softmax factor is used to determine the 'linearness' of + * the layout. + * + * The softmax of all the tickables in this voice should sum to 1. + */ + setSoftmaxFactor(factor) { + this.options.softmaxFactor = factor; + this.expTicksUsed = 0; // reset + return this; + } + /** + * Calculate the sum of the exponents of all the ticks in this voice to use + * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables) + * + * Note that the "exp" of "expTicksUsed" stands for "expontential" ticks used, + * not "expected" ticks used. + */ + reCalculateExpTicksUsed() { + const totalTicks = this.ticksUsed.value(); + const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks); + this.expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_4__.sumArray)(this.tickables.map(exp)); + return this.expTicksUsed; + } + /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */ + softmax(tickValue) { + if (!this.expTicksUsed) { + this.expTicksUsed = this.reCalculateExpTicksUsed(); + } + const totalTicks = this.ticksUsed.value(); + const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks); + const sm = exp(tickValue) / this.expTicksUsed; + return sm; + } + /** Add a tickable to the voice. */ + addTickable(tickable) { + if (!tickable.shouldIgnoreTicks()) { + const ticks = tickable.getTicks(); + // Update the total ticks for this line. + this.ticksUsed.add(ticks); + this.expTicksUsed = 0; // reset + if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) && + this.ticksUsed.greaterThan(this.totalTicks)) { + this.ticksUsed.subtract(ticks); + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArgument', 'Too many ticks.'); + } + // Track the smallest tickable for formatting. + if (ticks.lessThan(this.smallestTickCount)) { + this.smallestTickCount = ticks.clone(); + } + this.resolutionMultiplier = this.ticksUsed.denominator; + // Expand total ticks using denominator from ticks used. + this.totalTicks.add(0, this.ticksUsed.denominator); + } + // Add the tickable to the line. + this.tickables.push(tickable); + tickable.setVoice(this); + return this; + } + /** Add an array of tickables to the voice. */ + addTickables(tickables) { + for (let i = 0; i < tickables.length; ++i) { + this.addTickable(tickables[i]); + } + return this; + } + /** Preformat the voice by applying the voice's stave to each note. */ + preFormat() { + if (this.preFormatted) + return this; + const stave = this.checkStave(); + this.tickables.forEach((tickable) => { + if (!tickable.getStave()) { + tickable.setStave(stave); + } + }); + this.preFormatted = true; + return this; + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + /** + * Render the voice onto the canvas `context` and an optional `stave`. + * If `stave` is omitted, it is expected that the notes have staves + * already set. + * + * This method also calculates the voice's boundingBox while drawing + * the notes. Note the similarities with this.getBoundingBox(). + */ + draw(context = this.checkContext(), stave) { + stave = stave !== null && stave !== void 0 ? stave : this.stave; + this.setRendered(); + let boundingBox = undefined; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + // Set the stave if provided. + if (stave) { + tickable.setStave(stave); + } + (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.'); + const bb = tickable.getBoundingBox(); + if (bb) { + boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; + } + tickable.setContext(context); + tickable.drawWithStyle(); + } + this.boundingBox = boundingBox; + } +} + + +/***/ }), + +/***/ "./src/web.ts": +/*!********************!*\ + !*** ./src/web.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isHTMLCanvas": () => (/* binding */ isHTMLCanvas), +/* harmony export */ "isHTMLDiv": () => (/* binding */ isHTMLDiv) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Ron B. Yeh +// MIT License +// +// Utilities for working with Web APIs. +// See: https://developer.mozilla.org/en-US/docs/Web/API + +// eslint-disable-next-line +function isHTMLCanvas(element) { + if (!element) + return false; + const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)(); + return ( + // It's either an instance of the HTMLCanvasElement class, + (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) || + // OR it's pretending to be a element. Good enough! + // Do not rely on .tagName, because node-canvas doesn't provide a tagName. + (typeof element.getContext === 'function' && typeof element.toDataURL === 'function')); +} +// eslint-disable-next-line +function isHTMLDiv(element) { + if (!element) + return false; + const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)(); + return ( + // It's either an instance of the HTMLDivElement class. + (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) || + // OR it's pretending to be a
. See: svgcontext.ts. + (typeof element.appendChild === 'function' && typeof element.style === 'object')); +} + + +/***/ }), + +/***/ "./tests/accidental_tests.ts": +/*!***********************************!*\ + !*** ./tests/accidental_tests.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AccidentalTests": () => (/* binding */ AccidentalTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_modifiercontext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _src_timesignote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _src_typeguard__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Accidental Tests + + + + + + + + + + + + + + + +const AccidentalTests = { + Start() { + QUnit.module('Accidental'); + QUnit.test('Automatic Accidentals - Simple Tests', autoAccidentalWorking); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Accidental Padding', formatAccidentalSpaces); + run('Basic', basic); + run('Stem Down', basicStemDown); + run('Cautionary Accidental', cautionary); + run('Accidental Arrangement Special Cases', specialCases); + run('Multi Voice', multiVoice); + run('Microtonal', microtonal); + run('Microtonal (Iranian)', microtonal_iranian); + run('Sagittal', sagittal); + run('Automatic Accidentals', automaticAccidentals0); + run('Automatic Accidentals - C major scale in Ab', automaticAccidentals1); + run('Automatic Accidentals - No Accidentals Necessary', automaticAccidentals2); + run('Automatic Accidentals - No Accidentals Necessary (EasyScore)', automaticAccidentals3); + run('Automatic Accidentals - Multi Voice Inline', automaticAccidentalsMultiVoiceInline); + run('Automatic Accidentals - Multi Voice Offset', automaticAccidentalsMultiVoiceOffset); + run('Automatic Accidentals - Key C, Single Octave', automaticAccidentalsCornerCases1); + run('Automatic Accidentals - Key C, Two Octaves', automaticAccidentalsCornerCases2); + run('Automatic Accidentals - Key C#, Single Octave', automaticAccidentalsCornerCases3); + run('Automatic Accidentals - Key C#, Two Octaves', automaticAccidentalsCornerCases4); + run('Factory API', factoryAPI); + }, +}; +// Check that at least one of the note's modifiers is an Accidental. +function hasAccidental(note) { + return note.getModifiers().some((modifier) => (0,_src_typeguard__WEBPACK_IMPORTED_MODULE_13__.isAccidental)(modifier)); +} +// Return a convenience function for building accidentals from a string. +function makeNewAccid(factory) { + return (type) => factory.Accidental({ type }); +} +/** + * + */ +function autoAccidentalWorking(assert) { + const createStaveNote = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote(noteStruct); + let notes = [ + { keys: ['bb/4'], duration: '4' }, + { keys: ['bb/4'], duration: '4' }, + { keys: ['g#/4'], duration: '4' }, + { keys: ['g/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['a#/4'], duration: '4' }, + { keys: ['g#/4'], duration: '4' }, + ].map(createStaveNote); + let voice = new _src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); + // F Major (Bb) + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'F'); + assert.equal(hasAccidental(notes[0]), false, 'No flat because of key signature'); + assert.equal(hasAccidental(notes[1]), false, 'No flat because of key signature'); + assert.equal(hasAccidental(notes[2]), true, 'Added a sharp'); + assert.equal(hasAccidental(notes[3]), true, 'Back to natural'); + assert.equal(hasAccidental(notes[4]), true, 'Back to natural'); + assert.equal(hasAccidental(notes[5]), false, 'Natural remembered'); + assert.equal(hasAccidental(notes[6]), true, 'Added sharp'); + assert.equal(hasAccidental(notes[7]), true, 'Added sharp'); + notes = [ + { keys: ['e#/4'], duration: '4' }, + { keys: ['cb/4'], duration: '4' }, + { keys: ['fb/4'], duration: '4' }, + { keys: ['b#/4'], duration: '4' }, + { keys: ['b#/4'], duration: '4' }, + { keys: ['cb/5'], duration: '4' }, + { keys: ['fb/5'], duration: '4' }, + { keys: ['e#/4'], duration: '4' }, + ].map(createStaveNote); + voice = new _src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); + // A Major (F#,G#,C#) + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'A'); + assert.equal(hasAccidental(notes[0]), true, 'Added sharp'); + assert.equal(hasAccidental(notes[1]), true, 'Added flat'); + assert.equal(hasAccidental(notes[2]), true, 'Added flat'); + assert.equal(hasAccidental(notes[3]), true, 'Added sharp'); + assert.equal(hasAccidental(notes[4]), false, 'Sharp remembered'); + assert.equal(hasAccidental(notes[5]), true, 'Added flat(different octave)'); + assert.equal(hasAccidental(notes[6]), true, 'Added flat(different octave)'); + assert.equal(hasAccidental(notes[7]), false, 'sharp remembered'); + notes = [ + { keys: ['c/4'], duration: '4' }, + { keys: ['cb/4'], duration: '4' }, + { keys: ['cb/4'], duration: '4' }, + { keys: ['c#/4'], duration: '4' }, + { keys: ['c#/4'], duration: '4' }, + { keys: ['cbb/4'], duration: '4' }, + { keys: ['cbb/4'], duration: '4' }, + { keys: ['c##/4'], duration: '4' }, + { keys: ['c##/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + ].map(createStaveNote); + voice = new _src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); + // C Major (no sharps/flats) + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'C'); + assert.equal(hasAccidental(notes[0]), false, 'No accidental'); + assert.equal(hasAccidental(notes[1]), true, 'Added flat'); + assert.equal(hasAccidental(notes[2]), false, 'Flat remembered'); + assert.equal(hasAccidental(notes[3]), true, 'Sharp added'); + assert.equal(hasAccidental(notes[4]), false, 'Sharp remembered'); + assert.equal(hasAccidental(notes[5]), true, 'Added doubled flat'); + assert.equal(hasAccidental(notes[6]), false, 'Double flat remembered'); + assert.equal(hasAccidental(notes[7]), true, 'Added double sharp'); + assert.equal(hasAccidental(notes[8]), false, 'Double sharp rememberd'); + assert.equal(hasAccidental(notes[9]), true, 'Added natural'); + assert.equal(hasAccidental(notes[10]), false, 'Natural remembered'); +} +/** + * + */ +function formatAccidentalSpaces(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 280); + const context = f.getContext(); + const softmaxFactor = 100; + // Create the notes + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['e##/5'], + duration: '8d', + }).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('##'), 0), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['b/4'], + duration: '16', + }).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['f/3'], + duration: '8', + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['a/3'], + duration: '16', + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['e/4', 'g/4'], + duration: '16', + }) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('bb'), 0) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('bb'), 1), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['d/4'], + duration: '16', + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['e/4', 'g/4'], + duration: '16', + }) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 0) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 1), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['g/4'], + duration: '32', + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['a/4'], + duration: '32', + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['g/4'], + duration: '16', + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ + keys: ['d/4'], + duration: 'q', + }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_3__.Dot.buildAndAttach([notes[0]], { all: true }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam.generateBeams(notes); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice({ + num_beats: 4, + beat_value: 4, + }); + voice.addTickables(notes); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter({ softmaxFactor }).joinVoices([voice]); + const width = formatter.preCalculateMinTotalWidth([voice]); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_8__.Stave(10, 40, width + 20); + stave.setContext(context).draw(); + formatter.format([voice], width); + voice.draw(context, stave); + beams.forEach((b) => b.setContext(context).draw()); + notes.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(context, note, 30)); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(context, 300, 150); + options.assert.ok(true); +} +function basic(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + f.Stave({ x: 10, y: 10, width: 550 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) + .addModifier(accid('b'), 0) + .addModifier(accid('#'), 1), + // Notes keys out of alphabetic order + f + .StaveNote({ keys: ['e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5', 'd/4'], duration: '2' }) + .addModifier(accid('##'), 6) + .addModifier(accid('n'), 0) + .addModifier(accid('bb'), 1) + .addModifier(accid('b'), 2) + .addModifier(accid('#'), 3) + .addModifier(accid('n'), 4) + .addModifier(accid('bb'), 5), + // Notes keys out of alphabetic order + f + .StaveNote({ keys: ['g/5', 'f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5'], duration: '16' }) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .addModifier(accid('#'), 3) + .addModifier(accid('b'), 4) + .addModifier(accid('bb'), 5) + .addModifier(accid('##'), 6) + .addModifier(accid('#'), 0), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('##').setAsCautionary(), 1) + .addModifier(accid('#').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb').setAsCautionary(), 4) + .addModifier(accid('b').setAsCautionary(), 5), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 10, { paddingBetween: 45 }); + notes.forEach((note, index) => { + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); + options.assert.ok(true, 'Full Accidental'); +} +function cautionary(options) { + const staveCount = 12; + const scale = 0.85; + const staveWidth = 840; + let i = 0; + let j = 0; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, staveWidth + 10, 175 * staveCount + 10); + f.getContext().scale(scale, scale); + const accids = Object.keys(_src_flow__WEBPACK_IMPORTED_MODULE_4__.Flow.accidentalMap).filter((accid) => accid !== '{' && accid !== '}'); + const mod = Math.round(accids.length / staveCount); + for (i = 0; i < staveCount; ++i) { + const stave = f.Stave({ x: 0, y: 10 + 200 * i, width: staveWidth / scale }); + const score = f.EasyScore(); + const rowMap = []; + for (j = 0; j < mod && j + i * staveCount < accids.length; ++j) { + rowMap.push(accids[j + i * staveCount]); + } + const notes = rowMap.map((accidType) => f + .StaveNote({ keys: ['a/4'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.UP }) + .addModifier(f.Accidental({ type: accidType }), 0)); + const voice = score.voice(notes, { time: rowMap.length + '/4' }); + voice.getTickables().forEach((tickable) => { + tickable + .getModifiers() + .filter((modifier) => modifier.getAttribute('type') === _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.CATEGORY) + .forEach((accid) => accid.setAsCautionary()); + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + options.assert.ok(true, 'Must successfully render cautionary accidentals'); +} +function specialCases(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + f.Stave({ x: 10, y: 10, width: 550 }); + const notes = [ + f + .StaveNote({ keys: ['f/4', 'd/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('b'), 1), + f + .StaveNote({ keys: ['c/4', 'g/4'], duration: '2' }) + .addModifier(accid('##'), 0) + .addModifier(accid('##'), 1), + f + .StaveNote({ keys: ['b/3', 'd/4', 'f/4'], duration: '16' }) + .addModifier(accid('#'), 0) + .addModifier(accid('#'), 1) + .addModifier(accid('##'), 2), + f + .StaveNote({ keys: ['g/4', 'a/4', 'c/5', 'e/5'], duration: '16' }) + .addModifier(accid('b'), 0) + .addModifier(accid('b'), 1) + .addModifier(accid('n'), 3), + f + .StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4' }) + .addModifier(accid('b').setAsCautionary(), 0) + .addModifier(accid('b').setAsCautionary(), 1) + .addModifier(accid('bb'), 2) + .addModifier(accid('b'), 3), + f + .StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5', 'g/5'], duration: '8' }) + .addModifier(accid('bb'), 0) + .addModifier(accid('b').setAsCautionary(), 1) + .addModifier(accid('n').setAsCautionary(), 2) + .addModifier(accid('#'), 3) + .addModifier(accid('n').setAsCautionary(), 4), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 0, { paddingBetween: 20 }); + notes.forEach((note, index) => { + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); + options.assert.ok(true, 'Full Accidental'); +} +function basicStemDown(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + f.Stave({ x: 10, y: 10, width: 550 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('#'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2', stem_direction: -1 }) + .addModifier(accid('##'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('bb'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('#'), 4) + .addModifier(accid('n'), 5) + .addModifier(accid('bb'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: -1 }) + .addModifier(accid('n'), 0) + .addModifier(accid('#'), 1) + .addModifier(accid('#'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 0, { paddingBetween: 30 }); + notes.forEach((note, noteIndex) => { + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + noteIndex + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, accidIndex) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + accidIndex + ' has set width'); + }); + }); + f.draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); + options.assert.ok(true, 'Full Accidental'); +} +function multiVoice(options) { + // Helper function for visualizing + function showNotes(note1, note2, stave, ctx, x) { + const modifierContext = new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_6__.ModifierContext(); + note1.addToModifierContext(modifierContext); + note2.addToModifierContext(modifierContext); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_11__.TickContext().addTickable(note1).addTickable(note2).preFormat().setX(x); + note1.setContext(ctx).draw(); + note2.setContext(ctx).draw(); + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(ctx, note1, 180); + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(ctx, note2, 15); + } + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 460, 250); + const accid = makeNewAccid(f); + const stave = f.Stave({ x: 10, y: 45, width: 420 }); + const ctx = f.getContext(); + stave.draw(); + let note1 = f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .setStave(stave); + let note2 = f + .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('bb'), 1) + .addModifier(accid('##'), 2) + .setStave(stave); + showNotes(note1, note2, stave, ctx, 60); + note1 = f + .StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .setStave(stave); + note2 = f + .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }) + .addModifier(accid('b'), 0) + .setStave(stave); + showNotes(note1, note2, stave, ctx, 150); + note1 = f + .StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .setStave(stave); + note2 = f + .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }) + .addModifier(accid('b'), 0) + .setStave(stave); + showNotes(note1, note2, stave, ctx, 250); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 350, 150); + options.assert.ok(true, 'Full Accidental'); +} +function microtonal(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + const ctx = f.getContext(); + f.Stave({ x: 10, y: 10, width: 650 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) + .addModifier(accid('db'), 0) + .addModifier(accid('d'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }) + .addModifier(accid('bbs'), 0) + .addModifier(accid('++'), 1) + .addModifier(accid('+'), 2) + .addModifier(accid('d'), 3) + .addModifier(accid('db'), 4) + .addModifier(accid('+'), 5) + .addModifier(accid('##'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) + .addModifier(accid('++'), 0) + .addModifier(accid('bbs'), 1) + .addModifier(accid('+'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('db'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('db').setAsCautionary(), 1) + .addModifier(accid('bbs').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('++').setAsCautionary(), 4) + .addModifier(accid('d').setAsCautionary(), 5), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'd/5', 'g/5'], duration: '16' }) + .addModifier(accid('++-'), 0) + .addModifier(accid('+-'), 1) + .addModifier(accid('bs'), 2) + .addModifier(accid('bss'), 3) + .addModifier(accid('afhf'), 4) + .addModifier(accid('ashs'), 5), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 }); + notes.forEach((note, index) => { + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); + options.assert.ok(true, 'Microtonal Accidental'); +} +function microtonal_iranian(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + const ctx = f.getContext(); + f.Stave({ x: 10, y: 10, width: 650 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) + .addModifier(accid('k'), 0) + .addModifier(accid('o'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }) + .addModifier(accid('b'), 0) + .addModifier(accid('k'), 1) + .addModifier(accid('n'), 2) + .addModifier(accid('o'), 3) + .addModifier(accid('#'), 4) + .addModifier(accid('bb'), 5) + .addModifier(accid('##'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) + .addModifier(accid('o'), 0) + .addModifier(accid('k'), 1) + .addModifier(accid('n'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('o').setAsCautionary(), 1) + .addModifier(accid('n').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('k').setAsCautionary(), 4), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '16' }) + .addModifier(accid('k'), 0) + .addModifier(accid('k'), 1) + .addModifier(accid('k'), 2) + .addModifier(accid('k'), 3), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 }); + notes.forEach((note, index) => { + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); + options.assert.ok(true, 'Microtonal Accidental (Iranian)'); +} +function sagittal(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + const ctx = f.getContext(); + f.Stave({ x: 10, y: 10, width: 650 }); + const notes = [ + f + .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal11MediumDiesisUp'), 1) + .addModifier(accid('accSagittal5CommaDown'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('accSagittal7CommaDown'), 3), + f + .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal35LargeDiesisDown'), 2), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1), + f + .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' }) + .addModifier(accid('b'), 1) + .addModifier(accid('accSagittal7CommaDown'), 1) + .addModifier(accid('accSagittal11LargeDiesisDown'), 3), + f + .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal11MediumDiesisUp'), 1) + .addModifier(accid('accSagittal5CommaDown'), 2) + .addModifier(accid('accSagittalFlat7CDown'), 3), + f + .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal35LargeDiesisDown'), 2), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1), + f + .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' }) + .addModifier(accid('accSagittalFlat7CDown'), 1) + .addModifier(accid('accSagittal11LargeDiesisDown'), 3), + ]; + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + }); + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [3], + last_indices: [3], + options: { + direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN, + }, + }); + f.StaveTie({ + from: notes[4], + to: notes[5], + first_indices: [0, 1], + last_indices: [0, 1], + }); + f.StaveTie({ + from: notes[4], + to: notes[5], + first_indices: [3], + last_indices: [3], + options: { + direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN, + }, + }); + f.Beam({ notes: notes.slice(2, 4) }); + f.Beam({ notes: notes.slice(6, 8) }); + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes); + notes.forEach((note, index) => { + _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); + options.assert.ok(true, 'Sagittal'); +} +function automaticAccidentals0(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 200); + const stave = f.Stave(); + const notes = [ + { keys: ['c/4', 'c/5'], duration: '4' }, + { keys: ['c#/4', 'c#/5'], duration: '4' }, + { keys: ['c#/4', 'c#/5'], duration: '4' }, + { keys: ['c##/4', 'c##/5'], duration: '4' }, + { keys: ['c##/4', 'c##/5'], duration: '4' }, + { keys: ['c/4', 'c/5'], duration: '4' }, + { keys: ['cn/4', 'cn/5'], duration: '4' }, + { keys: ['cbb/4', 'cbb/5'], duration: '4' }, + { keys: ['cbb/4', 'cbb/5'], duration: '4' }, + { keys: ['cb/4', 'cb/5'], duration: '4' }, + { keys: ['cb/4', 'cb/5'], duration: '4' }, + { keys: ['c/4', 'c/5'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const gracenotes = [{ keys: ['d#/4'], duration: '16', slash: true }].map(f.GraceNote.bind(f)); + notes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0); + const voice = f + .Voice() + .setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT) + .addTickable(new _src_timesignote__WEBPACK_IMPORTED_MODULE_12__.TimeSigNote('12/4').setStave(stave)) + .addTickables(notes); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'C'); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentals1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('Ab'); + const notes = [ + { keys: ['c/4'], duration: '4' }, + { keys: ['d/4'], duration: '4' }, + { keys: ['e/4'], duration: '4' }, + { keys: ['f/4'], duration: '4' }, + { keys: ['g/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['c/5'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'Ab'); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentals2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('A'); + const notes = [ + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['c#/5'], duration: '4' }, + { keys: ['d/5'], duration: '4' }, + { keys: ['e/5'], duration: '4' }, + { keys: ['f#/5'], duration: '4' }, + { keys: ['g#/5'], duration: '4' }, + { keys: ['a/5'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'A'); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentals3(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('A'); + const score = f.EasyScore(); + score.set({ time: '8/4' }); + const notes = score.notes('A4/q, B4/q, C#5/q, D5/q, E5/q,F#5/q, G#5/q, A5/q', { stem: 'UP' }); + const voice = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'A'); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsMultiVoiceInline(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('Ab'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['d/4'], duration: '4', stem_direction: -1 }, + { keys: ['e/4'], duration: '4', stem_direction: -1 }, + { keys: ['f/4'], duration: '4', stem_direction: -1 }, + { keys: ['g/4'], duration: '4', stem_direction: -1 }, + { keys: ['a/4'], duration: '4', stem_direction: -1 }, + { keys: ['b/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const notes1 = [ + { keys: ['c/5'], duration: '4' }, + { keys: ['d/5'], duration: '4' }, + { keys: ['e/5'], duration: '4' }, + { keys: ['f/5'], duration: '4' }, + { keys: ['g/5'], duration: '4' }, + { keys: ['a/5'], duration: '4' }, + { keys: ['b/5'], duration: '4' }, + { keys: ['c/6'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); + const voice1 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes1); + // Ab Major + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0, voice1], 'Ab'); + options.assert.equal(hasAccidental(notes0[0]), false); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[3]), false); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[7]), false); + options.assert.equal(hasAccidental(notes1[0]), false); + options.assert.equal(hasAccidental(notes1[1]), true); + options.assert.equal(hasAccidental(notes1[2]), true); + options.assert.equal(hasAccidental(notes1[3]), false); + options.assert.equal(hasAccidental(notes1[4]), false); + options.assert.equal(hasAccidental(notes1[5]), true); + options.assert.equal(hasAccidental(notes1[6]), true); + options.assert.equal(hasAccidental(notes1[7]), false); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsMultiVoiceOffset(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('Cb'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['d/4'], duration: '4', stem_direction: -1 }, + { keys: ['e/4'], duration: '4', stem_direction: -1 }, + { keys: ['f/4'], duration: '4', stem_direction: -1 }, + { keys: ['g/4'], duration: '4', stem_direction: -1 }, + { keys: ['a/4'], duration: '4', stem_direction: -1 }, + { keys: ['b/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const notes1 = [ + { keys: ['c/5'], duration: '8' }, + { keys: ['c/5'], duration: '4' }, + { keys: ['d/5'], duration: '4' }, + { keys: ['e/5'], duration: '4' }, + { keys: ['f/5'], duration: '4' }, + { keys: ['g/5'], duration: '4' }, + { keys: ['a/5'], duration: '4' }, + { keys: ['b/5'], duration: '4' }, + { keys: ['c/6'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); + const voice1 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes1); + // Cb Major (All flats) + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0, voice1], 'Cb'); + options.assert.equal(hasAccidental(notes0[0]), true); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[4]), true); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[7]), false, 'Natural Remembered'); + options.assert.equal(hasAccidental(notes1[0]), true); + options.assert.equal(hasAccidental(notes1[1]), false); + options.assert.equal(hasAccidental(notes1[2]), true); + options.assert.equal(hasAccidental(notes1[3]), true); + options.assert.equal(hasAccidental(notes1[4]), true); + options.assert.equal(hasAccidental(notes1[5]), true); + options.assert.equal(hasAccidental(notes1[6]), true); + options.assert.equal(hasAccidental(notes1[7]), true); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0], 'C'); + options.assert.equal(hasAccidental(notes0[0]), false); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), false); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0], 'C'); + options.assert.equal(hasAccidental(notes0[0]), false); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + options.assert.equal(hasAccidental(notes0[10]), true); + options.assert.equal(hasAccidental(notes0[12]), false); + options.assert.equal(hasAccidental(notes0[14]), true); + options.assert.equal(hasAccidental(notes0[16]), false); + options.assert.equal(hasAccidental(notes0[1]), false); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[5]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[9]), false); + options.assert.equal(hasAccidental(notes0[11]), true); + options.assert.equal(hasAccidental(notes0[13]), false); + options.assert.equal(hasAccidental(notes0[15]), true); + options.assert.equal(hasAccidental(notes0[17]), false); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases3(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C#'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0], 'C#'); + options.assert.equal(hasAccidental(notes0[0]), true); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), false); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases4(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C#'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); + _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0], 'C#'); + options.assert.equal(hasAccidental(notes0[0]), true); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + options.assert.equal(hasAccidental(notes0[10]), true); + options.assert.equal(hasAccidental(notes0[12]), false); + options.assert.equal(hasAccidental(notes0[14]), true); + options.assert.equal(hasAccidental(notes0[16]), false); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[5]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[9]), false); + options.assert.equal(hasAccidental(notes0[11]), true); + options.assert.equal(hasAccidental(notes0[13]), false); + options.assert.equal(hasAccidental(notes0[15]), true); + options.assert.equal(hasAccidental(notes0[17]), false); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function factoryAPI(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); + f.Stave({ x: 10, y: 10, width: 550 }); + const accid = makeNewAccid(f); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }) + .addModifier(accid('b'), 0) + .addModifier(accid('#'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: 'h' }) + .addModifier(accid('##'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('bb'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('#'), 4) + .addModifier(accid('n'), 5) + .addModifier(accid('bb'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) + .addModifier(accid('n'), 0) + .addModifier(accid('#'), 1) + .addModifier(accid('#'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: 'w' }) + .addModifier(accid('#'), 0) + .addModifier(accid('##').setAsCautionary(), 1) + .addModifier(accid('#').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb').setAsCautionary(), 4) + .addModifier(accid('b').setAsCautionary(), 5), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes); + notes.forEach((n, i) => { + options.assert.ok(n.getModifiersByType('Accidental').length > 0, 'Note ' + i + ' has accidentals'); + n.getModifiersByType('Accidental').forEach((accid, i) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + i + ' has set width'); + }); + }); + f.draw(); + options.assert.ok(true, 'Factory API'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(AccidentalTests); + + + +/***/ }), + +/***/ "./tests/annotation_tests.ts": +/*!***********************************!*\ + !*** ./tests/annotation_tests.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AnnotationTests": () => (/* binding */ AnnotationTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_registry__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/registry */ "./src/registry.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_vibrato__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../src/vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Annotation Tests +// TODO: Formatter.FormatAndDraw(ctx, stave, notes, ???number???); +// Did a previous version of the API accept a number as the fourth argument? +// We removed the fourth argument from all of our test cases. + + + + + + + + + + + + + + + + + +const AnnotationTests = { + Start() { + QUnit.module('Annotation'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Placement', placement); + run('Lyrics', lyrics); + run('Simple Annotation', simple); + run('Styled Annotation', styling); + run('Standard Notation Annotation', standard); + run('Harmonics', harmonic); + run('Fingerpicking', picking); + run('Bottom Annotation', bottom); + run('Bottom Annotations with Beams', bottomWithBeam); + run('Test Justification Annotation Stem Up', justificationStemUp); + run('Test Justification Annotation Stem Down', justificationStemDown); + run('TabNote Annotations', tabNotes); + }, +}; +const FONT_SIZE = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size; +// Helper functions to create TabNote and StaveNote objects. +const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_13__.TabNote(noteStruct); +const staveNote = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote(noteStruct); +/** + * Show lyrics using Annotation objects. + */ +function lyrics(options) { + let fontSize = FONT_SIZE; + let x = 10; + let width = 170; + let ratio = 1; + const registry = new _src_registry__WEBPACK_IMPORTED_MODULE_9__.Registry(); + _src_registry__WEBPACK_IMPORTED_MODULE_9__.Registry.enableDefaultRegistry(registry); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 260); + // Add three groups of staves. Each time we increase the fontSize by 2. + for (let i = 0; i < 3; ++i) { + const score = f.EasyScore(); + score.set({ time: '3/4' }); + const system = f.System({ width, x }); + system.addStave({ + voices: [ + score.voice(score.notes('(C4 F4)/2[id="n0"]').concat(score.beam(score.notes('(C4 A4)/8[id="n1"], (C4 A4)/8[id="n2"]')))), + ], + }); + // Add lyrics under the first row. + ['hand,', 'and', 'me', 'pears', 'lead', 'the'].forEach((text, ix) => { + const verse = Math.floor(ix / 3); + const noteGroupID = 'n' + (ix % 3); + const noteGroup = registry.getElementById(noteGroupID); + const lyricsAnnotation = f.Annotation({ text }).setFont('Roboto Slab', fontSize); + lyricsAnnotation.setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.BELOW); + noteGroup.addModifier(lyricsAnnotation, verse); + }); + // Second row doesn't have any lyrics. + system.addStave({ + voices: [score.voice(score.notes('(F4 D5)/2').concat(score.beam(score.notes('(F4 F5)/8, (F4 F5)/8'))))], + }); + f.draw(); + ratio = (fontSize + 2) / fontSize; + width = width * ratio; + x = x + width; + fontSize = fontSize + 2; + } + options.assert.ok(true); +} +function simple(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial, sans-serif'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_14__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('T'), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new _src_bend__WEBPACK_IMPORTED_MODULE_4__.Bend('Full').setTap('T'), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Simple Annotation'); +} +function standard(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 10, 450).addClef('treble').setContext(ctx).draw(); + const annotation = (text) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE, 'normal', 'italic'); + const notes = [ + staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet'), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro'), 2), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Standard Notation Annotation'); +} +function styling(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 10, 450).addClef('treble').setContext(ctx).draw(); + const annotation = (text, style) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE, 'normal', 'italic').setStyle(style); + const notes = [ + staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet', { fillStyle: '#0F0' }), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro', { fillStyle: '#00F' }), 2), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Standard Notation Annotation'); +} +function harmonic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_14__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 12 }, + { str: 3, fret: 12 }, + ], + duration: 'h', + }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Harm.'), 0), + tabNote({ + positions: [{ str: 2, fret: 9 }], + duration: 'h', + }) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('(8va)').setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.NORMAL, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('A.H.'), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Simple Annotation'); +} +function picking(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SANS_SERIF, FONT_SIZE); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_14__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const annotation = (text) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.NORMAL, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC); + const notes = [ + tabNote({ + positions: [ + { str: 1, fret: 0 }, + { str: 2, fret: 1 }, + { str: 3, fret: 2 }, + { str: 4, fret: 2 }, + { str: 5, fret: 0 }, + ], + duration: 'h', + }).addModifier(new _src_vibrato__WEBPACK_IMPORTED_MODULE_15__.Vibrato().setVibratoWidth(40), 0), + tabNote({ + positions: [{ str: 6, fret: 9 }], + duration: '8', + }).addModifier(annotation('p').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + tabNote({ + positions: [{ str: 3, fret: 9 }], + duration: '8', + }).addModifier(annotation('i').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + tabNote({ + positions: [{ str: 2, fret: 9 }], + duration: '8', + }).addModifier(annotation('m').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + tabNote({ + positions: [{ str: 1, fret: 9 }], + duration: '8', + }).addModifier(annotation('a').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Fingerpicking'); +} +function placement(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); + const annotation = (text, fontSize, vj) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, fontSize).setVerticalJustification(vj); + const notes = [ + staveNote({ keys: ['e/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['c/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(annotation('v1', 14, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 14, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('am').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(annotation('v1', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(annotation('v1', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(annotation('v1', 12, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 12, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.BELOW), 0) + .addModifier(annotation('v1', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('am').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.BELOW), 0) + .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) + .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/5'], duration: 'w' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.BELOW), 0) + .addModifier(annotation('v1', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 16, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, ' Annotation Placement'); +} +function bottom(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 10, 300).addClef('treble').setContext(ctx).draw(); + const annotation = (text) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE).setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM); + const notes = [ + staveNote({ keys: ['f/4'], duration: 'w' }).addModifier(annotation('F'), 0), + staveNote({ keys: ['a/4'], duration: 'w' }).addModifier(annotation('A'), 0), + staveNote({ keys: ['c/5'], duration: 'w' }).addModifier(annotation('C'), 0), + staveNote({ keys: ['e/5'], duration: 'w' }).addModifier(annotation('E'), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Bottom Annotation'); +} +function bottomWithBeam(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 10, 300).addClef('treble').setContext(ctx).draw(); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote({ keys: ['a/3'], duration: '8' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('good').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM)), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote({ keys: ['g/3'], duration: '8' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('even').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM)), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote({ keys: ['c/4'], duration: '8' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('under').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM)), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote({ keys: ['d/4'], duration: '8' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('beam').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM)), + ]; + const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_3__.Beam(notes.slice(1)); + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + beam.setContext(ctx).draw(); + options.assert.ok(true, 'Bottom Annotation with Beams'); +} +function justificationStemUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 650, 950); + ctx.scale(1.5, 1.5); + const annotation = (text, hJustification, vJustification) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text) + .setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SANS_SERIF, FONT_SIZE) + .setJustification(hJustification) + .setVerticalJustification(vJustification); + for (let v = 1; v <= 4; ++v) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['c/3'], duration: 'q' }).addModifier(annotation('Text', 1, v), 0), + staveNote({ keys: ['c/4'], duration: 'q' }).addModifier(annotation('Text', 2, v), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q' }).addModifier(annotation('Text', 3, v), 0), + staveNote({ keys: ['c/6'], duration: 'q' }).addModifier(annotation('Text', 4, v), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + } + options.assert.ok(true, 'Test Justification Annotation'); +} +function justificationStemDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 650, 1000); + ctx.scale(1.5, 1.5); + const annotation = (text, hJustification, vJustification) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text) + .setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SANS_SERIF, FONT_SIZE) + .setJustification(hJustification) + .setVerticalJustification(vJustification); + for (let v = 1; v <= 4; ++v) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['c/3'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 1, v), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 2, v), 0), + staveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 3, v), 0), + staveNote({ keys: ['c/6'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 4, v), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + } + options.assert.ok(true, 'Test Justification Annotation'); +} +function tabNotes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial, sans-serif'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_14__.TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '8', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + ]; + const notes1 = specs.map((noteSpec) => { + const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_13__.TabNote(noteSpec); + note.render_options.draw_stem = true; + return note; + }); + const notes2 = specs.map((noteSpec) => { + const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_13__.TabNote(noteSpec); + note.render_options.draw_stem = true; + note.setStemDirection(-1); + return note; + }); + const notes3 = specs.map((noteSpec) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_13__.TabNote(noteSpec)); + notes1[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(1).setVerticalJustification(1)); // U + notes1[1].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(2).setVerticalJustification(2)); // D + notes1[2].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(3)); // U + notes1[3].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(4).setVerticalJustification(4)); // D + notes2[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(1)); // U + notes2[1].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(2)); // D + notes2[2].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(3)); // U + notes2[3].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(4)); // D + notes3[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setVerticalJustification(1)); // U + notes3[1].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setVerticalJustification(2)); // D + notes3[2].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setVerticalJustification(3)); // U + notes3[3].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setVerticalJustification(4)); // D + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_16__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_5__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_16__.Voice.Mode.SOFT); + voice.addTickables(notes1); + voice.addTickables(notes2); + voice.addTickables(notes3); + // Alternatively, you could add all the notes in one big array with spread syntax. + // voice.addTickables([...notes1, ...notes2, ...notes3]); + new _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave }); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(AnnotationTests); + + + +/***/ }), + +/***/ "./tests/articulation_tests.ts": +/*!*************************************!*\ + !*** ./tests/articulation_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ArticulationTests": () => (/* binding */ ArticulationTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Articulation Tests + + + + + + + + + + + + + + +const ArticulationTests = { + Start() { + QUnit.module('Articulation'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Articulation - Vertical Placement', verticalPlacement); + run('Articulation - Vertical Placement (Glyph codes)', verticalPlacement2); + run('Articulation - Staccato/Staccatissimo', drawArticulations, { sym1: 'a.', sym2: 'av' }); + run('Articulation - Accent/Tenuto', drawArticulations, { sym1: 'a>', sym2: 'a-' }); + run('Articulation - Marcato/L.H. Pizzicato', drawArticulations, { sym1: 'a^', sym2: 'a+' }); + run('Articulation - Snap Pizzicato/Fermata', drawArticulations, { sym1: 'ao', sym2: 'ao' }); + run('Articulation - Up-stroke/Down-Stroke', drawArticulations, { sym1: 'a|', sym2: 'am' }); + run('Articulation - Fermata Above/Below', drawFermata, { sym1: 'a@a', sym2: 'a@u' }); + run('Articulation - Fermata Short Above/Below', drawFermata, { sym1: 'a@as', sym2: 'a@us' }); + run('Articulation - Fermata Long Above/Below', drawFermata, { sym1: 'a@al', sym2: 'a@ul' }); + run('Articulation - Fermata Very Long Above/Below', drawFermata, { sym1: 'a@avl', sym2: 'a@uvl' }); + run('Articulation - Inline/Multiple', drawArticulations2, { sym1: 'a.', sym2: 'a.' }); + run('TabNote Articulation', tabNotes, { sym1: 'a.', sym2: 'a.' }); + }, +}; +// Helper function for creating StaveNotes. +function drawArticulations(options) { + const sym1 = options.params.sym1; + const sym2 = options.params.sym2; + const width = 125 - _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 675, 195); + const ctx = f.getContext(); + options.assert.expect(0); + let x = 10; + const y = 30; + const score = f.EasyScore(); + const formatAndDrawToWidth = (x, y, width, notes, barline) => { + const voices = [score.voice(notes, { time: '4/4' })]; + const formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width); + formatter.format(voices, nwidth); + const stave = f + .Stave({ x, y, width: nwidth + _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding }) + .setEndBarType(barline) + .setContext(ctx) + .draw(); + voices.forEach((voice) => voice.draw(ctx, stave)); + return stave.getWidth(); + }; + // bar 1 + const notesBar1 = [ + f.StaveNote({ keys: ['a/3'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + ]; + notesBar1[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(4), 0); + notesBar1[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(4), 0); + notesBar1[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar1[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + // Helper function to justify and draw a 4/4 voice + x += formatAndDrawToWidth(x, y, width, notesBar1, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.NONE); + // bar 2 - juxtaposing second bar next to first bar + const notesBar2 = [ + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + notesBar2[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar2[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar2[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(4), 0); + notesBar2[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(4), 0); + // Helper function to justify and draw a 4/4 voice + x += formatAndDrawToWidth(x, y, width, notesBar2, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.DOUBLE); + // bar 3 - juxtaposing second bar next to first bar + const notesBar3 = [ + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + ]; + notesBar3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + notesBar3[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + notesBar3[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(3), 0); + notesBar3[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(3), 0); + // Helper function to justify and draw a 4/4 voice + x += formatAndDrawToWidth(x, y, width, notesBar3, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.NONE); + // bar 4 - juxtaposing second bar next to first bar + const notesBar4 = [ + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + notesBar4[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(3), 0); + notesBar4[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(3), 0); + notesBar4[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + notesBar4[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + // Helper function to justify and draw a 4/4 voice + formatAndDrawToWidth(x, y, width, notesBar4, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.END); +} +function drawFermata(options) { + const sym1 = options.params.sym1; + const sym2 = options.params.sym2; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 195); + const ctx = f.getContext(); + const score = f.EasyScore(); + const width = 150 - _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding; + let x = 50; + const y = 30; + const formatAndDrawToWidth = (x, y, width, notes, barline) => { + const voices = [score.voice(notes, { time: '4/4' })]; + const formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width); + formatter.format(voices, nwidth); + const stave = f + .Stave({ x, y, width: nwidth + _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding }) + .setEndBarType(barline) + .setContext(ctx) + .draw(); + voices.forEach((voice) => voice.draw(ctx, stave)); + return stave.getWidth(); + }; + options.assert.expect(0); + const notesBar1 = [ + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }), + ]; + notesBar1[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar1[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar1[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + notesBar1[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + x += formatAndDrawToWidth(x, y, width, notesBar1, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.NONE); + // bar 2 - juxtaposing second bar next to first bar + const notesBar2 = [ + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + notesBar2[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar2[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); + notesBar2[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + notesBar2[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); + // Helper function to justify and draw a 4/4 voice + formatAndDrawToWidth(x, y, width, notesBar2, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.DOUBLE); +} +function verticalPlacement(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const staveNote = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote(noteStruct); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, ' Annotation Placement'); +} +function verticalPlacement2(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const staveNote = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote(noteStruct); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataBelow'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataShortBelow'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataLongBelow'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataVeryShortBelow'), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataVeryLongBelow'), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW).setBetweenLines(), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow').setBetweenLines(), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataBelow'), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataAbove'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataShortAbove'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataLongAbove'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataVeryShortAbove'), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataVeryLongAbove'), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE).setBetweenLines(), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove').setBetweenLines(), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataAbove'), 0), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, ' Annotation Placement (Glyph codes)'); +} +function drawArticulations2(options) { + options.assert.expect(0); + const scale = 0.8; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 1500, 195); + // Get the rendering context + const ctx = f.getContext(); + ctx.scale(scale, scale); + // bar 1 + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 500).setContext(ctx).draw(); + const notesBar1 = [ + f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['b/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['c/6'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['d/6'], duration: '16', stem_direction: -1 }), + ]; + let i; + for (i = 0; i < 16; i++) { + notesBar1[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(4), 0); + notesBar1[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(4), 0); + if (i === 15) { + notesBar1[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(4), 0); + } + } + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1.slice(0, 8)); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1.slice(8, 16)); + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave1, notesBar1); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + // bar 2 - juxtaposing second bar next to first bar + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(510, 50, 500).setContext(ctx).draw(); + const notesBar2 = [ + f.StaveNote({ keys: ['f/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['g/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['a/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['b/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }), + ]; + for (i = 0; i < 16; i++) { + notesBar2[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(3), 0); + notesBar2[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a^').setPosition(3), 0); + if (i === 15) { + notesBar2[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(4), 0); + } + } + const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2.slice(0, 8)); + const beam4 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2.slice(8, 16)); + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave2, notesBar2); + beam3.setContext(ctx).draw(); + beam4.setContext(ctx).draw(); + // bar 3 - juxtaposing second bar next to first bar + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(1010, 50, 100).setContext(ctx).draw(); + const notesBar3 = [f.StaveNote({ keys: ['c/4'], duration: 'w', stem_direction: 1 })]; + notesBar3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(3), 0); + notesBar3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(3), 0); + notesBar3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(3), 0); + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave3, notesBar3); + // bar 4 - juxtaposing second bar next to first bar + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(1110, 50, 250).setContext(ctx).draw(); + const notesBar4 = [ + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + for (i = 0; i < 4; i++) { + let position1 = 3; + if (i > 1) { + position1 = 4; + } + notesBar4[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(position1), 0); + } + _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave4, notesBar4); +} +function tabNotes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt ' + _src_font__WEBPACK_IMPORTED_MODULE_4__.Font.SANS_SERIF; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_12__.TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '8', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + ]; + const notes1 = specs.map((noteSpec) => { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_11__.TabNote(noteSpec); + tabNote.render_options.draw_stem = true; + return tabNote; + }); + const notes2 = specs.map((noteSpec) => { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_11__.TabNote(noteSpec); + tabNote.render_options.draw_stem = true; + tabNote.setStemDirection(-1); + return tabNote; + }); + const notes3 = specs.map((noteSpec) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_11__.TabNote(noteSpec)); + notes1[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(3), 0); // U + notes1[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(4), 0); // D + notes1[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(3), 0); // U + notes1[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(4), 0); // D + notes2[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(3), 0); + notes2[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(4), 0); + notes2[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(3), 0); + notes2[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(4), 0); + notes3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(3), 0); + notes3[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(4), 0); + notes3[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(3), 0); + notes3[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(4), 0); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_13__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_3__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_13__.Voice.Mode.SOFT); + voice.addTickables(notes1); + voice.addTickables(notes2); + voice.addTickables(notes3); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ArticulationTests); + + + +/***/ }), + +/***/ "./tests/auto_beam_formatting_tests.ts": +/*!*********************************************!*\ + !*** ./tests/auto_beam_formatting_tests.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AutoBeamFormattingTests": () => (/* binding */ AutoBeamFormattingTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/fraction */ "./src/fraction.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Auto Beaming Tests +// TODO: Beam.generateBeams(voice.getTickables() as StemmableNote[], ...) requires a cast to StemmableNote[]. +// Is there a cleaner way to handle this? + + + + + +const AutoBeamFormattingTests = { + Start() { + QUnit.module('Auto-Beaming'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Auto Beaming', simpleAuto); + run('Auto Beaming With Overflow Group', simpleAutoWithOverflowGroup); + run('Even Group Stem Directions', evenGroupStemDirections); + run('Odd Group Stem Directions', oddGroupStemDirections); + run('Odd Beam Groups Auto Beaming', oddBeamGroups); + run('More Simple Auto Beaming 0', moreSimple0); + run('More Simple Auto Beaming 1', moreSimple1); + run('Beam Across All Rests', beamAcrossAllRests); + run('Beam Across All Rests with Stemlets', beamAcrossAllRestsWithStemlets); + run('Break Beams on Middle Rests Only', beamAcrossMiddleRests); + run('Break Beams on Rest', breakBeamsOnRests); + run('Maintain Stem Directions', maintainStemDirections); + run('Maintain Stem Directions - Beam Over Rests', maintainStemDirectionsBeamAcrossRests); + run('Beat group with unbeamable note - 2/2', groupWithUnbeamableNote); + run('Offset beat grouping - 6/8 ', groupWithUnbeamableNote1); + run('Odd Time - Guessing Default Beam Groups', autoOddBeamGroups); + run('Custom Beam Groups', customBeamGroups); + run('Simple Tuplet Auto Beaming', simpleTuplets); + run('More Simple Tuplet Auto Beaming', moreSimpleTuplets); + run('More Automatic Beaming', moreBeaming); + run('Automatic Beaming 4/4 with 3, 3, 2 Pattern', beamingWithSeveralGroups1); + run('Automatic Beaming 4/4 with 3, 3, 2 Pattern and Overflow', beamingWithSeveralGroupsOverflow); + run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 2 Overflows', beamingWithSeveralGroupsOverflow2); + run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 3 Overflows', beamingWithSeveralGroupsOverflow3); + run('Duration-Based Secondary Beam Breaks', secondaryBreaks1); + run('Duration-Based Secondary Beam Breaks 2', secondaryBreaks2); + run('Flat Beams Up', flatBeamsUp); + run('Flat Beams Down', flatBeamsDown); + run('Flat Beams Mixed Direction', flatBeamsMixed); + run('Flat Beams Up (uniform)', flatBeamsUpUniform); + run('Flat Beams Down (uniform)', flatBeamsDownUniform); + run('Flat Beams Up Bounds', flatBeamsUpBounds); + run('Flat Beams Down Bounds', flatBeamsDownBounds); + }, +}; +function simpleAuto(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5/8, e5, d5, c5/16, c5, d5/8, e5, f5, f5/32, f5, f5, f5'), { time: '4/4' }); + // Takes a voice and returns its auto beams. + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function simpleAutoWithOverflowGroup(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + // Add a . after a note (e.g., f5/4.) to make it a dotted note. + const voice = score.voice(score.notes('f5/4., e5/8, d5/8, d5/16, c5/16, c5/16, c5/16, f5/16, f5/32, f5/32'), { + time: '4/4', + }); + // Takes a voice and returns its auto beams. + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function evenGroupStemDirections(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('a4/8, b4, g4, c5, f4, d5, e4, e5, b4, b4, g4, d5'), { time: '6/4' }); + // Takes a voice and returns its auto beams. + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.equal(beams[0].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); + options.assert.equal(beams[1].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); + options.assert.equal(beams[2].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); + options.assert.equal(beams[3].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); + options.assert.equal(beams[4].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN); + options.assert.equal(beams[5].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function oddGroupStemDirections(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('g4/8, b4, d5, c5, f4, d5, e4, g5, g4, b4, g4, d5, a4, c5, a4'), { + time: '15/8', + }); + const groups = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8)]; + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, groups); + options.assert.equal(beams[0].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN, 'Notes are equidistant from middle line'); + options.assert.equal(beams[1].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN); + options.assert.equal(beams[2].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); + options.assert.equal(beams[3].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN, 'Notes are equidistant from middle line'); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function oddBeamGroups(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5, e5, d5, c5, c5, d5, e5, f5, f5, f4, f3, f5/16, f5'), { time: '6/4' }); + const groups = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(1, 8)]; + // Takes a voice and returns its auto beams. + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, groups); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreSimple0(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4, c5, g5, a5, c4, d4, a5'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreSimple1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function breakBeamsOnRests(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + beam_rests: false, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamAcrossAllRestsWithStemlets(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + show_stemlets: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamAcrossAllRests(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamAcrossMiddleRests(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + beam_middle_only: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function maintainStemDirections(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave(); + const score = f.EasyScore(); + // EasyScore.notes(line, ...) ignores whitespace in the line string. + const voice = score.voice(score.notes([ + 'b4/16, b4, b4[stem="down"], b4/r', + 'b4/r, b4[stem="down"], b4, b4', + 'b4[stem="down"], b4[stem="down"], b4, b4/r', + 'b4/32, b4[stem="down"], b4[stem="down"], b4, b4/16/r, b4', + ].join(', '), { stem: 'up' }), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + beam_rests: false, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function maintainStemDirectionsBeamAcrossRests(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'b4/16, b4, b4[stem="down"], b4/r', + 'b4/r, b4[stem="down"], b4, b4', + 'b4[stem="down"], b4[stem="down"], b4, b4/r', + 'b4/32, b4[stem="down"], b4[stem="down"], b4, b4/16/r, b4', + ].join(', '), { stem: 'up' }), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function groupWithUnbeamableNote(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave().addTimeSignature('2/4'); + const score = f.EasyScore(); + const voice = score.voice(score.notes('b4/16, b4, b4/4, b4/16, b4'), { time: '2/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + groups: [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 2)], + beam_rests: false, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function groupWithUnbeamableNote1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave().addTimeSignature('6/8'); + const score = f.EasyScore(); + const voice = score.voice(score.notes('b4/4, b4/4, b4/8, b4/8'), { time: '6/8' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + groups: [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8)], + beam_rests: false, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function autoOddBeamGroups(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 400); + const score = f.EasyScore(); + const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4'); + const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' }); + const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8'); + const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' }); + const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16'); + const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { + time: '13/16', + }); + // Flatten the arrays into a single Beam[]. + const beams = [ + ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice1, undefined, _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.getDefaultBeamGroups('5/4')), + ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice2, undefined, _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.getDefaultBeamGroups('5/8')), + ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice3, undefined, _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.getDefaultBeamGroups('13/16')), + ]; + f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3); + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.formatBegModifiers([stave1, stave2, stave3]); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function customBeamGroups(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 400); + const score = f.EasyScore(); + const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4'); + const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' }); + const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8'); + const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' }); + const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16'); + const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { time: '13/16' }); + const group1 = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(5, 8)]; + const group2 = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8)]; + const group3 = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(7, 16), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 16), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(4, 16)]; + // Flatten the three Beam[] into a single Beam[]. + // Alternatively, you can use .reduce(concat) flatten arrays, where concat is defined as (a, b) => a.concat(b). + const beams = [ + ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice1, undefined, group1), + ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice2, undefined, group2), + ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice3, undefined, group3), + ]; + f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3); + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.formatBegModifiers([stave1, stave2, stave3]); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +/** + * Helper function which uses Function.prototype.bind() to create shortcut methods. + * This can improve the readability of large blocks of EasyScore code. + */ +function createShortcuts(score) { + return { + notes: score.notes.bind(score), + tuplet: score.tuplet.bind(score), + }; +} +function simpleTuplets(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + ...tuplet(notes('c4/8, g4, c5')), + ...notes('g5/8, a5'), + ...tuplet(notes('a5/16, (c5 e5), a5, d5, a5'), { ratioed: false, notes_occupied: 4 }), + ], { time: '3/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreSimpleTuplets(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([...tuplet(notes('d4/4, g4, c5')), ...notes('g5/16, a5, a5, (c5 e5)')], { time: '3/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreBeaming(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4/4, c5/8., g5/16, a5/4, a5/16, (c5 e5)/16, a5/8'), { time: '9/8' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.getDefaultBeamGroups('9/8')); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroups1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4/4, c5/8, g5, a5, a5, f5'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroupsOverflow(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4/4., c5/8, g5, a5, a5'), { time: '4/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroupsOverflow2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/16, g4/2, f4/16, c5/8, a4/16, c4/16, g4/8, b4, c5, g5, f5, e5, c5, a4/4'), { + time: '8/4', + }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroupsOverflow3(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/16, g4/1, f4/16, c5/8, g5, f5, e5, c5, a4/4'), { time: '8/4' }); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function secondaryBreaks1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'f5/32, f5, f5, f5, f5/16., f5/32', + 'f5/16, f5/8, f5/16', + 'f5/32, f5/16., f5., f5/32', + 'f5/16., f5/32, f5, f5/16.', + ].join(','))); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Duration-Based Secondary Breaks Test'); +} +function secondaryBreaks2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + tuplet(notes('e5/16, f5, f5')), + tuplet(notes('f5/16, f5, c5')), + notes('a4/16., f4/32'), + tuplet(notes('d4/16, d4, d4')), + tuplet(notes('a5/8, (e5 g5), a5')), + tuplet(notes('f5/16, f5, f5')), + tuplet(notes('f5/16, f5, a4')), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Duration-Based Secondary Breaks Test'); +} +function flatBeamsUp(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + tuplet(notes('c4/8, g4, f5')), + notes('d5/8'), + tuplet(notes('c5/16, (c4 e4 g4), f4')), + notes('d5/8, e5, c4, f5/32, f5, f5, f5'), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + stem_direction: 1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Up Test'); +} +function flatBeamsDown(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, g5, a6/32, a6, a6, g4/64, g4')); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + stem_direction: -1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Down Test'); +} +function flatBeamsMixed(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/64, d5, e5, c5, f5, c5, a5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, c4, a4/32, a4, a4, g4/64, g4')); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { flat_beams: true }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Mixed Direction Test'); +} +function flatBeamsUpUniform(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + ...tuplet(notes('c4/8, g4, g5')), + ...notes('d5/8, c5/16, (c4 e4 g4), d5/8, e5, c4, f5/32, f5, f5, f5'), + ]); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 50, + stem_direction: 1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Up (uniform) Test'); +} +function flatBeamsDownUniform(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (e4 g4 b4)/16, e5, d5/8, e5/8, g5/8, a6/32, a6, a6, g4/64, g4')); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 155, + stem_direction: -1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Down (uniform) Test'); +} +function flatBeamsUpBounds(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + ...tuplet(notes('c4/8, g4/8, g5/8')), + ...notes('d5/8, c5/16, (c4 e4 g4)/16, d5/8, e5/8, c4/8, f5/32, f5/32, f5/32, f5/32'), + ]); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 60, + stem_direction: 1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Up (uniform) Test'); +} +function flatBeamsDownBounds(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'g5/8, a6/32, a6/32, a6/32, g4/64, g4/64', + 'c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, a5/8', + 'g5/8, (e4 g4 b4)/16, e5/16', + 'd5/8, e5/8', + ].join(','), { stem: 'down' })); + const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 145, + stem_direction: -1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Down (uniform) Test'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(AutoBeamFormattingTests); + + + +/***/ }), + +/***/ "./tests/bach_tests.ts": +/*!*****************************!*\ + !*** ./tests/bach_tests.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BachDemoTests": () => (/* binding */ BachDemoTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Bach Demo + + +const BachDemoTests = { + Start() { + QUnit.module('Bach Demo'); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests('Minuet 1', minuet1); + }, +}; +function minuet1(options) { + const registry = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry(); + _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry.enableDefaultRegistry(registry); + // Retrieve the element from the registry and cast to StaveNote, so we can call .addModifier( ) later. + const id = (id) => registry.getElementById(id); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 1100, 900); + const score = f.EasyScore({ throwOnError: true }); + // Bind these three functions so the code looks cleaner. + // Instead of score.voice(...), just call voice(...). + const voice = score.voice.bind(score); + const notes = score.notes.bind(score); + const beam = score.beam.bind(score); + let x = 120; + let y = 80; + function appendSystem(width) { + const system = f.System({ x, y, width, spaceBetweenStaves: 10 }); + x += width; + return system; + } + score.set({ time: '3/4' }); + /* Measure 1 */ + let system = appendSystem(220); + system + .addStave({ + voices: [ + voice([notes('D5/q[id="m1a"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + voice([f.TextDynamics({ text: 'p', duration: 'h', dots: 1, line: 9 })]), + ], + }) + .addClef('treble') + .addKeySignature('G') + .addTimeSignature('3/4') + .setTempo({ name: 'Allegretto', duration: 'h', dots: 1, bpm: 66 }, -30); + system + .addStave({ voices: [voice(notes('(G3 B3 D4)/h, A3/q', { clef: 'bass' }))] }) + .addClef('bass') + .addKeySignature('G') + .addTimeSignature('3/4'); + system.addConnector('brace'); + system.addConnector('singleRight'); + system.addConnector('singleLeft'); + id('m1a').addModifier(f.Fingering({ number: '5' }), 0); + /* Measure 2 */ + system = appendSystem(150); + system.addStave({ voices: [voice(notes('D5/q[id="m2a"], G4[id="m2b"], G4[id="m2c"]'))] }); + system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m2a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m2b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m2c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + f.Curve({ + from: id('m1a'), + to: id('m2a'), + options: { + cps: [ + { x: 0, y: 40 }, + { x: 0, y: 40 }, + ], + }, + }); + /* Measure 3 */ + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('E5/q[id="m3a"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], + }); + id('m3a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + /* Measure 4 */ + system = appendSystem(150); + system.addStave({ voices: [voice(notes('G5/q[id="m4a"], G4[id="m4b"], G4[id="m4c"]'))] }); + system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m4a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m4b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m4c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + f.Curve({ + from: id('m3a'), + to: id('m4a'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + }, + }); + /* Measure 5 */ + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('C5/q[id="m5a"]'), beam(notes('D5/8, C5, B4, A4', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], + }); + id('m5a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + system.addStave({ voices: [voice(notes('A3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + /* Measure 6 */ + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('B4/q'), beam(notes('C5/8, B4, A4, G4[id="m6a"]', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], + }); + system.addStave({ voices: [voice(notes('G3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + f.Curve({ + from: id('m5a'), + to: id('m6a'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + invert: true, + position_end: 'nearTop', + y_shift: 20, + }, + }); + /* Measure 7 (New system) */ + x = 20; + y += 230; + system = appendSystem(220); + system + .addStave({ + voices: [ + voice([notes('F4/q[id="m7a"]'), beam(notes('G4/8[id="m7b"], A4, B4, G4', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }) + .addClef('treble') + .addKeySignature('G'); + system + .addStave({ voices: [voice(notes('D4/q, B3[id="m7c"], G3', { clef: 'bass' }))] }) + .addClef('bass') + .addKeySignature('G'); + system.addConnector('brace'); + system.addConnector('singleRight'); + system.addConnector('singleLeft'); + id('m7a').addModifier(f.Fingering({ number: '2', position: 'below' }), 0); + id('m7b').addModifier(f.Fingering({ number: '1' }), 0); + id('m7c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + /* Measure 8 */ + system = appendSystem(180); + const grace = f.GraceNote({ keys: ['d/3'], clef: 'bass', duration: '4', slash: false }); + system.addStave({ voices: [voice(notes('A4/h.[id="m8c"]'))] }); + system.addStave({ + voices: [ + score + .set({ clef: 'bass' }) + .voice([notes('D4/q[id="m8a"]'), beam(notes('D3/8, C4, B3[id="m8b"], A3', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }); + system.addConnector('singleRight'); + id('m8b').addModifier(f.Fingering({ number: '1', position: 'above' }), 0); + id('m8c').addModifier(f.GraceNoteGroup({ notes: [grace] }), 0); + f.Curve({ + from: id('m7a'), + to: id('m8c'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + invert: true, + position: 'nearTop', + position_end: 'nearTop', + }, + }); + f.StaveTie({ from: grace, to: id('m8c') }); + /* Measure 9 */ + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('D5/q[id="m9a"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }); + system.addStave({ voices: [voice(notes('B3/h, A3/q', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m9a').addModifier(f.Fingering({ number: '5' }), 0); + /* Measure 10 */ + system = appendSystem(170); + system.addStave({ voices: [voice(notes('D5/q[id="m10a"], G4[id="m10b"], G4[id="m10c"]'))] }); + system.addStave({ voices: [voice(notes('G3/q[id="m10d"], B3, G3', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m10a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m10b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m10c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m10d').addModifier(f.Fingering({ number: '4' }), 0); + f.Curve({ + from: id('m9a'), + to: id('m10a'), + options: { + cps: [ + { x: 0, y: 40 }, + { x: 0, y: 40 }, + ], + }, + }); + /* Measure 11 */ + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('E5/q[id="m11a"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], + }); + id('m11a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + /* Measure 12 */ + system = appendSystem(170); + system.addStave({ voices: [voice(notes('G5/q[id="m12a"], G4[id="m12b"], G4[id="m12c"]'))] }); + system.addStave({ + voices: [ + score + .set({ clef: 'bass' }) + .voice([notes('B3/q[id="m12d"]'), beam(notes('C4/8, B3, A3, G3[id="m12e"]', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }); + system.addConnector('singleRight'); + id('m12a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m12b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m12c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m12d').addModifier(f.Fingering({ number: '2', position: 'above' }), 0); + id('m12e').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + f.Curve({ + from: id('m11a'), + to: id('m12a'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + }, + }); + /* Measure 13 (New system) */ + x = 20; + y += 230; + system = appendSystem(220); + system + .addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('c5/q[id="m13a"]'), beam(notes('d5/8, c5, b4, a4', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }) + .addClef('treble') + .addKeySignature('G'); + system + .addStave({ voices: [voice(notes('a3/h[id="m13b"], f3/q[id="m13c"]', { clef: 'bass' }))] }) + .addClef('bass') + .addKeySignature('G'); + system.addConnector('brace'); + system.addConnector('singleRight'); + system.addConnector('singleLeft'); + id('m13a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + id('m13b').addModifier(f.Fingering({ number: '1' }), 0); + id('m13c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + /* Measure 14 */ + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('B4/q'), beam(notes('C5/8, b4, a4, g4', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }); + system.addStave({ voices: [voice(notes('g3/h[id="m14a"], b3/q[id="m14b"]', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m14a').addModifier(f.Fingering({ number: '2' }), 0); + id('m14b').addModifier(f.Fingering({ number: '1' }), 0); + /* Measure 15 */ + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('a4/q'), beam(notes('b4/8, a4, g4, f4[id="m15a"]', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }); + system.addStave({ voices: [voice(notes('c4/q[id="m15b"], d4, d3', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m15a').addModifier(f.Fingering({ number: '2' }), 0); + id('m15b').addModifier(f.Fingering({ number: '2' }), 0); + /* Measure 16 */ + system = appendSystem(130); + system + .addStave({ + voices: [score.set({ clef: 'treble' }).voice([notes('g4/h.[id="m16a"]')].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], + }) + .setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarlineType.REPEAT_END); + system + .addStave({ voices: [voice(notes('g3/h[id="m16b"], g2/q', { clef: 'bass' }))] }) + .setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarlineType.REPEAT_END); + system.addConnector('boldDoubleRight'); + id('m16a').addModifier(f.Fingering({ number: '1' }), 0); + id('m16b').addModifier(f.Fingering({ number: '1' }), 0); + f.Curve({ + from: id('m13a'), + to: id('m16a'), + options: { + cps: [ + { x: 0, y: 50 }, + { x: 0, y: 20 }, + ], + invert: true, + position_end: 'nearTop', + }, + }); + /* Measure 17 */ + system = appendSystem(180); + system + .addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('b5/q[id="m17a"]'), beam(notes('g5/8, a5, b5, g5', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + voice([f.TextDynamics({ text: 'mf', duration: 'h', dots: 1, line: 10 })]), + ], + }) + .setBegBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarlineType.REPEAT_BEGIN); + system.addStave({ voices: [voice(notes('g3/h.', { clef: 'bass' }))] }).setBegBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarlineType.REPEAT_BEGIN); + system.addConnector('boldDoubleLeft'); + system.addConnector('singleRight'); + id('m17a').addModifier(f.Fingering({ number: '5', position: 'above' }), 0); + /* Measure 18 */ + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('a5/q[id="m18a"]'), beam(notes('d5/8, e5, f5, d5[id="m18b"]', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ], + }); + system.addStave({ voices: [voice(notes('f3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m18a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + f.Curve({ + from: id('m17a'), + to: id('m18b'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 30 }, + ], + }, + }); + /* Done */ + f.draw(); + _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry.disableDefaultRegistry(); + options.assert.ok(true, 'Bach Minuet 1'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BachDemoTests); + + + +/***/ }), + +/***/ "./tests/barline_tests.ts": +/*!********************************!*\ + !*** ./tests/barline_tests.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BarlineTests": () => (/* binding */ BarlineTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Barline Tests + + +const BarlineTests = { + Start() { + QUnit.module('Barline'); + QUnit.test('Enums', enums); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple BarNotes', simple); + run('Style BarNotes', style); + }, +}; +function enums(assert) { + // VexFlow 4.0 renamed Barline.type => BarlineType. + // The old way still works, for backwards compatibility. + assert.equal(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type, _src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType); + const a = _src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.DOUBLE; + const b = _src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.DOUBLE; + assert.equal(a, b); +} +function simple(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 380, 160); + const stave = f.Stave(); + const notes = [ + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }), + f.BarNote({ type: 'single' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]; + const voice = f.Voice().addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Simple Test'); +} +function style(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 380, 160); + const stave = f.Stave(); + const notes = [ + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }), + f.BarNote({ type: 'single' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]; + notes[1].setStyle({ shadowBlur: 15, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + const voice = f.Voice().addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Style'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BarlineTests); + + + +/***/ }), + +/***/ "./tests/beam_tests.ts": +/*!*****************************!*\ + !*** ./tests/beam_tests.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BeamTests": () => (/* binding */ BeamTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Beam Tests +// TODO: Factory.Beam()'s 'notes' argument is a StemmableNote[], but we only have access to Tickable[]. + + +const BeamTests = { + Start() { + QUnit.module('Beam'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Beam', simple); + run('Multi Beam', multi); + run('Sixteenth Beam', sixteenth); + run('Slopey Beam', slopey); + run('Auto-stemmed Beam', autoStem); + run('Mixed Beam 1', mixed); + run('Mixed Beam 2', mixed2); + run('Dotted Beam', dotted); + run('Partial Beam', partial); + run('Close Trade-offs Beam', tradeoffs); + run('Insane Beam', insane); + run('Lengthy Beam', lenghty); + run('Outlier Beam', outlier); + run('Break Secondary Beams', breakSecondaryBeams); + run('Partial Beam Direction', partialBeamDirection); + run('TabNote Beams Up', tabBeamsUp); + run('TabNote Beams Down', tabBeamsDown); + run('TabNote Auto Create Beams', autoTabBeams); + run('TabNote Beams Auto Stem', tabBeamsAutoStem); + run('Complex Beams with Annotations', complexWithAnnotation); + run('Complex Beams with Articulations', complexWithArticulation); + run('Complex Beams with Articulations two Staves', complexWithArticulation2); + }, +}; +function simple(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voice = score.voice([ + notes('(cb4 e#4 a4)/2'), + beam(notes('(cb4 e#4 a4)/8, (d4 f4 a4), (ebb4 g##4 b4), (f4 a4 c5)', { stem: 'up' })), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat), { time: '2/2' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Simple Test'); +} +function multi(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([beam(notes('f5/8, e5, d5, c5', { stem: 'up' })), beam(notes('c5, d5, e5, f5', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + voice([beam(notes('f4/8, e4, d4, c4', { stem: 'down' })), beam(notes('c4/8, d4, e4, f4', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Multi Test'); +} +function sixteenth(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([ + beam(notes('f5/16, f5, d5, c5', { stem: 'up' })), + beam(notes('c5/16, d5, f5, e5', { stem: 'up' })), + notes('f5/2', { stem: 'up' }), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + voice([ + beam(notes('f4/16, e4/16, d4/16, c4/16', { stem: 'down' })), + beam(notes('c4/16, d4/16, f4/16, e4/16', { stem: 'down' })), + notes('f4/2', { stem: 'down' }), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Sixteenth Test'); +} +function breakSecondaryBeams(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([ + beam(notes('f5/16., f5/32, c5/16., d5/32, c5/16., d5/32', { stem: 'up' }), { secondaryBeamBreaks: [1, 3] }), + beam(notes('f5/16, e5, e5, e5, e5, e5', { stem: 'up' }), { secondaryBeamBreaks: [2] }), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat), { time: '3/4' }), + voice([ + beam(notes('f4/32, d4, e4, c4, d4, c4, f4, d4, e4, c4, c4, d4', { stem: 'down' }), { + secondaryBeamBreaks: [3, 7], + }), + beam(notes('d4/16, f4, d4, e4, e4, e4', { stem: 'down' }), { secondaryBeamBreaks: [3] }), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat), { time: '3/4' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Breaking Secondary Beams Test'); +} +function partialBeamDirection(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([ + // Default beaming: + beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' })), + // Force first 16th beam right + beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'R' } }), + // Force first 16th beam left + beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'L' } }), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat), { time: '9/8' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Partial beam direction test'); +} +function slopey(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 140); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voice = score.voice([ + beam(notes('c4/8, f4/8, d5/8, g5/8', { stem: 'up' })), + beam(notes('d6/8, f5/8, d4/8, g3/8', { stem: 'up' })), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Slopey Test'); +} +function autoStem(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 140); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('a4/8, b4/8, g4/8, c5/8, f4/8, d5/8, e4/8, e5/8, b4/8, b4/8, g4/8, d5/8'), { + time: '6/4', + }); + const notes = voice.getTickables(); + const beams = [ + f.Beam({ notes: notes.slice(0, 2), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(2, 4), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(4, 6), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(6, 8), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(8, 10), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(10, 12), options: { autoStem: true } }), + ]; + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + const UP = _src_index__WEBPACK_IMPORTED_MODULE_1__.Stem.UP; + const DOWN = _src_index__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN; + options.assert.equal(beams[0].getStemDirection(), UP); + options.assert.equal(beams[1].getStemDirection(), UP); + options.assert.equal(beams[2].getStemDirection(), UP); + options.assert.equal(beams[3].getStemDirection(), UP); + options.assert.equal(beams[4].getStemDirection(), DOWN); + options.assert.equal(beams[5].getStemDirection(), DOWN); + f.draw(); + options.assert.ok(true, 'AutoStem Beam Test'); +} +function mixed(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 140); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice1 = score.voice(score.notes('f5/8, d5/16, c5/16, c5/16, d5/16, e5/8, f5/8, d5/16, c5/16, c5/16, d5/16, e5/8', { stem: 'up' })); + const voice2 = score.voice(score.notes('f4/16, e4/8, d4/16, c4/16, d4/8, f4/16, f4/16, e4/8, d4/16, c4/16, d4/8, f4/16', { stem: 'down' })); + [ + [0, 4], + [4, 8], + [8, 12], + ].forEach((range) => f.Beam({ notes: voice1.getTickables().slice(range[0], range[1]) })); + [ + [0, 4], + [4, 8], + [8, 12], + ].forEach((range) => f.Beam({ notes: voice2.getTickables().slice(range[0], range[1]) })); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true, 'Multi Test'); +} +function mixed2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5/32, d5/16, c5/32, c5/64, d5/128, e5/8, f5/16, d5/32, c5/64, c5/32, d5/16, e5/128', { + stem: 'up', + }), { time: '31/64' }); + const voice2 = score.voice(score.notes('f4/32, d4/16, c4/32, c4/64, d4/128, e4/8, f4/16, d4/32, c4/64, c4/32, d4/16, e4/128', { + stem: 'down', + }), { time: '31/64' }); + f.Beam({ notes: voice.getTickables().slice(0, 12) }); + f.Beam({ notes: voice2.getTickables().slice(0, 12) }); + f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); + f.draw(); + options.assert.ok(true, 'Multi Test'); +} +function dotted(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('d4/8, b3/8., a3/16, a3/8, b3/8., c4/16, d4/8, b3/8, a3/8., a3/16, b3/8., c4/16', { stem: 'up' }), { time: '6/4' }); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Beam({ notes: notes.slice(8, 12) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Dotted Test'); +} +function partial(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('d4/8, b3/32, c4/16., d4/16., e4/8, c4/64, c4/32, a3/8., b3/32., c4/8, e4/64, b3/16., b3/64, f4/8, e4/8, g4/64, e4/8'), { time: '89/64' }); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 3) }); + f.Beam({ notes: notes.slice(3, 9) }); + f.Beam({ notes: notes.slice(9, 13) }); + f.Beam({ notes: notes.slice(13, 17) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Partial Test'); +} +function tradeoffs(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('a4/8, b4/8, c4/8, d4/8, g4/8, a4/8, b4/8, c4/8', { stem: 'up' })); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Close Trade-offs Test'); +} +function insane(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('g4/8, g5/8, c4/8, b5/8, g4/8[stem="down"], a5[stem="down"], b4[stem="down"], c4/8', { stem: 'up' })); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 7) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Insane Test'); +} +function lenghty(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.beam(score.notes('g4/8, g4, g4, a4', { stem: 'up' })), { time: '2/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Lengthy Test'); +} +function outlier(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'g4/8[stem="up"], f4[stem="up"], d5[stem="up"], e4[stem="up"]', + 'd5/8[stem="down"], d5[stem="down"], c5[stem="down"], d5[stem="down"]', + ].join())); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); + f.draw(); + options.assert.ok(true, 'Outlier Test'); +} +function tabBeamsUp(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const stave = f.TabStave({ y: 20 }); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + return tabNote; + }); + f.Beam({ notes: notes.slice(1, 7) }); + f.Beam({ notes: notes.slice(8, 11) }); + f.Tuplet({ notes: notes.slice(8, 11), options: { ratioed: true } }); + const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'All objects have been drawn'); +} +function tabBeamsDown(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); + const stave = f.TabStave({ options: { num_lines: 10 } }); + const specs = [ + { + stem_direction: -1, + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + stem_direction: -1, + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8dd', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_dots = true; + return tabNote; + }); + _src_index__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes[1], notes[1]]); + f.Beam({ notes: notes.slice(1, 7) }); + f.Beam({ notes: notes.slice(8, 11) }); + f.Tuplet({ notes: notes.slice(8, 11), options: { location: -1 } }); + f.Tuplet({ notes: notes.slice(11, 14), options: { location: -1 } }); + const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'All objects have been drawn'); +} +function autoTabBeams(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const stave = f.TabStave(); + const specs = [ + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { positions: [{ str: 1, fret: 6 }], duration: '32' }, + { positions: [{ str: 1, fret: 6 }], duration: '32' }, + { positions: [{ str: 1, fret: 6 }], duration: '32' }, + { positions: [{ str: 6, fret: 6 }], duration: '32' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_dots = true; + return tabNote; + }); + const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes); + const beams = _src_index__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, -1); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'All objects have been drawn'); +} +// This tests makes sure the auto_stem functionality is works. +// TabNote stems within a beam group should end up normalized +function tabBeamsAutoStem(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 300); + const stave = f.TabStave(); + const specs = [ + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + stem_direction: -1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + stem_direction: 1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + stem_direction: -1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + stem_direction: 1, + }, + { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: 1 }, + { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 }, + { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 }, + { positions: [{ str: 6, fret: 6 }], duration: '32', stem_direction: -1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: -1 }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_dots = true; + return tabNote; + }); + // Stems should format down + f.Beam({ notes: notes.slice(0, 8), options: { autoStem: true } }); + // Stems should format up + f.Beam({ notes: notes.slice(8, 12), options: { autoStem: true } }); + const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'All objects have been drawn'); +} +function complexWithAnnotation(options) { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const stave = factory.Stave({ y: 40 }); + const s1 = [ + { keys: ['e/4'], duration: '128', stem_direction: 1 }, + { keys: ['d/4'], duration: '16', stem_direction: 1 }, + { keys: ['e/4'], duration: '8', stem_direction: 1 }, + { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + ]; + const s2 = [ + { keys: ['e/5'], duration: '128', stem_direction: -1 }, + { keys: ['d/5'], duration: '16', stem_direction: -1 }, + { keys: ['e/5'], duration: '8', stem_direction: -1 }, + { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + ]; + const font = { + family: _src_index__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 14, + weight: _src_index__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, + style: _src_index__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, + }; + const notes1 = s1.map((struct) => factory + .StaveNote(struct) // + .addModifier(factory.Annotation({ text: '1', vJustify: _src_index__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP, font }), 0)); + const notes2 = s2.map((struct) => factory + .StaveNote(struct) // + .addModifier(factory.Annotation({ text: '3', vJustify: _src_index__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM, font }), 0)); + factory.Beam({ notes: notes1 }); + factory.Beam({ notes: notes2 }); + const voice = factory.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); + factory.draw(); + options.assert.ok(true, 'Complex beam annotations'); +} +function complexWithArticulation(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const stave = f.Stave({ y: 40 }); + const s1 = [ + { keys: ['e/4'], duration: '128', stem_direction: 1 }, + { keys: ['d/4'], duration: '16', stem_direction: 1 }, + { keys: ['e/4'], duration: '8', stem_direction: 1 }, + { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + ]; + const s2 = [ + { keys: ['e/5'], duration: '128', stem_direction: -1 }, + { keys: ['d/5'], duration: '16', stem_direction: -1 }, + { keys: ['e/5'], duration: '8', stem_direction: -1 }, + { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + ]; + const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); + const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); + f.Beam({ notes: notes1 }); + f.Beam({ notes: notes2 }); + const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); + f.draw(); + options.assert.ok(true, 'Complex beam articulations'); +} +function complexWithArticulation2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 300); + const system = f.System(); + const s1 = [ + { keys: ['e/4'], duration: '128', stem_direction: 1 }, + { keys: ['d/4'], duration: '16', stem_direction: 1 }, + { keys: ['e/4'], duration: '8', stem_direction: 1 }, + { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + ]; + const s2 = [ + { keys: ['e/5'], duration: '128', stem_direction: -1 }, + { keys: ['d/5'], duration: '16', stem_direction: -1 }, + { keys: ['e/5'], duration: '8', stem_direction: -1 }, + { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + ]; + const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); + const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); + const notes3 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); + const notes4 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); + f.Beam({ notes: notes1 }); + f.Beam({ notes: notes2 }); + f.Beam({ notes: notes3 }); + f.Beam({ notes: notes4 }); + const voice1 = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); + const voice2 = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes3).addTickables(notes4); + system.addStave({ voices: [voice1] }); + system.addStave({ voices: [voice2] }); + f.draw(); + options.assert.ok(true, 'Complex beam articulations two staves'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BeamTests); + + + +/***/ }), + +/***/ "./tests/bend_tests.ts": +/*!*****************************!*\ + !*** ./tests/bend_tests.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BendTests": () => (/* binding */ BendTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Bend Tests + + + + + + + + + +const BendTests = { + Start() { + QUnit.module('Bend'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Double Bends', doubleBends); + run('Reverse Bends', reverseBends); + run('Bend Phrase', bendPhrase); + run('Double Bends With Release', doubleBendsWithRelease); + run('Whako Bend', whackoBends); + // TODO: Rename 'Whako Bend' => 'Whacko' + }, +}; +// Helper functions for creating TabNote and Bend objects. +const note = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(noteStruct); +const bendWithText = (text, release = false) => new _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend(text, release); +const bendWithPhrase = (phrase) => new _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend('', false, phrase); +/** + * Bend two strings at a time. + */ +function doubleBends(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + note({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('Full'), 0) + .addModifier(bendWithText('1/2'), 1), + note({ + positions: [ + { str: 2, fret: 5 }, + { str: 3, fret: 5 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('1/4'), 0) + .addModifier(bendWithText('1/4'), 1), + // This note is not visible because it is pushed off to the right by the ctx.scale(1.5, 1.5) at the top. + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'h', + }), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, stave, notes); + notes.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 140)); + options.assert.ok(true, 'Double Bends'); +} +function doubleBendsWithRelease(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 550, 240); + ctx.scale(1.0, 1.0); + ctx.setBackgroundFillStyle('#FFF'); + ctx.setFont('Arial', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550).addTabGlyph().setContext(ctx).draw(); + const notes = [ + note({ + positions: [ + { str: 1, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('1/2', true), 0) + .addModifier(bendWithText('Full', true), 1), + note({ + positions: [ + { str: 2, fret: 5 }, + { str: 3, fret: 5 }, + { str: 4, fret: 5 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('1/4', true), 0) + .addModifier(bendWithText('Monstrous', true), 1) + .addModifier(bendWithText('1/4', true), 2), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'q', + }), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'q', + }), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, stave, notes); + notes.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 140)); + options.assert.ok(true, 'Bend Release'); +} +/** + * Add the bend for note 1 before adding the bend for note 0, + * by swapping the two indexes in .addModifier(modifier, index). + * As a result, the bend curves intersect. + */ +function reverseBends(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.setFont('10pt Arial'); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + note({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'w', + }) + .addModifier(bendWithText('Full'), 1) + .addModifier(bendWithText('1/2'), 0), + note({ + positions: [ + { str: 2, fret: 5 }, + { str: 3, fret: 5 }, + ], + duration: 'w', + }) + .addModifier(bendWithText('1/4'), 1) + .addModifier(bendWithText('1/4'), 0), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'w', + }), + ]; + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const mc = new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__.ModifierContext(); + note.addToModifierContext(mc); + const tickContext = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext(); + tickContext + .addTickable(note) + .preFormat() + .setX(75 * i); + note.setStave(stave).setContext(ctx).draw(); + _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 140); + options.assert.ok(true, 'Bend ' + i); + } +} +function bendPhrase(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = _src_font__WEBPACK_IMPORTED_MODULE_2__.Font.SIZE + 'pt ' + _src_font__WEBPACK_IMPORTED_MODULE_2__.Font.SANS_SERIF; // Optionally use constants defined in Font. + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const phrase1 = [ + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: 'Full' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: 'Monstrous' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: '1/2' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, + ]; + const bend1 = bendWithPhrase(phrase1).setContext(ctx); + const notes = [ + note({ + positions: [{ str: 2, fret: 10 }], + duration: 'w', + }).addModifier(bend1, 0), + ]; + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.addToModifierContext(new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__.ModifierContext()); + const tickContext = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext(); + tickContext + .addTickable(note) + .preFormat() + .setX(75 * i); + note.setStave(stave).setContext(ctx).draw(); + _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 140); + options.assert.ok(true, 'Bend ' + i); + } +} +function whackoBends(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 240); + ctx.scale(1.0, 1.0); + ctx.setBackgroundFillStyle('#FFF'); + ctx.setFont('Arial', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 350).addTabGlyph().setContext(ctx).draw(); + const phrase1 = [ + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: 'Full' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: '1/2' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, + ]; + const phrase2 = [ + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: 'Full' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: 'Full' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: '1/2' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: 'Full' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: 'Full' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: '1/2' }, + { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, + ]; + const notes = [ + note({ + positions: [ + { str: 2, fret: 10 }, + { str: 3, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(bendWithPhrase(phrase1), 0) + .addModifier(bendWithPhrase(phrase2), 1), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, stave, notes); + _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, notes[0], 140); + options.assert.ok(true, 'Whacko Bend & Release'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BendTests); + + + +/***/ }), + +/***/ "./tests/boundingbox_tests.ts": +/*!************************************!*\ + !*** ./tests/boundingbox_tests.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BoundingBoxTests": () => (/* binding */ BoundingBoxTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Bounding Box Tests + + +const BoundingBoxTests = { + Start() { + QUnit.module('BoundingBox'); + QUnit.test('Initialization Test', initialization); + QUnit.test('Merging Text', merging); + }, +}; +function initialization(assert) { + const bb = new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(4, 5, 6, 7); + assert.equal(bb.getX(), 4, 'Bad X'); + assert.equal(bb.getY(), 5, 'Bad Y'); + assert.equal(bb.getW(), 6, 'Bad W'); + assert.equal(bb.getH(), 7, 'Bad H'); + bb.setX(5); + assert.equal(bb.getX(), 5, 'Bad X'); +} +function merging(assert) { + const tests = [ + { + type: 'Intersection', + bb1: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 10, 10), + bb2: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(15, 20, 10, 10), + merged: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 15, 20), + }, + { + type: '1 contains 2', + bb1: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 30, 30), + bb2: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(15, 15, 10, 10), + merged: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 30, 30), + }, + { + type: '2 contains 1', + bb1: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(15, 15, 10, 10), + bb2: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 30, 30), + merged: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 30, 30), + }, + ]; + tests.forEach((test) => { + const type = test.type; + const bb1 = test.bb1; + const bb2 = test.bb2; + const merged = test.merged; + bb1.mergeWith(bb2); + assert.equal(bb1.getX(), merged.getX(), type + ' - Bad X'); + assert.equal(bb1.getY(), merged.getY(), type + ' - Bad Y'); + assert.equal(bb1.getW(), merged.getW(), type + ' - Bad W'); + assert.equal(bb1.getH(), merged.getH(), type + ' - Bad H'); + }); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BoundingBoxTests); + + + +/***/ }), + +/***/ "./tests/chordsymbol_tests.ts": +/*!************************************!*\ + !*** ./tests/chordsymbol_tests.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ChordSymbolTests": () => (/* binding */ ChordSymbolTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_chordsymbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_ornament__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/ornament */ "./src/ornament.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_tables__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tables */ "./src/tables.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// ChordSymbol Tests + + + + + + + + + +const ChordSymbolTests = { + Start() { + QUnit.module('ChordSymbol'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Chord Symbol With Modifiers', withModifiers); + run('Chord Symbol Font Size Tests', fontSize); + run('Chord Symbol Kerning Tests', kern); + run('Top Chord Symbols', top); + run('Top Chord Symbols Justified', topJustify); + run('Bottom Chord Symbols', bottom); + run('Bottom Stem Down Chord Symbols', bottomStemDown); + run('Double Bottom Chord Symbols', doubleBottom); + }, +}; +// Options for customizing addGlyphOrText() or addGlyph(). +const superscript = { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_2__.ChordSymbol.symbolModifiers.SUPERSCRIPT }; +const subscript = { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_2__.ChordSymbol.symbolModifiers.SUBSCRIPT }; +// Helper function for creating StaveNotes. +const note = (factory, keys, duration, chordSymbol) => factory.StaveNote({ keys, duration }).addModifier(chordSymbol, 0); +/** Calculate the glyph's width in the current music font. */ +// How is this different from Glyph.getWidth()? The numbers don't match up. +function getGlyphWidth(glyphName) { + // `38` seems to be the `font_scale` specified in many classes, such as + // Accidental, Articulation, Ornament, Strokes. Does this mean `38pt`??? + // + // However, tables.ts specifies: + // NOTATION_FONT_SCALE: 39, + // TABLATURE_FONT_SCALE: 39, + const musicFont = _src_tables__WEBPACK_IMPORTED_MODULE_8__.Tables.currentMusicFont(); + const glyph = musicFont.getGlyphs()[glyphName]; + const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution(); + return widthInEm * 38 * _src_font__WEBPACK_IMPORTED_MODULE_3__.Font.scaleToPxFrom.pt; +} +function withModifiers(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 580); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const notes = [ + note(f, ['c/4'], 'q', chords[0]).addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_5__.Ornament('doit')), + note(f, ['c/4'], 'q', chords[1]), + note(f, ['c/4'], 'q', chords[2]).addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_5__.Ornament('fall')), + note(f, ['c/4'], 'q', chords[3]), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + const formatter = f.Formatter(); + formatter.joinVoices([voice]); + const voiceW = formatter.preCalculateMinTotalWidth([voice]); + const staffW = voiceW + _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave.defaultPadding + getGlyphWidth('gClef'); + formatter.format([voice], voiceW); + const staff = f.Stave({ x: 10, y, width: staffW }).addClef('treble').draw(); + voice.draw(ctx, staff); + } + let chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall')); + chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('b9', superscript).addGlyphOrText('#11', subscript)); + chords.push(f + .ChordSymbol({ fontSize: 14 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('add 3', superscript) + .addGlyphOrText('omit 9', subscript) + .addGlyph('rightParenTall')); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall')); + draw(chords, 40); + chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .setFontSize(10) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .setFontSize(16) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + draw(chords, 140); + chords = [ + f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + ]; + draw(chords, 240); + options.assert.ok(true, 'Font Size Chord Symbol'); +} +function fontSize(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 580); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble'); + const notes = [ + note(f, ['c/4'], 'q', chords[0]), + note(f, ['c/4'], 'q', chords[1]), + note(f, ['c/4'], 'q', chords[2]), + note(f, ['c/4'], 'q', chords[3]), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + let chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall') + .setReportWidth(false)); + chords.push(f + .ChordSymbol({ fontSize: 12 }) + .addText('F7') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .setReportWidth(false)); + chords.push(f + .ChordSymbol({ fontSize: 14 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('add 3', superscript) + .addGlyphOrText('omit 9', subscript) + .addGlyph('rightParenTall') + .setReportWidth(false)); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall') + .setReportWidth(false)); + draw(chords, 40); + chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .setFontSize(10) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .setFontSize(16) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + draw(chords, 140); + chords = [ + f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + ]; + draw(chords, 240); + options.assert.ok(true, 'Font Size Chord Symbol'); +} +function kern(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 650 * 1.5, 650); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['C/4'], 'q', chords[0]), + note(f, ['C/4'], 'q', chords[1]), + note(f, ['C/4'], 'q', chords[2]), + note(f, ['C/4'], 'q', chords[3]), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + let chords = [ + f.ChordSymbol().addText('A').addGlyphSuperscript('dim').setReportWidth(false), + f.ChordSymbol({ kerning: false, reportWidth: false }).addText('A').addGlyphSuperscript('dim'), + f.ChordSymbol({ hJustify: 'left', reportWidth: false }).addText('C').addGlyph('halfDiminished', superscript), + f.ChordSymbol({ reportWidth: false }).addText('D').addGlyph('halfDiminished', superscript), + ]; + draw(chords, 10); + chords = [ + f.ChordSymbol().addText('A').addGlyphSuperscript('dim'), + f.ChordSymbol({ kerning: false }).addText('A').addGlyphSuperscript('dim'), + f.ChordSymbol().addText('A').addGlyphSuperscript('+').addTextSuperscript('5'), + f.ChordSymbol().addText('G').addGlyphSuperscript('+').addTextSuperscript('5'), + ]; + draw(chords, 110); + chords = [ + f.ChordSymbol().addText('A').addGlyph('-'), + f.ChordSymbol().addText('E').addGlyph('-'), + f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript), + f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript), + ]; + draw(chords, 210); + chords = [ + f.ChordSymbol().addGlyphOrText('F/B').addGlyphOrText('b', superscript), + f.ChordSymbol().addText('E').addGlyphOrText('V/V'), + f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript), + f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript), + ]; + draw(chords, 310); + options.assert.ok(true, 'Chord Symbol Kerning Tests'); +} +function top(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 650 * 1.5, 650); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + // Helper function for creating StaveNotes. + const note = (factory, keys, duration, chordSymbol, direction) => factory.StaveNote({ keys, duration, stem_direction: direction }).addModifier(chordSymbol, 0); + function draw(c1, c2, y) { + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['e/4', 'a/4', 'd/5'], 'h', c1, 1).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0), + note(f, ['c/5', 'e/5', 'c/6'], 'h', c2, -1), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + let chord1 = f + .ChordSymbol({ reportWidth: false }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('(#11b9)', superscript); + let chord2 = f + .ChordSymbol({ reportWidth: false }) + .addText('C') + .setHorizontal('left') + .addGlyphSuperscript('majorSeventh'); + draw(chord1, chord2, 40); + chord1 = f + .ChordSymbol() + .addText('F7') + .addTextSuperscript('(') + .addGlyphOrText('#11b9', superscript) + .addTextSuperscript(')'); + chord2 = f.ChordSymbol().addText('C').setHorizontal('left').addTextSuperscript('Maj.'); + draw(chord1, chord2, 140); + chord1 = f + .ChordSymbol() + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript); + chord2 = f.ChordSymbol().addText('C').addTextSuperscript('sus4'); + draw(chord1, chord2, 240); + options.assert.ok(true, 'Top Chord Symbol'); +} +function topJustify(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500 * 1.5, 680); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chord1, chord2, y) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(10, y, 450).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['e/4', 'a/4', 'd/5'], 'h', chord1).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0), + note(f, ['c/4', 'e/4', 'B/4'], 'h', chord2), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); + } + let chord1 = f.ChordSymbol().addText('F7').setHorizontal('left').addGlyphOrText('(#11b9)', superscript); + let chord2 = f.ChordSymbol({ hJustify: 'left' }).addText('C').addGlyphSuperscript('majorSeventh'); + draw(chord1, chord2, 40); + chord1 = f + .ChordSymbol({ hJustify: 'center' }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('(#11b9)', superscript); + chord2 = f.ChordSymbol({ hJustify: 'center' }).addText('C').addTextSuperscript('Maj.'); + draw(chord1, chord2, 140); + chord1 = f + .ChordSymbol({ hJustify: 'right' }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript); + chord2 = f.ChordSymbol({ hJustify: 'right' }).addText('C').addTextSuperscript('Maj.'); + draw(chord1, chord2, 240); + chord1 = f + .ChordSymbol({ hJustify: 'left' }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript); + chord2 = f.ChordSymbol({ hJustify: 'centerStem' }).addText('C').addTextSuperscript('Maj.'); + draw(chord1, chord2, 340); + options.assert.ok(true, 'Top Chord Justified'); +} +function bottom(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600 * 1.5, 230); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(10, y, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[0]), + note(f, ['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 2), + note(f, ['c/4', 'e/4', 'g/4'], 'q', chords[2]), + note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 1), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); + } + const chords = [ + f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'), + f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'), + ]; + draw(chords, 10); + options.assert.ok(true, 'Bottom Chord Symbol'); +} +function bottomStemDown(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600 * 1.5, 330); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + // Helper function to create a StaveNote with a ChordSymbol and the stem pointing down. + const note = (keys, duration, chordSymbol) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys, duration, stem_direction: -1 }).addModifier(chordSymbol, 0); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(10, y, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(['c/4', 'f/4', 'a/4'], 'q', chords[0]), + note(['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 2), + note(['c/4', 'e/4', 'g/4'], 'q', chords[2]), + note(['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 1), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); + } + const chords = [ + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('F'), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('C7'), + f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), + f.ChordSymbol({ vJustify: 'bottom' }).addText('A').addGlyphSuperscript('dim'), + ]; + draw(chords, 10); + options.assert.ok(true, 'Bottom Stem Down Chord Symbol'); +} +function doubleBottom(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600 * 1.5, 260); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, chords2, y) { + // Helper function to create a StaveNote with two ChordSymbols attached. + const note = (keys, duration, chordSymbol1, chordSymbol2) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys, duration }).addModifier(chordSymbol1, 0).addModifier(chordSymbol2, 0); + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(['c/4', 'f/4', 'a/4'], 'q', chords[0], chords2[0]), + note(['c/4', 'e/4', 'b/4'], 'q', chords[1], chords2[1]).addModifier(f.Accidental({ type: 'b' }), 2), + note(['c/4', 'e/4', 'g/4'], 'q', chords[2], chords2[2]), + note(['c/4', 'f/4', 'a/4'], 'q', chords[3], chords2[3]).addModifier(f.Accidental({ type: '#' }), 1), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); + } + const chords1 = [ + f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'), + f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'), + ]; + const chords2 = [ + f.ChordSymbol({ vJustify: 'bottom' }).addText('T'), + f.ChordSymbol({ vJustify: 'bottom' }).addText('D'), + f.ChordSymbol({ vJustify: 'bottom' }).addText('D'), + f.ChordSymbol({ vJustify: 'bottom' }).addText('SD'), + ]; + draw(chords1, chords2, 10); + options.assert.ok(true, '2 Bottom Chord Symbol'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ChordSymbolTests); + + + +/***/ }), + +/***/ "./tests/clef_tests.ts": +/*!*****************************!*\ + !*** ./tests/clef_tests.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ClefTests": () => (/* binding */ ClefTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Clef Tests + +const ClefTests = { + Start() { + QUnit.module('Clef'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Clef Test', draw); + run('Clef End Test', drawEnd); + run('Small Clef Test', drawSmall); + run('Small Clef End Test', drawSmallEnd); + run('Clef Change Test', drawClefChange); + }, +}; +function draw(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('treble') + .addClef('treble', 'default', '8va') + .addClef('treble', 'default', '8vb') + .addClef('alto') + .addClef('tenor') + .addClef('soprano') + .addClef('bass') + .addClef('bass', 'default', '8vb') + .addClef('mezzo-soprano') + .addClef('baritone-c') + .addClef('baritone-f') + .addClef('subbass') + .addClef('percussion') + .addClef('french') + .addEndClef('treble'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawEnd(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('bass') + .addEndClef('treble') + .addEndClef('treble', 'default', '8va') + .addEndClef('treble', 'default', '8vb') + .addEndClef('alto') + .addEndClef('tenor') + .addEndClef('soprano') + .addEndClef('bass') + .addEndClef('bass', 'default', '8vb') + .addEndClef('mezzo-soprano') + .addEndClef('baritone-c') + .addEndClef('baritone-f') + .addEndClef('subbass') + .addEndClef('percussion') + .addEndClef('french'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawSmall(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('treble', 'small') + .addClef('treble', 'small', '8va') + .addClef('treble', 'small', '8vb') + .addClef('alto', 'small') + .addClef('tenor', 'small') + .addClef('soprano', 'small') + .addClef('bass', 'small') + .addClef('bass', 'small', '8vb') + .addClef('mezzo-soprano', 'small') + .addClef('baritone-c', 'small') + .addClef('baritone-f', 'small') + .addClef('subbass', 'small') + .addClef('percussion', 'small') + .addClef('french', 'small') + .addEndClef('treble', 'small'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawSmallEnd(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('bass', 'small') + .addEndClef('treble', 'small') + .addEndClef('treble', 'small', '8va') + .addEndClef('treble', 'small', '8vb') + .addEndClef('alto', 'small') + .addEndClef('tenor', 'small') + .addEndClef('soprano', 'small') + .addEndClef('bass', 'small') + .addEndClef('bass', 'small', '8vb') + .addEndClef('mezzo-soprano', 'small') + .addEndClef('baritone-c', 'small') + .addEndClef('baritone-f', 'small') + .addEndClef('subbass', 'small') + .addEndClef('percussion', 'small') + .addEndClef('french', 'small'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawClefChange(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 180); + const stave = f.Stave().addClef('treble'); + const notes = [ + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + f.ClefNote({ type: 'alto', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'alto' }), + f.ClefNote({ type: 'tenor', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'tenor' }), + f.ClefNote({ type: 'soprano', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'soprano' }), + f.ClefNote({ type: 'bass', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'bass' }), + f.ClefNote({ type: 'mezzo-soprano', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'mezzo-soprano' }), + f.ClefNote({ type: 'baritone-c', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-c' }), + f.ClefNote({ type: 'baritone-f', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-f' }), + f.ClefNote({ type: 'subbass', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'subbass' }), + f.ClefNote({ type: 'french', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'french' }), + f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8vb' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: -1 }), + f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8va' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: 1 }), + ]; + const voice = f.Voice({ time: '12/4' }).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ClefTests); + + + +/***/ }), + +/***/ "./tests/crossbeam_tests.ts": +/*!**********************************!*\ + !*** ./tests/crossbeam_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CrossBeamTests": () => (/* binding */ CrossBeamTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Formatter Tests + + +const CrossBeamTests = { + Start() { + QUnit.module('CrossBeam'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + const crossStaveTests = []; + crossStaveTests.push({ + title: 'Single clef mixed 1', + time: '3/4', + voices: [ + { + notes: [{ notestring: 'g4/16, f4/16, a6/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }], + stavemask: [0, 0, 0, 0, 0, 0, 0], + beammask: [1, 1, -1, -1, 0, -1, 1], + clef: 'treble', + }, + ], + }); + crossStaveTests.push({ + title: 'Single clef mixed 2', + time: '3/4', + voices: [ + { + notes: [{ notestring: 'g4/16, f6/16, a4/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }], + stavemask: [0, 0, 0, 0, 0, 0, 0], + beammask: [1, -1, 1, -1, 0, -1, 1], + clef: 'treble', + }, + ], + }); + crossStaveTests.push({ + title: 'Mixed clef voice middle', + time: '2/4', + voices: [ + { + notes: [{ notestring: 'e#5/4, b4/16/r, b4/16, d5/16., c5/32 ', clef: 'treble' }], + stavemask: [0, 0, 0, 0, 0], + beammask: [0, 0, 1, 1, 1], + clef: 'treble', + }, + { + notes: [ + { notestring: 'C3/16, B3/16, C4/16', clef: 'bass' }, + { notestring: 'E#4/16', clef: 'treble' }, + { notestring: 'C4/4', clef: 'bass' }, + ], + stavemask: [1, 1, 1, 0, 1], + beammask: [1, 1, 1, -1, 0], + clef: 'bass', + }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up1)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up2)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up3)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up4)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down1)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down2)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down3)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down4)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle1)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle2)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle3)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle4)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.forEach((cst) => { + run(cst.title, crossClef, cst); + }); + }, +}; +function crossClef(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400 + _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave.defaultPadding, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + details: { softmaxFactor: 100 }, + autoWidth: true, + debugFormatter: false, + }); + const testdata = options.params; + const voicedata = testdata.voices; + const stavemap = []; + for (let i = 0; i < voicedata.length; ++i) { + const clef = voicedata[i].clef; + stavemap.push(system.addStave({ voices: [] }).addClef(clef).addTimeSignature(testdata.time)); + } + for (let i = 0; i < voicedata.length; ++i) { + const stavemask = voicedata[i].stavemask; + let scoreNotes = []; + const voicenotes = voicedata[i].notes; + for (let k = 0; k < voicenotes.length; ++k) { + scoreNotes = scoreNotes.concat(score.notes(voicenotes[k].notestring, { clef: voicenotes[k].clef })); + } + const beammask = voicedata[i].beammask; + let curGroup = []; + const beamGroups = []; + for (let j = 0; j < scoreNotes.length; ++j) { + const note = scoreNotes[j]; + note.setStave(stavemap[stavemask[j]]); + if (beammask[j] !== 0) { + note.setStemDirection(beammask[j]); + curGroup.push(note); + } + else { + if (curGroup.length) { + beamGroups.push(curGroup); + curGroup = []; + } + } + } + if (curGroup.length) { + beamGroups.push(curGroup); + } + beamGroups.forEach((bg) => { + score.beam(bg); + }); + if (scoreNotes.length > 0) { + const voice = score.voice(scoreNotes, { time: testdata.time }); + system.addVoices([voice]); + } + } + f.draw(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(CrossBeamTests); + + + +/***/ }), + +/***/ "./tests/curve_tests.ts": +/*!******************************!*\ + !*** ./tests/curve_tests.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CurveTests": () => (/* binding */ CurveTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_curve__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/curve */ "./src/curve.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Curve Tests + + +const CurveTests = { + Start() { + QUnit.module('Curve'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Curve', simple); + run('Rounded Curve', rounded); + run('Thick Thin Curves', thickThin); + run('Top Curve', top); + }, +}; +/** + * Helper function. Each test case passes in a set of notes and + * a setupCurves() callback which uses Factory.Curve(...) to build the curves. + * Curves can be used to indicate slurs (legato articulation). + */ +function createTest(noteGroup1, noteGroup2, setupCurves) { + return (options) => { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 200); + const stave = factory.Stave({ y: 50 }); + const score = factory.EasyScore(); + // Use .reduce(concat) to flatten the two StaveNote[] into a single StaveNote[]. + const staveNotes = [ + score.beam(score.notes(...noteGroup1)), + score.beam(score.notes(...noteGroup2)), // group 2 + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat); + setupCurves(factory, staveNotes); + const voices = [score.voice(staveNotes, { time: '4/4' })]; + factory.Formatter().joinVoices(voices).formatToStave(voices, stave); + factory.draw(); + options.assert.ok('Simple Curve'); + }; +} +const simple = createTest(['c4/8, f5, d5, g5', { stem: 'up' }], // beamGroup1 +['d6/8, f5, d5, g5', { stem: 'down' }], // beamGroup2 +(f, notes) => { + f.Curve({ + from: notes[0], + to: notes[3], + options: { + cps: [ + { x: 0, y: 10 }, + { x: 0, y: 50 }, + ], + }, + }); + f.Curve({ + from: notes[4], + to: notes[7], + options: { + cps: [ + { x: 0, y: 10 }, + { x: 0, y: 20 }, + ], + }, + }); +}); +const rounded = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1 +['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2 +(f, notes) => { + f.Curve({ + from: notes[0], + to: notes[3], + options: { + x_shift: -10, + y_shift: 30, + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 50 }, + ], + }, + }); + f.Curve({ + from: notes[4], + to: notes[7], + options: { + cps: [ + { x: 0, y: 50 }, + { x: 0, y: 50 }, + ], + }, + }); +}); +const thickThin = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1 +['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2 +(f, notes) => { + f.Curve({ + from: notes[0], + to: notes[3], + options: { + thickness: 10, + x_shift: -10, + y_shift: 30, + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 50 }, + ], + }, + }); + f.Curve({ + from: notes[4], + to: notes[7], + options: { + thickness: 0, + cps: [ + { x: 0, y: 50 }, + { x: 0, y: 50 }, + ], + }, + }); +}); +const top = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1 +['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2 +(f, notes) => { + f.Curve({ + from: notes[0], + to: notes[7], + options: { + x_shift: -3, + y_shift: 10, + position: _src_curve__WEBPACK_IMPORTED_MODULE_1__.CurvePosition.NEAR_TOP, + position_end: _src_curve__WEBPACK_IMPORTED_MODULE_1__.CurvePosition.NEAR_HEAD, + cps: [ + { x: 0, y: 20 }, + { x: 40, y: 80 }, + ], + }, + }); +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(CurveTests); + + + +/***/ }), + +/***/ "./tests/dot_tests.ts": +/*!****************************!*\ + !*** ./tests/dot_tests.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "DotTests": () => (/* binding */ DotTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Dot Tests + + + + + + + + + + +const DotTests = { + Start() { + QUnit.module('Dot'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Basic', basic); + run('Multi Voice', multiVoice); + }, +}; +/** + * Helper function for the basic test case below. + */ +function showOneNote(note1, stave, ctx, x) { + const modifierContext = new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__.ModifierContext(); + note1.setStave(stave).addToModifierContext(modifierContext); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext().addTickable(note1).preFormat().setX(x); + note1.setContext(ctx).draw(); + _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note1, 140); +} +function basic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 1000, 240); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(10, 10, 975); + stave.setContext(ctx); + stave.draw(); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['c/4', 'e/4', 'a/4', 'b/4'], duration: 'w' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['a/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['g/4', 'a/4', 'b/4'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['e/4', 'f/4', 'b/4', 'c/5'], duration: '4' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ + keys: ['g/4', 'a/4', 'd/5', 'e/5', 'g/5'], + duration: '4', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['g/4', 'b/4', 'd/5', 'e/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ + keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], + duration: '16', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ + keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'f/5'], + duration: '16', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ + keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5'], + duration: '16', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['e/4', 'a/4', 'b/4', 'c/5'], duration: '16', stem_direction: 1 }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach(notes, { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes[7], notes[8], notes[9]], { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes[8], notes[9]], { all: true }); + const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(notes.length - 2)); + for (let i = 0; i < notes.length; i++) { + showOneNote(notes[i], stave, ctx, 30 + i * 65); + const dots = notes[i].getModifiersByType('Dot'); + options.assert.ok(dots.length > 0, 'Note ' + i + ' has dots'); + for (let j = 0; j < dots.length; ++j) { + options.assert.ok(dots[j].getWidth() > 0, 'Dot ' + j + ' has width set'); + } + } + beam.setContext(ctx).draw(); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 890, 140); + options.assert.ok(true, 'Full Dot'); +} +function multiVoice(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(30, 45, 700).setContext(ctx).draw(); + const notes1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 0 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 0 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 1 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 1 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 2 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 2 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 2 }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[2], notes1[3], notes1[4]]); + const notes2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'g/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach(notes2, { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes2[1]], { all: true }); + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice.Mode.SOFT).addTickables(notes1); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice.Mode.SOFT).addTickables(notes2); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter().joinVoices([voice1, voice2]); + formatter.format([voice1, voice2], 700); + voice1.draw(ctx, stave); + voice2.draw(ctx, stave); + notes1.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 190)); + notes2.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 20)); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 620, 220); + options.assert.ok(true, 'Full Dot'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(DotTests); + + + +/***/ }), + +/***/ "./tests/easyscore_tests.ts": +/*!**********************************!*\ + !*** ./tests/easyscore_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "EasyScoreTests": () => (/* binding */ EasyScoreTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_easyscore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_parenthesis__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_tuplet__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tuplet */ "./src/tuplet.ts"); +// [VexFlow](https://vexflow.com/) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// EasyScore Tests + + + + + + + + + +const EasyScoreTests = { + Start() { + QUnit.module('EasyScore'); + QUnit.test('Basic', basic); + QUnit.test('Accidentals', accidentals); + QUnit.test('Durations', durations); + QUnit.test('Chords', chords); + QUnit.test('Dots', dots); + QUnit.test('Types', types); + QUnit.test('Options', options); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Draw Basic', drawBasicTest); + run('Draw Different KeySignature', drawDiffKeysig); + run('Draw Basic Muted', drawBasicMutedTest); + run('Draw Basic Harmonic', drawBasicHarmonicTest); + run('Draw Basic Slash', drawBasicSlashTest); + run('Draw Ghostnote Basic', drawGhostBasicTest); + run('Draw Ghostnote Dotted', drawGhostDottedTest); + run('Draw Parenthesised', drawParenthesisedTest); + run('Draw Accidentals', drawAccidentalsTest); + run('Draw Beams', drawBeamsTest); + run('Draw Tuplets', drawTupletsTest); + run('Draw Dots', drawDotsTest); + run('Draw Options', drawOptionsTest); + run('Draw Fingerings', drawFingeringsTest); + run('Keys', keys); + }, +}; +/** + * Use Function.prototype.bind() to create shortcut methods. + * This can improve the readability of your EasyScore code. + */ +function createShortcuts(score) { + return { + voice: score.voice.bind(score), + notes: score.notes.bind(score), + beam: score.beam.bind(score), + tuplet: score.tuplet.bind(score), + }; +} +/** + * Test case verifies: + * - all strings in `mustPass` parse correctly + * - all strings in `mustFail` fail to parse (i.e., Result.success is `false`). + */ +function basic(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = ['c4', 'c#4', 'c4/r', 'c#5', 'c3/m', 'c3//m', 'c3//h', 'c3/s', 'c3//s', 'c3/g', 'c3//g']; + const mustFail = ['', '()', '7', '(c#4 e5 g6']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function accidentals(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = [ + 'c3', + 'c##3, cb3', + 'Cn3', + 'f3//m', + '(c##3 cbb3 cn3), cb3', + 'cbbs7', + 'cbb7', + 'cbss7', + 'cbs7', + 'cb7', + 'cdb7', + 'cd7', + 'c##7', + 'c#7', + 'cn7', + 'c++-7', + 'c++7', + 'c+-7', + 'c+7', + '(cbs3 bbs3 dbs3), ebs3', + '(cd7 cbb3 cn3), cb3', + 'co7', + 'ck7', + ]; + const mustFail = [ + 'ct3', + 'cdbb7', + '(cq cbb3 cn3), cb3', + '(cdd7 cbb3 cn3), cb3', + 'cbbbs7', + 'cbbss7', + 'cbsss7', + 'csbs7', + 'cddb7', + 'cddbb7', + 'cdd7', + 'c##b7', + 'c#bs7', + 'cnb#7', + 'c+#+b-d7', + 'c+--7', + 'c++--7', + 'c+++7', + 'cbk7', + 'cok7', + 'cko7', + 'c#s7', + ]; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function durations(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = ['c3/4', 'c##3/w, cb3', 'c##3/w, cb3/q', 'c##3/q, cb3/32', '(c##3 cbb3 cn3), cb3']; + const mustFail = ['Cn3/]', '/', '(cq cbb3 cn3), cb3', '(cdd7 cbb3 cn3), cb3']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function chords(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = [ + '(c5)', + '(c3 e0 g9)', + '(c##4 cbb4 cn4)/w, (c#5 cb2 a3)/32', + '(d##4 cbb4 cn4)/w/r, (c#5 cb2 a3)', + '(c##4 cbb4 cn4)/4, (c#5 cb2 a3)', + '(c##4 cbb4 cn4)/m, (c#5 cb2 a3)', + ]; + const mustFail = ['(c)']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function dots(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = [ + 'c3/4.', + 'c##3/w.., cb3', + 'f##3/s, cb3/q...', + 'c##3/q, cb3/32', + '(c##3 cbb3 cn3)., cb3', + '(c5).', + '(c##4 cbb4 cn4)/w.., (c#5 cb2 a3)/32', + ]; + const mustFail = ['.', 'c.#', 'c#4./4']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function types(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = ['c3/4/m.', 'c##3//r.., cb3', 'c##3/m.., cb3', 'c##3/r.., cb3', 'd##3/w/s, cb3/q...', 'Fb4']; + const mustFail = ['c4/q/U', '(c##4, cbb4 cn4)/w.., (c#5 cb2 a3)/32', 'z#3']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function options(assert) { + const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); + const mustPass = [ + 'c3/4.[foo="bar"]', + 'c##3/w.., cb3[id="blah"]', + 'c##3/q, cb3/32', + '(c##3 cbb3 cn3).[blah="bod4o"], cb3', + '(c5)[fooooo="booo"]', + 'c#5[id="foobar"]', + ]; + const mustFail = ['.[', 'f##3/w[], cb3/q...']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function drawBasicTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), + voice(notes('c#5/h., c5/q', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawDiffKeysig(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), + voice(notes('c5/h., c5/q', { stem: 'up' })), + ], + }) + .addClef('treble') + .addTimeSignature('4/4') + .addKeySignature('D'); + system + .addStave({ + voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))], + }) + .addClef('bass') + .addTimeSignature('4/4'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBasicMutedTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q/m, c4/q/m, c4/q/r, c4/q/m', { stem: 'down' })), + voice(notes('c#5/h/m., c5/q/m', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q/m, cn3/q/m, bb3/q/m, d##3/q/m', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBasicHarmonicTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q/h, c4/q/h, c4/q/r, c4/q/h', { stem: 'down' })), + voice(notes('c#5/h/h., c5/q/h', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q/h, cn3/q/h, bb3/q/h, d##3/q/h', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBasicSlashTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q/s, c4/q/s, c4/q/r, c4/q/s', { stem: 'down' })), + voice(notes('c#5/h/s., c5/q/s', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q/s, cn3/q/s, bb3/q/s, d##3/q/s', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawGhostBasicTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); + const score = f.EasyScore(); + const system = f.System(); + system.addStave({ + voices: [ + score.voice([ + ...score.notes('f#5/4, f5, db5, c5', { stem: 'up' }), + ...score.beam(score.notes('c5/8, d5, fn5, e5', { stem: 'up' })), + ...score.beam(score.notes('d5, c5', { stem: 'up' })), + ], { time: '7/4' }), + score.voice(score.notes('c4/h/g, f4/4, c4/4/g, e4/4, c4/8/g, d##4/8, c4/8, c4/8', { stem: 'down' }), { + time: '7/4', + }), + ], + }); + f.draw(); + options.assert.expect(0); +} +function drawGhostDottedTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); + const score = f.EasyScore(); + const system = f.System(); + system.addStave({ + voices: [ + score.voice([ + ...score.notes('c4/4/g., fbb5/8, d5/4', { stem: 'up' }), + ...score.beam(score.notes('c5/8, c#5/16, d5/16', { stem: 'up' })), + ...score.notes('c4/2/g.., fn5/8', { stem: 'up' }), + ], { time: '8/4' }), + score.voice([ + ...score.notes('f#4/4', { stem: 'down' }), + ...score.beam(score.notes('e4/8, d4/8', { stem: 'down' })), + ...score.notes('c4/4/g.., cb4/16, c#4/h, d4/4', { stem: 'down' }), + ...score.beam(score.notes('fn4/8, e4/8', { stem: 'down' })), + ], { time: '8/4' }), + ], + }); + f.draw(); + options.assert.expect(0); +} +function drawParenthesisedTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + const notes1 = notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' }); + _src_parenthesis__WEBPACK_IMPORTED_MODULE_5__.Parenthesis.buildAndAttach([notes1[0], notes1[3]]); + const notes2 = notes('c#5/h., c5/q', { stem: 'down' }); + _src_parenthesis__WEBPACK_IMPORTED_MODULE_5__.Parenthesis.buildAndAttach([notes2[0], notes2[1]]); + system + .addStave({ + voices: [voice(notes1), voice(notes2)], + }) + .addClef('treble'); + const notes3 = notes('c#3/q, cn3/q, bb3/q, d##3/q', { stem: 'down' }); + _src_parenthesis__WEBPACK_IMPORTED_MODULE_5__.Parenthesis.buildAndAttach(notes3); + system + .addStave({ + voices: [voice(notes3)], + }) + .addClef('bass'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawAccidentalsTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(cbbs4 ebb4 gbss4)/q, cbs4/q, cdb4/q/r, cd4/q', { stem: 'down' })), + voice(notes('c++-5/h., c++5/q', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c+-3/q, c+3/q, bb3/q, d##3/q', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBeamsTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes, beam } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(c4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), + voice([...notes('c#5/h.', { stem: 'up' }), ...beam(notes('c5/8, c5/8', { stem: 'up' }))]), + ], + }) + .addClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawTupletsTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes, tuplet, beam } = createShortcuts(score); + // Voice 1, with stems pointed down. + const v1_tuplet = tuplet(notes('(c4 e4 g4)/q, cbb4/q, c4/q', { stem: 'down' }), { + location: _src_tuplet__WEBPACK_IMPORTED_MODULE_8__.Tuplet.LOCATION_BOTTOM, + }); + const v1_halfNote = notes('c4/h', { stem: 'down' }); + const v1 = voice([...v1_tuplet, ...v1_halfNote]); + // Voice 2, with stems pointed up. + const v2_halfNote = notes('c#5/h.', { stem: 'up' }); + const v2_tuplet = tuplet(beam(notes('cb5/8, cn5/8, c5/8', { stem: 'up' }))); + const v2 = voice([...v2_halfNote, ...v2_tuplet]); + system.addStave({ voices: [v1, v2] }).addClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawDotsTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [voice(notes('(c4 e4 g4)/8., (c4 e4 g4)/8.., (c4 e4 g4)/8..., (c4 e4 g4)/8...., (c4 e4 g4)/16...'))], + }) + .addClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawOptionsTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const score = f.EasyScore(); + const system = f.System(); + const notes = score.notes('B4/h[id="foobar", class="red,bold", stem="up", articulations="staccato.below,tenuto"], B4/q[articulations="accent.above"], B4/q[stem="down"]'); + system.addStave({ voices: [score.voice(notes)] }); + f.draw(); + const note0 = notes[0]; + const note1 = notes[1]; + const note0_modifier0 = note0.getModifiers()[0]; + const note0_modifier1 = note0.getModifiers()[1]; + const note1_modifier0 = note1.getModifiers()[0]; + options.assert.equal(note0.getAttribute('id'), 'foobar'); + options.assert.ok(note0.hasClass('red')); + options.assert.ok(note0.hasClass('bold')); + options.assert.equal(note0_modifier0.getCategory(), _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation.CATEGORY); + options.assert.equal(note0_modifier0.type, 'a.'); + options.assert.equal(note0_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.BELOW); + options.assert.equal(note0_modifier1.getCategory(), _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation.CATEGORY); + options.assert.equal(note0_modifier1.type, 'a-'); + options.assert.equal(note0_modifier1.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.ABOVE); + options.assert.equal(note0.getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_7__.Stem.UP); + options.assert.equal(note1_modifier0.getCategory(), _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation.CATEGORY); + options.assert.equal(note1_modifier0.type, 'a>'); + options.assert.equal(note1_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.ABOVE); + options.assert.equal(notes[2].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_7__.Stem.DOWN); +} +function drawFingeringsTest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const score = f.EasyScore(); + const system = f.System(); + const notes = score.notes('C4/q[fingerings="1"], E4[fingerings="3.above"], G4[fingerings="5.below"], (C4 E4 G4)[fingerings="1,3,5"]'); + system.addStave({ voices: [score.voice(notes)] }); + f.draw(); + const note0_modifier0 = notes[0].getModifiers()[0]; + options.assert.equal(note0_modifier0.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); + options.assert.equal(note0_modifier0.getFretHandFinger(), '1'); + options.assert.equal(note0_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.LEFT); + const note1_modifier0 = notes[1].getModifiers()[0]; + options.assert.equal(note1_modifier0.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); + options.assert.equal(note1_modifier0.getFretHandFinger(), '3'); + options.assert.equal(note1_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.ABOVE); + const note2_modifier0 = notes[2].getModifiers()[0]; + options.assert.equal(note2_modifier0.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); + options.assert.equal(note2_modifier0.getFretHandFinger(), '5'); + options.assert.equal(note2_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.BELOW); + const note3_modifiers = notes[3].getModifiers(); + const note3_modifier0 = note3_modifiers[0]; + const note3_modifier1 = note3_modifiers[1]; + const note3_modifier2 = note3_modifiers[2]; + options.assert.equal(note3_modifier0.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); + options.assert.equal(note3_modifier0.getFretHandFinger(), '1'); + options.assert.equal(note3_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.LEFT); + options.assert.equal(note3_modifier1.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); + options.assert.equal(note3_modifier1.getFretHandFinger(), '3'); + options.assert.equal(note3_modifier1.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.LEFT); + options.assert.equal(note3_modifier2.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); + options.assert.equal(note3_modifier2.getFretHandFinger(), '5'); + options.assert.equal(note3_modifier2.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.LEFT); +} +function keys(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 200); + const score = f.EasyScore(); + const system = f.System(); + const notes = score.notes('c#3/q, c##3, cb3, cbb3, cn3, c3, cbbs3, cbss3, cbs3, cdb3, cd3, c++-3, c++3, c+-3, c+3, co3, ck3', { clef: 'bass' }); + system.addStave({ voices: [f.Voice().setStrict(false).addTickables(notes)] }).addClef('bass'); + f.draw(); + options.assert.equal(notes[0].keys, 'c#/3'); + options.assert.equal(notes[1].keys, 'c##/3'); + options.assert.equal(notes[2].keys, 'cb/3'); + options.assert.equal(notes[3].keys, 'cbb/3'); + options.assert.equal(notes[4].keys, 'cn/3'); + for (let i = 5; i < notes.length; i++) { + options.assert.equal(notes[i].keys, 'c/3'); + } +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(EasyScoreTests); + + + +/***/ }), + +/***/ "./tests/factory_tests.ts": +/*!********************************!*\ + !*** ./tests/factory_tests.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FactoryTests": () => (/* binding */ FactoryTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_factory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/factory */ "./src/factory.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Factory Tests + + + +const FactoryTests = { + Start() { + QUnit.module('Factory'); + QUnit.test('Defaults', defaults); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Draw', draw); + run('Draw Tab (repeat barlines must be aligned)', drawTab); + }, +}; +function defaults(assert) { + // Throws RuntimeError: 'HTML DOM element not set in Factory' + assert.throws(() => new _src_factory__WEBPACK_IMPORTED_MODULE_1__.Factory({ renderer: { elementId: '', width: 700, height: 500 } }), 'Empty string for elementId throws an exception.'); + const factory = new _src_factory__WEBPACK_IMPORTED_MODULE_1__.Factory({ + renderer: { elementId: null, width: 700, height: 500 }, + }); + // eslint-disable-next-line + // @ts-ignore access a protected member for testing purposes. + const options = factory.options; + assert.equal(options.renderer.width, 700); + assert.equal(options.renderer.height, 500); + assert.equal(options.renderer.elementId, null); + assert.equal(options.stave.space, 10); +} +function draw(options) { + const f = _src_factory__WEBPACK_IMPORTED_MODULE_1__.Factory.newFromElementId(options.elementId); + f.Stave().setClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawTab(options) { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 400); + const system = factory.System({ width: 500 }); + const stave = factory.Stave().setClef('treble').setKeySignature('C#').setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.Barline.type.REPEAT_BEGIN); + const voices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])]; + system.addStave({ stave, voices }); + const tabStave = factory.TabStave().setClef('tab').setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.Barline.type.REPEAT_BEGIN); + const tabVoices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])]; + system.addStave({ stave: tabStave, voices: tabVoices }); + factory.draw(); + options.assert.equal(stave.getModifiers()[0].getX(), tabStave.getModifiers()[0].getX()); + options.assert.expect(1); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(FactoryTests); + + + +/***/ }), + +/***/ "./tests/font_tests.ts": +/*!*****************************!*\ + !*** ./tests/font_tests.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FontTests": () => (/* binding */ FontTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); +/* harmony import */ var _src_canvascontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _src_element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/element */ "./src/element.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_pedalmarking__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_textbracket__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _src_textnote__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/textnote */ "./src/textnote.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Font Tests + + + + + + + + + + + + +const FontTests = { + Start() { + QUnit.module('Font'); + QUnit.test('setFont', setFont); + QUnit.test('Parsing', fontParsing); + QUnit.test('Sizes', fontSizes); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Set Text Font to Georgia', setTextFontToGeorgia); + run('Set Music Font to Petaluma', setMusicFontToPetaluma); + }, +}; +/** + * Test out the setFont method in various classes. + */ +function setFont(assert) { + // Create a CanvasCntext and call setFont on it. + const canvas = document.createElement('canvas'); + canvas.width = 800; + canvas.height = 400; + // Set the font and get the font to verify that it matches. + // NOTE: Safari has a bug where it does not return the font-weight! + // https://github.com/0xfe/vexflow/issues/1240#issuecomment-986504088 + const ctx = new _src_canvascontext__WEBPACK_IMPORTED_MODULE_3__.CanvasContext(canvas.getContext('2d')); + ctx.setFont('PetalumaScript', '100px', 'normal', 'italic'); + assert.equal(ctx.font, 'italic 100px PetalumaScript'); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_11__.Voice(); + // Many elements do not override the default Element.TEXT_FONT. + assert.propEqual(voice.fontInfo, _src_element__WEBPACK_IMPORTED_MODULE_4__.Element.TEXT_FONT); + voice.setFont('bold 32pt Arial'); + const fontInfo = voice.fontInfo; + assert.equal(fontInfo === null || fontInfo === void 0 ? void 0 : fontInfo.size, '32pt'); + const flat = new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'); + // eslint-disable-next-line + // @ts-ignore access a protected member for testing purposes. + assert.equal(flat.textFont, undefined); // The internal instance variable .textFont is undefined by default. + // Add italic to the default font as defined in Element.TEXT_FONT (since Accidental does not override TEXT_FONT). + flat.setFont(undefined, undefined, undefined, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC); + assert.equal(flat.getFont(), 'italic 10pt Arial, sans-serif'); + // Anything that is not set will be reset to the defaults. + flat.setFont(undefined, undefined, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.BOLD, undefined); + assert.equal(flat.getFont(), 'bold 10pt Arial, sans-serif'); + flat.setFont(undefined, undefined, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.BOLD, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC); + assert.equal(flat.getFont(), 'italic bold 10pt Arial, sans-serif'); + flat.setFont(undefined, undefined, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.BOLD, 'oblique'); + assert.equal(flat.getFont(), 'oblique bold 10pt Arial, sans-serif'); + // '' is equivalent to 'normal'. Neither will be included in the CSS font string. + flat.setFont(undefined, undefined, 'normal', ''); + assert.equal(flat.getFont(), '10pt Arial, sans-serif'); +} +function fontParsing(assert) { + const b = new _src_bend__WEBPACK_IMPORTED_MODULE_2__.Bend('1/2', true); + const bFont = b.fontInfo; + // Check the default font. + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.family, _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SANS_SERIF); + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.size, _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SIZE); + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.weight, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.NORMAL); + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.style, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.NORMAL); + const f1 = 'Roboto Slab, serif'; + const t = new _src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote({ duration: '4', font: { family: f1 } }); + assert.equal(f1, t.fontInfo.family); + const n1 = new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['e/5'], duration: '4' }); + const n2 = new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['c/5'], duration: '4' }); + const tb = new _src_textbracket__WEBPACK_IMPORTED_MODULE_9__.TextBracket({ start: n1, stop: n2 }); + const f2 = tb.fontInfo; + assert.equal(f2 === null || f2 === void 0 ? void 0 : f2.size, 15); + assert.equal(f2 === null || f2 === void 0 ? void 0 : f2.style, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC); + // The line-height /3 is currently ignored. + const f3 = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.fromCSSString(`bold 1.5em/3 "Lucida Sans Typewriter", "Lucida Console", Consolas, monospace`); + const f3SizeInPx = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.convertSizeToPixelValue(f3.size); + assert.equal(f3SizeInPx, 24); +} +function fontSizes(assert) { + { + const size = '17px'; + const sizeInEm = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.convertSizeToPixelValue(size) / _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.scaleToPxFrom.em; + assert.equal(sizeInEm, 1.0625); + } + { + const size = '2em'; + const sizeInPx = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.convertSizeToPixelValue(size); + assert.equal(sizeInPx, 32); + } + { + const pedal = new _src_pedalmarking__WEBPACK_IMPORTED_MODULE_7__.PedalMarking([]); + assert.equal(pedal.getFont(), 'italic bold 12pt Times New Roman, serif'); + assert.equal(pedal.fontSizeInPoints, 12); + assert.equal(pedal.fontSizeInPixels, 16); + const doubledSizePx = pedal.fontSizeInPixels * 2; // Double the font size. + assert.equal(doubledSizePx, 32); + const doubledSizePt = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.scaleSize(pedal.fontSizeInPoints, 2); // Double the font size. + assert.equal(doubledSizePt, 24); + assert.equal(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.scaleSize('1.5em', 3), '4.5em'); + } +} +function setTextFontToGeorgia(options) { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 200); + const stave = factory.Stave({ y: 40 }); + const score = factory.EasyScore(); + const voice1 = score.voice([ + factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }), + factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }), + factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }), + ]); + const defaultFont = _src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote.TEXT_FONT; + // Set the default before we instantiate TextNote objects with the factory. + _src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote.TEXT_FONT = { + family: 'Georgia, Courier New, serif', + size: 14, + weight: 'bold', + style: 'italic', + }; + const voice2 = score.voice([ + factory + .TextNote({ text: 'Here are some fun lyrics...', duration: 'w' }) + .setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote.Justification.LEFT), + ]); + const formatter = factory.Formatter(); + formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + factory.draw(); + // Restore the previous default, or else it will affect the rest of the tests. + _src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote.TEXT_FONT = defaultFont; + options.assert.ok(true); +} +function setMusicFontToPetaluma(options) { + _src_flow__WEBPACK_IMPORTED_MODULE_5__.Flow.setMusicFont('Petaluma'); + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 200); + const stave = factory.Stave({ y: 40 }); + const score = factory.EasyScore(); + const voice = score.voice([ + factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }), + factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }), + factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }), + ]); + const formatter = factory.Formatter(); + formatter.joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(FontTests); + + + +/***/ }), + +/***/ "./tests/formatter_tests.ts": +/*!**********************************!*\ + !*** ./tests/formatter_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FormatterTests": () => (/* binding */ FormatterTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_frethandfinger__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); +/* harmony import */ var _src_registry__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/registry */ "./src/registry.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../src/stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _src_tables__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../src/tables */ "./src/tables.ts"); +/* harmony import */ var _src_tuplet__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../src/tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +/* harmony import */ var _mocks__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./mocks */ "./tests/mocks.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Formatter Tests + + + + + + + + + + + + + + + + + + + + + + + +const FormatterTests = { + Start() { + QUnit.module('Formatter'); + QUnit.test('TickContext Building', buildTickContexts); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Penultimate Note Padding', penultimateNote); + run('Whitespace and justify', rightJustify); + run('Notehead padding', noteHeadPadding); + run('Justification and alignment with accidentals', accidentalJustification); + run('Long measure taking full space', longMeasureProblems); + run('Vertical alignment - few unaligned beats', unalignedNoteDurations1); + run('Vertical alignment - many unaligned beats', unalignedNoteDurations2, { globalSoftmax: false }); + run('Vertical alignment - many unaligned beats (global softmax)', unalignedNoteDurations2, { globalSoftmax: true }); + run('Vertical alignment - many mixed elements', alignedMixedElements, { globalSoftmax: true }); + run('StaveNote - Justification', justifyStaveNotes); + run('Notes with Tab', notesWithTab); + run('Multiple Staves - Justified', multiStaves, { debug: true }); + run('Softmax', softMax); + run('Mixtime', mixTime); + run('Tight', tightNotes1); + run('Tight 2', tightNotes2); + run('Annotations', annotations); + run('Proportional Formatting - No Tuning', proportional, { debug: true, iterations: 0 }); + run('Proportional Formatting - No Justification', proportional, { justify: false, debug: true, iterations: 0 }); + run('Proportional Formatting (20 iterations)', proportional, { debug: true, iterations: 20, alpha: 0.5 }); + }, +}; +/** Calculate the glyph's width in the current music font. */ +// How is this different from Glyph.getWidth()? The numbers don't match up. +function getGlyphWidth(glyphName) { + // `38` seems to be the `font_scale` specified in many classes, such as + // Accidental, Articulation, Ornament, Strokes. Does this mean `38pt`??? + // + // However, tables.ts specifies: + // NOTATION_FONT_SCALE: 39, + // TABLATURE_FONT_SCALE: 39, + const musicFont = _src_tables__WEBPACK_IMPORTED_MODULE_19__.Tables.currentMusicFont(); + const glyph = musicFont.getGlyphs()[glyphName]; + const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution(); + return widthInEm * 38 * _src_font__WEBPACK_IMPORTED_MODULE_8__.Font.scaleToPxFrom.pt; +} +function buildTickContexts(assert) { + function createTickable(beat) { + return new _mocks__WEBPACK_IMPORTED_MODULE_22__.MockTickable().setTicks(beat); + } + const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_7__.Flow.RESOLUTION) / 4; + const tickables1 = [ + createTickable(BEAT).setWidth(10), + createTickable(BEAT * 2).setWidth(20), + createTickable(BEAT).setWidth(30), + ]; + const tickables2 = [ + createTickable(BEAT * 2).setWidth(10), + createTickable(BEAT).setWidth(20), + createTickable(BEAT).setWidth(30), + ]; + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_7__.Flow.TIME4_4); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_7__.Flow.TIME4_4); + voice1.addTickables(tickables1); + voice2.addTickables(tickables2); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter(); + const tContexts = formatter.createTickContexts([voice1, voice2]); + assert.equal(tContexts.list.length, 4, 'Voices should have four tick contexts'); + assert.throws(() => formatter.getMinTotalWidth(), /NoMinTotalWidth/, 'Expected to throw exception'); + assert.ok(formatter.preCalculateMinTotalWidth([voice1, voice2]), 'Successfully runs preCalculateMinTotalWidth'); + assert.equal(formatter.getMinTotalWidth(), 88, 'Get minimum total width without passing voices'); + formatter.preFormat(); + assert.equal(formatter.getMinTotalWidth(), 88, 'Minimum total width'); + assert.equal(tickables1[0].getX(), tickables2[0].getX(), 'First notes of both voices have the same X'); + assert.equal(tickables1[2].getX(), tickables2[2].getX(), 'Last notes of both voices have the same X'); + assert.ok(tickables1[1].getX() < tickables2[1].getX(), 'Second note of voice 2 is to the right of the second note of voice 1'); +} +function rightJustify(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 1200, 150); + const getTickables = (time, n, duration, duration2) => { + const tickar = []; + let i = 0; + for (i = 0; i < n; ++i) { + const dd = i === n - 1 ? duration2 : duration; + tickar.push(new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['f/4'], duration: dd })); + } + return new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice(time).addTickables(tickar); + }; + const renderTest = (time, n, duration, duration2, x, width) => { + const formatter = f.Formatter(); + const stave = f.Stave({ x, y: 20, width }); + // stave.addClef('treble').addTimeSignature('4/4'); + const voice = getTickables(time, n, duration, duration2); + formatter.joinVoices([voice]).formatToStave([voice], stave); + stave.draw(); + voice.draw(f.getContext(), stave); + }; + renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '2', 10, 300); + renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 1, 'w', 'w', 310, 300); + renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '4', 610, 300); + renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 6, '8', '8', 910, 300); + options.assert.ok(true); +} +function penultimateNote(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 550); + const score = f.EasyScore(); + const staffWidth = 310; + let system = undefined; + let voices = []; + let notes = []; + let note = undefined; + let stave = undefined; + let y = 10; + const draw = (softmax) => { + system = f.System({ + width: staffWidth, + y, + formatOptions: { align_rests: true }, + details: { softmaxFactor: softmax }, + }); + notes = []; + voices = []; + note = score.notes('C4/8/r', { clef: 'bass' })[0]; + notes.push(note); + note = score.notes('A3/8', { stem: 'up', clef: 'bass' })[0]; + notes.push(note); + note = score.notes('C4/4', { stem: 'up', clef: 'bass' })[0]; + notes.push(note); + voices.push(score.voice(notes).setMode(2)); + notes = []; + note = score.notes('( F3 A3 )/4', { stem: 'down', clef: 'bass' })[0]; + notes.push(note); + note = score.notes('B4/4/r', {})[0]; + notes.push(note); + voices.push(score.voice(notes).setMode(2)); + notes = []; + stave = system.addStave({ voices: voices }); + stave.addClef('bass'); + stave.addTimeSignature('2/4'); + voices = []; + f.draw(); + f.getContext().fillText(`softmax: ${softmax.toString()}`, staffWidth + 20, y + 50); + y += 100; + }; + draw(15); + draw(10); + draw(5); + draw(2); + draw(1); + options.assert.ok(true); +} +function noteHeadPadding(options) { + const registry = new _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry(); + _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry.enableDefaultRegistry(registry); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 300); + const score = f.EasyScore(); + score.set({ time: '9/8' }); + const notes1 = score.notes('(d5 f5)/8,(c5 e5)/8,(d5 f5)/8,(c5 e5)/2.'); + const beams = [new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes1.slice(0, 3), true)]; + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); + const notes2 = score.notes('(g4 an4)/2.,(g4 a4)/4.', { clef: 'treble' }); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); + voice2.addTickables(notes2); + voice1.addTickables(notes1); + const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]); + const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); + formatter.format([voice1, voice2], width); + const staveWidth = width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding; + const stave1 = f.Stave({ y: 50, width: staveWidth }); + const stave2 = f.Stave({ y: 150, width: staveWidth }); + stave1.draw(); + stave2.draw(); + voice1.draw(f.getContext(), stave1); + voice2.draw(f.getContext(), stave2); + beams.forEach((b) => b.setContext(f.getContext()).draw()); + options.assert.ok(true); +} +function longMeasureProblems(options) { + const registry = new _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry(); + _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry.enableDefaultRegistry(registry); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 1500, 300); + const score = f.EasyScore(); + score.set({ time: '4/4' }); + const notes1 = score.notes('b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/2,b4/8,b4/8'); + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); + const notes2 = score.notes('d3/4,(ab3 f4)/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d4/4,d4/2,d4/4', { clef: 'bass' }); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); + voice2.addTickables(notes2); + voice1.addTickables(notes1); + const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]); + const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); + formatter.format([voice1, voice2], width); + const stave1 = f.Stave({ y: 50, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); + const stave2 = f.Stave({ y: 200, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); + stave1.draw(); + stave2.draw(); + voice1.draw(f.getContext(), stave1); + voice2.draw(f.getContext(), stave2); + options.assert.ok(true); +} +function accidentalJustification(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 300); + const score = f.EasyScore(); + const notes11 = score.notes('a4/2, a4/4, a4/8, ab4/16, an4/16'); + const voice11 = score.voice(notes11, { time: '4/4' }); + const notes21 = score.notes('c4/2, d4/8, d4/8, e4/8, e4/8'); + const voice21 = score.voice(notes21, { time: '4/4' }); + let beams = _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes11.slice(2)); + beams = beams.concat(beams, _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes21.slice(1, 3))); + beams = beams.concat(_src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes21.slice(3))); + const formatter = f.Formatter({}).joinVoices([voice11]).joinVoices([voice21]); + const width = formatter.preCalculateMinTotalWidth([voice11, voice21]); + const stave11 = f.Stave({ y: 20, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); + const stave21 = f.Stave({ y: 130, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); + formatter.format([voice11, voice21], width); + const ctx = f.getContext(); + stave11.setContext(ctx).draw(); + stave21.setContext(ctx).draw(); + voice11.draw(ctx, stave11); + voice21.draw(ctx, stave21); + beams.forEach((b) => b.setContext(ctx).draw()); + options.assert.ok(true); +} +function unalignedNoteDurations1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const notes11 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: '4' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: '8' }), + ]; + const notes21 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4.'], duration: '4' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '8d' }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_6__.Dot.buildAndAttach([notes21[2]], { all: true }); + const ctx = f.getContext(); + const voice11 = score.voice(notes11, { time: '2/4' }).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); + const voice21 = score.voice(notes21, { time: '2/4' }).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); + const beams21 = _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes21); + const beams11 = _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes11); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter(); + formatter.joinVoices([voice11]); + formatter.joinVoices([voice21]); + const width = formatter.preCalculateMinTotalWidth([voice11, voice21]); + const stave11 = f.Stave({ y: 20, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); + const stave21 = f.Stave({ y: 130, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); + formatter.format([voice11, voice21], width); + stave11.setContext(ctx).draw(); + stave21.setContext(ctx).draw(); + voice11.draw(ctx, stave11); + voice21.draw(ctx, stave21); + beams21.forEach((b) => b.setContext(ctx).draw()); + beams11.forEach((b) => b.setContext(ctx).draw()); + options.assert.ok(voice11.getTickables()[1].getX() > voice21.getTickables()[1].getX()); +} +function unalignedNoteDurations2(options) { + const notes1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: '8r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['g/4'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['g/4'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: '8r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['g/4'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['g/4'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '16' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/5'], duration: '16' }), + ]; + const notes2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '16r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/4.'], duration: '8d' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/4'], duration: '4' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '16r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/4.'], duration: '8d' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/4'], duration: '4' }), + ]; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 280); + const context = f.getContext(); + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice({ num_beats: 4, beat_value: 4 }); + voice1.addTickables(notes1); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice({ num_beats: 4, beat_value: 4 }); + voice2.addTickables(notes2); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter({ globalSoftmax: options.params.globalSoftmax }); + formatter.joinVoices([voice1]); + formatter.joinVoices([voice2]); + const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); + formatter.format([voice1, voice2], width); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(10, 40, width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(10, 100, width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding); + stave1.setContext(context).draw(); + stave2.setContext(context).draw(); + voice1.draw(context, stave1); + voice2.draw(context, stave2); + options.assert.ok(voice1.getTickables()[1].getX() > voice2.getTickables()[1].getX()); +} +function alignedMixedElements(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 500); + const context = f.getContext(); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(10, 200, 400); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(410, 200, 400); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8' }) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('##'), 0) + .addModifier(new _src_frethandfinger__WEBPACK_IMPORTED_MODULE_10__.FretHandFinger('4').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__.StringNumber('3').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a^').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('am').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('yyyy').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('xxxx').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('ttt').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_17__.Stem.DOWN }) + .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__.StringNumber('3').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8' }), + ]; + const notes2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8' }) + .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__.StringNumber('3').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('yyyy').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP), 0), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_17__.Stem.DOWN }) + .addModifier(new _src_frethandfinger__WEBPACK_IMPORTED_MODULE_10__.FretHandFinger('4').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__.StringNumber('3').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a^').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('am').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('yyyy').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('xxxx').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('ttt').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8' }), + ]; + const tuplet = new _src_tuplet__WEBPACK_IMPORTED_MODULE_20__.Tuplet(notes).setTupletLocation(-1); + const tuplet2 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_20__.Tuplet(notes2).setTupletLocation(1); + _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter.FormatAndDraw(context, stave, notes); + _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter.FormatAndDraw(context, stave2, notes2); + stave.setContext(context).draw(); + stave2.setContext(context).draw(); + tuplet.setContext(context).draw(); + tuplet2.setContext(context).draw(); + options.assert.ok(true); +} +function justifyStaveNotes(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 520, 280); + const ctx = f.getContext(); + const score = f.EasyScore(); + let y = 30; + function justifyToWidth(width) { + f.Stave({ y: y }).addClef('treble'); + const voices = [ + score.voice(score.notes('(cbb4 en4 a4)/2, (d4 e4 f4)/8, (d4 f4 a4)/8, (cn4 f#4 a4)/4', { stem: 'down' })), + score.voice(score.notes('(bb4 e#5 a5)/4, (d5 e5 f5)/2, (c##5 fb5 a5)/4', { stem: 'up' })), + ]; + f.Formatter() + .joinVoices(voices) + .format(voices, width - (_src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding + getGlyphWidth('gClef'))); + // Show the the width of notes via a horizontal line with red, green, yellow, blue, gray indicators. + voices[0].getTickables().forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_12__.Note.plotMetrics(ctx, note, y + 140)); // Bottom line. + voices[1].getTickables().forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_12__.Note.plotMetrics(ctx, note, y - 20)); // Top Line + y += 210; + } + justifyToWidth(520); + f.draw(); + options.assert.ok(true); +} +function notesWithTab(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 420, 580); + const score = f.EasyScore(); + let y = 10; + function justifyToWidth(width) { + const stave = f.Stave({ y: y }).addClef('treble'); + const voice = score.voice(score.notes('d#4/2, (c4 d4)/8, d4/8, (c#4 e4 a4)/4', { stem: 'up' })); + y += 100; + f.TabStave({ y: y }).addTabGlyph().setNoteStartX(stave.getNoteStartX()); + const tabVoice = score.voice([ + f.TabNote({ positions: [{ str: 3, fret: 6 }], duration: '2' }).addModifier(new _src_bend__WEBPACK_IMPORTED_MODULE_5__.Bend('Full'), 0), + f + .TabNote({ + positions: [ + { str: 2, fret: 3 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }) + .addModifier(new _src_bend__WEBPACK_IMPORTED_MODULE_5__.Bend('Unison'), 1), + f.TabNote({ positions: [{ str: 3, fret: 7 }], duration: '8' }), + f.TabNote({ + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 7 }, + { str: 2, fret: 5 }, + ], + duration: '4', + }), + ]); + f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).format([voice, tabVoice], width); + y += 150; + } + justifyToWidth(0); + justifyToWidth(300); + f.draw(); + options.assert.ok(true); +} +function multiStaves(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 400); + const ctx = f.getContext(); + const score = f.EasyScore(); + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Draw 3 Staves (one measure each). + const notes11 = score.notes('f4/4, d4/8, g4/4, eb4/8'); + const notes21 = score.notes('d4/8, d4, d4, d4, e4, eb4'); + const notes31 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); + let voices = [ + score.voice(notes11, { time: '6/8' }), + score.voice(notes21, { time: '6/8' }), + score.voice(notes31, { time: '6/8' }), + ]; + let formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + let width = formatter.preCalculateMinTotalWidth(voices); + formatter.format(voices, width); + let beams = [ + new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes21.slice(0, 3), true), + new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes21.slice(3, 6), true), + new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes31.slice(0, 3), true), + new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes31.slice(3, 6), true), + ]; + const staveYs = [20, 130, 250]; + let staveWidth = width + getGlyphWidth('gClef') + getGlyphWidth('timeSig8') + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding; + let staves = [ + f.Stave({ y: staveYs[0], width: staveWidth }).addClef('treble').addTimeSignature('6/8'), + f.Stave({ y: staveYs[1], width: staveWidth }).addClef('treble').addTimeSignature('6/8'), + f.Stave({ y: staveYs[2], width: staveWidth }).addClef('bass').addTimeSignature('6/8'), + ]; + f.StaveConnector({ + top_stave: staves[1], + bottom_stave: staves[2], + type: 'brace', + }); + for (let i = 0; i < staves.length; ++i) { + staves[i].setContext(ctx).draw(); + voices[i].draw(ctx, staves[i]); + } + beams.forEach((beam) => beam.setContext(ctx).draw()); + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Draw 3 more staves (one measure each). + // These are adjacent to the first set of staves, representing the second measure of each stave. + const notes12 = score.notes('ab4/4, bb4/8, (cb5 eb5)/4[stem="down"], d5/8[stem="down"]'); + const notes22 = score.notes('(eb4 ab4)/4., (c4 eb4 ab4)/4, db5/8', { stem: 'up' }); + const notes32 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); + voices = [ + score.voice(notes12, { time: '6/8' }), + score.voice(notes22, { time: '6/8' }), + score.voice(notes32, { time: '6/8' }), + ]; + formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + width = formatter.preCalculateMinTotalWidth(voices); + const staveX = staves[0].getX() + staves[0].getWidth(); + staveWidth = width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding; + staves = [ + f.Stave({ x: staveX, y: staveYs[0], width: staveWidth }), + f.Stave({ x: staveX, y: staveYs[1], width: staveWidth }), + f.Stave({ x: staveX, y: staveYs[2], width: staveWidth }), + ]; + formatter.format(voices, width); + beams = [ + // Add beams to each group of 3 notes. + new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes32.slice(0, 3), true), + new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes32.slice(3, 6), true), + ]; + for (let i = 0; i < staves.length; ++i) { + staves[i].setContext(ctx).draw(); + voices[i].draw(ctx, staves[i]); + voices[i].getTickables().forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_12__.Note.plotMetrics(ctx, note, staveYs[i] - 20)); + } + beams.forEach((beam) => beam.setContext(ctx).draw()); + options.assert.ok(true); +} +function proportional(options) { + const debug = options.params.debug; + _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry.enableDefaultRegistry(new _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry()); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 775, 750); + const system = f.System({ + x: 50, + autoWidth: true, + debugFormatter: debug, + noJustification: !(options.params.justify === undefined && true), + formatIterations: options.params.iterations, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const voices = [ + score.notes('c5/8, c5'), + score.tuplet(score.notes('a4/8, a4, a4'), { notes_occupied: 2 }), + score.notes('c5/16, c5, c5, c5'), + score.tuplet(score.notes('a4/16, a4, a4, a4, a4'), { notes_occupied: 4 }), + score.tuplet(score.notes('a4/32, a4, a4, a4, a4, a4, a4'), { notes_occupied: 8 }), + ]; + const createVoice = (notes) => score.voice(notes, { time: '1/4' }); + const createStave = (voice) => system + .addStave({ voices: [voice], debugNoteMetrics: debug }) + .addClef('treble') + .addTimeSignature('1/4'); + voices.map(createVoice).forEach(createStave); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_15__.StaveConnector.type.BRACKET); + f.draw(); + // Debugging: Show how many elements of each type we have added. + // const typeMap = Registry.getDefaultRegistry().index.type; + // const table = Object.keys(typeMap).map((typeName) => typeName + ': ' + Object.keys(typeMap[typeName]).length); + // console.log(table); + _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +function softMax(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 500); + const textX = 450 / 0.8; + f.getContext().scale(0.8, 0.8); + function draw(y, factor) { + const score = f.EasyScore(); + const system = f.System({ + x: 100, + y, + details: { softmaxFactor: factor }, + autoWidth: true, + }); + system + .addStave({ + voices: [ + score.voice(score + .notes('C#5/h, a4/q') + .concat(score.beam(score.notes('Abb4/8, A4/8'))) + .concat(score.beam(score.notes('A4/16, A#4, A4, Ab4/32, A4'))), { time: '5/4' }), + ], + }) + .addClef('treble') + .addTimeSignature('5/4'); + f.draw(); + f.getContext().fillText(`softmax: ${factor.toString()}`, textX, y + 50); + options.assert.ok(true); + } + draw(50, 1); + draw(150, 2); + draw(250, 5); + draw(350, 10); + draw(450, 15); +} +function mixTime(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400 + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + details: {}, + autoWidth: true, + debugFormatter: true, + }); + system + .addStave({ + voices: [score.voice(score.notes('C#5/q, B4').concat(score.beam(score.notes('A4/8, E4, C4, D4'))))], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system + .addStave({ + voices: [score.voice(score.notes('C#5/q, B4, B4').concat(score.tuplet(score.beam(score.notes('A4/8, E4, C4')))))], + }) + .addClef('treble') + .addTimeSignature('4/4'); + f.draw(); + options.assert.ok(true); +} +function tightNotes1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 440, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + autoWidth: true, + debugFormatter: true, + details: { maxIterations: 10 }, + }); + system + .addStave({ + voices: [ + score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system + .addStave({ + voices: [ + score.voice(score.notes('B4/q, B4').concat(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')))), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + f.draw(); + options.assert.ok(true); +} +function tightNotes2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 440, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + autoWidth: true, + debugFormatter: true, + }); + system + .addStave({ + voices: [ + score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system + .addStave({ + voices: [score.voice(score.notes('B4/w'))], + }) + .addClef('treble') + .addTimeSignature('4/4'); + f.draw(); + options.assert.ok(true); +} +function annotations(options) { + const pageWidth = 916; + const pageHeight = 600; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, pageWidth, pageHeight); + const context = f.getContext(); + const lyrics1 = ['ipso', 'ipso-', 'ipso', 'ipso', 'ipsoz', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso']; + const lyrics2 = ['ipso', 'ipso-', 'ipsoz', 'ipso', 'ipso', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso']; + const smar = [ + { + sm: 5, + width: 550, + lyrics: lyrics1, + title: '550px,softMax:5', + }, + { + sm: 5, + width: 550, + lyrics: lyrics2, + title: '550px,softmax:5,different word order', + }, + { + sm: 10, + width: 550, + lyrics: lyrics2, + title: '550px,softmax:10', + }, + { + sm: 15, + width: 550, + lyrics: lyrics2, + title: '550px,softmax:15', + }, + ]; + const rowSize = 140; + const beats = 12; + const beatsPer = 8; + const beamGroup = 3; + const durations = ['8d', '16', '8', '8d', '16', '8', '8d', '16', '8', '4', '8']; + const beams = []; + let y = 40; + smar.forEach((sm) => { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(10, y, sm.width); + const notes = []; + let iii = 0; + context.fillText(sm.title, 100, y); + y += rowSize; + durations.forEach((dd) => { + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: dd }); + if (dd.indexOf('d') >= 0) { + _src_dot__WEBPACK_IMPORTED_MODULE_6__.Dot.buildAndAttach([note], { all: true }); + } + if (sm.lyrics.length > iii) { + note.addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation(sm.lyrics[iii]) + .setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation.VerticalJustify.BOTTOM) + .setFont(_src_font__WEBPACK_IMPORTED_MODULE_8__.Font.SERIF, 12, _src_font__WEBPACK_IMPORTED_MODULE_8__.FontWeight.NORMAL)); + } + notes.push(note); + iii += 1; + }); + notes.forEach((note) => { + if (note.getDuration().indexOf('d') >= 0) { + _src_dot__WEBPACK_IMPORTED_MODULE_6__.Dot.buildAndAttach([note], { all: true }); + } + }); + // Don't beam the last group + let notesToBeam = []; + notes.forEach((note) => { + if (note.getIntrinsicTicks() < 4096) { + notesToBeam.push(note); + if (notesToBeam.length >= beamGroup) { + beams.push(new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notesToBeam)); + notesToBeam = []; + } + } + else { + notesToBeam = []; + } + }); + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice({ num_beats: beats, beat_value: beatsPer }).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT).addTickables(notes); + const fmt = new _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter({ softmaxFactor: sm.sm, maxIterations: 2 }).joinVoices([voice1]); + fmt.format([voice1], sm.width - 11); + stave.setContext(context).draw(); + voice1.draw(context, stave); + beams.forEach((b) => b.setContext(context).draw()); + }); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(FormatterTests); + + + +/***/ }), + +/***/ "./tests/fraction_tests.ts": +/*!*********************************!*\ + !*** ./tests/fraction_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FractionTests": () => (/* binding */ FractionTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/fraction */ "./src/fraction.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Fraction Tests + + +const FractionTests = { + Start() { + QUnit.module('Fraction'); + QUnit.test('Basic', basic); + QUnit.test('With Other Fractions', withOtherFractions); + }, +}; +function basic(assert) { + const f_1_2 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 2); + assert.ok(f_1_2.equals(0.5), 'Fraction: 1/2 equals 0.5'); + assert.ok(f_1_2.equals(new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 2)), 'Fraction: 1/2 equals 1/2'); + assert.ok(f_1_2.equals(new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 4)), 'Fraction: 1/2 equals 2/4'); + assert.notOk(f_1_2.greaterThan(1), 'Fraction: ! 1/2 > 1'); + assert.ok(f_1_2.greaterThan(0.2), 'Fraction: 1/2 > 0.2'); + assert.ok(f_1_2.greaterThanEquals(0.2), 'Fraction: 1/2 >= 0.2'); + assert.ok(f_1_2.greaterThanEquals(0.5), 'Fraction: 1/2 >= 0.5'); + assert.notOk(f_1_2.greaterThanEquals(1), 'Fraction: ! 1/2 >= 1'); + assert.notOk(f_1_2.lessThan(0.5), 'Fraction: ! 1/2 < 0.5'); + assert.ok(f_1_2.lessThan(1), 'Fraction: 1/2 < 1'); + assert.ok(f_1_2.lessThanEquals(0.6), 'Fraction: 1/2 <= 0.6'); + assert.ok(f_1_2.lessThanEquals(0.5), 'Fraction: 1/2 <= 0.5'); + assert.notOk(f_1_2.lessThanEquals(0.4), 'Fraction: ! 1/2 <= 0.4'); + const f_05 = f_1_2.copy(0.5); + assert.strictEqual(f_05, f_1_2, 'Fraction: f_05 === f_1_2'); + assert.strictEqual(f_05.toString(), '0.5/1', 'Fraction: f_05.toString() === "0.5/1"'); + assert.strictEqual(f_05.toSimplifiedString(), '1/2', 'Fraction: f_05.toSimplifiedString() === "1/2"'); + const tF_n = f_05.clone(); + assert.notStrictEqual(tF_n, f_05, 'Fraction: tF_n !== f_05'); + assert.notEqual(tF_n, f_05, 'Fraction: tF_n != f_05'); + assert.deepEqual(tF_n, f_05, 'tF_n deepEqual f_05'); + assert.notDeepEqual(tF_n, {}, 'tF_n notDeepEqual {}'); + tF_n.subtract(-0.5); + assert.ok(tF_n.equals(1), 'Fraction: 0.5 -(-0.5) equals 1'); + tF_n.add(1); + assert.ok(tF_n.equals(2), 'Fraction: 1 + 1 equals 2'); + tF_n.multiply(2); + assert.ok(tF_n.equals(4), 'Fraction: 2 * 2 equals 4'); + tF_n.divide(2); + assert.ok(tF_n.equals(2), 'Fraction: 4 / 2 equals 2'); + // Lowest common multiple. + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([]), 0); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([17]), 17); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([2, 5]), 10); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([15, 3, 5]), 15); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([2, 4, 6]), 12); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([2, 3, 4, 5]), 60); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([12, 15, 10, 75]), 300); + // Greatest common divisor. + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(0, 0), 0); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(0, 99), 99); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(77, 0), 77); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(42, 14), 14); + assert.equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(15, 10), 5); +} +function withOtherFractions(assert) { + const f_1_2 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 2); + const f_1_4 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4); + const f_1_8 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 8); + const f_2 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 1); + // IMPORTANT NOTE: Fraction methods modify the existing Fraction object. + // They do not return new objects. + // Use clone() if you don't want to modify the original object. + const a = f_1_2.clone().multiply(f_1_2); + assert.ok(a.equals(f_1_4), '1/2 x 1/2 == 1/4'); + const b = f_1_2.clone().divide(f_1_4); + assert.ok(b.equals(f_2), '1/2 / 1/4 == 2'); + const c = f_2.clone().subtract(f_1_2).subtract(f_1_2).subtract(f_1_4); // 3/4 + const d = f_1_8.clone().add(f_1_8).add(f_1_8).multiply(f_2); + assert.ok(c.equals(d), '2-1/2-1/2-1/4 == (1/8+1/8+1/8)*(2/1)'); + assert.equal(c.value(), 0.75, '3/4 == 0.75'); + const e = f_1_8.clone().add(f_1_4).add(f_1_8); + assert.ok(e.equals(f_1_2), '1/8 + 1/4 + 1/8 == 1/2'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(FractionTests); + + + +/***/ }), + +/***/ "./tests/ghostnote_tests.ts": +/*!**********************************!*\ + !*** ./tests/ghostnote_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GhostNoteTests": () => (/* binding */ GhostNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// GhostNote Tests + +const GhostNoteTests = { + Start() { + QUnit.module('GhostNote'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('GhostNote Basic', basic); + run('GhostNote Dotted', dotted); + }, +}; +/** + * Helper function to set up the stave, easyscore, voice, and to format & draw. + */ +function createTest(addItems) { + return (options) => { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); + const stave = factory.Stave(); + const score = factory.EasyScore(); + addItems(factory, score); + const voices = factory.getVoices(); + factory.Formatter().joinVoices(voices).formatToStave(voices, stave); + factory.draw(); + options.assert.ok(true, 'all pass'); + }; +} +const basic = createTest((f, score) => { + // Top Voice + const voiceTop = score.voice(score.notes('f#5/4, f5, db5, c5, c5/8, d5, fn5, e5, d5, c5', { stem: 'up' }), { + time: '7/4', + }); + const notesTop = voiceTop.getTickables(); + f.Beam({ notes: notesTop.slice(4, 8) }); + f.Beam({ notes: notesTop.slice(8, 10) }); + // Bottom Voice + score.voice([ + f.GhostNote({ duration: '2' }), + f.StaveNote({ keys: ['f/4'], stem_direction: -1, duration: '4' }), + f.GhostNote({ duration: '4' }), + f.StaveNote({ keys: ['e/4'], stem_direction: -1, duration: '4' }), + f.GhostNote({ duration: '8' }), + f.StaveNote({ keys: ['d/4'], stem_direction: -1, duration: '8' }).addModifier(f.Accidental({ type: '##' }), 0), + f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }), + ], { time: '7/4' }); +}); +/** + * A ghost note is invisible, but takes up space on the stave corresponding to its duration. + * '4d' is a dotted quarter note, equivalent to a quarter + eighth note. + */ +const dotted = createTest((f, score) => { + const voice1 = score.voice([ + f.GhostNote({ duration: '4d' }), + f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }), + f.StaveNote({ duration: '4', keys: ['d/5'], stem_direction: 1 }), + f.StaveNote({ duration: '8', keys: ['c/5'], stem_direction: 1 }), + f.StaveNote({ duration: '16', keys: ['c/5'], stem_direction: 1 }), + f.StaveNote({ duration: '16', keys: ['d/5'], stem_direction: 1 }), + f.GhostNote({ duration: '2dd' }), + f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }), + ], { time: '8/4' }); + const voice2 = score.voice([ + f.StaveNote({ duration: '4', keys: ['f/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['d/4'], stem_direction: -1 }), + f.GhostNote({ duration: '4dd' }), + f.StaveNote({ duration: '16', keys: ['c/4'], stem_direction: -1 }), + f.StaveNote({ duration: '2', keys: ['c/4'], stem_direction: -1 }), + f.StaveNote({ duration: '4', keys: ['d/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['f/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }), + ], { time: '8/4' }); + const notes1 = voice1.getTickables(); + const notes2 = voice2.getTickables(); + const addAccidental = (note, type) => note.addModifier(f.Accidental({ type }), 0); + addAccidental(notes1[1], 'bb'); + addAccidental(notes1[4], '#'); + addAccidental(notes1[7], 'n'); + addAccidental(notes2[0], '#'); + addAccidental(notes2[4], 'b'); + addAccidental(notes2[5], '#'); + addAccidental(notes2[7], 'n'); + f.Beam({ notes: notes1.slice(3, 6) }); + f.Beam({ notes: notes2.slice(1, 3) }); + f.Beam({ notes: notes2.slice(7, 9) }); +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(GhostNoteTests); + + + +/***/ }), + +/***/ "./tests/glyphnote_tests.ts": +/*!**********************************!*\ + !*** ./tests/glyphnote_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GlyphNoteTests": () => (/* binding */ GlyphNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_chordsymbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); +/* harmony import */ var _src_registry__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/registry */ "./src/registry.ts"); +/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// GlyphNote Tests + + + + + +const GlyphNoteTests = { + Start() { + QUnit.module('GlyphNote'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('GlyphNote with ChordSymbols', chordChanges, { debug: false, noPadding: false }); + run('GlyphNote Positioning', basic, { debug: false, noPadding: false }); + run('GlyphNote No Stave Padding', basic, { debug: true, noPadding: true }); + run('GlyphNote RepeatNote', repeatNote, { debug: false, noPadding: true }); + }, +}; +function chordChanges(options) { + _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.enableDefaultRegistry(new _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry()); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 300, 200); + const system = f.System({ + x: 50, + width: 250, + debugFormatter: options.params.debug, + noPadding: options.params.noPadding, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const notes = [ + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: 'q' }), + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: 'q' }), + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: 'q' }), + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: 'q' }), + ]; + const chord1 = f + .ChordSymbol({ reportWidth: false }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('(#11b9)', { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_1__.ChordSymbol.symbolModifiers.SUPERSCRIPT }); + const chord2 = f + .ChordSymbol() + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_1__.ChordSymbol.symbolModifiers.SUPERSCRIPT }) + .addGlyphOrText('b9', { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_1__.ChordSymbol.symbolModifiers.SUBSCRIPT }); + notes[0].addModifier(chord1, 0); + notes[2].addModifier(chord2, 0); + const voice = score.voice(notes); + system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_4__.StaveConnector.type.BRACKET); + f.draw(); + _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +function basic(options) { + _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.enableDefaultRegistry(new _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry()); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 300, 400); + const system = f.System({ + x: 50, + width: 250, + debugFormatter: options.params.debug, + noPadding: options.params.noPadding, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const newVoice = (notes) => score.voice(notes, { time: '1/4' }); + const newStave = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); + const voices = [ + [f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeat1Bar', 40), { duration: 'q' }, { line: 4 })], + [f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeat2Bars', 40), { duration: 'q', align_center: true })], + [ + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: '16' }), + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: '16' }), + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeat4Bars', 40), { duration: '16' }), + f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: '16' }), + ], + ]; + voices.map(newVoice).forEach(newStave); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_4__.StaveConnector.type.BRACKET); + f.draw(); + _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +function repeatNote(options) { + _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.enableDefaultRegistry(new _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry()); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 300, 500); + const system = f.System({ + x: 50, + width: 250, + debugFormatter: options.params.debug, + noPadding: options.params.noPadding, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const createVoice = (notes) => score.voice(notes, { time: '1/4' }); + const addStaveWithVoice = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); + const voices = [ + [f.RepeatNote('1')], + [f.RepeatNote('2')], + [f.RepeatNote('4')], + [ + f.RepeatNote('slash', { duration: '16' }), + f.RepeatNote('slash', { duration: '16' }), + f.RepeatNote('slash', { duration: '16' }), + f.RepeatNote('slash', { duration: '16' }), + ], + ]; + voices.map(createVoice).forEach(addStaveWithVoice); + system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_4__.StaveConnector.type.BRACKET); + f.draw(); + _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(GlyphNoteTests); + + + +/***/ }), + +/***/ "./tests/gracenote_tests.ts": +/*!**********************************!*\ + !*** ./tests/gracenote_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceNoteTests": () => (/* binding */ GraceNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// GraceNote Tests +// TODO: In the 'stem' test (aka Grace Note Stem › SVG + Petaluma in flow.html), the Petaluma note heads are not scaled down properly. + + + + + + +const GraceNoteTests = { + Start() { + QUnit.module('Grace Notes'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Grace Note Basic', basic); + run('With Articulation and Annotation on Parent Note', graceNoteModifiers); + run('Grace Note Basic with Slurs', basicSlurred); + run('Grace Note Stem', stem); + run('Grace Note Stem with Beams 1', stemWithBeamed, { + keys1: ['g/4'], + stemDirection1: 1, + keys2: ['d/5'], + stemDirection2: -1, + }); + run('Grace Note Stem with Beams 2', stemWithBeamed, { + keys1: ['a/3'], + stemDirection1: 1, + keys2: ['a/5'], + stemDirection2: -1, + }); + run('Grace Note Stem with Beams 3', stemWithBeamed, { + keys1: ['c/4'], + stemDirection1: 1, + keys2: ['c/6'], + stemDirection2: -1, + }); + run('Grace Note Slash', slash); + run('Grace Note Slash with Beams', slashWithBeams); + run('Grace Notes Multiple Voices', multipleVoices); + run('Grace Notes Multiple Voices Multiple Draws', multipleVoicesMultipleDraws); + }, +}; +function basic(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + const gracenotes = [ + { keys: ['e/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['a/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['e/4'], duration: '8' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4', 'g/4'], duration: '8' }, + { keys: ['a/4'], duration: '32' }, + { keys: ['b/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['g/4'], duration: '8' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + ].map(f.GraceNote.bind(f)); + gracenotes[1].addModifier(f.Accidental({ type: '##' }), 0); + gracenotes3[3].addModifier(f.Accidental({ type: 'bb' }), 0); + _src_dot__WEBPACK_IMPORTED_MODULE_4__.Dot.buildAndAttach([gracenotes4[0]], { all: true }); + const notes = [ + f + .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.GraceNoteGroup({ notes: gracenotes1 }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0), + ]; + const voice = f.Voice().setStrict(false).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteBasic'); +} +function graceNoteModifiers(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + const gracenotes = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); + const notes = [ + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#')), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('words')), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(3), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(3), 0) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a@a').setPosition(3), 0), + ]; + const voice = f.Voice().setStrict(false).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteModifiers'); +} +function basicSlurred(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + const gracenotes0 = [ + { keys: ['e/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['a/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['e/4'], duration: '8' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4', 'g/4'], duration: '8' }, + { keys: ['a/4'], duration: '32' }, + { keys: ['b/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['a/4'], duration: '8' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + ].map(f.GraceNote.bind(f)); + gracenotes0[1].addModifier(f.Accidental({ type: '#' }), 0); + gracenotes3[3].addModifier(f.Accidental({ type: 'b' }), 0); + gracenotes3[2].addModifier(f.Accidental({ type: 'n' }), 0); + _src_dot__WEBPACK_IMPORTED_MODULE_4__.Dot.buildAndAttach([gracenotes4[0]], { all: true }); + const notes = [ + f + .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes0, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.GraceNoteGroup({ notes: gracenotes1, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes2, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes3, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes4, slur: true }).beamNotes(), 0), + f.StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }), + ]; + const voice = f.Voice().setStrict(false).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteBasic'); +} +/** + * Helper function for three tests below: stem, stemWithBeamed, slash. + */ +const createNoteForStemTest = (duration, noteBuilder, keys, stem_direction, slash = false) => { + const struct = { duration, slash }; + struct.stem_direction = stem_direction; + struct.keys = keys; + return noteBuilder(struct); +}; +// Used in three tests below. +const durationsForStemTest = ['8', '16', '32', '64', '128']; +function stem(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + function createNotes(noteBuilder, keys, stem_direction) { + return durationsForStemTest.map((duration) => createNoteForStemTest(duration, noteBuilder, keys, stem_direction)); + } + function createNoteBlock(keys, stem_direction) { + const staveNotes = createNotes(f.StaveNote.bind(f), keys, stem_direction); + const gracenotes = createNotes(f.GraceNote.bind(f), keys, stem_direction); + // Add a bunch of GraceNotes in front of the first StaveNote. + staveNotes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0); + return staveNotes; + } + const voice = f.Voice().setStrict(false); + voice.addTickables(createNoteBlock(['g/4'], 1)); + voice.addTickables(createNoteBlock(['d/5'], -1)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteStem'); +} +function stemWithBeamed(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + function createBeamedNotes(noteBuilder, keys, stem_direction, beams, isGrace = false, notesToBeam) { + const ret = []; + durationsForStemTest.map((duration) => { + const n0 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction); + const n1 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction); + ret.push(n0); + ret.push(n1); + if (notesToBeam) { + notesToBeam.push([n0, n1]); + } + if (!isGrace) { + beams.push(f.Beam({ notes: [n0, n1] })); + } + }); + return ret; + } + function createBeamedNoteBlock(keys, stem_direction, beams) { + const bnotes = createBeamedNotes(f.StaveNote.bind(f), keys, stem_direction, beams); + const notesToBeam = []; + const gracenotes = createBeamedNotes(f.GraceNote.bind(f), keys, stem_direction, beams, true, notesToBeam); + const graceNoteGroup = f.GraceNoteGroup({ notes: gracenotes }); + notesToBeam.map(graceNoteGroup.beamNotes.bind(graceNoteGroup)); + bnotes[0].addModifier(graceNoteGroup, 0); + return bnotes; + } + const beams = []; + const voice = f.Voice().setStrict(false); + voice.addTickables(createBeamedNoteBlock(options.params.keys1, options.params.stemDirection1, beams)); + voice.addTickables(createBeamedNoteBlock(options.params.keys2, options.params.stemDirection2, beams)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteStem'); +} +function slash(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + function createNotes(noteT, keys, stem_direction, slash) { + return durationsForStemTest.map((d) => createNoteForStemTest(d, noteT, keys, stem_direction, slash)); + } + function createNoteBlock(keys, stem_direction) { + const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })]; + let graceNotes = createNotes(f.GraceNote.bind(f), keys, stem_direction, true); + const duration = '8'; + const gns = [ + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + ].map(f.GraceNote.bind(f)); + const notesToBeam = []; + notesToBeam.push([gns[0], gns[1], gns[2]]); + notesToBeam.push([gns[3], gns[4], gns[5]]); + notesToBeam.push([gns[6], gns[7], gns[8]]); + // Merge the two GraceNote[]. + graceNotes = graceNotes.concat(gns); + const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes }); + notesToBeam.forEach((notes) => graceNoteGroup.beamNotes(notes)); + notes[0].addModifier(graceNoteGroup, 0); + return notes; + } + const voice = f.Voice().setStrict(false); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1)); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteSlash'); +} +function slashWithBeams(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 130); + const stave = f.Stave({ x: 10, y: 10, width: 750 }); + function createNoteBlock(keys, stem_direction) { + const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })]; + let allGraceNotes = []; + const graceNotesToBeam = []; + ['8', '16', '32', '64'].forEach(function (duration) { + const graceNotes = [ + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: false }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: false }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: false }, + ].map(f.GraceNote.bind(f)); + graceNotesToBeam.push([graceNotes[0], graceNotes[1]]); + graceNotesToBeam.push([graceNotes[2], graceNotes[3]]); + graceNotesToBeam.push([graceNotes[4], graceNotes[5]]); + allGraceNotes = allGraceNotes.concat(graceNotes); + }); + const graceNoteGroup = f.GraceNoteGroup({ notes: allGraceNotes }); + graceNotesToBeam.forEach((g) => graceNoteGroup.beamNotes(g)); + notes[0].addModifier(graceNoteGroup, 0); + return notes; + } + const voice = f.Voice().setStrict(false); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1)); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteSlashWithBeams'); +} +function multipleVoices(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 140); + const stave = f.Stave({ x: 10, y: 10, width: 450 }); + const notes = [ + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['e/5'], stem_direction: 1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const notes2 = [ + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['f/4'], duration: '32', stem_direction: -1 }, + { keys: ['e/4'], duration: '32', stem_direction: -1 }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['f/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '8', stem_direction: 1 }, + ].map(f.GraceNote.bind(f)); + gracenotes2[0].setStemDirection(-1); + gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0); + notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0); + notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0); + notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0); + notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0); + const voice = f.Voice().setStrict(false).addTickables(notes); + const voice2 = f.Voice().setStrict(false).addTickables(notes2); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); + f.draw(); + options.assert.ok(true, 'Sixteenth Test'); +} +function multipleVoicesMultipleDraws(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 140); + const stave = f.Stave({ x: 10, y: 10, width: 450 }); + const notes = [ + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['e/5'], stem_direction: 1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const notes2 = [ + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['f/4'], duration: '32', stem_direction: -1 }, + { keys: ['e/4'], duration: '32', stem_direction: -1 }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['f/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '8', stem_direction: 1 }, + ].map(f.GraceNote.bind(f)); + gracenotes2[0].setStemDirection(-1); + gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0); + notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0); + notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0); + notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0); + notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0); + const voice = f.Voice().setStrict(false).addTickables(notes); + const voice2 = f.Voice().setStrict(false).addTickables(notes2); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); + f.draw(); + f.draw(); + options.assert.ok(true, 'Seventeenth Test'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(GraceNoteTests); + + + +/***/ }), + +/***/ "./tests/gracetabnote_tests.ts": +/*!*************************************!*\ + !*** ./tests/gracetabnote_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceTabNoteTests": () => (/* binding */ GraceTabNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _src_gracetabnote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/gracetabnote */ "./src/gracetabnote.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// GraceTabNote Tests + + + + + + + + +const GraceTabNoteTests = { + Start() { + QUnit.module('Grace Tab Notes'); + // TODO: Rename tests below since it is redundant with the module name. + // Remove "Grace Tab Note " + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Grace Tab Note Simple', simple); + run('Grace Tab Note Slurred', slurred); + }, +}; +// Helper functions to create TabNote and GraceTabNote objects. +const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_5__.TabNote(noteStruct); +const graceTabNote = (noteStruct) => new _src_gracetabnote__WEBPACK_IMPORTED_MODULE_4__.GraceTabNote(noteStruct); +/** + * Helper function to build a RenderContext and TabStave. + */ +function setupContext(opts, ctxBuilder) { + const context = ctxBuilder(opts.elementId, 350, 140); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_6__.TabStave(10, 10, 350).addTabGlyph().setContext(context).draw(); + return { context, stave }; +} +function simple(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder); + const note0 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: '4' }); + const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: '4' }); + const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' }); + const note3 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' }); + const gracenote_group0 = [{ positions: [{ str: 4, fret: 'x' }], duration: '8' }]; + const gracenote_group1 = [ + { positions: [{ str: 4, fret: 9 }], duration: '16' }, + { positions: [{ str: 4, fret: 10 }], duration: '16' }, + ]; + const gracenote_group2 = [{ positions: [{ str: 4, fret: 9 }], duration: '8' }]; + const gracenote_group3 = [ + { positions: [{ str: 5, fret: 10 }], duration: '8' }, + { positions: [{ str: 4, fret: 9 }], duration: '8' }, + ]; + const gracenotes0 = gracenote_group0.map(graceTabNote); + const gracenotes1 = gracenote_group1.map(graceTabNote); + const gracenotes2 = gracenote_group2.map(graceTabNote); + gracenotes2[0].setGhost(true); + const gracenotes3 = gracenote_group3.map(graceTabNote); + note0.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes0), 0); + note1.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes1), 0); + note2.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes2), 0); + note3.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes3), 0); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); + voice.addTickables([note0, note1, note2, note3]); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).format([voice], 250); + voice.draw(context, stave); + options.assert.ok(true, 'Simple Test'); +} +function slurred(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder); + const note0 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }); + const note1 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' }); + const gracenote_group0 = [ + { positions: [{ str: 4, fret: 9 }], duration: '8' }, + { positions: [{ str: 4, fret: 10 }], duration: '8' }, + ]; + const gracenote_group1 = [ + { positions: [{ str: 4, fret: 7 }], duration: '16' }, + { positions: [{ str: 4, fret: 8 }], duration: '16' }, + { positions: [{ str: 4, fret: 9 }], duration: '16' }, + ]; + const gracenotes0 = gracenote_group0.map(graceTabNote); + const gracenotes1 = gracenote_group1.map(graceTabNote); + note0.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes0, true), 0); + note1.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes1, true), 0); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); + voice.addTickables([note0, note1]); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).format([voice], 200); + voice.draw(context, stave); + options.assert.ok(true, 'Slurred Test'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(GraceTabNoteTests); + + + +/***/ }), + +/***/ "./tests/index.ts": +/*!************************!*\ + !*** ./tests/index.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AccidentalTests": () => (/* reexport safe */ _accidental_tests__WEBPACK_IMPORTED_MODULE_0__.AccidentalTests), +/* harmony export */ "AnnotationTests": () => (/* reexport safe */ _annotation_tests__WEBPACK_IMPORTED_MODULE_1__.AnnotationTests), +/* harmony export */ "ArticulationTests": () => (/* reexport safe */ _articulation_tests__WEBPACK_IMPORTED_MODULE_2__.ArticulationTests), +/* harmony export */ "AutoBeamFormattingTests": () => (/* reexport safe */ _auto_beam_formatting_tests__WEBPACK_IMPORTED_MODULE_3__.AutoBeamFormattingTests), +/* harmony export */ "BachDemoTests": () => (/* reexport safe */ _bach_tests__WEBPACK_IMPORTED_MODULE_4__.BachDemoTests), +/* harmony export */ "BarlineTests": () => (/* reexport safe */ _barline_tests__WEBPACK_IMPORTED_MODULE_5__.BarlineTests), +/* harmony export */ "BeamTests": () => (/* reexport safe */ _beam_tests__WEBPACK_IMPORTED_MODULE_6__.BeamTests), +/* harmony export */ "BendTests": () => (/* reexport safe */ _bend_tests__WEBPACK_IMPORTED_MODULE_7__.BendTests), +/* harmony export */ "BoundingBoxTests": () => (/* reexport safe */ _boundingbox_tests__WEBPACK_IMPORTED_MODULE_8__.BoundingBoxTests), +/* harmony export */ "ChordSymbolTests": () => (/* reexport safe */ _chordsymbol_tests__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolTests), +/* harmony export */ "ClefKeySignatureTests": () => (/* reexport safe */ _key_clef_tests__WEBPACK_IMPORTED_MODULE_23__.ClefKeySignatureTests), +/* harmony export */ "ClefTests": () => (/* reexport safe */ _clef_tests__WEBPACK_IMPORTED_MODULE_10__.ClefTests), +/* harmony export */ "CrossBeamTests": () => (/* reexport safe */ _crossbeam_tests__WEBPACK_IMPORTED_MODULE_11__.CrossBeamTests), +/* harmony export */ "CurveTests": () => (/* reexport safe */ _curve_tests__WEBPACK_IMPORTED_MODULE_12__.CurveTests), +/* harmony export */ "DotTests": () => (/* reexport safe */ _dot_tests__WEBPACK_IMPORTED_MODULE_13__.DotTests), +/* harmony export */ "EasyScoreTests": () => (/* reexport safe */ _easyscore_tests__WEBPACK_IMPORTED_MODULE_14__.EasyScoreTests), +/* harmony export */ "FactoryTests": () => (/* reexport safe */ _factory_tests__WEBPACK_IMPORTED_MODULE_15__.FactoryTests), +/* harmony export */ "FontTests": () => (/* reexport safe */ _font_tests__WEBPACK_IMPORTED_MODULE_16__.FontTests), +/* harmony export */ "FormatterTests": () => (/* reexport safe */ _formatter_tests__WEBPACK_IMPORTED_MODULE_17__.FormatterTests), +/* harmony export */ "FractionTests": () => (/* reexport safe */ _fraction_tests__WEBPACK_IMPORTED_MODULE_18__.FractionTests), +/* harmony export */ "GhostNoteTests": () => (/* reexport safe */ _ghostnote_tests__WEBPACK_IMPORTED_MODULE_19__.GhostNoteTests), +/* harmony export */ "GlyphNoteTests": () => (/* reexport safe */ _glyphnote_tests__WEBPACK_IMPORTED_MODULE_20__.GlyphNoteTests), +/* harmony export */ "GraceNoteTests": () => (/* reexport safe */ _gracenote_tests__WEBPACK_IMPORTED_MODULE_21__.GraceNoteTests), +/* harmony export */ "GraceTabNoteTests": () => (/* reexport safe */ _gracetabnote_tests__WEBPACK_IMPORTED_MODULE_22__.GraceTabNoteTests), +/* harmony export */ "KeyManagerTests": () => (/* reexport safe */ _keymanager_tests__WEBPACK_IMPORTED_MODULE_24__.KeyManagerTests), +/* harmony export */ "KeySignatureTests": () => (/* reexport safe */ _keysignature_tests__WEBPACK_IMPORTED_MODULE_25__.KeySignatureTests), +/* harmony export */ "ModifierContextTests": () => (/* reexport safe */ _modifier_tests__WEBPACK_IMPORTED_MODULE_26__.ModifierContextTests), +/* harmony export */ "MultiMeasureRestTests": () => (/* reexport safe */ _multimeasurerest_tests__WEBPACK_IMPORTED_MODULE_27__.MultiMeasureRestTests), +/* harmony export */ "MusicTests": () => (/* reexport safe */ _music_tests__WEBPACK_IMPORTED_MODULE_28__.MusicTests), +/* harmony export */ "NoteHeadTests": () => (/* reexport safe */ _notehead_tests__WEBPACK_IMPORTED_MODULE_29__.NoteHeadTests), +/* harmony export */ "NoteSubGroupTests": () => (/* reexport safe */ _notesubgroup_tests__WEBPACK_IMPORTED_MODULE_30__.NoteSubGroupTests), +/* harmony export */ "OffscreenCanvasTests": () => (/* reexport safe */ _offscreencanvas_tests__WEBPACK_IMPORTED_MODULE_31__.OffscreenCanvasTests), +/* harmony export */ "OrnamentTests": () => (/* reexport safe */ _ornament_tests__WEBPACK_IMPORTED_MODULE_32__.OrnamentTests), +/* harmony export */ "ParserTests": () => (/* reexport safe */ _parser_tests__WEBPACK_IMPORTED_MODULE_33__.ParserTests), +/* harmony export */ "PedalMarkingTests": () => (/* reexport safe */ _pedalmarking_tests__WEBPACK_IMPORTED_MODULE_34__.PedalMarkingTests), +/* harmony export */ "PercussionTests": () => (/* reexport safe */ _percussion_tests__WEBPACK_IMPORTED_MODULE_35__.PercussionTests), +/* harmony export */ "RegistryTests": () => (/* reexport safe */ _registry_tests__WEBPACK_IMPORTED_MODULE_36__.RegistryTests), +/* harmony export */ "RendererTests": () => (/* reexport safe */ _renderer_tests__WEBPACK_IMPORTED_MODULE_37__.RendererTests), +/* harmony export */ "RestsTests": () => (/* reexport safe */ _rests_tests__WEBPACK_IMPORTED_MODULE_38__.RestsTests), +/* harmony export */ "RhythmTests": () => (/* reexport safe */ _rhythm_tests__WEBPACK_IMPORTED_MODULE_39__.RhythmTests), +/* harmony export */ "StaveConnectorTests": () => (/* reexport safe */ _staveconnector_tests__WEBPACK_IMPORTED_MODULE_41__.StaveConnectorTests), +/* harmony export */ "StaveHairpinTests": () => (/* reexport safe */ _stavehairpin_tests__WEBPACK_IMPORTED_MODULE_42__.StaveHairpinTests), +/* harmony export */ "StaveLineTests": () => (/* reexport safe */ _staveline_tests__WEBPACK_IMPORTED_MODULE_43__.StaveLineTests), +/* harmony export */ "StaveModifierTests": () => (/* reexport safe */ _stavemodifier_tests__WEBPACK_IMPORTED_MODULE_44__.StaveModifierTests), +/* harmony export */ "StaveNoteTests": () => (/* reexport safe */ _stavenote_tests__WEBPACK_IMPORTED_MODULE_45__.StaveNoteTests), +/* harmony export */ "StaveTests": () => (/* reexport safe */ _stave_tests__WEBPACK_IMPORTED_MODULE_40__.StaveTests), +/* harmony export */ "StaveTieTests": () => (/* reexport safe */ _stavetie_tests__WEBPACK_IMPORTED_MODULE_46__.StaveTieTests), +/* harmony export */ "StringNumberTests": () => (/* reexport safe */ _stringnumber_tests__WEBPACK_IMPORTED_MODULE_47__.StringNumberTests), +/* harmony export */ "StrokesTests": () => (/* reexport safe */ _strokes_tests__WEBPACK_IMPORTED_MODULE_48__.StrokesTests), +/* harmony export */ "StyleTests": () => (/* reexport safe */ _style_tests__WEBPACK_IMPORTED_MODULE_49__.StyleTests), +/* harmony export */ "TabNoteTests": () => (/* reexport safe */ _tabnote_tests__WEBPACK_IMPORTED_MODULE_50__.TabNoteTests), +/* harmony export */ "TabSlideTests": () => (/* reexport safe */ _tabslide_tests__WEBPACK_IMPORTED_MODULE_51__.TabSlideTests), +/* harmony export */ "TabStaveTests": () => (/* reexport safe */ _tabstave_tests__WEBPACK_IMPORTED_MODULE_52__.TabStaveTests), +/* harmony export */ "TabTieTests": () => (/* reexport safe */ _tabtie_tests__WEBPACK_IMPORTED_MODULE_53__.TabTieTests), +/* harmony export */ "TextBracketTests": () => (/* reexport safe */ _textbracket_tests__WEBPACK_IMPORTED_MODULE_54__.TextBracketTests), +/* harmony export */ "TextFormatterTests": () => (/* reexport safe */ _textformatter_tests__WEBPACK_IMPORTED_MODULE_55__.TextFormatterTests), +/* harmony export */ "TextNoteTests": () => (/* reexport safe */ _textnote_tests__WEBPACK_IMPORTED_MODULE_56__.TextNoteTests), +/* harmony export */ "ThreeVoicesTests": () => (/* reexport safe */ _threevoice_tests__WEBPACK_IMPORTED_MODULE_57__.ThreeVoicesTests), +/* harmony export */ "TickContextTests": () => (/* reexport safe */ _tickcontext_tests__WEBPACK_IMPORTED_MODULE_58__.TickContextTests), +/* harmony export */ "TimeSignatureTests": () => (/* reexport safe */ _timesignature_tests__WEBPACK_IMPORTED_MODULE_59__.TimeSignatureTests), +/* harmony export */ "TremoloTests": () => (/* reexport safe */ _tremolo_tests__WEBPACK_IMPORTED_MODULE_60__.TremoloTests), +/* harmony export */ "TuningTests": () => (/* reexport safe */ _tuning_tests__WEBPACK_IMPORTED_MODULE_61__.TuningTests), +/* harmony export */ "TupletTests": () => (/* reexport safe */ _tuplet_tests__WEBPACK_IMPORTED_MODULE_62__.TupletTests), +/* harmony export */ "TypeGuardTests": () => (/* reexport safe */ _typeguard_tests__WEBPACK_IMPORTED_MODULE_63__.TypeGuardTests), +/* harmony export */ "UnisonTests": () => (/* reexport safe */ _unison_tests__WEBPACK_IMPORTED_MODULE_64__.UnisonTests), +/* harmony export */ "VFPrefixTests": () => (/* reexport safe */ _vf_prefix_tests__WEBPACK_IMPORTED_MODULE_65__.VFPrefixTests), +/* harmony export */ "VibratoBracketTests": () => (/* reexport safe */ _vibratobracket_tests__WEBPACK_IMPORTED_MODULE_67__.VibratoBracketTests), +/* harmony export */ "VibratoTests": () => (/* reexport safe */ _vibrato_tests__WEBPACK_IMPORTED_MODULE_66__.VibratoTests), +/* harmony export */ "VoiceTests": () => (/* reexport safe */ _voice_tests__WEBPACK_IMPORTED_MODULE_68__.VoiceTests) +/* harmony export */ }); +/* harmony import */ var _accidental_tests__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental_tests */ "./tests/accidental_tests.ts"); +/* harmony import */ var _annotation_tests__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation_tests */ "./tests/annotation_tests.ts"); +/* harmony import */ var _articulation_tests__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation_tests */ "./tests/articulation_tests.ts"); +/* harmony import */ var _auto_beam_formatting_tests__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./auto_beam_formatting_tests */ "./tests/auto_beam_formatting_tests.ts"); +/* harmony import */ var _bach_tests__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./bach_tests */ "./tests/bach_tests.ts"); +/* harmony import */ var _barline_tests__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./barline_tests */ "./tests/barline_tests.ts"); +/* harmony import */ var _beam_tests__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./beam_tests */ "./tests/beam_tests.ts"); +/* harmony import */ var _bend_tests__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./bend_tests */ "./tests/bend_tests.ts"); +/* harmony import */ var _boundingbox_tests__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./boundingbox_tests */ "./tests/boundingbox_tests.ts"); +/* harmony import */ var _chordsymbol_tests__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol_tests */ "./tests/chordsymbol_tests.ts"); +/* harmony import */ var _clef_tests__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef_tests */ "./tests/clef_tests.ts"); +/* harmony import */ var _crossbeam_tests__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./crossbeam_tests */ "./tests/crossbeam_tests.ts"); +/* harmony import */ var _curve_tests__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./curve_tests */ "./tests/curve_tests.ts"); +/* harmony import */ var _dot_tests__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./dot_tests */ "./tests/dot_tests.ts"); +/* harmony import */ var _easyscore_tests__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./easyscore_tests */ "./tests/easyscore_tests.ts"); +/* harmony import */ var _factory_tests__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./factory_tests */ "./tests/factory_tests.ts"); +/* harmony import */ var _font_tests__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./font_tests */ "./tests/font_tests.ts"); +/* harmony import */ var _formatter_tests__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./formatter_tests */ "./tests/formatter_tests.ts"); +/* harmony import */ var _fraction_tests__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./fraction_tests */ "./tests/fraction_tests.ts"); +/* harmony import */ var _ghostnote_tests__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./ghostnote_tests */ "./tests/ghostnote_tests.ts"); +/* harmony import */ var _glyphnote_tests__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./glyphnote_tests */ "./tests/glyphnote_tests.ts"); +/* harmony import */ var _gracenote_tests__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./gracenote_tests */ "./tests/gracenote_tests.ts"); +/* harmony import */ var _gracetabnote_tests__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./gracetabnote_tests */ "./tests/gracetabnote_tests.ts"); +/* harmony import */ var _key_clef_tests__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./key_clef_tests */ "./tests/key_clef_tests.ts"); +/* harmony import */ var _keymanager_tests__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./keymanager_tests */ "./tests/keymanager_tests.ts"); +/* harmony import */ var _keysignature_tests__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./keysignature_tests */ "./tests/keysignature_tests.ts"); +/* harmony import */ var _modifier_tests__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./modifier_tests */ "./tests/modifier_tests.ts"); +/* harmony import */ var _multimeasurerest_tests__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./multimeasurerest_tests */ "./tests/multimeasurerest_tests.ts"); +/* harmony import */ var _music_tests__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./music_tests */ "./tests/music_tests.ts"); +/* harmony import */ var _notehead_tests__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./notehead_tests */ "./tests/notehead_tests.ts"); +/* harmony import */ var _notesubgroup_tests__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./notesubgroup_tests */ "./tests/notesubgroup_tests.ts"); +/* harmony import */ var _offscreencanvas_tests__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./offscreencanvas_tests */ "./tests/offscreencanvas_tests.ts"); +/* harmony import */ var _ornament_tests__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./ornament_tests */ "./tests/ornament_tests.ts"); +/* harmony import */ var _parser_tests__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./parser_tests */ "./tests/parser_tests.ts"); +/* harmony import */ var _pedalmarking_tests__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./pedalmarking_tests */ "./tests/pedalmarking_tests.ts"); +/* harmony import */ var _percussion_tests__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./percussion_tests */ "./tests/percussion_tests.ts"); +/* harmony import */ var _registry_tests__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./registry_tests */ "./tests/registry_tests.ts"); +/* harmony import */ var _renderer_tests__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./renderer_tests */ "./tests/renderer_tests.ts"); +/* harmony import */ var _rests_tests__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./rests_tests */ "./tests/rests_tests.ts"); +/* harmony import */ var _rhythm_tests__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./rhythm_tests */ "./tests/rhythm_tests.ts"); +/* harmony import */ var _stave_tests__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./stave_tests */ "./tests/stave_tests.ts"); +/* harmony import */ var _staveconnector_tests__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./staveconnector_tests */ "./tests/staveconnector_tests.ts"); +/* harmony import */ var _stavehairpin_tests__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./stavehairpin_tests */ "./tests/stavehairpin_tests.ts"); +/* harmony import */ var _staveline_tests__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./staveline_tests */ "./tests/staveline_tests.ts"); +/* harmony import */ var _stavemodifier_tests__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./stavemodifier_tests */ "./tests/stavemodifier_tests.ts"); +/* harmony import */ var _stavenote_tests__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./stavenote_tests */ "./tests/stavenote_tests.ts"); +/* harmony import */ var _stavetie_tests__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stavetie_tests */ "./tests/stavetie_tests.ts"); +/* harmony import */ var _stringnumber_tests__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stringnumber_tests */ "./tests/stringnumber_tests.ts"); +/* harmony import */ var _strokes_tests__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./strokes_tests */ "./tests/strokes_tests.ts"); +/* harmony import */ var _style_tests__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./style_tests */ "./tests/style_tests.ts"); +/* harmony import */ var _tabnote_tests__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./tabnote_tests */ "./tests/tabnote_tests.ts"); +/* harmony import */ var _tabslide_tests__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./tabslide_tests */ "./tests/tabslide_tests.ts"); +/* harmony import */ var _tabstave_tests__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./tabstave_tests */ "./tests/tabstave_tests.ts"); +/* harmony import */ var _tabtie_tests__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./tabtie_tests */ "./tests/tabtie_tests.ts"); +/* harmony import */ var _textbracket_tests__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./textbracket_tests */ "./tests/textbracket_tests.ts"); +/* harmony import */ var _textformatter_tests__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./textformatter_tests */ "./tests/textformatter_tests.ts"); +/* harmony import */ var _textnote_tests__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./textnote_tests */ "./tests/textnote_tests.ts"); +/* harmony import */ var _threevoice_tests__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./threevoice_tests */ "./tests/threevoice_tests.ts"); +/* harmony import */ var _tickcontext_tests__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./tickcontext_tests */ "./tests/tickcontext_tests.ts"); +/* harmony import */ var _timesignature_tests__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./timesignature_tests */ "./tests/timesignature_tests.ts"); +/* harmony import */ var _tremolo_tests__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./tremolo_tests */ "./tests/tremolo_tests.ts"); +/* harmony import */ var _tuning_tests__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./tuning_tests */ "./tests/tuning_tests.ts"); +/* harmony import */ var _tuplet_tests__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./tuplet_tests */ "./tests/tuplet_tests.ts"); +/* harmony import */ var _typeguard_tests__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./typeguard_tests */ "./tests/typeguard_tests.ts"); +/* harmony import */ var _unison_tests__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./unison_tests */ "./tests/unison_tests.ts"); +/* harmony import */ var _vf_prefix_tests__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./vf_prefix_tests */ "./tests/vf_prefix_tests.ts"); +/* harmony import */ var _vibrato_tests__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./vibrato_tests */ "./tests/vibrato_tests.ts"); +/* harmony import */ var _vibratobracket_tests__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./vibratobracket_tests */ "./tests/vibratobracket_tests.ts"); +/* harmony import */ var _voice_tests__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./voice_tests */ "./tests/voice_tests.ts"); +// vexflow-debug-with-tests.ts includes this module via: +// export * from '../../tests'; +// +// To add a new test module, add a new line: +// `export * from './xxxx_tests';` +// to this file that points to the new file `xxxx_tests.ts`. +// +// The test module needs to call VexFlowTests.register(...). +// For example, in annotation_tests.ts, the last two lines are: +// VexFlowTests.register(AnnotationTests); +// export { AnnotationTests }; +// +// In vexflow_test_helpers.ts: VexFlowTests.run() will run all registered tests. +// +// To iterate faster during development, you can comment out most of this file +// and focus on just testing the module(s) you are currently working on. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "./tests/key_clef_tests.ts": +/*!*********************************!*\ + !*** ./tests/key_clef_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ClefKeySignatureTests": () => (/* binding */ ClefKeySignatureTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); +/* harmony import */ var _src_keysignature__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Clef Key Signature Tests +// + + + + +const ClefKeySignatureTests = { + Start() { + QUnit.module('Clef Keys'); + // Removed an identical 'Key Parser Test'. See keysignature_tests.ts. + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Major Key Clef Test', keys, { majorKeys: true }); + run('Minor Key Clef Test', keys, { majorKeys: false }); + run('Stave Helper', staveHelper); + }, +}; +const fontWidths = () => { + const glyphScale = 39; // default font scale + const sharpWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('accidentalSharp', glyphScale) + 1; + const flatWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('accidentalFlat', glyphScale) + 1; + const ksPadding = 10; // hard-coded in keysignature.ts + const naturalWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('accidentalNatural', glyphScale) + 2; + const clefWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('gClef', glyphScale); // widest clef + return { sharpWidth, flatWidth, naturalWidth, clefWidth, ksPadding }; +}; +function keys(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; // total number in all the keys + const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 6 * w.ksPadding; + const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 6 * w.ksPadding; + const clefs = [ + 'treble', + 'soprano', + 'mezzo-soprano', + 'alto', + 'tenor', + 'baritone-f', + 'baritone-c', + 'bass', + 'french', + 'subbass', + 'percussion', + ]; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 20 + 80 * 2 * clefs.length); + const staves = []; + const keys = options.params.majorKeys ? _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS : _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MINOR_KEYS; + let i; + let flat; + let sharp; + let keySig; + const yOffsetForFlatStaves = 10 + 80 * clefs.length; + for (i = 0; i < clefs.length; i++) { + // Render all the sharps first, then all the flats: + staves[i] = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 10 + 80 * i, flatTestWidth); + staves[i].addClef(clefs[i]); + staves[i + clefs.length] = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, yOffsetForFlatStaves + 10 + 80 * i, sharpTestWidth); + staves[i + clefs.length].addClef(clefs[i]); + for (flat = 0; flat < 8; flat++) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_2__.KeySignature(keys[flat]); + keySig.addToStave(staves[i]); + } + for (sharp = 8; sharp < keys.length; sharp++) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_2__.KeySignature(keys[sharp]); + keySig.addToStave(staves[i + clefs.length]); + } + } + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.formatBegModifiers(staves); + for (i = 0; i < clefs.length; i++) { + staves[i].setContext(ctx); + staves[i].draw(); + staves[i + clefs.length].setContext(ctx); + staves[i + clefs.length].draw(); + } + options.assert.ok(true, 'all pass'); +} +function staveHelper(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; // total number in all the keys + const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 7 * w.ksPadding; + const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 7 * w.ksPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 400); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 10, flatTestWidth); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 90, flatTestWidth); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 170, sharpTestWidth); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 260, sharpTestWidth); + const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; + stave1.addClef('treble'); + stave2.addClef('bass'); + stave3.addClef('alto'); + stave4.addClef('tenor'); + for (let n = 0; n < 8; ++n) { + stave1.addKeySignature(keys[n]); + stave2.addKeySignature(keys[n]); + } + for (let i = 8; i < keys.length; ++i) { + stave3.addKeySignature(keys[i]); + stave4.addKeySignature(keys[i]); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + stave3.setContext(ctx); + stave3.draw(); + stave4.setContext(ctx); + stave4.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ClefKeySignatureTests); + + + +/***/ }), + +/***/ "./tests/keymanager_tests.ts": +/*!***********************************!*\ + !*** ./tests/keymanager_tests.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeyManagerTests": () => (/* binding */ KeyManagerTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Music Key Management Tests +// +// TODO: KeyManager.getAccidental(key) specifies that the return value's .accidental property is string | undefined. +// However, we check it against null. + + +const KeyManagerTests = { + Start() { + QUnit.module('KeyManager'); + QUnit.test('Valid Notes', works); + QUnit.test('Select Notes', selectNotes); + }, +}; +function works(assert) { + const manager = new _src_index__WEBPACK_IMPORTED_MODULE_1__.KeyManager('g'); + assert.equal(manager.getAccidental('f').accidental, '#'); + manager.setKey('a'); + assert.equal(manager.getAccidental('c').accidental, '#'); + assert.equal(manager.getAccidental('a').accidental, null); + assert.equal(manager.getAccidental('f').accidental, '#'); + manager.setKey('A'); + assert.equal(manager.getAccidental('c').accidental, '#'); + assert.equal(manager.getAccidental('a').accidental, null); + assert.equal(manager.getAccidental('f').accidental, '#'); +} +function selectNotes(assert) { + const manager = new _src_index__WEBPACK_IMPORTED_MODULE_1__.KeyManager('f'); + assert.equal(manager.selectNote('bb').note, 'bb'); + assert.equal(manager.selectNote('bb').accidental, 'b'); + assert.equal(manager.selectNote('g').note, 'g'); + assert.equal(manager.selectNote('g').accidental, null); + assert.equal(manager.selectNote('b').note, 'b'); + assert.equal(manager.selectNote('b').accidental, null); + assert.equal(manager.selectNote('a#').note, 'bb'); + assert.equal(manager.selectNote('g#').note, 'g#'); + // Changes have no effect? + assert.equal(manager.selectNote('g#').note, 'g#'); + assert.equal(manager.selectNote('bb').note, 'bb'); + assert.equal(manager.selectNote('bb').accidental, 'b'); + assert.equal(manager.selectNote('g').note, 'g'); + assert.equal(manager.selectNote('g').accidental, null); + assert.equal(manager.selectNote('b').note, 'b'); + assert.equal(manager.selectNote('b').accidental, null); + assert.equal(manager.selectNote('a#').note, 'bb'); + assert.equal(manager.selectNote('g#').note, 'g#'); + // Changes should propagate + manager.reset(); + assert.equal(manager.selectNote('g#').change, true); + assert.equal(manager.selectNote('g#').change, false); + assert.equal(manager.selectNote('g').change, true); + assert.equal(manager.selectNote('g').change, false); + assert.equal(manager.selectNote('g#').change, true); + manager.reset(); + let note = manager.selectNote('bb'); + assert.equal(note.change, false); + assert.equal(note.accidental, 'b'); + note = manager.selectNote('g'); + assert.equal(note.change, false); + assert.equal(note.accidental, null); + note = manager.selectNote('g#'); + assert.equal(note.change, true); + assert.equal(note.accidental, '#'); + note = manager.selectNote('g'); + assert.equal(note.change, true); + assert.equal(note.accidental, null); + note = manager.selectNote('g'); + assert.equal(note.change, false); + assert.equal(note.accidental, null); + note = manager.selectNote('g#'); + assert.equal(note.change, true); + assert.equal(note.accidental, '#'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(KeyManagerTests); + + + +/***/ }), + +/***/ "./tests/keysignature_tests.ts": +/*!*************************************!*\ + !*** ./tests/keysignature_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeySignatureTests": () => (/* binding */ KeySignatureTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); +/* harmony import */ var _src_keysignature__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Key Signature Tests +// + + + + + + +const KeySignatureTests = { + Start() { + QUnit.module('KeySignature'); + QUnit.test('Key Parser Test', parser); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Major Key Test', majorKeys); + run('Minor Key Test', minorKeys); + run('Stave Helper', staveHelper); + run('Cancelled key test', majorKeysCanceled); + run('Cancelled key (for each clef) test', keysCanceledForEachClef); + run('Altered key test', majorKeysAltered); + run('End key with clef test', endKeyWithClef); + run('Key Signature Change test', changeKey); + }, +}; +const fontWidths = () => { + const glyphScale = 39; // default font scale + const sharpWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.getWidth('accidentalSharp', glyphScale) + 1; + const flatWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.getWidth('accidentalFlat', glyphScale) + 1; + const naturalWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.getWidth('accidentalNatural', glyphScale) + 2; + const clefWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.getWidth('gClef', glyphScale) * 2; // widest clef + return { sharpWidth, flatWidth, naturalWidth, clefWidth }; +}; +function parser(assert) { + assert.expect(11); + function catchError(spec) { + assert.throws(() => _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature(spec), /BadKeySignature/); + } + catchError('asdf'); + catchError('D!'); + catchError('E#'); + catchError('D#'); + catchError('#'); + catchError('b'); + catchError('Kb'); + catchError('Fb'); + catchError('Dbm'); + catchError('B#m'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('B'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('C'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('Fm'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('Ab'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('Abm'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('F#'); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('G#m'); + assert.ok(true, 'all pass'); +} +function majorKeys(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; // total number in all the keys + const casePadding = 10; // hard-coded in staveModifier + const testCases = 7; // all keys, but includes key of C + const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, flatTestWidth); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, sharpTestWidth); + const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; + let keySig = null; + for (let i = 0; i < 8; ++i) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); + keySig.addToStave(stave1); + } + for (let n = 8; n < keys.length; ++n) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); + keySig.addToStave(stave2); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + options.assert.ok(true, 'all pass'); +} +function majorKeysCanceled(options, contextBuilder) { + const scale = 0.9; + const w = fontWidths(); + const flatPadding = 18; + const sharpPadding = 20; + const flatTestCases = 8; + const sharpTestCases = 7; + // magic numbers are the numbers of that symbol that appear in the test case + const sharpTestWidth = 28 * w.sharpWidth + 21 * w.naturalWidth + sharpPadding * sharpTestCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; + const flatTestWidth = 28 * w.flatWidth + 28 * w.naturalWidth + flatPadding * flatTestCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; + const eFlatTestWidth = 28 * w.flatWidth + 32 * w.naturalWidth + flatPadding * flatTestCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; + const eSharpTestWidth = 28 * w.sharpWidth + 28 * w.naturalWidth + sharpPadding * sharpTestCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; + const maxWidth = Math.max(Math.max(sharpTestWidth, flatTestWidth, Math.max(eSharpTestWidth, eFlatTestWidth))); + const ctx = contextBuilder(options.elementId, maxWidth + 100, 500); + ctx.scale(scale, scale); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, flatTestWidth).addClef('treble'); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, sharpTestWidth).addClef('treble'); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 170, eFlatTestWidth).addClef('treble'); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 250, eSharpTestWidth).addClef('treble'); + const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; + let keySig = null; + let i; + let n; + for (i = 0; i < 8; ++i) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); + keySig.cancelKey('Cb'); + keySig.setPadding(flatPadding); + keySig.addToStave(stave1); + } + for (n = 8; n < keys.length; ++n) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); + keySig.cancelKey('C#'); + keySig.setPadding(sharpPadding); + keySig.addToStave(stave2); + } + for (i = 0; i < 8; ++i) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); + keySig.cancelKey('E'); + keySig.setPadding(flatPadding); + keySig.addToStave(stave3); + } + for (n = 8; n < keys.length; ++n) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); + keySig.cancelKey('Ab'); + keySig.setPadding(sharpPadding); + keySig.addToStave(stave4); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + stave3.setContext(ctx); + stave3.draw(); + stave4.setContext(ctx); + stave4.draw(); + options.assert.ok(true, 'all pass'); +} +function keysCanceledForEachClef(options, contextBuilder) { + const scale = 0.8; + const w = fontWidths(); + const keyPadding = 10; + const keys = ['C#', 'Cb']; + const flatsKey = [7, 14]; + const sharpsKey = [14, 7]; + const natsKey = [7, 7]; + const max = 21 * Math.max(w.sharpWidth, w.flatWidth) * 2 + keyPadding * 6 + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; + const ctx = contextBuilder(options.elementId, max + 100, 380); + ctx.scale(scale, scale); + const x = 20; + let y = 20; + let tx = x; + ['bass', 'tenor', 'soprano', 'mezzo-soprano', 'baritone-f'].forEach(function (clef) { + keys.forEach((key, keyIx) => { + const cancelKey = keys[(keyIx + 1) % 2]; + const width = flatsKey[keyIx] * w.flatWidth + + natsKey[keyIx] * w.naturalWidth + + sharpsKey[keyIx] * w.sharpWidth + + keyPadding * 3 + + w.clefWidth + + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(tx, y, width); + stave.setClef(clef); + stave.addKeySignature(cancelKey); + stave.addKeySignature(key, cancelKey); + stave.addKeySignature(key); + stave.setContext(ctx).draw(); + tx += width; + }); + tx = x; + y += 80; + }); + options.assert.ok(true, 'all pass'); +} +function majorKeysAltered(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 780, 500); + ctx.scale(0.9, 0.9); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, 750).addClef('treble'); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, 750).addClef('treble'); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 170, 750).addClef('treble'); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 250, 750).addClef('treble'); + const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; + let keySig = null; + let i; + let n; + for (i = 0; i < 8; ++i) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); + keySig.alterKey(['bs', 'bs']); + keySig.setPadding(18); + keySig.addToStave(stave1); + } + for (n = 8; n < keys.length; ++n) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); + keySig.alterKey(['+', '+', '+']); + keySig.setPadding(20); + keySig.addToStave(stave2); + } + for (i = 0; i < 8; ++i) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); + keySig.alterKey(['n', 'bs', 'bb']); + keySig.setPadding(18); + keySig.addToStave(stave3); + } + for (n = 8; n < keys.length; ++n) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); + keySig.alterKey(['++', '+', 'n', '+']); + keySig.setPadding(20); + keySig.addToStave(stave4); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + stave3.setContext(ctx); + stave3.draw(); + stave4.setContext(ctx); + stave4.draw(); + options.assert.ok(true, 'all pass'); +} +function minorKeys(options, contextBuilder) { + const accidentalCount = 28; // total number in all the keys + const w = fontWidths(); + const casePadding = 10; // hard-coded in staveModifier + const testCases = 7; // all keys, but includes key of C + const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, flatTestWidth); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, sharpTestWidth); + const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MINOR_KEYS; + let keySig = null; + for (let i = 0; i < 8; ++i) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); + keySig.addToStave(stave1); + } + for (let n = 8; n < keys.length; ++n) { + keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); + keySig.addToStave(stave2); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + options.assert.ok(true, 'all pass'); +} +function endKeyWithClef(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 200); + ctx.scale(0.9, 0.9); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, 350); + stave1 + .setKeySignature('G') + .setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_END) + .setClef('treble') + .addTimeSignature('4/4') + .setEndClef('bass') + .setEndKeySignature('Cb'); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, 350); + stave2.setKeySignature('Cb').setClef('bass').setEndClef('treble').setEndKeySignature('G'); + stave1.setContext(ctx).draw(); + stave2.setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function staveHelper(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; // total number in all the keys + const casePadding = 10; // hard-coded in staveModifier + const testCases = 7; // all keys, but includes key of C + const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, flatTestWidth); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, sharpTestWidth); + const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; + for (let i = 0; i < 8; ++i) { + stave1.addKeySignature(keys[i]); + } + for (let n = 8; n < keys.length; ++n) { + stave2.addKeySignature(keys[n]); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + options.assert.ok(true, 'all pass'); +} +function changeKey(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900); + // The previous code was buggy: f.Stave(10, 10, 800), even though Factory.Stave() only accepts 1 argument. + const stave = f.Stave({ x: 10, y: 10, width: 800 }).addClef('treble').addTimeSignature('C|'); + const voice = f + .Voice() + .setStrict(false) + .addTickables([ + f.KeySigNote({ key: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + f.BarNote(), + f.KeySigNote({ key: 'D', cancelKey: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + f.BarNote(), + f.KeySigNote({ key: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + f.BarNote(), + f.KeySigNote({ key: 'D', alterKey: ['b', 'n'] }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + ]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(KeySignatureTests); + + + +/***/ }), + +/***/ "./tests/mocks.ts": +/*!************************!*\ + !*** ./tests/mocks.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MockTickable": () => (/* binding */ MockTickable) +/* harmony export */ }); +/* harmony import */ var _src_fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/fraction */ "./src/fraction.ts"); +/* harmony import */ var _src_tickable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/tickable */ "./src/tickable.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TickContext Mocks + + +class MockTickable extends _src_tickable__WEBPACK_IMPORTED_MODULE_1__.Tickable { + constructor() { + super(...arguments); + this.ticks = new _src_fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(1, 1); + this.width = 0; + this.ignore_ticks = false; + } + init() { + // DO NOTHING. + } + getX() { + // eslint-disable-next-line + return this.tickContext.getX(); + } + getIntrinsicTicks() { + return this.ticks.value(); + } + getTicks() { + return this.ticks; + } + setTicks(t) { + this.ticks = new _src_fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(t, 1); + return this; + } + // Called by TickContext.preFormat(). + getMetrics() { + return { + width: 0, + glyphWidth: 0, + notePx: this.width, + modLeftPx: 0, + modRightPx: 0, + leftDisplacedHeadPx: 0, + rightDisplacedHeadPx: 0, + glyphPx: 0, + }; + } + getWidth() { + return this.width; + } + setWidth(w) { + this.width = w; + return this; + } + setVoice(v) { + this.voice = v; + return this; + } + setStave(stave) { + this.stave = stave; + return this; + } + getStave() { + return this.stave; + } + setTickContext(tc) { + this.tickContext = tc; + return this; + } + setIgnoreTicks(flag) { + this.ignore_ticks = flag; + return this; + } + shouldIgnoreTicks() { + return this.ignore_ticks; + } + preFormat() { + // DO NOTHING. + } + // eslint-disable-next-line + draw(...args) { + // DO NOTHING. + } +} + + + +/***/ }), + +/***/ "./tests/modifier_tests.ts": +/*!*********************************!*\ + !*** ./tests/modifier_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ModifierContextTests": () => (/* binding */ ModifierContextTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// ModifierContext Tests + + +const ModifierContextTests = { + Start() { + QUnit.module('ModifierContext'); + QUnit.test('Modifier Width Test', width); + QUnit.test('Modifier Management', management); + }, +}; +function width(assert) { + const mc = new _src_index__WEBPACK_IMPORTED_MODULE_1__.ModifierContext(); + assert.equal(mc.getWidth(), 0, 'New modifier context has no width'); +} +function management(assert) { + const mc = new _src_index__WEBPACK_IMPORTED_MODULE_1__.ModifierContext(); + const modifier1 = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Modifier(); + const modifier2 = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Modifier(); + mc.addMember(modifier1); + mc.addMember(modifier2); + const modifiers = mc.getMembers(_src_index__WEBPACK_IMPORTED_MODULE_1__.Modifier.CATEGORY); + assert.equal(modifiers.length, 2, 'Added two modifiers'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ModifierContextTests); + + + +/***/ }), + +/***/ "./tests/multimeasurerest_tests.ts": +/*!*****************************************!*\ + !*** ./tests/multimeasurerest_tests.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MultiMeasureRestTests": () => (/* binding */ MultiMeasureRestTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// MultiMeasureRest Tests + + + +const MultiMeasureRestTests = { + Start() { + QUnit.module('MultiMeasureRest'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Test', simple); + run('Stave with modifiers Test', staveWithModifiers); + }, +}; +function simple(options) { + const width = 910; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, width, 300); + const line_spacing_15px = { options: { spacing_between_lines_px: 15 } }; + // Each item below is an array that contains: + // item[0] => staveParams to adjust vertical spacing between lines + // item[1] => multiMeasureRestParams + // eslint-disable-next-line + const params = [ + [{}, { number_of_measures: 2, show_number: false }], + [{}, { number_of_measures: 2 }], + [{}, { number_of_measures: 2, line_thickness: 8, serif_thickness: 3 }], + [{}, { number_of_measures: 1, use_symbols: true }], + [{}, { number_of_measures: 2, use_symbols: true }], + [{}, { number_of_measures: 3, use_symbols: true }], + [{}, { number_of_measures: 4, use_symbols: true }], + [{}, { number_of_measures: 5, use_symbols: true }], + [{}, { number_of_measures: 6, use_symbols: true }], + [{}, { number_of_measures: 7, use_symbols: true }], + [{}, { number_of_measures: 8, use_symbols: true }], + [{}, { number_of_measures: 9, use_symbols: true }], + [{}, { number_of_measures: 10, use_symbols: true }], + [{}, { number_of_measures: 11, use_symbols: true }], + [{}, { number_of_measures: 11, use_symbols: false, padding_left: 20, padding_right: 20 }], + [{}, { number_of_measures: 11, use_symbols: true, symbol_spacing: 5 }], + [{}, { number_of_measures: 11, use_symbols: false, line: 3, number_line: 2 }], + [{}, { number_of_measures: 11, use_symbols: true, line: 3, number_line: 2 }], + [line_spacing_15px, { number_of_measures: 12 }], + [line_spacing_15px, { number_of_measures: 9, use_symbols: true }], + [line_spacing_15px, { number_of_measures: 12, spacing_between_lines_px: 15, number_glyph_point: 40 * 1.5 }], + [ + line_spacing_15px, + { + number_of_measures: 9, + spacing_between_lines_px: 15, + use_symbols: true, + number_glyph_point: 40 * 1.5, + }, + ], + [ + line_spacing_15px, + { + number_of_measures: 9, + spacing_between_lines_px: 15, + use_symbols: true, + number_glyph_point: 40 * 1.5, + semibreve_rest_glyph_scale: _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.NOTATION_FONT_SCALE * 1.5, + }, + ], + ]; + const staveWidth = 100; + let x = 0; + let y = 0; + const mmRests = params.map((param) => { + if (x + staveWidth * 2 > width) { + x = 0; + y += 80; + } + const staveParams = param[0]; + const mmRestParams = param[1]; + staveParams.x = x; + staveParams.y = y; + staveParams.width = staveWidth; + x += staveWidth; + const stave = f.Stave(staveParams); + return f.MultiMeasureRest(mmRestParams).setStave(stave); + }); + f.draw(); + const xs = mmRests[0].getXs(); + // eslint-disable-next-line + const strY = mmRests[0].getStave().getYForLine(-0.5); + const str = 'TACET'; + const context = f.getContext(); + context.save(); + context.setFont(_src_font__WEBPACK_IMPORTED_MODULE_2__.Font.SERIF, 16, 'bold'); + const metrics = context.measureText(str); + context.fillText(str, xs.left + (xs.right - xs.left) * 0.5 - metrics.width * 0.5, strY); + context.restore(); + options.assert.ok(true, 'Simple Test'); +} +function staveWithModifiers(options) { + const width = 910; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, width, 200); + let x = 0; + let y = 0; + // eslint-disable-next-line + const params = [ + [{ clef: 'treble', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', timeSig: '4/4', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endClef: 'bass', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endKeySig: 'F', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }], + [ + { clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, + { number_of_measures: 5, use_symbols: true }, + ], + ]; + params.forEach((param) => { + const staveOptions = param[0]; + // eslint-disable-next-line + const staveParams = staveOptions.params; + const mmrestParams = param[1]; + if (x + staveParams.width > width) { + x = 0; + y += 80; + } + staveParams.x = x; + x += staveParams.width; + staveParams.y = y; + const stave = f.Stave(staveParams); + if (staveOptions.clef) { + stave.addClef(staveOptions.clef); + } + if (staveOptions.timeSig) { + stave.addTimeSignature(staveOptions.timeSig); + } + if (staveOptions.keySig) { + stave.addKeySignature(staveOptions.keySig); + } + if (staveOptions.endClef) { + stave.addEndClef(staveOptions.endClef); + } + if (staveOptions.endKeySig) { + stave.setEndKeySignature(staveOptions.endKeySig); + } + if (staveOptions.endTimeSig) { + stave.setEndTimeSignature(staveOptions.endTimeSig); + } + return f.MultiMeasureRest(mmrestParams).setStave(stave); + }); + f.draw(); + options.assert.ok(true, 'Stave with modifiers Test'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(MultiMeasureRestTests); + + + +/***/ }), + +/***/ "./tests/music_tests.ts": +/*!******************************!*\ + !*** ./tests/music_tests.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MusicTests": () => (/* binding */ MusicTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_keymanager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/keymanager */ "./src/keymanager.ts"); +/* harmony import */ var _src_music__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/music */ "./src/music.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Music Tests + + + +const MusicTests = { + Start() { + QUnit.module('MusicTests'); + QUnit.test('Valid Notes', validNotes); + QUnit.test('Valid Keys', validKeys); + QUnit.test('Note Values', noteValue); + QUnit.test('Interval Values', intervalValue); + QUnit.test('Relative Notes', relativeNotes); + QUnit.test('Relative Note Names', relativeNoteNames); + QUnit.test('Canonical Notes', canonicalNotes); + QUnit.test('Canonical Intervals', canonicalIntervals); + QUnit.test('Scale Tones', scaleTones); + QUnit.test('Scale Intervals', scaleIntervals); + }, +}; +function validNotes(assert) { + assert.expect(10); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + let parts = music.getNoteParts('c'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, null); + // getNoteParts() converts its argument to lowercase. + parts = music.getNoteParts('C'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, null); + parts = music.getNoteParts('c#'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, '#'); + parts = music.getNoteParts('c##'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, '##'); + assert.throws(() => music.getNoteParts('r'), /BadArguments/, 'Invalid note: r'); + assert.throws(() => music.getNoteParts(''), /BadArguments/, "Invalid note: ''"); +} +function validKeys(assert) { + assert.expect(18); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + let parts = music.getKeyParts('c'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, null); + assert.equal(parts.type, 'M'); + parts = music.getKeyParts('d#'); + assert.equal(parts.root, 'd'); + assert.equal(parts.accidental, '#'); + assert.equal(parts.type, 'M'); + parts = music.getKeyParts('fbm'); + assert.equal(parts.root, 'f'); + assert.equal(parts.accidental, 'b'); + assert.equal(parts.type, 'm'); + parts = music.getKeyParts('c#mel'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, '#'); + assert.equal(parts.type, 'mel'); + parts = music.getKeyParts('g#harm'); + assert.equal(parts.root, 'g'); + assert.equal(parts.accidental, '#'); + assert.equal(parts.type, 'harm'); + assert.throws(() => music.getKeyParts('r'), /BadArguments/, 'Invalid key: r'); + assert.throws(() => music.getKeyParts(''), /BadArguments/, `Invalid key: ''`); + assert.throws(() => music.getKeyParts('#m'), /BadArguments/, 'Invalid key: #m'); +} +function noteValue(assert) { + assert.expect(3); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + let note = music.getNoteValue('c'); + assert.equal(note, 0); + assert.throws(() => music.getNoteValue('r'), /BadArguments/, 'Invalid note name'); + note = music.getNoteValue('f#'); + assert.equal(note, 6); +} +function intervalValue(assert) { + assert.expect(2); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + const value = music.getIntervalValue('b2'); + assert.equal(value, 1); + assert.throws(() => music.getIntervalValue('7'), /BadArguments/, 'Invalid interval name'); +} +function relativeNotes(assert) { + assert.expect(8); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + let value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b5')); + assert.equal(value, 6); + assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('bc'), music.getIntervalValue('b2')), /BadArguments/, 'Invalid note'); + assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p3')), /BadArguments/, 'Invalid interval'); + // Direction + value = music.getRelativeNoteValue(music.getNoteValue('d'), music.getIntervalValue('2'), -1); + assert.equal(value, 0); + assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p4'), 0), /BadArguments/, 'Invalid direction: 0'); + // Rollover + value = music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('b5')); + assert.equal(value, 5); + // Reverse rollover + value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b2'), -1); + assert.equal(value, 11); + // Practical tests + value = music.getRelativeNoteValue(music.getNoteValue('g'), music.getIntervalValue('p5')); + assert.equal(value, 2); +} +function relativeNoteNames(assert) { + assert.expect(9); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + assert.equal(music.getRelativeNoteName('b', music.getNoteValue('c#')), 'b##'); + assert.equal(music.getRelativeNoteName('c', music.getNoteValue('c')), 'c'); + assert.equal(music.getRelativeNoteName('c', music.getNoteValue('db')), 'c#'); + assert.equal(music.getRelativeNoteName('c', music.getNoteValue('b')), 'cb'); + assert.equal(music.getRelativeNoteName('c#', music.getNoteValue('db')), 'c#'); + assert.equal(music.getRelativeNoteName('e', music.getNoteValue('f#')), 'e##'); + assert.equal(music.getRelativeNoteName('e', music.getNoteValue('d#')), 'eb'); + assert.equal(music.getRelativeNoteName('e', music.getNoteValue('fb')), 'e'); + assert.throws(() => music.getRelativeNoteName('e', music.getNoteValue('g#')), /BadArguments/, 'Too far away. Notes not related.'); +} +function canonicalNotes(assert) { + assert.expect(3); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + assert.equal(music.getCanonicalNoteName(0), 'c'); + assert.equal(music.getCanonicalNoteName(2), 'd'); + assert.throws(() => music.getCanonicalNoteName(-1), /BadArguments/, 'Invalid note value'); +} +function canonicalIntervals(assert) { + assert.expect(3); + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + assert.equal(music.getCanonicalIntervalName(0), 'unison'); + assert.equal(music.getCanonicalIntervalName(2), 'M2'); + assert.throws(() => music.getCanonicalIntervalName(-1), /BadArguments/, 'Invalid interval value'); +} +function scaleTones(assert) { + assert.expect(24); + // C Major + const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + const manager = new _src_keymanager__WEBPACK_IMPORTED_MODULE_1__.KeyManager('CM'); + const c_major = music.getScaleTones(music.getNoteValue('c'), _src_music__WEBPACK_IMPORTED_MODULE_2__.Music.scales.major); + let values = ['c', 'd', 'e', 'f', 'g', 'a', 'b']; + assert.equal(c_major.length, 7); + for (let i = 0; i < c_major.length; ++i) { + assert.equal(music.getCanonicalNoteName(c_major[i]), values[i]); + } + // Dorian + const c_dorian = music.getScaleTones(music.getNoteValue('c'), _src_music__WEBPACK_IMPORTED_MODULE_2__.Music.scales.dorian); + values = ['c', 'd', 'eb', 'f', 'g', 'a', 'bb']; + let note = null; + assert.equal(c_dorian.length, 7); + for (let i = 0; i < c_dorian.length; ++i) { + note = music.getCanonicalNoteName(c_dorian[i]); + assert.equal(manager.selectNote(note).note, values[i]); + } + // Mixolydian + const c_mixolydian = music.getScaleTones(music.getNoteValue('c'), _src_music__WEBPACK_IMPORTED_MODULE_2__.Music.scales.mixolydian); + values = ['c', 'd', 'e', 'f', 'g', 'a', 'bb']; + assert.equal(c_mixolydian.length, 7); + for (let i = 0; i < c_mixolydian.length; ++i) { + note = music.getCanonicalNoteName(c_mixolydian[i]); + assert.equal(manager.selectNote(note).note, values[i]); + } +} +function scaleIntervals(assert) { + assert.expect(6); + const m = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('d'))), 'M2'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('g'), m.getNoteValue('c'))), 'p4'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('c'))), 'unison'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('f'), m.getNoteValue('cb'))), 'dim5'); + // Forwards and backwards + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), 1)), 'b7'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), -1)), 'M2'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(MusicTests); + + + +/***/ }), + +/***/ "./tests/notehead_tests.ts": +/*!*********************************!*\ + !*** ./tests/notehead_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NoteHeadTests": () => (/* binding */ NoteHeadTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_notehead__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/notehead */ "./src/notehead.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// NoteHead Tests +// TODO: There is a bug in RenderContext.scale(). The CanvasContext works as expected. +// Each time you call scale(sx, sy), it multiplies the sx and sy by the currently stored scale. +// The SVGContext operates differently. It just sets the sx and sy as the new scale, instead of multiplying it. +// See: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/scale + + + + + + + + +const NoteHeadTests = { + Start() { + QUnit.module('NoteHead'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Basic', basic); + run('Various Note Heads 1', variousNoteHeads); + run('Various Note Heads 2', variousNoteHeads2); + run('Various Heads', variousHeads); + run('Drum Chord Heads', drumChordHeads); + run('Bounding Boxes', basicBoundingBoxes); + }, +}; +function setContextStyle(ctx) { + // The final scale should be 1.8. + ctx.scale(0.9, 0.9); + ctx.scale(2.0, 2.0); + //ctx.scale(1.8, 1.8); + ctx.font = '10pt Arial'; +} +function basic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 450, 250); + setContextStyle(ctx); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 0, 250).addClef('treble'); + stave.setContext(ctx).draw(); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4).setStrict(false); + const note_head1 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '4', line: 3 }); + const note_head2 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '1', line: 2.5 }); + const note_head3 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '2', line: 0 }); + voice.addTickables([note_head1, note_head2, note_head3]); + formatter.joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok('Basic NoteHead test'); +} +/** + * Used by the next two test cases to draw a note. + */ +function showNote(noteStruct, stave, ctx, x) { + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote(noteStruct).setStave(stave); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_6__.TickContext().addTickable(note).preFormat().setX(x); + note.setContext(ctx).draw(); + return note; +} +function variousHeads(options, contextBuilder) { + const notes = [ + { keys: ['g/5/d0'], duration: '4' }, + { keys: ['g/5/d1'], duration: '4' }, + { keys: ['g/5/d2'], duration: '4' }, + { keys: ['g/5/d3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/t0'], duration: '1' }, + { keys: ['g/5/t1'], duration: '4' }, + { keys: ['g/5/t2'], duration: '4' }, + { keys: ['g/5/t3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/x0'], duration: '1' }, + { keys: ['g/5/x1'], duration: '4' }, + { keys: ['g/5/x2'], duration: '4' }, + { keys: ['g/5/x3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/s1'], duration: '4' }, + { keys: ['g/5/s2'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/r1'], duration: '4' }, + { keys: ['g/5/r2'], duration: '4' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + // Draw two staves, one with up-stems and one with down-stems. + for (let staveNum = 0; staveNum < 2; ++staveNum) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10 + staveNum * 120, notes.length * 25 + 75) + .addClef('percussion') + .setContext(ctx) + .draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = staveNum === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function variousNoteHeads(options, contextBuilder) { + const notes = [ + { keys: ['g/5/d'], duration: '1/2' }, + { keys: ['g/5/d'], duration: '1' }, + { keys: ['g/5/d'], duration: '2' }, + { keys: ['g/5/d'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/x'], duration: '1/2' }, + { keys: ['g/5/x'], duration: '1' }, + { keys: ['g/5/x'], duration: '2' }, + { keys: ['g/5/x'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/cx'], duration: '1/2' }, + { keys: ['g/5/cx'], duration: '1' }, + { keys: ['g/5/cx'], duration: '2' }, + { keys: ['g/5/cx'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/tu'], duration: '1/2' }, + { keys: ['g/5/tu'], duration: '1' }, + { keys: ['g/5/tu'], duration: '2' }, + { keys: ['g/5/tu'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/td'], duration: '1/2' }, + { keys: ['g/5/td'], duration: '1' }, + { keys: ['g/5/td'], duration: '2' }, + { keys: ['g/5/td'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/sf'], duration: '1/2' }, + { keys: ['g/5/sf'], duration: '1' }, + { keys: ['g/5/sf'], duration: '2' }, + { keys: ['g/5/sf'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/sb'], duration: '1/2' }, + { keys: ['g/5/sb'], duration: '1' }, + { keys: ['g/5/sb'], duration: '2' }, + { keys: ['g/5/sb'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/ci'], duration: '1/2' }, + { keys: ['g/5/ci'], duration: '1' }, + { keys: ['g/5/ci'], duration: '2' }, + { keys: ['g/5/ci'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/sq'], duration: '1/2' }, + { keys: ['g/5/sq'], duration: '1' }, + { keys: ['g/5/sq'], duration: '2' }, + { keys: ['g/5/sq'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + // Draw two staves, one with up-stems and one with down-stems. + for (let staveNum = 0; staveNum < 2; ++staveNum) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10 + staveNum * 120, notes.length * 25 + 75) + .addClef('percussion') + .setContext(ctx) + .draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = staveNum === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function variousNoteHeads2(options, contextBuilder) { + const notes = [ + { keys: ['g/5/do'], duration: '4', auto_stem: true }, + { keys: ['g/5/re'], duration: '4', auto_stem: true }, + { keys: ['g/5/mi'], duration: '4', auto_stem: true }, + { keys: ['g/5/fa'], duration: '4', auto_stem: true }, + { keys: ['e/4/faup'], duration: '4', auto_stem: true }, + { keys: ['g/5/so'], duration: '4', auto_stem: true }, + { keys: ['g/5/la'], duration: '4', auto_stem: true }, + { keys: ['g/5/ti'], duration: '4', auto_stem: true }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drumChordHeads(options, contextBuilder) { + const notes = [ + { keys: ['a/4/d0', 'g/5/x3'], duration: '4' }, + { keys: ['a/4/x3', 'g/5/d0'], duration: '4' }, + { keys: ['a/4/d1', 'g/5/x2'], duration: '4' }, + { keys: ['a/4/x2', 'g/5/d1'], duration: '4' }, + { keys: ['a/4/d2', 'g/5/x1'], duration: '4' }, + { keys: ['a/4/x1', 'g/5/d2'], duration: '4' }, + { keys: ['a/4/d3', 'g/5/x0'], duration: '4' }, + { keys: ['a/4/x0', 'g/5/d3'], duration: '4' }, + { keys: ['a/4', 'g/5/d0'], duration: '4' }, + { keys: ['a/4/x3', 'g/5'], duration: '4' }, + { keys: ['a/4/t0', 'g/5/s1'], duration: '4' }, + { keys: ['a/4/s1', 'g/5/t0'], duration: '4' }, + { keys: ['a/4/t1', 'g/5/s2'], duration: '4' }, + { keys: ['a/4/s2', 'g/5/t1'], duration: '4' }, + { keys: ['a/4/t2', 'g/5/r1'], duration: '4' }, + { keys: ['a/4/r1', 'g/5/t2'], duration: '4' }, + { keys: ['a/4/t3', 'g/5/r2'], duration: '4' }, + { keys: ['a/4/r2', 'g/5/t3'], duration: '4' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + // Draw two staves, one with up-stems and one with down-stems. + for (let h = 0; h < 2; ++h) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = h === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function basicBoundingBoxes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 450, 250); + setContextStyle(ctx); + // 250 is 450/1.8 + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 0, 250).addClef('treble'); + stave.setContext(ctx).draw(); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4).setStrict(false); + const nh1 = new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['b/4'], duration: '4' }); + const nh2 = new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['a/4'], duration: '2' }); + const nh3 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '1', line: 0 }); + voice.addTickables([nh1, nh2, nh3]); + formatter.joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + for (const bb of [nh1.noteHeads[0].getBoundingBox(), nh2.noteHeads[0].getBoundingBox(), nh3.getBoundingBox()]) { + ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); + } + ctx.stroke(); + options.assert.ok('NoteHead Bounding Boxes'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(NoteHeadTests); + + + +/***/ }), + +/***/ "./tests/notesubgroup_tests.ts": +/*!*************************************!*\ + !*** ./tests/notesubgroup_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NoteSubGroupTests": () => (/* binding */ NoteSubGroupTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_barnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/barnote */ "./src/barnote.ts"); +/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Author: Taehoon Moon 2016 +// +// NoteSubGroup Tests + + + + +const NoteSubGroupTests = { + Start() { + QUnit.module('NoteSubGroup'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Basic - ClefNote, TimeSigNote and BarNote', basic); + run('Multi Voice', multiVoiceSingleDraw); + run('Multi Voice Multiple Draws', multiVoiceDoubleDraw); + run('Multi Staff', multiStaff); + }, +}; +// Return three helper functions for creating StaveNotes, and adding Accidental & NoteSubGroup to those StaveNotes. +function createShortcuts(f) { + return { + createStaveNote: (noteStruct) => f.StaveNote(noteStruct), + addAccidental: (note, accid) => note.addModifier(f.Accidental({ type: accid }), 0), + addSubGroup: (note, subNotes) => note.addModifier(f.NoteSubGroup({ notes: subNotes }), 0), + }; +} +function basic(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 200); + const ctx = f.getContext(); + const stave = f.Stave({ width: 600 }).addClef('treble'); + const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); + const notes = [ + { keys: ['f/5'], stem_direction: -1, duration: '4' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['g/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['a/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['c/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, + { keys: ['c/3'], stem_direction: +1, duration: '4', clef: 'tenor' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, + ].map(createStaveNote); + addAccidental(notes[1], '#'); + addAccidental(notes[2], 'n'); + addSubGroup(notes[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); + addSubGroup(notes[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } })]); + addSubGroup(notes[4], [f.ClefNote({ type: 'tenor', options: { size: 'small' } }), new _src_barnote__WEBPACK_IMPORTED_MODULE_1__.BarNote()]); + addSubGroup(notes[5], [f.TimeSigNote({ time: '6/8' })]); + addSubGroup(notes[6], [new _src_barnote__WEBPACK_IMPORTED_MODULE_1__.BarNote(_src_stavebarline__WEBPACK_IMPORTED_MODULE_3__.BarlineType.REPEAT_BEGIN)]); + addAccidental(notes[4], 'b'); + addAccidental(notes[6], 'bb'); + const voice = f.Voice().setStrict(false).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + notes.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_2__.Note.plotMetrics(ctx, note, 150)); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 620, 120); + options.assert.ok(true, 'all pass'); +} +function multiVoiceSingleDraw(options) { + multiVoiceHelper(options, 1); +} +/** + * Call Factory.draw() twice. It should look identical to the multiVoice test case above. + */ +function multiVoiceDoubleDraw(options) { + multiVoiceHelper(options, 2); +} +/** + * Used by multiVoiceSingleDraw and multiVoiceDoubleDraw above. + */ +function multiVoiceHelper(options, numDraws) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 200); + const ctx = f.getContext(); + const stave = f.Stave().addClef('treble'); + const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); + const notes1 = [ + { keys: ['f/5'], stem_direction: 1, duration: '4' }, + { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + const notes2 = [ + { keys: ['c/4'], stem_direction: -1, duration: '4' }, + { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + addAccidental(notes1[1], '#'); + addSubGroup(notes1[1], [ + f.ClefNote({ type: 'bass', options: { size: 'small' } }), + new _src_barnote__WEBPACK_IMPORTED_MODULE_1__.BarNote(_src_stavebarline__WEBPACK_IMPORTED_MODULE_3__.BarlineType.REPEAT_BEGIN), + f.TimeSigNote({ time: '3/4' }), + ]); + addSubGroup(notes2[2], [ + f.ClefNote({ type: 'alto', options: { size: 'small' } }), + f.TimeSigNote({ time: '9/8' }), + new _src_barnote__WEBPACK_IMPORTED_MODULE_1__.BarNote(_src_stavebarline__WEBPACK_IMPORTED_MODULE_3__.BarlineType.DOUBLE), + ]); + addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); + addAccidental(notes1[2], 'b'); + addAccidental(notes2[3], '#'); + const voices = [f.Voice().addTickables(notes1), f.Voice().addTickables(notes2)]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + for (let i = 0; i < numDraws; i++) { + f.draw(); + } + notes1.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_2__.Note.plotMetrics(ctx, note, 150)); + options.assert.ok(true, 'all pass'); +} +function multiStaff(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 400); + const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); + const stave1 = f.Stave({ x: 15, y: 30, width: 500 }).setClef('treble'); + const notes1 = [ + { keys: ['f/5'], stem_direction: 1, duration: '4' }, + { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + const notes2 = [ + { keys: ['c/4'], stem_direction: -1, duration: '4' }, + { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + const stave2 = f.Stave({ x: 15, y: 150, width: 500 }).setClef('bass'); + const notes3 = [ + { keys: ['e/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['g/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['d/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['f/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['c/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['g/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['d/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['f/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + ].map(createStaveNote); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'brace' }); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleLeft' }); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleRight' }); + f.Beam({ notes: notes3.slice(1, 4) }); + f.Beam({ notes: notes3.slice(5) }); + addAccidental(notes1[1], '#'); + addSubGroup(notes1[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } }), f.TimeSigNote({ time: '3/4' })]); + addSubGroup(notes2[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } }), f.TimeSigNote({ time: '9/8' })]); + addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); + addSubGroup(notes3[1], [f.ClefNote({ type: 'treble', options: { size: 'small' } })]); + addSubGroup(notes3[5], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); + addAccidental(notes3[0], '#'); + addAccidental(notes3[3], 'b'); + addAccidental(notes3[5], '#'); + addAccidental(notes1[2], 'b'); + addAccidental(notes2[3], '#'); + const voice1 = f.Voice().addTickables(notes1); + const voice2 = f.Voice().addTickables(notes2); + const voice3 = f.Voice().addTickables(notes3); + f.Formatter().joinVoices([voice1, voice2]).joinVoices([voice3]).formatToStave([voice1, voice2, voice3], stave1); + f.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(NoteSubGroupTests); + + + +/***/ }), + +/***/ "./tests/offscreencanvas_tests.ts": +/*!****************************************!*\ + !*** ./tests/offscreencanvas_tests.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "OffscreenCanvasTests": () => (/* binding */ OffscreenCanvasTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_canvascontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021. +// MIT License +// +// OffscreenCanvas Tests + + + + + + + +const OffscreenCanvasTests = { + Start() { + // At the time of writing, OffscreenCanvas is still an experimental technology. + if ((0,_src_util__WEBPACK_IMPORTED_MODULE_6__.globalObject)().OffscreenCanvas === undefined) { + return; + } + QUnit.module('OffscreenCanvas'); + QUnit.test('Simple Test', simpleTest); + }, +}; +function simpleTest(assert) { + // Create a CanvasContext from an OffscreenCanvas. + // eslint-disable-next-line + // @ts-ignore + const offscreenCanvas = new OffscreenCanvas(550, 200); + // eslint-disable-next-line + // @ts-ignore + const offscreenCtx = offscreenCanvas.getContext('2d'); + if (offscreenCtx == null) { + throw new Error("Couldn't create offscreen context"); + } + const ctx = new _src_canvascontext__WEBPACK_IMPORTED_MODULE_1__.CanvasContext(offscreenCtx); + // Render to the OffscreenCavans. + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 50, 200); + stave.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave.addClef('treble').setContext(ctx).draw(); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['c/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['d/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['b/4'], duration: 'qr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.FormatAndDraw(ctx, stave, notes); + // Copy the contents of the OffscreenCanvas to an HTMLCanvasElement. + const imgBmp = offscreenCanvas.transferToImageBitmap(); + const canvas = document.createElement('canvas'); + canvas.width = offscreenCanvas.width; + canvas.height = offscreenCanvas.height; + const canvasCtx = canvas.getContext('2d'); + if (canvasCtx == null) { + throw new Error("Couldn't create canvas context"); + } + canvasCtx.drawImage(imgBmp, 0, 0); + document.body.appendChild(canvas); + assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(OffscreenCanvasTests); + + + +/***/ }), + +/***/ "./tests/ornament_tests.ts": +/*!*********************************!*\ + !*** ./tests/ornament_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "OrnamentTests": () => (/* binding */ OrnamentTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); +/* harmony import */ var _src_ornament__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/ornament */ "./src/ornament.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Author: Cyril Silverman +// +// Ornament Tests +// TODO: Formatting for Jazz Ornaments is incorrect. The last note + ornament bleeds into the next measure. + + + + + + + + + + +const OrnamentTests = { + Start() { + QUnit.module('Ornament'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Ornaments', drawOrnaments); + run('Ornaments Vertically Shifted', drawOrnamentsDisplaced); + run('Ornaments - Delayed turns', drawOrnamentsDelayed); + run('Ornaments - Delayed turns, Multiple Draws', drawOrnamentsDelayedMultipleDraws); + run('Stacked', drawOrnamentsStacked); + run('With Upper/Lower Accidentals', drawOrnamentsWithAccidentals); + run('Jazz Ornaments', jazzOrnaments); + }, +}; +function drawOrnaments(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 750, 195); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 30, 700); + stave.setContext(ctx).draw(); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent'), 0); + notes[1].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent_inverted'), 0); + notes[2].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn'), 0); + notes[3].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn_inverted'), 0); + notes[4].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('tr'), 0); + notes[5].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('upprall'), 0); + notes[6].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('downprall'), 0); + notes[7].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('prallup'), 0); + notes[8].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('pralldown'), 0); + notes[9].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('upmordent'), 0); + notes[10].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('downmordent'), 0); + notes[11].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('lineprall'), 0); + notes[12].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('prallprall'), 0); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); +} +function drawOrnamentsDisplaced(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 750, 195); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 30, 700); + stave.setContext(ctx).draw(); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent'), 0); + notes[1].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent_inverted'), 0); + notes[1].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent_inverted'), 0); + notes[2].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn'), 0); + notes[3].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn_inverted'), 0); + notes[4].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('tr'), 0); + notes[5].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('upprall'), 0); + notes[6].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('downprall'), 0); + notes[7].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('prallup'), 0); + notes[8].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('pralldown'), 0); + notes[9].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('upmordent'), 0); + notes[10].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('downmordent'), 0); + notes[11].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('lineprall'), 0); + notes[12].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('prallprall'), 0); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); +} +/** + * Helper function for the next two tests: drawOrnamentsDelayed and drawOrnamentsDelayedMultipleDraws. + * setDelayed(true) shifts the turn symbol to the right (after its note). + */ +const addDelayedTurns = (f) => { + // Get the rendering context + const context = f.getContext(); + const stave = f.Stave({ x: 10, y: 30, width: 500 }); + stave.setContext(context).draw(); + const notes = [ + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(f.Ornament('turn', { delayed: true }), 0); + notes[1].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0); + notes[2].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0); + notes[3].addModifier(f.Ornament('turn', { delayed: true }), 0); + return { context, stave, notes }; +}; +function drawOrnamentsDelayed(options) { + options.assert.expect(0); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 195); + const { context, stave, notes } = addDelayedTurns(f); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); +} +function drawOrnamentsDelayedMultipleDraws(options) { + options.assert.expect(0); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 195); + const { context, stave, notes } = addDelayedTurns(f); + // We can FormatAndDraw() two times, and it looks fine. + // However, if you inspect the SVG element, you will see duplicate paths. + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); +} +function drawOrnamentsStacked(options) { + options.assert.expect(0); + // Get the rendering context + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 195); + const ctx = f.getContext(); + const stave = f.Stave({ x: 10, y: 30, width: 500 }); + stave.setContext(ctx).draw(); + const notes = [ + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(f.Ornament('mordent'), 0); + notes[1].addModifier(f.Ornament('turn_inverted'), 0); + notes[2].addModifier(f.Ornament('turn'), 0); + notes[3].addModifier(f.Ornament('turn_inverted'), 0); + notes[0].addModifier(f.Ornament('turn'), 0); + notes[1].addModifier(f.Ornament('prallup'), 0); + notes[2].addModifier(f.Ornament('upmordent'), 0); + notes[3].addModifier(f.Ornament('lineprall'), 0); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); +} +function drawOrnamentsWithAccidentals(options) { + options.assert.expect(0); + // Get the rendering context + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 650, 250); + const ctx = f.getContext(); + const stave = f.Stave({ x: 10, y: 60, width: 600 }); + stave.setContext(ctx).draw(); + const notes = [ + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(f.Ornament('mordent', { lowerAccidental: '#', upperAccidental: '#' }), 0); + notes[1].addModifier(f.Ornament('turn_inverted', { lowerAccidental: 'b', upperAccidental: 'b' }), 0); + notes[2].addModifier(f.Ornament('turn', { upperAccidental: '##', lowerAccidental: '##' }), 0); + notes[3].addModifier(f.Ornament('mordent_inverted', { lowerAccidental: 'db', upperAccidental: 'db' }), 0); + notes[4].addModifier(f.Ornament('turn_inverted', { upperAccidental: '++', lowerAccidental: '++' }), 0); + notes[5].addModifier(f.Ornament('tr', { upperAccidental: 'n', lowerAccidental: 'n' }), 0); + notes[6].addModifier(f.Ornament('prallup', { upperAccidental: 'd', lowerAccidental: 'd' }), 0); + notes[7].addModifier(f.Ornament('lineprall', { upperAccidental: 'db', lowerAccidental: 'db' }), 0); + notes[8].addModifier(f.Ornament('upmordent', { upperAccidental: 'bbs', lowerAccidental: 'bbs' }), 0); + notes[9].addModifier(f.Ornament('prallprall', { upperAccidental: 'bb', lowerAccidental: 'bb' }), 0); + notes[10].addModifier(f.Ornament('turn_inverted', { upperAccidental: '+', lowerAccidental: '+' }), 0); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); +} +function jazzOrnaments(options) { + const clefWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_5__.Glyph.getWidth('gClef', 38); // widest clef + // Helper function. + function draw(modifiers, keys, x, width, y, stemDirection) { + // Helper function to create a StaveNote. + const note = (keys, duration, modifier, stemDirection) => { + const n = new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys, duration, stem_direction: stemDirection }) + .addModifier(modifier, 0) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0); + const dot = duration.indexOf('d') >= 0; + if (dot) { + _src_dot__WEBPACK_IMPORTED_MODULE_3__.Dot.buildAndAttach([n], { all: true }); + } + return n; + }; + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(x, y, width).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(keys, '4d', modifiers[0], stemDirection), + note(keys, '8', modifiers[1], stemDirection), + note(keys, '4d', modifiers[2], stemDirection), + note(keys, '8', modifiers[3], stemDirection), + ]; + if (modifiers.length > 4) { + notes[3].addModifier(modifiers[4], 0); + } + _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam.generateBeams(notes); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice({ + num_beats: 4, + beat_value: 4, + }).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); + voice.addTickables(notes); + const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]); + formatter.format([voice], width - _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding - clefWidth); + stave.setContext(ctx).draw(); + voice.draw(ctx, stave); + } + options.assert.expect(0); + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 950, 400); + const ctx = f.getContext(); + ctx.scale(1, 1); + const xStart = 10; + const width = 300; + const yStart = 50; + const staffHeight = 70; + let curX = xStart; + let curY = yStart; + let mods = [ + // measure 1 + f.Ornament('scoop'), + f.Ornament('doit'), + f.Ornament('fall'), + f.Ornament('doitLong'), + ]; + draw(mods, ['a/5'], curX, width, curY, -1); + curX += width; + mods = [ + // measure 2 + f.Ornament('fallLong'), + f.Ornament('bend'), + f.Ornament('plungerClosed'), + f.Ornament('plungerOpen'), + f.Ornament('bend'), + ]; + draw(mods, ['a/5'], curX, width, curY, -1); + curX += width; + mods = [ + // measure 3 + f.Ornament('flip'), + f.Ornament('jazzTurn'), + f.Ornament('smear'), + f.Ornament('doit'), + ]; + draw(mods, ['a/5'], curX, width, curY, 1); + // second line + curX = xStart; + curY += staffHeight; + mods = [ + // measure 4 + f.Ornament('scoop'), + f.Ornament('doit'), + f.Ornament('fall'), + f.Ornament('doitLong'), + ]; + draw(mods, ['e/5'], curX, width, curY); + curX += width; + mods = [ + // measure 5 + f.Ornament('fallLong'), + f.Ornament('bend'), + f.Ornament('plungerClosed'), + f.Ornament('plungerOpen'), + f.Ornament('bend'), + ]; + draw(mods, ['e/5'], curX, width, curY); + curX += width; + mods = [ + // measure 6 + f.Ornament('flip'), + f.Ornament('jazzTurn'), + f.Ornament('smear'), + f.Ornament('doit'), + ]; + draw(mods, ['e/5'], curX, width, curY); + // third line + curX = xStart; + curY += staffHeight; + mods = [ + // measure 7 + f.Ornament('scoop'), + f.Ornament('doit'), + f.Ornament('fall'), + f.Ornament('doitLong'), + ]; + draw(mods, ['e/4'], curX, width, curY); + curX += width; + mods = [ + // measure 8 + f.Ornament('fallLong'), + f.Ornament('bend'), + f.Ornament('plungerClosed'), + f.Ornament('plungerOpen'), + f.Ornament('bend'), + ]; + draw(mods, ['e/4'], curX, width, curY); + curX += width; + mods = [ + // measure 9 + f.Ornament('flip'), + f.Ornament('jazzTurn'), + f.Ornament('smear'), + f.Ornament('doit'), + ]; + draw(mods, ['e/4'], curX, width, curY); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(OrnamentTests); + + + +/***/ }), + +/***/ "./tests/parser_tests.ts": +/*!*******************************!*\ + !*** ./tests/parser_tests.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ParserTests": () => (/* binding */ ParserTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/parser */ "./src/parser.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Parser Tests + + +const ParserTests = { + Start() { + QUnit.module('Parser'); + QUnit.test('Basic', basic); + QUnit.test('Advanced', advanced); + QUnit.test('Mixed', mixed); + QUnit.test('Micro Score', microscore); + }, +}; +/** + * Grammar used in the first three test cases: basic, advanced, mixed. + */ +class TestGrammar { + // The begin() function is the only requirement when implementing the Grammar interface. + begin() { + return () => ({ expect: this.expect }); + } + BIGORLITTLE() { + return { expect: [this.BIGLINE, this.LITTLELINE], or: true }; + } + BIGLINE() { + return { expect: [this.LBRACE, this.WORD, this.WORDS, this.MAYBEEXCLAIM, this.RBRACE] }; + } + LITTLELINE() { + return { expect: [this.WORD, this.WORDS] }; + } + WORDS() { + return { expect: [this.COMMA, this.WORD], zeroOrMore: true }; + } + MAYBEEXCLAIM() { + return { expect: [this.EXCLAIM], maybe: true }; + } + LBRACE() { + return { token: '[{]' }; + } + RBRACE() { + return { token: '[}]' }; + } + WORD() { + return { token: '[a-zA-Z]+' }; + } + COMMA() { + return { token: '[,]' }; + } + EXCLAIM() { + return { token: '[!]' }; + } + EOL() { + return { token: '$' }; + } +} +/** + * Grammar used in the microscore test case. + * It represents a series of piano key numbers (Middle C == 40) separated by whitespace. + * C Major Scale => 40 42 44 45 47 49 51 52 + * A chord is 2 or more piano key numbers surrounded by BRACKETS and separated by PERIODS + * C Major == [40.44.47] + * C-major F-major G-major A-minor chord progression => [40.44.47] [45.49.52] [47.51.54] [49.52.56] + */ +class MicroScoreGrammar { + constructor() { + this.ITEM = () => ({ expect: [this.PIANO_KEY_NUMBER, this.CHORD], or: true }); + this.MAYBE_MORE_ITEMS = () => ({ expect: [this.ITEM], zeroOrMore: true }); + this.PIANO_KEY_NUMBER = () => ({ expect: [this.NUM], oneOrMore: true }); + this.CHORD = () => ({ expect: [this.LEFT_BRACKET, this.PIANO_KEY_NUMBER, this.MORE_CHORD_PARTS, this.RIGHT_BRACKET] }); + this.MORE_CHORD_PARTS = () => ({ expect: [this.PERIOD, this.PIANO_KEY_NUMBER], oneOrMore: true }); + this.NUM = () => ({ token: '\\d+' }); + this.WHITESPACE = () => ({ token: '\\s+' }); + this.PERIOD = () => ({ token: '\\.' }); + this.LEFT_BRACKET = () => ({ token: '\\[' }); + this.RIGHT_BRACKET = () => ({ token: '\\]' }); + this.EOL = () => ({ token: '$' }); + } + begin() { + return () => ({ expect: [this.ITEM, this.MAYBE_MORE_ITEMS, this.EOL] }); + } +} +/** + * Check that the result is a parse failure, and verify the error position. + */ +function fails(assert, result, expectedErrorPos, msg) { + assert.notOk(result.success, msg); + assert.equal(result.errorPos, expectedErrorPos, msg); +} +function basic(assert) { + const grammar = new TestGrammar(); + grammar.expect = [grammar.LITTLELINE, grammar.EOL]; + const parser = new _src_parser__WEBPACK_IMPORTED_MODULE_1__.Parser(grammar); + // Each of these strings will parse correctly. + const mustPass = ['first, second', 'first,second', 'first', 'first,second, third']; + mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line)); + fails(assert, parser.parse(''), 0); + fails(assert, parser.parse('first second'), 6); + fails(assert, parser.parse('first,,'), 5); + fails(assert, parser.parse('first,'), 5); + fails(assert, parser.parse(',,'), 0); +} +function advanced(assert) { + const grammar = new TestGrammar(); + grammar.expect = [grammar.BIGLINE, grammar.EOL]; + const parser = new _src_parser__WEBPACK_IMPORTED_MODULE_1__.Parser(grammar); + const mustPass = ['{first}', '{first!}', '{first,second}', '{first,second!}', '{first,second,third!}']; + mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line)); + fails(assert, parser.parse('{first,second,third,}'), 19); + fails(assert, parser.parse('first,second,third'), 0); + fails(assert, parser.parse('{first,second,third'), 19); + fails(assert, parser.parse('{!}'), 1); +} +function mixed(assert) { + const grammar = new TestGrammar(); + grammar.expect = [grammar.BIGORLITTLE, grammar.EOL]; + const parser = new _src_parser__WEBPACK_IMPORTED_MODULE_1__.Parser(grammar); + const mustPass = ['{first,second,third!}', 'first, second']; + mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line)); + fails(assert, parser.parse('first second'), 6); +} +function microscore(assert) { + const grammar = new MicroScoreGrammar(); + const parser = new _src_parser__WEBPACK_IMPORTED_MODULE_1__.Parser(grammar); + const mustPass = [ + '40 42 44 45 47 49 51 52', + '[40.44.47] [45.49.52] [47.51.54] [49.52.56]', + '40 [40.44.47] 45 47 [44.47.51]', // Mixed Notes and Chords: C4 [Cmajor] F4 G4 [Eminor] + ]; + mustPass.forEach((line) => { + var _a; + const result = parser.parse(line); + assert.equal(result.success, true, line); + assert.equal((_a = result.matches) === null || _a === void 0 ? void 0 : _a.length, 3, line); + }); + fails(assert, parser.parse('40 42 44 45 47 49 5A 52'), 19); + fails(assert, parser.parse('40.44.47] [45.49.52] [47.51.54] [49.52.56]'), 2); + fails(assert, parser.parse('40 [40] 45 47 [44.47.51]'), 3); // A chord with a single note is not allowed. +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ParserTests); + + + +/***/ }), + +/***/ "./tests/pedalmarking_tests.ts": +/*!*************************************!*\ + !*** ./tests/pedalmarking_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PedalMarkingTests": () => (/* binding */ PedalMarkingTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// PedalMarking Tests +// TODO: Fix Error => Type 'Tickable' is not assignable to type 'StaveNote'. + +const PedalMarkingTests = { + Start() { + QUnit.module('PedalMarking'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Pedal 1', simple1); + run('Simple Pedal 2', simple2); + run('Simple Pedal 3', simple3); + run('Release and Depress on Same Note 1', releaseDepress1); + run('Release and Depress on Same Note 2', releaseDepress2); + run('Custom Text 1', customTest1); + run('Custom Text 2', customTest2); + }, +}; +/** + * Every test below uses this to set up the score and two staves/voices. + */ +function createTest(makePedal) { + return (options) => { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 200); + const score = f.EasyScore(); + const stave0 = f.Stave({ width: 250 }).addClef('treble'); + const voice0 = score.voice(score.notes('b4/4, b4, b4, b4[stem="down"]', { stem: 'up' })); + f.Formatter().joinVoices([voice0]).formatToStave([voice0], stave0); + const stave1 = f.Stave({ width: 260, x: 250 }); + const voice1 = score.voice(score.notes('c4/4, c4, c4, c4', { stem: 'up' })); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + makePedal(f, voice0.getTickables(), voice1.getTickables()); + f.draw(); + options.assert.ok(true, 'Must render'); + }; +} +function withSimplePedal(style) { + return (factory, notes0, notes1) => factory.PedalMarking({ + notes: [notes0[0], notes0[2], notes0[3], notes1[3]], + options: { style }, + }); +} +function withReleaseAndDepressedPedal(style) { + return (factory, notes0, notes1) => factory.PedalMarking({ + notes: [notes0[0], notes0[3], notes0[3], notes1[1], notes1[1], notes1[3]], + options: { style }, + }); +} +const simple1 = createTest(withSimplePedal('text')); +const simple2 = createTest(withSimplePedal('bracket')); +const simple3 = createTest(withSimplePedal('mixed')); +const releaseDepress1 = createTest(withReleaseAndDepressedPedal('bracket')); +const releaseDepress2 = createTest(withReleaseAndDepressedPedal('mixed')); +const customTest1 = createTest((factory, notes0, notes1) => { + const pedal = factory.PedalMarking({ + notes: [notes0[0], notes1[3]], + options: { style: 'text' }, + }); + pedal.setCustomText('una corda', 'tre corda'); + return pedal; +}); +const customTest2 = createTest((factory, notes0, notes1) => { + const pedal = factory.PedalMarking({ + notes: [notes0[0], notes1[3]], + options: { style: 'mixed' }, + }); + pedal.setCustomText('Sost. Ped.'); + return pedal; +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(PedalMarkingTests); + + + +/***/ }), + +/***/ "./tests/percussion_tests.ts": +/*!***********************************!*\ + !*** ./tests/percussion_tests.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PercussionTests": () => (/* binding */ PercussionTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Author: Mike Corrigan 2012 +// +// Percussion Tests +// TODO: Type 'Tickable[]' is not assignable to type 'StemmableNote[]'. + + +const PercussionTests = { + Start() { + QUnit.module('Percussion'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Percussion Clef', draw); + run('Percussion Notes', drawNotes); + run('Percussion Basic0', basic0); + run('Percussion Basic1', basic1); + run('Percussion Basic2', basic2); + run('Percussion Snare0', snare0); + run('Percussion Snare1', snare1); + run('Percussion Snare2', snare2); + run('Percussion Snare3', snare3); + }, +}; +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300).addClef('percussion').setContext(ctx).draw(); + options.assert.ok(true); +} +/** + * Helper function used by the drawNotes() test case below. + */ +function showNote(struct, stave, ctx, x) { + const staveNote = new _src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote(struct).setStave(stave); + new _src_index__WEBPACK_IMPORTED_MODULE_1__.TickContext().addTickable(staveNote).preFormat().setX(x); + staveNote.setContext(ctx).draw(); + return staveNote; +} +function drawNotes(options, contextBuilder) { + const notes = [ + { keys: ['g/5/d0'], duration: '4' }, + { keys: ['g/5/d1'], duration: '4' }, + { keys: ['g/5/d2'], duration: '4' }, + { keys: ['g/5/d3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/t0'], duration: '1' }, + { keys: ['g/5/t1'], duration: '4' }, + { keys: ['g/5/t2'], duration: '4' }, + { keys: ['g/5/t3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/x0'], duration: '1' }, + { keys: ['g/5/x1'], duration: '4' }, + { keys: ['g/5/x2'], duration: '4' }, + { keys: ['g/5/x3'], duration: '4' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + // Draw two staves, one with up-stems and one with down-stems. + for (let h = 0; h < 2; ++h) { + const stave = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = h === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +/** + * Helper function for the seven test cases below. + * Adds a percussion clef (two short vertical bars, like a pause sign) to the stave. + */ +function createSingleMeasureTest(setup) { + return (options) => { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500); + const stave = f.Stave().addClef('percussion').setTimeSignature('4/4'); + setup(f); + f.Formatter().joinVoices(f.getVoices()).formatToStave(f.getVoices(), stave); + f.draw(); + options.assert.ok(true); + }; +} +const basic0 = createSingleMeasureTest((f) => { + const voice0 = f + .Voice() + .addTickables([ + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + ]); + const voice1 = f + .Voice() + .addTickables([ + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + ]); + f.Beam({ notes: voice0.getTickables() }); + f.Beam({ notes: voice1.getTickables().slice(0, 2) }); + f.Beam({ notes: voice1.getTickables().slice(3, 5) }); +}); +const basic1 = createSingleMeasureTest((f) => { + f.Voice().addTickables([ + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + ]); + f.Voice().addTickables([ + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + ]); +}); +const basic2 = createSingleMeasureTest((f) => { + const voice0 = f + .Voice() + .addTickables([ + f.StaveNote({ keys: ['a/5/x3'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5'], duration: '8' }), + f.StaveNote({ keys: ['g/4/n', 'g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + ]); + f.Beam({ notes: voice0.getTickables().slice(1, 8) }); + const notes1 = [ + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '8d', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }), + ]; + _src_index__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes1[4]], { all: true }); + const voice1 = f.Voice().addTickables(notes1); + f.Beam({ notes: voice1.getTickables().slice(0, 2) }); + f.Beam({ notes: voice1.getTickables().slice(4, 6) }); +}); +const snare0 = createSingleMeasureTest((f) => { + const font = { + family: _src_index__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 14, + weight: _src_index__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, + style: _src_index__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, + }; + f.Voice().addTickables([ + f + .StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }) + .addModifier(f.Articulation({ type: 'a>' }), 0) + .addModifier(f.Annotation({ text: 'L', font }), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'R', font }), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0), + ]); +}); +const snare1 = createSingleMeasureTest((f) => { + f.Voice().addTickables([ + f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0), + f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0), + f.StaveNote({ keys: ['a/5/x3'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'a,' }), 0), + ]); +}); +const snare2 = createSingleMeasureTest((f) => { + f.Voice().addTickables([ + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(1), 0), + f.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(1), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(3), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(4), 0), + ]); +}); +const snare3 = createSingleMeasureTest((factory) => { + factory + .Voice() + .addTickables([ + factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(2), 0), + factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(2), 0), + factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(3), 0), + factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(4), 0), + ]); +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(PercussionTests); + + + +/***/ }), + +/***/ "./tests/registry_tests.ts": +/*!*********************************!*\ + !*** ./tests/registry_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RegistryTests": () => (/* binding */ RegistryTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Registry Tests + + +const RegistryTests = { + Start() { + QUnit.module('Registry'); + QUnit.test('Register and Clear', registerAndClear); + QUnit.test('Default Registry', defaultRegistry); + QUnit.test('Multiple Classes', classes); + }, +}; +function registerAndClear(assert) { + const registry = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry(); + const score = new _src_index__WEBPACK_IMPORTED_MODULE_1__.EasyScore({ factory: _src_index__WEBPACK_IMPORTED_MODULE_1__.Factory.newFromElementId(null) }); + registry.register(score.notes('C4')[0], 'foobar'); + const foobar = registry.getElementById('foobar'); + assert.ok(foobar); + assert.equal(foobar.getAttribute('id'), 'foobar'); + registry.clear(); + assert.notOk(registry.getElementById('foobar')); + // eslint-disable-next-line + // @ts-ignore: intentional type mismatch to trigger an error. + assert.throws(() => registry.register(score.notes('C4'))); + registry.clear(); + assert.ok(registry.register(score.notes('C4[id="boobar"]')[0]).getElementById('boobar')); +} +function defaultRegistry(assert) { + const registry = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry(); + const score = new _src_index__WEBPACK_IMPORTED_MODULE_1__.EasyScore({ factory: _src_index__WEBPACK_IMPORTED_MODULE_1__.Factory.newFromElementId(null) }); + _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry.enableDefaultRegistry(registry); + score.notes('C4[id="foobar"]'); + const note = registry.getElementById('foobar'); + assert.ok(note); + note.setAttribute('id', 'boobar'); + assert.ok(registry.getElementById('boobar')); + assert.notOk(registry.getElementById('foobar')); + registry.clear(); + assert.equal(registry.getElementsByType(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote.CATEGORY).length, 0); + score.notes('C5'); + const elements = registry.getElementsByType(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote.CATEGORY); + assert.equal(elements.length, 1); +} +function classes(assert) { + const registry = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry(); + const score = new _src_index__WEBPACK_IMPORTED_MODULE_1__.EasyScore({ factory: _src_index__WEBPACK_IMPORTED_MODULE_1__.Factory.newFromElementId(null) }); + _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry.enableDefaultRegistry(registry); + score.notes('C4[id="foobar"]'); + const note = registry.getElementById('foobar'); + note.addClass('foo'); + assert.ok(note.hasClass('foo')); + assert.notOk(note.hasClass('boo')); + assert.equal(registry.getElementsByClass('foo').length, 1); + assert.equal(registry.getElementsByClass('boo').length, 0); + note.addClass('boo'); + assert.ok(note.hasClass('foo')); + assert.ok(note.hasClass('boo')); + assert.equal(registry.getElementsByClass('foo').length, 1); + assert.equal(registry.getElementsByClass('boo').length, 1); + note.removeClass('boo'); + note.removeClass('foo'); + assert.notOk(note.hasClass('foo')); + assert.notOk(note.hasClass('boo')); + assert.equal(registry.getElementsByClass('foo').length, 0); + assert.equal(registry.getElementsByClass('boo').length, 0); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(RegistryTests); + + + +/***/ }), + +/***/ "./tests/renderer_tests.ts": +/*!*********************************!*\ + !*** ./tests/renderer_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RendererTests": () => (/* binding */ RendererTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Ron B. Yeh +// MIT License +// +// Renderer Tests + + +// TODO: Should FactoryOptions.renderer.elementId also accept a canvas | div? +const STAVE_WIDTH = 700; +const STAVE_HEIGHT = 100; +// FactoryOptions.stave.space defaults to 10. +// We subtract 10 to make the useRendererAPI() output look identical to useFactoryAPI(). +const STAVE_RIGHT_MARGIN = 10; +const USE_RENDERER = { useRendererAPI: true }; +const USE_FACTORY = { useRendererAPI: false }; +const RendererTests = { + Start() { + QUnit.module('Renderer'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + // Randomly choose one of four setup paths. See below for a description. + // Refresh `flow.html` to see the test change each time. + // We can manually check that they look identical + // by opening `flow.html` in multiple tabs & quickly switching between tabs. + run('Random', random); + // These are the four setup paths. They should all produce the same output. + // Use the: Renderer API OR Factory API + // Pass in: element ID string OR canvas/div element. + run('Renderer API with element ID string', stringElementId, USE_RENDERER); + run('Renderer API with canvas or div', canvasOrDivElement, USE_RENDERER); + run('Renderer API with context', passRenderContext); + run('Factory API with element ID string', stringElementId, USE_FACTORY); + run('Factory API with canvas or div', canvasOrDivElement, USE_FACTORY); + }, +}; +/** + * Helper function to add three notes to a stave. + */ +function drawStave(stave, context) { + stave.addClef('bass').addTimeSignature('3/4').draw(); + _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter.FormatAndDraw(context, stave, [ + new _src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote({ keys: ['C/4'], duration: '4' }), + new _src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote({ keys: ['E/4'], duration: '4' }), + new _src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote({ keys: ['G/4'], duration: '4' }), + ]); +} +/** + * Randomize the test upon each refresh (for verifying that the output is identical). + * Draw a colored outline to indicate which of the four options is shown. + * - blue = element is a SVG or Canvas element + * - gray = element ID is a string + * - solid outline = use the Renderer API directly + * - dashed outline = use the Factory API + */ +function random(options) { + const useElementIDString = Math.random() > 0.5; + const useRendererAPI = Math.random() > 0.5; + options.params = { useRendererAPI }; + if (useElementIDString) { + stringElementId(options); + } + else { + canvasOrDivElement(options); + } + // eslint-disable-next-line + const element = document.getElementById(options.elementId); + const colorForElementType = useElementIDString ? '#CCCCCC' /* light gray */ : '#0074d9'; /* blue */ + const lineStyleForWhichAPI = useRendererAPI ? 'solid' : 'dashed'; + const borderStyle = `3px ${lineStyleForWhichAPI} ${colorForElementType}`; + let elementType; + if (options.backend === _src_index__WEBPACK_IMPORTED_MODULE_1__.Renderer.Backends.CANVAS) { + // If the backend is canvas, we draw a border around the canvas directly. + element.style.border = borderStyle; + elementType = '<canvas> element object'; + } + else { + // If the backend is SVG, we draw a border around the SVG child of the DIV. + element.children[0].style.border = borderStyle; + elementType = '<svg> element object'; + } + if (useElementIDString) { + elementType = 'elementID string'; + } + const whichAPI = useRendererAPI ? 'Renderer API' : 'Factory API'; + element.parentElement.insertAdjacentHTML('beforeend', `
` + + `${whichAPI}` + + ` with ` + + `${elementType}` + + `

`); +} +function useRendererAPI(e, backend) { + const renderer = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Renderer(e, backend); + renderer.resize(STAVE_WIDTH, STAVE_HEIGHT); + const context = renderer.getContext(); + drawStave(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context); +} +/** + * Alternatively, use the Factory API! + * The Factory API declares elementId to be string | null. + * However, if we pass in a canvas or div element, it will still work. + * This is because Factory calls new Renderer(elementId, ...) via Renderer.buildContext(). + */ +function useFactoryAPI(e, backend) { + const opts = { + renderer: { elementId: e, width: STAVE_WIDTH, height: STAVE_HEIGHT, backend }, + }; + const factory = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Factory(opts); + drawStave(factory.Stave(), factory.getContext()); +} +/** + * Pass in a elementId string. Renderer will call document.getElementById(). + */ +function stringElementId(options) { + const elementId = options.elementId; + if (options.params.useRendererAPI) { + useRendererAPI(elementId, options.backend); + } + else { + useFactoryAPI(elementId, options.backend); + } + options.assert.ok(true); +} +/** + * Pass a canvas or div element directly to the Renderer constructor. + */ +function canvasOrDivElement(options) { + const element = document.getElementById(options.elementId); + if (options.params.useRendererAPI) { + useRendererAPI(element, options.backend); + } + else { + useFactoryAPI(element, options.backend); + } + options.assert.ok(true); +} +/** + * Pass the render context directly to the Renderer constructor. + */ +function passRenderContext(options) { + let context; + const element = document.getElementById(options.elementId); + if ((0,_src_index__WEBPACK_IMPORTED_MODULE_1__.isHTMLCanvas)(element)) { + const ctx = element.getContext('2d'); + if (!ctx) { + throw new _src_index__WEBPACK_IMPORTED_MODULE_1__.RuntimeError(`Couldn't get context from element "${options.elementId}"`); + } + context = new _src_index__WEBPACK_IMPORTED_MODULE_1__.CanvasContext(ctx); + } + else { + context = new _src_index__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element); + } + const renderer = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Renderer(context); + renderer.resize(STAVE_WIDTH, STAVE_HEIGHT); + drawStave(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(RendererTests); + + + +/***/ }), + +/***/ "./tests/rests_tests.ts": +/*!******************************!*\ + !*** ./tests/rests_tests.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RestsTests": () => (/* binding */ RestsTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_tuplet__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Rests Tests + + + + + + + + + +const RestsTests = { + Start() { + QUnit.module('Rests'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Outside Stave', ledgerRest); + run('Dotted', basic); + run('Auto Align - Beamed Notes Stems Up', beamsUp); + run('Auto Align - Beamed Notes Stems Down', beamsDown); + run('Auto Align - Tuplets Stems Up', tupletsUp); + run('Auto Align - Tuplets Stems Down', tupletsDown); + run('Auto Align - Single Voice (Default)', singleVoiceDefaultAlignment); + run('Auto Align - Single Voice (Align All)', singleVoiceAlignAll); + run('Auto Align - Multi Voice', multiVoice); + }, +}; +/** + * Helper function to create a context and stave. + * + * @param options + * @param contextBuilder static function in renderer.ts (Renderer.getSVGContext or Renderer.getCanvasContext). + * @param width + * @param height + * @returns object with .context and .stave properties + */ +function setupContext(options, contextBuilder, width = 350, height = 150) { + // context is SVGContext or CanvasRenderingContext2D (native) or CanvasContext (only if Renderer.USE_CANVAS_PROXY is true). + const context = contextBuilder(options.elementId, width, height); + context.scale(0.9, 0.9); + context.font = '10pt Arial'; + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_5__.Stave(10, 30, width).addClef('treble').addTimeSignature('4/4').setContext(context).draw(); + return { context, stave }; +} +/** + * Dotted rests (whole to 128th). + * The rest duration is specified as 'wr', 'hr', ..., '128r'. + */ +function basic(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 700); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '16r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '32r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '64r' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '128r' }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach(notes, { all: true }); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + options.assert.ok(true, 'Dotted Rest Test'); +} +/** + * Use the ledger glyph if the whole or half rest is above/below the staff + */ +function ledgerRest(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 700); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['a/5'], stem_direction: 1, duration: 'wr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['c/6'], stem_direction: 1, duration: 'hr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['a/3'], stem_direction: 1, duration: 'wr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['f/3'], stem_direction: 1, duration: 'hr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + options.assert.ok(true, 'Leger/Ledger Rest Test'); +} +// Optional: Use a helper function to make your code more concise. +const note = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote(noteStruct); +/** + * Rests are intermixed within beamed notes (with the stems and beams at the top). + */ +function beamsUp(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['e/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['c/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['c/4'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['c/4'], stem_direction: 1, duration: '8' }), + ]; + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(0, 4)); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(4, 8)); + const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(8, 12)); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + beam1.setContext(context).draw(); + beam2.setContext(context).draw(); + beam3.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Beams Up Test'); +} +/** + * Rests are intermixed within beamed notes (with the stems and beams at the bottom). + */ +function beamsDown(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['c/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['e/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['e/4'], stem_direction: -1, duration: '8' }), + ]; + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(0, 4)); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(4, 8)); + const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(8, 12)); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + beam1.setContext(context).draw(); + beam2.setContext(context).draw(); + beam3.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Beams Down Test'); +} +/** + * Call setTupletLocation(Tuplet.LOCATION_TOP) to place the tuplet indicator (bracket and number) at the + * top of the group of notes. Tuplet.LOCATION_TOP is the default, so this is optional. + */ +function tupletsUp(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + ]; + const tuplet1 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(0, 3)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); + const tuplet2 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(3, 6)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); + const tuplet3 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(6, 9)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); + const tuplet4 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(9, 12)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + tuplet1.setContext(context).draw(); + tuplet2.setContext(context).draw(); + tuplet3.setContext(context).draw(); + tuplet4.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Tuplets Stem Up Test'); +} +/** + * Call setTupletLocation(Tuplet.LOCATION_BOTTOM) to place the tuplet indicator (bracket and number) at the + * bottom of the group of notes. + */ +function tupletsDown(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + ]; + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(0, 3)); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(3, 6)); + const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(6, 9)); + const beam4 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(9, 12)); + const tuplet1 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(0, 3)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_BOTTOM); + const tuplet2 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(3, 6)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_BOTTOM); + const tuplet3 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(6, 9)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_BOTTOM); + const tuplet4 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(9, 12)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_BOTTOM); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + tuplet1.setContext(context).draw(); + tuplet2.setContext(context).draw(); + tuplet3.setContext(context).draw(); + tuplet4.setContext(context).draw(); + beam1.setContext(context).draw(); + beam2.setContext(context).draw(); + beam3.setContext(context).draw(); + beam4.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Tuplets Stem Down Test'); +} +/** + * By default rests are centered vertically within the stave, except + * when they are inside a group of beamed notes (in which case they are + * centered vertically within that group). + */ +function singleVoiceDefaultAlignment(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['f/4'], stem_direction: -1, duration: '4' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['d/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + ]; + const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(5, 9)); + const tuplet = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(9, 12)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); + tuplet.setContext(context).draw(); + beam.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Default Test'); +} +/** + * The only difference between staveRestsAll() and staveRests() is that this test case + * passes { align_rests: true } to Formatter.FormatAndDraw(...). + */ +function singleVoiceAlignAll(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['f/4'], stem_direction: -1, duration: '4' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['d/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + ]; + const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(5, 9)); + const tuplet = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(9, 12)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); + // Set { align_rests: true } to align rests (vertically) with nearby notes in each voice. + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes, { align_rests: true }); + tuplet.setContext(context).draw(); + beam.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Align All Test'); +} +/** + * Multi Voice + * The top voice shows quarter-note chords alternating with quarter rests. + * The bottom voice shows two groups of beamed eighth notes, with eighth rests. + */ +function multiVoice(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_5__.Stave(50, 10, 500).addClef('treble').setContext(ctx).addTimeSignature('4/4').draw(); + const noteOnStave = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote(noteStruct).setStave(stave); + const notes1 = [ + noteOnStave({ keys: ['c/4', 'e/4', 'g/4'], duration: '4' }), + noteOnStave({ keys: ['b/4'], duration: '4r' }), + noteOnStave({ keys: ['c/4', 'd/4', 'a/4'], duration: '4' }), + noteOnStave({ keys: ['b/4'], duration: '4r' }), + ]; + const notes2 = [ + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + ]; + const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_8__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_3__.Flow.TIME4_4).addTickables(notes1); + const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_8__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_3__.Flow.TIME4_4).addTickables(notes2); + // Set { align_rests: true } to align rests (vertically) with nearby notes in each voice. + new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave, { align_rests: true }); + const beam2_1 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes2.slice(0, 4)); + const beam2_2 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes2.slice(4, 8)); + // Important Note: we need to draw voice2 first, since voice2 generates ledger lines. + // Otherwise, the ledger lines will be drawn on top of middle C notes in voice1. + voice2.draw(ctx); + voice1.draw(ctx); + beam2_1.setContext(ctx).draw(); + beam2_2.setContext(ctx).draw(); + options.assert.ok(true, 'Strokes Test Multi Voice'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(RestsTests); + + + +/***/ }), + +/***/ "./tests/rhythm_tests.ts": +/*!*******************************!*\ + !*** ./tests/rhythm_tests.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RhythmTests": () => (/* binding */ RhythmTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Rhythm Tests + + + + + + + +const RhythmTests = { + Start() { + QUnit.module('Rhythm'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + // TODO: Simplify test names by removing 'Rhythm Draw - '. + run('Rhythm Draw - slash notes', drawBasic); + run('Rhythm Draw - beamed slash notes', drawBeamedSlashNotes); + run('Rhythm Draw - beamed slash notes, some rests', drawSlashAndBeamAndRests); + run('Rhythm Draw - 16th note rhythm with scratches', drawSixtenthWithScratches); + run('Rhythm Draw - 32nd note rhythm with scratches', drawThirtySecondWithScratches); + }, +}; +// CURRENTLY UNUSED. Draws 7 different slash notes without beams. +/* +function drawSlash(options: TestOptions, contextBuilder: ContextBuilder): void { + const ctx = contextBuilder(options.elementId, 350, 180); + const stave = new Stave(10, 10, 350); + stave.setContext(ctx); + stave.draw(); + + const notes: StaveNoteStruct[] = [ + { keys: ['b/4'], duration: 'ws', stem_direction: -1 }, + { keys: ['b/4'], duration: 'hs', stem_direction: -1 }, + { keys: ['b/4'], duration: 'qs', stem_direction: -1 }, + { keys: ['b/4'], duration: '8s', stem_direction: -1 }, + { keys: ['b/4'], duration: '16s', stem_direction: -1 }, + { keys: ['b/4'], duration: '32s', stem_direction: -1 }, + { keys: ['b/4'], duration: '64s', stem_direction: -1 }, + ]; + options.assert.expect(notes.length * 2); + + for (let i = 0; i < notes.length; ++i) { + const staveNote = new StaveNote(notes[i]).setStave(stave); + new TickContext() + .addTickable(staveNote) + .preFormat() + .setX((i + 1) * 25); + staveNote.setContext(ctx).draw(); + + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +*/ +function drawBasic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 150); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('C'); + staveBar1.setContext(ctx).draw(); + const notesBar1 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], duration: '1s', stem_direction: -1 })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + // bar 2 - juxtaposing second bar next to first bar + const staveBar2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 120); + staveBar2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar2.setContext(ctx).draw(); + // bar 2 + const notesBar2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + // bar 3 - juxtaposing second bar next to first bar + const staveBar3 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 170); + staveBar3.setContext(ctx).draw(); + // bar 3 + const notesBar3 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar3, notesBar3); + // bar 4 - juxtaposing second bar next to first bar + const staveBar4 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 200); + staveBar4.setContext(ctx).draw(); + // bar 4 + const notesBar4 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar4, notesBar4); + options.assert.expect(0); +} +function drawBeamedSlashNotes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 300); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('C'); + staveBar1.setContext(ctx).draw(); + // bar 4 + const notesBar1_part1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + const notesBar1_part2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + // create the beams for 8th notes in 2nd measure + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part1); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part2); + const notesBar1 = notesBar1_part1.concat(notesBar1_part2); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + // Render beams + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + options.assert.expect(0); +} +function drawSlashAndBeamAndRests(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 300); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('F'); + staveBar1.setContext(ctx).draw(); + // bar 1 + const notesBar1_part1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], duration: '8s', stem_direction: -1 }), + ]; + notesBar1_part1[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('C7').setFont('Times', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size + 2), 0); + const notesBar1_part2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8r', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8r', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8r', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + // create the beams for 8th notes in 2nd measure + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part1); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2)); + // Render beams + beam1.setContext(ctx).draw(); + // bar 2 - juxtaposing second bar next to first bar + const staveBar2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 220); + staveBar2.setContext(ctx).draw(); + const notesBar2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '1s', + stem_direction: -1, + }), + ]; + notesBar2[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('F').setFont('Times', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size + 2), 0); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + options.assert.expect(0); +} +function drawSixtenthWithScratches(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 300); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('F'); + staveBar1.setContext(ctx).draw(); + // bar 1 + const notesBar1_part1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16m', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + ]; + const notesBar1_part2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16m', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16r', + stem_direction: -1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + ]; + notesBar1_part1[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('C7').setFont('Times', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size + 3), 0); + // create the beams for 8th notes in 2nd measure + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part1); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part2); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2)); + // Render beams + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + options.assert.expect(0); +} +function drawThirtySecondWithScratches(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 300); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('F'); + staveBar1.setContext(ctx).draw(); + // bar 1 + const notesBar1_part1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32m', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32m', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32r', + stem_direction: 1, + }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + ]; + notesBar1_part1[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('C7').setFont('Times', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size + 3), 0); + // Create the beams for 8th notes in 2nd measure. + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part1); + // Helper function to justify and draw a 4/4 voice. + _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1); + // Render beams + beam1.setContext(ctx).draw(); + options.assert.expect(0); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(RhythmTests); + + + +/***/ }), + +/***/ "./tests/stave_tests.ts": +/*!******************************!*\ + !*** ./tests/stave_tests.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveTests": () => (/* binding */ StaveTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_clef__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/clef */ "./src/clef.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_keysignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_staverepetition__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _src_stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _src_textnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/textnote */ "./src/textnote.ts"); +/* harmony import */ var _src_timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/timesignature */ "./src/timesignature.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Basic Stave Tests +// TODO: Like Stave.setTempo(t: StaveTempoOptions, ...), Stave.setText(...) could declare an interface called StaveTextOptions. +// This helps developers because they can use the named type in their code for type checking. + + + + + + + + + + + + + + +const StaveTests = { + Start() { + QUnit.module('Stave'); + QUnit.test('StaveModifiers SortByCategory', sortByCategory); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Stave Draw Test', draw); + run('Open Stave Draw Test', drawOpenStave); + run('Multiple Stave Barline Test', drawMultipleMeasures); + run('Multiple Stave Barline Test (14pt Section)', drawMultipleMeasures, { fontSize: 14 }); + run('Multiple Stave Repeats Test', drawRepeats); + run('Stave End Modifiers Test', drawEndModifiers); + run('Stave Repetition (CODA) Positioning', drawStaveRepetition, { yShift: 0 }); + run('Stave Repetition (CODA) Positioning (-20)', drawStaveRepetition, { yShift: -20 }); + run('Stave Repetition (CODA) Positioning (+10)', drawStaveRepetition, { yShift: +10 }); + run('Multiple Staves Volta Test', drawVolta); + run('Volta + Modifier Measure Test', drawVoltaModifier); + run('Tempo Test', drawTempo); + run('Single Line Configuration Test', configureSingleLine); + run('Batch Line Configuration Test', configureAllLines); + run('Stave Text Test', drawStaveText); + run('Multiple Line Stave Text Test', drawStaveTextMultiLine); + run('Factory API', factoryAPI); + }, +}; +function sortByCategory(assert) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(0, 0, 300); + const clef0 = new _src_clef__WEBPACK_IMPORTED_MODULE_3__.Clef('treble'); + const clef1 = new _src_clef__WEBPACK_IMPORTED_MODULE_3__.Clef('alto'); + const clef2 = new _src_clef__WEBPACK_IMPORTED_MODULE_3__.Clef('bass'); + const time0 = new _src_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature('C'); + const time1 = new _src_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature('C|'); + const time2 = new _src_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature('9/8'); + const key0 = new _src_keysignature__WEBPACK_IMPORTED_MODULE_5__.KeySignature('G'); + const key1 = new _src_keysignature__WEBPACK_IMPORTED_MODULE_5__.KeySignature('F'); + const key2 = new _src_keysignature__WEBPACK_IMPORTED_MODULE_5__.KeySignature('D'); + const bar0 = new _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.SINGLE); + const bar1 = new _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); + const bar2 = new _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.NONE); + // const order0 = { barlines: 0, clefs: 1, keysignatures: 2, timesignatures: 3 }; + // const order1 = { timesignatures: 0, keysignatures: 1, barlines: 2, clefs: 3 }; + const order0 = { Barline: 0, Clef: 1, KeySignature: 2, TimeSignature: 3 }; + const order1 = { TimeSignature: 0, KeySignature: 1, Barline: 2, Clef: 3 }; + const sortAndCompare = (title, a, b, order) => { + stave.sortByCategory(a, order); + // Verify that the two arrays are identical. + let isSame = true; + if (a.length !== b.length) + isSame = false; + for (let i = 0; i < a.length; ++i) { + if (a[i] !== b[i]) + isSame = false; + } + assert.ok(isSame, title); + }; + sortAndCompare('Keep the original order 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [bar0, bar1, clef0, clef1, key0, key1, time0, time1], order0); + sortAndCompare('Keep the original order 2', [time0, time1, key0, key1, bar0, bar1, clef0, clef1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1); + sortAndCompare('Sort and keep 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1); + sortAndCompare('Sort and keep 2', [bar0, clef0, key0, time0, key1, time1, clef1, bar1, time2, clef2, bar2, key2], [bar0, bar1, bar2, clef0, clef1, clef2, key0, key1, key2, time0, time1, time2], order0); + sortAndCompare('Sort and keep 3', [bar2, clef2, key2, time0, key0, time2, clef1, bar1, time1, clef0, bar0, key1], [time0, time2, time1, key2, key0, key1, bar2, bar1, bar0, clef2, clef1, clef0], order1); +} +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 150); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 10, 300); + stave.setContext(ctx); + stave.draw(); + options.assert.equal(stave.getYForNote(0), 100, 'getYForNote(0)'); + options.assert.equal(stave.getYForLine(5), 100, 'getYForLine(5)'); + options.assert.equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line'); + options.assert.equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line'); + options.assert.ok(true, 'all pass'); +} +function drawOpenStave(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 350); + let stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 10, 300, { left_bar: false }); + stave.setContext(ctx); + stave.draw(); + stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 150, 300, { right_bar: false }); + stave.setContext(ctx); + stave.draw(); + options.assert.ok(true, 'all pass'); +} +function drawMultipleMeasures(options, contextBuilder) { + var _a, _b; + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 550, 200); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 200); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); + staveBar1.setSection('A', 0, 0, (_a = options.params) === null || _a === void 0 ? void 0 : _a.fontSize, false); + staveBar1.addClef('treble').setContext(ctx).draw(); + const notesBar1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'qr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + // bar 2 - juxtaposing second bar next to first bar + const staveBar2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 300); + staveBar2.setSection('B', 0, 0, (_b = options.params) === null || _b === void 0 ? void 0 : _b.fontSize); + staveBar2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.END); + staveBar2.setContext(ctx).draw(); + const notesBar2_part1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + const notesBar2_part2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + // create the beams for 8th notes in 2nd measure + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2_part1); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2_part2); + const notesBar2 = notesBar2_part1.concat(notesBar2_part2); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + // Render beams + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); +} +function drawRepeats(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 750, 120); + // bar 1 + const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 0, 250); + staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); + staveBar1.addClef('treble'); + staveBar1.addKeySignature('A'); + staveBar1.setContext(ctx).draw(); + const notesBar1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'qr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + // bar 2 - juxtaposing second bar next to first bar + const staveBar2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 250); + staveBar2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + staveBar2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); + staveBar2.setContext(ctx).draw(); + const notesBar2_part1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + const notesBar2_part2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + notesBar2_part2[0].addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 0); + notesBar2_part2[1].addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 0); + notesBar2_part2[3].addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0); + // create the beams for 8th notes in 2nd measure + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2_part1); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2_part2); + const notesBar2 = notesBar2_part1.concat(notesBar2_part2); + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + // Render beams + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + // bar 3 - juxtaposing third bar next to second bar + const staveBar3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 50); + staveBar3.setContext(ctx).draw(); + const notesBar3 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/5'], duration: 'wr' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar3, notesBar3); + // bar 4 - juxtaposing third bar next to third bar + const staveBar4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 250 - staveBar1.getModifierXShift()); + staveBar4.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + staveBar4.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); + staveBar4.setContext(ctx).draw(); + const notesBar4 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'qr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar4, notesBar4); +} +function drawEndModifiers(options, contextBuilder) { + options.assert.expect(0); + const staveWidth = 230; + const blockHeight = 80; + let x = 10; + let y = 0; + const ctx = contextBuilder(options.elementId, 800, 700); + function drawStavesInTwoLines(endBarLine) { + // Draw a stave with one measure. Change the ending modifiers. + // eslint-disable-next-line + function drawStave(x, y, width, begMods, endMods) { + const staveBar = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(x, y, width - 10); + if (begMods) { + if (begMods.barLine !== undefined) { + staveBar.setBegBarType(begMods.barLine); + } + if (begMods.clef !== undefined) { + staveBar.addClef(begMods.clef); + } + if (begMods.keySig !== undefined) { + staveBar.addKeySignature(begMods.keySig); + } + if (begMods.timeSig !== undefined) { + staveBar.setTimeSignature(begMods.timeSig); + } + } + if (endMods) { + if (endMods.barLine !== undefined) { + staveBar.setEndBarType(endMods.barLine); + } + if (endMods.clef !== undefined) { + staveBar.addEndClef(endMods.clef); + } + if (endMods.keySig !== undefined) { + staveBar.setEndKeySignature(endMods.keySig); + } + if (endMods.timeSig !== undefined) { + staveBar.setEndTimeSignature(endMods.timeSig); + } + } + staveBar.setContext(ctx).draw(); + const notesBar = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'qr' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar, notesBar); + } + drawStave(x, y, staveWidth + 50, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN, clef: 'treble', keySig: 'A' }, { barLine: endBarLine, clef: 'bass' }); + x += staveWidth + 50; + drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, keySig: 'E' }); + x += staveWidth; + drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, timeSig: '2/4' }); + x += staveWidth; + x = 10; + y += blockHeight; + drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', timeSig: '2/4' }); + x += staveWidth; + drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'treble', keySig: 'Ab' }); + x += staveWidth; + drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', keySig: 'Ab', timeSig: '2/4' }); + x += staveWidth; + } + y = 0; + x = 10; + // First pair of staves. + drawStavesInTwoLines(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.SINGLE); + y += blockHeight + 10; + x = 10; + // Second pair of staves, with double barlines. + drawStavesInTwoLines(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); + y += blockHeight + 10; + x = 10; + // Third pair of staves, with "two dot" repeat barlines. + drawStavesInTwoLines(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); + y += blockHeight + 10; + x = 10; + // Fourth pair of staves, with "two dots" on each side of the barlines. + drawStavesInTwoLines(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BOTH); +} +function drawStaveRepetition(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 725, 200); + // bar 1 + const mm1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 150); + mm1.addClef('treble'); + mm1.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS_AL_FINE, options.params.yShift); + mm1.setMeasure(1); + mm1.setContext(ctx).draw(); + const notesmm1 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm1, notesmm1); + // bar 2 - juxtapose second measure + const mm2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 150); + mm2.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.TO_CODA, options.params.yShift); + mm2.setMeasure(2); + mm2.setContext(ctx).draw(); + const notesmm2 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm2, notesmm2); + // bar 3 - juxtapose third measure + const mm3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 150); + mm3.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS_AL_CODA, options.params.yShift); + mm3.setMeasure(3); + mm3.setContext(ctx).draw(); + const notesmm3 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm3, notesmm3); + // bar 4 - juxtapose fourth measure + const mm4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 150); + mm4.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.CODA_LEFT, options.params.yShift); + mm4.setMeasure(4); + mm4.setContext(ctx).draw(); + const notesmm4 = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm4, notesmm4); +} +function drawVolta(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 725, 200); + // bar 1 + const mm1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 125); + mm1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + mm1.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.SEGNO_LEFT); + mm1.addClef('treble'); + mm1.addKeySignature('A'); + mm1.setMeasure(1); + mm1.setSection('A', 0); + mm1.setContext(ctx).draw(); + const notesmm1 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm1, notesmm1); + // bar 2 - juxtapose second measure + const mm2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 60); + mm2.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.CODA_RIGHT); + mm2.setMeasure(2); + mm2.setContext(ctx).draw(); + const notesmm2 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm2, notesmm2); + // bar 3 - juxtapose third measure + const mm3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 60); + mm3.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.BEGIN, '1.', -5); + mm3.setMeasure(3); + mm3.setContext(ctx).draw(); + const notesmm3 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm3, notesmm3); + // bar 4 - juxtapose fourth measure + const mm4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 60); + mm4.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.MID, '', -5); + mm4.setMeasure(4); + mm4.setContext(ctx).draw(); + const notesmm4 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm4, notesmm4); + // bar 5 - juxtapose fifth measure + const mm5 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm4.getWidth() + mm4.getX(), mm1.getY(), 60); + mm5.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); + mm5.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.END, '', -5); + mm5.setMeasure(5); + mm5.setContext(ctx).draw(); + const notesmm5 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm5, notesmm5); + // bar 6 - juxtapose sixth measure + const mm6 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm5.getWidth() + mm5.getX(), mm1.getY(), 60); + mm6.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.BEGIN_END, '2.', -5); + mm6.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); + mm6.setMeasure(6); + mm6.setContext(ctx).draw(); + const notesmm6 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm6, notesmm6); + // bar 7 - juxtapose seventh measure + const mm7 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm6.getWidth() + mm6.getX(), mm1.getY(), 60); + mm7.setMeasure(7); + mm7.setSection('B', 0); + mm7.setContext(ctx).draw(); + const notesmm7 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm7, notesmm7); + // bar 8 - juxtapose eighth measure + const mm8 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm7.getWidth() + mm7.getX(), mm1.getY(), 60); + mm8.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); + mm8.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS_AL_CODA); + mm8.setMeasure(8); + mm8.setContext(ctx).draw(); + const notesmm8 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/5'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm8, notesmm8); + // bar 9 - juxtapose ninth measure + const mm9 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm8.getWidth() + mm8.getX() + 20, mm1.getY(), 125); + mm9.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.END); + mm9.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.CODA_LEFT); + mm9.addClef('treble'); + mm9.addKeySignature('A'); + mm9.setMeasure(9); + mm9.setContext(ctx).draw(); + const notesmm9 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/5'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm9, notesmm9); +} +function drawVoltaModifier(options, contextBuilder) { + options.assert.expect(0); + // Get the rendering context + const ctx = contextBuilder(options.elementId, 1100, 200); + // bar 1: volta begin, with modifiers (clef, keysignature) + const mm1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 175); + mm1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + mm1.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.BEGIN_END, '1.', -5); + mm1.addClef('treble'); + mm1.addKeySignature('A'); + mm1.setMeasure(1); + mm1.setSection('A', 0); + mm1.setContext(ctx).draw(); + const notesmm1 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + // Helper function to justify and draw a 4/4 voice + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm1, notesmm1); + // bar 2: volta begin_mid, with modifiers (clef, keysignature) + const mm2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm1.getX() + mm1.getWidth(), mm1.getY(), 175); + mm2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); + mm2.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); + mm2.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.BEGIN, '2.', -5); + mm2.addClef('treble'); + mm2.addKeySignature('A'); + mm2.setMeasure(2); + mm2.setContext(ctx).draw(); + const notesmm2 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm2, notesmm2); + // bar 3: volta mid, with modifiers (clef, keysignature) + const mm3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm2.getX() + mm2.getWidth(), mm2.getY(), 175); + mm3.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.MID, '', -5); + mm3.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); + mm3.addClef('treble'); + mm3.addKeySignature('B'); + mm3.setMeasure(3); + mm3.setSection('B', 0); + mm3.setContext(ctx).draw(); + const notesmm3 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm3, notesmm3); + // bar 4: volta end, with modifiers (clef, keysignature) + const mm4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm3.getX() + mm3.getWidth(), mm3.getY(), 175); + mm4.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.END, '1.', -5); + mm4.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); + mm4.addClef('treble'); + mm4.addKeySignature('A'); + mm4.setMeasure(4); + mm4.setSection('C', 0); + mm4.setContext(ctx).draw(); + const notesmm4 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm4, notesmm4); + // bar 5: d.s. shift (similar potential x-shift concern) + const mm5 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm4.getX() + mm4.getWidth(), mm4.getY(), 175); + // mm5.addModifier(new Repetition(Repetition.type.DS, mm4.getX() + mm4.getWidth(), 50), StaveModifierPosition.RIGHT); + mm5.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); + mm5.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); + mm5.addClef('treble'); + mm5.addKeySignature('A'); + mm5.setMeasure(5); + mm5.setSection('D', 0); + mm5.setContext(ctx).draw(); + const notesmm5 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm5, notesmm5); + // bar 6: d.s. without modifiers + const mm6 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm5.getX() + mm5.getWidth(), mm5.getY(), 175); + // mm5.addModifier(new Repetition(Repetition.type.DS, mm4.getX() + mm4.getWidth(), 50), StaveModifierPosition.RIGHT); + mm6.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); + mm6.setMeasure(6); + mm6.setSection('E', 0); + mm6.setContext(ctx).draw(); + const notesmm6 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm6, notesmm6); +} +function drawTempo(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 725, 350); + const padding = 10; + let x = 0; + let y = 50; + function drawTempoStaveBar(width, tempo, tempo_y, notes) { + const staveBar = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(padding + x, y, width); + if (x === 0) + staveBar.addClef('treble'); + staveBar.setTempo(tempo, tempo_y); + staveBar.setContext(ctx).draw(); + const notesBar = notes || [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'q' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar, notesBar); + x += width; + } + drawTempoStaveBar(120, { duration: 'q', dots: 1, bpm: 80 }, 0); + drawTempoStaveBar(100, { duration: '8', dots: 2, bpm: 90 }, 0); + drawTempoStaveBar(100, { duration: '16', dots: 1, bpm: 96 }, 0); + drawTempoStaveBar(100, { duration: '32', bpm: 70 }, 0); + drawTempoStaveBar(250, { name: 'Andante', bpm: 120 }, -20, [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/5'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + ]); + x = 0; + y += 150; + drawTempoStaveBar(120, { duration: 'w', bpm: 80 }, 0); + drawTempoStaveBar(100, { duration: 'h', bpm: 90 }, 0); + drawTempoStaveBar(100, { duration: 'q', bpm: 96 }, 0); + drawTempoStaveBar(100, { duration: '8', bpm: 70 }, 0); + drawTempoStaveBar(250, { name: 'Andante grazioso' }, 0, [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), + ]); +} +function configureSingleLine(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 10, 300); + stave + .setConfigForLine(0, { visible: true }) + .setConfigForLine(1, { visible: false }) + .setConfigForLine(2, { visible: true }) + .setConfigForLine(3, { visible: false }) + .setConfigForLine(4, { visible: true }); + stave.setContext(ctx).draw(); + const config = stave.getConfigForLines(); + options.assert.equal(config[0].visible, true, 'getLinesConfiguration() - Line 0'); + options.assert.equal(config[1].visible, false, 'getLinesConfiguration() - Line 1'); + options.assert.equal(config[2].visible, true, 'getLinesConfiguration() - Line 2'); + options.assert.equal(config[3].visible, false, 'getLinesConfiguration() - Line 3'); + options.assert.equal(config[4].visible, true, 'getLinesConfiguration() - Line 4'); + options.assert.ok(true, 'all pass'); +} +function configureAllLines(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 10, 300); + stave + .setConfigForLines([{ visible: false }, {}, { visible: false }, { visible: true }, { visible: false }]) + .setContext(ctx) + .draw(); + const config = stave.getConfigForLines(); + options.assert.equal(config[0].visible, false, 'getLinesConfiguration() - Line 0'); + options.assert.equal(config[1].visible, true, 'getLinesConfiguration() - Line 1'); + options.assert.equal(config[2].visible, false, 'getLinesConfiguration() - Line 2'); + options.assert.equal(config[3].visible, true, 'getLinesConfiguration() - Line 3'); + options.assert.equal(config[4].visible, false, 'getLinesConfiguration() - Line 4'); + options.assert.ok(true, 'all pass'); +} +function drawStaveText(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 900, 140); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(300, 10, 300); + stave.setText('Violin', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT); + stave.setText('Right Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.RIGHT); + stave.setText('Above Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.ABOVE); + stave.setText('Below Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.BELOW); + stave.setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function drawStaveTextMultiLine(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 900, 200); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(300, 40, 300); + stave.setText('Violin', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT, { shift_y: -10 }); + stave.setText('2nd line', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT, { shift_y: 10 }); + stave.setText('Right Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.RIGHT, { shift_y: -10 }); + stave.setText('2nd line', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.RIGHT, { shift_y: 10 }); + stave.setText('Above Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.ABOVE, { shift_y: -10 }); + stave.setText('2nd line', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.ABOVE, { shift_y: 10 }); + stave.setText('Left Below Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.BELOW, { shift_y: -10, justification: _src_textnote__WEBPACK_IMPORTED_MODULE_12__.TextJustification.LEFT }); + stave.setText('Right Below Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.BELOW, { shift_y: 10, justification: _src_textnote__WEBPACK_IMPORTED_MODULE_12__.TextJustification.RIGHT }); + stave.setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function factoryAPI(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900, 200); + const stave = f.Stave({ x: 300, y: 40, width: 300 }); + stave.setText('Violin', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT, { shift_y: -10 }); + stave.setText('2nd line', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT, { shift_y: 10 }); + f.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveTests); + + + +/***/ }), + +/***/ "./tests/staveconnector_tests.ts": +/*!***************************************!*\ + !*** ./tests/staveconnector_tests.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveConnectorTests": () => (/* binding */ StaveConnectorTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// StaveConnector Tests +// TODO: Should we change StaveConnector.type => StaveConnectorType? We are inconsistent with this. + + + + + + +const StaveConnectorTests = { + Start() { + QUnit.module('StaveConnector'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Single Draw Test', drawSingle); + run('Single Draw Test, 4px Stave Line Thickness', drawSingle4pxStaveLines); + run('Single Both Sides Test', drawSingleBoth); + run('Double Draw Test', drawDouble); + run('Bold Double Line Left Draw Test', drawRepeatBegin); + run('Bold Double Line Right Draw Test', drawRepeatEnd); + run('Thin Double Line Right Draw Test', drawThinDouble); + run('Bold Double Lines Overlapping Draw Test', drawRepeatAdjacent); + run('Bold Double Lines Offset Draw Test', drawRepeatOffset); + run('Bold Double Lines Offset Draw Test 2', drawRepeatOffset2); + run('Brace Draw Test', drawBrace); + run('Brace Wide Draw Test', drawBraceWide); + run('Bracket Draw Test', drawBracket); + run('Combined Draw Test', drawCombined); + }, +}; +function drawSingle(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + connector.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + options.assert.ok(true, 'all pass'); +} +function drawSingle4pxStaveLines(options, contextBuilder) { + const oldThickness = _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.STAVE_LINE_THICKNESS; + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.STAVE_LINE_THICKNESS = 4; + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + connector.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.STAVE_LINE_THICKNESS = oldThickness; + options.assert.ok(true, 'all pass'); +} +function drawSingleBoth(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector1 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector1.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE_LEFT); + connector1.setContext(ctx); + const connector2 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector2.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE_RIGHT); + connector2.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector1.draw(); + connector2.draw(); + options.assert.ok(true, 'all pass'); +} +function drawDouble(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.DOUBLE); + connector.setContext(ctx); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawBrace(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 450, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(100, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(100, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACE); + connector.setContext(ctx); + connector.setText('Piano'); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawBraceWide(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, -20, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 200, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACE); + connector.setContext(ctx); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawBracket(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACKET); + connector.setContext(ctx); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatBegin(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatEnd(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawThinDouble(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE); + stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE); + const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.THIN_DOUBLE); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatAdjacent(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 150); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 150); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(175, 10, 150); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(175, 120, 150); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave3.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave4.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave3.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave4.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + const connector1 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const connector2 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const connector3 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + const connector4 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + connector1.setContext(ctx); + connector2.setContext(ctx); + connector3.setContext(ctx); + connector4.setContext(ctx); + connector1.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + connector2.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector3.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + connector4.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + connector1.draw(); + connector2.draw(); + connector3.draw(); + connector4.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatOffset2(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 150); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 150); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(175, 10, 150); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(175, 120, 150); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave1.addClef('treble'); + stave2.addClef('bass'); + stave3.addClef('alto'); + stave4.addClef('treble'); + stave1.addTimeSignature('4/4'); + stave2.addTimeSignature('4/4'); + stave3.addTimeSignature('6/8'); + stave4.addTimeSignature('6/8'); + stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave3.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave4.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave3.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave4.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + const connector1 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const connector2 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const connector3 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + const connector4 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + const connector5 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + connector1.setContext(ctx); + connector2.setContext(ctx); + connector3.setContext(ctx); + connector4.setContext(ctx); + connector5.setContext(ctx); + connector1.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + connector2.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector3.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + connector4.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector5.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE_LEFT); + connector1.setXShift(stave1.getModifierXShift()); + connector3.setXShift(stave3.getModifierXShift()); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + connector1.draw(); + connector2.draw(); + connector3.draw(); + connector4.draw(); + connector5.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatOffset(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 150); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 150); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(185, 10, 150); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(185, 120, 150); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave1.addClef('bass'); + stave2.addClef('alto'); + stave3.addClef('treble'); + stave4.addClef('tenor'); + stave3.addKeySignature('Ab'); + stave4.addKeySignature('Ab'); + stave1.addTimeSignature('4/4'); + stave2.addTimeSignature('4/4'); + stave3.addTimeSignature('6/8'); + stave4.addTimeSignature('6/8'); + stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); + stave3.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave4.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + stave1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave3.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + stave4.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); + const connector1 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const connector2 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); + const connector3 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + const connector4 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + const connector5 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); + connector1.setContext(ctx); + connector2.setContext(ctx); + connector3.setContext(ctx); + connector4.setContext(ctx); + connector5.setContext(ctx); + connector1.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + connector2.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector3.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); + connector4.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector5.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE_LEFT); + connector1.setXShift(stave1.getModifierXShift()); + connector3.setXShift(stave3.getModifierXShift()); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + connector1.draw(); + connector2.draw(); + connector3.draw(); + connector4.draw(); + connector5.draw(); + options.assert.ok(true, 'all pass'); +} +function drawCombined(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 550, 700); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 10, 300); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 100, 300); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 190, 300); + const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 280, 300); + const stave5 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 370, 300); + const stave6 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 460, 300); + const stave7 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 560, 300); + stave1.setText('Violin', _src_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave5.setContext(ctx); + stave6.setContext(ctx); + stave7.setContext(ctx); + const conn_single = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave7); + const conn_double = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave2, stave3); + const conn_bracket = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave4, stave7); + const conn_none = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave4, stave5); + const conn_brace = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave6, stave7); + conn_single.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); + conn_double.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.DOUBLE); + conn_bracket.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACKET); + conn_brace.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACE); + conn_brace.setXShift(-5); + conn_double.setText('Piano'); + conn_none.setText('Multiple', { shift_y: -15 }); + conn_none.setText('Line Text', { shift_y: 15 }); + conn_brace.setText('Harpsichord'); + conn_single.setContext(ctx); + conn_double.setContext(ctx); + conn_bracket.setContext(ctx); + conn_none.setContext(ctx); + conn_brace.setContext(ctx); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + stave5.draw(); + stave6.draw(); + stave7.draw(); + conn_single.draw(); + conn_double.draw(); + conn_bracket.draw(); + conn_none.draw(); + conn_brace.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveConnectorTests); + + + +/***/ }), + +/***/ "./tests/stavehairpin_tests.ts": +/*!*************************************!*\ + !*** ./tests/stavehairpin_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveHairpinTests": () => (/* binding */ StaveHairpinTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stavehairpin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stavehairpin */ "./src/stavehairpin.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Author: Raffaele Viglianti, 2012 +// +// StaveHairpin Tests +// TODO: Incorrect property names in the options object: vo, left_ho, right_ho. + + +const StaveHairpinTests = { + Start() { + QUnit.module('StaveHairpin'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple StaveHairpin', simple); + run('Horizontal Offset StaveHairpin', horizontal); + run('Vertical Offset StaveHairpin', vertical); + run('Height StaveHairpin', height); + }, +}; +/** + * Helper function to draw a single hairpin (either crescendo or decrescendo). + * @param type is StaveHairpin.type.CRESC or StaveHairpin.type.DECRESC. + * @param position is Modifier.Position.ABOVE or Modifier.Position.BELOW. + */ +function drawHairpin(first_note, last_note, ctx, type, position, options) { + const hairpin = new _src_stavehairpin__WEBPACK_IMPORTED_MODULE_1__.StaveHairpin({ first_note, last_note }, type); + hairpin.setContext(ctx); + hairpin.setPosition(position); + if (options) { + hairpin.setRenderOptions(options); + } + hairpin.draw(); +} +/** + * Helper function + */ +function createTest(drawTwoHairpins) { + return (options) => { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const ctx = factory.getContext(); + const stave = factory.Stave(); + const notes = [ + factory + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) + .addModifier(factory.Accidental({ type: 'b' }), 0) + .addModifier(factory.Accidental({ type: '#' }), 1), + factory.StaveNote({ keys: ['d/4'], stem_direction: 1, duration: '4' }), + factory.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }), + factory.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '4' }), + ]; + const voice = factory.Voice().addTickables(notes); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + drawTwoHairpins(ctx, notes); + options.assert.ok(true, 'Simple Test'); + }; +} +const simple = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 4); + drawHairpin(notes[1], notes[3], ctx, 2, 3); +}); +const horizontal = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 3, { + height: 10, + // TODO: these three property names seem to be incorrect. + // vo => should it be 'y_shift'? + // left_ho => should it be 'left_shift_px'? + // right_ho => should it be 'right_shift_px'? + vo: 20, + left_ho: 20, + right_ho: -20, // right horizontal offset + }); + drawHairpin(notes[3], notes[3], ctx, 2, 4, { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 120, // right horizontal offset + }); +}); +const vertical = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 4, { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, // right horizontal offset + }); + drawHairpin(notes[2], notes[3], ctx, 2, 4, { + height: 10, + y_shift: -15, + left_shift_px: 2, + right_shift_px: 0, // right horizontal offset + }); +}); +const height = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 4, { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, // right horizontal offset + }); + drawHairpin(notes[2], notes[3], ctx, 2, 4, { + height: 15, + y_shift: 0, + left_shift_px: 2, + right_shift_px: 0, // right horizontal offset + }); +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveHairpinTests); + + + +/***/ }), + +/***/ "./tests/staveline_tests.ts": +/*!**********************************!*\ + !*** ./tests/staveline_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveLineTests": () => (/* binding */ StaveLineTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// StaveLine Tests + + + +const StaveLineTests = { + Start() { + QUnit.module('StaveLine'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple StaveLine', simple0); + run('StaveLine Arrow Options', simple1); + }, +}; +function simple0(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave().addClef('treble'); + const notes = [ + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + f.StaveNote({ keys: ['c/5'], duration: '4', clef: 'treble' }), + f.StaveNote({ keys: ['c/4', 'g/4', 'b/4'], duration: '4', clef: 'treble' }), + f.StaveNote({ keys: ['f/4', 'a/4', 'f/5'], duration: '4', clef: 'treble' }), + ]; + const voice = f.Voice().addTickables(notes); + f.StaveLine({ + from: notes[0], + to: notes[1], + first_indices: [0], + last_indices: [0], + options: { + font: { family: _src_font__WEBPACK_IMPORTED_MODULE_2__.Font.SERIF, size: 12, style: _src_font__WEBPACK_IMPORTED_MODULE_2__.FontStyle.ITALIC }, + text: 'gliss.', + }, + }); + const staveLine2 = f.StaveLine({ + from: notes[2], + to: notes[3], + first_indices: [2, 1, 0], + last_indices: [0, 1, 2], + }); + staveLine2.render_options.line_dash = [10, 10]; + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function simple1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 770); + const stave = f.Stave().addClef('treble'); + const notes = [ + f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', clef: 'treble' }), + f + .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' }) + .addModifier(f.Accidental({ type: '#' }), 2), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0), + f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }), + f.StaveNote({ keys: ['c/4', 'd/4', 'g/4'], duration: '4', clef: 'treble' }), + f + .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' }) + .addModifier(f.Accidental({ type: '#' }), 2), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes[0]], { all: true }); + const voice = f.Voice().setStrict(false).addTickables(notes); + const staveLine0 = f.StaveLine({ + from: notes[0], + to: notes[1], + first_indices: [0], + last_indices: [0], + options: { text: 'Left' }, + }); + const staveLine4 = f.StaveLine({ + from: notes[2], + to: notes[3], + first_indices: [1], + last_indices: [1], + options: { text: 'Right' }, + }); + const staveLine1 = f.StaveLine({ + from: notes[4], + to: notes[5], + first_indices: [0], + last_indices: [0], + options: { text: 'Center' }, + }); + const staveLine2 = f.StaveLine({ + from: notes[6], + to: notes[7], + first_indices: [1], + last_indices: [0], + }); + const staveLine3 = f.StaveLine({ + from: notes[6], + to: notes[7], + first_indices: [2], + last_indices: [2], + options: { text: 'Top' }, + }); + staveLine0.render_options.draw_end_arrow = true; + staveLine0.render_options.text_justification = 1; + staveLine0.render_options.text_position_vertical = 2; + staveLine1.render_options.draw_end_arrow = true; + staveLine1.render_options.arrowhead_length = 30; + staveLine1.render_options.line_width = 5; + staveLine1.render_options.text_justification = 2; + staveLine1.render_options.text_position_vertical = 2; + staveLine4.render_options.line_width = 2; + staveLine4.render_options.draw_end_arrow = true; + staveLine4.render_options.draw_start_arrow = true; + staveLine4.render_options.arrowhead_angle = 0.5; + staveLine4.render_options.arrowhead_length = 20; + staveLine4.render_options.text_justification = 3; + staveLine4.render_options.text_position_vertical = 2; + staveLine2.render_options.draw_start_arrow = true; + staveLine2.render_options.line_dash = [5, 4]; + staveLine3.render_options.draw_end_arrow = true; + staveLine3.render_options.draw_start_arrow = true; + staveLine3.render_options.color = 'red'; + staveLine3.render_options.text_position_vertical = 1; + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveLineTests); + + + +/***/ }), + +/***/ "./tests/stavemodifier_tests.ts": +/*!**************************************!*\ + !*** ./tests/stavemodifier_tests.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveModifierTests": () => (/* binding */ StaveModifierTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stavemodifier */ "./src/stavemodifier.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// StaveModifier Tests + + + + +const StaveModifierTests = { + Start() { + QUnit.module('StaveModifier'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Stave Draw Test', draw); + run('Begin & End StaveModifier Test', drawBeginAndEnd); + }, +}; +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300); + stave.setContext(ctx); + stave.draw(); + options.assert.equal(stave.getYForNote(0), 100, 'getYForNote(0)'); + options.assert.equal(stave.getYForLine(5), 100, 'getYForLine(5)'); + options.assert.equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line'); + options.assert.equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line'); + options.assert.ok(true, 'all pass'); +} +function drawBeginAndEnd(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 400); + stave.setContext(ctx); + stave.setTimeSignature('C|'); + stave.setKeySignature('Db'); + stave.setClef('treble'); + stave.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.REPEAT_BEGIN); + stave.setEndClef('alto'); + stave.setEndTimeSignature('9/8'); + stave.setEndKeySignature('G', 'C#'); + stave.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.DOUBLE); + stave.draw(); + // change + const END = _src_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.END; + stave.setY(100); + stave.setTimeSignature('3/4'); + stave.setKeySignature('G', 'C#'); + stave.setClef('bass'); + stave.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.SINGLE); + stave.setClef('treble', undefined, undefined, END); + stave.setTimeSignature('C', undefined, END); + stave.setKeySignature('F', undefined, END); + stave.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.SINGLE); + stave.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveModifierTests); + + + +/***/ }), + +/***/ "./tests/stavenote_tests.ts": +/*!**********************************!*\ + !*** ./tests/stavenote_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveNoteTests": () => (/* binding */ StaveNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_fraction__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/fraction */ "./src/fraction.ts"); +/* harmony import */ var _src_frethandfinger__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); +/* harmony import */ var _src_modifiercontext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_stringnumber__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../src/stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _src_strokes__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../src/strokes */ "./src/strokes.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// StaveNote Tests +// TODO: In StaveNote.preFormat() line 929, should noteHeadPadding default to StaveNote.minNoteheadPadding? +// The bounding box of a note changes slightly when we add a ModifierContext (even if we add zero modifiers). + + + + + + + + + + + + + + + + + + +const StaveNoteTests = { + Start() { + QUnit.module('StaveNote'); + QUnit.test('Tick', ticks); + QUnit.test('Tick - New API', ticksNewAPI); + QUnit.test('Stem', stem); + QUnit.test('Automatic Stem Direction', autoStem); + QUnit.test('Stem Extension Pitch', stemExtensionPitch); + QUnit.test('Displacement after calling setStemDirection', setStemDirectionDisplacement); + QUnit.test('StaveLine', staveLine); + QUnit.test('Width', width); + QUnit.test('TickContext', tickContext); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('StaveNote Draw - Treble', drawBasic, { clef: 'treble', octaveShift: 0, restKey: 'r/4' }); + run('StaveNote BoundingBoxes - Treble', drawBoundingBoxes, { clef: 'treble', octaveShift: 0, restKey: 'r/4' }); + run('StaveNote Draw - Alto', drawBasic, { clef: 'alto', octaveShift: -1, restKey: 'r/4' }); + run('StaveNote Draw - Tenor', drawBasic, { clef: 'tenor', octaveShift: -1, restKey: 'r/3' }); + run('StaveNote Draw - Bass', drawBasic, { clef: 'bass', octaveShift: -2, restKey: 'r/3' }); + run('StaveNote Draw - Harmonic And Muted', drawHarmonicAndMuted); + run('StaveNote Draw - Slash', drawSlash); + run('Displacements', displacements); + run('StaveNote Draw - Bass 2', drawBass); + run('StaveNote Draw - Key Styles', drawKeyStyles); + run('StaveNote Draw - StaveNote Stem Styles', drawNoteStemStyles); + run('StaveNote Draw - StaveNote Stem Lengths', drawNoteStemLengths); + run('StaveNote Draw - StaveNote Flag Styles', drawNoteStylesWithFlag); + run('StaveNote Draw - StaveNote Styles', drawNoteStyles); + run('Stave, Ledger Line, Beam, Stem and Flag Styles', drawBeamStyles); + run('Flag and Dot Placement - Stem Up', dotsAndFlagsStemUp); + run('Flag and Dots Placement - Stem Down', dotsAndFlagsStemDown); + run('Beam and Dot Placement - Stem Up', dotsAndBeamsUp); + run('Beam and Dot Placement - Stem Down', dotsAndBeamsDown); + run('No Padding', noPadding); + run('Note Heads Placement - Simple', noteHeadsSimple); + run('Note Heads Placement - Hidden Notes', noteHeadsHidden); + run('Center Aligned Note', centerAlignedRest); + run('Center Aligned Note with Articulation', centerAlignedRestFermata); + run('Center Aligned Note with Annotation', centerAlignedRestAnnotation); + run('Center Aligned Note - Multi Voice', centerAlignedMultiVoice); + run('Center Aligned Note with Multiple Modifiers', centerAlignedNoteMultiModifiers); + // This interactivity test currently only works with the SVG backend. + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runSVGTest('Interactive Mouseover StaveNote', drawBasic, { + clef: 'treble', + octaveShift: 0, + restKey: 'r/4', + ui: true, + }); + }, +}; +// Helper function to create StaveNotes. +const staveNote = (struct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote(struct); +/** + * Helper function to draw a note with an optional bounding box. + */ +function draw(note, stave, context, x, drawBoundingBox = false, addModifierContext = true) { + // Associate the note with the stave. + note.setStave(stave); + // A ModifierContext is required for dots and other modifiers to be drawn properly. + // If added, it changes the bounding box of a note, even if there are no modifiers to draw. + // See StaveNote.minNoteheadPadding in stavenote.ts. + if (addModifierContext) { + note.addToModifierContext(new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_11__.ModifierContext()); + } + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(x); + note.setContext(context).draw(); + if (drawBoundingBox) { + const bb = note.getBoundingBox(); + context.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); + context.stroke(); + } + return note; +} +function ticks(assert) { + const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_6__.Flow.RESOLUTION) / 4; + // Key value pairs of `testName: [durationString, expectedBeats, expectedNoteType]` + const tickTests = { + 'Breve note': ['1/2', 8.0, 'n'], + 'Whole note': ['w', 4.0, 'n'], + 'Quarter note': ['q', 1.0, 'n'], + 'Dotted half note': ['hd', 3.0, 'n'], + 'Doubled-dotted half note': ['hdd', 3.5, 'n'], + 'Triple-dotted half note': ['hddd', 3.75, 'n'], + 'Dotted half rest': ['hdr', 3.0, 'r'], + 'Double-dotted half rest': ['hddr', 3.5, 'r'], + 'Triple-dotted half rest': ['hdddr', 3.75, 'r'], + 'Dotted harmonic quarter note': ['qdh', 1.5, 'h'], + 'Double-dotted harmonic quarter note': ['qddh', 1.75, 'h'], + 'Triple-dotted harmonic quarter note': ['qdddh', 1.875, 'h'], + 'Dotted muted 8th note': ['8dm', 0.75, 'm'], + 'Double-dotted muted 8th note': ['8ddm', 0.875, 'm'], + 'Triple-dotted muted 8th note': ['8dddm', 0.9375, 'm'], + }; + Object.keys(tickTests).forEach((testName) => { + const testData = tickTests[testName]; + const durationString = testData[0]; + const expectedBeats = testData[1]; + const expectedNoteType = testData[2]; + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: durationString }); + assert.equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats'); + assert.equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType); + }); + assert.throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, "Invalid note duration '8.7' throws BadArguments exception"); + assert.throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); + assert.throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); +} +function ticksNewAPI(assert) { + const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_6__.Flow.RESOLUTION) / 4; + // Key value pairs of `testName: [noteData, expectedBeats, expectedNoteType]` + const tickTests = { + 'Breve note': [{ duration: '1/2' }, 8.0, 'n'], + 'Whole note': [{ duration: 'w' }, 4.0, 'n'], + 'Quarter note': [{ duration: 'q' }, 1.0, 'n'], + 'Dotted half note': [{ duration: 'h', dots: 1 }, 3.0, 'n'], + 'Doubled-dotted half note': [{ duration: 'h', dots: 2 }, 3.5, 'n'], + 'Triple-dotted half note': [{ duration: 'h', dots: 3 }, 3.75, 'n'], + 'Dotted half rest': [{ duration: 'h', dots: 1, type: 'r' }, 3.0, 'r'], + 'Double-dotted half rest': [{ duration: 'h', dots: 2, type: 'r' }, 3.5, 'r'], + 'Triple-dotted half rest': [{ duration: 'h', dots: 3, type: 'r' }, 3.75, 'r'], + 'Dotted harmonic quarter note': [{ duration: 'q', dots: 1, type: 'h' }, 1.5, 'h'], + 'Double-dotted harmonic quarter note': [{ duration: 'q', dots: 2, type: 'h' }, 1.75, 'h'], + 'Triple-dotted harmonic quarter note': [{ duration: 'q', dots: 3, type: 'h' }, 1.875, 'h'], + 'Dotted muted 8th note': [{ duration: '8', dots: 1, type: 'm' }, 0.75, 'm'], + 'Double-dotted muted 8th note': [{ duration: '8', dots: 2, type: 'm' }, 0.875, 'm'], + 'Triple-dotted muted 8th note': [{ duration: '8', dots: 3, type: 'm' }, 0.9375, 'm'], + }; + Object.keys(tickTests).forEach(function (testName) { + const testData = tickTests[testName]; + const noteData = testData[0]; + const expectedBeats = testData[1]; + const expectedNoteType = testData[2]; + noteData.keys = ['c/4', 'e/4', 'g/4']; + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote(noteData); + assert.equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats'); + assert.equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType); + }); + assert.throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, "Invalid note duration '8.7' throws BadArguments exception"); + assert.throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); + assert.throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); +} +function stem(assert) { + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'w' }); + assert.equal(note.getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP, 'Default note has UP stem'); +} +function autoStem(assert) { + const testData = [ + [['c/5', 'e/5', 'g/5'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], + [['e/4', 'g/4', 'c/5'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP], + [['c/5'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], + [['a/4', 'e/5', 'g/5'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], + [['b/4'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], + ]; + testData.forEach((td) => { + const keys = td[0]; + const expectedStemDirection = td[1]; + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: keys, auto_stem: true, duration: '8' }); + assert.equal(note.getStemDirection(), expectedStemDirection, 'Stem must be ' + (expectedStemDirection === _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP ? 'up' : 'down')); + }); +} +function stemExtensionPitch(assert) { + // [keys, expectedStemExtension, override stem direction] + const testData = [ + [['c/5', 'e/5', 'g/5'], 0, 0], + [['e/4', 'g/4', 'c/5'], 0, 0], + [['c/5'], 0, 0], + [['f/3'], 15, 0], + [['f/3'], 15, _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP], + [['f/3'], 0, _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], + [['f/3', 'e/5'], 0, 0], + [['g/6'], 25, 0], + [['g/6'], 25, _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], + [['g/6'], 0, _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP], + ]; + testData.forEach((td) => { + const keys = td[0]; + const expectedStemExtension = td[1]; + const overrideStemDirection = td[2]; + let note; + if (overrideStemDirection === 0) { + note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: keys, auto_stem: true, duration: '4' }); + } + else { + note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: keys, duration: '4', stem_direction: overrideStemDirection }); + } + assert.equal(note.getStemExtension(), expectedStemExtension, 'For ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension); + // set to weird Stave + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 300, { spacing_between_lines_px: 20 }); + note.setStave(stave); + assert.equal(note.getStemExtension(), expectedStemExtension * 2, 'For wide staff ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension * 2); + // const whole_note = new StaveNote({ keys: keys, duration: 'w' }); + // assert.equal( + // whole_note.getStemExtension(), + // -1 * Flow.STEM_HEIGHT, + // 'For ' + keys.toString() + ' whole_note StemExtension must always be -1 * Flow.STEM_HEIGHT' + // ); + }); +} +function setStemDirectionDisplacement(assert) { + function getDisplacements(note) { + return note.noteHeads.map((noteHead) => noteHead.isDisplaced()); + } + const stemUpDisplacements = [false, true, false]; + const stemDownDisplacements = [true, false, false]; + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/5', 'd/5', 'g/5'], stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP, duration: '4' }); + assert.deepEqual(getDisplacements(note), stemUpDisplacements); + note.setStemDirection(_src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN); + assert.deepEqual(getDisplacements(note), stemDownDisplacements); + note.setStemDirection(_src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP); + assert.deepEqual(getDisplacements(note), stemUpDisplacements); +} +function staveLine(assert) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 300); + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }); + note.setStave(stave); + const props = note.getKeyProps(); + assert.equal(props[0].line, 0, 'C/4 on line 0'); + assert.equal(props[1].line, 1, 'E/4 on line 1'); + assert.equal(props[2].line, 2.5, 'A/4 on line 2.5'); + const ys = note.getYs(); + assert.equal(ys.length, 3, 'Chord should be rendered on three lines'); + assert.equal(ys[0], 100, 'Line for C/4'); + assert.equal(ys[1], 90, 'Line for E/4'); + assert.equal(ys[2], 75, 'Line for A/4'); +} +function width(assert) { + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }); + assert.throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width'); +} +function tickContext(assert) { + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 400); + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }).setStave(stave); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(10).setPadding(0); + assert.expect(0); +} +function drawBasic(options, contextBuilder) { + const clef = options.params.clef; + const octaveShift = options.params.octaveShift; + const restKey = options.params.restKey; + const ctx = contextBuilder(options.elementId, 700, 180); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 30, 750); + stave.setContext(ctx); + stave.addClef(clef); + stave.draw(); + const lowerKeys = ['c/', 'e/', 'a/']; + const higherKeys = ['c/', 'e/', 'a/']; + for (let k = 0; k < lowerKeys.length; k++) { + lowerKeys[k] = lowerKeys[k] + (4 + octaveShift); + higherKeys[k] = higherKeys[k] + (5 + octaveShift); + } + const restKeys = [restKey]; + const noteStructs = [ + { clef: clef, keys: higherKeys, duration: '1/2' }, + { clef: clef, keys: lowerKeys, duration: 'w' }, + { clef: clef, keys: higherKeys, duration: 'h' }, + { clef: clef, keys: lowerKeys, duration: 'q' }, + { clef: clef, keys: higherKeys, duration: '8' }, + { clef: clef, keys: lowerKeys, duration: '16' }, + { clef: clef, keys: higherKeys, duration: '32' }, + { clef: clef, keys: higherKeys, duration: '64' }, + { clef: clef, keys: higherKeys, duration: '128' }, + { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: restKeys, duration: '1/2r' }, + { clef: clef, keys: restKeys, duration: 'wr' }, + { clef: clef, keys: restKeys, duration: 'hr' }, + { clef: clef, keys: restKeys, duration: 'qr' }, + { clef: clef, keys: restKeys, duration: '8r' }, + { clef: clef, keys: restKeys, duration: '16r' }, + { clef: clef, keys: restKeys, duration: '32r' }, + { clef: clef, keys: restKeys, duration: '64r' }, + { clef: clef, keys: restKeys, duration: '128r' }, + { keys: ['x/4'], duration: 'h' }, + ]; + options.assert.expect(noteStructs.length * 2); + const colorDescendants = (parentItem, color) => () => parentItem.querySelectorAll('*').forEach((child) => { + child.setAttribute('fill', color); + child.setAttribute('stroke', color); + }); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25); + // If this is an interactivity test (ui: true), then attach mouseover & mouseout handlers to the notes. + if (options.params.ui) { + const item = note.getSVGElement(); + if (item) { + item.addEventListener('mouseover', colorDescendants(item, 'green'), false); + item.addEventListener('mouseout', colorDescendants(item, 'black'), false); + } + } + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawBoundingBoxes(options, contextBuilder) { + const clef = options.params.clef; + const octaveShift = options.params.octaveShift; + const restKey = options.params.restKey; + const ctx = contextBuilder(options.elementId, 700, 180); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 30, 750); + stave.setContext(ctx); + stave.addClef(clef); + stave.draw(); + const lowerKeys = ['c/', 'e/', 'a/']; + const higherKeys = ['c/', 'e/', 'a/']; + for (let k = 0; k < lowerKeys.length; k++) { + lowerKeys[k] = lowerKeys[k] + (4 + octaveShift); + higherKeys[k] = higherKeys[k] + (5 + octaveShift); + } + const restKeys = [restKey]; + const noteStructs = [ + { clef: clef, keys: higherKeys, duration: '1/2' }, + { clef: clef, keys: lowerKeys, duration: 'w' }, + { clef: clef, keys: higherKeys, duration: 'h' }, + { clef: clef, keys: lowerKeys, duration: 'q' }, + { clef: clef, keys: higherKeys, duration: '8' }, + { clef: clef, keys: lowerKeys, duration: '16' }, + { clef: clef, keys: higherKeys, duration: '32' }, + { clef: clef, keys: higherKeys, duration: '64' }, + { clef: clef, keys: higherKeys, duration: '128' }, + { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '128' }, + { clef: clef, keys: restKeys, duration: '1/2r' }, + { clef: clef, keys: restKeys, duration: 'wr' }, + { clef: clef, keys: restKeys, duration: 'hr' }, + { clef: clef, keys: restKeys, duration: 'qr' }, + { clef: clef, keys: restKeys, duration: '8r' }, + { clef: clef, keys: restKeys, duration: '16r' }, + { clef: clef, keys: restKeys, duration: '32r' }, + { clef: clef, keys: restKeys, duration: '64r' }, + { clef: clef, keys: restKeys, duration: '128r' }, + { keys: ['x/4'], duration: 'h' }, + ]; + options.assert.expect(noteStructs.length * 2); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25, true /* drawBoundingBox */, false /* addModifierContext */); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawBass(options, contextBuilder) { + options.assert.expect(40); + const ctx = contextBuilder(options.elementId, 600, 280); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 650); + stave.setContext(ctx); + stave.addClef('bass'); + stave.draw(); + const noteStructs = [ + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '1/2' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'w' }, + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: 'h' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q' }, + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '8' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16' }, + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '32' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['r/4'], duration: '1/2r' }, + { keys: ['r/4'], duration: 'wr' }, + { keys: ['r/4'], duration: 'hr' }, + { keys: ['r/4'], duration: 'qr' }, + { keys: ['r/4'], duration: '8r' }, + { keys: ['r/4'], duration: '16r' }, + { keys: ['r/4'], duration: '32r' }, + { keys: ['x/4'], duration: 'h' }, + ]; + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function displacements(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 700, 155); + ctx.scale(0.9, 0.9); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 675); + stave.setContext(ctx); + stave.draw(); + const noteStructs = [ + { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: '1/2' }, + { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: 'w' }, + { keys: ['d/4', 'e/4', 'f/4'], duration: 'h' }, + { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: 'q' }, + { keys: ['e/3', 'b/3', 'c/4', 'e/4', 'f/4', 'g/5', 'a/5'], duration: '8' }, + { keys: ['a/3', 'c/4', 'e/4', 'g/4', 'a/4', 'b/4'], duration: '16' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32' }, + { keys: ['c/4', 'e/4', 'a/4', 'a/4'], duration: '64' }, + { keys: ['g/3', 'c/4', 'd/4', 'e/4'], duration: 'h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['d/4', 'e/4', 'f/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'd/4', 'e/4', 'f/4', 'g/4', 'a/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { + keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6', 'e/6'], + duration: '64', + stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN, + }, + ]; + options.assert.expect(noteStructs.length * 2); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 45); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawHarmonicAndMuted(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 1000, 180); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 950); + stave.setContext(ctx); + stave.draw(); + const noteStructs = [ + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + ]; + options.assert.expect(noteStructs.length * 2); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, i * 25 + 5); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawSlash(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 700, 180); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 650); + stave.setContext(ctx); + stave.draw(); + const notes = [ + { keys: ['b/4'], duration: '1/2s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: 'ws', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: 'hs', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: 'qs', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '16s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '32s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '64s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '128s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '1/2s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: 'ws', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: 'hs', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: 'qs', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '16s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '32s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '64s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '128s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + // Beam + { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + ]; + const stave_notes = notes.map((struct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote(struct)); + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam([stave_notes[16], stave_notes[17]]); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam([stave_notes[18], stave_notes[19]]); + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, stave_notes, false); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + options.assert.ok('Slash Note Heads'); +} +function drawKeyStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + ctx.scale(3, 3); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 0, 100); + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' }) + .setStave(stave) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 1) + .setKeyStyle(1, { shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue' }); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok(note.getX() > 0, 'Note has X value'); + options.assert.ok(note.getYs().length > 0, 'Note has Y values'); +} +function drawNoteStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 0, 100); + ctx.scale(3, 3); + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' }) + .setStave(stave) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 1); + note.setStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok(note.getX() > 0, 'Note has X value'); + options.assert.ok(note.getYs().length > 0, 'Note has Y values'); +} +function drawNoteStemStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 0, 100); + ctx.scale(3, 3); + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' }) + .setStave(stave) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 1); + note.setStemStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok('Note Stem Style'); +} +function drawNoteStemLengths(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 975, 150); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); + stave.setContext(ctx).draw(); + const keys = [ + 'e/3', + 'f/3', + 'g/3', + 'a/3', + 'b/3', + 'c/4', + 'd/4', + 'e/4', + 'f/4', + 'g/4', + 'f/5', + 'g/5', + 'a/5', + 'b/5', + 'c/6', + 'd/6', + 'e/6', + 'f/6', + 'g/6', + 'a/6', + ]; + const notes = []; + let note; + let i; + for (i = 0; i < keys.length; i++) { + let duration = 'q'; + if (i % 2 === 1) { + duration = '8'; + } + note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: [keys[i]], duration, auto_stem: true }).setStave(stave); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note); + note.setContext(ctx); + notes.push(note); + } + const whole_keys = ['e/3', 'a/3', 'f/5', 'a/5', 'd/6', 'a/6']; + for (i = 0; i < whole_keys.length; i++) { + note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: [whole_keys[i]], duration: 'w' }).setStave(stave); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note); + note.setContext(ctx); + notes.push(note); + } + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok('Note Stem Length'); +} +function drawNoteStylesWithFlag(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 0, 100); + ctx.scale(3, 3); + const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' }) + .setStave(stave) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 1); + note.setFlagStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok(note.getX() > 0, 'Note has X value'); + options.assert.ok(note.getYs().length > 0, 'Note has Y values'); +} +function drawBeamStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 160); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 380); + stave.setStyle({ strokeStyle: '#EEAAEE', lineWidth: 3 }); + stave.setContext(ctx); + stave.draw(); + const notes = [ + // beam1 + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + // should be unstyled... + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + // beam2 should also be unstyled + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + // beam3 + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, + // beam4 + { keys: ['d/6'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + { keys: ['c/6', 'd/6'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + // unbeamed + { keys: ['d/6', 'e/6'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + // unbeamed, unstyled + { keys: ['e/6', 'f/6'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, + ]; + const staveNotes = notes.map((note) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote(note)); + const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes.slice(0, 2)); + const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes.slice(3, 5)); + const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes.slice(5, 7)); + const beam4 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes.slice(7, 9)); + // stem, key, ledger, flag; beam.setStyle + beam1.setStyle({ fillStyle: 'blue', strokeStyle: 'blue' }); + staveNotes[0].setKeyStyle(0, { fillStyle: 'purple' }); + staveNotes[0].setStemStyle({ strokeStyle: 'green' }); + staveNotes[1].setStemStyle({ strokeStyle: 'orange' }); + staveNotes[1].setKeyStyle(0, { fillStyle: 'darkturquoise' }); + staveNotes[5].setStyle({ fillStyle: 'tomato', strokeStyle: 'tomato' }); + beam3.setStyle({ shadowBlur: 4, shadowColor: 'blue' }); + staveNotes[9].setLedgerLineStyle({ fillStyle: 'lawngreen', strokeStyle: 'lawngreen', lineWidth: 1 }); + staveNotes[9].setFlagStyle({ fillStyle: 'orange', strokeStyle: 'orange' }); + _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, staveNotes, false); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + beam3.setContext(ctx).draw(); + beam4.setContext(ctx).draw(); + options.assert.ok('draw beam styles'); +} +function dotsAndFlagsStemUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + ctx.scale(1.0, 1.0); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); + const notes = [ + staveNote({ keys: ['f/4'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '32' }), + staveNote({ keys: ['g/4'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach(notes, { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach([notes[5], notes[11]], { all: true }); + stave.setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + draw(notes[i], stave, ctx, i * 65); + } + options.assert.ok(true, 'Full Dot'); +} +function dotsAndFlagsStemDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 160); + ctx.scale(1.0, 1.0); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); + const staveNotes = [ + staveNote({ keys: ['e/5'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach(staveNotes, { all: true }); + stave.setContext(ctx).draw(); + for (let i = 0; i < staveNotes.length; ++i) { + draw(staveNotes[i], stave, ctx, i * 65); + } + options.assert.ok(true, 'Full Dot'); +} +function dotsAndBeamsUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + ctx.scale(1.0, 1.0); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); + const staveNotes = [ + staveNote({ keys: ['f/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['f/4'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '32' }), + staveNote({ keys: ['g/4'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + staveNote({ keys: ['g/4'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach(staveNotes, { all: true }); + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach([staveNotes[4], staveNotes[9]], { all: true }); + const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes); + stave.setContext(ctx).draw(); + for (let i = 0; i < staveNotes.length; ++i) { + draw(staveNotes[i], stave, ctx, i * 65); + } + beam.setContext(ctx).draw(); + options.assert.ok(true, 'Full Dot'); +} +function dotsAndBeamsDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 160); + ctx.scale(1.0, 1.0); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); + const staveNotes = [ + staveNote({ keys: ['e/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), + ]; + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach(staveNotes, { all: true }); + const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes); + stave.setContext(ctx).draw(); + for (let i = 0; i < staveNotes.length; ++i) { + draw(staveNotes[i], stave, ctx, i * 65); + } + beam.setContext(ctx).draw(); + options.assert.ok(true, 'Full Dot'); +} +function noteHeadsSimple(options) { + const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 250); + const score = vf.EasyScore(); + const system1 = vf.System({ y: 100, x: 50, width: 200 }); + system1 + .addStave({ + voices: [ + score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]), + score.voice(score.notes('g4/w')), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + const system2 = vf.System({ y: 100, x: 250, width: 150 }); + system2.addStave({ + voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(score.notes('b4/w'))], + }); + const system3 = vf.System({ y: 100, x: 400, width: 150 }); + system3.addStave({ + voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))], + }); + const system4 = vf.System({ y: 100, x: 550, width: 150 }); + system4.addStave({ + voices: [ + score.voice(score.notes('e4/q, e4/q/r, e4/h/r')), + score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r')), + ], + }); + vf.draw(); + options.assert.expect(0); +} +function noPadding(options) { + const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 500); + const score = vf.EasyScore(); + function newStave(y, noPadding) { + let system = vf.System({ y, x: 50, width: 200, noPadding }); + system + .addStave({ + voices: [ + score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q, a4/h')]), + score.voice(score.notes('g4/w')), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system = vf.System({ y, x: 250, width: 150, noPadding }); + system.addStave({ + voices: [score.voice(score.notes('b4/h, b4/h')), score.voice(score.notes('b4/w'))], + }); + system = vf.System({ y, x: 400, width: 150, noPadding }); + system.addStave({ + voices: [score.voice(score.notes('d5/h, d5/h')), score.voice(score.notes('e4/w'))], + }); + system = vf.System({ y, x: 550, width: 150, noPadding }); + system.addStave({ + voices: [score.voice(score.notes('e4/q, e4/q, e4/h')), score.voice(score.notes('e4/8, e4/8, e4/q, e4/h'))], + }); + } + newStave(100, true); + newStave(200, false); + vf.draw(); + options.assert.expect(0); +} +function noteHeadsHidden(options) { + const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 250); + const score = vf.EasyScore(); + const system1 = vf.System({ y: 100, x: 50, width: 200 }); + const notes1 = score.notes('g4/w'); + notes1[0].render_options.draw = false; + system1 + .addStave({ + voices: [ + score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]), + score.voice(notes1), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + const system2 = vf.System({ y: 100, x: 250, width: 150 }); + const notes2 = score.notes('b4/w'); + notes2[0].render_options.draw = false; + system2.addStave({ + voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(notes2)], + }); + const system3 = vf.System({ y: 100, x: 400, width: 150 }); + system3.addStave({ + voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))], + }); + const system4 = vf.System({ y: 100, x: 550, width: 150 }); + const notes4 = score.notes('e4/q, e4/q/r, e4/h/r'); + notes4[0].render_options.draw = false; + notes4[2].render_options.draw = false; + system4.addStave({ + voices: [score.voice(notes4), score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r'))], + }); + vf.draw(); + options.assert.expect(0); +} +function centerAlignedRest(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + const note = f.StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedRestFermata(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + const note = f + .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }) + .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a@a').setPosition(3), 0); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedRestAnnotation(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + const note = f + .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('Whole measure rest').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP), 0); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedNoteMultiModifiers(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + function newFinger(num, pos) { + return new _src_frethandfinger__WEBPACK_IMPORTED_MODULE_9__.FretHandFinger(num).setPosition(pos); + } + const note = f + .StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', align_center: true }) + .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('Test').setPosition(3), 0) + .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_16__.Stroke(2)) + .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 1) + .addModifier(newFinger('3', _src_modifier__WEBPACK_IMPORTED_MODULE_10__.Modifier.Position.LEFT), 0) + .addModifier(newFinger('2', _src_modifier__WEBPACK_IMPORTED_MODULE_10__.Modifier.Position.LEFT), 2) + .addModifier(newFinger('1', _src_modifier__WEBPACK_IMPORTED_MODULE_10__.Modifier.Position.RIGHT), 1) + .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_15__.StringNumber('4').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_10__.Modifier.Position.BELOW), 2); + _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach([note], { all: true }); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedMultiVoice(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('3/8'); + // Set a custom duration of 3 / 8. + const custom_duration = new _src_fraction__WEBPACK_IMPORTED_MODULE_8__.Fraction(3, 8); + // TODO: Should the whole rest draw a ledger line that is visible to the left/right of the rest? + const notes0 = [ + f.StaveNote({ + keys: ['c/4'], + duration: '1r', + align_center: true, + duration_override: custom_duration, + }), + ]; + const createStaveNote = (struct) => f.StaveNote(struct); + const notes1 = [ + { keys: ['b/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + ].map(createStaveNote); + notes1[1].addModifier(f.Accidental({ type: '#' }), 0); + f.Beam({ notes: notes1 }); + const voice0 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes0); + const voice1 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes1); + f.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); + f.draw(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveNoteTests); + + + +/***/ }), + +/***/ "./tests/stavetie_tests.ts": +/*!*********************************!*\ + !*** ./tests/stavetie_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveTieTests": () => (/* binding */ StaveTieTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// StaveTie Tests + + +const StaveTieTests = { + Start() { + QUnit.module('StaveTie'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple StaveTie', simple); + run('Chord StaveTie', chord); + run('Stem Up StaveTie', stemUp); + run('No End Note With Clef', noEndNote1); + run('No End Note', noEndNote2); + run('No Start Note With Clef', noStartNote1); + run('No Start Note', noStartNote2); + run('Set Direction Down', setDirectionDown); + run('Set Direction Up', setDirectionUp); + }, +}; +/** + * Used by the 7 tests below to set up the stave, easyscore, notes, voice, and to format & draw. + */ +function createTest(notesData, setupTies) { + return (options) => { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 300); + const stave = factory.Stave(); + const score = factory.EasyScore(); + const notes = score.notes(notesData[0], notesData[1]); + const voice = score.voice(notes); + // const tickables = voice.getTickables(); // same as the notes that we passed in. + setupTies(factory, notes, stave); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + options.assert.ok(true); + }; +} +const simple = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + }); +}); +const chord = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1, 2], + last_indices: [0, 1, 2], + }); +}); +const stemUp = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'up' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1, 2], + last_indices: [0, 1, 2], + }); +}); +const noEndNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => { + stave.addEndClef('treble'); + f.StaveTie({ + from: notes[1], + first_indices: [2], + last_indices: [2], + text: 'slow.', + }); +}); +const noEndNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[1], + first_indices: [2], + last_indices: [2], + text: 'slow.', + }); +}); +const noStartNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => { + stave.addClef('treble'); + f.StaveTie({ + to: notes[0], + first_indices: [2], + last_indices: [2], + text: 'H', + }); +}); +const noStartNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + to: notes[0], + first_indices: [2], + last_indices: [2], + text: 'H', + }); +}); +const setDirectionDown = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + options: { direction: _src_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN }, + }); +}); +const setDirectionUp = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + options: { direction: _src_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP }, + }); +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveTieTests); + + + +/***/ }), + +/***/ "./tests/stringnumber_tests.ts": +/*!*************************************!*\ + !*** ./tests/stringnumber_tests.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StringNumberTests": () => (/* binding */ StringNumberTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); +/* harmony import */ var _src_renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/renderer */ "./src/renderer.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_strokes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/strokes */ "./src/strokes.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// StringNumber Tests + + + + + + +const StringNumberTests = { + Start() { + QUnit.module('StringNumber'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('String Number In Notation', drawMultipleMeasures); + run('String Number In Notation - no circle', drawMultipleMeasures, { drawCircle: false }); + run('Fret Hand Finger In Notation', drawFretHandFingers); + run('Multi Voice With Strokes, String & Finger Numbers', multi); + run('Complex Measure With String & Finger Numbers', drawAccidentals); + run('Shifted Notehead, Multiple Modifiers', shiftedNoteheadMultipleModifiers); + }, +}; +function drawMultipleMeasures(options) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y; + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 775, 200); + const score = f.EasyScore(); + // bar 1 + const stave1 = f.Stave({ width: 300 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE).addClef('treble'); + const notes1 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/4, (c4 f4 g4)/4', { stem: 'down' }); + notes1[0] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_a = options.params) === null || _a === void 0 ? void 0 : _a.drawCircle), 0) + .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_b = options.params) === null || _b === void 0 ? void 0 : _b.drawCircle), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_c = options.params) === null || _c === void 0 ? void 0 : _c.drawCircle), 2); + notes1[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_d = options.params) === null || _d === void 0 ? void 0 : _d.drawCircle), 0) + .addModifier(f.Accidental({ type: '#' }).setAsCautionary(), 1) + .addModifier(f + .StringNumber({ number: '3', position: 'above' }, (_e = options.params) === null || _e === void 0 ? void 0 : _e.drawCircle) + .setLastNote(notes1[3]) + .setLineEndType(_src_renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN), 2); + notes1[2] + .addModifier(f.StringNumber({ number: '5', position: 'left' }, (_f = options.params) === null || _f === void 0 ? void 0 : _f.drawCircle), 0) + .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_g = options.params) === null || _g === void 0 ? void 0 : _g.drawCircle), 2) + .addModifier(f.Accidental({ type: '#' }), 1); + notes1[3] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_h = options.params) === null || _h === void 0 ? void 0 : _h.drawCircle).setOffsetY(7), 0) + .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_j = options.params) === null || _j === void 0 ? void 0 : _j.drawCircle).setOffsetY(6), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_k = options.params) === null || _k === void 0 ? void 0 : _k.drawCircle).setOffsetY(-6), 2); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + // bar 2 - juxtaposing second bar next to first bar + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE); + const notes2 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'up' }); + notes2[0] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_l = options.params) === null || _l === void 0 ? void 0 : _l.drawCircle), 0) + .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_m = options.params) === null || _m === void 0 ? void 0 : _m.drawCircle), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_o = options.params) === null || _o === void 0 ? void 0 : _o.drawCircle), 2); + notes2[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_p = options.params) === null || _p === void 0 ? void 0 : _p.drawCircle), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f + .StringNumber({ number: '3', position: 'above' }, (_q = options.params) === null || _q === void 0 ? void 0 : _q.drawCircle) + .setLastNote(notes2[3]) + .setDashed(false), 2); + notes2[2] + .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_r = options.params) === null || _r === void 0 ? void 0 : _r.drawCircle), 2) + .addModifier(f.Accidental({ type: '#' }), 1); + notes2[3] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_s = options.params) === null || _s === void 0 ? void 0 : _s.drawCircle).setOffsetY(7), 0) + .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_t = options.params) === null || _t === void 0 ? void 0 : _t.drawCircle).setOffsetY(6), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_u = options.params) === null || _u === void 0 ? void 0 : _u.drawCircle).setOffsetY(-6), 2); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + // bar 3 - juxtaposing third bar next to second bar + const stave3 = f + .Stave({ x: stave2.getWidth() + stave2.getX(), y: stave2.getY(), width: 150 }) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + const notesBar3 = score.notes('(c4 e4 g4 a4)/1.'); + notesBar3[0] + .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_v = options.params) === null || _v === void 0 ? void 0 : _v.drawCircle), 0) + .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_w = options.params) === null || _w === void 0 ? void 0 : _w.drawCircle), 1) + .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_x = options.params) === null || _x === void 0 ? void 0 : _x.drawCircle), 2) + .addModifier(f.StringNumber({ number: '2', position: 'above' }, (_y = options.params) === null || _y === void 0 ? void 0 : _y.drawCircle), 3); + const voice3 = score.voice(notesBar3, { time: '6/4' }); + f.Formatter().joinVoices([voice3]).formatToStave([voice3], stave3); + f.draw(); + options.assert.ok(true, 'String Number'); +} +function drawFretHandFingers(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 725, 200); + const score = f.EasyScore(); + // bar 1 + const stave1 = f.Stave({ width: 350 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE).addClef('treble'); + const notes1 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'down' }); + notes1[0] + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); + notes1[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); + notes1[2] + .addModifier(f.Fingering({ number: '3', position: 'below' }), 0) + .addModifier(f.Fingering({ number: '4', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'above' }), 2) + .addModifier(f.Accidental({ type: '#' }), 1); + notes1[3] + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0) + .addModifier(f.Fingering({ number: '4', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1) + .addModifier(f.Fingering({ number: '0', position: 'right' }).setOffsetY(-5), 2) + .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + // bar 2 - juxtaposing second bar next to first bar + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 350 }) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); + const notes2 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/8, (c4 f4 g4)/4.[stem="down"]', { + stem: 'up', + }); + notes2[0] + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'above' }), 2); + notes2[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); + notes2[2] + .addModifier(f.Fingering({ number: '3', position: 'below' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '1', position: 'right' }), 2) + .addModifier(f.Accidental({ type: '#' }), 2); + notes2[3] + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0) + .addModifier(f.Fingering({ number: '4', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1) + .addModifier(f.Fingering({ number: '1', position: 'right' }).setOffsetY(-6), 2) + .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'String Number'); +} +function multi(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 200); + const score = f.EasyScore(); + const stave = f.Stave(); + const notes1 = score.notes('(c4 e4 g4)/4, (a3 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' }); + notes1[0] + .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_5__.Stroke(5)) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) + .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2); + notes1[1] + .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_5__.Stroke(6)) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2); + notes1[2] + .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_5__.Stroke(2)) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '0', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) + .addModifier(f.Fingering({ number: '1', position: 'left' }), 2) + .addModifier(f.StringNumber({ number: '3', position: 'right' }), 2); + notes1[3] + .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_5__.Stroke(1)) + .addModifier(f.StringNumber({ number: '3', position: 'left' }), 2) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1); + const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' }); + notes2[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.StringNumber({ number: '6', position: 'below' }), 0); + notes2[2].addModifier(f.Accidental({ type: '#' }), 0); + notes2[4].addModifier(f.Fingering({ number: '0', position: 'left' }), 0); + // Position string number 6 beneath the strum arrow: left (15) and down (18) + notes2[4].addModifier(f.StringNumber({ number: '6', position: 'left' }).setOffsetX(15).setOffsetY(18), 0); + // Important Note: notes2 must come first, otherwise ledger lines from notes2 will be drawn on top of notes from notes1! + // BUG: VexFlow draws TWO ledger lines for middle C, because both notes1 and notes2 require the middle C ledger line. + const voices = [score.voice(notes2), score.voice(notes1)]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + f.draw(); + options.assert.ok(true, 'Strokes Test Multi Voice'); +} +function drawAccidentals(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750); + const glyphScale = 39; // default font scale + const clefWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('gClef', glyphScale); // widest clef + const notes = [ + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }), + ]; + notes[0] + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 3) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Fingering({ number: '2', position: 'right' }), 4) + .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 5) + .addModifier(f.Accidental({ type: '#' }), 5); + notes[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Accidental({ type: '#' }), 5); + notes[2] + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 3) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Fingering({ number: '2', position: 'right' }), 4) + .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 5) + .addModifier(f.Accidental({ type: '#' }), 5); + notes[3] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Accidental({ type: '#' }), 5); + const voice = f.Voice().addTickables(notes); + const ctx = f.getContext(); + const formatter = f.Formatter().joinVoices([voice]); + const stavePadding = clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 10; + const nwidth = Math.max(formatter.preCalculateMinTotalWidth([voice]), 490 - stavePadding); + formatter.format([voice], nwidth); + const stave = f + .Stave({ x: 0, y: 0, width: nwidth + stavePadding }) + .setContext(ctx) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE) + .addClef('treble') + .draw(); + voice.draw(ctx, stave); + options.assert.ok(true, 'String Number'); +} +function shiftedNoteheadMultipleModifiers(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900, 150); + const score = f.EasyScore(); + score.set({ time: '6/4' }); + const stave = f.Stave({ width: 900 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END).addClef('treble'); + const notes = ['A4 B4', 'B4 C5', 'A4 B#4', 'B4 C#5', 'A#4 B#4', 'B#4 C#5'] + .map((keys) => score.notes(`(${keys})/q`)) + .flat(); + notes.forEach((note) => { + note + .addModifier(f.StringNumber({ number: '2', position: 'left' }, true), 1) + .addModifier(f.StringNumber({ number: '2', position: 'right' }, true), 1); + }); + const voice = score.voice(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'String Number'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StringNumberTests); + + + +/***/ }), + +/***/ "./tests/strokes_tests.ts": +/*!********************************!*\ + !*** ./tests/strokes_tests.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StrokesTests": () => (/* binding */ StrokesTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Strokes Tests + + +const StrokesTests = { + Start() { + QUnit.module('Strokes'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + // TODO: Rename tests by removing 'Strokes - ' since it is redundant with the module name. + // This will make flow.html easier to read. + run('Strokes - Brush/Roll/Rasquedo', brushRollRasquedo); + run('Strokes - Arpeggio directionless (without arrows)', arpeggioDirectionless); + run('Strokes - Multi Voice', multiVoice); + run('Strokes - Notation and Tab', notesWithTab); + run('Strokes - Multi-Voice Notation and Tab', multiNotationAndTab); + }, +}; +function brushRollRasquedo(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const score = f.EasyScore(); + // bar 1 + const stave1 = f.Stave({ width: 250 }).setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes1 = score.notes('(a3 e4 a4)/4, (c4 e4 g4), (c4 e4 g4), (c4 e4 g4)', { stem: 'up' }); + notes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + notes1[1] + .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 0); + notes1[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + notes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + // bar 2 + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes2 = score.notes('(c4 d4 g4)/4, (c4 d4 g4), (c4 d4 g4), (c4 d4 a4)', { stem: 'up' }); + notes2[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3)); + notes2[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(4)); + notes2[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(5)); + notes2[3] + .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)) + .addModifier(f.Accidental({ type: 'bb' }), 0) + .addModifier(f.Accidental({ type: 'bb' }), 1) + .addModifier(f.Accidental({ type: 'bb' }), 2); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'Brush/Roll/Rasquedo'); +} +function arpeggioDirectionless(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 200); + const score = f.EasyScore(); + // bar 1 + const stave1 = f.Stave({ x: 100, width: 500 }).setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes1 = score.notes('(g4 b4 d5)/4, (g4 b4 d5 g5), (g4 b4 d5 g5), (g4 b4 d5)', { stem: 'up' }); + const graceNoteStructs = [ + { keys: ['e/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + ]; + const graceNotes = graceNoteStructs.map((graceNoteStruct) => f.GraceNote(graceNoteStruct)); + const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes, slur: false }); + graceNoteGroup.beamNotes(); + notes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(7)); + notes1[1] + .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(7)) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 3); + notes1[2] + .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(7)) + .addModifier(f.Accidental({ type: 'b' }), 1) + .addModifier(graceNoteGroup, 0); + notes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(7)).addModifier(f.NoteSubGroup({ + notes: [f.ClefNote({ type: 'treble', options: { size: 'default', annotation: '8va' } })], + }), 0); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + f.draw(); + options.assert.ok(true, 'Arpeggio directionless (without arrows)'); +} +function multiVoice(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const score = f.EasyScore(); + const stave = f.Stave(); + const notes1 = score.notes('(c4 e4 g4)/4, (c4 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' }); + notes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(5)); + notes1[1] + .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 2); + notes1[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)); + notes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' }); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + const voices = [notes1, notes2].map((notes) => score.voice(notes)); + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Strokes Test Multi Voice'); +} +function multiNotationAndTab(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 275); + const score = f.EasyScore(); + const stave = f.Stave().addClef('treble'); + // notation upper voice notes + const notes1 = score.notes('(g4 b4 e5)/4, (g4 b4 e5), (g4 b4 e5), (g4 b4 e5)', { stem: 'up' }); + notes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3, { all_voices: false })); + notes1[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)); + notes1[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2, { all_voices: false })); + notes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + const notes2 = score.notes('g3/4, g3, g3, g3', { stem: 'down' }); + f.TabStave({ y: 100 }).addClef('tab').setNoteStartX(stave.getNoteStartX()); + // tablature upper voice notes + const tabNotes1 = [ + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + ]; + tabNotes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3, { all_voices: false })); + tabNotes1[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)); + tabNotes1[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2, { all_voices: false })); + tabNotes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + const tabNotes2 = [ + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + ]; + const voices = [notes1, notes2, tabNotes1, tabNotes2].map((notes) => score.voice(notes)); + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Strokes Test Notation & Tab Multi Voice'); +} +/* +function drawTabStrokes(options: TestOptions): void { + const f = VexFlowTests.makeFactory(options, 600, 200); + const stave1 = f.TabStave({ width: 250 }).setEndBarType(Barline.type.DOUBLE); + + const tabNotes1 = [ + f.TabNote({ + positions: [ + { str: 2, fret: 8 }, + { str: 3, fret: 9 }, + { str: 4, fret: 10 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 7 }, + { str: 4, fret: 8 }, + { str: 5, fret: 9 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 1, fret: 5 }, + { str: 2, fret: 6 }, + { str: 3, fret: 7 }, + { str: 4, fret: 7 }, + { str: 5, fret: 5 }, + { str: 6, fret: 5 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 4, fret: 3 }, + { str: 5, fret: 4 }, + { str: 6, fret: 5 }, + ], + duration: '4', + }), + ]; + + tabNotes1[0].addStroke(0, new Stroke(1)); + tabNotes1[1].addStroke(0, new Stroke(2)); + tabNotes1[2].addStroke(0, new Stroke(3)); + tabNotes1[3].addStroke(0, new Stroke(4)); + + const tabVoice1 = f.Voice().addTickables(tabNotes1); + + f.Formatter().joinVoices([tabVoice1]).formatToStave([tabVoice1], stave1); + + // bar 2 + const stave2 = f.TabStave({ x: stave1.getWidth() + stave1.getX(), width: 300 }).setEndBarType(Barline.type.DOUBLE); + + const tabNotes2 = [ + f.TabNote({ + positions: [ + { str: 2, fret: 7 }, + { str: 3, fret: 8 }, + { str: 4, fret: 9 }, + ], + duration: '2', + }), + f.TabNote({ + positions: [ + { str: 1, fret: 5 }, + { str: 2, fret: 6 }, + { str: 3, fret: 7 }, + { str: 4, fret: 7 }, + { str: 5, fret: 5 }, + { str: 6, fret: 5 }, + ], + duration: '2', + }), + ]; + + tabNotes2[0].addStroke(0, new Stroke(6)); + tabNotes2[1].addStroke(0, new Stroke(5)); + + const tabVoice2 = f.Voice().addTickables(tabNotes2); + + f.Formatter().joinVoices([tabVoice2]).formatToStave([tabVoice2], stave2); + + f.draw(); + + options.assert.ok(true, 'Strokes Tab test'); +} +*/ +function notesWithTab(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 300); + const stave = f.Stave({ x: 15, y: 40, width: 450 }).addClef('treble'); + const notes = [ + f + .StaveNote({ keys: ['b/4', 'd/5', 'g/5'], stem_direction: -1, duration: '4' }) + .addModifier(f.Accidental({ type: 'b' }), 1) + .addModifier(f.Accidental({ type: 'b' }), 0), + f.StaveNote({ keys: ['c/5', 'd/5'], stem_direction: -1, duration: '4' }), + f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }), + f + .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'e/5', 'a/5'], stem_direction: 1, duration: '8' }) + .addModifier(f.Accidental({ type: '#' }), 3), + f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }), + f + .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'f/5', 'a/5'], stem_direction: 1, duration: '8' }) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Accidental({ type: '#' }), 4), + ]; + const tabstave = f + .TabStave({ x: stave.getX(), y: 140, width: 450 }) + .addClef('tab') + .setNoteStartX(stave.getNoteStartX()); + const tabNotes = [ + f + .TabNote({ + positions: [ + { str: 1, fret: 3 }, + { str: 2, fret: 2 }, + { str: 3, fret: 3 }, + ], + duration: '4', + }) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('Full'), 0), + f + .TabNote({ + positions: [ + { str: 2, fret: 3 }, + { str: 3, fret: 5 }, + ], + duration: '4', + }) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('Unison'), 1), + f.TabNote({ + positions: [ + { str: 3, fret: 7 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 7 }, + ], + duration: '8', + }), + f.TabNote({ + positions: [ + { str: 1, fret: 5 }, + { str: 2, fret: 5 }, + { str: 3, fret: 6 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 5 }, + ], + duration: '8', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 7 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 7 }, + ], + duration: '8', + }), + f.TabNote({ + positions: [ + { str: 1, fret: 5 }, + { str: 2, fret: 5 }, + { str: 3, fret: 6 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 5 }, + ], + duration: '8', + }), + ]; + notes[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + notes[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)); + notes[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3)); + notes[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(4)); + notes[4].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(5)); + notes[5].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)); + tabNotes[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); + tabNotes[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)); + tabNotes[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3)); + tabNotes[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(4)); + tabNotes[4].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(5)); + tabNotes[5].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)); + f.StaveConnector({ + top_stave: stave, + bottom_stave: tabstave, + type: 'bracket', + }); + f.StaveConnector({ + top_stave: stave, + bottom_stave: tabstave, + type: 'single', + }); + const voice = f.Voice().addTickables(notes); + const tabVoice = f.Voice().addTickables(tabNotes); + const beams = _src_index__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).formatToStave([voice, tabVoice], stave); + f.draw(); + beams.forEach(function (beam) { + beam.setContext(f.getContext()).draw(); + }); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StrokesTests); + + + +/***/ }), + +/***/ "./tests/style_tests.ts": +/*!******************************!*\ + !*** ./tests/style_tests.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StyleTests": () => (/* binding */ StyleTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); +/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_keysignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _src_notesubgroup__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _src_ornament__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/ornament */ "./src/ornament.ts"); +/* harmony import */ var _src_stavemodifier__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _src_strokes__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/strokes */ "./src/strokes.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_timesignature__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/timesignature */ "./src/timesignature.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Style Tests +// TODO: The .addStroke(0, new Stroke(...)) in the tab test case shows a NO GLYPH for the Petaluma font. +// TODO: Changing ctx.font seems to have no effect in the tab test case. Should it? +// Annotation sets its own font. +// TabNote sets its own font. +// Is there a way to set all the text fonts in one go? + + + + + + + + + + + + + +const StyleTests = { + Start() { + QUnit.module('Style'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Basic Style', stave); + run('TabNote modifiers Style', tab); + }, +}; +/** + * Helper function to create a ElementStyle options object of the form { fillStyle: XXX, strokeStyle: YYY }. + * Used for updating the fillStyle and optionally the strokeStyle. + */ +function FS(fillStyle, strokeStyle) { + const ret = { fillStyle }; + if (strokeStyle) { + ret.strokeStyle = strokeStyle; + } + return ret; +} +/** + * Color elements on a stave. + */ +function stave(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 150); + const stave = f.Stave({ x: 25, y: 20, width: 500 }); + // Stave modifiers test. + const keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_5__.KeySignature('D'); + keySig.addToStave(stave); + keySig.setStyle(FS('blue')); + stave.addTimeSignature('4/4'); + const timeSig = stave.getModifiers(_src_stavemodifier__WEBPACK_IMPORTED_MODULE_8__.StaveModifierPosition.BEGIN, _src_timesignature__WEBPACK_IMPORTED_MODULE_12__.TimeSignature.CATEGORY); + timeSig[0].setStyle(FS('brown')); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }), + f.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '8' }), + // voice.draw() test. + f.TextDynamics({ text: 'sfz', duration: '16' }).setStyle(FS('blue')), + // GhostNote modifiers test. + f.GhostNote({ duration: '16' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('GhostNote green text').setStyle(FS('green')), 0), + ]; + const notes0 = notes[0]; + const notes1 = notes[1]; + notes0.setKeyStyle(0, FS('red')); + notes1.setKeyStyle(0, FS('red')); + // StaveNote modifiers test. + const mods1 = notes1.getModifiers(); + mods1[0].setStyle(FS('green')); + notes0.addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(4).setStyle(FS('green')), 0); + notes0.addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_7__.Ornament('mordent').setStyle(FS('lightgreen')), 0); + notes1.addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('blue').setStyle(FS('blue')), 0); + notes1.addModifier(new _src_notesubgroup__WEBPACK_IMPORTED_MODULE_6__.NoteSubGroup([f.ClefNote({ options: { size: 'small' } }).setStyle(FS('blue'))]), 0); + const voice = f.Voice().addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Basic Style'); +} +/** + * Color elements on a guitar tab. + */ +function tab(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 140); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_11__.TabStave(10, 10, 450).addTabGlyph(); + stave.getModifiers()[2].setStyle(FS('blue')); + stave.setContext(ctx).draw(); + const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_10__.TabNote(noteStruct); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('green text').setStyle(FS('green')), 0), + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }) + .addModifier(new _src_bend__WEBPACK_IMPORTED_MODULE_3__.Bend('Full').setStyle(FS('brown')), 0) + .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_9__.Stroke(1, { all_voices: false }).setStyle(FS('blue'))), + ]; + _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'TabNote Modifiers Style'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StyleTests); + + + +/***/ }), + +/***/ "./tests/tabnote_tests.ts": +/*!********************************!*\ + !*** ./tests/tabnote_tests.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabNoteTests": () => (/* binding */ TabNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TabNote Tests + + + + + + + + + + +const TabNoteTests = { + Start() { + QUnit.module('TabNote'); + QUnit.test('Tick', ticks); + QUnit.test('TabStave Line', tabStaveLine); + QUnit.test('Width', width); + QUnit.test('TickContext', tickContext); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('TabNote Draw', draw); + run('TabNote Stems Up', drawStemsUp); + run('TabNote Stems Down', drawStemsDown); + run('TabNote Stems Up Through Stave', drawStemsUpThrough); + run('TabNote Stems Down Through Stave', drawStemsDownThrough); + run('TabNote Stems with Dots', drawStemsDotted); + }, +}; +function ticks(assert) { + const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.RESOLUTION) / 4; + let note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ positions: [{ str: 6, fret: 6 }], duration: '1' }); + assert.equal(note.getTicks().value(), BEAT * 4, 'Whole note has 4 beats'); + note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ positions: [{ str: 3, fret: 4 }], duration: '4' }); + assert.equal(note.getTicks().value(), BEAT, 'Quarter note has 1 beat'); +} +function tabStaveLine(assert) { + const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ + positions: [ + { str: 6, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '1', + }); + const positions = note.getPositions(); + assert.equal(positions[0].str, 6, 'String 6, Fret 6'); + assert.equal(positions[0].fret, 6, 'String 6, Fret 6'); + assert.equal(positions[1].str, 4, 'String 4, Fret 5'); + assert.equal(positions[1].fret, 5, 'String 4, Fret 5'); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_5__.Stave(10, 10, 300); + note.setStave(stave); + const ys = note.getYs(); + assert.equal(ys.length, 2, 'Chord should be rendered on two lines'); + assert.equal(ys[0], 100, 'Line for String 6, Fret 6'); + assert.equal(ys[1], 80, 'Line for String 4, Fret 5'); +} +function width(assert) { + assert.expect(1); + const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ + positions: [ + { str: 6, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '1', + }); + assert.throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width'); +} +function tickContext(assert) { + const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ + positions: [ + { str: 6, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '1', + }); + const tickContext = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext().addTickable(note).preFormat().setX(10).setPadding(0); + assert.equal(tickContext.getWidth(), 7); +} +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 140); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const notes = [ + { positions: [{ str: 6, fret: 6 }], duration: '4' }, + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 'x' }, + { str: 5, fret: 15 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 'x' }, + { str: 5, fret: 5 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '4', + }, + { + positions: [ + { str: 6, fret: 0 }, + { str: 5, fret: 5 }, + { str: 4, fret: 5 }, + { str: 3, fret: 4 }, + { str: 2, fret: 3 }, + { str: 1, fret: 0 }, + ], + duration: '4', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '4', + }, + ]; + // Helper function + function showNote(noteStruct, stave, ctx, x) { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(noteStruct); + const tickContext = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext(); + tickContext.addTickable(tabNote).preFormat().setX(x); + tabNote.setContext(ctx).setStave(stave); + tabNote.draw(); + return tabNote; + } + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const tabNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(tabNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(tabNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawStemsUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 30, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct); + tabNote.render_options.draw_stem = true; + return tabNote; + }); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +function drawStemsDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.setStemDirection(-1); + return tabNote; + }); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'All objects have been drawn'); +} +function drawStemsUpThrough(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 30, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_stem_through_stave = true; + return tabNote; + }); + ctx.setFont(_src_font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF, 10, _src_font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.BOLD); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +function drawStemsDownThrough(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 250); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550, { num_lines: 8 }); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + { str: 6, fret: 10 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + { str: 5, fret: 5 }, + { str: 7, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_stem_through_stave = true; + tabNote.setStemDirection(-1); + return tabNote; + }); + ctx.setFont('Arial', 10, 'bold'); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'All objects have been drawn'); +} +function drawStemsDotted(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4d', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '4dd', + stem_direction: -1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + stem_direction: -1, + }, + ]; + const notes = specs.map((struct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct, true /* draw_stem */)); + _src_dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes[0], notes[2], notes[2]]); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TabNoteTests); + + + +/***/ }), + +/***/ "./tests/tabslide_tests.ts": +/*!*********************************!*\ + !*** ./tests/tabslide_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabSlideTests": () => (/* binding */ TabSlideTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabslide__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/tabslide */ "./src/tabslide.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TabSlide Tests + + + + + + + +const TabSlideTests = { + Start() { + QUnit.module('TabSlide'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple TabSlide', simple); + run('Slide Up', slideUp); + run('Slide Down', slideDown); + }, +}; +function tieNotes(notes, indices, stave, ctx) { + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).format([voice], 100); + voice.draw(ctx, stave); + const tie = new _src_tabslide__WEBPACK_IMPORTED_MODULE_4__.TabSlide({ + first_note: notes[0], + last_note: notes[1], + first_indices: indices, + last_indices: indices, + }, _src_tabslide__WEBPACK_IMPORTED_MODULE_4__.TabSlide.SLIDE_UP); + tie.setContext(ctx); + tie.draw(); +} +function setupContext(options, width) { + // eslint-disable-next-line + const context = options.contextBuilder(options.elementId, 350, 140); + context.scale(0.9, 0.9); + context.font = '10pt Arial'; + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_5__.TabStave(10, 10, width || 350).addTabGlyph().setContext(context).draw(); + return { context, stave }; +} +// Helper function to create TabNote objects. +const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_3__.TabNote(noteStruct); +/** + * Test Case + */ +function simple(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { stave, context } = setupContext(options); + tieNotes([ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }), + tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }), + ], [0], stave, context); + options.assert.ok(true, 'Simple Test'); +} +/** + * The slideUp and slideDown tests pass in a builder function: TabSlide.createSlideUp | TabSlide.createSlideDown. + */ +function multiTest(options, buildTabSlide) { + const { context, stave } = setupContext(options, 440); + const notes = [ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ + positions: [ + { str: 4, fret: 4 }, + { str: 5, fret: 4 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 4, fret: 6 }, + { str: 5, fret: 6 }, + ], + duration: '8', + }), + tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }), + tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }), + tabNote({ + positions: [ + { str: 2, fret: 14 }, + { str: 3, fret: 14 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 2, fret: 16 }, + { str: 3, fret: 16 }, + ], + duration: '8', + }), + ]; + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).format([voice], 300); + voice.draw(context, stave); + buildTabSlide({ + first_note: notes[0], + last_note: notes[1], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note'); + buildTabSlide({ + first_note: notes[2], + last_note: notes[3], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord'); + buildTabSlide({ + first_note: notes[4], + last_note: notes[5], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note high-fret'); + buildTabSlide({ + first_note: notes[6], + last_note: notes[7], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord high-fret'); +} +function slideUp(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, _src_tabslide__WEBPACK_IMPORTED_MODULE_4__.TabSlide.createSlideUp); +} +function slideDown(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, _src_tabslide__WEBPACK_IMPORTED_MODULE_4__.TabSlide.createSlideDown); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TabSlideTests); + + + +/***/ }), + +/***/ "./tests/tabstave_tests.ts": +/*!*********************************!*\ + !*** ./tests/tabstave_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabStaveTests": () => (/* binding */ TabStaveTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TabStave Tests + + +const TabStaveTests = { + Start() { + QUnit.module('TabStave'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('TabStave Draw Test', draw); + }, +}; +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 160); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_1__.TabStave(10, 10, 300); + stave.setNumLines(6); + stave.setContext(ctx); + stave.draw(); + options.assert.equal(stave.getYForNote(0), 127, 'getYForNote(0)'); + options.assert.equal(stave.getYForLine(5), 127, 'getYForLine(5)'); + options.assert.equal(stave.getYForLine(0), 62, 'getYForLine(0) - Top Line'); + options.assert.equal(stave.getYForLine(4), 114, 'getYForLine(4) - Bottom Line'); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TabStaveTests); + + + +/***/ }), + +/***/ "./tests/tabtie_tests.ts": +/*!*******************************!*\ + !*** ./tests/tabtie_tests.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabTieTests": () => (/* binding */ TabTieTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _src_tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TabTie Tests + + + + + + + + +const TabTieTests = { + Start() { + QUnit.module('TabTie'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple TabTie', simple); + run('Hammerons', simpleHammerOn); + run('Pulloffs', simplePullOff); + run('Tapping', tap); + run('Continuous', continuous); + }, +}; +/** + * Helper function to create TabNote objects. + */ +const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_4__.TabNote(noteStruct); +/** + * Helper function to create a RenderContext and TabStave. + */ +function setupContext(options, w = 0, h = 0) { + // eslint-disable-next-line + const context = options.contextBuilder(options.elementId, w || 350, h || 160); + context.setFont('Arial', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size); + const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_5__.TabStave(10, 10, w || 350).addTabGlyph().setContext(context).draw(); + return { context, stave }; +} +/** + * Helper function to create the TabTie between two Note objects. + */ +function tieNotes(notes, indices, stave, ctx, text) { + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4); + voice.addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter().joinVoices([voice]).format([voice], 100); + voice.draw(ctx, stave); + const tie = new _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie({ + first_note: notes[0], + last_note: notes[1], + first_indices: indices, + last_indices: indices, + }, text !== null && text !== void 0 ? text : 'Annotation'); + tie.setContext(ctx); + tie.draw(); +} +/** + * Two notes on string 4 with a tie drawn between them. + */ +function simple(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { context, stave } = setupContext(options); + const note1 = tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }); + const note2 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }); + tieNotes([note1, note2], [0], stave, context); + options.assert.ok(true, 'Simple Test'); +} +function simpleHammerOn(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie.createHammeron); +} +function simplePullOff(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie.createPulloff); +} +/** + * Helper function for the two test cases above (simpleHammerOn and simplePullOff). + */ +function multiTest(options, createTabTie) { + const { context, stave } = setupContext(options, 440, 140); + const notes = [ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ + positions: [ + { str: 4, fret: 4 }, + { str: 5, fret: 4 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 4, fret: 6 }, + { str: 5, fret: 6 }, + ], + duration: '8', + }), + tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }), + tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }), + tabNote({ + positions: [ + { str: 2, fret: 14 }, + { str: 3, fret: 14 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 2, fret: 16 }, + { str: 3, fret: 16 }, + ], + duration: '8', + }), + ]; + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter().joinVoices([voice]).format([voice], 300); + voice.draw(context, stave); + createTabTie({ + first_note: notes[0], + last_note: notes[1], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note'); + createTabTie({ + first_note: notes[2], + last_note: notes[3], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord'); + createTabTie({ + first_note: notes[4], + last_note: notes[5], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note high-fret'); + createTabTie({ + first_note: notes[6], + last_note: notes[7], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord high-fret'); +} +function tap(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { context, stave } = setupContext(options); + const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('T'), 0); + const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' }); + tieNotes([note1, note2], [0], stave, context, 'P'); + options.assert.ok(true, 'Tapping Test'); +} +function continuous(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { context, stave } = setupContext(options, 440, 140); + const notes = [ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'q' }), + tabNote({ positions: [{ str: 4, fret: 5 }], duration: 'q' }), + tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }), + ]; + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter().joinVoices([voice]).format([voice], 300); + voice.draw(context, stave); + _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie.createHammeron({ + first_note: notes[0], + last_note: notes[1], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie.createPulloff({ + first_note: notes[1], + last_note: notes[2], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Continuous Hammeron'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TabTieTests); + + + +/***/ }), + +/***/ "./tests/textbracket_tests.ts": +/*!************************************!*\ + !*** ./tests/textbracket_tests.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextBracketTests": () => (/* binding */ TextBracketTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TextBracket Tests + +const TextBracketTests = { + Start() { + QUnit.module('TextBracket'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple TextBracket', simple0); + run('TextBracket Styles', simple1); + }, +}; +function simple0(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); + const stave = f.Stave(); + const score = f.EasyScore(); + const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' }); + const voice = score.voice(notes, { time: '5/4' }); + f.TextBracket({ + from: notes[0], + to: notes[4], + text: '15', + options: { + superscript: 'va', + position: 'top', + }, + }); + f.TextBracket({ + from: notes[0], + to: notes[4], + text: '8', + options: { + superscript: 'vb', + position: 'bottom', + line: 3, + }, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function simple1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); + const stave = f.Stave(); + const score = f.EasyScore(); + const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' }); + const voice = score.voice(notes, { time: '5/4' }); + const topOctaves = [ + f.TextBracket({ + from: notes[0], + to: notes[1], + text: 'Cool notes', + options: { + superscript: '', + position: 'top', + }, + }), + f.TextBracket({ + from: notes[2], + to: notes[4], + text: 'Testing', + options: { + position: 'top', + superscript: 'superscript', + // weight & style below can be left undefined. They will fall back to the default defined in textbracket.ts. + font: { family: 'Arial', size: 15, weight: 'normal', style: 'normal' }, + }, + }), + ]; + const bottomOctaves = [ + f.TextBracket({ + from: notes[0], + to: notes[1], + text: '8', + options: { + superscript: 'vb', + position: 'bottom', + line: 3, + font: { size: 30 }, + }, + }), + f.TextBracket({ + from: notes[2], + to: notes[4], + text: 'Not cool notes', + options: { + superscript: ' super uncool', + position: 'bottom', + line: 4, + }, + }), + ]; + topOctaves[1].render_options.line_width = 2; + topOctaves[1].render_options.show_bracket = false; + bottomOctaves[0].render_options.underline_superscript = false; + bottomOctaves[0].setDashed(false); + bottomOctaves[1].render_options.bracket_height = 40; + bottomOctaves[1].setDashed(true, [2, 2]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TextBracketTests); + + + +/***/ }), + +/***/ "./tests/textformatter_tests.ts": +/*!**************************************!*\ + !*** ./tests/textformatter_tests.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextFormatterTests": () => (/* binding */ TextFormatterTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/textformatter */ "./src/textformatter.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TextFormatter Tests + + + +const TextFormatterTests = { + Start() { + QUnit.module('TextFormatter'); + QUnit.test('Basic', basic); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTextTests; + run('Accuracy', accuracy); + run('Box Text', textBoxAccuracy); + }, +}; +function basic(assert) { + var _a; + // See: src/fonts/textfonts.ts > loadTextFonts() + const registeredFamilies = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.getFontFamilies(); + assert.equal(registeredFamilies.length, 5, `There are five registered font families: 'Roboto Slab' & 'PetalumaScript' and default 'Serif', 'Serif-Bold' and 'Sans'`); + // Verify the advanceWidth and other metrics by opening the font file with a glyph inspector: + // https://fontdrop.info/ + // https://opentype.js.org/glyph-inspector.html + const petalumaFormatterInfo = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.getInfo('PetalumaScript'); + assert.equal((_a = petalumaFormatterInfo === null || petalumaFormatterInfo === void 0 ? void 0 : petalumaFormatterInfo.glyphs) === null || _a === void 0 ? void 0 : _a.C.advanceWidth, 623, 'PetalumaScript advanceWidth of C character is 623.'); + const formatterForPetalumaScript = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create({ family: 'PetalumaScript', size: '100px' }); + const metricsPetalumaScriptH = formatterForPetalumaScript.getGlyphMetrics('H'); + assert.equal(metricsPetalumaScriptH.leftSideBearing, 37); + const formatterForRobotoSlab = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create({ family: 'Roboto Slab', size: '100px', style: 'italic' }); + const metricsRobotoSlabH = formatterForRobotoSlab.getGlyphMetrics('H'); + assert.equal(metricsRobotoSlabH.advanceWidth, 1578); + // eslint-disable-next-line + // @ts-ignore direct access to protected variable .cacheKey + assert.equal(formatterForRobotoSlab.cacheKey, 'Roboto_Slab%75%normal%normal'); +} +function accuracy(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 500); + const lineHeight = 30; + const startX = 50; + const fonts = [ + { + family: _src_font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 14, + weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, + }, + { + family: 'Roboto Slab', + size: 14, + weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, + }, + { + family: _src_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, + size: 14, + weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, + style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, + }, + ]; + let startY = 20; + for (let j = 0; j < fonts.length; ++j) { + const font = fonts[j]; + const textFormatter = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(font); + ctx.setFont(font); + const texts = ['AVo(i)a', 'bghjIVex1/2', '@@@@@@@@', 'a very long String with Mixed Case Text,(0123456789)']; + for (let i = 0; i < texts.length; i++) { + ctx.setFillStyle('black'); + ctx.fillText(texts[i], startX, startY); + startY += 5; + ctx.setFillStyle('#3a2'); + ctx.fillRect(startX, startY, textFormatter.getWidthForTextInPx(texts[i]), 2); + ctx.setFillStyle('#32a'); + startY += 5; + ctx.fillRect(startX, startY, ctx.measureText(texts[i]).width, 2); + startY += lineHeight; + } + } + options.assert.ok(true, 'all pass'); +} +function textBoxAccuracy(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 800); + let startY = 35; + const boxBorder = 2; + const boxPadding = 3; + const startX = 50; + const fonts = [ + { + family: _src_font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 14, + weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, + }, + { + family: 'Roboto Slab', + size: 14, + weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, + }, + { + family: _src_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, + size: 14, + weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, + }, + ]; + const texts = ['AVID', 'bghjIVex1/2', '@@@@@@@@']; + for (let j = 0; j < fonts.length; ++j) { + const font = fonts[j]; + const textFormatter = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(font); + ctx.save(); + ctx.setFont(font); + for (let i = 0; i < texts.length; i++) { + const textY = textFormatter.getYForStringInPx(texts[i]); + const height = textY.height + 2 * boxPadding; + const headroom = -1 * textY.yMin; + const width = textFormatter.getWidthForTextInPx(texts[i]) + 2 * boxPadding; + ctx.setFillStyle('black'); + ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding); + ctx.setLineWidth(boxBorder); + ctx.setStrokeStyle('#3a2'); + ctx.setFillStyle('#3a2'); + ctx.beginPath(); + ctx.rect(startX, startY - height + headroom, width, height); + ctx.stroke(); + startY += height * 1.5 + boxBorder * 3; + const measureBox = ctx.measureText(texts[i]); + const mwidth = measureBox.width + boxBorder * 2; + const mheight = measureBox.height + boxBorder * 2; + ctx.setFillStyle('black'); + ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding); + ctx.setStrokeStyle('#32a'); + ctx.setFillStyle('#32a'); + ctx.beginPath(); + ctx.rect(startX, startY - mheight, mwidth, mheight); + ctx.stroke(); + startY += mheight * 1.5 + boxBorder * 3; + } + ctx.restore(); + } + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TextFormatterTests); + + + +/***/ }), + +/***/ "./tests/textnote_tests.ts": +/*!*********************************!*\ + !*** ./tests/textnote_tests.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextNoteTests": () => (/* binding */ TextNoteTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_crescendo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/crescendo */ "./src/crescendo.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); +/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_textnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/textnote */ "./src/textnote.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Text Note Tests + + + + + + + +const TextNoteTests = { + Start() { + QUnit.module('TextNote'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('TextNote Formatting', formatTextNotes); + run('TextNote Formatting 2', formatTextNotes2); + run('TextNote Superscript and Subscript', superscriptAndSubscript); + run('TextNote Formatting With Glyphs 0', formatTextGlyphs0); + run('TextNote Formatting With Glyphs 1', formatTextGlyphs1); + run('Crescendo', crescendo); + run('Text Dynamics', textDynamics); + }, +}; +function formatTextNotes(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: 'q' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]); + const voice2 = score.voice([ + f.TextNote({ text: 'Center Justification', duration: 'h' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + f.TextNote({ text: 'Left Line 1', duration: 'q' }).setLine(1), + f.TextNote({ text: 'Right', duration: 'q' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), + ]); + const formatter = f.Formatter(); + formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function formatTextNotes2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: 'q' }), + ]); + const voice2 = score.voice([ + f.TextNote({ text: 'C', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), + f.TextNote({ text: 'C', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), + f.TextNote({ text: 'C', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), + f.TextNote({ text: 'C', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), + f.TextNote({ text: 'R', duration: 'q' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), + ]); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + voice2.getTickables().forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_4__.Note.plotMetrics(f.getContext(), note, 170)); + f.draw(); + options.assert.ok(true); +} +function superscriptAndSubscript(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: 1, duration: 'q' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: 1, duration: 'q' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]); + const notes2 = [ + f.TextNote({ text: _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode.flat + 'I', superscript: '+5', duration: '8' }), + f.TextNote({ text: 'D' + _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode.sharp + '/F', duration: '4d', superscript: 'sus2' }), + f.TextNote({ text: 'ii', superscript: '6', subscript: '4', duration: '8' }), + f.TextNote({ text: 'C', superscript: _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode.triangle + '7', subscript: '', duration: '8' }), + f.TextNote({ text: 'vii', superscript: _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode["o-with-slash"] + '7', duration: '8' }), + f.TextNote({ text: 'V', superscript: '7', duration: '8' }), + ]; + options.assert.equal(notes2[0].getText(), _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode.flat + 'I', 'TextNote.getText() return .text'); + const voice2 = score.voice(notes2); + voice2.getTickables().forEach((note) => { + const textNote = note; + textNote.setFont({ family: _src_font__WEBPACK_IMPORTED_MODULE_3__.Font.SERIF, size: 15 }); + textNote.setLine(13); + textNote.setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.LEFT); + }); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function formatTextGlyphs0(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + ]); + const voice2 = score.voice([ + f.TextNote({ text: 'Center', duration: '8' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + f.TextNote({ glyph: 'f', duration: '8' }), + f.TextNote({ glyph: 'p', duration: '8' }), + f.TextNote({ glyph: 'm', duration: '8' }), + f.TextNote({ glyph: 'z', duration: '8' }), + f.TextNote({ glyph: 'mordent_upper', duration: '16' }), + f.TextNote({ glyph: 'mordent_lower', duration: '16' }), + f.TextNote({ glyph: 'segno', duration: '8' }), + f.TextNote({ glyph: 'coda', duration: '8' }), + ]); + voice2.getTickables().forEach((n) => n.setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER)); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function formatTextGlyphs1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + ]); + const voice2 = score.voice([ + f.TextNote({ glyph: 'turn', duration: '16' }), + f.TextNote({ glyph: 'turn_inverted', duration: '16' }), + f.TextNote({ glyph: 'pedal_open', duration: '8' }).setLine(10), + f.TextNote({ glyph: 'pedal_close', duration: '8' }).setLine(10), + f.TextNote({ glyph: 'caesura_curved', duration: '8' }).setLine(3), + f.TextNote({ glyph: 'caesura_straight', duration: '8' }).setLine(3), + f.TextNote({ glyph: 'breath', duration: '8' }).setLine(2), + f.TextNote({ glyph: 'tick', duration: '8' }).setLine(3), + f.TextNote({ glyph: 'tr', duration: '8', smooth: true }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), + ]); + voice2.getTickables().forEach((n) => n.setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER)); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function crescendo(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice([ + f.TextNote({ glyph: 'p', duration: '16' }), + new _src_crescendo__WEBPACK_IMPORTED_MODULE_1__.Crescendo({ duration: '4d' }).setLine(0).setHeight(25).setStave(stave), + f.TextNote({ glyph: 'f', duration: '16' }), + new _src_crescendo__WEBPACK_IMPORTED_MODULE_1__.Crescendo({ duration: '4' }).setLine(5).setStave(stave), + new _src_crescendo__WEBPACK_IMPORTED_MODULE_1__.Crescendo({ duration: '4' }).setLine(10).setDecrescendo(true).setHeight(5).setStave(stave), + ]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function textDynamics(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); + const score = f.EasyScore(); + const voice = score.voice([ + f.TextDynamics({ text: 'sfz', duration: '4' }), + f.TextDynamics({ text: 'rfz', duration: '4' }), + f.TextDynamics({ text: 'mp', duration: '4' }), + f.TextDynamics({ text: 'ppp', duration: '4' }), + f.TextDynamics({ text: 'fff', duration: '4' }), + f.TextDynamics({ text: 'mf', duration: '4' }), + f.TextDynamics({ text: 'sff', duration: '4' }), + ], { time: '7/4' }); + // This is refactored to use preCalculateMinWidth... to exercise + // a bug fix when textDynamic got formatted more than once. + const formatter = f.Formatter(); + formatter.joinVoices([voice]); + // const width = 250; //formatter.preCalculateMinTotalWidth([voice]); + const width = formatter.preCalculateMinTotalWidth([voice]); + formatter.format([voice]); + const stave = f.Stave({ y: 40, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_5__.Stave.defaultPadding }); + stave.draw(); + voice.draw(f.getContext(), stave); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TextNoteTests); + + + +/***/ }), + +/***/ "./tests/threevoice_tests.ts": +/*!***********************************!*\ + !*** ./tests/threevoice_tests.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ThreeVoicesTests": () => (/* binding */ ThreeVoicesTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Three Voices Tests - Three voices in single staff. + + +const ThreeVoicesTests = { + Start() { + // TODO: Rename the module to 'Three Voices', because we aren't really testing rests. + QUnit.module('Three Voice Rests'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Three Voices - #1', threeVoices1); + run('Three Voices - #2 Complex', threeVoices2); + run('Three Voices - #3', threeVoices3); + run('Auto Adjust Rest Positions - Two Voices', autoRestTwoVoices); + run('Auto Adjust Rest Positions - Three Voices #1', autoRestThreeVoices1); + run('Auto Adjust Rest Positions - Three Voices #2', autoRestThreeVoices2); + }, +}; +/** + * Helper for setting up the first three test cases: threeVoices1, threeVoices2, threeVoices3. + */ +function createThreeVoicesTest(noteGroup1, noteGroup2, noteGroup3, setup) { + return (options) => { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const stave = factory.Stave().addClef('treble').addTimeSignature('4/4'); + const score = factory.EasyScore(); + // Convert each noteGroup array to StaveNote[]. + const noteGroups = [noteGroup1, noteGroup2, noteGroup3].map((args) => score.notes(...args)); + const voices = noteGroups.map((notes) => score.voice(notes)); + setup(factory, voices); + const beams = [ + _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[0], +1), + _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[1], -1), + _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[2], -1), + ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat); + // Set option to position rests near the notes in each voice. + factory.Formatter().joinVoices(voices).formatToStave(voices, stave); + factory.draw(); + for (let i = 0; i < beams.length; i++) { + beams[i].setContext(factory.getContext()).draw(); + } + options.assert.ok(true); + }; +} +/** + * + */ +const threeVoices1 = createThreeVoicesTest(['e5/2, e5', { stem: 'up' }], ['(d4 a4 d#5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/4, e3, f3, a3', { stem: 'down' }], (f, voices) => { + voices[0].getTickables()[0].addModifier(f.Fingering({ number: '0', position: 'left' }), 0); + voices[1] + .getTickables()[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '4', position: 'left' }), 1); +}); +/** + * Lots of beamed notes. A beam and notehead overlap. + */ +const threeVoices2 = createThreeVoicesTest(['(a4 e5)/16, e5, e5, e5, e5/8, e5, e5/2', { stem: 'up' }], ['(d4 d#5)/16, (b4 c5), d5, e5, (d4 a4 c5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/8, b3, e3/4, f3, a3', { stem: 'down' }], (f, voices) => { + voices[0] + .getTickables()[0] + .addModifier(f.Fingering({ number: '2', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '0', position: 'above' }), 1); + voices[1] + .getTickables()[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '4', position: 'left' }), 1); +}); +/** + * + */ +const threeVoices3 = createThreeVoicesTest(['(g4 e5)/4, e5, (g4 e5)/2', { stem: 'up' }], ['c#5/4, b4/8, b4/8/r, a4/4., g4/8', { stem: 'down' }], ['c4/4, b3, a3, g3', { stem: 'down' }], (f, voices) => { + voices[0] + .getTickables()[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 1); + voices[1].getTickables()[0].addModifier(f.Fingering({ number: '1', position: 'left' }), 0); + voices[2].getTickables()[0].addModifier(f.Fingering({ number: '3', position: 'left' }), 0); +}); +function autoRestTwoVoices(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900, 200); + const score = f.EasyScore(); + let x = 10; + let beams = []; + function createMeasure(measureTitle, width, align_rests) { + const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); + x += width; + const noteArrays = [ + score.notes('b4/8/r, e5/16, b4/r, b4/8/r, e5/16, b4/r, b4/8/r, d5/16, b4/r, e5/4', { stem: 'up' }), + score.notes('c5/16, c4, b4/r, d4, e4, f4, b4/r, g4, g4[stem="up"], a4[stem="up"], b4/r, b4[stem="up"], e4/4', { + stem: 'down', + }), + [f.TextNote({ text: measureTitle, line: -1, duration: '1', smooth: true })], + ]; + const voices = noteArrays.map((notes) => score.voice(notes)); + beams = beams.concat(_src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[0], 1)).concat(_src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[1], -1)); + f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); + } + createMeasure('Default Rest Positions', 400, false); + createMeasure('Rests Repositioned To Avoid Collisions', 400, true); + f.draw(); + for (let i = 0; i < beams.length; i++) { + beams[i].setContext(f.getContext()).draw(); + } + options.assert.ok(true, 'Auto Adjust Rests - Two Voices'); +} +function autoRestThreeVoices1(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 850, 200); + const score = f.EasyScore(); + let x = 10; + function createMeasure(measureTitle, width, align_rests) { + const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); + const voices = [ + score.voice(score.notes('b4/4/r, e5, e5/r, e5/r, e5, e5, e5, e5/r', { stem: 'up' }), { time: '8/4' }), + score.voice(score.notes('b4/4/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4', { stem: 'down' }), { time: '8/4' }), + score.voice(score.notes('e4/4/r, e4/r, f4, b4/r, g4, c4, e4/r, c4', { stem: 'down' }), { time: '8/4' }), + score.voice([ + f.TextNote({ text: measureTitle, duration: '1', line: -1, smooth: true }), + f.TextNote({ text: '', duration: '1', line: -1, smooth: true }), + ], { time: '8/4' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); + x += width; + } + createMeasure('Default Rest Positions', 400, false); + createMeasure('Rests Repositioned To Avoid Collisions', 400, true); + f.draw(); + options.assert.ok(true); +} +function autoRestThreeVoices2(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 850, 200); + const score = f.EasyScore(); + let x = 10; + function createMeasure(measureTitle, width, align_rests) { + const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); + const voices = [ + score.voice(score.notes('b4/16/r, e5, e5/r, e5/r, e5, e5, e5, e5/r'), { time: '2/4' }), + score.voice(score.notes('b4/16/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4'), { time: '2/4' }), + score.voice(score.notes('e4/16/r, e4/r, f4, b4/r, g4, c4, e4/r, c4'), { time: '2/4' }), + score.voice([f.TextNote({ text: measureTitle, duration: 'h', line: -1, smooth: true })], { time: '2/4' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); + x += width; + } + createMeasure('Default Rest Positions', 400, false); + createMeasure('Rests Repositioned To Avoid Collisions', 400, true); + f.draw(); + options.assert.ok(true); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ThreeVoicesTests); + + + +/***/ }), + +/***/ "./tests/tickcontext_tests.ts": +/*!************************************!*\ + !*** ./tests/tickcontext_tests.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TickContextTests": () => (/* binding */ TickContextTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _mocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mocks */ "./tests/mocks.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TickContext Tests + + + + +const TickContextTests = { + Start() { + QUnit.module('TickContext'); + QUnit.test('Current Tick Test', currentTick); + QUnit.test('Tracking Test', tracking); + }, +}; +function currentTick(assert) { + const tc = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_2__.TickContext(); + assert.equal(tc.getCurrentTick().value(), 0, 'New tick context has no ticks'); +} +function tracking(assert) { + const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.RESOLUTION) / 4; + const tickables = [ + new _mocks__WEBPACK_IMPORTED_MODULE_3__.MockTickable().setTicks(BEAT).setWidth(10), + new _mocks__WEBPACK_IMPORTED_MODULE_3__.MockTickable().setTicks(BEAT * 2).setWidth(20), + new _mocks__WEBPACK_IMPORTED_MODULE_3__.MockTickable().setTicks(BEAT).setWidth(30), + ]; + const tc = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_2__.TickContext(); + tc.setPadding(0); + tc.addTickable(tickables[0]); + assert.equal(tc.getMaxTicks().value(), BEAT); + tc.addTickable(tickables[1]); + assert.equal(tc.getMaxTicks().value(), BEAT * 2); + tc.addTickable(tickables[2]); + assert.equal(tc.getMaxTicks().value(), BEAT * 2); + assert.equal(tc.getWidth(), 0); + tc.preFormat(); + assert.equal(tc.getWidth(), 30); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TickContextTests); + + + +/***/ }), + +/***/ "./tests/timesignature_tests.ts": +/*!**************************************!*\ + !*** ./tests/timesignature_tests.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSignatureTests": () => (/* binding */ TimeSignatureTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _src_timesignature__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/timesignature */ "./src/timesignature.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// TimeSignature Tests + + + + +const TimeSignatureTests = { + Start() { + QUnit.module('TimeSignature'); + QUnit.test('Time Signature Parser', parser); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Basic Time Signatures', basic); + run('Big Signature Test', big); + run('Additive Signature Test', additive); + run('Alternating Signature Test', alternating); + run('Interchangeable Signature Test', interchangeable); + run('Aggregate Signature Test', agregate); + run('Complex Signature Test', complex); + run('Time Signature multiple staves alignment test', multiple); + run('Time Signature Change Test', change); + }, +}; +function parser(assert) { + const timeSig = new _src_timesignature__WEBPACK_IMPORTED_MODULE_3__.TimeSignature(); + assert.equal(timeSig.getTimeSpec(), '4/4', 'default time signature is 4/4'); + const mustFail = ['asdf', '123/', '/10', '/', '4567', 'C+', '1+', '+1', '(3+', '+3)', '()', '(+)']; + mustFail.forEach((invalidString) => { + assert.throws(() => timeSig.parseTimeSpec(invalidString), /BadTimeSignature/); + }); + const mustPass = ['4/4', '10/12', '1/8', '1234567890/1234567890', 'C', 'C|', '+']; + mustPass.forEach((validString) => timeSig.parseTimeSpec(validString)); + timeSig.setTimeSig('4/4'); + assert.equal(timeSig.getIsNumeric(), true, '4/4 is numeric'); + assert.equal(timeSig.getLine(), 0, 'digits are on line 0'); + timeSig.setTimeSig('C|'); + assert.equal(timeSig.getTimeSpec(), 'C|', 'timeSpec changed to C|'); + assert.equal(timeSig.getIsNumeric(), false, 'cut time is not numeric'); + assert.equal(timeSig.getLine(), 2, 'cut/common are on line 2'); + assert.ok(true, 'all pass'); +} +function basic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 500) + .addTimeSignature('2/2') + .addTimeSignature('3/4') + .addTimeSignature('4/4') + .addTimeSignature('6/8') + .addTimeSignature('C') + .addTimeSignature('C|') + .addEndTimeSignature('2/2') + .addEndTimeSignature('3/4') + .addEndTimeSignature('4/4') + .addEndClef('treble') + .addEndTimeSignature('6/8') + .addEndTimeSignature('C') + .addEndTimeSignature('C|') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function big(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300) + .addTimeSignature('12/8') + .addTimeSignature('7/16') + .addTimeSignature('1234567/890') + .addTimeSignature('987/654321') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function additive(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300).addTimeSignature('2+3+2/8').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function alternating(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300).addTimeSignature('6/8').addTimeSignature('+').addTimeSignature('3/4').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function interchangeable(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300).addTimeSignature('3/4').addTimeSignature('-').addTimeSignature('2/4').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function agregate(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300) + .addTimeSignature('2/4') + .addTimeSignature('+') + .addTimeSignature('3/8') + .addTimeSignature('+') + .addTimeSignature('5/4') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function complex(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300) + .addTimeSignature('(2+3)/16') + .addTimeSignature('+') + .addTimeSignature('3/8') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function multiple(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 350); + // Each StaveLineConfig object is of the form { visible: boolean }. + const stave1LineConfig = [false, false, true, false, false].map((visible) => ({ visible })); + const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(15, 0, 300) + .setConfigForLines(stave1LineConfig) + .addClef('percussion') + .addTimeSignature('4/4', 25) // passing the custom padding in pixels + .setContext(ctx) + .draw(); + const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(15, 110, 300).addClef('treble').addTimeSignature('4/4').setContext(ctx).draw(); + const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(15, 220, 300).addClef('bass').addTimeSignature('4/4').setContext(ctx).draw(); + _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave.formatBegModifiers([stave1, stave2, stave3]); + new _src_staveconnector__WEBPACK_IMPORTED_MODULE_2__.StaveConnector(stave1, stave2).setType('single').setContext(ctx).draw(); + new _src_staveconnector__WEBPACK_IMPORTED_MODULE_2__.StaveConnector(stave2, stave3).setType('single').setContext(ctx).draw(); + new _src_staveconnector__WEBPACK_IMPORTED_MODULE_2__.StaveConnector(stave2, stave3).setType('brace').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function change(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900); + const stave = f.Stave({ x: 0, y: 0 }).addClef('treble').addTimeSignature('C|'); + const tickables = [ + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + f.TimeSigNote({ time: '3/4' }), + f.StaveNote({ keys: ['d/4'], duration: '4', clef: 'alto' }), + f.StaveNote({ keys: ['b/3'], duration: '4r', clef: 'alto' }), + f.TimeSigNote({ time: 'C' }), + f.StaveNote({ keys: ['c/3', 'e/3', 'g/3'], duration: '4', clef: 'bass' }), + f.TimeSigNote({ time: '9/8' }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + ]; + const voice = f.Voice().setStrict(false).addTickables(tickables); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TimeSignatureTests); + + + +/***/ }), + +/***/ "./tests/tremolo_tests.ts": +/*!********************************!*\ + !*** ./tests/tremolo_tests.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TremoloTests": () => (/* binding */ TremoloTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_tremolo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/tremolo */ "./src/tremolo.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Tremolo Tests + + + +const TremoloTests = { + Start() { + QUnit.module('Tremolo'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Tremolo - Basic', tremoloBasic); + run('Tremolo - Big', tremoloBig); + }, +}; +function tremoloBasic(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const score = f.EasyScore(); + // bar 1 + const stave1 = f.Stave({ width: 250 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' }); + notes1[0].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(3), 0); + notes1[1].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(2), 0); + notes1[2].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(1), 0); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + // bar 2 + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' }); + notes2[1].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(1), 0); + notes2[2].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(2), 0); + notes2[3].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(3), 0); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'Tremolo - Basic'); +} +function tremoloBig(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); + const score = f.EasyScore(); + // bar 1 + const stave1 = f.Stave({ width: 250 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' }); + const tremolo1 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(3); + tremolo1.extra_stroke_scale = 1.7; + tremolo1.y_spacing_scale = 1.5; + const tremolo2 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(2); + tremolo2.extra_stroke_scale = 1.7; + tremolo2.y_spacing_scale = 1.5; + const tremolo3 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(1); + tremolo3.extra_stroke_scale = 1.7; + tremolo3.y_spacing_scale = 1.5; + notes1[0].addModifier(tremolo1, 0); + notes1[1].addModifier(tremolo2, 0); + notes1[2].addModifier(tremolo3, 0); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + // bar 2 + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); + const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' }); + const tremolo4 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(1); + tremolo4.extra_stroke_scale = 1.7; + tremolo4.y_spacing_scale = 1.5; + const tremolo5 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(2); + tremolo5.extra_stroke_scale = 1.7; + tremolo5.y_spacing_scale = 1.5; + const tremolo6 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(3); + tremolo6.extra_stroke_scale = 1.7; + tremolo6.y_spacing_scale = 1.5; + notes2[1].addModifier(tremolo4, 0); + notes2[2].addModifier(tremolo5, 0); + notes2[3].addModifier(tremolo6, 0); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'Tremolo - Big'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TremoloTests); + + + +/***/ }), + +/***/ "./tests/tuning_tests.ts": +/*!*******************************!*\ + !*** ./tests/tuning_tests.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TuningTests": () => (/* binding */ TuningTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_tuning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/tuning */ "./src/tuning.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Tuning Tests + + +const TuningTests = { + Start() { + QUnit.module('Tuning'); + QUnit.test('Standard Tuning', standard); + QUnit.test('Standard Banjo Tuning', banjo); + QUnit.test('Return note for fret', noteForFret); + }, +}; +/** + * Helper function to verify that the provided tuning matches a standard 6-string guitar. + */ +function checkStandard(assert, tuning) { + assert.throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0'); + assert.throws(() => tuning.getValueForString(9), /BadArguments/, 'String 9'); + // TODO: Tuning constructor has a bug in that the default tuning has 8 strings. + // See: 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2' in tuning.ts constructor. + // assert.throws(() => tuning.getValueForString(7), /BadArguments/, 'String 7'); + // Tuning.getValueForString() returns a note number where the value 60 corresponds to middle C. + assert.equal(tuning.getValueForString(6), 40, 'Low E string'); + assert.equal(tuning.getValueForString(5), 45, 'A string'); + assert.equal(tuning.getValueForString(4), 50, 'D string'); + assert.equal(tuning.getValueForString(3), 55, 'G string'); + assert.equal(tuning.getValueForString(2), 59, 'B string'); + assert.equal(tuning.getValueForString(1), 64, 'High E string'); +} +/** + * Helper function to verify that the provided tuning matches a standard 5-string banjo. + */ +function checkStandardBanjo(assert, tuning) { + assert.throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0'); + assert.throws(() => tuning.getValueForString(6), /BadArguments/, 'String 6'); + assert.equal(tuning.getValueForString(5), 67, 'High G string'); + assert.equal(tuning.getValueForString(4), 50, 'D string'); + assert.equal(tuning.getValueForString(3), 55, 'G string'); + assert.equal(tuning.getValueForString(2), 59, 'B string'); + assert.equal(tuning.getValueForString(1), 62, 'High D string'); +} +function standard(assert) { + assert.expect(16); + const tuning = new _src_tuning__WEBPACK_IMPORTED_MODULE_1__.Tuning(); + checkStandard(assert, tuning); + // Set the tuning by specifying a name: 'standard'. + tuning.setTuning('standard'); + checkStandard(assert, tuning); +} +function banjo(assert) { + assert.expect(7); + const tuning = new _src_tuning__WEBPACK_IMPORTED_MODULE_1__.Tuning(); + tuning.setTuning('standardBanjo'); + checkStandardBanjo(assert, tuning); +} +function noteForFret(assert) { + assert.expect(8); + const tuning = new _src_tuning__WEBPACK_IMPORTED_MODULE_1__.Tuning('E/5,B/4,G/4,D/4,A/3,E/3'); + assert.throws(() => tuning.getNoteForFret(-1, 1), /BadArguments/, 'Fret = -1'); + assert.throws(() => tuning.getNoteForFret(1, -1), /BadArguments/, 'String = -1'); + assert.equal(tuning.getNoteForFret(0, 1), 'E/5', 'High E string'); + assert.equal(tuning.getNoteForFret(5, 1), 'A/5', 'High E string, fret 5'); + assert.equal(tuning.getNoteForFret(0, 2), 'B/4', 'B string'); + assert.equal(tuning.getNoteForFret(0, 3), 'G/4', 'G string'); + assert.equal(tuning.getNoteForFret(12, 2), 'B/5', 'B string, fret 12'); + assert.equal(tuning.getNoteForFret(0, 6), 'E/3', 'Low E string'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TuningTests); + + + +/***/ }), + +/***/ "./tests/tuplet_tests.ts": +/*!*******************************!*\ + !*** ./tests/tuplet_tests.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TupletTests": () => (/* binding */ TupletTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); +/* harmony import */ var _src_tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/tuplet */ "./src/tuplet.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Tuplet Tests + + + + + +const TupletTests = { + Start() { + QUnit.module('Tuplet'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Tuplet', simple); + run('Beamed Tuplet', beamed); + run('Ratioed Tuplet', ratio); + run('Bottom Tuplet', bottom); + run('Bottom Ratioed Tuplet', bottomRatio); + run('Awkward Tuplet', awkward); + run('Complex Tuplet', complex); + run('Mixed Stem Direction Tuplet', mixedTop); + run('Mixed Stem Direction Bottom Tuplet', mixedBottom); + run('Nested Tuplets', nested); + run('Single Tuplets', single); + }, +}; +// Helper Functions to set the stem direction and duration of the options objects (i.e., StaveNoteStruct) +// that are ultimately passed into Factory.StaveNote(). +// eslint-disable-next-line +const set = (key) => (value) => (object) => { + object[key] = value; + return object; +}; +const setStemDirection = set('stem_direction'); +const setStemUp = setStemDirection(_src_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); +const setStemDown = setStemDirection(_src_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN); +const setDurationToQuarterNote = set('duration')('4'); +/** + * Simple test case with one ascending triplet and one descending triplet. + */ +function simple(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/4'); + const notes = [ + { keys: ['g/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Tuplet({ notes: notes.slice(0, 3) }); + f.Tuplet({ notes: notes.slice(3, 6) }); + // 3/4 time + const voice = f + .Voice({ time: { num_beats: 3, beat_value: 4 } }) + .setStrict(true) + .addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Simple Test'); +} +function beamed(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/8'); + const notes = [ + { keys: ['b/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ notes: notes.slice(0, 3) }); + f.Beam({ notes: notes.slice(3, 10) }); + f.Tuplet({ notes: notes.slice(0, 3) }); + f.Tuplet({ notes: notes.slice(3, 10) }); + // 3/8 time + const voice = f + .Voice({ time: { num_beats: 3, beat_value: 8 } }) + .setStrict(true) + .addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Beamed Test'); +} +function ratio(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('4/4'); + const notes = [ + { keys: ['f/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['e/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(3, 6), + }); + f.Tuplet({ + notes: notes.slice(0, 3), + options: { + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(3, 6), + options: { + ratioed: true, + notes_occupied: 4, + }, + }); + const voice = f.Voice().setStrict(true).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Ratioed Test'); +} +function bottom(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 160); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('3/4'); + const notes = [ + { keys: ['f/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + { keys: ['g/4'], duration: '4' }, + { keys: ['d/5'], duration: '8' }, + { keys: ['g/3'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + ] + .map(setStemDown) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(3, 6), + }); + f.Tuplet({ + notes: notes.slice(0, 3), + options: { location: _src_tuplet__WEBPACK_IMPORTED_MODULE_4__.Tuplet.LOCATION_BOTTOM }, + }); + f.Tuplet({ + notes: notes.slice(3, 6), + options: { location: _src_tuplet__WEBPACK_IMPORTED_MODULE_4__.Tuplet.LOCATION_BOTTOM }, + }); + const voice = f + .Voice({ time: { num_beats: 3, beat_value: 4 } }) + .setStrict(true) + .addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Bottom Test'); +} +function bottomRatio(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 160); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('5/8'); + const notes = [ + { keys: ['f/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + { keys: ['d/4'], duration: '4' }, + { keys: ['d/5'], duration: '8' }, + { keys: ['g/5'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + ] + .map(setStemDown) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(3, 6), + }); + f.Tuplet({ + notes: notes.slice(0, 3), + options: { + location: _src_tuplet__WEBPACK_IMPORTED_MODULE_4__.Tuplet.LOCATION_BOTTOM, + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(3, 6), + options: { + location: _src_tuplet__WEBPACK_IMPORTED_MODULE_4__.Tuplet.LOCATION_BOTTOM, + notes_occupied: 1, + }, + }); + const voice = f + .Voice({ time: { num_beats: 5, beat_value: 8 } }) + .setStrict(true) + .addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Bottom Ratioed Test'); +} +function awkward(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 370, 160); + const stave = f.Stave({ x: 10, y: 10 }); + const notes = [ + { keys: ['g/4'], duration: '16' }, + { keys: ['b/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4'], duration: '16' }, + { keys: ['c/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4'], duration: '16' }, + { keys: ['c/4'], duration: '8' }, + { keys: ['d/4'], duration: '8' }, + { keys: ['e/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ notes: notes.slice(0, 12) }); + f.Tuplet({ + notes: notes.slice(0, 12), + options: { + notes_occupied: 142, + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(12, 15), + options: { + ratioed: true, + }, + }).setBracketed(true); + const voice = f.Voice().setStrict(false).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Awkward Test'); +} +function complex(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); + const notes1 = [ + { keys: ['b/4'], duration: '8d' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['b/4'], duration: '16r' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + _src_dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes1[0]], { all: true }); + const notes2 = [{ keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }] + .map(setDurationToQuarterNote) + .map(setStemDown) + .map(f.StaveNote.bind(f)); + f.Beam({ notes: notes1.slice(0, 3) }); + f.Beam({ notes: notes1.slice(5, 9) }); + f.Beam({ notes: notes1.slice(11, 16) }); + f.Tuplet({ + notes: notes1.slice(0, 3), + }); + f.Tuplet({ + notes: notes1.slice(3, 11), + options: { + num_notes: 7, + notes_occupied: 4, + ratioed: false, + }, + }); + f.Tuplet({ + notes: notes1.slice(11, 16), + options: { + notes_occupied: 4, + }, + }); + const voice1 = f.Voice().setStrict(true).addTickables(notes1); + const voice2 = f.Voice().setStrict(true).addTickables(notes2); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true, 'Complex Test'); +} +function mixedTop(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }); + const notes = [ + { keys: ['a/4'], stem_direction: 1 }, + { keys: ['c/6'], stem_direction: -1 }, + { keys: ['a/4'], stem_direction: 1 }, + { keys: ['f/5'], stem_direction: 1 }, + { keys: ['a/4'], stem_direction: -1 }, + { keys: ['c/6'], stem_direction: -1 }, + ] + .map(setDurationToQuarterNote) + .map(f.StaveNote.bind(f)); + f.Tuplet({ + notes: notes.slice(0, 2), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(2, 4), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(4, 6), + options: { + notes_occupied: 3, + }, + }); + const voice = f.Voice().setStrict(false).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Mixed Stem Direction Tuplet'); +} +function mixedBottom(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }); + const notes = [ + { keys: ['f/3'], stem_direction: 1 }, + { keys: ['a/5'], stem_direction: -1 }, + { keys: ['a/4'], stem_direction: 1 }, + { keys: ['f/3'], stem_direction: 1 }, + { keys: ['a/4'], stem_direction: -1 }, + { keys: ['c/4'], stem_direction: -1 }, + ] + .map(setDurationToQuarterNote) + .map(f.StaveNote.bind(f)); + f.Tuplet({ + notes: notes.slice(0, 2), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(2, 4), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(4, 6), + options: { + notes_occupied: 3, + }, + }); + const voice = f.Voice().setStrict(false).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Mixed Stem Direction Bottom Tuplet'); +} +function nested(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); + const notes = [ + // Big triplet 1: + { keys: ['b/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['b/4'], duration: '2' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(2, 7), + }); + f.Tuplet({ + notes: notes.slice(0, 7), + options: { + notes_occupied: 2, + num_notes: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(2, 7), + options: { + notes_occupied: 4, + num_notes: 5, + }, + }); + // 4/4 time + const voice = f.Voice().setStrict(true).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Nested Tuplets'); +} +function single(options) { + const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); + const notes = [ + // Big triplet 1: + { keys: ['c/4'], duration: '4' }, + { keys: ['d/4'], duration: '8' }, + { keys: ['e/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['a/4'], duration: '2' }, + { keys: ['b/4'], duration: '4' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(1, 4), + }); + // big quartuplet + f.Tuplet({ + notes: notes.slice(0, -1), + options: { + num_notes: 4, + notes_occupied: 3, + ratioed: true, + bracketed: true, + }, + }); + // first singleton + f.Tuplet({ + notes: notes.slice(0, 1), + options: { + num_notes: 3, + notes_occupied: 2, + ratioed: true, + }, + }); + // eighth note triplet + f.Tuplet({ + notes: notes.slice(1, 4), + options: { + num_notes: 3, + notes_occupied: 2, + }, + }); + // second singleton + f.Tuplet({ + notes: notes.slice(4, 5), + options: { + num_notes: 3, + notes_occupied: 2, + ratioed: true, + bracketed: true, + }, + }); + // 4/4 time + const voice = f + .Voice({ time: { num_beats: 4, beat_value: 4 } }) + .setStrict(true) + .addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Nested Tuplets'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TupletTests); + + + +/***/ }), + +/***/ "./tests/typeguard_tests.ts": +/*!**********************************!*\ + !*** ./tests/typeguard_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TypeGuardTests": () => (/* binding */ TypeGuardTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_canvascontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_stemmablenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _src_typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Ron B. Yeh +// MIT License +// +// TypeGuard Tests +// eslint-disable-next-line +// @ts-nocheck to support ES5 style class declaration in the fakeES5() test case. + + + + + + +const TypeGuardTests = { + Start() { + QUnit.module('TypeGuard'); + QUnit.test('Real VexFlow Types', real); + QUnit.test('Fake VexFlow Types in ES5', fakeES5); + QUnit.test('Fake VexFlow Types in ES6', fakeES6); + QUnit.test('Edge Case ES5/ES6', edgeCaseES5vsES6); + }, +}; +function real(assert) { + const s = new _src_stavenote__WEBPACK_IMPORTED_MODULE_2__.StaveNote({ keys: ['c/4'], duration: 'w' }); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(s), 'isStaveNote helper function'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isCategory)(s, 'StaveNote'), 'Use isCategory(s, "StaveNote") directly'); + assert.notOk((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(s), 'isTabNote helper function. s is NOT a TabNote.'); + const t = new _src_tabnote__WEBPACK_IMPORTED_MODULE_4__.TabNote({ positions: [{ str: 2, fret: 1 }], duration: '1' }); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(t), 'isTabNote helper function'); + assert.notOk((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t), 't is NOT a StaveNote'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isNote)(s), 'StaveNote extends StemmableNote which extends Note, so s is a Note'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(t), 'TabNote extends StemmableNote'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isNote)(t), 'TabNote extends StemmableNote which extends Note, so t is a Note'); + const canvas = document.createElement('canvas'); + canvas.width = 800; + canvas.height = 400; + const ctx = new _src_canvascontext__WEBPACK_IMPORTED_MODULE_1__.CanvasContext(canvas.getContext('2d')); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isRenderContext)(ctx), 'ctx is a RenderContext'); +} +/** + * Helper function to test the fake VexFlow objects we create in fakeES5() and fakeES6(). + */ +function checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote) { + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(fakeStemmableNote), 'Fake StemmableNote is a StemmableNote.'); + assert.notOk((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isNote)(fakeStemmableNote), 'Fake StemmableNote is not a Note (no ancestors with the correct CATEGORY).'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isCategory)(fakeStaveNote, 'StaveNote'), 'Fake StaveNote is a StaveNote.'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(fakeStaveNote), 'Fake StaveNote is a StaveNote (via helper function).'); + assert.ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isCategory)(fakeStaveNote, 'StemmableNote'), 'Fake StaveNote is also a StemmableNote (via inheritance).'); + assert.notOk((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isNote)(fakeStaveNote), 'Fake StaveNote is not a Note. CATEGORY does not match.'); +} +/** + * Demonstrate that an object (ES5-style) can pass the isCategory(...) test if it + * has the correct static .CATEGORY property. + */ +function fakeES5(assert) { + function FakeStemmableNote() { + this.isFake = true; + } + FakeStemmableNote.CATEGORY = _src_stemmablenote__WEBPACK_IMPORTED_MODULE_3__.StemmableNote.CATEGORY; + function FakeStaveNote() { + FakeStemmableNote.call(this); + } + FakeStaveNote.CATEGORY = _src_stavenote__WEBPACK_IMPORTED_MODULE_2__.StaveNote.CATEGORY; + FakeStaveNote.prototype = Object.create(FakeStemmableNote.prototype); + FakeStaveNote.prototype.constructor = FakeStaveNote; + const fakeStemmableNote = new FakeStemmableNote(); + const fakeStaveNote = new FakeStaveNote(); + checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote); +} +/** + * Demonstrate that an object (ES6-style) can pass the isCategory(...) test if it + * or its ancestor has the correct static .CATEGORY property. + */ +function fakeES6(assert) { + class FakeStemmableNote { + } + FakeStemmableNote.CATEGORY = _src_stemmablenote__WEBPACK_IMPORTED_MODULE_3__.StemmableNote.CATEGORY; + class FakeStaveNote extends FakeStemmableNote { + } + FakeStaveNote.CATEGORY = _src_stavenote__WEBPACK_IMPORTED_MODULE_2__.StaveNote.CATEGORY; + const fakeStemmableNote = new FakeStemmableNote(); + const fakeStaveNote = new FakeStaveNote(); + checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote); +} +/** + * The tsconfig.json target is ES6 (as of August 18, 2021), so isCategory() works even when the root class "extends Object". + */ +function edgeCaseES5vsES6(assert) { + class Z extends Object { + } + class Y extends Z { + } + class X extends Y { + } + const zInstance = new Z(); + const xInstance = new X(); + assert.ok(xInstance instanceof Object, 'es5 & es6: x IS an instanceof Object'); + // If targeting es5, these three assertions only pass if we remove "extends Object" from the class Z definition. + assert.ok(zInstance instanceof Z, 'es6: z IS an instanceof Z'); + assert.ok(xInstance instanceof Y, 'es6: x IS an instanceof Y'); + assert.ok(xInstance instanceof Z, 'es6: x IS an instanceof Z'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TypeGuardTests); + + + +/***/ }), + +/***/ "./tests/unison_tests.ts": +/*!*******************************!*\ + !*** ./tests/unison_tests.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "UnisonTests": () => (/* binding */ UnisonTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/tables */ "./src/tables.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Unison Tests + + +const UnisonTests = { + Start() { + QUnit.module('Unison'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple(true)', simple, { unison: true, voice1: 'e4/q, e4/q, e4/h', voice2: 'e4/8, e4/8, e4/q, e4/h' }); + run('Simple(false)', simple, { unison: false, voice1: 'e4/q, e4/q, e4/h', voice2: 'e4/8, e4/8, e4/q, e4/h' }); + run('Accidentals(true)', simple, { + unison: true, + voice1: 'e4/q, e#4/q, e#4/h', + voice2: 'e4/8, e4/8, eb4/q, eb4/h', + }); + run('Accidentals(false)', simple, { + unison: false, + voice1: 'e4/q, e#4/q, e#4/h', + voice2: 'e4/8, e4/8, eb4/q, eb4/h', + }); + run('Dots(true)', simple, { unison: true, voice1: 'e4/q.., e4/16, e4/h', voice2: '(a4 e4)/q., e4/8, e4/h' }); + run('Dots(false)', simple, { unison: false, voice1: 'e4/q.., e4/16, e4/h', voice2: '(a4 e4)/q., e4/8, e4/h' }); + run('Breve(true)', breve, { unison: true }); + run('Breve(false)', breve, { unison: false }); + run('Style(true)', style, { unison: true }); + run('Style(false)', style, { unison: false }); + }, +}; +function simple(options) { + _src_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.UNISON = options.params.unison; + const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const score = vf.EasyScore(); + const system = vf.System({ y: 40, x: 10, width: 400 }); + system.addStave({ + voices: [score.voice(score.notes(options.params.voice1)), score.voice(score.notes(options.params.voice2))], + }); + system.getStaves()[0].setClef('treble'); + system.getStaves()[0].setTimeSignature('4/4'); + vf.draw(); + options.assert.expect(0); +} +function style(options) { + _src_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.UNISON = options.params.unison; + const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const score = vf.EasyScore(); + const system = vf.System({ y: 40, x: 10, width: 400 }); + const notes1 = score.notes('e4/q, e4/q, e4/h'); + const notes2 = score.notes('e4/8, e4/8, e4/q, e4/h'); + notes1[2].setStyle({ fillStyle: 'blue', strokeStyle: 'blue' }); + notes2[3].setStyle({ fillStyle: 'green', strokeStyle: 'green' }); + system.addStave({ + voices: [score.voice(notes1), score.voice(notes2)], + }); + system.getStaves()[0].setClef('treble'); + system.getStaves()[0].setTimeSignature('4/4'); + vf.draw(); + options.assert.expect(0); +} +function breve(options) { + _src_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.UNISON = options.params.unison; + const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); + const score = vf.EasyScore(); + const system = vf.System({ y: 40, x: 10, width: 400 }); + system.addStave({ + voices: [ + score.voice([vf.StaveNote({ keys: ['e/4'], duration: '1/2' })], { time: '8/4' }), + score.voice(score.notes('e4/1, e4/1'), { time: '8/4' }), + ], + }); + system.getStaves()[0].setClef('treble'); + system.getStaves()[0].setTimeSignature('8/4'); + vf.draw(); + options.assert.expect(0); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(UnisonTests); + + + +/***/ }), + +/***/ "./tests/vexflow_test_helpers.ts": +/*!***************************************!*\ + !*** ./tests/vexflow_test_helpers.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MAJOR_KEYS": () => (/* binding */ MAJOR_KEYS), +/* harmony export */ "MINOR_KEYS": () => (/* binding */ MINOR_KEYS), +/* harmony export */ "VexFlowTests": () => (/* binding */ VexFlowTests), +/* harmony export */ "concat": () => (/* binding */ concat) +/* harmony export */ }); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +/* harmony import */ var _src_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com/) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// VexFlow Test Support Library + + +const global = (0,_src_util__WEBPACK_IMPORTED_MODULE_1__.globalObject)(); +// Each test case will switch through the available fonts, and then restore the original font when done. +let originalFontNames; +function useTempFontStack(fontName) { + originalFontNames = _src_index__WEBPACK_IMPORTED_MODULE_0__.Flow.getMusicFont(); + _src_index__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont(...VexFlowTests.FONT_STACKS[fontName]); +} +function restoreOriginalFontStack() { + _src_index__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont(...originalFontNames); +} +// A micro util inspired by jQuery. +if (!global.$) { + // generate_png_images.js uses jsdom and does not include jQuery. + global.$ = (param) => { + let element; + if (typeof param !== 'string') { + element = param; + } + else if (param.startsWith('<')) { + // Extract the tag name: e.g.,
=> div + // Assume param.match returns something (! operator). + // eslint-disable-next-line + const tagName = param.match(/[A-Za-z]+/g)[0]; + element = document.createElement(tagName); + } + else { + element = document.querySelector(param); + } + const $element = { + // eslint-disable-next-line + get(index) { + return element; + }, + addClass(c) { + element.classList.add(c); + return $element; + }, + text(t) { + element.textContent = t; + return $element; + }, + html(h) { + if (!h) { + return element.innerHTML; + } + else { + element.innerHTML = h; + return $element; + } + }, + append(...elementsToAppend) { + elementsToAppend.forEach((e) => { + element.appendChild(e); + }); + return $element; + }, + attr(attrName, val) { + element.setAttribute(attrName, val); + return $element; + }, + }; + return $element; + }; +} +/** Allow `name` to be used inside file names. */ +function sanitizeName(name) { + return name.replace(/[^a-zA-Z0-9]/g, '_'); +} +const CANVAS_TEST_CONFIG = { + backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.CANVAS, + tagName: 'canvas', + testType: 'Canvas', + fontStacks: ['Bravura'], +}; +const CANVAS_TEXT_CONFIG = { + backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.CANVAS, + tagName: 'canvas', + testType: 'Canvas', + fontStacks: ['Bravura'], +}; +const SVG_TEST_CONFIG = { + backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.SVG, + tagName: 'div', + testType: 'SVG', + fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'], +}; +const SVG_TEXT_CONFIG = { + backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.SVG, + tagName: 'div', + testType: 'SVG', + fontStacks: ['Bravura'], +}; +const NODE_TEST_CONFIG = { + backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.CANVAS, + tagName: 'canvas', + testType: 'NodeCanvas', + fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'], +}; +class VexFlowTests { + // Call this at the end of a `tests/xxxx_tests.ts` file to register the module. + static register(test) { + VexFlowTests.tests.push(test); + } + static parseJobOptions(runOptions) { + let { jobs, job } = runOptions || { jobs: 1, job: 0 }; + if (window) { + const { location } = window; + if (location) { + const sps = new URLSearchParams(location.search); + const jobsParam = sps.get('jobs'); + const jobParam = sps.get('job'); + if (jobsParam) { + jobs = parseInt(jobsParam, 10); + } + if (jobParam) { + job = parseInt(jobParam, 10); + } + } + } + return { + jobs, + job, + }; + } + // flow.html calls this to invoke all the tests. + static run(runOptions) { + const { jobs, job } = VexFlowTests.parseJobOptions(runOptions); + VexFlowTests.tests.forEach((test, idx) => { + if (jobs === 1 || idx % jobs === job) { + test.Start(); + } + }); + } + static set NODE_FONT_STACKS(fontStacks) { + NODE_TEST_CONFIG.fontStacks = fontStacks; + } + /** Return a unique ID for a test. */ + static generateTestID(prefix) { + return prefix + '_' + VexFlowTests.NEXT_TEST_ID++; + } + /** + * Run `func` inside a QUnit test for each of the enabled rendering backends. + * @param name + * @param testFunc + * @param params + */ + // eslint-disable-next-line + static runTests(name, testFunc, params) { + VexFlowTests.runCanvasTest(name, testFunc, params); + VexFlowTests.runSVGTest(name, testFunc, params); + VexFlowTests.runNodeTest(name, testFunc, params); + } + // eslint-disable-next-line + static runTextTests(name, testFunc, params) { + VexFlowTests.runCanvasText(name, testFunc, params); + VexFlowTests.runSVGText(name, testFunc, params); + } + /** + * Append a
which contains the test case title and rendered output. + * See flow.html and flow.css. + * @param elementId + * @param testTitle + * @param tagName + */ + static createTest(elementId, testTitle, tagName, titleId = '') { + const anchorTestTitle = `${testTitle}`; + const title = $('
').addClass('name').attr('id', titleId).html(anchorTestTitle).get(0); + const vexOutput = $(`<${tagName}/>`).addClass('vex-tabdiv').attr('id', elementId).get(0); + const container = $('
').addClass('testcanvas').append(title, vexOutput).get(0); + $('#qunit-tests').append(container); + return vexOutput; + } + static makeFactory(options, width = 450, height = 140) { + const { elementId, backend } = options; + return new _src_index__WEBPACK_IMPORTED_MODULE_0__.Factory({ renderer: { elementId, backend, width, height } }); + } + // eslint-disable-next-line + static runCanvasTest(name, testFunc, params) { + if (VexFlowTests.RUN_CANVAS_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEST_CONFIG), { name, testFunc, params, helper })); + } + } + // eslint-disable-next-line + static runCanvasText(name, testFunc, params) { + if (VexFlowTests.RUN_CANVAS_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEXT_CONFIG), { name, testFunc, params, helper })); + } + } + // eslint-disable-next-line + static runSVGTest(name, testFunc, params) { + if (VexFlowTests.RUN_SVG_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEST_CONFIG), { name, testFunc, params, helper })); + } + } + // eslint-disable-next-line + static runSVGText(name, testFunc, params) { + if (VexFlowTests.RUN_SVG_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEXT_CONFIG), { name, testFunc, params, helper })); + } + } + // eslint-disable-next-line + static runNodeTest(name, testFunc, params) { + if (VexFlowTests.RUN_NODE_TESTS) { + const helper = VexFlowTests.runNodeTestHelper; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, NODE_TEST_CONFIG), { name, testFunc, params, helper })); + } + } + /** + * Save the PNG file. + * @param fontName + * @param element + */ + static runNodeTestHelper(fontName, element) { + if (_src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.lastContext !== undefined) { + const moduleName = sanitizeName(QUnit.module.name); + const testName = sanitizeName(QUnit.test.name); + // If we are only testing Bravura, we OMIT the font name from the + // output image file name, which allows visual diffs against + // the previous release: version 3.0.9. In the future, if we decide + // to test all fonts by default, we can remove this check. + const onlyBravura = NODE_TEST_CONFIG.fontStacks.length === 1 && fontName === 'Bravura'; + const fontInfo = onlyBravura ? '' : `.${fontName}`; + const fileName = `${VexFlowTests.NODE_IMAGEDIR}/${moduleName}.${testName}${fontInfo}.png`; + const imageData = element.toDataURL().split(';base64,').pop(); + const imageBuffer = Buffer.from(imageData, 'base64'); + VexFlowTests.shims.fs.writeFileSync(fileName, imageBuffer, { encoding: 'base64' }); + } + } + /** Run QUnit.test(...) for each font. */ + // eslint-disable-next-line + static runWithParams({ fontStacks, testFunc, name, params, backend, tagName, testType, helper }) { + if (name === undefined) { + throw new Error('Test name is undefined.'); + } + const testTypeLowerCase = testType.toLowerCase(); + fontStacks.forEach((fontStackName) => { + QUnit.test(name, (assert) => { + useTempFontStack(fontStackName); + const elementId = VexFlowTests.generateTestID(`${testTypeLowerCase}_` + fontStackName); + const moduleName = assert.test.module.name; + const title = moduleName + ' › ' + name + ` › ${testType} + ${fontStackName}`; + // Add an element id for the title div, so that we can scroll directly to a test case. + // Add a fragment identifier to the url (e.g., #Stave.Multiple_Stave_Barline_Test.Bravura) + // This titleId will match the name of the PNGs generated by visual regression tests + // (without the _Current.png or _Reference.png). + let prefix = ''; + if (testTypeLowerCase === 'canvas') { + prefix = testTypeLowerCase + '_'; + } + else { + // DO NOT ADD A PREFIX TO SVG TESTS + // The canvas prefix above is for making sure our element ids are unique, + // since we have a canvas+bravura test case and a svg+bravura test case + // that would otherwise have the same titleId. + } + const titleId = `${prefix}${sanitizeName(moduleName)}.${sanitizeName(name)}.${fontStackName}`; + const element = VexFlowTests.createTest(elementId, title, tagName, titleId); + const options = { elementId, params, assert, backend }; + const isSVG = backend === _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.SVG; + const contextBuilder = isSVG ? _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.getSVGContext : _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.getCanvasContext; + testFunc(options, contextBuilder); + restoreOriginalFontStack(); + if (helper) + helper(fontStackName, element); + }); + }); + } + /** + * @param ctx + * @param x + * @param y + */ + static plotLegendForNoteWidth(ctx, x, y) { + ctx.save(); + ctx.setFont(_src_index__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8); + const spacing = 12; + let lastY = y; + function legend(color, text) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(10); + ctx.moveTo(x, lastY - 4); + ctx.lineTo(x + 10, lastY - 4); + ctx.stroke(); + ctx.setFillStyle('black'); + ctx.fillText(text, x + 15, lastY); + lastY += spacing; + } + legend('green', 'Note + Flag'); + legend('red', 'Modifiers'); + legend('#999', 'Displaced Head'); + legend('#DDD', 'Formatter Shift'); + ctx.restore(); + } +} +VexFlowTests.tests = []; +VexFlowTests.RUN_CANVAS_TESTS = true; +VexFlowTests.RUN_SVG_TESTS = true; +VexFlowTests.RUN_NODE_TESTS = false; +// Default font properties for tests. +VexFlowTests.Font = { size: 10 }; +/** + * Each font stack is a prioritized list of font names. + */ +VexFlowTests.FONT_STACKS = { + Bravura: ['Bravura', 'Custom'], + Gonville: ['Gonville', 'Bravura', 'Custom'], + Petaluma: ['Petaluma', 'Gonville', 'Bravura', 'Custom'], + Leland: ['Leland', 'Bravura', 'Custom'], +}; +VexFlowTests.NEXT_TEST_ID = 0; + +/** + * Used with array.reduce(...) to flatten arrays of arrays in the tests. + */ +// eslint-disable-next-line +const concat = (a, b) => a.concat(b); +/** Used in KeySignature and ClefKeySignature Tests. */ +const MAJOR_KEYS = [ + // + 'C', + 'F', + 'Bb', + 'Eb', + 'Ab', + 'Db', + 'Gb', + 'Cb', + 'G', + 'D', + 'A', + 'E', + 'B', + 'F#', + 'C#', +]; +const MINOR_KEYS = [ + 'Am', + 'Dm', + 'Gm', + 'Cm', + 'Fm', + 'Bbm', + 'Ebm', + 'Abm', + 'Em', + 'Bm', + 'F#m', + 'C#m', + 'G#m', + 'D#m', + 'A#m', +]; +// VexFlow classes can be accessed via Vex.Flow.* or by directly importing a library class. +// Tests can be accessed via Vex.Flow.Test.* or by directly importing a test class. +// Here we set Vex.Flow.Test = VexFlowTests. +// eslint-disable-next-line +// @ts-ignore +_src_index__WEBPACK_IMPORTED_MODULE_0__.Flow.Test = VexFlowTests; + + +/***/ }), + +/***/ "./tests/vf_prefix_tests.ts": +/*!**********************************!*\ + !*** ./tests/vf_prefix_tests.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VFPrefixTests": () => (/* binding */ VFPrefixTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// VF.* Prefix Tests +// +// VexFlow classes are available under the global Vex.Flow.* namespace. + + +const VFPrefixTests = { + Start() { + QUnit.module('VF.* API'); + QUnit.test('VF.* API', VF_Prefix); + QUnit.test('VF Alias', VF_Alias); + }, +}; +function VF_Prefix(assert) { + // Intentionally use Vex.Flow here so we can verify that the Vex.Flow.* API + // is equivalent to using the individual classes in TypeScript. + const VF = Vex.Flow; + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Accidental, VF.Accidental); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Annotation, VF.Annotation); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Articulation, VF.Articulation); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Barline, VF.Barline); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarNote, VF.BarNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Beam, VF.Beam); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Bend, VF.Bend); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox, VF.BoundingBox); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation, VF.BoundingBoxComputation); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.ChordSymbol, VF.ChordSymbol); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Clef, VF.Clef); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.ClefNote, VF.ClefNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Crescendo, VF.Crescendo); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Curve, VF.Curve); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Dot, VF.Dot); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.EasyScore, VF.EasyScore); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Element, VF.Element); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Factory, VF.Factory); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Flow.RESOLUTION, VF.RESOLUTION); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Font, VF.Font); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter, VF.Formatter); + assert.propEqual(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter(), new VF.Formatter(), 'new Formatter()'); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Fraction, VF.Fraction); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.FretHandFinger, VF.FretHandFinger); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GhostNote, VF.GhostNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Glyph, VF.Glyph); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GlyphNote, VF.GlyphNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GraceNote, VF.GraceNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GraceNoteGroup, VF.GraceNoteGroup); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GraceTabNote, VF.GraceTabNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.KeyManager, VF.KeyManager); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.KeySignature, VF.KeySignature); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.KeySigNote, VF.KeySigNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Modifier, VF.Modifier); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.ModifierContext, VF.ModifierContext); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.MultiMeasureRest, VF.MultiMeasureRest); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Music, VF.Music); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Note, VF.Note); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.NoteHead, VF.NoteHead); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.NoteSubGroup, VF.NoteSubGroup); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Ornament, VF.Ornament); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Parser, VF.Parser); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.PedalMarking, VF.PedalMarking); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Registry, VF.Registry); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Renderer, VF.Renderer); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.RepeatNote, VF.RepeatNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Repetition, VF.Repetition); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Stave, VF.Stave); + assert.notEqual(_src_index__WEBPACK_IMPORTED_MODULE_1__.Stave, VF.StaveNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveConnector, VF.StaveConnector); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveHairpin, VF.StaveHairpin); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveLine, VF.StaveLine); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveModifier, VF.StaveModifier); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote, VF.StaveNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveTempo, VF.StaveTempo); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveText, VF.StaveText); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveTie, VF.StaveTie); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Stem, VF.Stem); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StringNumber, VF.StringNumber); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke, VF.Stroke); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.System, VF.System); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TabNote, VF.TabNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TabSlide, VF.TabSlide); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TabStave, VF.TabStave); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TabTie, VF.TabTie); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TextBracket, VF.TextBracket); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TextDynamics, VF.TextDynamics); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TextFormatter, VF.TextFormatter); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TextNote, VF.TextNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TickContext, VF.TickContext); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TimeSignature, VF.TimeSignature); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TimeSigNote, VF.TimeSigNote); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo, VF.Tremolo); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Tuning, VF.Tuning); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Tuplet, VF.Tuplet); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato, VF.Vibrato); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.VibratoBracket, VF.VibratoBracket); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice, VF.Voice); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Volta, VF.Volta); +} +/** + * If you have name collisions with VexFlow classes, consider extracting classes from Vex.Flow + * and renaming them with a VF prefix. + */ +function VF_Alias(assert) { + const Flow = Vex.Flow; + const VFAliases = { + get VFAccidental() { + return Flow.Accidental; + }, + get VFAnnotation() { + return Flow.Annotation; + }, + get VFVibrato() { + return Flow.Vibrato; + }, + }; + const { VFVibrato, VFAccidental, VFAnnotation } = VFAliases; + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Accidental, VFAccidental); + assert.equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Annotation, VFAnnotation); + const vibrato = new VFVibrato(); + assert.ok(vibrato); + const acc1 = new VFAccidental('##'); + const acc2 = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Accidental('##'); + assert.equal(acc1.type, acc2.type); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(VFPrefixTests); + + + +/***/ }), + +/***/ "./tests/vibrato_tests.ts": +/*!********************************!*\ + !*** ./tests/vibrato_tests.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VibratoTests": () => (/* binding */ VibratoTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Vibrato Tests + + +const VibratoTests = { + Start() { + QUnit.module('Vibrato'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple Vibrato', simple); + run('Harsh Vibrato', harsh); + run('Vibrato with Bend', withBend); + }, +}; +// Helper function to create TabNote objects. +const tabNote = (noteStruct) => new _src_index__WEBPACK_IMPORTED_MODULE_1__.TabNote(noteStruct); +/** + * Default vibrato symbol (wavy line) on top of a tab with two notes fretted. + */ +function simple(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new _src_index__WEBPACK_IMPORTED_MODULE_1__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato(), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato(), 0), + ]; + _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Simple Vibrato'); +} +/** + * The harsh vibrato symbol is a zig zag line with sharp points. + * This test is nearly identical to the 'simple' test above. + * The only difference is that we call .setHarsh(true) on each Vibrato object. + */ +function harsh(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new _src_index__WEBPACK_IMPORTED_MODULE_1__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato().setHarsh(true), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato().setHarsh(true), 0), + ]; + _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Harsh Vibrato'); +} +function withBend(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.3, 1.3); + ctx.setFont(_src_index__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size); + const stave = new _src_index__WEBPACK_IMPORTED_MODULE_1__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 9 }, + { str: 3, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('1/2', true), 0) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('1/2', true), 1) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato(), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'q', + }) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('Full', false), 0) + .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato().setVibratoWidth(60), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato().setVibratoWidth(120).setHarsh(true), 0), + ]; + _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Vibrato with Bend'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(VibratoTests); + + + +/***/ }), + +/***/ "./tests/vibratobracket_tests.ts": +/*!***************************************!*\ + !*** ./tests/vibratobracket_tests.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VibratoBracketTests": () => (/* binding */ VibratoBracketTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Author: Balazs Forian-Szabo +// +// VibratoBracket Tests +// TODO: It's annoying to have to cast "as Note" or "as Note[]". Could we add a method to Voice to get the tickables as Note[]? Voice.getTickables() vs Voice.getNotes()? + +const VibratoBracketTests = { + Start() { + QUnit.module('VibratoBracket'); + const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; + run('Simple VibratoBracket', simple); + run('Harsh VibratoBracket Without End Note', withoutEndNote); + run('Harsh VibratoBracket Without Start Note', withoutStartNote); + }, +}; +// Helper function to set up the stave, easyscore, voice, and to format & draw. +function createTest(noteGroup, setupVibratoBracket) { + return (options) => { + const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 650, 200); + const stave = factory.Stave(); + const score = factory.EasyScore(); + const voice = score.voice(score.notes(noteGroup)); + setupVibratoBracket(factory, voice.getTickables()); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + options.assert.ok(true); + }; +} +const simple = createTest('c4/4, c4, c4, c4', (factory, notes) => { + factory.VibratoBracket({ + from: notes[0], + to: notes[3], + options: { line: 2 }, + }); +}); +const withoutEndNote = createTest('c4/4, c4, c4, c4', (factory, notes) => { + factory.VibratoBracket({ + from: notes[2], + to: null, + options: { line: 2, harsh: true }, + }); +}); +const withoutStartNote = createTest('c4/4, c4, c4, c4', (factory, notes) => { + factory.VibratoBracket({ + from: null, + to: notes[2], + options: { line: 2, harsh: true }, + }); +}); +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(VibratoBracketTests); + + + +/***/ }), + +/***/ "./tests/voice_tests.ts": +/*!******************************!*\ + !*** ./tests/voice_tests.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VoiceTests": () => (/* binding */ VoiceTests) +/* harmony export */ }); +/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); +/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); +/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); +/* harmony import */ var _mocks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mocks */ "./tests/mocks.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Voice Tests + + + + + + + + +const VoiceTests = { + Start() { + QUnit.module('Voice'); + QUnit.test('Strict Test', strict); + QUnit.test('Ignore Test', ignore); + _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests('Full Voice Mode Test', full); + }, +}; +const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.RESOLUTION) / 4; +// Helper function to create a tickable with a preset number of ticks. +const createTickable = () => new _mocks__WEBPACK_IMPORTED_MODULE_7__.MockTickable().setTicks(BEAT); +function strict(assert) { + assert.expect(8); + const tickables = [createTickable(), createTickable(), createTickable()]; + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); + assert.equal(voice.getTotalTicks().value(), BEAT * 4, '4/4 Voice has 4 beats'); + assert.equal(voice.getTicksUsed().value(), BEAT * 0, 'No beats in voice'); + voice.addTickables(tickables); + assert.equal(voice.getTicksUsed().value(), BEAT * 3, 'Three beats in voice'); + voice.addTickable(createTickable()); + assert.equal(voice.getTicksUsed().value(), BEAT * 4, 'Four beats in voice'); + assert.equal(voice.isComplete(), true, 'Voice is complete'); + const numeratorBeforeException = voice.getTicksUsed().numerator; + assert.throws(() => voice.addTickable(createTickable()), /BadArgument/, '"Too many ticks" exception'); + // Verify that adding too many ticks does not affect the `ticksUsed` property of the voice. + // See voice.ts: this.ticksUsed.subtract(ticks); + assert.equal(voice.getTicksUsed().numerator, numeratorBeforeException, 'Revert `ticksUsed` after a "Too many ticks" exception'); + assert.equal(voice.getSmallestTickCount().value(), BEAT, 'Smallest tick count is BEAT'); +} +function ignore(assert) { + const tickables = [ + createTickable(), + createTickable(), + createTickable().setIgnoreTicks(true), + createTickable(), + createTickable().setIgnoreTicks(true), + createTickable(), + ]; + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); + voice.addTickables(tickables); + assert.ok(true, 'all pass'); +} +function full(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 550, 200); + const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 50, 500).addClef('treble').addTimeSignature('4/4').setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.Barline.type.END); + const notes = [ + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['c/4'], duration: '4' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['d/4'], duration: '4' }), + new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['r/4'], duration: '4r' }), + ]; + notes.forEach((note) => note.setStave(stave)); + const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice.Mode.FULL).addTickables(notes); + new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); + stave.setContext(ctx).draw(); + voice.draw(ctx); + const bb = voice.getBoundingBox(); + if (bb) { + ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); + } + ctx.stroke(); + options.assert.throws(() => voice.addTickable(new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['c/4'], duration: '2' })), /BadArgument/, 'Voice cannot exceed full amount of ticks'); +} +_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(VoiceTests); + + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!*******************************************!*\ + !*** ./entry/vexflow-debug-with-tests.ts ***! + \*******************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Accidental": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Accidental), +/* harmony export */ "AccidentalTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.AccidentalTests), +/* harmony export */ "Annotation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Annotation), +/* harmony export */ "AnnotationHorizontalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.AnnotationHorizontalJustify), +/* harmony export */ "AnnotationTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.AnnotationTests), +/* harmony export */ "AnnotationVerticalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.AnnotationVerticalJustify), +/* harmony export */ "Articulation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Articulation), +/* harmony export */ "ArticulationTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ArticulationTests), +/* harmony export */ "AutoBeamFormattingTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.AutoBeamFormattingTests), +/* harmony export */ "BEAM_BOTH": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BEAM_BOTH), +/* harmony export */ "BEAM_LEFT": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BEAM_LEFT), +/* harmony export */ "BEAM_RIGHT": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BEAM_RIGHT), +/* harmony export */ "BachDemoTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BachDemoTests), +/* harmony export */ "BarNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BarNote), +/* harmony export */ "Barline": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Barline), +/* harmony export */ "BarlineTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BarlineTests), +/* harmony export */ "BarlineType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BarlineType), +/* harmony export */ "Beam": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Beam), +/* harmony export */ "BeamTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BeamTests), +/* harmony export */ "Bend": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Bend), +/* harmony export */ "BendTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BendTests), +/* harmony export */ "BoundingBox": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BoundingBox), +/* harmony export */ "BoundingBoxComputation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BoundingBoxComputation), +/* harmony export */ "BoundingBoxTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxTests), +/* harmony export */ "Builder": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Builder), +/* harmony export */ "CanvasContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.CanvasContext), +/* harmony export */ "Category": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Category), +/* harmony export */ "ChordSymbol": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ChordSymbol), +/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ChordSymbolHorizontalJustify), +/* harmony export */ "ChordSymbolTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ChordSymbolTests), +/* harmony export */ "ChordSymbolVerticalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ChordSymbolVerticalJustify), +/* harmony export */ "Clef": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Clef), +/* harmony export */ "ClefKeySignatureTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ClefKeySignatureTests), +/* harmony export */ "ClefNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ClefNote), +/* harmony export */ "ClefTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ClefTests), +/* harmony export */ "Crescendo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Crescendo), +/* harmony export */ "CrossBeamTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.CrossBeamTests), +/* harmony export */ "Curve": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Curve), +/* harmony export */ "CurvePosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.CurvePosition), +/* harmony export */ "CurveTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.CurveTests), +/* harmony export */ "Dot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Dot), +/* harmony export */ "DotTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.DotTests), +/* harmony export */ "EasyScore": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.EasyScore), +/* harmony export */ "EasyScoreGrammar": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.EasyScoreGrammar), +/* harmony export */ "EasyScoreTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.EasyScoreTests), +/* harmony export */ "Element": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Element), +/* harmony export */ "Factory": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Factory), +/* harmony export */ "FactoryTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.FactoryTests), +/* harmony export */ "Flow": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Flow), +/* harmony export */ "Font": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Font), +/* harmony export */ "FontStyle": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.FontStyle), +/* harmony export */ "FontTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.FontTests), +/* harmony export */ "FontWeight": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.FontWeight), +/* harmony export */ "Formatter": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Formatter), +/* harmony export */ "FormatterTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.FormatterTests), +/* harmony export */ "Fraction": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Fraction), +/* harmony export */ "FractionTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.FractionTests), +/* harmony export */ "FretHandFinger": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.FretHandFinger), +/* harmony export */ "GhostNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GhostNote), +/* harmony export */ "GhostNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.GhostNoteTests), +/* harmony export */ "Glyph": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Glyph), +/* harmony export */ "GlyphNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GlyphNote), +/* harmony export */ "GlyphNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.GlyphNoteTests), +/* harmony export */ "GraceNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GraceNote), +/* harmony export */ "GraceNoteGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GraceNoteGroup), +/* harmony export */ "GraceNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.GraceNoteTests), +/* harmony export */ "GraceTabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GraceTabNote), +/* harmony export */ "GraceTabNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.GraceTabNoteTests), +/* harmony export */ "KeyManager": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.KeyManager), +/* harmony export */ "KeyManagerTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.KeyManagerTests), +/* harmony export */ "KeySigNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.KeySigNote), +/* harmony export */ "KeySignature": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.KeySignature), +/* harmony export */ "KeySignatureTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.KeySignatureTests), +/* harmony export */ "Modifier": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Modifier), +/* harmony export */ "ModifierContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ModifierContext), +/* harmony export */ "ModifierContextTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ModifierContextTests), +/* harmony export */ "ModifierPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ModifierPosition), +/* harmony export */ "MultiMeasureRest": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.MultiMeasureRest), +/* harmony export */ "MultiMeasureRestTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.MultiMeasureRestTests), +/* harmony export */ "Music": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Music), +/* harmony export */ "MusicTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.MusicTests), +/* harmony export */ "Note": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Note), +/* harmony export */ "NoteHead": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.NoteHead), +/* harmony export */ "NoteHeadTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.NoteHeadTests), +/* harmony export */ "NoteSubGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.NoteSubGroup), +/* harmony export */ "NoteSubGroupTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.NoteSubGroupTests), +/* harmony export */ "OffscreenCanvasTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.OffscreenCanvasTests), +/* harmony export */ "Ornament": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Ornament), +/* harmony export */ "OrnamentTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.OrnamentTests), +/* harmony export */ "OutlineCode": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.OutlineCode), +/* harmony export */ "Parenthesis": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Parenthesis), +/* harmony export */ "Parser": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Parser), +/* harmony export */ "ParserTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ParserTests), +/* harmony export */ "PedalMarking": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.PedalMarking), +/* harmony export */ "PedalMarkingTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.PedalMarkingTests), +/* harmony export */ "PercussionTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.PercussionTests), +/* harmony export */ "Piece": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Piece), +/* harmony export */ "Registry": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Registry), +/* harmony export */ "RegistryTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.RegistryTests), +/* harmony export */ "RenderContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RenderContext), +/* harmony export */ "Renderer": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer), +/* harmony export */ "RendererBackends": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RendererBackends), +/* harmony export */ "RendererLineEndType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RendererLineEndType), +/* harmony export */ "RendererTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.RendererTests), +/* harmony export */ "RepeatNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RepeatNote), +/* harmony export */ "Repetition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Repetition), +/* harmony export */ "RestsTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.RestsTests), +/* harmony export */ "RhythmTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.RhythmTests), +/* harmony export */ "RuntimeError": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RuntimeError), +/* harmony export */ "SVGContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.SVGContext), +/* harmony export */ "Stave": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Stave), +/* harmony export */ "StaveConnector": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveConnector), +/* harmony export */ "StaveConnectorTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveConnectorTests), +/* harmony export */ "StaveHairpin": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveHairpin), +/* harmony export */ "StaveHairpinTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveHairpinTests), +/* harmony export */ "StaveLine": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveLine), +/* harmony export */ "StaveLineTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveLineTests), +/* harmony export */ "StaveModifier": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveModifier), +/* harmony export */ "StaveModifierPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition), +/* harmony export */ "StaveModifierTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveModifierTests), +/* harmony export */ "StaveNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveNote), +/* harmony export */ "StaveNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveNoteTests), +/* harmony export */ "StaveSection": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveSection), +/* harmony export */ "StaveTempo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveTempo), +/* harmony export */ "StaveTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveTests), +/* harmony export */ "StaveText": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveText), +/* harmony export */ "StaveTie": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveTie), +/* harmony export */ "StaveTieTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveTieTests), +/* harmony export */ "Stem": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Stem), +/* harmony export */ "StemmableNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StemmableNote), +/* harmony export */ "StringNumber": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StringNumber), +/* harmony export */ "StringNumberTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StringNumberTests), +/* harmony export */ "Stroke": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Stroke), +/* harmony export */ "StrokesTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StrokesTests), +/* harmony export */ "StyleTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StyleTests), +/* harmony export */ "SymbolModifiers": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.SymbolModifiers), +/* harmony export */ "SymbolTypes": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.SymbolTypes), +/* harmony export */ "System": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.System), +/* harmony export */ "TabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TabNote), +/* harmony export */ "TabNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TabNoteTests), +/* harmony export */ "TabSlide": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TabSlide), +/* harmony export */ "TabSlideTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TabSlideTests), +/* harmony export */ "TabStave": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TabStave), +/* harmony export */ "TabStaveTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TabStaveTests), +/* harmony export */ "TabTie": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TabTie), +/* harmony export */ "TabTieTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TabTieTests), +/* harmony export */ "TextBracket": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextBracket), +/* harmony export */ "TextBracketPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextBracketPosition), +/* harmony export */ "TextBracketTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TextBracketTests), +/* harmony export */ "TextDynamics": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextDynamics), +/* harmony export */ "TextFormatter": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextFormatter), +/* harmony export */ "TextFormatterTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TextFormatterTests), +/* harmony export */ "TextJustification": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextJustification), +/* harmony export */ "TextNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextNote), +/* harmony export */ "TextNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TextNoteTests), +/* harmony export */ "ThreeVoicesTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ThreeVoicesTests), +/* harmony export */ "TickContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TickContext), +/* harmony export */ "TickContextTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TickContextTests), +/* harmony export */ "Tickable": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Tickable), +/* harmony export */ "TimeSigNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TimeSigNote), +/* harmony export */ "TimeSignature": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TimeSignature), +/* harmony export */ "TimeSignatureGlyph": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TimeSignatureGlyph), +/* harmony export */ "TimeSignatureTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TimeSignatureTests), +/* harmony export */ "Tremolo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Tremolo), +/* harmony export */ "TremoloTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TremoloTests), +/* harmony export */ "Tuning": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Tuning), +/* harmony export */ "TuningTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TuningTests), +/* harmony export */ "Tuplet": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Tuplet), +/* harmony export */ "TupletLocation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TupletLocation), +/* harmony export */ "TupletTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TupletTests), +/* harmony export */ "TypeGuardTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TypeGuardTests), +/* harmony export */ "UnisonTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.UnisonTests), +/* harmony export */ "VFPrefixTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.VFPrefixTests), +/* harmony export */ "Vex": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Vex), +/* harmony export */ "Vibrato": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Vibrato), +/* harmony export */ "VibratoBracket": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.VibratoBracket), +/* harmony export */ "VibratoBracketTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.VibratoBracketTests), +/* harmony export */ "VibratoTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.VibratoTests), +/* harmony export */ "Voice": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Voice), +/* harmony export */ "VoiceMode": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.VoiceMode), +/* harmony export */ "VoiceTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.VoiceTests), +/* harmony export */ "Volta": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Volta), +/* harmony export */ "VoltaType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.VoltaType), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), +/* harmony export */ "defined": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.defined), +/* harmony export */ "drawDot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.drawDot), +/* harmony export */ "globalObject": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.globalObject), +/* harmony export */ "isAccidental": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isAccidental), +/* harmony export */ "isAnnotation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isAnnotation), +/* harmony export */ "isBarline": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isBarline), +/* harmony export */ "isCategory": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isCategory), +/* harmony export */ "isDot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isDot), +/* harmony export */ "isGraceNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isGraceNote), +/* harmony export */ "isGraceNoteGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isGraceNoteGroup), +/* harmony export */ "isHTMLCanvas": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isHTMLCanvas), +/* harmony export */ "isHTMLDiv": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isHTMLDiv), +/* harmony export */ "isNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isNote), +/* harmony export */ "isRenderContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isRenderContext), +/* harmony export */ "isStaveNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isStaveNote), +/* harmony export */ "isStemmableNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isStemmableNote), +/* harmony export */ "isTabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isTabNote), +/* harmony export */ "log": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.log), +/* harmony export */ "midLine": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.midLine), +/* harmony export */ "normalizeAngle": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.normalizeAngle), +/* harmony export */ "prefix": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.prefix), +/* harmony export */ "sumArray": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.sumArray), +/* harmony export */ "warn": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.warn) +/* harmony export */ }); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +/* harmony import */ var _tests_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../tests/index */ "./tests/index.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_fonts_load_all__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/fonts/load_all */ "./src/fonts/load_all.ts"); +/* harmony import */ var _src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/fonts/textfonts */ "./src/fonts/textfonts.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// vexflow-debug-with-tests.ts is the entry point for the build output file vexflow-debug-with-tests.js. +// It statically bundles all the music engraving fonts, and also includes the tests from vexflow/tests/. +// The output file is used by flow.html & flow-headless-browser.html to run the tests. + + + + + +(0,_src_fonts_load_all__WEBPACK_IMPORTED_MODULE_3__.loadAllMusicFonts)(); +_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); +(0,_src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_4__.loadTextFonts)(); +// Re-export all exports from src/index.ts and tests/index.ts. + + +// Also collect all exports into a default export for CJS projects. +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Object.assign(Object.assign({}, _src_index__WEBPACK_IMPORTED_MODULE_0__), _tests_index__WEBPACK_IMPORTED_MODULE_1__)); + +})(); + +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); +//# sourceMappingURL=vexflow-debug-with-tests.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-debug-with-tests.js.map b/build/cjs/vexflow-debug-with-tests.js.map new file mode 100644 index 0000000000..a8fdcb2acc --- /dev/null +++ b/build/cjs/vexflow-debug-with-tests.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-debug-with-tests.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;;;;;;;;;ACVO;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACFP;AACA;AACA;AACA;AACsC;AACN;AACM;AACN;AACE;AAC+D;AAC3D;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ;AACjC;AACA;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iDAAiD;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAA6C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,gEAAgE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D,6BAA6B,kEAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,+CAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wDAAY;AACxC;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,wBAAwB,4DAAgB;AACxC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA;AACA,0BAA0B,2DAAsB;AAChD,QAAQ,8CAAO,+DAA+D,KAAK;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA,iCAAiC,yCAAK,CAAC,2DAAsB,GAAG;AAChE,kCAAkC,yCAAK,CAAC,2DAAsB,GAAG;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC,+BAA+B,8CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO,2CAA2C,KAAK;AAC/D;AACA;AACA,YAAY,uDAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8EAA8E,qCAAqC,IAAI;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC,+BAA+B,8CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;;;;AC/etB;AACA;AACoC;AACoB;AAC1B;AACI;AACc;AACmB;AACtC;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kEAAkE;AAC5D;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,8DAA8D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ;AACjC;AACA;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA,kCAAkC,gEAAoB;AACtD;AACA,8FAA8F,+DAA0B;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,0CAAO;AACpF;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA;AACA;AACA,kEAAkE,+DAA0B;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,2DAAe;AACpC;AACA;AACA,8DAA8D,+DAA0B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS;AAC7B;AACA;AACA,sCAAsC,0CAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS;AAC7B;AACA;AACA,sCAAsC,4CAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAAO;AAChF,8BAA8B,gEAAoB;AAClD,8CAA8C,6DAAsB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,+DAA0B;AAClE,8CAA8C,4CAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,+DAA0B;AACxE,8CAA8C,0CAAO;AACrD;AACA;AACA,mEAAmE,+DAA0B;AAC7F;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,EAAE,uDAAiB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;AC5RtB;AACA;AACA;AACgC;AACM;AACR;AACI;AAC2D;AACzC;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,QAAQ,eAAe,EAAE,wDAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uDAAW,UAAU,uDAAW;AACrE;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAS;AACtB;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAS;AACtB;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,0CAAO;AAClF,2DAA2D,4CAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+CAAQ;AACnC;AACA;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAuH,8CAAO;AAC9H;AACA;AACA;AACA;AACA,6EAA6E,0CAAO;AACpF;AACA;AACA,gBAAgB,2DAAe;AAC/B;AACA;AACA,8DAA8D,+DAA0B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0CAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4CAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,iCAAiC,8DAAuB;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA;AACA,4BAA4B,6DAAwB;AACpD;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B,QAAQ,8CAAO,yDAAyD,UAAU;AAClF,sBAAsB,8CAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA,gBAAgB,IAAI;AACpB;AACA;AACA,wBAAwB,4DAAuB,gCAAgC,gBAAgB;AAC/F;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,EAAE,OAAO,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;;;ACnVxB;AACA;AAC8B;AACwB;AACf;AACV;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uCAAI;AAC1B;AACA,eAAe,wDAAgB;AAC/B;AACA,uBAAuB,6DAAkB;AACzC,gBAAgB,eAAe;AAC/B;AACA,sBAAsB;AACtB;AACA,qBAAqB,sDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,6DAAkB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACmB;;;;;;;;;;;;;;;;;;;;;;;;;AC7EnB;AACA;AACoC;AACE;AACR;AACI;AACQ;AACqB;AACzB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA,eAAe,4CAAS;AACxB;AACA,WAAW,0CAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACO,mBAAmB,6CAAO;AACjC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA;AACA,6CAA6C,+CAAQ;AACrD;AACA,oBAAoB,+CAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wBAAwB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA,iCAAiC,+CAAQ;AACzC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,0CAA0C,sDAAiB;AAC3D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0FAA0F,+CAAQ;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,+CAAQ;AACrD;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,iDAAiD,+CAAQ;AACzD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,2DAAsB;AAC9E;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,0CAAO;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,2DAAsB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iEAAiE,4CAAS,GAAG,0DAAqB,GAAG,uDAAkB;AACvH;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,0BAA0B,2DAAsB;AAChD,sBAAsB,+CAAY;AAClC;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,yBAAyB,uDAAW;AACpC;AACA;AACA,8BAA8B,qDAAS;AACvC;AACA;AACA,gDAAgD,0CAAO,GAAG,4CAAS;AACnE;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAwD,oDAAoD,IAAI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC,oDAAoD,IAAI;AACjH;AACA;AACA;AACA,0BAA0B;AAC1B,kCAAkC;AAClC;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4CAAS;AAC5C;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4CAAS;AACxC;AACA;AACA,oCAAoC,0CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,4CAAS;AAC7C;AACA;AACA,oCAAoC,0CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAqD,8CAA8C,IAAI;AACvH;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA,kEAAkE,0CAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAuB,eAAe;AACzE,gDAAgD,2DAAsB;AACtE,gDAAgD,2DAAsB;AACtE,sCAAsC,2DAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,2DAAsB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,6CAAU;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACvzBA;AACA;AACoC;AACE;AACU;AACE;AACZ;AACtC;AACA,mBAAmB,+CAAQ;AAC3B;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gCAAgC;AAC7D;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,+DAAwB;AAC7E;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,EAAE,uDAAiB;AACpC;;;;;;;;;;;;;;;ACxPhB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC/HA;AACA;AAC8B;AACkB;AACJ;AACP;AACrC;AACA;AACA;AACA;AACO,4BAA4B,yDAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2CAAI;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wGAAwG,mDAAY;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAa;AACtC,8BAA8B,mDAAgB;AAC9C,0BAA0B,+DAA4B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACrPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqD;AACrB;AACM;AACJ;AACc;AACQ;AACb;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,oEAAoE;AAC9D;AACP;AACA;AACA;AACA,CAAC,gEAAgE;AAC1D;AACP;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B;AACP;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA,0BAA0B,+CAAQ;AAClC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,4DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB;AACnD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+DAA4B;AACzD,4BAA4B,iDAAc;AAC1C;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2DAAe;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAAuB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oDAAiB;AACrC,mBAAmB,mDAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mBAAmB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA,sCAAsC,qCAAqC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yCAAK,gCAAgC,yBAAyB;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,iEAAiE,iBAAiB,kBAAkB;AACpG;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAmC;AACxE;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gEAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mEAA8B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D,gDAAgD,iDAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACuB;;;;;;;;;;;;;;;;;;;;ACnsBvB;AACA;AACA;AACgC;AACuC;AACrC;AACK;AACD;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yDAAa;AAChC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA,sBAAsB,kDAAc,mDAAmD,UAAU;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA,wDAAwD,UAAU,eAAe,WAAW,GAAG,UAAU;AACzG,2DAA2D,UAAU,eAAe,WAAW,GAAG,UAAU;AAC5G,gCAAgC;AAChC,kCAAkC,yCAAK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+DAA0B,IAAI,+DAA0B;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB;AACzB,8BAA8B,UAAU;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB;;;;;;;;;;;;;;;;;;;ACnKhB;AACA;AACA;AAC8B;AACE;AACF;AACS;AACvC;AACO,uBAAuB,uCAAI;AAClC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA,sBAAsB,kDAAc,iBAAiB,gDAAa,yBAAyB,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA,sBAAsB,kDAAc,iBAAiB,gDAAa,yBAAyB,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,gDAAgD,gDAAa;AACtF,kCAAkC,UAAU;AAC5C,SAAS;AACT;AACA;AACA,mCAAmC,yCAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACc;AACL;AACV;AAC7B;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uCAAI;AAC5B;AACA;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oEAA0B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;ACrGrB;AACA;AACA;AACA;AACoC;AACG;AACD;AAC/B;AACP;AACA;AACA;AACA,CAAC,sCAAsC;AAChC,oBAAoB,6CAAO;AAClC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;ACnIA;AACA;AACA;AACA;AACsC;AACsC;AACtC;AAC/B,kBAAkB,+CAAQ;AACjC;AACA,eAAe,oDAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAS;AAC9B,0BAA0B,aAAa;AACvC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA,4BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1JA;AACA;AAC8C;AAClB;AACsB;AAClB;AACE;AACJ;AACsB;AACpD;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA,sDAAsD;AACtD;AACA;AACA,qBAAqB,8CAAO;AAC5B;AACA,qBAAqB,8CAAO;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA,iFAAiF,UAAU,WAAW,EAAE;AACxG;AACA,oCAAoC,qDAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2CAA2C;AAC3C;AACA;AACA,kCAAkC,gBAAgB;AAClD,kCAAkC,6CAA6C;AAC/E;AACA,kDAAkD,0CAAO,GAAG,4CAAS;AACrE;AACA;AACA;AACA;AACA;AACA,wDAAwD,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,UAAU;AAClC,YAAY,oDAAkB,WAAW,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,qDAAqD,+BAA+B,qEAA0B,EAAE,yEAA4B,wBAAwB,cAAc;AAClL,qBAAqB;AACrB;AACA;AACA;AACA,0BAA0B,2CAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA,4BAA4B;AAC5B,kCAAkC,oDAAoD;AACtF;AACA;AACA;AACA,6BAA6B;AAC7B,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;ACjarB;AACA;AACA;AACqD;AACf;AACC;AACE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA,sBAAsB,aAAa;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAA2B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C;AACA,kCAAkC,kBAAkB,EAAE,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,kCAAkC;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,4BAA4B,qDAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B,UAAU,4CAAS;AACnB,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrYnB;AACA;AACA;AAC0C;AACwD;AACpD;AACV;AACN;AACc;AACN;AACN;AACQ;AACJ;AACI;AACU;AACV;AACA;AACA;AACU;AACR;AACU;AACE;AACR;AACR;AACQ;AACR;AACI;AACV;AACkB;AACV;AACA;AACF;AACQ;AACZ;AACE;AACE;AACM;AACE;AACR;AACM;AACA;AACV;AACkB;AACF;AAClB;AACK;AACrC;AACA;AACA;AACA,QAAQ,2CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA,6BAA6B,YAAY,4BAA4B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY,6CAA6C,EAAE;AAC7G;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAY;AAC5B,0BAA0B,gEAAwB;AAClD;AACA;AACA,0BAA0B,6DAAqB;AAC/C;AACA;AACA,uBAAuB,6DAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J,0BAA0B,0CAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J,0BAA0B,gDAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,4BAA4B,6CAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,eAAe;AACf,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C,gCAAgC,sDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAc;AACxC;AACA;AACA;AACA;AACA,0BAA0B,mDAAU;AACpC;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB,2EAAkC,YAAY,yEAAgC,EAAE;AACvI,+BAA+B,mDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uEAAuE;AACzG,gCAAgC,qDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E,6BAA6B,gDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAA4C;AAC9E,yBAAyB,wDAAY;AACrC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE,8BAA8B,4DAAc;AAC5C;AACA;AACA;AACA;AACA;AACA,iCAAiC,wDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sDAAW;AAC9B;AACA;AACA,mBAAmB,8DAAe;AAClC;AACA;AACA,4BAA4B,+CAAO;AACnC,qCAAqC,gEAAgB;AACrD;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C,0BAA0B,0CAAK;AAC/B;AACA;AACA;AACA;AACA,8BAA8B,4DAAc;AAC5C;AACA;AACA;AACA;AACA;AACA,mBAAmB,kDAAS;AAC5B;AACA;AACA,kCAAkC,wBAAwB;AAC1D,2BAA2B,4CAAM;AACjC;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA,wBAAwB,gDAAQ;AAChC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAc;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,2BAA2B,4CAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY,6CAA6C;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,mBAAmB,iDAAS;AAC5B;AACA;AACA,kCAAkC;AAClC;AACA,eAAe;AACf,0BAA0B,wDAAY;AACtC,sBAAsB,mEAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA,kCAAkC,WAAW;AAC7C,0BAA0B,wDAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,EAAE,uDAAiB;AACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9fnB,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AAC0C;AACwD;AACpD;AACV;AACN;AACA;AACc;AACsB;AAClB;AACqF;AACvG;AACQ;AACE;AACO;AACnB;AACY;AACJ;AACA;AACiB;AACb;AACF;AACY;AACV;AACR;AACQ;AACA;AACU;AACJ;AACJ;AACI;AACJ;AACc;AACJ;AACE;AACtB;AACF;AACQ;AACQ;AACR;AACM;AACV;AACY;AACR;AACU;AAC6B;AACnC;AACV;AACsB;AACJ;AACJ;AACN;AAC+B;AAC/B;AACO;AACL;AACF;AACF;AACU;AAClB;AACgB;AACX;AACO;AACR;AACA;AACE;AACE;AACA;AACJ;AAC+B;AACnB;AACE;AACS;AACb;AACI;AACJ;AACR;AACF;AACA;AACY;AACV;AACc;AACP;AAC3C;AACA;AACA;AACA;AACA,qBAAqB,8CAAO;AAC5B;AACA,gBAAgB,yCAAE;AAClB;AACA,kBAAkB,2CAAI;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,6CAAS;AAC3D,QAAQ,6DAAuB;AAC/B,QAAQ,2DAAsB;AAC9B,QAAQ,4DAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,6DAAuB;AAC7C;AACA;AACA;AACA,eAAe,6DAAuB;AACtC;AACA;AACA,eAAe,oEAA8B;AAC7C;AACA;AACA,QAAQ,oEAA8B;AACtC;AACA;AACA,eAAe,2DAAqB;AACpC;AACA;AACA,QAAQ,2DAAqB;AAC7B;AACA;AACA,eAAe,gEAA0B;AACzC;AACA;AACA,QAAQ,gEAA0B;AAClC;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,uDAAiB;AAChC;AACA;AACA,QAAQ,uDAAiB;AACzB;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,gEAA0B;AACzC;AACA;AACA,QAAQ,gEAA0B;AAClC;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,wDAAkB;AACjC;AACA;AACA,QAAQ,wDAAkB;AAC1B;AACA;AACA,eAAe,uDAAiB;AAChC;AACA;AACA,QAAQ,uDAAiB;AACzB;AACA;AACA,eAAe,oDAAc;AAC7B;AACA;AACA,eAAe,0DAAoB;AACnC;AACA;AACA,eAAe,oDAAc;AAC7B;AACA;AACA,eAAe,yDAAmB;AAClC;AACA;AACA,eAAe,4DAAsB;AACrC;AACA;AACA,eAAe,6DAAuB;AACtC;AACA;AACA,eAAe,2DAAqB;AACpC;AACA;AACA;AACA,eAAe,0DAAoB;AACnC;AACA;AACA,eAAe,4DAAsB;AACrC;AACA;AACA,kBAAkB,mDAAU;AAC5B,kBAAkB,mDAAU;AAC5B,oBAAoB,uDAAY;AAChC,eAAe,mDAAO;AACtB,eAAe,6CAAO;AACtB,YAAY,uCAAI;AAChB,YAAY,uCAAI;AAChB,mBAAmB,qDAAW;AAC9B,8BAA8B,2EAAsB;AACpD,qBAAqB,yDAAa;AAClC,mBAAmB,qDAAW;AAC9B,YAAY,wCAAI;AAChB,gBAAgB,gDAAQ;AACxB,iBAAiB,kDAAS;AAC1B,aAAa,0CAAK;AAClB,WAAW,sCAAG;AACd,iBAAiB,kDAAS;AAC1B,eAAe,8CAAO;AACtB,eAAe,8CAAO;AACtB,YAAY,wCAAI;AAChB,iBAAiB,kDAAS;AAC1B,gBAAgB,gDAAQ;AACxB,sBAAsB,4DAAc;AACpC,iBAAiB,kDAAS;AAC1B,aAAa,0CAAK;AAClB,iBAAiB,kDAAS;AAC1B,iBAAiB,kDAAS;AAC1B,sBAAsB,4DAAc;AACpC,oBAAoB,wDAAY;AAChC,kBAAkB,oDAAU;AAC5B,oBAAoB,wDAAY;AAChC,kBAAkB,oDAAU;AAC5B,gBAAgB,gDAAQ;AACxB,uBAAuB,8DAAe;AACtC,wBAAwB,gEAAgB;AACxC,aAAa,0CAAK;AAClB,YAAY,wCAAI;AAChB,gBAAgB,gDAAQ;AACxB,oBAAoB,wDAAY;AAChC,gBAAgB,gDAAQ;AACxB,mBAAmB,sDAAW;AAC9B,cAAc,4CAAM;AACpB,oBAAoB,wDAAY;AAChC,gBAAgB,gDAAQ;AACxB,qBAAqB,0DAAa;AAClC,gBAAgB,gDAAQ;AACxB,kBAAkB,oDAAU;AAC5B,kBAAkB,yDAAU;AAC5B,aAAa,0CAAK;AAClB,sBAAsB,4DAAc;AACpC,oBAAoB,wDAAY;AAChC,iBAAiB,kDAAS;AAC1B,qBAAqB,0DAAa;AAClC,iBAAiB,kDAAS;AAC1B,kBAAkB,oDAAU;AAC5B,iBAAiB,kDAAS;AAC1B,gBAAgB,gDAAQ;AACxB,YAAY,wCAAI;AAChB,oBAAoB,wDAAY;AAChC,cAAc,6CAAM;AACpB,kBAAkB,oDAAU;AAC5B,cAAc,4CAAM;AACpB,eAAe,8CAAO;AACtB,gBAAgB,gDAAQ;AACxB,gBAAgB,gDAAQ;AACxB,cAAc,4CAAM;AACpB,mBAAmB,sDAAW;AAC9B,oBAAoB,wDAAY;AAChC,qBAAqB,0DAAa;AAClC,gBAAgB,gDAAQ;AACxB,mBAAmB,sDAAW;AAC9B,qBAAqB,0DAAa;AAClC,mBAAmB,sDAAW;AAC9B,eAAe,8CAAO;AACtB,cAAc,4CAAM;AACpB,cAAc,4CAAM;AACpB,eAAe,8CAAO;AACtB,sBAAsB,4DAAc;AACpC,aAAa,0CAAK;AAClB,aAAa,+CAAK;AAClB;AACA;AACA,mCAAmC,oEAA2B;AAC9D,iCAAiC,kEAAyB;AAC1D,oCAAoC,sEAA4B;AAChE,kCAAkC,oEAA0B;AAC5D,mBAAmB,qDAAW;AAC9B,uBAAuB,yDAAe;AACtC,qBAAqB,kDAAa;AAClC,kBAAkB,8CAAU;AAC5B,iBAAiB,6CAAS;AAC1B,wBAAwB,wDAAgB;AACxC,wBAAwB,wDAAgB;AACxC,2BAA2B,2DAAmB;AAC9C,mBAAmB,uDAAW;AAC9B,6BAA6B,kEAAqB;AAClD,iBAAiB,mDAAS;AAC1B,2BAA2B,8DAAmB;AAC9C,yBAAyB,yDAAiB;AAC1C,iBAAiB,8CAAS;AACV;;;;;;;;;;;;;;;;;;ACtVhB,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACiC;AAC1B;AACP;AACA;AACA;AACA,CAAC,gCAAgC;AAC1B;AACP;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,sBAAsB,oBAAoB,EAAE,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB;;;;;;;;;;;;;;;AC/XT;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACt9GO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,wBAAwB;AACxB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,4BAA4B;AAC5B,0BAA0B;AAC1B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,+BAA+B;AAC/B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,4BAA4B;AAC5B,iCAAiC;AACjC;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,oBAAoB;AACpB;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;AC7YO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;ACzCO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9lCO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACtqCA;AACA;AACA;AACA;AAC6C;AACF;AACI;AACJ;AACI;AAC/C;AACA,YAAY,UAAU;AACtB;AACO;AACP,IAAI,0DAAW;AACf,IAAI,4DAAY;AAChB,IAAI,4DAAY;AAChB,IAAI,wDAAU;AACd,IAAI,wDAAU;AACd;AACA;AACA;;;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC+B;AACgB;AACE;AAC1C;AACP,IAAI,4CAAS,YAAY,wDAAW,EAAE,0DAAa;AACnD;;;;;;;;;;;;;;;;;;ACfA;AACA;AAC+B;AACkB;AACJ;AACtC;AACP,IAAI,4CAAS,WAAW,sDAAU,EAAE,0DAAa;AACjD;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACK;AAC/C;AACP,IAAI,4CAAS,aAAa,+DAAiB,EAAE,0DAAa;AAC1D;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACJ;AACtC;AACP,IAAI,4CAAS,WAAW,sDAAU,EAAE,0DAAa;AACjD;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACA;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACO;AACP,8CAA8C,0DAAa;AAC3D;AACA;AACA;AACA;AACA,IAAI,4CAAS,aAAa,0DAAY;AACtC;;;;;;;;;;;;;;;ACpFO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACtmDO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC91BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC91BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC71BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACr2BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACr2BA;AACA;AAC+B;AACkB;AACY;AACR;AACG;AACT;AACE;AAC1C;AACP;AACA;AACA,yBAAyB,iEAAY;AACrC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,wDAAQ;AACjC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,0DAAS;AAClC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,8DAAc;AACvC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,sEAAkB;AAC3C,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACxHA;AACA;AAC8B;AACA;AACQ;AACc;AACpB;AACkB;AAChB;AACU;AACM;AACqB;AACvC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAQ;AACtC;AACA;AACA;AACA;AACA,iDAAiD,sBAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0BAA0B;AACtE;AACA,YAAY,kDAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB,IAAI;AAClE;AACA,0CAA0C,6DAAe;AACzD,6BAA6B,qDAAW;AACxC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kCAAkC,cAAc,4DAAuB,kCAAkC;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAe;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8BAA8B,uCAAuC,SAAS,wCAAwC,OAAO,6BAA6B;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,+EAA+E,kBAAkB;AACjG;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA,0BAA0B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AACvE;AACA,0CAA0C,wDAAqB;AAC/D;AACA;AACA,wCAAwC,kCAAkC;AAC1E,6CAA6C,yCAAyC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AAC3E;AACA,6BAA6B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AAC1E;AACA,uCAAuC,wDAAqB;AAC5D;AACA;AACA,4CAA4C,+BAA+B;AAC3E;AACA,2DAA2D,+BAA+B;AAC1F;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAc;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gDAAgD,qCAAqC,0DAAqB,oBAAoB;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,4DAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,oCAAoC,sDAAiB;AACrD,0BAA0B,+CAAY;AACtC;AACA,yCAAyC,mDAAY;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+CAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA,2CAA2C,6DAAe;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qDAAW;AACzE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gBAAgB,8CAA8C;AAC9D;AACA,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,8CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yCAAyC;AAClF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6BAA6B;AACrE;AACA,2EAA2E,wDAAoB;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;ACp2BrB;AACA;AACA;AACA;AACA;AACuC;AACD;AACtC;AACA;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,oCAAoC,EAAE,IAAI,EAAE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe,GAAG,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACpNA;AACA;AACA;AACA;AACqD;AACG;AACtB;AACc;AACT;AACD;AACtC,6BAA6B,+CAAQ;AACrC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAoB;AACtD;AACA,iCAAiC,6DAAsB;AACvD,oDAAoD,+DAA0B;AAC9E;AACA,iCAAiC,6DAAsB;AACvD,gDAAgD,+DAA0B;AAC1E;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,oBAAoB,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,mDAAmD;AACnD;AACA;AACA,6BAA6B,8DAAuB;AACpD;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa,IAAI;AAC5C;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB,EAAE;AAChD;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,iBAAiB,6DAAsB;AACvC;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AAC0B;;;;;;;;;;;;;;;;;;ACpK1B;AACA;AACA;AACgD;AACK;AACf;AACtC;AACO,wBAAwB,yDAAa;AAC5C;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,gBAAgB,wDAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC7DA;AACA;AAC4C;AACsB;AAC9B;AACF;AACK;AACQ;AACxC;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,KAAK,GAAG,SAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAO;AAC3B;AACA;AACA;AACA,eAAe,sDAAc;AAC7B;AACA;AACA,uCAAuC,SAAS,EAAE,KAAK,EAAE,IAAI;AAC7D,wCAAwC,SAAS,EAAE,IAAI;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,SAAS,GAAG,KAAK,GAAG,IAAI;AACxE;AACA,sDAAsD,MAAM;AAC5D,gDAAgD,SAAS,GAAG,IAAI;AAChE;AACA;AACA;AACA;AACA,QAAQ,8CAAO;AACf;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA,yBAAyB;AACzB;AACA,kBAAkB,+CAAY,sBAAsB,MAAM;AAC1D;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA,sBAAsB,+CAAY,sBAAsB,MAAM;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2EAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAW;AACnC;AACA;AACA,eAAe,8CAAO,oCAAoC,WAAW;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACiB;;;;;;;;;;;;;;;;;ACzYjB;AACA;AACA;AAC8B;AACS;AAChC,wBAAwB,uCAAI;AACnC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC9DA;AACwC;AACV;AACI;AACK;AACD;AAC/B,wBAAwB,iDAAS;AACxC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB,+DAA0B,6DAA6D;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAW,2BAA2B,8CAAW;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,+DAA0B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,4CAAS;AACpD;AACA;AACA,gEAAgE,4CAAS;AACzE,qCAAqC,uDAAkB;AACvD;AACA;AACA;AACA,mDAAmD,0CAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACU;AACF;AACE;AACF;AACJ;AACA;AACkB;AACvB;AACG;AAChC;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA,6BAA6B,+CAAQ;AACrC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA,iCAAiC,uDAAW;AAC5C;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA,8BAA8B,yCAAyC;AACvE;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,0GAA0G,oEAA4B;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA,wBAAwB,sDAAiB;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iDAAS;AAC1C;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oEAA4B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAW;AAC5C,4CAA4C,+CAAQ,GAAG,2CAAM;AAC7D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AAC0B;;;;;;;;;;;;;;;;;;ACjJ1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACM;AACG;AAChC,2BAA2B,6CAAO;AACzC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAe,CAAC,GAAG;AAC9C;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AAC6B;AACA;AACE;AACL;AACH;AACA;AACO;AACW;AACT;AACF;AACP;AACI;AACC;AACJ;AACF;AACM;AACF;AACA;AACH;AACA;AACvB;AAC4B;AACD;AACM;AACL;AACJ;AACI;AACA;AACK;AACF;AACF;AACE;AACF;AACF;AACO;AACC;AACX;AACD;AACI;AACI;AACJ;AACG;AACL;AACM;AACJ;AACK;AACL;AACE;AACL;AACO;AACE;AACF;AACH;AACI;AACJ;AACM;AACH;AACF;AACD;AACD;AACE;AACN;AACS;AACD;AACL;AACG;AACJ;AACzB;AAC0B;AACC;AACA;AACF;AACK;AACC;AACC;AACL;AACA;AACG;AACC;AACC;AACF;AACJ;AACD;AACA;AACG;AACL;AACvB;AACsB;AACI;AACO;AACT;AACF;;;;;;;;;;;;;;;;;AC7FtB;AACA;AACA;AACA;AACA;AACgC;AACM;AAC/B;AACP;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oDAAgB;AAClD;AACA,sBAAsB,+CAAY,0CAA0C,SAAS;AACrF;AACA,uFAAuF,oDAAgB;AACvG;AACA;AACA;AACA,6BAA6B,sDAAkB;AAC/C,wBAAwB,IAAI,sDAAkB,EAAE;AAChD,+CAA+C,sDAAkB;AACjE,6BAA6B,+CAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACgC;AACuC;AACrC;AACK;AACN;AACjC,2BAA2B,yDAAa;AACxC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD,8BAA8B,+DAA0B;AACxD;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAAsB;AACnD,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,uBAAuB,wDAAmB,CAAC,8CAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qEAAyB;AACrE;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACwB;;;;;;;;;;;;;;;;;;ACtSxB;AACA;AAC8C;AAChB;AACS;AAChC,yBAAyB,uCAAI;AACpC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA,gBAAgB,eAAe;AAC/B,gCAAgC,uDAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClCA;AACA;AACoC;AACG;AACQ;AACxC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,6CAAO;AACrC;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO,sCAAsC,UAAU;AAC/D,eAAe,8CAAO,oCAAoC,UAAU;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0C;AACA;AACI;AAChB;AACc;AAChB;AACsB;AACA;AACJ;AACR;AACM;AACJ;AACM;AACX;AACI;AACI;AACP;AACpC;AACA;AACA;AACA;AACA,QAAQ,2CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAgB,SAAS,2DAAkB;AACnD,QAAQ,6DAAkB,SAAS,6DAAoB;AACvD,QAAQ,4CAAU,SAAS,qDAAY;AACvC,QAAQ,kEAAqB,SAAS,gEAAuB;AAC7D,QAAQ,0DAAiB,SAAS,4DAAmB;AACrD,QAAQ,oDAAa,SAAS,wDAAe;AAC7C,QAAQ,kEAAqB,SAAS,gEAAuB;AAC7D,QAAQ,8DAAmB,SAAS,8DAAqB;AACzD,QAAQ,+DAAmB,SAAS,8DAAqB;AACzD,QAAQ,8DAAmB,SAAS,8DAAqB;AACzD,QAAQ,sDAAe,SAAS,0DAAiB;AACjD,QAAQ,0DAAiB,SAAS,4DAAmB;AACrD,QAAQ,4DAAkB,SAAS,6DAAoB;AACvD,QAAQ,8CAAW,SAAS,sDAAa;AACzC,QAAQ,qDAAc,SAAS,yDAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAoB,iBAAiB,2DAAkB;AAC/D;AACA;AACA;AAC2B;;;;;;;;;;;;;;;;;;;;;;;AC9I3B;AACA;AACA;AACA;AACoC;AACJ;AACM;AACkB;AACtB;AACc;AACE;AACjB;AACjC;AACA;AACA;AACA,6BAA6B,+CAAQ,GAAG,+BAA+B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,6CAAO;AAC7C;AACA,eAAe,iEAAyB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD,8CAA8C,6JAA6J,+DAA0B,qCAAqC,+DAA0B,kDAAkD,+DAA0B,2EAA2E;AAC3b;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC,YAAY,qDAAiB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,uEAA2B;AAC3E,yCAAyC,qDAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yDAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9LA;AACA;AACsC;AACtC;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,wBAAwB;AAC1C,oBAAoB,yBAAyB;AAC7C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,4BAA4B;AAC/C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,4BAA4B;AAChD,qBAAqB,4BAA4B;AACjD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,4BAA4B;AAC7C,kBAAkB,4BAA4B;AAC9C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,iCAAiC,UAAU;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,WAAW;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,eAAe;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wCAAwC,UAAU;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,4CAA4C,cAAc;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,UAAU;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY,uCAAuC,KAAK,IAAI,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,KAAK,IAAI,UAAU;AAC5F;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,eAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,UAAU;AACnF;AACA;AACA,sBAAsB,+CAAY,mCAAmC,MAAM,IAAI,MAAM;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AClXA;AACA;AAC8B;AACY;AACR;AACI;AACC;AACQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,mBAAmB,+CAAQ;AAClC;AACA;AACA;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,QAAQ,uDAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,oBAAoB,2DAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,2BAA2B;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,wDAAwD,yDAAoB;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,sCAAsC;AACtC,uCAAuC;AACvC,0BAA0B;AAC1B,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oDAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4DAAuB;AACzC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,4DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+DAA0B,IAAI,+DAA0B;AAC3F;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC/eA;AACA;AAC4C;AACZ;AACF;AACA;AACI;AACK;AACD;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gEAA2B;AAC7C;AACA,qBAAqB,sDAAiB;AACtC;AACA,QAAQ,4DAAuB;AAC/B;AACA;AACA;AACA,cAAc,sDAAiB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8DAAyB;AACjC;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uCAAI;AAC3B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,0CAAO;AAClE;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,6DAA6D,+DAA0B,EAAE;AACzF;AACA;AACA;AACA,cAAc,kDAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,6CAAU;AACrD,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,MAAM,mBAAmB,0CAAO,iBAAiB;AACnG;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAiB;AAC7B,sCAAsC,eAAe;AACrD,aAAa;AACb;AACA;AACA;AACA;AACA;AACoB;;;;;;;;;;;;;;;;;;;;ACnNpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwC;AACF;AACJ;AACK;AACP;AACzB,2BAA2B,+CAAQ;AAC1C;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,iDAAS;AACtC,yBAAyB,yCAAK;AAC9B;AACA;AACA,wBAAwB,sDAAiB;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpEA;AACA;AACA;AACgC;AACM;AACR;AACI;AACU;AACM;AACE;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAQ;AAC/B;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,6CAA6C;AAC7C;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8CAAO;AAC5C,oFAAoF,8DAAuB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,8DAAuB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB;AACvD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA,wBAAwB,yDAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,0CAA0C,UAAU;AACtF;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B,kCAAkC,mBAAmB;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAK,CAAC,2DAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAK,CAAC,2DAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4CAAS;AACrC;AACA,YAAY,qDAAS;AACrB;AACA,gCAAgC,4CAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,4CAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oEAA0B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoB;;;;;;;;;;;;;;;;;;;;ACvRpB;AACA;AACA;AACgC;AACwB;AAC1B;AACI;AACkB;AACpD;AACO,0BAA0B,+CAAQ;AACzC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD,iDAAiD,4DAAqB;AACtE,iDAAiD,6DAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA,wBAAwB,4DAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,6DAAsB;AACpG,2BAA2B,4DAAuB,+EAA+E,gDAAa;AAC9I,sBAAsB,4DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA,2BAA2B,4DAAuB,+EAA+E,gDAAa;AAC9I,sBAAsB,4DAAuB;AAC7C,YAAY,uDAAW;AACvB,+BAA+B,4DAAuB,iFAAiF,gDAAa;AACpJ,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA,6BAA6B,8DAAuB;AACpD,YAAY,qDAAiB;AAC7B;AACA,aAAa;AACb;AACA,kCAAkC,6DAAsB;AACxD,YAAY,qDAAiB;AAC7B;AACA,aAAa;AACb;AACA;AACA;;;;;;;;;;;;;;;;AC3FA;AACA;AACA;AAC2C;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,cAAc;AACnE,kDAAkD,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACkB;;;;;;;;;;;;;;;;;;;;;ACpNlB;AACA;AACoC;AACiB;AACrB;AACE;AACK;AACI;AAC3C;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yCAAK,2BAA2B,0BAA0B;AAChF;AACA,0DAA0D,+DAA0B;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6CAAO;AAClC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB,gCAAgC,mCAAmC,2CAA2C,+DAA0B;AAC/L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB,gCAAgC,mCAAmC,2CAA2C,+DAA0B;AAC/L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;ACtPxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,2BAA2B,yEAAyE;AACpG;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnHA;AACA;AACuC;AAChC;AACP;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACgD;AACN;AACI;AACR;AACU;AACzC;AACP;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACO;AACP;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAY,gDAAgD,aAAa;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kDAAY;AACjC,8BAA8B,+CAAY;AAC1C;AACA,2DAA2D,0BAA0B;AACrF;AACA,8BAA8B,+CAAY;AAC1C;AACA,+BAA+B,yDAAa;AAC5C;AACA;AACA,qBAAqB,+CAAS;AAC9B,8BAA8B,+CAAY;AAC1C;AACA,+BAA+B,mDAAU;AACzC;AACA;AACA,0BAA0B,+CAAY,8CAA8C,QAAQ;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoB;;;;;;;;;;;;;;;;;;;AC/HpB;AACgC;AACQ;AACN;AACK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,iDAAS;AACzC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA,0BAA0B,yCAAK,YAAY,4DAAuB;AAClE;AACA,SAAS;AACT,qCAAqC,+CAA+C;AACpF;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AAC4C;AACd;AACM;AACiB;AACP;AACQ;AACE;AACT;AACD;AACJ;AACF;AACH;AACH;AACc;AACE;AACZ;AACtC;AACA;AACA;AACA;AACA,KAAK,2DAAgB;AACrB,KAAK,gDAAa;AAClB,KAAK,gEAAqB;AAC1B,KAAK,mEAAsB;AAC3B;AACA;AACA,KAAK,mEAAsB;AAC3B,KAAK,gEAAqB;AAC1B,KAAK,2DAAgB;AACrB,KAAK,gDAAa;AAClB;AACA,oBAAoB,6CAAO;AAC3B;AACA,eAAe,uDAAc;AAC7B;AACA;AACA;AACA;AACA,0BAA0B,6DAAuB;AACjD;AACA;AACA;AACA;AACA,0BAA0B,6DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uCAAuC,wHAAwH,gEAA0B,oHAAoH;AAC7S,wBAAwB;AACxB,wCAAwC;AACxC;AACA;AACA,6BAA6B,kDAAO,yBAAyB,6DAAkB,GAAG,2DAAgB;AAClG;AACA,gCAAgC,kDAAO,0BAA0B,6DAAkB,GAAG,2DAAgB;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iEAA2B;AAChE;AACA;AACA,0DAA0D,iEAA2B;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qFAAqF,iEAA2B,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA,8BAA8B,uEAA2B;AACzD;AACA;AACA;AACA,oDAAoD,uEAA2B;AAC/E;AACA;AACA;AACA;AACA,qCAAqC,mEAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,wDAAU;AAC1C;AACA;AACA;AACA;AACA,gCAAgC,+CAAK;AACrC;AACA;AACA;AACA;AACA,iCAAiC,uDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mDAAU;AAC1C;AACA;AACA;AACA,wCAAwC;AACxC,gCAAgC,kDAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qEAAyB;AAC5D;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B,EAAE,sDAAW;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAwB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,yBAAyB,qEAAyB;AAClD;AACA;AACA;AACA;AACA;AACA,kDAAkD,gDAAa;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,qEAAyB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,0DAA0D,gEAAqB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,qEAAyB;AAC9E;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,2DAA2D,mEAAsB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,qEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,6BAA6B,uDAAY;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uEAA2B;AAC9E;AACA;AACA,8BAA8B,qEAAyB;AACvD;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA,6CAA6C,qEAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,0DAAa;AAC1C;AACA;AACA;AACA,uDAAuD,qEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,uEAA2B;AAC1E,+CAA+C,qEAAyB;AACxE;AACA;AACA,gEAAgE,mEAAwB;AACxF;AACA,0CAA0C,kDAAO,CAAC,6DAAkB;AACpE;AACA;AACA,0CAA0C,kDAAO,CAAC,2DAAgB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA,6BAA6B,sDAAS;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,uEAA2B;AAChF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,qDAAqD,uEAA2B;AAChF;AACA;AACA;AACA;AACA,iBAAiB;AACjB,wDAAwD,uEAA2B;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,sDAAa;AAC1C;AACA,6BAA6B,8DAAqB;AAClD;AACA,6BAA6B,+DAAsB;AACnD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iDAAiD,uEAA2B,EAAE,yDAAgB;AAC9F;AACA,0CAA0C,mEAAwB;AAClE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,iDAAiD,uEAA2B,EAAE,yDAAgB;AAC9F;AACA,0CAA0C,mEAAwB;AAClE;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACiB;;;;;;;;;;;;;;;;;;;ACjuBjB;AACA;AACA;AACuE;AACrC;AACK;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B,sBAAsB,yDAAa;AAC1C;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACrMA;AACA;AACoC;AACiB;AACrB;AACE;AACK;AACD;AACtC;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAO;AACpC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA,yBAAyB,gEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,qCAAqC,wBAAwB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAiB;AACjC,gBAAgB,qDAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY,qDAAqD,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0B;;;;;;;;;;;;;;;;;;;AC/O1B;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACE;AACC;AACD;AACtC,2BAA2B,6CAAO;AAClC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAuB,iBAAiB,8DAAuB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAuB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;;;;AChKxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACF;AACa;AACR;AACD;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAO;AAC/B;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,mEAA8B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,EAAE,uDAAiB;AACzD;AACA;AACA;AACA;AACA;AACA,8BAA8B,wDAAiB;AAC1B;;;;;;;;;;;;;;;;;;;AClRrB;AACA;AACA;AACA;AACoC;AACG;AACN;AAC1B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AAChD,4BAA4B,6CAAO;AAC1C;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC4C;AACN;AACA;AACR;AACkB;AACd;AACK;AACsB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,iFAAiF,0CAAO;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC;AACA;AACA;AACA;AACA;AACA,wBAAwB,yDAAa;AACrC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA,eAAe,0CAAO;AACtB;AACA;AACA;AACA;AACA;AACA,eAAe,4CAAS;AACxB;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,wDAAmB;AAC7D,0CAA0C,wDAAmB;AAC7D;AACA;AACA,yBAAyB,kDAAa;AACtC;AACA;AACA;AACA,8FAA8F,oDAAY;AAC1G;AACA,kGAAkG,oDAAY;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,6DAA6D,+DAA0B;AACvF;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,0CAAO;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI,GAAG,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+CAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,0CAAO,GAAG,4CAAS;AACzE;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,0BAA0B,yDAAoB;AAC9C;AACA,0BAA0B,+CAAY,qDAAqD,IAAI;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAyB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,6CAAU;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,4BAA4B,EAAE,wDAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,4CAAS;AACvF;AACA;AACA,kGAAkG,0CAAO;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,0CAAO;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,kBAAkB,QAAQ;AAC1B;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,cAAc;AAChC;AACA,kBAAkB,cAAc;AAChC,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B,WAAW,IAAI;AAC7D;AACA;AACA,sEAAsE,6CAAU;AAChF;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,iKAAiK;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,4CAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mBAAmB;AACxF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,+BAA+B,0CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;;AC/iCrB;AACA;AACqD;AACrB;AACgB;AACd;AACK;AACvC,yBAAyB,yDAAa;AACtC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,sDAAsD,4DAAuB,+DAA+D,kBAAkB;AACvL;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,sDAAsD,4DAAuB,iEAAiE,mBAAmB;AAC1L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA,YAAY,4DAAuB;AACnC;AACA,YAAY,qDAAiB,mBAAmB,+DAA4B;AAC5E;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB,UAAU,+DAA0B;AACpC,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;ACrKtB;AACA;AACqD;AACL;AACA;AACT;AACvC,2BAA2B,yDAAa;AACxC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACwB;;;;;;;;;;;;;;;;;;;;;AClExB;AACA;AACqD;AACrB;AACuC;AACrC;AACc;AACT;AACvC,yBAAyB,yDAAa;AACtC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,wBAAwB,uEAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,+DAA0B;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oBAAoB,mCAAmC;AACtH;AACA,sCAAsC,gEAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA,+BAA+B,yDAAoB;AACnD;AACA,YAAY,qDAAiB;AAC7B,iBAAiB,kDAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qDAAiB;AACzD;AACA,qBAAqB;AACrB,8CAA8C,+DAA0B;AACxE;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACsB;;;;;;;;;;;;;;;;;;;;ACrGtB;AACA;AACqD;AACkB;AACd;AAClB;AACD;AACtC,wBAAwB,yDAAa;AACrC;AACA,eAAe,0DAAkB;AACjC;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,uCAAuC,uCAAuC,oEAA6B,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sEAA0B;AAC3C,iBAAiB,uEAA2B;AAC5C;AACA,sCAAsC,sEAA0B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uEAA2B;AAC5C,iBAAiB,uEAA2B;AAC5C;AACA,mDAAmD,+DAAwB;AAC3E;AACA;AACA,wDAAwD,8DAAuB;AAC/E;AACA;AACA,sCAAsC,uEAA2B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACqB;;;;;;;;;;;;;;;;;;ACrFrB;AACA;AACA;AACA;AACoC;AACG;AACD;AACtC,uBAAuB,6CAAO;AAC9B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC,EAAE,uDAAiB;AACpC;;;;;;;;;;;;;;;;;;;ACpLpB;AACA;AACqD;AACL;AACT;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B,oBAAoB,yDAAa;AACjC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACiB;;;;;;;;;;;;;;;;;;;ACvEjB;AACA;AACA;AACA;AACA;AACoC;AACF;AACK;AACI;AAC3C;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,mBAAmB,6CAAO;AAC1B;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sDAAiB;AAChC;AACA;AACA,eAAe,uDAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G;AAC7G;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4DAAuB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mBAAmB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB;;;;;;;;;;;;;;;;;;;;;ACnKhB;AACA;AACA;AACA;AACA;AACgC;AACF;AACA;AACI;AACK;AACD;AAC/B,4BAA4B,uCAAI;AACvC;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA,yDAAyD,4CAAS;AAClE;AACA,gCAAgC,yCAAK,mDAAmD,UAAU;AAClG;AACA;AACA;AACA;AACA,wCAAwC,4CAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAyB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,wBAAwB,0CAAO;AAC/B,0BAA0B,0CAAO,kBAAkB,4CAAS;AAC5D,sBAAsB,+CAAY,2CAA2C,UAAU;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB,iCAAiC,qBAAqB;AACzG;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,4CAAS;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0CAAO;AACtD;AACA;AACA;AACA;AACA;AACA,gDAAgD,8CAAW;AAC3D;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChOA;AACA;AACA;AACA;AACA;AACqD;AACG;AAClB;AACR;AACI;AACmC;AAC/B;AACtC,2BAA2B,+CAAQ;AACnC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA,sBAAsB,4DAAuB;AAC7C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA,iBAAiB,uDAAW;AAC5B,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA,2DAA2D,+DAA0B;AACrF;AACA,4BAA4B,6DAAsB;AAClD;AACA;AACA;AACA,iCAAiC,6DAAsB;AACvD;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD,gCAAgC,6DAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,yCAAyC;AACzC;AACA;AACA,6BAA6B,8DAAuB;AACpD;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB,EAAE;AACjD;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B,4BAA4B;AAC5B,mBAAmB,gEAAyB,EAAE;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gEAAyB,WAAW,gEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAAO;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,2DAA2D,0CAAO;AAClE;AACA;AACA,mGAAmG,+DAA0B;AAC7H;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,2DAA2D,4CAAS;AACpE;AACA;AACA,mGAAmG,+DAA0B;AAC7H;AACA;AACA,iBAAiB,6DAAsB;AACvC;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA;AACA;AACA,qBAAqB,8DAAuB;AAC5C;AACA;AACA,oBAAoB,8DAAuB;AAC3C;AACA,qBAAqB,gEAAyB;AAC9C;AACA;AACA,oBAAoB,8DAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B,UAAU,4CAAS;AACnB,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACwB;;;;;;;;;;;;;;;;;;;;;ACpQxB;AACA;AACA;AACA;AACA;AACqD;AACrB;AACM;AACJ;AACqC;AACjC;AACtC,qBAAqB,+CAAQ;AAC7B;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA,wBAAwB,OAAO;AAC/B;AACA,yBAAyB;AACzB;AACA,qBAAqB,qDAAS;AAC9B;AACA,wBAAwB,cAAc;AACtC,yBAAyB;AACzB;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,SAAS;AACT;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA,gBAAgB,kDAAM;AACtB;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,0BAA0B,+CAAY,mCAAmC,WAAW;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B,mCAAmC,WAAW;AAC9C,oBAAoB,qDAAiB;AACrC;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C,oBAAoB,qDAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,QAAQ,qDAAiB;AACzB,gCAAgC,WAAW,GAAG,MAAM;AACpD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB,UAAU,4CAAS;AACnB,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACkB;;;;;;;;;;;;;;;;;;;ACzNlB;AACA;AACA;AACqD;AACL;AACd;AAC4B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,wBAAwB;AAC7E;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,2BAA2B,kDAAe;AAC1C,yBAAyB,4CAAS;AAClC,2BAA2B,oDAAiB;AAC5C,0BAA0B,mDAAgB;AAC1C;AACA,qCAAqC,sBAAsB;AAC3D,0CAA0C,iFAAiF;AAC3H;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6CAAM;AAC9C;AACA,qCAAqC,6CAAM;AAC3C;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA,wDAAwD,qBAAqB;AAC7E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAgD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAc;AAC3C,2BAA2B,qDAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,IAAI;AAC9E,6BAA6B,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,GAAG;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAe,KAAK,SAAS;AACvE;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,4DAA4D;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB;AAC/E,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAa;AACtC,6BAA6B,mDAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;;ACpjBtB;AACA;AAC4C;AACR;AACI;AACV;AACE;AACO;AACD;AACtC;AACA;AACA;AACA;AACA;AACO,qBAAqB,6CAAO;AACnC;AACA,eAAe,uDAAe;AAC9B;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,qDAAqD,iLAAiL,cAAc,yBAAyB,YAAY,mDAAmD,0BAA0B;AACtW;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAyD,EAAE;AACpF;AACA;AACA;AACA,yBAAyB;AACzB,yDAAyD,WAAW;AACpE,iDAAiD,aAAa;AAC9D,UAAU,EAAE;AACZ;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D,gGAAgG,wFAAwF;AACxL,gDAAgD,+EAA+E,aAAa,uBAAuB;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,sDAAkB;AAClE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,mEAAmE,wDAAoB;AACvF;AACA;AACA;AACA;AACA;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA,+BAA+B,qDAAW;AAC1C,QAAQ,4DAAwB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,YAAY,+DAAuB;AACnC;AACA;AACA;AACA;AACA;AACA,wBAAwB,mDAAgB;AACxC,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;AC3MA;AACsC;AACN;AACM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ;AACjB,UAAU,QAAQ;AAClB,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;AACA,cAAc,eAAe;AAC7B,YAAY,eAAe;AAC3B,aAAa,eAAe;AAC5B,YAAY,eAAe;AAC3B,eAAe,eAAe;AAC9B,kBAAkB,eAAe;AACjC,uBAAuB,eAAe;AACtC,oBAAoB,eAAe;AACnC,oBAAoB,eAAe;AACnC,eAAe,eAAe;AAC9B,cAAc,gBAAgB;AAC9B;AACA;AACA,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,wCAAwC;AAClD,WAAW,yCAAyC;AACpD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,uBAAuB;AAChC,UAAU,wCAAwC;AAClD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,wCAAwC;AAClD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,WAAW;AACpB,UAAU,iBAAiB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,iBAAiB;AAC3B,UAAU,0BAA0B;AACpC,UAAU,gBAAgB;AAC1B,UAAU,qBAAqB;AAC/B,UAAU,uBAAuB;AACjC;AACA;AACA,WAAW,0DAA0D;AACrE,YAAY,gEAAgE;AAC5E,SAAS,yDAAyD;AAClE,UAAU,+DAA+D;AACzE,SAAS,4DAA4D;AACrE,MAAM,KAAK,+DAA+D;AAC1E,MAAM,KAAK,gEAAgE;AAC3E,UAAU,oFAAoF;AAC9F,SAAS,wEAAwE;AACjF,YAAY,gFAAgF;AAC5F,WAAW,0EAA0E;AACrF,YAAY,uEAAuE;AACnF,UAAU,+DAA+D;AACzE,WAAW,sEAAsE;AACjF,SAAS,yDAAyD;AAClE,SAAS,0DAA0D;AACnE,WAAW,mEAAmE;AAC9E,aAAa,uEAAuE;AACpF,YAAY,mEAAmE;AAC/E,YAAY,mEAAmE;AAC/E,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,wBAAwB,2DAA2D;AACnF,uBAAuB,0DAA0D;AACjF,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,sCAAsC,yEAAyE;AAC/G,wCAAwC,2EAA2E;AACnH,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,kCAAkC,qEAAqE;AACvG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,wCAAwC,2EAA2E;AACnH,qCAAqC,wEAAwE;AAC7G,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,wBAAwB,2DAA2D;AACnF,wBAAwB,2DAA2D;AACnF,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,oCAAoC,uEAAuE;AAC3G;AACA;AACA;AACA,KAAK;AACL,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,YAAY,wDAAwD;AACpE;AACA;AACA;AACA;AACA,KAAK;AACL,UAAU,+CAA+C;AACzD,YAAY,4EAA4E;AACxF,aAAa,4CAA4C;AACzD,aAAa,4CAA4C;AACzD,aAAa,sFAAsF;AACnG,cAAc,iDAAiD;AAC/D,cAAc,iDAAiD;AAC/D,aAAa,oFAAoF;AACjG,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,4FAA4F;AAC1G,eAAe,oDAAoD;AACnE,eAAe,oDAAoD;AACnE,YAAY,4CAA4C;AACxD,UAAU,8CAA8C;AACxD,YAAY,+CAA+C;AAC3D;AACA;AACA,eAAe,4BAA4B;AAC3C,wBAAwB,yBAAyB;AACjD,YAAY,sBAAsB;AAClC,qBAAqB,2BAA2B;AAChD,UAAU,uBAAuB;AACjC,eAAe,6CAA6C;AAC5D,iBAAiB,iDAAiD;AAClE,eAAe,4CAA4C;AAC3D,iBAAiB,yCAAyC;AAC1D,iBAAiB,uCAAuC;AACxD,mBAAmB,qDAAqD;AACxE,iBAAiB,oCAAoC;AACrD,kBAAkB,6BAA6B;AAC/C,aAAa,oBAAoB;AACjC,YAAY,yBAAyB;AACrC,YAAY,2BAA2B;AACvC,gBAAgB,yBAAyB;AACzC,gBAAgB,8BAA8B;AAC9C,YAAY,mBAAmB;AAC/B,qBAAqB,yBAAyB;AAC9C,mBAAmB,uBAAuB;AAC1C,YAAY,mBAAmB;AAC/B,gBAAgB,uBAAuB;AACvC,aAAa,oBAAoB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2EAA2E;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,gGAAgG,SAAS;AACzG;AACA;AACA;AACA,wBAAwB;AACxB;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,kFAAkF,eAAe;AACnI;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+CAA+C;AACnF;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,sBAAsB,+CAAY,8EAA8E,QAAQ;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,oDAAoD,QAAQ;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,yCAAK;AAC1C;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,gDAAgD,KAAK;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,SAAS;AACnG;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,0BAA0B,6CAA6C;AACvI;AACA;AACA;AACA,iEAAiE,kDAAc;AAC/E;AACA,2DAA2D,kBAAkB,oBAAoB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;;AC7xCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACE;AACM;AACR;AACkB;AACd;AACY;AACC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACO,sBAAsB,yDAAa;AAC1C;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA,4DAA4D;AAC5D;AACA,8BAA8B,gEAA2B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4CAAS,CAAC,KAAK,kDAAe,CAAC,GAAG;AACvD,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0CAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA,+BAA+B,2DAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,yBAAyB,6DAAsB;AAC/C,wBAAwB;AACxB;AACA,8BAA8B,8DAAuB;AACrD,gCAAgC;AAChC;AACA,8BAA8B,8DAAuB,iBAAiB,8DAAuB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oCAAoC,WAAW,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA,uDAAuD,4CAAS;AAChE;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE;AACA,wFAAwF,0BAA0B;AAClH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iDAAK;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzYA;AACA;AACA;AACA;AACA;AACqD;AACnB;AACK;AACD;AACtC,uBAAuB,2CAAM;AAC7B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACoB;;;;;;;;;;;;;;;;;ACrGpB;AACgC;AACO;AAChC,uBAAuB,yCAAK;AACnC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,4CAA4C,kEAAkE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACsC;AACC;AAChC,qBAAqB,+CAAQ;AACpC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACoC;AACiB;AACf;AACJ;AACK;AACI;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA,CAAC,kDAAkD;AACnD,0BAA0B,6CAAO;AACjC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8EAA8E;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,mEAA8B;AACxG;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA,gCAAgC,iDAAc;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8DAAuB;AACnC;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACuB;;;;;;;;;;;;;;;;;;;;ACxLvB;AACA;AACgC;AACF;AACI;AACK;AACa;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uCAAI;AAC/B;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B,iBAAiB,+DAA0B,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC,yBAAyB,8CAAO;AAChC,8BAA8B,yCAAK,0BAA0B,sBAAsB;AACnF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;AClHxB;AACA;AACqD;AACxB;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,mCAAmC,kDAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAW;AACpC,2BAA2B,gDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+DAA4B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kDAAe,GAAG,oDAAiB;AACtE,oCAAoC,mDAAgB,GAAG,mDAAgB;AACvE;AACA,2BAA2B,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,wDAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACyB;;;;;;;;;;;;;;;;;;;;;;AC7TzB;AACA;AACqD;AACrB;AACF;AACI;AACK;AACD;AAC/B;AACP;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uCAAI;AAC3B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC,6BAA6B,yCAAK,cAAc,+DAA0B,IAAI,sBAAsB;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA,oCAAoC,iDAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACA;AACoB;;;;;;;;;;;;;;;;;;;;AClNpB;AACA;AACoC;AACE;AACJ;AACK;AACQ;AAC/C;AACA;AACA;AACA;AACO,uBAAuB,6CAAO;AACrC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ,QAAQ;AACzC,iCAAiC;AACjC,kCAAkC,+CAAQ;AAC1C;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sDAAiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;;;;;;;;;;;;;;;;;AChSA;AACA;AACA;AACA;AACA;AACsC;AACA;AACtC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,+CAAQ;AACvC,4BAA4B,+CAAQ;AACpC,sCAAsC;AACtC,mCAAmC;AACnC;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB,0BAA0B;AAC1B,6BAA6B;AAC7B,oCAAoC;AACpC;AACA,yBAAyB;AACzB,0BAA0B;AAC1B,sCAAsC;AACtC,uCAAuC;AACvC,4BAA4B;AAC5B,6BAA6B;AAC7B,8BAA8B;AAC9B,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uHAAuH;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjMA;AACA;AACA;AACA;AACA;AACgC;AACC;AAC1B,iCAAiC,yCAAK;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAK;AACtC;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAK;AACtC;AACA,wBAAwB,8CAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,YAAY,uDAAmB;AAC/B,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA,YAAY,uDAAmB;AAC/B,uBAAuB,8CAAO;AAC9B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACgC;AACuC;AACrC;AACkB;AACb;AACQ;AAC/C;AACA;AACA;AACA,kBAAkB,+CAAY,2CAA2C,SAAS;AAClF;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,SAAS;AACtF;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO,4BAA4B,yDAAa;AAChD;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD,+DAA+D,+DAA0B;AACzF;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA,2BAA2B,yCAAK,OAAO,+DAA0B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6DAAkB;AACrC;AACA;AACA,gBAAgB,kCAAkC;AAClD;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtLA;AACA;AAC8B;AACkB;AACT;AAChC,0BAA0B,uCAAI;AACrC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA,gBAAgB,eAAe;AAC/B,2BAA2B,yDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACgC;AACQ;AACF;AACR;AACA;AACI;AACkB;AACpD;AACO,sBAAsB,+CAAQ;AACrC;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAW;AAC9B,2BAA2B,uDAAe;AAC1C,oCAAoC,yBAAyB;AAC7D,0BAA0B,4DAAuB;AACjD,kDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA,2CAA2C,SAAS;AACpD;AACA,0DAA0D,SAAS,2CAA2C,gDAAa;AAC3H,uCAAuC,SAAS,cAAc,kBAAkB,0CAAO,iBAAiB;AACxG,wBAAwB,cAAc;AACtC,YAAY,qDAAiB,oCAAoC,0CAA0C;AAC3G;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC1DA;AACA;AACkC;AACI;AACtC;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,yDAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,aAAa;AAC1F;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,yBAAyB,GAAG,UAAU;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,qDAAqD,QAAQ;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAoB,QAAQ,GAAG,OAAO;AACxD;AACA;;;;;;;;;;;;;;;;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4BAA4B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACI;AACR;AACF;AACI;AACK;AACQ;AACxC;AACP;AACA;AACA;AACA,CAAC,wCAAwC;AAClC,qBAAqB,6CAAO;AACnC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4DAAuB;AACrD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+DAA0B;AAChD;AACA;AACA;AACA;AACA,QAAQ,mEAA2B;AACnC;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,SAAS;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yCAAK;AACnD;AACA;AACA;AACA;AACA;AACA,0CAA0C,yCAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,0CAAO;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,uBAAuB;AACnD;AACA,0EAA0E,0CAAO;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,8CAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAuB;AAC9C;AACA;AACA;AACA,wBAAwB,8CAAO;AAC/B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8CAAO;AACnC,aAAa;AACb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;ACtH7B;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAM;AACrB,eAAe,qBAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,MAAM,6BAA6B,MAAM;AACjF;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iBAAiB,KAAK;AACtB;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;;;;;;;;;;;;;;;;;ACtFA;AACA;AACA;AAC8B;AACa;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,uCAAI;AACA;;;;;;;;;;;;;;;;;;;ACrEf;AACA;AAC8B;AACQ;AACJ;AACK;AACvC;AACO,sBAAsB,+CAAQ;AACrC;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAa;AACtD;AACA,yGAAyG,+DAA0B;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClHA;AACA;AACA;AACoC;AACG;AACV;AACO;AACpC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA,6BAA6B,6CAAO;AACpC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2DAAqB;AAC7B;AACA;AACA;AACA;AAC0B;;;;;;;;;;;;;;;;;;;;;ACrE1B;AACA;AACoC;AACE;AACJ;AACK;AACkB;AAClD;AACP;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACO,oBAAoB,6CAAO;AAClC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA,2BAA2B,0DAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yCAAyC,sDAAiB,EAAE;AAChG;AACA,8BAA8B,+CAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC/PA;AACA;AACA;AACA;AACA;AACA;AACsC;AACtC;AACO;AACP;AACA;AACA,mBAAmB,mDAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,mBAAmB,mDAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACsD;AACP;AACZ;AACF;AACE;AACU;AACY;AACtB;AACE;AACQ;AACV;AACc;AACA;AACD;AACX;AACrC;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kDAAkD,6DAAY;AAC9D;AACA;AACA;AACA,0CAA0C,MAAM;AAChD;AACA;AACA;AACA;AACA;AACA,gDAAgD,qDAAS;AACzD;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,oBAAoB,8CAAK,WAAW,wDAAe;AACnD;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,gBAAgB,8CAAK,WAAW,wDAAe;AAC/C;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,gBAAgB,8CAAK,WAAW,wDAAe;AAC/C;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC,YAAY,qDAAS;AACrB;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,6BAA6B,uDAAU;AACvC,6BAA6B,uDAAU;AACvC,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,6BAA6B,uDAAU;AACvC,6BAA6B,uDAAU;AACvC,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD,kBAAkB,yDAAkB;AACpC,sBAAsB,8CAAK;AAC3B;AACA;AACA,KAAK;AACL;AACA,0BAA0B,qDAAS,GAAG,eAAe;AACrD;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA,4BAA4B,uDAAgB;AAC5C,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA;AACA;AACA,yBAAyB,wEAAwE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAyE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAiE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,cAAc,oBAAoB;AAC5D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,+BAA+B,yDAAkB,gCAAgC,iBAAiB;AAClG;AACA,gBAAgB,gBAAgB;AAChC,gCAAgC,kDAAkD;AAClF;AACA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,yBAAyB,8CAA8C,+CAAO,EAAE;AAChF,wCAAwC,iBAAiB;AACzD,2CAA2C,4BAA4B;AACvE;AACA;AACA;AACA,wEAAwE,gEAAmB;AAC3F;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,qCAAqC;AAC9D;AACA;AACA;AACA,yBAAyB,qCAAqC;AAC9D;AACA;AACA;AACA,yBAAyB,6CAA6C;AACtE;AACA;AACA;AACA;AACA,yBAAyB,oDAAoD;AAC7E;AACA;AACA;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA;AACA,yBAAyB,0DAA0D;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,aAAa,oBAAoB;AAC3D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,gEAAgE;AACzF;AACA;AACA;AACA,yBAAyB,4FAA4F;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6FAA6F;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,aAAa,oBAAoB;AAC3D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA;AACA;AACA,oCAAoC,iEAAe;AACnD;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,uDAAgB;AACxB,QAAQ,uDAAgB;AACxB;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA,qBAAqB,gEAAgE;AACrF;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAA+D;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gEAAgE;AACrF;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAA+D;AACpF;AACA;AACA;AACA;AACA,qBAAqB,gEAAgE;AACrF;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAA+D;AACpF;AACA;AACA;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA;AACA,yBAAyB,wEAAwE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAyE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAiE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kEAAkE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,aAAa,oBAAoB;AAC3D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA;AACA,yBAAyB,wEAAwE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAyE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAiE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAoD;AAC7E;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,aAAa,oBAAoB;AAC3D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA,sBAAsB,mDAAmD;AACzE;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA,sBAAsB,mDAAmD;AACzE;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAS;AAChC,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAS;AAChC,SAAS;AACT,KAAK;AACL,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,IAAI,kEAAsB;AAC1B;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,uCAAuC;AACjD,UAAU,uCAAuC;AACjD,UAAU,yCAAyC;AACnD,UAAU,yCAAyC;AACnD,UAAU,qCAAqC;AAC/C,UAAU,uCAAuC;AACjD,UAAU,yCAAyC;AACnD,UAAU,yCAAyC;AACnD,UAAU,uCAAuC;AACjD,UAAU,uCAAuC;AACjD,UAAU,qCAAqC;AAC/C;AACA,0BAA0B,6CAA6C;AACvE,4CAA4C,mBAAmB;AAC/D;AACA;AACA,iBAAiB,wDAAe;AAChC,yBAAyB,0DAAW;AACpC;AACA,IAAI,wEAA2B;AAC/B,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,oCAAoC,wDAAe;AACnD,IAAI,wEAA2B;AAC/B,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC;AACA,oCAAoC,wDAAe;AACnD,IAAI,wEAA2B;AAC/B,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,gBAAgB,aAAa;AAC7B,oFAAoF,YAAY;AAChG,oCAAoC,wDAAe;AACnD,IAAI,wEAA2B;AAC/B,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,qCAAqC,wDAAe;AACpD,qCAAqC,wDAAe;AACpD;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,qCAAqC,wDAAe;AACpD,qCAAqC,wDAAe;AACpD;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA,qCAAqC,wDAAe;AACpD,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA,qCAAqC,wDAAe;AACpD,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA,qCAAqC,wDAAe;AACpD,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA,qCAAqC,wDAAe;AACpD,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,cAAc,0BAA0B;AACxC;AACA;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA;AACA,yBAAyB,wEAAwE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAyE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAiE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB;AAC1B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,wEAAqB;AACM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACl+B3B;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACoB;AACvB;AAChB;AACA;AACA;AACuB;AACb;AACM;AACR;AACN;AACQ;AACV;AACM;AACE;AACF;AACJ;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,kBAAkB,yEAAsB;AACxC;AACA,oCAAoC,kDAAO;AAC3C,sCAAsC,sDAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mDAAQ;AACjC,IAAI,yEAA8B;AAClC,cAAc,2EAAwB;AACtC;AACA,oBAAoB,OAAO;AAC3B;AACA,oBAAoB,aAAa;AACjC,kCAAkC,UAAU;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oDAAoD,MAAM;AAC1D,yCAAyC,iEAAsB;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS,kBAAkB,2CAAI;AAC/B;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qCAAqC,uDAAU,eAAe,iDAAU;AACxE;AACA,oBAAoB,qCAAqC;AACzD,oBAAoB,4CAA4C;AAChE;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,4CAA4C,uDAAU,eAAe,iDAAU;AAC/E;AACA,oBAAoB,qCAAqC,oCAAoC,mBAAmB;AAChH,oBAAoB,4CAA4C,sCAAsC,mBAAmB;AACzH;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT,6BAA6B,uDAAU,kBAAkB,iDAAU,aAAa,wDAAiB,EAAE,uDAAgB;AACnH,6BAA6B,uDAAU;AACvC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,gBAAgB,sDAAe;AAC/B,sBAAsB,oDAAQ;AAC9B,qCAAqC,uDAAU,eAAe,iDAAU,aAAa,wDAAiB,EAAE,uDAAgB;AACxH;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,kDAAO;AAClC;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS,uDAAuD,0EAA6B;AAC7F;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS,uDAAuD,0EAA6B;AAC7F;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS,uDAAuD,0EAA6B;AAC7F;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS,uDAAuD,0EAA6B;AAC7F;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,mDAAmD,uDAAU,eAAe,iDAAU;AACtF;AACA,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8BAA8B;AAClD,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8BAA8B;AAClD,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8BAA8B;AAClD,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8BAA8B;AAClD,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qCAAqC,uDAAU,eAAe,iDAAU,sCAAsC,8EAAiC;AAC/I;AACA,oBAAoB,8BAA8B;AAClD,oBAAoB,8BAA8B;AAClD,oBAAoB,8BAA8B;AAClD,oBAAoB,8BAA8B;AAClD;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,YAAY,sDAAS,GAAG,8BAA8B,kBAAkB,uDAAU,kCAAkC,8EAAiC;AACrJ,YAAY,sDAAS,GAAG,8BAA8B,kBAAkB,uDAAU,kCAAkC,8EAAiC;AACrJ,YAAY,sDAAS,GAAG,8BAA8B,kBAAkB,uDAAU,mCAAmC,8EAAiC;AACtJ,YAAY,sDAAS,GAAG,8BAA8B,kBAAkB,uDAAU,kCAAkC,8EAAiC;AACrJ;AACA,qBAAqB,2CAAI;AACzB,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,uDAAU;AAC/E,iBAAiB,sDAAe;AAChC;AACA;AACA,oBAAoB,QAAQ;AAC5B,0BAA0B,8CAAK;AAC/B;AACA,wBAAwB,8BAA8B;AACtD,wBAAwB,8BAA8B;AACtD,wBAAwB,4CAA4C;AACpE,wBAAwB,8BAA8B;AACtD;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,uDAAU;AAC/E,iBAAiB,sDAAe;AAChC;AACA;AACA,oBAAoB,QAAQ;AAC5B,0BAA0B,8CAAK;AAC/B;AACA,wBAAwB,kDAAkD;AAC1E,wBAAwB,gEAAgE;AACxF,wBAAwB,kDAAkD;AAC1E,wBAAwB,kDAAkD;AAC1E;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,kDAAO;AAChC;AACA;AACA,KAAK;AACL;AACA,yBAAyB,kDAAO;AAChC;AACA;AACA;AACA,KAAK;AACL,+CAA+C,kDAAO;AACtD,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,uCAAuC;AAC/E,8BAA8B,uDAAU,uCAAuC;AAC/E,8BAA8B,uDAAU,uCAAuC;AAC/E,8BAA8B,uDAAU,uCAAuC;AAC/E,sBAAsB,8CAAK,CAAC,mDAAY,UAAU,wDAAe;AACjE;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS,uDAAuD,OAAO;AAC/E;AACA;AACA;AACA,wEAAqB;AACM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnY3B;AACA;AACA;AACA;AACsD;AACH;AAChB;AACA;AACA;AACU;AACM;AACd;AACS;AACD;AACV;AACM;AACE;AACN;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,0EAA0E,wBAAwB;AAClG,iEAAiE,wBAAwB;AACzF,0EAA0E,wBAAwB;AAClG,0EAA0E,wBAAwB;AAClG,yEAAyE,wBAAwB;AACjG,iEAAiE,0BAA0B;AAC3F,uEAAuE,4BAA4B;AACnG,sEAAsE,4BAA4B;AAClG,2EAA2E,8BAA8B;AACzG,oEAAoE,wBAAwB;AAC5F,gDAAgD,wBAAwB;AACxE,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAoB;AAC5C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,aAAa;AAC1D;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB,4DAAoB,EAAE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,sDAAsD,gEAAiB;AACvE;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,sDAAsD,kEAAmB;AACzE;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,sDAAsD,gEAAiB;AACvE;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,iDAAiD,+DAAgB;AACjE;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,wBAAwB,4DAAoB;AAC5C;AACA;AACA;AACA,6CAA6C,aAAa;AAC1D;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB,4DAAoB,EAAE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,sDAAsD,gEAAiB;AACvE;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,iDAAiD,kEAAmB;AACpE;AACA;AACA;AACA,0CAA0C,qDAAS;AACnD,sBAAsB,6CAAK;AAC3B;AACA,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,0CAA0C,qDAAS;AACnD,sBAAsB,6CAAK;AAC3B;AACA,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE;AACA;AACA,gBAAgB,QAAQ;AACxB,qCAAqC,2DAAY;AACjD,qCAAqC,2DAAY;AACjD;AACA,yCAAyC,2DAAY;AACrD;AACA;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE;AACA,gBAAgB,QAAQ;AACxB,qCAAqC,2DAAY;AACjD,qCAAqC,2DAAY;AACjD;AACA,yCAAyC,2DAAY;AACrD;AACA;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,qCAAqC,iDAAiD;AACtF,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,IAAI,mEAAuB;AAC3B;AACA,uBAAuB,6CAAK;AAC5B;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,qCAAqC,2DAAY;AACjD;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,yBAAyB,sDAAe;AACxC,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,kDAAO;AACnC;AACA;AACA,KAAK;AACL;AACA,4BAA4B,kDAAO;AACnC;AACA;AACA;AACA,KAAK;AACL,+CAA+C,kDAAO;AACtD,8BAA8B,2DAAY,2BAA2B;AACrE,8BAA8B,2DAAY,2BAA2B;AACrE,8BAA8B,2DAAY,2BAA2B;AACrE,8BAA8B,2DAAY,2BAA2B;AACrE,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,sBAAsB,8CAAK,CAAC,mDAAY,UAAU,wDAAe;AACjE;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;;;;AC3b7B;AACA;AACA;AACA;AACA;AACA;AAC8D;AAC3B;AACQ;AACN;AACF;AACnC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yGAAyG,aAAa;AACtH;AACA,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,iGAAiG,aAAa;AAC9G;AACA,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA,sDAAsD,8CAAO;AAC7D,sDAAsD,8CAAO;AAC7D,sDAAsD,8CAAO;AAC7D,sDAAsD,8CAAO;AAC7D,sDAAsD,gDAAS;AAC/D,sDAAsD,gDAAS;AAC/D;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,mDAAQ;AAChC,kBAAkB,4DAAqB;AACvC,sDAAsD,gDAAS;AAC/D,sDAAsD,gDAAS;AAC/D,sDAAsD,8CAAO;AAC7D,sDAAsD,gDAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sGAAsG,aAAa;AACnH,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AACxE;AACA,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,iFAAiF,aAAa;AAC9F,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,yDAAkB;AACpC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,yDAAkB;AACpC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY,KAAK,aAAa;AAClD,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY,KAAK,aAAa;AAClD,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,2EAA2E,aAAa;AACxF,kBAAkB,yDAAkB;AACpC,qBAAqB,mDAAQ;AAC7B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,uEAAuE,aAAa;AACpF,kBAAkB,yDAAkB;AACpC,qBAAqB,mDAAQ;AAC7B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,6BAA6B,OAAO;AACpC,0FAA0F,aAAa;AACvG,6BAA6B,QAAQ;AACrC,sEAAsE,aAAa;AACnF,6BAA6B,QAAQ;AACrC;AACA;AACA,KAAK;AACL;AACA;AACA,WAAW,4DAAqB,oBAAoB,gEAAyB;AAC7E,WAAW,4DAAqB,oBAAoB,gEAAyB;AAC7E,WAAW,4DAAqB,oBAAoB,gEAAyB;AAC7E;AACA;AACA,IAAI,gEAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,6BAA6B,OAAO;AACpC,0FAA0F,aAAa;AACvG,6BAA6B,QAAQ;AACrC,sEAAsE,aAAa;AACnF,6BAA6B,QAAQ;AACrC,uGAAuG,eAAe;AACtH,wBAAwB,mDAAQ;AAChC,wBAAwB,mDAAQ,YAAY,mDAAQ;AACpD,wBAAwB,mDAAQ,aAAa,mDAAQ,aAAa,mDAAQ;AAC1E;AACA;AACA;AACA,WAAW,4DAAqB;AAChC,WAAW,4DAAqB;AAChC,WAAW,4DAAqB;AAChC;AACA;AACA,IAAI,gEAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA,yDAAyD,mCAAmC;AAC5F,SAAS,aAAa;AACtB,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,gBAAgB;AAC5B,wGAAwG,aAAa;AACrH,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,wGAAwG,aAAa;AACrH,kBAAkB,4DAAqB,mBAAmB,gEAAyB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,iFAAiF,aAAa;AAC9F,kBAAkB,4DAAqB,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,8EAA8E,aAAa;AAC3F,kBAAkB,4DAAqB,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,KAAK;AACL,kBAAkB,4DAAqB,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,+FAA+F,aAAa;AAC5G,kBAAkB,4DAAqB,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAkB,yBAAyB,uBAAuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,yDAAM;AACnB,kBAAkB,yDAAkB,yBAAyB,uBAAuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA,aAAa,yDAAM;AACnB,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,kBAAkB,yDAAkB,yBAAyB,kBAAkB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA,kBAAkB,yDAAkB;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,kBAAkB,yDAAkB;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA,kBAAkB,yDAAkB;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC,kBAAkB,yDAAkB;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACc;;;;;;;;;;;;;;;;;ACzjBnC;AACA;AACA;AACA;AAC8D;AACT;AACrD;AACA;AACA;AACA,QAAQ,wEAAqB;AAC7B,KAAK;AACL;AACA;AACA,yBAAyB,gDAAQ;AACjC,IAAI,sEAA8B;AAClC;AACA;AACA,cAAc,2EAAwB;AACtC,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA,6EAA6E,YAAY,WAAW,yDAAM;AAC1G,oCAAoC,4CAA4C;AAChF;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,qDAAqD;AACzE;AACA,oBAAoB,6CAA6C,cAAc,KAAK;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA,sBAAsB,sEAAsE;AAC5F,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA,2CAA2C,+BAA+B;AAC1E,2CAA2C,+BAA+B;AAC1E,2CAA2C,+BAA+B;AAC1E;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,kFAAkF,cAAc,WAAW,yDAAM;AACjH,KAAK;AACL,wCAAwC,gCAAgC;AACxE,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA;AACA;AACA,sBAAsB,sEAAsE;AAC5F,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA,2CAA2C,+BAA+B;AAC1E,2CAA2C,+BAA+B;AAC1E,2CAA2C,+BAA+B;AAC1E;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,kFAAkF,cAAc,WAAW,yDAAM;AACjH,KAAK;AACL,wCAAwC,gCAAgC;AACxE,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA;AACA;AACA;AACA,kFAAkF,YAAY,WAAW,yDAAM;AAC/G,KAAK;AACL,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,YAAY,WAAW,yDAAM;AACpH;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,iDAAiD,cAAc,KAAK;AACxF;AACA;AACA;AACA;AACA;AACA,wCAAwC,gCAAgC;AACxE,wCAAwC,aAAa;AACrD,wCAAwC,gCAAgC;AACxE;AACA;AACA,gCAAgC,0DAA0D;AAC1F,sBAAsB,2CAA2C;AACjE;AACA;AACA;AACA,uBAAuB,cAAc;AACrC,4FAA4F,cAAc,WAAW,yDAAM;AAC3H;AACA,KAAK;AACL;AACA,wCAAwC,gCAAgC;AACxE,6CAA6C,gBAAgB;AAC7D;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,iBAAiB,4BAA4B;AAC7C;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,kFAAkF,YAAY,WAAW,yDAAM;AAC/G;AACA,KAAK;AACL,sBAAsB,qCAAqC,cAAc,KAAK;AAC9E;AACA,wCAAwC,aAAa;AACrD;AACA;AACA,sBAAsB,yEAAyE;AAC/F,sBAAsB,kDAAkD,cAAc,KAAK;AAC3F;AACA,4CAA4C,+BAA+B;AAC3E,4CAA4C,+BAA+B;AAC3E,4CAA4C,+BAA+B;AAC3E,yCAAyC,aAAa;AACtD;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,mFAAmF,cAAc,WAAW,yDAAM;AAClH,KAAK;AACL,yCAAyC,gCAAgC;AACzE,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA;AACA;AACA,sBAAsB,yEAAyE;AAC/F;AACA;AACA;AACA,uBAAuB,cAAc;AACrC,8FAA8F,cAAc,WAAW,yDAAM;AAC7H;AACA,KAAK;AACL;AACA,4CAA4C,+BAA+B;AAC3E,4CAA4C,+BAA+B;AAC3E,4CAA4C,+BAA+B;AAC3E,yCAAyC,gCAAgC;AACzE,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,mFAAmF,cAAc,WAAW,yDAAM;AAClH;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,2DAA2D,cAAc,KAAK;AAClG;AACA;AACA;AACA;AACA;AACA,yCAAyC,gCAAgC;AACzE,yCAAyC,aAAa;AACtD,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,wEAAwE,YAAY,WAAW,yDAAM;AACrG;AACA,KAAK;AACL,sBAAsB,2DAA2D,cAAc,KAAK;AACpG;AACA,yCAAyC,aAAa;AACtD,yCAAyC,aAAa;AACtD;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,mFAAmF,YAAY,WAAW,yDAAM;AAChH;AACA,KAAK;AACL,sBAAsB,kDAAkD,cAAc,KAAK;AAC3F;AACA,yCAAyC,aAAa;AACtD,yCAAyC,aAAa;AACtD;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB,2CAA2C,yDAAM;AAC9F,KAAK;AACL,uBAAuB,8DAAsB;AAC7C;AACA,oBAAoB,gDAAgD,cAAc,KAAK;AACvF,uBAAuB,8DAAsB;AAC7C;AACA,yCAAyC,aAAa;AACtD,yCAAyC,aAAa;AACtD;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,mFAAmF,cAAc,WAAW,yDAAM;AAClH,oCAAoC,8CAA8C;AAClF;AACA,KAAK;AACL,uBAAuB,gEAAwB;AAC/C,sBAAsB,gCAAgC,cAAc,KAAK,gBAAgB,gEAAwB;AACjH;AACA;AACA,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,8FAA8F,cAAc,WAAW,yDAAM;AAC7H;AACA,KAAK;AACL,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,IAAI,uEAA+B;AACnC;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;ACxWzB;AACA;AACA;AACA;AACsD;AACK;AAC3D;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,iBAAiB,2DAAY,EAAE,0DAAW;AAC1C,cAAc,iEAAqB;AACnC,cAAc,iEAAkB;AAChC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,gEAAgE;AACtF,oBAAoB,gBAAgB;AACpC;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,gEAAgE;AACtF,oBAAoB,gBAAgB;AACpC;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA,wBAAwB,6EAA6E;AACrG;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;ACzDxB;AACA;AACA;AACA;AACA;AAC8D;AACiD;AAC/G;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,YAAY;AAC3F,aAAa,yDAAM,KAAK,aAAa;AACrC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,YAAY,mCAAmC,YAAY,WAAW,yDAAM;AAC5H,gDAAgD,cAAc,qCAAqC,cAAc,WAAW,yDAAM;AAClI;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,YAAY;AAC1D,8CAA8C,YAAY;AAC1D,4BAA4B,YAAY;AACxC,iBAAiB,yDAAM;AACvB;AACA,uDAAuD,cAAc;AACrE,uDAAuD,cAAc;AACrE,4BAA4B,cAAc;AAC1C,iBAAiB,yDAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,YAAY,KAAK,6BAA6B;AACtH,sDAAsD,YAAY,KAAK,0BAA0B;AACjG,iBAAiB,yDAAM,KAAK,aAAa;AACzC;AACA,8EAA8E,cAAc;AAC5F;AACA,aAAa;AACb,sDAAsD,cAAc,KAAK,0BAA0B;AACnG,iBAAiB,yDAAM,KAAK,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,YAAY;AACjE;AACA,qDAAqD,YAAY,KAAK,yBAAyB,YAAY;AAC3G;AACA,qDAAqD,YAAY,KAAK,yBAAyB,YAAY;AAC3G,iBAAiB,yDAAM,KAAK,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA,+CAA+C,YAAY;AAC3D,+CAA+C,YAAY;AAC3D,aAAa,yDAAM;AACnB;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iBAAiB,qCAAqC,kBAAkB;AACxE,iBAAiB,qCAAqC,kBAAkB;AACxE,iBAAiB,qCAAqC,kBAAkB;AACxE,iBAAiB,qCAAqC,kBAAkB;AACxE,iBAAiB,sCAAsC,kBAAkB;AACzE,iBAAiB,uCAAuC,kBAAkB;AAC1E;AACA;AACA,eAAe,+CAAO;AACtB,iBAAiB,iDAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,+HAA+H,YAAY;AAC3I,+HAA+H,cAAc;AAC7I;AACA;AACA;AACA;AACA,kCAAkC,wDAAwD;AAC1F;AACA;AACA;AACA;AACA,kCAAkC,wDAAwD;AAC1F;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,KAAK,KAAK,eAAe;AACzB;AACA;AACA,KAAK,KAAK,eAAe;AACzB,aAAa,0CAA0C;AACvD,aAAa,2CAA2C;AACxD;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,8HAA8H,YAAY,KAAK,aAAa;AAC5J;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,oKAAoK,eAAe;AACnL;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,aAAa,4BAA4B;AACzC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,8FAA8F,YAAY;AAC1G;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,iIAAiI,YAAY;AAC7I;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,2EAA2E,YAAY,MAAM,aAAa;AAC1G;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,sEAAsE,cAAc;AACpF;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,+BAA+B,OAAO;AACtC;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,eAAe,sCAAsC,iBAAiB;AACtE,oCAAoC,uDAAe;AACnD;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,+BAA+B,WAAW,iBAAiB;AAC3D;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,kBAAkB,kBAAkB;AAChF,UAAU,kCAAkC,kBAAkB,kBAAkB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI,0DAAkB;AACtB,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,eAAe,sCAAsC,gBAAgB;AACrE,eAAe,uCAAuC,gBAAgB;AACtE,oCAAoC,uDAAe;AACnD;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oCAAoC,uDAAe;AACnD,kBAAkB,6DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT,UAAU,cAAc,iBAAiB,sCAAsC;AAC/E,UAAU,cAAc,iBAAiB,uCAAuC;AAChF,UAAU,cAAc,iBAAiB,uCAAuC;AAChF,UAAU,cAAc,iBAAiB,uCAAuC;AAChF,UAAU,cAAc,iBAAiB,sCAAsC;AAC/E,UAAU,cAAc,iBAAiB,sCAAsC;AAC/E,UAAU,cAAc,iBAAiB,sCAAsC;AAC/E,UAAU,cAAc,iBAAiB,uCAAuC;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,aAAa,qCAAqC,kBAAkB;AACpE;AACA,aAAa,sCAAsC,kBAAkB;AACrE,oCAAoC,uDAAe;AACnD;AACA;AACA;AACA;AACA;AACA,oBAAoB,2EAAwB;AAC5C,kCAAkC,OAAO;AACzC;AACA,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D,UAAU,yDAAyD;AACnE,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,oDAAoD;AAC9D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,0DAA0D;AACpE,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA;AACA,gBAAgB,kDAAU;AAC1B;AACA,gBAAgB,uDAAe;AAC/B,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA,0CAA0C,qBAAqB,qEAA6B,QAAQ;AACpG;AACA;AACA,0CAA0C,qBAAqB,wEAAgC,QAAQ;AACvG,mBAAmB,eAAe;AAClC,mBAAmB,eAAe;AAClC,0CAA0C,uDAAe;AACzD,4EAA4E,cAAc;AAC1F;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D,UAAU,yDAAyD;AACnE,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,oDAAoD;AAC9D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,0DAA0D;AACpE,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA,uFAAuF,+BAA+B;AACtH,uFAAuF,+BAA+B;AACtH,aAAa,eAAe;AAC5B,aAAa,eAAe;AAC5B,oCAAoC,uDAAe;AACnD,sEAAsE,cAAc;AACpF;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D,UAAU,yDAAyD;AACnE,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,oDAAoD;AAC9D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,0DAA0D;AACpE,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA,uFAAuF,+BAA+B;AACtH,uFAAuF,+BAA+B;AACtH,uFAAuF,+BAA+B;AACtH,uFAAuF,+BAA+B;AACtH,aAAa,eAAe;AAC5B,aAAa,eAAe;AAC5B,aAAa,eAAe;AAC5B,aAAa,eAAe;AAC5B,qCAAqC,uDAAe;AACpD,qCAAqC,uDAAe;AACpD,sBAAsB,kBAAkB;AACxC,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA,wEAAqB;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACtpBrB;AACA;AACA;AACA;AACsD;AACnB;AACA;AACU;AACY;AACtB;AACM;AACE;AACM;AACjD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iCAAiC,iDAAO;AACxC,oDAAoD,2CAAI;AACxD,uCAAuC,2CAAI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT;AACA,IAAI,mEAAuB;AAC3B,4BAA4B,uDAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAsB;AAC/C,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT;AACA,IAAI,mEAAuB;AAC3B,4BAA4B,uDAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT;AACA,oBAAoB,kBAAkB;AACtC;AACA,uBAAuB,iEAAe;AACtC;AACA,gCAAgC,yDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gDAAS,WAAW,sDAAe,EAAE;AACpD,sBAAsB,mDAAQ;AAC9B;AACA,UAAU,MAAM,8CAAO,gBAAgB;AACvC,UAAU,MAAM,gDAAS,qBAAqB;AAC9C,UAAU,MAAM,8CAAO,eAAe;AACtC,UAAU,MAAM,gDAAS,YAAY;AACrC;AACA;AACA;AACA;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS;AACT;AACA,oBAAoB,kBAAkB;AACtC;AACA,sCAAsC,iEAAe;AACrD,gCAAgC,yDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAsB;AAC/C,sBAAsB,mDAAQ;AAC9B;AACA,UAAU,MAAM,8CAAO,gBAAgB;AACvC,UAAU,MAAM,gDAAS,YAAY;AACrC,UAAU,MAAM,8CAAO,eAAe;AACtC,UAAU,MAAM,gDAAS,YAAY;AACrC;AACA;AACA,UAAU,MAAM,8CAAO,gBAAgB;AACvC,UAAU,MAAM,8CAAO,gBAAgB;AACvC,UAAU,MAAM,8CAAO,eAAe;AACtC,UAAU,MAAM,gDAAS,YAAY;AACrC,UAAU,MAAM,gDAAS,gBAAgB;AACzC,UAAU,MAAM,gDAAS,gBAAgB;AACzC,UAAU,MAAM,8CAAO,eAAe;AACtC,UAAU,MAAM,gDAAS,YAAY;AACrC;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,IAAI,mEAAuB;AAC3B,IAAI,uDAAgB;AACpB;AACA;AACA,wEAAqB;AACA;;;;;;;;;;;;;;;;;AC/NrB;AACA;AACA;AACA;AACsD;AACX;AAC3C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,mDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mDAAW;AAChC,qBAAqB,mDAAW;AAChC,wBAAwB,mDAAW;AACnC,SAAS;AACT;AACA;AACA,qBAAqB,mDAAW;AAChC,qBAAqB,mDAAW;AAChC,wBAAwB,mDAAW;AACnC,SAAS;AACT;AACA;AACA,qBAAqB,mDAAW;AAChC,qBAAqB,mDAAW;AAChC,wBAAwB,mDAAW;AACnC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;;;;;;;;;ACxD5B;AACA;AACA;AACA;AACsD;AACP;AACE;AACd;AACU;AACF;AACN;AACQ;AACN;AACvC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,gBAAgB,qFAAuC;AAC7E,oBAAoB,gBAAgB,mFAAqC;AACzE;AACA,2EAA2E,gBAAgB;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gEAAuB;AAC7C;AACA;AACA,4BAA4B,4DAAqB;AACjD;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,6DAA6D,mDAAQ;AACrE;AACA,6DAA6D,mDAAQ;AACrE;AACA;AACA;AACA,2CAA2C,aAAa;AACxD;AACA;AACA;AACA,gCAAgC,4DAAoB;AACpD;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA,gCAAgC,cAAc;AAC9C;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA,gCAAgC,cAAc;AAC9C,gCAAgC,cAAc;AAC9C;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,aAAa;AACxD;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA,gCAAgC,cAAc;AAC9C,gCAAgC,cAAc;AAC9C;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,aAAa;AACxD;AACA;AACA;AACA;AACA;AACA,wBAAwB,oCAAoC;AAC5D,wBAAwB,sCAAsC;AAC9D,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,0FAA0F,2CAA2C;AACrI;AACA,gCAAgC,sBAAsB;AACtD;AACA,uEAAuE,uDAAU;AACjF;AACA;AACA;AACA,2CAA2C,aAAa;AACxD;AACA;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA,wEAAwE,uDAAU;AAClF;AACA;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,iCAAiC,kBAAkB;AACnD;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA,6BAA6B,oBAAoB;AACjD;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA,6BAA6B,mBAAmB;AAChD;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA,6BAA6B,wBAAwB;AACrD;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA,2EAA2E,uDAAU;AACrF;AACA,2EAA2E,uDAAU;AACrF;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,0DAA0D,qDAAS,GAAG,oCAAoC;AAC1G,0BAA0B,6CAAK;AAC/B;AACA;AACA,wEAAwE,uDAAU;AAClF;AACA,wEAAwE,uDAAU;AAClF;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,yEAAyE,qDAAS,GAAG,gBAAgB;AACrG,gCAAgC,sBAAsB;AACtD;AACA;AACA,+FAA+F,WAAW;AAC1G;AACA,+FAA+F,WAAW;AAC1G;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C;AACA;AACA,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;ACnZ5B;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,8CAA8C;AACpE,qBAAqB,yBAAyB,iBAAiB;AAC/D,sBAAsB,4CAA4C;AAClE,qBAAqB,0BAA0B,iBAAiB;AAChE,sBAAsB,6CAA6C;AACnE,qBAAqB,4BAA4B,iBAAiB;AAClE,sBAAsB,+CAA+C;AACrE,qBAAqB,yBAAyB,iBAAiB;AAC/D,sBAAsB,4CAA4C;AAClE,qBAAqB,kCAAkC,iBAAiB;AACxE,sBAAsB,qDAAqD;AAC3E,qBAAqB,+BAA+B,iBAAiB;AACrE,sBAAsB,kDAAkD;AACxE,qBAAqB,+BAA+B,iBAAiB;AACrE,sBAAsB,kDAAkD;AACxE,qBAAqB,4BAA4B,iBAAiB;AAClE,sBAAsB,+CAA+C;AACrE,qBAAqB,2BAA2B,iBAAiB;AACjE,sBAAsB,8CAA8C;AACpE,qBAAqB,2BAA2B,oCAAoC;AACpF,sBAAsB,gEAAgE;AACtF,qBAAqB,2BAA2B,oCAAoC;AACpF,sBAAsB,+DAA+D;AACrF;AACA,4BAA4B,cAAc;AAC1C;AACA;AACA;AACA;AACA,wEAAqB;AACA;;;;;;;;;;;;;;;;;ACtIrB;AACA;AACA;AACA;AACsD;AACjB;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+EAA+E;AAC7G;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,+EAA+E;AAC7G;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,qEAAqE;AACnG;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,0BAA0B,iDAAiD;AAC3E,0BAA0B,sCAAsC;AAChE,0BAA0B,kCAAkC;AAC5D;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAuD;AACjF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+D;AACzF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAuD;AACjF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+D;AACzF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAuD;AACjF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+D;AACzF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,cAAc,2EAAwB,gBAAgB,4DAAoB;AAC1E;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA,wCAAwC,YAAY;AACpD;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C,mFAAmF,0BAA0B;AAC7G;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oDAAoD,qBAAqB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;ACrT1B;AACA;AACA;AACA;AAC8D;AACjB;AAC7C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA,iBAAiB,yDAAM;AACvB;AACA,kDAAkD,aAAa;AAC/D;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY;AAC7D,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL,CAAC;AACD,kDAAkD,YAAY;AAC9D,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL,CAAC;AACD,oDAAoD,YAAY;AAChE,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL,CAAC;AACD,8CAA8C,YAAY;AAC1D,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8DAAsB;AAC5C,0BAA0B,+DAAuB;AACjD;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,cAAc;AAChC;AACA,SAAS;AACT,KAAK;AACL,CAAC;AACD,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;;;;;ACvItB;AACA;AACA;AACA;AACsD;AACnB;AACF;AACY;AACY;AACtB;AACE;AACQ;AACI;AACZ;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,gCAAgC,iEAAe;AAC/C;AACA,QAAQ,yDAAW;AACnB;AACA,IAAI,uDAAgB;AACpB;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,+DAA+D;AACvF,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS,GAAG,uEAAuE;AAC/F,YAAY,qDAAS,GAAG,sEAAsE;AAC9F,YAAY,qDAAS,GAAG,wEAAwE;AAChG,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS,GAAG,4FAA4F;AACpH,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS,GAAG,uEAAuE;AAC/F;AACA,IAAI,wDAAkB,UAAU,WAAW;AAC3C,IAAI,wDAAkB,mCAAmC,WAAW;AACpE,IAAI,wDAAkB,yBAAyB,WAAW;AAC1D,qBAAqB,2CAAI;AACzB,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,gEAAgE;AACxF;AACA,IAAI,wDAAkB,iDAAiD,WAAW;AAClF,IAAI,wDAAkB,iDAAiD,WAAW;AAClF,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB;AACtB;AACA,YAAY,qDAAS,GAAG,+DAA+D;AACvF,YAAY,qDAAS,GAAG,+DAA+D;AACvF,YAAY,qDAAS,GAAG,+DAA+D;AACvF,YAAY,qDAAS,GAAG,sEAAsE;AAC9F,YAAY,qDAAS,GAAG,+DAA+D;AACvF;AACA,IAAI,wDAAkB,WAAW,WAAW;AAC5C,IAAI,wDAAkB,gBAAgB,WAAW;AACjD,uBAAuB,6CAAK,WAAW,uDAAe;AACtD,uBAAuB,6CAAK,WAAW,uDAAe;AACtD,0BAA0B,qDAAS;AACnC;AACA;AACA;AACA,6BAA6B,uDAAgB;AAC7C,6BAA6B,uDAAgB;AAC7C,IAAI,sFAAmC;AACvC;AACA;AACA,wEAAqB;AACD;;;;;;;;;;;;;;;;;;;;;;;;AC7HpB;AACA;AACA;AACA;AACsD;AACH;AACN;AACU;AACZ;AACM;AACM;AACpB;AACI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,0CAA0C,YAAY;AACtD;AACA,KAAK;AACL;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,yCAAyC,YAAY;AACrD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,KAAK;AACL;AACA;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,oEAAoE,cAAc;AAClF,8CAA8C,YAAY;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,sEAAsE,cAAc;AACpF,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,oEAAoE,cAAc;AAClF,8CAA8C,YAAY;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,sEAAsE,cAAc;AACpF,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,oEAAoE,cAAc;AAClF,8CAA8C,YAAY;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,sEAAsE,cAAc;AACpF,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,uDAAuD,YAAY;AACnE,iEAAiE,YAAY;AAC7E,sDAAsD,YAAY;AAClE,iBAAiB,aAAa;AAC9B,gGAAgG,cAAc;AAC9G;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,0DAA0D,YAAY;AACtE,mEAAmE,YAAY;AAC/E,oDAAoD,YAAY;AAChE,iBAAiB,aAAa;AAC9B;AACA,0CAA0C,cAAc;AACxD,0DAA0D,cAAc;AACxE,kEAAkE,cAAc;AAChF,2DAA2D,cAAc;AACzE,iBAAiB,aAAa;AAC9B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B,+DAA+D,cAAc;AAC7E,IAAI,wEAA0B;AAC9B,2CAA2C,cAAc;AACzD,IAAI,wEAA0B;AAC9B;AACA;AACA;AACA,KAAK;AACL;AACA,0DAA0D,cAAc;AACxE,IAAI,wEAA0B;AAC9B;AACA;AACA;AACA,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,2EAA2E,cAAc;AACzF,8CAA8C,YAAY;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,+DAA+D,cAAc;AAC7E,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,qBAAqB;AACjC;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,wCAAwC,YAAY,iCAAiC,YAAY;AACjG;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,6BAA6B;AACzC;AACA,mEAAmE,cAAc;AACjF,kBAAkB,+DAAsB;AACxC,KAAK;AACL,wCAAwC,cAAc;AACtD;AACA;AACA,0CAA0C,YAAY;AACtD,gEAAgE,YAAY;AAC5E;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,sBAAsB,8BAA8B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,oEAAqB;AAC7E;AACA,wDAAwD,kEAAuB;AAC/E,wDAAwD,oEAAqB;AAC7E;AACA,wDAAwD,kEAAuB;AAC/E,mDAAmD,8CAAO;AAC1D,wDAAwD,oEAAqB;AAC7E;AACA,wDAAwD,kEAAuB;AAC/E,sDAAsD,gDAAS;AAC/D;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,sBAAsB,8BAA8B;AACpD;AACA;AACA,wDAAwD,wEAAuB;AAC/E;AACA,wDAAwD,iEAAsB;AAC9E;AACA,wDAAwD,wEAAuB;AAC/E;AACA,wDAAwD,kEAAuB;AAC/E;AACA,wDAAwD,wEAAuB;AAC/E;AACA,wDAAwD,kEAAuB;AAC/E;AACA;AACA;AACA;AACA,wDAAwD,wEAAuB;AAC/E;AACA,wDAAwD,iEAAsB;AAC9E,wDAAwD,wEAAuB;AAC/E;AACA,wDAAwD,iEAAsB;AAC9E,wDAAwD,wEAAuB;AAC/E;AACA,wDAAwD,iEAAsB;AAC9E;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,oIAAoI,cAAc;AAClJ,sBAAsB,0DAA0D;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;ACtf1B;AACA;AACA;AACA;AACsD;AACb;AACK;AAC9C;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4BAA4B,iDAAO,GAAG,YAAY,0CAA0C;AAC5F,wBAAwB,iDAAO;AAC/B,oBAAoB,0CAA0C;AAC9D,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,oBAAoB,2EAAwB;AAC5C,oCAAoC,YAAY;AAChD,wFAAwF,wEAAyB;AACjH,sEAAsE,eAAe;AACrF,sBAAsB,eAAe;AACrC,qEAAqE,wEAAyB;AAC9F,yEAAyE,eAAe;AACxF,sBAAsB,oCAAoC;AAC1D;AACA;AACA;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;;;;;;;;;;;AClDxB;AACA;AACA;AACA;AACsD;AACP;AACZ;AACkB;AACZ;AACN;AACuB;AACP;AACN;AACI;AACN;AACN;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAa;AACjC;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,qCAAqC,2DAAiB;AACtD;AACA;AACA;AACA,qBAAqB,uDAAU;AAC/B;AACA;AACA,4CAA4C;AAC5C;AACA,kDAAkD,uDAAgB;AAClE;AACA;AACA,uCAAuC,sDAAe;AACtD;AACA,uCAAuC,sDAAe,EAAE,uDAAgB;AACxE;AACA,uCAAuC,sDAAe;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2CAAI;AACtB;AACA;AACA,6EAA6E,sDAAe;AAC5F,2EAA2E,gDAAS;AACpF,6EAA6E,wDAAiB;AAC9F,4EAA4E,uDAAgB;AAC5F;AACA,kBAAkB,oDAAQ,GAAG,uBAAuB,cAAc;AAClE;AACA,mBAAmB,qDAAS,GAAG,8BAA8B;AAC7D,mBAAmB,qDAAS,GAAG,8BAA8B;AAC7D,mBAAmB,yDAAW,GAAG,qBAAqB;AACtD;AACA;AACA,mEAAmE,uDAAgB;AACnF;AACA,eAAe,yDAAkB;AACjC,uBAAuB,mEAA4B;AACnD;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAA4B,SAAS,4DAAqB;AACnF;AACA;AACA;AACA;AACA,yBAAyB,mEAA4B;AACrD;AACA;AACA;AACA,0BAA0B,2DAAY;AACtC;AACA;AACA;AACA,0DAA0D;AAC1D;AACA,8BAA8B,qDAAc,6BAA6B;AACzE;AACA,qBAAqB,qDAAc;AACnC;AACA;AACA;AACA,oBAAoB,2EAAwB;AAC5C,kCAAkC,OAAO;AACzC;AACA;AACA,4BAA4B,gEAAgE;AAC5F,4BAA4B,yDAAyD;AACrF,4BAA4B,gEAAgE;AAC5F;AACA,wBAAwB,8DAAkB;AAC1C;AACA,IAAI,8DAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oDAAoD;AAC5E,8BAA8B,uEAA2B;AACzD;AACA;AACA;AACA;AACA;AACA,IAAI,8DAAkB;AACtB;AACA;AACA;AACA,IAAI,wDAAiB;AACrB,oBAAoB,2EAAwB;AAC5C,kCAAkC,OAAO;AACzC;AACA;AACA,4BAA4B,gEAAgE;AAC5F,4BAA4B,yDAAyD;AACrF,4BAA4B,gEAAgE;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3JrB;AACA;AACA;AACA;AACsD;AACP;AAC2B;AACvB;AAChB;AACA;AACF;AACE;AACY;AACF;AACU;AACJ;AAChB;AACQ;AACN;AACkB;AACV;AACV;AACgB;AACZ;AACA;AACF;AACE;AACvC;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF,sBAAsB;AAC1G,qGAAqG,qBAAqB;AAC1H,gFAAgF,qBAAqB;AACrG;AACA;AACA,0DAA0D,aAAa;AACvE;AACA;AACA;AACA;AACA;AACA,mEAAmE,4BAA4B;AAC/F,0EAA0E,4CAA4C;AACtH,uEAAuE,yCAAyC;AAChH,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iEAAuB;AAC7C;AACA;AACA,4BAA4B,4DAAqB;AACjD;AACA;AACA;AACA,mBAAmB,iDAAY;AAC/B;AACA,sBAAsB,sDAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAK,CAAC,mDAAY;AACzC,uBAAuB,8CAAK,CAAC,mDAAY;AACzC;AACA;AACA,0BAA0B,qDAAS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA,4BAA4B,sDAAS,GAAG,6BAA6B;AACrE;AACA,mBAAmB,8CAAK;AACxB;AACA;AACA;AACA,gCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mDAAmD;AACpE,iBAAiB,mDAAmD;AACpE,iBAAiB,mDAAmD;AACpE,iBAAiB,mDAAmD;AACpE;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mBAAmB;AAChD,uBAAuB,wBAAwB;AAC/C,SAAS;AACT;AACA;AACA,uCAAuC,cAAc;AACrD;AACA,qCAAqC,0BAA0B;AAC/D;AACA,qCAAqC,0BAA0B;AAC/D;AACA;AACA;AACA,4CAA4C,4BAA4B;AACxE;AACA,uCAAuC;AACvC;AACA;AACA;AACA,kCAAkC,gBAAgB;AAClD;AACA;AACA;AACA;AACA,4CAA4C,mBAAmB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAQ;AACjC,IAAI,0EAA8B;AAClC,cAAc,2EAAwB;AACtC;AACA,gBAAgB,aAAa;AAC7B;AACA,uBAAuB,2CAAI;AAC3B,uBAAuB,8CAAK,WAAW,wDAAe;AACtD,2DAA2D,gBAAgB;AAC3E,uBAAuB,8CAAK,WAAW,wDAAe;AACtD;AACA;AACA;AACA;AACA;AACA,+BAA+B,6DAAoB;AACnD,6BAA6B,0BAA0B;AACvD,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAQ;AACjC,IAAI,0EAA8B;AAClC,cAAc,2EAAwB;AACtC;AACA,gBAAgB,aAAa;AAC7B;AACA,uBAAuB,8CAAK,WAAW,wDAAe;AACtD,2JAA2J,cAAc;AACzK,uBAAuB,8CAAK,WAAW,wDAAe;AACtD;AACA;AACA;AACA;AACA;AACA,6BAA6B,sBAAsB,6DAAoB,EAAE;AACzE,6BAA6B,uBAAuB,6DAAoB,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,2CAA2C,aAAa;AACxD;AACA,2CAA2C,aAAa;AACxD,gBAAgB,yDAAkB;AAClC,gCAAgC,yDAAkB;AAClD,yBAAyB,yDAAkB;AAC3C,oCAAoC;AACpC;AACA,8BAA8B,sBAAsB,6DAAoB,EAAE;AAC1E,8BAA8B,uBAAuB,6DAAoB,EAAE;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,sDAAS,GAAG,8BAA8B;AACtD,YAAY,sDAAS,GAAG,8BAA8B;AACtD,YAAY,sDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD;AACA,IAAI,wDAAkB,iBAAiB,WAAW;AAClD;AACA,2CAA2C,aAAa,UAAU,wDAAe;AACjF,2CAA2C,aAAa,UAAU,wDAAe;AACjF,oBAAoB,yDAAkB;AACtC,oBAAoB,yDAAkB;AACtC,0BAA0B,qDAAS;AACnC;AACA;AACA;AACA,8BAA8B,sBAAsB,6DAAoB,EAAE;AAC1E,8BAA8B,uBAAuB,6DAAoB,EAAE;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD;AACA;AACA,YAAY,sDAAS,GAAG,gCAAgC;AACxD,YAAY,sDAAS,GAAG,gCAAgC;AACxD,YAAY,sDAAS,GAAG,8BAA8B;AACtD,YAAY,sDAAS,GAAG,gCAAgC;AACxD,YAAY,sDAAS,GAAG,gCAAgC;AACxD,YAAY,sDAAS,GAAG,8BAA8B;AACtD;AACA,cAAc,2EAAwB;AACtC;AACA,uBAAuB,8CAAK,GAAG,6BAA6B;AAC5D;AACA,uBAAuB,8CAAK,GAAG,6BAA6B;AAC5D;AACA,0BAA0B,qDAAS,GAAG,6CAA6C;AACnF;AACA;AACA;AACA;AACA,uBAAuB,8CAAK,iBAAiB,6DAAoB;AACjE,uBAAuB,8CAAK,kBAAkB,6DAAoB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,sBAAsB,8CAAK;AAC3B,uBAAuB,8CAAK;AAC5B;AACA,YAAY,sDAAS,GAAG,8BAA8B;AACtD,6BAA6B,uDAAU;AACvC,6BAA6B,gEAAc,kBAAkB,kEAAsB;AACnF,6BAA6B,4DAAY,kBAAkB,kEAAsB;AACjF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,kEAAsB;AACnF,6BAA6B,uDAAU,kCAAkC,6EAAgC;AACzG,6BAA6B,uDAAU,kCAAkC,6EAAgC;AACzG,6BAA6B,uDAAU,iCAAiC,6EAAgC;AACxG,YAAY,sDAAS,GAAG,8CAA8C,iDAAS,EAAE;AACjF,6BAA6B,4DAAY,kBAAkB,kEAAsB;AACjF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,YAAY,sDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,YAAY,sDAAS,GAAG,8BAA8B;AACtD,6BAA6B,4DAAY,kBAAkB,kEAAsB;AACjF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,uDAAU,kCAAkC,0EAA6B;AACtG,YAAY,sDAAS,GAAG,8CAA8C,iDAAS,EAAE;AACjF,6BAA6B,gEAAc,kBAAkB,kEAAsB;AACnF,6BAA6B,4DAAY,kBAAkB,kEAAsB;AACjF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,kEAAsB;AACnF,6BAA6B,uDAAU,kCAAkC,0EAA6B;AACtG,6BAA6B,uDAAU,kCAAkC,0EAA6B;AACtG,6BAA6B,uDAAU,iCAAiC,0EAA6B;AACrG,YAAY,sDAAS,GAAG,8BAA8B;AACtD;AACA,uBAAuB,gDAAM;AAC7B,wBAAwB,gDAAM;AAC9B,IAAI,mEAAuB;AAC3B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA,qGAAqG,cAAc;AACnH,uFAAuF,YAAY;AACnG;AACA;AACA;AACA,qCAAqC,6DAAoB;AACzD;AACA,mDAAmD,wDAAgB,uBAAuB;AAC1F,mDAAmD,wDAAgB,sBAAsB;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,MAAM;AACtC,yFAAyF,YAAY;AACrG;AACA,qBAAqB,MAAM;AAC3B;AACA,wBAAwB,cAAc,iBAAiB,kBAAkB,kBAAkB,2CAAI;AAC/F;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC,sBAAsB,iBAAiB;AACvC;AACA;AACA,aAAa;AACb,iCAAiC,2CAAI;AACrC,wBAAwB,cAAc,iBAAiB,kBAAkB;AACzE;AACA;AACA,sBAAsB,iBAAiB;AACvC,sBAAsB,iBAAiB;AACvC,sBAAsB,iBAAiB;AACvC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E;AACA,+BAA+B,aAAa;AAC5C,+BAA+B,aAAa;AAC5C,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2CAAI;AAChB,YAAY,2CAAI;AAChB,YAAY,2CAAI;AAChB,YAAY,2CAAI;AAChB;AACA;AACA,kFAAkF,6DAAoB;AACtG;AACA,kBAAkB,kCAAkC;AACpD,kBAAkB,kCAAkC;AACpD,kBAAkB,kCAAkC;AACpD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,YAAY;AACrF,8DAA8D,cAAc;AAC5E;AACA,+BAA+B,aAAa;AAC5C,+BAA+B,aAAa;AAC5C,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA;AACA,yBAAyB,6DAAoB;AAC7C;AACA,kBAAkB,6CAA6C;AAC/D,kBAAkB,6CAA6C;AAC/D,kBAAkB,6CAA6C;AAC/D;AACA;AACA;AACA;AACA,YAAY,2CAAI;AAChB,YAAY,2CAAI;AAChB;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA,mDAAmD,wDAAgB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,0EAA8B,KAAK,oDAAQ;AAC/C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD,KAAK;AACL;AACA;AACA;AACA,oDAAoD,mBAAmB;AACvE;AACA,6DAA6D,mBAAmB;AAChF,qEAAqE,mBAAmB;AACxF;AACA,wDAAwD,aAAa;AACrE;AACA,oBAAoB,0CAA0C;AAC9D;AACA;AACA;AACA,kCAAkC,6EAA2B;AAC7D;AACA;AACA;AACA;AACA;AACA,IAAI,2EAA+B;AACnC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,aAAa;AACnG;AACA,SAAS;AACT;AACA;AACA;AACA,4CAA4C,kBAAkB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB,gBAAgB,6DAAoB;AAC1E;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8CAAK;AAC/B;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAS,GAAG,6BAA6B;AACtE;AACA,gBAAgB,wDAAkB,WAAW,WAAW;AACxD;AACA;AACA,qCAAqC,uDAAU;AAC/C,8CAA8C,8EAAiC;AAC/E,6BAA6B,iDAAU,MAAM,wDAAiB;AAC9D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gBAAgB,wDAAkB,WAAW,WAAW;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,2CAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2BAA2B,8CAAK,GAAG,wCAAwC,UAAU,wDAAe;AACpG,wBAAwB,qDAAS,GAAG,wCAAwC;AAC5E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;ACzuB1B;AACA;AACA;AACA;AACsD;AACX;AAC3C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA,+BAA+B,mDAAQ;AACvC,+BAA+B,mDAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,wDAAa;AAC9B,iBAAiB,wDAAa;AAC9B,iBAAiB,wDAAa;AAC9B,iBAAiB,wDAAa;AAC9B,iBAAiB,wDAAa;AAC9B,iBAAiB,wDAAa;AAC9B,iBAAiB,wDAAa;AAC9B;AACA,iBAAiB,uDAAY;AAC7B,iBAAiB,uDAAY;AAC7B,iBAAiB,uDAAY;AAC7B,iBAAiB,uDAAY;AAC7B,iBAAiB,uDAAY;AAC7B;AACA;AACA,sBAAsB,mDAAQ;AAC9B,sBAAsB,mDAAQ;AAC9B,sBAAsB,mDAAQ;AAC9B,oBAAoB,mDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;AChFzB;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG,YAAY;AAC5G;AACA,KAAK;AACL;AACA,aAAa,6BAA6B;AAC1C,aAAa,8BAA8B;AAC3C;AACA;AACA,sBAAsB,eAAe;AACrC,sBAAsB,kDAAkD;AACxE,sBAAsB,eAAe;AACrC,sBAAsB,kDAAkD;AACxE,sBAAsB,eAAe;AACrC,sBAAsB,kDAAkD,6BAA6B,YAAY;AACjH,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,SAAS,aAAa;AACtB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,iBAAiB;AACvC,sBAAsB,iDAAiD;AACvE,SAAS,aAAa;AACtB;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,iBAAiB;AACvC,sBAAsB,mDAAmD;AACzE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,SAAS,aAAa;AACtB;AACA;AACA,0EAA0E,MAAM;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC,CAAC;AACD,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;;ACzF1B;AACA;AACA;AACA;AACsD;AACL;AACZ;AACM;AACY;AACvD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC,2DAA2D,gCAAgC;AAC3F,8CAA8C,gCAAgC;AAC9E,mDAAmD,8BAA8B;AACjF,kDAAkD,+BAA+B;AACjF,KAAK;AACL;AACA;AACA,IAAI,yEAA8B,KAAK,mDAAQ;AAC/C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD,KAAK;AACL;AACA;AACA,wBAAwB,6CAAK,0BAA0B,eAAe;AACtE,wBAAwB,6CAAK,0BAA0B,eAAe;AACtE,wBAAwB,6CAAK,0BAA0B,eAAe;AACtE,wBAAwB,6CAAK,0BAA0B,eAAe;AACtE;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA,qCAAqC,gBAAgB,qFAAuC,EAAE;AAC9F;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB,qFAAuC,EAAE;AAC1F,gCAAgC,gBAAgB,mFAAqC,EAAE;AACvF;AACA;AACA;AACA,sBAAsB,yDAAyD;AAC/E,kCAAkC,4EAA2B;AAC7D;AACA,IAAI,0EAA+B;AACnC;AACA;AACA;AACA,IAAI,yEAA8B,KAAK,mDAAQ;AAC/C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD,KAAK;AACL;AACA,qDAAqD,aAAa;AAClE,kDAAkD,yDAAyD;AAC3G;AACA,yBAAyB,6CAAK,sBAAsB,eAAe,IAAI,SAAS;AAChF,yBAAyB,6CAAK,uBAAuB,mCAAmC;AACxF;AACA,4BAA4B,6CAAK,0BAA0B,gBAAgB;AAC3E,4BAA4B,6CAAK,0BAA0B,gBAAgB;AAC3E,4BAA4B,6CAAK,uBAAuB,gBAAgB;AACxE,4BAA4B,6CAAK,0BAA0B,gBAAgB;AAC3E;AACA;AACA;AACA,kCAAkC,4EAA2B;AAC7D;AACA,IAAI,0EAA+B;AACnC;AACA;AACA;AACA,IAAI,yEAA8B,KAAK,mDAAQ;AAC/C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD,KAAK;AACL;AACA,wDAAwD,aAAa;AACrE,2DAA2D,yDAAyD;AACpH;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,oCAAoC,gBAAgB;AACpD,oCAAoC,gBAAgB;AACpD,oCAAoC,gBAAgB;AACpD;AACA;AACA;AACA,kCAAkC,4EAA2B;AAC7D;AACA,IAAI,0EAA+B;AACnC;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;;;ACpH1B;AACA;AACA;AACA;AACA;AACsD;AACP;AACA;AACI;AAClB;AACY;AAC7C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,2BAA2B,4CAA4C;AACvE,2BAA2B,2CAA2C;AACtE;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,qCAAqC;AAC/C,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,6CAA6C,YAAY;AACzD,8CAA8C,YAAY;AAC1D,IAAI,wDAAkB,qBAAqB,WAAW;AACtD;AACA;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D;AACA,yBAAyB,+CAA+C;AACxE,wCAAwC,WAAW;AACnD,4CAA4C,oBAAoB;AAChE;AACA,yBAAyB,sDAAsD;AAC/E,4CAA4C,oBAAoB;AAChE;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,oBAAoB;AAChE;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,oBAAoB;AAChE;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD,0BAA0B,4CAA4C;AACtE;AACA;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC,6BAA6B,uDAAU;AACvC;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC,6BAA6B,uDAAU;AACvC;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,2BAA2B,4CAA4C;AACvE,2BAA2B,2CAA2C;AACtE;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,qCAAqC;AAC/C,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,8CAA8C,WAAW;AACzD,8CAA8C,WAAW;AACzD,8CAA8C,WAAW;AACzD,IAAI,wDAAkB,qBAAqB,WAAW;AACtD;AACA;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,gCAAgC;AAC5E;AACA,yBAAyB,+CAA+C;AACxE,wCAAwC,WAAW;AACnD,4CAA4C,gCAAgC;AAC5E;AACA,yBAAyB,sDAAsD;AAC/E,4CAA4C,gCAAgC;AAC5E;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,gCAAgC;AAC5E;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,gCAAgC;AAC5E,sBAAsB,+CAA+C;AACrE;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,mBAAmB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,mBAAmB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA,qCAAqC,+CAA+C;AACpF;AACA;AACA;AACA,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,mBAAmB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,qCAAqC,+CAA+C;AACpF;AACA;AACA;AACA;AACA,kBAAkB,6DAA6D;AAC/E,kBAAkB,8DAA8D;AAChF,kBAAkB,6DAA6D;AAC/E,kBAAkB,8DAA8D;AAChF,kBAAkB,6DAA6D;AAC/E,kBAAkB,8DAA8D;AAChF;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,kDAAkD,sBAAsB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA,2BAA2B,8DAA8D;AACzF,2BAA2B,+DAA+D;AAC1F;AACA,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D;AACA;AACA,8CAA8C,WAAW;AACzD,4CAA4C,oBAAoB;AAChE,4CAA4C,oBAAoB;AAChE,6CAA6C,oBAAoB;AACjE,6CAA6C,oBAAoB;AACjE;AACA;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA,2BAA2B,8DAA8D;AACzF,2BAA2B,+DAA+D;AAC1F;AACA,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D;AACA;AACA,8CAA8C,WAAW;AACzD,4CAA4C,oBAAoB;AAChE,4CAA4C,oBAAoB;AAChE,6CAA6C,oBAAoB;AACjE,6CAA6C,oBAAoB;AACjE;AACA;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;;;;;ACva1B;AACA;AACA;AACA;AACsD;AACnB;AACU;AACU;AACJ;AACV;AACE;AACN;AACrC;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,oCAAoC,iDAAO;AAC3C,yCAAyC,2DAAY;AACrD;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B,aAAa;AACb;AACA;AACA,YAAY,iBAAiB;AAC7B,4BAA4B,cAAc,iBAAiB,kBAAkB;AAC7E,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E,gCAAgC,cAAc,mBAAmB,kBAAkB;AACnF;AACA,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,kBAAkB,mBAAmB;AAC7D;AACA,gCAAgC,cAAc,iBAAiB,kBAAkB;AACjF;AACA,UAAU,cAAc,kBAAkB,kBAAkB;AAC5D,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAAc;AACxC,0BAA0B,+DAAc;AACxC,0BAA0B,+DAAc;AACxC,0BAA0B,+DAAc;AACxC,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E;AACA,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D,UAAU,cAAc,kBAAkB,kBAAkB;AAC5D;AACA;AACA,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D;AACA;AACA;AACA,0BAA0B,+DAAc;AACxC,0BAA0B,+DAAc;AACxC,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxF7B;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACmC;AACA;AACE;AACQ;AAChB;AACG;AACH;AACA;AACO;AACA;AACP;AACK;AACJ;AACF;AACM;AACF;AACH;AACK;AACD;AACC;AACA;AACA;AACG;AACJ;AACE;AACE;AACJ;AACQ;AACX;AACG;AACI;AACG;AACP;AACF;AACM;AACF;AACF;AACA;AACH;AACC;AACD;AACS;AACF;AACH;AACI;AACJ;AACD;AACI;AACL;AACF;AACE;AACC;AACA;AACF;AACK;AACE;AACL;AACE;AACC;AACE;AACN;AACD;AACA;AACG;AACH;AACG;AACF;AACO;AACT;;;;;;;;;;;;;;;;;;;ACpF9B;AACA;AACA;AACA;AACA;AAC8E;AACzC;AACc;AACd;AACrC;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC,2CAA2C,iBAAiB;AAC5D,2CAA2C,kBAAkB;AAC7D;AACA,KAAK;AACL;AACA;AACA,2BAA2B;AAC3B,uBAAuB,sDAAc;AACrC,sBAAsB,sDAAc;AACpC,0BAA0B;AAC1B,yBAAyB,sDAAc;AACvC,sBAAsB,sDAAc,uBAAuB;AAC3D,aAAa;AACb;AACA;AACA;AACA,gCAAgC;AAChC,0EAA0E,4DAAoB;AAC9F,wEAAwE,4DAAoB;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,6DAAU,GAAG,6DAAU;AACnE;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA,wBAAwB,6CAAK;AAC7B;AACA,uCAAuC,6CAAK;AAC5C;AACA,uBAAuB,UAAU;AACjC,yBAAyB,2DAAY;AACrC;AACA;AACA,wBAAwB,qBAAqB;AAC7C,yBAAyB,2DAAY;AACrC;AACA;AACA;AACA,IAAI,gEAAwB;AAC5B,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,0EAA0E,4DAAoB;AAC9F,wEAAwE,4DAAoB;AAC5F;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACY;;;;;;;;;;;;;;;;;AChHjC;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACZ;AAC1C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wBAAwB,kDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACM;;;;;;;;;;;;;;;;;;;;;AC5E3B;AACA;AACA;AACA;AACA;AAC8E;AAC3C;AACE;AACc;AACd;AACa;AAClD;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,2BAA2B;AAC3B,uBAAuB,sDAAc;AACrC,sBAAsB,sDAAc;AACpC,yBAAyB,sDAAc;AACvC,sBAAsB,sDAAc,2BAA2B;AAC/D,aAAa;AACb;AACA;AACA;AACA;AACA,4BAA4B,wDAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB;AACA;AACA;AACA;AACA,gCAAgC;AAChC,4BAA4B;AAC5B,yBAAyB;AACzB,sFAAsF,4DAAoB;AAC1G,oFAAoF,4DAAoB;AACxG;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA,oBAAoB,OAAO;AAC3B,qBAAqB,2DAAY;AACjC;AACA;AACA,oBAAoB,iBAAiB;AACrC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qGAAqG,4DAAoB;AACzH,iGAAiG,4DAAoB;AACrH,kGAAkG,4DAAoB;AACtH,sGAAsG,4DAAoB;AAC1H;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,4DAAoB;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAAoB;AACpC,8BAA8B,6CAAK;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B,yBAAyB;AACzB,sFAAsF,4DAAoB;AAC1G,oFAAoF,4DAAoB;AACxG;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA,oBAAoB,OAAO;AAC3B,qBAAqB,2DAAY;AACjC;AACA;AACA,oBAAoB,iBAAiB;AACrC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B;AACA;AACA,uBAAuB,uEAAwB;AAC/C,uBAAuB,qEAAsB;AAC7C;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,4BAA4B;AAC5B,yBAAyB;AACzB,sFAAsF,4DAAoB;AAC1G,oFAAoF,4DAAoB;AACxG;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B,oBAAoB,OAAO;AAC3B;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA,uBAAuB,WAAW;AAClC,sBAAsB,8BAA8B;AACpD;AACA,uBAAuB,2BAA2B;AAClD,sBAAsB,8BAA8B;AACpD;AACA,uBAAuB,WAAW;AAClC,sBAAsB,8BAA8B;AACpD;AACA,uBAAuB,gCAAgC;AACvD,sBAAsB,8BAA8B;AACpD;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;AC1T7B;AACA;AACA;AACA;AAC2C;AACA;AAC3C,2BAA2B,mDAAQ;AACnC;AACA;AACA,yBAAyB,mDAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mDAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;AChFxB;AACA;AACA;AACA;AACsD;AACG;AACzD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,uDAAe;AAClC;AACA;AACA;AACA,mBAAmB,uDAAe;AAClC,0BAA0B,gDAAQ;AAClC,0BAA0B,gDAAQ;AAClC;AACA;AACA,oCAAoC,yDAAiB;AACrD;AACA;AACA,wEAAqB;AACW;;;;;;;;;;;;;;;;;;AC3BhC;AACA;AACA;AACA;AACsD;AACnB;AACA;AACnC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,WAAW,IAAI,2CAA2C;AAC1D,WAAW,IAAI,uBAAuB;AACtC,WAAW,IAAI,8DAA8D;AAC7E,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,2CAA2C;AAC1D,WAAW,IAAI,2CAA2C;AAC1D,WAAW,IAAI,iFAAiF;AAChG,WAAW,IAAI,8DAA8D;AAC7E,WAAW,IAAI,qEAAqE;AACpF,WAAW,IAAI,oEAAoE;AACnF,8BAA8B,wBAAwB;AACtD,8BAA8B,0CAA0C;AACxE,8BAA8B,oFAAoF;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,+DAAwB;AACpE,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,WAAW,0BAA0B,cAAc,IAAI,uBAAuB;AAC9E,WAAW,uCAAuC,cAAc,IAAI,uBAAuB;AAC3F,WAAW,uDAAuD,cAAc,IAAI,uBAAuB;AAC3G,WAAW,2CAA2C,cAAc,IAAI,uBAAuB;AAC/F,WAAW,0CAA0C,cAAc,IAAI,uBAAuB;AAC9F,WAAW,6CAA6C,cAAc,IAAI,uBAAuB;AACjG,WAAW,8DAA8D,cAAc,IAAI,uBAAuB;AAClH;AACA,cAAc,8DAA8D,cAAc;AAC1F,cAAc,0CAA0C;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wEAAqB;AACY;;;;;;;;;;;;;;;;;;ACvJjC;AACA;AACA;AACA;AACsD;AACP;AACV;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,wBAAwB,uDAAU;AAClC,iEAAiE,0DAAkB;AACnF;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA,kEAAkE,2DAAmB;AACrF;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA,sEAAsE,+DAAuB;AAC7F;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,6CAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;;;AC7KtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACnB;AACU;AACF;AACN;AACQ;AACI;AACZ;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,0BAA0B,qDAAS;AACnC,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,2BAA2B,mDAAQ,GAAG,wBAAwB;AAC9D,2BAA2B,mDAAQ,GAAG,0BAA0B;AAChE,2BAA2B,mDAAQ,GAAG,wBAAwB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAS;AAC9B,QAAQ,yDAAW;AACnB;AACA;AACA;AACA;AACA;AACA,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,kCAAkC;AAC5C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,6BAA6B;AACvC,UAAU,kCAAkC;AAC5C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,oDAAoD;AAC9D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,sBAAsB,6CAAK;AAC3B,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,wCAAwC;AAClD,UAAU,wCAAwC;AAClD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B,0BAA0B,6CAAK;AAC/B,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,0BAA0B,qDAAS;AACnC,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,oBAAoB,qDAAS,GAAG,8BAA8B;AAC9D,oBAAoB,qDAAS,GAAG,8BAA8B;AAC9D,oBAAoB,mDAAQ,GAAG,wBAAwB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;;;AC7OzB;AACA;AACA;AACA;AACA;AACsD;AACb;AACN;AACe;AAClD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wEAAwE,aAAa;AACrF,2EAA2E,iBAAiB;AAC5F;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,YAAY;AACxC,YAAY,8CAA8C;AAC1D;AACA,UAAU,kDAAkD;AAC5D,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E;AACA;AACA;AACA,wCAAwC,yBAAyB,iBAAiB;AAClF,wCAAwC,yBAAyB,iBAAiB;AAClF,wCAAwC,0BAA0B,iBAAiB,OAAO,iDAAO;AACjG,2CAA2C,aAAa;AACxD,+BAA+B,iDAAO,CAAC,uEAAwB;AAC/D;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAgB;AAC5C,IAAI,sFAAmC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA,UAAU,iDAAiD;AAC3D,UAAU,+DAA+D;AACzE,UAAU,+DAA+D;AACzE,UAAU,kEAAkE;AAC5E;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,mEAAmE;AAC7E;AACA;AACA;AACA,qBAAqB,yBAAyB,iBAAiB;AAC/D,YAAY,iDAAO,CAAC,uEAAwB;AAC5C,wBAAwB,aAAa;AACrC;AACA;AACA,qBAAqB,yBAAyB,iBAAiB;AAC/D,wBAAwB,aAAa;AACrC,YAAY,iDAAO,CAAC,iEAAkB;AACtC;AACA,yCAAyC,4BAA4B,iBAAiB;AACtF;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA,6BAA6B,uDAAgB;AAC7C;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,YAAY,8CAA8C;AAC1D,6BAA6B,0BAA0B;AACvD;AACA,UAAU,iDAAiD;AAC3D,UAAU,+DAA+D;AACzE,UAAU,+DAA+D;AACzE,UAAU,kEAAkE;AAC5E;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,mEAAmE;AAC7E;AACA,6BAA6B,2BAA2B;AACxD;AACA,UAAU,gEAAgE;AAC1E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E;AACA,uBAAuB,wDAAwD;AAC/E,uBAAuB,6DAA6D;AACpF,uBAAuB,8DAA8D;AACrF,aAAa,2BAA2B;AACxC,aAAa,wBAAwB;AACrC;AACA,yCAAyC,yBAAyB,iBAAiB,mBAAmB,aAAa;AACnH,yCAAyC,yBAAyB,iBAAiB,mBAAmB,aAAa;AACnH,yCAAyC,4BAA4B,iBAAiB;AACtF,yCAAyC,2BAA2B,iBAAiB;AACrF,yCAAyC,yBAAyB,iBAAiB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;;;;;;AChK7B;AACA;AACA;AACA;AACsD;AACD;AACR;AACR;AACa;AACL;AACF;AAC3C;AACA;AACA;AACA,YAAY,uDAAY;AACxB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAa;AACjC;AACA,sBAAsB,6CAAK;AAC3B,wBAAwB,8DAAe;AACvC;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,4CAA4C;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACW;;;;;;;;;;;;;;;;;;;;;;;;;AC1DhC;AACA;AACA;AACA;AACA;AACA;AACsD;AACP;AACZ;AACF;AACY;AACR;AACM;AACN;AACQ;AACG;AAChD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE;AACA,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE;AACA,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,8CAA8C,eAAe;AAC7D,uDAAuD,eAAe;AACtE,uDAAuD,eAAe;AACtE,8CAA8C,eAAe;AAC7D,aAAa;AACb;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,YAAY,wBAAwB;AACpC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,YAAY,wBAAwB;AACpC;AACA;AACA,IAAI,mEAAuB;AAC3B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,iDAAiD,4CAA4C;AAC7F,uDAAuD,4CAA4C;AACnG,8CAA8C,8CAA8C;AAC5F,0DAA0D,8CAA8C;AACxG,uDAAuD,8CAA8C;AACrG,4CAA4C,4CAA4C;AACxF,iDAAiD,4CAA4C;AAC7F,mDAAmD,8CAA8C;AACjG,mDAAmD,gDAAgD;AACnG,oDAAoD,8CAA8C;AAClG,wDAAwD,4CAA4C;AACpG;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA,sBAAsB,sDAAc,eAAe;AACnD;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,+CAA+C;AACrF;AACA,iCAAiC,uDAAU;AAC3C;AACA;AACA,gBAAgB,wDAAkB,QAAQ,WAAW;AACrD;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAkB;AAC1B,0BAA0B,6CAAK;AAC/B;AACA;AACA,SAAS,UAAU,sDAAc;AACjC;AACA,8BAA8B,qDAAS;AACvC,0CAA0C,4DAAoB;AAC9D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;AC9UzB;AACA;AACA;AACA;AACsD;AACf;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAuD;AACpF,yCAAyC,uCAAuC;AAChF,yCAAyC,qCAAqC;AAC9E,8BAA8B,+FAA+F;AAC7H,yCAAyC,+DAA+D;AACxG,4BAA4B,eAAe;AAC3C,mCAAmC,eAAe;AAClD,+BAA+B,cAAc;AAC7C,qCAAqC,cAAc;AACnD,sCAAsC,cAAc;AACpD,4BAA4B,YAAY;AACxC;AACA;AACA,wBAAwB,sDAAsD;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B,wBAAwB,MAAM,KAAK,OAAO,KAAK,aAAa,KAAK,cAAc,KAAK,oBAAoB;AACxG;AACA,iCAAiC,oBAAoB;AACrD;AACA,iCAAiC;AACjC,iCAAiC,EAAE;AACnC;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,gEAAgE;AAChE;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;AC7IvB;AACA;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2EAAwB;AAC1C;AACA,iCAAiC,YAAY;AAC7C,kFAAkF,YAAY;AAC9F;AACA,iCAAiC,oBAAoB;AACrD,qEAAqE,YAAY;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC,KAAK;AACL;AACA;AACA,CAAC;AACD,wEAAqB;AACQ;;;;;;;;;;;;;;;;;ACvE7B;AACA;AACA;AACA;AACA;AACA;AACsD;AACmD;AACzG;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iDAAS;AACnC,QAAQ,mDAAW;AACnB;AACA;AACA;AACA;AACA;AACA,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B,0BAA0B,6CAAK;AAC/B,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2EAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD;AACA;AACA;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF;AACA,aAAa,8BAA8B;AAC3C,aAAa,0CAA0C;AACvD,aAAa,0CAA0C;AACvD,CAAC;AACD;AACA;AACA,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,8BAA8B;AACpD,sBAAsB,0CAA0C;AAChE,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD;AACA,aAAa,0CAA0C;AACvD;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF,sBAAsB,kDAAkD;AACxE,sBAAsB,6DAA6D;AACnF,sBAAsB,mDAAmD;AACzE;AACA,IAAI,0DAAkB,gBAAgB,WAAW;AACjD;AACA,aAAa,0CAA0C;AACvD,aAAa,0CAA0C;AACvD,CAAC;AACD;AACA;AACA,gBAAgB,kDAAU;AAC1B;AACA,gBAAgB,uDAAe;AAC/B,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA,yBAAyB,kDAAkD;AAC3E,0CAA0C,YAAY;AACtD,wCAAwC,iBAAiB;AACzD,sBAAsB,kDAAkD,6BAA6B,iBAAiB;AACtH,sBAAsB,kDAAkD,6BAA6B,iBAAiB;AACtH,sBAAsB,kDAAkD,6BAA6B,iBAAiB;AACtH;AACA,CAAC;AACD;AACA;AACA,sBAAsB,qDAAqD,+BAA+B,YAAY;AACtH,sBAAsB,qDAAqD;AAC3E,sBAAsB,qDAAqD,+BAA+B,YAAY;AACtH,sBAAsB,qDAAqD,+BAA+B,YAAY;AACtH;AACA,CAAC;AACD;AACA;AACA,sBAAsB,kDAAkD,kBAAkB,+CAAO;AACjG,sBAAsB,kDAAkD,kBAAkB,+CAAO;AACjG,sBAAsB,kDAAkD,kBAAkB,+CAAO;AACjG,sBAAsB,kDAAkD,kBAAkB,+CAAO;AACjG;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,4BAA4B,iDAAiD,kBAAkB,+CAAO;AACtG,4BAA4B,iDAAiD,kBAAkB,+CAAO;AACtG,4BAA4B,iDAAiD,kBAAkB,+CAAO;AACtG,4BAA4B,iDAAiD,kBAAkB,+CAAO;AACtG;AACA,CAAC;AACD,wEAAqB;AACM;;;;;;;;;;;;;;;;;ACjM3B;AACA;AACA;AACA;AACsD;AACiB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,yBAAyB,gDAAQ;AACjC,sBAAsB,iDAAS,GAAG,SAAS,gEAAwB,QAAQ;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAQ;AACjC,sBAAsB,iDAAS,GAAG,SAAS,gEAAwB,QAAQ;AAC3E,IAAI,sEAA8B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0DAAkB;AAC9D;AACA,gDAAgD,0DAAkB;AAClE;AACA;AACA;AACA,yBAAyB,gDAAQ;AACjC,sBAAsB,iDAAS,GAAG,SAAS,gEAAwB,QAAQ;AAC3E,IAAI,sEAA8B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;ACrEzB;AACA;AACA;AACA;AACA;AACsD;AACgF;AACtI;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,sBAAsB;AACtB;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+DAAuB;AAC3B,YAAY,iDAAS,GAAG,8BAA8B;AACtD,YAAY,iDAAS,GAAG,8BAA8B;AACtD,YAAY,iDAAS,GAAG,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F;AAC7F;AACA,+BAA+B,sBAAsB,EAAE,oBAAoB;AAC3E;AACA,4BAA4B,gEAAwB;AACpD;AACA;AACA,2BAA2B,WAAW;AACtC;AACA;AACA;AACA;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA,0FAA0F,eAAe,gBAAgB;AACzH,uCAAuC,cAAc,qBAAqB,EAAE,qBAAqB,IAAI,SAAS;AAC9G;AACA,yCAAyC,sBAAsB,cAAc,YAAY,IAAI,YAAY;AACzG;AACA;AACA;AACA,yBAAyB,gDAAQ;AACjC;AACA;AACA,kBAAkB,6CAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iEAAiE;AACrF;AACA,wBAAwB,+CAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wDAAY;AACpB;AACA;AACA,sBAAsB,oDAAY,uCAAuC,kBAAkB;AAC3F;AACA,sBAAsB,qDAAa;AACnC;AACA;AACA,sBAAsB,kDAAU;AAChC;AACA,yBAAyB,gDAAQ;AACjC;AACA,kBAAkB,6CAAK;AACvB;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;;;;;;;;AC5JzB;AACA;AACA;AACA;AACsD;AACnB;AACF;AACE;AACU;AACR;AACQ;AACN;AACF;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,oDAAoD;AAC5E;AACA,IAAI,wDAAkB,UAAU,WAAW;AAC3C,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,iCAAiC,qDAAS;AAC1C;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,iDAAiD;AAChE,eAAe,+DAA+D;AAC9E,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,+DAA+D;AAC9E,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,gEAAgE;AAC/E,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,gEAAgE;AAC/E,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,iDAAiD;AAChE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE;AACA,wBAAwB,+CAAM,sCAAsC,4DAAmB;AACvF,wBAAwB,+CAAM,sCAAsC,4DAAmB;AACvF,wBAAwB,+CAAM,sCAAsC,4DAAmB;AACvF,wBAAwB,+CAAM,uCAAuC,4DAAmB;AACxF,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,wBAAwB,+CAAM,sCAAsC,+DAAsB;AAC1F,wBAAwB,+CAAM,sCAAsC,+DAAsB;AAC1F,wBAAwB,+CAAM,sCAAsC,+DAAsB;AAC1F,wBAAwB,+CAAM,uCAAuC,+DAAsB;AAC3F,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE;AACA,qBAAqB,2CAAI;AACzB,uBAAuB,+CAAM,uCAAuC,4DAAmB;AACvF,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,oBAAoB;AAChC;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE;AACA,qBAAqB,2CAAI;AACzB,uBAAuB,+CAAM,uCAAuC,4DAAmB;AACvF,aAAa,oBAAoB;AACjC,IAAI,mEAAuB,0BAA0B,mBAAmB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,4CAA4C,qDAAS;AACrD;AACA,sBAAsB,4CAA4C;AAClE,sBAAsB,+BAA+B;AACrD,sBAAsB,4CAA4C;AAClE,sBAAsB,+BAA+B;AACrD;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,uBAAuB,6CAAK,CAAC,mDAAY;AACzC,uBAAuB,6CAAK,CAAC,mDAAY;AACzC,aAAa,oBAAoB;AACjC,QAAQ,qDAAS,yEAAyE,mBAAmB;AAC7G,wBAAwB,2CAAI;AAC5B,wBAAwB,2CAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;;ACzTtB;AACA;AACA;AACA;AACsD;AACP;AACZ;AACU;AACR;AACa;AACL;AAC7C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,mDAAmD;AACzD,MAAM,mDAAmD;AACzD,MAAM,mDAAmD;AACzD,MAAM,mDAAmD;AACzD,MAAM,oDAAoD;AAC1D,MAAM,oDAAoD;AAC1D,MAAM,oDAAoD;AAC1D;AACA;;AAEA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA,2BAA2B,qDAAS,GAAG,mDAAmD;AAC1F;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,mDAAmD;AAC3E;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS,GAAG,mDAAmD;AAC3E;AACA,uCAAuC,uDAAU,wBAAwB,yEAAsB;AAC/F;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,2CAAI;AAC1B;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA,iCAAiC,uDAAU,uBAAuB,yEAAsB;AACxF;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA,uCAAuC,uDAAU,wBAAwB,yEAAsB;AAC/F;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA,uCAAuC,uDAAU,wBAAwB,yEAAsB;AAC/F;AACA,sBAAsB,2CAAI;AAC1B;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1avB;AACA;AACA;AACA;AACA;AACA;AACsD;AACP;AACZ;AACA;AACU;AACM;AACR;AACN;AACsB;AACd;AACO;AACN;AACM;AACC;AACrD;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA,kFAAkF,cAAc;AAChG;AACA;AACA,0EAA0E,WAAW;AACrF,gFAAgF,aAAa;AAC7F,gFAAgF,aAAa;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,6CAAK;AAC3B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,8DAAa;AACnC,sBAAsB,8DAAa;AACnC,sBAAsB,8DAAa;AACnC,qBAAqB,2DAAY;AACjC,qBAAqB,2DAAY;AACjC,qBAAqB,2DAAY;AACjC,qBAAqB,sDAAO,CAAC,iEAAkB;AAC/C,qBAAqB,sDAAO,CAAC,iEAAkB;AAC/C,qBAAqB,sDAAO,CAAC,+DAAgB;AAC7C,wBAAwB;AACxB,wBAAwB;AACxB,qBAAqB;AACrB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAK,gBAAgB,iBAAiB;AAC1D;AACA;AACA,gBAAgB,6CAAK,iBAAiB,kBAAkB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,uEAAwB;AACpD,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,4CAA4C;AACpE;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,uEAAwB;AACpD,4BAA4B,qEAAsB;AAClD;AACA;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,4CAA4C;AACpE;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,uEAAwB;AACpD,4BAA4B,qEAAsB;AAClD;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA,uCAAuC,uDAAU;AACjD,uCAAuC,uDAAU;AACjD,uCAAuC,uDAAU;AACjD;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA,2BAA2B,qDAAS,GAAG,+BAA+B;AACtE;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,uEAAwB;AACpD,4BAA4B,qEAAsB;AAClD;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,4CAA4C;AACpE;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS,GAAG,8BAA8B;AAC9D,oBAAoB,qDAAS,GAAG,8BAA8B;AAC9D,oBAAoB,qDAAS,GAAG,+BAA+B;AAC/D,oBAAoB,qDAAS,GAAG,4CAA4C;AAC5E;AACA,YAAY,mEAAuB;AACnC;AACA,2CAA2C,SAAS,uEAAwB,+BAA+B,IAAI,mCAAmC;AAClJ;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,kCAAkC;AAC/G;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,qCAAqC;AAClH;AACA;AACA;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,mDAAmD;AAChI;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,mDAAmD;AAChI;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,iEAAiE;AAC9I;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAkB;AAC3C;AACA;AACA;AACA,yBAAyB,iEAAkB;AAC3C;AACA;AACA;AACA,yBAAyB,qEAAsB;AAC/C;AACA;AACA;AACA,yBAAyB,sEAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAK;AACzB;AACA,0BAA0B,6EAA0B;AACpD;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,0BAA0B,0EAAuB;AACjD;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,0BAA0B,6EAA0B;AACpD;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,0BAA0B,4EAAyB;AACnD;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,uEAAwB;AAC9C,0BAA0B,6EAA0B;AACpD;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,0BAA0B,6EAA0B;AACpD;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,6DAAe;AACpC;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,2DAAa;AAClC;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,qEAAsB;AAC5C,qBAAqB,2DAAa;AAClC;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,iEAAmB;AACxC,sBAAsB,iEAAkB;AACxC;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,iEAAkB;AACxC,0BAA0B,6EAA0B;AACpD;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,8DAAe;AACrC,0BAA0B,4EAAyB;AACnD;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,uEAAwB;AAC9C,qBAAqB,iEAAmB;AACxC;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,uEAAwB;AAC9C,0BAA0B,qEAAkB;AAC5C,qBAAqB,6DAAe;AACpC;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,2DAAa;AAClC,0BAA0B,qEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,2DAAa;AAClC,0BAA0B,qEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB;AACA,sBAAsB,iEAAkB;AACxC,0BAA0B,qEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB;AACA,0BAA0B,qEAAkB;AAC5C;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAK;AAClC;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAS,GAAG,8BAA8B;AAC1D,gBAAgB,qDAAS,GAAG,8BAA8B;AAC1D,gBAAgB,qDAAS,GAAG,8BAA8B;AAC1D,gBAAgB,qDAAS,GAAG,8BAA8B;AAC1D;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,6BAA6B,iCAAiC;AAC9D,6BAA6B,iCAAiC;AAC9D,6BAA6B,kCAAkC;AAC/D,6BAA6B,yBAAyB;AACtD,6BAA6B,2BAA2B;AACxD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA;AACA,6BAA6B,wBAAwB;AACrD,6BAA6B,wBAAwB;AACrD,6BAA6B,wBAAwB;AACrD,6BAA6B,wBAAwB;AACrD,6BAA6B,0BAA0B;AACvD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,+BAA+B,eAAe;AAC9C,+BAA+B,gBAAgB;AAC/C,+BAA+B,eAAe;AAC9C,+BAA+B,gBAAgB;AAC/C,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,8BAA8B,gBAAgB,IAAI,IAAI,gBAAgB,IAAI,eAAe,IAAI,gBAAgB;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,4BAA4B,iEAAsB;AAClD,gCAAgC,kEAAuB;AACvD,gCAAgC,kEAAuB;AACvD,gCAAgC,kEAAuB;AACvD;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,4BAA4B,iEAAsB,IAAI,cAAc;AACpE,8BAA8B,iEAAsB,IAAI,aAAa;AACrE,gCAAgC,kEAAuB,IAAI,cAAc;AACzE,8BAA8B,kEAAuB,IAAI,aAAa;AACtE,gCAAgC,kEAAuB,IAAI,cAAc;AACzE,8BAA8B,kEAAuB,IAAI,aAAa;AACtE,qCAAqC,kEAAuB,IAAI,6BAA6B,kEAAsB,EAAE;AACrH,sCAAsC,kEAAuB,IAAI,4BAA4B,mEAAuB,EAAE;AACtH;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,2BAA2B;AACvD,4BAA4B,iEAAsB,IAAI,cAAc;AACpE,8BAA8B,iEAAsB,IAAI,aAAa;AACrE;AACA;AACA;AACA,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;ACtnBtB;AACA;AACA;AACA;AACA;AACsD;AACnB;AACQ;AACN;AACa;AACK;AACvD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,sBAAsB,2EAA0B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gEAAyB;AAClD,IAAI,gEAAyB;AAC7B;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,sBAAsB,2EAA0B;AAChD;AACA;AACA;AACA;AACA,IAAI,gEAAyB;AAC7B;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,2BAA2B,+DAAc;AACzC,uBAAuB,gFAA+B;AACtD;AACA,2BAA2B,+DAAc;AACzC,uBAAuB,iFAAgC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,qBAAqB,+DAAc;AACnC,sBAAsB,2EAA0B;AAChD;AACA,iBAAiB,2EAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,qBAAqB,+DAAc;AACnC,sBAAsB,0EAAyB;AAC/C;AACA;AACA,iBAAiB,2EAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,qBAAqB,+DAAc;AACnC,sBAAsB,0EAAyB;AAC/C;AACA,iBAAiB,2EAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,qBAAqB,+DAAc;AACnC,sBAAsB,4EAA2B;AACjD;AACA,iBAAiB,2EAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,qBAAqB,+DAAc;AACnC,iBAAiB,qFAAoC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,yBAAyB,qEAAsB;AAC/C,yBAAyB,qEAAsB;AAC/C,qBAAqB,+DAAc;AACnC,iBAAiB,sFAAqC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,yBAAyB,iEAAkB;AAC3C,yBAAyB,iEAAkB;AAC3C,qBAAqB,+DAAc;AACnC,iBAAiB,gFAA+B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA,yBAAyB,qEAAsB;AAC/C,yBAAyB,qEAAsB;AAC/C,yBAAyB,8DAAe;AACxC,yBAAyB,8DAAe;AACxC,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC;AACA;AACA;AACA;AACA,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qEAAsB;AAC/C,yBAAyB,qEAAsB;AAC/C,yBAAyB,8DAAe;AACxC,yBAAyB,8DAAe;AACxC,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC;AACA;AACA;AACA;AACA;AACA,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,gFAA+B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qEAAsB;AAC/C,yBAAyB,qEAAsB;AAC/C,yBAAyB,8DAAe;AACxC,yBAAyB,8DAAe;AACxC,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC;AACA;AACA;AACA;AACA;AACA,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,gFAA+B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,6BAA6B,iEAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+DAAc;AAC1C,4BAA4B,+DAAc;AAC1C,6BAA6B,+DAAc;AAC3C,0BAA0B,+DAAc;AACxC,2BAA2B,+DAAc;AACzC,wBAAwB,2EAA0B;AAClD,wBAAwB,2EAA0B;AAClD,yBAAyB,4EAA2B;AACpD,uBAAuB,0EAAyB;AAChD;AACA;AACA,oCAAoC,cAAc;AAClD,qCAAqC,aAAa;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACU;;;;;;;;;;;;;;;;;ACtZ/B;AACA;AACA;AACA;AACA;AACA;AACsD;AACH;AACnD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2DAAY,GAAG,uBAAuB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA,6BAA6B,+DAA+D;AAC5F,kDAAkD,WAAW;AAC7D,kDAAkD,WAAW;AAC7D,gCAAgC,iDAAiD;AACjF,gCAAgC,iDAAiD;AACjF,gCAAgC,iDAAiD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,wEAAqB;AACQ;;;;;;;;;;;;;;;;;;AC3G7B;AACA;AACA;AACA;AACsD;AACrB;AACa;AAC9C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,8CAA8C;AACpE,sBAAsB,8CAA8C;AACpE,sBAAsB,4DAA4D;AAClF,sBAAsB,4DAA4D;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ,iDAAU,mBAAmB,uDAAgB,EAAE;AAC3E;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,0EAA0E;AAChG,sBAAsB,8CAA8C,6BAA6B,WAAW;AAC5G,sBAAsB,4DAA4D;AAClF;AACA,yBAAyB,4DAA4D;AACrF,wCAAwC,WAAW;AACnD,sBAAsB,8CAA8C,6BAA6B,WAAW;AAC5G,sBAAsB,0EAA0E;AAChG,sBAAsB,4DAA4D;AAClF;AACA,yBAAyB,4DAA4D;AACrF,wCAAwC,WAAW;AACnD;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa;AAChC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;AC7H1B;AACA;AACA;AACA;AACsD;AACjB;AACa;AACW;AAC7D;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA,wBAAwB,uEAAwB;AAChD;AACA;AACA;AACA,wBAAwB,iEAAkB;AAC1C;AACA;AACA,gBAAgB,yEAAyB;AACzC;AACA;AACA;AACA;AACA,wBAAwB,iEAAkB;AAC1C;AACA;AACA;AACA,wBAAwB,iEAAkB;AAC1C;AACA;AACA;AACA,wEAAqB;AACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvD9B;AACA;AACA;AACA;AACA;AACA;AACsD;AACP;AAC2B;AACvB;AAChB;AACF;AACE;AACU;AACF;AACY;AACZ;AACc;AACpB;AACQ;AACV;AACgB;AACX;AACS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC,oDAAoD,gDAAgD;AACpG,qEAAqE,gDAAgD;AACrH,kDAAkD,+CAA+C;AACjG,mDAAmD,gDAAgD;AACnG,kDAAkD,+CAA+C;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0EAAuB;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,kCAAkC,sDAAS;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kEAAe;AACrD;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sDAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAS,GAAG,uDAAuD;AAC5F;AACA;AACA,KAAK;AACL,4BAA4B,sDAAS,GAAG,kDAAkD;AAC1F,4BAA4B,sDAAS,GAAG,6CAA6C;AACrF,4BAA4B,sDAAS,GAAG,gDAAgD;AACxF;AACA;AACA,sBAAsB,sDAAe;AACrC;AACA;AACA,yBAAyB,iBAAiB;AAC1C,yBAAyB,eAAe;AACxC,2BAA2B,eAAe;AAC1C,+BAA+B,wBAAwB;AACvD,uCAAuC,wBAAwB;AAC/D,sCAAsC,wBAAwB;AAC9D,+BAA+B,mCAAmC;AAClE,sCAAsC,mCAAmC;AACzE,sCAAsC,mCAAmC;AACzE,2CAA2C,mCAAmC;AAC9E,kDAAkD,mCAAmC;AACrF,kDAAkD,mCAAmC;AACrF,oCAAoC,mCAAmC;AACvE,2CAA2C,mCAAmC;AAC9E,2CAA2C,mCAAmC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAS;AAClC;AACA;AACA,KAAK;AACL,4BAA4B,sDAAS,GAAG,kDAAkD;AAC1F,4BAA4B,sDAAS,GAAG,6CAA6C;AACrF,4BAA4B,sDAAS,GAAG,gDAAgD;AACxF;AACA;AACA,qBAAqB,sDAAS,GAAG,4CAA4C;AAC7E,0CAA0C,+CAAO;AACjD;AACA;AACA;AACA,gCAAgC,iDAAS;AACzC,gCAAgC,+CAAO;AACvC,kBAAkB,iDAAS;AAC3B,gCAAgC,iDAAS;AACzC,kBAAkB,iDAAS;AAC3B;AACA;AACA;AACA;AACA,yBAAyB,sDAAS,GAAG,4CAA4C;AACjF,kHAAkH,+CAAO;AACzH,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAO;AAC7B,qBAAqB,iDAAS;AAC9B;AACA;AACA,sBAAsB,iDAAS;AAC/B,qBAAqB,+CAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAS,GAAG,4CAA4C;AAC/E;AACA;AACA,uBAAuB,sDAAS,GAAG,kEAAkE;AACrG;AACA;AACA;AACA,0BAA0B,8CAAK,gBAAgB,8BAA8B;AAC7E;AACA;AACA,iDAAiD,2BAA2B;AAC5E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAS,GAAG,6CAA6C,+CAAO,iBAAiB;AACtG;AACA,0BAA0B,iDAAS;AACnC;AACA,0BAA0B,+CAAO;AACjC;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qBAAqB,sDAAS,GAAG,4CAA4C;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAS,GAAG,4CAA4C;AAC7E;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qBAAqB,sDAAS,GAAG,4CAA4C;AAC7E,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,+CAA+C;AACzD,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8CAA8C;AACxD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,+CAA+C;AACzD,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8BAA8B;AACxC;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA;AACA,UAAU,4DAA4D;AACtE,UAAU,0DAA0D;AACpE,UAAU,0DAA0D;AACpE,UAAU,0DAA0D;AACpE,UAAU,0DAA0D;AACpE,UAAU,2DAA2D;AACrE,UAAU,2DAA2D;AACrE,UAAU,0EAA0E,iDAAS,EAAE;AAC/F,UAAU,0EAA0E,iDAAS,EAAE;AAC/F,UAAU,0EAA0E,iDAAS,EAAE;AAC/F,UAAU,2EAA2E,iDAAS,EAAE;AAChG,UAAU,2EAA2E,iDAAS,EAAE;AAChG,UAAU,iCAAiC;AAC3C,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,8BAA8B;AACxC;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA,UAAU,4DAA4D;AACtE,UAAU,0DAA0D;AACpE,UAAU,4CAA4C;AACtD,UAAU,mDAAmD;AAC7D,UAAU,wEAAwE;AAClF,UAAU,kEAAkE;AAC5E,UAAU,6CAA6C;AACvD,UAAU,oDAAoD;AAC9D,UAAU,mEAAmE,iDAAS,EAAE;AACxF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,mEAAmE,iDAAS,EAAE;AACxF,UAAU,kFAAkF,iDAAS,EAAE;AACvG,UAAU,yFAAyF,iDAAS,EAAE;AAC9G;AACA;AACA;AACA,4BAA4B,iDAAS;AACrC,SAAS;AACT;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,+CAA+C;AACzD,UAAU,+DAA+D,iDAAS,EAAE;AACpF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,+DAA+D,iDAAS,EAAE;AACpF,UAAU,+CAA+C;AACzD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,+CAA+C;AACzD,UAAU,+DAA+D,iDAAS,EAAE;AACpF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,+DAA+D,iDAAS,EAAE;AACpF;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA,UAAU,iDAAiD,iDAAS,EAAE;AACtE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,gDAAgD,iDAAS,EAAE;AACrE,UAAU,gDAAgD,iDAAS,EAAE;AACrE,UAAU,gDAAgD,iDAAS,EAAE;AACrE,UAAU,iDAAiD,iDAAS,EAAE;AACtE,UAAU,iDAAiD,+CAAO,EAAE;AACpE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,gDAAgD,+CAAO,EAAE;AACnE,UAAU,gDAAgD,+CAAO,EAAE;AACnE,UAAU,gDAAgD,+CAAO,EAAE;AACnE,UAAU,iDAAiD,+CAAO,EAAE;AACpE;AACA,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,+CAA+C,+CAAO,EAAE;AAClE;AACA,kDAAkD,sDAAS;AAC3D,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E;AACA,yBAAyB,uDAAU;AACnC,0BAA0B,uDAAuD;AACjF,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E;AACA,yBAAyB,uDAAU;AACnC,oBAAoB,4EAA4E;AAChG,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E;AACA,yBAAyB,uDAAU;AACnC,wBAAwB,4EAA4E;AACpG,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA,mBAAmB,sDAAS,GAAG,4CAA4C;AAC3E,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC,mBAAmB,sDAAS,GAAG,sCAAsC;AACrE,YAAY,0DAAW;AACvB;AACA;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E;AACA,yBAAyB,uDAAU;AACnC,wBAAwB,4EAA4E;AACpG,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qBAAqB,sCAAsC;AAC3D;AACA;AACA;AACA;AACA,UAAU,8CAA8C,iDAAS,EAAE;AACnE,UAAU,8CAA8C,iDAAS,EAAE;AACnE;AACA,UAAU,8CAA8C,iDAAS,EAAE;AACnE;AACA,UAAU,8CAA8C,iDAAS,EAAE;AACnE,UAAU,8CAA8C,iDAAS,EAAE;AACnE;AACA,UAAU,8CAA8C,+CAAO,EAAE;AACjE,UAAU,8CAA8C,+CAAO,EAAE;AACjE;AACA,UAAU,8CAA8C,iDAAS,EAAE;AACnE,UAAU,qDAAqD,iDAAS,EAAE;AAC1E;AACA,UAAU,qDAAqD,iDAAS,EAAE;AAC1E;AACA,UAAU,qDAAqD,iDAAS,EAAE;AAC1E;AACA,+CAA+C,sDAAS;AACxD,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,gCAAgC;AAChC,qBAAqB,wCAAwC;AAC7D,mCAAmC,qBAAqB;AACxD,iCAAiC,sBAAsB;AACvD,iCAAiC,uBAAuB;AACxD,mCAAmC,4BAA4B;AAC/D,6BAA6B,4CAA4C;AACzE,qBAAqB,oCAAoC;AACzD,uCAAuC,gEAAgE;AACvG,iCAAiC,4CAA4C;AAC7E,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,gDAAgD,+CAAO,EAAE;AAC7E,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+BAA+B;AACnD,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,gDAAgD,+CAAO,EAAE;AAC7E;AACA,IAAI,wDAAkB,UAAU,WAAW;AAC3C,IAAI,wDAAkB,0BAA0B,WAAW;AAC3D;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,gDAAgD,iDAAS,EAAE;AAC/E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,gDAAgD,iDAAS,EAAE;AAC/E;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,gDAAgD,+CAAO,EAAE;AAC7E,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+BAA+B;AACnD,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,gDAAgD,+CAAO,EAAE;AAC7E;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD,IAAI,wDAAkB,mCAAmC,WAAW;AACpE,qBAAqB,2CAAI;AACzB;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,gDAAgD,iDAAS,EAAE;AAC/E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,gDAAgD,iDAAS,EAAE;AAC/E;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD,qBAAqB,2CAAI;AACzB;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2EAAwB;AACvC;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA;AACA,mEAAmE,YAAY;AAC/E;AACA;AACA,KAAK;AACL;AACA;AACA,gCAAgC,4BAA4B;AAC5D;AACA;AACA,KAAK;AACL,gCAAgC,4BAA4B;AAC5D;AACA;AACA,KAAK;AACL,gCAAgC,4BAA4B;AAC5D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,2EAAwB;AACvC;AACA;AACA,iCAAiC,iCAAiC;AAClE;AACA;AACA;AACA,uEAAuE,YAAY;AACnF;AACA;AACA,SAAS;AACT;AACA;AACA,6BAA6B,kCAAkC;AAC/D;AACA;AACA,SAAS;AACT,6BAA6B,kCAAkC;AAC/D;AACA;AACA,SAAS;AACT,6BAA6B,kCAAkC;AAC/D;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2EAAwB;AACvC;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA;AACA;AACA;AACA,mEAAmE,YAAY;AAC/E;AACA;AACA,KAAK;AACL;AACA;AACA,gCAAgC,4BAA4B;AAC5D;AACA;AACA;AACA;AACA,KAAK;AACL,gCAAgC,4BAA4B;AAC5D;AACA;AACA,KAAK;AACL,gCAAgC,4BAA4B;AAC5D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD,+BAA+B,mDAAmD;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,qBAAqB,mDAAmD;AACxE,yBAAyB,2DAAY;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,qBAAqB,mDAAmD;AACxE,yBAAyB,uDAAU,gDAAgD,0EAA6B;AAChH;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,mBAAmB,+DAAc;AACjC;AACA;AACA,qBAAqB,gEAAgE;AACrF,yBAAyB,uDAAU;AACnC,0BAA0B,iDAAM;AAChC,yBAAyB,uDAAU;AACnC,oCAAoC,kEAAsB;AAC1D,oCAAoC,kEAAsB;AAC1D,oCAAoC,mEAAuB;AAC3D,yBAAyB,4DAAY,kBAAkB,mEAAuB;AAC9E,IAAI,wDAAkB,WAAW,WAAW;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,gCAAgC,mDAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,yCAAyC,WAAW;AACpD,aAAa,eAAe;AAC5B,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;ACp8B1B;AACA;AACA;AACA;AACsD;AACnB;AACnC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,cAAc;AACzE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,0DAA0D,cAAc;AACxE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,2DAA2D,YAAY;AACvE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,+DAA+D,cAAc;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,+DAA+D,cAAc;AAC7E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,iEAAiE,cAAc;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,iEAAiE,cAAc;AAC/E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,qEAAqE,cAAc;AACnF;AACA;AACA;AACA;AACA;AACA,mBAAmB,WAAW,gDAAS,EAAE;AACzC,KAAK;AACL,CAAC;AACD,mEAAmE,cAAc;AACjF;AACA;AACA;AACA;AACA;AACA,mBAAmB,WAAW,8CAAO,EAAE;AACvC,KAAK;AACL,CAAC;AACD,wEAAqB;AACI;;;;;;;;;;;;;;;;;;;;;ACnHzB;AACA;AACA;AACA;AACsD;AACjB;AACM;AACN;AACa;AACV;AACxC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA,6EAA6E,mBAAmB;AAChG;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,iEAAkB;AAC3E,4FAA4F,cAAc;AAC1G;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE;AACA,oCAAoC,WAAW;AAC/C,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C;AACA,wBAAwB,gCAAgC;AACxD;AACA,wBAAwB,oEAAyB;AACjD;AACA,sCAAsC,+BAA+B;AACrE,sCAAsC,+BAA+B;AACrE,oCAAoC,WAAW;AAC/C;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,iEAAkB;AACzC,qFAAqF,YAAY;AACjG;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE;AACA,oCAAoC,WAAW;AAC/C,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C;AACA,wBAAwB,gCAAgC;AACxD;AACA;AACA;AACA,sCAAsC,+BAA+B;AACrE,oCAAoC,WAAW;AAC/C;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,8DAAe;AACtC;AACA;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE,4CAA4C,aAAa;AACzD;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,iEAAkB;AAC3E,qFAAqF,cAAc;AACnG;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE;AACA,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE;AACA,mCAAmC,gCAAgC;AACnE,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,mCAAmC,gCAAgC;AACnE,oCAAoC,WAAW;AAC/C;AACA,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,8DAAe;AACtC;AACA;AACA,KAAK;AACL;AACA,mCAAmC,gCAAgC;AACnE,mCAAmC,+BAA+B;AAClE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE;AACA,oCAAoC,WAAW;AAC/C,mCAAmC,gCAAgC;AACnE,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE;AACA,mCAAmC,gCAAgC;AACnE,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,mCAAmC,gCAAgC;AACnE,oCAAoC,WAAW;AAC/C;AACA,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,qFAAqF,YAAY;AACjG;AACA,0BAA0B,gDAAM;AAChC,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE;AACA,0BAA0B,gDAAM;AAChC,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C;AACA,0BAA0B,gDAAM;AAChC,mCAAmC,+BAA+B;AAClE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,+BAA+B;AAClE,sCAAsC,gCAAgC;AACtE;AACA,0BAA0B,gDAAM;AAChC,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE,qEAAqE,cAAc;AACnF;AACA,mCAAmC,+BAA+B;AAClE,sCAAsC,gCAAgC;AACtE,yCAAyC,WAAW;AACpD,wCAAwC,+BAA+B;AACvE;AACA,2CAA2C,+BAA+B;AAC1E;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,2BAA2B;AAC3B,sBAAsB,sDAAc,uBAAuB;AAC3D;AACA,sBAAsB,oFAAoF;AAC1G,sBAAsB,oFAAoF;AAC1G,sBAAsB,qFAAqF;AAC3G,sBAAsB,qFAAqF;AAC3G;AACA;AACA,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C;AACA,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C;AACA,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C;AACA,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C;AACA;AACA;AACA,qCAAqC,4DAAoB;AACzD;AACA;AACA;AACA,iBAAiB,0CAA0C;AAC3D;AACA,uBAAuB,iEAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,gBAAgB,aAAa;AAC7B,4BAA4B,YAAY,gBAAgB,8DAAe;AACvE;AACA,uCAAuC,KAAK;AAC5C;AACA;AACA;AACA,0CAA0C,+BAA+B;AACzE,0CAA0C,gCAAgC;AAC1E,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;ACtS7B;AACA;AACA;AACA;AACsD;AACK;AAC3D;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,2DAAmB;AAC5E,qFAAqF,YAAY;AACjG,+BAA+B,8CAAM;AACrC;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM;AACrC;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,2DAAmB;AAC1C,qFAAqF,YAAY;AACjG,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM;AACrC;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,YAAY;AAChD,oCAAoC,YAAY;AAChD,oCAAoC,YAAY;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,oBAAoB,gBAAgB,2DAAmB;AACpF,2FAA2F,YAAY;AACvG;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA;AACA,8CAA8C,gCAAgC;AAC9E;AACA,+BAA+B,8CAAM;AACrC;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,WAAW;AAC/C;AACA,+BAA+B,8CAAM;AACrC,6BAA6B,2BAA2B,sCAAsC;AAC9F,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,qFAAqF,YAAY;AACjG,+BAA+B,8CAAM;AACrC;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM;AACrC,qEAAqE,cAAc;AACnF,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,qFAAqF,YAAY;AACjG,+BAA+B,8CAAM,MAAM,mBAAmB;AAC9D,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM,MAAM,mBAAmB;AAC9D,+BAA+B,8CAAM;AACrC,qDAAqD,cAAc;AACnE,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA,kCAAkC,8CAAM,MAAM,mBAAmB;AACjE,kCAAkC,8CAAM;AACxC,kCAAkC,8CAAM,MAAM,mBAAmB;AACjE,kCAAkC,8CAAM;AACxC;AACA,oBAAoB,cAAc,iBAAiB,kBAAkB;AACrE,oBAAoB,cAAc,iBAAiB,kBAAkB;AACrE,oBAAoB,cAAc,iBAAiB,kBAAkB;AACrE,oBAAoB,cAAc,iBAAiB,kBAAkB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;;AAE1C;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,kBAAkB;AAC5B;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,8BAA8B,kDAAkD;;AAEhF;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,yDAAyD;AAC/E,sBAAsB,sEAAsE;AAC5F;AACA,yBAAyB,oFAAoF;AAC7G,wCAAwC,WAAW;AACnD,sBAAsB,sEAAsE;AAC5F;AACA,yBAAyB,oFAAoF;AAC7G,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA;AACA,oBAAoB,qCAAqC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,6BAA6B,4CAAI;AACjC;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,6BAA6B,4CAAI;AACjC;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kBAAkB,6DAAqB;AACvC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtXxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACP;AACI;AAChB;AACU;AACM;AACA;AACR;AACkB;AACrB;AACC;AACE;AACU;AACrD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,yEAAyE,kCAAkC;AAC3G;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,uBAAuB,2DAAY;AACnC;AACA;AACA;AACA,uCAAuC,2EAA2B,EAAE,uEAAsB;AAC1F;AACA;AACA;AACA,yBAAyB,+DAA+D;AACxF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA,yBAAyB,+DAA+D;AACxF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,yBAAyB,6BAA6B;AACtD;AACA,sBAAsB,gBAAgB,kBAAkB,uDAAU;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2DAAY;AACvC,2BAA2B,mDAAQ;AACnC,2BAA2B,uDAAU;AACrC,2BAA2B,2DAAY,eAAe,WAAW,iBAAiB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA,wCAAwC,kDAAO;AAC/C;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,6BAA6B,2CAAI;AACjC,8BAA8B,gDAAM,MAAM,mBAAmB;AAC7D;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;;;;;ACtHtB;AACA;AACA;AACA;AACsD;AACrB;AACE;AACY;AACF;AACR;AACI;AACE;AACM;AACD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,sDAAe;AACrC,mBAAmB,iDAAO,GAAG,cAAc,iBAAiB,kBAAkB;AAC9E;AACA,eAAe,iDAAO,GAAG,cAAc,iBAAiB,kBAAkB;AAC1E;AACA;AACA;AACA,qBAAqB,iDAAO;AAC5B;AACA,cAAc,iBAAiB;AAC/B,cAAc,iBAAiB;AAC/B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iDAAO;AAC5B;AACA,cAAc,iBAAiB;AAC/B,cAAc,iBAAiB;AAC/B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,qBAAqB,iDAAO;AAC5B;AACA,cAAc,iBAAiB;AAC/B,cAAc,iBAAiB;AAC/B;AACA;AACA,KAAK;AACL,4BAA4B,yDAAW;AACvC;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,mBAAmB;AACrC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,mBAAmB;AACrC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,4BAA4B,iDAAO;AACnC,gCAAgC,yDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,iDAAO;AACnC;AACA;AACA,KAAK;AACL,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,iDAAO;AACnC;AACA;AACA;AACA,KAAK;AACL,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,iDAAO;AACnC;AACA;AACA;AACA,KAAK;AACL,gBAAgB,sDAAe,MAAM,sDAAe;AACpD,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ,gBAAgB,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,iDAAO;AACnC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA,4CAA4C,iDAAO;AACnD,IAAI,wDAAkB;AACtB,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;;;;;;AC9dxB;AACA;AACA;AACA;AACsD;AACnB;AACU;AACJ;AACE;AACA;AACN;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA,QAAQ,qDAAS;AACjB;AACA,oBAAoB,mDAAQ;AAC5B;AACA;AACA;AACA;AACA,KAAK,EAAE,4DAAiB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B,aAAa;AACb;AACA;AACA,oCAAoC,iDAAO;AAC3C;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,kBAAkB,cAAc,kBAAkB,kBAAkB;AACpE,kBAAkB,cAAc,kBAAkB,kBAAkB;AACpE;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iEAAsB;AAC7C;AACA;AACA;AACA,uBAAuB,mEAAwB;AAC/C;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;AChJzB;AACA;AACA;AACA;AACsD;AACX;AAC3C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA,KAAK;AACL;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;;;;;;;AC1BzB;AACA;AACA;AACA;AACsD;AACP;AACZ;AACU;AACJ;AACE;AACJ;AACF;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oCAAoC,iDAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,yEAAsB;AACnD,sBAAsB,mDAAQ;AAC9B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA,QAAQ,qDAAS;AACjB;AACA,oBAAoB,+CAAM;AAC1B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B,4BAA4B,cAAc,iBAAiB,kBAAkB;AAC7E,4BAA4B,cAAc,iBAAiB,kBAAkB;AAC7E;AACA;AACA;AACA;AACA;AACA,uBAAuB,8DAAqB;AAC5C;AACA;AACA;AACA,uBAAuB,6DAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,kBAAkB,cAAc,kBAAkB,kBAAkB;AACpE,kBAAkB,cAAc,kBAAkB,kBAAkB;AACpE;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B,4BAA4B,cAAc,kBAAkB,kBAAkB,kBAAkB,uDAAU;AAC1G,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,QAAQ,qDAAS;AACjB;AACA,IAAI,8DAAqB;AACzB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI,6DAAoB;AACxB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;AC9LvB;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,wDAAwD,YAAY;AACpE,uCAAuC,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,wDAAwD,YAAY;AACpE,uCAAuC,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAA8D;AACtF,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;;;ACxG5B;AACA;AACA;AACA;AACsD;AACI;AACL;AACrD;AACA;AACA;AACA;AACA,oBAAoB,4EAAyB;AAC7C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,+BAA+B,6EAA6B;AAC5D;AACA;AACA;AACA;AACA,kCAAkC,qEAAqB;AACvD;AACA,uCAAuC,oEAAoB,GAAG,yCAAyC;AACvG;AACA;AACA,mCAAmC,oEAAoB,GAAG,uDAAuD;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAU;AAC9B;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA;AACA;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA,oBAAoB,sDAAe;AACnC;AACA,oBAAoB,sDAAe;AACnC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA,8BAA8B,oEAAoB;AAClD;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAU;AAC9B;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA;AACA;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA,oBAAoB,sDAAe;AACnC;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA,8BAA8B,oEAAoB;AAClD;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACS;;;;;;;;;;;;;;;;;;;;;;AC/I9B;AACA;AACA;AACA;AACsD;AACT;AACV;AACA;AACA;AACE;AACM;AAC3C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,gEAAgE;AACtF;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA;AACA,qBAAqB,6CAA6C,mBAAmB,wEAA6B;AAClH,qBAAqB,oCAAoC;AACzD,qBAAqB,8BAA8B,mBAAmB,uEAA4B;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,0DAA0D;AAChF,sBAAsB,0DAA0D;AAChF,sBAAsB,0DAA0D;AAChF,sBAAsB,yDAAyD;AAC/E,sBAAsB,yDAAyD;AAC/E,sBAAsB,yDAAyD;AAC/E,sBAAsB,wDAAwD;AAC9E;AACA;AACA,qBAAqB,2BAA2B,mBAAmB,wEAA6B;AAChG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B,mBAAmB,uEAA4B;AAC/F,qBAAqB,2BAA2B,mBAAmB,wEAA6B;AAChG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B,mBAAmB,uEAA4B;AAC/F,qBAAqB,2BAA2B,mBAAmB,wEAA6B;AAChG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B,mBAAmB,uEAA4B;AAC/F,qBAAqB,2BAA2B,mBAAmB,wEAA6B;AAChG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B,mBAAmB,uEAA4B;AAC/F,qBAAqB,0BAA0B,mBAAmB,uEAA4B;AAC9F;AACA;AACA,4CAA4C,uDAAgB;AAC5D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,yBAAyB,+DAA+D;AACxF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,+DAA+D;AACrF;AACA,yBAAyB,+DAA+D;AACxF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA;AACA,qBAAqB,MAAM,wDAAiB,0CAA0C;AACtF,qBAAqB,YAAY,yDAAkB,8CAA8C;AACjG,qBAAqB,6DAA6D;AAClF,qBAAqB,wBAAwB,4DAAqB,sCAAsC;AACxG,qBAAqB,0BAA0B,mEAA4B,uBAAuB;AAClG,qBAAqB,4CAA4C;AACjE;AACA,8CAA8C,wDAAiB;AAC/D;AACA;AACA;AACA,2BAA2B,QAAQ,iDAAU,YAAY;AACzD;AACA,kCAAkC,sEAA2B;AAC7D,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF;AACA;AACA,qBAAqB,+BAA+B,mBAAmB,wEAA6B;AACpG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B;AAChD,qBAAqB,wCAAwC;AAC7D,qBAAqB,wCAAwC;AAC7D,qBAAqB,+BAA+B;AACpD,qBAAqB,8BAA8B;AACnD;AACA,4DAA4D,wEAA6B;AACzF;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF;AACA;AACA,qBAAqB,+BAA+B;AACpD,qBAAqB,wCAAwC;AAC7D,qBAAqB,oCAAoC;AACzD,qBAAqB,qCAAqC;AAC1D,qBAAqB,wCAAwC;AAC7D,qBAAqB,0CAA0C;AAC/D,qBAAqB,gCAAgC;AACrD,qBAAqB,8BAA8B;AACnD,qBAAqB,0CAA0C,mBAAmB,wEAA6B;AAC/G;AACA,4DAA4D,wEAA6B;AACzF;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,qBAAqB,4BAA4B;AACjD,YAAY,qDAAS,GAAG,gBAAgB;AACxC,qBAAqB,4BAA4B;AACjD,YAAY,qDAAS,GAAG,eAAe;AACvC,YAAY,qDAAS,GAAG,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yBAAyB,4BAA4B;AACrD,yBAAyB,4BAA4B;AACrD,yBAAyB,2BAA2B;AACpD,yBAAyB,4BAA4B;AACrD,yBAAyB,4BAA4B;AACrD,yBAAyB,2BAA2B;AACpD,yBAAyB,4BAA4B;AACrD,SAAS,aAAa;AACtB;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,4BAA4B,sBAAsB,4DAAoB,EAAE;AACxE;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;AC/NzB;AACA;AACA;AACA;AAC8D;AAC3B;AACnC;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAAqB;AACjC,YAAY,4DAAqB;AACjC,YAAY,4DAAqB;AACjC,iBAAiB,yDAAM;AACvB;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,YAAY,2EAA2E,cAAc,0BAA0B,cAAc;AACvM,0DAA0D,+BAA+B;AACzF;AACA;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,CAAC;AACD;AACA;AACA;AACA,wFAAwF,YAAY,wFAAwF,cAAc,gCAAgC,cAAc;AACxP;AACA;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,gCAAgC;AACnE;AACA;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,CAAC;AACD;AACA;AACA;AACA,0EAA0E,YAAY,0CAA0C,cAAc,0BAA0B,cAAc;AACtL;AACA;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,0DAA0D,+BAA+B;AACzF,0DAA0D,+BAA+B;AACzF,CAAC;AACD;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA,iGAAiG,YAAY;AAC7G;AACA;AACA,aAAa;AACb,0BAA0B,2DAA2D;AACrF;AACA;AACA,6BAA6B,4DAAqB,uBAAuB,4DAAqB;AAC9F,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA,kFAAkF,YAAY,KAAK,aAAa;AAChH,oFAAoF,cAAc,KAAK,aAAa;AACpH,kFAAkF,cAAc,KAAK,aAAa;AAClH;AACA,6BAA6B,2DAA2D;AACxF,6BAA6B,iDAAiD;AAC9E,iBAAiB,aAAa;AAC9B;AACA,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA,oFAAoF,aAAa;AACjG,sFAAsF,aAAa;AACnG,oFAAoF,aAAa;AACjG,sCAAsC,2DAA2D,MAAM,aAAa;AACpH;AACA,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;;;;ACtJ5B;AACA;AACA;AACA;AACsD;AACnB;AACc;AACV;AACvC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA,sBAAsB,sDAAe;AACrC;AACA,YAAY,gDAAY;AACxB,YAAY,gDAAY;AACxB,YAAY,gDAAY;AACxB;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;;;;ACvC5B;AACA;AACA;AACA;AACsD;AACjB;AACkB;AACF;AACrD;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wBAAwB,6DAAa;AACrC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,kBAAkB;AACtE,oFAAoF,SAAS;AAC7F,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,IAAI,gEAAwB;AAC5B,QAAQ,+DAAc;AACtB,QAAQ,+DAAc;AACtB,QAAQ,+DAAc;AACtB;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,YAAY;AACxC;AACA,sBAAsB,8CAA8C;AACpE,wBAAwB,aAAa;AACrC,sBAAsB,4CAA4C;AAClE,sBAAsB,6CAA6C;AACnE,wBAAwB,WAAW;AACnC,sBAAsB,0DAA0D;AAChF,wBAAwB,aAAa;AACrC,sBAAsB,8CAA8C;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACS;;;;;;;;;;;;;;;;;;ACnJ9B;AACA;AACA;AACA;AACsD;AACR;AACL;AACzC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,kEAAmB;AAC5E,qDAAqD,YAAY;AACjE,8BAA8B,iDAAO;AACrC,8BAA8B,iDAAO;AACrC,8BAA8B,iDAAO;AACrC;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,kEAAmB;AAC1C,qDAAqD,cAAc;AACnE,8BAA8B,iDAAO;AACrC,8BAA8B,iDAAO;AACrC,8BAA8B,iDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,kEAAmB;AAC5E,qDAAqD,YAAY;AACjE,yBAAyB,iDAAO;AAChC;AACA;AACA,yBAAyB,iDAAO;AAChC;AACA;AACA,yBAAyB,iDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,kEAAmB;AAC1C,qDAAqD,cAAc;AACnE,yBAAyB,iDAAO;AAChC;AACA;AACA,yBAAyB,iDAAO;AAChC;AACA;AACA,yBAAyB,iDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;AClFxB;AACA;AACA;AACA;AACsD;AACf;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;;;;;ACtEvB;AACA;AACA;AACA;AACsD;AACrB;AACY;AACV;AACI;AACvC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,8CAAO;AAC1C,qCAAqC,gDAAS;AAC9C;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA,eAAe,0BAA0B;AACzC,eAAe,0BAA0B;AACzC;AACA;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,eAAe,0BAA0B;AACzC,eAAe,2BAA2B;AAC1C;AACA;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,UAAU,+DAAsB,EAAE;AACrD,KAAK;AACL;AACA;AACA,mBAAmB,UAAU,+DAAsB,EAAE;AACrD,KAAK;AACL;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,sBAAsB,+DAAsB;AAC5C;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,sBAAsB,+DAAsB;AAC5C;AACA,SAAS;AACT,KAAK;AACL;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,gCAAgC;AAC1C,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA,IAAI,wDAAkB,gBAAgB,WAAW;AACjD,sBAAsB,eAAe,IAAI,eAAe,IAAI,eAAe,IAAI,eAAe;AAC9F;AACA;AACA;AACA,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC,aAAa,6BAA6B;AAC1C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,kCAAkC;AAC5C,UAAU,mCAAmC;AAC7C,UAAU,kCAAkC;AAC5C,UAAU,kCAAkC;AAC5C,UAAU,mCAAmC;AAC7C,UAAU,mCAAmC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,kCAAkC;AAC5C,UAAU,mCAAmC;AAC7C,UAAU,kCAAkC;AAC5C,UAAU,kCAAkC;AAC5C,UAAU,mCAAmC;AAC7C,UAAU,mCAAmC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;;;;;;ACrdvB;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACD;AACR;AACQ;AACZ;AACuE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kBAAkB,qDAAS,GAAG,8BAA8B;AAC5D,cAAc,2DAAW;AACzB,cAAc,0DAAU;AACxB,iBAAiB,yDAAS;AAC1B,kBAAkB,iDAAO,GAAG,cAAc,iBAAiB,kBAAkB;AAC7E,cAAc,yDAAS;AACvB,iBAAiB,2DAAW;AAC5B,cAAc,sDAAM;AACpB,cAAc,+DAAe;AAC7B,cAAc,sDAAM;AACpB;AACA;AACA;AACA,oBAAoB,6DAAa;AACjC,cAAc,+DAAe;AAC7B;AACA;AACA;AACA;AACA;AACA,cAAc,+DAAe;AAC7B,iBAAiB,sDAAM;AACvB,cAAc,0DAAU;AACxB,cAAc,2DAAW;AACzB,cAAc,0DAAU;AACxB,iBAAiB,sDAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,sEAAsB;AACvD;AACA;AACA;AACA,6BAA6B,8DAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,sEAAsB;AACvD;AACA;AACA,6BAA6B,8DAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;ACvG1B;AACA;AACA;AACA;AACsD;AACf;AACvC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC,sCAAsC,4EAA4E;AAClH,uCAAuC,6EAA6E;AACpH;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,oCAAoC,+EAA+E;AACnH,qCAAqC,gFAAgF;AACrH,oCAAoC,cAAc;AAClD,qCAAqC,eAAe;AACpD,oCAAoC,cAAc;AAClD,qCAAqC,eAAe;AACpD,KAAK;AACL;AACA;AACA,IAAI,sDAAa;AACjB,eAAe,2EAAwB;AACvC;AACA,+BAA+B,0BAA0B;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sDAAa;AACjB,eAAe,2EAAwB;AACvC;AACA,+BAA+B,0BAA0B;AACzD;AACA;AACA,yBAAyB,wCAAwC;AACjE,yBAAyB,0CAA0C;AACnE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sDAAa;AACjB,eAAe,2EAAwB;AACvC;AACA,+BAA+B,0BAA0B;AACzD;AACA;AACA,wCAAwC,gCAAgC,MAAM,aAAa;AAC3F,qDAAqD,aAAa;AAClE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;;;;;AC7EvB;AACA;AACA;AACA;AAC6D;AAClB;AAC3C,eAAe,uDAAY;AAC3B;AACA;AACA;AACA,wBAAwB,yDAAiB;AACzC,IAAI,yDAAiB;AACrB;AACA;AACA,IAAI,yDAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAwB;AACrC;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAwB;AACrC;AACA;AACA;AACA;AACA;AACA,aAAa,6DAAqB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa,6DAAqB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAwB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,YAAY,kBAAkB;AAC5C;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,QAAQ,IAAI,UAAU;AACnE;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC,mBAAmB,+CAAO,GAAG,YAAY,qCAAqC;AAC9E;AACA;AACA;AACA;AACA;AACA,qEAAqE,yBAAyB,gCAAgC;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,yBAAyB,gCAAgC;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,sBAAsB,gCAAgC;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,sBAAsB,gCAAgC;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,uBAAuB,gCAAgC;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,SAAS;AAC7D,gCAAgC,2BAA2B,GAAG,WAAW,GAAG,SAAS,EAAE,SAAS;AAChG,0DAA0D;AAC1D;AACA,yEAAyE,oBAAoB;AAC7F;AACA;AACA;AACA;AACA,2BAA2B,wEAAwE;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,kBAAkB;AACnF;AACA,gEAAgE,UAAU,IAAI,cAAc;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,OAAO,EAAE,yBAAyB,GAAG,mBAAmB,GAAG,cAAc;AAC5G;AACA,kCAAkC;AAClC,0CAA0C,6DAAqB;AAC/D,+CAA+C,8DAAsB,GAAG,iEAAyB;AACjG;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwB;AACxB;AACA;AACA;AACA;AACO;AACP;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAS;;;;;;;;;;;;;;;;;ACjXT;AACA;AACA;AACA;AACA;AACA;AACsD;AAC+yB;AACr2B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iBAAiB,kDAAU;AAC3B,iBAAiB,kDAAU;AAC3B,iBAAiB,oDAAY;AAC7B,iBAAiB,+CAAO;AACxB,iBAAiB,+CAAO;AACxB,iBAAiB,4CAAI;AACrB,iBAAiB,4CAAI;AACrB,iBAAiB,mDAAW;AAC5B,iBAAiB,8DAAsB;AACvC,iBAAiB,mDAAW;AAC5B,iBAAiB,4CAAI;AACrB,iBAAiB,gDAAQ;AACzB,iBAAiB,iDAAS;AAC1B,iBAAiB,6CAAK;AACtB,iBAAiB,2CAAG;AACpB,iBAAiB,iDAAS;AAC1B,iBAAiB,+CAAO;AACxB,iBAAiB,+CAAO;AACxB,iBAAiB,uDAAe;AAChC,iBAAiB,4CAAI;AACrB,iBAAiB,iDAAS;AAC1B,yBAAyB,iDAAS;AAClC,iBAAiB,gDAAQ;AACzB,iBAAiB,sDAAc;AAC/B,iBAAiB,iDAAS;AAC1B,iBAAiB,6CAAK;AACtB,iBAAiB,iDAAS;AAC1B,iBAAiB,iDAAS;AAC1B,iBAAiB,sDAAc;AAC/B,iBAAiB,oDAAY;AAC7B,iBAAiB,kDAAU;AAC3B,iBAAiB,oDAAY;AAC7B,iBAAiB,kDAAU;AAC3B,iBAAiB,gDAAQ;AACzB,iBAAiB,uDAAe;AAChC,iBAAiB,wDAAgB;AACjC,iBAAiB,6CAAK;AACtB,iBAAiB,4CAAI;AACrB,iBAAiB,gDAAQ;AACzB,iBAAiB,oDAAY;AAC7B,iBAAiB,gDAAQ;AACzB,iBAAiB,8CAAM;AACvB,iBAAiB,oDAAY;AAC7B,iBAAiB,gDAAQ;AACzB,iBAAiB,gDAAQ;AACzB,iBAAiB,kDAAU;AAC3B,iBAAiB,kDAAU;AAC3B,iBAAiB,6CAAK;AACtB,oBAAoB,6CAAK;AACzB,iBAAiB,sDAAc;AAC/B,iBAAiB,oDAAY;AAC7B,iBAAiB,iDAAS;AAC1B,iBAAiB,qDAAa;AAC9B,iBAAiB,iDAAS;AAC1B,iBAAiB,kDAAU;AAC3B,iBAAiB,iDAAS;AAC1B,iBAAiB,gDAAQ;AACzB,iBAAiB,4CAAI;AACrB,iBAAiB,oDAAY;AAC7B,iBAAiB,8CAAM;AACvB,iBAAiB,8CAAM;AACvB,iBAAiB,+CAAO;AACxB,iBAAiB,gDAAQ;AACzB,iBAAiB,gDAAQ;AACzB,iBAAiB,8CAAM;AACvB,iBAAiB,mDAAW;AAC5B,iBAAiB,oDAAY;AAC7B,iBAAiB,qDAAa;AAC9B,iBAAiB,gDAAQ;AACzB,iBAAiB,mDAAW;AAC5B,iBAAiB,qDAAa;AAC9B,iBAAiB,mDAAW;AAC5B,iBAAiB,+CAAO;AACxB,iBAAiB,8CAAM;AACvB,iBAAiB,8CAAM;AACvB,iBAAiB,+CAAO;AACxB,iBAAiB,sDAAc;AAC/B,iBAAiB,6CAAK;AACtB,iBAAiB,6CAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,YAAY,wCAAwC;AACpD,iBAAiB,kDAAU;AAC3B,iBAAiB,kDAAU;AAC3B;AACA;AACA;AACA,qBAAqB,kDAAU;AAC/B;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;AC9HzB;AACA;AACA;AACA;AACsD;AAC2B;AACjF;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,oCAAoC,+CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,IAAI,+DAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,IAAI,+DAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAe,EAAE,yEAAsB;AACvD,sBAAsB,gDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,6BAA6B,4CAAI;AACjC,6BAA6B,4CAAI;AACjC,6BAA6B,+CAAO;AACpC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS;AACT,6BAA6B,4CAAI;AACjC,6BAA6B,+CAAO;AACpC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,IAAI,+DAAuB;AAC3B;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;AClGxB;AACA;AACA;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC,KAAK;AACL,CAAC;AACD,wEAAqB;AACU;;;;;;;;;;;;;;;;;;;;;;;ACnD/B;AACA;AACA;AACA;AACsD;AACnB;AACU;AACR;AACS;AACD;AACR;AACE;AACvC;AACA;AACA;AACA;AACA;AACA,QAAQ,wEAAqB;AAC7B,KAAK;AACL;AACA,kBAAkB,sDAAe;AACjC;AACA,iCAAiC,gDAAY;AAC7C;AACA;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK,sEAAsE,+DAAgB;AACjH;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,uDAAe;AACjE,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,qDAAS,GAAG,8BAA8B;AAChG;AACA,wEAAqB;AACC;;;;;;;UC3EtB;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACuC;AACI;AACR;AACuB;AACH;AACvD,sEAAiB;AACjB,wDAAiB;AACjB,mEAAa;AACb;AAC6B;AACE;AAC/B;AACA,iEAAe,8BAA8B,EAAE,uCAAM,GAAG,yCAAQ,CAAC,EAAC","sources":["webpack://Vex/webpack/universalModuleDefinition","webpack://Vex/./src/version.ts","webpack://Vex/./src/accidental.ts","webpack://Vex/./src/annotation.ts","webpack://Vex/./src/articulation.ts","webpack://Vex/./src/barnote.ts","webpack://Vex/./src/beam.ts","webpack://Vex/./src/bend.ts","webpack://Vex/./src/boundingbox.ts","webpack://Vex/./src/boundingboxcomputation.ts","webpack://Vex/./src/canvascontext.ts","webpack://Vex/./src/chordsymbol.ts","webpack://Vex/./src/clef.ts","webpack://Vex/./src/clefnote.ts","webpack://Vex/./src/crescendo.ts","webpack://Vex/./src/curve.ts","webpack://Vex/./src/dot.ts","webpack://Vex/./src/easyscore.ts","webpack://Vex/./src/element.ts","webpack://Vex/./src/factory.ts","webpack://Vex/./src/flow.ts","webpack://Vex/./src/font.ts","webpack://Vex/./src/fonts/bravura_glyphs.ts","webpack://Vex/./src/fonts/common_metrics.ts","webpack://Vex/./src/fonts/custom_glyphs.ts","webpack://Vex/./src/fonts/gonville_glyphs.ts","webpack://Vex/./src/fonts/leland_glyphs.ts","webpack://Vex/./src/fonts/load_all.ts","webpack://Vex/./src/fonts/load_bravura.ts","webpack://Vex/./src/fonts/load_custom.ts","webpack://Vex/./src/fonts/load_gonville.ts","webpack://Vex/./src/fonts/load_leland.ts","webpack://Vex/./src/fonts/load_petaluma.ts","webpack://Vex/./src/fonts/petaluma_glyphs.ts","webpack://Vex/./src/fonts/petalumascript_glyphs.ts","webpack://Vex/./src/fonts/robotoslab_glyphs.ts","webpack://Vex/./src/fonts/sans_bold_text_metrics.ts","webpack://Vex/./src/fonts/sans_text_metrics.ts","webpack://Vex/./src/fonts/serif_text_metrics.ts","webpack://Vex/./src/fonts/textfonts.ts","webpack://Vex/./src/formatter.ts","webpack://Vex/./src/fraction.ts","webpack://Vex/./src/frethandfinger.ts","webpack://Vex/./src/ghostnote.ts","webpack://Vex/./src/glyph.ts","webpack://Vex/./src/glyphnote.ts","webpack://Vex/./src/gracenote.ts","webpack://Vex/./src/gracenotegroup.ts","webpack://Vex/./src/gracetabnote.ts","webpack://Vex/./src/index.ts","webpack://Vex/./src/keymanager.ts","webpack://Vex/./src/keysignature.ts","webpack://Vex/./src/keysignote.ts","webpack://Vex/./src/modifier.ts","webpack://Vex/./src/modifiercontext.ts","webpack://Vex/./src/multimeasurerest.ts","webpack://Vex/./src/music.ts","webpack://Vex/./src/note.ts","webpack://Vex/./src/notehead.ts","webpack://Vex/./src/notesubgroup.ts","webpack://Vex/./src/ornament.ts","webpack://Vex/./src/parenthesis.ts","webpack://Vex/./src/parser.ts","webpack://Vex/./src/pedalmarking.ts","webpack://Vex/./src/registry.ts","webpack://Vex/./src/rendercontext.ts","webpack://Vex/./src/renderer.ts","webpack://Vex/./src/repeatnote.ts","webpack://Vex/./src/stave.ts","webpack://Vex/./src/stavebarline.ts","webpack://Vex/./src/staveconnector.ts","webpack://Vex/./src/stavehairpin.ts","webpack://Vex/./src/staveline.ts","webpack://Vex/./src/stavemodifier.ts","webpack://Vex/./src/stavenote.ts","webpack://Vex/./src/staverepetition.ts","webpack://Vex/./src/stavesection.ts","webpack://Vex/./src/stavetempo.ts","webpack://Vex/./src/stavetext.ts","webpack://Vex/./src/stavetie.ts","webpack://Vex/./src/stavevolta.ts","webpack://Vex/./src/stem.ts","webpack://Vex/./src/stemmablenote.ts","webpack://Vex/./src/stringnumber.ts","webpack://Vex/./src/strokes.ts","webpack://Vex/./src/svgcontext.ts","webpack://Vex/./src/system.ts","webpack://Vex/./src/tables.ts","webpack://Vex/./src/tabnote.ts","webpack://Vex/./src/tabslide.ts","webpack://Vex/./src/tabstave.ts","webpack://Vex/./src/tabtie.ts","webpack://Vex/./src/textbracket.ts","webpack://Vex/./src/textdynamics.ts","webpack://Vex/./src/textformatter.ts","webpack://Vex/./src/textnote.ts","webpack://Vex/./src/tickable.ts","webpack://Vex/./src/tickcontext.ts","webpack://Vex/./src/timesigglyph.ts","webpack://Vex/./src/timesignature.ts","webpack://Vex/./src/timesignote.ts","webpack://Vex/./src/tremolo.ts","webpack://Vex/./src/tuning.ts","webpack://Vex/./src/tuplet.ts","webpack://Vex/./src/typeguard.ts","webpack://Vex/./src/util.ts","webpack://Vex/./src/vex.ts","webpack://Vex/./src/vibrato.ts","webpack://Vex/./src/vibratobracket.ts","webpack://Vex/./src/voice.ts","webpack://Vex/./src/web.ts","webpack://Vex/./tests/accidental_tests.ts","webpack://Vex/./tests/annotation_tests.ts","webpack://Vex/./tests/articulation_tests.ts","webpack://Vex/./tests/auto_beam_formatting_tests.ts","webpack://Vex/./tests/bach_tests.ts","webpack://Vex/./tests/barline_tests.ts","webpack://Vex/./tests/beam_tests.ts","webpack://Vex/./tests/bend_tests.ts","webpack://Vex/./tests/boundingbox_tests.ts","webpack://Vex/./tests/chordsymbol_tests.ts","webpack://Vex/./tests/clef_tests.ts","webpack://Vex/./tests/crossbeam_tests.ts","webpack://Vex/./tests/curve_tests.ts","webpack://Vex/./tests/dot_tests.ts","webpack://Vex/./tests/easyscore_tests.ts","webpack://Vex/./tests/factory_tests.ts","webpack://Vex/./tests/font_tests.ts","webpack://Vex/./tests/formatter_tests.ts","webpack://Vex/./tests/fraction_tests.ts","webpack://Vex/./tests/ghostnote_tests.ts","webpack://Vex/./tests/glyphnote_tests.ts","webpack://Vex/./tests/gracenote_tests.ts","webpack://Vex/./tests/gracetabnote_tests.ts","webpack://Vex/./tests/index.ts","webpack://Vex/./tests/key_clef_tests.ts","webpack://Vex/./tests/keymanager_tests.ts","webpack://Vex/./tests/keysignature_tests.ts","webpack://Vex/./tests/mocks.ts","webpack://Vex/./tests/modifier_tests.ts","webpack://Vex/./tests/multimeasurerest_tests.ts","webpack://Vex/./tests/music_tests.ts","webpack://Vex/./tests/notehead_tests.ts","webpack://Vex/./tests/notesubgroup_tests.ts","webpack://Vex/./tests/offscreencanvas_tests.ts","webpack://Vex/./tests/ornament_tests.ts","webpack://Vex/./tests/parser_tests.ts","webpack://Vex/./tests/pedalmarking_tests.ts","webpack://Vex/./tests/percussion_tests.ts","webpack://Vex/./tests/registry_tests.ts","webpack://Vex/./tests/renderer_tests.ts","webpack://Vex/./tests/rests_tests.ts","webpack://Vex/./tests/rhythm_tests.ts","webpack://Vex/./tests/stave_tests.ts","webpack://Vex/./tests/staveconnector_tests.ts","webpack://Vex/./tests/stavehairpin_tests.ts","webpack://Vex/./tests/staveline_tests.ts","webpack://Vex/./tests/stavemodifier_tests.ts","webpack://Vex/./tests/stavenote_tests.ts","webpack://Vex/./tests/stavetie_tests.ts","webpack://Vex/./tests/stringnumber_tests.ts","webpack://Vex/./tests/strokes_tests.ts","webpack://Vex/./tests/style_tests.ts","webpack://Vex/./tests/tabnote_tests.ts","webpack://Vex/./tests/tabslide_tests.ts","webpack://Vex/./tests/tabstave_tests.ts","webpack://Vex/./tests/tabtie_tests.ts","webpack://Vex/./tests/textbracket_tests.ts","webpack://Vex/./tests/textformatter_tests.ts","webpack://Vex/./tests/textnote_tests.ts","webpack://Vex/./tests/threevoice_tests.ts","webpack://Vex/./tests/tickcontext_tests.ts","webpack://Vex/./tests/timesignature_tests.ts","webpack://Vex/./tests/tremolo_tests.ts","webpack://Vex/./tests/tuning_tests.ts","webpack://Vex/./tests/tuplet_tests.ts","webpack://Vex/./tests/typeguard_tests.ts","webpack://Vex/./tests/unison_tests.ts","webpack://Vex/./tests/vexflow_test_helpers.ts","webpack://Vex/./tests/vf_prefix_tests.ts","webpack://Vex/./tests/vibrato_tests.ts","webpack://Vex/./tests/vibratobracket_tests.ts","webpack://Vex/./tests/voice_tests.ts","webpack://Vex/webpack/bootstrap","webpack://Vex/webpack/runtime/define property getters","webpack://Vex/webpack/runtime/global","webpack://Vex/webpack/runtime/hasOwnProperty shorthand","webpack://Vex/webpack/runtime/make namespace object","webpack://Vex/./entry/vexflow-debug-with-tests.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","export const VERSION = '4.2.2';\nexport const ID = '7ad933bdf12b4137ce04d3f332a838887d08a595';\nexport const DATE = '2023-07-03T19:56:22.952Z';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.js statically bundles & preloads all of our music engraving fonts.\nimport { loadBravura } from './load_bravura';\nimport { loadCustom } from './load_custom';\nimport { loadGonville } from './load_gonville';\nimport { loadLeland } from './load_leland';\nimport { loadPetaluma } from './load_petaluma';\n// ADD_MUSIC_FONT\n// import { loadXXX } from './load_xxx';\n// Populate our font \"database\" with all our music fonts.\nexport function loadAllMusicFonts() {\n loadBravura();\n loadGonville();\n loadPetaluma();\n loadCustom();\n loadLeland();\n // ADD_MUSIC_FONT\n // loadXXX();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\nimport { Font } from '../font';\nimport { BravuraFont } from './bravura_glyphs';\nimport { CommonMetrics } from './common_metrics';\nexport function loadBravura() {\n Font.load('Bravura', BravuraFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { GonvilleSmuflFont } from './gonville_glyphs';\nexport function loadGonville() {\n Font.load('Gonville', GonvilleSmuflFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { LelandFont } from './leland_glyphs';\nexport function loadLeland() {\n Font.load('Leland', LelandFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { PetalumaFont } from './petaluma_glyphs';\nconst petalumaChordMetrics = {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n};\nexport function loadPetaluma() {\n const metrics = JSON.parse(JSON.stringify(CommonMetrics));\n const chordMetrics = metrics.chordSymbol;\n if (chordMetrics) {\n chordMetrics.glyphs = petalumaChordMetrics;\n }\n Font.load('Petaluma', PetalumaFont, metrics);\n}\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport * from './accidental';\nexport * from './annotation';\nexport * from './articulation';\nexport * from './barnote';\nexport * from './beam';\nexport * from './bend';\nexport * from './boundingbox';\nexport * from './boundingboxcomputation';\nexport * from './canvascontext';\nexport * from './chordsymbol';\nexport * from './clef';\nexport * from './clefnote';\nexport * from './crescendo';\nexport * from './curve';\nexport * from './dot';\nexport * from './easyscore';\nexport * from './element';\nexport * from './factory';\nexport * from './flow';\nexport * from './font';\n// Do not export './fonts/*' because they are used by the entry/* files.\nexport * from './formatter';\nexport * from './fraction';\nexport * from './frethandfinger';\nexport * from './ghostnote';\nexport * from './glyph';\nexport * from './glyphnote';\nexport * from './gracenote';\nexport * from './gracenotegroup';\nexport * from './gracetabnote';\nexport * from './keymanager';\nexport * from './keysignature';\nexport * from './keysignote';\nexport * from './modifier';\nexport * from './modifiercontext';\nexport * from './multimeasurerest';\nexport * from './music';\nexport * from './note';\nexport * from './notehead';\nexport * from './notesubgroup';\nexport * from './ornament';\nexport * from './parenthesis';\nexport * from './parser';\nexport * from './pedalmarking';\nexport * from './registry';\nexport * from './rendercontext';\nexport * from './renderer';\nexport * from './repeatnote';\nexport * from './stave';\nexport * from './stavebarline';\nexport * from './staveconnector';\nexport * from './stavehairpin';\nexport * from './staveline';\nexport * from './stavemodifier';\nexport * from './stavenote';\nexport * from './staverepetition';\nexport * from './stavesection';\nexport * from './stavetempo';\nexport * from './stavetext';\nexport * from './stavetie';\nexport * from './stavevolta';\nexport * from './stem';\nexport * from './stemmablenote';\nexport * from './stringnumber';\nexport * from './strokes';\nexport * from './svgcontext';\nexport * from './system';\n// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*.\nexport * from './tabnote';\nexport * from './tabslide';\nexport * from './tabstave';\nexport * from './tabtie';\nexport * from './textbracket';\nexport * from './textdynamics';\nexport * from './textformatter';\nexport * from './textnote';\nexport * from './tickable';\nexport * from './tickcontext';\nexport * from './timesigglyph';\nexport * from './timesignature';\nexport * from './timesignote';\nexport * from './tremolo';\nexport * from './tuning';\nexport * from './tuplet';\nexport * from './typeguard';\nexport * from './util';\n// Do not export './version'. It is accessible via Vex.Flow.BUILD.\nexport * from './vex';\nexport * from './vibrato';\nexport * from './vibratobracket';\nexport * from './voice';\nexport * from './web';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Accidental Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { ModifierContext } from '../src/modifiercontext';\nimport { Note } from '../src/note';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { TickContext } from '../src/tickcontext';\nimport { TimeSigNote } from '../src/timesignote';\nimport { isAccidental } from '../src/typeguard';\nimport { Voice } from '../src/voice';\nconst AccidentalTests = {\n Start() {\n QUnit.module('Accidental');\n QUnit.test('Automatic Accidentals - Simple Tests', autoAccidentalWorking);\n const run = VexFlowTests.runTests;\n run('Accidental Padding', formatAccidentalSpaces);\n run('Basic', basic);\n run('Stem Down', basicStemDown);\n run('Cautionary Accidental', cautionary);\n run('Accidental Arrangement Special Cases', specialCases);\n run('Multi Voice', multiVoice);\n run('Microtonal', microtonal);\n run('Microtonal (Iranian)', microtonal_iranian);\n run('Sagittal', sagittal);\n run('Automatic Accidentals', automaticAccidentals0);\n run('Automatic Accidentals - C major scale in Ab', automaticAccidentals1);\n run('Automatic Accidentals - No Accidentals Necessary', automaticAccidentals2);\n run('Automatic Accidentals - No Accidentals Necessary (EasyScore)', automaticAccidentals3);\n run('Automatic Accidentals - Multi Voice Inline', automaticAccidentalsMultiVoiceInline);\n run('Automatic Accidentals - Multi Voice Offset', automaticAccidentalsMultiVoiceOffset);\n run('Automatic Accidentals - Key C, Single Octave', automaticAccidentalsCornerCases1);\n run('Automatic Accidentals - Key C, Two Octaves', automaticAccidentalsCornerCases2);\n run('Automatic Accidentals - Key C#, Single Octave', automaticAccidentalsCornerCases3);\n run('Automatic Accidentals - Key C#, Two Octaves', automaticAccidentalsCornerCases4);\n run('Factory API', factoryAPI);\n },\n};\n// Check that at least one of the note's modifiers is an Accidental.\nfunction hasAccidental(note) {\n return note.getModifiers().some((modifier) => isAccidental(modifier));\n}\n// Return a convenience function for building accidentals from a string.\nfunction makeNewAccid(factory) {\n return (type) => factory.Accidental({ type });\n}\n/**\n *\n */\nfunction autoAccidentalWorking(assert) {\n const createStaveNote = (noteStruct) => new StaveNote(noteStruct);\n let notes = [\n { keys: ['bb/4'], duration: '4' },\n { keys: ['bb/4'], duration: '4' },\n { keys: ['g#/4'], duration: '4' },\n { keys: ['g/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['a#/4'], duration: '4' },\n { keys: ['g#/4'], duration: '4' },\n ].map(createStaveNote);\n let voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n // F Major (Bb)\n Accidental.applyAccidentals([voice], 'F');\n assert.equal(hasAccidental(notes[0]), false, 'No flat because of key signature');\n assert.equal(hasAccidental(notes[1]), false, 'No flat because of key signature');\n assert.equal(hasAccidental(notes[2]), true, 'Added a sharp');\n assert.equal(hasAccidental(notes[3]), true, 'Back to natural');\n assert.equal(hasAccidental(notes[4]), true, 'Back to natural');\n assert.equal(hasAccidental(notes[5]), false, 'Natural remembered');\n assert.equal(hasAccidental(notes[6]), true, 'Added sharp');\n assert.equal(hasAccidental(notes[7]), true, 'Added sharp');\n notes = [\n { keys: ['e#/4'], duration: '4' },\n { keys: ['cb/4'], duration: '4' },\n { keys: ['fb/4'], duration: '4' },\n { keys: ['b#/4'], duration: '4' },\n { keys: ['b#/4'], duration: '4' },\n { keys: ['cb/5'], duration: '4' },\n { keys: ['fb/5'], duration: '4' },\n { keys: ['e#/4'], duration: '4' },\n ].map(createStaveNote);\n voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n // A Major (F#,G#,C#)\n Accidental.applyAccidentals([voice], 'A');\n assert.equal(hasAccidental(notes[0]), true, 'Added sharp');\n assert.equal(hasAccidental(notes[1]), true, 'Added flat');\n assert.equal(hasAccidental(notes[2]), true, 'Added flat');\n assert.equal(hasAccidental(notes[3]), true, 'Added sharp');\n assert.equal(hasAccidental(notes[4]), false, 'Sharp remembered');\n assert.equal(hasAccidental(notes[5]), true, 'Added flat(different octave)');\n assert.equal(hasAccidental(notes[6]), true, 'Added flat(different octave)');\n assert.equal(hasAccidental(notes[7]), false, 'sharp remembered');\n notes = [\n { keys: ['c/4'], duration: '4' },\n { keys: ['cb/4'], duration: '4' },\n { keys: ['cb/4'], duration: '4' },\n { keys: ['c#/4'], duration: '4' },\n { keys: ['c#/4'], duration: '4' },\n { keys: ['cbb/4'], duration: '4' },\n { keys: ['cbb/4'], duration: '4' },\n { keys: ['c##/4'], duration: '4' },\n { keys: ['c##/4'], duration: '4' },\n { keys: ['c/4'], duration: '4' },\n { keys: ['c/4'], duration: '4' },\n ].map(createStaveNote);\n voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n // C Major (no sharps/flats)\n Accidental.applyAccidentals([voice], 'C');\n assert.equal(hasAccidental(notes[0]), false, 'No accidental');\n assert.equal(hasAccidental(notes[1]), true, 'Added flat');\n assert.equal(hasAccidental(notes[2]), false, 'Flat remembered');\n assert.equal(hasAccidental(notes[3]), true, 'Sharp added');\n assert.equal(hasAccidental(notes[4]), false, 'Sharp remembered');\n assert.equal(hasAccidental(notes[5]), true, 'Added doubled flat');\n assert.equal(hasAccidental(notes[6]), false, 'Double flat remembered');\n assert.equal(hasAccidental(notes[7]), true, 'Added double sharp');\n assert.equal(hasAccidental(notes[8]), false, 'Double sharp rememberd');\n assert.equal(hasAccidental(notes[9]), true, 'Added natural');\n assert.equal(hasAccidental(notes[10]), false, 'Natural remembered');\n}\n/**\n *\n */\nfunction formatAccidentalSpaces(options) {\n const f = VexFlowTests.makeFactory(options, 750, 280);\n const context = f.getContext();\n const softmaxFactor = 100;\n // Create the notes\n const notes = [\n new StaveNote({\n keys: ['e##/5'],\n duration: '8d',\n }).addModifier(new Accidental('##'), 0),\n new StaveNote({\n keys: ['b/4'],\n duration: '16',\n }).addModifier(new Accidental('b'), 0),\n new StaveNote({\n keys: ['f/3'],\n duration: '8',\n }),\n new StaveNote({\n keys: ['a/3'],\n duration: '16',\n }),\n new StaveNote({\n keys: ['e/4', 'g/4'],\n duration: '16',\n })\n .addModifier(new Accidental('bb'), 0)\n .addModifier(new Accidental('bb'), 1),\n new StaveNote({\n keys: ['d/4'],\n duration: '16',\n }),\n new StaveNote({\n keys: ['e/4', 'g/4'],\n duration: '16',\n })\n .addModifier(new Accidental('#'), 0)\n .addModifier(new Accidental('#'), 1),\n new StaveNote({\n keys: ['g/4'],\n duration: '32',\n }),\n new StaveNote({\n keys: ['a/4'],\n duration: '32',\n }),\n new StaveNote({\n keys: ['g/4'],\n duration: '16',\n }),\n new StaveNote({\n keys: ['d/4'],\n duration: 'q',\n }),\n ];\n Dot.buildAndAttach([notes[0]], { all: true });\n const beams = Beam.generateBeams(notes);\n const voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n });\n voice.addTickables(notes);\n const formatter = new Formatter({ softmaxFactor }).joinVoices([voice]);\n const width = formatter.preCalculateMinTotalWidth([voice]);\n const stave = new Stave(10, 40, width + 20);\n stave.setContext(context).draw();\n formatter.format([voice], width);\n voice.draw(context, stave);\n beams.forEach((b) => b.setContext(context).draw());\n notes.forEach((note) => Note.plotMetrics(context, note, 30));\n VexFlowTests.plotLegendForNoteWidth(context, 300, 150);\n options.assert.ok(true);\n}\nfunction basic(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n f.Stave({ x: 10, y: 10, width: 550 });\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' })\n .addModifier(accid('b'), 0)\n .addModifier(accid('#'), 1),\n // Notes keys out of alphabetic order\n f\n .StaveNote({ keys: ['e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5', 'd/4'], duration: '2' })\n .addModifier(accid('##'), 6)\n .addModifier(accid('n'), 0)\n .addModifier(accid('bb'), 1)\n .addModifier(accid('b'), 2)\n .addModifier(accid('#'), 3)\n .addModifier(accid('n'), 4)\n .addModifier(accid('bb'), 5),\n // Notes keys out of alphabetic order\n f\n .StaveNote({ keys: ['g/5', 'f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5'], duration: '16' })\n .addModifier(accid('n'), 1)\n .addModifier(accid('#'), 2)\n .addModifier(accid('#'), 3)\n .addModifier(accid('b'), 4)\n .addModifier(accid('bb'), 5)\n .addModifier(accid('##'), 6)\n .addModifier(accid('#'), 0),\n f\n .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('##').setAsCautionary(), 1)\n .addModifier(accid('#').setAsCautionary(), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb').setAsCautionary(), 4)\n .addModifier(accid('b').setAsCautionary(), 5),\n ];\n Formatter.SimpleFormat(notes, 10, { paddingBetween: 45 });\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140);\n options.assert.ok(true, 'Full Accidental');\n}\nfunction cautionary(options) {\n const staveCount = 12;\n const scale = 0.85;\n const staveWidth = 840;\n let i = 0;\n let j = 0;\n const f = VexFlowTests.makeFactory(options, staveWidth + 10, 175 * staveCount + 10);\n f.getContext().scale(scale, scale);\n const accids = Object.keys(Flow.accidentalMap).filter((accid) => accid !== '{' && accid !== '}');\n const mod = Math.round(accids.length / staveCount);\n for (i = 0; i < staveCount; ++i) {\n const stave = f.Stave({ x: 0, y: 10 + 200 * i, width: staveWidth / scale });\n const score = f.EasyScore();\n const rowMap = [];\n for (j = 0; j < mod && j + i * staveCount < accids.length; ++j) {\n rowMap.push(accids[j + i * staveCount]);\n }\n const notes = rowMap.map((accidType) => f\n .StaveNote({ keys: ['a/4'], duration: '4', stem_direction: Stem.UP })\n .addModifier(f.Accidental({ type: accidType }), 0));\n const voice = score.voice(notes, { time: rowMap.length + '/4' });\n voice.getTickables().forEach((tickable) => {\n tickable\n .getModifiers()\n .filter((modifier) => modifier.getAttribute('type') === Accidental.CATEGORY)\n .forEach((accid) => accid.setAsCautionary());\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n }\n options.assert.ok(true, 'Must successfully render cautionary accidentals');\n}\nfunction specialCases(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n f.Stave({ x: 10, y: 10, width: 550 });\n const notes = [\n f\n .StaveNote({ keys: ['f/4', 'd/5'], duration: '1' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('b'), 1),\n f\n .StaveNote({ keys: ['c/4', 'g/4'], duration: '2' })\n .addModifier(accid('##'), 0)\n .addModifier(accid('##'), 1),\n f\n .StaveNote({ keys: ['b/3', 'd/4', 'f/4'], duration: '16' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('#'), 1)\n .addModifier(accid('##'), 2),\n f\n .StaveNote({ keys: ['g/4', 'a/4', 'c/5', 'e/5'], duration: '16' })\n .addModifier(accid('b'), 0)\n .addModifier(accid('b'), 1)\n .addModifier(accid('n'), 3),\n f\n .StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4' })\n .addModifier(accid('b').setAsCautionary(), 0)\n .addModifier(accid('b').setAsCautionary(), 1)\n .addModifier(accid('bb'), 2)\n .addModifier(accid('b'), 3),\n f\n .StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5', 'g/5'], duration: '8' })\n .addModifier(accid('bb'), 0)\n .addModifier(accid('b').setAsCautionary(), 1)\n .addModifier(accid('n').setAsCautionary(), 2)\n .addModifier(accid('#'), 3)\n .addModifier(accid('n').setAsCautionary(), 4),\n ];\n Formatter.SimpleFormat(notes, 0, { paddingBetween: 20 });\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140);\n options.assert.ok(true, 'Full Accidental');\n}\nfunction basicStemDown(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n f.Stave({ x: 10, y: 10, width: 550 });\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w', stem_direction: -1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('#'), 1),\n f\n .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2', stem_direction: -1 })\n .addModifier(accid('##'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('bb'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('#'), 4)\n .addModifier(accid('n'), 5)\n .addModifier(accid('bb'), 6),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: -1 })\n .addModifier(accid('n'), 0)\n .addModifier(accid('#'), 1)\n .addModifier(accid('#'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb'), 4)\n .addModifier(accid('##'), 5)\n .addModifier(accid('#'), 6),\n ];\n Formatter.SimpleFormat(notes, 0, { paddingBetween: 30 });\n notes.forEach((note, noteIndex) => {\n Note.plotMetrics(f.getContext(), note, 140);\n options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + noteIndex + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, accidIndex) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + accidIndex + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140);\n options.assert.ok(true, 'Full Accidental');\n}\nfunction multiVoice(options) {\n // Helper function for visualizing\n function showNotes(note1, note2, stave, ctx, x) {\n const modifierContext = new ModifierContext();\n note1.addToModifierContext(modifierContext);\n note2.addToModifierContext(modifierContext);\n new TickContext().addTickable(note1).addTickable(note2).preFormat().setX(x);\n note1.setContext(ctx).draw();\n note2.setContext(ctx).draw();\n Note.plotMetrics(ctx, note1, 180);\n Note.plotMetrics(ctx, note2, 15);\n }\n const f = VexFlowTests.makeFactory(options, 460, 250);\n const accid = makeNewAccid(f);\n const stave = f.Stave({ x: 10, y: 45, width: 420 });\n const ctx = f.getContext();\n stave.draw();\n let note1 = f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('#'), 2)\n .setStave(stave);\n let note2 = f\n .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('bb'), 1)\n .addModifier(accid('##'), 2)\n .setStave(stave);\n showNotes(note1, note2, stave, ctx, 60);\n note1 = f\n .StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('#'), 2)\n .setStave(stave);\n note2 = f\n .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 })\n .addModifier(accid('b'), 0)\n .setStave(stave);\n showNotes(note1, note2, stave, ctx, 150);\n note1 = f\n .StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('#'), 2)\n .setStave(stave);\n note2 = f\n .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 })\n .addModifier(accid('b'), 0)\n .setStave(stave);\n showNotes(note1, note2, stave, ctx, 250);\n VexFlowTests.plotLegendForNoteWidth(ctx, 350, 150);\n options.assert.ok(true, 'Full Accidental');\n}\nfunction microtonal(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n const ctx = f.getContext();\n f.Stave({ x: 10, y: 10, width: 650 });\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' })\n .addModifier(accid('db'), 0)\n .addModifier(accid('d'), 1),\n f\n .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' })\n .addModifier(accid('bbs'), 0)\n .addModifier(accid('++'), 1)\n .addModifier(accid('+'), 2)\n .addModifier(accid('d'), 3)\n .addModifier(accid('db'), 4)\n .addModifier(accid('+'), 5)\n .addModifier(accid('##'), 6),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' })\n .addModifier(accid('++'), 0)\n .addModifier(accid('bbs'), 1)\n .addModifier(accid('+'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('db'), 4)\n .addModifier(accid('##'), 5)\n .addModifier(accid('#'), 6),\n f\n .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('db').setAsCautionary(), 1)\n .addModifier(accid('bbs').setAsCautionary(), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('++').setAsCautionary(), 4)\n .addModifier(accid('d').setAsCautionary(), 5),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'd/5', 'g/5'], duration: '16' })\n .addModifier(accid('++-'), 0)\n .addModifier(accid('+-'), 1)\n .addModifier(accid('bs'), 2)\n .addModifier(accid('bss'), 3)\n .addModifier(accid('afhf'), 4)\n .addModifier(accid('ashs'), 5),\n ];\n Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 });\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140);\n options.assert.ok(true, 'Microtonal Accidental');\n}\nfunction microtonal_iranian(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n const ctx = f.getContext();\n f.Stave({ x: 10, y: 10, width: 650 });\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' })\n .addModifier(accid('k'), 0)\n .addModifier(accid('o'), 1),\n f\n .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' })\n .addModifier(accid('b'), 0)\n .addModifier(accid('k'), 1)\n .addModifier(accid('n'), 2)\n .addModifier(accid('o'), 3)\n .addModifier(accid('#'), 4)\n .addModifier(accid('bb'), 5)\n .addModifier(accid('##'), 6),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' })\n .addModifier(accid('o'), 0)\n .addModifier(accid('k'), 1)\n .addModifier(accid('n'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb'), 4)\n .addModifier(accid('##'), 5)\n .addModifier(accid('#'), 6),\n f\n .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('o').setAsCautionary(), 1)\n .addModifier(accid('n').setAsCautionary(), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('k').setAsCautionary(), 4),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '16' })\n .addModifier(accid('k'), 0)\n .addModifier(accid('k'), 1)\n .addModifier(accid('k'), 2)\n .addModifier(accid('k'), 3),\n ];\n Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 });\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140);\n options.assert.ok(true, 'Microtonal Accidental (Iranian)');\n}\nfunction sagittal(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n const ctx = f.getContext();\n f.Stave({ x: 10, y: 10, width: 650 });\n const notes = [\n f\n .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' })\n .addModifier(accid('accSagittal11MediumDiesisUp'), 1)\n .addModifier(accid('accSagittal5CommaDown'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('accSagittal7CommaDown'), 3),\n f\n .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' })\n .addModifier(accid('accSagittal35LargeDiesisDown'), 2),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1),\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' })\n .addModifier(accid('b'), 1)\n .addModifier(accid('accSagittal7CommaDown'), 1)\n .addModifier(accid('accSagittal11LargeDiesisDown'), 3),\n f\n .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' })\n .addModifier(accid('accSagittal11MediumDiesisUp'), 1)\n .addModifier(accid('accSagittal5CommaDown'), 2)\n .addModifier(accid('accSagittalFlat7CDown'), 3),\n f\n .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' })\n .addModifier(accid('accSagittal35LargeDiesisDown'), 2),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1),\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' })\n .addModifier(accid('accSagittalFlat7CDown'), 1)\n .addModifier(accid('accSagittal11LargeDiesisDown'), 3),\n ];\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1],\n last_indices: [0, 1],\n });\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [3],\n last_indices: [3],\n options: {\n direction: Stem.DOWN,\n },\n });\n f.StaveTie({\n from: notes[4],\n to: notes[5],\n first_indices: [0, 1],\n last_indices: [0, 1],\n });\n f.StaveTie({\n from: notes[4],\n to: notes[5],\n first_indices: [3],\n last_indices: [3],\n options: {\n direction: Stem.DOWN,\n },\n });\n f.Beam({ notes: notes.slice(2, 4) });\n f.Beam({ notes: notes.slice(6, 8) });\n Formatter.SimpleFormat(notes);\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140);\n options.assert.ok(true, 'Sagittal');\n}\nfunction automaticAccidentals0(options) {\n const f = VexFlowTests.makeFactory(options, 700, 200);\n const stave = f.Stave();\n const notes = [\n { keys: ['c/4', 'c/5'], duration: '4' },\n { keys: ['c#/4', 'c#/5'], duration: '4' },\n { keys: ['c#/4', 'c#/5'], duration: '4' },\n { keys: ['c##/4', 'c##/5'], duration: '4' },\n { keys: ['c##/4', 'c##/5'], duration: '4' },\n { keys: ['c/4', 'c/5'], duration: '4' },\n { keys: ['cn/4', 'cn/5'], duration: '4' },\n { keys: ['cbb/4', 'cbb/5'], duration: '4' },\n { keys: ['cbb/4', 'cbb/5'], duration: '4' },\n { keys: ['cb/4', 'cb/5'], duration: '4' },\n { keys: ['cb/4', 'cb/5'], duration: '4' },\n { keys: ['c/4', 'c/5'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const gracenotes = [{ keys: ['d#/4'], duration: '16', slash: true }].map(f.GraceNote.bind(f));\n notes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0);\n const voice = f\n .Voice()\n .setMode(Voice.Mode.SOFT)\n .addTickable(new TimeSigNote('12/4').setStave(stave))\n .addTickables(notes);\n Accidental.applyAccidentals([voice], 'C');\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentals1(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('Ab');\n const notes = [\n { keys: ['c/4'], duration: '4' },\n { keys: ['d/4'], duration: '4' },\n { keys: ['e/4'], duration: '4' },\n { keys: ['f/4'], duration: '4' },\n { keys: ['g/4'], duration: '4' },\n { keys: ['a/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['c/5'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n Accidental.applyAccidentals([voice], 'Ab');\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentals2(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('A');\n const notes = [\n { keys: ['a/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['c#/5'], duration: '4' },\n { keys: ['d/5'], duration: '4' },\n { keys: ['e/5'], duration: '4' },\n { keys: ['f#/5'], duration: '4' },\n { keys: ['g#/5'], duration: '4' },\n { keys: ['a/5'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n Accidental.applyAccidentals([voice], 'A');\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentals3(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('A');\n const score = f.EasyScore();\n score.set({ time: '8/4' });\n const notes = score.notes('A4/q, B4/q, C#5/q, D5/q, E5/q,F#5/q, G#5/q, A5/q', { stem: 'UP' });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n Accidental.applyAccidentals([voice], 'A');\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentalsMultiVoiceInline(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('Ab');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['d/4'], duration: '4', stem_direction: -1 },\n { keys: ['e/4'], duration: '4', stem_direction: -1 },\n { keys: ['f/4'], duration: '4', stem_direction: -1 },\n { keys: ['g/4'], duration: '4', stem_direction: -1 },\n { keys: ['a/4'], duration: '4', stem_direction: -1 },\n { keys: ['b/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const notes1 = [\n { keys: ['c/5'], duration: '4' },\n { keys: ['d/5'], duration: '4' },\n { keys: ['e/5'], duration: '4' },\n { keys: ['f/5'], duration: '4' },\n { keys: ['g/5'], duration: '4' },\n { keys: ['a/5'], duration: '4' },\n { keys: ['b/5'], duration: '4' },\n { keys: ['c/6'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1);\n // Ab Major\n Accidental.applyAccidentals([voice0, voice1], 'Ab');\n options.assert.equal(hasAccidental(notes0[0]), false);\n options.assert.equal(hasAccidental(notes0[1]), true);\n options.assert.equal(hasAccidental(notes0[2]), true);\n options.assert.equal(hasAccidental(notes0[3]), false);\n options.assert.equal(hasAccidental(notes0[4]), false);\n options.assert.equal(hasAccidental(notes0[5]), true);\n options.assert.equal(hasAccidental(notes0[6]), true);\n options.assert.equal(hasAccidental(notes0[7]), false);\n options.assert.equal(hasAccidental(notes1[0]), false);\n options.assert.equal(hasAccidental(notes1[1]), true);\n options.assert.equal(hasAccidental(notes1[2]), true);\n options.assert.equal(hasAccidental(notes1[3]), false);\n options.assert.equal(hasAccidental(notes1[4]), false);\n options.assert.equal(hasAccidental(notes1[5]), true);\n options.assert.equal(hasAccidental(notes1[6]), true);\n options.assert.equal(hasAccidental(notes1[7]), false);\n new Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentalsMultiVoiceOffset(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('Cb');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['d/4'], duration: '4', stem_direction: -1 },\n { keys: ['e/4'], duration: '4', stem_direction: -1 },\n { keys: ['f/4'], duration: '4', stem_direction: -1 },\n { keys: ['g/4'], duration: '4', stem_direction: -1 },\n { keys: ['a/4'], duration: '4', stem_direction: -1 },\n { keys: ['b/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const notes1 = [\n { keys: ['c/5'], duration: '8' },\n { keys: ['c/5'], duration: '4' },\n { keys: ['d/5'], duration: '4' },\n { keys: ['e/5'], duration: '4' },\n { keys: ['f/5'], duration: '4' },\n { keys: ['g/5'], duration: '4' },\n { keys: ['a/5'], duration: '4' },\n { keys: ['b/5'], duration: '4' },\n { keys: ['c/6'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1);\n // Cb Major (All flats)\n Accidental.applyAccidentals([voice0, voice1], 'Cb');\n options.assert.equal(hasAccidental(notes0[0]), true);\n options.assert.equal(hasAccidental(notes0[1]), true);\n options.assert.equal(hasAccidental(notes0[2]), true);\n options.assert.equal(hasAccidental(notes0[3]), true);\n options.assert.equal(hasAccidental(notes0[4]), true);\n options.assert.equal(hasAccidental(notes0[5]), true);\n options.assert.equal(hasAccidental(notes0[6]), true);\n options.assert.equal(hasAccidental(notes0[7]), false, 'Natural Remembered');\n options.assert.equal(hasAccidental(notes1[0]), true);\n options.assert.equal(hasAccidental(notes1[1]), false);\n options.assert.equal(hasAccidental(notes1[2]), true);\n options.assert.equal(hasAccidental(notes1[3]), true);\n options.assert.equal(hasAccidental(notes1[4]), true);\n options.assert.equal(hasAccidental(notes1[5]), true);\n options.assert.equal(hasAccidental(notes1[6]), true);\n options.assert.equal(hasAccidental(notes1[7]), true);\n new Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentalsCornerCases1(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('C');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n Accidental.applyAccidentals([voice0], 'C');\n options.assert.equal(hasAccidental(notes0[0]), false);\n options.assert.equal(hasAccidental(notes0[1]), true);\n options.assert.equal(hasAccidental(notes0[2]), false);\n options.assert.equal(hasAccidental(notes0[3]), true);\n options.assert.equal(hasAccidental(notes0[4]), false);\n options.assert.equal(hasAccidental(notes0[5]), true);\n options.assert.equal(hasAccidental(notes0[6]), false);\n options.assert.equal(hasAccidental(notes0[7]), true);\n options.assert.equal(hasAccidental(notes0[8]), false);\n new Formatter().joinVoices([voice0]).formatToStave([voice0], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentalsCornerCases2(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('C');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/5'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/5'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n Accidental.applyAccidentals([voice0], 'C');\n options.assert.equal(hasAccidental(notes0[0]), false);\n options.assert.equal(hasAccidental(notes0[2]), true);\n options.assert.equal(hasAccidental(notes0[4]), false);\n options.assert.equal(hasAccidental(notes0[6]), true);\n options.assert.equal(hasAccidental(notes0[8]), false);\n options.assert.equal(hasAccidental(notes0[10]), true);\n options.assert.equal(hasAccidental(notes0[12]), false);\n options.assert.equal(hasAccidental(notes0[14]), true);\n options.assert.equal(hasAccidental(notes0[16]), false);\n options.assert.equal(hasAccidental(notes0[1]), false);\n options.assert.equal(hasAccidental(notes0[3]), true);\n options.assert.equal(hasAccidental(notes0[5]), false);\n options.assert.equal(hasAccidental(notes0[7]), true);\n options.assert.equal(hasAccidental(notes0[9]), false);\n options.assert.equal(hasAccidental(notes0[11]), true);\n options.assert.equal(hasAccidental(notes0[13]), false);\n options.assert.equal(hasAccidental(notes0[15]), true);\n options.assert.equal(hasAccidental(notes0[17]), false);\n new Formatter().joinVoices([voice0]).formatToStave([voice0], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentalsCornerCases3(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('C#');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n Accidental.applyAccidentals([voice0], 'C#');\n options.assert.equal(hasAccidental(notes0[0]), true);\n options.assert.equal(hasAccidental(notes0[1]), true);\n options.assert.equal(hasAccidental(notes0[2]), false);\n options.assert.equal(hasAccidental(notes0[3]), true);\n options.assert.equal(hasAccidental(notes0[4]), false);\n options.assert.equal(hasAccidental(notes0[5]), true);\n options.assert.equal(hasAccidental(notes0[6]), false);\n options.assert.equal(hasAccidental(notes0[7]), true);\n options.assert.equal(hasAccidental(notes0[8]), false);\n new Formatter().joinVoices([voice0]).formatToStave([voice0], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction automaticAccidentalsCornerCases4(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('C#');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/5'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/5'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n Accidental.applyAccidentals([voice0], 'C#');\n options.assert.equal(hasAccidental(notes0[0]), true);\n options.assert.equal(hasAccidental(notes0[2]), true);\n options.assert.equal(hasAccidental(notes0[4]), false);\n options.assert.equal(hasAccidental(notes0[6]), true);\n options.assert.equal(hasAccidental(notes0[8]), false);\n options.assert.equal(hasAccidental(notes0[10]), true);\n options.assert.equal(hasAccidental(notes0[12]), false);\n options.assert.equal(hasAccidental(notes0[14]), true);\n options.assert.equal(hasAccidental(notes0[16]), false);\n options.assert.equal(hasAccidental(notes0[1]), true);\n options.assert.equal(hasAccidental(notes0[3]), true);\n options.assert.equal(hasAccidental(notes0[5]), false);\n options.assert.equal(hasAccidental(notes0[7]), true);\n options.assert.equal(hasAccidental(notes0[9]), false);\n options.assert.equal(hasAccidental(notes0[11]), true);\n options.assert.equal(hasAccidental(notes0[13]), false);\n options.assert.equal(hasAccidental(notes0[15]), true);\n options.assert.equal(hasAccidental(notes0[17]), false);\n new Formatter().joinVoices([voice0]).formatToStave([voice0], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction factoryAPI(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n f.Stave({ x: 10, y: 10, width: 550 });\n const accid = makeNewAccid(f);\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' })\n .addModifier(accid('b'), 0)\n .addModifier(accid('#'), 1),\n f\n .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: 'h' })\n .addModifier(accid('##'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('bb'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('#'), 4)\n .addModifier(accid('n'), 5)\n .addModifier(accid('bb'), 6),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' })\n .addModifier(accid('n'), 0)\n .addModifier(accid('#'), 1)\n .addModifier(accid('#'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb'), 4)\n .addModifier(accid('##'), 5)\n .addModifier(accid('#'), 6),\n f\n .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: 'w' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('##').setAsCautionary(), 1)\n .addModifier(accid('#').setAsCautionary(), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb').setAsCautionary(), 4)\n .addModifier(accid('b').setAsCautionary(), 5),\n ];\n Formatter.SimpleFormat(notes);\n notes.forEach((n, i) => {\n options.assert.ok(n.getModifiersByType('Accidental').length > 0, 'Note ' + i + ' has accidentals');\n n.getModifiersByType('Accidental').forEach((accid, i) => {\n options.assert.ok(accid.getWidth() > 0, 'Accidental ' + i + ' has set width');\n });\n });\n f.draw();\n options.assert.ok(true, 'Factory API');\n}\nVexFlowTests.register(AccidentalTests);\nexport { AccidentalTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Annotation Tests\n// TODO: Formatter.FormatAndDraw(ctx, stave, notes, ???number???);\n// Did a previous version of the API accept a number as the fourth argument?\n// We removed the fourth argument from all of our test cases.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Annotation, AnnotationVerticalJustify } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Beam } from '../src/beam';\nimport { Bend } from '../src/bend';\nimport { Flow } from '../src/flow';\nimport { Font, FontStyle, FontWeight } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { ModifierPosition } from '../src/modifier';\nimport { Registry } from '../src/registry';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { Vibrato } from '../src/vibrato';\nimport { Voice } from '../src/voice';\nconst AnnotationTests = {\n Start() {\n QUnit.module('Annotation');\n const run = VexFlowTests.runTests;\n run('Placement', placement);\n run('Lyrics', lyrics);\n run('Simple Annotation', simple);\n run('Styled Annotation', styling);\n run('Standard Notation Annotation', standard);\n run('Harmonics', harmonic);\n run('Fingerpicking', picking);\n run('Bottom Annotation', bottom);\n run('Bottom Annotations with Beams', bottomWithBeam);\n run('Test Justification Annotation Stem Up', justificationStemUp);\n run('Test Justification Annotation Stem Down', justificationStemDown);\n run('TabNote Annotations', tabNotes);\n },\n};\nconst FONT_SIZE = VexFlowTests.Font.size;\n// Helper functions to create TabNote and StaveNote objects.\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\nconst staveNote = (noteStruct) => new StaveNote(noteStruct);\n/**\n * Show lyrics using Annotation objects.\n */\nfunction lyrics(options) {\n let fontSize = FONT_SIZE;\n let x = 10;\n let width = 170;\n let ratio = 1;\n const registry = new Registry();\n Registry.enableDefaultRegistry(registry);\n const f = VexFlowTests.makeFactory(options, 750, 260);\n // Add three groups of staves. Each time we increase the fontSize by 2.\n for (let i = 0; i < 3; ++i) {\n const score = f.EasyScore();\n score.set({ time: '3/4' });\n const system = f.System({ width, x });\n system.addStave({\n voices: [\n score.voice(score.notes('(C4 F4)/2[id=\"n0\"]').concat(score.beam(score.notes('(C4 A4)/8[id=\"n1\"], (C4 A4)/8[id=\"n2\"]')))),\n ],\n });\n // Add lyrics under the first row.\n ['hand,', 'and', 'me', 'pears', 'lead', 'the'].forEach((text, ix) => {\n const verse = Math.floor(ix / 3);\n const noteGroupID = 'n' + (ix % 3);\n const noteGroup = registry.getElementById(noteGroupID);\n const lyricsAnnotation = f.Annotation({ text }).setFont('Roboto Slab', fontSize);\n lyricsAnnotation.setPosition(ModifierPosition.BELOW);\n noteGroup.addModifier(lyricsAnnotation, verse);\n });\n // Second row doesn't have any lyrics.\n system.addStave({\n voices: [score.voice(score.notes('(F4 D5)/2').concat(score.beam(score.notes('(F4 F5)/8, (F4 F5)/8'))))],\n });\n f.draw();\n ratio = (fontSize + 2) / fontSize;\n width = width * ratio;\n x = x + width;\n fontSize = fontSize + 2;\n }\n options.assert.ok(true);\n}\nfunction simple(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial, sans-serif';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n }).addModifier(new Annotation('T'), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'h',\n }).addModifier(new Bend('Full').setTap('T'), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Simple Annotation');\n}\nfunction standard(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n const stave = new Stave(10, 10, 450).addClef('treble').setContext(ctx).draw();\n const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, 'normal', 'italic');\n const notes = [\n staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet'), 0),\n staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro'), 2),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Standard Notation Annotation');\n}\nfunction styling(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n const stave = new Stave(10, 10, 450).addClef('treble').setContext(ctx).draw();\n const annotation = (text, style) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, 'normal', 'italic').setStyle(style);\n const notes = [\n staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet', { fillStyle: '#0F0' }), 0),\n staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro', { fillStyle: '#00F' }), 2),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Standard Notation Annotation');\n}\nfunction harmonic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 12 },\n { str: 3, fret: 12 },\n ],\n duration: 'h',\n }).addModifier(new Annotation('Harm.'), 0),\n tabNote({\n positions: [{ str: 2, fret: 9 }],\n duration: 'h',\n })\n .addModifier(new Annotation('(8va)').setFont(Font.SERIF, FONT_SIZE, FontWeight.NORMAL, FontStyle.ITALIC), 0)\n .addModifier(new Annotation('A.H.'), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Simple Annotation');\n}\nfunction picking(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.setFont(Font.SANS_SERIF, FONT_SIZE);\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, FontWeight.NORMAL, FontStyle.ITALIC);\n const notes = [\n tabNote({\n positions: [\n { str: 1, fret: 0 },\n { str: 2, fret: 1 },\n { str: 3, fret: 2 },\n { str: 4, fret: 2 },\n { str: 5, fret: 0 },\n ],\n duration: 'h',\n }).addModifier(new Vibrato().setVibratoWidth(40), 0),\n tabNote({\n positions: [{ str: 6, fret: 9 }],\n duration: '8',\n }).addModifier(annotation('p').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n tabNote({\n positions: [{ str: 3, fret: 9 }],\n duration: '8',\n }).addModifier(annotation('i').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n tabNote({\n positions: [{ str: 2, fret: 9 }],\n duration: '8',\n }).addModifier(annotation('m').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n tabNote({\n positions: [{ str: 1, fret: 9 }],\n duration: '8',\n }).addModifier(annotation('a').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Fingerpicking');\n}\nfunction placement(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 750, 300);\n const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw();\n const annotation = (text, fontSize, vj) => new Annotation(text).setFont(Font.SERIF, fontSize).setVerticalJustification(vj);\n const notes = [\n staveNote({ keys: ['e/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['c/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(annotation('v1', 14, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 14, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('am').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(annotation('v1', 11, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 11, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(annotation('v1', 11, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(annotation('v1', 12, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 12, AnnotationVerticalJustify.BOTTOM), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(annotation('v1', 11, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0),\n staveNote({ keys: ['f/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('am').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0),\n staveNote({ keys: ['f/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0),\n staveNote({ keys: ['f/5'], duration: 'w' })\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(annotation('v1', 11, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 16, AnnotationVerticalJustify.BOTTOM), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, ' Annotation Placement');\n}\nfunction bottom(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n const stave = new Stave(10, 10, 300).addClef('treble').setContext(ctx).draw();\n const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE).setVerticalJustification(Annotation.VerticalJustify.BOTTOM);\n const notes = [\n staveNote({ keys: ['f/4'], duration: 'w' }).addModifier(annotation('F'), 0),\n staveNote({ keys: ['a/4'], duration: 'w' }).addModifier(annotation('A'), 0),\n staveNote({ keys: ['c/5'], duration: 'w' }).addModifier(annotation('C'), 0),\n staveNote({ keys: ['e/5'], duration: 'w' }).addModifier(annotation('E'), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Bottom Annotation');\n}\nfunction bottomWithBeam(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n const stave = new Stave(10, 10, 300).addClef('treble').setContext(ctx).draw();\n const notes = [\n new StaveNote({ keys: ['a/3'], duration: '8' }).addModifier(new Annotation('good').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)),\n new StaveNote({ keys: ['g/3'], duration: '8' }).addModifier(new Annotation('even').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)),\n new StaveNote({ keys: ['c/4'], duration: '8' }).addModifier(new Annotation('under').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)),\n new StaveNote({ keys: ['d/4'], duration: '8' }).addModifier(new Annotation('beam').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)),\n ];\n const beam = new Beam(notes.slice(1));\n Formatter.FormatAndDraw(ctx, stave, notes);\n beam.setContext(ctx).draw();\n options.assert.ok(true, 'Bottom Annotation with Beams');\n}\nfunction justificationStemUp(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 650, 950);\n ctx.scale(1.5, 1.5);\n const annotation = (text, hJustification, vJustification) => new Annotation(text)\n .setFont(Font.SANS_SERIF, FONT_SIZE)\n .setJustification(hJustification)\n .setVerticalJustification(vJustification);\n for (let v = 1; v <= 4; ++v) {\n const stave = new Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw();\n const notes = [\n staveNote({ keys: ['c/3'], duration: 'q' }).addModifier(annotation('Text', 1, v), 0),\n staveNote({ keys: ['c/4'], duration: 'q' }).addModifier(annotation('Text', 2, v), 0),\n staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q' }).addModifier(annotation('Text', 3, v), 0),\n staveNote({ keys: ['c/6'], duration: 'q' }).addModifier(annotation('Text', 4, v), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n options.assert.ok(true, 'Test Justification Annotation');\n}\nfunction justificationStemDown(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 650, 1000);\n ctx.scale(1.5, 1.5);\n const annotation = (text, hJustification, vJustification) => new Annotation(text)\n .setFont(Font.SANS_SERIF, FONT_SIZE)\n .setJustification(hJustification)\n .setVerticalJustification(vJustification);\n for (let v = 1; v <= 4; ++v) {\n const stave = new Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw();\n const notes = [\n staveNote({ keys: ['c/3'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 1, v), 0),\n staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 2, v), 0),\n staveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 3, v), 0),\n staveNote({ keys: ['c/6'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 4, v), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n options.assert.ok(true, 'Test Justification Annotation');\n}\nfunction tabNotes(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial, sans-serif';\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n },\n ];\n const notes1 = specs.map((noteSpec) => {\n const note = new TabNote(noteSpec);\n note.render_options.draw_stem = true;\n return note;\n });\n const notes2 = specs.map((noteSpec) => {\n const note = new TabNote(noteSpec);\n note.render_options.draw_stem = true;\n note.setStemDirection(-1);\n return note;\n });\n const notes3 = specs.map((noteSpec) => new TabNote(noteSpec));\n notes1[0].addModifier(new Annotation('Text').setJustification(1).setVerticalJustification(1)); // U\n notes1[1].addModifier(new Annotation('Text').setJustification(2).setVerticalJustification(2)); // D\n notes1[2].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(3)); // U\n notes1[3].addModifier(new Annotation('Text').setJustification(4).setVerticalJustification(4)); // D\n notes2[0].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(1)); // U\n notes2[1].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(2)); // D\n notes2[2].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(3)); // U\n notes2[3].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(4)); // D\n notes3[0].addModifier(new Annotation('Text').setVerticalJustification(1)); // U\n notes3[1].addModifier(new Annotation('Text').setVerticalJustification(2)); // D\n notes3[2].addModifier(new Annotation('Text').setVerticalJustification(3)); // U\n notes3[3].addModifier(new Annotation('Text').setVerticalJustification(4)); // D\n const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.SOFT);\n voice.addTickables(notes1);\n voice.addTickables(notes2);\n voice.addTickables(notes3);\n // Alternatively, you could add all the notes in one big array with spread syntax.\n // voice.addTickables([...notes1, ...notes2, ...notes3]);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave });\n voice.draw(ctx, stave);\n options.assert.ok(true, 'TabNotes successfully drawn');\n}\nVexFlowTests.register(AnnotationTests);\nexport { AnnotationTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Articulation Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Articulation } from '../src/articulation';\nimport { Beam } from '../src/beam';\nimport { Flow } from '../src/flow';\nimport { Font } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { ModifierPosition } from '../src/modifier';\nimport { Stave } from '../src/stave';\nimport { Barline } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { Voice } from '../src/voice';\nconst ArticulationTests = {\n Start() {\n QUnit.module('Articulation');\n const run = VexFlowTests.runTests;\n run('Articulation - Vertical Placement', verticalPlacement);\n run('Articulation - Vertical Placement (Glyph codes)', verticalPlacement2);\n run('Articulation - Staccato/Staccatissimo', drawArticulations, { sym1: 'a.', sym2: 'av' });\n run('Articulation - Accent/Tenuto', drawArticulations, { sym1: 'a>', sym2: 'a-' });\n run('Articulation - Marcato/L.H. Pizzicato', drawArticulations, { sym1: 'a^', sym2: 'a+' });\n run('Articulation - Snap Pizzicato/Fermata', drawArticulations, { sym1: 'ao', sym2: 'ao' });\n run('Articulation - Up-stroke/Down-Stroke', drawArticulations, { sym1: 'a|', sym2: 'am' });\n run('Articulation - Fermata Above/Below', drawFermata, { sym1: 'a@a', sym2: 'a@u' });\n run('Articulation - Fermata Short Above/Below', drawFermata, { sym1: 'a@as', sym2: 'a@us' });\n run('Articulation - Fermata Long Above/Below', drawFermata, { sym1: 'a@al', sym2: 'a@ul' });\n run('Articulation - Fermata Very Long Above/Below', drawFermata, { sym1: 'a@avl', sym2: 'a@uvl' });\n run('Articulation - Inline/Multiple', drawArticulations2, { sym1: 'a.', sym2: 'a.' });\n run('TabNote Articulation', tabNotes, { sym1: 'a.', sym2: 'a.' });\n },\n};\n// Helper function for creating StaveNotes.\nfunction drawArticulations(options) {\n const sym1 = options.params.sym1;\n const sym2 = options.params.sym2;\n const width = 125 - Stave.defaultPadding;\n const f = VexFlowTests.makeFactory(options, 675, 195);\n const ctx = f.getContext();\n options.assert.expect(0);\n let x = 10;\n const y = 30;\n const score = f.EasyScore();\n const formatAndDrawToWidth = (x, y, width, notes, barline) => {\n const voices = [score.voice(notes, { time: '4/4' })];\n const formatter = f.Formatter();\n voices.forEach((v) => formatter.joinVoices([v]));\n const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width);\n formatter.format(voices, nwidth);\n const stave = f\n .Stave({ x, y, width: nwidth + Stave.defaultPadding })\n .setEndBarType(barline)\n .setContext(ctx)\n .draw();\n voices.forEach((voice) => voice.draw(ctx, stave));\n return stave.getWidth();\n };\n // bar 1\n const notesBar1 = [\n f.StaveNote({ keys: ['a/3'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }),\n ];\n notesBar1[0].addModifier(new Articulation(sym1).setPosition(4), 0);\n notesBar1[1].addModifier(new Articulation(sym1).setPosition(4), 0);\n notesBar1[2].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar1[3].addModifier(new Articulation(sym1).setPosition(3), 0);\n // Helper function to justify and draw a 4/4 voice\n x += formatAndDrawToWidth(x, y, width, notesBar1, Barline.type.NONE);\n // bar 2 - juxtaposing second bar next to first bar\n const notesBar2 = [\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n ];\n notesBar2[0].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar2[1].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar2[2].addModifier(new Articulation(sym1).setPosition(4), 0);\n notesBar2[3].addModifier(new Articulation(sym1).setPosition(4), 0);\n // Helper function to justify and draw a 4/4 voice\n x += formatAndDrawToWidth(x, y, width, notesBar2, Barline.type.DOUBLE);\n // bar 3 - juxtaposing second bar next to first bar\n const notesBar3 = [\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }),\n ];\n notesBar3[0].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar3[1].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar3[2].addModifier(new Articulation(sym2).setPosition(3), 0);\n notesBar3[3].addModifier(new Articulation(sym2).setPosition(3), 0);\n // Helper function to justify and draw a 4/4 voice\n x += formatAndDrawToWidth(x, y, width, notesBar3, Barline.type.NONE);\n // bar 4 - juxtaposing second bar next to first bar\n const notesBar4 = [\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n ];\n notesBar4[0].addModifier(new Articulation(sym2).setPosition(3), 0);\n notesBar4[1].addModifier(new Articulation(sym2).setPosition(3), 0);\n notesBar4[2].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar4[3].addModifier(new Articulation(sym2).setPosition(4), 0);\n // Helper function to justify and draw a 4/4 voice\n formatAndDrawToWidth(x, y, width, notesBar4, Barline.type.END);\n}\nfunction drawFermata(options) {\n const sym1 = options.params.sym1;\n const sym2 = options.params.sym2;\n const f = VexFlowTests.makeFactory(options, 400, 195);\n const ctx = f.getContext();\n const score = f.EasyScore();\n const width = 150 - Stave.defaultPadding;\n let x = 50;\n const y = 30;\n const formatAndDrawToWidth = (x, y, width, notes, barline) => {\n const voices = [score.voice(notes, { time: '4/4' })];\n const formatter = f.Formatter();\n voices.forEach((v) => formatter.joinVoices([v]));\n const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width);\n formatter.format(voices, nwidth);\n const stave = f\n .Stave({ x, y, width: nwidth + Stave.defaultPadding })\n .setEndBarType(barline)\n .setContext(ctx)\n .draw();\n voices.forEach((voice) => voice.draw(ctx, stave));\n return stave.getWidth();\n };\n options.assert.expect(0);\n const notesBar1 = [\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }),\n ];\n notesBar1[0].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar1[1].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar1[2].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar1[3].addModifier(new Articulation(sym2).setPosition(4), 0);\n x += formatAndDrawToWidth(x, y, width, notesBar1, Barline.type.NONE);\n // bar 2 - juxtaposing second bar next to first bar\n const notesBar2 = [\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n ];\n notesBar2[0].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar2[1].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar2[2].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar2[3].addModifier(new Articulation(sym2).setPosition(4), 0);\n // Helper function to justify and draw a 4/4 voice\n formatAndDrawToWidth(x, y, width, notesBar2, Barline.type.DOUBLE);\n}\nfunction verticalPlacement(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 750, 300);\n const staveNote = (noteStruct) => new StaveNote(noteStruct);\n const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw();\n const notes = [\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['c/5'], duration: 'q' })\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['c/5'], duration: 'q' })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, ' Annotation Placement');\n}\nfunction verticalPlacement2(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 750, 300);\n const staveNote = (noteStruct) => new StaveNote(noteStruct);\n const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw();\n const notes = [\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(new Articulation('fermataBelow'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0),\n staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('fermataShortBelow'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0),\n staveNote({ keys: ['c/5'], duration: 'q' })\n .addModifier(new Articulation('fermataLongBelow'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0),\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0)\n .addModifier(new Articulation('fermataVeryShortBelow'), 0),\n staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0)\n .addModifier(new Articulation('fermataVeryLongBelow'), 0),\n staveNote({ keys: ['c/5'], duration: 'q' })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW).setBetweenLines(), 0)\n .addModifier(new Articulation('articTenutoBelow').setBetweenLines(), 0)\n .addModifier(new Articulation('fermataBelow'), 0),\n staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('fermataAbove'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('fermataShortAbove'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('fermataLongAbove'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0),\n staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0)\n .addModifier(new Articulation('fermataVeryShortAbove'), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0)\n .addModifier(new Articulation('fermataVeryLongAbove'), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE).setBetweenLines(), 0)\n .addModifier(new Articulation('articTenutoAbove').setBetweenLines(), 0)\n .addModifier(new Articulation('fermataAbove'), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, ' Annotation Placement (Glyph codes)');\n}\nfunction drawArticulations2(options) {\n options.assert.expect(0);\n const scale = 0.8;\n const f = VexFlowTests.makeFactory(options, 1500, 195);\n // Get the rendering context\n const ctx = f.getContext();\n ctx.scale(scale, scale);\n // bar 1\n const stave1 = new Stave(10, 50, 500).setContext(ctx).draw();\n const notesBar1 = [\n f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['b/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/6'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/6'], duration: '16', stem_direction: -1 }),\n ];\n let i;\n for (i = 0; i < 16; i++) {\n notesBar1[i].addModifier(new Articulation('a.').setPosition(4), 0);\n notesBar1[i].addModifier(new Articulation('a>').setPosition(4), 0);\n if (i === 15) {\n notesBar1[i].addModifier(new Articulation('a@u').setPosition(4), 0);\n }\n }\n const beam1 = new Beam(notesBar1.slice(0, 8));\n const beam2 = new Beam(notesBar1.slice(8, 16));\n Formatter.FormatAndDraw(ctx, stave1, notesBar1);\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n // bar 2 - juxtaposing second bar next to first bar\n const stave2 = new Stave(510, 50, 500).setContext(ctx).draw();\n const notesBar2 = [\n f.StaveNote({ keys: ['f/3'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['g/3'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/3'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['b/3'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }),\n ];\n for (i = 0; i < 16; i++) {\n notesBar2[i].addModifier(new Articulation('a-').setPosition(3), 0);\n notesBar2[i].addModifier(new Articulation('a^').setPosition(3), 0);\n if (i === 15) {\n notesBar2[i].addModifier(new Articulation('a@u').setPosition(4), 0);\n }\n }\n const beam3 = new Beam(notesBar2.slice(0, 8));\n const beam4 = new Beam(notesBar2.slice(8, 16));\n Formatter.FormatAndDraw(ctx, stave2, notesBar2);\n beam3.setContext(ctx).draw();\n beam4.setContext(ctx).draw();\n // bar 3 - juxtaposing second bar next to first bar\n const stave3 = new Stave(1010, 50, 100).setContext(ctx).draw();\n const notesBar3 = [f.StaveNote({ keys: ['c/4'], duration: 'w', stem_direction: 1 })];\n notesBar3[0].addModifier(new Articulation('a-').setPosition(3), 0);\n notesBar3[0].addModifier(new Articulation('a>').setPosition(3), 0);\n notesBar3[0].addModifier(new Articulation('a@a').setPosition(3), 0);\n Formatter.FormatAndDraw(ctx, stave3, notesBar3);\n // bar 4 - juxtaposing second bar next to first bar\n const stave4 = new Stave(1110, 50, 250).setContext(ctx).draw();\n const notesBar4 = [\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n ];\n for (i = 0; i < 4; i++) {\n let position1 = 3;\n if (i > 1) {\n position1 = 4;\n }\n notesBar4[i].addModifier(new Articulation('a-').setPosition(position1), 0);\n }\n Formatter.FormatAndDraw(ctx, stave4, notesBar4);\n}\nfunction tabNotes(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt ' + Font.SANS_SERIF;\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n },\n ];\n const notes1 = specs.map((noteSpec) => {\n const tabNote = new TabNote(noteSpec);\n tabNote.render_options.draw_stem = true;\n return tabNote;\n });\n const notes2 = specs.map((noteSpec) => {\n const tabNote = new TabNote(noteSpec);\n tabNote.render_options.draw_stem = true;\n tabNote.setStemDirection(-1);\n return tabNote;\n });\n const notes3 = specs.map((noteSpec) => new TabNote(noteSpec));\n notes1[0].addModifier(new Articulation('a>').setPosition(3), 0); // U\n notes1[1].addModifier(new Articulation('a>').setPosition(4), 0); // D\n notes1[2].addModifier(new Articulation('a.').setPosition(3), 0); // U\n notes1[3].addModifier(new Articulation('a.').setPosition(4), 0); // D\n notes2[0].addModifier(new Articulation('a>').setPosition(3), 0);\n notes2[1].addModifier(new Articulation('a>').setPosition(4), 0);\n notes2[2].addModifier(new Articulation('a.').setPosition(3), 0);\n notes2[3].addModifier(new Articulation('a.').setPosition(4), 0);\n notes3[0].addModifier(new Articulation('a>').setPosition(3), 0);\n notes3[1].addModifier(new Articulation('a>').setPosition(4), 0);\n notes3[2].addModifier(new Articulation('a.').setPosition(3), 0);\n notes3[3].addModifier(new Articulation('a.').setPosition(4), 0);\n const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.SOFT);\n voice.addTickables(notes1);\n voice.addTickables(notes2);\n voice.addTickables(notes3);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok(true, 'TabNotes successfully drawn');\n}\nVexFlowTests.register(ArticulationTests);\nexport { ArticulationTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Auto Beaming Tests\n// TODO: Beam.generateBeams(voice.getTickables() as StemmableNote[], ...) requires a cast to StemmableNote[].\n// Is there a cleaner way to handle this?\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { Beam } from '../src/beam';\nimport { Fraction } from '../src/fraction';\nimport { Stave } from '../src/stave';\nimport { Stem } from '../src/stem';\nconst AutoBeamFormattingTests = {\n Start() {\n QUnit.module('Auto-Beaming');\n const run = VexFlowTests.runTests;\n run('Simple Auto Beaming', simpleAuto);\n run('Auto Beaming With Overflow Group', simpleAutoWithOverflowGroup);\n run('Even Group Stem Directions', evenGroupStemDirections);\n run('Odd Group Stem Directions', oddGroupStemDirections);\n run('Odd Beam Groups Auto Beaming', oddBeamGroups);\n run('More Simple Auto Beaming 0', moreSimple0);\n run('More Simple Auto Beaming 1', moreSimple1);\n run('Beam Across All Rests', beamAcrossAllRests);\n run('Beam Across All Rests with Stemlets', beamAcrossAllRestsWithStemlets);\n run('Break Beams on Middle Rests Only', beamAcrossMiddleRests);\n run('Break Beams on Rest', breakBeamsOnRests);\n run('Maintain Stem Directions', maintainStemDirections);\n run('Maintain Stem Directions - Beam Over Rests', maintainStemDirectionsBeamAcrossRests);\n run('Beat group with unbeamable note - 2/2', groupWithUnbeamableNote);\n run('Offset beat grouping - 6/8 ', groupWithUnbeamableNote1);\n run('Odd Time - Guessing Default Beam Groups', autoOddBeamGroups);\n run('Custom Beam Groups', customBeamGroups);\n run('Simple Tuplet Auto Beaming', simpleTuplets);\n run('More Simple Tuplet Auto Beaming', moreSimpleTuplets);\n run('More Automatic Beaming', moreBeaming);\n run('Automatic Beaming 4/4 with 3, 3, 2 Pattern', beamingWithSeveralGroups1);\n run('Automatic Beaming 4/4 with 3, 3, 2 Pattern and Overflow', beamingWithSeveralGroupsOverflow);\n run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 2 Overflows', beamingWithSeveralGroupsOverflow2);\n run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 3 Overflows', beamingWithSeveralGroupsOverflow3);\n run('Duration-Based Secondary Beam Breaks', secondaryBreaks1);\n run('Duration-Based Secondary Beam Breaks 2', secondaryBreaks2);\n run('Flat Beams Up', flatBeamsUp);\n run('Flat Beams Down', flatBeamsDown);\n run('Flat Beams Mixed Direction', flatBeamsMixed);\n run('Flat Beams Up (uniform)', flatBeamsUpUniform);\n run('Flat Beams Down (uniform)', flatBeamsDownUniform);\n run('Flat Beams Up Bounds', flatBeamsUpBounds);\n run('Flat Beams Down Bounds', flatBeamsDownBounds);\n },\n};\nfunction simpleAuto(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('f5/8, e5, d5, c5/16, c5, d5/8, e5, f5, f5/32, f5, f5, f5'), { time: '4/4' });\n // Takes a voice and returns its auto beams.\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beaming Applicator Test');\n}\nfunction simpleAutoWithOverflowGroup(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n // Add a . after a note (e.g., f5/4.) to make it a dotted note.\n const voice = score.voice(score.notes('f5/4., e5/8, d5/8, d5/16, c5/16, c5/16, c5/16, f5/16, f5/32, f5/32'), {\n time: '4/4',\n });\n // Takes a voice and returns its auto beams.\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beaming Applicator Test');\n}\nfunction evenGroupStemDirections(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('a4/8, b4, g4, c5, f4, d5, e4, e5, b4, b4, g4, d5'), { time: '6/4' });\n // Takes a voice and returns its auto beams.\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.equal(beams[0].getStemDirection(), Stem.UP);\n options.assert.equal(beams[1].getStemDirection(), Stem.UP);\n options.assert.equal(beams[2].getStemDirection(), Stem.UP);\n options.assert.equal(beams[3].getStemDirection(), Stem.UP);\n options.assert.equal(beams[4].getStemDirection(), Stem.DOWN);\n options.assert.equal(beams[5].getStemDirection(), Stem.DOWN);\n options.assert.ok(true, 'Auto Beaming Applicator Test');\n}\nfunction oddGroupStemDirections(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('g4/8, b4, d5, c5, f4, d5, e4, g5, g4, b4, g4, d5, a4, c5, a4'), {\n time: '15/8',\n });\n const groups = [new Fraction(3, 8)];\n const beams = Beam.applyAndGetBeams(voice, undefined, groups);\n options.assert.equal(beams[0].getStemDirection(), Stem.DOWN, 'Notes are equidistant from middle line');\n options.assert.equal(beams[1].getStemDirection(), Stem.DOWN);\n options.assert.equal(beams[2].getStemDirection(), Stem.UP);\n options.assert.equal(beams[3].getStemDirection(), Stem.DOWN, 'Notes are equidistant from middle line');\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beaming Applicator Test');\n}\nfunction oddBeamGroups(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('f5, e5, d5, c5, c5, d5, e5, f5, f5, f4, f3, f5/16, f5'), { time: '6/4' });\n const groups = [new Fraction(2, 8), new Fraction(3, 8), new Fraction(1, 8)];\n // Takes a voice and returns its auto beams.\n const beams = Beam.applyAndGetBeams(voice, undefined, groups);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction moreSimple0(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/8, g4, c5, g5, a5, c4, d4, a5'), { time: '4/4' });\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction moreSimple1(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction breakBeamsOnRests(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: false,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamAcrossAllRestsWithStemlets(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: true,\n show_stemlets: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamAcrossAllRests(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamAcrossMiddleRests(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: true,\n beam_middle_only: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction maintainStemDirections(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave();\n const score = f.EasyScore();\n // EasyScore.notes(line, ...) ignores whitespace in the line string.\n const voice = score.voice(score.notes([\n 'b4/16, b4, b4[stem=\"down\"], b4/r',\n 'b4/r, b4[stem=\"down\"], b4, b4',\n 'b4[stem=\"down\"], b4[stem=\"down\"], b4, b4/r',\n 'b4/32, b4[stem=\"down\"], b4[stem=\"down\"], b4, b4/16/r, b4',\n ].join(', '), { stem: 'up' }), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: false,\n maintain_stem_directions: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction maintainStemDirectionsBeamAcrossRests(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes([\n 'b4/16, b4, b4[stem=\"down\"], b4/r',\n 'b4/r, b4[stem=\"down\"], b4, b4',\n 'b4[stem=\"down\"], b4[stem=\"down\"], b4, b4/r',\n 'b4/32, b4[stem=\"down\"], b4[stem=\"down\"], b4, b4/16/r, b4',\n ].join(', '), { stem: 'up' }), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: true,\n maintain_stem_directions: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction groupWithUnbeamableNote(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave().addTimeSignature('2/4');\n const score = f.EasyScore();\n const voice = score.voice(score.notes('b4/16, b4, b4/4, b4/16, b4'), { time: '2/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n groups: [new Fraction(2, 2)],\n beam_rests: false,\n maintain_stem_directions: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction groupWithUnbeamableNote1(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave().addTimeSignature('6/8');\n const score = f.EasyScore();\n const voice = score.voice(score.notes('b4/4, b4/4, b4/8, b4/8'), { time: '6/8' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n groups: [new Fraction(3, 8)],\n beam_rests: false,\n maintain_stem_directions: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction autoOddBeamGroups(options) {\n const f = VexFlowTests.makeFactory(options, 450, 400);\n const score = f.EasyScore();\n const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4');\n const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' });\n const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8');\n const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' });\n const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16');\n const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), {\n time: '13/16',\n });\n // Flatten the arrays into a single Beam[].\n const beams = [\n ...Beam.applyAndGetBeams(voice1, undefined, Beam.getDefaultBeamGroups('5/4')),\n ...Beam.applyAndGetBeams(voice2, undefined, Beam.getDefaultBeamGroups('5/8')),\n ...Beam.applyAndGetBeams(voice3, undefined, Beam.getDefaultBeamGroups('13/16')),\n ];\n f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3);\n Stave.formatBegModifiers([stave1, stave2, stave3]);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction customBeamGroups(options) {\n const f = VexFlowTests.makeFactory(options, 450, 400);\n const score = f.EasyScore();\n const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4');\n const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' });\n const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8');\n const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' });\n const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16');\n const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { time: '13/16' });\n const group1 = [new Fraction(5, 8)];\n const group2 = [new Fraction(3, 8), new Fraction(2, 8)];\n const group3 = [new Fraction(7, 16), new Fraction(2, 16), new Fraction(4, 16)];\n // Flatten the three Beam[] into a single Beam[].\n // Alternatively, you can use .reduce(concat) flatten arrays, where concat is defined as (a, b) => a.concat(b).\n const beams = [\n ...Beam.applyAndGetBeams(voice1, undefined, group1),\n ...Beam.applyAndGetBeams(voice2, undefined, group2),\n ...Beam.applyAndGetBeams(voice3, undefined, group3),\n ];\n f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3);\n Stave.formatBegModifiers([stave1, stave2, stave3]);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\n/**\n * Helper function which uses Function.prototype.bind() to create shortcut methods.\n * This can improve the readability of large blocks of EasyScore code.\n */\nfunction createShortcuts(score) {\n return {\n notes: score.notes.bind(score),\n tuplet: score.tuplet.bind(score),\n };\n}\nfunction simpleTuplets(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n ...tuplet(notes('c4/8, g4, c5')),\n ...notes('g5/8, a5'),\n ...tuplet(notes('a5/16, (c5 e5), a5, d5, a5'), { ratioed: false, notes_occupied: 4 }),\n ], { time: '3/4' });\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction moreSimpleTuplets(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([...tuplet(notes('d4/4, g4, c5')), ...notes('g5/16, a5, a5, (c5 e5)')], { time: '3/4' });\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction moreBeaming(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/8, g4/4, c5/8., g5/16, a5/4, a5/16, (c5 e5)/16, a5/8'), { time: '9/8' });\n const beams = Beam.applyAndGetBeams(voice, undefined, Beam.getDefaultBeamGroups('9/8'));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamingWithSeveralGroups1(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/8, g4/4, c5/8, g5, a5, a5, f5'), { time: '4/4' });\n const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(3, 8), new Fraction(2, 8)]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamingWithSeveralGroupsOverflow(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/8, g4/4., c5/8, g5, a5, a5'), { time: '4/4' });\n const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(3, 8), new Fraction(2, 8)]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamingWithSeveralGroupsOverflow2(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/16, g4/2, f4/16, c5/8, a4/16, c4/16, g4/8, b4, c5, g5, f5, e5, c5, a4/4'), {\n time: '8/4',\n });\n const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(2, 8), new Fraction(3, 8)]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamingWithSeveralGroupsOverflow3(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/16, g4/1, f4/16, c5/8, g5, f5, e5, c5, a4/4'), { time: '8/4' });\n const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(2, 8), new Fraction(3, 8)]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Auto Beam Applicator Test');\n}\nfunction secondaryBreaks1(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes([\n 'f5/32, f5, f5, f5, f5/16., f5/32',\n 'f5/16, f5/8, f5/16',\n 'f5/32, f5/16., f5., f5/32',\n 'f5/16., f5/32, f5, f5/16.',\n ].join(',')));\n const beams = Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Duration-Based Secondary Breaks Test');\n}\nfunction secondaryBreaks2(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n tuplet(notes('e5/16, f5, f5')),\n tuplet(notes('f5/16, f5, c5')),\n notes('a4/16., f4/32'),\n tuplet(notes('d4/16, d4, d4')),\n tuplet(notes('a5/8, (e5 g5), a5')),\n tuplet(notes('f5/16, f5, f5')),\n tuplet(notes('f5/16, f5, a4')),\n ].reduce(concat));\n const beams = Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Duration-Based Secondary Breaks Test');\n}\nfunction flatBeamsUp(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n tuplet(notes('c4/8, g4, f5')),\n notes('d5/8'),\n tuplet(notes('c5/16, (c4 e4 g4), f4')),\n notes('d5/8, e5, c4, f5/32, f5, f5, f5'),\n ].reduce(concat));\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n stem_direction: 1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Up Test');\n}\nfunction flatBeamsDown(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, g5, a6/32, a6, a6, g4/64, g4'));\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n stem_direction: -1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Down Test');\n}\nfunction flatBeamsMixed(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/64, d5, e5, c5, f5, c5, a5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, c4, a4/32, a4, a4, g4/64, g4'));\n const beams = Beam.generateBeams(voice.getTickables(), { flat_beams: true });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Mixed Direction Test');\n}\nfunction flatBeamsUpUniform(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n ...tuplet(notes('c4/8, g4, g5')),\n ...notes('d5/8, c5/16, (c4 e4 g4), d5/8, e5, c4, f5/32, f5, f5, f5'),\n ]);\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n flat_beam_offset: 50,\n stem_direction: 1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Up (uniform) Test');\n}\nfunction flatBeamsDownUniform(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (e4 g4 b4)/16, e5, d5/8, e5/8, g5/8, a6/32, a6, a6, g4/64, g4'));\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n flat_beam_offset: 155,\n stem_direction: -1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Down (uniform) Test');\n}\nfunction flatBeamsUpBounds(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n ...tuplet(notes('c4/8, g4/8, g5/8')),\n ...notes('d5/8, c5/16, (c4 e4 g4)/16, d5/8, e5/8, c4/8, f5/32, f5/32, f5/32, f5/32'),\n ]);\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n flat_beam_offset: 60,\n stem_direction: 1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Up (uniform) Test');\n}\nfunction flatBeamsDownBounds(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes([\n 'g5/8, a6/32, a6/32, a6/32, g4/64, g4/64',\n 'c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, a5/8',\n 'g5/8, (e4 g4 b4)/16, e5/16',\n 'd5/8, e5/8',\n ].join(','), { stem: 'down' }));\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n flat_beam_offset: 145,\n stem_direction: -1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'Flat Beams Down (uniform) Test');\n}\nVexFlowTests.register(AutoBeamFormattingTests);\nexport { AutoBeamFormattingTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Bach Demo\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { BarlineType, Registry } from '../src/index';\nconst BachDemoTests = {\n Start() {\n QUnit.module('Bach Demo');\n VexFlowTests.runTests('Minuet 1', minuet1);\n },\n};\nfunction minuet1(options) {\n const registry = new Registry();\n Registry.enableDefaultRegistry(registry);\n // Retrieve the element from the registry and cast to StaveNote, so we can call .addModifier( ) later.\n const id = (id) => registry.getElementById(id);\n const f = VexFlowTests.makeFactory(options, 1100, 900);\n const score = f.EasyScore({ throwOnError: true });\n // Bind these three functions so the code looks cleaner.\n // Instead of score.voice(...), just call voice(...).\n const voice = score.voice.bind(score);\n const notes = score.notes.bind(score);\n const beam = score.beam.bind(score);\n let x = 120;\n let y = 80;\n function appendSystem(width) {\n const system = f.System({ x, y, width, spaceBetweenStaves: 10 });\n x += width;\n return system;\n }\n score.set({ time: '3/4' });\n /* Measure 1 */\n let system = appendSystem(220);\n system\n .addStave({\n voices: [\n voice([notes('D5/q[id=\"m1a\"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(concat)),\n voice([f.TextDynamics({ text: 'p', duration: 'h', dots: 1, line: 9 })]),\n ],\n })\n .addClef('treble')\n .addKeySignature('G')\n .addTimeSignature('3/4')\n .setTempo({ name: 'Allegretto', duration: 'h', dots: 1, bpm: 66 }, -30);\n system\n .addStave({ voices: [voice(notes('(G3 B3 D4)/h, A3/q', { clef: 'bass' }))] })\n .addClef('bass')\n .addKeySignature('G')\n .addTimeSignature('3/4');\n system.addConnector('brace');\n system.addConnector('singleRight');\n system.addConnector('singleLeft');\n id('m1a').addModifier(f.Fingering({ number: '5' }), 0);\n /* Measure 2 */\n system = appendSystem(150);\n system.addStave({ voices: [voice(notes('D5/q[id=\"m2a\"], G4[id=\"m2b\"], G4[id=\"m2c\"]'))] });\n system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m2a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0);\n id('m2b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m2c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n f.Curve({\n from: id('m1a'),\n to: id('m2a'),\n options: {\n cps: [\n { x: 0, y: 40 },\n { x: 0, y: 40 },\n ],\n },\n });\n /* Measure 3 */\n system = appendSystem(150);\n system.addStave({\n voices: [voice([notes('E5/q[id=\"m3a\"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(concat))],\n });\n id('m3a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0);\n system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n /* Measure 4 */\n system = appendSystem(150);\n system.addStave({ voices: [voice(notes('G5/q[id=\"m4a\"], G4[id=\"m4b\"], G4[id=\"m4c\"]'))] });\n system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m4a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0);\n id('m4b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m4c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n f.Curve({\n from: id('m3a'),\n to: id('m4a'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 20 },\n ],\n },\n });\n /* Measure 5 */\n system = appendSystem(150);\n system.addStave({\n voices: [voice([notes('C5/q[id=\"m5a\"]'), beam(notes('D5/8, C5, B4, A4', { stem: 'down' }))].reduce(concat))],\n });\n id('m5a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0);\n system.addStave({ voices: [voice(notes('A3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n /* Measure 6 */\n system = appendSystem(150);\n system.addStave({\n voices: [voice([notes('B4/q'), beam(notes('C5/8, B4, A4, G4[id=\"m6a\"]', { stem: 'up' }))].reduce(concat))],\n });\n system.addStave({ voices: [voice(notes('G3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n f.Curve({\n from: id('m5a'),\n to: id('m6a'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 20 },\n ],\n invert: true,\n position_end: 'nearTop',\n y_shift: 20,\n },\n });\n /* Measure 7 (New system) */\n x = 20;\n y += 230;\n system = appendSystem(220);\n system\n .addStave({\n voices: [\n voice([notes('F4/q[id=\"m7a\"]'), beam(notes('G4/8[id=\"m7b\"], A4, B4, G4', { stem: 'up' }))].reduce(concat)),\n ],\n })\n .addClef('treble')\n .addKeySignature('G');\n system\n .addStave({ voices: [voice(notes('D4/q, B3[id=\"m7c\"], G3', { clef: 'bass' }))] })\n .addClef('bass')\n .addKeySignature('G');\n system.addConnector('brace');\n system.addConnector('singleRight');\n system.addConnector('singleLeft');\n id('m7a').addModifier(f.Fingering({ number: '2', position: 'below' }), 0);\n id('m7b').addModifier(f.Fingering({ number: '1' }), 0);\n id('m7c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0);\n /* Measure 8 */\n system = appendSystem(180);\n const grace = f.GraceNote({ keys: ['d/3'], clef: 'bass', duration: '4', slash: false });\n system.addStave({ voices: [voice(notes('A4/h.[id=\"m8c\"]'))] });\n system.addStave({\n voices: [\n score\n .set({ clef: 'bass' })\n .voice([notes('D4/q[id=\"m8a\"]'), beam(notes('D3/8, C4, B3[id=\"m8b\"], A3', { stem: 'down' }))].reduce(concat)),\n ],\n });\n system.addConnector('singleRight');\n id('m8b').addModifier(f.Fingering({ number: '1', position: 'above' }), 0);\n id('m8c').addModifier(f.GraceNoteGroup({ notes: [grace] }), 0);\n f.Curve({\n from: id('m7a'),\n to: id('m8c'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 20 },\n ],\n invert: true,\n position: 'nearTop',\n position_end: 'nearTop',\n },\n });\n f.StaveTie({ from: grace, to: id('m8c') });\n /* Measure 9 */\n system = appendSystem(180);\n system.addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('D5/q[id=\"m9a\"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(concat)),\n ],\n });\n system.addStave({ voices: [voice(notes('B3/h, A3/q', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m9a').addModifier(f.Fingering({ number: '5' }), 0);\n /* Measure 10 */\n system = appendSystem(170);\n system.addStave({ voices: [voice(notes('D5/q[id=\"m10a\"], G4[id=\"m10b\"], G4[id=\"m10c\"]'))] });\n system.addStave({ voices: [voice(notes('G3/q[id=\"m10d\"], B3, G3', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m10a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0);\n id('m10b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m10c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m10d').addModifier(f.Fingering({ number: '4' }), 0);\n f.Curve({\n from: id('m9a'),\n to: id('m10a'),\n options: {\n cps: [\n { x: 0, y: 40 },\n { x: 0, y: 40 },\n ],\n },\n });\n /* Measure 11 */\n system = appendSystem(150);\n system.addStave({\n voices: [voice([notes('E5/q[id=\"m11a\"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(concat))],\n });\n id('m11a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0);\n system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n /* Measure 12 */\n system = appendSystem(170);\n system.addStave({ voices: [voice(notes('G5/q[id=\"m12a\"], G4[id=\"m12b\"], G4[id=\"m12c\"]'))] });\n system.addStave({\n voices: [\n score\n .set({ clef: 'bass' })\n .voice([notes('B3/q[id=\"m12d\"]'), beam(notes('C4/8, B3, A3, G3[id=\"m12e\"]', { stem: 'down' }))].reduce(concat)),\n ],\n });\n system.addConnector('singleRight');\n id('m12a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0);\n id('m12b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m12c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m12d').addModifier(f.Fingering({ number: '2', position: 'above' }), 0);\n id('m12e').addModifier(f.Fingering({ number: '4', position: 'above' }), 0);\n f.Curve({\n from: id('m11a'),\n to: id('m12a'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 20 },\n ],\n },\n });\n /* Measure 13 (New system) */\n x = 20;\n y += 230;\n system = appendSystem(220);\n system\n .addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('c5/q[id=\"m13a\"]'), beam(notes('d5/8, c5, b4, a4', { stem: 'down' }))].reduce(concat)),\n ],\n })\n .addClef('treble')\n .addKeySignature('G');\n system\n .addStave({ voices: [voice(notes('a3/h[id=\"m13b\"], f3/q[id=\"m13c\"]', { clef: 'bass' }))] })\n .addClef('bass')\n .addKeySignature('G');\n system.addConnector('brace');\n system.addConnector('singleRight');\n system.addConnector('singleLeft');\n id('m13a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0);\n id('m13b').addModifier(f.Fingering({ number: '1' }), 0);\n id('m13c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0);\n /* Measure 14 */\n system = appendSystem(180);\n system.addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('B4/q'), beam(notes('C5/8, b4, a4, g4', { stem: 'up' }))].reduce(concat)),\n ],\n });\n system.addStave({ voices: [voice(notes('g3/h[id=\"m14a\"], b3/q[id=\"m14b\"]', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m14a').addModifier(f.Fingering({ number: '2' }), 0);\n id('m14b').addModifier(f.Fingering({ number: '1' }), 0);\n /* Measure 15 */\n system = appendSystem(180);\n system.addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('a4/q'), beam(notes('b4/8, a4, g4, f4[id=\"m15a\"]', { stem: 'up' }))].reduce(concat)),\n ],\n });\n system.addStave({ voices: [voice(notes('c4/q[id=\"m15b\"], d4, d3', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m15a').addModifier(f.Fingering({ number: '2' }), 0);\n id('m15b').addModifier(f.Fingering({ number: '2' }), 0);\n /* Measure 16 */\n system = appendSystem(130);\n system\n .addStave({\n voices: [score.set({ clef: 'treble' }).voice([notes('g4/h.[id=\"m16a\"]')].reduce(concat))],\n })\n .setEndBarType(BarlineType.REPEAT_END);\n system\n .addStave({ voices: [voice(notes('g3/h[id=\"m16b\"], g2/q', { clef: 'bass' }))] })\n .setEndBarType(BarlineType.REPEAT_END);\n system.addConnector('boldDoubleRight');\n id('m16a').addModifier(f.Fingering({ number: '1' }), 0);\n id('m16b').addModifier(f.Fingering({ number: '1' }), 0);\n f.Curve({\n from: id('m13a'),\n to: id('m16a'),\n options: {\n cps: [\n { x: 0, y: 50 },\n { x: 0, y: 20 },\n ],\n invert: true,\n position_end: 'nearTop',\n },\n });\n /* Measure 17 */\n system = appendSystem(180);\n system\n .addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('b5/q[id=\"m17a\"]'), beam(notes('g5/8, a5, b5, g5', { stem: 'down' }))].reduce(concat)),\n voice([f.TextDynamics({ text: 'mf', duration: 'h', dots: 1, line: 10 })]),\n ],\n })\n .setBegBarType(BarlineType.REPEAT_BEGIN);\n system.addStave({ voices: [voice(notes('g3/h.', { clef: 'bass' }))] }).setBegBarType(BarlineType.REPEAT_BEGIN);\n system.addConnector('boldDoubleLeft');\n system.addConnector('singleRight');\n id('m17a').addModifier(f.Fingering({ number: '5', position: 'above' }), 0);\n /* Measure 18 */\n system = appendSystem(180);\n system.addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('a5/q[id=\"m18a\"]'), beam(notes('d5/8, e5, f5, d5[id=\"m18b\"]', { stem: 'down' }))].reduce(concat)),\n ],\n });\n system.addStave({ voices: [voice(notes('f3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m18a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0);\n f.Curve({\n from: id('m17a'),\n to: id('m18b'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 30 },\n ],\n },\n });\n /* Done */\n f.draw();\n Registry.disableDefaultRegistry();\n options.assert.ok(true, 'Bach Minuet 1');\n}\nVexFlowTests.register(BachDemoTests);\nexport { BachDemoTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Barline Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Barline, BarlineType } from '../src/stavebarline';\nconst BarlineTests = {\n Start() {\n QUnit.module('Barline');\n QUnit.test('Enums', enums);\n const run = VexFlowTests.runTests;\n run('Simple BarNotes', simple);\n run('Style BarNotes', style);\n },\n};\nfunction enums(assert) {\n // VexFlow 4.0 renamed Barline.type => BarlineType.\n // The old way still works, for backwards compatibility.\n assert.equal(Barline.type, BarlineType);\n const a = BarlineType['DOUBLE'];\n const b = BarlineType.DOUBLE;\n assert.equal(a, b);\n}\nfunction simple(options) {\n const f = VexFlowTests.makeFactory(options, 380, 160);\n const stave = f.Stave();\n const notes = [\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }),\n f.BarNote({ type: 'single' }),\n f\n .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' })\n .addModifier(f.Accidental({ type: 'n' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n ];\n const voice = f.Voice().addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Simple Test');\n}\nfunction style(options) {\n const f = VexFlowTests.makeFactory(options, 380, 160);\n const stave = f.Stave();\n const notes = [\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }),\n f.BarNote({ type: 'single' }),\n f\n .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' })\n .addModifier(f.Accidental({ type: 'n' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n ];\n notes[1].setStyle({ shadowBlur: 15, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' });\n const voice = f.Voice().addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Style');\n}\nVexFlowTests.register(BarlineTests);\nexport { BarlineTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Beam Tests\n// TODO: Factory.Beam()'s 'notes' argument is a StemmableNote[], but we only have access to Tickable[].\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { AnnotationVerticalJustify, Beam, Dot, Font, FontStyle, FontWeight, Stem, Voice, } from '../src/index';\nconst BeamTests = {\n Start() {\n QUnit.module('Beam');\n const run = VexFlowTests.runTests;\n run('Simple Beam', simple);\n run('Multi Beam', multi);\n run('Sixteenth Beam', sixteenth);\n run('Slopey Beam', slopey);\n run('Auto-stemmed Beam', autoStem);\n run('Mixed Beam 1', mixed);\n run('Mixed Beam 2', mixed2);\n run('Dotted Beam', dotted);\n run('Partial Beam', partial);\n run('Close Trade-offs Beam', tradeoffs);\n run('Insane Beam', insane);\n run('Lengthy Beam', lenghty);\n run('Outlier Beam', outlier);\n run('Break Secondary Beams', breakSecondaryBeams);\n run('Partial Beam Direction', partialBeamDirection);\n run('TabNote Beams Up', tabBeamsUp);\n run('TabNote Beams Down', tabBeamsDown);\n run('TabNote Auto Create Beams', autoTabBeams);\n run('TabNote Beams Auto Stem', tabBeamsAutoStem);\n run('Complex Beams with Annotations', complexWithAnnotation);\n run('Complex Beams with Articulations', complexWithArticulation);\n run('Complex Beams with Articulations two Staves', complexWithArticulation2);\n },\n};\nfunction simple(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voice = score.voice([\n notes('(cb4 e#4 a4)/2'),\n beam(notes('(cb4 e#4 a4)/8, (d4 f4 a4), (ebb4 g##4 b4), (f4 a4 c5)', { stem: 'up' })),\n ].reduce(concat), { time: '2/2' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Simple Test');\n}\nfunction multi(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice.bind(score);\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voices = [\n voice([beam(notes('f5/8, e5, d5, c5', { stem: 'up' })), beam(notes('c5, d5, e5, f5', { stem: 'up' }))].reduce(concat)),\n voice([beam(notes('f4/8, e4, d4, c4', { stem: 'down' })), beam(notes('c4/8, d4, e4, f4', { stem: 'down' }))].reduce(concat)),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n options.assert.ok(true, 'Multi Test');\n}\nfunction sixteenth(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice.bind(score);\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voices = [\n voice([\n beam(notes('f5/16, f5, d5, c5', { stem: 'up' })),\n beam(notes('c5/16, d5, f5, e5', { stem: 'up' })),\n notes('f5/2', { stem: 'up' }),\n ].reduce(concat)),\n voice([\n beam(notes('f4/16, e4/16, d4/16, c4/16', { stem: 'down' })),\n beam(notes('c4/16, d4/16, f4/16, e4/16', { stem: 'down' })),\n notes('f4/2', { stem: 'down' }),\n ].reduce(concat)),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n options.assert.ok(true, 'Sixteenth Test');\n}\nfunction breakSecondaryBeams(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice.bind(score);\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voices = [\n voice([\n beam(notes('f5/16., f5/32, c5/16., d5/32, c5/16., d5/32', { stem: 'up' }), { secondaryBeamBreaks: [1, 3] }),\n beam(notes('f5/16, e5, e5, e5, e5, e5', { stem: 'up' }), { secondaryBeamBreaks: [2] }),\n ].reduce(concat), { time: '3/4' }),\n voice([\n beam(notes('f4/32, d4, e4, c4, d4, c4, f4, d4, e4, c4, c4, d4', { stem: 'down' }), {\n secondaryBeamBreaks: [3, 7],\n }),\n beam(notes('d4/16, f4, d4, e4, e4, e4', { stem: 'down' }), { secondaryBeamBreaks: [3] }),\n ].reduce(concat), { time: '3/4' }),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n options.assert.ok(true, 'Breaking Secondary Beams Test');\n}\nfunction partialBeamDirection(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice.bind(score);\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voices = [\n voice([\n // Default beaming:\n beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' })),\n // Force first 16th beam right\n beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'R' } }),\n // Force first 16th beam left\n beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'L' } }),\n ].reduce(concat), { time: '9/8' }),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n options.assert.ok(true, 'Partial beam direction test');\n}\nfunction slopey(options) {\n const f = VexFlowTests.makeFactory(options, 350, 140);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voice = score.voice([\n beam(notes('c4/8, f4/8, d5/8, g5/8', { stem: 'up' })),\n beam(notes('d6/8, f5/8, d4/8, g3/8', { stem: 'up' })),\n ].reduce(concat));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Slopey Test');\n}\nfunction autoStem(options) {\n const f = VexFlowTests.makeFactory(options, 350, 140);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('a4/8, b4/8, g4/8, c5/8, f4/8, d5/8, e4/8, e5/8, b4/8, b4/8, g4/8, d5/8'), {\n time: '6/4',\n });\n const notes = voice.getTickables();\n const beams = [\n f.Beam({ notes: notes.slice(0, 2), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(2, 4), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(4, 6), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(6, 8), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(8, 10), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(10, 12), options: { autoStem: true } }),\n ];\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n const UP = Stem.UP;\n const DOWN = Stem.DOWN;\n options.assert.equal(beams[0].getStemDirection(), UP);\n options.assert.equal(beams[1].getStemDirection(), UP);\n options.assert.equal(beams[2].getStemDirection(), UP);\n options.assert.equal(beams[3].getStemDirection(), UP);\n options.assert.equal(beams[4].getStemDirection(), DOWN);\n options.assert.equal(beams[5].getStemDirection(), DOWN);\n f.draw();\n options.assert.ok(true, 'AutoStem Beam Test');\n}\nfunction mixed(options) {\n const f = VexFlowTests.makeFactory(options, 350, 140);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice1 = score.voice(score.notes('f5/8, d5/16, c5/16, c5/16, d5/16, e5/8, f5/8, d5/16, c5/16, c5/16, d5/16, e5/8', { stem: 'up' }));\n const voice2 = score.voice(score.notes('f4/16, e4/8, d4/16, c4/16, d4/8, f4/16, f4/16, e4/8, d4/16, c4/16, d4/8, f4/16', { stem: 'down' }));\n [\n [0, 4],\n [4, 8],\n [8, 12],\n ].forEach((range) => f.Beam({ notes: voice1.getTickables().slice(range[0], range[1]) }));\n [\n [0, 4],\n [4, 8],\n [8, 12],\n ].forEach((range) => f.Beam({ notes: voice2.getTickables().slice(range[0], range[1]) }));\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n options.assert.ok(true, 'Multi Test');\n}\nfunction mixed2(options) {\n const f = VexFlowTests.makeFactory(options, 450, 180);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('f5/32, d5/16, c5/32, c5/64, d5/128, e5/8, f5/16, d5/32, c5/64, c5/32, d5/16, e5/128', {\n stem: 'up',\n }), { time: '31/64' });\n const voice2 = score.voice(score.notes('f4/32, d4/16, c4/32, c4/64, d4/128, e4/8, f4/16, d4/32, c4/64, c4/32, d4/16, e4/128', {\n stem: 'down',\n }), { time: '31/64' });\n f.Beam({ notes: voice.getTickables().slice(0, 12) });\n f.Beam({ notes: voice2.getTickables().slice(0, 12) });\n f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave);\n f.draw();\n options.assert.ok(true, 'Multi Test');\n}\nfunction dotted(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('d4/8, b3/8., a3/16, a3/8, b3/8., c4/16, d4/8, b3/8, a3/8., a3/16, b3/8., c4/16', { stem: 'up' }), { time: '6/4' });\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Beam({ notes: notes.slice(8, 12) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Dotted Test');\n}\nfunction partial(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('d4/8, b3/32, c4/16., d4/16., e4/8, c4/64, c4/32, a3/8., b3/32., c4/8, e4/64, b3/16., b3/64, f4/8, e4/8, g4/64, e4/8'), { time: '89/64' });\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 3) });\n f.Beam({ notes: notes.slice(3, 9) });\n f.Beam({ notes: notes.slice(9, 13) });\n f.Beam({ notes: notes.slice(13, 17) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Partial Test');\n}\nfunction tradeoffs(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('a4/8, b4/8, c4/8, d4/8, g4/8, a4/8, b4/8, c4/8', { stem: 'up' }));\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Close Trade-offs Test');\n}\nfunction insane(options) {\n const f = VexFlowTests.makeFactory(options, 450, 180);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('g4/8, g5/8, c4/8, b5/8, g4/8[stem=\"down\"], a5[stem=\"down\"], b4[stem=\"down\"], c4/8', { stem: 'up' }));\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 7) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Insane Test');\n}\nfunction lenghty(options) {\n const f = VexFlowTests.makeFactory(options, 450, 180);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.beam(score.notes('g4/8, g4, g4, a4', { stem: 'up' })), { time: '2/4' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Lengthy Test');\n}\nfunction outlier(options) {\n const f = VexFlowTests.makeFactory(options, 450, 180);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes([\n 'g4/8[stem=\"up\"], f4[stem=\"up\"], d5[stem=\"up\"], e4[stem=\"up\"]',\n 'd5/8[stem=\"down\"], d5[stem=\"down\"], c5[stem=\"down\"], d5[stem=\"down\"]',\n ].join()));\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave });\n f.draw();\n options.assert.ok(true, 'Outlier Test');\n}\nfunction tabBeamsUp(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.TabStave({ y: 20 });\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n { positions: [{ str: 3, fret: 6 }], duration: '8' },\n { positions: [{ str: 3, fret: 6 }], duration: '8' },\n { positions: [{ str: 3, fret: 6 }], duration: '8' },\n { positions: [{ str: 3, fret: 6 }], duration: '8' },\n ];\n const notes = specs.map((struct) => {\n const tabNote = f.TabNote(struct);\n tabNote.render_options.draw_stem = true;\n return tabNote;\n });\n f.Beam({ notes: notes.slice(1, 7) });\n f.Beam({ notes: notes.slice(8, 11) });\n f.Tuplet({ notes: notes.slice(8, 11), options: { ratioed: true } });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'All objects have been drawn');\n}\nfunction tabBeamsDown(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const stave = f.TabStave({ options: { num_lines: 10 } });\n const specs = [\n {\n stem_direction: -1,\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8dd',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' },\n ];\n const notes = specs.map((struct) => {\n const tabNote = f.TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_dots = true;\n return tabNote;\n });\n Dot.buildAndAttach([notes[1], notes[1]]);\n f.Beam({ notes: notes.slice(1, 7) });\n f.Beam({ notes: notes.slice(8, 11) });\n f.Tuplet({ notes: notes.slice(8, 11), options: { location: -1 } });\n f.Tuplet({ notes: notes.slice(11, 14), options: { location: -1 } });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'All objects have been drawn');\n}\nfunction autoTabBeams(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.TabStave();\n const specs = [\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n { positions: [{ str: 1, fret: 6 }], duration: '32' },\n { positions: [{ str: 1, fret: 6 }], duration: '32' },\n { positions: [{ str: 1, fret: 6 }], duration: '32' },\n { positions: [{ str: 6, fret: 6 }], duration: '32' },\n { positions: [{ str: 6, fret: 6 }], duration: '16' },\n { positions: [{ str: 6, fret: 6 }], duration: '16' },\n { positions: [{ str: 6, fret: 6 }], duration: '16' },\n { positions: [{ str: 6, fret: 6 }], duration: '16' },\n ];\n const notes = specs.map((struct) => {\n const tabNote = f.TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_dots = true;\n return tabNote;\n });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n const beams = Beam.applyAndGetBeams(voice, -1);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n options.assert.ok(true, 'All objects have been drawn');\n}\n// This tests makes sure the auto_stem functionality is works.\n// TabNote stems within a beam group should end up normalized\nfunction tabBeamsAutoStem(options) {\n const f = VexFlowTests.makeFactory(options, 600, 300);\n const stave = f.TabStave();\n const specs = [\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n stem_direction: -1,\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n stem_direction: 1,\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n stem_direction: -1,\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n stem_direction: 1,\n },\n { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: 1 },\n { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 },\n { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 },\n { positions: [{ str: 6, fret: 6 }], duration: '32', stem_direction: -1 },\n { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 },\n { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 },\n { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 },\n { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: -1 },\n ];\n const notes = specs.map((struct) => {\n const tabNote = f.TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_dots = true;\n return tabNote;\n });\n // Stems should format down\n f.Beam({ notes: notes.slice(0, 8), options: { autoStem: true } });\n // Stems should format up\n f.Beam({ notes: notes.slice(8, 12), options: { autoStem: true } });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'All objects have been drawn');\n}\nfunction complexWithAnnotation(options) {\n const factory = VexFlowTests.makeFactory(options, 500, 200);\n const stave = factory.Stave({ y: 40 });\n const s1 = [\n { keys: ['e/4'], duration: '128', stem_direction: 1 },\n { keys: ['d/4'], duration: '16', stem_direction: 1 },\n { keys: ['e/4'], duration: '8', stem_direction: 1 },\n { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n ];\n const s2 = [\n { keys: ['e/5'], duration: '128', stem_direction: -1 },\n { keys: ['d/5'], duration: '16', stem_direction: -1 },\n { keys: ['e/5'], duration: '8', stem_direction: -1 },\n { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n ];\n const font = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n };\n const notes1 = s1.map((struct) => factory\n .StaveNote(struct) //\n .addModifier(factory.Annotation({ text: '1', vJustify: AnnotationVerticalJustify.TOP, font }), 0));\n const notes2 = s2.map((struct) => factory\n .StaveNote(struct) //\n .addModifier(factory.Annotation({ text: '3', vJustify: AnnotationVerticalJustify.BOTTOM, font }), 0));\n factory.Beam({ notes: notes1 });\n factory.Beam({ notes: notes2 });\n const voice = factory.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2);\n factory.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave });\n factory.draw();\n options.assert.ok(true, 'Complex beam annotations');\n}\nfunction complexWithArticulation(options) {\n const f = VexFlowTests.makeFactory(options, 500, 200);\n const stave = f.Stave({ y: 40 });\n const s1 = [\n { keys: ['e/4'], duration: '128', stem_direction: 1 },\n { keys: ['d/4'], duration: '16', stem_direction: 1 },\n { keys: ['e/4'], duration: '8', stem_direction: 1 },\n { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n ];\n const s2 = [\n { keys: ['e/5'], duration: '128', stem_direction: -1 },\n { keys: ['d/5'], duration: '16', stem_direction: -1 },\n { keys: ['e/5'], duration: '8', stem_direction: -1 },\n { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n ];\n const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0));\n const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0));\n f.Beam({ notes: notes1 });\n f.Beam({ notes: notes2 });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave });\n f.draw();\n options.assert.ok(true, 'Complex beam articulations');\n}\nfunction complexWithArticulation2(options) {\n const f = VexFlowTests.makeFactory(options, 500, 300);\n const system = f.System();\n const s1 = [\n { keys: ['e/4'], duration: '128', stem_direction: 1 },\n { keys: ['d/4'], duration: '16', stem_direction: 1 },\n { keys: ['e/4'], duration: '8', stem_direction: 1 },\n { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n ];\n const s2 = [\n { keys: ['e/5'], duration: '128', stem_direction: -1 },\n { keys: ['d/5'], duration: '16', stem_direction: -1 },\n { keys: ['e/5'], duration: '8', stem_direction: -1 },\n { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n ];\n const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0));\n const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0));\n const notes3 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0));\n const notes4 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0));\n f.Beam({ notes: notes1 });\n f.Beam({ notes: notes2 });\n f.Beam({ notes: notes3 });\n f.Beam({ notes: notes4 });\n const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2);\n const voice2 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes3).addTickables(notes4);\n system.addStave({ voices: [voice1] });\n system.addStave({ voices: [voice2] });\n f.draw();\n options.assert.ok(true, 'Complex beam articulations two staves');\n}\nVexFlowTests.register(BeamTests);\nexport { BeamTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Bend Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Bend } from '../src/bend';\nimport { Font } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { ModifierContext } from '../src/modifiercontext';\nimport { Note } from '../src/note';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { TickContext } from '../src/tickcontext';\nconst BendTests = {\n Start() {\n QUnit.module('Bend');\n const run = VexFlowTests.runTests;\n run('Double Bends', doubleBends);\n run('Reverse Bends', reverseBends);\n run('Bend Phrase', bendPhrase);\n run('Double Bends With Release', doubleBendsWithRelease);\n run('Whako Bend', whackoBends);\n // TODO: Rename 'Whako Bend' => 'Whacko'\n },\n};\n// Helper functions for creating TabNote and Bend objects.\nconst note = (noteStruct) => new TabNote(noteStruct);\nconst bendWithText = (text, release = false) => new Bend(text, release);\nconst bendWithPhrase = (phrase) => new Bend('', false, phrase);\n/**\n * Bend two strings at a time.\n */\nfunction doubleBends(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n note({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithText('Full'), 0)\n .addModifier(bendWithText('1/2'), 1),\n note({\n positions: [\n { str: 2, fret: 5 },\n { str: 3, fret: 5 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithText('1/4'), 0)\n .addModifier(bendWithText('1/4'), 1),\n // This note is not visible because it is pushed off to the right by the ctx.scale(1.5, 1.5) at the top.\n note({\n positions: [{ str: 4, fret: 7 }],\n duration: 'h',\n }),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n notes.forEach((note) => Note.plotMetrics(ctx, note, 140));\n options.assert.ok(true, 'Double Bends');\n}\nfunction doubleBendsWithRelease(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 550, 240);\n ctx.scale(1.0, 1.0);\n ctx.setBackgroundFillStyle('#FFF');\n ctx.setFont('Arial', VexFlowTests.Font.size);\n const stave = new TabStave(10, 10, 550).addTabGlyph().setContext(ctx).draw();\n const notes = [\n note({\n positions: [\n { str: 1, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithText('1/2', true), 0)\n .addModifier(bendWithText('Full', true), 1),\n note({\n positions: [\n { str: 2, fret: 5 },\n { str: 3, fret: 5 },\n { str: 4, fret: 5 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithText('1/4', true), 0)\n .addModifier(bendWithText('Monstrous', true), 1)\n .addModifier(bendWithText('1/4', true), 2),\n note({\n positions: [{ str: 4, fret: 7 }],\n duration: 'q',\n }),\n note({\n positions: [{ str: 4, fret: 7 }],\n duration: 'q',\n }),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n notes.forEach((note) => Note.plotMetrics(ctx, note, 140));\n options.assert.ok(true, 'Bend Release');\n}\n/**\n * Add the bend for note 1 before adding the bend for note 0,\n * by swapping the two indexes in .addModifier(modifier, index).\n * As a result, the bend curves intersect.\n */\nfunction reverseBends(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.setFont('10pt Arial');\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n note({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'w',\n })\n .addModifier(bendWithText('Full'), 1)\n .addModifier(bendWithText('1/2'), 0),\n note({\n positions: [\n { str: 2, fret: 5 },\n { str: 3, fret: 5 },\n ],\n duration: 'w',\n })\n .addModifier(bendWithText('1/4'), 1)\n .addModifier(bendWithText('1/4'), 0),\n note({\n positions: [{ str: 4, fret: 7 }],\n duration: 'w',\n }),\n ];\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const mc = new ModifierContext();\n note.addToModifierContext(mc);\n const tickContext = new TickContext();\n tickContext\n .addTickable(note)\n .preFormat()\n .setX(75 * i);\n note.setStave(stave).setContext(ctx).draw();\n Note.plotMetrics(ctx, note, 140);\n options.assert.ok(true, 'Bend ' + i);\n }\n}\nfunction bendPhrase(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = Font.SIZE + 'pt ' + Font.SANS_SERIF; // Optionally use constants defined in Font.\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const phrase1 = [\n { type: Bend.UP, text: 'Full' },\n { type: Bend.DOWN, text: 'Monstrous' },\n { type: Bend.UP, text: '1/2' },\n { type: Bend.DOWN, text: '' },\n ];\n const bend1 = bendWithPhrase(phrase1).setContext(ctx);\n const notes = [\n note({\n positions: [{ str: 2, fret: 10 }],\n duration: 'w',\n }).addModifier(bend1, 0),\n ];\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.addToModifierContext(new ModifierContext());\n const tickContext = new TickContext();\n tickContext\n .addTickable(note)\n .preFormat()\n .setX(75 * i);\n note.setStave(stave).setContext(ctx).draw();\n Note.plotMetrics(ctx, note, 140);\n options.assert.ok(true, 'Bend ' + i);\n }\n}\nfunction whackoBends(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 240);\n ctx.scale(1.0, 1.0);\n ctx.setBackgroundFillStyle('#FFF');\n ctx.setFont('Arial', VexFlowTests.Font.size);\n const stave = new TabStave(10, 10, 350).addTabGlyph().setContext(ctx).draw();\n const phrase1 = [\n { type: Bend.UP, text: 'Full' },\n { type: Bend.DOWN, text: '' },\n { type: Bend.UP, text: '1/2' },\n { type: Bend.DOWN, text: '' },\n ];\n const phrase2 = [\n { type: Bend.UP, text: 'Full' },\n { type: Bend.UP, text: 'Full' },\n { type: Bend.UP, text: '1/2' },\n { type: Bend.DOWN, text: '' },\n { type: Bend.DOWN, text: 'Full' },\n { type: Bend.DOWN, text: 'Full' },\n { type: Bend.UP, text: '1/2' },\n { type: Bend.DOWN, text: '' },\n ];\n const notes = [\n note({\n positions: [\n { str: 2, fret: 10 },\n { str: 3, fret: 9 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithPhrase(phrase1), 0)\n .addModifier(bendWithPhrase(phrase2), 1),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n Note.plotMetrics(ctx, notes[0], 140);\n options.assert.ok(true, 'Whacko Bend & Release');\n}\nVexFlowTests.register(BendTests);\nexport { BendTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Bounding Box Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { BoundingBox } from '../src/index';\nconst BoundingBoxTests = {\n Start() {\n QUnit.module('BoundingBox');\n QUnit.test('Initialization Test', initialization);\n QUnit.test('Merging Text', merging);\n },\n};\nfunction initialization(assert) {\n const bb = new BoundingBox(4, 5, 6, 7);\n assert.equal(bb.getX(), 4, 'Bad X');\n assert.equal(bb.getY(), 5, 'Bad Y');\n assert.equal(bb.getW(), 6, 'Bad W');\n assert.equal(bb.getH(), 7, 'Bad H');\n bb.setX(5);\n assert.equal(bb.getX(), 5, 'Bad X');\n}\nfunction merging(assert) {\n const tests = [\n {\n type: 'Intersection',\n bb1: new BoundingBox(10, 10, 10, 10),\n bb2: new BoundingBox(15, 20, 10, 10),\n merged: new BoundingBox(10, 10, 15, 20),\n },\n {\n type: '1 contains 2',\n bb1: new BoundingBox(10, 10, 30, 30),\n bb2: new BoundingBox(15, 15, 10, 10),\n merged: new BoundingBox(10, 10, 30, 30),\n },\n {\n type: '2 contains 1',\n bb1: new BoundingBox(15, 15, 10, 10),\n bb2: new BoundingBox(10, 10, 30, 30),\n merged: new BoundingBox(10, 10, 30, 30),\n },\n ];\n tests.forEach((test) => {\n const type = test.type;\n const bb1 = test.bb1;\n const bb2 = test.bb2;\n const merged = test.merged;\n bb1.mergeWith(bb2);\n assert.equal(bb1.getX(), merged.getX(), type + ' - Bad X');\n assert.equal(bb1.getY(), merged.getY(), type + ' - Bad Y');\n assert.equal(bb1.getW(), merged.getW(), type + ' - Bad W');\n assert.equal(bb1.getH(), merged.getH(), type + ' - Bad H');\n });\n}\nVexFlowTests.register(BoundingBoxTests);\nexport { BoundingBoxTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// ChordSymbol Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { ChordSymbol } from '../src/chordsymbol';\nimport { Font } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { Ornament } from '../src/ornament';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Tables } from '../src/tables';\nconst ChordSymbolTests = {\n Start() {\n QUnit.module('ChordSymbol');\n const run = VexFlowTests.runTests;\n run('Chord Symbol With Modifiers', withModifiers);\n run('Chord Symbol Font Size Tests', fontSize);\n run('Chord Symbol Kerning Tests', kern);\n run('Top Chord Symbols', top);\n run('Top Chord Symbols Justified', topJustify);\n run('Bottom Chord Symbols', bottom);\n run('Bottom Stem Down Chord Symbols', bottomStemDown);\n run('Double Bottom Chord Symbols', doubleBottom);\n },\n};\n// Options for customizing addGlyphOrText() or addGlyph().\nconst superscript = { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT };\nconst subscript = { symbolModifier: ChordSymbol.symbolModifiers.SUBSCRIPT };\n// Helper function for creating StaveNotes.\nconst note = (factory, keys, duration, chordSymbol) => factory.StaveNote({ keys, duration }).addModifier(chordSymbol, 0);\n/** Calculate the glyph's width in the current music font. */\n// How is this different from Glyph.getWidth()? The numbers don't match up.\nfunction getGlyphWidth(glyphName) {\n // `38` seems to be the `font_scale` specified in many classes, such as\n // Accidental, Articulation, Ornament, Strokes. Does this mean `38pt`???\n //\n // However, tables.ts specifies:\n // NOTATION_FONT_SCALE: 39,\n // TABLATURE_FONT_SCALE: 39,\n const musicFont = Tables.currentMusicFont();\n const glyph = musicFont.getGlyphs()[glyphName];\n const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution();\n return widthInEm * 38 * Font.scaleToPxFrom.pt;\n}\nfunction withModifiers(options) {\n const f = VexFlowTests.makeFactory(options, 750, 580);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n const notes = [\n note(f, ['c/4'], 'q', chords[0]).addModifier(new Ornament('doit')),\n note(f, ['c/4'], 'q', chords[1]),\n note(f, ['c/4'], 'q', chords[2]).addModifier(new Ornament('fall')),\n note(f, ['c/4'], 'q', chords[3]),\n ];\n const score = f.EasyScore();\n const voice = score.voice(notes, { time: '4/4' });\n const formatter = f.Formatter();\n formatter.joinVoices([voice]);\n const voiceW = formatter.preCalculateMinTotalWidth([voice]);\n const staffW = voiceW + Stave.defaultPadding + getGlyphWidth('gClef');\n formatter.format([voice], voiceW);\n const staff = f.Stave({ x: 10, y, width: staffW }).addClef('treble').draw();\n voice.draw(ctx, staff);\n }\n let chords = [];\n chords.push(f\n .ChordSymbol({ fontSize: 10 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .addGlyph('rightParenTall'));\n chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('b9', superscript).addGlyphOrText('#11', subscript));\n chords.push(f\n .ChordSymbol({ fontSize: 14 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('add 3', superscript)\n .addGlyphOrText('omit 9', subscript)\n .addGlyph('rightParenTall'));\n chords.push(f\n .ChordSymbol({ fontSize: 16 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .addGlyph('rightParenTall'));\n draw(chords, 40);\n chords = [];\n chords.push(f\n .ChordSymbol({ fontSize: 10 })\n .setFontSize(10)\n .addText('F7')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript));\n chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript));\n chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript));\n chords.push(f\n .ChordSymbol({ fontSize: 16 })\n .setFontSize(16)\n .addText('F7')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript));\n draw(chords, 140);\n chords = [\n f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript),\n ];\n draw(chords, 240);\n options.assert.ok(true, 'Font Size Chord Symbol');\n}\nfunction fontSize(options) {\n const f = VexFlowTests.makeFactory(options, 750, 580);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble');\n const notes = [\n note(f, ['c/4'], 'q', chords[0]),\n note(f, ['c/4'], 'q', chords[1]),\n note(f, ['c/4'], 'q', chords[2]),\n note(f, ['c/4'], 'q', chords[3]),\n ];\n const score = f.EasyScore();\n const voice = score.voice(notes, { time: '4/4' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n }\n let chords = [];\n chords.push(f\n .ChordSymbol({ fontSize: 10 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .addGlyph('rightParenTall')\n .setReportWidth(false));\n chords.push(f\n .ChordSymbol({ fontSize: 12 })\n .addText('F7')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .setReportWidth(false));\n chords.push(f\n .ChordSymbol({ fontSize: 14 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('add 3', superscript)\n .addGlyphOrText('omit 9', subscript)\n .addGlyph('rightParenTall')\n .setReportWidth(false));\n chords.push(f\n .ChordSymbol({ fontSize: 16 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .addGlyph('rightParenTall')\n .setReportWidth(false));\n draw(chords, 40);\n chords = [];\n chords.push(f\n .ChordSymbol({ fontSize: 10 })\n .setFontSize(10)\n .addText('F7')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript));\n chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript));\n chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript));\n chords.push(f\n .ChordSymbol({ fontSize: 16 })\n .setFontSize(16)\n .addText('F7')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript));\n draw(chords, 140);\n chords = [\n f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript),\n ];\n draw(chords, 240);\n options.assert.ok(true, 'Font Size Chord Symbol');\n}\nfunction kern(options) {\n const f = VexFlowTests.makeFactory(options, 650 * 1.5, 650);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(f, ['C/4'], 'q', chords[0]),\n note(f, ['C/4'], 'q', chords[1]),\n note(f, ['C/4'], 'q', chords[2]),\n note(f, ['C/4'], 'q', chords[3]),\n ];\n const score = f.EasyScore();\n const voice = score.voice(notes, { time: '4/4' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n }\n let chords = [\n f.ChordSymbol().addText('A').addGlyphSuperscript('dim').setReportWidth(false),\n f.ChordSymbol({ kerning: false, reportWidth: false }).addText('A').addGlyphSuperscript('dim'),\n f.ChordSymbol({ hJustify: 'left', reportWidth: false }).addText('C').addGlyph('halfDiminished', superscript),\n f.ChordSymbol({ reportWidth: false }).addText('D').addGlyph('halfDiminished', superscript),\n ];\n draw(chords, 10);\n chords = [\n f.ChordSymbol().addText('A').addGlyphSuperscript('dim'),\n f.ChordSymbol({ kerning: false }).addText('A').addGlyphSuperscript('dim'),\n f.ChordSymbol().addText('A').addGlyphSuperscript('+').addTextSuperscript('5'),\n f.ChordSymbol().addText('G').addGlyphSuperscript('+').addTextSuperscript('5'),\n ];\n draw(chords, 110);\n chords = [\n f.ChordSymbol().addText('A').addGlyph('-'),\n f.ChordSymbol().addText('E').addGlyph('-'),\n f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript),\n f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript),\n ];\n draw(chords, 210);\n chords = [\n f.ChordSymbol().addGlyphOrText('F/B').addGlyphOrText('b', superscript),\n f.ChordSymbol().addText('E').addGlyphOrText('V/V'),\n f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript),\n f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript),\n ];\n draw(chords, 310);\n options.assert.ok(true, 'Chord Symbol Kerning Tests');\n}\nfunction top(options) {\n const f = VexFlowTests.makeFactory(options, 650 * 1.5, 650);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n // Helper function for creating StaveNotes.\n const note = (factory, keys, duration, chordSymbol, direction) => factory.StaveNote({ keys, duration, stem_direction: direction }).addModifier(chordSymbol, 0);\n function draw(c1, c2, y) {\n const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(f, ['e/4', 'a/4', 'd/5'], 'h', c1, 1).addModifier(new Accidental('b'), 0),\n note(f, ['c/5', 'e/5', 'c/6'], 'h', c2, -1),\n ];\n const score = f.EasyScore();\n const voice = score.voice(notes, { time: '4/4' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n }\n let chord1 = f\n .ChordSymbol({ reportWidth: false })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('(#11b9)', superscript);\n let chord2 = f\n .ChordSymbol({ reportWidth: false })\n .addText('C')\n .setHorizontal('left')\n .addGlyphSuperscript('majorSeventh');\n draw(chord1, chord2, 40);\n chord1 = f\n .ChordSymbol()\n .addText('F7')\n .addTextSuperscript('(')\n .addGlyphOrText('#11b9', superscript)\n .addTextSuperscript(')');\n chord2 = f.ChordSymbol().addText('C').setHorizontal('left').addTextSuperscript('Maj.');\n draw(chord1, chord2, 140);\n chord1 = f\n .ChordSymbol()\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript);\n chord2 = f.ChordSymbol().addText('C').addTextSuperscript('sus4');\n draw(chord1, chord2, 240);\n options.assert.ok(true, 'Top Chord Symbol');\n}\nfunction topJustify(options) {\n const f = VexFlowTests.makeFactory(options, 500 * 1.5, 680);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chord1, chord2, y) {\n const stave = new Stave(10, y, 450).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(f, ['e/4', 'a/4', 'd/5'], 'h', chord1).addModifier(new Accidental('b'), 0),\n note(f, ['c/4', 'e/4', 'B/4'], 'h', chord2),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n let chord1 = f.ChordSymbol().addText('F7').setHorizontal('left').addGlyphOrText('(#11b9)', superscript);\n let chord2 = f.ChordSymbol({ hJustify: 'left' }).addText('C').addGlyphSuperscript('majorSeventh');\n draw(chord1, chord2, 40);\n chord1 = f\n .ChordSymbol({ hJustify: 'center' })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('(#11b9)', superscript);\n chord2 = f.ChordSymbol({ hJustify: 'center' }).addText('C').addTextSuperscript('Maj.');\n draw(chord1, chord2, 140);\n chord1 = f\n .ChordSymbol({ hJustify: 'right' })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript);\n chord2 = f.ChordSymbol({ hJustify: 'right' }).addText('C').addTextSuperscript('Maj.');\n draw(chord1, chord2, 240);\n chord1 = f\n .ChordSymbol({ hJustify: 'left' })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript);\n chord2 = f.ChordSymbol({ hJustify: 'centerStem' }).addText('C').addTextSuperscript('Maj.');\n draw(chord1, chord2, 340);\n options.assert.ok(true, 'Top Chord Justified');\n}\nfunction bottom(options) {\n const f = VexFlowTests.makeFactory(options, 600 * 1.5, 230);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n const stave = new Stave(10, y, 400).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[0]),\n note(f, ['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new Accidental('b'), 2),\n note(f, ['c/4', 'e/4', 'g/4'], 'q', chords[2]),\n note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new Accidental('#'), 1),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n const chords = [\n f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'),\n f.ChordSymbol({ vJustify: 'bottom' }).addLine(12),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'),\n ];\n draw(chords, 10);\n options.assert.ok(true, 'Bottom Chord Symbol');\n}\nfunction bottomStemDown(options) {\n const f = VexFlowTests.makeFactory(options, 600 * 1.5, 330);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n // Helper function to create a StaveNote with a ChordSymbol and the stem pointing down.\n const note = (keys, duration, chordSymbol) => new StaveNote({ keys, duration, stem_direction: -1 }).addModifier(chordSymbol, 0);\n const stave = new Stave(10, y, 400).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(['c/4', 'f/4', 'a/4'], 'q', chords[0]),\n note(['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new Accidental('b'), 2),\n note(['c/4', 'e/4', 'g/4'], 'q', chords[2]),\n note(['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new Accidental('#'), 1),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n const chords = [\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('F'),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('C7'),\n f.ChordSymbol({ vJustify: 'bottom' }).addLine(12),\n f.ChordSymbol({ vJustify: 'bottom' }).addText('A').addGlyphSuperscript('dim'),\n ];\n draw(chords, 10);\n options.assert.ok(true, 'Bottom Stem Down Chord Symbol');\n}\nfunction doubleBottom(options) {\n const f = VexFlowTests.makeFactory(options, 600 * 1.5, 260);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, chords2, y) {\n // Helper function to create a StaveNote with two ChordSymbols attached.\n const note = (keys, duration, chordSymbol1, chordSymbol2) => new StaveNote({ keys, duration }).addModifier(chordSymbol1, 0).addModifier(chordSymbol2, 0);\n const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(['c/4', 'f/4', 'a/4'], 'q', chords[0], chords2[0]),\n note(['c/4', 'e/4', 'b/4'], 'q', chords[1], chords2[1]).addModifier(f.Accidental({ type: 'b' }), 2),\n note(['c/4', 'e/4', 'g/4'], 'q', chords[2], chords2[2]),\n note(['c/4', 'f/4', 'a/4'], 'q', chords[3], chords2[3]).addModifier(f.Accidental({ type: '#' }), 1),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n const chords1 = [\n f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'),\n f.ChordSymbol({ vJustify: 'bottom' }).addLine(12),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'),\n ];\n const chords2 = [\n f.ChordSymbol({ vJustify: 'bottom' }).addText('T'),\n f.ChordSymbol({ vJustify: 'bottom' }).addText('D'),\n f.ChordSymbol({ vJustify: 'bottom' }).addText('D'),\n f.ChordSymbol({ vJustify: 'bottom' }).addText('SD'),\n ];\n draw(chords1, chords2, 10);\n options.assert.ok(true, '2 Bottom Chord Symbol');\n}\nVexFlowTests.register(ChordSymbolTests);\nexport { ChordSymbolTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Clef Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst ClefTests = {\n Start() {\n QUnit.module('Clef');\n const run = VexFlowTests.runTests;\n run('Clef Test', draw);\n run('Clef End Test', drawEnd);\n run('Small Clef Test', drawSmall);\n run('Small Clef End Test', drawSmallEnd);\n run('Clef Change Test', drawClefChange);\n },\n};\nfunction draw(options) {\n const f = VexFlowTests.makeFactory(options, 800, 120);\n f.Stave()\n .addClef('treble')\n .addClef('treble', 'default', '8va')\n .addClef('treble', 'default', '8vb')\n .addClef('alto')\n .addClef('tenor')\n .addClef('soprano')\n .addClef('bass')\n .addClef('bass', 'default', '8vb')\n .addClef('mezzo-soprano')\n .addClef('baritone-c')\n .addClef('baritone-f')\n .addClef('subbass')\n .addClef('percussion')\n .addClef('french')\n .addEndClef('treble');\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawEnd(options) {\n const f = VexFlowTests.makeFactory(options, 800, 120);\n f.Stave()\n .addClef('bass')\n .addEndClef('treble')\n .addEndClef('treble', 'default', '8va')\n .addEndClef('treble', 'default', '8vb')\n .addEndClef('alto')\n .addEndClef('tenor')\n .addEndClef('soprano')\n .addEndClef('bass')\n .addEndClef('bass', 'default', '8vb')\n .addEndClef('mezzo-soprano')\n .addEndClef('baritone-c')\n .addEndClef('baritone-f')\n .addEndClef('subbass')\n .addEndClef('percussion')\n .addEndClef('french');\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawSmall(options) {\n const f = VexFlowTests.makeFactory(options, 800, 120);\n f.Stave()\n .addClef('treble', 'small')\n .addClef('treble', 'small', '8va')\n .addClef('treble', 'small', '8vb')\n .addClef('alto', 'small')\n .addClef('tenor', 'small')\n .addClef('soprano', 'small')\n .addClef('bass', 'small')\n .addClef('bass', 'small', '8vb')\n .addClef('mezzo-soprano', 'small')\n .addClef('baritone-c', 'small')\n .addClef('baritone-f', 'small')\n .addClef('subbass', 'small')\n .addClef('percussion', 'small')\n .addClef('french', 'small')\n .addEndClef('treble', 'small');\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawSmallEnd(options) {\n const f = VexFlowTests.makeFactory(options, 800, 120);\n f.Stave()\n .addClef('bass', 'small')\n .addEndClef('treble', 'small')\n .addEndClef('treble', 'small', '8va')\n .addEndClef('treble', 'small', '8vb')\n .addEndClef('alto', 'small')\n .addEndClef('tenor', 'small')\n .addEndClef('soprano', 'small')\n .addEndClef('bass', 'small')\n .addEndClef('bass', 'small', '8vb')\n .addEndClef('mezzo-soprano', 'small')\n .addEndClef('baritone-c', 'small')\n .addEndClef('baritone-f', 'small')\n .addEndClef('subbass', 'small')\n .addEndClef('percussion', 'small')\n .addEndClef('french', 'small');\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawClefChange(options) {\n const f = VexFlowTests.makeFactory(options, 800, 180);\n const stave = f.Stave().addClef('treble');\n const notes = [\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }),\n f.ClefNote({ type: 'alto', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'alto' }),\n f.ClefNote({ type: 'tenor', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'tenor' }),\n f.ClefNote({ type: 'soprano', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'soprano' }),\n f.ClefNote({ type: 'bass', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'bass' }),\n f.ClefNote({ type: 'mezzo-soprano', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'mezzo-soprano' }),\n f.ClefNote({ type: 'baritone-c', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-c' }),\n f.ClefNote({ type: 'baritone-f', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-f' }),\n f.ClefNote({ type: 'subbass', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'subbass' }),\n f.ClefNote({ type: 'french', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'french' }),\n f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8vb' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: -1 }),\n f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8va' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: 1 }),\n ];\n const voice = f.Voice({ time: '12/4' }).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(ClefTests);\nexport { ClefTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Formatter Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Stave } from '../src/stave';\nconst CrossBeamTests = {\n Start() {\n QUnit.module('CrossBeam');\n const run = VexFlowTests.runTests;\n const crossStaveTests = [];\n crossStaveTests.push({\n title: 'Single clef mixed 1',\n time: '3/4',\n voices: [\n {\n notes: [{ notestring: 'g4/16, f4/16, a6/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }],\n stavemask: [0, 0, 0, 0, 0, 0, 0],\n beammask: [1, 1, -1, -1, 0, -1, 1],\n clef: 'treble',\n },\n ],\n });\n crossStaveTests.push({\n title: 'Single clef mixed 2',\n time: '3/4',\n voices: [\n {\n notes: [{ notestring: 'g4/16, f6/16, a4/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }],\n stavemask: [0, 0, 0, 0, 0, 0, 0],\n beammask: [1, -1, 1, -1, 0, -1, 1],\n clef: 'treble',\n },\n ],\n });\n crossStaveTests.push({\n title: 'Mixed clef voice middle',\n time: '2/4',\n voices: [\n {\n notes: [{ notestring: 'e#5/4, b4/16/r, b4/16, d5/16., c5/32 ', clef: 'treble' }],\n stavemask: [0, 0, 0, 0, 0],\n beammask: [0, 0, 1, 1, 1],\n clef: 'treble',\n },\n {\n notes: [\n { notestring: 'C3/16, B3/16, C4/16', clef: 'bass' },\n { notestring: 'E#4/16', clef: 'treble' },\n { notestring: 'C4/4', clef: 'bass' },\n ],\n stavemask: [1, 1, 1, 0, 1],\n beammask: [1, 1, 1, -1, 0],\n clef: 'bass',\n },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam up1)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 1, 1, 1, 1],\n stavemask: [0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam up2)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, 1, 1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam up3)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, 1, 1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam up4)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, 1, 1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam down1)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, -1, -1, -1, -1],\n stavemask: [0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam down2)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, -1, -1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam down3)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, -1, -1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam down4)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, -1, -1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam middle1)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, -1, -1, 1, 1],\n stavemask: [0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam middle2)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam middle3)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam middle4)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.forEach((cst) => {\n run(cst.title, crossClef, cst);\n });\n },\n};\nfunction crossClef(options) {\n const f = VexFlowTests.makeFactory(options, 400 + Stave.defaultPadding, 250);\n f.getContext().scale(0.8, 0.8);\n const score = f.EasyScore();\n const system = f.System({\n details: { softmaxFactor: 100 },\n autoWidth: true,\n debugFormatter: false,\n });\n const testdata = options.params;\n const voicedata = testdata.voices;\n const stavemap = [];\n for (let i = 0; i < voicedata.length; ++i) {\n const clef = voicedata[i].clef;\n stavemap.push(system.addStave({ voices: [] }).addClef(clef).addTimeSignature(testdata.time));\n }\n for (let i = 0; i < voicedata.length; ++i) {\n const stavemask = voicedata[i].stavemask;\n let scoreNotes = [];\n const voicenotes = voicedata[i].notes;\n for (let k = 0; k < voicenotes.length; ++k) {\n scoreNotes = scoreNotes.concat(score.notes(voicenotes[k].notestring, { clef: voicenotes[k].clef }));\n }\n const beammask = voicedata[i].beammask;\n let curGroup = [];\n const beamGroups = [];\n for (let j = 0; j < scoreNotes.length; ++j) {\n const note = scoreNotes[j];\n note.setStave(stavemap[stavemask[j]]);\n if (beammask[j] !== 0) {\n note.setStemDirection(beammask[j]);\n curGroup.push(note);\n }\n else {\n if (curGroup.length) {\n beamGroups.push(curGroup);\n curGroup = [];\n }\n }\n }\n if (curGroup.length) {\n beamGroups.push(curGroup);\n }\n beamGroups.forEach((bg) => {\n score.beam(bg);\n });\n if (scoreNotes.length > 0) {\n const voice = score.voice(scoreNotes, { time: testdata.time });\n system.addVoices([voice]);\n }\n }\n f.draw();\n options.assert.ok(true);\n}\nVexFlowTests.register(CrossBeamTests);\nexport { CrossBeamTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Curve Tests\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { CurvePosition } from '../src/curve';\nconst CurveTests = {\n Start() {\n QUnit.module('Curve');\n const run = VexFlowTests.runTests;\n run('Simple Curve', simple);\n run('Rounded Curve', rounded);\n run('Thick Thin Curves', thickThin);\n run('Top Curve', top);\n },\n};\n/**\n * Helper function. Each test case passes in a set of notes and\n * a setupCurves() callback which uses Factory.Curve(...) to build the curves.\n * Curves can be used to indicate slurs (legato articulation).\n */\nfunction createTest(noteGroup1, noteGroup2, setupCurves) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 350, 200);\n const stave = factory.Stave({ y: 50 });\n const score = factory.EasyScore();\n // Use .reduce(concat) to flatten the two StaveNote[] into a single StaveNote[].\n const staveNotes = [\n score.beam(score.notes(...noteGroup1)),\n score.beam(score.notes(...noteGroup2)), // group 2\n ].reduce(concat);\n setupCurves(factory, staveNotes);\n const voices = [score.voice(staveNotes, { time: '4/4' })];\n factory.Formatter().joinVoices(voices).formatToStave(voices, stave);\n factory.draw();\n options.assert.ok('Simple Curve');\n };\n}\nconst simple = createTest(['c4/8, f5, d5, g5', { stem: 'up' }], // beamGroup1\n['d6/8, f5, d5, g5', { stem: 'down' }], // beamGroup2\n(f, notes) => {\n f.Curve({\n from: notes[0],\n to: notes[3],\n options: {\n cps: [\n { x: 0, y: 10 },\n { x: 0, y: 50 },\n ],\n },\n });\n f.Curve({\n from: notes[4],\n to: notes[7],\n options: {\n cps: [\n { x: 0, y: 10 },\n { x: 0, y: 20 },\n ],\n },\n });\n});\nconst rounded = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1\n['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2\n(f, notes) => {\n f.Curve({\n from: notes[0],\n to: notes[3],\n options: {\n x_shift: -10,\n y_shift: 30,\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 50 },\n ],\n },\n });\n f.Curve({\n from: notes[4],\n to: notes[7],\n options: {\n cps: [\n { x: 0, y: 50 },\n { x: 0, y: 50 },\n ],\n },\n });\n});\nconst thickThin = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1\n['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2\n(f, notes) => {\n f.Curve({\n from: notes[0],\n to: notes[3],\n options: {\n thickness: 10,\n x_shift: -10,\n y_shift: 30,\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 50 },\n ],\n },\n });\n f.Curve({\n from: notes[4],\n to: notes[7],\n options: {\n thickness: 0,\n cps: [\n { x: 0, y: 50 },\n { x: 0, y: 50 },\n ],\n },\n });\n});\nconst top = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1\n['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2\n(f, notes) => {\n f.Curve({\n from: notes[0],\n to: notes[7],\n options: {\n x_shift: -3,\n y_shift: 10,\n position: CurvePosition.NEAR_TOP,\n position_end: CurvePosition.NEAR_HEAD,\n cps: [\n { x: 0, y: 20 },\n { x: 40, y: 80 },\n ],\n },\n });\n});\nVexFlowTests.register(CurveTests);\nexport { CurveTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Dot Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Formatter } from '../src/formatter';\nimport { ModifierContext } from '../src/modifiercontext';\nimport { Note } from '../src/note';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { TickContext } from '../src/tickcontext';\nimport { Voice } from '../src/voice';\nconst DotTests = {\n Start() {\n QUnit.module('Dot');\n const run = VexFlowTests.runTests;\n run('Basic', basic);\n run('Multi Voice', multiVoice);\n },\n};\n/**\n * Helper function for the basic test case below.\n */\nfunction showOneNote(note1, stave, ctx, x) {\n const modifierContext = new ModifierContext();\n note1.setStave(stave).addToModifierContext(modifierContext);\n new TickContext().addTickable(note1).preFormat().setX(x);\n note1.setContext(ctx).draw();\n Note.plotMetrics(ctx, note1, 140);\n}\nfunction basic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 1000, 240);\n const stave = new Stave(10, 10, 975);\n stave.setContext(ctx);\n stave.draw();\n const notes = [\n new StaveNote({ keys: ['c/4', 'e/4', 'a/4', 'b/4'], duration: 'w' }),\n new StaveNote({ keys: ['a/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['g/4', 'a/4', 'b/4'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['e/4', 'f/4', 'b/4', 'c/5'], duration: '4' }),\n new StaveNote({\n keys: ['g/4', 'a/4', 'd/5', 'e/5', 'g/5'],\n duration: '4',\n stem_direction: -1,\n }),\n new StaveNote({ keys: ['g/4', 'b/4', 'd/5', 'e/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }),\n new StaveNote({\n keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'],\n duration: '16',\n stem_direction: -1,\n }),\n new StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: 1 }),\n new StaveNote({\n keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'f/5'],\n duration: '16',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5'],\n duration: '16',\n stem_direction: 1,\n }),\n new StaveNote({ keys: ['e/4', 'a/4', 'b/4', 'c/5'], duration: '16', stem_direction: 1 }),\n ];\n Dot.buildAndAttach(notes, { all: true });\n Dot.buildAndAttach([notes[7], notes[8], notes[9]], { all: true });\n Dot.buildAndAttach([notes[8], notes[9]], { all: true });\n const beam = new Beam(notes.slice(notes.length - 2));\n for (let i = 0; i < notes.length; i++) {\n showOneNote(notes[i], stave, ctx, 30 + i * 65);\n const dots = notes[i].getModifiersByType('Dot');\n options.assert.ok(dots.length > 0, 'Note ' + i + ' has dots');\n for (let j = 0; j < dots.length; ++j) {\n options.assert.ok(dots[j].getWidth() > 0, 'Dot ' + j + ' has width set');\n }\n }\n beam.setContext(ctx).draw();\n VexFlowTests.plotLegendForNoteWidth(ctx, 890, 140);\n options.assert.ok(true, 'Full Dot');\n}\nfunction multiVoice(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 750, 300);\n const stave = new Stave(30, 45, 700).setContext(ctx).draw();\n const notes1 = [\n new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }),\n new StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }),\n new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }),\n new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }),\n new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }),\n ];\n Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true });\n Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true });\n Dot.buildAndAttach([notes1[1]], { index: 0 });\n Dot.buildAndAttach([notes1[1]], { index: 0 });\n Dot.buildAndAttach([notes1[1]], { index: 1 });\n Dot.buildAndAttach([notes1[1]], { index: 1 });\n Dot.buildAndAttach([notes1[1]], { index: 2 });\n Dot.buildAndAttach([notes1[1]], { index: 2 });\n Dot.buildAndAttach([notes1[1]], { index: 2 });\n Dot.buildAndAttach([notes1[2], notes1[3], notes1[4]]);\n const notes2 = [\n new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }),\n new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['d/5', 'g/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }),\n new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }),\n ];\n Dot.buildAndAttach(notes2, { all: true });\n Dot.buildAndAttach([notes2[1]], { all: true });\n const voice1 = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes1);\n const voice2 = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes2);\n const formatter = new Formatter().joinVoices([voice1, voice2]);\n formatter.format([voice1, voice2], 700);\n voice1.draw(ctx, stave);\n voice2.draw(ctx, stave);\n notes1.forEach((note) => Note.plotMetrics(ctx, note, 190));\n notes2.forEach((note) => Note.plotMetrics(ctx, note, 20));\n VexFlowTests.plotLegendForNoteWidth(ctx, 620, 220);\n options.assert.ok(true, 'Full Dot');\n}\nVexFlowTests.register(DotTests);\nexport { DotTests };\n","// [VexFlow](https://vexflow.com/) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// EasyScore Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Articulation } from '../src/articulation';\nimport { EasyScore } from '../src/easyscore';\nimport { FretHandFinger } from '../src/frethandfinger';\nimport { Modifier } from '../src/modifier';\nimport { Parenthesis } from '../src/parenthesis';\nimport { StaveConnector } from '../src/staveconnector';\nimport { Stem } from '../src/stem';\nimport { Tuplet } from '../src/tuplet';\nconst EasyScoreTests = {\n Start() {\n QUnit.module('EasyScore');\n QUnit.test('Basic', basic);\n QUnit.test('Accidentals', accidentals);\n QUnit.test('Durations', durations);\n QUnit.test('Chords', chords);\n QUnit.test('Dots', dots);\n QUnit.test('Types', types);\n QUnit.test('Options', options);\n const run = VexFlowTests.runTests;\n run('Draw Basic', drawBasicTest);\n run('Draw Different KeySignature', drawDiffKeysig);\n run('Draw Basic Muted', drawBasicMutedTest);\n run('Draw Basic Harmonic', drawBasicHarmonicTest);\n run('Draw Basic Slash', drawBasicSlashTest);\n run('Draw Ghostnote Basic', drawGhostBasicTest);\n run('Draw Ghostnote Dotted', drawGhostDottedTest);\n run('Draw Parenthesised', drawParenthesisedTest);\n run('Draw Accidentals', drawAccidentalsTest);\n run('Draw Beams', drawBeamsTest);\n run('Draw Tuplets', drawTupletsTest);\n run('Draw Dots', drawDotsTest);\n run('Draw Options', drawOptionsTest);\n run('Draw Fingerings', drawFingeringsTest);\n run('Keys', keys);\n },\n};\n/**\n * Use Function.prototype.bind() to create shortcut methods.\n * This can improve the readability of your EasyScore code.\n */\nfunction createShortcuts(score) {\n return {\n voice: score.voice.bind(score),\n notes: score.notes.bind(score),\n beam: score.beam.bind(score),\n tuplet: score.tuplet.bind(score),\n };\n}\n/**\n * Test case verifies:\n * - all strings in `mustPass` parse correctly\n * - all strings in `mustFail` fail to parse (i.e., Result.success is `false`).\n */\nfunction basic(assert) {\n const score = new EasyScore();\n const mustPass = ['c4', 'c#4', 'c4/r', 'c#5', 'c3/m', 'c3//m', 'c3//h', 'c3/s', 'c3//s', 'c3/g', 'c3//g'];\n const mustFail = ['', '()', '7', '(c#4 e5 g6'];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction accidentals(assert) {\n const score = new EasyScore();\n const mustPass = [\n 'c3',\n 'c##3, cb3',\n 'Cn3',\n 'f3//m',\n '(c##3 cbb3 cn3), cb3',\n 'cbbs7',\n 'cbb7',\n 'cbss7',\n 'cbs7',\n 'cb7',\n 'cdb7',\n 'cd7',\n 'c##7',\n 'c#7',\n 'cn7',\n 'c++-7',\n 'c++7',\n 'c+-7',\n 'c+7',\n '(cbs3 bbs3 dbs3), ebs3',\n '(cd7 cbb3 cn3), cb3',\n 'co7',\n 'ck7',\n ];\n const mustFail = [\n 'ct3',\n 'cdbb7',\n '(cq cbb3 cn3), cb3',\n '(cdd7 cbb3 cn3), cb3',\n 'cbbbs7',\n 'cbbss7',\n 'cbsss7',\n 'csbs7',\n 'cddb7',\n 'cddbb7',\n 'cdd7',\n 'c##b7',\n 'c#bs7',\n 'cnb#7',\n 'c+#+b-d7',\n 'c+--7',\n 'c++--7',\n 'c+++7',\n 'cbk7',\n 'cok7',\n 'cko7',\n 'c#s7',\n ];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction durations(assert) {\n const score = new EasyScore();\n const mustPass = ['c3/4', 'c##3/w, cb3', 'c##3/w, cb3/q', 'c##3/q, cb3/32', '(c##3 cbb3 cn3), cb3'];\n const mustFail = ['Cn3/]', '/', '(cq cbb3 cn3), cb3', '(cdd7 cbb3 cn3), cb3'];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction chords(assert) {\n const score = new EasyScore();\n const mustPass = [\n '(c5)',\n '(c3 e0 g9)',\n '(c##4 cbb4 cn4)/w, (c#5 cb2 a3)/32',\n '(d##4 cbb4 cn4)/w/r, (c#5 cb2 a3)',\n '(c##4 cbb4 cn4)/4, (c#5 cb2 a3)',\n '(c##4 cbb4 cn4)/m, (c#5 cb2 a3)',\n ];\n const mustFail = ['(c)'];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction dots(assert) {\n const score = new EasyScore();\n const mustPass = [\n 'c3/4.',\n 'c##3/w.., cb3',\n 'f##3/s, cb3/q...',\n 'c##3/q, cb3/32',\n '(c##3 cbb3 cn3)., cb3',\n '(c5).',\n '(c##4 cbb4 cn4)/w.., (c#5 cb2 a3)/32',\n ];\n const mustFail = ['.', 'c.#', 'c#4./4'];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction types(assert) {\n const score = new EasyScore();\n const mustPass = ['c3/4/m.', 'c##3//r.., cb3', 'c##3/m.., cb3', 'c##3/r.., cb3', 'd##3/w/s, cb3/q...', 'Fb4'];\n const mustFail = ['c4/q/U', '(c##4, cbb4 cn4)/w.., (c#5 cb2 a3)/32', 'z#3'];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction options(assert) {\n const score = new EasyScore();\n const mustPass = [\n 'c3/4.[foo=\"bar\"]',\n 'c##3/w.., cb3[id=\"blah\"]',\n 'c##3/q, cb3/32',\n '(c##3 cbb3 cn3).[blah=\"bod4o\"], cb3',\n '(c5)[fooooo=\"booo\"]',\n 'c#5[id=\"foobar\"]',\n ];\n const mustFail = ['.[', 'f##3/w[], cb3/q...'];\n mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line));\n}\nfunction drawBasicTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })),\n voice(notes('c#5/h., c5/q', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawDiffKeysig(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })),\n voice(notes('c5/h., c5/q', { stem: 'up' })),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4')\n .addKeySignature('D');\n system\n .addStave({\n voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))],\n })\n .addClef('bass')\n .addTimeSignature('4/4');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawBasicMutedTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q/m, c4/q/m, c4/q/r, c4/q/m', { stem: 'down' })),\n voice(notes('c#5/h/m., c5/q/m', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c#3/q/m, cn3/q/m, bb3/q/m, d##3/q/m', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawBasicHarmonicTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q/h, c4/q/h, c4/q/r, c4/q/h', { stem: 'down' })),\n voice(notes('c#5/h/h., c5/q/h', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c#3/q/h, cn3/q/h, bb3/q/h, d##3/q/h', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawBasicSlashTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q/s, c4/q/s, c4/q/r, c4/q/s', { stem: 'down' })),\n voice(notes('c#5/h/s., c5/q/s', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c#3/q/s, cn3/q/s, bb3/q/s, d##3/q/s', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawGhostBasicTest(options) {\n const f = VexFlowTests.makeFactory(options, 550);\n const score = f.EasyScore();\n const system = f.System();\n system.addStave({\n voices: [\n score.voice([\n ...score.notes('f#5/4, f5, db5, c5', { stem: 'up' }),\n ...score.beam(score.notes('c5/8, d5, fn5, e5', { stem: 'up' })),\n ...score.beam(score.notes('d5, c5', { stem: 'up' })),\n ], { time: '7/4' }),\n score.voice(score.notes('c4/h/g, f4/4, c4/4/g, e4/4, c4/8/g, d##4/8, c4/8, c4/8', { stem: 'down' }), {\n time: '7/4',\n }),\n ],\n });\n f.draw();\n options.assert.expect(0);\n}\nfunction drawGhostDottedTest(options) {\n const f = VexFlowTests.makeFactory(options, 550);\n const score = f.EasyScore();\n const system = f.System();\n system.addStave({\n voices: [\n score.voice([\n ...score.notes('c4/4/g., fbb5/8, d5/4', { stem: 'up' }),\n ...score.beam(score.notes('c5/8, c#5/16, d5/16', { stem: 'up' })),\n ...score.notes('c4/2/g.., fn5/8', { stem: 'up' }),\n ], { time: '8/4' }),\n score.voice([\n ...score.notes('f#4/4', { stem: 'down' }),\n ...score.beam(score.notes('e4/8, d4/8', { stem: 'down' })),\n ...score.notes('c4/4/g.., cb4/16, c#4/h, d4/4', { stem: 'down' }),\n ...score.beam(score.notes('fn4/8, e4/8', { stem: 'down' })),\n ], { time: '8/4' }),\n ],\n });\n f.draw();\n options.assert.expect(0);\n}\nfunction drawParenthesisedTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n const notes1 = notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' });\n Parenthesis.buildAndAttach([notes1[0], notes1[3]]);\n const notes2 = notes('c#5/h., c5/q', { stem: 'down' });\n Parenthesis.buildAndAttach([notes2[0], notes2[1]]);\n system\n .addStave({\n voices: [voice(notes1), voice(notes2)],\n })\n .addClef('treble');\n const notes3 = notes('c#3/q, cn3/q, bb3/q, d##3/q', { stem: 'down' });\n Parenthesis.buildAndAttach(notes3);\n system\n .addStave({\n voices: [voice(notes3)],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawAccidentalsTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(cbbs4 ebb4 gbss4)/q, cbs4/q, cdb4/q/r, cd4/q', { stem: 'down' })),\n voice(notes('c++-5/h., c++5/q', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c+-3/q, c+3/q, bb3/q, d##3/q', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n options.assert.expect(0);\n}\nfunction drawBeamsTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes, beam } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(c4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })),\n voice([...notes('c#5/h.', { stem: 'up' }), ...beam(notes('c5/8, c5/8', { stem: 'up' }))]),\n ],\n })\n .addClef('treble');\n f.draw();\n options.assert.expect(0);\n}\nfunction drawTupletsTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes, tuplet, beam } = createShortcuts(score);\n // Voice 1, with stems pointed down.\n const v1_tuplet = tuplet(notes('(c4 e4 g4)/q, cbb4/q, c4/q', { stem: 'down' }), {\n location: Tuplet.LOCATION_BOTTOM,\n });\n const v1_halfNote = notes('c4/h', { stem: 'down' });\n const v1 = voice([...v1_tuplet, ...v1_halfNote]);\n // Voice 2, with stems pointed up.\n const v2_halfNote = notes('c#5/h.', { stem: 'up' });\n const v2_tuplet = tuplet(beam(notes('cb5/8, cn5/8, c5/8', { stem: 'up' })));\n const v2 = voice([...v2_halfNote, ...v2_tuplet]);\n system.addStave({ voices: [v1, v2] }).addClef('treble');\n f.draw();\n options.assert.expect(0);\n}\nfunction drawDotsTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [voice(notes('(c4 e4 g4)/8., (c4 e4 g4)/8.., (c4 e4 g4)/8..., (c4 e4 g4)/8...., (c4 e4 g4)/16...'))],\n })\n .addClef('treble');\n f.draw();\n options.assert.expect(0);\n}\nfunction drawOptionsTest(options) {\n const f = VexFlowTests.makeFactory(options, 500, 200);\n const score = f.EasyScore();\n const system = f.System();\n const notes = score.notes('B4/h[id=\"foobar\", class=\"red,bold\", stem=\"up\", articulations=\"staccato.below,tenuto\"], B4/q[articulations=\"accent.above\"], B4/q[stem=\"down\"]');\n system.addStave({ voices: [score.voice(notes)] });\n f.draw();\n const note0 = notes[0];\n const note1 = notes[1];\n const note0_modifier0 = note0.getModifiers()[0];\n const note0_modifier1 = note0.getModifiers()[1];\n const note1_modifier0 = note1.getModifiers()[0];\n options.assert.equal(note0.getAttribute('id'), 'foobar');\n options.assert.ok(note0.hasClass('red'));\n options.assert.ok(note0.hasClass('bold'));\n options.assert.equal(note0_modifier0.getCategory(), Articulation.CATEGORY);\n options.assert.equal(note0_modifier0.type, 'a.');\n options.assert.equal(note0_modifier0.getPosition(), Modifier.Position.BELOW);\n options.assert.equal(note0_modifier1.getCategory(), Articulation.CATEGORY);\n options.assert.equal(note0_modifier1.type, 'a-');\n options.assert.equal(note0_modifier1.getPosition(), Modifier.Position.ABOVE);\n options.assert.equal(note0.getStemDirection(), Stem.UP);\n options.assert.equal(note1_modifier0.getCategory(), Articulation.CATEGORY);\n options.assert.equal(note1_modifier0.type, 'a>');\n options.assert.equal(note1_modifier0.getPosition(), Modifier.Position.ABOVE);\n options.assert.equal(notes[2].getStemDirection(), Stem.DOWN);\n}\nfunction drawFingeringsTest(options) {\n const f = VexFlowTests.makeFactory(options, 500, 200);\n const score = f.EasyScore();\n const system = f.System();\n const notes = score.notes('C4/q[fingerings=\"1\"], E4[fingerings=\"3.above\"], G4[fingerings=\"5.below\"], (C4 E4 G4)[fingerings=\"1,3,5\"]');\n system.addStave({ voices: [score.voice(notes)] });\n f.draw();\n const note0_modifier0 = notes[0].getModifiers()[0];\n options.assert.equal(note0_modifier0.getCategory(), FretHandFinger.CATEGORY);\n options.assert.equal(note0_modifier0.getFretHandFinger(), '1');\n options.assert.equal(note0_modifier0.getPosition(), Modifier.Position.LEFT);\n const note1_modifier0 = notes[1].getModifiers()[0];\n options.assert.equal(note1_modifier0.getCategory(), FretHandFinger.CATEGORY);\n options.assert.equal(note1_modifier0.getFretHandFinger(), '3');\n options.assert.equal(note1_modifier0.getPosition(), Modifier.Position.ABOVE);\n const note2_modifier0 = notes[2].getModifiers()[0];\n options.assert.equal(note2_modifier0.getCategory(), FretHandFinger.CATEGORY);\n options.assert.equal(note2_modifier0.getFretHandFinger(), '5');\n options.assert.equal(note2_modifier0.getPosition(), Modifier.Position.BELOW);\n const note3_modifiers = notes[3].getModifiers();\n const note3_modifier0 = note3_modifiers[0];\n const note3_modifier1 = note3_modifiers[1];\n const note3_modifier2 = note3_modifiers[2];\n options.assert.equal(note3_modifier0.getCategory(), FretHandFinger.CATEGORY);\n options.assert.equal(note3_modifier0.getFretHandFinger(), '1');\n options.assert.equal(note3_modifier0.getPosition(), Modifier.Position.LEFT);\n options.assert.equal(note3_modifier1.getCategory(), FretHandFinger.CATEGORY);\n options.assert.equal(note3_modifier1.getFretHandFinger(), '3');\n options.assert.equal(note3_modifier1.getPosition(), Modifier.Position.LEFT);\n options.assert.equal(note3_modifier2.getCategory(), FretHandFinger.CATEGORY);\n options.assert.equal(note3_modifier2.getFretHandFinger(), '5');\n options.assert.equal(note3_modifier2.getPosition(), Modifier.Position.LEFT);\n}\nfunction keys(options) {\n const f = VexFlowTests.makeFactory(options, 700, 200);\n const score = f.EasyScore();\n const system = f.System();\n const notes = score.notes('c#3/q, c##3, cb3, cbb3, cn3, c3, cbbs3, cbss3, cbs3, cdb3, cd3, c++-3, c++3, c+-3, c+3, co3, ck3', { clef: 'bass' });\n system.addStave({ voices: [f.Voice().setStrict(false).addTickables(notes)] }).addClef('bass');\n f.draw();\n options.assert.equal(notes[0].keys, 'c#/3');\n options.assert.equal(notes[1].keys, 'c##/3');\n options.assert.equal(notes[2].keys, 'cb/3');\n options.assert.equal(notes[3].keys, 'cbb/3');\n options.assert.equal(notes[4].keys, 'cn/3');\n for (let i = 5; i < notes.length; i++) {\n options.assert.equal(notes[i].keys, 'c/3');\n }\n}\nVexFlowTests.register(EasyScoreTests);\nexport { EasyScoreTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Factory Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Factory } from '../src/factory';\nimport { Barline } from '../src/stavebarline';\nconst FactoryTests = {\n Start() {\n QUnit.module('Factory');\n QUnit.test('Defaults', defaults);\n const run = VexFlowTests.runTests;\n run('Draw', draw);\n run('Draw Tab (repeat barlines must be aligned)', drawTab);\n },\n};\nfunction defaults(assert) {\n // Throws RuntimeError: 'HTML DOM element not set in Factory'\n assert.throws(() => new Factory({ renderer: { elementId: '', width: 700, height: 500 } }), 'Empty string for elementId throws an exception.');\n const factory = new Factory({\n renderer: { elementId: null, width: 700, height: 500 },\n });\n // eslint-disable-next-line\n // @ts-ignore access a protected member for testing purposes.\n const options = factory.options;\n assert.equal(options.renderer.width, 700);\n assert.equal(options.renderer.height, 500);\n assert.equal(options.renderer.elementId, null);\n assert.equal(options.stave.space, 10);\n}\nfunction draw(options) {\n const f = Factory.newFromElementId(options.elementId);\n f.Stave().setClef('treble');\n f.draw();\n options.assert.expect(0);\n}\nfunction drawTab(options) {\n const factory = VexFlowTests.makeFactory(options, 500, 400);\n const system = factory.System({ width: 500 });\n const stave = factory.Stave().setClef('treble').setKeySignature('C#').setBegBarType(Barline.type.REPEAT_BEGIN);\n const voices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])];\n system.addStave({ stave, voices });\n const tabStave = factory.TabStave().setClef('tab').setBegBarType(Barline.type.REPEAT_BEGIN);\n const tabVoices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])];\n system.addStave({ stave: tabStave, voices: tabVoices });\n factory.draw();\n options.assert.equal(stave.getModifiers()[0].getX(), tabStave.getModifiers()[0].getX());\n options.assert.expect(1);\n}\nVexFlowTests.register(FactoryTests);\nexport { FactoryTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Font Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Bend } from '../src/bend';\nimport { CanvasContext } from '../src/canvascontext';\nimport { Element } from '../src/element';\nimport { Flow } from '../src/flow';\nimport { Font, FontStyle, FontWeight } from '../src/font';\nimport { PedalMarking } from '../src/pedalmarking';\nimport { StaveNote } from '../src/stavenote';\nimport { TextBracket } from '../src/textbracket';\nimport { TextNote } from '../src/textnote';\nimport { Voice } from '../src/voice';\nconst FontTests = {\n Start() {\n QUnit.module('Font');\n QUnit.test('setFont', setFont);\n QUnit.test('Parsing', fontParsing);\n QUnit.test('Sizes', fontSizes);\n const run = VexFlowTests.runTests;\n run('Set Text Font to Georgia', setTextFontToGeorgia);\n run('Set Music Font to Petaluma', setMusicFontToPetaluma);\n },\n};\n/**\n * Test out the setFont method in various classes.\n */\nfunction setFont(assert) {\n // Create a CanvasCntext and call setFont on it.\n const canvas = document.createElement('canvas');\n canvas.width = 800;\n canvas.height = 400;\n // Set the font and get the font to verify that it matches.\n // NOTE: Safari has a bug where it does not return the font-weight!\n // https://github.com/0xfe/vexflow/issues/1240#issuecomment-986504088\n const ctx = new CanvasContext(canvas.getContext('2d'));\n ctx.setFont('PetalumaScript', '100px', 'normal', 'italic');\n assert.equal(ctx.font, 'italic 100px PetalumaScript');\n const voice = new Voice();\n // Many elements do not override the default Element.TEXT_FONT.\n assert.propEqual(voice.fontInfo, Element.TEXT_FONT);\n voice.setFont('bold 32pt Arial');\n const fontInfo = voice.fontInfo;\n assert.equal(fontInfo === null || fontInfo === void 0 ? void 0 : fontInfo.size, '32pt');\n const flat = new Accidental('b');\n // eslint-disable-next-line\n // @ts-ignore access a protected member for testing purposes.\n assert.equal(flat.textFont, undefined); // The internal instance variable .textFont is undefined by default.\n // Add italic to the default font as defined in Element.TEXT_FONT (since Accidental does not override TEXT_FONT).\n flat.setFont(undefined, undefined, undefined, FontStyle.ITALIC);\n assert.equal(flat.getFont(), 'italic 10pt Arial, sans-serif');\n // Anything that is not set will be reset to the defaults.\n flat.setFont(undefined, undefined, FontWeight.BOLD, undefined);\n assert.equal(flat.getFont(), 'bold 10pt Arial, sans-serif');\n flat.setFont(undefined, undefined, FontWeight.BOLD, FontStyle.ITALIC);\n assert.equal(flat.getFont(), 'italic bold 10pt Arial, sans-serif');\n flat.setFont(undefined, undefined, FontWeight.BOLD, 'oblique');\n assert.equal(flat.getFont(), 'oblique bold 10pt Arial, sans-serif');\n // '' is equivalent to 'normal'. Neither will be included in the CSS font string.\n flat.setFont(undefined, undefined, 'normal', '');\n assert.equal(flat.getFont(), '10pt Arial, sans-serif');\n}\nfunction fontParsing(assert) {\n const b = new Bend('1/2', true);\n const bFont = b.fontInfo;\n // Check the default font.\n assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.family, Font.SANS_SERIF);\n assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.size, Font.SIZE);\n assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.weight, FontWeight.NORMAL);\n assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.style, FontStyle.NORMAL);\n const f1 = 'Roboto Slab, serif';\n const t = new TextNote({ duration: '4', font: { family: f1 } });\n assert.equal(f1, t.fontInfo.family);\n const n1 = new StaveNote({ keys: ['e/5'], duration: '4' });\n const n2 = new StaveNote({ keys: ['c/5'], duration: '4' });\n const tb = new TextBracket({ start: n1, stop: n2 });\n const f2 = tb.fontInfo;\n assert.equal(f2 === null || f2 === void 0 ? void 0 : f2.size, 15);\n assert.equal(f2 === null || f2 === void 0 ? void 0 : f2.style, FontStyle.ITALIC);\n // The line-height /3 is currently ignored.\n const f3 = Font.fromCSSString(`bold 1.5em/3 \"Lucida Sans Typewriter\", \"Lucida Console\", Consolas, monospace`);\n const f3SizeInPx = Font.convertSizeToPixelValue(f3.size);\n assert.equal(f3SizeInPx, 24);\n}\nfunction fontSizes(assert) {\n {\n const size = '17px';\n const sizeInEm = Font.convertSizeToPixelValue(size) / Font.scaleToPxFrom.em;\n assert.equal(sizeInEm, 1.0625);\n }\n {\n const size = '2em';\n const sizeInPx = Font.convertSizeToPixelValue(size);\n assert.equal(sizeInPx, 32);\n }\n {\n const pedal = new PedalMarking([]);\n assert.equal(pedal.getFont(), 'italic bold 12pt Times New Roman, serif');\n assert.equal(pedal.fontSizeInPoints, 12);\n assert.equal(pedal.fontSizeInPixels, 16);\n const doubledSizePx = pedal.fontSizeInPixels * 2; // Double the font size.\n assert.equal(doubledSizePx, 32);\n const doubledSizePt = Font.scaleSize(pedal.fontSizeInPoints, 2); // Double the font size.\n assert.equal(doubledSizePt, 24);\n assert.equal(Font.scaleSize('1.5em', 3), '4.5em');\n }\n}\nfunction setTextFontToGeorgia(options) {\n const factory = VexFlowTests.makeFactory(options, 400, 200);\n const stave = factory.Stave({ y: 40 });\n const score = factory.EasyScore();\n const voice1 = score.voice([\n factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }),\n factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }),\n factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }),\n ]);\n const defaultFont = TextNote.TEXT_FONT;\n // Set the default before we instantiate TextNote objects with the factory.\n TextNote.TEXT_FONT = {\n family: 'Georgia, Courier New, serif',\n size: 14,\n weight: 'bold',\n style: 'italic',\n };\n const voice2 = score.voice([\n factory\n .TextNote({ text: 'Here are some fun lyrics...', duration: 'w' })\n .setJustification(TextNote.Justification.LEFT),\n ]);\n const formatter = factory.Formatter();\n formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n factory.draw();\n // Restore the previous default, or else it will affect the rest of the tests.\n TextNote.TEXT_FONT = defaultFont;\n options.assert.ok(true);\n}\nfunction setMusicFontToPetaluma(options) {\n Flow.setMusicFont('Petaluma');\n const factory = VexFlowTests.makeFactory(options, 400, 200);\n const stave = factory.Stave({ y: 40 });\n const score = factory.EasyScore();\n const voice = score.voice([\n factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }),\n factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }),\n factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }),\n ]);\n const formatter = factory.Formatter();\n formatter.joinVoices([voice]).formatToStave([voice], stave);\n factory.draw();\n options.assert.ok(true);\n}\nVexFlowTests.register(FontTests);\nexport { FontTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Formatter Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Annotation, AnnotationVerticalJustify } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Beam } from '../src/beam';\nimport { Bend } from '../src/bend';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Font, FontWeight } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { FretHandFinger } from '../src/frethandfinger';\nimport { ModifierPosition } from '../src/modifier';\nimport { Note } from '../src/note';\nimport { Registry } from '../src/registry';\nimport { Stave } from '../src/stave';\nimport { StaveConnector } from '../src/staveconnector';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { StringNumber } from '../src/stringnumber';\nimport { Tables } from '../src/tables';\nimport { Tuplet } from '../src/tuplet';\nimport { Voice } from '../src/voice';\nimport { MockTickable } from './mocks';\nconst FormatterTests = {\n Start() {\n QUnit.module('Formatter');\n QUnit.test('TickContext Building', buildTickContexts);\n const run = VexFlowTests.runTests;\n run('Penultimate Note Padding', penultimateNote);\n run('Whitespace and justify', rightJustify);\n run('Notehead padding', noteHeadPadding);\n run('Justification and alignment with accidentals', accidentalJustification);\n run('Long measure taking full space', longMeasureProblems);\n run('Vertical alignment - few unaligned beats', unalignedNoteDurations1);\n run('Vertical alignment - many unaligned beats', unalignedNoteDurations2, { globalSoftmax: false });\n run('Vertical alignment - many unaligned beats (global softmax)', unalignedNoteDurations2, { globalSoftmax: true });\n run('Vertical alignment - many mixed elements', alignedMixedElements, { globalSoftmax: true });\n run('StaveNote - Justification', justifyStaveNotes);\n run('Notes with Tab', notesWithTab);\n run('Multiple Staves - Justified', multiStaves, { debug: true });\n run('Softmax', softMax);\n run('Mixtime', mixTime);\n run('Tight', tightNotes1);\n run('Tight 2', tightNotes2);\n run('Annotations', annotations);\n run('Proportional Formatting - No Tuning', proportional, { debug: true, iterations: 0 });\n run('Proportional Formatting - No Justification', proportional, { justify: false, debug: true, iterations: 0 });\n run('Proportional Formatting (20 iterations)', proportional, { debug: true, iterations: 20, alpha: 0.5 });\n },\n};\n/** Calculate the glyph's width in the current music font. */\n// How is this different from Glyph.getWidth()? The numbers don't match up.\nfunction getGlyphWidth(glyphName) {\n // `38` seems to be the `font_scale` specified in many classes, such as\n // Accidental, Articulation, Ornament, Strokes. Does this mean `38pt`???\n //\n // However, tables.ts specifies:\n // NOTATION_FONT_SCALE: 39,\n // TABLATURE_FONT_SCALE: 39,\n const musicFont = Tables.currentMusicFont();\n const glyph = musicFont.getGlyphs()[glyphName];\n const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution();\n return widthInEm * 38 * Font.scaleToPxFrom.pt;\n}\nfunction buildTickContexts(assert) {\n function createTickable(beat) {\n return new MockTickable().setTicks(beat);\n }\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n const tickables1 = [\n createTickable(BEAT).setWidth(10),\n createTickable(BEAT * 2).setWidth(20),\n createTickable(BEAT).setWidth(30),\n ];\n const tickables2 = [\n createTickable(BEAT * 2).setWidth(10),\n createTickable(BEAT).setWidth(20),\n createTickable(BEAT).setWidth(30),\n ];\n const voice1 = new Voice(Flow.TIME4_4);\n const voice2 = new Voice(Flow.TIME4_4);\n voice1.addTickables(tickables1);\n voice2.addTickables(tickables2);\n const formatter = new Formatter();\n const tContexts = formatter.createTickContexts([voice1, voice2]);\n assert.equal(tContexts.list.length, 4, 'Voices should have four tick contexts');\n assert.throws(() => formatter.getMinTotalWidth(), /NoMinTotalWidth/, 'Expected to throw exception');\n assert.ok(formatter.preCalculateMinTotalWidth([voice1, voice2]), 'Successfully runs preCalculateMinTotalWidth');\n assert.equal(formatter.getMinTotalWidth(), 88, 'Get minimum total width without passing voices');\n formatter.preFormat();\n assert.equal(formatter.getMinTotalWidth(), 88, 'Minimum total width');\n assert.equal(tickables1[0].getX(), tickables2[0].getX(), 'First notes of both voices have the same X');\n assert.equal(tickables1[2].getX(), tickables2[2].getX(), 'Last notes of both voices have the same X');\n assert.ok(tickables1[1].getX() < tickables2[1].getX(), 'Second note of voice 2 is to the right of the second note of voice 1');\n}\nfunction rightJustify(options) {\n const f = VexFlowTests.makeFactory(options, 1200, 150);\n const getTickables = (time, n, duration, duration2) => {\n const tickar = [];\n let i = 0;\n for (i = 0; i < n; ++i) {\n const dd = i === n - 1 ? duration2 : duration;\n tickar.push(new StaveNote({ keys: ['f/4'], duration: dd }));\n }\n return new Voice(time).addTickables(tickar);\n };\n const renderTest = (time, n, duration, duration2, x, width) => {\n const formatter = f.Formatter();\n const stave = f.Stave({ x, y: 20, width });\n // stave.addClef('treble').addTimeSignature('4/4');\n const voice = getTickables(time, n, duration, duration2);\n formatter.joinVoices([voice]).formatToStave([voice], stave);\n stave.draw();\n voice.draw(f.getContext(), stave);\n };\n renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '2', 10, 300);\n renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 1, 'w', 'w', 310, 300);\n renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '4', 610, 300);\n renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 6, '8', '8', 910, 300);\n options.assert.ok(true);\n}\nfunction penultimateNote(options) {\n const f = VexFlowTests.makeFactory(options, 500, 550);\n const score = f.EasyScore();\n const staffWidth = 310;\n let system = undefined;\n let voices = [];\n let notes = [];\n let note = undefined;\n let stave = undefined;\n let y = 10;\n const draw = (softmax) => {\n system = f.System({\n width: staffWidth,\n y,\n formatOptions: { align_rests: true },\n details: { softmaxFactor: softmax },\n });\n notes = [];\n voices = [];\n note = score.notes('C4/8/r', { clef: 'bass' })[0];\n notes.push(note);\n note = score.notes('A3/8', { stem: 'up', clef: 'bass' })[0];\n notes.push(note);\n note = score.notes('C4/4', { stem: 'up', clef: 'bass' })[0];\n notes.push(note);\n voices.push(score.voice(notes).setMode(2));\n notes = [];\n note = score.notes('( F3 A3 )/4', { stem: 'down', clef: 'bass' })[0];\n notes.push(note);\n note = score.notes('B4/4/r', {})[0];\n notes.push(note);\n voices.push(score.voice(notes).setMode(2));\n notes = [];\n stave = system.addStave({ voices: voices });\n stave.addClef('bass');\n stave.addTimeSignature('2/4');\n voices = [];\n f.draw();\n f.getContext().fillText(`softmax: ${softmax.toString()}`, staffWidth + 20, y + 50);\n y += 100;\n };\n draw(15);\n draw(10);\n draw(5);\n draw(2);\n draw(1);\n options.assert.ok(true);\n}\nfunction noteHeadPadding(options) {\n const registry = new Registry();\n Registry.enableDefaultRegistry(registry);\n const f = VexFlowTests.makeFactory(options, 600, 300);\n const score = f.EasyScore();\n score.set({ time: '9/8' });\n const notes1 = score.notes('(d5 f5)/8,(c5 e5)/8,(d5 f5)/8,(c5 e5)/2.');\n const beams = [new Beam(notes1.slice(0, 3), true)];\n const voice1 = new Voice().setMode(Voice.Mode.SOFT);\n const notes2 = score.notes('(g4 an4)/2.,(g4 a4)/4.', { clef: 'treble' });\n const voice2 = new Voice().setMode(Voice.Mode.SOFT);\n voice2.addTickables(notes2);\n voice1.addTickables(notes1);\n const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]);\n const width = formatter.preCalculateMinTotalWidth([voice1, voice2]);\n formatter.format([voice1, voice2], width);\n const staveWidth = width + Stave.defaultPadding;\n const stave1 = f.Stave({ y: 50, width: staveWidth });\n const stave2 = f.Stave({ y: 150, width: staveWidth });\n stave1.draw();\n stave2.draw();\n voice1.draw(f.getContext(), stave1);\n voice2.draw(f.getContext(), stave2);\n beams.forEach((b) => b.setContext(f.getContext()).draw());\n options.assert.ok(true);\n}\nfunction longMeasureProblems(options) {\n const registry = new Registry();\n Registry.enableDefaultRegistry(registry);\n const f = VexFlowTests.makeFactory(options, 1500, 300);\n const score = f.EasyScore();\n score.set({ time: '4/4' });\n const notes1 = score.notes('b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/2,b4/8,b4/8');\n const voice1 = new Voice().setMode(Voice.Mode.SOFT);\n const notes2 = score.notes('d3/4,(ab3 f4)/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d4/4,d4/2,d4/4', { clef: 'bass' });\n const voice2 = new Voice().setMode(Voice.Mode.SOFT);\n voice2.addTickables(notes2);\n voice1.addTickables(notes1);\n const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]);\n const width = formatter.preCalculateMinTotalWidth([voice1, voice2]);\n formatter.format([voice1, voice2], width);\n const stave1 = f.Stave({ y: 50, width: width + Stave.defaultPadding });\n const stave2 = f.Stave({ y: 200, width: width + Stave.defaultPadding });\n stave1.draw();\n stave2.draw();\n voice1.draw(f.getContext(), stave1);\n voice2.draw(f.getContext(), stave2);\n options.assert.ok(true);\n}\nfunction accidentalJustification(options) {\n const f = VexFlowTests.makeFactory(options, 600, 300);\n const score = f.EasyScore();\n const notes11 = score.notes('a4/2, a4/4, a4/8, ab4/16, an4/16');\n const voice11 = score.voice(notes11, { time: '4/4' });\n const notes21 = score.notes('c4/2, d4/8, d4/8, e4/8, e4/8');\n const voice21 = score.voice(notes21, { time: '4/4' });\n let beams = Beam.generateBeams(notes11.slice(2));\n beams = beams.concat(beams, Beam.generateBeams(notes21.slice(1, 3)));\n beams = beams.concat(Beam.generateBeams(notes21.slice(3)));\n const formatter = f.Formatter({}).joinVoices([voice11]).joinVoices([voice21]);\n const width = formatter.preCalculateMinTotalWidth([voice11, voice21]);\n const stave11 = f.Stave({ y: 20, width: width + Stave.defaultPadding });\n const stave21 = f.Stave({ y: 130, width: width + Stave.defaultPadding });\n formatter.format([voice11, voice21], width);\n const ctx = f.getContext();\n stave11.setContext(ctx).draw();\n stave21.setContext(ctx).draw();\n voice11.draw(ctx, stave11);\n voice21.draw(ctx, stave21);\n beams.forEach((b) => b.setContext(ctx).draw());\n options.assert.ok(true);\n}\nfunction unalignedNoteDurations1(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const score = f.EasyScore();\n const notes11 = [\n new StaveNote({ keys: ['a/4'], duration: '8' }),\n new StaveNote({ keys: ['b/4'], duration: '4' }),\n new StaveNote({ keys: ['b/4'], duration: '8' }),\n ];\n const notes21 = [\n new StaveNote({ keys: ['a/4'], duration: '16' }),\n new StaveNote({ keys: ['b/4.'], duration: '4' }),\n new StaveNote({ keys: ['a/4'], duration: '8d' }),\n ];\n Dot.buildAndAttach([notes21[2]], { all: true });\n const ctx = f.getContext();\n const voice11 = score.voice(notes11, { time: '2/4' }).setMode(Voice.Mode.SOFT);\n const voice21 = score.voice(notes21, { time: '2/4' }).setMode(Voice.Mode.SOFT);\n const beams21 = Beam.generateBeams(notes21);\n const beams11 = Beam.generateBeams(notes11);\n const formatter = new Formatter();\n formatter.joinVoices([voice11]);\n formatter.joinVoices([voice21]);\n const width = formatter.preCalculateMinTotalWidth([voice11, voice21]);\n const stave11 = f.Stave({ y: 20, width: width + Stave.defaultPadding });\n const stave21 = f.Stave({ y: 130, width: width + Stave.defaultPadding });\n formatter.format([voice11, voice21], width);\n stave11.setContext(ctx).draw();\n stave21.setContext(ctx).draw();\n voice11.draw(ctx, stave11);\n voice21.draw(ctx, stave21);\n beams21.forEach((b) => b.setContext(ctx).draw());\n beams11.forEach((b) => b.setContext(ctx).draw());\n options.assert.ok(voice11.getTickables()[1].getX() > voice21.getTickables()[1].getX());\n}\nfunction unalignedNoteDurations2(options) {\n const notes1 = [\n new StaveNote({ keys: ['b/4'], duration: '8r' }),\n new StaveNote({ keys: ['g/4'], duration: '16' }),\n new StaveNote({ keys: ['c/5'], duration: '16' }),\n new StaveNote({ keys: ['e/5'], duration: '16' }),\n new StaveNote({ keys: ['g/4'], duration: '16' }),\n new StaveNote({ keys: ['c/5'], duration: '16' }),\n new StaveNote({ keys: ['e/5'], duration: '16' }),\n new StaveNote({ keys: ['b/4'], duration: '8r' }),\n new StaveNote({ keys: ['g/4'], duration: '16' }),\n new StaveNote({ keys: ['c/5'], duration: '16' }),\n new StaveNote({ keys: ['e/5'], duration: '16' }),\n new StaveNote({ keys: ['g/4'], duration: '16' }),\n new StaveNote({ keys: ['c/5'], duration: '16' }),\n new StaveNote({ keys: ['e/5'], duration: '16' }),\n ];\n const notes2 = [\n new StaveNote({ keys: ['a/4'], duration: '16r' }),\n new StaveNote({ keys: ['e/4.'], duration: '8d' }),\n new StaveNote({ keys: ['e/4'], duration: '4' }),\n new StaveNote({ keys: ['a/4'], duration: '16r' }),\n new StaveNote({ keys: ['e/4.'], duration: '8d' }),\n new StaveNote({ keys: ['e/4'], duration: '4' }),\n ];\n const f = VexFlowTests.makeFactory(options, 750, 280);\n const context = f.getContext();\n const voice1 = new Voice({ num_beats: 4, beat_value: 4 });\n voice1.addTickables(notes1);\n const voice2 = new Voice({ num_beats: 4, beat_value: 4 });\n voice2.addTickables(notes2);\n const formatter = new Formatter({ globalSoftmax: options.params.globalSoftmax });\n formatter.joinVoices([voice1]);\n formatter.joinVoices([voice2]);\n const width = formatter.preCalculateMinTotalWidth([voice1, voice2]);\n formatter.format([voice1, voice2], width);\n const stave1 = new Stave(10, 40, width + Stave.defaultPadding);\n const stave2 = new Stave(10, 100, width + Stave.defaultPadding);\n stave1.setContext(context).draw();\n stave2.setContext(context).draw();\n voice1.draw(context, stave1);\n voice2.draw(context, stave2);\n options.assert.ok(voice1.getTickables()[1].getX() > voice2.getTickables()[1].getX());\n}\nfunction alignedMixedElements(options) {\n const f = VexFlowTests.makeFactory(options, 800, 500);\n const context = f.getContext();\n const stave = new Stave(10, 200, 400);\n const stave2 = new Stave(410, 200, 400);\n const notes = [\n new StaveNote({ keys: ['c/5'], duration: '8' })\n .addModifier(new Accidental('##'), 0)\n .addModifier(new FretHandFinger('4').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new StringNumber('3').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a>').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a^').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('am').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(new Annotation('xxxx').setVerticalJustification(AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0)\n .addModifier(new Annotation('ttt').setVerticalJustification(AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0),\n new StaveNote({ keys: ['c/5'], duration: '8', stem_direction: Stem.DOWN })\n .addModifier(new StringNumber('3').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a>').setPosition(ModifierPosition.BELOW), 0),\n new StaveNote({ keys: ['c/5'], duration: '8' }),\n ];\n const notes2 = [\n new StaveNote({ keys: ['c/5'], duration: '8' })\n .addModifier(new StringNumber('3').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n new StaveNote({ keys: ['c/5'], duration: '8', stem_direction: Stem.DOWN })\n .addModifier(new FretHandFinger('4').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new StringNumber('3').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a>').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a^').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('am').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.TOP), 0)\n .addModifier(new Annotation('xxxx').setVerticalJustification(AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0)\n .addModifier(new Annotation('ttt').setVerticalJustification(AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0),\n new StaveNote({ keys: ['c/5'], duration: '8' }),\n ];\n const tuplet = new Tuplet(notes).setTupletLocation(-1);\n const tuplet2 = new Tuplet(notes2).setTupletLocation(1);\n Formatter.FormatAndDraw(context, stave, notes);\n Formatter.FormatAndDraw(context, stave2, notes2);\n stave.setContext(context).draw();\n stave2.setContext(context).draw();\n tuplet.setContext(context).draw();\n tuplet2.setContext(context).draw();\n options.assert.ok(true);\n}\nfunction justifyStaveNotes(options) {\n const f = VexFlowTests.makeFactory(options, 520, 280);\n const ctx = f.getContext();\n const score = f.EasyScore();\n let y = 30;\n function justifyToWidth(width) {\n f.Stave({ y: y }).addClef('treble');\n const voices = [\n score.voice(score.notes('(cbb4 en4 a4)/2, (d4 e4 f4)/8, (d4 f4 a4)/8, (cn4 f#4 a4)/4', { stem: 'down' })),\n score.voice(score.notes('(bb4 e#5 a5)/4, (d5 e5 f5)/2, (c##5 fb5 a5)/4', { stem: 'up' })),\n ];\n f.Formatter()\n .joinVoices(voices)\n .format(voices, width - (Stave.defaultPadding + getGlyphWidth('gClef')));\n // Show the the width of notes via a horizontal line with red, green, yellow, blue, gray indicators.\n voices[0].getTickables().forEach((note) => Note.plotMetrics(ctx, note, y + 140)); // Bottom line.\n voices[1].getTickables().forEach((note) => Note.plotMetrics(ctx, note, y - 20)); // Top Line\n y += 210;\n }\n justifyToWidth(520);\n f.draw();\n options.assert.ok(true);\n}\nfunction notesWithTab(options) {\n const f = VexFlowTests.makeFactory(options, 420, 580);\n const score = f.EasyScore();\n let y = 10;\n function justifyToWidth(width) {\n const stave = f.Stave({ y: y }).addClef('treble');\n const voice = score.voice(score.notes('d#4/2, (c4 d4)/8, d4/8, (c#4 e4 a4)/4', { stem: 'up' }));\n y += 100;\n f.TabStave({ y: y }).addTabGlyph().setNoteStartX(stave.getNoteStartX());\n const tabVoice = score.voice([\n f.TabNote({ positions: [{ str: 3, fret: 6 }], duration: '2' }).addModifier(new Bend('Full'), 0),\n f\n .TabNote({\n positions: [\n { str: 2, fret: 3 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n })\n .addModifier(new Bend('Unison'), 1),\n f.TabNote({ positions: [{ str: 3, fret: 7 }], duration: '8' }),\n f.TabNote({\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 7 },\n { str: 2, fret: 5 },\n ],\n duration: '4',\n }),\n ]);\n f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).format([voice, tabVoice], width);\n y += 150;\n }\n justifyToWidth(0);\n justifyToWidth(300);\n f.draw();\n options.assert.ok(true);\n}\nfunction multiStaves(options) {\n const f = VexFlowTests.makeFactory(options, 600, 400);\n const ctx = f.getContext();\n const score = f.EasyScore();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Draw 3 Staves (one measure each).\n const notes11 = score.notes('f4/4, d4/8, g4/4, eb4/8');\n const notes21 = score.notes('d4/8, d4, d4, d4, e4, eb4');\n const notes31 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' });\n let voices = [\n score.voice(notes11, { time: '6/8' }),\n score.voice(notes21, { time: '6/8' }),\n score.voice(notes31, { time: '6/8' }),\n ];\n let formatter = f.Formatter();\n voices.forEach((v) => formatter.joinVoices([v]));\n let width = formatter.preCalculateMinTotalWidth(voices);\n formatter.format(voices, width);\n let beams = [\n new Beam(notes21.slice(0, 3), true),\n new Beam(notes21.slice(3, 6), true),\n new Beam(notes31.slice(0, 3), true),\n new Beam(notes31.slice(3, 6), true),\n ];\n const staveYs = [20, 130, 250];\n let staveWidth = width + getGlyphWidth('gClef') + getGlyphWidth('timeSig8') + Stave.defaultPadding;\n let staves = [\n f.Stave({ y: staveYs[0], width: staveWidth }).addClef('treble').addTimeSignature('6/8'),\n f.Stave({ y: staveYs[1], width: staveWidth }).addClef('treble').addTimeSignature('6/8'),\n f.Stave({ y: staveYs[2], width: staveWidth }).addClef('bass').addTimeSignature('6/8'),\n ];\n f.StaveConnector({\n top_stave: staves[1],\n bottom_stave: staves[2],\n type: 'brace',\n });\n for (let i = 0; i < staves.length; ++i) {\n staves[i].setContext(ctx).draw();\n voices[i].draw(ctx, staves[i]);\n }\n beams.forEach((beam) => beam.setContext(ctx).draw());\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Draw 3 more staves (one measure each).\n // These are adjacent to the first set of staves, representing the second measure of each stave.\n const notes12 = score.notes('ab4/4, bb4/8, (cb5 eb5)/4[stem=\"down\"], d5/8[stem=\"down\"]');\n const notes22 = score.notes('(eb4 ab4)/4., (c4 eb4 ab4)/4, db5/8', { stem: 'up' });\n const notes32 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' });\n voices = [\n score.voice(notes12, { time: '6/8' }),\n score.voice(notes22, { time: '6/8' }),\n score.voice(notes32, { time: '6/8' }),\n ];\n formatter = f.Formatter();\n voices.forEach((v) => formatter.joinVoices([v]));\n width = formatter.preCalculateMinTotalWidth(voices);\n const staveX = staves[0].getX() + staves[0].getWidth();\n staveWidth = width + Stave.defaultPadding;\n staves = [\n f.Stave({ x: staveX, y: staveYs[0], width: staveWidth }),\n f.Stave({ x: staveX, y: staveYs[1], width: staveWidth }),\n f.Stave({ x: staveX, y: staveYs[2], width: staveWidth }),\n ];\n formatter.format(voices, width);\n beams = [\n // Add beams to each group of 3 notes.\n new Beam(notes32.slice(0, 3), true),\n new Beam(notes32.slice(3, 6), true),\n ];\n for (let i = 0; i < staves.length; ++i) {\n staves[i].setContext(ctx).draw();\n voices[i].draw(ctx, staves[i]);\n voices[i].getTickables().forEach((note) => Note.plotMetrics(ctx, note, staveYs[i] - 20));\n }\n beams.forEach((beam) => beam.setContext(ctx).draw());\n options.assert.ok(true);\n}\nfunction proportional(options) {\n const debug = options.params.debug;\n Registry.enableDefaultRegistry(new Registry());\n const f = VexFlowTests.makeFactory(options, 775, 750);\n const system = f.System({\n x: 50,\n autoWidth: true,\n debugFormatter: debug,\n noJustification: !(options.params.justify === undefined && true),\n formatIterations: options.params.iterations,\n details: { alpha: options.params.alpha },\n });\n const score = f.EasyScore();\n const voices = [\n score.notes('c5/8, c5'),\n score.tuplet(score.notes('a4/8, a4, a4'), { notes_occupied: 2 }),\n score.notes('c5/16, c5, c5, c5'),\n score.tuplet(score.notes('a4/16, a4, a4, a4, a4'), { notes_occupied: 4 }),\n score.tuplet(score.notes('a4/32, a4, a4, a4, a4, a4, a4'), { notes_occupied: 8 }),\n ];\n const createVoice = (notes) => score.voice(notes, { time: '1/4' });\n const createStave = (voice) => system\n .addStave({ voices: [voice], debugNoteMetrics: debug })\n .addClef('treble')\n .addTimeSignature('1/4');\n voices.map(createVoice).forEach(createStave);\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n // Debugging: Show how many elements of each type we have added.\n // const typeMap = Registry.getDefaultRegistry().index.type;\n // const table = Object.keys(typeMap).map((typeName) => typeName + ': ' + Object.keys(typeMap[typeName]).length);\n // console.log(table);\n Registry.disableDefaultRegistry();\n options.assert.ok(true);\n}\nfunction softMax(options) {\n const f = VexFlowTests.makeFactory(options, 550, 500);\n const textX = 450 / 0.8;\n f.getContext().scale(0.8, 0.8);\n function draw(y, factor) {\n const score = f.EasyScore();\n const system = f.System({\n x: 100,\n y,\n details: { softmaxFactor: factor },\n autoWidth: true,\n });\n system\n .addStave({\n voices: [\n score.voice(score\n .notes('C#5/h, a4/q')\n .concat(score.beam(score.notes('Abb4/8, A4/8')))\n .concat(score.beam(score.notes('A4/16, A#4, A4, Ab4/32, A4'))), { time: '5/4' }),\n ],\n })\n .addClef('treble')\n .addTimeSignature('5/4');\n f.draw();\n f.getContext().fillText(`softmax: ${factor.toString()}`, textX, y + 50);\n options.assert.ok(true);\n }\n draw(50, 1);\n draw(150, 2);\n draw(250, 5);\n draw(350, 10);\n draw(450, 15);\n}\nfunction mixTime(options) {\n const f = VexFlowTests.makeFactory(options, 400 + Stave.defaultPadding, 250);\n f.getContext().scale(0.8, 0.8);\n const score = f.EasyScore();\n const system = f.System({\n details: {},\n autoWidth: true,\n debugFormatter: true,\n });\n system\n .addStave({\n voices: [score.voice(score.notes('C#5/q, B4').concat(score.beam(score.notes('A4/8, E4, C4, D4'))))],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n system\n .addStave({\n voices: [score.voice(score.notes('C#5/q, B4, B4').concat(score.tuplet(score.beam(score.notes('A4/8, E4, C4')))))],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n f.draw();\n options.assert.ok(true);\n}\nfunction tightNotes1(options) {\n const f = VexFlowTests.makeFactory(options, 440, 250);\n f.getContext().scale(0.8, 0.8);\n const score = f.EasyScore();\n const system = f.System({\n autoWidth: true,\n debugFormatter: true,\n details: { maxIterations: 10 },\n });\n system\n .addStave({\n voices: [\n score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n system\n .addStave({\n voices: [\n score.voice(score.notes('B4/q, B4').concat(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')))),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n f.draw();\n options.assert.ok(true);\n}\nfunction tightNotes2(options) {\n const f = VexFlowTests.makeFactory(options, 440, 250);\n f.getContext().scale(0.8, 0.8);\n const score = f.EasyScore();\n const system = f.System({\n autoWidth: true,\n debugFormatter: true,\n });\n system\n .addStave({\n voices: [\n score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n system\n .addStave({\n voices: [score.voice(score.notes('B4/w'))],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n f.draw();\n options.assert.ok(true);\n}\nfunction annotations(options) {\n const pageWidth = 916;\n const pageHeight = 600;\n const f = VexFlowTests.makeFactory(options, pageWidth, pageHeight);\n const context = f.getContext();\n const lyrics1 = ['ipso', 'ipso-', 'ipso', 'ipso', 'ipsoz', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso'];\n const lyrics2 = ['ipso', 'ipso-', 'ipsoz', 'ipso', 'ipso', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso'];\n const smar = [\n {\n sm: 5,\n width: 550,\n lyrics: lyrics1,\n title: '550px,softMax:5',\n },\n {\n sm: 5,\n width: 550,\n lyrics: lyrics2,\n title: '550px,softmax:5,different word order',\n },\n {\n sm: 10,\n width: 550,\n lyrics: lyrics2,\n title: '550px,softmax:10',\n },\n {\n sm: 15,\n width: 550,\n lyrics: lyrics2,\n title: '550px,softmax:15',\n },\n ];\n const rowSize = 140;\n const beats = 12;\n const beatsPer = 8;\n const beamGroup = 3;\n const durations = ['8d', '16', '8', '8d', '16', '8', '8d', '16', '8', '4', '8'];\n const beams = [];\n let y = 40;\n smar.forEach((sm) => {\n const stave = new Stave(10, y, sm.width);\n const notes = [];\n let iii = 0;\n context.fillText(sm.title, 100, y);\n y += rowSize;\n durations.forEach((dd) => {\n const note = new StaveNote({ keys: ['b/4'], duration: dd });\n if (dd.indexOf('d') >= 0) {\n Dot.buildAndAttach([note], { all: true });\n }\n if (sm.lyrics.length > iii) {\n note.addModifier(new Annotation(sm.lyrics[iii])\n .setVerticalJustification(Annotation.VerticalJustify.BOTTOM)\n .setFont(Font.SERIF, 12, FontWeight.NORMAL));\n }\n notes.push(note);\n iii += 1;\n });\n notes.forEach((note) => {\n if (note.getDuration().indexOf('d') >= 0) {\n Dot.buildAndAttach([note], { all: true });\n }\n });\n // Don't beam the last group\n let notesToBeam = [];\n notes.forEach((note) => {\n if (note.getIntrinsicTicks() < 4096) {\n notesToBeam.push(note);\n if (notesToBeam.length >= beamGroup) {\n beams.push(new Beam(notesToBeam));\n notesToBeam = [];\n }\n }\n else {\n notesToBeam = [];\n }\n });\n const voice1 = new Voice({ num_beats: beats, beat_value: beatsPer }).setMode(Voice.Mode.SOFT).addTickables(notes);\n const fmt = new Formatter({ softmaxFactor: sm.sm, maxIterations: 2 }).joinVoices([voice1]);\n fmt.format([voice1], sm.width - 11);\n stave.setContext(context).draw();\n voice1.draw(context, stave);\n beams.forEach((b) => b.setContext(context).draw());\n });\n options.assert.ok(true);\n}\nVexFlowTests.register(FormatterTests);\nexport { FormatterTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Fraction Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Fraction } from '../src/fraction';\nconst FractionTests = {\n Start() {\n QUnit.module('Fraction');\n QUnit.test('Basic', basic);\n QUnit.test('With Other Fractions', withOtherFractions);\n },\n};\nfunction basic(assert) {\n const f_1_2 = new Fraction(1, 2);\n assert.ok(f_1_2.equals(0.5), 'Fraction: 1/2 equals 0.5');\n assert.ok(f_1_2.equals(new Fraction(1, 2)), 'Fraction: 1/2 equals 1/2');\n assert.ok(f_1_2.equals(new Fraction(2, 4)), 'Fraction: 1/2 equals 2/4');\n assert.notOk(f_1_2.greaterThan(1), 'Fraction: ! 1/2 > 1');\n assert.ok(f_1_2.greaterThan(0.2), 'Fraction: 1/2 > 0.2');\n assert.ok(f_1_2.greaterThanEquals(0.2), 'Fraction: 1/2 >= 0.2');\n assert.ok(f_1_2.greaterThanEquals(0.5), 'Fraction: 1/2 >= 0.5');\n assert.notOk(f_1_2.greaterThanEquals(1), 'Fraction: ! 1/2 >= 1');\n assert.notOk(f_1_2.lessThan(0.5), 'Fraction: ! 1/2 < 0.5');\n assert.ok(f_1_2.lessThan(1), 'Fraction: 1/2 < 1');\n assert.ok(f_1_2.lessThanEquals(0.6), 'Fraction: 1/2 <= 0.6');\n assert.ok(f_1_2.lessThanEquals(0.5), 'Fraction: 1/2 <= 0.5');\n assert.notOk(f_1_2.lessThanEquals(0.4), 'Fraction: ! 1/2 <= 0.4');\n const f_05 = f_1_2.copy(0.5);\n assert.strictEqual(f_05, f_1_2, 'Fraction: f_05 === f_1_2');\n assert.strictEqual(f_05.toString(), '0.5/1', 'Fraction: f_05.toString() === \"0.5/1\"');\n assert.strictEqual(f_05.toSimplifiedString(), '1/2', 'Fraction: f_05.toSimplifiedString() === \"1/2\"');\n const tF_n = f_05.clone();\n assert.notStrictEqual(tF_n, f_05, 'Fraction: tF_n !== f_05');\n assert.notEqual(tF_n, f_05, 'Fraction: tF_n != f_05');\n assert.deepEqual(tF_n, f_05, 'tF_n deepEqual f_05');\n assert.notDeepEqual(tF_n, {}, 'tF_n notDeepEqual {}');\n tF_n.subtract(-0.5);\n assert.ok(tF_n.equals(1), 'Fraction: 0.5 -(-0.5) equals 1');\n tF_n.add(1);\n assert.ok(tF_n.equals(2), 'Fraction: 1 + 1 equals 2');\n tF_n.multiply(2);\n assert.ok(tF_n.equals(4), 'Fraction: 2 * 2 equals 4');\n tF_n.divide(2);\n assert.ok(tF_n.equals(2), 'Fraction: 4 / 2 equals 2');\n // Lowest common multiple.\n assert.equal(Fraction.LCMM([]), 0);\n assert.equal(Fraction.LCMM([17]), 17);\n assert.equal(Fraction.LCMM([2, 5]), 10);\n assert.equal(Fraction.LCMM([15, 3, 5]), 15);\n assert.equal(Fraction.LCMM([2, 4, 6]), 12);\n assert.equal(Fraction.LCMM([2, 3, 4, 5]), 60);\n assert.equal(Fraction.LCMM([12, 15, 10, 75]), 300);\n // Greatest common divisor.\n assert.equal(Fraction.GCD(0, 0), 0);\n assert.equal(Fraction.GCD(0, 99), 99);\n assert.equal(Fraction.GCD(77, 0), 77);\n assert.equal(Fraction.GCD(42, 14), 14);\n assert.equal(Fraction.GCD(15, 10), 5);\n}\nfunction withOtherFractions(assert) {\n const f_1_2 = new Fraction(1, 2);\n const f_1_4 = new Fraction(1, 4);\n const f_1_8 = new Fraction(1, 8);\n const f_2 = new Fraction(2, 1);\n // IMPORTANT NOTE: Fraction methods modify the existing Fraction object.\n // They do not return new objects.\n // Use clone() if you don't want to modify the original object.\n const a = f_1_2.clone().multiply(f_1_2);\n assert.ok(a.equals(f_1_4), '1/2 x 1/2 == 1/4');\n const b = f_1_2.clone().divide(f_1_4);\n assert.ok(b.equals(f_2), '1/2 / 1/4 == 2');\n const c = f_2.clone().subtract(f_1_2).subtract(f_1_2).subtract(f_1_4); // 3/4\n const d = f_1_8.clone().add(f_1_8).add(f_1_8).multiply(f_2);\n assert.ok(c.equals(d), '2-1/2-1/2-1/4 == (1/8+1/8+1/8)*(2/1)');\n assert.equal(c.value(), 0.75, '3/4 == 0.75');\n const e = f_1_8.clone().add(f_1_4).add(f_1_8);\n assert.ok(e.equals(f_1_2), '1/8 + 1/4 + 1/8 == 1/2');\n}\nVexFlowTests.register(FractionTests);\nexport { FractionTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// GhostNote Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst GhostNoteTests = {\n Start() {\n QUnit.module('GhostNote');\n const run = VexFlowTests.runTests;\n run('GhostNote Basic', basic);\n run('GhostNote Dotted', dotted);\n },\n};\n/**\n * Helper function to set up the stave, easyscore, voice, and to format & draw.\n */\nfunction createTest(addItems) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 550);\n const stave = factory.Stave();\n const score = factory.EasyScore();\n addItems(factory, score);\n const voices = factory.getVoices();\n factory.Formatter().joinVoices(voices).formatToStave(voices, stave);\n factory.draw();\n options.assert.ok(true, 'all pass');\n };\n}\nconst basic = createTest((f, score) => {\n // Top Voice\n const voiceTop = score.voice(score.notes('f#5/4, f5, db5, c5, c5/8, d5, fn5, e5, d5, c5', { stem: 'up' }), {\n time: '7/4',\n });\n const notesTop = voiceTop.getTickables();\n f.Beam({ notes: notesTop.slice(4, 8) });\n f.Beam({ notes: notesTop.slice(8, 10) });\n // Bottom Voice\n score.voice([\n f.GhostNote({ duration: '2' }),\n f.StaveNote({ keys: ['f/4'], stem_direction: -1, duration: '4' }),\n f.GhostNote({ duration: '4' }),\n f.StaveNote({ keys: ['e/4'], stem_direction: -1, duration: '4' }),\n f.GhostNote({ duration: '8' }),\n f.StaveNote({ keys: ['d/4'], stem_direction: -1, duration: '8' }).addModifier(f.Accidental({ type: '##' }), 0),\n f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }),\n ], { time: '7/4' });\n});\n/**\n * A ghost note is invisible, but takes up space on the stave corresponding to its duration.\n * '4d' is a dotted quarter note, equivalent to a quarter + eighth note.\n */\nconst dotted = createTest((f, score) => {\n const voice1 = score.voice([\n f.GhostNote({ duration: '4d' }),\n f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }),\n f.StaveNote({ duration: '4', keys: ['d/5'], stem_direction: 1 }),\n f.StaveNote({ duration: '8', keys: ['c/5'], stem_direction: 1 }),\n f.StaveNote({ duration: '16', keys: ['c/5'], stem_direction: 1 }),\n f.StaveNote({ duration: '16', keys: ['d/5'], stem_direction: 1 }),\n f.GhostNote({ duration: '2dd' }),\n f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }),\n ], { time: '8/4' });\n const voice2 = score.voice([\n f.StaveNote({ duration: '4', keys: ['f/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '8', keys: ['d/4'], stem_direction: -1 }),\n f.GhostNote({ duration: '4dd' }),\n f.StaveNote({ duration: '16', keys: ['c/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '2', keys: ['c/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '4', keys: ['d/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '8', keys: ['f/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }),\n ], { time: '8/4' });\n const notes1 = voice1.getTickables();\n const notes2 = voice2.getTickables();\n const addAccidental = (note, type) => note.addModifier(f.Accidental({ type }), 0);\n addAccidental(notes1[1], 'bb');\n addAccidental(notes1[4], '#');\n addAccidental(notes1[7], 'n');\n addAccidental(notes2[0], '#');\n addAccidental(notes2[4], 'b');\n addAccidental(notes2[5], '#');\n addAccidental(notes2[7], 'n');\n f.Beam({ notes: notes1.slice(3, 6) });\n f.Beam({ notes: notes2.slice(1, 3) });\n f.Beam({ notes: notes2.slice(7, 9) });\n});\nVexFlowTests.register(GhostNoteTests);\nexport { GhostNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// GlyphNote Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { ChordSymbol } from '../src/chordsymbol';\nimport { Glyph } from '../src/glyph';\nimport { Registry } from '../src/registry';\nimport { StaveConnector } from '../src/staveconnector';\nconst GlyphNoteTests = {\n Start() {\n QUnit.module('GlyphNote');\n const run = VexFlowTests.runTests;\n run('GlyphNote with ChordSymbols', chordChanges, { debug: false, noPadding: false });\n run('GlyphNote Positioning', basic, { debug: false, noPadding: false });\n run('GlyphNote No Stave Padding', basic, { debug: true, noPadding: true });\n run('GlyphNote RepeatNote', repeatNote, { debug: false, noPadding: true });\n },\n};\nfunction chordChanges(options) {\n Registry.enableDefaultRegistry(new Registry());\n const f = VexFlowTests.makeFactory(options, 300, 200);\n const system = f.System({\n x: 50,\n width: 250,\n debugFormatter: options.params.debug,\n noPadding: options.params.noPadding,\n details: { alpha: options.params.alpha },\n });\n const score = f.EasyScore();\n const notes = [\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }),\n ];\n const chord1 = f\n .ChordSymbol({ reportWidth: false })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('(#11b9)', { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT });\n const chord2 = f\n .ChordSymbol()\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('#11', { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT })\n .addGlyphOrText('b9', { symbolModifier: ChordSymbol.symbolModifiers.SUBSCRIPT });\n notes[0].addModifier(chord1, 0);\n notes[2].addModifier(chord2, 0);\n const voice = score.voice(notes);\n system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug });\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n Registry.disableDefaultRegistry();\n options.assert.ok(true);\n}\nfunction basic(options) {\n Registry.enableDefaultRegistry(new Registry());\n const f = VexFlowTests.makeFactory(options, 300, 400);\n const system = f.System({\n x: 50,\n width: 250,\n debugFormatter: options.params.debug,\n noPadding: options.params.noPadding,\n details: { alpha: options.params.alpha },\n });\n const score = f.EasyScore();\n const newVoice = (notes) => score.voice(notes, { time: '1/4' });\n const newStave = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug });\n const voices = [\n [f.GlyphNote(new Glyph('repeat1Bar', 40), { duration: 'q' }, { line: 4 })],\n [f.GlyphNote(new Glyph('repeat2Bars', 40), { duration: 'q', align_center: true })],\n [\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }),\n f.GlyphNote(new Glyph('repeat4Bars', 40), { duration: '16' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }),\n ],\n ];\n voices.map(newVoice).forEach(newStave);\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n Registry.disableDefaultRegistry();\n options.assert.ok(true);\n}\nfunction repeatNote(options) {\n Registry.enableDefaultRegistry(new Registry());\n const f = VexFlowTests.makeFactory(options, 300, 500);\n const system = f.System({\n x: 50,\n width: 250,\n debugFormatter: options.params.debug,\n noPadding: options.params.noPadding,\n details: { alpha: options.params.alpha },\n });\n const score = f.EasyScore();\n const createVoice = (notes) => score.voice(notes, { time: '1/4' });\n const addStaveWithVoice = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug });\n const voices = [\n [f.RepeatNote('1')],\n [f.RepeatNote('2')],\n [f.RepeatNote('4')],\n [\n f.RepeatNote('slash', { duration: '16' }),\n f.RepeatNote('slash', { duration: '16' }),\n f.RepeatNote('slash', { duration: '16' }),\n f.RepeatNote('slash', { duration: '16' }),\n ],\n ];\n voices.map(createVoice).forEach(addStaveWithVoice);\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n Registry.disableDefaultRegistry();\n options.assert.ok(true);\n}\nVexFlowTests.register(GlyphNoteTests);\nexport { GlyphNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// GraceNote Tests\n// TODO: In the 'stem' test (aka Grace Note Stem › SVG + Petaluma in flow.html), the Petaluma note heads are not scaled down properly.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Annotation } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Dot } from '../src/dot';\nimport { Formatter } from '../src/formatter';\nconst GraceNoteTests = {\n Start() {\n QUnit.module('Grace Notes');\n const run = VexFlowTests.runTests;\n run('Grace Note Basic', basic);\n run('With Articulation and Annotation on Parent Note', graceNoteModifiers);\n run('Grace Note Basic with Slurs', basicSlurred);\n run('Grace Note Stem', stem);\n run('Grace Note Stem with Beams 1', stemWithBeamed, {\n keys1: ['g/4'],\n stemDirection1: 1,\n keys2: ['d/5'],\n stemDirection2: -1,\n });\n run('Grace Note Stem with Beams 2', stemWithBeamed, {\n keys1: ['a/3'],\n stemDirection1: 1,\n keys2: ['a/5'],\n stemDirection2: -1,\n });\n run('Grace Note Stem with Beams 3', stemWithBeamed, {\n keys1: ['c/4'],\n stemDirection1: 1,\n keys2: ['c/6'],\n stemDirection2: -1,\n });\n run('Grace Note Slash', slash);\n run('Grace Note Slash with Beams', slashWithBeams);\n run('Grace Notes Multiple Voices', multipleVoices);\n run('Grace Notes Multiple Voices Multiple Draws', multipleVoicesMultipleDraws);\n },\n};\nfunction basic(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n const gracenotes = [\n { keys: ['e/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['g/4'], duration: '32' },\n { keys: ['a/4'], duration: '32' },\n ].map(f.GraceNote.bind(f));\n const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f));\n const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes3 = [\n { keys: ['e/4'], duration: '8' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['e/4', 'g/4'], duration: '8' },\n { keys: ['a/4'], duration: '32' },\n { keys: ['b/4'], duration: '32' },\n ].map(f.GraceNote.bind(f));\n const gracenotes4 = [\n { keys: ['g/4'], duration: '8' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n ].map(f.GraceNote.bind(f));\n gracenotes[1].addModifier(f.Accidental({ type: '##' }), 0);\n gracenotes3[3].addModifier(f.Accidental({ type: 'bb' }), 0);\n Dot.buildAndAttach([gracenotes4[0]], { all: true });\n const notes = [\n f\n .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.GraceNoteGroup({ notes: gracenotes1 }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0),\n ];\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteBasic');\n}\nfunction graceNoteModifiers(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n const gracenotes = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f));\n const notes = [\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0)\n .addModifier(new Accidental('#')),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0)\n .addModifier(new Annotation('words')),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0)\n .addModifier(new Articulation('a>').setPosition(3), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0)\n .addModifier(new Articulation('a>').setPosition(3), 0)\n .addModifier(new Articulation('a@a').setPosition(3), 0),\n ];\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteModifiers');\n}\nfunction basicSlurred(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n const gracenotes0 = [\n { keys: ['e/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['g/4'], duration: '32' },\n { keys: ['a/4'], duration: '32' },\n ].map(f.GraceNote.bind(f));\n const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f));\n const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes3 = [\n { keys: ['e/4'], duration: '8' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['e/4', 'g/4'], duration: '8' },\n { keys: ['a/4'], duration: '32' },\n { keys: ['b/4'], duration: '32' },\n ].map(f.GraceNote.bind(f));\n const gracenotes4 = [\n { keys: ['a/4'], duration: '8' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n ].map(f.GraceNote.bind(f));\n gracenotes0[1].addModifier(f.Accidental({ type: '#' }), 0);\n gracenotes3[3].addModifier(f.Accidental({ type: 'b' }), 0);\n gracenotes3[2].addModifier(f.Accidental({ type: 'n' }), 0);\n Dot.buildAndAttach([gracenotes4[0]], { all: true });\n const notes = [\n f\n .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes0, slur: true }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.GraceNoteGroup({ notes: gracenotes1, slur: true }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes2, slur: true }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes3, slur: true }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes4, slur: true }).beamNotes(), 0),\n f.StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }),\n ];\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteBasic');\n}\n/**\n * Helper function for three tests below: stem, stemWithBeamed, slash.\n */\nconst createNoteForStemTest = (duration, noteBuilder, keys, stem_direction, slash = false) => {\n const struct = { duration, slash };\n struct.stem_direction = stem_direction;\n struct.keys = keys;\n return noteBuilder(struct);\n};\n// Used in three tests below.\nconst durationsForStemTest = ['8', '16', '32', '64', '128'];\nfunction stem(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n function createNotes(noteBuilder, keys, stem_direction) {\n return durationsForStemTest.map((duration) => createNoteForStemTest(duration, noteBuilder, keys, stem_direction));\n }\n function createNoteBlock(keys, stem_direction) {\n const staveNotes = createNotes(f.StaveNote.bind(f), keys, stem_direction);\n const gracenotes = createNotes(f.GraceNote.bind(f), keys, stem_direction);\n // Add a bunch of GraceNotes in front of the first StaveNote.\n staveNotes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0);\n return staveNotes;\n }\n const voice = f.Voice().setStrict(false);\n voice.addTickables(createNoteBlock(['g/4'], 1));\n voice.addTickables(createNoteBlock(['d/5'], -1));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteStem');\n}\nfunction stemWithBeamed(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n function createBeamedNotes(noteBuilder, keys, stem_direction, beams, isGrace = false, notesToBeam) {\n const ret = [];\n durationsForStemTest.map((duration) => {\n const n0 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction);\n const n1 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction);\n ret.push(n0);\n ret.push(n1);\n if (notesToBeam) {\n notesToBeam.push([n0, n1]);\n }\n if (!isGrace) {\n beams.push(f.Beam({ notes: [n0, n1] }));\n }\n });\n return ret;\n }\n function createBeamedNoteBlock(keys, stem_direction, beams) {\n const bnotes = createBeamedNotes(f.StaveNote.bind(f), keys, stem_direction, beams);\n const notesToBeam = [];\n const gracenotes = createBeamedNotes(f.GraceNote.bind(f), keys, stem_direction, beams, true, notesToBeam);\n const graceNoteGroup = f.GraceNoteGroup({ notes: gracenotes });\n notesToBeam.map(graceNoteGroup.beamNotes.bind(graceNoteGroup));\n bnotes[0].addModifier(graceNoteGroup, 0);\n return bnotes;\n }\n const beams = [];\n const voice = f.Voice().setStrict(false);\n voice.addTickables(createBeamedNoteBlock(options.params.keys1, options.params.stemDirection1, beams));\n voice.addTickables(createBeamedNoteBlock(options.params.keys2, options.params.stemDirection2, beams));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteStem');\n}\nfunction slash(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n function createNotes(noteT, keys, stem_direction, slash) {\n return durationsForStemTest.map((d) => createNoteForStemTest(d, noteT, keys, stem_direction, slash));\n }\n function createNoteBlock(keys, stem_direction) {\n const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })];\n let graceNotes = createNotes(f.GraceNote.bind(f), keys, stem_direction, true);\n const duration = '8';\n const gns = [\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true },\n ].map(f.GraceNote.bind(f));\n const notesToBeam = [];\n notesToBeam.push([gns[0], gns[1], gns[2]]);\n notesToBeam.push([gns[3], gns[4], gns[5]]);\n notesToBeam.push([gns[6], gns[7], gns[8]]);\n // Merge the two GraceNote[].\n graceNotes = graceNotes.concat(gns);\n const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes });\n notesToBeam.forEach((notes) => graceNoteGroup.beamNotes(notes));\n notes[0].addModifier(graceNoteGroup, 0);\n return notes;\n }\n const voice = f.Voice().setStrict(false);\n voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1));\n voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteSlash');\n}\nfunction slashWithBeams(options) {\n const f = VexFlowTests.makeFactory(options, 800, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 750 });\n function createNoteBlock(keys, stem_direction) {\n const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })];\n let allGraceNotes = [];\n const graceNotesToBeam = [];\n ['8', '16', '32', '64'].forEach(function (duration) {\n const graceNotes = [\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: false },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: false },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: false },\n ].map(f.GraceNote.bind(f));\n graceNotesToBeam.push([graceNotes[0], graceNotes[1]]);\n graceNotesToBeam.push([graceNotes[2], graceNotes[3]]);\n graceNotesToBeam.push([graceNotes[4], graceNotes[5]]);\n allGraceNotes = allGraceNotes.concat(graceNotes);\n });\n const graceNoteGroup = f.GraceNoteGroup({ notes: allGraceNotes });\n graceNotesToBeam.forEach((g) => graceNoteGroup.beamNotes(g));\n notes[0].addModifier(graceNoteGroup, 0);\n return notes;\n }\n const voice = f.Voice().setStrict(false);\n voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1));\n voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'GraceNoteSlashWithBeams');\n}\nfunction multipleVoices(options) {\n const f = VexFlowTests.makeFactory(options, 450, 140);\n const stave = f.Stave({ x: 10, y: 10, width: 450 });\n const notes = [\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['d/5'], stem_direction: 1, duration: '16' },\n { keys: ['c/5'], stem_direction: 1, duration: '16' },\n { keys: ['c/5'], stem_direction: 1, duration: '16' },\n { keys: ['d/5'], stem_direction: 1, duration: '16' },\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['e/5'], stem_direction: 1, duration: '16' },\n ].map(f.StaveNote.bind(f));\n const notes2 = [\n { keys: ['f/4'], stem_direction: -1, duration: '16' },\n { keys: ['e/4'], stem_direction: -1, duration: '16' },\n { keys: ['d/4'], stem_direction: -1, duration: '16' },\n { keys: ['c/4'], stem_direction: -1, duration: '16' },\n { keys: ['c/4'], stem_direction: -1, duration: '16' },\n { keys: ['d/4'], stem_direction: -1, duration: '16' },\n { keys: ['f/4'], stem_direction: -1, duration: '16' },\n { keys: ['e/4'], stem_direction: -1, duration: '16' },\n ].map(f.StaveNote.bind(f));\n const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes3 = [\n { keys: ['f/4'], duration: '32', stem_direction: -1 },\n { keys: ['e/4'], duration: '32', stem_direction: -1 },\n ].map(f.GraceNote.bind(f));\n const gracenotes4 = [\n { keys: ['f/5'], duration: '32', stem_direction: 1 },\n { keys: ['e/5'], duration: '32', stem_direction: 1 },\n { keys: ['e/5'], duration: '8', stem_direction: 1 },\n ].map(f.GraceNote.bind(f));\n gracenotes2[0].setStemDirection(-1);\n gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0);\n notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0);\n notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0);\n notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0);\n notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0);\n const voice = f.Voice().setStrict(false).addTickables(notes);\n const voice2 = f.Voice().setStrict(false).addTickables(notes2);\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Beam({ notes: notes2.slice(0, 4) });\n f.Beam({ notes: notes2.slice(4, 8) });\n f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave);\n f.draw();\n options.assert.ok(true, 'Sixteenth Test');\n}\nfunction multipleVoicesMultipleDraws(options) {\n const f = VexFlowTests.makeFactory(options, 450, 140);\n const stave = f.Stave({ x: 10, y: 10, width: 450 });\n const notes = [\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['d/5'], stem_direction: 1, duration: '16' },\n { keys: ['c/5'], stem_direction: 1, duration: '16' },\n { keys: ['c/5'], stem_direction: 1, duration: '16' },\n { keys: ['d/5'], stem_direction: 1, duration: '16' },\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['e/5'], stem_direction: 1, duration: '16' },\n ].map(f.StaveNote.bind(f));\n const notes2 = [\n { keys: ['f/4'], stem_direction: -1, duration: '16' },\n { keys: ['e/4'], stem_direction: -1, duration: '16' },\n { keys: ['d/4'], stem_direction: -1, duration: '16' },\n { keys: ['c/4'], stem_direction: -1, duration: '16' },\n { keys: ['c/4'], stem_direction: -1, duration: '16' },\n { keys: ['d/4'], stem_direction: -1, duration: '16' },\n { keys: ['f/4'], stem_direction: -1, duration: '16' },\n { keys: ['e/4'], stem_direction: -1, duration: '16' },\n ].map(f.StaveNote.bind(f));\n const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes3 = [\n { keys: ['f/4'], duration: '32', stem_direction: -1 },\n { keys: ['e/4'], duration: '32', stem_direction: -1 },\n ].map(f.GraceNote.bind(f));\n const gracenotes4 = [\n { keys: ['f/5'], duration: '32', stem_direction: 1 },\n { keys: ['e/5'], duration: '32', stem_direction: 1 },\n { keys: ['e/5'], duration: '8', stem_direction: 1 },\n ].map(f.GraceNote.bind(f));\n gracenotes2[0].setStemDirection(-1);\n gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0);\n notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0);\n notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0);\n notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0);\n notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0);\n const voice = f.Voice().setStrict(false).addTickables(notes);\n const voice2 = f.Voice().setStrict(false).addTickables(notes2);\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Beam({ notes: notes2.slice(0, 4) });\n f.Beam({ notes: notes2.slice(4, 8) });\n f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave);\n f.draw();\n f.draw();\n options.assert.ok(true, 'Seventeenth Test');\n}\nVexFlowTests.register(GraceNoteTests);\nexport { GraceNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// GraceTabNote Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { GraceNoteGroup } from '../src/gracenotegroup';\nimport { GraceTabNote } from '../src/gracetabnote';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { Voice } from '../src/voice';\nconst GraceTabNoteTests = {\n Start() {\n QUnit.module('Grace Tab Notes');\n // TODO: Rename tests below since it is redundant with the module name.\n // Remove \"Grace Tab Note \"\n const run = VexFlowTests.runTests;\n run('Grace Tab Note Simple', simple);\n run('Grace Tab Note Slurred', slurred);\n },\n};\n// Helper functions to create TabNote and GraceTabNote objects.\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\nconst graceTabNote = (noteStruct) => new GraceTabNote(noteStruct);\n/**\n * Helper function to build a RenderContext and TabStave.\n */\nfunction setupContext(opts, ctxBuilder) {\n const context = ctxBuilder(opts.elementId, 350, 140);\n const stave = new TabStave(10, 10, 350).addTabGlyph().setContext(context).draw();\n return { context, stave };\n}\nfunction simple(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder);\n const note0 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: '4' });\n const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: '4' });\n const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' });\n const note3 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' });\n const gracenote_group0 = [{ positions: [{ str: 4, fret: 'x' }], duration: '8' }];\n const gracenote_group1 = [\n { positions: [{ str: 4, fret: 9 }], duration: '16' },\n { positions: [{ str: 4, fret: 10 }], duration: '16' },\n ];\n const gracenote_group2 = [{ positions: [{ str: 4, fret: 9 }], duration: '8' }];\n const gracenote_group3 = [\n { positions: [{ str: 5, fret: 10 }], duration: '8' },\n { positions: [{ str: 4, fret: 9 }], duration: '8' },\n ];\n const gracenotes0 = gracenote_group0.map(graceTabNote);\n const gracenotes1 = gracenote_group1.map(graceTabNote);\n const gracenotes2 = gracenote_group2.map(graceTabNote);\n gracenotes2[0].setGhost(true);\n const gracenotes3 = gracenote_group3.map(graceTabNote);\n note0.addModifier(new GraceNoteGroup(gracenotes0), 0);\n note1.addModifier(new GraceNoteGroup(gracenotes1), 0);\n note2.addModifier(new GraceNoteGroup(gracenotes2), 0);\n note3.addModifier(new GraceNoteGroup(gracenotes3), 0);\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables([note0, note1, note2, note3]);\n new Formatter().joinVoices([voice]).format([voice], 250);\n voice.draw(context, stave);\n options.assert.ok(true, 'Simple Test');\n}\nfunction slurred(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder);\n const note0 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' });\n const note1 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' });\n const gracenote_group0 = [\n { positions: [{ str: 4, fret: 9 }], duration: '8' },\n { positions: [{ str: 4, fret: 10 }], duration: '8' },\n ];\n const gracenote_group1 = [\n { positions: [{ str: 4, fret: 7 }], duration: '16' },\n { positions: [{ str: 4, fret: 8 }], duration: '16' },\n { positions: [{ str: 4, fret: 9 }], duration: '16' },\n ];\n const gracenotes0 = gracenote_group0.map(graceTabNote);\n const gracenotes1 = gracenote_group1.map(graceTabNote);\n note0.addModifier(new GraceNoteGroup(gracenotes0, true), 0);\n note1.addModifier(new GraceNoteGroup(gracenotes1, true), 0);\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables([note0, note1]);\n new Formatter().joinVoices([voice]).format([voice], 200);\n voice.draw(context, stave);\n options.assert.ok(true, 'Slurred Test');\n}\nVexFlowTests.register(GraceTabNoteTests);\nexport { GraceTabNoteTests };\n","// vexflow-debug-with-tests.ts includes this module via:\n// export * from '../../tests';\n//\n// To add a new test module, add a new line:\n// `export * from './xxxx_tests';`\n// to this file that points to the new file `xxxx_tests.ts`.\n//\n// The test module needs to call VexFlowTests.register(...).\n// For example, in annotation_tests.ts, the last two lines are:\n// VexFlowTests.register(AnnotationTests);\n// export { AnnotationTests };\n//\n// In vexflow_test_helpers.ts: VexFlowTests.run() will run all registered tests.\n//\n// To iterate faster during development, you can comment out most of this file\n// and focus on just testing the module(s) you are currently working on.\nexport * from './accidental_tests';\nexport * from './annotation_tests';\nexport * from './articulation_tests';\nexport * from './auto_beam_formatting_tests';\nexport * from './bach_tests';\nexport * from './barline_tests';\nexport * from './beam_tests';\nexport * from './bend_tests';\nexport * from './boundingbox_tests';\nexport * from './chordsymbol_tests';\nexport * from './clef_tests';\nexport * from './crossbeam_tests';\nexport * from './curve_tests';\nexport * from './dot_tests';\nexport * from './easyscore_tests';\nexport * from './factory_tests';\nexport * from './font_tests';\nexport * from './formatter_tests';\nexport * from './fraction_tests';\nexport * from './ghostnote_tests';\nexport * from './glyphnote_tests';\nexport * from './gracenote_tests';\nexport * from './gracetabnote_tests';\nexport * from './key_clef_tests';\nexport * from './keymanager_tests';\nexport * from './keysignature_tests';\nexport * from './modifier_tests';\nexport * from './multimeasurerest_tests';\nexport * from './music_tests';\nexport * from './notehead_tests';\nexport * from './notesubgroup_tests';\nexport * from './offscreencanvas_tests';\nexport * from './ornament_tests';\nexport * from './parser_tests';\nexport * from './pedalmarking_tests';\nexport * from './percussion_tests';\nexport * from './registry_tests';\nexport * from './renderer_tests';\nexport * from './rests_tests';\nexport * from './rhythm_tests';\nexport * from './stave_tests';\nexport * from './staveconnector_tests';\nexport * from './stavehairpin_tests';\nexport * from './staveline_tests';\nexport * from './stavemodifier_tests';\nexport * from './stavenote_tests';\nexport * from './stavetie_tests';\nexport * from './stringnumber_tests';\nexport * from './strokes_tests';\nexport * from './style_tests';\nexport * from './tabnote_tests';\nexport * from './tabslide_tests';\nexport * from './tabstave_tests';\nexport * from './tabtie_tests';\nexport * from './textbracket_tests';\nexport * from './textformatter_tests';\nexport * from './textnote_tests';\nexport * from './threevoice_tests';\nexport * from './tickcontext_tests';\nexport * from './timesignature_tests';\nexport * from './tremolo_tests';\nexport * from './tuning_tests';\nexport * from './tuplet_tests';\nexport * from './typeguard_tests';\nexport * from './unison_tests';\nexport * from './vf_prefix_tests';\nexport * from './vibrato_tests';\nexport * from './vibratobracket_tests';\nexport * from './voice_tests';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Clef Key Signature Tests\n//\nimport { MAJOR_KEYS, MINOR_KEYS, VexFlowTests } from './vexflow_test_helpers';\nimport { Glyph } from '../src/glyph';\nimport { KeySignature } from '../src/keysignature';\nimport { Stave } from '../src/stave';\nconst ClefKeySignatureTests = {\n Start() {\n QUnit.module('Clef Keys');\n // Removed an identical 'Key Parser Test'. See keysignature_tests.ts.\n const run = VexFlowTests.runTests;\n run('Major Key Clef Test', keys, { majorKeys: true });\n run('Minor Key Clef Test', keys, { majorKeys: false });\n run('Stave Helper', staveHelper);\n },\n};\nconst fontWidths = () => {\n const glyphScale = 39; // default font scale\n const sharpWidth = Glyph.getWidth('accidentalSharp', glyphScale) + 1;\n const flatWidth = Glyph.getWidth('accidentalFlat', glyphScale) + 1;\n const ksPadding = 10; // hard-coded in keysignature.ts\n const naturalWidth = Glyph.getWidth('accidentalNatural', glyphScale) + 2;\n const clefWidth = Glyph.getWidth('gClef', glyphScale); // widest clef\n return { sharpWidth, flatWidth, naturalWidth, clefWidth, ksPadding };\n};\nfunction keys(options, contextBuilder) {\n const w = fontWidths();\n const accidentalCount = 28; // total number in all the keys\n const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + Stave.defaultPadding + 6 * w.ksPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + Stave.defaultPadding + 6 * w.ksPadding;\n const clefs = [\n 'treble',\n 'soprano',\n 'mezzo-soprano',\n 'alto',\n 'tenor',\n 'baritone-f',\n 'baritone-c',\n 'bass',\n 'french',\n 'subbass',\n 'percussion',\n ];\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 20 + 80 * 2 * clefs.length);\n const staves = [];\n const keys = options.params.majorKeys ? MAJOR_KEYS : MINOR_KEYS;\n let i;\n let flat;\n let sharp;\n let keySig;\n const yOffsetForFlatStaves = 10 + 80 * clefs.length;\n for (i = 0; i < clefs.length; i++) {\n // Render all the sharps first, then all the flats:\n staves[i] = new Stave(10, 10 + 80 * i, flatTestWidth);\n staves[i].addClef(clefs[i]);\n staves[i + clefs.length] = new Stave(10, yOffsetForFlatStaves + 10 + 80 * i, sharpTestWidth);\n staves[i + clefs.length].addClef(clefs[i]);\n for (flat = 0; flat < 8; flat++) {\n keySig = new KeySignature(keys[flat]);\n keySig.addToStave(staves[i]);\n }\n for (sharp = 8; sharp < keys.length; sharp++) {\n keySig = new KeySignature(keys[sharp]);\n keySig.addToStave(staves[i + clefs.length]);\n }\n }\n Stave.formatBegModifiers(staves);\n for (i = 0; i < clefs.length; i++) {\n staves[i].setContext(ctx);\n staves[i].draw();\n staves[i + clefs.length].setContext(ctx);\n staves[i + clefs.length].draw();\n }\n options.assert.ok(true, 'all pass');\n}\nfunction staveHelper(options, contextBuilder) {\n const w = fontWidths();\n const accidentalCount = 28; // total number in all the keys\n const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + Stave.defaultPadding + 7 * w.ksPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + Stave.defaultPadding + 7 * w.ksPadding;\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 400);\n const stave1 = new Stave(10, 10, flatTestWidth);\n const stave2 = new Stave(10, 90, flatTestWidth);\n const stave3 = new Stave(10, 170, sharpTestWidth);\n const stave4 = new Stave(10, 260, sharpTestWidth);\n const keys = MAJOR_KEYS;\n stave1.addClef('treble');\n stave2.addClef('bass');\n stave3.addClef('alto');\n stave4.addClef('tenor');\n for (let n = 0; n < 8; ++n) {\n stave1.addKeySignature(keys[n]);\n stave2.addKeySignature(keys[n]);\n }\n for (let i = 8; i < keys.length; ++i) {\n stave3.addKeySignature(keys[i]);\n stave4.addKeySignature(keys[i]);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n stave3.setContext(ctx);\n stave3.draw();\n stave4.setContext(ctx);\n stave4.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(ClefKeySignatureTests);\nexport { ClefKeySignatureTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Music Key Management Tests\n//\n// TODO: KeyManager.getAccidental(key) specifies that the return value's .accidental property is string | undefined.\n// However, we check it against null.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { KeyManager } from '../src/index';\nconst KeyManagerTests = {\n Start() {\n QUnit.module('KeyManager');\n QUnit.test('Valid Notes', works);\n QUnit.test('Select Notes', selectNotes);\n },\n};\nfunction works(assert) {\n const manager = new KeyManager('g');\n assert.equal(manager.getAccidental('f').accidental, '#');\n manager.setKey('a');\n assert.equal(manager.getAccidental('c').accidental, '#');\n assert.equal(manager.getAccidental('a').accidental, null);\n assert.equal(manager.getAccidental('f').accidental, '#');\n manager.setKey('A');\n assert.equal(manager.getAccidental('c').accidental, '#');\n assert.equal(manager.getAccidental('a').accidental, null);\n assert.equal(manager.getAccidental('f').accidental, '#');\n}\nfunction selectNotes(assert) {\n const manager = new KeyManager('f');\n assert.equal(manager.selectNote('bb').note, 'bb');\n assert.equal(manager.selectNote('bb').accidental, 'b');\n assert.equal(manager.selectNote('g').note, 'g');\n assert.equal(manager.selectNote('g').accidental, null);\n assert.equal(manager.selectNote('b').note, 'b');\n assert.equal(manager.selectNote('b').accidental, null);\n assert.equal(manager.selectNote('a#').note, 'bb');\n assert.equal(manager.selectNote('g#').note, 'g#');\n // Changes have no effect?\n assert.equal(manager.selectNote('g#').note, 'g#');\n assert.equal(manager.selectNote('bb').note, 'bb');\n assert.equal(manager.selectNote('bb').accidental, 'b');\n assert.equal(manager.selectNote('g').note, 'g');\n assert.equal(manager.selectNote('g').accidental, null);\n assert.equal(manager.selectNote('b').note, 'b');\n assert.equal(manager.selectNote('b').accidental, null);\n assert.equal(manager.selectNote('a#').note, 'bb');\n assert.equal(manager.selectNote('g#').note, 'g#');\n // Changes should propagate\n manager.reset();\n assert.equal(manager.selectNote('g#').change, true);\n assert.equal(manager.selectNote('g#').change, false);\n assert.equal(manager.selectNote('g').change, true);\n assert.equal(manager.selectNote('g').change, false);\n assert.equal(manager.selectNote('g#').change, true);\n manager.reset();\n let note = manager.selectNote('bb');\n assert.equal(note.change, false);\n assert.equal(note.accidental, 'b');\n note = manager.selectNote('g');\n assert.equal(note.change, false);\n assert.equal(note.accidental, null);\n note = manager.selectNote('g#');\n assert.equal(note.change, true);\n assert.equal(note.accidental, '#');\n note = manager.selectNote('g');\n assert.equal(note.change, true);\n assert.equal(note.accidental, null);\n note = manager.selectNote('g');\n assert.equal(note.change, false);\n assert.equal(note.accidental, null);\n note = manager.selectNote('g#');\n assert.equal(note.change, true);\n assert.equal(note.accidental, '#');\n}\nVexFlowTests.register(KeyManagerTests);\nexport { KeyManagerTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Key Signature Tests\n//\nimport { MAJOR_KEYS, MINOR_KEYS, VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Glyph } from '../src/glyph';\nimport { KeySignature } from '../src/keysignature';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nconst KeySignatureTests = {\n Start() {\n QUnit.module('KeySignature');\n QUnit.test('Key Parser Test', parser);\n const run = VexFlowTests.runTests;\n run('Major Key Test', majorKeys);\n run('Minor Key Test', minorKeys);\n run('Stave Helper', staveHelper);\n run('Cancelled key test', majorKeysCanceled);\n run('Cancelled key (for each clef) test', keysCanceledForEachClef);\n run('Altered key test', majorKeysAltered);\n run('End key with clef test', endKeyWithClef);\n run('Key Signature Change test', changeKey);\n },\n};\nconst fontWidths = () => {\n const glyphScale = 39; // default font scale\n const sharpWidth = Glyph.getWidth('accidentalSharp', glyphScale) + 1;\n const flatWidth = Glyph.getWidth('accidentalFlat', glyphScale) + 1;\n const naturalWidth = Glyph.getWidth('accidentalNatural', glyphScale) + 2;\n const clefWidth = Glyph.getWidth('gClef', glyphScale) * 2; // widest clef\n return { sharpWidth, flatWidth, naturalWidth, clefWidth };\n};\nfunction parser(assert) {\n assert.expect(11);\n function catchError(spec) {\n assert.throws(() => Flow.keySignature(spec), /BadKeySignature/);\n }\n catchError('asdf');\n catchError('D!');\n catchError('E#');\n catchError('D#');\n catchError('#');\n catchError('b');\n catchError('Kb');\n catchError('Fb');\n catchError('Dbm');\n catchError('B#m');\n Flow.keySignature('B');\n Flow.keySignature('C');\n Flow.keySignature('Fm');\n Flow.keySignature('Ab');\n Flow.keySignature('Abm');\n Flow.keySignature('F#');\n Flow.keySignature('G#m');\n assert.ok(true, 'all pass');\n}\nfunction majorKeys(options, contextBuilder) {\n const w = fontWidths();\n const accidentalCount = 28; // total number in all the keys\n const casePadding = 10; // hard-coded in staveModifier\n const testCases = 7; // all keys, but includes key of C\n const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding;\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240);\n const stave1 = new Stave(10, 10, flatTestWidth);\n const stave2 = new Stave(10, 90, sharpTestWidth);\n const keys = MAJOR_KEYS;\n let keySig = null;\n for (let i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.addToStave(stave1);\n }\n for (let n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.addToStave(stave2);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction majorKeysCanceled(options, contextBuilder) {\n const scale = 0.9;\n const w = fontWidths();\n const flatPadding = 18;\n const sharpPadding = 20;\n const flatTestCases = 8;\n const sharpTestCases = 7;\n // magic numbers are the numbers of that symbol that appear in the test case\n const sharpTestWidth = 28 * w.sharpWidth + 21 * w.naturalWidth + sharpPadding * sharpTestCases + Stave.defaultPadding + w.clefWidth;\n const flatTestWidth = 28 * w.flatWidth + 28 * w.naturalWidth + flatPadding * flatTestCases + Stave.defaultPadding + w.clefWidth;\n const eFlatTestWidth = 28 * w.flatWidth + 32 * w.naturalWidth + flatPadding * flatTestCases + Stave.defaultPadding + w.clefWidth;\n const eSharpTestWidth = 28 * w.sharpWidth + 28 * w.naturalWidth + sharpPadding * sharpTestCases + Stave.defaultPadding + w.clefWidth;\n const maxWidth = Math.max(Math.max(sharpTestWidth, flatTestWidth, Math.max(eSharpTestWidth, eFlatTestWidth)));\n const ctx = contextBuilder(options.elementId, maxWidth + 100, 500);\n ctx.scale(scale, scale);\n const stave1 = new Stave(10, 10, flatTestWidth).addClef('treble');\n const stave2 = new Stave(10, 90, sharpTestWidth).addClef('treble');\n const stave3 = new Stave(10, 170, eFlatTestWidth).addClef('treble');\n const stave4 = new Stave(10, 250, eSharpTestWidth).addClef('treble');\n const keys = MAJOR_KEYS;\n let keySig = null;\n let i;\n let n;\n for (i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.cancelKey('Cb');\n keySig.setPadding(flatPadding);\n keySig.addToStave(stave1);\n }\n for (n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.cancelKey('C#');\n keySig.setPadding(sharpPadding);\n keySig.addToStave(stave2);\n }\n for (i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.cancelKey('E');\n keySig.setPadding(flatPadding);\n keySig.addToStave(stave3);\n }\n for (n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.cancelKey('Ab');\n keySig.setPadding(sharpPadding);\n keySig.addToStave(stave4);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n stave3.setContext(ctx);\n stave3.draw();\n stave4.setContext(ctx);\n stave4.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction keysCanceledForEachClef(options, contextBuilder) {\n const scale = 0.8;\n const w = fontWidths();\n const keyPadding = 10;\n const keys = ['C#', 'Cb'];\n const flatsKey = [7, 14];\n const sharpsKey = [14, 7];\n const natsKey = [7, 7];\n const max = 21 * Math.max(w.sharpWidth, w.flatWidth) * 2 + keyPadding * 6 + Stave.defaultPadding + w.clefWidth;\n const ctx = contextBuilder(options.elementId, max + 100, 380);\n ctx.scale(scale, scale);\n const x = 20;\n let y = 20;\n let tx = x;\n ['bass', 'tenor', 'soprano', 'mezzo-soprano', 'baritone-f'].forEach(function (clef) {\n keys.forEach((key, keyIx) => {\n const cancelKey = keys[(keyIx + 1) % 2];\n const width = flatsKey[keyIx] * w.flatWidth +\n natsKey[keyIx] * w.naturalWidth +\n sharpsKey[keyIx] * w.sharpWidth +\n keyPadding * 3 +\n w.clefWidth +\n Stave.defaultPadding;\n const stave = new Stave(tx, y, width);\n stave.setClef(clef);\n stave.addKeySignature(cancelKey);\n stave.addKeySignature(key, cancelKey);\n stave.addKeySignature(key);\n stave.setContext(ctx).draw();\n tx += width;\n });\n tx = x;\n y += 80;\n });\n options.assert.ok(true, 'all pass');\n}\nfunction majorKeysAltered(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 780, 500);\n ctx.scale(0.9, 0.9);\n const stave1 = new Stave(10, 10, 750).addClef('treble');\n const stave2 = new Stave(10, 90, 750).addClef('treble');\n const stave3 = new Stave(10, 170, 750).addClef('treble');\n const stave4 = new Stave(10, 250, 750).addClef('treble');\n const keys = MAJOR_KEYS;\n let keySig = null;\n let i;\n let n;\n for (i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.alterKey(['bs', 'bs']);\n keySig.setPadding(18);\n keySig.addToStave(stave1);\n }\n for (n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.alterKey(['+', '+', '+']);\n keySig.setPadding(20);\n keySig.addToStave(stave2);\n }\n for (i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.alterKey(['n', 'bs', 'bb']);\n keySig.setPadding(18);\n keySig.addToStave(stave3);\n }\n for (n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.alterKey(['++', '+', 'n', '+']);\n keySig.setPadding(20);\n keySig.addToStave(stave4);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n stave3.setContext(ctx);\n stave3.draw();\n stave4.setContext(ctx);\n stave4.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction minorKeys(options, contextBuilder) {\n const accidentalCount = 28; // total number in all the keys\n const w = fontWidths();\n const casePadding = 10; // hard-coded in staveModifier\n const testCases = 7; // all keys, but includes key of C\n const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding;\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240);\n const stave1 = new Stave(10, 10, flatTestWidth);\n const stave2 = new Stave(10, 90, sharpTestWidth);\n const keys = MINOR_KEYS;\n let keySig = null;\n for (let i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.addToStave(stave1);\n }\n for (let n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.addToStave(stave2);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction endKeyWithClef(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 200);\n ctx.scale(0.9, 0.9);\n const stave1 = new Stave(10, 10, 350);\n stave1\n .setKeySignature('G')\n .setBegBarType(BarlineType.REPEAT_BEGIN)\n .setEndBarType(BarlineType.REPEAT_END)\n .setClef('treble')\n .addTimeSignature('4/4')\n .setEndClef('bass')\n .setEndKeySignature('Cb');\n const stave2 = new Stave(10, 90, 350);\n stave2.setKeySignature('Cb').setClef('bass').setEndClef('treble').setEndKeySignature('G');\n stave1.setContext(ctx).draw();\n stave2.setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction staveHelper(options, contextBuilder) {\n const w = fontWidths();\n const accidentalCount = 28; // total number in all the keys\n const casePadding = 10; // hard-coded in staveModifier\n const testCases = 7; // all keys, but includes key of C\n const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding;\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240);\n const stave1 = new Stave(10, 10, flatTestWidth);\n const stave2 = new Stave(10, 90, sharpTestWidth);\n const keys = MAJOR_KEYS;\n for (let i = 0; i < 8; ++i) {\n stave1.addKeySignature(keys[i]);\n }\n for (let n = 8; n < keys.length; ++n) {\n stave2.addKeySignature(keys[n]);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction changeKey(options) {\n const f = VexFlowTests.makeFactory(options, 900);\n // The previous code was buggy: f.Stave(10, 10, 800), even though Factory.Stave() only accepts 1 argument.\n const stave = f.Stave({ x: 10, y: 10, width: 800 }).addClef('treble').addTimeSignature('C|');\n const voice = f\n .Voice()\n .setStrict(false)\n .addTickables([\n f.KeySigNote({ key: 'Bb' }),\n f.StaveNote({ keys: ['c/4'], duration: '1' }),\n f.BarNote(),\n f.KeySigNote({ key: 'D', cancelKey: 'Bb' }),\n f.StaveNote({ keys: ['c/4'], duration: '1' }),\n f.BarNote(),\n f.KeySigNote({ key: 'Bb' }),\n f.StaveNote({ keys: ['c/4'], duration: '1' }),\n f.BarNote(),\n f.KeySigNote({ key: 'D', alterKey: ['b', 'n'] }),\n f.StaveNote({ keys: ['c/4'], duration: '1' }),\n ]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(KeySignatureTests);\nexport { KeySignatureTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TickContext Mocks\nimport { Fraction } from '../src/fraction';\nimport { Tickable } from '../src/tickable';\nclass MockTickable extends Tickable {\n constructor() {\n super(...arguments);\n this.ticks = new Fraction(1, 1);\n this.width = 0;\n this.ignore_ticks = false;\n }\n init() {\n // DO NOTHING.\n }\n getX() {\n // eslint-disable-next-line\n return this.tickContext.getX();\n }\n getIntrinsicTicks() {\n return this.ticks.value();\n }\n getTicks() {\n return this.ticks;\n }\n setTicks(t) {\n this.ticks = new Fraction(t, 1);\n return this;\n }\n // Called by TickContext.preFormat().\n getMetrics() {\n return {\n width: 0,\n glyphWidth: 0,\n notePx: this.width,\n modLeftPx: 0,\n modRightPx: 0,\n leftDisplacedHeadPx: 0,\n rightDisplacedHeadPx: 0,\n glyphPx: 0,\n };\n }\n getWidth() {\n return this.width;\n }\n setWidth(w) {\n this.width = w;\n return this;\n }\n setVoice(v) {\n this.voice = v;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n setTickContext(tc) {\n this.tickContext = tc;\n return this;\n }\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n preFormat() {\n // DO NOTHING.\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\nexport { MockTickable };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// ModifierContext Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Modifier, ModifierContext } from '../src/index';\nconst ModifierContextTests = {\n Start() {\n QUnit.module('ModifierContext');\n QUnit.test('Modifier Width Test', width);\n QUnit.test('Modifier Management', management);\n },\n};\nfunction width(assert) {\n const mc = new ModifierContext();\n assert.equal(mc.getWidth(), 0, 'New modifier context has no width');\n}\nfunction management(assert) {\n const mc = new ModifierContext();\n const modifier1 = new Modifier();\n const modifier2 = new Modifier();\n mc.addMember(modifier1);\n mc.addMember(modifier2);\n const modifiers = mc.getMembers(Modifier.CATEGORY);\n assert.equal(modifiers.length, 2, 'Added two modifiers');\n}\nVexFlowTests.register(ModifierContextTests);\nexport { ModifierContextTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// MultiMeasureRest Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Font } from '../src/font';\nconst MultiMeasureRestTests = {\n Start() {\n QUnit.module('MultiMeasureRest');\n const run = VexFlowTests.runTests;\n run('Simple Test', simple);\n run('Stave with modifiers Test', staveWithModifiers);\n },\n};\nfunction simple(options) {\n const width = 910;\n const f = VexFlowTests.makeFactory(options, width, 300);\n const line_spacing_15px = { options: { spacing_between_lines_px: 15 } };\n // Each item below is an array that contains:\n // item[0] => staveParams to adjust vertical spacing between lines\n // item[1] => multiMeasureRestParams\n // eslint-disable-next-line\n const params = [\n [{}, { number_of_measures: 2, show_number: false }],\n [{}, { number_of_measures: 2 }],\n [{}, { number_of_measures: 2, line_thickness: 8, serif_thickness: 3 }],\n [{}, { number_of_measures: 1, use_symbols: true }],\n [{}, { number_of_measures: 2, use_symbols: true }],\n [{}, { number_of_measures: 3, use_symbols: true }],\n [{}, { number_of_measures: 4, use_symbols: true }],\n [{}, { number_of_measures: 5, use_symbols: true }],\n [{}, { number_of_measures: 6, use_symbols: true }],\n [{}, { number_of_measures: 7, use_symbols: true }],\n [{}, { number_of_measures: 8, use_symbols: true }],\n [{}, { number_of_measures: 9, use_symbols: true }],\n [{}, { number_of_measures: 10, use_symbols: true }],\n [{}, { number_of_measures: 11, use_symbols: true }],\n [{}, { number_of_measures: 11, use_symbols: false, padding_left: 20, padding_right: 20 }],\n [{}, { number_of_measures: 11, use_symbols: true, symbol_spacing: 5 }],\n [{}, { number_of_measures: 11, use_symbols: false, line: 3, number_line: 2 }],\n [{}, { number_of_measures: 11, use_symbols: true, line: 3, number_line: 2 }],\n [line_spacing_15px, { number_of_measures: 12 }],\n [line_spacing_15px, { number_of_measures: 9, use_symbols: true }],\n [line_spacing_15px, { number_of_measures: 12, spacing_between_lines_px: 15, number_glyph_point: 40 * 1.5 }],\n [\n line_spacing_15px,\n {\n number_of_measures: 9,\n spacing_between_lines_px: 15,\n use_symbols: true,\n number_glyph_point: 40 * 1.5,\n },\n ],\n [\n line_spacing_15px,\n {\n number_of_measures: 9,\n spacing_between_lines_px: 15,\n use_symbols: true,\n number_glyph_point: 40 * 1.5,\n semibreve_rest_glyph_scale: Flow.NOTATION_FONT_SCALE * 1.5,\n },\n ],\n ];\n const staveWidth = 100;\n let x = 0;\n let y = 0;\n const mmRests = params.map((param) => {\n if (x + staveWidth * 2 > width) {\n x = 0;\n y += 80;\n }\n const staveParams = param[0];\n const mmRestParams = param[1];\n staveParams.x = x;\n staveParams.y = y;\n staveParams.width = staveWidth;\n x += staveWidth;\n const stave = f.Stave(staveParams);\n return f.MultiMeasureRest(mmRestParams).setStave(stave);\n });\n f.draw();\n const xs = mmRests[0].getXs();\n // eslint-disable-next-line\n const strY = mmRests[0].getStave().getYForLine(-0.5);\n const str = 'TACET';\n const context = f.getContext();\n context.save();\n context.setFont(Font.SERIF, 16, 'bold');\n const metrics = context.measureText(str);\n context.fillText(str, xs.left + (xs.right - xs.left) * 0.5 - metrics.width * 0.5, strY);\n context.restore();\n options.assert.ok(true, 'Simple Test');\n}\nfunction staveWithModifiers(options) {\n const width = 910;\n const f = VexFlowTests.makeFactory(options, width, 200);\n let x = 0;\n let y = 0;\n // eslint-disable-next-line\n const params = [\n [{ clef: 'treble', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', timeSig: '4/4', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', endClef: 'bass', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', endKeySig: 'F', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }],\n [\n { clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } },\n { number_of_measures: 5, use_symbols: true },\n ],\n ];\n params.forEach((param) => {\n const staveOptions = param[0];\n // eslint-disable-next-line\n const staveParams = staveOptions.params;\n const mmrestParams = param[1];\n if (x + staveParams.width > width) {\n x = 0;\n y += 80;\n }\n staveParams.x = x;\n x += staveParams.width;\n staveParams.y = y;\n const stave = f.Stave(staveParams);\n if (staveOptions.clef) {\n stave.addClef(staveOptions.clef);\n }\n if (staveOptions.timeSig) {\n stave.addTimeSignature(staveOptions.timeSig);\n }\n if (staveOptions.keySig) {\n stave.addKeySignature(staveOptions.keySig);\n }\n if (staveOptions.endClef) {\n stave.addEndClef(staveOptions.endClef);\n }\n if (staveOptions.endKeySig) {\n stave.setEndKeySignature(staveOptions.endKeySig);\n }\n if (staveOptions.endTimeSig) {\n stave.setEndTimeSignature(staveOptions.endTimeSig);\n }\n return f.MultiMeasureRest(mmrestParams).setStave(stave);\n });\n f.draw();\n options.assert.ok(true, 'Stave with modifiers Test');\n}\nVexFlowTests.register(MultiMeasureRestTests);\nexport { MultiMeasureRestTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Music Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { KeyManager } from '../src/keymanager';\nimport { Music } from '../src/music';\nconst MusicTests = {\n Start() {\n QUnit.module('MusicTests');\n QUnit.test('Valid Notes', validNotes);\n QUnit.test('Valid Keys', validKeys);\n QUnit.test('Note Values', noteValue);\n QUnit.test('Interval Values', intervalValue);\n QUnit.test('Relative Notes', relativeNotes);\n QUnit.test('Relative Note Names', relativeNoteNames);\n QUnit.test('Canonical Notes', canonicalNotes);\n QUnit.test('Canonical Intervals', canonicalIntervals);\n QUnit.test('Scale Tones', scaleTones);\n QUnit.test('Scale Intervals', scaleIntervals);\n },\n};\nfunction validNotes(assert) {\n assert.expect(10);\n const music = new Music();\n let parts = music.getNoteParts('c');\n assert.equal(parts.root, 'c');\n assert.equal(parts.accidental, null);\n // getNoteParts() converts its argument to lowercase.\n parts = music.getNoteParts('C');\n assert.equal(parts.root, 'c');\n assert.equal(parts.accidental, null);\n parts = music.getNoteParts('c#');\n assert.equal(parts.root, 'c');\n assert.equal(parts.accidental, '#');\n parts = music.getNoteParts('c##');\n assert.equal(parts.root, 'c');\n assert.equal(parts.accidental, '##');\n assert.throws(() => music.getNoteParts('r'), /BadArguments/, 'Invalid note: r');\n assert.throws(() => music.getNoteParts(''), /BadArguments/, \"Invalid note: ''\");\n}\nfunction validKeys(assert) {\n assert.expect(18);\n const music = new Music();\n let parts = music.getKeyParts('c');\n assert.equal(parts.root, 'c');\n assert.equal(parts.accidental, null);\n assert.equal(parts.type, 'M');\n parts = music.getKeyParts('d#');\n assert.equal(parts.root, 'd');\n assert.equal(parts.accidental, '#');\n assert.equal(parts.type, 'M');\n parts = music.getKeyParts('fbm');\n assert.equal(parts.root, 'f');\n assert.equal(parts.accidental, 'b');\n assert.equal(parts.type, 'm');\n parts = music.getKeyParts('c#mel');\n assert.equal(parts.root, 'c');\n assert.equal(parts.accidental, '#');\n assert.equal(parts.type, 'mel');\n parts = music.getKeyParts('g#harm');\n assert.equal(parts.root, 'g');\n assert.equal(parts.accidental, '#');\n assert.equal(parts.type, 'harm');\n assert.throws(() => music.getKeyParts('r'), /BadArguments/, 'Invalid key: r');\n assert.throws(() => music.getKeyParts(''), /BadArguments/, `Invalid key: ''`);\n assert.throws(() => music.getKeyParts('#m'), /BadArguments/, 'Invalid key: #m');\n}\nfunction noteValue(assert) {\n assert.expect(3);\n const music = new Music();\n let note = music.getNoteValue('c');\n assert.equal(note, 0);\n assert.throws(() => music.getNoteValue('r'), /BadArguments/, 'Invalid note name');\n note = music.getNoteValue('f#');\n assert.equal(note, 6);\n}\nfunction intervalValue(assert) {\n assert.expect(2);\n const music = new Music();\n const value = music.getIntervalValue('b2');\n assert.equal(value, 1);\n assert.throws(() => music.getIntervalValue('7'), /BadArguments/, 'Invalid interval name');\n}\nfunction relativeNotes(assert) {\n assert.expect(8);\n const music = new Music();\n let value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b5'));\n assert.equal(value, 6);\n assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('bc'), music.getIntervalValue('b2')), /BadArguments/, 'Invalid note');\n assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p3')), /BadArguments/, 'Invalid interval');\n // Direction\n value = music.getRelativeNoteValue(music.getNoteValue('d'), music.getIntervalValue('2'), -1);\n assert.equal(value, 0);\n assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p4'), 0), /BadArguments/, 'Invalid direction: 0');\n // Rollover\n value = music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('b5'));\n assert.equal(value, 5);\n // Reverse rollover\n value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b2'), -1);\n assert.equal(value, 11);\n // Practical tests\n value = music.getRelativeNoteValue(music.getNoteValue('g'), music.getIntervalValue('p5'));\n assert.equal(value, 2);\n}\nfunction relativeNoteNames(assert) {\n assert.expect(9);\n const music = new Music();\n assert.equal(music.getRelativeNoteName('b', music.getNoteValue('c#')), 'b##');\n assert.equal(music.getRelativeNoteName('c', music.getNoteValue('c')), 'c');\n assert.equal(music.getRelativeNoteName('c', music.getNoteValue('db')), 'c#');\n assert.equal(music.getRelativeNoteName('c', music.getNoteValue('b')), 'cb');\n assert.equal(music.getRelativeNoteName('c#', music.getNoteValue('db')), 'c#');\n assert.equal(music.getRelativeNoteName('e', music.getNoteValue('f#')), 'e##');\n assert.equal(music.getRelativeNoteName('e', music.getNoteValue('d#')), 'eb');\n assert.equal(music.getRelativeNoteName('e', music.getNoteValue('fb')), 'e');\n assert.throws(() => music.getRelativeNoteName('e', music.getNoteValue('g#')), /BadArguments/, 'Too far away. Notes not related.');\n}\nfunction canonicalNotes(assert) {\n assert.expect(3);\n const music = new Music();\n assert.equal(music.getCanonicalNoteName(0), 'c');\n assert.equal(music.getCanonicalNoteName(2), 'd');\n assert.throws(() => music.getCanonicalNoteName(-1), /BadArguments/, 'Invalid note value');\n}\nfunction canonicalIntervals(assert) {\n assert.expect(3);\n const music = new Music();\n assert.equal(music.getCanonicalIntervalName(0), 'unison');\n assert.equal(music.getCanonicalIntervalName(2), 'M2');\n assert.throws(() => music.getCanonicalIntervalName(-1), /BadArguments/, 'Invalid interval value');\n}\nfunction scaleTones(assert) {\n assert.expect(24);\n // C Major\n const music = new Music();\n const manager = new KeyManager('CM');\n const c_major = music.getScaleTones(music.getNoteValue('c'), Music.scales.major);\n let values = ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n assert.equal(c_major.length, 7);\n for (let i = 0; i < c_major.length; ++i) {\n assert.equal(music.getCanonicalNoteName(c_major[i]), values[i]);\n }\n // Dorian\n const c_dorian = music.getScaleTones(music.getNoteValue('c'), Music.scales.dorian);\n values = ['c', 'd', 'eb', 'f', 'g', 'a', 'bb'];\n let note = null;\n assert.equal(c_dorian.length, 7);\n for (let i = 0; i < c_dorian.length; ++i) {\n note = music.getCanonicalNoteName(c_dorian[i]);\n assert.equal(manager.selectNote(note).note, values[i]);\n }\n // Mixolydian\n const c_mixolydian = music.getScaleTones(music.getNoteValue('c'), Music.scales.mixolydian);\n values = ['c', 'd', 'e', 'f', 'g', 'a', 'bb'];\n assert.equal(c_mixolydian.length, 7);\n for (let i = 0; i < c_mixolydian.length; ++i) {\n note = music.getCanonicalNoteName(c_mixolydian[i]);\n assert.equal(manager.selectNote(note).note, values[i]);\n }\n}\nfunction scaleIntervals(assert) {\n assert.expect(6);\n const m = new Music();\n assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('d'))), 'M2');\n assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('g'), m.getNoteValue('c'))), 'p4');\n assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('c'))), 'unison');\n assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('f'), m.getNoteValue('cb'))), 'dim5');\n // Forwards and backwards\n assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), 1)), 'b7');\n assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), -1)), 'M2');\n}\nVexFlowTests.register(MusicTests);\nexport { MusicTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// NoteHead Tests\n// TODO: There is a bug in RenderContext.scale(). The CanvasContext works as expected.\n// Each time you call scale(sx, sy), it multiplies the sx and sy by the currently stored scale.\n// The SVGContext operates differently. It just sets the sx and sy as the new scale, instead of multiplying it.\n// See: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/scale\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { NoteHead } from '../src/notehead';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { TickContext } from '../src/tickcontext';\nimport { Voice } from '../src/voice';\nconst NoteHeadTests = {\n Start() {\n QUnit.module('NoteHead');\n const run = VexFlowTests.runTests;\n run('Basic', basic);\n run('Various Note Heads 1', variousNoteHeads);\n run('Various Note Heads 2', variousNoteHeads2);\n run('Various Heads', variousHeads);\n run('Drum Chord Heads', drumChordHeads);\n run('Bounding Boxes', basicBoundingBoxes);\n },\n};\nfunction setContextStyle(ctx) {\n // The final scale should be 1.8.\n ctx.scale(0.9, 0.9);\n ctx.scale(2.0, 2.0);\n //ctx.scale(1.8, 1.8);\n ctx.font = '10pt Arial';\n}\nfunction basic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 450, 250);\n setContextStyle(ctx);\n const stave = new Stave(10, 0, 250).addClef('treble');\n stave.setContext(ctx).draw();\n const formatter = new Formatter();\n const voice = new Voice(Flow.TIME4_4).setStrict(false);\n const note_head1 = new NoteHead({ duration: '4', line: 3 });\n const note_head2 = new NoteHead({ duration: '1', line: 2.5 });\n const note_head3 = new NoteHead({ duration: '2', line: 0 });\n voice.addTickables([note_head1, note_head2, note_head3]);\n formatter.joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok('Basic NoteHead test');\n}\n/**\n * Used by the next two test cases to draw a note.\n */\nfunction showNote(noteStruct, stave, ctx, x) {\n const note = new StaveNote(noteStruct).setStave(stave);\n new TickContext().addTickable(note).preFormat().setX(x);\n note.setContext(ctx).draw();\n return note;\n}\nfunction variousHeads(options, contextBuilder) {\n const notes = [\n { keys: ['g/5/d0'], duration: '4' },\n { keys: ['g/5/d1'], duration: '4' },\n { keys: ['g/5/d2'], duration: '4' },\n { keys: ['g/5/d3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/t0'], duration: '1' },\n { keys: ['g/5/t1'], duration: '4' },\n { keys: ['g/5/t2'], duration: '4' },\n { keys: ['g/5/t3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/x0'], duration: '1' },\n { keys: ['g/5/x1'], duration: '4' },\n { keys: ['g/5/x2'], duration: '4' },\n { keys: ['g/5/x3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/s1'], duration: '4' },\n { keys: ['g/5/s2'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/r1'], duration: '4' },\n { keys: ['g/5/r2'], duration: '4' },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n // Draw two staves, one with up-stems and one with down-stems.\n for (let staveNum = 0; staveNum < 2; ++staveNum) {\n const stave = new Stave(10, 10 + staveNum * 120, notes.length * 25 + 75)\n .addClef('percussion')\n .setContext(ctx)\n .draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.stem_direction = staveNum === 0 ? -1 : 1;\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n }\n}\nfunction variousNoteHeads(options, contextBuilder) {\n const notes = [\n { keys: ['g/5/d'], duration: '1/2' },\n { keys: ['g/5/d'], duration: '1' },\n { keys: ['g/5/d'], duration: '2' },\n { keys: ['g/5/d'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/x'], duration: '1/2' },\n { keys: ['g/5/x'], duration: '1' },\n { keys: ['g/5/x'], duration: '2' },\n { keys: ['g/5/x'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/cx'], duration: '1/2' },\n { keys: ['g/5/cx'], duration: '1' },\n { keys: ['g/5/cx'], duration: '2' },\n { keys: ['g/5/cx'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/tu'], duration: '1/2' },\n { keys: ['g/5/tu'], duration: '1' },\n { keys: ['g/5/tu'], duration: '2' },\n { keys: ['g/5/tu'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/td'], duration: '1/2' },\n { keys: ['g/5/td'], duration: '1' },\n { keys: ['g/5/td'], duration: '2' },\n { keys: ['g/5/td'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/sf'], duration: '1/2' },\n { keys: ['g/5/sf'], duration: '1' },\n { keys: ['g/5/sf'], duration: '2' },\n { keys: ['g/5/sf'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/sb'], duration: '1/2' },\n { keys: ['g/5/sb'], duration: '1' },\n { keys: ['g/5/sb'], duration: '2' },\n { keys: ['g/5/sb'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/ci'], duration: '1/2' },\n { keys: ['g/5/ci'], duration: '1' },\n { keys: ['g/5/ci'], duration: '2' },\n { keys: ['g/5/ci'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/sq'], duration: '1/2' },\n { keys: ['g/5/sq'], duration: '1' },\n { keys: ['g/5/sq'], duration: '2' },\n { keys: ['g/5/sq'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n // Draw two staves, one with up-stems and one with down-stems.\n for (let staveNum = 0; staveNum < 2; ++staveNum) {\n const stave = new Stave(10, 10 + staveNum * 120, notes.length * 25 + 75)\n .addClef('percussion')\n .setContext(ctx)\n .draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.stem_direction = staveNum === 0 ? -1 : 1;\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n }\n}\nfunction variousNoteHeads2(options, contextBuilder) {\n const notes = [\n { keys: ['g/5/do'], duration: '4', auto_stem: true },\n { keys: ['g/5/re'], duration: '4', auto_stem: true },\n { keys: ['g/5/mi'], duration: '4', auto_stem: true },\n { keys: ['g/5/fa'], duration: '4', auto_stem: true },\n { keys: ['e/4/faup'], duration: '4', auto_stem: true },\n { keys: ['g/5/so'], duration: '4', auto_stem: true },\n { keys: ['g/5/la'], duration: '4', auto_stem: true },\n { keys: ['g/5/ti'], duration: '4', auto_stem: true },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n const stave = new Stave(10, 10, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drumChordHeads(options, contextBuilder) {\n const notes = [\n { keys: ['a/4/d0', 'g/5/x3'], duration: '4' },\n { keys: ['a/4/x3', 'g/5/d0'], duration: '4' },\n { keys: ['a/4/d1', 'g/5/x2'], duration: '4' },\n { keys: ['a/4/x2', 'g/5/d1'], duration: '4' },\n { keys: ['a/4/d2', 'g/5/x1'], duration: '4' },\n { keys: ['a/4/x1', 'g/5/d2'], duration: '4' },\n { keys: ['a/4/d3', 'g/5/x0'], duration: '4' },\n { keys: ['a/4/x0', 'g/5/d3'], duration: '4' },\n { keys: ['a/4', 'g/5/d0'], duration: '4' },\n { keys: ['a/4/x3', 'g/5'], duration: '4' },\n { keys: ['a/4/t0', 'g/5/s1'], duration: '4' },\n { keys: ['a/4/s1', 'g/5/t0'], duration: '4' },\n { keys: ['a/4/t1', 'g/5/s2'], duration: '4' },\n { keys: ['a/4/s2', 'g/5/t1'], duration: '4' },\n { keys: ['a/4/t2', 'g/5/r1'], duration: '4' },\n { keys: ['a/4/r1', 'g/5/t2'], duration: '4' },\n { keys: ['a/4/t3', 'g/5/r2'], duration: '4' },\n { keys: ['a/4/r2', 'g/5/t3'], duration: '4' },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n // Draw two staves, one with up-stems and one with down-stems.\n for (let h = 0; h < 2; ++h) {\n const stave = new Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.stem_direction = h === 0 ? -1 : 1;\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n }\n}\nfunction basicBoundingBoxes(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 450, 250);\n setContextStyle(ctx);\n // 250 is 450/1.8\n const stave = new Stave(10, 0, 250).addClef('treble');\n stave.setContext(ctx).draw();\n const formatter = new Formatter();\n const voice = new Voice(Flow.TIME4_4).setStrict(false);\n const nh1 = new StaveNote({ keys: ['b/4'], duration: '4' });\n const nh2 = new StaveNote({ keys: ['a/4'], duration: '2' });\n const nh3 = new NoteHead({ duration: '1', line: 0 });\n voice.addTickables([nh1, nh2, nh3]);\n formatter.joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n for (const bb of [nh1.noteHeads[0].getBoundingBox(), nh2.noteHeads[0].getBoundingBox(), nh3.getBoundingBox()]) {\n ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH());\n }\n ctx.stroke();\n options.assert.ok('NoteHead Bounding Boxes');\n}\nVexFlowTests.register(NoteHeadTests);\nexport { NoteHeadTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Taehoon Moon 2016\n//\n// NoteSubGroup Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { BarNote } from '../src/barnote';\nimport { Note } from '../src/note';\nimport { BarlineType } from '../src/stavebarline';\nconst NoteSubGroupTests = {\n Start() {\n QUnit.module('NoteSubGroup');\n const run = VexFlowTests.runTests;\n run('Basic - ClefNote, TimeSigNote and BarNote', basic);\n run('Multi Voice', multiVoiceSingleDraw);\n run('Multi Voice Multiple Draws', multiVoiceDoubleDraw);\n run('Multi Staff', multiStaff);\n },\n};\n// Return three helper functions for creating StaveNotes, and adding Accidental & NoteSubGroup to those StaveNotes.\nfunction createShortcuts(f) {\n return {\n createStaveNote: (noteStruct) => f.StaveNote(noteStruct),\n addAccidental: (note, accid) => note.addModifier(f.Accidental({ type: accid }), 0),\n addSubGroup: (note, subNotes) => note.addModifier(f.NoteSubGroup({ notes: subNotes }), 0),\n };\n}\nfunction basic(options) {\n const f = VexFlowTests.makeFactory(options, 750, 200);\n const ctx = f.getContext();\n const stave = f.Stave({ width: 600 }).addClef('treble');\n const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f);\n const notes = [\n { keys: ['f/5'], stem_direction: -1, duration: '4' },\n { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'bass' },\n { keys: ['g/4'], stem_direction: -1, duration: '4', clef: 'alto' },\n { keys: ['a/4'], stem_direction: -1, duration: '4', clef: 'alto' },\n { keys: ['c/4'], stem_direction: -1, duration: '4', clef: 'tenor' },\n { keys: ['c/3'], stem_direction: +1, duration: '4', clef: 'tenor' },\n { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'tenor' },\n { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'tenor' },\n ].map(createStaveNote);\n addAccidental(notes[1], '#');\n addAccidental(notes[2], 'n');\n addSubGroup(notes[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]);\n addSubGroup(notes[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } })]);\n addSubGroup(notes[4], [f.ClefNote({ type: 'tenor', options: { size: 'small' } }), new BarNote()]);\n addSubGroup(notes[5], [f.TimeSigNote({ time: '6/8' })]);\n addSubGroup(notes[6], [new BarNote(BarlineType.REPEAT_BEGIN)]);\n addAccidental(notes[4], 'b');\n addAccidental(notes[6], 'bb');\n const voice = f.Voice().setStrict(false).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n notes.forEach((note) => Note.plotMetrics(ctx, note, 150));\n VexFlowTests.plotLegendForNoteWidth(ctx, 620, 120);\n options.assert.ok(true, 'all pass');\n}\nfunction multiVoiceSingleDraw(options) {\n multiVoiceHelper(options, 1);\n}\n/**\n * Call Factory.draw() twice. It should look identical to the multiVoice test case above.\n */\nfunction multiVoiceDoubleDraw(options) {\n multiVoiceHelper(options, 2);\n}\n/**\n * Used by multiVoiceSingleDraw and multiVoiceDoubleDraw above.\n */\nfunction multiVoiceHelper(options, numDraws) {\n const f = VexFlowTests.makeFactory(options, 550, 200);\n const ctx = f.getContext();\n const stave = f.Stave().addClef('treble');\n const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f);\n const notes1 = [\n { keys: ['f/5'], stem_direction: 1, duration: '4' },\n { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' },\n { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' },\n { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' },\n ].map(createStaveNote);\n const notes2 = [\n { keys: ['c/4'], stem_direction: -1, duration: '4' },\n { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' },\n { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' },\n { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' },\n ].map(createStaveNote);\n addAccidental(notes1[1], '#');\n addSubGroup(notes1[1], [\n f.ClefNote({ type: 'bass', options: { size: 'small' } }),\n new BarNote(BarlineType.REPEAT_BEGIN),\n f.TimeSigNote({ time: '3/4' }),\n ]);\n addSubGroup(notes2[2], [\n f.ClefNote({ type: 'alto', options: { size: 'small' } }),\n f.TimeSigNote({ time: '9/8' }),\n new BarNote(BarlineType.DOUBLE),\n ]);\n addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]);\n addAccidental(notes1[2], 'b');\n addAccidental(notes2[3], '#');\n const voices = [f.Voice().addTickables(notes1), f.Voice().addTickables(notes2)];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n for (let i = 0; i < numDraws; i++) {\n f.draw();\n }\n notes1.forEach((note) => Note.plotMetrics(ctx, note, 150));\n options.assert.ok(true, 'all pass');\n}\nfunction multiStaff(options) {\n const f = VexFlowTests.makeFactory(options, 550, 400);\n const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f);\n const stave1 = f.Stave({ x: 15, y: 30, width: 500 }).setClef('treble');\n const notes1 = [\n { keys: ['f/5'], stem_direction: 1, duration: '4' },\n { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' },\n { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' },\n { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' },\n ].map(createStaveNote);\n const notes2 = [\n { keys: ['c/4'], stem_direction: -1, duration: '4' },\n { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' },\n { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' },\n { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' },\n ].map(createStaveNote);\n const stave2 = f.Stave({ x: 15, y: 150, width: 500 }).setClef('bass');\n const notes3 = [\n { keys: ['e/3'], duration: '8', stem_direction: -1, clef: 'bass' },\n { keys: ['g/4'], duration: '8', stem_direction: 1, clef: 'treble' },\n { keys: ['d/4'], duration: '8', stem_direction: 1, clef: 'treble' },\n { keys: ['f/4'], duration: '8', stem_direction: 1, clef: 'treble' },\n { keys: ['c/4'], duration: '8', stem_direction: 1, clef: 'treble' },\n { keys: ['g/3'], duration: '8', stem_direction: -1, clef: 'bass' },\n { keys: ['d/3'], duration: '8', stem_direction: -1, clef: 'bass' },\n { keys: ['f/3'], duration: '8', stem_direction: -1, clef: 'bass' },\n ].map(createStaveNote);\n f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'brace' });\n f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleLeft' });\n f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleRight' });\n f.Beam({ notes: notes3.slice(1, 4) });\n f.Beam({ notes: notes3.slice(5) });\n addAccidental(notes1[1], '#');\n addSubGroup(notes1[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } }), f.TimeSigNote({ time: '3/4' })]);\n addSubGroup(notes2[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } }), f.TimeSigNote({ time: '9/8' })]);\n addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]);\n addSubGroup(notes3[1], [f.ClefNote({ type: 'treble', options: { size: 'small' } })]);\n addSubGroup(notes3[5], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]);\n addAccidental(notes3[0], '#');\n addAccidental(notes3[3], 'b');\n addAccidental(notes3[5], '#');\n addAccidental(notes1[2], 'b');\n addAccidental(notes2[3], '#');\n const voice1 = f.Voice().addTickables(notes1);\n const voice2 = f.Voice().addTickables(notes2);\n const voice3 = f.Voice().addTickables(notes3);\n f.Formatter().joinVoices([voice1, voice2]).joinVoices([voice3]).formatToStave([voice1, voice2, voice3], stave1);\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(NoteSubGroupTests);\nexport { NoteSubGroupTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\n//\n// OffscreenCanvas Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { CanvasContext } from '../src/canvascontext';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nimport { globalObject } from '../src/util';\nconst OffscreenCanvasTests = {\n Start() {\n // At the time of writing, OffscreenCanvas is still an experimental technology.\n if (globalObject().OffscreenCanvas === undefined) {\n return;\n }\n QUnit.module('OffscreenCanvas');\n QUnit.test('Simple Test', simpleTest);\n },\n};\nfunction simpleTest(assert) {\n // Create a CanvasContext from an OffscreenCanvas.\n // eslint-disable-next-line\n // @ts-ignore\n const offscreenCanvas = new OffscreenCanvas(550, 200);\n // eslint-disable-next-line\n // @ts-ignore\n const offscreenCtx = offscreenCanvas.getContext('2d');\n if (offscreenCtx == null) {\n throw new Error(\"Couldn't create offscreen context\");\n }\n const ctx = new CanvasContext(offscreenCtx);\n // Render to the OffscreenCavans.\n const stave = new Stave(10, 50, 200);\n stave.setEndBarType(BarlineType.END);\n stave.addClef('treble').setContext(ctx).draw();\n const notes = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n // Copy the contents of the OffscreenCanvas to an HTMLCanvasElement.\n const imgBmp = offscreenCanvas.transferToImageBitmap();\n const canvas = document.createElement('canvas');\n canvas.width = offscreenCanvas.width;\n canvas.height = offscreenCanvas.height;\n const canvasCtx = canvas.getContext('2d');\n if (canvasCtx == null) {\n throw new Error(\"Couldn't create canvas context\");\n }\n canvasCtx.drawImage(imgBmp, 0, 0);\n document.body.appendChild(canvas);\n assert.ok(true, 'all pass');\n}\nVexFlowTests.register(OffscreenCanvasTests);\nexport { OffscreenCanvasTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Cyril Silverman\n//\n// Ornament Tests\n// TODO: Formatting for Jazz Ornaments is incorrect. The last note + ornament bleeds into the next measure.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Formatter } from '../src/formatter';\nimport { Glyph } from '../src/glyph';\nimport { Ornament } from '../src/ornament';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Voice, VoiceMode } from '../src/voice';\nconst OrnamentTests = {\n Start() {\n QUnit.module('Ornament');\n const run = VexFlowTests.runTests;\n run('Ornaments', drawOrnaments);\n run('Ornaments Vertically Shifted', drawOrnamentsDisplaced);\n run('Ornaments - Delayed turns', drawOrnamentsDelayed);\n run('Ornaments - Delayed turns, Multiple Draws', drawOrnamentsDelayedMultipleDraws);\n run('Stacked', drawOrnamentsStacked);\n run('With Upper/Lower Accidentals', drawOrnamentsWithAccidentals);\n run('Jazz Ornaments', jazzOrnaments);\n },\n};\nfunction drawOrnaments(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 750, 195);\n const stave = new Stave(10, 30, 700);\n stave.setContext(ctx).draw();\n const notes = [\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(new Ornament('mordent'), 0);\n notes[1].addModifier(new Ornament('mordent_inverted'), 0);\n notes[2].addModifier(new Ornament('turn'), 0);\n notes[3].addModifier(new Ornament('turn_inverted'), 0);\n notes[4].addModifier(new Ornament('tr'), 0);\n notes[5].addModifier(new Ornament('upprall'), 0);\n notes[6].addModifier(new Ornament('downprall'), 0);\n notes[7].addModifier(new Ornament('prallup'), 0);\n notes[8].addModifier(new Ornament('pralldown'), 0);\n notes[9].addModifier(new Ornament('upmordent'), 0);\n notes[10].addModifier(new Ornament('downmordent'), 0);\n notes[11].addModifier(new Ornament('lineprall'), 0);\n notes[12].addModifier(new Ornament('prallprall'), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, stave, notes);\n}\nfunction drawOrnamentsDisplaced(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 750, 195);\n const stave = new Stave(10, 30, 700);\n stave.setContext(ctx).draw();\n const notes = [\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(new Ornament('mordent'), 0);\n notes[1].addModifier(new Ornament('mordent_inverted'), 0);\n notes[1].addModifier(new Ornament('mordent_inverted'), 0);\n notes[2].addModifier(new Ornament('turn'), 0);\n notes[3].addModifier(new Ornament('turn_inverted'), 0);\n notes[4].addModifier(new Ornament('tr'), 0);\n notes[5].addModifier(new Ornament('upprall'), 0);\n notes[6].addModifier(new Ornament('downprall'), 0);\n notes[7].addModifier(new Ornament('prallup'), 0);\n notes[8].addModifier(new Ornament('pralldown'), 0);\n notes[9].addModifier(new Ornament('upmordent'), 0);\n notes[10].addModifier(new Ornament('downmordent'), 0);\n notes[11].addModifier(new Ornament('lineprall'), 0);\n notes[12].addModifier(new Ornament('prallprall'), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, stave, notes);\n}\n/**\n * Helper function for the next two tests: drawOrnamentsDelayed and drawOrnamentsDelayedMultipleDraws.\n * setDelayed(true) shifts the turn symbol to the right (after its note).\n */\nconst addDelayedTurns = (f) => {\n // Get the rendering context\n const context = f.getContext();\n const stave = f.Stave({ x: 10, y: 30, width: 500 });\n stave.setContext(context).draw();\n const notes = [\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(f.Ornament('turn', { delayed: true }), 0);\n notes[1].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0);\n notes[2].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0);\n notes[3].addModifier(f.Ornament('turn', { delayed: true }), 0);\n return { context, stave, notes };\n};\nfunction drawOrnamentsDelayed(options) {\n options.assert.expect(0);\n const f = VexFlowTests.makeFactory(options, 550, 195);\n const { context, stave, notes } = addDelayedTurns(f);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(context, stave, notes);\n}\nfunction drawOrnamentsDelayedMultipleDraws(options) {\n options.assert.expect(0);\n const f = VexFlowTests.makeFactory(options, 550, 195);\n const { context, stave, notes } = addDelayedTurns(f);\n // We can FormatAndDraw() two times, and it looks fine.\n // However, if you inspect the SVG element, you will see duplicate paths.\n Formatter.FormatAndDraw(context, stave, notes);\n Formatter.FormatAndDraw(context, stave, notes);\n}\nfunction drawOrnamentsStacked(options) {\n options.assert.expect(0);\n // Get the rendering context\n const f = VexFlowTests.makeFactory(options, 550, 195);\n const ctx = f.getContext();\n const stave = f.Stave({ x: 10, y: 30, width: 500 });\n stave.setContext(ctx).draw();\n const notes = [\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(f.Ornament('mordent'), 0);\n notes[1].addModifier(f.Ornament('turn_inverted'), 0);\n notes[2].addModifier(f.Ornament('turn'), 0);\n notes[3].addModifier(f.Ornament('turn_inverted'), 0);\n notes[0].addModifier(f.Ornament('turn'), 0);\n notes[1].addModifier(f.Ornament('prallup'), 0);\n notes[2].addModifier(f.Ornament('upmordent'), 0);\n notes[3].addModifier(f.Ornament('lineprall'), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, stave, notes);\n}\nfunction drawOrnamentsWithAccidentals(options) {\n options.assert.expect(0);\n // Get the rendering context\n const f = VexFlowTests.makeFactory(options, 650, 250);\n const ctx = f.getContext();\n const stave = f.Stave({ x: 10, y: 60, width: 600 });\n stave.setContext(ctx).draw();\n const notes = [\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(f.Ornament('mordent', { lowerAccidental: '#', upperAccidental: '#' }), 0);\n notes[1].addModifier(f.Ornament('turn_inverted', { lowerAccidental: 'b', upperAccidental: 'b' }), 0);\n notes[2].addModifier(f.Ornament('turn', { upperAccidental: '##', lowerAccidental: '##' }), 0);\n notes[3].addModifier(f.Ornament('mordent_inverted', { lowerAccidental: 'db', upperAccidental: 'db' }), 0);\n notes[4].addModifier(f.Ornament('turn_inverted', { upperAccidental: '++', lowerAccidental: '++' }), 0);\n notes[5].addModifier(f.Ornament('tr', { upperAccidental: 'n', lowerAccidental: 'n' }), 0);\n notes[6].addModifier(f.Ornament('prallup', { upperAccidental: 'd', lowerAccidental: 'd' }), 0);\n notes[7].addModifier(f.Ornament('lineprall', { upperAccidental: 'db', lowerAccidental: 'db' }), 0);\n notes[8].addModifier(f.Ornament('upmordent', { upperAccidental: 'bbs', lowerAccidental: 'bbs' }), 0);\n notes[9].addModifier(f.Ornament('prallprall', { upperAccidental: 'bb', lowerAccidental: 'bb' }), 0);\n notes[10].addModifier(f.Ornament('turn_inverted', { upperAccidental: '+', lowerAccidental: '+' }), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, stave, notes);\n}\nfunction jazzOrnaments(options) {\n const clefWidth = Glyph.getWidth('gClef', 38); // widest clef\n // Helper function.\n function draw(modifiers, keys, x, width, y, stemDirection) {\n // Helper function to create a StaveNote.\n const note = (keys, duration, modifier, stemDirection) => {\n const n = new StaveNote({ keys, duration, stem_direction: stemDirection })\n .addModifier(modifier, 0)\n .addModifier(new Accidental('b'), 0);\n const dot = duration.indexOf('d') >= 0;\n if (dot) {\n Dot.buildAndAttach([n], { all: true });\n }\n return n;\n };\n const stave = new Stave(x, y, width).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(keys, '4d', modifiers[0], stemDirection),\n note(keys, '8', modifiers[1], stemDirection),\n note(keys, '4d', modifiers[2], stemDirection),\n note(keys, '8', modifiers[3], stemDirection),\n ];\n if (modifiers.length > 4) {\n notes[3].addModifier(modifiers[4], 0);\n }\n Beam.generateBeams(notes);\n const voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n }).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n const formatter = new Formatter().joinVoices([voice]);\n formatter.format([voice], width - Stave.defaultPadding - clefWidth);\n stave.setContext(ctx).draw();\n voice.draw(ctx, stave);\n }\n options.assert.expect(0);\n const f = VexFlowTests.makeFactory(options, 950, 400);\n const ctx = f.getContext();\n ctx.scale(1, 1);\n const xStart = 10;\n const width = 300;\n const yStart = 50;\n const staffHeight = 70;\n let curX = xStart;\n let curY = yStart;\n let mods = [\n // measure 1\n f.Ornament('scoop'),\n f.Ornament('doit'),\n f.Ornament('fall'),\n f.Ornament('doitLong'),\n ];\n draw(mods, ['a/5'], curX, width, curY, -1);\n curX += width;\n mods = [\n // measure 2\n f.Ornament('fallLong'),\n f.Ornament('bend'),\n f.Ornament('plungerClosed'),\n f.Ornament('plungerOpen'),\n f.Ornament('bend'),\n ];\n draw(mods, ['a/5'], curX, width, curY, -1);\n curX += width;\n mods = [\n // measure 3\n f.Ornament('flip'),\n f.Ornament('jazzTurn'),\n f.Ornament('smear'),\n f.Ornament('doit'),\n ];\n draw(mods, ['a/5'], curX, width, curY, 1);\n // second line\n curX = xStart;\n curY += staffHeight;\n mods = [\n // measure 4\n f.Ornament('scoop'),\n f.Ornament('doit'),\n f.Ornament('fall'),\n f.Ornament('doitLong'),\n ];\n draw(mods, ['e/5'], curX, width, curY);\n curX += width;\n mods = [\n // measure 5\n f.Ornament('fallLong'),\n f.Ornament('bend'),\n f.Ornament('plungerClosed'),\n f.Ornament('plungerOpen'),\n f.Ornament('bend'),\n ];\n draw(mods, ['e/5'], curX, width, curY);\n curX += width;\n mods = [\n // measure 6\n f.Ornament('flip'),\n f.Ornament('jazzTurn'),\n f.Ornament('smear'),\n f.Ornament('doit'),\n ];\n draw(mods, ['e/5'], curX, width, curY);\n // third line\n curX = xStart;\n curY += staffHeight;\n mods = [\n // measure 7\n f.Ornament('scoop'),\n f.Ornament('doit'),\n f.Ornament('fall'),\n f.Ornament('doitLong'),\n ];\n draw(mods, ['e/4'], curX, width, curY);\n curX += width;\n mods = [\n // measure 8\n f.Ornament('fallLong'),\n f.Ornament('bend'),\n f.Ornament('plungerClosed'),\n f.Ornament('plungerOpen'),\n f.Ornament('bend'),\n ];\n draw(mods, ['e/4'], curX, width, curY);\n curX += width;\n mods = [\n // measure 9\n f.Ornament('flip'),\n f.Ornament('jazzTurn'),\n f.Ornament('smear'),\n f.Ornament('doit'),\n ];\n draw(mods, ['e/4'], curX, width, curY);\n}\nVexFlowTests.register(OrnamentTests);\nexport { OrnamentTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Parser Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Parser } from '../src/parser';\nconst ParserTests = {\n Start() {\n QUnit.module('Parser');\n QUnit.test('Basic', basic);\n QUnit.test('Advanced', advanced);\n QUnit.test('Mixed', mixed);\n QUnit.test('Micro Score', microscore);\n },\n};\n/**\n * Grammar used in the first three test cases: basic, advanced, mixed.\n */\nclass TestGrammar {\n // The begin() function is the only requirement when implementing the Grammar interface.\n begin() {\n return () => ({ expect: this.expect });\n }\n BIGORLITTLE() {\n return { expect: [this.BIGLINE, this.LITTLELINE], or: true };\n }\n BIGLINE() {\n return { expect: [this.LBRACE, this.WORD, this.WORDS, this.MAYBEEXCLAIM, this.RBRACE] };\n }\n LITTLELINE() {\n return { expect: [this.WORD, this.WORDS] };\n }\n WORDS() {\n return { expect: [this.COMMA, this.WORD], zeroOrMore: true };\n }\n MAYBEEXCLAIM() {\n return { expect: [this.EXCLAIM], maybe: true };\n }\n LBRACE() {\n return { token: '[{]' };\n }\n RBRACE() {\n return { token: '[}]' };\n }\n WORD() {\n return { token: '[a-zA-Z]+' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n EXCLAIM() {\n return { token: '[!]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\n/**\n * Grammar used in the microscore test case.\n * It represents a series of piano key numbers (Middle C == 40) separated by whitespace.\n * C Major Scale => 40 42 44 45 47 49 51 52\n * A chord is 2 or more piano key numbers surrounded by BRACKETS and separated by PERIODS\n * C Major == [40.44.47]\n * C-major F-major G-major A-minor chord progression => [40.44.47] [45.49.52] [47.51.54] [49.52.56]\n */\nclass MicroScoreGrammar {\n constructor() {\n this.ITEM = () => ({ expect: [this.PIANO_KEY_NUMBER, this.CHORD], or: true });\n this.MAYBE_MORE_ITEMS = () => ({ expect: [this.ITEM], zeroOrMore: true });\n this.PIANO_KEY_NUMBER = () => ({ expect: [this.NUM], oneOrMore: true });\n this.CHORD = () => ({ expect: [this.LEFT_BRACKET, this.PIANO_KEY_NUMBER, this.MORE_CHORD_PARTS, this.RIGHT_BRACKET] });\n this.MORE_CHORD_PARTS = () => ({ expect: [this.PERIOD, this.PIANO_KEY_NUMBER], oneOrMore: true });\n this.NUM = () => ({ token: '\\\\d+' });\n this.WHITESPACE = () => ({ token: '\\\\s+' });\n this.PERIOD = () => ({ token: '\\\\.' });\n this.LEFT_BRACKET = () => ({ token: '\\\\[' });\n this.RIGHT_BRACKET = () => ({ token: '\\\\]' });\n this.EOL = () => ({ token: '$' });\n }\n begin() {\n return () => ({ expect: [this.ITEM, this.MAYBE_MORE_ITEMS, this.EOL] });\n }\n}\n/**\n * Check that the result is a parse failure, and verify the error position.\n */\nfunction fails(assert, result, expectedErrorPos, msg) {\n assert.notOk(result.success, msg);\n assert.equal(result.errorPos, expectedErrorPos, msg);\n}\nfunction basic(assert) {\n const grammar = new TestGrammar();\n grammar.expect = [grammar.LITTLELINE, grammar.EOL];\n const parser = new Parser(grammar);\n // Each of these strings will parse correctly.\n const mustPass = ['first, second', 'first,second', 'first', 'first,second, third'];\n mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line));\n fails(assert, parser.parse(''), 0);\n fails(assert, parser.parse('first second'), 6);\n fails(assert, parser.parse('first,,'), 5);\n fails(assert, parser.parse('first,'), 5);\n fails(assert, parser.parse(',,'), 0);\n}\nfunction advanced(assert) {\n const grammar = new TestGrammar();\n grammar.expect = [grammar.BIGLINE, grammar.EOL];\n const parser = new Parser(grammar);\n const mustPass = ['{first}', '{first!}', '{first,second}', '{first,second!}', '{first,second,third!}'];\n mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line));\n fails(assert, parser.parse('{first,second,third,}'), 19);\n fails(assert, parser.parse('first,second,third'), 0);\n fails(assert, parser.parse('{first,second,third'), 19);\n fails(assert, parser.parse('{!}'), 1);\n}\nfunction mixed(assert) {\n const grammar = new TestGrammar();\n grammar.expect = [grammar.BIGORLITTLE, grammar.EOL];\n const parser = new Parser(grammar);\n const mustPass = ['{first,second,third!}', 'first, second'];\n mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line));\n fails(assert, parser.parse('first second'), 6);\n}\nfunction microscore(assert) {\n const grammar = new MicroScoreGrammar();\n const parser = new Parser(grammar);\n const mustPass = [\n '40 42 44 45 47 49 51 52',\n '[40.44.47] [45.49.52] [47.51.54] [49.52.56]',\n '40 [40.44.47] 45 47 [44.47.51]', // Mixed Notes and Chords: C4 [Cmajor] F4 G4 [Eminor]\n ];\n mustPass.forEach((line) => {\n var _a;\n const result = parser.parse(line);\n assert.equal(result.success, true, line);\n assert.equal((_a = result.matches) === null || _a === void 0 ? void 0 : _a.length, 3, line);\n });\n fails(assert, parser.parse('40 42 44 45 47 49 5A 52'), 19);\n fails(assert, parser.parse('40.44.47] [45.49.52] [47.51.54] [49.52.56]'), 2);\n fails(assert, parser.parse('40 [40] 45 47 [44.47.51]'), 3); // A chord with a single note is not allowed.\n}\nVexFlowTests.register(ParserTests);\nexport { ParserTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// PedalMarking Tests\n// TODO: Fix Error => Type 'Tickable' is not assignable to type 'StaveNote'.\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst PedalMarkingTests = {\n Start() {\n QUnit.module('PedalMarking');\n const run = VexFlowTests.runTests;\n run('Simple Pedal 1', simple1);\n run('Simple Pedal 2', simple2);\n run('Simple Pedal 3', simple3);\n run('Release and Depress on Same Note 1', releaseDepress1);\n run('Release and Depress on Same Note 2', releaseDepress2);\n run('Custom Text 1', customTest1);\n run('Custom Text 2', customTest2);\n },\n};\n/**\n * Every test below uses this to set up the score and two staves/voices.\n */\nfunction createTest(makePedal) {\n return (options) => {\n const f = VexFlowTests.makeFactory(options, 550, 200);\n const score = f.EasyScore();\n const stave0 = f.Stave({ width: 250 }).addClef('treble');\n const voice0 = score.voice(score.notes('b4/4, b4, b4, b4[stem=\"down\"]', { stem: 'up' }));\n f.Formatter().joinVoices([voice0]).formatToStave([voice0], stave0);\n const stave1 = f.Stave({ width: 260, x: 250 });\n const voice1 = score.voice(score.notes('c4/4, c4, c4, c4', { stem: 'up' }));\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n makePedal(f, voice0.getTickables(), voice1.getTickables());\n f.draw();\n options.assert.ok(true, 'Must render');\n };\n}\nfunction withSimplePedal(style) {\n return (factory, notes0, notes1) => factory.PedalMarking({\n notes: [notes0[0], notes0[2], notes0[3], notes1[3]],\n options: { style },\n });\n}\nfunction withReleaseAndDepressedPedal(style) {\n return (factory, notes0, notes1) => factory.PedalMarking({\n notes: [notes0[0], notes0[3], notes0[3], notes1[1], notes1[1], notes1[3]],\n options: { style },\n });\n}\nconst simple1 = createTest(withSimplePedal('text'));\nconst simple2 = createTest(withSimplePedal('bracket'));\nconst simple3 = createTest(withSimplePedal('mixed'));\nconst releaseDepress1 = createTest(withReleaseAndDepressedPedal('bracket'));\nconst releaseDepress2 = createTest(withReleaseAndDepressedPedal('mixed'));\nconst customTest1 = createTest((factory, notes0, notes1) => {\n const pedal = factory.PedalMarking({\n notes: [notes0[0], notes1[3]],\n options: { style: 'text' },\n });\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n});\nconst customTest2 = createTest((factory, notes0, notes1) => {\n const pedal = factory.PedalMarking({\n notes: [notes0[0], notes1[3]],\n options: { style: 'mixed' },\n });\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n});\nVexFlowTests.register(PedalMarkingTests);\nexport { PedalMarkingTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Mike Corrigan 2012 \n//\n// Percussion Tests\n// TODO: Type 'Tickable[]' is not assignable to type 'StemmableNote[]'.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Dot, Font, FontStyle, FontWeight, Stave, StaveNote, TickContext, Tremolo, } from '../src/index';\nconst PercussionTests = {\n Start() {\n QUnit.module('Percussion');\n const run = VexFlowTests.runTests;\n run('Percussion Clef', draw);\n run('Percussion Notes', drawNotes);\n run('Percussion Basic0', basic0);\n run('Percussion Basic1', basic1);\n run('Percussion Basic2', basic2);\n run('Percussion Snare0', snare0);\n run('Percussion Snare1', snare1);\n run('Percussion Snare2', snare2);\n run('Percussion Snare3', snare3);\n },\n};\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300).addClef('percussion').setContext(ctx).draw();\n options.assert.ok(true);\n}\n/**\n * Helper function used by the drawNotes() test case below.\n */\nfunction showNote(struct, stave, ctx, x) {\n const staveNote = new StaveNote(struct).setStave(stave);\n new TickContext().addTickable(staveNote).preFormat().setX(x);\n staveNote.setContext(ctx).draw();\n return staveNote;\n}\nfunction drawNotes(options, contextBuilder) {\n const notes = [\n { keys: ['g/5/d0'], duration: '4' },\n { keys: ['g/5/d1'], duration: '4' },\n { keys: ['g/5/d2'], duration: '4' },\n { keys: ['g/5/d3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/t0'], duration: '1' },\n { keys: ['g/5/t1'], duration: '4' },\n { keys: ['g/5/t2'], duration: '4' },\n { keys: ['g/5/t3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/x0'], duration: '1' },\n { keys: ['g/5/x1'], duration: '4' },\n { keys: ['g/5/x2'], duration: '4' },\n { keys: ['g/5/x3'], duration: '4' },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n // Draw two staves, one with up-stems and one with down-stems.\n for (let h = 0; h < 2; ++h) {\n const stave = new Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.stem_direction = h === 0 ? -1 : 1;\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n }\n}\n/**\n * Helper function for the seven test cases below.\n * Adds a percussion clef (two short vertical bars, like a pause sign) to the stave.\n */\nfunction createSingleMeasureTest(setup) {\n return (options) => {\n const f = VexFlowTests.makeFactory(options, 500);\n const stave = f.Stave().addClef('percussion').setTimeSignature('4/4');\n setup(f);\n f.Formatter().joinVoices(f.getVoices()).formatToStave(f.getVoices(), stave);\n f.draw();\n options.assert.ok(true);\n };\n}\nconst basic0 = createSingleMeasureTest((f) => {\n const voice0 = f\n .Voice()\n .addTickables([\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n ]);\n const voice1 = f\n .Voice()\n .addTickables([\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n ]);\n f.Beam({ notes: voice0.getTickables() });\n f.Beam({ notes: voice1.getTickables().slice(0, 2) });\n f.Beam({ notes: voice1.getTickables().slice(3, 5) });\n});\nconst basic1 = createSingleMeasureTest((f) => {\n f.Voice().addTickables([\n f.StaveNote({ keys: ['f/5/x2'], duration: '4' }),\n f.StaveNote({ keys: ['f/5/x2'], duration: '4' }),\n f.StaveNote({ keys: ['f/5/x2'], duration: '4' }),\n f.StaveNote({ keys: ['f/5/x2'], duration: '4' }),\n ]);\n f.Voice().addTickables([\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n ]);\n});\nconst basic2 = createSingleMeasureTest((f) => {\n const voice0 = f\n .Voice()\n .addTickables([\n f.StaveNote({ keys: ['a/5/x3'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5'], duration: '8' }),\n f.StaveNote({ keys: ['g/4/n', 'g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n ]);\n f.Beam({ notes: voice0.getTickables().slice(1, 8) });\n const notes1 = [\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '8d', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }),\n ];\n Dot.buildAndAttach([notes1[4]], { all: true });\n const voice1 = f.Voice().addTickables(notes1);\n f.Beam({ notes: voice1.getTickables().slice(0, 2) });\n f.Beam({ notes: voice1.getTickables().slice(4, 6) });\n});\nconst snare0 = createSingleMeasureTest((f) => {\n const font = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n };\n f.Voice().addTickables([\n f\n .StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 })\n .addModifier(f.Articulation({ type: 'a>' }), 0)\n .addModifier(f.Annotation({ text: 'L', font }), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'R', font }), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0),\n ]);\n});\nconst snare1 = createSingleMeasureTest((f) => {\n f.Voice().addTickables([\n f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0),\n f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0),\n f.StaveNote({ keys: ['a/5/x3'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'a,' }), 0),\n ]);\n});\nconst snare2 = createSingleMeasureTest((f) => {\n f.Voice().addTickables([\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(1), 0),\n f.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(1), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(3), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(4), 0),\n ]);\n});\nconst snare3 = createSingleMeasureTest((factory) => {\n factory\n .Voice()\n .addTickables([\n factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(2), 0),\n factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(2), 0),\n factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(3), 0),\n factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(4), 0),\n ]);\n});\nVexFlowTests.register(PercussionTests);\nexport { PercussionTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Registry Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { EasyScore, Factory, Registry, StaveNote } from '../src/index';\nconst RegistryTests = {\n Start() {\n QUnit.module('Registry');\n QUnit.test('Register and Clear', registerAndClear);\n QUnit.test('Default Registry', defaultRegistry);\n QUnit.test('Multiple Classes', classes);\n },\n};\nfunction registerAndClear(assert) {\n const registry = new Registry();\n const score = new EasyScore({ factory: Factory.newFromElementId(null) });\n registry.register(score.notes('C4')[0], 'foobar');\n const foobar = registry.getElementById('foobar');\n assert.ok(foobar);\n assert.equal(foobar.getAttribute('id'), 'foobar');\n registry.clear();\n assert.notOk(registry.getElementById('foobar'));\n // eslint-disable-next-line\n // @ts-ignore: intentional type mismatch to trigger an error.\n assert.throws(() => registry.register(score.notes('C4')));\n registry.clear();\n assert.ok(registry.register(score.notes('C4[id=\"boobar\"]')[0]).getElementById('boobar'));\n}\nfunction defaultRegistry(assert) {\n const registry = new Registry();\n const score = new EasyScore({ factory: Factory.newFromElementId(null) });\n Registry.enableDefaultRegistry(registry);\n score.notes('C4[id=\"foobar\"]');\n const note = registry.getElementById('foobar');\n assert.ok(note);\n note.setAttribute('id', 'boobar');\n assert.ok(registry.getElementById('boobar'));\n assert.notOk(registry.getElementById('foobar'));\n registry.clear();\n assert.equal(registry.getElementsByType(StaveNote.CATEGORY).length, 0);\n score.notes('C5');\n const elements = registry.getElementsByType(StaveNote.CATEGORY);\n assert.equal(elements.length, 1);\n}\nfunction classes(assert) {\n const registry = new Registry();\n const score = new EasyScore({ factory: Factory.newFromElementId(null) });\n Registry.enableDefaultRegistry(registry);\n score.notes('C4[id=\"foobar\"]');\n const note = registry.getElementById('foobar');\n note.addClass('foo');\n assert.ok(note.hasClass('foo'));\n assert.notOk(note.hasClass('boo'));\n assert.equal(registry.getElementsByClass('foo').length, 1);\n assert.equal(registry.getElementsByClass('boo').length, 0);\n note.addClass('boo');\n assert.ok(note.hasClass('foo'));\n assert.ok(note.hasClass('boo'));\n assert.equal(registry.getElementsByClass('foo').length, 1);\n assert.equal(registry.getElementsByClass('boo').length, 1);\n note.removeClass('boo');\n note.removeClass('foo');\n assert.notOk(note.hasClass('foo'));\n assert.notOk(note.hasClass('boo'));\n assert.equal(registry.getElementsByClass('foo').length, 0);\n assert.equal(registry.getElementsByClass('boo').length, 0);\n}\nVexFlowTests.register(RegistryTests);\nexport { RegistryTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Renderer Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { CanvasContext, Factory, Formatter, isHTMLCanvas, Renderer, RuntimeError, Stave, StaveNote, SVGContext, } from '../src/index';\n// TODO: Should FactoryOptions.renderer.elementId also accept a canvas | div?\nconst STAVE_WIDTH = 700;\nconst STAVE_HEIGHT = 100;\n// FactoryOptions.stave.space defaults to 10.\n// We subtract 10 to make the useRendererAPI() output look identical to useFactoryAPI().\nconst STAVE_RIGHT_MARGIN = 10;\nconst USE_RENDERER = { useRendererAPI: true };\nconst USE_FACTORY = { useRendererAPI: false };\nconst RendererTests = {\n Start() {\n QUnit.module('Renderer');\n const run = VexFlowTests.runTests;\n // Randomly choose one of four setup paths. See below for a description.\n // Refresh `flow.html` to see the test change each time.\n // We can manually check that they look identical\n // by opening `flow.html` in multiple tabs & quickly switching between tabs.\n run('Random', random);\n // These are the four setup paths. They should all produce the same output.\n // Use the: Renderer API OR Factory API\n // Pass in: element ID string OR canvas/div element.\n run('Renderer API with element ID string', stringElementId, USE_RENDERER);\n run('Renderer API with canvas or div', canvasOrDivElement, USE_RENDERER);\n run('Renderer API with context', passRenderContext);\n run('Factory API with element ID string', stringElementId, USE_FACTORY);\n run('Factory API with canvas or div', canvasOrDivElement, USE_FACTORY);\n },\n};\n/**\n * Helper function to add three notes to a stave.\n */\nfunction drawStave(stave, context) {\n stave.addClef('bass').addTimeSignature('3/4').draw();\n Formatter.FormatAndDraw(context, stave, [\n new StaveNote({ keys: ['C/4'], duration: '4' }),\n new StaveNote({ keys: ['E/4'], duration: '4' }),\n new StaveNote({ keys: ['G/4'], duration: '4' }),\n ]);\n}\n/**\n * Randomize the test upon each refresh (for verifying that the output is identical).\n * Draw a colored outline to indicate which of the four options is shown.\n * - blue = element is a SVG or Canvas element\n * - gray = element ID is a string\n * - solid outline = use the Renderer API directly\n * - dashed outline = use the Factory API\n */\nfunction random(options) {\n const useElementIDString = Math.random() > 0.5;\n const useRendererAPI = Math.random() > 0.5;\n options.params = { useRendererAPI };\n if (useElementIDString) {\n stringElementId(options);\n }\n else {\n canvasOrDivElement(options);\n }\n // eslint-disable-next-line\n const element = document.getElementById(options.elementId);\n const colorForElementType = useElementIDString ? '#CCCCCC' /* light gray */ : '#0074d9'; /* blue */\n const lineStyleForWhichAPI = useRendererAPI ? 'solid' : 'dashed';\n const borderStyle = `3px ${lineStyleForWhichAPI} ${colorForElementType}`;\n let elementType;\n if (options.backend === Renderer.Backends.CANVAS) {\n // If the backend is canvas, we draw a border around the canvas directly.\n element.style.border = borderStyle;\n elementType = '<canvas> element object';\n }\n else {\n // If the backend is SVG, we draw a border around the SVG child of the DIV.\n element.children[0].style.border = borderStyle;\n elementType = '<svg> element object';\n }\n if (useElementIDString) {\n elementType = 'elementID string';\n }\n const whichAPI = useRendererAPI ? 'Renderer API' : 'Factory API';\n element.parentElement.insertAdjacentHTML('beforeend', `
` +\n `${whichAPI}` +\n ` with ` +\n `${elementType}` +\n `

`);\n}\nfunction useRendererAPI(e, backend) {\n const renderer = new Renderer(e, backend);\n renderer.resize(STAVE_WIDTH, STAVE_HEIGHT);\n const context = renderer.getContext();\n drawStave(new Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context);\n}\n/**\n * Alternatively, use the Factory API!\n * The Factory API declares elementId to be string | null.\n * However, if we pass in a canvas or div element, it will still work.\n * This is because Factory calls new Renderer(elementId, ...) via Renderer.buildContext().\n */\nfunction useFactoryAPI(e, backend) {\n const opts = {\n renderer: { elementId: e, width: STAVE_WIDTH, height: STAVE_HEIGHT, backend },\n };\n const factory = new Factory(opts);\n drawStave(factory.Stave(), factory.getContext());\n}\n/**\n * Pass in a elementId string. Renderer will call document.getElementById().\n */\nfunction stringElementId(options) {\n const elementId = options.elementId;\n if (options.params.useRendererAPI) {\n useRendererAPI(elementId, options.backend);\n }\n else {\n useFactoryAPI(elementId, options.backend);\n }\n options.assert.ok(true);\n}\n/**\n * Pass a canvas or div element directly to the Renderer constructor.\n */\nfunction canvasOrDivElement(options) {\n const element = document.getElementById(options.elementId);\n if (options.params.useRendererAPI) {\n useRendererAPI(element, options.backend);\n }\n else {\n useFactoryAPI(element, options.backend);\n }\n options.assert.ok(true);\n}\n/**\n * Pass the render context directly to the Renderer constructor.\n */\nfunction passRenderContext(options) {\n let context;\n const element = document.getElementById(options.elementId);\n if (isHTMLCanvas(element)) {\n const ctx = element.getContext('2d');\n if (!ctx) {\n throw new RuntimeError(`Couldn't get context from element \"${options.elementId}\"`);\n }\n context = new CanvasContext(ctx);\n }\n else {\n context = new SVGContext(element);\n }\n const renderer = new Renderer(context);\n renderer.resize(STAVE_WIDTH, STAVE_HEIGHT);\n drawStave(new Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context);\n options.assert.ok(true);\n}\nVexFlowTests.register(RendererTests);\nexport { RendererTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Rests Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Tuplet } from '../src/tuplet';\nimport { Voice } from '../src/voice';\nconst RestsTests = {\n Start() {\n QUnit.module('Rests');\n const run = VexFlowTests.runTests;\n run('Outside Stave', ledgerRest);\n run('Dotted', basic);\n run('Auto Align - Beamed Notes Stems Up', beamsUp);\n run('Auto Align - Beamed Notes Stems Down', beamsDown);\n run('Auto Align - Tuplets Stems Up', tupletsUp);\n run('Auto Align - Tuplets Stems Down', tupletsDown);\n run('Auto Align - Single Voice (Default)', singleVoiceDefaultAlignment);\n run('Auto Align - Single Voice (Align All)', singleVoiceAlignAll);\n run('Auto Align - Multi Voice', multiVoice);\n },\n};\n/**\n * Helper function to create a context and stave.\n *\n * @param options\n * @param contextBuilder static function in renderer.ts (Renderer.getSVGContext or Renderer.getCanvasContext).\n * @param width\n * @param height\n * @returns object with .context and .stave properties\n */\nfunction setupContext(options, contextBuilder, width = 350, height = 150) {\n // context is SVGContext or CanvasRenderingContext2D (native) or CanvasContext (only if Renderer.USE_CANVAS_PROXY is true).\n const context = contextBuilder(options.elementId, width, height);\n context.scale(0.9, 0.9);\n context.font = '10pt Arial';\n const stave = new Stave(10, 30, width).addClef('treble').addTimeSignature('4/4').setContext(context).draw();\n return { context, stave };\n}\n/**\n * Dotted rests (whole to 128th).\n * The rest duration is specified as 'wr', 'hr', ..., '128r'.\n */\nfunction basic(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 700);\n const notes = [\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '16r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '32r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '64r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '128r' }),\n ];\n Dot.buildAndAttach(notes, { all: true });\n Formatter.FormatAndDraw(context, stave, notes);\n options.assert.ok(true, 'Dotted Rest Test');\n}\n/**\n * Use the ledger glyph if the whole or half rest is above/below the staff\n */\nfunction ledgerRest(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 700);\n const notes = [\n new StaveNote({ keys: ['a/5'], stem_direction: 1, duration: 'wr' }),\n new StaveNote({ keys: ['c/6'], stem_direction: 1, duration: 'hr' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }),\n new StaveNote({ keys: ['a/3'], stem_direction: 1, duration: 'wr' }),\n new StaveNote({ keys: ['f/3'], stem_direction: 1, duration: 'hr' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }),\n ];\n Formatter.FormatAndDraw(context, stave, notes);\n options.assert.ok(true, 'Leger/Ledger Rest Test');\n}\n// Optional: Use a helper function to make your code more concise.\nconst note = (noteStruct) => new StaveNote(noteStruct);\n/**\n * Rests are intermixed within beamed notes (with the stems and beams at the top).\n */\nfunction beamsUp(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['e/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n note({ keys: ['b/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['c/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n note({ keys: ['c/4'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n note({ keys: ['c/4'], stem_direction: 1, duration: '8' }),\n ];\n const beam1 = new Beam(notes.slice(0, 4));\n const beam2 = new Beam(notes.slice(4, 8));\n const beam3 = new Beam(notes.slice(8, 12));\n Formatter.FormatAndDraw(context, stave, notes);\n beam1.setContext(context).draw();\n beam2.setContext(context).draw();\n beam3.setContext(context).draw();\n options.assert.ok(true, 'Auto Align Rests - Beams Up Test');\n}\n/**\n * Rests are intermixed within beamed notes (with the stems and beams at the bottom).\n */\nfunction beamsDown(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['c/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['e/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['e/4'], stem_direction: -1, duration: '8' }),\n ];\n const beam1 = new Beam(notes.slice(0, 4));\n const beam2 = new Beam(notes.slice(4, 8));\n const beam3 = new Beam(notes.slice(8, 12));\n Formatter.FormatAndDraw(context, stave, notes);\n beam1.setContext(context).draw();\n beam2.setContext(context).draw();\n beam3.setContext(context).draw();\n options.assert.ok(true, 'Auto Align Rests - Beams Down Test');\n}\n/**\n * Call setTupletLocation(Tuplet.LOCATION_TOP) to place the tuplet indicator (bracket and number) at the\n * top of the group of notes. Tuplet.LOCATION_TOP is the default, so this is optional.\n */\nfunction tupletsUp(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['b/4'], stem_direction: 1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n ];\n const tuplet1 = new Tuplet(notes.slice(0, 3)).setTupletLocation(Tuplet.LOCATION_TOP);\n const tuplet2 = new Tuplet(notes.slice(3, 6)).setTupletLocation(Tuplet.LOCATION_TOP);\n const tuplet3 = new Tuplet(notes.slice(6, 9)).setTupletLocation(Tuplet.LOCATION_TOP);\n const tuplet4 = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP);\n Formatter.FormatAndDraw(context, stave, notes);\n tuplet1.setContext(context).draw();\n tuplet2.setContext(context).draw();\n tuplet3.setContext(context).draw();\n tuplet4.setContext(context).draw();\n options.assert.ok(true, 'Auto Align Rests - Tuplets Stem Up Test');\n}\n/**\n * Call setTupletLocation(Tuplet.LOCATION_BOTTOM) to place the tuplet indicator (bracket and number) at the\n * bottom of the group of notes.\n */\nfunction tupletsDown(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n ];\n const beam1 = new Beam(notes.slice(0, 3));\n const beam2 = new Beam(notes.slice(3, 6));\n const beam3 = new Beam(notes.slice(6, 9));\n const beam4 = new Beam(notes.slice(9, 12));\n const tuplet1 = new Tuplet(notes.slice(0, 3)).setTupletLocation(Tuplet.LOCATION_BOTTOM);\n const tuplet2 = new Tuplet(notes.slice(3, 6)).setTupletLocation(Tuplet.LOCATION_BOTTOM);\n const tuplet3 = new Tuplet(notes.slice(6, 9)).setTupletLocation(Tuplet.LOCATION_BOTTOM);\n const tuplet4 = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_BOTTOM);\n Formatter.FormatAndDraw(context, stave, notes);\n tuplet1.setContext(context).draw();\n tuplet2.setContext(context).draw();\n tuplet3.setContext(context).draw();\n tuplet4.setContext(context).draw();\n beam1.setContext(context).draw();\n beam2.setContext(context).draw();\n beam3.setContext(context).draw();\n beam4.setContext(context).draw();\n options.assert.ok(true, 'Auto Align Rests - Tuplets Stem Down Test');\n}\n/**\n * By default rests are centered vertically within the stave, except\n * when they are inside a group of beamed notes (in which case they are\n * centered vertically within that group).\n */\nfunction singleVoiceDefaultAlignment(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['f/4'], stem_direction: -1, duration: '4' }),\n note({ keys: ['e/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['e/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['d/5'], stem_direction: -1, duration: '4' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n ];\n const beam = new Beam(notes.slice(5, 9));\n const tuplet = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP);\n Formatter.FormatAndDraw(context, stave, notes);\n tuplet.setContext(context).draw();\n beam.setContext(context).draw();\n options.assert.ok(true, 'Auto Align Rests - Default Test');\n}\n/**\n * The only difference between staveRestsAll() and staveRests() is that this test case\n * passes { align_rests: true } to Formatter.FormatAndDraw(...).\n */\nfunction singleVoiceAlignAll(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['f/4'], stem_direction: -1, duration: '4' }),\n note({ keys: ['e/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['e/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['d/5'], stem_direction: -1, duration: '4' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n ];\n const beam = new Beam(notes.slice(5, 9));\n const tuplet = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP);\n // Set { align_rests: true } to align rests (vertically) with nearby notes in each voice.\n Formatter.FormatAndDraw(context, stave, notes, { align_rests: true });\n tuplet.setContext(context).draw();\n beam.setContext(context).draw();\n options.assert.ok(true, 'Auto Align Rests - Align All Test');\n}\n/**\n * Multi Voice\n * The top voice shows quarter-note chords alternating with quarter rests.\n * The bottom voice shows two groups of beamed eighth notes, with eighth rests.\n */\nfunction multiVoice(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n const stave = new Stave(50, 10, 500).addClef('treble').setContext(ctx).addTimeSignature('4/4').draw();\n const noteOnStave = (noteStruct) => new StaveNote(noteStruct).setStave(stave);\n const notes1 = [\n noteOnStave({ keys: ['c/4', 'e/4', 'g/4'], duration: '4' }),\n noteOnStave({ keys: ['b/4'], duration: '4r' }),\n noteOnStave({ keys: ['c/4', 'd/4', 'a/4'], duration: '4' }),\n noteOnStave({ keys: ['b/4'], duration: '4r' }),\n ];\n const notes2 = [\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n ];\n const voice1 = new Voice(Flow.TIME4_4).addTickables(notes1);\n const voice2 = new Voice(Flow.TIME4_4).addTickables(notes2);\n // Set { align_rests: true } to align rests (vertically) with nearby notes in each voice.\n new Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave, { align_rests: true });\n const beam2_1 = new Beam(notes2.slice(0, 4));\n const beam2_2 = new Beam(notes2.slice(4, 8));\n // Important Note: we need to draw voice2 first, since voice2 generates ledger lines.\n // Otherwise, the ledger lines will be drawn on top of middle C notes in voice1.\n voice2.draw(ctx);\n voice1.draw(ctx);\n beam2_1.setContext(ctx).draw();\n beam2_2.setContext(ctx).draw();\n options.assert.ok(true, 'Strokes Test Multi Voice');\n}\nVexFlowTests.register(RestsTests);\nexport { RestsTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Rhythm Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Annotation } from '../src/annotation';\nimport { Beam } from '../src/beam';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nconst RhythmTests = {\n Start() {\n QUnit.module('Rhythm');\n const run = VexFlowTests.runTests;\n // TODO: Simplify test names by removing 'Rhythm Draw - '.\n run('Rhythm Draw - slash notes', drawBasic);\n run('Rhythm Draw - beamed slash notes', drawBeamedSlashNotes);\n run('Rhythm Draw - beamed slash notes, some rests', drawSlashAndBeamAndRests);\n run('Rhythm Draw - 16th note rhythm with scratches', drawSixtenthWithScratches);\n run('Rhythm Draw - 32nd note rhythm with scratches', drawThirtySecondWithScratches);\n },\n};\n// CURRENTLY UNUSED. Draws 7 different slash notes without beams.\n/*\nfunction drawSlash(options: TestOptions, contextBuilder: ContextBuilder): void {\n const ctx = contextBuilder(options.elementId, 350, 180);\n const stave = new Stave(10, 10, 350);\n stave.setContext(ctx);\n stave.draw();\n\n const notes: StaveNoteStruct[] = [\n { keys: ['b/4'], duration: 'ws', stem_direction: -1 },\n { keys: ['b/4'], duration: 'hs', stem_direction: -1 },\n { keys: ['b/4'], duration: 'qs', stem_direction: -1 },\n { keys: ['b/4'], duration: '8s', stem_direction: -1 },\n { keys: ['b/4'], duration: '16s', stem_direction: -1 },\n { keys: ['b/4'], duration: '32s', stem_direction: -1 },\n { keys: ['b/4'], duration: '64s', stem_direction: -1 },\n ];\n options.assert.expect(notes.length * 2);\n\n for (let i = 0; i < notes.length; ++i) {\n const staveNote = new StaveNote(notes[i]).setStave(stave);\n new TickContext()\n .addTickable(staveNote)\n .preFormat()\n .setX((i + 1) * 25);\n staveNote.setContext(ctx).draw();\n\n options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\n*/\nfunction drawBasic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 150);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('C');\n staveBar1.setContext(ctx).draw();\n const notesBar1 = [new StaveNote({ keys: ['b/4'], duration: '1s', stem_direction: -1 })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1);\n // bar 2 - juxtaposing second bar next to first bar\n const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 120);\n staveBar2.setBegBarType(BarlineType.SINGLE);\n staveBar2.setEndBarType(BarlineType.SINGLE);\n staveBar2.setContext(ctx).draw();\n // bar 2\n const notesBar2 = [\n new StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }),\n new StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar2, notesBar2);\n // bar 3 - juxtaposing second bar next to first bar\n const staveBar3 = new Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 170);\n staveBar3.setContext(ctx).draw();\n // bar 3\n const notesBar3 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '4s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '4s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '4s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '4s',\n stem_direction: -1,\n }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar3, notesBar3);\n // bar 4 - juxtaposing second bar next to first bar\n const staveBar4 = new Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 200);\n staveBar4.setContext(ctx).draw();\n // bar 4\n const notesBar4 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar4, notesBar4);\n options.assert.expect(0);\n}\nfunction drawBeamedSlashNotes(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 300);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('C');\n staveBar1.setContext(ctx).draw();\n // bar 4\n const notesBar1_part1 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n ];\n const notesBar1_part2 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n ];\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar1_part1);\n const beam2 = new Beam(notesBar1_part2);\n const notesBar1 = notesBar1_part1.concat(notesBar1_part2);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1);\n // Render beams\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n options.assert.expect(0);\n}\nfunction drawSlashAndBeamAndRests(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 300);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('F');\n staveBar1.setContext(ctx).draw();\n // bar 1\n const notesBar1_part1 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({ keys: ['b/4'], duration: '8s', stem_direction: -1 }),\n ];\n notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 2), 0);\n const notesBar1_part2 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8r',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8r',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8r',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n ];\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar1_part1);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2));\n // Render beams\n beam1.setContext(ctx).draw();\n // bar 2 - juxtaposing second bar next to first bar\n const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 220);\n staveBar2.setContext(ctx).draw();\n const notesBar2 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '1s',\n stem_direction: -1,\n }),\n ];\n notesBar2[0].addModifier(new Annotation('F').setFont('Times', VexFlowTests.Font.size + 2), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar2, notesBar2);\n options.assert.expect(0);\n}\nfunction drawSixtenthWithScratches(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 300);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('F');\n staveBar1.setContext(ctx).draw();\n // bar 1\n const notesBar1_part1 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16m',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n ];\n const notesBar1_part2 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '16m',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16r',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n ];\n notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 3), 0);\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar1_part1);\n const beam2 = new Beam(notesBar1_part2);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2));\n // Render beams\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n options.assert.expect(0);\n}\nfunction drawThirtySecondWithScratches(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 300);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('F');\n staveBar1.setContext(ctx).draw();\n // bar 1\n const notesBar1_part1 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32m',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32m',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32r',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n ];\n notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 3), 0);\n // Create the beams for 8th notes in 2nd measure.\n const beam1 = new Beam(notesBar1_part1);\n // Helper function to justify and draw a 4/4 voice.\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1);\n // Render beams\n beam1.setContext(ctx).draw();\n options.assert.expect(0);\n}\nVexFlowTests.register(RhythmTests);\nexport { RhythmTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Basic Stave Tests\n// TODO: Like Stave.setTempo(t: StaveTempoOptions, ...), Stave.setText(...) could declare an interface called StaveTextOptions.\n// This helps developers because they can use the named type in their code for type checking.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Beam } from '../src/beam';\nimport { Clef } from '../src/clef';\nimport { Formatter } from '../src/formatter';\nimport { KeySignature } from '../src/keysignature';\nimport { Modifier } from '../src/modifier';\nimport { Stave } from '../src/stave';\nimport { Barline, BarlineType } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nimport { Repetition } from '../src/staverepetition';\nimport { VoltaType } from '../src/stavevolta';\nimport { TextJustification } from '../src/textnote';\nimport { TimeSignature } from '../src/timesignature';\nconst StaveTests = {\n Start() {\n QUnit.module('Stave');\n QUnit.test('StaveModifiers SortByCategory', sortByCategory);\n const run = VexFlowTests.runTests;\n run('Stave Draw Test', draw);\n run('Open Stave Draw Test', drawOpenStave);\n run('Multiple Stave Barline Test', drawMultipleMeasures);\n run('Multiple Stave Barline Test (14pt Section)', drawMultipleMeasures, { fontSize: 14 });\n run('Multiple Stave Repeats Test', drawRepeats);\n run('Stave End Modifiers Test', drawEndModifiers);\n run('Stave Repetition (CODA) Positioning', drawStaveRepetition, { yShift: 0 });\n run('Stave Repetition (CODA) Positioning (-20)', drawStaveRepetition, { yShift: -20 });\n run('Stave Repetition (CODA) Positioning (+10)', drawStaveRepetition, { yShift: +10 });\n run('Multiple Staves Volta Test', drawVolta);\n run('Volta + Modifier Measure Test', drawVoltaModifier);\n run('Tempo Test', drawTempo);\n run('Single Line Configuration Test', configureSingleLine);\n run('Batch Line Configuration Test', configureAllLines);\n run('Stave Text Test', drawStaveText);\n run('Multiple Line Stave Text Test', drawStaveTextMultiLine);\n run('Factory API', factoryAPI);\n },\n};\nfunction sortByCategory(assert) {\n const stave = new Stave(0, 0, 300);\n const clef0 = new Clef('treble');\n const clef1 = new Clef('alto');\n const clef2 = new Clef('bass');\n const time0 = new TimeSignature('C');\n const time1 = new TimeSignature('C|');\n const time2 = new TimeSignature('9/8');\n const key0 = new KeySignature('G');\n const key1 = new KeySignature('F');\n const key2 = new KeySignature('D');\n const bar0 = new Barline(BarlineType.SINGLE);\n const bar1 = new Barline(BarlineType.DOUBLE);\n const bar2 = new Barline(BarlineType.NONE);\n // const order0 = { barlines: 0, clefs: 1, keysignatures: 2, timesignatures: 3 };\n // const order1 = { timesignatures: 0, keysignatures: 1, barlines: 2, clefs: 3 };\n const order0 = { Barline: 0, Clef: 1, KeySignature: 2, TimeSignature: 3 };\n const order1 = { TimeSignature: 0, KeySignature: 1, Barline: 2, Clef: 3 };\n const sortAndCompare = (title, a, b, order) => {\n stave.sortByCategory(a, order);\n // Verify that the two arrays are identical.\n let isSame = true;\n if (a.length !== b.length)\n isSame = false;\n for (let i = 0; i < a.length; ++i) {\n if (a[i] !== b[i])\n isSame = false;\n }\n assert.ok(isSame, title);\n };\n sortAndCompare('Keep the original order 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [bar0, bar1, clef0, clef1, key0, key1, time0, time1], order0);\n sortAndCompare('Keep the original order 2', [time0, time1, key0, key1, bar0, bar1, clef0, clef1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1);\n sortAndCompare('Sort and keep 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1);\n sortAndCompare('Sort and keep 2', [bar0, clef0, key0, time0, key1, time1, clef1, bar1, time2, clef2, bar2, key2], [bar0, bar1, bar2, clef0, clef1, clef2, key0, key1, key2, time0, time1, time2], order0);\n sortAndCompare('Sort and keep 3', [bar2, clef2, key2, time0, key0, time2, clef1, bar1, time1, clef0, bar0, key1], [time0, time2, time1, key2, key0, key1, bar2, bar1, bar0, clef2, clef1, clef0], order1);\n}\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 150);\n const stave = new Stave(10, 10, 300);\n stave.setContext(ctx);\n stave.draw();\n options.assert.equal(stave.getYForNote(0), 100, 'getYForNote(0)');\n options.assert.equal(stave.getYForLine(5), 100, 'getYForLine(5)');\n options.assert.equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line');\n options.assert.equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line');\n options.assert.ok(true, 'all pass');\n}\nfunction drawOpenStave(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 350);\n let stave = new Stave(10, 10, 300, { left_bar: false });\n stave.setContext(ctx);\n stave.draw();\n stave = new Stave(10, 150, 300, { right_bar: false });\n stave.setContext(ctx);\n stave.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawMultipleMeasures(options, contextBuilder) {\n var _a, _b;\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 550, 200);\n // bar 1\n const staveBar1 = new Stave(10, 50, 200);\n staveBar1.setBegBarType(BarlineType.REPEAT_BEGIN);\n staveBar1.setEndBarType(BarlineType.DOUBLE);\n staveBar1.setSection('A', 0, 0, (_a = options.params) === null || _a === void 0 ? void 0 : _a.fontSize, false);\n staveBar1.addClef('treble').setContext(ctx).draw();\n const notesBar1 = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1);\n // bar 2 - juxtaposing second bar next to first bar\n const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 300);\n staveBar2.setSection('B', 0, 0, (_b = options.params) === null || _b === void 0 ? void 0 : _b.fontSize);\n staveBar2.setEndBarType(BarlineType.END);\n staveBar2.setContext(ctx).draw();\n const notesBar2_part1 = [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ];\n const notesBar2_part2 = [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ];\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar2_part1);\n const beam2 = new Beam(notesBar2_part2);\n const notesBar2 = notesBar2_part1.concat(notesBar2_part2);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar2, notesBar2);\n // Render beams\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n}\nfunction drawRepeats(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 750, 120);\n // bar 1\n const staveBar1 = new Stave(10, 0, 250);\n staveBar1.setBegBarType(BarlineType.REPEAT_BEGIN);\n staveBar1.setEndBarType(BarlineType.REPEAT_END);\n staveBar1.addClef('treble');\n staveBar1.addKeySignature('A');\n staveBar1.setContext(ctx).draw();\n const notesBar1 = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1);\n // bar 2 - juxtaposing second bar next to first bar\n const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 250);\n staveBar2.setBegBarType(BarlineType.REPEAT_BEGIN);\n staveBar2.setEndBarType(BarlineType.REPEAT_END);\n staveBar2.setContext(ctx).draw();\n const notesBar2_part1 = [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ];\n const notesBar2_part2 = [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ];\n notesBar2_part2[0].addModifier(new Accidental('#'), 0);\n notesBar2_part2[1].addModifier(new Accidental('#'), 0);\n notesBar2_part2[3].addModifier(new Accidental('b'), 0);\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar2_part1);\n const beam2 = new Beam(notesBar2_part2);\n const notesBar2 = notesBar2_part1.concat(notesBar2_part2);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar2, notesBar2);\n // Render beams\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n // bar 3 - juxtaposing third bar next to second bar\n const staveBar3 = new Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 50);\n staveBar3.setContext(ctx).draw();\n const notesBar3 = [new StaveNote({ keys: ['d/5'], duration: 'wr' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar3, notesBar3);\n // bar 4 - juxtaposing third bar next to third bar\n const staveBar4 = new Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 250 - staveBar1.getModifierXShift());\n staveBar4.setBegBarType(BarlineType.REPEAT_BEGIN);\n staveBar4.setEndBarType(BarlineType.REPEAT_END);\n staveBar4.setContext(ctx).draw();\n const notesBar4 = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar4, notesBar4);\n}\nfunction drawEndModifiers(options, contextBuilder) {\n options.assert.expect(0);\n const staveWidth = 230;\n const blockHeight = 80;\n let x = 10;\n let y = 0;\n const ctx = contextBuilder(options.elementId, 800, 700);\n function drawStavesInTwoLines(endBarLine) {\n // Draw a stave with one measure. Change the ending modifiers.\n // eslint-disable-next-line\n function drawStave(x, y, width, begMods, endMods) {\n const staveBar = new Stave(x, y, width - 10);\n if (begMods) {\n if (begMods.barLine !== undefined) {\n staveBar.setBegBarType(begMods.barLine);\n }\n if (begMods.clef !== undefined) {\n staveBar.addClef(begMods.clef);\n }\n if (begMods.keySig !== undefined) {\n staveBar.addKeySignature(begMods.keySig);\n }\n if (begMods.timeSig !== undefined) {\n staveBar.setTimeSignature(begMods.timeSig);\n }\n }\n if (endMods) {\n if (endMods.barLine !== undefined) {\n staveBar.setEndBarType(endMods.barLine);\n }\n if (endMods.clef !== undefined) {\n staveBar.addEndClef(endMods.clef);\n }\n if (endMods.keySig !== undefined) {\n staveBar.setEndKeySignature(endMods.keySig);\n }\n if (endMods.timeSig !== undefined) {\n staveBar.setEndTimeSignature(endMods.timeSig);\n }\n }\n staveBar.setContext(ctx).draw();\n const notesBar = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n Formatter.FormatAndDraw(ctx, staveBar, notesBar);\n }\n drawStave(x, y, staveWidth + 50, { barLine: BarlineType.REPEAT_BEGIN, clef: 'treble', keySig: 'A' }, { barLine: endBarLine, clef: 'bass' });\n x += staveWidth + 50;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, keySig: 'E' });\n x += staveWidth;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, timeSig: '2/4' });\n x += staveWidth;\n x = 10;\n y += blockHeight;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', timeSig: '2/4' });\n x += staveWidth;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'treble', keySig: 'Ab' });\n x += staveWidth;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', keySig: 'Ab', timeSig: '2/4' });\n x += staveWidth;\n }\n y = 0;\n x = 10;\n // First pair of staves.\n drawStavesInTwoLines(BarlineType.SINGLE);\n y += blockHeight + 10;\n x = 10;\n // Second pair of staves, with double barlines.\n drawStavesInTwoLines(BarlineType.DOUBLE);\n y += blockHeight + 10;\n x = 10;\n // Third pair of staves, with \"two dot\" repeat barlines.\n drawStavesInTwoLines(BarlineType.REPEAT_END);\n y += blockHeight + 10;\n x = 10;\n // Fourth pair of staves, with \"two dots\" on each side of the barlines.\n drawStavesInTwoLines(BarlineType.REPEAT_BOTH);\n}\nfunction drawStaveRepetition(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 725, 200);\n // bar 1\n const mm1 = new Stave(10, 50, 150);\n mm1.addClef('treble');\n mm1.setRepetitionType(Repetition.type.DS_AL_FINE, options.params.yShift);\n mm1.setMeasure(1);\n mm1.setContext(ctx).draw();\n const notesmm1 = [\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm1, notesmm1);\n // bar 2 - juxtapose second measure\n const mm2 = new Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 150);\n mm2.setRepetitionType(Repetition.type.TO_CODA, options.params.yShift);\n mm2.setMeasure(2);\n mm2.setContext(ctx).draw();\n const notesmm2 = [\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm2, notesmm2);\n // bar 3 - juxtapose third measure\n const mm3 = new Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 150);\n mm3.setRepetitionType(Repetition.type.DS_AL_CODA, options.params.yShift);\n mm3.setMeasure(3);\n mm3.setContext(ctx).draw();\n const notesmm3 = [\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm3, notesmm3);\n // bar 4 - juxtapose fourth measure\n const mm4 = new Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 150);\n mm4.setRepetitionType(Repetition.type.CODA_LEFT, options.params.yShift);\n mm4.setMeasure(4);\n mm4.setContext(ctx).draw();\n const notesmm4 = [\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm4, notesmm4);\n}\nfunction drawVolta(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 725, 200);\n // bar 1\n const mm1 = new Stave(10, 50, 125);\n mm1.setBegBarType(BarlineType.REPEAT_BEGIN);\n mm1.setRepetitionType(Repetition.type.SEGNO_LEFT);\n mm1.addClef('treble');\n mm1.addKeySignature('A');\n mm1.setMeasure(1);\n mm1.setSection('A', 0);\n mm1.setContext(ctx).draw();\n const notesmm1 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm1, notesmm1);\n // bar 2 - juxtapose second measure\n const mm2 = new Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 60);\n mm2.setRepetitionType(Repetition.type.CODA_RIGHT);\n mm2.setMeasure(2);\n mm2.setContext(ctx).draw();\n const notesmm2 = [new StaveNote({ keys: ['d/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm2, notesmm2);\n // bar 3 - juxtapose third measure\n const mm3 = new Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 60);\n mm3.setVoltaType(VoltaType.BEGIN, '1.', -5);\n mm3.setMeasure(3);\n mm3.setContext(ctx).draw();\n const notesmm3 = [new StaveNote({ keys: ['e/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm3, notesmm3);\n // bar 4 - juxtapose fourth measure\n const mm4 = new Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 60);\n mm4.setVoltaType(VoltaType.MID, '', -5);\n mm4.setMeasure(4);\n mm4.setContext(ctx).draw();\n const notesmm4 = [new StaveNote({ keys: ['f/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm4, notesmm4);\n // bar 5 - juxtapose fifth measure\n const mm5 = new Stave(mm4.getWidth() + mm4.getX(), mm1.getY(), 60);\n mm5.setEndBarType(BarlineType.REPEAT_END);\n mm5.setVoltaType(VoltaType.END, '', -5);\n mm5.setMeasure(5);\n mm5.setContext(ctx).draw();\n const notesmm5 = [new StaveNote({ keys: ['g/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm5, notesmm5);\n // bar 6 - juxtapose sixth measure\n const mm6 = new Stave(mm5.getWidth() + mm5.getX(), mm1.getY(), 60);\n mm6.setVoltaType(VoltaType.BEGIN_END, '2.', -5);\n mm6.setEndBarType(BarlineType.DOUBLE);\n mm6.setMeasure(6);\n mm6.setContext(ctx).draw();\n const notesmm6 = [new StaveNote({ keys: ['a/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm6, notesmm6);\n // bar 7 - juxtapose seventh measure\n const mm7 = new Stave(mm6.getWidth() + mm6.getX(), mm1.getY(), 60);\n mm7.setMeasure(7);\n mm7.setSection('B', 0);\n mm7.setContext(ctx).draw();\n const notesmm7 = [new StaveNote({ keys: ['b/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm7, notesmm7);\n // bar 8 - juxtapose eighth measure\n const mm8 = new Stave(mm7.getWidth() + mm7.getX(), mm1.getY(), 60);\n mm8.setEndBarType(BarlineType.DOUBLE);\n mm8.setRepetitionType(Repetition.type.DS_AL_CODA);\n mm8.setMeasure(8);\n mm8.setContext(ctx).draw();\n const notesmm8 = [new StaveNote({ keys: ['c/5'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm8, notesmm8);\n // bar 9 - juxtapose ninth measure\n const mm9 = new Stave(mm8.getWidth() + mm8.getX() + 20, mm1.getY(), 125);\n mm9.setEndBarType(BarlineType.END);\n mm9.setRepetitionType(Repetition.type.CODA_LEFT);\n mm9.addClef('treble');\n mm9.addKeySignature('A');\n mm9.setMeasure(9);\n mm9.setContext(ctx).draw();\n const notesmm9 = [new StaveNote({ keys: ['d/5'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm9, notesmm9);\n}\nfunction drawVoltaModifier(options, contextBuilder) {\n options.assert.expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 1100, 200);\n // bar 1: volta begin, with modifiers (clef, keysignature)\n const mm1 = new Stave(10, 50, 175);\n mm1.setBegBarType(BarlineType.REPEAT_BEGIN);\n mm1.setVoltaType(VoltaType.BEGIN_END, '1.', -5);\n mm1.addClef('treble');\n mm1.addKeySignature('A');\n mm1.setMeasure(1);\n mm1.setSection('A', 0);\n mm1.setContext(ctx).draw();\n const notesmm1 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm1, notesmm1);\n // bar 2: volta begin_mid, with modifiers (clef, keysignature)\n const mm2 = new Stave(mm1.getX() + mm1.getWidth(), mm1.getY(), 175);\n mm2.setBegBarType(BarlineType.REPEAT_BEGIN);\n mm2.setRepetitionType(Repetition.type.DS);\n mm2.setVoltaType(VoltaType.BEGIN, '2.', -5);\n mm2.addClef('treble');\n mm2.addKeySignature('A');\n mm2.setMeasure(2);\n mm2.setContext(ctx).draw();\n const notesmm2 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm2, notesmm2);\n // bar 3: volta mid, with modifiers (clef, keysignature)\n const mm3 = new Stave(mm2.getX() + mm2.getWidth(), mm2.getY(), 175);\n mm3.setVoltaType(VoltaType.MID, '', -5);\n mm3.setRepetitionType(Repetition.type.DS);\n mm3.addClef('treble');\n mm3.addKeySignature('B');\n mm3.setMeasure(3);\n mm3.setSection('B', 0);\n mm3.setContext(ctx).draw();\n const notesmm3 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm3, notesmm3);\n // bar 4: volta end, with modifiers (clef, keysignature)\n const mm4 = new Stave(mm3.getX() + mm3.getWidth(), mm3.getY(), 175);\n mm4.setVoltaType(VoltaType.END, '1.', -5);\n mm4.setRepetitionType(Repetition.type.DS);\n mm4.addClef('treble');\n mm4.addKeySignature('A');\n mm4.setMeasure(4);\n mm4.setSection('C', 0);\n mm4.setContext(ctx).draw();\n const notesmm4 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm4, notesmm4);\n // bar 5: d.s. shift (similar potential x-shift concern)\n const mm5 = new Stave(mm4.getX() + mm4.getWidth(), mm4.getY(), 175);\n // mm5.addModifier(new Repetition(Repetition.type.DS, mm4.getX() + mm4.getWidth(), 50), StaveModifierPosition.RIGHT);\n mm5.setEndBarType(BarlineType.DOUBLE);\n mm5.setRepetitionType(Repetition.type.DS);\n mm5.addClef('treble');\n mm5.addKeySignature('A');\n mm5.setMeasure(5);\n mm5.setSection('D', 0);\n mm5.setContext(ctx).draw();\n const notesmm5 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm5, notesmm5);\n // bar 6: d.s. without modifiers\n const mm6 = new Stave(mm5.getX() + mm5.getWidth(), mm5.getY(), 175);\n // mm5.addModifier(new Repetition(Repetition.type.DS, mm4.getX() + mm4.getWidth(), 50), StaveModifierPosition.RIGHT);\n mm6.setRepetitionType(Repetition.type.DS);\n mm6.setMeasure(6);\n mm6.setSection('E', 0);\n mm6.setContext(ctx).draw();\n const notesmm6 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm6, notesmm6);\n}\nfunction drawTempo(options, contextBuilder) {\n options.assert.expect(0);\n const ctx = contextBuilder(options.elementId, 725, 350);\n const padding = 10;\n let x = 0;\n let y = 50;\n function drawTempoStaveBar(width, tempo, tempo_y, notes) {\n const staveBar = new Stave(padding + x, y, width);\n if (x === 0)\n staveBar.addClef('treble');\n staveBar.setTempo(tempo, tempo_y);\n staveBar.setContext(ctx).draw();\n const notesBar = notes || [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'q' }),\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n ];\n Formatter.FormatAndDraw(ctx, staveBar, notesBar);\n x += width;\n }\n drawTempoStaveBar(120, { duration: 'q', dots: 1, bpm: 80 }, 0);\n drawTempoStaveBar(100, { duration: '8', dots: 2, bpm: 90 }, 0);\n drawTempoStaveBar(100, { duration: '16', dots: 1, bpm: 96 }, 0);\n drawTempoStaveBar(100, { duration: '32', bpm: 70 }, 0);\n drawTempoStaveBar(250, { name: 'Andante', bpm: 120 }, -20, [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/5'], duration: '8' }),\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ]);\n x = 0;\n y += 150;\n drawTempoStaveBar(120, { duration: 'w', bpm: 80 }, 0);\n drawTempoStaveBar(100, { duration: 'h', bpm: 90 }, 0);\n drawTempoStaveBar(100, { duration: 'q', bpm: 96 }, 0);\n drawTempoStaveBar(100, { duration: '8', bpm: 70 }, 0);\n drawTempoStaveBar(250, { name: 'Andante grazioso' }, 0, [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ]);\n}\nfunction configureSingleLine(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n const stave = new Stave(10, 10, 300);\n stave\n .setConfigForLine(0, { visible: true })\n .setConfigForLine(1, { visible: false })\n .setConfigForLine(2, { visible: true })\n .setConfigForLine(3, { visible: false })\n .setConfigForLine(4, { visible: true });\n stave.setContext(ctx).draw();\n const config = stave.getConfigForLines();\n options.assert.equal(config[0].visible, true, 'getLinesConfiguration() - Line 0');\n options.assert.equal(config[1].visible, false, 'getLinesConfiguration() - Line 1');\n options.assert.equal(config[2].visible, true, 'getLinesConfiguration() - Line 2');\n options.assert.equal(config[3].visible, false, 'getLinesConfiguration() - Line 3');\n options.assert.equal(config[4].visible, true, 'getLinesConfiguration() - Line 4');\n options.assert.ok(true, 'all pass');\n}\nfunction configureAllLines(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n const stave = new Stave(10, 10, 300);\n stave\n .setConfigForLines([{ visible: false }, {}, { visible: false }, { visible: true }, { visible: false }])\n .setContext(ctx)\n .draw();\n const config = stave.getConfigForLines();\n options.assert.equal(config[0].visible, false, 'getLinesConfiguration() - Line 0');\n options.assert.equal(config[1].visible, true, 'getLinesConfiguration() - Line 1');\n options.assert.equal(config[2].visible, false, 'getLinesConfiguration() - Line 2');\n options.assert.equal(config[3].visible, true, 'getLinesConfiguration() - Line 3');\n options.assert.equal(config[4].visible, false, 'getLinesConfiguration() - Line 4');\n options.assert.ok(true, 'all pass');\n}\nfunction drawStaveText(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 900, 140);\n const stave = new Stave(300, 10, 300);\n stave.setText('Violin', Modifier.Position.LEFT);\n stave.setText('Right Text', Modifier.Position.RIGHT);\n stave.setText('Above Text', Modifier.Position.ABOVE);\n stave.setText('Below Text', Modifier.Position.BELOW);\n stave.setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawStaveTextMultiLine(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 900, 200);\n const stave = new Stave(300, 40, 300);\n stave.setText('Violin', Modifier.Position.LEFT, { shift_y: -10 });\n stave.setText('2nd line', Modifier.Position.LEFT, { shift_y: 10 });\n stave.setText('Right Text', Modifier.Position.RIGHT, { shift_y: -10 });\n stave.setText('2nd line', Modifier.Position.RIGHT, { shift_y: 10 });\n stave.setText('Above Text', Modifier.Position.ABOVE, { shift_y: -10 });\n stave.setText('2nd line', Modifier.Position.ABOVE, { shift_y: 10 });\n stave.setText('Left Below Text', Modifier.Position.BELOW, { shift_y: -10, justification: TextJustification.LEFT });\n stave.setText('Right Below Text', Modifier.Position.BELOW, { shift_y: 10, justification: TextJustification.RIGHT });\n stave.setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction factoryAPI(options) {\n const f = VexFlowTests.makeFactory(options, 900, 200);\n const stave = f.Stave({ x: 300, y: 40, width: 300 });\n stave.setText('Violin', Modifier.Position.LEFT, { shift_y: -10 });\n stave.setText('2nd line', Modifier.Position.LEFT, { shift_y: 10 });\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(StaveTests);\nexport { StaveTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveConnector Tests\n// TODO: Should we change StaveConnector.type => StaveConnectorType? We are inconsistent with this.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Modifier } from '../src/modifier';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { StaveConnector } from '../src/staveconnector';\nconst StaveConnectorTests = {\n Start() {\n QUnit.module('StaveConnector');\n const run = VexFlowTests.runTests;\n run('Single Draw Test', drawSingle);\n run('Single Draw Test, 4px Stave Line Thickness', drawSingle4pxStaveLines);\n run('Single Both Sides Test', drawSingleBoth);\n run('Double Draw Test', drawDouble);\n run('Bold Double Line Left Draw Test', drawRepeatBegin);\n run('Bold Double Line Right Draw Test', drawRepeatEnd);\n run('Thin Double Line Right Draw Test', drawThinDouble);\n run('Bold Double Lines Overlapping Draw Test', drawRepeatAdjacent);\n run('Bold Double Lines Offset Draw Test', drawRepeatOffset);\n run('Bold Double Lines Offset Draw Test 2', drawRepeatOffset2);\n run('Brace Draw Test', drawBrace);\n run('Brace Wide Draw Test', drawBraceWide);\n run('Bracket Draw Test', drawBracket);\n run('Combined Draw Test', drawCombined);\n },\n};\nfunction drawSingle(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawSingle4pxStaveLines(options, contextBuilder) {\n const oldThickness = Flow.STAVE_LINE_THICKNESS;\n Flow.STAVE_LINE_THICKNESS = 4;\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n Flow.STAVE_LINE_THICKNESS = oldThickness;\n options.assert.ok(true, 'all pass');\n}\nfunction drawSingleBoth(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector1 = new StaveConnector(stave1, stave2);\n connector1.setType(StaveConnector.type.SINGLE_LEFT);\n connector1.setContext(ctx);\n const connector2 = new StaveConnector(stave1, stave2);\n connector2.setType(StaveConnector.type.SINGLE_RIGHT);\n connector2.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector1.draw();\n connector2.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawDouble(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n const line = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.DOUBLE);\n connector.setContext(ctx);\n line.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawBrace(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 450, 300);\n const stave1 = new Stave(100, 10, 300);\n const stave2 = new Stave(100, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n const line = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.BRACE);\n connector.setContext(ctx);\n connector.setText('Piano');\n line.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawBraceWide(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, -20, 300);\n const stave2 = new Stave(25, 200, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n const line = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.BRACE);\n connector.setContext(ctx);\n line.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawBracket(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n const line = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.BRACKET);\n connector.setContext(ctx);\n line.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawRepeatBegin(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave1.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave2.setBegBarType(BarlineType.REPEAT_BEGIN);\n const line = new StaveConnector(stave1, stave2);\n line.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawRepeatEnd(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave1.setEndBarType(BarlineType.REPEAT_END);\n stave2.setEndBarType(BarlineType.REPEAT_END);\n const line = new StaveConnector(stave1, stave2);\n line.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawThinDouble(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave1.setEndBarType(BarlineType.DOUBLE);\n stave2.setEndBarType(BarlineType.DOUBLE);\n const line = new StaveConnector(stave1, stave2);\n line.setType(StaveConnector.type.THIN_DOUBLE);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n line.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawRepeatAdjacent(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 150);\n const stave2 = new Stave(25, 120, 150);\n const stave3 = new Stave(175, 10, 150);\n const stave4 = new Stave(175, 120, 150);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave3.setContext(ctx);\n stave4.setContext(ctx);\n stave1.setEndBarType(BarlineType.REPEAT_END);\n stave2.setEndBarType(BarlineType.REPEAT_END);\n stave3.setEndBarType(BarlineType.END);\n stave4.setEndBarType(BarlineType.END);\n stave1.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave2.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave3.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave4.setBegBarType(BarlineType.REPEAT_BEGIN);\n const connector1 = new StaveConnector(stave1, stave2);\n const connector2 = new StaveConnector(stave1, stave2);\n const connector3 = new StaveConnector(stave3, stave4);\n const connector4 = new StaveConnector(stave3, stave4);\n connector1.setContext(ctx);\n connector2.setContext(ctx);\n connector3.setContext(ctx);\n connector4.setContext(ctx);\n connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n stave1.draw();\n stave2.draw();\n stave3.draw();\n stave4.draw();\n connector1.draw();\n connector2.draw();\n connector3.draw();\n connector4.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawRepeatOffset2(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 150);\n const stave2 = new Stave(25, 120, 150);\n const stave3 = new Stave(175, 10, 150);\n const stave4 = new Stave(175, 120, 150);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave3.setContext(ctx);\n stave4.setContext(ctx);\n stave1.addClef('treble');\n stave2.addClef('bass');\n stave3.addClef('alto');\n stave4.addClef('treble');\n stave1.addTimeSignature('4/4');\n stave2.addTimeSignature('4/4');\n stave3.addTimeSignature('6/8');\n stave4.addTimeSignature('6/8');\n stave1.setEndBarType(BarlineType.REPEAT_END);\n stave2.setEndBarType(BarlineType.REPEAT_END);\n stave3.setEndBarType(BarlineType.END);\n stave4.setEndBarType(BarlineType.END);\n stave1.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave2.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave3.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave4.setBegBarType(BarlineType.REPEAT_BEGIN);\n const connector1 = new StaveConnector(stave1, stave2);\n const connector2 = new StaveConnector(stave1, stave2);\n const connector3 = new StaveConnector(stave3, stave4);\n const connector4 = new StaveConnector(stave3, stave4);\n const connector5 = new StaveConnector(stave3, stave4);\n connector1.setContext(ctx);\n connector2.setContext(ctx);\n connector3.setContext(ctx);\n connector4.setContext(ctx);\n connector5.setContext(ctx);\n connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector5.setType(StaveConnector.type.SINGLE_LEFT);\n connector1.setXShift(stave1.getModifierXShift());\n connector3.setXShift(stave3.getModifierXShift());\n stave1.draw();\n stave2.draw();\n stave3.draw();\n stave4.draw();\n connector1.draw();\n connector2.draw();\n connector3.draw();\n connector4.draw();\n connector5.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawRepeatOffset(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 150);\n const stave2 = new Stave(25, 120, 150);\n const stave3 = new Stave(185, 10, 150);\n const stave4 = new Stave(185, 120, 150);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave3.setContext(ctx);\n stave4.setContext(ctx);\n stave1.addClef('bass');\n stave2.addClef('alto');\n stave3.addClef('treble');\n stave4.addClef('tenor');\n stave3.addKeySignature('Ab');\n stave4.addKeySignature('Ab');\n stave1.addTimeSignature('4/4');\n stave2.addTimeSignature('4/4');\n stave3.addTimeSignature('6/8');\n stave4.addTimeSignature('6/8');\n stave1.setEndBarType(BarlineType.REPEAT_END);\n stave2.setEndBarType(BarlineType.REPEAT_END);\n stave3.setEndBarType(BarlineType.END);\n stave4.setEndBarType(BarlineType.END);\n stave1.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave2.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave3.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave4.setBegBarType(BarlineType.REPEAT_BEGIN);\n const connector1 = new StaveConnector(stave1, stave2);\n const connector2 = new StaveConnector(stave1, stave2);\n const connector3 = new StaveConnector(stave3, stave4);\n const connector4 = new StaveConnector(stave3, stave4);\n const connector5 = new StaveConnector(stave3, stave4);\n connector1.setContext(ctx);\n connector2.setContext(ctx);\n connector3.setContext(ctx);\n connector4.setContext(ctx);\n connector5.setContext(ctx);\n connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector5.setType(StaveConnector.type.SINGLE_LEFT);\n connector1.setXShift(stave1.getModifierXShift());\n connector3.setXShift(stave3.getModifierXShift());\n stave1.draw();\n stave2.draw();\n stave3.draw();\n stave4.draw();\n connector1.draw();\n connector2.draw();\n connector3.draw();\n connector4.draw();\n connector5.draw();\n options.assert.ok(true, 'all pass');\n}\nfunction drawCombined(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 550, 700);\n const stave1 = new Stave(150, 10, 300);\n const stave2 = new Stave(150, 100, 300);\n const stave3 = new Stave(150, 190, 300);\n const stave4 = new Stave(150, 280, 300);\n const stave5 = new Stave(150, 370, 300);\n const stave6 = new Stave(150, 460, 300);\n const stave7 = new Stave(150, 560, 300);\n stave1.setText('Violin', Modifier.Position.LEFT);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave3.setContext(ctx);\n stave4.setContext(ctx);\n stave5.setContext(ctx);\n stave6.setContext(ctx);\n stave7.setContext(ctx);\n const conn_single = new StaveConnector(stave1, stave7);\n const conn_double = new StaveConnector(stave2, stave3);\n const conn_bracket = new StaveConnector(stave4, stave7);\n const conn_none = new StaveConnector(stave4, stave5);\n const conn_brace = new StaveConnector(stave6, stave7);\n conn_single.setType(StaveConnector.type.SINGLE);\n conn_double.setType(StaveConnector.type.DOUBLE);\n conn_bracket.setType(StaveConnector.type.BRACKET);\n conn_brace.setType(StaveConnector.type.BRACE);\n conn_brace.setXShift(-5);\n conn_double.setText('Piano');\n conn_none.setText('Multiple', { shift_y: -15 });\n conn_none.setText('Line Text', { shift_y: 15 });\n conn_brace.setText('Harpsichord');\n conn_single.setContext(ctx);\n conn_double.setContext(ctx);\n conn_bracket.setContext(ctx);\n conn_none.setContext(ctx);\n conn_brace.setContext(ctx);\n stave1.draw();\n stave2.draw();\n stave3.draw();\n stave4.draw();\n stave5.draw();\n stave6.draw();\n stave7.draw();\n conn_single.draw();\n conn_double.draw();\n conn_bracket.draw();\n conn_none.draw();\n conn_brace.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(StaveConnectorTests);\nexport { StaveConnectorTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Raffaele Viglianti, 2012\n//\n// StaveHairpin Tests\n// TODO: Incorrect property names in the options object: vo, left_ho, right_ho.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { StaveHairpin } from '../src/stavehairpin';\nconst StaveHairpinTests = {\n Start() {\n QUnit.module('StaveHairpin');\n const run = VexFlowTests.runTests;\n run('Simple StaveHairpin', simple);\n run('Horizontal Offset StaveHairpin', horizontal);\n run('Vertical Offset StaveHairpin', vertical);\n run('Height StaveHairpin', height);\n },\n};\n/**\n * Helper function to draw a single hairpin (either crescendo or decrescendo).\n * @param type is StaveHairpin.type.CRESC or StaveHairpin.type.DECRESC.\n * @param position is Modifier.Position.ABOVE or Modifier.Position.BELOW.\n */\nfunction drawHairpin(first_note, last_note, ctx, type, position, options) {\n const hairpin = new StaveHairpin({ first_note, last_note }, type);\n hairpin.setContext(ctx);\n hairpin.setPosition(position);\n if (options) {\n hairpin.setRenderOptions(options);\n }\n hairpin.draw();\n}\n/**\n * Helper function\n */\nfunction createTest(drawTwoHairpins) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options);\n const ctx = factory.getContext();\n const stave = factory.Stave();\n const notes = [\n factory\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' })\n .addModifier(factory.Accidental({ type: 'b' }), 0)\n .addModifier(factory.Accidental({ type: '#' }), 1),\n factory.StaveNote({ keys: ['d/4'], stem_direction: 1, duration: '4' }),\n factory.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }),\n factory.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '4' }),\n ];\n const voice = factory.Voice().addTickables(notes);\n factory.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n factory.draw();\n drawTwoHairpins(ctx, notes);\n options.assert.ok(true, 'Simple Test');\n };\n}\nconst simple = createTest((ctx, notes) => {\n drawHairpin(notes[0], notes[2], ctx, 1, 4);\n drawHairpin(notes[1], notes[3], ctx, 2, 3);\n});\nconst horizontal = createTest((ctx, notes) => {\n drawHairpin(notes[0], notes[2], ctx, 1, 3, {\n height: 10,\n // TODO: these three property names seem to be incorrect.\n // vo => should it be 'y_shift'?\n // left_ho => should it be 'left_shift_px'?\n // right_ho => should it be 'right_shift_px'?\n vo: 20,\n left_ho: 20,\n right_ho: -20, // right horizontal offset\n });\n drawHairpin(notes[3], notes[3], ctx, 2, 4, {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 120, // right horizontal offset\n });\n});\nconst vertical = createTest((ctx, notes) => {\n drawHairpin(notes[0], notes[2], ctx, 1, 4, {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0, // right horizontal offset\n });\n drawHairpin(notes[2], notes[3], ctx, 2, 4, {\n height: 10,\n y_shift: -15,\n left_shift_px: 2,\n right_shift_px: 0, // right horizontal offset\n });\n});\nconst height = createTest((ctx, notes) => {\n drawHairpin(notes[0], notes[2], ctx, 1, 4, {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0, // right horizontal offset\n });\n drawHairpin(notes[2], notes[3], ctx, 2, 4, {\n height: 15,\n y_shift: 0,\n left_shift_px: 2,\n right_shift_px: 0, // right horizontal offset\n });\n});\nVexFlowTests.register(StaveHairpinTests);\nexport { StaveHairpinTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveLine Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Dot } from '../src/dot';\nimport { Font, FontStyle } from '../src/font';\nconst StaveLineTests = {\n Start() {\n QUnit.module('StaveLine');\n const run = VexFlowTests.runTests;\n run('Simple StaveLine', simple0);\n run('StaveLine Arrow Options', simple1);\n },\n};\nfunction simple0(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave().addClef('treble');\n const notes = [\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }),\n f.StaveNote({ keys: ['c/5'], duration: '4', clef: 'treble' }),\n f.StaveNote({ keys: ['c/4', 'g/4', 'b/4'], duration: '4', clef: 'treble' }),\n f.StaveNote({ keys: ['f/4', 'a/4', 'f/5'], duration: '4', clef: 'treble' }),\n ];\n const voice = f.Voice().addTickables(notes);\n f.StaveLine({\n from: notes[0],\n to: notes[1],\n first_indices: [0],\n last_indices: [0],\n options: {\n font: { family: Font.SERIF, size: 12, style: FontStyle.ITALIC },\n text: 'gliss.',\n },\n });\n const staveLine2 = f.StaveLine({\n from: notes[2],\n to: notes[3],\n first_indices: [2, 1, 0],\n last_indices: [0, 1, 2],\n });\n staveLine2.render_options.line_dash = [10, 10];\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction simple1(options) {\n const f = VexFlowTests.makeFactory(options, 770);\n const stave = f.Stave().addClef('treble');\n const notes = [\n f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', clef: 'treble' }),\n f\n .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' })\n .addModifier(f.Accidental({ type: '#' }), 2),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0),\n f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/4', 'd/4', 'g/4'], duration: '4', clef: 'treble' }),\n f\n .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' })\n .addModifier(f.Accidental({ type: '#' }), 2),\n ];\n Dot.buildAndAttach([notes[0]], { all: true });\n const voice = f.Voice().setStrict(false).addTickables(notes);\n const staveLine0 = f.StaveLine({\n from: notes[0],\n to: notes[1],\n first_indices: [0],\n last_indices: [0],\n options: { text: 'Left' },\n });\n const staveLine4 = f.StaveLine({\n from: notes[2],\n to: notes[3],\n first_indices: [1],\n last_indices: [1],\n options: { text: 'Right' },\n });\n const staveLine1 = f.StaveLine({\n from: notes[4],\n to: notes[5],\n first_indices: [0],\n last_indices: [0],\n options: { text: 'Center' },\n });\n const staveLine2 = f.StaveLine({\n from: notes[6],\n to: notes[7],\n first_indices: [1],\n last_indices: [0],\n });\n const staveLine3 = f.StaveLine({\n from: notes[6],\n to: notes[7],\n first_indices: [2],\n last_indices: [2],\n options: { text: 'Top' },\n });\n staveLine0.render_options.draw_end_arrow = true;\n staveLine0.render_options.text_justification = 1;\n staveLine0.render_options.text_position_vertical = 2;\n staveLine1.render_options.draw_end_arrow = true;\n staveLine1.render_options.arrowhead_length = 30;\n staveLine1.render_options.line_width = 5;\n staveLine1.render_options.text_justification = 2;\n staveLine1.render_options.text_position_vertical = 2;\n staveLine4.render_options.line_width = 2;\n staveLine4.render_options.draw_end_arrow = true;\n staveLine4.render_options.draw_start_arrow = true;\n staveLine4.render_options.arrowhead_angle = 0.5;\n staveLine4.render_options.arrowhead_length = 20;\n staveLine4.render_options.text_justification = 3;\n staveLine4.render_options.text_position_vertical = 2;\n staveLine2.render_options.draw_start_arrow = true;\n staveLine2.render_options.line_dash = [5, 4];\n staveLine3.render_options.draw_end_arrow = true;\n staveLine3.render_options.draw_start_arrow = true;\n staveLine3.render_options.color = 'red';\n staveLine3.render_options.text_position_vertical = 1;\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nVexFlowTests.register(StaveLineTests);\nexport { StaveLineTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveModifier Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { StaveModifierPosition } from '../src/stavemodifier';\nconst StaveModifierTests = {\n Start() {\n QUnit.module('StaveModifier');\n const run = VexFlowTests.runTests;\n run('Stave Draw Test', draw);\n run('Begin & End StaveModifier Test', drawBeginAndEnd);\n },\n};\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n const stave = new Stave(10, 10, 300);\n stave.setContext(ctx);\n stave.draw();\n options.assert.equal(stave.getYForNote(0), 100, 'getYForNote(0)');\n options.assert.equal(stave.getYForLine(5), 100, 'getYForLine(5)');\n options.assert.equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line');\n options.assert.equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line');\n options.assert.ok(true, 'all pass');\n}\nfunction drawBeginAndEnd(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n const stave = new Stave(10, 10, 400);\n stave.setContext(ctx);\n stave.setTimeSignature('C|');\n stave.setKeySignature('Db');\n stave.setClef('treble');\n stave.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave.setEndClef('alto');\n stave.setEndTimeSignature('9/8');\n stave.setEndKeySignature('G', 'C#');\n stave.setEndBarType(BarlineType.DOUBLE);\n stave.draw();\n // change\n const END = StaveModifierPosition.END;\n stave.setY(100);\n stave.setTimeSignature('3/4');\n stave.setKeySignature('G', 'C#');\n stave.setClef('bass');\n stave.setBegBarType(BarlineType.SINGLE);\n stave.setClef('treble', undefined, undefined, END);\n stave.setTimeSignature('C', undefined, END);\n stave.setKeySignature('F', undefined, END);\n stave.setEndBarType(BarlineType.SINGLE);\n stave.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(StaveModifierTests);\nexport { StaveModifierTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveNote Tests\n// TODO: In StaveNote.preFormat() line 929, should noteHeadPadding default to StaveNote.minNoteheadPadding?\n// The bounding box of a note changes slightly when we add a ModifierContext (even if we add zero modifiers).\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Annotation, AnnotationVerticalJustify } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { Fraction } from '../src/fraction';\nimport { FretHandFinger } from '../src/frethandfinger';\nimport { Modifier } from '../src/modifier';\nimport { ModifierContext } from '../src/modifiercontext';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { StringNumber } from '../src/stringnumber';\nimport { Stroke } from '../src/strokes';\nimport { TickContext } from '../src/tickcontext';\nconst StaveNoteTests = {\n Start() {\n QUnit.module('StaveNote');\n QUnit.test('Tick', ticks);\n QUnit.test('Tick - New API', ticksNewAPI);\n QUnit.test('Stem', stem);\n QUnit.test('Automatic Stem Direction', autoStem);\n QUnit.test('Stem Extension Pitch', stemExtensionPitch);\n QUnit.test('Displacement after calling setStemDirection', setStemDirectionDisplacement);\n QUnit.test('StaveLine', staveLine);\n QUnit.test('Width', width);\n QUnit.test('TickContext', tickContext);\n const run = VexFlowTests.runTests;\n run('StaveNote Draw - Treble', drawBasic, { clef: 'treble', octaveShift: 0, restKey: 'r/4' });\n run('StaveNote BoundingBoxes - Treble', drawBoundingBoxes, { clef: 'treble', octaveShift: 0, restKey: 'r/4' });\n run('StaveNote Draw - Alto', drawBasic, { clef: 'alto', octaveShift: -1, restKey: 'r/4' });\n run('StaveNote Draw - Tenor', drawBasic, { clef: 'tenor', octaveShift: -1, restKey: 'r/3' });\n run('StaveNote Draw - Bass', drawBasic, { clef: 'bass', octaveShift: -2, restKey: 'r/3' });\n run('StaveNote Draw - Harmonic And Muted', drawHarmonicAndMuted);\n run('StaveNote Draw - Slash', drawSlash);\n run('Displacements', displacements);\n run('StaveNote Draw - Bass 2', drawBass);\n run('StaveNote Draw - Key Styles', drawKeyStyles);\n run('StaveNote Draw - StaveNote Stem Styles', drawNoteStemStyles);\n run('StaveNote Draw - StaveNote Stem Lengths', drawNoteStemLengths);\n run('StaveNote Draw - StaveNote Flag Styles', drawNoteStylesWithFlag);\n run('StaveNote Draw - StaveNote Styles', drawNoteStyles);\n run('Stave, Ledger Line, Beam, Stem and Flag Styles', drawBeamStyles);\n run('Flag and Dot Placement - Stem Up', dotsAndFlagsStemUp);\n run('Flag and Dots Placement - Stem Down', dotsAndFlagsStemDown);\n run('Beam and Dot Placement - Stem Up', dotsAndBeamsUp);\n run('Beam and Dot Placement - Stem Down', dotsAndBeamsDown);\n run('No Padding', noPadding);\n run('Note Heads Placement - Simple', noteHeadsSimple);\n run('Note Heads Placement - Hidden Notes', noteHeadsHidden);\n run('Center Aligned Note', centerAlignedRest);\n run('Center Aligned Note with Articulation', centerAlignedRestFermata);\n run('Center Aligned Note with Annotation', centerAlignedRestAnnotation);\n run('Center Aligned Note - Multi Voice', centerAlignedMultiVoice);\n run('Center Aligned Note with Multiple Modifiers', centerAlignedNoteMultiModifiers);\n // This interactivity test currently only works with the SVG backend.\n VexFlowTests.runSVGTest('Interactive Mouseover StaveNote', drawBasic, {\n clef: 'treble',\n octaveShift: 0,\n restKey: 'r/4',\n ui: true,\n });\n },\n};\n// Helper function to create StaveNotes.\nconst staveNote = (struct) => new StaveNote(struct);\n/**\n * Helper function to draw a note with an optional bounding box.\n */\nfunction draw(note, stave, context, x, drawBoundingBox = false, addModifierContext = true) {\n // Associate the note with the stave.\n note.setStave(stave);\n // A ModifierContext is required for dots and other modifiers to be drawn properly.\n // If added, it changes the bounding box of a note, even if there are no modifiers to draw.\n // See StaveNote.minNoteheadPadding in stavenote.ts.\n if (addModifierContext) {\n note.addToModifierContext(new ModifierContext());\n }\n new TickContext().addTickable(note).preFormat().setX(x);\n note.setContext(context).draw();\n if (drawBoundingBox) {\n const bb = note.getBoundingBox();\n context.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH());\n context.stroke();\n }\n return note;\n}\nfunction ticks(assert) {\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n // Key value pairs of `testName: [durationString, expectedBeats, expectedNoteType]`\n const tickTests = {\n 'Breve note': ['1/2', 8.0, 'n'],\n 'Whole note': ['w', 4.0, 'n'],\n 'Quarter note': ['q', 1.0, 'n'],\n 'Dotted half note': ['hd', 3.0, 'n'],\n 'Doubled-dotted half note': ['hdd', 3.5, 'n'],\n 'Triple-dotted half note': ['hddd', 3.75, 'n'],\n 'Dotted half rest': ['hdr', 3.0, 'r'],\n 'Double-dotted half rest': ['hddr', 3.5, 'r'],\n 'Triple-dotted half rest': ['hdddr', 3.75, 'r'],\n 'Dotted harmonic quarter note': ['qdh', 1.5, 'h'],\n 'Double-dotted harmonic quarter note': ['qddh', 1.75, 'h'],\n 'Triple-dotted harmonic quarter note': ['qdddh', 1.875, 'h'],\n 'Dotted muted 8th note': ['8dm', 0.75, 'm'],\n 'Double-dotted muted 8th note': ['8ddm', 0.875, 'm'],\n 'Triple-dotted muted 8th note': ['8dddm', 0.9375, 'm'],\n };\n Object.keys(tickTests).forEach((testName) => {\n const testData = tickTests[testName];\n const durationString = testData[0];\n const expectedBeats = testData[1];\n const expectedNoteType = testData[2];\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: durationString });\n assert.equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats');\n assert.equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType);\n });\n assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, \"Invalid note duration '8.7' throws BadArguments exception\");\n assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, \"Invalid note type 'Z' throws BadArguments exception\");\n assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, \"Invalid note type 'Z' throws BadArguments exception\");\n}\nfunction ticksNewAPI(assert) {\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n // Key value pairs of `testName: [noteData, expectedBeats, expectedNoteType]`\n const tickTests = {\n 'Breve note': [{ duration: '1/2' }, 8.0, 'n'],\n 'Whole note': [{ duration: 'w' }, 4.0, 'n'],\n 'Quarter note': [{ duration: 'q' }, 1.0, 'n'],\n 'Dotted half note': [{ duration: 'h', dots: 1 }, 3.0, 'n'],\n 'Doubled-dotted half note': [{ duration: 'h', dots: 2 }, 3.5, 'n'],\n 'Triple-dotted half note': [{ duration: 'h', dots: 3 }, 3.75, 'n'],\n 'Dotted half rest': [{ duration: 'h', dots: 1, type: 'r' }, 3.0, 'r'],\n 'Double-dotted half rest': [{ duration: 'h', dots: 2, type: 'r' }, 3.5, 'r'],\n 'Triple-dotted half rest': [{ duration: 'h', dots: 3, type: 'r' }, 3.75, 'r'],\n 'Dotted harmonic quarter note': [{ duration: 'q', dots: 1, type: 'h' }, 1.5, 'h'],\n 'Double-dotted harmonic quarter note': [{ duration: 'q', dots: 2, type: 'h' }, 1.75, 'h'],\n 'Triple-dotted harmonic quarter note': [{ duration: 'q', dots: 3, type: 'h' }, 1.875, 'h'],\n 'Dotted muted 8th note': [{ duration: '8', dots: 1, type: 'm' }, 0.75, 'm'],\n 'Double-dotted muted 8th note': [{ duration: '8', dots: 2, type: 'm' }, 0.875, 'm'],\n 'Triple-dotted muted 8th note': [{ duration: '8', dots: 3, type: 'm' }, 0.9375, 'm'],\n };\n Object.keys(tickTests).forEach(function (testName) {\n const testData = tickTests[testName];\n const noteData = testData[0];\n const expectedBeats = testData[1];\n const expectedNoteType = testData[2];\n noteData.keys = ['c/4', 'e/4', 'g/4'];\n const note = new StaveNote(noteData);\n assert.equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats');\n assert.equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType);\n });\n assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, \"Invalid note duration '8.7' throws BadArguments exception\");\n assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, \"Invalid note type 'Z' throws BadArguments exception\");\n assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, \"Invalid note type 'Z' throws BadArguments exception\");\n}\nfunction stem(assert) {\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'w' });\n assert.equal(note.getStemDirection(), Stem.UP, 'Default note has UP stem');\n}\nfunction autoStem(assert) {\n const testData = [\n [['c/5', 'e/5', 'g/5'], Stem.DOWN],\n [['e/4', 'g/4', 'c/5'], Stem.UP],\n [['c/5'], Stem.DOWN],\n [['a/4', 'e/5', 'g/5'], Stem.DOWN],\n [['b/4'], Stem.DOWN],\n ];\n testData.forEach((td) => {\n const keys = td[0];\n const expectedStemDirection = td[1];\n const note = new StaveNote({ keys: keys, auto_stem: true, duration: '8' });\n assert.equal(note.getStemDirection(), expectedStemDirection, 'Stem must be ' + (expectedStemDirection === Stem.UP ? 'up' : 'down'));\n });\n}\nfunction stemExtensionPitch(assert) {\n // [keys, expectedStemExtension, override stem direction]\n const testData = [\n [['c/5', 'e/5', 'g/5'], 0, 0],\n [['e/4', 'g/4', 'c/5'], 0, 0],\n [['c/5'], 0, 0],\n [['f/3'], 15, 0],\n [['f/3'], 15, Stem.UP],\n [['f/3'], 0, Stem.DOWN],\n [['f/3', 'e/5'], 0, 0],\n [['g/6'], 25, 0],\n [['g/6'], 25, Stem.DOWN],\n [['g/6'], 0, Stem.UP],\n ];\n testData.forEach((td) => {\n const keys = td[0];\n const expectedStemExtension = td[1];\n const overrideStemDirection = td[2];\n let note;\n if (overrideStemDirection === 0) {\n note = new StaveNote({ keys: keys, auto_stem: true, duration: '4' });\n }\n else {\n note = new StaveNote({ keys: keys, duration: '4', stem_direction: overrideStemDirection });\n }\n assert.equal(note.getStemExtension(), expectedStemExtension, 'For ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension);\n // set to weird Stave\n const stave = new Stave(10, 10, 300, { spacing_between_lines_px: 20 });\n note.setStave(stave);\n assert.equal(note.getStemExtension(), expectedStemExtension * 2, 'For wide staff ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension * 2);\n // const whole_note = new StaveNote({ keys: keys, duration: 'w' });\n // assert.equal(\n // whole_note.getStemExtension(),\n // -1 * Flow.STEM_HEIGHT,\n // 'For ' + keys.toString() + ' whole_note StemExtension must always be -1 * Flow.STEM_HEIGHT'\n // );\n });\n}\nfunction setStemDirectionDisplacement(assert) {\n function getDisplacements(note) {\n return note.noteHeads.map((noteHead) => noteHead.isDisplaced());\n }\n const stemUpDisplacements = [false, true, false];\n const stemDownDisplacements = [true, false, false];\n const note = new StaveNote({ keys: ['c/5', 'd/5', 'g/5'], stem_direction: Stem.UP, duration: '4' });\n assert.deepEqual(getDisplacements(note), stemUpDisplacements);\n note.setStemDirection(Stem.DOWN);\n assert.deepEqual(getDisplacements(note), stemDownDisplacements);\n note.setStemDirection(Stem.UP);\n assert.deepEqual(getDisplacements(note), stemUpDisplacements);\n}\nfunction staveLine(assert) {\n const stave = new Stave(10, 10, 300);\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' });\n note.setStave(stave);\n const props = note.getKeyProps();\n assert.equal(props[0].line, 0, 'C/4 on line 0');\n assert.equal(props[1].line, 1, 'E/4 on line 1');\n assert.equal(props[2].line, 2.5, 'A/4 on line 2.5');\n const ys = note.getYs();\n assert.equal(ys.length, 3, 'Chord should be rendered on three lines');\n assert.equal(ys[0], 100, 'Line for C/4');\n assert.equal(ys[1], 90, 'Line for E/4');\n assert.equal(ys[2], 75, 'Line for A/4');\n}\nfunction width(assert) {\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' });\n assert.throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width');\n}\nfunction tickContext(assert) {\n const stave = new Stave(10, 10, 400);\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }).setStave(stave);\n new TickContext().addTickable(note).preFormat().setX(10).setPadding(0);\n assert.expect(0);\n}\nfunction drawBasic(options, contextBuilder) {\n const clef = options.params.clef;\n const octaveShift = options.params.octaveShift;\n const restKey = options.params.restKey;\n const ctx = contextBuilder(options.elementId, 700, 180);\n const stave = new Stave(10, 30, 750);\n stave.setContext(ctx);\n stave.addClef(clef);\n stave.draw();\n const lowerKeys = ['c/', 'e/', 'a/'];\n const higherKeys = ['c/', 'e/', 'a/'];\n for (let k = 0; k < lowerKeys.length; k++) {\n lowerKeys[k] = lowerKeys[k] + (4 + octaveShift);\n higherKeys[k] = higherKeys[k] + (5 + octaveShift);\n }\n const restKeys = [restKey];\n const noteStructs = [\n { clef: clef, keys: higherKeys, duration: '1/2' },\n { clef: clef, keys: lowerKeys, duration: 'w' },\n { clef: clef, keys: higherKeys, duration: 'h' },\n { clef: clef, keys: lowerKeys, duration: 'q' },\n { clef: clef, keys: higherKeys, duration: '8' },\n { clef: clef, keys: lowerKeys, duration: '16' },\n { clef: clef, keys: higherKeys, duration: '32' },\n { clef: clef, keys: higherKeys, duration: '64' },\n { clef: clef, keys: higherKeys, duration: '128' },\n { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '8', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '16', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '32', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '64', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '128', stem_direction: Stem.DOWN },\n { clef: clef, keys: restKeys, duration: '1/2r' },\n { clef: clef, keys: restKeys, duration: 'wr' },\n { clef: clef, keys: restKeys, duration: 'hr' },\n { clef: clef, keys: restKeys, duration: 'qr' },\n { clef: clef, keys: restKeys, duration: '8r' },\n { clef: clef, keys: restKeys, duration: '16r' },\n { clef: clef, keys: restKeys, duration: '32r' },\n { clef: clef, keys: restKeys, duration: '64r' },\n { clef: clef, keys: restKeys, duration: '128r' },\n { keys: ['x/4'], duration: 'h' },\n ];\n options.assert.expect(noteStructs.length * 2);\n const colorDescendants = (parentItem, color) => () => parentItem.querySelectorAll('*').forEach((child) => {\n child.setAttribute('fill', color);\n child.setAttribute('stroke', color);\n });\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25);\n // If this is an interactivity test (ui: true), then attach mouseover & mouseout handlers to the notes.\n if (options.params.ui) {\n const item = note.getSVGElement();\n if (item) {\n item.addEventListener('mouseover', colorDescendants(item, 'green'), false);\n item.addEventListener('mouseout', colorDescendants(item, 'black'), false);\n }\n }\n options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawBoundingBoxes(options, contextBuilder) {\n const clef = options.params.clef;\n const octaveShift = options.params.octaveShift;\n const restKey = options.params.restKey;\n const ctx = contextBuilder(options.elementId, 700, 180);\n const stave = new Stave(10, 30, 750);\n stave.setContext(ctx);\n stave.addClef(clef);\n stave.draw();\n const lowerKeys = ['c/', 'e/', 'a/'];\n const higherKeys = ['c/', 'e/', 'a/'];\n for (let k = 0; k < lowerKeys.length; k++) {\n lowerKeys[k] = lowerKeys[k] + (4 + octaveShift);\n higherKeys[k] = higherKeys[k] + (5 + octaveShift);\n }\n const restKeys = [restKey];\n const noteStructs = [\n { clef: clef, keys: higherKeys, duration: '1/2' },\n { clef: clef, keys: lowerKeys, duration: 'w' },\n { clef: clef, keys: higherKeys, duration: 'h' },\n { clef: clef, keys: lowerKeys, duration: 'q' },\n { clef: clef, keys: higherKeys, duration: '8' },\n { clef: clef, keys: lowerKeys, duration: '16' },\n { clef: clef, keys: higherKeys, duration: '32' },\n { clef: clef, keys: higherKeys, duration: '64' },\n { clef: clef, keys: higherKeys, duration: '128' },\n { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '8', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '16', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '32', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '64', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '128' },\n { clef: clef, keys: restKeys, duration: '1/2r' },\n { clef: clef, keys: restKeys, duration: 'wr' },\n { clef: clef, keys: restKeys, duration: 'hr' },\n { clef: clef, keys: restKeys, duration: 'qr' },\n { clef: clef, keys: restKeys, duration: '8r' },\n { clef: clef, keys: restKeys, duration: '16r' },\n { clef: clef, keys: restKeys, duration: '32r' },\n { clef: clef, keys: restKeys, duration: '64r' },\n { clef: clef, keys: restKeys, duration: '128r' },\n { keys: ['x/4'], duration: 'h' },\n ];\n options.assert.expect(noteStructs.length * 2);\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25, true /* drawBoundingBox */, false /* addModifierContext */);\n options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawBass(options, contextBuilder) {\n options.assert.expect(40);\n const ctx = contextBuilder(options.elementId, 600, 280);\n const stave = new Stave(10, 10, 650);\n stave.setContext(ctx);\n stave.addClef('bass');\n stave.draw();\n const noteStructs = [\n { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '1/2' },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'w' },\n { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: 'h' },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q' },\n { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '8' },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16' },\n { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '32' },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'h', stem_direction: Stem.DOWN },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q', stem_direction: Stem.DOWN },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '8', stem_direction: Stem.DOWN },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16', stem_direction: Stem.DOWN },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '32', stem_direction: Stem.DOWN },\n { keys: ['r/4'], duration: '1/2r' },\n { keys: ['r/4'], duration: 'wr' },\n { keys: ['r/4'], duration: 'hr' },\n { keys: ['r/4'], duration: 'qr' },\n { keys: ['r/4'], duration: '8r' },\n { keys: ['r/4'], duration: '16r' },\n { keys: ['r/4'], duration: '32r' },\n { keys: ['x/4'], duration: 'h' },\n ];\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25);\n options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction displacements(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 700, 155);\n ctx.scale(0.9, 0.9);\n const stave = new Stave(10, 10, 675);\n stave.setContext(ctx);\n stave.draw();\n const noteStructs = [\n { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: '1/2' },\n { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: 'w' },\n { keys: ['d/4', 'e/4', 'f/4'], duration: 'h' },\n { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: 'q' },\n { keys: ['e/3', 'b/3', 'c/4', 'e/4', 'f/4', 'g/5', 'a/5'], duration: '8' },\n { keys: ['a/3', 'c/4', 'e/4', 'g/4', 'a/4', 'b/4'], duration: '16' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32' },\n { keys: ['c/4', 'e/4', 'a/4', 'a/4'], duration: '64' },\n { keys: ['g/3', 'c/4', 'd/4', 'e/4'], duration: 'h', stem_direction: Stem.DOWN },\n { keys: ['d/4', 'e/4', 'f/4'], duration: 'q', stem_direction: Stem.DOWN },\n { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '8', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'd/4', 'e/4', 'f/4', 'g/4', 'a/4'], duration: '16', stem_direction: Stem.DOWN },\n { keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6'], duration: '32', stem_direction: Stem.DOWN },\n {\n keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6', 'e/6'],\n duration: '64',\n stem_direction: Stem.DOWN,\n },\n ];\n options.assert.expect(noteStructs.length * 2);\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 45);\n options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawHarmonicAndMuted(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 1000, 180);\n const stave = new Stave(10, 10, 950);\n stave.setContext(ctx);\n stave.draw();\n const noteStructs = [\n { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '8h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '16h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '64h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '128h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '8h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '16h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '64h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '128h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '8m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '16m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '64m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '128m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '8m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '16m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '64m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '128m', stem_direction: Stem.DOWN },\n ];\n options.assert.expect(noteStructs.length * 2);\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, i * 25 + 5);\n options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawSlash(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 700, 180);\n const stave = new Stave(10, 10, 650);\n stave.setContext(ctx);\n stave.draw();\n const notes = [\n { keys: ['b/4'], duration: '1/2s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: 'ws', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: 'hs', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: 'qs', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '16s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '32s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '64s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '128s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '1/2s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: 'ws', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: 'hs', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: 'qs', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '16s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '32s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '64s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '128s', stem_direction: Stem.UP },\n // Beam\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP },\n ];\n const stave_notes = notes.map((struct) => new StaveNote(struct));\n const beam1 = new Beam([stave_notes[16], stave_notes[17]]);\n const beam2 = new Beam([stave_notes[18], stave_notes[19]]);\n Formatter.FormatAndDraw(ctx, stave, stave_notes, false);\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n options.assert.ok('Slash Note Heads');\n}\nfunction drawKeyStyles(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 300, 280);\n ctx.scale(3, 3);\n const stave = new Stave(10, 0, 100);\n const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' })\n .setStave(stave)\n .addModifier(new Accidental('b'), 1)\n .setKeyStyle(1, { shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue' });\n new TickContext().addTickable(note).preFormat().setX(25);\n stave.setContext(ctx).draw();\n note.setContext(ctx).draw();\n options.assert.ok(note.getX() > 0, 'Note has X value');\n options.assert.ok(note.getYs().length > 0, 'Note has Y values');\n}\nfunction drawNoteStyles(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 300, 280);\n const stave = new Stave(10, 0, 100);\n ctx.scale(3, 3);\n const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' })\n .setStave(stave)\n .addModifier(new Accidental('b'), 1);\n note.setStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' });\n new TickContext().addTickable(note).preFormat().setX(25);\n stave.setContext(ctx).draw();\n note.setContext(ctx).draw();\n options.assert.ok(note.getX() > 0, 'Note has X value');\n options.assert.ok(note.getYs().length > 0, 'Note has Y values');\n}\nfunction drawNoteStemStyles(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 300, 280);\n const stave = new Stave(10, 0, 100);\n ctx.scale(3, 3);\n const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' })\n .setStave(stave)\n .addModifier(new Accidental('b'), 1);\n note.setStemStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' });\n new TickContext().addTickable(note).preFormat().setX(25);\n stave.setContext(ctx).draw();\n note.setContext(ctx).draw();\n options.assert.ok('Note Stem Style');\n}\nfunction drawNoteStemLengths(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 975, 150);\n const stave = new Stave(10, 10, 975);\n stave.setContext(ctx).draw();\n const keys = [\n 'e/3',\n 'f/3',\n 'g/3',\n 'a/3',\n 'b/3',\n 'c/4',\n 'd/4',\n 'e/4',\n 'f/4',\n 'g/4',\n 'f/5',\n 'g/5',\n 'a/5',\n 'b/5',\n 'c/6',\n 'd/6',\n 'e/6',\n 'f/6',\n 'g/6',\n 'a/6',\n ];\n const notes = [];\n let note;\n let i;\n for (i = 0; i < keys.length; i++) {\n let duration = 'q';\n if (i % 2 === 1) {\n duration = '8';\n }\n note = new StaveNote({ keys: [keys[i]], duration, auto_stem: true }).setStave(stave);\n new TickContext().addTickable(note);\n note.setContext(ctx);\n notes.push(note);\n }\n const whole_keys = ['e/3', 'a/3', 'f/5', 'a/5', 'd/6', 'a/6'];\n for (i = 0; i < whole_keys.length; i++) {\n note = new StaveNote({ keys: [whole_keys[i]], duration: 'w' }).setStave(stave);\n new TickContext().addTickable(note);\n note.setContext(ctx);\n notes.push(note);\n }\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok('Note Stem Length');\n}\nfunction drawNoteStylesWithFlag(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 300, 280);\n const stave = new Stave(10, 0, 100);\n ctx.scale(3, 3);\n const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' })\n .setStave(stave)\n .addModifier(new Accidental('b'), 1);\n note.setFlagStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' });\n new TickContext().addTickable(note).preFormat().setX(25);\n stave.setContext(ctx).draw();\n note.setContext(ctx).draw();\n options.assert.ok(note.getX() > 0, 'Note has X value');\n options.assert.ok(note.getYs().length > 0, 'Note has Y values');\n}\nfunction drawBeamStyles(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 160);\n const stave = new Stave(10, 10, 380);\n stave.setStyle({ strokeStyle: '#EEAAEE', lineWidth: 3 });\n stave.setContext(ctx);\n stave.draw();\n const notes = [\n // beam1\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n // should be unstyled...\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n // beam2 should also be unstyled\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n // beam3\n { keys: ['b/4'], duration: '8', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '8', stem_direction: Stem.UP },\n // beam4\n { keys: ['d/6'], duration: '8', stem_direction: Stem.DOWN },\n { keys: ['c/6', 'd/6'], duration: '8', stem_direction: Stem.DOWN },\n // unbeamed\n { keys: ['d/6', 'e/6'], duration: '8', stem_direction: Stem.DOWN },\n // unbeamed, unstyled\n { keys: ['e/6', 'f/6'], duration: '8', stem_direction: Stem.DOWN },\n ];\n const staveNotes = notes.map((note) => new StaveNote(note));\n const beam1 = new Beam(staveNotes.slice(0, 2));\n const beam2 = new Beam(staveNotes.slice(3, 5));\n const beam3 = new Beam(staveNotes.slice(5, 7));\n const beam4 = new Beam(staveNotes.slice(7, 9));\n // stem, key, ledger, flag; beam.setStyle\n beam1.setStyle({ fillStyle: 'blue', strokeStyle: 'blue' });\n staveNotes[0].setKeyStyle(0, { fillStyle: 'purple' });\n staveNotes[0].setStemStyle({ strokeStyle: 'green' });\n staveNotes[1].setStemStyle({ strokeStyle: 'orange' });\n staveNotes[1].setKeyStyle(0, { fillStyle: 'darkturquoise' });\n staveNotes[5].setStyle({ fillStyle: 'tomato', strokeStyle: 'tomato' });\n beam3.setStyle({ shadowBlur: 4, shadowColor: 'blue' });\n staveNotes[9].setLedgerLineStyle({ fillStyle: 'lawngreen', strokeStyle: 'lawngreen', lineWidth: 1 });\n staveNotes[9].setFlagStyle({ fillStyle: 'orange', strokeStyle: 'orange' });\n Formatter.FormatAndDraw(ctx, stave, staveNotes, false);\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n beam3.setContext(ctx).draw();\n beam4.setContext(ctx).draw();\n options.assert.ok('draw beam styles');\n}\nfunction dotsAndFlagsStemUp(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n ctx.scale(1.0, 1.0);\n const stave = new Stave(10, 10, 975);\n const notes = [\n staveNote({ keys: ['f/4'], duration: '4', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '8', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '16', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '32', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '64', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '128', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '4', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '8', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '16', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '32' }),\n staveNote({ keys: ['g/4'], duration: '64', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '128', stem_direction: Stem.UP }),\n ];\n Dot.buildAndAttach(notes, { all: true });\n Dot.buildAndAttach([notes[5], notes[11]], { all: true });\n stave.setContext(ctx).draw();\n for (let i = 0; i < notes.length; ++i) {\n draw(notes[i], stave, ctx, i * 65);\n }\n options.assert.ok(true, 'Full Dot');\n}\nfunction dotsAndFlagsStemDown(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 160);\n ctx.scale(1.0, 1.0);\n const stave = new Stave(10, 10, 975);\n const staveNotes = [\n staveNote({ keys: ['e/5'], duration: '4', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '8', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '16', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '32', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '64', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '128', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '4', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '8', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '16', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '32', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '64', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '128', stem_direction: Stem.DOWN }),\n ];\n Dot.buildAndAttach(staveNotes, { all: true });\n stave.setContext(ctx).draw();\n for (let i = 0; i < staveNotes.length; ++i) {\n draw(staveNotes[i], stave, ctx, i * 65);\n }\n options.assert.ok(true, 'Full Dot');\n}\nfunction dotsAndBeamsUp(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n ctx.scale(1.0, 1.0);\n const stave = new Stave(10, 10, 975);\n const staveNotes = [\n staveNote({ keys: ['f/4'], duration: '8', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '16', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '32', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '64', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '128', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '8', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '16', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '32' }),\n staveNote({ keys: ['g/4'], duration: '64', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '128', stem_direction: Stem.UP }),\n ];\n Dot.buildAndAttach(staveNotes, { all: true });\n Dot.buildAndAttach([staveNotes[4], staveNotes[9]], { all: true });\n const beam = new Beam(staveNotes);\n stave.setContext(ctx).draw();\n for (let i = 0; i < staveNotes.length; ++i) {\n draw(staveNotes[i], stave, ctx, i * 65);\n }\n beam.setContext(ctx).draw();\n options.assert.ok(true, 'Full Dot');\n}\nfunction dotsAndBeamsDown(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 160);\n ctx.scale(1.0, 1.0);\n const stave = new Stave(10, 10, 975);\n const staveNotes = [\n staveNote({ keys: ['e/5'], duration: '8', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '16', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '32', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '64', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '128', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '8', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '16', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '32', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '64', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '128', stem_direction: Stem.DOWN }),\n ];\n Dot.buildAndAttach(staveNotes, { all: true });\n const beam = new Beam(staveNotes);\n stave.setContext(ctx).draw();\n for (let i = 0; i < staveNotes.length; ++i) {\n draw(staveNotes[i], stave, ctx, i * 65);\n }\n beam.setContext(ctx).draw();\n options.assert.ok(true, 'Full Dot');\n}\nfunction noteHeadsSimple(options) {\n const vf = VexFlowTests.makeFactory(options, 800, 250);\n const score = vf.EasyScore();\n const system1 = vf.System({ y: 100, x: 50, width: 200 });\n system1\n .addStave({\n voices: [\n score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]),\n score.voice(score.notes('g4/w')),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n const system2 = vf.System({ y: 100, x: 250, width: 150 });\n system2.addStave({\n voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(score.notes('b4/w'))],\n });\n const system3 = vf.System({ y: 100, x: 400, width: 150 });\n system3.addStave({\n voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))],\n });\n const system4 = vf.System({ y: 100, x: 550, width: 150 });\n system4.addStave({\n voices: [\n score.voice(score.notes('e4/q, e4/q/r, e4/h/r')),\n score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r')),\n ],\n });\n vf.draw();\n options.assert.expect(0);\n}\nfunction noPadding(options) {\n const vf = VexFlowTests.makeFactory(options, 800, 500);\n const score = vf.EasyScore();\n function newStave(y, noPadding) {\n let system = vf.System({ y, x: 50, width: 200, noPadding });\n system\n .addStave({\n voices: [\n score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q, a4/h')]),\n score.voice(score.notes('g4/w')),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n system = vf.System({ y, x: 250, width: 150, noPadding });\n system.addStave({\n voices: [score.voice(score.notes('b4/h, b4/h')), score.voice(score.notes('b4/w'))],\n });\n system = vf.System({ y, x: 400, width: 150, noPadding });\n system.addStave({\n voices: [score.voice(score.notes('d5/h, d5/h')), score.voice(score.notes('e4/w'))],\n });\n system = vf.System({ y, x: 550, width: 150, noPadding });\n system.addStave({\n voices: [score.voice(score.notes('e4/q, e4/q, e4/h')), score.voice(score.notes('e4/8, e4/8, e4/q, e4/h'))],\n });\n }\n newStave(100, true);\n newStave(200, false);\n vf.draw();\n options.assert.expect(0);\n}\nfunction noteHeadsHidden(options) {\n const vf = VexFlowTests.makeFactory(options, 800, 250);\n const score = vf.EasyScore();\n const system1 = vf.System({ y: 100, x: 50, width: 200 });\n const notes1 = score.notes('g4/w');\n notes1[0].render_options.draw = false;\n system1\n .addStave({\n voices: [\n score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]),\n score.voice(notes1),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n const system2 = vf.System({ y: 100, x: 250, width: 150 });\n const notes2 = score.notes('b4/w');\n notes2[0].render_options.draw = false;\n system2.addStave({\n voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(notes2)],\n });\n const system3 = vf.System({ y: 100, x: 400, width: 150 });\n system3.addStave({\n voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))],\n });\n const system4 = vf.System({ y: 100, x: 550, width: 150 });\n const notes4 = score.notes('e4/q, e4/q/r, e4/h/r');\n notes4[0].render_options.draw = false;\n notes4[2].render_options.draw = false;\n system4.addStave({\n voices: [score.voice(notes4), score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r'))],\n });\n vf.draw();\n options.assert.expect(0);\n}\nfunction centerAlignedRest(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4');\n const note = f.StaveNote({ keys: ['b/4'], duration: '1r', align_center: true });\n const voice = f.Voice().setStrict(false).addTickables([note]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction centerAlignedRestFermata(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4');\n const note = f\n .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true })\n .addModifier(new Articulation('a@a').setPosition(3), 0);\n const voice = f.Voice().setStrict(false).addTickables([note]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction centerAlignedRestAnnotation(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4');\n const note = f\n .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true })\n .addModifier(new Annotation('Whole measure rest').setVerticalJustification(AnnotationVerticalJustify.TOP), 0);\n const voice = f.Voice().setStrict(false).addTickables([note]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction centerAlignedNoteMultiModifiers(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4');\n function newFinger(num, pos) {\n return new FretHandFinger(num).setPosition(pos);\n }\n const note = f\n .StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', align_center: true })\n .addModifier(new Annotation('Test').setPosition(3), 0)\n .addStroke(0, new Stroke(2))\n .addModifier(new Accidental('#'), 1)\n .addModifier(newFinger('3', Modifier.Position.LEFT), 0)\n .addModifier(newFinger('2', Modifier.Position.LEFT), 2)\n .addModifier(newFinger('1', Modifier.Position.RIGHT), 1)\n .addModifier(new StringNumber('4').setPosition(Modifier.Position.BELOW), 2);\n Dot.buildAndAttach([note], { all: true });\n const voice = f.Voice().setStrict(false).addTickables([note]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction centerAlignedMultiVoice(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('3/8');\n // Set a custom duration of 3 / 8.\n const custom_duration = new Fraction(3, 8);\n // TODO: Should the whole rest draw a ledger line that is visible to the left/right of the rest?\n const notes0 = [\n f.StaveNote({\n keys: ['c/4'],\n duration: '1r',\n align_center: true,\n duration_override: custom_duration,\n }),\n ];\n const createStaveNote = (struct) => f.StaveNote(struct);\n const notes1 = [\n { keys: ['b/4'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n ].map(createStaveNote);\n notes1[1].addModifier(f.Accidental({ type: '#' }), 0);\n f.Beam({ notes: notes1 });\n const voice0 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes0);\n const voice1 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes1);\n f.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave);\n f.draw();\n options.assert.ok(true);\n}\nVexFlowTests.register(StaveNoteTests);\nexport { StaveNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveTie Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Stem } from '../src/stem';\nconst StaveTieTests = {\n Start() {\n QUnit.module('StaveTie');\n const run = VexFlowTests.runTests;\n run('Simple StaveTie', simple);\n run('Chord StaveTie', chord);\n run('Stem Up StaveTie', stemUp);\n run('No End Note With Clef', noEndNote1);\n run('No End Note', noEndNote2);\n run('No Start Note With Clef', noStartNote1);\n run('No Start Note', noStartNote2);\n run('Set Direction Down', setDirectionDown);\n run('Set Direction Up', setDirectionUp);\n },\n};\n/**\n * Used by the 7 tests below to set up the stave, easyscore, notes, voice, and to format & draw.\n */\nfunction createTest(notesData, setupTies) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 300);\n const stave = factory.Stave();\n const score = factory.EasyScore();\n const notes = score.notes(notesData[0], notesData[1]);\n const voice = score.voice(notes);\n // const tickables = voice.getTickables(); // same as the notes that we passed in.\n setupTies(factory, notes, stave);\n factory.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n factory.draw();\n options.assert.ok(true);\n };\n}\nconst simple = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1],\n last_indices: [0, 1],\n });\n});\nconst chord = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1, 2],\n last_indices: [0, 1, 2],\n });\n});\nconst stemUp = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'up' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1, 2],\n last_indices: [0, 1, 2],\n });\n});\nconst noEndNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => {\n stave.addEndClef('treble');\n f.StaveTie({\n from: notes[1],\n first_indices: [2],\n last_indices: [2],\n text: 'slow.',\n });\n});\nconst noEndNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[1],\n first_indices: [2],\n last_indices: [2],\n text: 'slow.',\n });\n});\nconst noStartNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => {\n stave.addClef('treble');\n f.StaveTie({\n to: notes[0],\n first_indices: [2],\n last_indices: [2],\n text: 'H',\n });\n});\nconst noStartNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n to: notes[0],\n first_indices: [2],\n last_indices: [2],\n text: 'H',\n });\n});\nconst setDirectionDown = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1],\n last_indices: [0, 1],\n options: { direction: Stem.DOWN },\n });\n});\nconst setDirectionUp = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1],\n last_indices: [0, 1],\n options: { direction: Stem.UP },\n });\n});\nVexFlowTests.register(StaveTieTests);\nexport { StaveTieTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StringNumber Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Glyph } from '../src/glyph';\nimport { Renderer } from '../src/renderer';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { Stroke } from '../src/strokes';\nconst StringNumberTests = {\n Start() {\n QUnit.module('StringNumber');\n const run = VexFlowTests.runTests;\n run('String Number In Notation', drawMultipleMeasures);\n run('String Number In Notation - no circle', drawMultipleMeasures, { drawCircle: false });\n run('Fret Hand Finger In Notation', drawFretHandFingers);\n run('Multi Voice With Strokes, String & Finger Numbers', multi);\n run('Complex Measure With String & Finger Numbers', drawAccidentals);\n run('Shifted Notehead, Multiple Modifiers', shiftedNoteheadMultipleModifiers);\n },\n};\nfunction drawMultipleMeasures(options) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;\n const f = VexFlowTests.makeFactory(options, 775, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 300 }).setEndBarType(BarlineType.DOUBLE).addClef('treble');\n const notes1 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/4, (c4 f4 g4)/4', { stem: 'down' });\n notes1[0]\n .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_a = options.params) === null || _a === void 0 ? void 0 : _a.drawCircle), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_b = options.params) === null || _b === void 0 ? void 0 : _b.drawCircle), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_c = options.params) === null || _c === void 0 ? void 0 : _c.drawCircle), 2);\n notes1[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_d = options.params) === null || _d === void 0 ? void 0 : _d.drawCircle), 0)\n .addModifier(f.Accidental({ type: '#' }).setAsCautionary(), 1)\n .addModifier(f\n .StringNumber({ number: '3', position: 'above' }, (_e = options.params) === null || _e === void 0 ? void 0 : _e.drawCircle)\n .setLastNote(notes1[3])\n .setLineEndType(Renderer.LineEndType.DOWN), 2);\n notes1[2]\n .addModifier(f.StringNumber({ number: '5', position: 'left' }, (_f = options.params) === null || _f === void 0 ? void 0 : _f.drawCircle), 0)\n .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_g = options.params) === null || _g === void 0 ? void 0 : _g.drawCircle), 2)\n .addModifier(f.Accidental({ type: '#' }), 1);\n notes1[3]\n .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_h = options.params) === null || _h === void 0 ? void 0 : _h.drawCircle).setOffsetY(7), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_j = options.params) === null || _j === void 0 ? void 0 : _j.drawCircle).setOffsetY(6), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_k = options.params) === null || _k === void 0 ? void 0 : _k.drawCircle).setOffsetY(-6), 2);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2 - juxtaposing second bar next to first bar\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 })\n .setEndBarType(BarlineType.DOUBLE);\n const notes2 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'up' });\n notes2[0]\n .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_l = options.params) === null || _l === void 0 ? void 0 : _l.drawCircle), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_m = options.params) === null || _m === void 0 ? void 0 : _m.drawCircle), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_o = options.params) === null || _o === void 0 ? void 0 : _o.drawCircle), 2);\n notes2[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_p = options.params) === null || _p === void 0 ? void 0 : _p.drawCircle), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f\n .StringNumber({ number: '3', position: 'above' }, (_q = options.params) === null || _q === void 0 ? void 0 : _q.drawCircle)\n .setLastNote(notes2[3])\n .setDashed(false), 2);\n notes2[2]\n .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_r = options.params) === null || _r === void 0 ? void 0 : _r.drawCircle), 2)\n .addModifier(f.Accidental({ type: '#' }), 1);\n notes2[3]\n .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_s = options.params) === null || _s === void 0 ? void 0 : _s.drawCircle).setOffsetY(7), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_t = options.params) === null || _t === void 0 ? void 0 : _t.drawCircle).setOffsetY(6), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_u = options.params) === null || _u === void 0 ? void 0 : _u.drawCircle).setOffsetY(-6), 2);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n // bar 3 - juxtaposing third bar next to second bar\n const stave3 = f\n .Stave({ x: stave2.getWidth() + stave2.getX(), y: stave2.getY(), width: 150 })\n .setEndBarType(BarlineType.END);\n const notesBar3 = score.notes('(c4 e4 g4 a4)/1.');\n notesBar3[0]\n .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_v = options.params) === null || _v === void 0 ? void 0 : _v.drawCircle), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_w = options.params) === null || _w === void 0 ? void 0 : _w.drawCircle), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_x = options.params) === null || _x === void 0 ? void 0 : _x.drawCircle), 2)\n .addModifier(f.StringNumber({ number: '2', position: 'above' }, (_y = options.params) === null || _y === void 0 ? void 0 : _y.drawCircle), 3);\n const voice3 = score.voice(notesBar3, { time: '6/4' });\n f.Formatter().joinVoices([voice3]).formatToStave([voice3], stave3);\n f.draw();\n options.assert.ok(true, 'String Number');\n}\nfunction drawFretHandFingers(options) {\n const f = VexFlowTests.makeFactory(options, 725, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 350 }).setEndBarType(BarlineType.DOUBLE).addClef('treble');\n const notes1 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'down' });\n notes1[0]\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2);\n notes1[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2);\n notes1[2]\n .addModifier(f.Fingering({ number: '3', position: 'below' }), 0)\n .addModifier(f.Fingering({ number: '4', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'above' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 1);\n notes1[3]\n .addModifier(f.Fingering({ number: '3', position: 'right' }), 0)\n .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0)\n .addModifier(f.Fingering({ number: '4', position: 'right' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1)\n .addModifier(f.Fingering({ number: '0', position: 'right' }).setOffsetY(-5), 2)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2 - juxtaposing second bar next to first bar\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 350 })\n .setEndBarType(BarlineType.END);\n const notes2 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/8, (c4 f4 g4)/4.[stem=\"down\"]', {\n stem: 'up',\n });\n notes2[0]\n .addModifier(f.Fingering({ number: '3', position: 'right' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'above' }), 2);\n notes2[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Fingering({ number: '3', position: 'right' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2);\n notes2[2]\n .addModifier(f.Fingering({ number: '3', position: 'below' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1)\n .addModifier(f.Fingering({ number: '1', position: 'right' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 2);\n notes2[3]\n .addModifier(f.Fingering({ number: '3', position: 'right' }), 0)\n .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0)\n .addModifier(f.Fingering({ number: '4', position: 'right' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1)\n .addModifier(f.Fingering({ number: '1', position: 'right' }).setOffsetY(-6), 2)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n f.draw();\n options.assert.ok(true, 'String Number');\n}\nfunction multi(options) {\n const f = VexFlowTests.makeFactory(options, 700, 200);\n const score = f.EasyScore();\n const stave = f.Stave();\n const notes1 = score.notes('(c4 e4 g4)/4, (a3 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' });\n notes1[0]\n .addStroke(0, new Stroke(5))\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2);\n notes1[1]\n .addStroke(0, new Stroke(6))\n .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2);\n notes1[2]\n .addStroke(0, new Stroke(2))\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '0', position: 'right' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1)\n .addModifier(f.Fingering({ number: '1', position: 'left' }), 2)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }), 2);\n notes1[3]\n .addStroke(0, new Stroke(1))\n .addModifier(f.StringNumber({ number: '3', position: 'left' }), 2)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1);\n const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' });\n notes2[0]\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 0)\n .addModifier(f.StringNumber({ number: '6', position: 'below' }), 0);\n notes2[2].addModifier(f.Accidental({ type: '#' }), 0);\n notes2[4].addModifier(f.Fingering({ number: '0', position: 'left' }), 0);\n // Position string number 6 beneath the strum arrow: left (15) and down (18)\n notes2[4].addModifier(f.StringNumber({ number: '6', position: 'left' }).setOffsetX(15).setOffsetY(18), 0);\n // Important Note: notes2 must come first, otherwise ledger lines from notes2 will be drawn on top of notes from notes1!\n // BUG: VexFlow draws TWO ledger lines for middle C, because both notes1 and notes2 require the middle C ledger line.\n const voices = [score.voice(notes2), score.voice(notes1)];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.Beam({ notes: notes2.slice(0, 4) });\n f.Beam({ notes: notes2.slice(4, 8) });\n f.draw();\n options.assert.ok(true, 'Strokes Test Multi Voice');\n}\nfunction drawAccidentals(options) {\n const f = VexFlowTests.makeFactory(options, 750);\n const glyphScale = 39; // default font scale\n const clefWidth = Glyph.getWidth('gClef', glyphScale); // widest clef\n const notes = [\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }),\n ];\n notes[0]\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Fingering({ number: '2', position: 'right' }), 4)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4)\n .addModifier(f.Accidental({ type: '#' }), 4)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 5)\n .addModifier(f.Accidental({ type: '#' }), 5);\n notes[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 4)\n .addModifier(f.Accidental({ type: '#' }), 5);\n notes[2]\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Fingering({ number: '2', position: 'right' }), 4)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4)\n .addModifier(f.Accidental({ type: '#' }), 4)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 5)\n .addModifier(f.Accidental({ type: '#' }), 5);\n notes[3]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 4)\n .addModifier(f.Accidental({ type: '#' }), 5);\n const voice = f.Voice().addTickables(notes);\n const ctx = f.getContext();\n const formatter = f.Formatter().joinVoices([voice]);\n const stavePadding = clefWidth + Stave.defaultPadding + 10;\n const nwidth = Math.max(formatter.preCalculateMinTotalWidth([voice]), 490 - stavePadding);\n formatter.format([voice], nwidth);\n const stave = f\n .Stave({ x: 0, y: 0, width: nwidth + stavePadding })\n .setContext(ctx)\n .setEndBarType(BarlineType.DOUBLE)\n .addClef('treble')\n .draw();\n voice.draw(ctx, stave);\n options.assert.ok(true, 'String Number');\n}\nfunction shiftedNoteheadMultipleModifiers(options) {\n const f = VexFlowTests.makeFactory(options, 900, 150);\n const score = f.EasyScore();\n score.set({ time: '6/4' });\n const stave = f.Stave({ width: 900 }).setEndBarType(BarlineType.END).addClef('treble');\n const notes = ['A4 B4', 'B4 C5', 'A4 B#4', 'B4 C#5', 'A#4 B#4', 'B#4 C#5']\n .map((keys) => score.notes(`(${keys})/q`))\n .flat();\n notes.forEach((note) => {\n note\n .addModifier(f.StringNumber({ number: '2', position: 'left' }, true), 1)\n .addModifier(f.StringNumber({ number: '2', position: 'right' }, true), 1);\n });\n const voice = score.voice(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'String Number');\n}\nVexFlowTests.register(StringNumberTests);\nexport { StringNumberTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Strokes Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Barline, Beam, Bend, Stroke } from '../src/index';\nconst StrokesTests = {\n Start() {\n QUnit.module('Strokes');\n const run = VexFlowTests.runTests;\n // TODO: Rename tests by removing 'Strokes - ' since it is redundant with the module name.\n // This will make flow.html easier to read.\n run('Strokes - Brush/Roll/Rasquedo', brushRollRasquedo);\n run('Strokes - Arpeggio directionless (without arrows)', arpeggioDirectionless);\n run('Strokes - Multi Voice', multiVoice);\n run('Strokes - Notation and Tab', notesWithTab);\n run('Strokes - Multi-Voice Notation and Tab', multiNotationAndTab);\n },\n};\nfunction brushRollRasquedo(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE);\n const notes1 = score.notes('(a3 e4 a4)/4, (c4 e4 g4), (c4 e4 g4), (c4 e4 g4)', { stem: 'up' });\n notes1[0].addStroke(0, new Stroke(1));\n notes1[1]\n .addStroke(0, new Stroke(2))\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 0);\n notes1[2].addStroke(0, new Stroke(1));\n notes1[3].addStroke(0, new Stroke(2));\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 })\n .setEndBarType(Barline.type.DOUBLE);\n const notes2 = score.notes('(c4 d4 g4)/4, (c4 d4 g4), (c4 d4 g4), (c4 d4 a4)', { stem: 'up' });\n notes2[0].addStroke(0, new Stroke(3));\n notes2[1].addStroke(0, new Stroke(4));\n notes2[2].addStroke(0, new Stroke(5));\n notes2[3]\n .addStroke(0, new Stroke(6))\n .addModifier(f.Accidental({ type: 'bb' }), 0)\n .addModifier(f.Accidental({ type: 'bb' }), 1)\n .addModifier(f.Accidental({ type: 'bb' }), 2);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n f.draw();\n options.assert.ok(true, 'Brush/Roll/Rasquedo');\n}\nfunction arpeggioDirectionless(options) {\n const f = VexFlowTests.makeFactory(options, 700, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ x: 100, width: 500 }).setEndBarType(Barline.type.DOUBLE);\n const notes1 = score.notes('(g4 b4 d5)/4, (g4 b4 d5 g5), (g4 b4 d5 g5), (g4 b4 d5)', { stem: 'up' });\n const graceNoteStructs = [\n { keys: ['e/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['g/4'], duration: '32' },\n ];\n const graceNotes = graceNoteStructs.map((graceNoteStruct) => f.GraceNote(graceNoteStruct));\n const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes, slur: false });\n graceNoteGroup.beamNotes();\n notes1[0].addStroke(0, new Stroke(7));\n notes1[1]\n .addStroke(0, new Stroke(7))\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 3);\n notes1[2]\n .addStroke(0, new Stroke(7))\n .addModifier(f.Accidental({ type: 'b' }), 1)\n .addModifier(graceNoteGroup, 0);\n notes1[3].addStroke(0, new Stroke(7)).addModifier(f.NoteSubGroup({\n notes: [f.ClefNote({ type: 'treble', options: { size: 'default', annotation: '8va' } })],\n }), 0);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n f.draw();\n options.assert.ok(true, 'Arpeggio directionless (without arrows)');\n}\nfunction multiVoice(options) {\n const f = VexFlowTests.makeFactory(options, 500, 200);\n const score = f.EasyScore();\n const stave = f.Stave();\n const notes1 = score.notes('(c4 e4 g4)/4, (c4 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' });\n notes1[0].addStroke(0, new Stroke(5));\n notes1[1]\n .addStroke(0, new Stroke(6))\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 2);\n notes1[2].addStroke(0, new Stroke(2));\n notes1[3].addStroke(0, new Stroke(1));\n const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' });\n f.Beam({ notes: notes2.slice(0, 4) });\n f.Beam({ notes: notes2.slice(4, 8) });\n const voices = [notes1, notes2].map((notes) => score.voice(notes));\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n options.assert.ok(true, 'Strokes Test Multi Voice');\n}\nfunction multiNotationAndTab(options) {\n const f = VexFlowTests.makeFactory(options, 400, 275);\n const score = f.EasyScore();\n const stave = f.Stave().addClef('treble');\n // notation upper voice notes\n const notes1 = score.notes('(g4 b4 e5)/4, (g4 b4 e5), (g4 b4 e5), (g4 b4 e5)', { stem: 'up' });\n notes1[0].addStroke(0, new Stroke(3, { all_voices: false }));\n notes1[1].addStroke(0, new Stroke(6));\n notes1[2].addStroke(0, new Stroke(2, { all_voices: false }));\n notes1[3].addStroke(0, new Stroke(1));\n const notes2 = score.notes('g3/4, g3, g3, g3', { stem: 'down' });\n f.TabStave({ y: 100 }).addClef('tab').setNoteStartX(stave.getNoteStartX());\n // tablature upper voice notes\n const tabNotes1 = [\n f.TabNote({\n positions: [\n { str: 3, fret: 0 },\n { str: 2, fret: 0 },\n { str: 1, fret: 1 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 0 },\n { str: 2, fret: 0 },\n { str: 1, fret: 1 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 0 },\n { str: 2, fret: 0 },\n { str: 1, fret: 1 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 0 },\n { str: 2, fret: 0 },\n { str: 1, fret: 1 },\n ],\n duration: '4',\n }),\n ];\n tabNotes1[0].addStroke(0, new Stroke(3, { all_voices: false }));\n tabNotes1[1].addStroke(0, new Stroke(6));\n tabNotes1[2].addStroke(0, new Stroke(2, { all_voices: false }));\n tabNotes1[3].addStroke(0, new Stroke(1));\n const tabNotes2 = [\n f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }),\n f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }),\n f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }),\n f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }),\n ];\n const voices = [notes1, notes2, tabNotes1, tabNotes2].map((notes) => score.voice(notes));\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n options.assert.ok(true, 'Strokes Test Notation & Tab Multi Voice');\n}\n/*\nfunction drawTabStrokes(options: TestOptions): void {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave1 = f.TabStave({ width: 250 }).setEndBarType(Barline.type.DOUBLE);\n\n const tabNotes1 = [\n f.TabNote({\n positions: [\n { str: 2, fret: 8 },\n { str: 3, fret: 9 },\n { str: 4, fret: 10 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 7 },\n { str: 4, fret: 8 },\n { str: 5, fret: 9 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 1, fret: 5 },\n { str: 2, fret: 6 },\n { str: 3, fret: 7 },\n { str: 4, fret: 7 },\n { str: 5, fret: 5 },\n { str: 6, fret: 5 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 4, fret: 3 },\n { str: 5, fret: 4 },\n { str: 6, fret: 5 },\n ],\n duration: '4',\n }),\n ];\n\n tabNotes1[0].addStroke(0, new Stroke(1));\n tabNotes1[1].addStroke(0, new Stroke(2));\n tabNotes1[2].addStroke(0, new Stroke(3));\n tabNotes1[3].addStroke(0, new Stroke(4));\n\n const tabVoice1 = f.Voice().addTickables(tabNotes1);\n\n f.Formatter().joinVoices([tabVoice1]).formatToStave([tabVoice1], stave1);\n\n // bar 2\n const stave2 = f.TabStave({ x: stave1.getWidth() + stave1.getX(), width: 300 }).setEndBarType(Barline.type.DOUBLE);\n\n const tabNotes2 = [\n f.TabNote({\n positions: [\n { str: 2, fret: 7 },\n { str: 3, fret: 8 },\n { str: 4, fret: 9 },\n ],\n duration: '2',\n }),\n f.TabNote({\n positions: [\n { str: 1, fret: 5 },\n { str: 2, fret: 6 },\n { str: 3, fret: 7 },\n { str: 4, fret: 7 },\n { str: 5, fret: 5 },\n { str: 6, fret: 5 },\n ],\n duration: '2',\n }),\n ];\n\n tabNotes2[0].addStroke(0, new Stroke(6));\n tabNotes2[1].addStroke(0, new Stroke(5));\n\n const tabVoice2 = f.Voice().addTickables(tabNotes2);\n\n f.Formatter().joinVoices([tabVoice2]).formatToStave([tabVoice2], stave2);\n\n f.draw();\n\n options.assert.ok(true, 'Strokes Tab test');\n}\n*/\nfunction notesWithTab(options) {\n const f = VexFlowTests.makeFactory(options, 500, 300);\n const stave = f.Stave({ x: 15, y: 40, width: 450 }).addClef('treble');\n const notes = [\n f\n .StaveNote({ keys: ['b/4', 'd/5', 'g/5'], stem_direction: -1, duration: '4' })\n .addModifier(f.Accidental({ type: 'b' }), 1)\n .addModifier(f.Accidental({ type: 'b' }), 0),\n f.StaveNote({ keys: ['c/5', 'd/5'], stem_direction: -1, duration: '4' }),\n f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }),\n f\n .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'e/5', 'a/5'], stem_direction: 1, duration: '8' })\n .addModifier(f.Accidental({ type: '#' }), 3),\n f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }),\n f\n .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'f/5', 'a/5'], stem_direction: 1, duration: '8' })\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 4),\n ];\n const tabstave = f\n .TabStave({ x: stave.getX(), y: 140, width: 450 })\n .addClef('tab')\n .setNoteStartX(stave.getNoteStartX());\n const tabNotes = [\n f\n .TabNote({\n positions: [\n { str: 1, fret: 3 },\n { str: 2, fret: 2 },\n { str: 3, fret: 3 },\n ],\n duration: '4',\n })\n .addModifier(new Bend('Full'), 0),\n f\n .TabNote({\n positions: [\n { str: 2, fret: 3 },\n { str: 3, fret: 5 },\n ],\n duration: '4',\n })\n .addModifier(new Bend('Unison'), 1),\n f.TabNote({\n positions: [\n { str: 3, fret: 7 },\n { str: 4, fret: 7 },\n { str: 5, fret: 7 },\n { str: 6, fret: 7 },\n ],\n duration: '8',\n }),\n f.TabNote({\n positions: [\n { str: 1, fret: 5 },\n { str: 2, fret: 5 },\n { str: 3, fret: 6 },\n { str: 4, fret: 7 },\n { str: 5, fret: 7 },\n { str: 6, fret: 5 },\n ],\n duration: '8',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 7 },\n { str: 4, fret: 7 },\n { str: 5, fret: 7 },\n { str: 6, fret: 7 },\n ],\n duration: '8',\n }),\n f.TabNote({\n positions: [\n { str: 1, fret: 5 },\n { str: 2, fret: 5 },\n { str: 3, fret: 6 },\n { str: 4, fret: 7 },\n { str: 5, fret: 7 },\n { str: 6, fret: 5 },\n ],\n duration: '8',\n }),\n ];\n notes[0].addStroke(0, new Stroke(1));\n notes[1].addStroke(0, new Stroke(2));\n notes[2].addStroke(0, new Stroke(3));\n notes[3].addStroke(0, new Stroke(4));\n notes[4].addStroke(0, new Stroke(5));\n notes[5].addStroke(0, new Stroke(6));\n tabNotes[0].addStroke(0, new Stroke(1));\n tabNotes[1].addStroke(0, new Stroke(2));\n tabNotes[2].addStroke(0, new Stroke(3));\n tabNotes[3].addStroke(0, new Stroke(4));\n tabNotes[4].addStroke(0, new Stroke(5));\n tabNotes[5].addStroke(0, new Stroke(6));\n f.StaveConnector({\n top_stave: stave,\n bottom_stave: tabstave,\n type: 'bracket',\n });\n f.StaveConnector({\n top_stave: stave,\n bottom_stave: tabstave,\n type: 'single',\n });\n const voice = f.Voice().addTickables(notes);\n const tabVoice = f.Voice().addTickables(tabNotes);\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).formatToStave([voice, tabVoice], stave);\n f.draw();\n beams.forEach(function (beam) {\n beam.setContext(f.getContext()).draw();\n });\n options.assert.ok(true);\n}\nVexFlowTests.register(StrokesTests);\nexport { StrokesTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Style Tests\n// TODO: The .addStroke(0, new Stroke(...)) in the tab test case shows a NO GLYPH for the Petaluma font.\n// TODO: Changing ctx.font seems to have no effect in the tab test case. Should it?\n// Annotation sets its own font.\n// TabNote sets its own font.\n// Is there a way to set all the text fonts in one go?\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Annotation } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Bend } from '../src/bend';\nimport { Formatter } from '../src/formatter';\nimport { KeySignature } from '../src/keysignature';\nimport { NoteSubGroup } from '../src/notesubgroup';\nimport { Ornament } from '../src/ornament';\nimport { StaveModifierPosition } from '../src/stavemodifier';\nimport { Stroke } from '../src/strokes';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { TimeSignature } from '../src/timesignature';\nconst StyleTests = {\n Start() {\n QUnit.module('Style');\n const run = VexFlowTests.runTests;\n run('Basic Style', stave);\n run('TabNote modifiers Style', tab);\n },\n};\n/**\n * Helper function to create a ElementStyle options object of the form { fillStyle: XXX, strokeStyle: YYY }.\n * Used for updating the fillStyle and optionally the strokeStyle.\n */\nfunction FS(fillStyle, strokeStyle) {\n const ret = { fillStyle };\n if (strokeStyle) {\n ret.strokeStyle = strokeStyle;\n }\n return ret;\n}\n/**\n * Color elements on a stave.\n */\nfunction stave(options) {\n const f = VexFlowTests.makeFactory(options, 600, 150);\n const stave = f.Stave({ x: 25, y: 20, width: 500 });\n // Stave modifiers test.\n const keySig = new KeySignature('D');\n keySig.addToStave(stave);\n keySig.setStyle(FS('blue'));\n stave.addTimeSignature('4/4');\n const timeSig = stave.getModifiers(StaveModifierPosition.BEGIN, TimeSignature.CATEGORY);\n timeSig[0].setStyle(FS('brown'));\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }),\n f.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '8' }),\n // voice.draw() test.\n f.TextDynamics({ text: 'sfz', duration: '16' }).setStyle(FS('blue')),\n // GhostNote modifiers test.\n f.GhostNote({ duration: '16' }).addModifier(new Annotation('GhostNote green text').setStyle(FS('green')), 0),\n ];\n const notes0 = notes[0];\n const notes1 = notes[1];\n notes0.setKeyStyle(0, FS('red'));\n notes1.setKeyStyle(0, FS('red'));\n // StaveNote modifiers test.\n const mods1 = notes1.getModifiers();\n mods1[0].setStyle(FS('green'));\n notes0.addModifier(new Articulation('a.').setPosition(4).setStyle(FS('green')), 0);\n notes0.addModifier(new Ornament('mordent').setStyle(FS('lightgreen')), 0);\n notes1.addModifier(new Annotation('blue').setStyle(FS('blue')), 0);\n notes1.addModifier(new NoteSubGroup([f.ClefNote({ options: { size: 'small' } }).setStyle(FS('blue'))]), 0);\n const voice = f.Voice().addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Basic Style');\n}\n/**\n * Color elements on a guitar tab.\n */\nfunction tab(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 140);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph();\n stave.getModifiers()[2].setStyle(FS('blue'));\n stave.setContext(ctx).draw();\n const tabNote = (noteStruct) => new TabNote(noteStruct);\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n }).addModifier(new Annotation('green text').setStyle(FS('green')), 0),\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n })\n .addModifier(new Bend('Full').setStyle(FS('brown')), 0)\n .addStroke(0, new Stroke(1, { all_voices: false }).setStyle(FS('blue'))),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'TabNote Modifiers Style');\n}\nVexFlowTests.register(StyleTests);\nexport { StyleTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TabNote Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Font, FontWeight } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { TickContext } from '../src/tickcontext';\nimport { Voice, VoiceMode } from '../src/voice';\nconst TabNoteTests = {\n Start() {\n QUnit.module('TabNote');\n QUnit.test('Tick', ticks);\n QUnit.test('TabStave Line', tabStaveLine);\n QUnit.test('Width', width);\n QUnit.test('TickContext', tickContext);\n const run = VexFlowTests.runTests;\n run('TabNote Draw', draw);\n run('TabNote Stems Up', drawStemsUp);\n run('TabNote Stems Down', drawStemsDown);\n run('TabNote Stems Up Through Stave', drawStemsUpThrough);\n run('TabNote Stems Down Through Stave', drawStemsDownThrough);\n run('TabNote Stems with Dots', drawStemsDotted);\n },\n};\nfunction ticks(assert) {\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n let note = new TabNote({ positions: [{ str: 6, fret: 6 }], duration: '1' });\n assert.equal(note.getTicks().value(), BEAT * 4, 'Whole note has 4 beats');\n note = new TabNote({ positions: [{ str: 3, fret: 4 }], duration: '4' });\n assert.equal(note.getTicks().value(), BEAT, 'Quarter note has 1 beat');\n}\nfunction tabStaveLine(assert) {\n const note = new TabNote({\n positions: [\n { str: 6, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '1',\n });\n const positions = note.getPositions();\n assert.equal(positions[0].str, 6, 'String 6, Fret 6');\n assert.equal(positions[0].fret, 6, 'String 6, Fret 6');\n assert.equal(positions[1].str, 4, 'String 4, Fret 5');\n assert.equal(positions[1].fret, 5, 'String 4, Fret 5');\n const stave = new Stave(10, 10, 300);\n note.setStave(stave);\n const ys = note.getYs();\n assert.equal(ys.length, 2, 'Chord should be rendered on two lines');\n assert.equal(ys[0], 100, 'Line for String 6, Fret 6');\n assert.equal(ys[1], 80, 'Line for String 4, Fret 5');\n}\nfunction width(assert) {\n assert.expect(1);\n const note = new TabNote({\n positions: [\n { str: 6, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '1',\n });\n assert.throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width');\n}\nfunction tickContext(assert) {\n const note = new TabNote({\n positions: [\n { str: 6, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '1',\n });\n const tickContext = new TickContext().addTickable(note).preFormat().setX(10).setPadding(0);\n assert.equal(tickContext.getWidth(), 7);\n}\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 140);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const notes = [\n { positions: [{ str: 6, fret: 6 }], duration: '4' },\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 'x' },\n { str: 5, fret: 15 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 'x' },\n { str: 5, fret: 5 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 6, fret: 0 },\n { str: 5, fret: 5 },\n { str: 4, fret: 5 },\n { str: 3, fret: 4 },\n { str: 2, fret: 3 },\n { str: 1, fret: 0 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '4',\n },\n ];\n // Helper function\n function showNote(noteStruct, stave, ctx, x) {\n const tabNote = new TabNote(noteStruct);\n const tickContext = new TickContext();\n tickContext.addTickable(tabNote).preFormat().setX(x);\n tabNote.setContext(ctx).setStave(stave);\n tabNote.draw();\n return tabNote;\n }\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const tabNote = showNote(note, stave, ctx, (i + 1) * 25);\n options.assert.ok(tabNote.getX() > 0, 'Note ' + i + ' has X value');\n options.assert.ok(tabNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawStemsUp(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 30, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n ];\n const notes = specs.map((struct) => {\n const tabNote = new TabNote(struct);\n tabNote.render_options.draw_stem = true;\n return tabNote;\n });\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok(true, 'TabNotes successfully drawn');\n}\nfunction drawStemsDown(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n ];\n const notes = specs.map((struct) => {\n const tabNote = new TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.setStemDirection(-1);\n return tabNote;\n });\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok(true, 'All objects have been drawn');\n}\nfunction drawStemsUpThrough(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 30, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n ];\n const notes = specs.map((struct) => {\n const tabNote = new TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_stem_through_stave = true;\n return tabNote;\n });\n ctx.setFont(Font.SANS_SERIF, 10, FontWeight.BOLD);\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok(true, 'TabNotes successfully drawn');\n}\nfunction drawStemsDownThrough(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 250);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 550, { num_lines: 8 });\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n { str: 6, fret: 10 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n { str: 5, fret: 5 },\n { str: 7, fret: 5 },\n ],\n duration: '128',\n },\n ];\n const notes = specs.map((struct) => {\n const tabNote = new TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_stem_through_stave = true;\n tabNote.setStemDirection(-1);\n return tabNote;\n });\n ctx.setFont('Arial', 10, 'bold');\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok(true, 'All objects have been drawn');\n}\nfunction drawStemsDotted(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4d',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '4dd',\n stem_direction: -1,\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n stem_direction: -1,\n },\n ];\n const notes = specs.map((struct) => new TabNote(struct, true /* draw_stem */));\n Dot.buildAndAttach([notes[0], notes[2], notes[2]]);\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n options.assert.ok(true, 'TabNotes successfully drawn');\n}\nVexFlowTests.register(TabNoteTests);\nexport { TabNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TabSlide Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { TabNote } from '../src/tabnote';\nimport { TabSlide } from '../src/tabslide';\nimport { TabStave } from '../src/tabstave';\nimport { Voice } from '../src/voice';\nconst TabSlideTests = {\n Start() {\n QUnit.module('TabSlide');\n const run = VexFlowTests.runTests;\n run('Simple TabSlide', simple);\n run('Slide Up', slideUp);\n run('Slide Down', slideDown);\n },\n};\nfunction tieNotes(notes, indices, stave, ctx) {\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 100);\n voice.draw(ctx, stave);\n const tie = new TabSlide({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: indices,\n last_indices: indices,\n }, TabSlide.SLIDE_UP);\n tie.setContext(ctx);\n tie.draw();\n}\nfunction setupContext(options, width) {\n // eslint-disable-next-line\n const context = options.contextBuilder(options.elementId, 350, 140);\n context.scale(0.9, 0.9);\n context.font = '10pt Arial';\n const stave = new TabStave(10, 10, width || 350).addTabGlyph().setContext(context).draw();\n return { context, stave };\n}\n// Helper function to create TabNote objects.\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\n/**\n * Test Case\n */\nfunction simple(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n const { stave, context } = setupContext(options);\n tieNotes([\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }),\n tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }),\n ], [0], stave, context);\n options.assert.ok(true, 'Simple Test');\n}\n/**\n * The slideUp and slideDown tests pass in a builder function: TabSlide.createSlideUp | TabSlide.createSlideDown.\n */\nfunction multiTest(options, buildTabSlide) {\n const { context, stave } = setupContext(options, 440);\n const notes = [\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }),\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }),\n tabNote({\n positions: [\n { str: 4, fret: 4 },\n { str: 5, fret: 4 },\n ],\n duration: '8',\n }),\n tabNote({\n positions: [\n { str: 4, fret: 6 },\n { str: 5, fret: 6 },\n ],\n duration: '8',\n }),\n tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }),\n tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }),\n tabNote({\n positions: [\n { str: 2, fret: 14 },\n { str: 3, fret: 14 },\n ],\n duration: '8',\n }),\n tabNote({\n positions: [\n { str: 2, fret: 16 },\n { str: 3, fret: 16 },\n ],\n duration: '8',\n }),\n ];\n const voice = new Voice(Flow.TIME4_4).addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 300);\n voice.draw(context, stave);\n buildTabSlide({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Single note');\n buildTabSlide({\n first_note: notes[2],\n last_note: notes[3],\n first_indices: [0, 1],\n last_indices: [0, 1],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Chord');\n buildTabSlide({\n first_note: notes[4],\n last_note: notes[5],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Single note high-fret');\n buildTabSlide({\n first_note: notes[6],\n last_note: notes[7],\n first_indices: [0, 1],\n last_indices: [0, 1],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Chord high-fret');\n}\nfunction slideUp(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n multiTest(options, TabSlide.createSlideUp);\n}\nfunction slideDown(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n multiTest(options, TabSlide.createSlideDown);\n}\nVexFlowTests.register(TabSlideTests);\nexport { TabSlideTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TabStave Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { TabStave } from '../src/tabstave';\nconst TabStaveTests = {\n Start() {\n QUnit.module('TabStave');\n const run = VexFlowTests.runTests;\n run('TabStave Draw Test', draw);\n },\n};\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 160);\n const stave = new TabStave(10, 10, 300);\n stave.setNumLines(6);\n stave.setContext(ctx);\n stave.draw();\n options.assert.equal(stave.getYForNote(0), 127, 'getYForNote(0)');\n options.assert.equal(stave.getYForLine(5), 127, 'getYForLine(5)');\n options.assert.equal(stave.getYForLine(0), 62, 'getYForLine(0) - Top Line');\n options.assert.equal(stave.getYForLine(4), 114, 'getYForLine(4) - Bottom Line');\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(TabStaveTests);\nexport { TabStaveTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TabTie Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Annotation } from '../src/annotation';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { TabTie } from '../src/tabtie';\nimport { Voice } from '../src/voice';\nconst TabTieTests = {\n Start() {\n QUnit.module('TabTie');\n const run = VexFlowTests.runTests;\n run('Simple TabTie', simple);\n run('Hammerons', simpleHammerOn);\n run('Pulloffs', simplePullOff);\n run('Tapping', tap);\n run('Continuous', continuous);\n },\n};\n/**\n * Helper function to create TabNote objects.\n */\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\n/**\n * Helper function to create a RenderContext and TabStave.\n */\nfunction setupContext(options, w = 0, h = 0) {\n // eslint-disable-next-line\n const context = options.contextBuilder(options.elementId, w || 350, h || 160);\n context.setFont('Arial', VexFlowTests.Font.size);\n const stave = new TabStave(10, 10, w || 350).addTabGlyph().setContext(context).draw();\n return { context, stave };\n}\n/**\n * Helper function to create the TabTie between two Note objects.\n */\nfunction tieNotes(notes, indices, stave, ctx, text) {\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 100);\n voice.draw(ctx, stave);\n const tie = new TabTie({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: indices,\n last_indices: indices,\n }, text !== null && text !== void 0 ? text : 'Annotation');\n tie.setContext(ctx);\n tie.draw();\n}\n/**\n * Two notes on string 4 with a tie drawn between them.\n */\nfunction simple(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n const { context, stave } = setupContext(options);\n const note1 = tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' });\n const note2 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' });\n tieNotes([note1, note2], [0], stave, context);\n options.assert.ok(true, 'Simple Test');\n}\nfunction simpleHammerOn(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n multiTest(options, TabTie.createHammeron);\n}\nfunction simplePullOff(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n multiTest(options, TabTie.createPulloff);\n}\n/**\n * Helper function for the two test cases above (simpleHammerOn and simplePullOff).\n */\nfunction multiTest(options, createTabTie) {\n const { context, stave } = setupContext(options, 440, 140);\n const notes = [\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }),\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }),\n tabNote({\n positions: [\n { str: 4, fret: 4 },\n { str: 5, fret: 4 },\n ],\n duration: '8',\n }),\n tabNote({\n positions: [\n { str: 4, fret: 6 },\n { str: 5, fret: 6 },\n ],\n duration: '8',\n }),\n tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }),\n tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }),\n tabNote({\n positions: [\n { str: 2, fret: 14 },\n { str: 3, fret: 14 },\n ],\n duration: '8',\n }),\n tabNote({\n positions: [\n { str: 2, fret: 16 },\n { str: 3, fret: 16 },\n ],\n duration: '8',\n }),\n ];\n const voice = new Voice(Flow.TIME4_4).addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 300);\n voice.draw(context, stave);\n createTabTie({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Single note');\n createTabTie({\n first_note: notes[2],\n last_note: notes[3],\n first_indices: [0, 1],\n last_indices: [0, 1],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Chord');\n createTabTie({\n first_note: notes[4],\n last_note: notes[5],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Single note high-fret');\n createTabTie({\n first_note: notes[6],\n last_note: notes[7],\n first_indices: [0, 1],\n last_indices: [0, 1],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Chord high-fret');\n}\nfunction tap(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n const { context, stave } = setupContext(options);\n const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }).addModifier(new Annotation('T'), 0);\n const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' });\n tieNotes([note1, note2], [0], stave, context, 'P');\n options.assert.ok(true, 'Tapping Test');\n}\nfunction continuous(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n const { context, stave } = setupContext(options, 440, 140);\n const notes = [\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'q' }),\n tabNote({ positions: [{ str: 4, fret: 5 }], duration: 'q' }),\n tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }),\n ];\n const voice = new Voice(Flow.TIME4_4).addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 300);\n voice.draw(context, stave);\n TabTie.createHammeron({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n TabTie.createPulloff({\n first_note: notes[1],\n last_note: notes[2],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n options.assert.ok(true, 'Continuous Hammeron');\n}\nVexFlowTests.register(TabTieTests);\nexport { TabTieTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TextBracket Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst TextBracketTests = {\n Start() {\n QUnit.module('TextBracket');\n const run = VexFlowTests.runTests;\n run('Simple TextBracket', simple0);\n run('TextBracket Styles', simple1);\n },\n};\nfunction simple0(options) {\n const f = VexFlowTests.makeFactory(options, 550);\n const stave = f.Stave();\n const score = f.EasyScore();\n const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' });\n const voice = score.voice(notes, { time: '5/4' });\n f.TextBracket({\n from: notes[0],\n to: notes[4],\n text: '15',\n options: {\n superscript: 'va',\n position: 'top',\n },\n });\n f.TextBracket({\n from: notes[0],\n to: notes[4],\n text: '8',\n options: {\n superscript: 'vb',\n position: 'bottom',\n line: 3,\n },\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction simple1(options) {\n const f = VexFlowTests.makeFactory(options, 550);\n const stave = f.Stave();\n const score = f.EasyScore();\n const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' });\n const voice = score.voice(notes, { time: '5/4' });\n const topOctaves = [\n f.TextBracket({\n from: notes[0],\n to: notes[1],\n text: 'Cool notes',\n options: {\n superscript: '',\n position: 'top',\n },\n }),\n f.TextBracket({\n from: notes[2],\n to: notes[4],\n text: 'Testing',\n options: {\n position: 'top',\n superscript: 'superscript',\n // weight & style below can be left undefined. They will fall back to the default defined in textbracket.ts.\n font: { family: 'Arial', size: 15, weight: 'normal', style: 'normal' },\n },\n }),\n ];\n const bottomOctaves = [\n f.TextBracket({\n from: notes[0],\n to: notes[1],\n text: '8',\n options: {\n superscript: 'vb',\n position: 'bottom',\n line: 3,\n font: { size: 30 },\n },\n }),\n f.TextBracket({\n from: notes[2],\n to: notes[4],\n text: 'Not cool notes',\n options: {\n superscript: ' super uncool',\n position: 'bottom',\n line: 4,\n },\n }),\n ];\n topOctaves[1].render_options.line_width = 2;\n topOctaves[1].render_options.show_bracket = false;\n bottomOctaves[0].render_options.underline_superscript = false;\n bottomOctaves[0].setDashed(false);\n bottomOctaves[1].render_options.bracket_height = 40;\n bottomOctaves[1].setDashed(true, [2, 2]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nVexFlowTests.register(TextBracketTests);\nexport { TextBracketTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TextFormatter Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Font, FontStyle, FontWeight } from '../src/font';\nimport { TextFormatter } from '../src/textformatter';\nconst TextFormatterTests = {\n Start() {\n QUnit.module('TextFormatter');\n QUnit.test('Basic', basic);\n const run = VexFlowTests.runTextTests;\n run('Accuracy', accuracy);\n run('Box Text', textBoxAccuracy);\n },\n};\nfunction basic(assert) {\n var _a;\n // See: src/fonts/textfonts.ts > loadTextFonts()\n const registeredFamilies = TextFormatter.getFontFamilies();\n assert.equal(registeredFamilies.length, 5, `There are five registered font families: 'Roboto Slab' & 'PetalumaScript' and default 'Serif', 'Serif-Bold' and 'Sans'`);\n // Verify the advanceWidth and other metrics by opening the font file with a glyph inspector:\n // https://fontdrop.info/\n // https://opentype.js.org/glyph-inspector.html\n const petalumaFormatterInfo = TextFormatter.getInfo('PetalumaScript');\n assert.equal((_a = petalumaFormatterInfo === null || petalumaFormatterInfo === void 0 ? void 0 : petalumaFormatterInfo.glyphs) === null || _a === void 0 ? void 0 : _a.C.advanceWidth, 623, 'PetalumaScript advanceWidth of C character is 623.');\n const formatterForPetalumaScript = TextFormatter.create({ family: 'PetalumaScript', size: '100px' });\n const metricsPetalumaScriptH = formatterForPetalumaScript.getGlyphMetrics('H');\n assert.equal(metricsPetalumaScriptH.leftSideBearing, 37);\n const formatterForRobotoSlab = TextFormatter.create({ family: 'Roboto Slab', size: '100px', style: 'italic' });\n const metricsRobotoSlabH = formatterForRobotoSlab.getGlyphMetrics('H');\n assert.equal(metricsRobotoSlabH.advanceWidth, 1578);\n // eslint-disable-next-line\n // @ts-ignore direct access to protected variable .cacheKey\n assert.equal(formatterForRobotoSlab.cacheKey, 'Roboto_Slab%75%normal%normal');\n}\nfunction accuracy(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 500);\n const lineHeight = 30;\n const startX = 50;\n const fonts = [\n {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n {\n family: 'Roboto Slab',\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n {\n family: Font.SANS_SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n },\n ];\n let startY = 20;\n for (let j = 0; j < fonts.length; ++j) {\n const font = fonts[j];\n const textFormatter = TextFormatter.create(font);\n ctx.setFont(font);\n const texts = ['AVo(i)a', 'bghjIVex1/2', '@@@@@@@@', 'a very long String with Mixed Case Text,(0123456789)'];\n for (let i = 0; i < texts.length; i++) {\n ctx.setFillStyle('black');\n ctx.fillText(texts[i], startX, startY);\n startY += 5;\n ctx.setFillStyle('#3a2');\n ctx.fillRect(startX, startY, textFormatter.getWidthForTextInPx(texts[i]), 2);\n ctx.setFillStyle('#32a');\n startY += 5;\n ctx.fillRect(startX, startY, ctx.measureText(texts[i]).width, 2);\n startY += lineHeight;\n }\n }\n options.assert.ok(true, 'all pass');\n}\nfunction textBoxAccuracy(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 800);\n let startY = 35;\n const boxBorder = 2;\n const boxPadding = 3;\n const startX = 50;\n const fonts = [\n {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n {\n family: 'Roboto Slab',\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n {\n family: Font.SANS_SERIF,\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n ];\n const texts = ['AVID', 'bghjIVex1/2', '@@@@@@@@'];\n for (let j = 0; j < fonts.length; ++j) {\n const font = fonts[j];\n const textFormatter = TextFormatter.create(font);\n ctx.save();\n ctx.setFont(font);\n for (let i = 0; i < texts.length; i++) {\n const textY = textFormatter.getYForStringInPx(texts[i]);\n const height = textY.height + 2 * boxPadding;\n const headroom = -1 * textY.yMin;\n const width = textFormatter.getWidthForTextInPx(texts[i]) + 2 * boxPadding;\n ctx.setFillStyle('black');\n ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding);\n ctx.setLineWidth(boxBorder);\n ctx.setStrokeStyle('#3a2');\n ctx.setFillStyle('#3a2');\n ctx.beginPath();\n ctx.rect(startX, startY - height + headroom, width, height);\n ctx.stroke();\n startY += height * 1.5 + boxBorder * 3;\n const measureBox = ctx.measureText(texts[i]);\n const mwidth = measureBox.width + boxBorder * 2;\n const mheight = measureBox.height + boxBorder * 2;\n ctx.setFillStyle('black');\n ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding);\n ctx.setStrokeStyle('#32a');\n ctx.setFillStyle('#32a');\n ctx.beginPath();\n ctx.rect(startX, startY - mheight, mwidth, mheight);\n ctx.stroke();\n startY += mheight * 1.5 + boxBorder * 3;\n }\n ctx.restore();\n }\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(TextFormatterTests);\nexport { TextFormatterTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Text Note Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Crescendo } from '../src/crescendo';\nimport { Flow } from '../src/flow';\nimport { Font } from '../src/font';\nimport { Note } from '../src/note';\nimport { Stave } from '../src/stave';\nimport { TextNote } from '../src/textnote';\nconst TextNoteTests = {\n Start() {\n QUnit.module('TextNote');\n const run = VexFlowTests.runTests;\n run('TextNote Formatting', formatTextNotes);\n run('TextNote Formatting 2', formatTextNotes2);\n run('TextNote Superscript and Subscript', superscriptAndSubscript);\n run('TextNote Formatting With Glyphs 0', formatTextGlyphs0);\n run('TextNote Formatting With Glyphs 1', formatTextGlyphs1);\n run('Crescendo', crescendo);\n run('Text Dynamics', textDynamics);\n },\n};\nfunction formatTextNotes(options) {\n const f = VexFlowTests.makeFactory(options, 400, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: 'q' }),\n f\n .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' })\n .addModifier(f.Accidental({ type: 'n' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n ]);\n const voice2 = score.voice([\n f.TextNote({ text: 'Center Justification', duration: 'h' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'Left Line 1', duration: 'q' }).setLine(1),\n f.TextNote({ text: 'Right', duration: 'q' }).setJustification(TextNote.Justification.RIGHT),\n ]);\n const formatter = f.Formatter();\n formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction formatTextNotes2(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: 'q' }),\n ]);\n const voice2 = score.voice([\n f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'L', duration: '16' }),\n f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT),\n f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'L', duration: '16' }),\n f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT),\n f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'L', duration: '16' }),\n f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT),\n f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'L', duration: '16' }),\n f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT),\n f.TextNote({ text: 'R', duration: 'q' }).setJustification(TextNote.Justification.RIGHT),\n ]);\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n voice2.getTickables().forEach((note) => Note.plotMetrics(f.getContext(), note, 170));\n f.draw();\n options.assert.ok(true);\n}\nfunction superscriptAndSubscript(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: 'h' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: 1, duration: 'q' }),\n f\n .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: 1, duration: 'q' })\n .addModifier(f.Accidental({ type: 'n' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n ]);\n const notes2 = [\n f.TextNote({ text: Flow.unicode.flat + 'I', superscript: '+5', duration: '8' }),\n f.TextNote({ text: 'D' + Flow.unicode.sharp + '/F', duration: '4d', superscript: 'sus2' }),\n f.TextNote({ text: 'ii', superscript: '6', subscript: '4', duration: '8' }),\n f.TextNote({ text: 'C', superscript: Flow.unicode.triangle + '7', subscript: '', duration: '8' }),\n f.TextNote({ text: 'vii', superscript: Flow.unicode['o-with-slash'] + '7', duration: '8' }),\n f.TextNote({ text: 'V', superscript: '7', duration: '8' }),\n ];\n options.assert.equal(notes2[0].getText(), Flow.unicode.flat + 'I', 'TextNote.getText() return .text');\n const voice2 = score.voice(notes2);\n voice2.getTickables().forEach((note) => {\n const textNote = note;\n textNote.setFont({ family: Font.SERIF, size: 15 });\n textNote.setLine(13);\n textNote.setJustification(TextNote.Justification.LEFT);\n });\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction formatTextGlyphs0(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n ]);\n const voice2 = score.voice([\n f.TextNote({ text: 'Center', duration: '8' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ glyph: 'f', duration: '8' }),\n f.TextNote({ glyph: 'p', duration: '8' }),\n f.TextNote({ glyph: 'm', duration: '8' }),\n f.TextNote({ glyph: 'z', duration: '8' }),\n f.TextNote({ glyph: 'mordent_upper', duration: '16' }),\n f.TextNote({ glyph: 'mordent_lower', duration: '16' }),\n f.TextNote({ glyph: 'segno', duration: '8' }),\n f.TextNote({ glyph: 'coda', duration: '8' }),\n ]);\n voice2.getTickables().forEach((n) => n.setJustification(TextNote.Justification.CENTER));\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction formatTextGlyphs1(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n ]);\n const voice2 = score.voice([\n f.TextNote({ glyph: 'turn', duration: '16' }),\n f.TextNote({ glyph: 'turn_inverted', duration: '16' }),\n f.TextNote({ glyph: 'pedal_open', duration: '8' }).setLine(10),\n f.TextNote({ glyph: 'pedal_close', duration: '8' }).setLine(10),\n f.TextNote({ glyph: 'caesura_curved', duration: '8' }).setLine(3),\n f.TextNote({ glyph: 'caesura_straight', duration: '8' }).setLine(3),\n f.TextNote({ glyph: 'breath', duration: '8' }).setLine(2),\n f.TextNote({ glyph: 'tick', duration: '8' }).setLine(3),\n f.TextNote({ glyph: 'tr', duration: '8', smooth: true }).setJustification(TextNote.Justification.CENTER),\n ]);\n voice2.getTickables().forEach((n) => n.setJustification(TextNote.Justification.CENTER));\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction crescendo(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice([\n f.TextNote({ glyph: 'p', duration: '16' }),\n new Crescendo({ duration: '4d' }).setLine(0).setHeight(25).setStave(stave),\n f.TextNote({ glyph: 'f', duration: '16' }),\n new Crescendo({ duration: '4' }).setLine(5).setStave(stave),\n new Crescendo({ duration: '4' }).setLine(10).setDecrescendo(true).setHeight(5).setStave(stave),\n ]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true);\n}\nfunction textDynamics(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const score = f.EasyScore();\n const voice = score.voice([\n f.TextDynamics({ text: 'sfz', duration: '4' }),\n f.TextDynamics({ text: 'rfz', duration: '4' }),\n f.TextDynamics({ text: 'mp', duration: '4' }),\n f.TextDynamics({ text: 'ppp', duration: '4' }),\n f.TextDynamics({ text: 'fff', duration: '4' }),\n f.TextDynamics({ text: 'mf', duration: '4' }),\n f.TextDynamics({ text: 'sff', duration: '4' }),\n ], { time: '7/4' });\n // This is refactored to use preCalculateMinWidth... to exercise\n // a bug fix when textDynamic got formatted more than once.\n const formatter = f.Formatter();\n formatter.joinVoices([voice]);\n // const width = 250; //formatter.preCalculateMinTotalWidth([voice]);\n const width = formatter.preCalculateMinTotalWidth([voice]);\n formatter.format([voice]);\n const stave = f.Stave({ y: 40, width: width + Stave.defaultPadding });\n stave.draw();\n voice.draw(f.getContext(), stave);\n options.assert.ok(true);\n}\nVexFlowTests.register(TextNoteTests);\nexport { TextNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Three Voices Tests - Three voices in single staff.\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { Beam } from '../src/beam';\nconst ThreeVoicesTests = {\n Start() {\n // TODO: Rename the module to 'Three Voices', because we aren't really testing rests.\n QUnit.module('Three Voice Rests');\n const run = VexFlowTests.runTests;\n run('Three Voices - #1', threeVoices1);\n run('Three Voices - #2 Complex', threeVoices2);\n run('Three Voices - #3', threeVoices3);\n run('Auto Adjust Rest Positions - Two Voices', autoRestTwoVoices);\n run('Auto Adjust Rest Positions - Three Voices #1', autoRestThreeVoices1);\n run('Auto Adjust Rest Positions - Three Voices #2', autoRestThreeVoices2);\n },\n};\n/**\n * Helper for setting up the first three test cases: threeVoices1, threeVoices2, threeVoices3.\n */\nfunction createThreeVoicesTest(noteGroup1, noteGroup2, noteGroup3, setup) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 600, 200);\n const stave = factory.Stave().addClef('treble').addTimeSignature('4/4');\n const score = factory.EasyScore();\n // Convert each noteGroup array to StaveNote[].\n const noteGroups = [noteGroup1, noteGroup2, noteGroup3].map((args) => score.notes(...args));\n const voices = noteGroups.map((notes) => score.voice(notes));\n setup(factory, voices);\n const beams = [\n Beam.applyAndGetBeams(voices[0], +1),\n Beam.applyAndGetBeams(voices[1], -1),\n Beam.applyAndGetBeams(voices[2], -1),\n ].reduce(concat);\n // Set option to position rests near the notes in each voice.\n factory.Formatter().joinVoices(voices).formatToStave(voices, stave);\n factory.draw();\n for (let i = 0; i < beams.length; i++) {\n beams[i].setContext(factory.getContext()).draw();\n }\n options.assert.ok(true);\n };\n}\n/**\n *\n */\nconst threeVoices1 = createThreeVoicesTest(['e5/2, e5', { stem: 'up' }], ['(d4 a4 d#5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/4, e3, f3, a3', { stem: 'down' }], (f, voices) => {\n voices[0].getTickables()[0].addModifier(f.Fingering({ number: '0', position: 'left' }), 0);\n voices[1]\n .getTickables()[0]\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '4', position: 'left' }), 1);\n});\n/**\n * Lots of beamed notes. A beam and notehead overlap.\n */\nconst threeVoices2 = createThreeVoicesTest(['(a4 e5)/16, e5, e5, e5, e5/8, e5, e5/2', { stem: 'up' }], ['(d4 d#5)/16, (b4 c5), d5, e5, (d4 a4 c5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/8, b3, e3/4, f3, a3', { stem: 'down' }], (f, voices) => {\n voices[0]\n .getTickables()[0]\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '0', position: 'above' }), 1);\n voices[1]\n .getTickables()[0]\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '4', position: 'left' }), 1);\n});\n/**\n *\n */\nconst threeVoices3 = createThreeVoicesTest(['(g4 e5)/4, e5, (g4 e5)/2', { stem: 'up' }], ['c#5/4, b4/8, b4/8/r, a4/4., g4/8', { stem: 'down' }], ['c4/4, b3, a3, g3', { stem: 'down' }], (f, voices) => {\n voices[0]\n .getTickables()[0]\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 1);\n voices[1].getTickables()[0].addModifier(f.Fingering({ number: '1', position: 'left' }), 0);\n voices[2].getTickables()[0].addModifier(f.Fingering({ number: '3', position: 'left' }), 0);\n});\nfunction autoRestTwoVoices(options) {\n const f = VexFlowTests.makeFactory(options, 900, 200);\n const score = f.EasyScore();\n let x = 10;\n let beams = [];\n function createMeasure(measureTitle, width, align_rests) {\n const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1);\n x += width;\n const noteArrays = [\n score.notes('b4/8/r, e5/16, b4/r, b4/8/r, e5/16, b4/r, b4/8/r, d5/16, b4/r, e5/4', { stem: 'up' }),\n score.notes('c5/16, c4, b4/r, d4, e4, f4, b4/r, g4, g4[stem=\"up\"], a4[stem=\"up\"], b4/r, b4[stem=\"up\"], e4/4', {\n stem: 'down',\n }),\n [f.TextNote({ text: measureTitle, line: -1, duration: '1', smooth: true })],\n ];\n const voices = noteArrays.map((notes) => score.voice(notes));\n beams = beams.concat(Beam.applyAndGetBeams(voices[0], 1)).concat(Beam.applyAndGetBeams(voices[1], -1));\n f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests });\n }\n createMeasure('Default Rest Positions', 400, false);\n createMeasure('Rests Repositioned To Avoid Collisions', 400, true);\n f.draw();\n for (let i = 0; i < beams.length; i++) {\n beams[i].setContext(f.getContext()).draw();\n }\n options.assert.ok(true, 'Auto Adjust Rests - Two Voices');\n}\nfunction autoRestThreeVoices1(options) {\n const f = VexFlowTests.makeFactory(options, 850, 200);\n const score = f.EasyScore();\n let x = 10;\n function createMeasure(measureTitle, width, align_rests) {\n const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1);\n const voices = [\n score.voice(score.notes('b4/4/r, e5, e5/r, e5/r, e5, e5, e5, e5/r', { stem: 'up' }), { time: '8/4' }),\n score.voice(score.notes('b4/4/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4', { stem: 'down' }), { time: '8/4' }),\n score.voice(score.notes('e4/4/r, e4/r, f4, b4/r, g4, c4, e4/r, c4', { stem: 'down' }), { time: '8/4' }),\n score.voice([\n f.TextNote({ text: measureTitle, duration: '1', line: -1, smooth: true }),\n f.TextNote({ text: '', duration: '1', line: -1, smooth: true }),\n ], { time: '8/4' }),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests });\n x += width;\n }\n createMeasure('Default Rest Positions', 400, false);\n createMeasure('Rests Repositioned To Avoid Collisions', 400, true);\n f.draw();\n options.assert.ok(true);\n}\nfunction autoRestThreeVoices2(options) {\n const f = VexFlowTests.makeFactory(options, 850, 200);\n const score = f.EasyScore();\n let x = 10;\n function createMeasure(measureTitle, width, align_rests) {\n const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1);\n const voices = [\n score.voice(score.notes('b4/16/r, e5, e5/r, e5/r, e5, e5, e5, e5/r'), { time: '2/4' }),\n score.voice(score.notes('b4/16/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4'), { time: '2/4' }),\n score.voice(score.notes('e4/16/r, e4/r, f4, b4/r, g4, c4, e4/r, c4'), { time: '2/4' }),\n score.voice([f.TextNote({ text: measureTitle, duration: 'h', line: -1, smooth: true })], { time: '2/4' }),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests });\n x += width;\n }\n createMeasure('Default Rest Positions', 400, false);\n createMeasure('Rests Repositioned To Avoid Collisions', 400, true);\n f.draw();\n options.assert.ok(true);\n}\nVexFlowTests.register(ThreeVoicesTests);\nexport { ThreeVoicesTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TickContext Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { TickContext } from '../src/tickcontext';\nimport { MockTickable } from './mocks';\nconst TickContextTests = {\n Start() {\n QUnit.module('TickContext');\n QUnit.test('Current Tick Test', currentTick);\n QUnit.test('Tracking Test', tracking);\n },\n};\nfunction currentTick(assert) {\n const tc = new TickContext();\n assert.equal(tc.getCurrentTick().value(), 0, 'New tick context has no ticks');\n}\nfunction tracking(assert) {\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n const tickables = [\n new MockTickable().setTicks(BEAT).setWidth(10),\n new MockTickable().setTicks(BEAT * 2).setWidth(20),\n new MockTickable().setTicks(BEAT).setWidth(30),\n ];\n const tc = new TickContext();\n tc.setPadding(0);\n tc.addTickable(tickables[0]);\n assert.equal(tc.getMaxTicks().value(), BEAT);\n tc.addTickable(tickables[1]);\n assert.equal(tc.getMaxTicks().value(), BEAT * 2);\n tc.addTickable(tickables[2]);\n assert.equal(tc.getMaxTicks().value(), BEAT * 2);\n assert.equal(tc.getWidth(), 0);\n tc.preFormat();\n assert.equal(tc.getWidth(), 30);\n}\nVexFlowTests.register(TickContextTests);\nexport { TickContextTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TimeSignature Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Stave } from '../src/stave';\nimport { StaveConnector } from '../src/staveconnector';\nimport { TimeSignature } from '../src/timesignature';\nconst TimeSignatureTests = {\n Start() {\n QUnit.module('TimeSignature');\n QUnit.test('Time Signature Parser', parser);\n const run = VexFlowTests.runTests;\n run('Basic Time Signatures', basic);\n run('Big Signature Test', big);\n run('Additive Signature Test', additive);\n run('Alternating Signature Test', alternating);\n run('Interchangeable Signature Test', interchangeable);\n run('Aggregate Signature Test', agregate);\n run('Complex Signature Test', complex);\n run('Time Signature multiple staves alignment test', multiple);\n run('Time Signature Change Test', change);\n },\n};\nfunction parser(assert) {\n const timeSig = new TimeSignature();\n assert.equal(timeSig.getTimeSpec(), '4/4', 'default time signature is 4/4');\n const mustFail = ['asdf', '123/', '/10', '/', '4567', 'C+', '1+', '+1', '(3+', '+3)', '()', '(+)'];\n mustFail.forEach((invalidString) => {\n assert.throws(() => timeSig.parseTimeSpec(invalidString), /BadTimeSignature/);\n });\n const mustPass = ['4/4', '10/12', '1/8', '1234567890/1234567890', 'C', 'C|', '+'];\n mustPass.forEach((validString) => timeSig.parseTimeSpec(validString));\n timeSig.setTimeSig('4/4');\n assert.equal(timeSig.getIsNumeric(), true, '4/4 is numeric');\n assert.equal(timeSig.getLine(), 0, 'digits are on line 0');\n timeSig.setTimeSig('C|');\n assert.equal(timeSig.getTimeSpec(), 'C|', 'timeSpec changed to C|');\n assert.equal(timeSig.getIsNumeric(), false, 'cut time is not numeric');\n assert.equal(timeSig.getLine(), 2, 'cut/common are on line 2');\n assert.ok(true, 'all pass');\n}\nfunction basic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 120);\n new Stave(10, 10, 500)\n .addTimeSignature('2/2')\n .addTimeSignature('3/4')\n .addTimeSignature('4/4')\n .addTimeSignature('6/8')\n .addTimeSignature('C')\n .addTimeSignature('C|')\n .addEndTimeSignature('2/2')\n .addEndTimeSignature('3/4')\n .addEndTimeSignature('4/4')\n .addEndClef('treble')\n .addEndTimeSignature('6/8')\n .addEndTimeSignature('C')\n .addEndTimeSignature('C|')\n .setContext(ctx)\n .draw();\n options.assert.ok(true, 'all pass');\n}\nfunction big(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300)\n .addTimeSignature('12/8')\n .addTimeSignature('7/16')\n .addTimeSignature('1234567/890')\n .addTimeSignature('987/654321')\n .setContext(ctx)\n .draw();\n options.assert.ok(true, 'all pass');\n}\nfunction additive(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300).addTimeSignature('2+3+2/8').setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction alternating(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300).addTimeSignature('6/8').addTimeSignature('+').addTimeSignature('3/4').setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction interchangeable(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300).addTimeSignature('3/4').addTimeSignature('-').addTimeSignature('2/4').setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction agregate(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300)\n .addTimeSignature('2/4')\n .addTimeSignature('+')\n .addTimeSignature('3/8')\n .addTimeSignature('+')\n .addTimeSignature('5/4')\n .setContext(ctx)\n .draw();\n options.assert.ok(true, 'all pass');\n}\nfunction complex(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300)\n .addTimeSignature('(2+3)/16')\n .addTimeSignature('+')\n .addTimeSignature('3/8')\n .setContext(ctx)\n .draw();\n options.assert.ok(true, 'all pass');\n}\nfunction multiple(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 350);\n // Each StaveLineConfig object is of the form { visible: boolean }.\n const stave1LineConfig = [false, false, true, false, false].map((visible) => ({ visible }));\n const stave1 = new Stave(15, 0, 300)\n .setConfigForLines(stave1LineConfig)\n .addClef('percussion')\n .addTimeSignature('4/4', 25) // passing the custom padding in pixels\n .setContext(ctx)\n .draw();\n const stave2 = new Stave(15, 110, 300).addClef('treble').addTimeSignature('4/4').setContext(ctx).draw();\n const stave3 = new Stave(15, 220, 300).addClef('bass').addTimeSignature('4/4').setContext(ctx).draw();\n Stave.formatBegModifiers([stave1, stave2, stave3]);\n new StaveConnector(stave1, stave2).setType('single').setContext(ctx).draw();\n new StaveConnector(stave2, stave3).setType('single').setContext(ctx).draw();\n new StaveConnector(stave2, stave3).setType('brace').setContext(ctx).draw();\n options.assert.ok(true, 'all pass');\n}\nfunction change(options) {\n const f = VexFlowTests.makeFactory(options, 900);\n const stave = f.Stave({ x: 0, y: 0 }).addClef('treble').addTimeSignature('C|');\n const tickables = [\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }),\n f.TimeSigNote({ time: '3/4' }),\n f.StaveNote({ keys: ['d/4'], duration: '4', clef: 'alto' }),\n f.StaveNote({ keys: ['b/3'], duration: '4r', clef: 'alto' }),\n f.TimeSigNote({ time: 'C' }),\n f.StaveNote({ keys: ['c/3', 'e/3', 'g/3'], duration: '4', clef: 'bass' }),\n f.TimeSigNote({ time: '9/8' }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }),\n ];\n const voice = f.Voice().setStrict(false).addTickables(tickables);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'all pass');\n}\nVexFlowTests.register(TimeSignatureTests);\nexport { TimeSignatureTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Tremolo Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Barline } from '../src/stavebarline';\nimport { Tremolo } from '../src/tremolo';\nconst TremoloTests = {\n Start() {\n QUnit.module('Tremolo');\n const run = VexFlowTests.runTests;\n run('Tremolo - Basic', tremoloBasic);\n run('Tremolo - Big', tremoloBig);\n },\n};\nfunction tremoloBasic(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE);\n const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' });\n notes1[0].addModifier(new Tremolo(3), 0);\n notes1[1].addModifier(new Tremolo(2), 0);\n notes1[2].addModifier(new Tremolo(1), 0);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 })\n .setEndBarType(Barline.type.DOUBLE);\n const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' });\n notes2[1].addModifier(new Tremolo(1), 0);\n notes2[2].addModifier(new Tremolo(2), 0);\n notes2[3].addModifier(new Tremolo(3), 0);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n f.draw();\n options.assert.ok(true, 'Tremolo - Basic');\n}\nfunction tremoloBig(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE);\n const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' });\n const tremolo1 = new Tremolo(3);\n tremolo1.extra_stroke_scale = 1.7;\n tremolo1.y_spacing_scale = 1.5;\n const tremolo2 = new Tremolo(2);\n tremolo2.extra_stroke_scale = 1.7;\n tremolo2.y_spacing_scale = 1.5;\n const tremolo3 = new Tremolo(1);\n tremolo3.extra_stroke_scale = 1.7;\n tremolo3.y_spacing_scale = 1.5;\n notes1[0].addModifier(tremolo1, 0);\n notes1[1].addModifier(tremolo2, 0);\n notes1[2].addModifier(tremolo3, 0);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 })\n .setEndBarType(Barline.type.DOUBLE);\n const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' });\n const tremolo4 = new Tremolo(1);\n tremolo4.extra_stroke_scale = 1.7;\n tremolo4.y_spacing_scale = 1.5;\n const tremolo5 = new Tremolo(2);\n tremolo5.extra_stroke_scale = 1.7;\n tremolo5.y_spacing_scale = 1.5;\n const tremolo6 = new Tremolo(3);\n tremolo6.extra_stroke_scale = 1.7;\n tremolo6.y_spacing_scale = 1.5;\n notes2[1].addModifier(tremolo4, 0);\n notes2[2].addModifier(tremolo5, 0);\n notes2[3].addModifier(tremolo6, 0);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n f.draw();\n options.assert.ok(true, 'Tremolo - Big');\n}\nVexFlowTests.register(TremoloTests);\nexport { TremoloTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Tuning Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Tuning } from '../src/tuning';\nconst TuningTests = {\n Start() {\n QUnit.module('Tuning');\n QUnit.test('Standard Tuning', standard);\n QUnit.test('Standard Banjo Tuning', banjo);\n QUnit.test('Return note for fret', noteForFret);\n },\n};\n/**\n * Helper function to verify that the provided tuning matches a standard 6-string guitar.\n */\nfunction checkStandard(assert, tuning) {\n assert.throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0');\n assert.throws(() => tuning.getValueForString(9), /BadArguments/, 'String 9');\n // TODO: Tuning constructor has a bug in that the default tuning has 8 strings.\n // See: 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2' in tuning.ts constructor.\n // assert.throws(() => tuning.getValueForString(7), /BadArguments/, 'String 7');\n // Tuning.getValueForString() returns a note number where the value 60 corresponds to middle C.\n assert.equal(tuning.getValueForString(6), 40, 'Low E string');\n assert.equal(tuning.getValueForString(5), 45, 'A string');\n assert.equal(tuning.getValueForString(4), 50, 'D string');\n assert.equal(tuning.getValueForString(3), 55, 'G string');\n assert.equal(tuning.getValueForString(2), 59, 'B string');\n assert.equal(tuning.getValueForString(1), 64, 'High E string');\n}\n/**\n * Helper function to verify that the provided tuning matches a standard 5-string banjo.\n */\nfunction checkStandardBanjo(assert, tuning) {\n assert.throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0');\n assert.throws(() => tuning.getValueForString(6), /BadArguments/, 'String 6');\n assert.equal(tuning.getValueForString(5), 67, 'High G string');\n assert.equal(tuning.getValueForString(4), 50, 'D string');\n assert.equal(tuning.getValueForString(3), 55, 'G string');\n assert.equal(tuning.getValueForString(2), 59, 'B string');\n assert.equal(tuning.getValueForString(1), 62, 'High D string');\n}\nfunction standard(assert) {\n assert.expect(16);\n const tuning = new Tuning();\n checkStandard(assert, tuning);\n // Set the tuning by specifying a name: 'standard'.\n tuning.setTuning('standard');\n checkStandard(assert, tuning);\n}\nfunction banjo(assert) {\n assert.expect(7);\n const tuning = new Tuning();\n tuning.setTuning('standardBanjo');\n checkStandardBanjo(assert, tuning);\n}\nfunction noteForFret(assert) {\n assert.expect(8);\n const tuning = new Tuning('E/5,B/4,G/4,D/4,A/3,E/3');\n assert.throws(() => tuning.getNoteForFret(-1, 1), /BadArguments/, 'Fret = -1');\n assert.throws(() => tuning.getNoteForFret(1, -1), /BadArguments/, 'String = -1');\n assert.equal(tuning.getNoteForFret(0, 1), 'E/5', 'High E string');\n assert.equal(tuning.getNoteForFret(5, 1), 'A/5', 'High E string, fret 5');\n assert.equal(tuning.getNoteForFret(0, 2), 'B/4', 'B string');\n assert.equal(tuning.getNoteForFret(0, 3), 'G/4', 'G string');\n assert.equal(tuning.getNoteForFret(12, 2), 'B/5', 'B string, fret 12');\n assert.equal(tuning.getNoteForFret(0, 6), 'E/3', 'Low E string');\n}\nVexFlowTests.register(TuningTests);\nexport { TuningTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Tuplet Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Dot } from '../src/dot';\nimport { Formatter } from '../src/formatter';\nimport { Stem } from '../src/stem';\nimport { Tuplet } from '../src/tuplet';\nconst TupletTests = {\n Start() {\n QUnit.module('Tuplet');\n const run = VexFlowTests.runTests;\n run('Simple Tuplet', simple);\n run('Beamed Tuplet', beamed);\n run('Ratioed Tuplet', ratio);\n run('Bottom Tuplet', bottom);\n run('Bottom Ratioed Tuplet', bottomRatio);\n run('Awkward Tuplet', awkward);\n run('Complex Tuplet', complex);\n run('Mixed Stem Direction Tuplet', mixedTop);\n run('Mixed Stem Direction Bottom Tuplet', mixedBottom);\n run('Nested Tuplets', nested);\n run('Single Tuplets', single);\n },\n};\n// Helper Functions to set the stem direction and duration of the options objects (i.e., StaveNoteStruct)\n// that are ultimately passed into Factory.StaveNote().\n// eslint-disable-next-line\nconst set = (key) => (value) => (object) => {\n object[key] = value;\n return object;\n};\nconst setStemDirection = set('stem_direction');\nconst setStemUp = setStemDirection(Stem.UP);\nconst setStemDown = setStemDirection(Stem.DOWN);\nconst setDurationToQuarterNote = set('duration')('4');\n/**\n * Simple test case with one ascending triplet and one descending triplet.\n */\nfunction simple(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/4');\n const notes = [\n { keys: ['g/4'], duration: '4' },\n { keys: ['a/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['b/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Tuplet({ notes: notes.slice(0, 3) });\n f.Tuplet({ notes: notes.slice(3, 6) });\n // 3/4 time\n const voice = f\n .Voice({ time: { num_beats: 3, beat_value: 4 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Simple Test');\n}\nfunction beamed(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/8');\n const notes = [\n { keys: ['b/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({ notes: notes.slice(0, 3) });\n f.Beam({ notes: notes.slice(3, 10) });\n f.Tuplet({ notes: notes.slice(0, 3) });\n f.Tuplet({ notes: notes.slice(3, 10) });\n // 3/8 time\n const voice = f\n .Voice({ time: { num_beats: 3, beat_value: 8 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Beamed Test');\n}\nfunction ratio(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('4/4');\n const notes = [\n { keys: ['f/4'], duration: '4' },\n { keys: ['a/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['g/4'], duration: '8' },\n { keys: ['e/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(3, 6),\n });\n f.Tuplet({\n notes: notes.slice(0, 3),\n options: {\n ratioed: true,\n },\n });\n f.Tuplet({\n notes: notes.slice(3, 6),\n options: {\n ratioed: true,\n notes_occupied: 4,\n },\n });\n const voice = f.Voice().setStrict(true).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Ratioed Test');\n}\nfunction bottom(options) {\n const f = VexFlowTests.makeFactory(options, 350, 160);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('3/4');\n const notes = [\n { keys: ['f/4'], duration: '4' },\n { keys: ['c/4'], duration: '4' },\n { keys: ['g/4'], duration: '4' },\n { keys: ['d/5'], duration: '8' },\n { keys: ['g/3'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n ]\n .map(setStemDown)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(3, 6),\n });\n f.Tuplet({\n notes: notes.slice(0, 3),\n options: { location: Tuplet.LOCATION_BOTTOM },\n });\n f.Tuplet({\n notes: notes.slice(3, 6),\n options: { location: Tuplet.LOCATION_BOTTOM },\n });\n const voice = f\n .Voice({ time: { num_beats: 3, beat_value: 4 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Bottom Test');\n}\nfunction bottomRatio(options) {\n const f = VexFlowTests.makeFactory(options, 350, 160);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('5/8');\n const notes = [\n { keys: ['f/4'], duration: '4' },\n { keys: ['c/4'], duration: '4' },\n { keys: ['d/4'], duration: '4' },\n { keys: ['d/5'], duration: '8' },\n { keys: ['g/5'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n ]\n .map(setStemDown)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(3, 6),\n });\n f.Tuplet({\n notes: notes.slice(0, 3),\n options: {\n location: Tuplet.LOCATION_BOTTOM,\n ratioed: true,\n },\n });\n f.Tuplet({\n notes: notes.slice(3, 6),\n options: {\n location: Tuplet.LOCATION_BOTTOM,\n notes_occupied: 1,\n },\n });\n const voice = f\n .Voice({ time: { num_beats: 5, beat_value: 8 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Bottom Ratioed Test');\n}\nfunction awkward(options) {\n const f = VexFlowTests.makeFactory(options, 370, 160);\n const stave = f.Stave({ x: 10, y: 10 });\n const notes = [\n { keys: ['g/4'], duration: '16' },\n { keys: ['b/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['e/4'], duration: '16' },\n { keys: ['c/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['e/4'], duration: '16' },\n { keys: ['c/4'], duration: '8' },\n { keys: ['d/4'], duration: '8' },\n { keys: ['e/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({ notes: notes.slice(0, 12) });\n f.Tuplet({\n notes: notes.slice(0, 12),\n options: {\n notes_occupied: 142,\n ratioed: true,\n },\n });\n f.Tuplet({\n notes: notes.slice(12, 15),\n options: {\n ratioed: true,\n },\n }).setBracketed(true);\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Awkward Test');\n}\nfunction complex(options) {\n const f = VexFlowTests.makeFactory(options, 600);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4');\n const notes1 = [\n { keys: ['b/4'], duration: '8d' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['g/4'], duration: '8' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['b/4'], duration: '16r' },\n { keys: ['g/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['g/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n Dot.buildAndAttach([notes1[0]], { all: true });\n const notes2 = [{ keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }]\n .map(setDurationToQuarterNote)\n .map(setStemDown)\n .map(f.StaveNote.bind(f));\n f.Beam({ notes: notes1.slice(0, 3) });\n f.Beam({ notes: notes1.slice(5, 9) });\n f.Beam({ notes: notes1.slice(11, 16) });\n f.Tuplet({\n notes: notes1.slice(0, 3),\n });\n f.Tuplet({\n notes: notes1.slice(3, 11),\n options: {\n num_notes: 7,\n notes_occupied: 4,\n ratioed: false,\n },\n });\n f.Tuplet({\n notes: notes1.slice(11, 16),\n options: {\n notes_occupied: 4,\n },\n });\n const voice1 = f.Voice().setStrict(true).addTickables(notes1);\n const voice2 = f.Voice().setStrict(true).addTickables(notes2);\n new Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n options.assert.ok(true, 'Complex Test');\n}\nfunction mixedTop(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10 });\n const notes = [\n { keys: ['a/4'], stem_direction: 1 },\n { keys: ['c/6'], stem_direction: -1 },\n { keys: ['a/4'], stem_direction: 1 },\n { keys: ['f/5'], stem_direction: 1 },\n { keys: ['a/4'], stem_direction: -1 },\n { keys: ['c/6'], stem_direction: -1 },\n ]\n .map(setDurationToQuarterNote)\n .map(f.StaveNote.bind(f));\n f.Tuplet({\n notes: notes.slice(0, 2),\n options: {\n notes_occupied: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(2, 4),\n options: {\n notes_occupied: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(4, 6),\n options: {\n notes_occupied: 3,\n },\n });\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Mixed Stem Direction Tuplet');\n}\nfunction mixedBottom(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10 });\n const notes = [\n { keys: ['f/3'], stem_direction: 1 },\n { keys: ['a/5'], stem_direction: -1 },\n { keys: ['a/4'], stem_direction: 1 },\n { keys: ['f/3'], stem_direction: 1 },\n { keys: ['a/4'], stem_direction: -1 },\n { keys: ['c/4'], stem_direction: -1 },\n ]\n .map(setDurationToQuarterNote)\n .map(f.StaveNote.bind(f));\n f.Tuplet({\n notes: notes.slice(0, 2),\n options: {\n notes_occupied: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(2, 4),\n options: {\n notes_occupied: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(4, 6),\n options: {\n notes_occupied: 3,\n },\n });\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Mixed Stem Direction Bottom Tuplet');\n}\nfunction nested(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4');\n const notes = [\n // Big triplet 1:\n { keys: ['b/4'], duration: '4' },\n { keys: ['a/4'], duration: '4' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['b/4'], duration: '2' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(2, 7),\n });\n f.Tuplet({\n notes: notes.slice(0, 7),\n options: {\n notes_occupied: 2,\n num_notes: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(2, 7),\n options: {\n notes_occupied: 4,\n num_notes: 5,\n },\n });\n // 4/4 time\n const voice = f.Voice().setStrict(true).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Nested Tuplets');\n}\nfunction single(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4');\n const notes = [\n // Big triplet 1:\n { keys: ['c/4'], duration: '4' },\n { keys: ['d/4'], duration: '8' },\n { keys: ['e/4'], duration: '8' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n { keys: ['a/4'], duration: '2' },\n { keys: ['b/4'], duration: '4' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(1, 4),\n });\n // big quartuplet\n f.Tuplet({\n notes: notes.slice(0, -1),\n options: {\n num_notes: 4,\n notes_occupied: 3,\n ratioed: true,\n bracketed: true,\n },\n });\n // first singleton\n f.Tuplet({\n notes: notes.slice(0, 1),\n options: {\n num_notes: 3,\n notes_occupied: 2,\n ratioed: true,\n },\n });\n // eighth note triplet\n f.Tuplet({\n notes: notes.slice(1, 4),\n options: {\n num_notes: 3,\n notes_occupied: 2,\n },\n });\n // second singleton\n f.Tuplet({\n notes: notes.slice(4, 5),\n options: {\n num_notes: 3,\n notes_occupied: 2,\n ratioed: true,\n bracketed: true,\n },\n });\n // 4/4 time\n const voice = f\n .Voice({ time: { num_beats: 4, beat_value: 4 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n options.assert.ok(true, 'Nested Tuplets');\n}\nVexFlowTests.register(TupletTests);\nexport { TupletTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// TypeGuard Tests\n// eslint-disable-next-line\n// @ts-nocheck to support ES5 style class declaration in the fakeES5() test case.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { CanvasContext } from '../src/canvascontext';\nimport { StaveNote } from '../src/stavenote';\nimport { StemmableNote } from '../src/stemmablenote';\nimport { TabNote } from '../src/tabnote';\nimport { isCategory, isNote, isRenderContext, isStaveNote, isStemmableNote, isTabNote } from '../src/typeguard';\nconst TypeGuardTests = {\n Start() {\n QUnit.module('TypeGuard');\n QUnit.test('Real VexFlow Types', real);\n QUnit.test('Fake VexFlow Types in ES5', fakeES5);\n QUnit.test('Fake VexFlow Types in ES6', fakeES6);\n QUnit.test('Edge Case ES5/ES6', edgeCaseES5vsES6);\n },\n};\nfunction real(assert) {\n const s = new StaveNote({ keys: ['c/4'], duration: 'w' });\n assert.ok(isStaveNote(s), 'isStaveNote helper function');\n assert.ok(isCategory(s, 'StaveNote'), 'Use isCategory(s, \"StaveNote\") directly');\n assert.notOk(isTabNote(s), 'isTabNote helper function. s is NOT a TabNote.');\n const t = new TabNote({ positions: [{ str: 2, fret: 1 }], duration: '1' });\n assert.ok(isTabNote(t), 'isTabNote helper function');\n assert.notOk(isStaveNote(t), 't is NOT a StaveNote');\n assert.ok(isNote(s), 'StaveNote extends StemmableNote which extends Note, so s is a Note');\n assert.ok(isStemmableNote(t), 'TabNote extends StemmableNote');\n assert.ok(isNote(t), 'TabNote extends StemmableNote which extends Note, so t is a Note');\n const canvas = document.createElement('canvas');\n canvas.width = 800;\n canvas.height = 400;\n const ctx = new CanvasContext(canvas.getContext('2d'));\n assert.ok(isRenderContext(ctx), 'ctx is a RenderContext');\n}\n/**\n * Helper function to test the fake VexFlow objects we create in fakeES5() and fakeES6().\n */\nfunction checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote) {\n assert.ok(isStemmableNote(fakeStemmableNote), 'Fake StemmableNote is a StemmableNote.');\n assert.notOk(isNote(fakeStemmableNote), 'Fake StemmableNote is not a Note (no ancestors with the correct CATEGORY).');\n assert.ok(isCategory(fakeStaveNote, 'StaveNote'), 'Fake StaveNote is a StaveNote.');\n assert.ok(isStaveNote(fakeStaveNote), 'Fake StaveNote is a StaveNote (via helper function).');\n assert.ok(isCategory(fakeStaveNote, 'StemmableNote'), 'Fake StaveNote is also a StemmableNote (via inheritance).');\n assert.notOk(isNote(fakeStaveNote), 'Fake StaveNote is not a Note. CATEGORY does not match.');\n}\n/**\n * Demonstrate that an object (ES5-style) can pass the isCategory(...) test if it\n * has the correct static .CATEGORY property.\n */\nfunction fakeES5(assert) {\n function FakeStemmableNote() {\n this.isFake = true;\n }\n FakeStemmableNote.CATEGORY = StemmableNote.CATEGORY;\n function FakeStaveNote() {\n FakeStemmableNote.call(this);\n }\n FakeStaveNote.CATEGORY = StaveNote.CATEGORY;\n FakeStaveNote.prototype = Object.create(FakeStemmableNote.prototype);\n FakeStaveNote.prototype.constructor = FakeStaveNote;\n const fakeStemmableNote = new FakeStemmableNote();\n const fakeStaveNote = new FakeStaveNote();\n checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote);\n}\n/**\n * Demonstrate that an object (ES6-style) can pass the isCategory(...) test if it\n * or its ancestor has the correct static .CATEGORY property.\n */\nfunction fakeES6(assert) {\n class FakeStemmableNote {\n }\n FakeStemmableNote.CATEGORY = StemmableNote.CATEGORY;\n class FakeStaveNote extends FakeStemmableNote {\n }\n FakeStaveNote.CATEGORY = StaveNote.CATEGORY;\n const fakeStemmableNote = new FakeStemmableNote();\n const fakeStaveNote = new FakeStaveNote();\n checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote);\n}\n/**\n * The tsconfig.json target is ES6 (as of August 18, 2021), so isCategory() works even when the root class \"extends Object\".\n */\nfunction edgeCaseES5vsES6(assert) {\n class Z extends Object {\n }\n class Y extends Z {\n }\n class X extends Y {\n }\n const zInstance = new Z();\n const xInstance = new X();\n assert.ok(xInstance instanceof Object, 'es5 & es6: x IS an instanceof Object');\n // If targeting es5, these three assertions only pass if we remove \"extends Object\" from the class Z definition.\n assert.ok(zInstance instanceof Z, 'es6: z IS an instanceof Z');\n assert.ok(xInstance instanceof Y, 'es6: x IS an instanceof Y');\n assert.ok(xInstance instanceof Z, 'es6: x IS an instanceof Z');\n}\nVexFlowTests.register(TypeGuardTests);\nexport { TypeGuardTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Unison Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Tables } from '../src/tables';\nconst UnisonTests = {\n Start() {\n QUnit.module('Unison');\n const run = VexFlowTests.runTests;\n run('Simple(true)', simple, { unison: true, voice1: 'e4/q, e4/q, e4/h', voice2: 'e4/8, e4/8, e4/q, e4/h' });\n run('Simple(false)', simple, { unison: false, voice1: 'e4/q, e4/q, e4/h', voice2: 'e4/8, e4/8, e4/q, e4/h' });\n run('Accidentals(true)', simple, {\n unison: true,\n voice1: 'e4/q, e#4/q, e#4/h',\n voice2: 'e4/8, e4/8, eb4/q, eb4/h',\n });\n run('Accidentals(false)', simple, {\n unison: false,\n voice1: 'e4/q, e#4/q, e#4/h',\n voice2: 'e4/8, e4/8, eb4/q, eb4/h',\n });\n run('Dots(true)', simple, { unison: true, voice1: 'e4/q.., e4/16, e4/h', voice2: '(a4 e4)/q., e4/8, e4/h' });\n run('Dots(false)', simple, { unison: false, voice1: 'e4/q.., e4/16, e4/h', voice2: '(a4 e4)/q., e4/8, e4/h' });\n run('Breve(true)', breve, { unison: true });\n run('Breve(false)', breve, { unison: false });\n run('Style(true)', style, { unison: true });\n run('Style(false)', style, { unison: false });\n },\n};\nfunction simple(options) {\n Tables.UNISON = options.params.unison;\n const vf = VexFlowTests.makeFactory(options, 500, 200);\n const score = vf.EasyScore();\n const system = vf.System({ y: 40, x: 10, width: 400 });\n system.addStave({\n voices: [score.voice(score.notes(options.params.voice1)), score.voice(score.notes(options.params.voice2))],\n });\n system.getStaves()[0].setClef('treble');\n system.getStaves()[0].setTimeSignature('4/4');\n vf.draw();\n options.assert.expect(0);\n}\nfunction style(options) {\n Tables.UNISON = options.params.unison;\n const vf = VexFlowTests.makeFactory(options, 500, 200);\n const score = vf.EasyScore();\n const system = vf.System({ y: 40, x: 10, width: 400 });\n const notes1 = score.notes('e4/q, e4/q, e4/h');\n const notes2 = score.notes('e4/8, e4/8, e4/q, e4/h');\n notes1[2].setStyle({ fillStyle: 'blue', strokeStyle: 'blue' });\n notes2[3].setStyle({ fillStyle: 'green', strokeStyle: 'green' });\n system.addStave({\n voices: [score.voice(notes1), score.voice(notes2)],\n });\n system.getStaves()[0].setClef('treble');\n system.getStaves()[0].setTimeSignature('4/4');\n vf.draw();\n options.assert.expect(0);\n}\nfunction breve(options) {\n Tables.UNISON = options.params.unison;\n const vf = VexFlowTests.makeFactory(options, 500, 200);\n const score = vf.EasyScore();\n const system = vf.System({ y: 40, x: 10, width: 400 });\n system.addStave({\n voices: [\n score.voice([vf.StaveNote({ keys: ['e/4'], duration: '1/2' })], { time: '8/4' }),\n score.voice(score.notes('e4/1, e4/1'), { time: '8/4' }),\n ],\n });\n system.getStaves()[0].setClef('treble');\n system.getStaves()[0].setTimeSignature('8/4');\n vf.draw();\n options.assert.expect(0);\n}\nVexFlowTests.register(UnisonTests);\nexport { UnisonTests };\n","// [VexFlow](https://vexflow.com/) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// VexFlow Test Support Library\nimport { Factory, Flow, Font, Renderer } from '../src/index';\nimport { globalObject } from '../src/util';\nconst global = globalObject();\n// Each test case will switch through the available fonts, and then restore the original font when done.\nlet originalFontNames;\nfunction useTempFontStack(fontName) {\n originalFontNames = Flow.getMusicFont();\n Flow.setMusicFont(...VexFlowTests.FONT_STACKS[fontName]);\n}\nfunction restoreOriginalFontStack() {\n Flow.setMusicFont(...originalFontNames);\n}\n// A micro util inspired by jQuery.\nif (!global.$) {\n // generate_png_images.js uses jsdom and does not include jQuery.\n global.$ = (param) => {\n let element;\n if (typeof param !== 'string') {\n element = param;\n }\n else if (param.startsWith('<')) {\n // Extract the tag name: e.g.,
=> div\n // Assume param.match returns something (! operator).\n // eslint-disable-next-line\n const tagName = param.match(/[A-Za-z]+/g)[0];\n element = document.createElement(tagName);\n }\n else {\n element = document.querySelector(param);\n }\n const $element = {\n // eslint-disable-next-line\n get(index) {\n return element;\n },\n addClass(c) {\n element.classList.add(c);\n return $element;\n },\n text(t) {\n element.textContent = t;\n return $element;\n },\n html(h) {\n if (!h) {\n return element.innerHTML;\n }\n else {\n element.innerHTML = h;\n return $element;\n }\n },\n append(...elementsToAppend) {\n elementsToAppend.forEach((e) => {\n element.appendChild(e);\n });\n return $element;\n },\n attr(attrName, val) {\n element.setAttribute(attrName, val);\n return $element;\n },\n };\n return $element;\n };\n}\n/** Allow `name` to be used inside file names. */\nfunction sanitizeName(name) {\n return name.replace(/[^a-zA-Z0-9]/g, '_');\n}\nconst CANVAS_TEST_CONFIG = {\n backend: Renderer.Backends.CANVAS,\n tagName: 'canvas',\n testType: 'Canvas',\n fontStacks: ['Bravura'],\n};\nconst CANVAS_TEXT_CONFIG = {\n backend: Renderer.Backends.CANVAS,\n tagName: 'canvas',\n testType: 'Canvas',\n fontStacks: ['Bravura'],\n};\nconst SVG_TEST_CONFIG = {\n backend: Renderer.Backends.SVG,\n tagName: 'div',\n testType: 'SVG',\n fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'],\n};\nconst SVG_TEXT_CONFIG = {\n backend: Renderer.Backends.SVG,\n tagName: 'div',\n testType: 'SVG',\n fontStacks: ['Bravura'],\n};\nconst NODE_TEST_CONFIG = {\n backend: Renderer.Backends.CANVAS,\n tagName: 'canvas',\n testType: 'NodeCanvas',\n fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'],\n};\nclass VexFlowTests {\n // Call this at the end of a `tests/xxxx_tests.ts` file to register the module.\n static register(test) {\n VexFlowTests.tests.push(test);\n }\n static parseJobOptions(runOptions) {\n let { jobs, job } = runOptions || { jobs: 1, job: 0 };\n if (window) {\n const { location } = window;\n if (location) {\n const sps = new URLSearchParams(location.search);\n const jobsParam = sps.get('jobs');\n const jobParam = sps.get('job');\n if (jobsParam) {\n jobs = parseInt(jobsParam, 10);\n }\n if (jobParam) {\n job = parseInt(jobParam, 10);\n }\n }\n }\n return {\n jobs,\n job,\n };\n }\n // flow.html calls this to invoke all the tests.\n static run(runOptions) {\n const { jobs, job } = VexFlowTests.parseJobOptions(runOptions);\n VexFlowTests.tests.forEach((test, idx) => {\n if (jobs === 1 || idx % jobs === job) {\n test.Start();\n }\n });\n }\n static set NODE_FONT_STACKS(fontStacks) {\n NODE_TEST_CONFIG.fontStacks = fontStacks;\n }\n /** Return a unique ID for a test. */\n static generateTestID(prefix) {\n return prefix + '_' + VexFlowTests.NEXT_TEST_ID++;\n }\n /**\n * Run `func` inside a QUnit test for each of the enabled rendering backends.\n * @param name\n * @param testFunc\n * @param params\n */\n // eslint-disable-next-line\n static runTests(name, testFunc, params) {\n VexFlowTests.runCanvasTest(name, testFunc, params);\n VexFlowTests.runSVGTest(name, testFunc, params);\n VexFlowTests.runNodeTest(name, testFunc, params);\n }\n // eslint-disable-next-line\n static runTextTests(name, testFunc, params) {\n VexFlowTests.runCanvasText(name, testFunc, params);\n VexFlowTests.runSVGText(name, testFunc, params);\n }\n /**\n * Append a
which contains the test case title and rendered output.\n * See flow.html and flow.css.\n * @param elementId\n * @param testTitle\n * @param tagName\n */\n static createTest(elementId, testTitle, tagName, titleId = '') {\n const anchorTestTitle = `${testTitle}`;\n const title = $('
').addClass('name').attr('id', titleId).html(anchorTestTitle).get(0);\n const vexOutput = $(`<${tagName}/>`).addClass('vex-tabdiv').attr('id', elementId).get(0);\n const container = $('
').addClass('testcanvas').append(title, vexOutput).get(0);\n $('#qunit-tests').append(container);\n return vexOutput;\n }\n static makeFactory(options, width = 450, height = 140) {\n const { elementId, backend } = options;\n return new Factory({ renderer: { elementId, backend, width, height } });\n }\n // eslint-disable-next-line\n static runCanvasTest(name, testFunc, params) {\n if (VexFlowTests.RUN_CANVAS_TESTS) {\n const helper = null;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEST_CONFIG), { name, testFunc, params, helper }));\n }\n }\n // eslint-disable-next-line\n static runCanvasText(name, testFunc, params) {\n if (VexFlowTests.RUN_CANVAS_TESTS) {\n const helper = null;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEXT_CONFIG), { name, testFunc, params, helper }));\n }\n }\n // eslint-disable-next-line\n static runSVGTest(name, testFunc, params) {\n if (VexFlowTests.RUN_SVG_TESTS) {\n const helper = null;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEST_CONFIG), { name, testFunc, params, helper }));\n }\n }\n // eslint-disable-next-line\n static runSVGText(name, testFunc, params) {\n if (VexFlowTests.RUN_SVG_TESTS) {\n const helper = null;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEXT_CONFIG), { name, testFunc, params, helper }));\n }\n }\n // eslint-disable-next-line\n static runNodeTest(name, testFunc, params) {\n if (VexFlowTests.RUN_NODE_TESTS) {\n const helper = VexFlowTests.runNodeTestHelper;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, NODE_TEST_CONFIG), { name, testFunc, params, helper }));\n }\n }\n /**\n * Save the PNG file.\n * @param fontName\n * @param element\n */\n static runNodeTestHelper(fontName, element) {\n if (Renderer.lastContext !== undefined) {\n const moduleName = sanitizeName(QUnit.module.name);\n const testName = sanitizeName(QUnit.test.name);\n // If we are only testing Bravura, we OMIT the font name from the\n // output image file name, which allows visual diffs against\n // the previous release: version 3.0.9. In the future, if we decide\n // to test all fonts by default, we can remove this check.\n const onlyBravura = NODE_TEST_CONFIG.fontStacks.length === 1 && fontName === 'Bravura';\n const fontInfo = onlyBravura ? '' : `.${fontName}`;\n const fileName = `${VexFlowTests.NODE_IMAGEDIR}/${moduleName}.${testName}${fontInfo}.png`;\n const imageData = element.toDataURL().split(';base64,').pop();\n const imageBuffer = Buffer.from(imageData, 'base64');\n VexFlowTests.shims.fs.writeFileSync(fileName, imageBuffer, { encoding: 'base64' });\n }\n }\n /** Run QUnit.test(...) for each font. */\n // eslint-disable-next-line\n static runWithParams({ fontStacks, testFunc, name, params, backend, tagName, testType, helper }) {\n if (name === undefined) {\n throw new Error('Test name is undefined.');\n }\n const testTypeLowerCase = testType.toLowerCase();\n fontStacks.forEach((fontStackName) => {\n QUnit.test(name, (assert) => {\n useTempFontStack(fontStackName);\n const elementId = VexFlowTests.generateTestID(`${testTypeLowerCase}_` + fontStackName);\n const moduleName = assert.test.module.name;\n const title = moduleName + ' › ' + name + ` › ${testType} + ${fontStackName}`;\n // Add an element id for the title div, so that we can scroll directly to a test case.\n // Add a fragment identifier to the url (e.g., #Stave.Multiple_Stave_Barline_Test.Bravura)\n // This titleId will match the name of the PNGs generated by visual regression tests\n // (without the _Current.png or _Reference.png).\n let prefix = '';\n if (testTypeLowerCase === 'canvas') {\n prefix = testTypeLowerCase + '_';\n }\n else {\n // DO NOT ADD A PREFIX TO SVG TESTS\n // The canvas prefix above is for making sure our element ids are unique,\n // since we have a canvas+bravura test case and a svg+bravura test case\n // that would otherwise have the same titleId.\n }\n const titleId = `${prefix}${sanitizeName(moduleName)}.${sanitizeName(name)}.${fontStackName}`;\n const element = VexFlowTests.createTest(elementId, title, tagName, titleId);\n const options = { elementId, params, assert, backend };\n const isSVG = backend === Renderer.Backends.SVG;\n const contextBuilder = isSVG ? Renderer.getSVGContext : Renderer.getCanvasContext;\n testFunc(options, contextBuilder);\n restoreOriginalFontStack();\n if (helper)\n helper(fontStackName, element);\n });\n });\n }\n /**\n * @param ctx\n * @param x\n * @param y\n */\n static plotLegendForNoteWidth(ctx, x, y) {\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n const spacing = 12;\n let lastY = y;\n function legend(color, text) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(10);\n ctx.moveTo(x, lastY - 4);\n ctx.lineTo(x + 10, lastY - 4);\n ctx.stroke();\n ctx.setFillStyle('black');\n ctx.fillText(text, x + 15, lastY);\n lastY += spacing;\n }\n legend('green', 'Note + Flag');\n legend('red', 'Modifiers');\n legend('#999', 'Displaced Head');\n legend('#DDD', 'Formatter Shift');\n ctx.restore();\n }\n}\nVexFlowTests.tests = [];\nVexFlowTests.RUN_CANVAS_TESTS = true;\nVexFlowTests.RUN_SVG_TESTS = true;\nVexFlowTests.RUN_NODE_TESTS = false;\n// Default font properties for tests.\nVexFlowTests.Font = { size: 10 };\n/**\n * Each font stack is a prioritized list of font names.\n */\nVexFlowTests.FONT_STACKS = {\n Bravura: ['Bravura', 'Custom'],\n Gonville: ['Gonville', 'Bravura', 'Custom'],\n Petaluma: ['Petaluma', 'Gonville', 'Bravura', 'Custom'],\n Leland: ['Leland', 'Bravura', 'Custom'],\n};\nVexFlowTests.NEXT_TEST_ID = 0;\nexport { VexFlowTests };\n/**\n * Used with array.reduce(...) to flatten arrays of arrays in the tests.\n */\n// eslint-disable-next-line\nexport const concat = (a, b) => a.concat(b);\n/** Used in KeySignature and ClefKeySignature Tests. */\nexport const MAJOR_KEYS = [\n //\n 'C',\n 'F',\n 'Bb',\n 'Eb',\n 'Ab',\n 'Db',\n 'Gb',\n 'Cb',\n 'G',\n 'D',\n 'A',\n 'E',\n 'B',\n 'F#',\n 'C#',\n];\nexport const MINOR_KEYS = [\n 'Am',\n 'Dm',\n 'Gm',\n 'Cm',\n 'Fm',\n 'Bbm',\n 'Ebm',\n 'Abm',\n 'Em',\n 'Bm',\n 'F#m',\n 'C#m',\n 'G#m',\n 'D#m',\n 'A#m',\n];\n// VexFlow classes can be accessed via Vex.Flow.* or by directly importing a library class.\n// Tests can be accessed via Vex.Flow.Test.* or by directly importing a test class.\n// Here we set Vex.Flow.Test = VexFlowTests.\n// eslint-disable-next-line\n// @ts-ignore\nFlow.Test = VexFlowTests;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// VF.* Prefix Tests\n//\n// VexFlow classes are available under the global Vex.Flow.* namespace.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental, Annotation, Articulation, Barline, BarNote, Beam, Bend, BoundingBox, BoundingBoxComputation, ChordSymbol, Clef, ClefNote, Crescendo, Curve, Dot, EasyScore, Element, Factory, Flow, Font, Formatter, Fraction, FretHandFinger, GhostNote, Glyph, GlyphNote, GraceNote, GraceNoteGroup, GraceTabNote, KeyManager, KeySignature, KeySigNote, Modifier, ModifierContext, MultiMeasureRest, Music, Note, NoteHead, NoteSubGroup, Ornament, Parser, PedalMarking, Registry, Renderer, RepeatNote, Repetition, Stave, StaveConnector, StaveHairpin, StaveLine, StaveModifier, StaveNote, StaveTempo, StaveText, StaveTie, Stem, StringNumber, Stroke, System, TabNote, TabSlide, TabStave, TabTie, TextBracket, TextDynamics, TextFormatter, TextNote, TickContext, TimeSignature, TimeSigNote, Tremolo, Tuning, Tuplet, Vibrato, VibratoBracket, Voice, Volta, } from '../src/index';\nconst VFPrefixTests = {\n Start() {\n QUnit.module('VF.* API');\n QUnit.test('VF.* API', VF_Prefix);\n QUnit.test('VF Alias', VF_Alias);\n },\n};\nfunction VF_Prefix(assert) {\n // Intentionally use Vex.Flow here so we can verify that the Vex.Flow.* API\n // is equivalent to using the individual classes in TypeScript.\n const VF = Vex.Flow;\n assert.equal(Accidental, VF.Accidental);\n assert.equal(Annotation, VF.Annotation);\n assert.equal(Articulation, VF.Articulation);\n assert.equal(Barline, VF.Barline);\n assert.equal(BarNote, VF.BarNote);\n assert.equal(Beam, VF.Beam);\n assert.equal(Bend, VF.Bend);\n assert.equal(BoundingBox, VF.BoundingBox);\n assert.equal(BoundingBoxComputation, VF.BoundingBoxComputation);\n assert.equal(ChordSymbol, VF.ChordSymbol);\n assert.equal(Clef, VF.Clef);\n assert.equal(ClefNote, VF.ClefNote);\n assert.equal(Crescendo, VF.Crescendo);\n assert.equal(Curve, VF.Curve);\n assert.equal(Dot, VF.Dot);\n assert.equal(EasyScore, VF.EasyScore);\n assert.equal(Element, VF.Element);\n assert.equal(Factory, VF.Factory);\n assert.equal(Flow.RESOLUTION, VF.RESOLUTION);\n assert.equal(Font, VF.Font);\n assert.equal(Formatter, VF.Formatter);\n assert.propEqual(new Formatter(), new VF.Formatter(), 'new Formatter()');\n assert.equal(Fraction, VF.Fraction);\n assert.equal(FretHandFinger, VF.FretHandFinger);\n assert.equal(GhostNote, VF.GhostNote);\n assert.equal(Glyph, VF.Glyph);\n assert.equal(GlyphNote, VF.GlyphNote);\n assert.equal(GraceNote, VF.GraceNote);\n assert.equal(GraceNoteGroup, VF.GraceNoteGroup);\n assert.equal(GraceTabNote, VF.GraceTabNote);\n assert.equal(KeyManager, VF.KeyManager);\n assert.equal(KeySignature, VF.KeySignature);\n assert.equal(KeySigNote, VF.KeySigNote);\n assert.equal(Modifier, VF.Modifier);\n assert.equal(ModifierContext, VF.ModifierContext);\n assert.equal(MultiMeasureRest, VF.MultiMeasureRest);\n assert.equal(Music, VF.Music);\n assert.equal(Note, VF.Note);\n assert.equal(NoteHead, VF.NoteHead);\n assert.equal(NoteSubGroup, VF.NoteSubGroup);\n assert.equal(Ornament, VF.Ornament);\n assert.equal(Parser, VF.Parser);\n assert.equal(PedalMarking, VF.PedalMarking);\n assert.equal(Registry, VF.Registry);\n assert.equal(Renderer, VF.Renderer);\n assert.equal(RepeatNote, VF.RepeatNote);\n assert.equal(Repetition, VF.Repetition);\n assert.equal(Stave, VF.Stave);\n assert.notEqual(Stave, VF.StaveNote);\n assert.equal(StaveConnector, VF.StaveConnector);\n assert.equal(StaveHairpin, VF.StaveHairpin);\n assert.equal(StaveLine, VF.StaveLine);\n assert.equal(StaveModifier, VF.StaveModifier);\n assert.equal(StaveNote, VF.StaveNote);\n assert.equal(StaveTempo, VF.StaveTempo);\n assert.equal(StaveText, VF.StaveText);\n assert.equal(StaveTie, VF.StaveTie);\n assert.equal(Stem, VF.Stem);\n assert.equal(StringNumber, VF.StringNumber);\n assert.equal(Stroke, VF.Stroke);\n assert.equal(System, VF.System);\n assert.equal(TabNote, VF.TabNote);\n assert.equal(TabSlide, VF.TabSlide);\n assert.equal(TabStave, VF.TabStave);\n assert.equal(TabTie, VF.TabTie);\n assert.equal(TextBracket, VF.TextBracket);\n assert.equal(TextDynamics, VF.TextDynamics);\n assert.equal(TextFormatter, VF.TextFormatter);\n assert.equal(TextNote, VF.TextNote);\n assert.equal(TickContext, VF.TickContext);\n assert.equal(TimeSignature, VF.TimeSignature);\n assert.equal(TimeSigNote, VF.TimeSigNote);\n assert.equal(Tremolo, VF.Tremolo);\n assert.equal(Tuning, VF.Tuning);\n assert.equal(Tuplet, VF.Tuplet);\n assert.equal(Vibrato, VF.Vibrato);\n assert.equal(VibratoBracket, VF.VibratoBracket);\n assert.equal(Voice, VF.Voice);\n assert.equal(Volta, VF.Volta);\n}\n/**\n * If you have name collisions with VexFlow classes, consider extracting classes from Vex.Flow\n * and renaming them with a VF prefix.\n */\nfunction VF_Alias(assert) {\n const Flow = Vex.Flow;\n const VFAliases = {\n get VFAccidental() {\n return Flow.Accidental;\n },\n get VFAnnotation() {\n return Flow.Annotation;\n },\n get VFVibrato() {\n return Flow.Vibrato;\n },\n };\n const { VFVibrato, VFAccidental, VFAnnotation } = VFAliases;\n assert.equal(Accidental, VFAccidental);\n assert.equal(Annotation, VFAnnotation);\n const vibrato = new VFVibrato();\n assert.ok(vibrato);\n const acc1 = new VFAccidental('##');\n const acc2 = new Accidental('##');\n assert.equal(acc1.type, acc2.type);\n}\nVexFlowTests.register(VFPrefixTests);\nexport { VFPrefixTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Vibrato Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Bend, Font, Formatter, TabNote, TabStave, Vibrato } from '../src/index';\nconst VibratoTests = {\n Start() {\n QUnit.module('Vibrato');\n const run = VexFlowTests.runTests;\n run('Simple Vibrato', simple);\n run('Harsh Vibrato', harsh);\n run('Vibrato with Bend', withBend);\n },\n};\n// Helper function to create TabNote objects.\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\n/**\n * Default vibrato symbol (wavy line) on top of a tab with two notes fretted.\n */\nfunction simple(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n }).addModifier(new Vibrato(), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'h',\n }).addModifier(new Vibrato(), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Simple Vibrato');\n}\n/**\n * The harsh vibrato symbol is a zig zag line with sharp points.\n * This test is nearly identical to the 'simple' test above.\n * The only difference is that we call .setHarsh(true) on each Vibrato object.\n */\nfunction harsh(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n }).addModifier(new Vibrato().setHarsh(true), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'h',\n }).addModifier(new Vibrato().setHarsh(true), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Harsh Vibrato');\n}\nfunction withBend(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.3, 1.3);\n ctx.setFont(Font.SANS_SERIF, VexFlowTests.Font.size);\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 9 },\n { str: 3, fret: 9 },\n ],\n duration: 'q',\n })\n .addModifier(new Bend('1/2', true), 0)\n .addModifier(new Bend('1/2', true), 1)\n .addModifier(new Vibrato(), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'q',\n })\n .addModifier(new Bend('Full', false), 0)\n .addModifier(new Vibrato().setVibratoWidth(60), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'h',\n }).addModifier(new Vibrato().setVibratoWidth(120).setHarsh(true), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n options.assert.ok(true, 'Vibrato with Bend');\n}\nVexFlowTests.register(VibratoTests);\nexport { VibratoTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Balazs Forian-Szabo\n//\n// VibratoBracket Tests\n// TODO: It's annoying to have to cast \"as Note\" or \"as Note[]\". Could we add a method to Voice to get the tickables as Note[]? Voice.getTickables() vs Voice.getNotes()?\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst VibratoBracketTests = {\n Start() {\n QUnit.module('VibratoBracket');\n const run = VexFlowTests.runTests;\n run('Simple VibratoBracket', simple);\n run('Harsh VibratoBracket Without End Note', withoutEndNote);\n run('Harsh VibratoBracket Without Start Note', withoutStartNote);\n },\n};\n// Helper function to set up the stave, easyscore, voice, and to format & draw.\nfunction createTest(noteGroup, setupVibratoBracket) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 650, 200);\n const stave = factory.Stave();\n const score = factory.EasyScore();\n const voice = score.voice(score.notes(noteGroup));\n setupVibratoBracket(factory, voice.getTickables());\n factory.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n factory.draw();\n options.assert.ok(true);\n };\n}\nconst simple = createTest('c4/4, c4, c4, c4', (factory, notes) => {\n factory.VibratoBracket({\n from: notes[0],\n to: notes[3],\n options: { line: 2 },\n });\n});\nconst withoutEndNote = createTest('c4/4, c4, c4, c4', (factory, notes) => {\n factory.VibratoBracket({\n from: notes[2],\n to: null,\n options: { line: 2, harsh: true },\n });\n});\nconst withoutStartNote = createTest('c4/4, c4, c4, c4', (factory, notes) => {\n factory.VibratoBracket({\n from: null,\n to: notes[2],\n options: { line: 2, harsh: true },\n });\n});\nVexFlowTests.register(VibratoBracketTests);\nexport { VibratoBracketTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Voice Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { Barline } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nimport { Voice } from '../src/voice';\nimport { MockTickable } from './mocks';\nconst VoiceTests = {\n Start() {\n QUnit.module('Voice');\n QUnit.test('Strict Test', strict);\n QUnit.test('Ignore Test', ignore);\n VexFlowTests.runTests('Full Voice Mode Test', full);\n },\n};\nconst BEAT = (1 * Flow.RESOLUTION) / 4;\n// Helper function to create a tickable with a preset number of ticks.\nconst createTickable = () => new MockTickable().setTicks(BEAT);\nfunction strict(assert) {\n assert.expect(8);\n const tickables = [createTickable(), createTickable(), createTickable()];\n const voice = new Voice(Flow.TIME4_4);\n assert.equal(voice.getTotalTicks().value(), BEAT * 4, '4/4 Voice has 4 beats');\n assert.equal(voice.getTicksUsed().value(), BEAT * 0, 'No beats in voice');\n voice.addTickables(tickables);\n assert.equal(voice.getTicksUsed().value(), BEAT * 3, 'Three beats in voice');\n voice.addTickable(createTickable());\n assert.equal(voice.getTicksUsed().value(), BEAT * 4, 'Four beats in voice');\n assert.equal(voice.isComplete(), true, 'Voice is complete');\n const numeratorBeforeException = voice.getTicksUsed().numerator;\n assert.throws(() => voice.addTickable(createTickable()), /BadArgument/, '\"Too many ticks\" exception');\n // Verify that adding too many ticks does not affect the `ticksUsed` property of the voice.\n // See voice.ts: this.ticksUsed.subtract(ticks);\n assert.equal(voice.getTicksUsed().numerator, numeratorBeforeException, 'Revert `ticksUsed` after a \"Too many ticks\" exception');\n assert.equal(voice.getSmallestTickCount().value(), BEAT, 'Smallest tick count is BEAT');\n}\nfunction ignore(assert) {\n const tickables = [\n createTickable(),\n createTickable(),\n createTickable().setIgnoreTicks(true),\n createTickable(),\n createTickable().setIgnoreTicks(true),\n createTickable(),\n ];\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables(tickables);\n assert.ok(true, 'all pass');\n}\nfunction full(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 550, 200);\n const stave = new Stave(10, 50, 500).addClef('treble').addTimeSignature('4/4').setEndBarType(Barline.type.END);\n const notes = [\n new StaveNote({ keys: ['c/4'], duration: '4' }),\n new StaveNote({ keys: ['d/4'], duration: '4' }),\n new StaveNote({ keys: ['r/4'], duration: '4r' }),\n ];\n notes.forEach((note) => note.setStave(stave));\n const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.FULL).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n stave.setContext(ctx).draw();\n voice.draw(ctx);\n const bb = voice.getBoundingBox();\n if (bb) {\n ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH());\n }\n ctx.stroke();\n options.assert.throws(() => voice.addTickable(new StaveNote({ keys: ['c/4'], duration: '2' })), /BadArgument/, 'Voice cannot exceed full amount of ticks');\n}\nVexFlowTests.register(VoiceTests);\nexport { VoiceTests };\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-debug-with-tests.ts is the entry point for the build output file vexflow-debug-with-tests.js.\n// It statically bundles all the music engraving fonts, and also includes the tests from vexflow/tests/.\n// The output file is used by flow.html & flow-headless-browser.html to run the tests.\nimport * as VexSrc from '../src/index';\nimport * as VexTests from '../tests/index';\nimport { Flow } from '../src/flow';\nimport { loadAllMusicFonts } from '../src/fonts/load_all';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadAllMusicFonts();\nFlow.setMusicFont('Bravura', 'Gonville', 'Custom');\nloadTextFonts();\n// Re-export all exports from src/index.ts and tests/index.ts.\nexport * from '../src/index';\nexport * from '../tests/index';\n// Also collect all exports into a default export for CJS projects.\nexport default Object.assign(Object.assign({}, VexSrc), VexTests);\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-debug.js b/build/cjs/vexflow-debug.js new file mode 100644 index 0000000000..637e9de883 --- /dev/null +++ b/build/cjs/vexflow-debug.js @@ -0,0 +1,36463 @@ +/*! + * VexFlow 4.2.2 2023-07-03T19:56:22.952Z 7ad933bdf12b4137ce04d3f332a838887d08a595 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["Vex"] = factory(); + else + root["Vex"] = factory(); +})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/version.ts": +/*!************************!*\ + !*** ./src/version.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "DATE": () => (/* binding */ DATE), +/* harmony export */ "ID": () => (/* binding */ ID), +/* harmony export */ "VERSION": () => (/* binding */ VERSION) +/* harmony export */ }); +const VERSION = '4.2.2'; +const ID = '7ad933bdf12b4137ce04d3f332a838887d08a595'; +const DATE = '2023-07-03T19:56:22.952Z'; + + +/***/ }), + +/***/ "./src/accidental.ts": +/*!***************************!*\ + !*** ./src/accidental.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Accidental": () => (/* binding */ Accidental) +/* harmony export */ }); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// @author Mohit Cheppudira +// @author Greg Ristow (modifications) + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Accidental.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Accidental', args); +} +/** + * An `Accidental` inherits from `Modifier`, and is formatted within a + * `ModifierContext`. Accidentals are modifiers that can be attached to + * notes. Support is included for both western and microtonal accidentals. + * + * See `tests/accidental_tests.ts` for usage examples. + */ +class Accidental extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + /** Accidentals category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Accidental; + } + /** Arrange accidentals inside a ModifierContext. */ + static format(accidentals, state) { + // If there are no accidentals, no need to format their positions. + if (!accidentals || accidentals.length === 0) + return; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); + const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding'); + const leftShift = state.left_shift + noteheadAccidentalPadding; + const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing'); + const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals + const accidentalLinePositionsAndSpaceNeeds = []; + let prevNote = undefined; + let extraXSpaceNeededForLeftDisplacedNotehead = 0; + // First determine the accidentals' Y positions from the note.keys + for (let i = 0; i < accidentals.length; ++i) { + const acc = accidentals[i]; + const note = acc.getNote(); + const stave = note.getStave(); + const index = acc.checkIndex(); + const props = note.getKeyProps()[index]; + if (note !== prevNote) { + // Iterate through all notes to get the displaced pixels + for (let n = 0; n < note.keys.length; ++n) { + // If the current extra left-space needed isn't as big as this note's, + // then we need to use this note's. + extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead); + } + prevNote = note; + } + if (stave) { + const lineSpace = stave.getSpacingBetweenLines(); + const y = stave.getYForLine(props.line); + const accLine = Math.round((y / lineSpace) * 2) / 2; + accidentalLinePositionsAndSpaceNeeds.push({ + y, + line: accLine, + extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead, + acc, + spacingBetweenStaveLines: lineSpace, + }); + } + else { + accidentalLinePositionsAndSpaceNeeds.push({ + line: props.line, + extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead, + acc, + }); + } + } + // Sort accidentals by line number. + accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line); + const staveLineAccidentalLayoutMetrics = []; + // amount by which all accidentals must be shifted right or left for + // stem flipping, notehead shifting concerns. + let maxExtraXSpaceNeeded = 0; + // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics) + // from accidentalLinePositionsAndSpaceNeeds + for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) { + const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i]; + const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1]; + let currentLineMetric; + // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric + if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) { + currentLineMetric = { + line: accidentalLinePositionAndSpaceNeeds.line, + flatLine: true, + dblSharpLine: true, + numAcc: 0, + width: 0, + column: 0, + }; + staveLineAccidentalLayoutMetrics.push(currentLineMetric); + } + else { + currentLineMetric = priorLineMetric; + } + // if this accidental is not a flat, the accidental needs 3.0 lines lower + // clearance instead of 2.5 lines for b or bb. + if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' && + accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') { + currentLineMetric.flatLine = false; + } + // if this accidental is not a double sharp, the accidental needs 3.0 lines above + if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') { + currentLineMetric.dblSharpLine = false; + } + // Track how many accidentals are on this line: + currentLineMetric.numAcc++; + // Track the total x_offset needed for this line which will be needed + // for formatting lines w/ multiple accidentals: + // width = accidental width + universal spacing between accidentals + currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing; + // if this extraXSpaceNeeded is the largest so far, use it as the starting point for + // all accidental columns. + maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded); + } + // ### Place Accidentals in Columns + // + // Default to a classic triangular layout (middle accidental farthest left), + // but follow exceptions as outlined in G. Read's _Music Notation_ and + // Elaine Gould's _Behind Bars_. + // + // Additionally, this implements different vertical collision rules for + // flats (only need 2.5 lines clearance below) and double sharps (only + // need 2.5 lines of clearance above or below). + // + // Classic layouts and exception patterns are found in the 'tables.js' + // in 'Tables.accidentalColumnsTable' + // + // Beyond 6 vertical accidentals, default to the parallel ascending lines approach, + // using as few columns as possible for the verticle structure. + // + // TODO (?): Allow column to be specified for an accidental at run-time? + let totalColumns = 0; + // establish the boundaries for a group of notes with clashing accidentals: + for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) { + let noFurtherConflicts = false; + const groupStart = i; + let groupEnd = i; + while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) { + // if this note conflicts with the next: + if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) { + // include the next note in the group: + groupEnd++; + } + else { + noFurtherConflicts = true; + } + } + // Gets an a line from the `lineList`, relative to the current group + const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index]; + const getGroupLines = (indexes) => indexes.map(getGroupLine); + const lineDifference = (indexA, indexB) => { + const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line); + return a - b; + }; + const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2)); + // Set columns for the lines in this group: + const groupLength = groupEnd - groupStart + 1; + // Set the accidental column for each line of the group + let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd]) + ? 'a' + : 'b'; + switch (groupLength) { + case 3: + if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) { + endCase = 'second_on_bottom'; + } + break; + case 4: + if (notColliding([0, 2], [1, 3])) { + endCase = 'spaced_out_tetrachord'; + } + break; + case 5: + if (endCase === 'b' && notColliding([1, 3])) { + endCase = 'spaced_out_pentachord'; + if (notColliding([0, 2], [2, 4])) { + endCase = 'very_spaced_out_pentachord'; + } + } + break; + case 6: + if (notColliding([0, 3], [1, 4], [2, 5])) { + endCase = 'spaced_out_hexachord'; + } + if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) { + endCase = 'very_spaced_out_hexachord'; + } + break; + default: + break; + } + let groupMember; + let column; + // If the group contains seven members or more, use ascending parallel lines + // of accidentals, using as few columns as possible while avoiding collisions. + if (groupLength >= 7) { + // First, determine how many columns to use: + let patternLength = 2; + let collisionDetected = true; + while (collisionDetected === true) { + collisionDetected = false; + for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) { + if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) { + collisionDetected = true; + patternLength++; + break; + } + } + } + // Then, assign a column to each line of accidentals + for (groupMember = i; groupMember <= groupEnd; groupMember++) { + column = ((groupMember - i) % patternLength) + 1; + staveLineAccidentalLayoutMetrics[groupMember].column = column; + totalColumns = totalColumns > column ? totalColumns : column; + } + } + else { + // If the group contains fewer than seven members, use the layouts from + // the Tables.accidentalColumnsTable (See: tables.ts). + for (groupMember = i; groupMember <= groupEnd; groupMember++) { + column = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i]; + staveLineAccidentalLayoutMetrics[groupMember].column = column; + totalColumns = totalColumns > column ? totalColumns : column; + } + } + // Increment i to the last note that was set, so that if a lower set of notes + // does not conflict at all with this group, it can have its own classic shape. + i = groupEnd; + } + // ### Convert Columns to x_offsets + // + // This keeps columns aligned, even if they have different accidentals within them + // which sometimes results in a larger x_offset than is an accidental might need + // to preserve the symmetry of the accidental shape. + // + // Neither A.C. Vinci nor G. Read address this, and it typically only happens in + // music with complex chord clusters. + // + // TODO (?): Optionally allow closer compression of accidentals, instead of forcing + // parallel columns. + // track each column's max width, which will be used as initial shift of later columns: + const columnWidths = []; + const columnXOffsets = []; + for (let i = 0; i <= totalColumns; i++) { + columnWidths[i] = 0; + columnXOffsets[i] = 0; + } + columnWidths[0] = leftShift + maxExtraXSpaceNeeded; + columnXOffsets[0] = leftShift; + // Fill columnWidths with widest needed x-space; + // this is what keeps the columns parallel. + staveLineAccidentalLayoutMetrics.forEach((line) => { + if (line.width > columnWidths[line.column]) + columnWidths[line.column] = line.width; + }); + for (let i = 1; i < columnWidths.length; i++) { + // this column's offset = this column's width + previous column's offset + columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1]; + } + const totalShift = columnXOffsets[columnXOffsets.length - 1]; + // Set the xShift for each accidental according to column offsets: + let accCount = 0; + staveLineAccidentalLayoutMetrics.forEach((line) => { + let lineWidth = 0; + const lastAccOnLine = accCount + line.numAcc; + // handle all of the accidentals on a given line: + for (accCount; accCount < lastAccOnLine; accCount++) { + const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded; + accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift); + // keep track of the width of accidentals we've added so far, so that when + // we loop, we add space for them. + lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing; + L('Line, accCount, shift: ', line.line, accCount, xShift); + } + }); + // update the overall layout with the full width of the accidental shapes: + state.left_shift = totalShift + additionalPadding; + } + /** Helper function to determine whether two lines of accidentals collide vertically */ + static checkCollision(line1, line2) { + let clearance = line2.line - line1.line; + let clearanceRequired = 3; + // But less clearance is required for certain accidentals: b, bb and ##. + if (clearance > 0) { + // then line 2 is on top + clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0; + if (line1.dblSharpLine) + clearance -= 0.5; + } + else { + // line 1 is on top + clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0; + if (line2.dblSharpLine) + clearance -= 0.5; + } + const collision = Math.abs(clearance) < clearanceRequired; + L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision); + return collision; + } + /** + * Use this method to automatically apply accidentals to a set of `voices`. + * The accidentals will be remembered between all the voices provided. + * Optionally, you can also provide an initial `keySignature`. + */ + static applyAccidentals(voices, keySignature) { + const tickPositions = []; + const tickNoteMap = {}; + // Sort the tickables in each voice by their tick position in the voice. + voices.forEach((voice) => { + const tickPosition = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); + const tickable = voice.getTickables(); + tickable.forEach((t) => { + if (t.shouldIgnoreTicks()) + return; + const notesAtPosition = tickNoteMap[tickPosition.value()]; + if (!notesAtPosition) { + tickPositions.push(tickPosition.value()); + tickNoteMap[tickPosition.value()] = [t]; + } + else { + notesAtPosition.push(t); + } + tickPosition.add(t.getTicks()); + }); + }); + const music = new _music__WEBPACK_IMPORTED_MODULE_3__.Music(); + // Default key signature is C major. + if (!keySignature) + keySignature = 'C'; + // Get the scale map, which represents the current state of each pitch. + const scaleMapKey = music.createScaleMap(keySignature); + const scaleMap = {}; + tickPositions.forEach((tickPos) => { + const tickables = tickNoteMap[tickPos]; + // Array to store all pitches that modified accidental states + // at this tick position + const modifiedPitches = []; + const processNote = (t) => { + // Only StaveNote implements .addModifier(), which is used below. + if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t) || t.isRest() || t.shouldIgnoreTicks()) { + return; + } + // Go through each key and determine if an accidental should be applied. + const staveNote = t; + staveNote.keys.forEach((keyString, keyIndex) => { + const key = music.getNoteParts(keyString.split('/')[0]); + const octave = keyString.split('/')[1]; + // Force a natural for every key without an accidental + const accidentalString = key.accidental || 'n'; + const pitch = key.root + accidentalString; + // Determine if the current pitch has the same accidental + // as the scale state + if (!scaleMap[key.root + octave]) + scaleMap[key.root + octave] = scaleMapKey[key.root]; + const sameAccidental = scaleMap[key.root + octave] === pitch; + // Determine if an identical pitch in the chord already + // modified the accidental state + const previouslyModified = modifiedPitches.indexOf(keyString) > -1; + // Remove accidentals + staveNote.getModifiers().forEach((modifier, index) => { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isAccidental)(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) { + staveNote.getModifiers().splice(index, 1); + } + }); + // Add the accidental to the StaveNote + if (!sameAccidental || (sameAccidental && previouslyModified)) { + // Modify the scale map so that the root pitch has an + // updated state + scaleMap[key.root + octave] = pitch; + // Create the accidental + const accidental = new Accidental(accidentalString); + // Attach the accidental to the StaveNote + staveNote.addModifier(accidental, keyIndex); + // Add the pitch to list of pitches that modified accidentals + modifiedPitches.push(keyString); + } + }); + // process grace notes + staveNote.getModifiers().forEach((modifier) => { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNoteGroup)(modifier)) { + modifier.getGraceNotes().forEach(processNote); + } + }); + }; + tickables.forEach(processNote); + }); + } + /** + * Create accidental. + * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`. + * For example: `#`, `##`, `b`, `n`, etc. + */ + constructor(type) { + super(); + L('New accidental: ', type); + this.type = type; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; + this.render_options = { + // Font size for glyphs + font_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, + // Padding between accidental and parentheses on each side + parenLeftPadding: 2, + parenRightPadding: 2, + }; + this.accidental = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes(this.type); + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`); + // Cautionary accidentals have parentheses around them + this.cautionary = false; + this.reset(); + } + reset() { + const fontScale = this.render_options.font_scale; + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.accidental.code, fontScale); + this.glyph.setOriginX(1.0); + if (this.cautionary) { + this.parenLeft = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('{').code, fontScale); + this.parenRight = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('}').code, fontScale); + this.parenLeft.setOriginX(1.0); + this.parenRight.setOriginX(1.0); + } + } + /** Get width in pixels. */ + getWidth() { + if (this.cautionary) { + const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft); + const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight); + const parenWidth = parenLeft.getMetrics().width + + parenRight.getMetrics().width + + this.render_options.parenLeftPadding + + this.render_options.parenRightPadding; + return this.glyph.getMetrics().width + parenWidth; + } + else { + return this.glyph.getMetrics().width; + } + } + /** Attach this accidental to `note`, which must be a `StaveNote`. */ + setNote(note) { + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(note, 'ArgumentError', `Bad note value: ${note}`); + this.note = note; + // Accidentals attached to grace notes are rendered smaller. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNote)(note)) { + this.render_options.font_scale = 25; + this.reset(); + } + return this; + } + /** If called, draws parenthesis around accidental. */ + setAsCautionary() { + this.cautionary = true; + this.render_options.font_scale = 28; + this.reset(); + return this; + } + /** Render accidental onto canvas. */ + draw() { + const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + // Figure out the start `x` and `y` coordinates for note and index. + const start = note.getModifierStartXY(position, index); + let accX = start.x + x_shift; + const accY = start.y + y_shift; + L('Rendering: ', type, accX, accY); + if (!cautionary) { + glyph.render(ctx, accX, accY); + } + else { + const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft); + const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight); + // Render the accidental in parentheses. + parenRight.render(ctx, accX, accY); + accX -= parenRight.getMetrics().width; + accX -= parenRightPadding; + accX -= this.accidental.parenRightPaddingAdjustment; + glyph.render(ctx, accX, accY); + accX -= glyph.getMetrics().width; + accX -= parenLeftPadding; + parenLeft.render(ctx, accX, accY); + } + } +} +/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */ +Accidental.DEBUG = false; + + + +/***/ }), + +/***/ "./src/annotation.ts": +/*!***************************!*\ + !*** ./src/annotation.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Annotation": () => (/* binding */ Annotation), +/* harmony export */ "AnnotationHorizontalJustify": () => (/* binding */ AnnotationHorizontalJustify), +/* harmony export */ "AnnotationVerticalJustify": () => (/* binding */ AnnotationVerticalJustify) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Annotation.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Annotation', args); +} +var AnnotationHorizontalJustify; +(function (AnnotationHorizontalJustify) { + AnnotationHorizontalJustify[AnnotationHorizontalJustify["LEFT"] = 1] = "LEFT"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER"] = 2] = "CENTER"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["RIGHT"] = 3] = "RIGHT"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {})); +var AnnotationVerticalJustify; +(function (AnnotationVerticalJustify) { + AnnotationVerticalJustify[AnnotationVerticalJustify["TOP"] = 1] = "TOP"; + AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER"] = 2] = "CENTER"; + AnnotationVerticalJustify[AnnotationVerticalJustify["BOTTOM"] = 3] = "BOTTOM"; + AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {})); +/** + * Annotations are modifiers that can be attached to + * notes. + * + * See `tests/annotation_tests.ts` for usage examples. + */ +class Annotation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + /** Annotations category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Annotation; + } + // Use the same padding for annotations as note head so the + // words don't run into each other. + static get minAnnotationPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** Arrange annotations within a `ModifierContext` */ + static format(annotations, state) { + if (!annotations || annotations.length === 0) + return false; + let leftWidth = 0; + let rightWidth = 0; + let maxLeftGlyphWidth = 0; + let maxRightGlyphWidth = 0; + for (let i = 0; i < annotations.length; ++i) { + const annotation = annotations[i]; + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(annotation.textFont); + // Text height is expressed in fractional stave spaces. + const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + let verticalSpaceNeeded = textLines; + const note = annotation.checkAttachedNote(); + const glyphWidth = note.getGlyphProps().getWidth(); + // Get the text width from the font metrics. + const textWidth = textFormatter.getWidthForTextInPx(annotation.text); + if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) { + maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); + leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding; + } + else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { + maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); + rightWidth = Math.max(rightWidth, textWidth); + } + else { + leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding; + rightWidth = Math.max(rightWidth, textWidth / 2); + maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); + maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); + } + const stave = note.getStave(); + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + let stemHeight = 0; + let lines = 5; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + if (note.render_options.draw_stem) { + const stem = note.getStem(); + if (stem) { + stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + } + } + else { + stemHeight = 0; + } + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) { + const stem = note.getStem(); + if (stem && note.getNoteType() === 'n') { + stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + } + } + if (stave) { + lines = stave.getNumLines(); + } + if (annotation.verticalJustification === this.VerticalJustify.TOP) { + let noteLine = note.getLineNumber(true); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + noteLine = lines - (note.leastString() - 0.5); + } + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + noteLine += stemHeight; + } + const curTop = noteLine + state.top_text_line + 0.5; + if (curTop < lines) { + annotation.setTextLine(lines - noteLine); + verticalSpaceNeeded += lines - noteLine; + state.top_text_line = verticalSpaceNeeded; + } + else { + annotation.setTextLine(state.top_text_line); + state.top_text_line += verticalSpaceNeeded; + } + } + else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) { + let noteLine = lines - note.getLineNumber(); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + noteLine = note.greatestString() - 1; + } + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + noteLine += stemHeight; + } + const curBottom = noteLine + state.text_line + 1; + if (curBottom < lines) { + annotation.setTextLine(lines - curBottom); + verticalSpaceNeeded += lines - curBottom; + state.text_line = verticalSpaceNeeded; + } + else { + annotation.setTextLine(state.text_line); + state.text_line += verticalSpaceNeeded; + } + } + else { + annotation.setTextLine(state.text_line); + } + } + const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); + const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); + state.left_shift += leftOverlap; + state.right_shift += rightOverlap; + return true; + } + /** + * Annotations inherit from `Modifier` and is positioned correctly when + * in a `ModifierContext`. + * Create a new `Annotation` with the string `text`. + */ + constructor(text) { + super(); + this.text = text; + this.horizontalJustification = AnnotationHorizontalJustify.CENTER; + // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM. + // this is to support legacy application that may expect this. + this.verticalJustification = AnnotationVerticalJustify.TOP; + this.resetFont(); + // The default width is calculated from the text. + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.textWidth(text)); + } + /** + * Set vertical position of text (above or below stave). + * @param just value in `AnnotationVerticalJustify`. + */ + setVerticalJustification(just) { + this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just; + return this; + } + /** + * Get horizontal justification. + */ + getJustification() { + return this.horizontalJustification; + } + /** + * Set horizontal justification. + * @param justification value in `Annotation.Justify`. + */ + setJustification(just) { + this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just; + return this; + } + /** Render text beside the note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE, this.index); + this.setRendered(); + // We're changing context parameters. Save current state. + ctx.save(); + // Apply style might not save context, if this.style is undefined, so we + // still need to save context state just before this, since we will be + // changing ctx parameters below. + this.applyStyle(); + ctx.openGroup('annotation', this.getAttribute('id')); + ctx.setFont(this.textFont); + const text_width = textFormatter.getWidthForTextInPx(this.text); + const text_height = textFormatter.getYForStringInPx(this.text).height; + let x; + let y; + if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) { + x = start.x; + } + else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { + x = start.x - text_width; + } + else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) { + x = start.x - text_width / 2; + } /* CENTER_STEM */ + else { + x = note.getStemX() - text_width / 2; + } + let stem_ext = {}; + let spacing = 0; + const has_stem = note.hasStem(); + const stave = note.checkStave(); + // The position of the text varies based on whether or not the note + // has a stem. + if (has_stem) { + stem_ext = note.checkStem().getExtents(); + spacing = stave.getSpacingBetweenLines(); + } + if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) { + // Use the largest (lowest) Y value + const ys = note.getYs(); + y = ys.reduce((a, b) => (a > b ? a : b)); + y += (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE + text_height; + if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line); + } + } + else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) { + const yt = note.getYForTopText(this.text_line) - 1; + const yb = stave.getYForBottomText(this.text_line); + y = yt + (yb - yt) / 2 + text_height / 2; + } + else if (this.verticalJustification === AnnotationVerticalJustify.TOP) { + const topY = Math.min(...note.getYs()); + y = topY - (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + // If the stem is above the stave already, go with default line width vs. actual + // since the lines between don't really matter. + spacing = stem_ext.topY < stave.getTopLineTopY() ? _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE : spacing; + y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1)); + } + } /* CENTER_STEM */ + else { + const extents = note.getStemExtents(); + y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2; + } + L('Rendering annotation: ', this.text, x, y); + ctx.fillText(this.text, x, y); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */ +Annotation.DEBUG = false; +Annotation.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); +/** Text annotations can be positioned and justified relative to the note. */ +Annotation.HorizontalJustify = AnnotationHorizontalJustify; +Annotation.HorizontalJustifyString = { + left: AnnotationHorizontalJustify.LEFT, + right: AnnotationHorizontalJustify.RIGHT, + center: AnnotationHorizontalJustify.CENTER, + centerStem: AnnotationHorizontalJustify.CENTER_STEM, +}; +Annotation.VerticalJustify = AnnotationVerticalJustify; +Annotation.VerticalJustifyString = { + above: AnnotationVerticalJustify.TOP, + top: AnnotationVerticalJustify.TOP, + below: AnnotationVerticalJustify.BOTTOM, + bottom: AnnotationVerticalJustify.BOTTOM, + center: AnnotationVerticalJustify.CENTER, + centerStem: AnnotationVerticalJustify.CENTER_STEM, +}; + + + +/***/ }), + +/***/ "./src/articulation.ts": +/*!*****************************!*\ + !*** ./src/articulation.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Articulation": () => (/* binding */ Articulation) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Larry Kuhns. +// MIT License + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Articulation.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.Articulation', args); +} +const { ABOVE, BELOW } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position; +function roundToNearestHalf(mathFn, value) { + return mathFn(value / 0.5) * 0.5; +} +// This includes both staff and ledger lines +function isWithinLines(line, position) { + return position === ABOVE ? line <= 5 : line >= 1; +} +function getRoundingFunction(line, position) { + if (isWithinLines(line, position)) { + if (position === ABOVE) { + return Math.ceil; + } + else { + return Math.floor; + } + } + else { + return Math.round; + } +} +function snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) { + // Initially, snap to nearest staff line or space + const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line); + const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position); + const onStaffLine = snappedLine % 1 === 0; + if (canSnapToStaffSpace && onStaffLine) { + const HALF_STAFF_SPACE = 0.5; + return snappedLine + HALF_STAFF_SPACE * -offsetDirection; + } + else { + return snappedLine; + } +} +// Helper function for checking if a Note object is either a StaveNote or a GraceNote. +const isStaveOrGraceNote = (note) => (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note) || (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note); +function getTopY(note, textLine) { + const stemDirection = note.getStemDirection(); + const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); + if (isStaveOrGraceNote(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return stemTipY; + } + else { + return stemBaseY; + } + } + else { + return Math.min(...note.getYs()); + } + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return stemTipY; + } + else { + return note.checkStave().getYForTopText(textLine); + } + } + else { + return note.checkStave().getYForTopText(textLine); + } + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); + } +} +function getBottomY(note, textLine) { + const stemDirection = note.getStemDirection(); + const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); + if (isStaveOrGraceNote(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return stemBaseY; + } + else { + return stemTipY; + } + } + else { + return Math.max(...note.getYs()); + } + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + if (note.hasStem()) { + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + return note.checkStave().getYForBottomText(textLine); + } + else { + return stemTipY; + } + } + else { + return note.checkStave().getYForBottomText(textLine); + } + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); + } +} +/** + * Get the initial offset of the articulation from the y value of the starting position. + * This is required because the top/bottom text positions already have spacing applied to + * provide a "visually pleasant" default position. However the y values provided from + * the stavenote's top/bottom do *not* have any pre-applied spacing. This function + * normalizes this asymmetry. + * @param note + * @param position + * @returns + */ +function getInitialOffset(note, position) { + const isOnStemTip = (position === ABOVE && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) || + (position === BELOW && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN); + if (isStaveOrGraceNote(note)) { + if (note.hasStem() && isOnStemTip) { + return 0.5; + } + else { + // this amount is larger than the stem-tip offset because we start from + // the center of the notehead + return 1; + } + } + else { + if (note.hasStem() && isOnStemTip) { + return 1; + } + else { + return 0; + } + } +} +/** + * Articulations and Accents are modifiers that can be + * attached to notes. The complete list of articulations is available in + * `tables.ts` under `Vex.Flow.articulationCodes`. + * + * See `tests/articulation_tests.ts` for usage examples. + */ +class Articulation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + /** Articulations category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Articulation; + } + /** + * FIXME: + * Most of the complex formatting logic (ie: snapping to space) is + * actually done in .render(). But that logic belongs in this method. + * + * Unfortunately, this isn't possible because, by this point, stem lengths + * have not yet been finalized. Finalized stem lengths are required to determine the + * initial position of any stem-side articulation. + * + * This indicates that all objects should have their stave set before being + * formatted. It can't be an optional if you want accurate vertical positioning. + * Consistently positioned articulations that play nice with other modifiers + * won't be possible until we stop relying on render-time formatting. + * + * Ideally, when this function has completed, the vertical articulation positions + * should be ready to render without further adjustment. But the current state + * is far from this ideal. + */ + static format(articulations, state) { + if (!articulations || articulations.length === 0) + return false; + const margin = 0.5; + let maxGlyphWidth = 0; + const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(articulation.glyph.getMetrics().height) / 10 + margin); + articulations.forEach((articulation) => { + const note = articulation.checkAttachedNote(); + maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth); + let lines = 5; + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + let stemHeight = 0; + // Decide if we need to consider beam direction in placement. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStemmableNote)(note)) { + const stem = note.getStem(); + if (stem) { + stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; + } + } + const stave = note.getStave(); + if (stave) { + lines = stave.getNumLines(); + } + if (articulation.getPosition() === ABOVE) { + let noteLine = note.getLineNumber(true); + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { + noteLine += stemHeight; + } + let increment = getIncrement(articulation, state.top_text_line, ABOVE); + const curTop = noteLine + state.top_text_line + 0.5; + // If articulation must be above stave, add lines between note and stave top + if (!articulation.articulation.between_lines && curTop < lines) { + increment += lines - curTop; + } + articulation.setTextLine(state.top_text_line); + state.top_text_line += increment; + } + else if (articulation.getPosition() === BELOW) { + let noteLine = Math.max(lines - note.getLineNumber(), 0); + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + noteLine += stemHeight; + } + let increment = getIncrement(articulation, state.text_line, BELOW); + const curBottom = noteLine + state.text_line + 0.5; + // if articulation must be below stave, add lines from note to stave bottom + if (!articulation.articulation.between_lines && curBottom < lines) { + increment += lines - curBottom; + } + articulation.setTextLine(state.text_line); + state.text_line += increment; + } + }); + const width = articulations + .map((articulation) => articulation.getWidth()) + .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth)); + const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0)); + state.left_shift += overlap / 2; + state.right_shift += overlap / 2; + return true; + } + static easyScoreHook({ articulations }, note, builder) { + if (!articulations) + return; + const articNameToCode = { + staccato: 'a.', + tenuto: 'a-', + accent: 'a>', + }; + articulations + .split(',') + .map((articString) => articString.trim().split('.')) + .map(([name, position]) => { + const artic = { type: articNameToCode[name] }; + if (position) + artic.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.PositionString[position]; + return builder.getFactory().Articulation(artic); + }) + .map((artic) => note.addModifier(artic, 0)); + } + /** + * Create a new articulation. + * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code. + * + * Notes (by default): + * - Glyph codes ending with 'Above' will be positioned ABOVE + * - Glyph codes ending with 'Below' will be positioned BELOW + */ + constructor(type) { + super(); + this.type = type; + this.position = ABOVE; + this.render_options = { + font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, + }; + this.reset(); + } + reset() { + this.articulation = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.articulationCodes(this.type); + // Use type as glyph code, if not defined as articulation code + if (!this.articulation) { + this.articulation = { code: this.type, between_lines: false }; + if (this.type.endsWith('Above')) + this.position = ABOVE; + if (this.type.endsWith('Below')) + this.position = BELOW; + } + const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code; + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale); + (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`); + this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width)); + } + /** Set if articulation should be rendered between lines. */ + setBetweenLines(betweenLines = true) { + this.articulation.between_lines = betweenLines; + return this; + } + /** Render articulation in position next to note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const index = this.checkIndex(); + const { position, glyph, text_line: textLine } = this; + const canSitBetweenLines = this.articulation.between_lines; + const stave = note.checkStave(); + const staffSpace = stave.getSpacingBetweenLines(); + const isTab = (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note); + // Articulations are centered over/under the note head. + const { x } = note.getModifierStartXY(position, index); + const shouldSitOutsideStaff = !canSitBetweenLines || isTab; + const initialOffset = getInitialOffset(note, position); + const padding = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0); + let y = { + [ABOVE]: () => { + glyph.setOrigin(0.5, 1); + const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace; + return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y; + }, + [BELOW]: () => { + glyph.setOrigin(0.5, 0); + const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace; + return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y; + }, + }[position](); + if (!isTab) { + const offsetDirection = position === ABOVE ? -1 : +1; + const noteLine = note.getKeyProps()[index].line; + const distanceFromNote = (note.getYs()[index] - y) / staffSpace; + const articLine = distanceFromNote + Number(noteLine); + const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection); + if (isWithinLines(snappedLine, position)) + glyph.setOrigin(0.5, 0.5); + y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection; + } + L(`Rendering articulation at (x: ${x}, y: ${y})`); + glyph.render(ctx, x, y); + } +} +/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */ +Articulation.DEBUG = false; +Articulation.INITIAL_OFFSET = -0.5; + + + +/***/ }), + +/***/ "./src/barnote.ts": +/*!************************!*\ + !*** ./src/barnote.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BarNote": () => (/* binding */ BarNote) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + +// eslint-disable-next-line +function L(...args) { + if (BarNote.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.BarNote', args); +} +/** + * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can + * be added to a voice and rendered in the middle of a stave. Since it has no + * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter. + * + * See `tests/barnote_tests.ts` for usage examples. + */ +class BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.BarNote; + } + constructor(type = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.SINGLE) { + super({ duration: 'b' }); + this.metrics = { + widths: {}, + }; + const TYPE = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType; + this.metrics.widths = { + [TYPE.SINGLE]: 8, + [TYPE.DOUBLE]: 12, + [TYPE.END]: 15, + [TYPE.REPEAT_BEGIN]: 14, + [TYPE.REPEAT_END]: 14, + [TYPE.REPEAT_BOTH]: 18, + [TYPE.NONE]: 0, + }; + // Tell the formatter that bar notes have no duration. + this.ignore_ticks = true; + this.setType(type); + } + /** Get the type of bar note.*/ + getType() { + return this.type; + } + /** Set the type of bar note. */ + setType(type) { + this.type = typeof type === 'string' ? _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.typeString[type] : type; + // Set width to width of relevant `Barline`. + this.setWidth(this.metrics.widths[this.type]); + return this; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + /** Overridden to ignore. */ + preFormat() { + this.preFormatted = true; + return this; + } + /** Render note to stave. */ + draw() { + const ctx = this.checkContext(); + L('Rendering bar line at: ', this.getAbsoluteX()); + this.applyStyle(ctx); + const barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline(this.type); + barline.setX(this.getAbsoluteX()); + barline.draw(this.checkStave()); + this.restoreStyle(ctx); + this.setRendered(); + } +} +/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */ +BarNote.DEBUG = false; + + + +/***/ }), + +/***/ "./src/beam.ts": +/*!*********************!*\ + !*** ./src/beam.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BEAM_BOTH": () => (/* binding */ BEAM_BOTH), +/* harmony export */ "BEAM_LEFT": () => (/* binding */ BEAM_LEFT), +/* harmony export */ "BEAM_RIGHT": () => (/* binding */ BEAM_RIGHT), +/* harmony export */ "Beam": () => (/* binding */ Beam) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +function calculateStemDirection(notes) { + let lineSum = 0; + notes.forEach((note) => { + if (note.keyProps) { + note.keyProps.forEach((keyProp) => { + lineSum += keyProp.line - 3; + }); + } + }); + if (lineSum >= 0) { + return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; + } + return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; +} +function getStemSlope(firstNote, lastNote) { + const firstStemTipY = firstNote.getStemExtents().topY; + const firstStemX = firstNote.getStemX(); + const lastStemTipY = lastNote.getStemExtents().topY; + const lastStemX = lastNote.getStemX(); + return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX); +} +const BEAM_LEFT = 'L'; +const BEAM_RIGHT = 'R'; +const BEAM_BOTH = 'B'; +/** `Beams` span over a set of `StemmableNotes`. */ +class Beam extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Beam; + } + /** Get the direction of the beam */ + getStemDirection() { + return this.stem_direction; + } + /** + * Get the default beam groups for a provided time signature. + * Attempt to guess if the time signature is not found in table. + * Currently this is fairly naive. + */ + static getDefaultBeamGroups(time_sig) { + if (!time_sig || time_sig === 'c') { + time_sig = '4/4'; + } + const defaults = { + '1/2': ['1/2'], + '2/2': ['1/2'], + '3/2': ['1/2'], + '4/2': ['1/2'], + '1/4': ['1/4'], + '2/4': ['1/4'], + '3/4': ['1/4'], + '4/4': ['1/4'], + '1/8': ['1/8'], + '2/8': ['2/8'], + '3/8': ['3/8'], + '4/8': ['2/8'], + '1/16': ['1/16'], + '2/16': ['2/16'], + '3/16': ['3/16'], + '4/16': ['2/16'], + }; + const groups = defaults[time_sig]; + if (groups === undefined) { + // If no beam groups found, naively determine + // the beam groupings from the time signature + const beatTotal = parseInt(time_sig.split('/')[0], 10); + const beatValue = parseInt(time_sig.split('/')[1], 10); + const tripleMeter = beatTotal % 3 === 0; + if (tripleMeter) { + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(3, beatValue)]; + } + else if (beatValue > 4) { + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, beatValue)]; + } + else if (beatValue <= 4) { + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, beatValue)]; + } + } + else { + return groups.map((group) => new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction().parse(group)); + } + return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4)]; + } + /** + * A helper function to automatically build basic beams for a voice. For more + * complex auto-beaming use `Beam.generateBeams()`. + * @param voice the voice to generate the beams for + * @param stem_direction a stem direction to apply to the entire voice + * @param groups an array of `Fraction` representing beat groupings for the beam + */ + static applyAndGetBeams(voice, stem_direction, groups) { + return Beam.generateBeams(voice.getTickables(), { groups, stem_direction }); + } + /** + * A helper function to autimatically build beams for a voice with + * configuration options. + * + * Example configuration object: + * + * ``` + * config = { + * groups: [new Vex.Flow.Fraction(2, 8)], + * stem_direction: -1, + * beam_rests: true, + * beam_middle_only: true, + * show_stemlets: false + * }; + * ``` + * @param notes an array of notes to create the beams for + * @param config the configuration object + * @param config.stem_direction set to apply the same direction to all notes + * @param config.beam_rests set to `true` to include rests in the beams + * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat + * @param config.show_stemlets set to `true` to draw stemlets for rests + * @param config.maintain_stem_directions set to `true` to not apply new stem directions + * @param config.groups array of `Fractions` that represent the beat structure to beam the notes + * + */ + static generateBeams(notes, config = {}) { + if (!config.groups || !config.groups.length) { + config.groups = [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 8)]; + } + // Convert beam groups to tick amounts + const tickGroups = config.groups.map((group) => { + if (!group.multiply) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions'); + } + return group.clone().multiply(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RESOLUTION, 1); + }); + const unprocessedNotes = notes; + let currentTickGroup = 0; + let noteGroups = []; + let currentGroup = []; + function getTotalTicks(vf_notes) { + return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1)); + } + function nextTickGroup() { + if (tickGroups.length - 1 > currentTickGroup) { + currentTickGroup += 1; + } + else { + currentTickGroup = 0; + } + } + function createGroups() { + let nextGroup = []; + // number of ticks in current group + let currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); + unprocessedNotes.forEach((unprocessedNote) => { + nextGroup = []; + if (unprocessedNote.shouldIgnoreTicks()) { + noteGroups.push(currentGroup); + currentGroup = nextGroup; + return; // Ignore untickables (like bar notes) + } + currentGroup.push(unprocessedNote); + const ticksPerGroup = tickGroups[currentTickGroup].clone(); + const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks); + // Double the amount of ticks in a group, if it's an unbeamable tuplet + const unbeamable = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(unprocessedNote.getDuration()) < 8; + if (unbeamable && unprocessedNote.getTuplet()) { + ticksPerGroup.numerator *= 2; + } + // If the note that was just added overflows the group tick total + if (totalTicks.greaterThan(ticksPerGroup)) { + // If the overflow note can be beamed, start the next group + // with it. Unbeamable notes leave the group overflowed. + if (!unbeamable) { + const note = currentGroup.pop(); + if (note) + nextGroup.push(note); + } + noteGroups.push(currentGroup); + // We have overflown, so we're going to next tick group. As we might have + // overflown by more than 1 group, we need to go forward as many times as + // needed, decreasing currentGroupTotalTicks by as many ticks as there are + // in current groups as we go forward. + do { + currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]); + nextTickGroup(); + } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup])); + currentGroup = nextGroup; + } + else if (totalTicks.equals(ticksPerGroup)) { + noteGroups.push(currentGroup); + currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); + currentGroup = nextGroup; + nextTickGroup(); + } + }); + // Adds any remainder notes beam + if (currentGroup.length > 0) { + noteGroups.push(currentGroup); + } + } + function getBeamGroups() { + return noteGroups.filter((group) => { + if (group.length > 1) { + let beamable = true; + group.forEach((note) => { + if (note.getIntrinsicTicks() >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) { + beamable = false; + } + }); + return beamable; + } + return false; + }); + } + // Splits up groups by Rest + function sanitizeGroups() { + const sanitizedGroups = []; + noteGroups.forEach((group) => { + let tempGroup = []; + group.forEach((note, index, group) => { + const isFirstOrLast = index === 0 || index === group.length - 1; + const prevNote = group[index - 1]; + const breaksOnEachRest = !config.beam_rests && note.isRest(); + const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast; + let breakOnStemChange = false; + if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) { + const prevDirection = prevNote.getStemDirection(); + const currentDirection = note.getStemDirection(); + breakOnStemChange = currentDirection !== prevDirection; + } + const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8; + // Determine if the group should be broken at this note + const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration; + if (shouldBreak) { + // Add current group + if (tempGroup.length > 0) { + sanitizedGroups.push(tempGroup); + } + // Start a new group. Include the current note if the group + // was broken up by stem direction, as that note needs to start + // the next group of notes + tempGroup = breakOnStemChange ? [note] : []; + } + else { + // Add note to group + tempGroup.push(note); + } + }); + // If there is a remaining group, add it as well + if (tempGroup.length > 0) { + sanitizedGroups.push(tempGroup); + } + }); + noteGroups = sanitizedGroups; + } + function formatStems() { + noteGroups.forEach((group) => { + let stemDirection; + if (config.maintain_stem_directions) { + const note = findFirstNote(group); + stemDirection = note ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + } + else { + if (config.stem_direction) { + stemDirection = config.stem_direction; + } + else { + stemDirection = calculateStemDirection(group); + } + } + applyStemDirection(group, stemDirection); + }); + } + function findFirstNote(group) { + for (let i = 0; i < group.length; i++) { + const note = group[i]; + if (!note.isRest()) { + return note; + } + } + return false; + } + function applyStemDirection(group, direction) { + group.forEach((note) => { + note.setStemDirection(direction); + }); + } + // Get all of the tuplets in all of the note groups + function getTuplets() { + const uniqueTuplets = []; + // Go through all of the note groups and inspect for tuplets + noteGroups.forEach((group) => { + let tuplet; + group.forEach((note) => { + const noteTuplet = note.getTuplet(); + if (noteTuplet && tuplet !== noteTuplet) { + tuplet = noteTuplet; + uniqueTuplets.push(tuplet); + } + }); + }); + return uniqueTuplets; + } + // Using closures to store the variables throughout the various functions + // IMO Keeps it this process lot cleaner - but not super consistent with + // the rest of the API's style - Silverwolf90 (Cyril) + createGroups(); + sanitizeGroups(); + formatStems(); + // Get the notes to be beamed + const beamedNoteGroups = getBeamGroups(); + // Get the tuplets in order to format them accurately + const allTuplets = getTuplets(); + // Create a Vex.Flow.Beam from each group of notes to be beamed + const beams = []; + beamedNoteGroups.forEach((group) => { + const beam = new Beam(group); + if (config.show_stemlets) { + beam.render_options.show_stemlets = true; + } + if (config.secondary_breaks) { + beam.render_options.secondary_break_ticks = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(config.secondary_breaks); + } + if (config.flat_beams === true) { + beam.render_options.flat_beams = true; + beam.render_options.flat_beam_offset = config.flat_beam_offset; + } + beams.push(beam); + }); + // Reformat tuplets + allTuplets.forEach((tuplet) => { + // Set the tuplet location based on the stem direction + const direction = tuplet.notes[0].stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.BOTTOM : _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.TOP; + tuplet.setTupletLocation(direction); + // If any of the notes in the tuplet are not beamed, draw a bracket. + let bracketed = false; + for (let i = 0; i < tuplet.notes.length; i++) { + const note = tuplet.notes[i]; + if (!note.hasBeam()) { + bracketed = true; + break; + } + } + tuplet.setBracketed(bracketed); + }); + return beams; + } + constructor(notes, auto_stem = false) { + super(); + this.slope = 0; + this.y_shift = 0; + /** + * Overrides to default beam directions for secondary-level beams that do not + * connect to any other note. See further explanation at + * `setPartialBeamSideAt` + */ + this.forcedPartialDirections = {}; + if (!notes || notes.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for beam.'); + } + if (notes.length === 1) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Too few notes for beam.'); + } + // Validate beam line, direction and ticks. + this.ticks = notes[0].getIntrinsicTicks(); + if (this.ticks >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.'); + } + let i; // shared iterator + let note; + this.stem_direction = notes[0].getStemDirection(); + let stem_direction = this.stem_direction; + // Figure out optimal stem direction based on given notes + if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(notes[0])) { + stem_direction = calculateStemDirection(notes); + } + else if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(notes[0])) { + // Auto Stem TabNotes + const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0); + stem_direction = stem_weight > -1 ? _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; + } + // Apply stem directions and attach beam to notes + for (i = 0; i < notes.length; ++i) { + note = notes[i]; + if (auto_stem) { + note.setStemDirection(stem_direction); + this.stem_direction = stem_direction; + } + note.setBeam(this); + } + this.postFormatted = false; + this.notes = notes; + this.beam_count = this.getBeamCount(); + this.break_on_indices = []; + this.render_options = { + beam_width: 5, + max_slope: 0.25, + min_slope: -0.25, + slope_iterations: 20, + slope_cost: 100, + show_stemlets: false, + stemlet_extension: 7, + partial_beam_length: 10, + flat_beams: false, + min_flat_beam_offset: 15, + }; + } + /** Get the notes in this beam. */ + getNotes() { + return this.notes; + } + /** Get the max number of beams in the set of notes. */ + getBeamCount() { + const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count); + const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max)); + return maxBeamCount; + } + /** Set which note `indices` to break the secondary beam at. */ + breakSecondaryAt(indices) { + this.break_on_indices = indices; + return this; + } + /** + * Forces the direction of a partial beam (a secondary-level beam that exists + * on one note only of the beam group). This is useful in rhythms such as 6/8 + * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the + * first sixteenth note can help imply whether the rhythm is to be felt as + * three groups of eighth notes (typical) or as two groups of three-sixteenths + * (less common): + * ``` + * ┌───┬──┬──┐ ┌──┬──┬──┐ + * │ ├─ │ ─┤ vs │ ─┤ │ ─┤ + * │ │ │ │ │ │ │ │ + * ``` + */ + setPartialBeamSideAt(noteIndex, side) { + this.forcedPartialDirections[noteIndex] = side; + return this; + } + /** + * Restore the default direction of a partial beam (a secondary-level beam + * that does not connect to any other notes). + */ + unsetPartialBeamSideAt(noteIndex) { + delete this.forcedPartialDirections[noteIndex]; + return this; + } + /** Return the y coordinate for linear function. */ + getSlopeY(x, first_x_px, first_y_px, slope) { + return first_y_px + (x - first_x_px) * slope; + } + /** Calculate the best possible slope for the provided notes. */ + calculateSlope() { + const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this; + const firstNote = notes[0]; + const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]); + const increment = (max_slope - min_slope) / slope_iterations; + let minCost = Number.MAX_VALUE; + let bestSlope = 0; + let yShift = 0; + // iterate through slope values to find best weighted fit + for (let slope = min_slope; slope <= max_slope; slope += increment) { + let totalStemExtension = 0; + let yShiftTemp = 0; + // iterate through notes, calculating y shift and stem extension + for (let i = 1; i < notes.length; ++i) { + const note = notes[i]; + if (note.hasStem() || note.isRest()) { + const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp; + const stemTipY = note.getStemExtents().topY; + // beam needs to be shifted up to accommodate note + if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) { + const diff = Math.abs(stemTipY - adjustedStemTipY); + yShiftTemp += diff * -stemDirection; + totalStemExtension += diff * i; + } + else { + // beam overshoots note, account for the difference + totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection; + } + } + } + // most engraving books suggest aiming for a slope about half the angle of the + // difference between the first and last notes' stem length; + const idealSlope = initialSlope / 2; + const distanceFromIdeal = Math.abs(idealSlope - slope); + // This tries to align most beams to something closer to the idealSlope, but + // doesn't go crazy. To disable, set this.render_options.slope_cost = 0 + const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension); + // update state when a more ideal slope is found + if (cost < minCost) { + minCost = cost; + bestSlope = slope; + yShift = yShiftTemp; + } + } + this.slope = bestSlope; + this.y_shift = yShift; + } + /** Calculate a slope and y-shift for flat beams. */ + calculateFlatSlope() { + const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this; + // If a flat beam offset has not yet been supplied or calculated, + // generate one based on the notes in this particular note group + let total = 0; + let extremeY = 0; // Store the highest or lowest note here + let extremeBeamCount = 0; // The beam count of the extreme note + let currentExtreme = 0; + for (let i = 0; i < notes.length; i++) { + // Total up all of the offsets so we can average them out later + const note = notes[i]; + const stemTipY = note.getStemExtents().topY; + total += stemTipY; + // Store the highest (stems-up) or lowest (stems-down) note so the + // offset can be adjusted in case the average isn't enough + if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && currentExtreme < stemTipY) { + currentExtreme = stemTipY; + extremeY = Math.max(...note.getYs()); + extremeBeamCount = note.getBeamCount(); + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) { + currentExtreme = stemTipY; + extremeY = Math.min(...note.getYs()); + extremeBeamCount = note.getBeamCount(); + } + } + // Average the offsets to try and come up with a reasonable one that + // works for all of the notes in the beam group. + let offset = total / notes.length; + // In case the average isn't long enough, add or subtract some more + // based on the highest or lowest note (again, based on the stem + // direction). This also takes into account the added height due to + // the width of the beams. + const beamWidth = beam_width * 1.5; + const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth; + const newOffset = extremeY + extremeTest * -stem_direction; + if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset < newOffset) { + offset = extremeY + extremeTest; + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset > newOffset) { + offset = extremeY - extremeTest; + } + if (!flat_beam_offset) { + // Set the offset for the group based on the calculations above. + this.render_options.flat_beam_offset = offset; + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset > flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset < flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + // for flat beams, the slope and y_shift are simply 0 + this.slope = 0; + this.y_shift = 0; + } + /** Return the Beam y offset. */ + getBeamYToDraw() { + const firstNote = this.notes[0]; + const firstStemTipY = firstNote.getStemExtents().topY; + let beamY = firstStemTipY; + // For flat beams, set the first and last Y to the offset, rather than + // using the note's stem extents. + if (this.render_options.flat_beams && this.render_options.flat_beam_offset) { + beamY = this.render_options.flat_beam_offset; + } + return beamY; + } + /** + * Create new stems for the notes in the beam, so that each stem + * extends into the beams. + */ + applyStemExtensions() { + const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this; + const firstNote = notes[0]; + const firstStemTipY = this.getBeamYToDraw(); + const firstStemX = firstNote.getStemX(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const stem = note.getStem(); + if (stem) { + const stemX = note.getStemX(); + const { topY: stemTipY } = note.getStemExtents(); + const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift; + const preBeamExtension = stem.getExtension(); + const beamExtension = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY; + // Determine necessary extension for cross-stave notes in the beam group + let crossStemExtension = 0; + if (note.getStemDirection() !== this.stem_direction) { + const beamCount = note.getGlyphProps().beam_count; + crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width; + /* This will be required if the partial beams are moved to the note side. + if (i > 0 && note.getGlyph().beam_count > 1) { + const prevBeamCount = this.notes[i - 1].getGlyph().beam_count; + const beamDiff = Math.abs(prevBeamCount - beamCount); + if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5); + } + */ + } + stem.setExtension(preBeamExtension + beamExtension + crossStemExtension); + stem.adjustHeightForBeam(); + if (note.isRest() && show_stemlets) { + const beamWidth = beam_width; + const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth; + stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension); + } + } + } + } + /** Return upper level beam direction. */ + lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) { + if (duration === '4') { + return BEAM_LEFT; + } + const forcedBeamDirection = this.forcedPartialDirections[noteIndex]; + if (forcedBeamDirection) + return forcedBeamDirection; + const lookup_duration = `${_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(duration) / 2}`; + const prev_note_gets_beam = prev_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); + const next_note_gets_beam = next_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); + const note_gets_beam = tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); + if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { + return BEAM_BOTH; + } + else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) { + return BEAM_LEFT; + } + else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { + return BEAM_RIGHT; + } + return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex); + } + /** Get the x coordinates for the beam lines of specific `duration`. */ + getBeamLines(duration) { + const tick_of_duration = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(duration); + let beam_started = false; + const beam_lines = []; + let current_beam = undefined; + const partial_beam_length = this.render_options.partial_beam_length; + let previous_should_break = false; + let tick_tally = 0; + for (let i = 0; i < this.notes.length; ++i) { + const note = this.notes[i]; + // See if we need to break secondary beams on this note. + const ticks = note.getTicks().value(); + tick_tally += ticks; + let should_break = false; + // 8th note beams are always drawn. + if (parseInt(duration, 10) >= 8) { + // First, check to see if any indices were set up through breakSecondaryAt() + should_break = this.break_on_indices.indexOf(i) !== -1; + // If the secondary breaks were auto-configured in the render options, + // handle that as well. + if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) { + tick_tally = 0; + should_break = true; + } + } + const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration; + const stem_x = note.getStemX() - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.WIDTH / 2; + // Check to see if the next note in the group will get a beam at this + // level. This will help to inform the partial beam logic below. + const prev_note = this.notes[i - 1]; + const next_note = this.notes[i + 1]; + const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration; + const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration; + const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; + // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; + if (note_gets_beam) { + // This note gets a beam at the current level + if (beam_started) { + // We're currently in the middle of a beam. Just continue it on to + // the stem X of the current note. + current_beam = beam_lines[beam_lines.length - 1]; + current_beam.end = stem_x; + // If a secondary beam break is set up, end the beam right now. + if (should_break) { + beam_started = false; + if (next_note && !next_note_gets_beam && current_beam.end === undefined) { + // This note gets a beam,.but the next one does not. This means + // we need a partial pointing right. + current_beam.end = current_beam.start - partial_beam_length; + } + } + } + else { + // No beam started yet. Start a new one. + current_beam = { start: stem_x, end: undefined }; + beam_started = true; + if (beam_alone) { + // previous and next beam exists and does not get a beam but current gets it. + const prev_tick = prev_note.getIntrinsicTicks(); + const next_tick = next_note.getIntrinsicTicks(); + const tick = note.getIntrinsicTicks(); + const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i); + if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) { + current_beam.end = current_beam.start - partial_beam_length; + } + else { + current_beam.end = current_beam.start + partial_beam_length; + } + } + else if (!next_note_gets_beam) { + // The next note doesn't get a beam. Draw a partial. + if ((previous_should_break || i === 0) && next_note) { + // This is the first note (but not the last one), or it is + // following a secondary break. Draw a partial to the right. + current_beam.end = current_beam.start + partial_beam_length; + } + else { + // By default, draw a partial to the left. + current_beam.end = current_beam.start - partial_beam_length; + } + } + else if (should_break) { + // This note should have a secondary break after it. Even though + // we just started a beam, it needs to end immediately. + current_beam.end = current_beam.start - partial_beam_length; + beam_started = false; + } + beam_lines.push(current_beam); + } + } + else { + // The current note does not get a beam. + beam_started = false; + } + // Store the secondary break flag to inform the partial beam logic in + // the next iteration of the loop. + previous_should_break = should_break; + } + // Add a partial beam pointing left if this is the last note in the group + const last_beam = beam_lines[beam_lines.length - 1]; + if (last_beam && last_beam.end === undefined) { + last_beam.end = last_beam.start - partial_beam_length; + } + return beam_lines; + } + /** Render the stems for each note. */ + drawStems(ctx) { + this.notes.forEach((note) => { + const stem = note.getStem(); + if (stem) { + const stem_x = note.getStemX(); + stem.setNoteHeadXBounds(stem_x, stem_x); + stem.setContext(ctx).draw(); + } + }, this); + } + // Render the beam lines + drawBeamLines(ctx) { + const valid_beam_durations = ['4', '8', '16', '32', '64']; + const firstNote = this.notes[0]; + let beamY = this.getBeamYToDraw(); + const firstStemX = firstNote.getStemX(); + const beamThickness = this.render_options.beam_width * this.stem_direction; + // Draw the beams. + for (let i = 0; i < valid_beam_durations.length; ++i) { + const duration = valid_beam_durations[i]; + const beamLines = this.getBeamLines(duration); + for (let j = 0; j < beamLines.length; ++j) { + const beam_line = beamLines[j]; + const startBeamX = beam_line.start; + const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope); + const lastBeamX = beam_line.end; + if (lastBeamX) { + const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope); + ctx.beginPath(); + ctx.moveTo(startBeamX, startBeamY); + ctx.lineTo(startBeamX, startBeamY + beamThickness); + ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness); + ctx.lineTo(lastBeamX + 1, lastBeamY); + ctx.closePath(); + ctx.fill(); + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoLastBeamX', 'lastBeamX undefined.'); + } + } + beamY += beamThickness * 1.5; + } + } + /** Pre-format the beam. */ + preFormat() { + return this; + } + /** + * Post-format the beam. This can only be called after + * the notes in the beam have both `x` and `y` values. ie: they've + * been formatted and have staves. + */ + postFormat() { + if (this.postFormatted) + return; + // Calculate a smart slope if we're not forcing the beams to be flat. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(this.notes[0]) || this.render_options.flat_beams) { + this.calculateFlatSlope(); + } + else { + this.calculateSlope(); + } + this.applyStemExtensions(); + this.postFormatted = true; + } + /** Render the beam to the canvas context */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + if (this.unbeamable) + return; + if (!this.postFormatted) { + this.postFormat(); + } + this.drawStems(ctx); + this.applyStyle(); + ctx.openGroup('beam', this.getAttribute('id')); + this.drawBeamLines(ctx); + ctx.closeGroup(); + this.restoreStyle(); + } +} + + +/***/ }), + +/***/ "./src/bend.ts": +/*!*********************!*\ + !*** ./src/bend.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Bend": () => (/* binding */ Bend) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +/** Bend implements tablature bends. */ +class Bend extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Bend; + } + static get UP() { + return 0; + } + static get DOWN() { + return 1; + } + // Arrange bends in `ModifierContext` + static format(bends, state) { + if (!bends || bends.length === 0) + return false; + let last_width = 0; + // Format Bends + for (let i = 0; i < bends.length; ++i) { + const bend = bends[i]; + const note = bend.checkAttachedNote(); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isTabNote)(note)) { + const stringPos = note.leastString() - 1; + if (state.top_text_line < stringPos) { + state.top_text_line = stringPos; + } + } + bend.setXShift(last_width); + last_width = bend.getWidth(); + bend.setTextLine(state.top_text_line); + } + state.right_shift += last_width; + state.top_text_line += 1; + return true; + } + /** + * Example of a phrase: + * ``` + * [{ + * type: UP, + * text: "whole" + * width: 8; + * }, + * { + * type: DOWN, + * text: "whole" + * width: 8; + * }, + * { + * type: UP, + * text: "half" + * width: 8; + * }, + * { + * type: UP, + * text: "whole" + * width: 8; + * }, + * { + * type: DOWN, + * text: "1 1/2" + * width: 8; + * }] + * ``` + * @param text text for bend ("Full", "Half", etc.) (DEPRECATED) + * @param release if true, render a release. (DEPRECATED) + * @param phrase if set, ignore "text" and "release", and use the more sophisticated phrase specified + */ + constructor(text, release = false, phrase) { + super(); + this.text = text; + this.x_shift = 0; + this.release = release; + this.tap = ''; + this.resetFont(); + this.render_options = { + line_width: 1.5, + line_style: '#777777', + bend_width: 8, + release_width: 8, + }; + if (phrase) { + this.phrase = phrase; + } + else { + // Backward compatibility + this.phrase = [{ type: Bend.UP, text: this.text }]; + if (this.release) + this.phrase.push({ type: Bend.DOWN, text: '' }); + } + this.updateWidth(); + } + /** Set horizontal shift in pixels. */ + setXShift(value) { + this.x_shift = value; + this.updateWidth(); + return this; + } + setTap(value) { + this.tap = value; + return this; + } + /** Get text provided in the constructor. */ + getText() { + return this.text; + } + getTextHeight() { + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); + return textFormatter.maxHeight; + } + /** Recalculate width. */ + updateWidth() { + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); + const measureText = (text) => { + return textFormatter.getWidthForTextInPx(text); + }; + let totalWidth = 0; + for (let i = 0; i < this.phrase.length; ++i) { + const bend = this.phrase[i]; + if (bend.width !== undefined) { + totalWidth += bend.width; + } + else { + const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width; + bend.width = Math.max(additional_width, measureText(bend.text)) + 3; + bend.draw_width = bend.width / 2; + totalWidth += bend.width; + } + } + this.setWidth(totalWidth + this.x_shift); + return this; + } + /** Draw the bend on the rendering context. */ + draw() { + var _a; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index); + start.x += 3; + start.y += 0.5; + const x_shift = this.x_shift; + const stave = note.checkStave(); + const spacing = stave.getSpacingBetweenLines(); + const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b)); + // this.text_line is relative to top string in the group. + const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3; + const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1; + const renderBend = (x, y, width, height) => { + const cp_x = x + width; + const cp_y = y; + ctx.save(); + ctx.beginPath(); + ctx.setLineWidth(this.render_options.line_width); + ctx.setStrokeStyle(this.render_options.line_style); + ctx.setFillStyle(this.render_options.line_style); + ctx.moveTo(x, y); + ctx.quadraticCurveTo(cp_x, cp_y, x + width, height); + ctx.stroke(); + ctx.restore(); + }; + const renderRelease = (x, y, width, height) => { + ctx.save(); + ctx.beginPath(); + ctx.setLineWidth(this.render_options.line_width); + ctx.setStrokeStyle(this.render_options.line_style); + ctx.setFillStyle(this.render_options.line_style); + ctx.moveTo(x, height); + ctx.quadraticCurveTo(x + width, height, x + width, y); + ctx.stroke(); + ctx.restore(); + }; + const renderArrowHead = (x, y, direction) => { + const width = 4; + const yBase = y + width * direction; + ctx.beginPath(); + ctx.moveTo(x, y); // tip of the arrow + ctx.lineTo(x - width, yBase); + ctx.lineTo(x + width, yBase); + ctx.closePath(); + ctx.fill(); + }; + const renderText = (x, text) => { + ctx.save(); + ctx.setFont(this.textFont); + const render_x = x - ctx.measureText(text).width / 2; + ctx.fillText(text, render_x, annotation_y); + ctx.restore(); + }; + let last_bend = undefined; + let last_bend_draw_width = 0; + let last_drawn_width = 0; + if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) { + const tapStart = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.CENTER, this.index); + renderText(tapStart.x, this.tap); + } + for (let i = 0; i < this.phrase.length; ++i) { + const bend = this.phrase[i]; + if (!bend.draw_width) + bend.draw_width = 0; + if (i === 0) + bend.draw_width += x_shift; + last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0); + if (bend.type === Bend.UP) { + if (last_bend && last_bend.type === Bend.UP) { + renderArrowHead(start.x, bend_height, +1); + } + renderBend(start.x, start.y, last_drawn_width, bend_height); + } + if (bend.type === Bend.DOWN) { + if (last_bend && last_bend.type === Bend.UP) { + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + if (last_bend && last_bend.type === Bend.DOWN) { + renderArrowHead(start.x, start.y, -1); + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + if (!last_bend) { + last_drawn_width = bend.draw_width; + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + } + renderText(start.x + last_drawn_width, bend.text); + last_bend = bend; + last_bend_draw_width = bend.draw_width; + last_bend.x = start.x; + start.x += last_drawn_width; + } + if (!last_bend || last_bend.x == undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoLastBendForBend', 'Internal error.'); + } + // Final arrowhead and text + if (last_bend.type === Bend.UP) { + renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1); + } + else if (last_bend.type === Bend.DOWN) { + renderArrowHead(last_bend.x + last_drawn_width, start.y, -1); + } + } +} +/** Default text font. */ +Bend.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); + + + +/***/ }), + +/***/ "./src/boundingbox.ts": +/*!****************************!*\ + !*** ./src/boundingbox.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BoundingBox": () => (/* binding */ BoundingBox) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +class BoundingBox { + /** + * Create a new copy. + */ + static copy(that) { + return new BoundingBox(that.x, that.y, that.w, that.h); + } + constructor(x, y, w, h) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + } + /** Get x position. */ + getX() { + return this.x; + } + /** Get y position. */ + getY() { + return this.y; + } + /** Get width. */ + getW() { + return this.w; + } + /** Get height. */ + getH() { + return this.h; + } + /** Set x position. */ + setX(x) { + this.x = x; + return this; + } + /** Set y position. */ + setY(y) { + this.y = y; + return this; + } + /** Set width. */ + setW(w) { + this.w = w; + return this; + } + /** Set height. */ + setH(h) { + this.h = h; + return this; + } + /** Move to position. */ + move(x, y) { + this.x += x; + this.y += y; + return this; + } + /** Clone. */ + clone() { + return BoundingBox.copy(this); + } + /** + * Merge my box with given box. Creates a bigger bounding box unless + * the given box is contained in this one. + */ + mergeWith(boundingBox) { + const that = boundingBox; + const new_x = this.x < that.x ? this.x : that.x; + const new_y = this.y < that.y ? this.y : that.y; + const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x; + const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y; + this.x = new_x; + this.y = new_y; + this.w = new_w; + this.h = new_h; + return this; + } +} + + +/***/ }), + +/***/ "./src/boundingboxcomputation.ts": +/*!***************************************!*\ + !*** ./src/boundingboxcomputation.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BoundingBoxComputation": () => (/* binding */ BoundingBoxComputation) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +/** + * BoundingBoxComputation computes metrics for a bounding box by continuously + * taking canvas path commands. + * + * Warning: This class is merely a crutch to get bounding box information without + * explicit metadata. This is likely to get deprecated following SMuFL support. + * + * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License) + */ +class BoundingBoxComputation { + constructor() { + this.x1 = Number.NaN; + this.y1 = Number.NaN; + this.x2 = Number.NaN; + this.y2 = Number.NaN; + } + /** Get calculated X1. */ + getX1() { + return this.x1; + } + /** Get calculated Y1. */ + getY1() { + return this.y1; + } + /** Get calculated width. */ + width() { + return this.x2 - this.x1; + } + /** Get calculated height. */ + height() { + return this.y2 - this.y1; + } + /** Add point to BoundingBox. */ + addPoint(x, y) { + if (isNaN(this.x1) || x < this.x1) + this.x1 = x; + if (isNaN(this.x2) || x > this.x2) + this.x2 = x; + if (isNaN(this.y1) || y < this.y1) + this.y1 = y; + if (isNaN(this.y2) || y > this.y2) + this.y2 = y; + } + /** Add X to BoundingBox. */ + addX(x) { + this.addPoint(x, this.y1); + } + /** Add Y to BoundingBox. */ + addY(y) { + this.addPoint(this.x1, y); + } + /** Add quadratic curve to BoundingBox. */ + addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) { + this.addPoint(p0x, p0y); + this.addPoint(p2x, p2y); + const p01x = p1x - p0x; + const p12x = p2x - p1x; + let denom = p01x - p12x; + if (denom != 0) { + const t = p01x / denom; + if (t > 0 && t < 1) { + const it = 1 - t; + this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x); + } + } + const p01y = p1y - p0y; + const p12y = p2y - p1y; + denom = p01y - p12y; + if (denom != 0) { + const t = p01y / denom; + if (t > 0 && t < 1) { + const it = 1 - t; + this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y); + } + } + } + /** Add bezier curve to BoundingBox. */ + addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { + // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html + const p0 = [p0x, p0y]; + const p1 = [p1x, p1y]; + const p2 = [p2x, p2y]; + const p3 = [p3x, p3y]; + let i; + this.addPoint(p0[0], p0[1]); + this.addPoint(p3[0], p3[1]); + const f = (t, i) => Math.pow(1 - t, 3) * p0[i] + + 3 * Math.pow(1 - t, 2) * t * p1[i] + + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + + Math.pow(t, 3) * p3[i]; + for (i = 0; i <= 1; i++) { + const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; + const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; + const c = 3 * p1[i] - 3 * p0[i]; + if (a === 0) { + if (b === 0) + continue; + const t = -c / b; + if (0 < t && t < 1) { + if (i === 0) + this.addX(f(t, i)); + if (i === 1) + this.addY(f(t, i)); + } + continue; + } + const b2ac = Math.pow(b, 2) - 4 * c * a; + if (b2ac < 0) + continue; + const t1 = (-b + Math.sqrt(b2ac)) / (2 * a); + if (0 < t1 && t1 < 1) { + if (i === 0) + this.addX(f(t1, i)); + if (i === 1) + this.addY(f(t1, i)); + } + const t2 = (-b - Math.sqrt(b2ac)) / (2 * a); + if (0 < t2 && t2 < 1) { + if (i === 0) + this.addX(f(t2, i)); + if (i === 1) + this.addY(f(t2, i)); + } + } + } +} + + +/***/ }), + +/***/ "./src/canvascontext.ts": +/*!******************************!*\ + !*** ./src/canvascontext.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CanvasContext": () => (/* binding */ CanvasContext) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + +/** + * A rendering context for the Canvas backend. This class serves as a proxy for the + * underlying CanvasRenderingContext2D object, part of the browser's API. + */ +class CanvasContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext { + static get WIDTH() { + return 600; + } + static get HEIGHT() { + return 400; + } + static get CANVAS_BROWSER_SIZE_LIMIT() { + return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size. + } + /** + * Ensure that width and height do not exceed the browser limit. + * @returns array of [width, height] clamped to the browser limit. + */ + static sanitizeCanvasDims(width, height) { + const limit = this.CANVAS_BROWSER_SIZE_LIMIT; + if (Math.max(width, height) > limit) { + (0,_util__WEBPACK_IMPORTED_MODULE_2__.warn)('Canvas dimensions exceed browser limit. Cropping to ' + limit); + if (width > limit) { + width = limit; + } + if (height > limit) { + height = limit; + } + } + return [width, height]; + } + constructor(context) { + super(); + /** Height of one line of text (in pixels). */ + this.textHeight = 0; + this.context2D = context; + if (!context.canvas) { + this.canvas = { + width: CanvasContext.WIDTH, + height: CanvasContext.HEIGHT, + }; + } + else { + this.canvas = context.canvas; + } + } + /** + * Set all pixels to transparent black rgba(0,0,0,0). + */ + clear() { + this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height); + } + // eslint-disable-next-line + openGroup(cls, id, attrs) { + // Containers not implemented. + } + closeGroup() { + // Containers not implemented. + } + // eslint-disable-next-line + add(child) { + // Containers not implemented. + } + setFillStyle(style) { + this.context2D.fillStyle = style; + return this; + } + /** CanvasContext ignores `setBackgroundFillStyle()`. */ + // eslint-disable-next-line + setBackgroundFillStyle(style) { + // DO NOTHING + return this; + } + setStrokeStyle(style) { + this.context2D.strokeStyle = style; + return this; + } + setShadowColor(color) { + this.context2D.shadowColor = color; + return this; + } + setShadowBlur(blur) { + // CanvasRenderingContext2D does not scale the shadow blur by the current + // transform, so we have to do it manually. We assume uniform scaling + // (though allow for rotation) because the blur can only be scaled + // uniformly anyway. + const t = this.context2D.getTransform(); + const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d); + this.context2D.shadowBlur = scale * blur; + return this; + } + setLineWidth(width) { + this.context2D.lineWidth = width; + return this; + } + setLineCap(capType) { + this.context2D.lineCap = capType; + return this; + } + setLineDash(dash) { + this.context2D.setLineDash(dash); + return this; + } + scale(x, y) { + this.context2D.scale(x, y); + return this; + } + resize(width, height, devicePixelRatio) { + var _a; + const canvas = this.context2D.canvas; + const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : (0,_util__WEBPACK_IMPORTED_MODULE_2__.globalObject)().devicePixelRatio) !== null && _a !== void 0 ? _a : 1; + // Scale the canvas size by the device pixel ratio clamping to the maximum supported size. + [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr); + // Divide back down by the pixel ratio and convert to integers. + width = (width / dpr) | 0; + height = (height / dpr) | 0; + canvas.width = width * dpr; + canvas.height = height * dpr; + // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas. + // Only HTMLCanvasElement has a style attribute. + if ((0,_web__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas)(canvas)) { + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + return this.scale(dpr, dpr); + } + rect(x, y, width, height) { + this.context2D.rect(x, y, width, height); + return this; + } + fillRect(x, y, width, height) { + this.context2D.fillRect(x, y, width, height); + return this; + } + /** + * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0). + */ + clearRect(x, y, width, height) { + this.context2D.clearRect(x, y, width, height); + return this; + } + beginPath() { + this.context2D.beginPath(); + return this; + } + moveTo(x, y) { + this.context2D.moveTo(x, y); + return this; + } + lineTo(x, y) { + this.context2D.lineTo(x, y); + return this; + } + bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { + this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + return this; + } + quadraticCurveTo(cpx, cpy, x, y) { + this.context2D.quadraticCurveTo(cpx, cpy, x, y); + return this; + } + arc(x, y, radius, startAngle, endAngle, counterclockwise) { + this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise); + return this; + } + fill() { + this.context2D.fill(); + return this; + } + stroke() { + this.context2D.stroke(); + return this; + } + closePath() { + this.context2D.closePath(); + return this; + } + measureText(text) { + const metrics = this.context2D.measureText(text); + let y = 0; + let height = 0; + if (metrics.fontBoundingBoxAscent) { + y = -metrics.fontBoundingBoxAscent; + height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent; + } + else { + y = -metrics.actualBoundingBoxAscent; + height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent; + } + // Return x, y, width & height in the same manner as svg getBBox + return { + x: 0, + y: y, + width: metrics.width, + height: height, + }; + } + fillText(text, x, y) { + this.context2D.fillText(text, x, y); + return this; + } + save() { + this.context2D.save(); + return this; + } + restore() { + this.context2D.restore(); + return this; + } + set fillStyle(style) { + this.context2D.fillStyle = style; + } + get fillStyle() { + return this.context2D.fillStyle; + } + set strokeStyle(style) { + this.context2D.strokeStyle = style; + } + get strokeStyle() { + return this.context2D.strokeStyle; + } + /** + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + */ + setFont(f, size, weight, style) { + const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style); + this.context2D.font = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo); + this.textHeight = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(fontInfo.size); + return this; + } + /** Return a string of the form `'italic bold 15pt Arial'` */ + getFont() { + return this.context2D.font; + } +} + + +/***/ }), + +/***/ "./src/chordsymbol.ts": +/*!****************************!*\ + !*** ./src/chordsymbol.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ChordSymbol": () => (/* binding */ ChordSymbol), +/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* binding */ ChordSymbolHorizontalJustify), +/* harmony export */ "ChordSymbolVerticalJustify": () => (/* binding */ ChordSymbolVerticalJustify), +/* harmony export */ "SymbolModifiers": () => (/* binding */ SymbolModifiers), +/* harmony export */ "SymbolTypes": () => (/* binding */ SymbolTypes) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Author: Aaron (@AaronDavidNewman) +// +// This implements chord symbols above/below a chord. +// Chord symbols are modifiers that can be attached to notes. +// They can contain multiple 'blocks' which represent text or +// glyphs with various positioning options. +// +// See `tests/chordsymbol_tests.ts` for usage examples. + + + + + + + +// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (ChordSymbol.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.ChordSymbol', args); +} +var ChordSymbolHorizontalJustify; +(function (ChordSymbolHorizontalJustify) { + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["LEFT"] = 1] = "LEFT"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER"] = 2] = "CENTER"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["RIGHT"] = 3] = "RIGHT"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {})); +var ChordSymbolVerticalJustify; +(function (ChordSymbolVerticalJustify) { + ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["TOP"] = 1] = "TOP"; + ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["BOTTOM"] = 2] = "BOTTOM"; +})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {})); +var SymbolTypes; +(function (SymbolTypes) { + SymbolTypes[SymbolTypes["GLYPH"] = 1] = "GLYPH"; + SymbolTypes[SymbolTypes["TEXT"] = 2] = "TEXT"; + SymbolTypes[SymbolTypes["LINE"] = 3] = "LINE"; +})(SymbolTypes || (SymbolTypes = {})); +var SymbolModifiers; +(function (SymbolModifiers) { + SymbolModifiers[SymbolModifiers["NONE"] = 1] = "NONE"; + SymbolModifiers[SymbolModifiers["SUBSCRIPT"] = 2] = "SUBSCRIPT"; + SymbolModifiers[SymbolModifiers["SUPERSCRIPT"] = 3] = "SUPERSCRIPT"; +})(SymbolModifiers || (SymbolModifiers = {})); +/** + * ChordSymbol is a modifier that creates a chord symbol above/below a chord. + * As a modifier, it is attached to an existing note. + */ +class ChordSymbol extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.ChordSymbol; + } + static get superSubRatio() { + return ChordSymbol.metrics.global.superSubRatio; + } + /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */ + static set NO_TEXT_FORMAT(val) { + ChordSymbol.noFormat = val; + } + static get NO_TEXT_FORMAT() { + return ChordSymbol.noFormat; + } + static getMetricForGlyph(glyphCode) { + if (ChordSymbol.metrics.glyphs[glyphCode]) { + return ChordSymbol.metrics.glyphs[glyphCode]; + } + return undefined; + } + static get engravingFontResolution() { + return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getResolution(); + } + static get spacingBetweenBlocks() { + return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution; + } + static getWidthForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0.65; // probably should do something here. + } + return metric.advanceWidth / ChordSymbol.engravingFontResolution; + } + static getYShiftForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0; + } + return metric.yOffset / ChordSymbol.engravingFontResolution; + } + static getXShiftForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0; + } + return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution; + } + static get superscriptOffset() { + return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution; + } + static get subscriptOffset() { + return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution; + } + static get kerningOffset() { + return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution; + } + static get metrics() { + const chordSymbol = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().chordSymbol; + if (!chordSymbol) + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `chordSymbol missing`); + return chordSymbol; + } + static get lowerKerningText() { + // For example, see: `bravura_metrics.ts` + // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters. + // ['D', 'F', 'P', 'T', 'V', 'Y'] + return ChordSymbol.metrics.global.lowerKerningText; + } + static get upperKerningText() { + return ChordSymbol.metrics.global.upperKerningText; + } + static isSuperscript(block) { + return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT; + } + static isSubscript(block) { + return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT; + } + static get minPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** + * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks. + * Estimate how many lines above/below the staff we need. + */ + static format(symbols, state) { + var _a; + if (!symbols || symbols.length === 0) + return false; + let width = 0; + let nonSuperWidth = 0; + let leftWidth = 0; + let rightWidth = 0; + let maxLeftGlyphWidth = 0; + let maxRightGlyphWidth = 0; + for (const symbol of symbols) { + const fontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size); + const fontAdj = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(fontSize, 0.05); + const glyphAdj = fontAdj * 2; + const note = symbol.checkAttachedNote(); + let symbolWidth = 0; + let lineSpaces = 1; + let vAlign = false; + for (let j = 0; j < symbol.symbolBlocks.length; ++j) { + const block = symbol.symbolBlocks[j]; + const sup = ChordSymbol.isSuperscript(block); + const sub = ChordSymbol.isSubscript(block); + const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1; + const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale; + // If there are super/subscripts, they extend beyond the line so + // assume they take up 2 lines + if (sup || sub) { + lineSpaces = 2; + } + // If there is a symbol-specific offset, add it but consider font + // size since font and glyphs will be interspersed. + const fontSize = symbol.textFormatter.fontSizeInPixels; + const superSubFontSize = fontSize * superSubScale; + if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) { + block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize; + block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize; + block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize; + block.glyph.scale = block.glyph.scale * adj; + } + else if (block.symbolType === SymbolTypes.TEXT) { + block.width = block.width * superSubFontSize; + block.yShift += symbol.getYOffsetForText(block.text) * adj; + } + if (block.symbolType === SymbolTypes.GLYPH && + block.glyph !== undefined && + block.glyph.code === ChordSymbol.glyphs.over.code) { + lineSpaces = 2; + } + block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale; + // If a subscript immediately follows a superscript block, try to + // overlay them. + if (sup && j > 0) { + const prev = symbol.symbolBlocks[j - 1]; + if (!ChordSymbol.isSuperscript(prev)) { + nonSuperWidth = width; + } + } + if (sub && nonSuperWidth > 0) { + vAlign = true; + // slide the symbol over so it lines up with superscript + block.xShift = block.xShift + (nonSuperWidth - width); + width = nonSuperWidth; + nonSuperWidth = 0; + // If we have vertically lined up, turn kerning off. + symbol.setEnableKerning(false); + } + if (!sup && !sub) { + nonSuperWidth = 0; + } + block.vAlign = vAlign; + width += block.width; + symbolWidth = width; + } + // make kerning adjustments after computing super/subscripts + symbol.updateKerningAdjustments(); + symbol.updateOverBarAdjustments(); + if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) { + symbol.setTextLine(state.top_text_line); + state.top_text_line += lineSpaces; + } + else { + symbol.setTextLine(state.text_line + 1); + state.text_line += lineSpaces + 1; + } + if (symbol.getReportWidth() && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) { + const glyphWidth = note.getGlyphProps().getWidth(); + if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) { + maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); + leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding; + } + else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) { + maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); + rightWidth = Math.max(rightWidth, symbolWidth); + } + else { + leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding; + rightWidth = Math.max(rightWidth, symbolWidth / 2); + maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); + maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); + } + } + width = 0; // reset symbol width + } + const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); + const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); + state.left_shift += leftOverlap; + state.right_shift += rightOverlap; + return true; + } + constructor() { + super(); + this.symbolBlocks = []; + this.horizontal = ChordSymbolHorizontalJustify.LEFT; + this.vertical = ChordSymbolVerticalJustify.TOP; + this.useKerning = true; + this.reportWidth = true; + this.resetFont(); + } + /** + * Default text font. + * Choose a font family that works well with the current music engraving font. + * @override `Element.TEXT_FONT`. + */ + static get TEXT_FONT() { + let family = 'Roboto Slab, Times, serif'; + if (_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getName() === 'Petaluma') { + // Fixes Issue #1180 + family = 'PetalumaScript, Arial, sans-serif'; + } + return { + family, + size: 12, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, + }; + } + /** + * The offset is specified in `em`. Scale this value by the font size in pixels. + */ + get superscriptOffset() { + return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels; + } + get subscriptOffset() { + return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels; + } + setReportWidth(value) { + this.reportWidth = value; + return this; + } + getReportWidth() { + return this.reportWidth; + } + updateOverBarAdjustments() { + const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash'); + if (barIndex < 0) { + return; + } + const bar = this.symbolBlocks[barIndex]; + const xoff = bar.width / 4; + const yoff = 0.25 * this.textFormatter.fontSizeInPixels; + let symIndex = 0; + for (symIndex === 0; symIndex < barIndex; ++symIndex) { + const symbol = this.symbolBlocks[symIndex]; + symbol.xShift = symbol.xShift + xoff; + symbol.yShift = symbol.yShift - yoff; + } + for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) { + const symbol = this.symbolBlocks[symIndex]; + symbol.xShift = symbol.xShift - xoff; + symbol.yShift = symbol.yShift + yoff; + } + } + updateKerningAdjustments() { + let accum = 0; + for (let j = 0; j < this.symbolBlocks.length; ++j) { + const symbol = this.symbolBlocks[j]; + accum += this.getKerningAdjustment(j); + symbol.xShift += accum; + } + } + /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */ + getKerningAdjustment(j) { + if (!this.useKerning) { + return 0; + } + const currSymbol = this.symbolBlocks[j]; + const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined; + let adjustment = 0; + // Move things into the '/' over bar + if (currSymbol.symbolType === SymbolTypes.GLYPH && + currSymbol.glyph !== undefined && + currSymbol.glyph.code === ChordSymbol.glyphs.over.code) { + adjustment += currSymbol.glyph.metrics.x_shift; + } + if (prevSymbol !== undefined && + prevSymbol.symbolType === SymbolTypes.GLYPH && + prevSymbol.glyph !== undefined && + prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) { + adjustment += prevSymbol.glyph.metrics.x_shift; + } + // For superscripts that follow a letter without much top part, move it to the left slightly + let preKernUpper = false; + let preKernLower = false; + if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) { + preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); + preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); + } + const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels; + // TODO: adjust kern for font size. + // Where should this constant live? + if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) { + adjustment += kerningOffsetPixels; + } + if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) { + if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') { + adjustment += kerningOffsetPixels / 2; + } + if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) { + adjustment += kerningOffsetPixels / 2; + } + } + return adjustment; + } + /** + * ChordSymbol allows multiple blocks so we can mix glyphs and font text. + * Each block can have its own vertical orientation. + */ + // eslint-disable-next-line + getSymbolBlock(params = {}) { + var _a, _b, _c; + const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT; + const symbolBlock = { + text: (_b = params.text) !== null && _b !== void 0 ? _b : '', + symbolType, + symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE, + xShift: 0, + yShift: 0, + vAlign: false, + width: 0, + }; + // Note: symbol widths are resolution and font-independent. + // We convert to pixel values when we know what the font is. + if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') { + const glyphArgs = ChordSymbol.glyphs[params.glyph]; + const glyphPoints = 20; + symbolBlock.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' }); + } + else if (symbolType === SymbolTypes.TEXT) { + symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text); + } + else if (symbolType === SymbolTypes.LINE) { + symbolBlock.width = params.width; + } + return symbolBlock; + } + /** Add a symbol to this chord, could be text, glyph or line. */ + // eslint-disable-next-line + addSymbolBlock(parameters) { + this.symbolBlocks.push(this.getSymbolBlock(parameters)); + return this; + } + // ### Convenience functions for creating different types of chord symbol parts. + /** Add a text block. */ + // eslint-disable-next-line + addText(text, parameters = {}) { + const symbolType = SymbolTypes.TEXT; + return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType })); + } + /** Add a text block with superscript modifier. */ + addTextSuperscript(text) { + const symbolType = SymbolTypes.TEXT; + const symbolModifier = SymbolModifiers.SUPERSCRIPT; + return this.addSymbolBlock({ text, symbolType, symbolModifier }); + } + /** Add a text block with subscript modifier. */ + addTextSubscript(text) { + const symbolType = SymbolTypes.TEXT; + const symbolModifier = SymbolModifiers.SUBSCRIPT; + return this.addSymbolBlock({ text, symbolType, symbolModifier }); + } + /** Add a glyph block with superscript modifier. */ + addGlyphSuperscript(glyph) { + const symbolType = SymbolTypes.GLYPH; + const symbolModifier = SymbolModifiers.SUPERSCRIPT; + return this.addSymbolBlock({ glyph, symbolType, symbolModifier }); + } + /** Add a glyph block. */ + // eslint-disable-next-line + addGlyph(glyph, params = {}) { + const symbolType = SymbolTypes.GLYPH; + return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType })); + } + /** + * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font. + * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else. + */ + // eslint-disable-next-line + addGlyphOrText(text, params = {}) { + let str = ''; + for (let i = 0; i < text.length; ++i) { + const char = text[i]; + if (ChordSymbol.glyphs[char]) { + if (str.length > 0) { + this.addText(str, params); + str = ''; + } + this.addGlyph(char, params); + } + else { + // Collect consecutive characters with no glyphs. + str += char; + } + } + if (str.length > 0) { + this.addText(str, params); + } + return this; + } + /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */ + // eslint-disable-next-line + addLine(width, params = {}) { + const symbolType = SymbolTypes.LINE; + return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width })); + } + /** + * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`). + * + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + * + * @override See: Element. + */ + setFont(f, size, weight, style) { + super.setFont(f, size, weight, style); + this.textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); + return this; + } + setEnableKerning(val) { + this.useKerning = val; + return this; + } + /** Set vertical position of text (above or below stave). */ + setVertical(vj) { + this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj; + return this; + } + getVertical() { + return this.vertical; + } + /** Set horizontal justification. */ + setHorizontal(hj) { + this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj; + return this; + } + getHorizontal() { + return this.horizontal; + } + getWidth() { + let width = 0; + this.symbolBlocks.forEach((symbol) => { + width += symbol.vAlign ? 0 : symbol.width; + }); + return width; + } + getYOffsetForText(text) { + var _a; + let acc = 0; + let i = 0; + for (i = 0; i < text.length; ++i) { + const metrics = this.textFormatter.getGlyphMetrics(text[i]); + if (metrics) { + const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0; + acc = yMax < acc ? yMax : acc; + } + } + const resolution = this.textFormatter.getResolution(); + return i > 0 ? -1 * (acc / resolution) : 0; + } + /** Render text and glyphs above/below the note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + // We're changing context parameters. Save current state. + ctx.save(); + this.applyStyle(); + ctx.openGroup('chordsymbol', this.getAttribute('id')); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE, this.index); + ctx.setFont(this.textFont); + let y; + // The position of the text varies based on whether or not the note + // has a stem. + const hasStem = note.hasStem(); + const stave = note.checkStave(); + if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) { + // HACK: We need to compensate for the text's height since its origin is bottom-right. + y = stave.getYForBottomText(this.text_line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK); + if (hasStem) { + const stem_ext = note.checkStem().getExtents(); + const spacing = stave.getSpacingBetweenLines(); + const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY; + y = Math.max(y, stem_base + spacing * (this.text_line + 2)); + } + } + else { + // (this.vertical === VerticalJustify.TOP) + const topY = Math.min(...note.getYs()); + y = Math.min(stave.getYForTopText(this.text_line), topY - 10); + if (hasStem) { + const stem_ext = note.checkStem().getExtents(); + const spacing = stave.getSpacingBetweenLines(); + y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line); + } + } + let x = start.x; + if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) { + x = start.x; + } + else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) { + x = start.x + this.getWidth(); + } + else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) { + x = start.x - this.getWidth() / 2; + } + else { + // HorizontalJustify.CENTER_STEM + x = note.getStemX() - this.getWidth() / 2; + } + L('Rendering ChordSymbol: ', this.textFormatter, x, y); + this.symbolBlocks.forEach((symbol) => { + const isSuper = ChordSymbol.isSuperscript(symbol); + const isSub = ChordSymbol.isSubscript(symbol); + let curY = y; + L('shift was ', symbol.xShift, symbol.yShift); + L('curY pre sub ', curY); + if (isSuper) { + curY += this.superscriptOffset; + } + if (isSub) { + curY += this.subscriptOffset; + } + L('curY sup/sub ', curY); + if (symbol.symbolType === SymbolTypes.TEXT) { + if (isSuper || isSub) { + ctx.save(); + if (this.textFont) { + const { family, size, weight, style } = this.textFont; + const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, ChordSymbol.superSubRatio); + ctx.setFont(family, smallerFontSize, weight, style); + } + } + // TODO??? + // We estimate the text width, fill it in with the empirical value so the formatting is even. + // const textDim = ctx.measureText(symbol.text); + // symbol.width = textDim.width; + L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift); + ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift); + if (isSuper || isSub) { + ctx.restore(); + } + } + else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) { + curY += symbol.yShift; + L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY); + symbol.glyph.render(ctx, x + symbol.xShift, curY); + } + else if (symbol.symbolType === SymbolTypes.LINE) { + L('Rendering Line : ', symbol.width, x, curY); + ctx.beginPath(); + ctx.setLineWidth(1); // ? + ctx.moveTo(x, y); + ctx.lineTo(x + symbol.width, curY); + ctx.stroke(); + } + x += symbol.width; + if (symbol.vAlign) { + x += symbol.xShift; + } + }); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +ChordSymbol.DEBUG = false; +// Chord symbols can be positioned and justified relative to the note. +ChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify; +ChordSymbol.HorizontalJustifyString = { + left: ChordSymbolHorizontalJustify.LEFT, + right: ChordSymbolHorizontalJustify.RIGHT, + center: ChordSymbolHorizontalJustify.CENTER, + centerStem: ChordSymbolHorizontalJustify.CENTER_STEM, +}; +ChordSymbol.VerticalJustify = ChordSymbolVerticalJustify; +ChordSymbol.VerticalJustifyString = { + top: ChordSymbolVerticalJustify.TOP, + above: ChordSymbolVerticalJustify.TOP, + below: ChordSymbolVerticalJustify.BOTTOM, + bottom: ChordSymbolVerticalJustify.BOTTOM, +}; +// Glyph data +ChordSymbol.glyphs = { + diminished: { + code: 'csymDiminished', + }, + dim: { + code: 'csymDiminished', + }, + halfDiminished: { + code: 'csymHalfDiminished', + }, + '+': { + code: 'csymAugmented', + }, + augmented: { + code: 'csymAugmented', + }, + majorSeventh: { + code: 'csymMajorSeventh', + }, + minor: { + code: 'csymMinor', + }, + '-': { + code: 'csymMinor', + }, + '(': { + code: 'csymParensLeftTall', + }, + leftParen: { + code: 'csymParensLeftTall', + }, + ')': { + code: 'csymParensRightTall', + }, + rightParen: { + code: 'csymParensRightTall', + }, + leftBracket: { + code: 'csymBracketLeftTall', + }, + rightBracket: { + code: 'csymBracketRightTall', + }, + leftParenTall: { + code: 'csymParensLeftVeryTall', + }, + rightParenTall: { + code: 'csymParensRightVeryTall', + }, + '/': { + code: 'csymDiagonalArrangementSlash', + }, + over: { + code: 'csymDiagonalArrangementSlash', + }, + '#': { + code: 'accidentalSharp', + }, + b: { + code: 'accidentalFlat', + }, +}; +ChordSymbol.symbolTypes = SymbolTypes; +ChordSymbol.symbolModifiers = SymbolModifiers; +/** Currently unused. */ +ChordSymbol.noFormat = false; + + + +/***/ }), + +/***/ "./src/clef.ts": +/*!*********************!*\ + !*** ./src/clef.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Clef": () => (/* binding */ Clef) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013. +// Co-author: Benjamin W. Bohl +// MIT License + + + + + +// eslint-disable-next-line +function L(...args) { + if (Clef.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.Clef', args); +} +/** + * Clef implements various types of clefs that can be rendered on a stave. + * + * See `tests/clef_tests.ts` for usage examples. + */ +class Clef extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Clef; + } + /** + * Every clef name is associated with a glyph code from the font file + * and a default stave line number. + */ + static get types() { + return { + treble: { + code: 'gClef', + line: 3, + }, + bass: { + code: 'fClef', + line: 1, + }, + alto: { + code: 'cClef', + line: 2, + }, + tenor: { + code: 'cClef', + line: 1, + }, + percussion: { + code: 'unpitchedPercussionClef1', + line: 2, + }, + soprano: { + code: 'cClef', + line: 4, + }, + 'mezzo-soprano': { + code: 'cClef', + line: 3, + }, + 'baritone-c': { + code: 'cClef', + line: 0, + }, + 'baritone-f': { + code: 'fClef', + line: 2, + }, + subbass: { + code: 'fClef', + line: 0, + }, + french: { + code: 'gClef', + line: 4, + }, + tab: { + code: '6stringTabClef', + line: 2.5, + }, + }; + } + static get annotationSmufl() { + return { + '8va': 'timeSig8', + '8vb': 'timeSig8', + }; + } + /** Create a new clef. */ + constructor(type, size, annotation) { + super(); + /** + * The attribute `clef` must be a key from + * `Clef.types` + */ + this.clef = Clef.types['treble']; + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); + this.setType(type, size, annotation); + this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`)); + L('Creating clef:', type); + } + /** Set clef type, size and annotation. */ + setType(type, size, annotation) { + this.type = type; + this.clef = Clef.types[type]; + if (size === undefined) { + this.size = 'default'; + } + else { + this.size = size; + } + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont(); + // If an annotation, such as 8va, is specified, add it to the Clef object. + if (annotation !== undefined) { + const code = Clef.annotationSmufl[annotation]; + const point = (Clef.getPoint(this.size) / 5) * 3; + const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`); + const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`); + this.annotation = { code, point, line, x_shift }; + this.attachment = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.annotation.code, this.annotation.point); + this.attachment.metrics.x_max = 0; + this.attachment.setXShift(this.annotation.x_shift); + } + else { + this.annotation = undefined; + } + return this; + } + /** Get clef width. */ + getWidth() { + if (this.type === 'tab') { + (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'ClefError', "Can't get width without stave."); + } + return this.width; + } + /** Get point for clefs. */ + static getPoint(size) { + // for sizes other than 'default', clef is 2/3 of the default value + return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 3) * 2; + } + /** Set associated stave. */ + setStave(stave) { + this.stave = stave; + return this; + } + /** Render clef. */ + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('clef', this.getAttribute('id')); + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, { + category: `clef_${this.size}`, + }); + if (this.annotation !== undefined && this.attachment !== undefined) { + this.placeGlyphOnLine(this.attachment, stave, this.annotation.line); + this.attachment.setStave(stave); + this.attachment.setContext(ctx); + this.attachment.renderToStave(this.x); + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} +/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */ +Clef.DEBUG = false; + + + +/***/ }), + +/***/ "./src/clefnote.ts": +/*!*************************!*\ + !*** ./src/clefnote.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ClefNote": () => (/* binding */ ClefNote) +/* harmony export */ }); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2014 +// MIT License + + + + +/** ClefNote implements clef annotations in measures. */ +class ClefNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.ClefNote; + } + constructor(type, size, annotation) { + super({ duration: 'b' }); + this.type = type; + const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation); + this.clef = clef.clef; + this.annotation = clef.annotation; + this.size = size === undefined ? 'default' : size; + this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`)); + // Note properties + this.ignore_ticks = true; + } + /** Set clef type, size and annotation. */ + setType(type, size, annotation) { + this.type = type; + this.size = size; + const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation); + this.clef = clef.clef; + this.annotation = clef.annotation; + this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`)); + return this; + } + /** Get associated clef. */ + getClef() { + return this.clef; + } + preFormat() { + this.preFormatted = true; + return this; + } + /** Render clef note. */ + draw() { + const stave = this.checkStave(); + const ctx = this.checkContext(); + this.setRendered(); + const abs_x = this.getAbsoluteX(); + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), this.clef.code, { + category: `clefNote_${this.size}`, + }); + // If the Vex.Flow.Clef has an annotation, such as 8va, draw it. + if (this.annotation !== undefined) { + const attachment = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.annotation.code, this.annotation.point); + attachment.setContext(ctx); + attachment.setStave(stave); + attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs()); + attachment.setXShift(this.annotation.x_shift); + attachment.renderToStave(abs_x); + } + } +} + + +/***/ }), + +/***/ "./src/crescendo.ts": +/*!**************************!*\ + !*** ./src/crescendo.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Crescendo": () => (/* binding */ Crescendo) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// This file implements the `Crescendo` object which draws crescendos and +// decrescendo dynamics markings. A `Crescendo` is initialized with a +// duration and formatted as part of a `Voice` like any other `Note` +// type in VexFlow. This object would most likely be formatted in a Voice +// with `TextNotes` - which are used to represent other dynamics markings. + + + + +// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (Crescendo.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Crescendo', args); +} +// Private helper to draw the hairpin +function renderHairpin(ctx, params) { + const begin_x = params.begin_x; + const end_x = params.end_x; + const y = params.y; + const half_height = params.height / 2; + ctx.beginPath(); + if (params.reverse) { + ctx.moveTo(begin_x, y - half_height); + ctx.lineTo(end_x, y); + ctx.lineTo(begin_x, y + half_height); + } + else { + ctx.moveTo(end_x, y - half_height); + ctx.lineTo(begin_x, y); + ctx.lineTo(end_x, y + half_height); + } + ctx.stroke(); + ctx.closePath(); +} +class Crescendo extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + /** Crescendo category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Crescendo; + } + // Initialize the crescendo's properties + constructor(noteStruct) { + super(noteStruct); + this.options = { + // Extensions to the length of the crescendo on either side + extend_left: 0, + extend_right: 0, + // Vertical shift + y_shift: 0, + }; + // Whether the object is a decrescendo + this.decrescendo = false; + // The staff line to be placed on + this.line = noteStruct.line || 0; + // The height at the open end of the cresc/decresc + this.height = 15; + } + // Set the line to center the element on + setLine(line) { + this.line = line; + return this; + } + // Set the full height at the open end + setHeight(height) { + this.height = height; + return this; + } + // Set whether the sign should be a descresendo by passing a bool + // to `decresc` + setDecrescendo(decresc) { + this.decrescendo = decresc; + return this; + } + // Preformat the note + preFormat() { + this.preFormatted = true; + return this; + } + // Render the Crescendo object onto the canvas + draw() { + const ctx = this.checkContext(); + const stave = this.checkStave(); + this.setRendered(); + const tick_context = this.getTickContext(); + const next_context = _tickcontext__WEBPACK_IMPORTED_MODULE_1__.TickContext.getNextContext(tick_context); + const begin_x = this.getAbsoluteX(); + const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth(); + const y = stave.getYForLine(this.line + -3) + 1; + L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x); + renderHairpin(ctx, { + begin_x: begin_x - this.options.extend_left, + end_x: end_x + this.options.extend_right, + y: y + this.options.y_shift, + height: this.height, + reverse: this.decrescendo, + }); + } +} +Crescendo.DEBUG = false; + + + +/***/ }), + +/***/ "./src/curve.ts": +/*!**********************!*\ + !*** ./src/curve.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Curve": () => (/* binding */ Curve), +/* harmony export */ "CurvePosition": () => (/* binding */ CurvePosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// +// This class implements curves (for slurs) + + + +var CurvePosition; +(function (CurvePosition) { + CurvePosition[CurvePosition["NEAR_HEAD"] = 1] = "NEAR_HEAD"; + CurvePosition[CurvePosition["NEAR_TOP"] = 2] = "NEAR_TOP"; +})(CurvePosition || (CurvePosition = {})); +class Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Curve; + } + static get Position() { + return CurvePosition; + } + static get PositionString() { + return { + nearHead: CurvePosition.NEAR_HEAD, + nearTop: CurvePosition.NEAR_TOP, + }; + } + // from: Start note + // to: End note + // options: + // cps: List of control points + // x_shift: pixels to shift + // y_shift: pixels to shift + constructor(from, to, options) { + super(); + this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [ + { x: 0, y: 10 }, + { x: 0, y: 10 }, + ] }, options); + this.from = from; + this.to = to; + } + setNotes(from, to) { + if (!from && !to) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.'); + } + this.from = from; + this.to = to; + return this; + } + /** + * @return {boolean} Returns true if this is a partial bar. + */ + isPartial() { + return !this.from || !this.to; + } + renderCurve(params) { + const ctx = this.checkContext(); + const x_shift = this.render_options.x_shift; + const y_shift = this.render_options.y_shift * params.direction; + const first_x = params.first_x + x_shift; + const first_y = params.first_y + y_shift; + const last_x = params.last_x - x_shift; + const last_y = params.last_y + y_shift; + const thickness = this.render_options.thickness; + const cps = this.render_options.cps; + const { x: cp0x, y: cp0y } = cps[0]; + const { x: cp1x, y: cp1y } = cps[1]; + const cp_spacing = (last_x - first_x) / (cps.length + 2); + ctx.beginPath(); + ctx.moveTo(first_x, first_y); + ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y); + ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y); + ctx.stroke(); + ctx.closePath(); + ctx.fill(); + } + draw() { + this.checkContext(); + this.setRendered(); + const first_note = this.from; + const last_note = this.to; + let first_x; + let last_x; + let first_y; + let last_y; + let stem_direction = 0; + let metric = 'baseY'; + let end_metric = 'baseY'; + function getPosition(position) { + return typeof position === 'string' ? Curve.PositionString[position] : position; + } + const position = getPosition(this.render_options.position); + const position_end = getPosition(this.render_options.position_end); + if (position === CurvePosition.NEAR_TOP) { + metric = 'topY'; + end_metric = 'topY'; + } + if (position_end === CurvePosition.NEAR_HEAD) { + end_metric = 'baseY'; + } + else if (position_end === CurvePosition.NEAR_TOP) { + end_metric = 'topY'; + } + if (first_note) { + first_x = first_note.getTieRightX(); + stem_direction = first_note.getStemDirection(); + first_y = first_note.getStemExtents()[metric]; + } + else { + const stave = last_note.checkStave(); + first_x = stave.getTieStartX(); + first_y = last_note.getStemExtents()[metric]; + } + if (last_note) { + last_x = last_note.getTieLeftX(); + stem_direction = last_note.getStemDirection(); + last_y = last_note.getStemExtents()[end_metric]; + } + else { + const stave = first_note.checkStave(); + last_x = stave.getTieEndX(); + last_y = first_note.getStemExtents()[end_metric]; + } + this.renderCurve({ + first_x, + last_x, + first_y, + last_y, + direction: stem_direction * (this.render_options.invert === true ? -1 : 1), + }); + return true; + } +} + + +/***/ }), + +/***/ "./src/dot.ts": +/*!********************!*\ + !*** ./src/dot.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Dot": () => (/* binding */ Dot) +/* harmony export */ }); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// +// This class implements dot modifiers for notes. + + + +class Dot extends _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Dot; + } + /** Returns the dots associated to a Note. */ + static getDots(note) { + return note.getModifiersByType(Dot.CATEGORY); + } + /** Add a dot on the specified keys to the notes. */ + static buildAndAttach(notes, options) { + for (const note of notes) { + if (options === null || options === void 0 ? void 0 : options.all) { + for (let i = 0; i < note.keys.length; i++) { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, i); + } + } + else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index); + } + else { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, 0); + } + } + } + // Arrange dots inside a ModifierContext. + static format(dots, state) { + const right_shift = state.right_shift; + const dot_spacing = 1; + if (!dots || dots.length === 0) + return false; + const dot_list = []; + const max_shift_map = {}; + for (let i = 0; i < dots.length; ++i) { + const dot = dots[i]; + const note = dot.getNote(); + let props; + let shift; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isStaveNote)(note)) { + const index = dot.checkIndex(); + props = note.getKeyProps()[index]; + // consider right displaced head with no previous modifier + shift = note.getFirstDotPx(); + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) { + props = { line: 0.5 }; // Shim key props for dot placement + shift = right_shift; + } + else { + // note object is not StaveNote or TabNote. + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('Internal', 'Unexpected instance.'); + } + const note_id = note.getAttribute('id'); + dot_list.push({ line: props.line, note, note_id, dot }); + max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift); + } + // Sort dots by line number. + dot_list.sort((a, b) => b.line - a.line); + let dot_shift = right_shift; + let x_width = 0; + let last_line = null; + let last_note = null; + let prev_dotted_space = null; + let half_shiftY = 0; + for (let i = 0; i < dot_list.length; ++i) { + const { dot, note, note_id, line } = dot_list[i]; + // Reset the position of the dot every line. + if (line !== last_line || note !== last_note) { + dot_shift = max_shift_map[note_id]; + } + if (!note.isRest() && line !== last_line) { + if (Math.abs(line % 1) === 0.5) { + // note is on a space, so no dot shift + half_shiftY = 0; + } + else { + // note is on a line, so shift dot to space above the line + half_shiftY = 0.5; + if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) { + // previous note on a space, so shift dot to space below the line + half_shiftY = -0.5; + } + else if (line + half_shiftY === prev_dotted_space) { + // previous space is dotted, so shift dot to space below the line + half_shiftY = -0.5; + } + } + } + // convert half_shiftY to a multiplier for dots.draw() + if (note.isRest()) { + dot.dot_shiftY += -half_shiftY; + } + else { + dot.dot_shiftY = -half_shiftY; + } + prev_dotted_space = line + half_shiftY; + dot.setXShift(dot_shift); + dot_shift += dot.getWidth() + dot_spacing; // spacing + x_width = dot_shift > x_width ? dot_shift : x_width; + last_line = line; + last_note = note; + } + // Update state. + state.right_shift += x_width; + return true; + } + constructor() { + super(); + this.position = _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier.Position.RIGHT; + this.radius = 2; + this.setWidth(5); + this.dot_shiftY = 0; + } + setNote(note) { + this.note = note; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isGraceNote)(note)) { + this.radius *= 0.5; + this.setWidth(3); + } + return this; + } + setDotShiftY(y) { + this.dot_shiftY = y; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stave = note.checkStave(); + const lineSpace = stave.getSpacingBetweenLines(); + const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); + // Set the starting y coordinate to the base of the stem for TabNotes. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) { + start.y = note.getStemExtents().baseY; + } + const x = start.x + this.x_shift + this.width - this.radius; + const y = start.y + this.y_shift + this.dot_shiftY * lineSpace; + ctx.beginPath(); + ctx.arc(x, y, this.radius, 0, Math.PI * 2, false); + ctx.fill(); + } +} + + +/***/ }), + +/***/ "./src/easyscore.ts": +/*!**************************!*\ + !*** ./src/easyscore.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Builder": () => (/* binding */ Builder), +/* harmony export */ "EasyScore": () => (/* binding */ EasyScore), +/* harmony export */ "EasyScoreGrammar": () => (/* binding */ EasyScoreGrammar), +/* harmony export */ "Piece": () => (/* binding */ Piece) +/* harmony export */ }); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (EasyScore.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.EasyScore', args); +} +class EasyScoreGrammar { + constructor(builder) { + this.builder = builder; + } + begin() { + return this.LINE; + } + LINE() { + return { + expect: [this.PIECE, this.PIECES, this.EOL], + }; + } + PIECE() { + return { + expect: [this.CHORDORNOTE, this.PARAMS], + run: () => this.builder.commitPiece(), + }; + } + PIECES() { + return { + expect: [this.COMMA, this.PIECE], + zeroOrMore: true, + }; + } + PARAMS() { + return { + expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS], + }; + } + CHORDORNOTE() { + return { + expect: [this.CHORD, this.SINGLENOTE], + or: true, + }; + } + CHORD() { + return { + expect: [this.LPAREN, this.NOTES, this.RPAREN], + // eslint-disable-next-line + run: (state) => this.builder.addChord(state.matches[1]), + }; + } + NOTES() { + return { + expect: [this.NOTE], + oneOrMore: true, + }; + } + NOTE() { + return { + expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], + }; + } + SINGLENOTE() { + return { + expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], + run: (state) => { + // eslint-disable-next-line + const s = state; + this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]); + }, + }; + } + ACCIDENTAL() { + return { + expect: [this.MICROTONES, this.ACCIDENTALS], + maybe: true, + or: true, + }; + } + DOTS() { + return { + expect: [this.DOT], + zeroOrMore: true, + // eslint-disable-next-line + run: (state) => this.builder.setNoteDots(state.matches), + }; + } + TYPE() { + return { + expect: [this.SLASH, this.MAYBESLASH, this.TYPES], + maybe: true, + // eslint-disable-next-line + run: (state) => this.builder.setNoteType(state.matches[2]), + }; + } + DURATION() { + return { + expect: [this.SLASH, this.DURATIONS], + maybe: true, + // eslint-disable-next-line + run: (state) => this.builder.setNoteDuration(state.matches[1]), + }; + } + OPTS() { + return { + expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET], + maybe: true, + }; + } + KEYVALS() { + return { + expect: [this.COMMA, this.KEYVAL], + zeroOrMore: true, + }; + } + KEYVAL() { + const unquote = (str) => str.slice(1, -1); + return { + expect: [this.KEY, this.EQUALS, this.VAL], + // eslint-disable-next-line + run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])), + }; + } + VAL() { + return { + expect: [this.SVAL, this.DVAL], + or: true, + }; + } + KEY() { + return { token: '[a-zA-Z][a-zA-Z0-9]*' }; + } + DVAL() { + return { token: '["][^"]*["]' }; + } + SVAL() { + return { token: "['][^']*[']" }; + } + NOTENAME() { + return { token: '[a-gA-G]' }; + } + OCTAVE() { + return { token: '[0-9]+' }; + } + ACCIDENTALS() { + return { token: 'bb|b|##|#|n' }; + } + MICROTONES() { + return { token: 'bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o' }; + } + DURATIONS() { + return { token: '[0-9whq]+' }; + } + TYPES() { + return { token: '[rRsSmMhHgG]' }; + } + LPAREN() { + return { token: '[(]' }; + } + RPAREN() { + return { token: '[)]' }; + } + COMMA() { + return { token: '[,]' }; + } + DOT() { + return { token: '[.]' }; + } + SLASH() { + return { token: '[/]' }; + } + MAYBESLASH() { + return { token: '[/]?' }; + } + EQUALS() { + return { token: '[=]' }; + } + LBRACKET() { + return { token: '\\[' }; + } + RBRACKET() { + return { token: '\\]' }; + } + EOL() { + return { token: '$' }; + } +} +class Piece { + constructor(duration) { + this.chord = []; + this.dots = 0; + this.options = {}; + this.duration = duration; + } +} +class Builder { + constructor(factory) { + this.commitHooks = []; + this.factory = factory; + this.reset(); + } + reset(options) { + this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options); + this.elements = { notes: [], accidentals: [] }; + this.rollingDuration = '8'; + this.resetPiece(); + } + getFactory() { + return this.factory; + } + getElements() { + return this.elements; + } + addCommitHook(commitHook) { + this.commitHooks.push(commitHook); + } + resetPiece() { + L('resetPiece'); + this.piece = new Piece(this.rollingDuration); + } + setNoteDots(dots) { + L('setNoteDots:', dots); + if (dots) + this.piece.dots = dots.length; + } + setNoteDuration(duration) { + L('setNoteDuration:', duration); + this.rollingDuration = this.piece.duration = duration || this.rollingDuration; + } + setNoteType(type) { + L('setNoteType:', type); + if (type) + this.piece.type = type; + } + addNoteOption(key, value) { + L('addNoteOption: key:', key, 'value:', value); + this.piece.options[key] = value; + } + addNote(key, accid, octave) { + L('addNote:', key, accid, octave); + this.piece.chord.push({ + key: key, + accid, + octave, + }); + } + addSingleNote(key, accid, octave) { + L('addSingleNote:', key, accid, octave); + this.addNote(key, accid, octave); + } + // notes is an array with 3 entries + addChord(notes) { + L('startChord'); + if (typeof notes[0] !== 'object') { + this.addSingleNote(notes[0]); + } + else { + notes.forEach((n) => { + if (n) + this.addNote(...n); // n => [string, string | null, string] + }); + } + L('endChord'); + } + commitPiece() { + L('commitPiece'); + const { factory } = this; + if (!factory) + return; + const options = Object.assign(Object.assign({}, this.options), this.piece.options); + // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed. + // e.g., auto | up | down + const stem = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase(); + // e.g., treble | bass + const clef = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase(); + const { chord, duration, dots, type } = this.piece; + // Create a string[] that will be assigned to the .keys property of the StaveNote. + // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave} + // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included. + const standardAccidentals = _music__WEBPACK_IMPORTED_MODULE_3__.Music.accidentals; + const keys = chord.map((notePiece) => { + var _a; + return notePiece.key + + (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') + + '/' + + notePiece.octave; + }); + const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase. + // Build a GhostNote or StaveNote using the information we gathered. + const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g' + ? factory.GhostNote({ duration, dots }) + : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem }); + if (!auto_stem) + note.setStemDirection(stem === 'up' ? _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.DOWN); + // Attach accidentals. + const accidentals = []; + chord.forEach((notePiece, index) => { + const accid = notePiece.accid; + if (typeof accid === 'string') { + const accidental = factory.Accidental({ type: accid }); + note.addModifier(accidental, index); + accidentals.push(accidental); + } + else { + accidentals.push(undefined); + } + }); + // Attach dots. + for (let i = 0; i < dots; i++) + _dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([note], { all: true }); + this.commitHooks.forEach((commitHook) => commitHook(options, note, this)); + this.elements.notes.push(note); + this.elements.accidentals.push(accidentals); + this.resetPiece(); + } +} +/** + * Commit hook used by EasyScore.setOptions(). + */ +function setId(options, note) { + if (options.id === undefined) + return; + note.setAttribute('id', options.id); +} +// Used by setClass() below. +const commaSeparatedRegex = /\s*,\s*/; +/** + * Commit hook used by EasyScore.setOptions(). + */ +function setClass(options, note) { + if (options.class === undefined) + return; + options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className)); +} +/** + * EasyScore implements a parser for a simple language to generate VexFlow objects. + */ +class EasyScore { + constructor(options = {}) { + this.defaults = { + clef: 'treble', + time: '4/4', + stem: 'auto', + }; + this.setOptions(options); + } + /** + * Set the score defaults. + * clef must be set appropriately to avoid errors when adding Staves. + * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types} + * @param defaults.time default time signature ( 4/4 | 9/8 ...) + * @param defaults.stem default stem arrangement (auto | up | down) + * @returns this + */ + set(defaults) { + this.defaults = Object.assign(Object.assign({}, this.defaults), defaults); + return this; + } + /** + * @param options.factory is required. + * @returns this + */ + setOptions(options) { + var _a, _b; + // eslint-disable-next-line + const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore(). + const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory); + this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, _articulation__WEBPACK_IMPORTED_MODULE_0__.Articulation.easyScoreHook, _frethandfinger__WEBPACK_IMPORTED_MODULE_2__.FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory, + builder }); + this.factory = factory; + this.builder = builder; + this.grammar = new EasyScoreGrammar(this.builder); + this.parser = new _parser__WEBPACK_IMPORTED_MODULE_4__.Parser(this.grammar); + (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook)); + return this; + } + setContext(context) { + this.factory.setContext(context); + return this; + } + parse(line, options = {}) { + this.builder.reset(options); + const result = this.parser.parse(line); + if (!result.success && this.options.throwOnError) { + L(result); + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('Error parsing line: ' + line); + } + return result; + } + beam(notes, options) { + this.factory.Beam({ notes, options }); + return notes; + } + tuplet(notes, options) { + this.factory.Tuplet({ notes, options }); + return notes; + } + notes(line, options = {}) { + options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options); + this.parse(line, options); + return this.builder.getElements().notes; + } + voice(notes, options = {}) { + options = Object.assign({ time: this.defaults.time }, options); + return this.factory.Voice(options).addTickables(notes); + } + addCommitHook(commitHook) { + this.builder.addCommitHook(commitHook); + } +} +EasyScore.DEBUG = false; + + + +/***/ }), + +/***/ "./src/element.ts": +/*!************************!*\ + !*** ./src/element.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Element": () => (/* binding */ Element) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Mohit Cheppudira +// MIT License + + + + +/** + * Element implements a generic base class for VexFlow, with implementations + * of general functions and properties that can be inherited by all VexFlow elements. + * + * The Element is an abstract class that needs to be subclassed to work. It handles + * style and text-font properties for the Element and any child elements, along with + * working with the Registry to create unique ids, but does not have any tools for + * formatting x or y positions or connections to a Stave. + */ +class Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Element; + } + static newID() { + return `auto${Element.ID++}`; + } + constructor() { + var _a; + // all Element objects keep a list of children that they are responsible and which + // inherit the style of their parents. + this.children = []; + this.attrs = { + id: Element.newID(), + type: this.getCategory(), + class: '', + }; + this.rendered = false; + // If a default registry exist, then register with it right away. + (_a = _registry__WEBPACK_IMPORTED_MODULE_1__.Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this); + } + /** + * Adds a child Element to the Element, which lets it inherit the + * same style as the parent when setGroupStyle() is called. + * + * Examples of children are noteheads and stems. Modifiers such + * as Accidentals are generally not set as children. + * + * Note that StaveNote calls setGroupStyle() when setStyle() is called. + */ + addChildElement(child) { + this.children.push(child); + return this; + } + getCategory() { + return this.constructor.CATEGORY; + } + /** + * Set the element style used to render. + * + * Example: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.draw(); + * ``` + * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave), + * the style can be applied to all of them by means of the context: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.getContext().setFillStyle('red'); + * element.getContext().setStrokeStyle('red'); + * element.draw(); + * ``` + * or using drawWithStyle: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.drawWithStyle(); + * ``` + */ + setStyle(style) { + this.style = style; + return this; + } + /** Set the element & associated children style used for rendering. */ + setGroupStyle(style) { + this.style = style; + this.children.forEach((child) => child.setGroupStyle(style)); + return this; + } + /** Get the element style used for rendering. */ + getStyle() { + return this.style; + } + /** Apply the element style to `context`. */ + applyStyle(context = this.context, style = this.getStyle()) { + if (!style) + return this; + if (!context) + return this; + context.save(); + if (style.shadowColor) + context.setShadowColor(style.shadowColor); + if (style.shadowBlur) + context.setShadowBlur(style.shadowBlur); + if (style.fillStyle) + context.setFillStyle(style.fillStyle); + if (style.strokeStyle) + context.setStrokeStyle(style.strokeStyle); + if (style.lineWidth) + context.setLineWidth(style.lineWidth); + return this; + } + /** Restore the style of `context`. */ + restoreStyle(context = this.context, style = this.getStyle()) { + if (!style) + return this; + if (!context) + return this; + context.restore(); + return this; + } + /** + * Draw the element and all its sub-elements (ie.: Modifiers in a Stave) + * with the element's style (see `getStyle()` and `setStyle()`) + */ + drawWithStyle() { + this.checkContext(); + this.applyStyle(); + this.draw(); + this.restoreStyle(); + } + /** Check if it has a class label (An element can have multiple class labels). */ + hasClass(className) { + var _a; + if (!this.attrs.class) + return false; + return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1; + } + /** Add a class label (An element can have multiple class labels). */ + addClass(className) { + var _a; + if (this.hasClass(className)) + return this; + if (!this.attrs.class) + this.attrs.class = `${className}`; + else + this.attrs.class = `${this.attrs.class} ${className}`; + (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ + id: this.attrs.id, + name: 'class', + value: className, + oldValue: undefined, + }); + return this; + } + /** Remove a class label (An element can have multiple class labels). */ + removeClass(className) { + var _a, _b; + if (!this.hasClass(className)) + return this; + const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' '); + if (arr) { + arr.splice(arr.indexOf(className)); + this.attrs.class = arr.join(' '); + } + (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({ + id: this.attrs.id, + name: 'class', + value: undefined, + oldValue: className, + }); + return this; + } + /** Call back from registry after the element is registered. */ + onRegister(registry) { + this.registry = registry; + return this; + } + /** Return the rendered status. */ + isRendered() { + return this.rendered; + } + /** Set the rendered status. */ + setRendered(rendered = true) { + this.rendered = rendered; + return this; + } + /** Return the element attributes. */ + getAttributes() { + return this.attrs; + } + /** Return an attribute, such as 'id', 'type' or 'class'. */ + // eslint-disable-next-line + getAttribute(name) { + return this.attrs[name]; + } + /** Return associated SVGElement. */ + getSVGElement(suffix = '') { + const id = (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(this.attrs.id + suffix); + const element = document.getElementById(id); + if (element) + return element; + } + /** Set an attribute such as 'id', 'class', or 'type'. */ + setAttribute(name, value) { + var _a; + const oldID = this.attrs.id; + const oldValue = this.attrs[name]; + this.attrs[name] = value; + // Register with old id to support id changes. + (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue }); + return this; + } + /** Get the boundingBox. */ + getBoundingBox() { + return this.boundingBox; + } + /** Return the context, such as an SVGContext or CanvasContext object. */ + getContext() { + return this.context; + } + /** Set the context to an SVGContext or CanvasContext object */ + setContext(context) { + this.context = context; + return this; + } + /** Validate and return the rendering context. */ + checkContext() { + return (0,_util__WEBPACK_IMPORTED_MODULE_3__.defined)(this.context, 'NoContext', 'No rendering context attached to instance.'); + } + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Font Handling + /** + * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied + * to text (not glyphs). + */ + set font(f) { + this.setFont(f); + } + /** Returns the CSS compatible font string for the text font. */ + get font() { + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont); + } + /** + * Set the element's text font family, size, weight, style + * (e.g., `Arial`, `10pt`, `bold`, `italic`). + * + * This attribute does not determine the font used for musical Glyphs like treble clefs. + * + * @param font is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + * If no arguments are provided, then the font is set to the default font. + * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property. + */ + setFont(font, size, weight, style) { + // Allow subclasses to override `TEXT_FONT`. + const defaultTextFont = this.constructor.TEXT_FONT; + const fontIsObject = typeof font === 'object'; + const fontIsString = typeof font === 'string'; + const fontIsUndefined = font === undefined; + const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined; + if (fontIsObject) { + // `font` is case 1) a FontInfo object + this.textFont = Object.assign(Object.assign({}, defaultTextFont), font); + } + else if (fontIsString && sizeWeightStyleAreUndefined) { + // `font` is case 2) CSS font shorthand. + this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.fromCSSString(font); + } + else if (fontIsUndefined && sizeWeightStyleAreUndefined) { + // All arguments are undefined. Do not check for `arguments.length === 0`, + // which fails on the edge case: `setFont(undefined)`. + // TODO: See if we can remove this case entirely without introducing a visual diff. + // The else case below seems like it should be equivalent to this case. + this.textFont = Object.assign({}, defaultTextFont); + } + else { + // `font` is case 3) a font family string (e.g., 'Times New Roman'). + // The other parameters represent the size, weight, and style. + // It is okay for `font` to be undefined while one or more of the other arguments is provided. + // Following CSS conventions, unspecified params are reset to the default. + this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style); + } + return this; + } + /** + * Get the css string describing this Element's text font. e.g., + * 'bold 10pt Arial'. + */ + getFont() { + if (!this.textFont) { + this.resetFont(); + } + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont); + } + /** + * Reset the text font to the style indicated by the static `TEXT_FONT` property. + * Subclasses can call this to initialize `textFont` for the first time. + */ + resetFont() { + this.setFont(); + } + /** Return a copy of the current FontInfo object. */ + get fontInfo() { + if (!this.textFont) { + this.resetFont(); + } + // We can cast to Required here, because + // we just called resetFont() above to ensure this.textFont is set. + return Object.assign({}, this.textFont); + } + set fontInfo(fontInfo) { + this.setFont(fontInfo); + } + /** Change the font size, while keeping everything else the same. */ + setFontSize(size) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style); + return this; + } + /** + * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). + * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes. + */ + getFontSize() { + return this.fontSize; + } + /** + * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property. + * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt'). + */ + set fontSize(size) { + this.setFontSize(size); + } + /** + * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). + */ + get fontSize() { + let size = this.fontInfo.size; + if (typeof size === 'number') { + size = `${size}pt`; + } + return size; + } + /** + * @returns the font size in `pt`. + */ + get fontSizeInPoints() { + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(this.fontSize); + } + /** + * @returns the font size in `px`. + */ + get fontSizeInPixels() { + return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(this.fontSize); + } + /** + * @returns a CSS font-style string (e.g., 'italic'). + */ + get fontStyle() { + return this.fontInfo.style; + } + set fontStyle(style) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style); + } + /** + * @returns a CSS font-weight string (e.g., 'bold'). + * As in CSS, font-weight is always returned as a string, even if it was set as a number. + */ + get fontWeight() { + return this.fontInfo.weight + ''; + } + set fontWeight(weight) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style); + } +} +Element.ID = 1000; +/** + * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)` + * to customize the font for musical symbols placed on the score. + */ +Element.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/factory.ts": +/*!************************!*\ + !*** ./src/factory.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Factory": () => (/* binding */ Factory) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Mohit Cheppudira +// MIT License + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Factory.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_39__.log)('Vex.Flow.Factory', args); +} +/** + * Factory implements a high level API around VexFlow. + */ +class Factory { + /** + * Static simplified function to access constructor without providing FactoryOptions + * + * Example: + * + * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 + * + * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );` + */ + static newFromElementId(elementId, width = 500, height = 200) { + return new Factory({ renderer: { elementId, width, height } }); + } + /** + * Example: + * + * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 + * + * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});` + */ + constructor(options = {}) { + L('New factory: ', options); + this.options = { + stave: { + space: 10, + }, + renderer: { + elementId: '', + width: 500, + height: 200, + background: '#FFF', + }, + font: Factory.TEXT_FONT, + }; + this.setOptions(options); + } + reset() { + this.renderQ = []; + this.systems = []; + this.staves = []; + this.voices = []; + this.stave = undefined; // current stave + } + setOptions(options) { + this.options = Object.assign(Object.assign({}, this.options), options); + this.initRenderer(); + this.reset(); + } + initRenderer() { + const { elementId, width, height, background } = this.options.renderer; + if (elementId == null) { + return; + } + if (elementId == '') { + L(this); + throw new _util__WEBPACK_IMPORTED_MODULE_39__.RuntimeError('renderer.elementId not set in FactoryOptions'); + } + let backend = this.options.renderer.backend; + if (backend === undefined) { + const elem = document.getElementById(elementId); + // We use a custom type check here, because node-canvas mimics canvas, + // but is not an instance of window.HTMLCanvasElement. + // In fact, `window` might be undefined here. + // See: https://www.npmjs.com/package/canvas + if ((0,_web__WEBPACK_IMPORTED_MODULE_42__.isHTMLCanvas)(elem)) { + backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.CANVAS; + } + else { + backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.SVG; + } + } + this.context = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.buildContext(elementId, backend, width, height, background); + } + getContext() { + return this.context; + } + setContext(context) { + this.context = context; + return this; + } + getStave() { + return this.stave; + } + getVoices() { + return this.voices; + } + /** Return pixels from current stave spacing. */ + Stave(params) { + const staveSpace = this.options.stave.space; + const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params); + const stave = new _stave__WEBPACK_IMPORTED_MODULE_24__.Stave(p.x, p.y, p.width, p.options); + this.staves.push(stave); + stave.setContext(this.context); + this.stave = stave; + return stave; + } + TabStave(params) { + const staveSpace = this.options.stave.space; + const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params); + const stave = new _tabstave__WEBPACK_IMPORTED_MODULE_32__.TabStave(p.x, p.y, p.width, p.options); + this.staves.push(stave); + stave.setContext(this.context); + this.stave = stave; + return stave; + } + StaveNote(noteStruct) { + const note = new _stavenote__WEBPACK_IMPORTED_MODULE_27__.StaveNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GlyphNote(glyph, noteStruct, options) { + const note = new _glyphnote__WEBPACK_IMPORTED_MODULE_13__.GlyphNote(glyph, noteStruct, options); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + RepeatNote(type, noteStruct, options) { + const note = new _repeatnote__WEBPACK_IMPORTED_MODULE_23__.RepeatNote(type, noteStruct, options); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GhostNote(noteStruct) { + const ghostNote = new _ghostnote__WEBPACK_IMPORTED_MODULE_12__.GhostNote(noteStruct); + if (this.stave) + ghostNote.setStave(this.stave); + ghostNote.setContext(this.context); + this.renderQ.push(ghostNote); + return ghostNote; + } + TextNote(noteStruct) { + const textNote = new _textnote__WEBPACK_IMPORTED_MODULE_35__.TextNote(noteStruct); + if (this.stave) + textNote.setStave(this.stave); + textNote.setContext(this.context); + this.renderQ.push(textNote); + return textNote; + } + BarNote(params = {}) { + const barNote = new _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote(params.type); + if (this.stave) + barNote.setStave(this.stave); + barNote.setContext(this.context); + this.renderQ.push(barNote); + return barNote; + } + ClefNote(params) { + const p = Object.assign({ type: 'treble', options: { + size: 'default', + annotation: undefined, + } }, params); + const clefNote = new _clefnote__WEBPACK_IMPORTED_MODULE_6__.ClefNote(p.type, p.options.size, p.options.annotation); + if (this.stave) + clefNote.setStave(this.stave); + clefNote.setContext(this.context); + this.renderQ.push(clefNote); + return clefNote; + } + TimeSigNote(params) { + const p = Object.assign({ time: '4/4' }, params); + const timeSigNote = new _timesignote__WEBPACK_IMPORTED_MODULE_37__.TimeSigNote(p.time); + if (this.stave) + timeSigNote.setStave(this.stave); + timeSigNote.setContext(this.context); + this.renderQ.push(timeSigNote); + return timeSigNote; + } + KeySigNote(params) { + const keySigNote = new _keysignote__WEBPACK_IMPORTED_MODULE_16__.KeySigNote(params.key, params.cancelKey, params.alterKey); + if (this.stave) + keySigNote.setStave(this.stave); + keySigNote.setContext(this.context); + this.renderQ.push(keySigNote); + return keySigNote; + } + TabNote(noteStruct) { + const note = new _tabnote__WEBPACK_IMPORTED_MODULE_31__.TabNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GraceNote(noteStruct) { + const note = new _gracenote__WEBPACK_IMPORTED_MODULE_14__.GraceNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + return note; + } + GraceNoteGroup(params) { + const group = new _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__.GraceNoteGroup(params.notes, params.slur); + group.setContext(this.context); + return group; + } + Accidental(params) { + const accid = new _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental(params.type); + accid.setContext(this.context); + return accid; + } + Annotation(params) { + const p = Object.assign({ text: 'p', hJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify.CENTER, vJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM }, params); + const annotation = new _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(p.text); + annotation.setJustification(p.hJustify); + annotation.setVerticalJustification(p.vJustify); + annotation.setFont(p.font); + annotation.setContext(this.context); + return annotation; + } + ChordSymbol(params) { + const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params); + const chordSymbol = new _chordsymbol__WEBPACK_IMPORTED_MODULE_5__.ChordSymbol(); + chordSymbol.setHorizontal(p.hJustify); + chordSymbol.setVertical(p.vJustify); + chordSymbol.setEnableKerning(p.kerning); + chordSymbol.setReportWidth(p.reportWidth); + // There is a default font based on the engraving font. Only set then + // font if it is specific, else use the default + if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') { + if (typeof p.fontWeight === 'string') + chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight); + else + chordSymbol.setFont(p.fontFamily, p.fontSize, ''); + } + else if (typeof p.fontSize === 'number') { + chordSymbol.setFontSize(p.fontSize); + } + chordSymbol.setContext(this.context); + return chordSymbol; + } + Articulation(params) { + var _a; + const articulation = new _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.'); + if ((params === null || params === void 0 ? void 0 : params.position) != undefined) + articulation.setPosition(params.position); + if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined) + articulation.setBetweenLines(params.betweenLines); + articulation.setContext(this.context); + return articulation; + } + Ornament(type, params) { + const options = Object.assign({ type, position: 0, accidental: '' }, params); + const ornament = new _ornament__WEBPACK_IMPORTED_MODULE_20__.Ornament(type); + ornament.setPosition(options.position); + if (options.upperAccidental) { + ornament.setUpperAccidental(options.upperAccidental); + } + if (options.lowerAccidental) { + ornament.setLowerAccidental(options.lowerAccidental); + } + if (typeof options.delayed !== 'undefined') { + ornament.setDelayed(options.delayed); + } + ornament.setContext(this.context); + return ornament; + } + TextDynamics(params) { + const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params); + const text = new _textdynamics__WEBPACK_IMPORTED_MODULE_34__.TextDynamics({ + text: p.text, + line: p.line, + duration: p.duration, + dots: p.dots, + }); + if (this.stave) + text.setStave(this.stave); + text.setContext(this.context); + this.renderQ.push(text); + return text; + } + Fingering(params) { + const p = Object.assign({ number: '0', position: 'left' }, params); + const fingering = new _frethandfinger__WEBPACK_IMPORTED_MODULE_11__.FretHandFinger(p.number); + fingering.setPosition(p.position); + fingering.setContext(this.context); + return fingering; + } + StringNumber(params, drawCircle = true) { + const stringNumber = new _stringnumber__WEBPACK_IMPORTED_MODULE_29__.StringNumber(params.number); + stringNumber.setPosition(params.position); + stringNumber.setContext(this.context); + stringNumber.setDrawCircle(drawCircle); + return stringNumber; + } + TickContext() { + return new _tickcontext__WEBPACK_IMPORTED_MODULE_36__.TickContext(); + } + ModifierContext() { + return new _modifiercontext__WEBPACK_IMPORTED_MODULE_17__.ModifierContext(); + } + MultiMeasureRest(params) { + const numMeasures = (0,_util__WEBPACK_IMPORTED_MODULE_39__.defined)(params.number_of_measures, 'NoNumberOfMeasures'); + const multiMeasureRest = new _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__.MultiMeasureRest(numMeasures, params); + multiMeasureRest.setContext(this.context); + this.renderQ.push(multiMeasureRest); + return multiMeasureRest; + } + Voice(params) { + const p = Object.assign({ time: '4/4' }, params); + const voice = new _voice__WEBPACK_IMPORTED_MODULE_41__.Voice(p.time); + this.voices.push(voice); + return voice; + } + StaveConnector(params) { + const connector = new _staveconnector__WEBPACK_IMPORTED_MODULE_25__.StaveConnector(params.top_stave, params.bottom_stave); + connector.setType(params.type).setContext(this.context); + this.renderQ.push(connector); + return connector; + } + Formatter(options) { + return new _formatter__WEBPACK_IMPORTED_MODULE_10__.Formatter(options); + } + Tuplet(params) { + const p = Object.assign({ notes: [], options: {} }, params); + const tuplet = new _tuplet__WEBPACK_IMPORTED_MODULE_38__.Tuplet(p.notes, p.options).setContext(this.context); + this.renderQ.push(tuplet); + return tuplet; + } + Beam(params) { + var _a, _b, _c, _d, _e; + const beam = new _beam__WEBPACK_IMPORTED_MODULE_4__.Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context); + beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []); + if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) { + Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => { + beam.setPartialBeamSideAt(Number(noteIndex), direction); + }); + } + this.renderQ.push(beam); + return beam; + } + Curve(params) { + const curve = new _curve__WEBPACK_IMPORTED_MODULE_7__.Curve(params.from, params.to, params.options).setContext(this.context); + this.renderQ.push(curve); + return curve; + } + StaveTie(params) { + var _a; + const tie = new _stavetie__WEBPACK_IMPORTED_MODULE_28__.StaveTie({ + first_note: params.from, + last_note: params.to, + first_indices: params.first_indices, + last_indices: params.last_indices, + }, params.text); + if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction) + tie.setDirection(params.options.direction); + tie.setContext(this.context); + this.renderQ.push(tie); + return tie; + } + StaveLine(params) { + var _a, _b; + const line = new _staveline__WEBPACK_IMPORTED_MODULE_26__.StaveLine({ + first_note: params.from, + last_note: params.to, + first_indices: params.first_indices, + last_indices: params.last_indices, + }); + if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text) + line.setText(params.options.text); + if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font) + line.setFont(params.options.font); + line.setContext(this.context); + this.renderQ.push(line); + return line; + } + VibratoBracket(params) { + const vibratoBracket = new _vibratobracket__WEBPACK_IMPORTED_MODULE_40__.VibratoBracket({ + start: params.from, + stop: params.to, + }); + if (params.options.line) + vibratoBracket.setLine(params.options.line); + if (params.options.harsh) + vibratoBracket.setHarsh(params.options.harsh); + vibratoBracket.setContext(this.context); + this.renderQ.push(vibratoBracket); + return vibratoBracket; + } + TextBracket(params) { + const textBracket = new _textbracket__WEBPACK_IMPORTED_MODULE_33__.TextBracket({ + start: params.from, + stop: params.to, + text: params.text, + superscript: params.options.superscript, + position: params.options.position, + }); + if (params.options.line) + textBracket.setLine(params.options.line); + if (params.options.font) + textBracket.setFont(params.options.font); + textBracket.setContext(this.context); + this.renderQ.push(textBracket); + return textBracket; + } + System(params = {}) { + params.factory = this; + const system = new _system__WEBPACK_IMPORTED_MODULE_30__.System(params).setContext(this.context); + this.systems.push(system); + return system; + } + /** + * Creates EasyScore. Normally the first step after constructing a Factory. For example: + * ``` + * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }}); + * const score: EasyScore = vf.EasyScore(); + * ``` + * @param options.factory optional instance of Factory + * @param options.builder instance of Builder + * @param options.commitHooks function to call after a note element is created + * @param options.throwOnError throw error in case of parsing error + */ + EasyScore(options = {}) { + options.factory = this; + return new _easyscore__WEBPACK_IMPORTED_MODULE_8__.EasyScore(options); + } + PedalMarking(params) { + const p = Object.assign({ notes: [], options: { + style: 'mixed', + } }, params); + const pedal = new _pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking(p.notes); + pedal.setType(_pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking.typeString[p.options.style]); + pedal.setContext(this.context); + this.renderQ.push(pedal); + return pedal; + } + NoteSubGroup(params) { + const p = Object.assign({ notes: [] }, params); + const group = new _notesubgroup__WEBPACK_IMPORTED_MODULE_19__.NoteSubGroup(p.notes); + group.setContext(this.context); + return group; + } + /** Render the score. */ + draw() { + const ctx = this.context; + this.systems.forEach((s) => s.setContext(ctx).format()); + this.staves.forEach((s) => s.setContext(ctx).draw()); + this.voices.forEach((v) => v.setContext(ctx).draw()); + this.renderQ.forEach((e) => { + if (!e.isRendered()) + e.setContext(ctx).draw(); + }); + this.systems.forEach((s) => s.setContext(ctx).draw()); + this.reset(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */ +Factory.DEBUG = false; +/** Default text font. */ +Factory.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_9__.Element.TEXT_FONT); + + + +/***/ }), + +/***/ "./src/flow.ts": +/*!*********************!*\ + !*** ./src/flow.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Flow": () => (/* binding */ Flow) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ "./src/factory.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); +/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.ts"); +/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./tuning */ "./src/tuning.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./version */ "./src/version.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +class Flow { + static get BUILD() { + return { + /** version number. */ + VERSION: _version__WEBPACK_IMPORTED_MODULE_78__.VERSION, + /** git commit ID that this library was built from. */ + ID: _version__WEBPACK_IMPORTED_MODULE_78__.ID, + /** The date when this library was compiled. */ + DATE: _version__WEBPACK_IMPORTED_MODULE_78__.DATE, + }; + } + /** + * Examples: + * ``` + * Vex.Flow.setMusicFont('Petaluma'); + * Vex.Flow.setMusicFont('Bravura', 'Gonville'); + * ``` + * + * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom). + * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of: + * 'Bravura', 'Gonville', 'Custom'. + * + * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`, + * which includes a single music font. Calling this method is unnecessary. + * + * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts. + * In this case, the default music font stack is empty. + * Example: + * ``` + * await Vex.Flow.fetchMusicFont('Petaluma'); + * Vex.Flow.setMusicFont('Petaluma'); + * ... (do VexFlow stuff) ... + * ``` + * See `demos/fonts/` for more examples. + * + * @returns an array of Font objects corresponding to the provided `fontNames`. + */ + static setMusicFont(...fontNames) { + // Convert the array of font names into an array of Font objects. + const fonts = fontNames.map((fontName) => _font__WEBPACK_IMPORTED_MODULE_18__.Font.load(fontName)); + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK = fonts; + _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.MUSIC_FONT_STACK = fonts.slice(); + _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.CURRENT_CACHE_KEY = fontNames.join(','); + return fonts; + } + /** + * Used with vexflow-core which supports dynamic font loading. + */ + // eslint-disable-next-line + static fetchMusicFont(fontName, fontModuleOrPath) { + return __awaiter(this, void 0, void 0, function* () { + // The default implementation does nothing. + // See vexflow-core.ts for the implementation that vexflow-core.js uses. + }); + } + static getMusicFont() { + const fonts = _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK; + return fonts.map((font) => font.getName()); + } + static getMusicFontStack() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK; + } + static get RENDER_PRECISION_PLACES() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES; + } + static set RENDER_PRECISION_PLACES(precision) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES = precision; + } + static get SOFTMAX_FACTOR() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR; + } + static set SOFTMAX_FACTOR(factor) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR = factor; + } + static get NOTATION_FONT_SCALE() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE; + } + static set NOTATION_FONT_SCALE(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE = value; + } + static get TABLATURE_FONT_SCALE() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE; + } + static set TABLATURE_FONT_SCALE(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE = value; + } + static get RESOLUTION() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION; + } + static set RESOLUTION(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION = value; + } + static get SLASH_NOTEHEAD_WIDTH() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH; + } + static set SLASH_NOTEHEAD_WIDTH(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH = value; + } + static get STAVE_LINE_DISTANCE() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE; + } + static set STAVE_LINE_DISTANCE(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE = value; + } + static get STAVE_LINE_THICKNESS() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS; + } + static set STAVE_LINE_THICKNESS(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS = value; + } + static get STEM_HEIGHT() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT; + } + static set STEM_HEIGHT(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT = value; + } + static get STEM_WIDTH() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH; + } + static set STEM_WIDTH(value) { + _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH = value; + } + static get TIME4_4() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TIME4_4; + } + static get accidentalMap() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.accidentalMap; + } + static get unicode() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.unicode; + } + static keySignature(spec) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keySignature(spec); + } + static hasKeySignature(spec) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.hasKeySignature(spec); + } + static getKeySignatures() { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.getKeySignatures(); + } + static clefProperties(clef) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.clefProperties(clef); + } + // eslint-disable-next-line + static keyProperties(key, clef, params) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keyProperties(key, clef, params); + } + static durationToTicks(duration) { + return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.durationToTicks(duration); + } +} +Flow.Accidental = _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental; +Flow.Annotation = _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation; +Flow.Articulation = _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation; +Flow.Barline = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.Barline; +Flow.BarNote = _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote; +Flow.Beam = _beam__WEBPACK_IMPORTED_MODULE_4__.Beam; +Flow.Bend = _bend__WEBPACK_IMPORTED_MODULE_5__.Bend; +Flow.BoundingBox = _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox; +Flow.BoundingBoxComputation = _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation; +Flow.CanvasContext = _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext; +Flow.ChordSymbol = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol; +Flow.Clef = _clef__WEBPACK_IMPORTED_MODULE_10__.Clef; +Flow.ClefNote = _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote; +Flow.Crescendo = _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo; +Flow.Curve = _curve__WEBPACK_IMPORTED_MODULE_13__.Curve; +Flow.Dot = _dot__WEBPACK_IMPORTED_MODULE_14__.Dot; +Flow.EasyScore = _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore; +Flow.Element = _element__WEBPACK_IMPORTED_MODULE_16__.Element; +Flow.Factory = _factory__WEBPACK_IMPORTED_MODULE_17__.Factory; +Flow.Font = _font__WEBPACK_IMPORTED_MODULE_18__.Font; +Flow.Formatter = _formatter__WEBPACK_IMPORTED_MODULE_19__.Formatter; +Flow.Fraction = _fraction__WEBPACK_IMPORTED_MODULE_20__.Fraction; +Flow.FretHandFinger = _frethandfinger__WEBPACK_IMPORTED_MODULE_21__.FretHandFinger; +Flow.GhostNote = _ghostnote__WEBPACK_IMPORTED_MODULE_22__.GhostNote; +Flow.Glyph = _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph; +Flow.GlyphNote = _glyphnote__WEBPACK_IMPORTED_MODULE_24__.GlyphNote; +Flow.GraceNote = _gracenote__WEBPACK_IMPORTED_MODULE_25__.GraceNote; +Flow.GraceNoteGroup = _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__.GraceNoteGroup; +Flow.GraceTabNote = _gracetabnote__WEBPACK_IMPORTED_MODULE_27__.GraceTabNote; +Flow.KeyManager = _keymanager__WEBPACK_IMPORTED_MODULE_28__.KeyManager; +Flow.KeySignature = _keysignature__WEBPACK_IMPORTED_MODULE_29__.KeySignature; +Flow.KeySigNote = _keysignote__WEBPACK_IMPORTED_MODULE_30__.KeySigNote; +Flow.Modifier = _modifier__WEBPACK_IMPORTED_MODULE_31__.Modifier; +Flow.ModifierContext = _modifiercontext__WEBPACK_IMPORTED_MODULE_32__.ModifierContext; +Flow.MultiMeasureRest = _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__.MultiMeasureRest; +Flow.Music = _music__WEBPACK_IMPORTED_MODULE_34__.Music; +Flow.Note = _note__WEBPACK_IMPORTED_MODULE_35__.Note; +Flow.NoteHead = _notehead__WEBPACK_IMPORTED_MODULE_36__.NoteHead; +Flow.NoteSubGroup = _notesubgroup__WEBPACK_IMPORTED_MODULE_37__.NoteSubGroup; +Flow.Ornament = _ornament__WEBPACK_IMPORTED_MODULE_38__.Ornament; +Flow.Parenthesis = _parenthesis__WEBPACK_IMPORTED_MODULE_39__.Parenthesis; +Flow.Parser = _parser__WEBPACK_IMPORTED_MODULE_40__.Parser; +Flow.PedalMarking = _pedalmarking__WEBPACK_IMPORTED_MODULE_41__.PedalMarking; +Flow.Registry = _registry__WEBPACK_IMPORTED_MODULE_42__.Registry; +Flow.RenderContext = _rendercontext__WEBPACK_IMPORTED_MODULE_43__.RenderContext; +Flow.Renderer = _renderer__WEBPACK_IMPORTED_MODULE_44__.Renderer; +Flow.RepeatNote = _repeatnote__WEBPACK_IMPORTED_MODULE_45__.RepeatNote; +Flow.Repetition = _staverepetition__WEBPACK_IMPORTED_MODULE_53__.Repetition; +Flow.Stave = _stave__WEBPACK_IMPORTED_MODULE_46__.Stave; +Flow.StaveConnector = _staveconnector__WEBPACK_IMPORTED_MODULE_48__.StaveConnector; +Flow.StaveHairpin = _stavehairpin__WEBPACK_IMPORTED_MODULE_49__.StaveHairpin; +Flow.StaveLine = _staveline__WEBPACK_IMPORTED_MODULE_50__.StaveLine; +Flow.StaveModifier = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifier; +Flow.StaveNote = _stavenote__WEBPACK_IMPORTED_MODULE_52__.StaveNote; +Flow.StaveTempo = _stavetempo__WEBPACK_IMPORTED_MODULE_54__.StaveTempo; +Flow.StaveText = _stavetext__WEBPACK_IMPORTED_MODULE_55__.StaveText; +Flow.StaveTie = _stavetie__WEBPACK_IMPORTED_MODULE_56__.StaveTie; +Flow.Stem = _stem__WEBPACK_IMPORTED_MODULE_58__.Stem; +Flow.StringNumber = _stringnumber__WEBPACK_IMPORTED_MODULE_59__.StringNumber; +Flow.Stroke = _strokes__WEBPACK_IMPORTED_MODULE_60__.Stroke; +Flow.SVGContext = _svgcontext__WEBPACK_IMPORTED_MODULE_61__.SVGContext; +Flow.System = _system__WEBPACK_IMPORTED_MODULE_62__.System; +Flow.TabNote = _tabnote__WEBPACK_IMPORTED_MODULE_64__.TabNote; +Flow.TabSlide = _tabslide__WEBPACK_IMPORTED_MODULE_65__.TabSlide; +Flow.TabStave = _tabstave__WEBPACK_IMPORTED_MODULE_66__.TabStave; +Flow.TabTie = _tabtie__WEBPACK_IMPORTED_MODULE_67__.TabTie; +Flow.TextBracket = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracket; +Flow.TextDynamics = _textdynamics__WEBPACK_IMPORTED_MODULE_69__.TextDynamics; +Flow.TextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_70__.TextFormatter; +Flow.TextNote = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextNote; +Flow.TickContext = _tickcontext__WEBPACK_IMPORTED_MODULE_72__.TickContext; +Flow.TimeSignature = _timesignature__WEBPACK_IMPORTED_MODULE_73__.TimeSignature; +Flow.TimeSigNote = _timesignote__WEBPACK_IMPORTED_MODULE_74__.TimeSigNote; +Flow.Tremolo = _tremolo__WEBPACK_IMPORTED_MODULE_75__.Tremolo; +Flow.Tuning = _tuning__WEBPACK_IMPORTED_MODULE_76__.Tuning; +Flow.Tuplet = _tuplet__WEBPACK_IMPORTED_MODULE_77__.Tuplet; +Flow.Vibrato = _vibrato__WEBPACK_IMPORTED_MODULE_79__.Vibrato; +Flow.VibratoBracket = _vibratobracket__WEBPACK_IMPORTED_MODULE_80__.VibratoBracket; +Flow.Voice = _voice__WEBPACK_IMPORTED_MODULE_81__.Voice; +Flow.Volta = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.Volta; +// Exported Enums. +// Sorted by the module / file they are exported from. +Flow.AnnotationHorizontalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify; +Flow.AnnotationVerticalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify; +Flow.ChordSymbolHorizontalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify; +Flow.ChordSymbolVerticalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify; +Flow.SymbolTypes = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes; +Flow.SymbolModifiers = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers; +Flow.CurvePosition = _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition; +Flow.FontWeight = _font__WEBPACK_IMPORTED_MODULE_18__.FontWeight; +Flow.FontStyle = _font__WEBPACK_IMPORTED_MODULE_18__.FontStyle; +Flow.ModifierPosition = _modifier__WEBPACK_IMPORTED_MODULE_31__.ModifierPosition; +Flow.RendererBackends = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererBackends; +Flow.RendererLineEndType = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererLineEndType; +Flow.BarlineType = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.BarlineType; +Flow.StaveModifierPosition = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifierPosition; +Flow.VoltaType = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.VoltaType; +Flow.TextBracketPosition = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracketPosition; +Flow.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextJustification; +Flow.VoiceMode = _voice__WEBPACK_IMPORTED_MODULE_81__.VoiceMode; + + + +/***/ }), + +/***/ "./src/font.ts": +/*!*********************!*\ + !*** ./src/font.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Font": () => (/* binding */ Font), +/* harmony export */ "FontStyle": () => (/* binding */ FontStyle), +/* harmony export */ "FontWeight": () => (/* binding */ FontWeight) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +var FontWeight; +(function (FontWeight) { + FontWeight["NORMAL"] = "normal"; + FontWeight["BOLD"] = "bold"; +})(FontWeight || (FontWeight = {})); +var FontStyle; +(function (FontStyle) { + FontStyle["NORMAL"] = "normal"; + FontStyle["ITALIC"] = "italic"; +})(FontStyle || (FontStyle = {})); +// Internal element for parsing CSS font shorthand strings. +let fontParser; +const Fonts = {}; +class Font { + /** + * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') + * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported + * units (e.g., pt, em, %). + * @returns the number of pixels that is equivalent to `fontSize` + */ + static convertSizeToPixelValue(fontSize = Font.SIZE) { + var _a; + if (typeof fontSize === 'number') { + // Assume the numeric fontSize is specified in pt. + return fontSize * Font.scaleToPxFrom.pt; + } + else { + const value = parseFloat(fontSize); + if (isNaN(value)) { + return 0; + } + const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces. + const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1; + return value * conversionFactor; + } + } + /** + * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') + * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported + * units (e.g., pt, em, %). + * @returns the number of points that is equivalent to `fontSize` + */ + static convertSizeToPointValue(fontSize = Font.SIZE) { + var _a; + if (typeof fontSize === 'number') { + // Assume the numeric fontSize is specified in pt. + return fontSize; + } + else { + const value = parseFloat(fontSize); + if (isNaN(value)) { + return 0; + } + const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces. + const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt; + return value * conversionFactor; + } + } + /** + * @param f + * @param size + * @param weight + * @param style + * @returns the `size` field will include the units (e.g., '12pt', '16px'). + */ + static validate(f, size, weight, style) { + // If f is a string but all other arguments are undefined, we assume that + // f is CSS font shorthand (e.g., 'italic bold 10pt Arial'). + if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) { + return Font.fromCSSString(f); + } + let family; + if (typeof f === 'object') { + // f is a FontInfo object, so we extract its fields. + family = f.family; + size = f.size; + weight = f.weight; + style = f.style; + } + else { + // f is a string representing the font family name or undefined. + family = f; + } + family = family !== null && family !== void 0 ? family : Font.SANS_SERIF; + size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt'; + weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL; + style = style !== null && style !== void 0 ? style : FontStyle.NORMAL; + if (weight === '') { + weight = FontWeight.NORMAL; + } + if (style === '') { + style = FontStyle.NORMAL; + } + // If size is a number, we assume the unit is `pt`. + if (typeof size === 'number') { + size = `${size}pt`; + } + // If weight is a number (e.g., 900), turn it into a string representation of that number. + if (typeof weight === 'number') { + weight = weight.toString(); + } + // At this point, `family`, `size`, `weight`, and `style` are all strings. + return { family, size, weight, style }; + } + /** + * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial'). + */ + static fromCSSString(cssFontShorthand) { + // Let the browser parse this string for us. + // First, create a span element. + // Then, set its style.font and extract it back out. + if (!fontParser) { + fontParser = document.createElement('span'); + } + fontParser.style.font = cssFontShorthand; + const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style; + return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle }; + } + /** + * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`. + */ + static toCSSString(fontInfo) { + var _a; + if (!fontInfo) { + return ''; + } + let style; + const st = fontInfo.style; + if (st === FontStyle.NORMAL || st === '' || st === undefined) { + style = ''; // no space! Omit the style section. + } + else { + style = st.trim() + ' '; + } + let weight; + const wt = fontInfo.weight; + if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) { + weight = ''; // no space! Omit the weight section. + } + else if (typeof wt === 'number') { + weight = wt + ' '; + } + else { + weight = wt.trim() + ' '; + } + let size; + const sz = fontInfo.size; + if (sz === undefined) { + size = Font.SIZE + 'pt '; + } + else if (typeof sz === 'number') { + size = sz + 'pt '; + } + else { + // size is already a string. + size = sz.trim() + ' '; + } + const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF; + return `${style}${weight}${size}${family}`; + } + /** + * @param fontSize a number representing a font size, or a string font size with units. + * @param scaleFactor multiply the size by this factor. + * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48). + * If the fontSize argument was a number, the return value will be a number. + * If the fontSize argument was a string, the return value will be a string. + */ + static scaleSize(fontSize, scaleFactor) { + if (typeof fontSize === 'number') { + return (fontSize * scaleFactor); + } + else { + const value = parseFloat(fontSize); + const unit = fontSize.replace(/[\d.\s]/g, ''); // Remove all numbers, dots, spaces. + return `${value * scaleFactor}${unit}`; + } + } + /** + * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec). + * @returns true if the font weight indicates bold. + */ + static isBold(weight) { + if (!weight) { + return false; + } + else if (typeof weight === 'number') { + return weight >= 600; + } + else { + // a string can be 'bold' or '700' + const parsedWeight = parseInt(weight, 10); + if (isNaN(parsedWeight)) { + return weight.toLowerCase() === 'bold'; + } + else { + return parsedWeight >= 600; + } + } + } + /** + * @param style + * @returns true if the font style indicates 'italic'. + */ + static isItalic(style) { + if (!style) { + return false; + } + else { + return style.toLowerCase() === FontStyle.ITALIC; + } + } + /** + * @param fontName + * @param woffURL The absolute or relative URL to the woff file. + * @param includeWoff2 If true, we assume that a woff2 file is in + * the same folder as the woff file, and will append a `2` to the url. + */ + // Support distributions of the typescript compiler that do not yet include the FontFace API declarations. + // eslint-disable-next-line + // @ts-ignore + static loadWebFont(fontName, woffURL, includeWoff2 = true) { + return __awaiter(this, void 0, void 0, function* () { + const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : ''; + const woff1URL = `url(${woffURL}) format('woff')`; + const woffURLs = woff2URL + woff1URL; + // eslint-disable-next-line + // @ts-ignore + const fontFace = new FontFace(fontName, woffURLs); + yield fontFace.load(); + // eslint-disable-next-line + // @ts-ignore + document.fonts.add(fontFace); + return fontFace; + }); + } + /** + * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls: + * `await Vex.Flow.Font.loadWebFonts();` + * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts), + * and a @font-face { font-family: ... } rule in your CSS. + * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial, + * depending on the current music engraving font. + * + * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts + * for your app. + */ + static loadWebFonts() { + return __awaiter(this, void 0, void 0, function* () { + const host = Font.WEB_FONT_HOST; + const files = Font.WEB_FONT_FILES; + for (const fontName in files) { + const fontPath = files[fontName]; + Font.loadWebFont(fontName, host + fontPath); + } + }); + } + /** + * @param fontName + * @param data optionally set the Font object's `.data` property. + * This is usually done when setting up a font for the first time. + * @param metrics optionally set the Font object's `.metrics` property. + * This is usually done when setting up a font for the first time. + * @returns a Font object with the given `fontName`. + * Reuse an existing Font object if a matching one is found. + */ + static load(fontName, data, metrics) { + let font = Fonts[fontName]; + if (!font) { + font = new Font(fontName); + Fonts[fontName] = font; + } + if (data) { + font.setData(data); + } + if (metrics) { + font.setMetrics(metrics); + } + return font; + } + /** + * Use `Font.load(fontName)` to get a Font object. + * Do not call this constructor directly. + */ + constructor(fontName) { + this.name = fontName; + } + getName() { + return this.name; + } + getData() { + return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.data, 'FontError', 'Missing font data'); + } + getMetrics() { + return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.metrics, 'FontError', 'Missing metrics'); + } + setData(data) { + this.data = data; + } + setMetrics(metrics) { + this.metrics = metrics; + } + hasData() { + return this.data !== undefined; + } + getResolution() { + return this.getData().resolution; + } + getGlyphs() { + return this.getData().glyphs; + } + /** + * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts). + * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY). + * @param defaultValue is returned if the lookup fails. + * @returns the retrieved value (or `defaultValue` if the lookup fails). + */ + // eslint-disable-next-line + lookupMetric(key, defaultValue) { + const keyParts = key.split('.'); + // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key). + let currObj = this.getMetrics(); + for (let i = 0; i < keyParts.length; i++) { + const keyPart = keyParts[i]; + const value = currObj[keyPart]; + if (value === undefined) { + // If the key lookup fails, we fall back to the defaultValue. + return defaultValue; + } + // The most recent lookup succeeded, so we drill deeper into the object. + currObj = value; + } + // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value. + return currObj; + } + /** For debugging. */ + toString() { + return '[' + this.name + ' Font]'; + } +} +////////////////////////////////////////////////////////////////////////////////////////////////// +// STATIC MEMBERS +/** Default sans-serif font family. */ +Font.SANS_SERIF = 'Arial, sans-serif'; +/** Default serif font family. */ +Font.SERIF = 'Times New Roman, serif'; +/** Default font size in `pt`. */ +Font.SIZE = 10; +// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in +/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */ +Font.scaleToPxFrom = { + pt: 4 / 3, + px: 1, + em: 16, + '%': 4 / 25, + in: 96, + mm: 96 / 25.4, + cm: 96 / 2.54, +}; +/** + * Customize this field to specify a different CDN for delivering web fonts. + * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/ + * Or you can use your own host. + */ +Font.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/'; +/** + * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when + * `await Font.loadWebFonts()` is called. Customize this field to specify a different + * set of fonts to load. See: `Font.loadWebFonts()`. + */ +Font.WEB_FONT_FILES = { + 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff', + PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff', +}; + + + +/***/ }), + +/***/ "./src/fonts/bravura_glyphs.ts": +/*!*************************************!*\ + !*** ./src/fonts/bravura_glyphs.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BravuraFont": () => (/* binding */ BravuraFont) +/* harmony export */ }); +const BravuraFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 469, + y_min: 0, + y_max: 295, + ha: 295, + o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z', + }, + bracketBottom: { + x_min: 0, + x_max: 469, + y_min: -295, + y_max: 0, + ha: 295, + o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z', + }, + barlineTick: { + x_min: 0, + x_max: 36, + y_min: 868, + y_max: 1120, + ha: 252, + o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z', + }, + breathMarkTick: { + x_min: 0, + x_max: 500, + y_min: 0, + y_max: 502, + ha: 502, + o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z', + }, + segno: { + x_min: 4, + x_max: 550, + y_min: -27, + y_max: 759, + ha: 786, + o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z', + }, + coda: { + x_min: -4, + x_max: 955, + y_min: -158, + y_max: 898, + ha: 1056, + o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z', + }, + gClef: { + x_min: 0, + x_max: 671, + y_min: -658, + y_max: 1098, + ha: 1756, + o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z', + }, + cClef: { + x_min: 0, + x_max: 699, + y_min: -506, + y_max: 506, + ha: 1012, + o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z', + }, + fClef: { + x_min: -5, + x_max: 684, + y_min: -635, + y_max: 262, + ha: 897, + o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 382, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z', + }, + '6stringTabClef': { + x_min: -3, + x_max: 408, + y_min: -748, + y_max: 764, + ha: 1512, + o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z', + }, + timeSig0: { + x_min: 20, + x_max: 450, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z', + }, + timeSig1: { + x_min: 20, + x_max: 314, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z', + }, + timeSig2: { + x_min: 20, + x_max: 426, + y_min: -257, + y_max: 254, + ha: 511, + o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z', + }, + timeSig3: { + x_min: 20, + x_max: 401, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z', + }, + timeSig4: { + x_min: 20, + x_max: 450, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z', + }, + timeSig5: { + x_min: 20, + x_max: 383, + y_min: -251, + y_max: 246, + ha: 497, + o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z', + }, + timeSig6: { + x_min: 20, + x_max: 414, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z', + }, + timeSig7: { + x_min: 20, + x_max: 421, + y_min: -250, + y_max: 249, + ha: 499, + o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z', + }, + timeSig8: { + x_min: 20, + x_max: 416, + y_min: -259, + y_max: 259, + ha: 518, + o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z', + }, + timeSig9: { + x_min: 20, + x_max: 414, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z', + }, + timeSigCommon: { + x_min: 5, + x_max: 424, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 418, + y_min: -359, + y_max: 361, + ha: 720, + o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z', + }, + timeSigPlus: { + x_min: -1, + x_max: 499, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z', + }, + timeSigPlusSmall: { + x_min: -1, + x_max: 255, + y_min: -133, + y_max: 123, + ha: 256, + o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 448, + y_min: -35, + y_max: 40, + ha: 75, + o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z', + }, + timeSigParensRight: { + x_min: 0, + x_max: 184, + y_min: -489, + y_max: 491, + ha: 980, + o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z', + }, + timeSigParensRightSmall: { + x_min: 0, + x_max: 110, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z', + }, + timeSigParensLeft: { + x_min: 0, + x_max: 184, + y_min: -489, + y_max: 491, + ha: 980, + o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z', + }, + timeSigParensLeftSmall: { + x_min: 0, + x_max: 110, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 599, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 422, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 295, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 295, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z', + }, + noteheadXDoubleWhole: { + x_min: 0, + x_max: 546, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 377, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 334, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 290, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z', + }, + noteheadCircleXDoubleWhole: { + x_min: 0, + x_max: 422, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z', + }, + noteheadCircleXWhole: { + x_min: 0, + x_max: 249, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z', + }, + noteheadCircleXHalf: { + x_min: 0, + x_max: 250, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 249, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z', + }, + noteheadCircledDoubleWhole: { + x_min: 0, + x_max: 603, + y_min: -218, + y_max: 213, + ha: 431, + o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z', + }, + noteheadCircledWhole: { + x_min: 0, + x_max: 437, + y_min: -225, + y_max: 211, + ha: 436, + o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z', + }, + noteheadCircledHalf: { + x_min: -18, + x_max: 311, + y_min: -162, + y_max: 167, + ha: 329, + o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z', + }, + noteheadCircledBlack: { + x_min: -21, + x_max: 321, + y_min: -171, + y_max: 167, + ha: 338, + o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 416, + y_min: -190, + y_max: 198, + ha: 388, + o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 313, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 313, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z', + }, + noteheadTriangleDownDoubleWhole: { + x_min: 0, + x_max: 483, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z', + }, + noteheadTriangleDownWhole: { + x_min: 0, + x_max: 319, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z', + }, + noteheadTriangleDownHalf: { + x_min: 0, + x_max: 285, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z', + }, + noteheadTriangleDownBlack: { + x_min: 0, + x_max: 292, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 207 -180 l 420 180 l 0 180 z', + }, + noteheadTriangleUpDoubleWhole: { + x_min: 0, + x_max: 483, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 319, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 285, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 293, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 422 -180 l 207 180 l 0 -180 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: 0, + x_max: 596, + y_min: -179, + y_max: 168, + ha: 347, + o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z', + }, + noteheadSlashedWhole1: { + x_min: -22, + x_max: 433, + y_min: -157, + y_max: 148, + ha: 305, + o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z', + }, + noteheadSlashedHalf1: { + x_min: -67, + x_max: 386, + y_min: -142, + y_max: 160, + ha: 302, + o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z', + }, + noteheadSlashedBlack1: { + x_min: -80, + x_max: 375, + y_min: -165, + y_max: 167, + ha: 332, + o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: 0, + x_max: 596, + y_min: -178, + y_max: 169, + ha: 347, + o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z', + }, + noteheadSlashedWhole2: { + x_min: -18, + x_max: 436, + y_min: -154, + y_max: 151, + ha: 305, + o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z', + }, + noteheadSlashedHalf2: { + x_min: -73, + x_max: 380, + y_min: -134, + y_max: 168, + ha: 302, + o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z', + }, + noteheadSlashedBlack2: { + x_min: -79, + x_max: 376, + y_min: -164, + y_max: 168, + ha: 332, + o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 432, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 270, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 251, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 250, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z', + }, + noteheadParenthesis: { + x_min: -73, + x_max: 368, + y_min: -180, + y_max: 182, + ha: 362, + o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z', + }, + noteheadParenthesisRight: { + x_min: -36, + x_max: 73, + y_min: -181, + y_max: 181, + ha: 362, + o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 109, + y_min: -181, + y_max: 181, + ha: 362, + o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 315, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 339, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 488 -180 l 0 180 l 0 -180 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 339, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 488 180 l 0 -180 l 488 -180 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 278, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z', + }, + augmentationDot: { + x_min: 0, + x_max: 100, + y_min: -50, + y_max: 50, + ha: 100, + o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z', + }, + tremolo1: { + x_min: -150, + x_max: 150, + y_min: -93, + y_max: 94, + ha: 187, + o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z', + }, + flag8thUp: { + x_min: 0, + x_max: 264, + y_min: -810, + y_max: 9, + ha: 819, + o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z', + }, + flag8thDown: { + x_min: 0, + x_max: 306, + y_min: -14, + y_max: 808, + ha: 822, + o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z', + }, + flag16thUp: { + x_min: 0, + x_max: 279, + y_min: -813, + y_max: 2, + ha: 815, + o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z', + }, + flag16thDown: { + x_min: 0, + x_max: 291, + y_min: -9, + y_max: 812, + ha: 821, + o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 149, + ha: 961, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag32ndDown: { + x_min: 0, + x_max: 273, + y_min: -172, + y_max: 812, + ha: 984, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z', + }, + flag64thUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 347, + ha: 1159, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag64thDown: { + x_min: 0, + x_max: 273, + y_min: -376, + y_max: 812, + ha: 1188, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z', + }, + flag128thUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 533, + ha: 1345, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag128thDown: { + x_min: 0, + x_max: 273, + y_min: -580, + y_max: 812, + ha: 1392, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z', + }, + accidentalFlat: { + x_min: 0, + x_max: 226, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 168, + y_min: -335, + y_max: 341, + ha: 676, + o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 249, + y_min: -348, + y_max: 350, + ha: 698, + o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 247, + y_min: -125, + y_max: 127, + ha: 252, + o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 411, + y_min: -175, + y_max: 437, + ha: 612, + o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 141, + y_min: -248, + y_max: 247, + ha: 495, + o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 141, + y_min: -248, + y_max: 247, + ha: 495, + o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 1, + x_max: 227, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 1, + x_max: 466, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 179, + y_min: -353, + y_max: 307, + ha: 660, + o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 3, + x_max: 317, + y_min: -347, + y_max: 369, + ha: 716, + o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 1, + x_max: 287, + y_min: -174, + y_max: 438, + ha: 612, + o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 341, + y_min: -350, + y_max: 348, + ha: 698, + o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z', + }, + accidentalBakiyeFlat: { + x_min: -1, + x_max: 286, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 229, + y_min: -337, + y_max: 322, + ha: 659, + o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z', + }, + accidentalKucukMucennebSharp: { + x_min: -1, + x_max: 339, + y_min: -338, + y_max: 321, + ha: 659, + o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z', + }, + accidentalKoron: { + x_min: 0, + x_max: 300, + y_min: -472, + y_max: 157, + ha: 629, + o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z', + }, + accidentalSori: { + x_min: 0, + x_max: 421, + y_min: -318, + y_max: 328, + ha: 646, + o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 339, + y_min: 1, + y_max: 245, + ha: 244, + o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 339, + y_min: -244, + y_max: 0, + ha: 244, + o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z', + }, + articTenutoAbove: { + x_min: -1, + x_max: 338, + y_min: 0, + y_max: 48, + ha: 48, + o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z', + }, + articTenutoBelow: { + x_min: -1, + x_max: 338, + y_min: -48, + y_max: 0, + ha: 48, + o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z', + }, + articStaccatoAbove: { + x_min: 0, + x_max: 84, + y_min: 0, + y_max: 84, + ha: 84, + o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z', + }, + articStaccatoBelow: { + x_min: 0, + x_max: 84, + y_min: -84, + y_max: 0, + ha: 84, + o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z', + }, + articStaccatissimoAbove: { + x_min: 1, + x_max: 100, + y_min: -2, + y_max: 293, + ha: 295, + o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z', + }, + articStaccatissimoBelow: { + x_min: 1, + x_max: 100, + y_min: -295, + y_max: 0, + ha: 295, + o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z', + }, + articMarcatoAbove: { + x_min: -1, + x_max: 235, + y_min: -1, + y_max: 253, + ha: 254, + o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z', + }, + articMarcatoBelow: { + x_min: -1, + x_max: 235, + y_min: -254, + y_max: 0, + ha: 254, + o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z', + }, + fermataAbove: { + x_min: 3, + x_max: 605, + y_min: -3, + y_max: 329, + ha: 332, + o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z', + }, + fermataBelow: { + x_min: 3, + x_max: 605, + y_min: -332, + y_max: 0, + ha: 332, + o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 603, + y_min: -1, + y_max: 333, + ha: 334, + o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 603, + y_min: -333, + y_max: 1, + ha: 334, + o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 715, + y_min: 0, + y_max: 408, + ha: 408, + o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 715, + y_min: -408, + y_max: 0, + ha: 408, + o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z', + }, + fermataVeryShortAbove: { + x_min: 0, + x_max: 726, + y_min: 0, + y_max: 449, + ha: 449, + o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z', + }, + fermataVeryShortBelow: { + x_min: 0, + x_max: 726, + y_min: -449, + y_max: 0, + ha: 449, + o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 604, + y_min: 0, + y_max: 341, + ha: 341, + o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 604, + y_min: -341, + y_max: 0, + ha: 341, + o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z', + }, + breathMarkComma: { + x_min: 1, + x_max: 152, + y_min: 2, + y_max: 251, + ha: 249, + o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', + }, + breathMarkUpbow: { + x_min: 1, + x_max: 249, + y_min: 1, + y_max: 495, + ha: 494, + o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', + }, + caesura: { + x_min: 0, + x_max: 384, + y_min: -1, + y_max: 532, + ha: 533, + o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 373, + y_min: 0, + y_max: 530, + ha: 530, + o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z', + }, + restMaxima: { + x_min: 0, + x_max: 381, + y_min: -249, + y_max: 250, + ha: 499, + o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 125, + y_min: 0, + y_max: 250, + ha: 250, + o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z', + }, + restWhole: { + x_min: 0, + x_max: 282, + y_min: -135, + y_max: 9, + ha: 144, + o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z', + }, + restWholeLegerLine: { + x_min: -117, + x_max: 399, + y_min: -135, + y_max: 20, + ha: 155, + o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z', + }, + restHalf: { + x_min: 0, + x_max: 282, + y_min: -2, + y_max: 142, + ha: 144, + o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z', + }, + restHalfLegerLine: { + x_min: -117, + x_max: 399, + y_min: -13, + y_max: 142, + ha: 155, + o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z', + }, + restQuarter: { + x_min: 1, + x_max: 270, + y_min: -375, + y_max: 373, + ha: 748, + o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z', + }, + rest8th: { + x_min: 0, + x_max: 247, + y_min: -251, + y_max: 174, + ha: 425, + o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z', + }, + rest16th: { + x_min: 0, + x_max: 320, + y_min: -500, + y_max: 179, + ha: 679, + o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z', + }, + rest32nd: { + x_min: 0, + x_max: 363, + y_min: -500, + y_max: 426, + ha: 926, + o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z', + }, + rest64th: { + x_min: 0, + x_max: 423, + y_min: -753, + y_max: 430, + ha: 1183, + o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z', + }, + rest128th: { + x_min: 0, + x_max: 485, + y_min: -750, + y_max: 689, + ha: 1439, + o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z', + }, + dynamicPiano: { + x_min: -89, + x_max: 366, + y_min: -142, + y_max: 274, + ha: 416, + o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z', + }, + dynamicMezzo: { + x_min: -20, + x_max: 446, + y_min: -10, + y_max: 274, + ha: 284, + o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z', + }, + dynamicForte: { + x_min: -141, + x_max: 364, + y_min: -152, + y_max: 444, + ha: 596, + o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z', + }, + dynamicRinforzando: { + x_min: -20, + x_max: 277, + y_min: 0, + y_max: 274, + ha: 274, + o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 229, + y_min: -10, + y_max: 273, + ha: 283, + o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z', + }, + dynamicZ: { + x_min: -30, + x_max: 244, + y_min: -10, + y_max: 268, + ha: 278, + o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z', + }, + ornamentTrill: { + x_min: 0, + x_max: 521, + y_min: -10, + y_max: 390, + ha: 400, + o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 460, + y_min: 0, + y_max: 218, + ha: 218, + o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 460, + y_min: -90, + y_max: 306, + ha: 396, + o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z', + }, + ornamentMordent: { + x_min: 1, + x_max: 729, + y_min: -73, + y_max: 319, + ha: 392, + o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 725, + y_min: 0, + y_max: 245, + ha: 245, + o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z', + }, + ornamentTremblement: { + x_min: 1, + x_max: 985, + y_min: 0, + y_max: 244, + ha: 244, + o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 1119, + y_min: 0, + y_max: 481, + ha: 481, + o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 2, + x_max: 1150, + y_min: -367, + y_max: 245, + ha: 612, + o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 1048, + y_min: -367, + y_max: 331, + ha: 698, + o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 949, + y_min: 0, + y_max: 381, + ha: 381, + o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 1278, + y_min: 0, + y_max: 247, + ha: 247, + o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: 0, + x_max: 1277, + y_min: -62, + y_max: 333, + ha: 395, + o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 859, + y_min: -222, + y_max: 246, + ha: 468, + o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z', + }, + brassScoop: { + x_min: 1, + x_max: 320, + y_min: -373, + y_max: 13, + ha: 386, + o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z', + }, + brassDoitMedium: { + x_min: 0, + x_max: 489, + y_min: -40, + y_max: 346, + ha: 386, + o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z', + }, + brassFallLipShort: { + x_min: 1, + x_max: 293, + y_min: -345, + y_max: 42, + ha: 387, + o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z', + }, + brassLiftMedium: { + x_min: 0, + x_max: 811, + y_min: 0, + y_max: 852, + ha: 852, + o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z', + }, + brassFallRoughMedium: { + x_min: 0, + x_max: 811, + y_min: 0, + y_max: 852, + ha: 852, + o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z', + }, + brassBend: { + x_min: 0, + x_max: 392, + y_min: 0, + y_max: 282, + ha: 282, + o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 272, + y_min: 0, + y_max: 272, + ha: 272, + o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', + }, + brassMuteOpen: { + x_min: 0, + x_max: 304, + y_min: 0, + y_max: 304, + ha: 304, + o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z', + }, + brassFlip: { + x_min: 0, + x_max: 379, + y_min: 0, + y_max: 282, + ha: 282, + o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z', + }, + brassJazzTurn: { + x_min: 0, + x_max: 620, + y_min: 0, + y_max: 245, + ha: 245, + o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z', + }, + brassSmear: { + x_min: 1, + x_max: 306, + y_min: 0, + y_max: 170, + ha: 170, + o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 312, + y_min: 0, + y_max: 318, + ha: 318, + o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z', + }, + stringsUpBow: { + x_min: 1, + x_max: 249, + y_min: 1, + y_max: 495, + ha: 494, + o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 200, + ha: 200, + o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 300, + ha: 300, + o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 300, + ha: 300, + o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z', + }, + pluckedLeftHandPizzicato: { + x_min: 0, + x_max: 272, + y_min: 0, + y_max: 272, + ha: 272, + o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 1019, + y_min: -8, + y_max: 555, + ha: 563, + o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 450, + y_min: 0, + y_max: 450, + ha: 450, + o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z', + }, + pictChokeCymbal: { + x_min: 1, + x_max: 152, + y_min: 2, + y_max: 251, + ha: 249, + o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', + }, + wiggleArpeggiatoUp: { + x_min: -33, + x_max: 292, + y_min: 0, + y_max: 119, + ha: 119, + o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z', + }, + arrowheadBlackUp: { + x_min: 0, + x_max: 228, + y_min: 0, + y_max: 299, + ha: 299, + o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z', + }, + arrowheadBlackDown: { + x_min: 0, + x_max: 228, + y_min: 0, + y_max: 299, + ha: 299, + o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z', + }, + arpeggiatoUp: { + x_min: 1, + x_max: 229, + y_min: 7, + y_max: 1511, + ha: 1504, + o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z', + }, + arpeggiatoDown: { + x_min: 1, + x_max: 229, + y_min: -4, + y_max: 1500, + ha: 1504, + o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 532, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 762, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1232, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 532, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z', + }, + csymDiminished: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 473, + ha: 473, + o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z', + }, + csymHalfDiminished: { + x_min: -16, + x_max: 488, + y_min: -15, + y_max: 489, + ha: 504, + o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z', + }, + csymAugmented: { + x_min: 0, + x_max: 395, + y_min: 1, + y_max: 396, + ha: 395, + o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 558, + y_min: 1, + y_max: 477, + ha: 476, + o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z', + }, + csymMinor: { + x_min: 0, + x_max: 325, + y_min: 216, + y_max: 260, + ha: 44, + o: 'm 468 374 l 0 374 l 0 311 l 468 311 z', + }, + csymParensLeftTall: { + x_min: 1, + x_max: 185, + y_min: 0, + y_max: 997, + ha: 997, + o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z', + }, + csymParensRightTall: { + x_min: -20, + x_max: 164, + y_min: 0, + y_max: 997, + ha: 997, + o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z', + }, + csymBracketLeftTall: { + x_min: 0, + x_max: 155, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z', + }, + csymBracketRightTall: { + x_min: 1, + x_max: 156, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z', + }, + csymParensLeftVeryTall: { + x_min: 0, + x_max: 122, + y_min: 0, + y_max: 993, + ha: 993, + o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z', + }, + csymParensRightVeryTall: { + x_min: -15, + x_max: 107, + y_min: 0, + y_max: 993, + ha: 993, + o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z', + }, + csymDiagonalArrangementSlash: { + x_min: 0, + x_max: 999, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z', + }, + accSagittal5v7KleismaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z', + }, + accSagittal5v7KleismaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z', + }, + accSagittal5CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z', + }, + accSagittal5CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z', + }, + accSagittal7CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z', + }, + accSagittal7CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z', + }, + accSagittal25SmallDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z', + }, + accSagittal25SmallDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z', + }, + accSagittal35MediumDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z', + }, + accSagittal35MediumDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittal11MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z', + }, + accSagittal11MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z', + }, + accSagittal11LargeDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z', + }, + accSagittal11LargeDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal35LargeDiesisUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal35LargeDiesisDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalSharp25SDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z', + }, + accSagittalFlat25SUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z', + }, + accSagittalSharp7CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z', + }, + accSagittalFlat7CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z', + }, + accSagittalSharp5CDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z', + }, + accSagittalFlat5CUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z', + }, + accSagittalSharp5v7kDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z', + }, + accSagittalFlat5v7kUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z', + }, + accSagittalSharp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z', + }, + accSagittalFlat: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z', + }, + accSagittalSharp5v7kUp: { + x_min: 0, + x_max: 312, + y_min: -361, + y_max: 172, + ha: 533, + o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z', + }, + accSagittalFlat5v7kDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 361, + ha: 533, + o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z', + }, + accSagittalSharp5CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z', + }, + accSagittalFlat5CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z', + }, + accSagittalSharp7CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z', + }, + accSagittalFlat7CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z', + }, + accSagittalSharp25SUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z', + }, + accSagittalFlat25SDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z', + }, + accSagittalSharp35MUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z', + }, + accSagittalFlat35MDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z', + }, + accSagittalSharp11MUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z', + }, + accSagittalFlat11MDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z', + }, + accSagittalSharp11LUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat11LDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalSharp35LUp: { + x_min: 0, + x_max: 500, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat35LDown: { + x_min: 0, + x_max: 500, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalDoubleSharp25SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z', + }, + accSagittalDoubleFlat25SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z', + }, + accSagittalDoubleSharp7CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z', + }, + accSagittalDoubleFlat7CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z', + }, + accSagittalDoubleSharp5CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z', + }, + accSagittalDoubleFlat5CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z', + }, + accSagittalDoubleSharp5v7kDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z', + }, + accSagittalDoubleFlat5v7kUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z', + }, + accSagittalDoubleSharp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z', + }, + accSagittalDoubleFlat: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z', + }, + accSagittal7v11KleismaUp: { + x_min: 0, + x_max: 219, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z', + }, + accSagittal7v11KleismaDown: { + x_min: 0, + x_max: 219, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', + }, + accSagittal17CommaUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal17CommaDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal55CommaUp: { + x_min: 0, + x_max: 219, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z', + }, + accSagittal55CommaDown: { + x_min: 0, + x_max: 219, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z', + }, + accSagittal7v11CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z', + }, + accSagittal7v11CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal5v11SmallDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z', + }, + accSagittal5v11SmallDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalSharp5v11SDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat5v11SUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp7v11CDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z', + }, + accSagittalFlat7v11CUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z', + }, + accSagittalSharp55CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z', + }, + accSagittalFlat55CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z', + }, + accSagittalSharp17CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z', + }, + accSagittalFlat17CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z', + }, + accSagittalSharp7v11kDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z', + }, + accSagittalFlat7v11kUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z', + }, + accSagittalSharp7v11kUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z', + }, + accSagittalFlat7v11kDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z', + }, + accSagittalSharp17CUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat17CDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp55CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z', + }, + accSagittalFlat55CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z', + }, + accSagittalSharp7v11CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z', + }, + accSagittalFlat7v11CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z', + }, + accSagittalSharp5v11SUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z', + }, + accSagittalFlat5v11SDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalDoubleSharp5v11SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat5v11SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp7v11CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z', + }, + accSagittalDoubleFlat7v11CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z', + }, + accSagittalDoubleSharp55CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z', + }, + accSagittalDoubleFlat55CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z', + }, + accSagittalDoubleSharp17CDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z', + }, + accSagittalDoubleFlat17CUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z', + }, + accSagittalDoubleSharp7v11kDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z', + }, + accSagittalDoubleFlat7v11kUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z', + }, + accSagittal23CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z', + }, + accSagittal23CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z', + }, + accSagittal5v19CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z', + }, + accSagittal5v19CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittal5v23SmallDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z', + }, + accSagittal5v23SmallDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittalSharp5v23SDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z', + }, + accSagittalFlat5v23SUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z', + }, + accSagittalSharp5v19CDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z', + }, + accSagittalFlat5v19CUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z', + }, + accSagittalSharp23CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z', + }, + accSagittalFlat23CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z', + }, + accSagittalSharp23CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z', + }, + accSagittalFlat23CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z', + }, + accSagittalSharp5v19CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', + }, + accSagittalFlat5v19CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z', + }, + accSagittalSharp5v23SUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', + }, + accSagittalFlat5v23SDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z', + }, + accSagittalDoubleSharp5v23SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z', + }, + accSagittalDoubleFlat5v23SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z', + }, + accSagittalDoubleSharp5v19CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z', + }, + accSagittalDoubleFlat5v19CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z', + }, + accSagittalDoubleSharp23CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', + }, + accSagittalDoubleFlat23CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z', + }, + accSagittal19SchismaUp: { + x_min: 0, + x_max: 125, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z', + }, + accSagittal19SchismaDown: { + x_min: 0, + x_max: 125, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', + }, + accSagittal17KleismaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal17KleismaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal143CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z', + }, + accSagittal143CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal11v49CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z', + }, + accSagittal11v49CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z', + }, + accSagittal19CommaUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', + }, + accSagittal19CommaDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', + }, + accSagittal7v19CommaUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', + }, + accSagittal7v19CommaDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', + }, + accSagittal49SmallDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal49SmallDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal23SmallDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal23SmallDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal5v13MediumDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z', + }, + accSagittal5v13MediumDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z', + }, + accSagittal11v19MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z', + }, + accSagittal11v19MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z', + }, + accSagittal49MediumDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z', + }, + accSagittal49MediumDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z', + }, + accSagittal5v49MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z', + }, + accSagittal5v49MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z', + }, + accSagittal49LargeDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z', + }, + accSagittal49LargeDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z', + }, + accSagittal11v19LargeDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z', + }, + accSagittal11v19LargeDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z', + }, + accSagittal5v13LargeDiesisUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z', + }, + accSagittal5v13LargeDiesisDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z', + }, + accSagittalSharp23SDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z', + }, + accSagittalFlat23SUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp49SDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z', + }, + accSagittalFlat49SUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z', + }, + accSagittalSharp7v19CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z', + }, + accSagittalFlat7v19CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z', + }, + accSagittalSharp19CDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z', + }, + accSagittalFlat19CUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z', + }, + accSagittalSharp11v49CDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat11v49CUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z', + }, + accSagittalSharp143CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat143CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp17kDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z', + }, + accSagittalFlat17kUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z', + }, + accSagittalSharp19sDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z', + }, + accSagittalFlat19sUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z', + }, + accSagittalSharp19sUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z', + }, + accSagittalFlat19sDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z', + }, + accSagittalSharp17kUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat17kDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp143CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', + }, + accSagittalFlat143CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp11v49CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z', + }, + accSagittalFlat11v49CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z', + }, + accSagittalSharp19CUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat19CDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalSharp7v19CUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat7v19CDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalSharp49SUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat49SDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp23SUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat23SDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp5v13MUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z', + }, + accSagittalFlat5v13MDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z', + }, + accSagittalSharp11v19MUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat11v19MDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalSharp49MUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z', + }, + accSagittalFlat49MDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z', + }, + accSagittalSharp5v49MUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z', + }, + accSagittalFlat5v49MDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z', + }, + accSagittalSharp49LUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z', + }, + accSagittalFlat49LDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z', + }, + accSagittalSharp11v19LUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z', + }, + accSagittalFlat11v19LDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z', + }, + accSagittalSharp5v13LUp: { + x_min: 0, + x_max: 500, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat5v13LDown: { + x_min: 0, + x_max: 500, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalDoubleSharp23SDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', + }, + accSagittalDoubleFlat23SUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z', + }, + accSagittalDoubleSharp49SDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z', + }, + accSagittalDoubleFlat49SUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z', + }, + accSagittalDoubleSharp7v19CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', + }, + accSagittalDoubleFlat7v19CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z', + }, + accSagittalDoubleSharp19CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z', + }, + accSagittalDoubleFlat19CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z', + }, + accSagittalDoubleSharp11v49CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat11v49CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp143CDown: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat143CUp: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp17kDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z', + }, + accSagittalDoubleFlat17kUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z', + }, + accSagittalDoubleSharp19sDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalDoubleFlat19sUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalShaftUp: { + x_min: 0, + x_max: 31, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z', + }, + accSagittalShaftDown: { + x_min: 0, + x_max: 31, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z', + }, + accSagittalAcute: { + x_min: 0, + x_max: 125, + y_min: -62, + y_max: 125, + ha: 187, + o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z', + }, + accSagittalGrave: { + x_min: 0, + x_max: 125, + y_min: -125, + y_max: 62, + ha: 187, + o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z', + }, + accSagittal1MinaUp: { + x_min: -7, + x_max: 124, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal1MinaDown: { + x_min: -7, + x_max: 124, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal2MinasUp: { + x_min: -7, + x_max: 218, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal2MinasDown: { + x_min: -7, + x_max: 218, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal1TinaUp: { + x_min: 0, + x_max: 93, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z', + }, + accSagittal1TinaDown: { + x_min: 0, + x_max: 93, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z', + }, + accSagittal2TinasUp: { + x_min: 0, + x_max: 94, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal2TinasDown: { + x_min: 0, + x_max: 94, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z', + }, + accSagittal3TinasUp: { + x_min: -7, + x_max: 124, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal3TinasDown: { + x_min: -7, + x_max: 124, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal4TinasUp: { + x_min: 0, + x_max: 187, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', + }, + accSagittal4TinasDown: { + x_min: 0, + x_max: 187, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', + }, + accSagittal5TinasUp: { + x_min: 0, + x_max: 218, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal5TinasDown: { + x_min: 0, + x_max: 218, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', + }, + accSagittal6TinasUp: { + x_min: -7, + x_max: 218, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal6TinasDown: { + x_min: -7, + x_max: 218, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal7TinasUp: { + x_min: 0, + x_max: 281, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', + }, + accSagittal7TinasDown: { + x_min: 0, + x_max: 281, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', + }, + accSagittal8TinasUp: { + x_min: 0, + x_max: 312, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal8TinasDown: { + x_min: 0, + x_max: 312, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', + }, + accSagittal9TinasUp: { + x_min: -7, + x_max: 312, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal9TinasDown: { + x_min: -7, + x_max: 312, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittalFractionalTinaUp: { + x_min: -3, + x_max: 35, + y_min: 73, + y_max: 111, + ha: 38, + o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z', + }, + accSagittalFractionalTinaDown: { + x_min: -3, + x_max: 35, + y_min: -111, + y_max: -73, + ha: 38, + o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 164, + y_min: -194, + y_max: 421, + ha: 615, + o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 414, + y_min: -194, + y_max: 421, + ha: 615, + o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z', + }, + accidentalWilsonPlus: { + x_min: 0, + x_max: 281, + y_min: -203, + y_max: 203, + ha: 406, + o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z', + }, + accidentalWilsonMinus: { + x_min: 0, + x_max: 281, + y_min: -186, + y_max: 186, + ha: 372, + o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z', + }, + }, + fontFamily: 'Bravura', + resolution: 1000, + generatedOn: '2022-12-18T09:06:51.407Z', +}; + + +/***/ }), + +/***/ "./src/fonts/common_metrics.ts": +/*!*************************************!*\ + !*** ./src/fonts/common_metrics.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CommonMetrics": () => (/* binding */ CommonMetrics) +/* harmony export */ }); +const CommonMetrics = { + smufl: true, + stave: { + padding: 12, + endPaddingMax: 10, + endPaddingMin: 5, + unalignedNotePadding: 10, + }, + accidental: { + noteheadAccidentalPadding: 1, + leftPadding: 2, + accidentalSpacing: 3, + }, + chordSymbol: { + global: { + superscriptOffset: -400, + subscriptOffset: 300, + kerningOffset: -250, + lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], + upperKerningText: ['A', 'L'], + spacing: 100, + superSubRatio: 0.66, + }, + glyphs: { + csymDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymHalfDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymAugmented: { + leftSideBearing: 0, + advanceWidth: 530, + yOffset: 0, + }, + csymParensLeftTall: { + leftSideBearing: -20, + advanceWidth: 184, + yOffset: 250, + }, + csymParensRightTall: { + leftSideBearing: 0, + advanceWidth: 189, + yOffset: 250, + }, + csymBracketLeftTall: { + leftSideBearing: 0, + advanceWidth: 328, + yOffset: 0, + }, + csymBracketRightTall: { + leftSideBearing: 1, + advanceWidth: 600, + yOffset: 0, + }, + csymParensLeftVeryTall: { + leftSideBearing: 50, + advanceWidth: 121, + yOffset: 350, + }, + csymParensRightVeryTall: { + leftSideBearing: 0, + advanceWidth: 111, + yOffset: 350, + }, + csymDiagonalArrangementSlash: { + leftSideBearing: 250, + advanceWidth: 990, + yOffset: 300, + }, + csymMinor: { + leftSideBearing: 0, + advanceWidth: 482, + yOffset: 0, + }, + csymMajorSeventh: { + leftSideBearing: 200, + yOffset: 0, + advanceWidth: 600, + }, + accidentalSharp: { + leftSideBearing: 20, + advanceWidth: 250, + yOffset: -302, + }, + accidentalFlat: { + leftSideBearing: -20, + advanceWidth: 226, + yOffset: -184, + }, + }, + }, + clef_default: { + width: 26, + annotations: { + '8va': { + treble: { + line: -2, + shiftX: 12, + }, + }, + '8vb': { + treble: { + line: 6.5, + shiftX: 10, + }, + bass: { + line: 4, + shiftX: 1, + }, + }, + }, + }, + clef_small: { + width: 20, + annotations: { + '8va': { + treble: { + line: -0.2, + shiftX: 8, + }, + }, + '8vb': { + treble: { + line: 5.3, + shiftX: 6, + }, + bass: { + line: 3.1, + shiftX: 0.5, + }, + }, + }, + }, + ornament: { + brassScoop: { + xOffset: -12, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 20, + }, + brassDoitMedium: { + xOffset: 16, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 22, + }, + brassFallLipShort: { + xOffset: 16, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 15, + }, + brassLiftMedium: { + xOffset: 16, + yOffset: 5, + stemUpYOffset: 0, + reportedWidth: 5, + }, + brassFallRoughMedium: { + xOffset: 16, + yOffset: 28, + stemUpYOffset: 0, + reportedWidth: 5, + }, + brassBend: { + xOffset: 2, + yOffset: -8, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassMuteClosed: { + xOffset: 3, + yOffset: -8, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassMuteOpen: { + xOffset: 3, + yOffset: -7, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassFlip: { + xOffset: 10, + yOffset: 0, + stemUpYOffset: 7, + reportedWidth: 10, + }, + brassJazzTurn: { + xOffset: 0, + yOffset: 0, + stemUpYOffset: 8, + reportedWidth: 31, + }, + brassSmear: { + xOffset: 10, + yOffset: 0, + stemUpYOffset: 8, + reportedWidth: 5, + }, + }, + parenthesis: { + default: { + width: 7, + }, + gracenote: { + width: 3, + }, + }, + pedalMarking: {}, + // These are for numeric digits, such as in time signatures + digits: { + // used by TimeSignature objects + shiftLine: -1, + // used by tuplets + shiftY: -6, + }, + articulation: { + articStaccatissimoAbove: { + padding: 2, + }, + articStaccatissimoBelow: { + padding: 2, + }, + }, + tremolo: { + default: { + spacing: 7, + offsetYStemUp: -8, + offsetYStemDown: 8, + offsetXStemUp: 11, + offsetXStemDown: 1, + }, + grace: { + spacing: (7 * 3) / 5, + offsetYStemUp: -(8 * 3) / 5, + offsetYStemDown: (8 * 3) / 5, + offsetXStemUp: 7, + offsetXStemDown: 1, + }, + }, + staveRepetition: { + symbolText: { + offsetX: 12, + offsetY: 25, + spacing: 5, + }, + coda: { + offsetY: 25, + }, + segno: { + offsetY: 10, + }, + }, + noteHead: { + minPadding: 2, + }, + stem: { + heightAdjustmentForFlag: -3, + // These are stem (Y) offsets to the note heads. To shift the + // noteheads (x-position) themselves, see glyphs.notehead.custom. + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadTriangleUpBlack: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadTriangleUpWhole: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadXHalf: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadXBlack: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadXWhole: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadHalf: { + offsetYBaseStemUp: -2.55, + offsetYBaseStemDown: 2.65, + }, + noteheadBlack: { + offsetYBaseStemUp: -2, + offsetYBaseStemDown: 2, + }, + noteheadSquareWhite: { + offsetYBaseStemDown: -5, + offsetYBaseStemUp: 5, + }, + }, + }, + stringNumber: { + verticalPadding: 8, + stemPadding: 2, + leftPadding: 5, + rightPadding: 6, + }, + tuplet: { + noteHeadOffset: 20, + stemOffset: 10, + bottomLine: 4, + topModifierOffset: 15, + }, + // Values under here are used by the Glyph class to reposition and rescale + // glyphs based on their category. This should be the first stop for + // custom font glyph repositioning. + // + // The glyph loader first looks up a specific set of settings based on the + // glyph code, and if not found, uses the defaults from the category. See + // glyphs.textNote for an example of this. + // + // Details in Glyph.lookupFontMetrics. + glyphs: { + coda: { + shiftX: -7, + shiftY: 8, + }, + segno: { + shiftX: -7, + }, + flag: { + shiftX: -0.75, + staveTempo: { + shiftX: -1, + }, + }, + clef_default: {}, + clef_small: { + gClef: { + shiftY: 1.5, + }, + }, + clefNote_default: {}, + clefNote_small: {}, + stroke_straight: { + arrowheadBlackDown: { + shiftX: -4.5, + }, + arrowheadBlackUp: { + shiftX: -0.85, + }, + }, + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: -1, + shiftY: 1, + }, + arrowheadBlackUp: { + shiftX: -1, + shiftY: 1, + }, + }, + textNote: { + breathMarkTick: { + shiftY: 9, + }, + breathMarkComma: {}, + segno: { + shiftX: -7, + shiftY: 8, + }, + coda: { + shiftX: -7, + shiftY: 8, + }, + ornamentTrill: { + shiftX: -8, + shiftY: 8, + }, + ornamentTurn: {}, + ornamentTurnSlash: {}, + ornamentMordent: { + shiftX: -8, + }, + ornamentShortTrill: { + shiftX: -8, + }, + }, + noteHead: {}, + chordSymbol: { + scale: 0.8, + }, + }, +}; + + +/***/ }), + +/***/ "./src/fonts/custom_glyphs.ts": +/*!************************************!*\ + !*** ./src/fonts/custom_glyphs.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CustomFont": () => (/* binding */ CustomFont) +/* harmony export */ }); +const CustomFont = { + resolution: 1000, + fontFamily: 'VexFlowCustom', + glyphs: { + vexAccidentalMicrotonal1: { + x_min: -171.5, + x_max: 483.1875, + ha: 493, + o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ', + }, + vexAccidentalMicrotonal3: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ', + }, + vexAccidentalMicrotonal4: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ', + }, + vexNoteHeadRectBlack: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ', + }, + vexNoteHeadRectWhite: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100', + }, + vexWiggleArpeggioUp: { + x_min: 58.53125, + x_max: 228.671875, + ha: 294, + o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ', + }, + }, +}; + + +/***/ }), + +/***/ "./src/fonts/gonville_glyphs.ts": +/*!**************************************!*\ + !*** ./src/fonts/gonville_glyphs.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GonvilleSmuflFont": () => (/* binding */ GonvilleSmuflFont) +/* harmony export */ }); +const GonvilleSmuflFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 412, + y_min: -18, + y_max: 223, + ha: 241, + o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z', + }, + bracketBottom: { + x_min: 0, + x_max: 412, + y_min: -223, + y_max: 18, + ha: 241, + o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z', + }, + barlineTick: { + x_min: -59, + x_max: 59, + y_min: -139, + y_max: 139, + ha: 279, + o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z', + }, + breathMarkTick: { + x_min: -151, + x_max: 272, + y_min: 0, + y_max: 429, + ha: 429, + o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z', + }, + segno: { + x_min: 7, + x_max: 493, + y_min: -50, + y_max: 650, + ha: 699, + o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z', + }, + coda: { + x_min: 22, + x_max: 478, + y_min: -31, + y_max: 531, + ha: 563, + o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z', + }, + gClef: { + x_min: 0, + x_max: 623, + y_min: -632, + y_max: 1082, + ha: 1713, + o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z', + }, + cClef: { + x_min: 0, + x_max: 643, + y_min: -508, + y_max: 508, + ha: 1016, + o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z', + }, + fClef: { + x_min: 0, + x_max: 661, + y_min: -545, + y_max: 254, + ha: 798, + o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z', + }, + unpitchedPercussionClef1: { + x_min: -4, + x_max: 337, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 501, + y_min: -735, + y_max: 753, + ha: 1487, + o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z', + }, + timeSig0: { + x_min: 0, + x_max: 380, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z', + }, + timeSig1: { + x_min: 0, + x_max: 254, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z', + }, + timeSig2: { + x_min: 0, + x_max: 337, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z', + }, + timeSig3: { + x_min: 0, + x_max: 302, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z', + }, + timeSig4: { + x_min: 0, + x_max: 345, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z', + }, + timeSig5: { + x_min: 0, + x_max: 302, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z', + }, + timeSig6: { + x_min: 0, + x_max: 349, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z', + }, + timeSig7: { + x_min: 0, + x_max: 326, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z', + }, + timeSig8: { + x_min: 0, + x_max: 360, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z', + }, + timeSig9: { + x_min: 0, + x_max: 349, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z', + }, + timeSigCommon: { + x_min: 0, + x_max: 409, + y_min: -233, + y_max: 233, + ha: 466, + o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 409, + y_min: -394, + y_max: 394, + ha: 788, + o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 235, + y_min: -118, + y_max: 118, + ha: 235, + o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z', + }, + timeSigPlusSmall: { + x_min: 0, + x_max: 235, + y_min: -118, + y_max: 118, + ha: 235, + o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 235, + y_min: -23, + y_max: 23, + ha: 46, + o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z', + }, + timeSigParensRight: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + timeSigParensRightSmall: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + timeSigParensLeft: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + timeSigParensLeftSmall: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 663, + y_min: -174, + y_max: 174, + ha: 349, + o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 455, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 316, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 316, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 440, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 300, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 300, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 357, + y_min: -178, + y_max: 178, + ha: 357, + o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 462, + y_min: -149, + y_max: 149, + ha: 297, + o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 323, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 322, + y_min: -149, + y_max: 149, + ha: 297, + o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 462, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 322, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 322, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z', + }, + augmentationDot: { + x_min: -63, + x_max: 63, + y_min: -63, + y_max: 63, + ha: 126, + o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z', + }, + tremolo1: { + x_min: -252, + x_max: 216, + y_min: -185, + y_max: 148, + ha: 333, + o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z', + }, + flag8thUp: { + x_min: -17, + x_max: 234, + y_min: -745, + y_max: -4, + ha: 741, + o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z', + }, + flag8thDown: { + x_min: -15, + x_max: 271, + y_min: 4, + y_max: 745, + ha: 741, + o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z', + }, + flag16thUp: { + x_min: -17, + x_max: 234, + y_min: -847, + y_max: -4, + ha: 843, + o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z', + }, + flag16thDown: { + x_min: -15, + x_max: 267, + y_min: 4, + y_max: 745, + ha: 741, + o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z', + }, + flag32ndUp: { + x_min: -17, + x_max: 233, + y_min: -1005, + y_max: 96, + ha: 1101, + o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z', + }, + flag32ndDown: { + x_min: -15, + x_max: 270, + y_min: -96, + y_max: 895, + ha: 991, + o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z', + }, + flag64thUp: { + x_min: -17, + x_max: 233, + y_min: -933, + y_max: 296, + ha: 1230, + o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z', + }, + flag64thDown: { + x_min: -15, + x_max: 271, + y_min: -296, + y_max: 820, + ha: 1116, + o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z', + }, + flag128thUp: { + x_min: -17, + x_max: 231, + y_min: -987, + y_max: 496, + ha: 1484, + o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z', + }, + flag128thDown: { + x_min: -15, + x_max: 270, + y_min: -496, + y_max: 870, + ha: 1366, + o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z', + }, + accidentalFlat: { + x_min: -15, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 176, + y_min: -334, + y_max: 334, + ha: 667, + o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 239, + y_min: -388, + y_max: 388, + ha: 775, + o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 271, + y_min: -135, + y_max: 135, + ha: 271, + o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z', + }, + accidentalDoubleFlat: { + x_min: -15, + x_max: 356, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z', + }, + accidentalParensLeft: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + accidentalParensRight: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 200, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 446, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 142, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 0, + x_max: 335, + y_min: -391, + y_max: 391, + ha: 782, + o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z', + }, + accidentalBuyukMucennebFlat: { + x_min: -125, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 284, + y_min: -388, + y_max: 388, + ha: 775, + o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z', + }, + accidentalBakiyeFlat: { + x_min: -129, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 142, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 188, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z', + }, + articAccentAbove: { + x_min: -256, + x_max: 19, + y_min: -114, + y_max: 114, + ha: 227, + o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z', + }, + articAccentBelow: { + x_min: -256, + x_max: 19, + y_min: -114, + y_max: 114, + ha: 227, + o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z', + }, + articTenutoAbove: { + x_min: -154, + x_max: 154, + y_min: -15, + y_max: 15, + ha: 30, + o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z', + }, + articTenutoBelow: { + x_min: -154, + x_max: 154, + y_min: -15, + y_max: 15, + ha: 30, + o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z', + }, + articStaccatoAbove: { + x_min: -49, + x_max: 49, + y_min: -49, + y_max: 49, + ha: 99, + o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z', + }, + articStaccatoBelow: { + x_min: -49, + x_max: 49, + y_min: -49, + y_max: 49, + ha: 99, + o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z', + }, + articStaccatissimoAbove: { + x_min: -53, + x_max: 53, + y_min: 0, + y_max: 184, + ha: 184, + o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z', + }, + articStaccatissimoBelow: { + x_min: -53, + x_max: 53, + y_min: -184, + y_max: 0, + ha: 184, + o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z', + }, + articMarcatoAbove: { + x_min: -114, + x_max: 114, + y_min: -256, + y_max: 19, + ha: 275, + o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z', + }, + articMarcatoBelow: { + x_min: -114, + x_max: 114, + y_min: -19, + y_max: 256, + ha: 275, + o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z', + }, + fermataAbove: { + x_min: -324, + x_max: 324, + y_min: 0, + y_max: 353, + ha: 353, + o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataBelow: { + x_min: -324, + x_max: 324, + y_min: -353, + y_max: 0, + ha: 353, + o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataLongAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 364, + ha: 364, + o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z', + }, + fermataLongBelow: { + x_min: -286, + x_max: 286, + y_min: -364, + y_max: 0, + ha: 364, + o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataVeryLongAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 438, + ha: 438, + o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataVeryLongBelow: { + x_min: -286, + x_max: 286, + y_min: -438, + y_max: 0, + ha: 438, + o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataVeryShortAbove: { + x_min: -351, + x_max: 351, + y_min: 0, + y_max: 571, + ha: 571, + o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z', + }, + fermataVeryShortBelow: { + x_min: -351, + x_max: 351, + y_min: -571, + y_max: 0, + ha: 571, + o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z', + }, + fermataShortAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 469, + ha: 469, + o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataShortBelow: { + x_min: -286, + x_max: 286, + y_min: -469, + y_max: 0, + ha: 469, + o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 168, + y_min: -155, + y_max: 155, + ha: 311, + o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z', + }, + breathMarkUpbow: { + x_min: -125, + x_max: 125, + y_min: 0, + y_max: 409, + ha: 409, + o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z', + }, + caesura: { + x_min: 0, + x_max: 457, + y_min: -202, + y_max: 303, + ha: 504, + o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 370, + y_min: -207, + y_max: 310, + ha: 517, + o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z', + }, + restMaxima: { + x_min: 0, + x_max: 853, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 284, + y_min: 0, + y_max: 250, + ha: 250, + o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z', + }, + restWhole: { + x_min: 0, + x_max: 330, + y_min: -125, + y_max: 0, + ha: 125, + o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z', + }, + restWholeLegerLine: { + x_min: 0, + x_max: 542, + y_min: -125, + y_max: 11, + ha: 137, + o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z', + }, + restHalf: { + x_min: 0, + x_max: 330, + y_min: 0, + y_max: 125, + ha: 125, + o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z', + }, + restHalfLegerLine: { + x_min: 0, + x_max: 542, + y_min: -11, + y_max: 125, + ha: 137, + o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z', + }, + restQuarter: { + x_min: 0, + x_max: 221, + y_min: -365, + y_max: 365, + ha: 730, + o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z', + }, + rest8th: { + x_min: 0, + x_max: 258, + y_min: -197, + y_max: 219, + ha: 416, + o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z', + }, + rest16th: { + x_min: 0, + x_max: 331, + y_min: -443, + y_max: 219, + ha: 662, + o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z', + }, + rest32nd: { + x_min: 0, + x_max: 405, + y_min: -443, + y_max: 466, + ha: 909, + o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z', + }, + rest64th: { + x_min: 0, + x_max: 479, + y_min: -689, + y_max: 466, + ha: 1155, + o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z', + }, + rest128th: { + x_min: 0, + x_max: 553, + y_min: -689, + y_max: 712, + ha: 1401, + o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z', + }, + dynamicPiano: { + x_min: -39, + x_max: 378, + y_min: -178, + y_max: 277, + ha: 455, + o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z', + }, + dynamicMezzo: { + x_min: 35, + x_max: 493, + y_min: -19, + y_max: 272, + ha: 291, + o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z', + }, + dynamicForte: { + x_min: -87, + x_max: 440, + y_min: -182, + y_max: 415, + ha: 597, + o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z', + }, + dynamicRinforzando: { + x_min: 58, + x_max: 357, + y_min: 0, + y_max: 275, + ha: 275, + o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z', + }, + dynamicSforzando: { + x_min: 52, + x_max: 278, + y_min: -22, + y_max: 270, + ha: 292, + o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z', + }, + dynamicZ: { + x_min: 23, + x_max: 309, + y_min: 2, + y_max: 250, + ha: 248, + o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z', + }, + ornamentTrill: { + x_min: -249, + x_max: 249, + y_min: 0, + y_max: 376, + ha: 376, + o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z', + }, + ornamentTurn: { + x_min: -310, + x_max: 310, + y_min: -143, + y_max: 143, + ha: 286, + o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z', + }, + ornamentTurnSlash: { + x_min: -310, + x_max: 310, + y_min: -201, + y_max: 201, + ha: 402, + o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z', + }, + ornamentMordent: { + x_min: -296, + x_max: 296, + y_min: -215, + y_max: 198, + ha: 413, + o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z', + }, + ornamentShortTrill: { + x_min: -296, + x_max: 296, + y_min: -127, + y_max: 127, + ha: 253, + o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z', + }, + ornamentTremblement: { + x_min: -419, + x_max: 419, + y_min: -127, + y_max: 127, + ha: 253, + o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z', + }, + ornamentPrecompAppoggTrill: { + x_min: -419, + x_max: 419, + y_min: -127, + y_max: 255, + ha: 381, + o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: -433, + x_max: 433, + y_min: -243, + y_max: 127, + ha: 370, + o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: -433, + x_max: 433, + y_min: -243, + y_max: 198, + ha: 442, + o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: -433, + x_max: 433, + y_min: -127, + y_max: 244, + ha: 370, + o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: -439, + x_max: 439, + y_min: -127, + y_max: 236, + ha: 363, + o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: -439, + x_max: 439, + y_min: -215, + y_max: 236, + ha: 451, + o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: -439, + x_max: 439, + y_min: -236, + y_max: 127, + ha: 362, + o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z', + }, + stringsDownBow: { + x_min: -168, + x_max: 168, + y_min: 0, + y_max: 353, + ha: 353, + o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z', + }, + stringsUpBow: { + x_min: -110, + x_max: 110, + y_min: 0, + y_max: 277, + ha: 277, + o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z', + }, + stringsHarmonic: { + x_min: -82, + x_max: 82, + y_min: -82, + y_max: 82, + ha: 163, + o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: -110, + x_max: 110, + y_min: -110, + y_max: 205, + ha: 315, + o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: -110, + x_max: 110, + y_min: -205, + y_max: 110, + ha: 315, + o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z', + }, + pluckedLeftHandPizzicato: { + x_min: -155, + x_max: 155, + y_min: -157, + y_max: 157, + ha: 315, + o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 782, + y_min: -1, + y_max: 500, + ha: 501, + o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 435, + y_min: 65, + y_max: 500, + ha: 435, + o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z', + }, + pictChokeCymbal: { + x_min: 0, + x_max: 168, + y_min: -155, + y_max: 155, + ha: 311, + o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z', + }, + wiggleArpeggiatoUp: { + x_min: -8, + x_max: 269, + y_min: 0, + y_max: 126, + ha: 126, + o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z', + }, + arrowheadBlackUp: { + x_min: 11, + x_max: 239, + y_min: -6, + y_max: 269, + ha: 275, + o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z', + }, + arrowheadBlackDown: { + x_min: 11, + x_max: 239, + y_min: 6, + y_max: 281, + ha: 275, + o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z', + }, + }, + fontFamily: 'GonvilleSmufl', + resolution: 1000, + generatedOn: '2023-04-20T22:11:26.009Z', +}; + + +/***/ }), + +/***/ "./src/fonts/leland_glyphs.ts": +/*!************************************!*\ + !*** ./src/fonts/leland_glyphs.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "LelandFont": () => (/* binding */ LelandFont) +/* harmony export */ }); +const LelandFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 491, + y_min: 0, + y_max: 279, + ha: 279, + o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z', + }, + bracketBottom: { + x_min: 0, + x_max: 491, + y_min: -279, + y_max: 0, + ha: 279, + o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z', + }, + segno: { + x_min: 0, + x_max: 654, + y_min: 0, + y_max: 869, + ha: 869, + o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z', + }, + coda: { + x_min: 0, + x_max: 745, + y_min: -113, + y_max: 735, + ha: 848, + o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z', + }, + gClef: { + x_min: 0, + x_max: 640, + y_min: -666, + y_max: 1112, + ha: 1778, + o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z', + }, + cClef: { + x_min: 0, + x_max: 627, + y_min: -480, + y_max: 482, + ha: 962, + o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z', + }, + fClef: { + x_min: 0, + x_max: 664, + y_min: -617, + y_max: 251, + ha: 868, + o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 352, + y_min: -252, + y_max: 252, + ha: 504, + o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 439, + y_min: -743, + y_max: 746, + ha: 1489, + o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z', + }, + timeSig0: { + x_min: 15, + x_max: 389, + y_min: -254, + y_max: 255, + ha: 509, + o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z', + }, + timeSig1: { + x_min: 15, + x_max: 336, + y_min: -243, + y_max: 245, + ha: 488, + o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z', + }, + timeSig2: { + x_min: 15, + x_max: 377, + y_min: -243, + y_max: 245, + ha: 488, + o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z', + }, + timeSig3: { + x_min: 15, + x_max: 364, + y_min: -244, + y_max: 244, + ha: 488, + o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z', + }, + timeSig4: { + x_min: 14, + x_max: 442, + y_min: -248, + y_max: 249, + ha: 497, + o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z', + }, + timeSig5: { + x_min: 15, + x_max: 362, + y_min: -244, + y_max: 246, + ha: 490, + o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z', + }, + timeSig6: { + x_min: 15, + x_max: 387, + y_min: -244, + y_max: 245, + ha: 489, + o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z', + }, + timeSig7: { + x_min: 15, + x_max: 366, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z', + }, + timeSig8: { + x_min: 15, + x_max: 393, + y_min: -248, + y_max: 246, + ha: 494, + o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z', + }, + timeSig9: { + x_min: 15, + x_max: 387, + y_min: -244, + y_max: 245, + ha: 489, + o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z', + }, + timeSigCommon: { + x_min: 0, + x_max: 463, + y_min: -256, + y_max: 258, + ha: 514, + o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 463, + y_min: -376, + y_max: 388, + ha: 764, + o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 408, + y_min: -204, + y_max: 204, + ha: 408, + o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 538, + y_min: -178, + y_max: 179, + ha: 357, + o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 373, + y_min: -134, + y_max: 136, + ha: 270, + o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 325, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 325, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 325, + y_min: -132, + y_max: 132, + ha: 264, + o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 325, + y_min: -162, + y_max: 163, + ha: 325, + o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 432, + y_min: -179, + y_max: 177, + ha: 356, + o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 310, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 223 176 l 0 -196 l 446 -196 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: -66, + x_max: 456, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z', + }, + noteheadSlashedWhole1: { + x_min: -75, + x_max: 448, + y_min: -211, + y_max: 214, + ha: 425, + o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z', + }, + noteheadSlashedHalf1: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z', + }, + noteheadSlashedBlack1: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: -66, + x_max: 456, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z', + }, + noteheadSlashedWhole2: { + x_min: -75, + x_max: 448, + y_min: -212, + y_max: 214, + ha: 426, + o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z', + }, + noteheadSlashedHalf2: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z', + }, + noteheadSlashedBlack2: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 373, + y_min: -178, + y_max: 179, + ha: 357, + o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 373, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 335, + y_min: -132, + y_max: 133, + ha: 265, + o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 335, + y_min: -132, + y_max: 133, + ha: 265, + o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z', + }, + noteheadParenthesisRight: { + x_min: 0, + x_max: 75, + y_min: -209, + y_max: 212, + ha: 421, + o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 75, + y_min: -212, + y_max: 209, + ha: 421, + o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 339, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 0 176 l 0 -196 l 488 -196 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 339, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 488 176 l 0 -196 l 488 -196 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 310, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z', + }, + augmentationDot: { + x_min: 0, + x_max: 100, + y_min: -50, + y_max: 50, + ha: 100, + o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z', + }, + tremolo1: { + x_min: 0, + x_max: 290, + y_min: -93, + y_max: 96, + ha: 189, + o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z', + }, + flag8thUp: { + x_min: 0, + x_max: 289, + y_min: -817, + y_max: 12, + ha: 829, + o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z', + }, + flag8thDown: { + x_min: 0, + x_max: 309, + y_min: -12, + y_max: 817, + ha: 829, + o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z', + }, + flag16thUp: { + x_min: 0, + x_max: 279, + y_min: -820, + y_max: 12, + ha: 832, + o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z', + }, + flag16thDown: { + x_min: 0, + x_max: 309, + y_min: -26, + y_max: 803, + ha: 829, + o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 279, + y_min: -821, + y_max: 186, + ha: 1007, + o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z', + }, + flag32ndDown: { + x_min: 0, + x_max: 309, + y_min: -216, + y_max: 803, + ha: 1019, + o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', + }, + flag64thUp: { + x_min: 0, + x_max: 279, + y_min: -822, + y_max: 373, + ha: 1195, + o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z', + }, + flag64thDown: { + x_min: 0, + x_max: 309, + y_min: -403, + y_max: 804, + ha: 1207, + o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z', + }, + flag128thUp: { + x_min: 0, + x_max: 279, + y_min: -821, + y_max: 573, + ha: 1394, + o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z', + }, + flag128thDown: { + x_min: 0, + x_max: 309, + y_min: -591, + y_max: 803, + ha: 1394, + o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z', + }, + accidentalFlat: { + x_min: 0, + x_max: 203, + y_min: -176, + y_max: 453, + ha: 629, + o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 171, + y_min: -323, + y_max: 325, + ha: 648, + o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 244, + y_min: -333, + y_max: 334, + ha: 667, + o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 275, + y_min: -137, + y_max: 138, + ha: 275, + o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 371, + y_min: -176, + y_max: 453, + ha: 629, + o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 75, + y_min: -212, + y_max: 209, + ha: 421, + o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 75, + y_min: -209, + y_max: 212, + ha: 421, + o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 193, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 422, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 180, + y_min: -316, + y_max: 320, + ha: 636, + o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 0, + x_max: 290, + y_min: -328, + y_max: 339, + ha: 667, + o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 0, + x_max: 277, + y_min: -176, + y_max: 454, + ha: 630, + o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 348, + y_min: -332, + y_max: 334, + ha: 666, + o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z', + }, + accidentalBakiyeFlat: { + x_min: 0, + x_max: 277, + y_min: -176, + y_max: 454, + ha: 630, + o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 348, + y_min: -316, + y_max: 318, + ha: 634, + o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 361, + y_min: 0, + y_max: 235, + ha: 235, + o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 361, + y_min: -235, + y_max: 0, + ha: 235, + o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z', + }, + articTenutoAbove: { + x_min: 0, + x_max: 316, + y_min: 0, + y_max: 46, + ha: 46, + o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z', + }, + articTenutoBelow: { + x_min: 0, + x_max: 316, + y_min: -46, + y_max: 0, + ha: 46, + o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z', + }, + articStaccatoAbove: { + x_min: 0, + x_max: 78, + y_min: 0, + y_max: 78, + ha: 78, + o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z', + }, + articStaccatoBelow: { + x_min: 0, + x_max: 78, + y_min: -78, + y_max: 0, + ha: 78, + o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z', + }, + articStaccatissimoAbove: { + x_min: 0, + x_max: 127, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z', + }, + articStaccatissimoBelow: { + x_min: 0, + x_max: 127, + y_min: -248, + y_max: 0, + ha: 248, + o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z', + }, + articMarcatoAbove: { + x_min: 1, + x_max: 296, + y_min: 0, + y_max: 253, + ha: 253, + o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z', + }, + articMarcatoBelow: { + x_min: 0, + x_max: 295, + y_min: -253, + y_max: 0, + ha: 253, + o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z', + }, + fermataAbove: { + x_min: 0, + x_max: 622, + y_min: 0, + y_max: 368, + ha: 368, + o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z', + }, + fermataBelow: { + x_min: 0, + x_max: 622, + y_min: -368, + y_max: 0, + ha: 368, + o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 623, + y_min: 0, + y_max: 368, + ha: 368, + o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 623, + y_min: -368, + y_max: 0, + ha: 368, + o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 842, + y_min: 0, + y_max: 549, + ha: 549, + o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 842, + y_min: -549, + y_max: 0, + ha: 549, + o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 642, + y_min: 0, + y_max: 454, + ha: 454, + o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 642, + y_min: -454, + y_max: 0, + ha: 454, + o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 191, + y_min: 0, + y_max: 321, + ha: 321, + o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z', + }, + caesura: { + x_min: 0, + x_max: 380, + y_min: 0, + y_max: 490, + ha: 490, + o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 368, + y_min: 0, + y_max: 491, + ha: 491, + o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z', + }, + restMaxima: { + x_min: 0, + x_max: 450, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 125, + y_min: -11, + y_max: 262, + ha: 273, + o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z', + }, + restWhole: { + x_min: 0, + x_max: 325, + y_min: -131, + y_max: 5, + ha: 136, + o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z', + }, + restWholeLegerLine: { + x_min: -139, + x_max: 464, + y_min: -122, + y_max: 14, + ha: 136, + o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z', + }, + restHalf: { + x_min: 0, + x_max: 325, + y_min: -4, + y_max: 132, + ha: 136, + o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z', + }, + restHalfLegerLine: { + x_min: -139, + x_max: 464, + y_min: -14, + y_max: 122, + ha: 136, + o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z', + }, + restQuarter: { + x_min: 0, + x_max: 235, + y_min: -331, + y_max: 401, + ha: 732, + o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z', + }, + rest8th: { + x_min: 0, + x_max: 276, + y_min: -255, + y_max: 204, + ha: 459, + o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z', + }, + rest16th: { + x_min: 1, + x_max: 344, + y_min: -507, + y_max: 204, + ha: 711, + o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z', + }, + rest32nd: { + x_min: 0, + x_max: 391, + y_min: -507, + y_max: 460, + ha: 967, + o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z', + }, + rest64th: { + x_min: 0, + x_max: 423, + y_min: -758, + y_max: 464, + ha: 1222, + o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z', + }, + rest128th: { + x_min: -1, + x_max: 475, + y_min: -759, + y_max: 717, + ha: 1476, + o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z', + }, + dynamicPiano: { + x_min: -95, + x_max: 317, + y_min: -163, + y_max: 263, + ha: 426, + o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z', + }, + dynamicMezzo: { + x_min: -7, + x_max: 374, + y_min: -2, + y_max: 251, + ha: 253, + o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z', + }, + dynamicForte: { + x_min: -137, + x_max: 334, + y_min: -193, + y_max: 421, + ha: 614, + o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z', + }, + dynamicRinforzando: { + x_min: -12, + x_max: 230, + y_min: 0, + y_max: 254, + ha: 254, + o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 208, + y_min: -5, + y_max: 263, + ha: 268, + o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z', + }, + dynamicZ: { + x_min: -42, + x_max: 239, + y_min: -1, + y_max: 258, + ha: 259, + o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z', + }, + ornamentTrill: { + x_min: -12, + x_max: 383, + y_min: 0, + y_max: 383, + ha: 383, + o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 456, + y_min: 0, + y_max: 232, + ha: 232, + o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 456, + y_min: -80, + y_max: 313, + ha: 393, + o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', + }, + ornamentMordent: { + x_min: 0, + x_max: 473, + y_min: -77, + y_max: 316, + ha: 393, + o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z', + }, + ornamentTremblement: { + x_min: 0, + x_max: 654, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 680, + y_min: 0, + y_max: 388, + ha: 388, + o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 0, + x_max: 662, + y_min: -158, + y_max: 248, + ha: 406, + o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 662, + y_min: -158, + y_max: 321, + ha: 479, + o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 662, + y_min: 0, + y_max: 406, + ha: 406, + o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 857, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 565, + y_min: -171, + y_max: 249, + ha: 420, + o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 312, + y_min: 0, + y_max: 312, + ha: 312, + o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z', + }, + brassMuteOpen: { + x_min: 0, + x_max: 280, + y_min: 0, + y_max: 280, + ha: 280, + o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 315, + y_min: 0, + y_max: 293, + ha: 293, + o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z', + }, + stringsUpBow: { + x_min: 0, + x_max: 262, + y_min: 0, + y_max: 343, + ha: 343, + o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 181, + y_min: 0, + y_max: 181, + ha: 181, + o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 269, + y_min: 0, + y_max: 389, + ha: 389, + o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 269, + y_min: 0, + y_max: 389, + ha: 389, + o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 981, + y_min: -10, + y_max: 545, + ha: 555, + o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 473, + ha: 473, + o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z', + }, + wiggleArpeggiatoUp: { + x_min: -22, + x_max: 242, + y_min: 0, + y_max: 164, + ha: 164, + o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 481, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 735, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1243, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 481, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z', + }, + csymDiminished: { + x_min: 0, + x_max: 501, + y_min: 0, + y_max: 501, + ha: 501, + o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z', + }, + csymHalfDiminished: { + x_min: -1, + x_max: 502, + y_min: -1, + y_max: 502, + ha: 503, + o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z', + }, + csymAugmented: { + x_min: 1, + x_max: 321, + y_min: 90, + y_max: 410, + ha: 320, + o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 500, + y_min: 10, + y_max: 490, + ha: 480, + o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 160, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 416, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', + }, + }, + fontFamily: 'Leland', + resolution: 1000, + generatedOn: '2022-12-19T23:52:37.756Z', +}; + + +/***/ }), + +/***/ "./src/fonts/load_all.ts": +/*!*******************************!*\ + !*** ./src/fonts/load_all.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadAllMusicFonts": () => (/* binding */ loadAllMusicFonts) +/* harmony export */ }); +/* harmony import */ var _load_bravura__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./load_bravura */ "./src/fonts/load_bravura.ts"); +/* harmony import */ var _load_custom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./load_custom */ "./src/fonts/load_custom.ts"); +/* harmony import */ var _load_gonville__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load_gonville */ "./src/fonts/load_gonville.ts"); +/* harmony import */ var _load_leland__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./load_leland */ "./src/fonts/load_leland.ts"); +/* harmony import */ var _load_petaluma__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load_petaluma */ "./src/fonts/load_petaluma.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// vexflow.js statically bundles & preloads all of our music engraving fonts. + + + + + +// ADD_MUSIC_FONT +// import { loadXXX } from './load_xxx'; +// Populate our font "database" with all our music fonts. +function loadAllMusicFonts() { + (0,_load_bravura__WEBPACK_IMPORTED_MODULE_0__.loadBravura)(); + (0,_load_gonville__WEBPACK_IMPORTED_MODULE_2__.loadGonville)(); + (0,_load_petaluma__WEBPACK_IMPORTED_MODULE_4__.loadPetaluma)(); + (0,_load_custom__WEBPACK_IMPORTED_MODULE_1__.loadCustom)(); + (0,_load_leland__WEBPACK_IMPORTED_MODULE_3__.loadLeland)(); + // ADD_MUSIC_FONT + // loadXXX(); +} + + +/***/ }), + +/***/ "./src/fonts/load_bravura.ts": +/*!***********************************!*\ + !*** ./src/fonts/load_bravura.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadBravura": () => (/* binding */ loadBravura) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bravura_glyphs */ "./src/fonts/bravura_glyphs.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base. +// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts +// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js). +// ADD_MUSIC_FONT +// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts. +// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts. +// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js +// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary. + + + +function loadBravura() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Bravura', _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__.BravuraFont, _common_metrics__WEBPACK_IMPORTED_MODULE_2__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_custom.ts": +/*!**********************************!*\ + !*** ./src/fonts/load_custom.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadCustom": () => (/* binding */ loadCustom) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./custom_glyphs */ "./src/fonts/custom_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +function loadCustom() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Custom', _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__.CustomFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_gonville.ts": +/*!************************************!*\ + !*** ./src/fonts/load_gonville.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadGonville": () => (/* binding */ loadGonville) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gonville_glyphs */ "./src/fonts/gonville_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +function loadGonville() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Gonville', _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__.GonvilleSmuflFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_leland.ts": +/*!**********************************!*\ + !*** ./src/fonts/load_leland.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadLeland": () => (/* binding */ loadLeland) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./leland_glyphs */ "./src/fonts/leland_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +function loadLeland() { + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Leland', _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__.LelandFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics); +} + + +/***/ }), + +/***/ "./src/fonts/load_petaluma.ts": +/*!************************************!*\ + !*** ./src/fonts/load_petaluma.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadPetaluma": () => (/* binding */ loadPetaluma) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petaluma_glyphs */ "./src/fonts/petaluma_glyphs.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +const petalumaChordMetrics = { + csymDiminished: { + leftSideBearing: -95, + advanceWidth: 506, + yOffset: 0, + }, + csymHalfDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymAugmented: { + leftSideBearing: -25, + advanceWidth: 530, + yOffset: 0, + }, + csymParensLeftTall: { + leftSideBearing: 0, + advanceWidth: 155, + yOffset: 150, + }, + csymParensRightTall: { + leftSideBearing: 40, + advanceWidth: 189, + yOffset: 150, + }, + csymBracketLeftTall: { + leftSideBearing: 0, + advanceWidth: 328, + yOffset: 0, + }, + csymBracketRightTall: { + leftSideBearing: 1, + advanceWidth: 600, + yOffset: 0, + }, + csymParensLeftVeryTall: { + leftSideBearing: 0, + advanceWidth: 210, + yOffset: 250, + }, + csymParensRightVeryTall: { + leftSideBearing: -100, + advanceWidth: 111, + yOffset: 250, + }, + csymDiagonalArrangementSlash: { + leftSideBearing: -1, + advanceWidth: 990, + yOffset: 0, + }, + csymMinor: { + leftSideBearing: 0, + advanceWidth: 482, + yOffset: 0, + }, + csymMajorSeventh: { + leftSideBearing: 100, + yOffset: 0, + advanceWidth: 600, + }, + accidentalSharp: { + leftSideBearing: 0, + advanceWidth: 425, + yOffset: -422, + }, + accidentalFlat: { + leftSideBearing: -10, + advanceWidth: 228, + yOffset: -284, + }, +}; +function loadPetaluma() { + const metrics = JSON.parse(JSON.stringify(_common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics)); + const chordMetrics = metrics.chordSymbol; + if (chordMetrics) { + chordMetrics.glyphs = petalumaChordMetrics; + } + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Petaluma', _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaFont, metrics); +} + + +/***/ }), + +/***/ "./src/fonts/petaluma_glyphs.ts": +/*!**************************************!*\ + !*** ./src/fonts/petaluma_glyphs.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PetalumaFont": () => (/* binding */ PetalumaFont) +/* harmony export */ }); +const PetalumaFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 508, + y_min: 0, + y_max: 370, + ha: 370, + o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z', + }, + bracketBottom: { + x_min: 0, + x_max: 496, + y_min: -393, + y_max: 0, + ha: 393, + o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z', + }, + barlineTick: { + x_min: 0, + x_max: 56, + y_min: 877, + y_max: 1122, + ha: 245, + o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z', + }, + breathMarkTick: { + x_min: 0, + x_max: 568, + y_min: 0, + y_max: 621, + ha: 621, + o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z', + }, + segno: { + x_min: 0, + x_max: 798, + y_min: -65, + y_max: 806, + ha: 871, + o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z', + }, + coda: { + x_min: 0, + x_max: 1380, + y_min: -196, + y_max: 1037, + ha: 1233, + o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z', + }, + gClef: { + x_min: 0, + x_max: 664, + y_min: -559, + y_max: 1009, + ha: 1568, + o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z', + }, + cClef: { + x_min: 0, + x_max: 731, + y_min: -543, + y_max: 543, + ha: 1086, + o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z', + }, + fClef: { + x_min: 0, + x_max: 776, + y_min: -496, + y_max: 216, + ha: 712, + o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 379, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 438, + y_min: -768, + y_max: 767, + ha: 1535, + o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z', + }, + timeSig0: { + x_min: 20, + x_max: 513, + y_min: -358, + y_max: 359, + ha: 717, + o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z', + }, + timeSig1: { + x_min: 20, + x_max: 283, + y_min: -364, + y_max: 366, + ha: 730, + o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z', + }, + timeSig2: { + x_min: 20, + x_max: 660, + y_min: -379, + y_max: 382, + ha: 761, + o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z', + }, + timeSig3: { + x_min: 20, + x_max: 540, + y_min: -392, + y_max: 392, + ha: 784, + o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z', + }, + timeSig4: { + x_min: 20, + x_max: 633, + y_min: -490, + y_max: 491, + ha: 981, + o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z', + }, + timeSig5: { + x_min: 20, + x_max: 583, + y_min: -389, + y_max: 389, + ha: 778, + o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z', + }, + timeSig6: { + x_min: 20, + x_max: 565, + y_min: -363, + y_max: 363, + ha: 726, + o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z', + }, + timeSig7: { + x_min: 20, + x_max: 592, + y_min: -345, + y_max: 345, + ha: 690, + o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z', + }, + timeSig8: { + x_min: 20, + x_max: 504, + y_min: -428, + y_max: 428, + ha: 856, + o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z', + }, + timeSig9: { + x_min: 20, + x_max: 494, + y_min: -421, + y_max: 421, + ha: 842, + o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z', + }, + timeSigCommon: { + x_min: 20, + x_max: 585, + y_min: -298, + y_max: 294, + ha: 592, + o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z', + }, + timeSigCutCommon: { + x_min: 20, + x_max: 695, + y_min: -687, + y_max: 687, + ha: 1374, + o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 661, + y_min: -358, + y_max: 358, + ha: 716, + o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z', + }, + timeSigPlusSmall: { + x_min: 0, + x_max: 418, + y_min: -197, + y_max: 199, + ha: 396, + o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 662, + y_min: -54, + y_max: 55, + ha: 109, + o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z', + }, + timeSigParensRight: { + x_min: 0, + x_max: 274, + y_min: -723, + y_max: 725, + ha: 1448, + o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z', + }, + timeSigParensRightSmall: { + x_min: 0, + x_max: 154, + y_min: -422, + y_max: 422, + ha: 844, + o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z', + }, + timeSigParensLeft: { + x_min: 1, + x_max: 400, + y_min: -728, + y_max: 728, + ha: 1456, + o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z', + }, + timeSigParensLeftSmall: { + x_min: 0, + x_max: 173, + y_min: -405, + y_max: 404, + ha: 809, + o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 614, + y_min: -223, + y_max: 223, + ha: 446, + o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 380, + y_min: -186, + y_max: 165, + ha: 351, + o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 334, + y_min: -174, + y_max: 175, + ha: 349, + o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 334, + y_min: -164, + y_max: 164, + ha: 328, + o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z', + }, + noteheadXDoubleWhole: { + x_min: 0, + x_max: 730, + y_min: -266, + y_max: 267, + ha: 533, + o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 506, + y_min: -143, + y_max: 144, + ha: 287, + o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 421, + y_min: -146, + y_max: 151, + ha: 297, + o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 289, + y_min: -156, + y_max: 157, + ha: 313, + o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z', + }, + noteheadCircleXDoubleWhole: { + x_min: 0, + x_max: 437, + y_min: -220, + y_max: 219, + ha: 439, + o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z', + }, + noteheadCircleXWhole: { + x_min: 0, + x_max: 323, + y_min: -190, + y_max: 184, + ha: 374, + o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z', + }, + noteheadCircleXHalf: { + x_min: 0, + x_max: 309, + y_min: -179, + y_max: 179, + ha: 358, + o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 344, + y_min: -179, + y_max: 175, + ha: 354, + o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z', + }, + noteheadCircledDoubleWhole: { + x_min: 0, + x_max: 672, + y_min: -291, + y_max: 291, + ha: 582, + o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z', + }, + noteheadCircledWhole: { + x_min: -50, + x_max: 472, + y_min: -231, + y_max: 232, + ha: 463, + o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z', + }, + noteheadCircledHalf: { + x_min: -50, + x_max: 393, + y_min: -175, + y_max: 175, + ha: 350, + o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z', + }, + noteheadCircledBlack: { + x_min: -70, + x_max: 326, + y_min: -168, + y_max: 192, + ha: 360, + o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 474, + y_min: -209, + y_max: 211, + ha: 420, + o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 350, + y_min: -131, + y_max: 131, + ha: 262, + o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 342, + y_min: -130, + y_max: 132, + ha: 262, + o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z', + }, + noteheadTriangleDownDoubleWhole: { + x_min: 0, + x_max: 510, + y_min: -213, + y_max: 213, + ha: 426, + o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z', + }, + noteheadTriangleDownWhole: { + x_min: 0, + x_max: 366, + y_min: -145, + y_max: 138, + ha: 283, + o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z', + }, + noteheadTriangleDownHalf: { + x_min: 0, + x_max: 341, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z', + }, + noteheadTriangleDownBlack: { + x_min: 0, + x_max: 346, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z', + }, + noteheadTriangleUpDoubleWhole: { + x_min: 0, + x_max: 510, + y_min: -213, + y_max: 213, + ha: 426, + o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 366, + y_min: -145, + y_max: 138, + ha: 283, + o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 341, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 346, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: 0, + x_max: 697, + y_min: -290, + y_max: 290, + ha: 580, + o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z', + }, + noteheadSlashedWhole1: { + x_min: -76, + x_max: 498, + y_min: -168, + y_max: 168, + ha: 336, + o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z', + }, + noteheadSlashedHalf1: { + x_min: -79, + x_max: 471, + y_min: -184, + y_max: 184, + ha: 368, + o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z', + }, + noteheadSlashedBlack1: { + x_min: -110, + x_max: 452, + y_min: -190, + y_max: 190, + ha: 380, + o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: 0, + x_max: 697, + y_min: -295, + y_max: 295, + ha: 590, + o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z', + }, + noteheadSlashedWhole2: { + x_min: -83, + x_max: 510, + y_min: -201, + y_max: 198, + ha: 399, + o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z', + }, + noteheadSlashedHalf2: { + x_min: -73, + x_max: 454, + y_min: -188, + y_max: 188, + ha: 376, + o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z', + }, + noteheadSlashedBlack2: { + x_min: -84, + x_max: 405, + y_min: -189, + y_max: 189, + ha: 378, + o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 429, + y_min: -221, + y_max: 221, + ha: 442, + o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 271, + y_min: -132, + y_max: 132, + ha: 264, + o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 295, + y_min: -148, + y_max: 148, + ha: 296, + o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 310, + y_min: -146, + y_max: 146, + ha: 292, + o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z', + }, + noteheadParenthesis: { + x_min: -70, + x_max: 329, + y_min: -196, + y_max: 201, + ha: 397, + o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z', + }, + noteheadParenthesisRight: { + x_min: -30, + x_max: 82, + y_min: -199, + y_max: 206, + ha: 405, + o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 106, + y_min: -197, + y_max: 197, + ha: 394, + o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 328, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 391, + y_min: -142, + y_max: 142, + ha: 284, + o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 398, + y_min: -139, + y_max: 140, + ha: 279, + o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 334, + y_min: -134, + y_max: 136, + ha: 270, + o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z', + }, + augmentationDot: { + x_min: 0, + x_max: 96, + y_min: -57, + y_max: 57, + ha: 114, + o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z', + }, + tremolo1: { + x_min: -158, + x_max: 156, + y_min: -88, + y_max: 88, + ha: 176, + o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z', + }, + flag8thUp: { + x_min: 0, + x_max: 261, + y_min: -819, + y_max: 0, + ha: 819, + o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z', + }, + flag8thDown: { + x_min: 0, + x_max: 261, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z', + }, + flag16thUp: { + x_min: 0, + x_max: 327, + y_min: -819, + y_max: 0, + ha: 819, + o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z', + }, + flag16thDown: { + x_min: 0, + x_max: 327, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 268, + y_min: -849, + y_max: 149, + ha: 999, + o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z', + }, + flag32ndDown: { + x_min: -3, + x_max: 268, + y_min: -169, + y_max: 829, + ha: 999, + o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z', + }, + flag64thUp: { + x_min: -4, + x_max: 282, + y_min: -824, + y_max: 347, + ha: 1171, + o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z', + }, + flag64thDown: { + x_min: -5, + x_max: 281, + y_min: -375, + y_max: 796, + ha: 1171, + o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z', + }, + flag128thUp: { + x_min: 0, + x_max: 252, + y_min: -804, + y_max: 530, + ha: 1334, + o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z', + }, + flag128thDown: { + x_min: -1, + x_max: 252, + y_min: -580, + y_max: 754, + ha: 1334, + o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z', + }, + accidentalFlat: { + x_min: 1, + x_max: 209, + y_min: -208, + y_max: 472, + ha: 680, + o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 214, + y_min: -456, + y_max: 462, + ha: 918, + o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z', + }, + accidentalSharp: { + x_min: -22, + x_max: 390, + y_min: -384, + y_max: 383, + ha: 767, + o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 287, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 359, + y_min: -220, + y_max: 446, + ha: 666, + o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 130, + y_min: -270, + y_max: 268, + ha: 538, + o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 139, + y_min: -275, + y_max: 277, + ha: 552, + o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 208, + y_min: -240, + y_max: 440, + ha: 680, + o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 422, + y_min: -240, + y_max: 440, + ha: 680, + o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 300, + y_min: -338, + y_max: 351, + ha: 689, + o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: -23, + x_max: 388, + y_min: -373, + y_max: 445, + ha: 818, + o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 2, + x_max: 287, + y_min: -248, + y_max: 432, + ha: 680, + o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z', + }, + accidentalBuyukMucennebSharp: { + x_min: -1, + x_max: 467, + y_min: -460, + y_max: 350, + ha: 810, + o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z', + }, + accidentalBakiyeFlat: { + x_min: 2, + x_max: 287, + y_min: -236, + y_max: 444, + ha: 680, + o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 300, + y_min: -338, + y_max: 351, + ha: 689, + o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 359, + y_min: -420, + y_max: 343, + ha: 763, + o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z', + }, + accidentalKoron: { + x_min: 0, + x_max: 303, + y_min: -462, + y_max: 180, + ha: 642, + o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z', + }, + accidentalSori: { + x_min: 0, + x_max: 434, + y_min: -295, + y_max: 325, + ha: 620, + o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 425, + y_min: 0, + y_max: 326, + ha: 326, + o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 425, + y_min: -326, + y_max: 0, + ha: 326, + o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z', + }, + articTenutoAbove: { + x_min: 0, + x_max: 471, + y_min: 0, + y_max: 56, + ha: 56, + o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z', + }, + articTenutoBelow: { + x_min: 0, + x_max: 471, + y_min: -59, + y_max: -3, + ha: 56, + o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z', + }, + articStaccatoAbove: { + x_min: 1, + x_max: 112, + y_min: 0, + y_max: 156, + ha: 156, + o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z', + }, + articStaccatoBelow: { + x_min: 1, + x_max: 112, + y_min: -156, + y_max: 0, + ha: 156, + o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z', + }, + articStaccatissimoAbove: { + x_min: 0, + x_max: 139, + y_min: 0, + y_max: 411, + ha: 411, + o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z', + }, + articStaccatissimoBelow: { + x_min: 0, + x_max: 139, + y_min: -411, + y_max: 0, + ha: 411, + o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z', + }, + articMarcatoAbove: { + x_min: 0, + x_max: 396, + y_min: 0, + y_max: 328, + ha: 328, + o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z', + }, + articMarcatoBelow: { + x_min: 0, + x_max: 396, + y_min: -328, + y_max: 0, + ha: 328, + o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z', + }, + fermataAbove: { + x_min: 0, + x_max: 472, + y_min: 2, + y_max: 454, + ha: 452, + o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z', + }, + fermataBelow: { + x_min: 0, + x_max: 519, + y_min: -430, + y_max: -1, + ha: 429, + o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 591, + y_min: -6, + y_max: 337, + ha: 343, + o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 602, + y_min: -335, + y_max: 7, + ha: 342, + o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 715, + y_min: -14, + y_max: 437, + ha: 451, + o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 686, + y_min: -427, + y_max: 30, + ha: 457, + o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z', + }, + fermataVeryShortAbove: { + x_min: 0, + x_max: 711, + y_min: -31, + y_max: 496, + ha: 527, + o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z', + }, + fermataVeryShortBelow: { + x_min: 0, + x_max: 697, + y_min: -475, + y_max: 13, + ha: 488, + o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 545, + y_min: -18, + y_max: 348, + ha: 366, + o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 565, + y_min: -335, + y_max: 10, + ha: 345, + o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 148, + y_min: 0, + y_max: 275, + ha: 275, + o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z', + }, + breathMarkUpbow: { + x_min: 0, + x_max: 254, + y_min: 0, + y_max: 595, + ha: 595, + o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z', + }, + caesura: { + x_min: 0, + x_max: 566, + y_min: 0, + y_max: 562, + ha: 563, + o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 386, + y_min: -10, + y_max: 584, + ha: 594, + o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z', + }, + restMaxima: { + x_min: 0, + x_max: 366, + y_min: -255, + y_max: 255, + ha: 510, + o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 122, + y_min: 0, + y_max: 249, + ha: 249, + o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z', + }, + restWhole: { + x_min: 1, + x_max: 500, + y_min: -120, + y_max: 14, + ha: 134, + o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z', + }, + restWholeLegerLine: { + x_min: -197, + x_max: 685, + y_min: -157, + y_max: 29, + ha: 186, + o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z', + }, + restHalf: { + x_min: 0, + x_max: 518, + y_min: 0, + y_max: 162, + ha: 162, + o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z', + }, + restHalfLegerLine: { + x_min: -120, + x_max: 448, + y_min: -20, + y_max: 143, + ha: 163, + o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z', + }, + restQuarter: { + x_min: 0, + x_max: 263, + y_min: -415, + y_max: 415, + ha: 830, + o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z', + }, + rest8th: { + x_min: 0, + x_max: 289, + y_min: -260, + y_max: 261, + ha: 521, + o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z', + }, + rest16th: { + x_min: 0, + x_max: 333, + y_min: -328, + y_max: 244, + ha: 572, + o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z', + }, + rest32nd: { + x_min: 0, + x_max: 347, + y_min: -498, + y_max: 483, + ha: 981, + o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z', + }, + rest64th: { + x_min: 0, + x_max: 428, + y_min: -720, + y_max: 474, + ha: 1194, + o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z', + }, + rest128th: { + x_min: 1, + x_max: 491, + y_min: -711, + y_max: 719, + ha: 1430, + o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z', + }, + dynamicPiano: { + x_min: -49, + x_max: 327, + y_min: -142, + y_max: 515, + ha: 657, + o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z', + }, + dynamicMezzo: { + x_min: -18, + x_max: 559, + y_min: -50, + y_max: 365, + ha: 415, + o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z', + }, + dynamicForte: { + x_min: -144, + x_max: 311, + y_min: -115, + y_max: 504, + ha: 619, + o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z', + }, + dynamicRinforzando: { + x_min: -75, + x_max: 322, + y_min: -90, + y_max: 325, + ha: 415, + o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 296, + y_min: 0, + y_max: 379, + ha: 379, + o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z', + }, + dynamicZ: { + x_min: -43, + x_max: 331, + y_min: 0, + y_max: 328, + ha: 328, + o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z', + }, + ornamentTrill: { + x_min: 1, + x_max: 551, + y_min: -18, + y_max: 539, + ha: 557, + o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 574, + y_min: 0, + y_max: 312, + ha: 312, + o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 574, + y_min: -106, + y_max: 405, + ha: 511, + o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z', + }, + ornamentMordent: { + x_min: 0, + x_max: 700, + y_min: 0, + y_max: 497, + ha: 497, + o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 747, + y_min: 0, + y_max: 243, + ha: 243, + o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z', + }, + ornamentTremblement: { + x_min: 0, + x_max: 982, + y_min: 0, + y_max: 224, + ha: 224, + o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 1066, + y_min: -50, + y_max: 533, + ha: 583, + o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 0, + x_max: 1088, + y_min: -380, + y_max: 252, + ha: 632, + o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 1185, + y_min: -380, + y_max: 465, + ha: 845, + o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 1003, + y_min: -20, + y_max: 521, + ha: 541, + o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 1246, + y_min: -30, + y_max: 296, + ha: 326, + o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: 0, + x_max: 1226, + y_min: -237, + y_max: 436, + ha: 673, + o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 833, + y_min: -309, + y_max: 319, + ha: 628, + o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z', + }, + brassScoop: { + x_min: 0, + x_max: 312, + y_min: -390, + y_max: 28, + ha: 418, + o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z', + }, + brassDoitMedium: { + x_min: 0, + x_max: 476, + y_min: -50, + y_max: 333, + ha: 383, + o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z', + }, + brassFallLipShort: { + x_min: 0, + x_max: 298, + y_min: -344, + y_max: 65, + ha: 409, + o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z', + }, + brassLiftMedium: { + x_min: 0, + x_max: 807, + y_min: 0, + y_max: 838, + ha: 838, + o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z', + }, + brassFallRoughMedium: { + x_min: 0, + x_max: 791, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z', + }, + brassBend: { + x_min: 0, + x_max: 381, + y_min: 0, + y_max: 367, + ha: 367, + o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 274, + y_min: 0, + y_max: 260, + ha: 260, + o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z', + }, + brassMuteOpen: { + x_min: 1, + x_max: 313, + y_min: 0, + y_max: 309, + ha: 309, + o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z', + }, + brassFlip: { + x_min: 0, + x_max: 402, + y_min: 0, + y_max: 361, + ha: 361, + o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z', + }, + brassJazzTurn: { + x_min: 0, + x_max: 646, + y_min: 0, + y_max: 212, + ha: 212, + o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z', + }, + brassSmear: { + x_min: 0, + x_max: 334, + y_min: 0, + y_max: 151, + ha: 151, + o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 306, + y_min: 0, + y_max: 366, + ha: 366, + o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z', + }, + stringsUpBow: { + x_min: 0, + x_max: 219, + y_min: 0, + y_max: 489, + ha: 489, + o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 191, + y_min: 0, + y_max: 202, + ha: 202, + o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 201, + y_min: 0, + y_max: 325, + ha: 325, + o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 211, + y_min: 0, + y_max: 307, + ha: 307, + o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z', + }, + pluckedLeftHandPizzicato: { + x_min: 0, + x_max: 271, + y_min: 0, + y_max: 284, + ha: 284, + o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 944, + y_min: -13, + y_max: 550, + ha: 563, + o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 437, + y_min: 0, + y_max: 461, + ha: 461, + o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z', + }, + pictChokeCymbal: { + x_min: 1, + x_max: 147, + y_min: 0, + y_max: 242, + ha: 242, + o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z', + }, + wiggleArpeggiatoUp: { + x_min: -22, + x_max: 300, + y_min: 0, + y_max: 176, + ha: 176, + o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z', + }, + arpeggiatoUp: { + x_min: 0, + x_max: 262, + y_min: 0, + y_max: 1459, + ha: 1459, + o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z', + }, + arpeggiatoDown: { + x_min: 0, + x_max: 218, + y_min: 0, + y_max: 1440, + ha: 1440, + o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 599, + y_min: -250, + y_max: 175, + ha: 425, + o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 775, + y_min: -247, + y_max: 363, + ha: 610, + o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1374, + y_min: -304, + y_max: 304, + ha: 608, + o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 630, + y_min: -225, + y_max: 265, + ha: 490, + o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z', + }, + csymDiminished: { + x_min: 0, + x_max: 506, + y_min: 0, + y_max: 500, + ha: 500, + o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z', + }, + csymHalfDiminished: { + x_min: -32, + x_max: 496, + y_min: -33, + y_max: 492, + ha: 525, + o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z', + }, + csymAugmented: { + x_min: 0, + x_max: 530, + y_min: 0, + y_max: 539, + ha: 539, + o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 593, + y_min: 0, + y_max: 569, + ha: 569, + o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z', + }, + csymMinor: { + x_min: 0, + x_max: 482, + y_min: 193, + y_max: 265, + ha: 72, + o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z', + }, + csymParensLeftTall: { + x_min: 0, + x_max: 185, + y_min: 0, + y_max: 1034, + ha: 1034, + o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z', + }, + csymParensRightTall: { + x_min: -40, + x_max: 189, + y_min: 0, + y_max: 1058, + ha: 1058, + o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z', + }, + csymBracketLeftTall: { + x_min: 0, + x_max: 328, + y_min: 2, + y_max: 807, + ha: 805, + o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z', + }, + csymBracketRightTall: { + x_min: 1, + x_max: 306, + y_min: 0, + y_max: 829, + ha: 829, + o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z', + }, + csymParensLeftVeryTall: { + x_min: 0, + x_max: 116, + y_min: 0, + y_max: 934, + ha: 934, + o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z', + }, + csymParensRightVeryTall: { + x_min: -20, + x_max: 111, + y_min: 0, + y_max: 1009, + ha: 1009, + o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z', + }, + csymDiagonalArrangementSlash: { + x_min: 0, + x_max: 990, + y_min: -27, + y_max: 1028, + ha: 1054, + o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 208, + y_min: -231, + y_max: 449, + ha: 680, + o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 335, + y_min: -231, + y_max: 449, + ha: 680, + o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z', + }, + accidentalWilsonPlus: { + x_min: 0, + x_max: 298, + y_min: -218, + y_max: 218, + ha: 436, + o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z', + }, + accidentalWilsonMinus: { + x_min: 0, + x_max: 284, + y_min: -163, + y_max: 163, + ha: 326, + o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z', + }, + }, + fontFamily: 'Petaluma', + resolution: 1000, + generatedOn: '2022-12-18T09:07:50.817Z', +}; + + +/***/ }), + +/***/ "./src/fonts/petalumascript_glyphs.ts": +/*!********************************************!*\ + !*** ./src/fonts/petalumascript_glyphs.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PetalumaScriptFont": () => (/* binding */ PetalumaScriptFont) +/* harmony export */ }); +const PetalumaScriptFont = { + spacing: 50, + glyphs: { + ' ': { + x_min: 0, + x_max: 250, + y_min: 0, + y_max: 500, + ha: 500, + leftSideBearing: 0, + advanceWidth: 250, + }, + '0': { + x_min: 33, + x_max: 534, + y_min: -13, + y_max: 751, + ha: 764, + leftSideBearing: 33, + advanceWidth: 570, + }, + '1': { + x_min: 48, + x_max: 235, + y_min: -17, + y_max: 734, + ha: 751, + leftSideBearing: 48, + advanceWidth: 286, + }, + '2': { + x_min: 56, + x_max: 571, + y_min: -19, + y_max: 741, + ha: 760, + leftSideBearing: 56, + advanceWidth: 626, + }, + '3': { + x_min: 50, + x_max: 528, + y_min: -7, + y_max: 731, + ha: 738, + leftSideBearing: 50, + advanceWidth: 589, + }, + '4': { + x_min: 38, + x_max: 564, + y_min: -13, + y_max: 743, + ha: 756, + leftSideBearing: 38, + advanceWidth: 614, + }, + '5': { + x_min: 42, + x_max: 601, + y_min: -34, + y_max: 743, + ha: 777, + leftSideBearing: 42, + advanceWidth: 648, + }, + '6': { + x_min: 47, + x_max: 606, + y_min: -16, + y_max: 743, + ha: 759, + leftSideBearing: 47, + advanceWidth: 667, + }, + '7': { + x_min: 47, + x_max: 567, + y_min: 5, + y_max: 739, + ha: 734, + leftSideBearing: 0, + advanceWidth: 615, + }, + '8': { + x_min: 40, + x_max: 541, + y_min: -15, + y_max: 752, + ha: 767, + leftSideBearing: 40, + advanceWidth: 585, + }, + '9': { + x_min: 40, + x_max: 537, + y_min: -52, + y_max: 736, + ha: 788, + leftSideBearing: 40, + advanceWidth: 592, + }, + '!': { + x_min: 49, + x_max: 180, + y_min: -7, + y_max: 761, + ha: 768, + leftSideBearing: 49, + advanceWidth: 230, + }, + '"': { + x_min: 39, + x_max: 304, + y_min: 596, + y_max: 804, + ha: 208, + leftSideBearing: 39, + advanceWidth: 353, + }, + '#': { + x_min: 33, + x_max: 599, + y_min: -8, + y_max: 765, + ha: 773, + leftSideBearing: 33, + advanceWidth: 648, + }, + $: { + x_min: 53, + x_max: 495, + y_min: -111, + y_max: 823, + ha: 934, + leftSideBearing: 53, + advanceWidth: 560, + }, + '%': { + x_min: 35, + x_max: 656, + y_min: -128, + y_max: 808, + ha: 936, + leftSideBearing: 35, + advanceWidth: 711, + }, + '&': { + x_min: 53, + x_max: 441, + y_min: -3, + y_max: 753, + ha: 756, + leftSideBearing: 53, + advanceWidth: 500, + }, + "'": { + x_min: 43, + x_max: 161, + y_min: 590, + y_max: 811, + ha: 221, + leftSideBearing: 43, + advanceWidth: 217, + }, + '(': { + x_min: 41, + x_max: 311, + y_min: -36, + y_max: 845, + ha: 881, + leftSideBearing: 41, + advanceWidth: 308, + }, + ')': { + x_min: -8, + x_max: 257, + y_min: -21, + y_max: 852, + ha: 873, + leftSideBearing: -8, + advanceWidth: 280, + }, + '*': { + x_min: 59, + x_max: 539, + y_min: 175, + y_max: 589, + ha: 414, + leftSideBearing: 59, + advanceWidth: 601, + }, + '+': { + x_min: 33, + x_max: 361, + y_min: 180, + y_max: 587, + ha: 407, + leftSideBearing: 33, + advanceWidth: 400, + }, + ',': { + x_min: 15, + x_max: 176, + y_min: -129, + y_max: 92, + ha: 221, + leftSideBearing: 15, + advanceWidth: 205, + }, + '-': { + x_min: 40, + x_max: 380, + y_min: 317, + y_max: 452, + ha: 135, + leftSideBearing: 40, + advanceWidth: 422, + }, + '.': { + x_min: 48, + x_max: 185, + y_min: -56, + y_max: 84, + ha: 140, + leftSideBearing: 48, + advanceWidth: 227, + }, + '/': { + x_min: -58, + x_max: 654, + y_min: -122, + y_max: 844, + ha: 966, + leftSideBearing: -58, + advanceWidth: 626, + }, + ':': { + x_min: 65, + x_max: 225, + y_min: 97, + y_max: 536, + ha: 439, + leftSideBearing: 65, + advanceWidth: 302, + }, + ';': { + x_min: 13, + x_max: 295, + y_min: -139, + y_max: 536, + ha: 675, + leftSideBearing: 13, + advanceWidth: 334, + }, + '<': { + x_min: 28, + x_max: 438, + y_min: -1, + y_max: 607, + ha: 608, + leftSideBearing: 28, + advanceWidth: 475, + }, + '=': { + x_min: 40, + x_max: 383, + y_min: 199.9598640852289, + y_max: 541, + ha: 341.0401359147711, + leftSideBearing: 40, + advanceWidth: 422, + }, + '>': { + x_min: 35, + x_max: 421, + y_min: 28, + y_max: 632, + ha: 604, + leftSideBearing: 35, + advanceWidth: 466, + }, + '?': { + x_min: 45, + x_max: 548, + y_min: -17, + y_max: 767, + ha: 784, + leftSideBearing: 45, + advanceWidth: 592, + }, + '@': { + x_min: 51, + x_max: 730, + y_min: -78, + y_max: 753, + ha: 831, + leftSideBearing: 51, + advanceWidth: 781, + }, + A: { + x_min: 37, + x_max: 554, + y_min: -4, + y_max: 746, + ha: 750, + leftSideBearing: 37, + advanceWidth: 617, + }, + B: { + x_min: 37, + x_max: 532, + y_min: 3, + y_max: 783, + ha: 780, + leftSideBearing: 37, + advanceWidth: 579, + }, + C: { + x_min: 37, + x_max: 583, + y_min: -3, + y_max: 775, + ha: 778, + leftSideBearing: 37, + advanceWidth: 623, + }, + D: { + x_min: 50, + x_max: 530, + y_min: -15, + y_max: 749, + ha: 764, + leftSideBearing: 50, + advanceWidth: 579, + }, + E: { + x_min: 45, + x_max: 531, + y_min: -1, + y_max: 743, + ha: 744, + leftSideBearing: 45, + advanceWidth: 585, + }, + F: { + x_min: 45, + x_max: 459, + y_min: 23, + y_max: 727, + ha: 704, + leftSideBearing: 45, + advanceWidth: 510, + }, + G: { + x_min: 31, + x_max: 577, + y_min: -8, + y_max: 733, + ha: 741, + leftSideBearing: 31, + advanceWidth: 611, + }, + H: { + x_min: 37, + x_max: 493, + y_min: -22, + y_max: 758, + ha: 780, + leftSideBearing: 37, + advanceWidth: 535, + }, + I: { + x_min: 47, + x_max: 501, + y_min: -3, + y_max: 731, + ha: 734, + leftSideBearing: 47, + advanceWidth: 541, + }, + J: { + x_min: 33, + x_max: 531, + y_min: -23, + y_max: 725, + ha: 748, + leftSideBearing: 33, + advanceWidth: 573, + }, + K: { + x_min: 43, + x_max: 505, + y_min: -10, + y_max: 740, + ha: 750, + leftSideBearing: 43, + advanceWidth: 560, + }, + L: { + x_min: 49, + x_max: 457, + y_min: -2, + y_max: 746, + ha: 748, + leftSideBearing: 49, + advanceWidth: 510, + }, + M: { + x_min: 35, + x_max: 699, + y_min: 1, + y_max: 744, + ha: 743, + leftSideBearing: 35, + advanceWidth: 743, + }, + N: { + x_min: 34, + x_max: 533, + y_min: -17, + y_max: 761, + ha: 778, + leftSideBearing: 34, + advanceWidth: 579, + }, + O: { + x_min: 41, + x_max: 608, + y_min: -5, + y_max: 735, + ha: 740, + leftSideBearing: 41, + advanceWidth: 667, + }, + P: { + x_min: 53, + x_max: 451, + y_min: -18, + y_max: 735, + ha: 753, + leftSideBearing: 53, + advanceWidth: 497, + }, + Q: { + x_min: 40, + x_max: 599, + y_min: -67, + y_max: 744, + ha: 811, + leftSideBearing: 40, + advanceWidth: 648, + }, + R: { + x_min: 39, + x_max: 487, + y_min: 16, + y_max: 735, + ha: 719, + leftSideBearing: 39, + advanceWidth: 535, + }, + S: { + x_min: 35, + x_max: 552, + y_min: -47, + y_max: 708, + ha: 755, + leftSideBearing: 35, + advanceWidth: 604, + }, + T: { + x_min: 26, + x_max: 656, + y_min: -13, + y_max: 718, + ha: 731, + leftSideBearing: 26, + advanceWidth: 705, + }, + U: { + x_min: 41, + x_max: 518, + y_min: -20, + y_max: 748, + ha: 768, + leftSideBearing: 41, + advanceWidth: 567, + }, + V: { + x_min: 47, + x_max: 509, + y_min: -26, + y_max: 744, + ha: 770, + leftSideBearing: 47, + advanceWidth: 567, + }, + W: { + x_min: 44, + x_max: 789, + y_min: -35, + y_max: 720, + ha: 755, + leftSideBearing: 44, + advanceWidth: 833, + }, + X: { + x_min: 63, + x_max: 635, + y_min: -10, + y_max: 745, + ha: 755, + leftSideBearing: 63, + advanceWidth: 680, + }, + Y: { + x_min: 43, + x_max: 503, + y_min: -21, + y_max: 734, + ha: 755, + leftSideBearing: 43, + advanceWidth: 541, + }, + Z: { + x_min: 42, + x_max: 584, + y_min: -10, + y_max: 739, + ha: 749, + leftSideBearing: 42, + advanceWidth: 629, + }, + '[': { + x_min: 46, + x_max: 346, + y_min: -150, + y_max: 884, + ha: 1034, + leftSideBearing: 46, + advanceWidth: 291, + }, + '\\': { + x_min: 20, + x_max: 616, + y_min: -100, + y_max: 797, + ha: 897, + leftSideBearing: 20, + advanceWidth: 645, + }, + ']': { + x_min: -76, + x_max: 226, + y_min: -150, + y_max: 881, + ha: 1031, + leftSideBearing: -76, + advanceWidth: 297, + }, + '^': { + x_min: 43, + x_max: 437, + y_min: 517, + y_max: 812, + ha: 295, + leftSideBearing: 43, + advanceWidth: 478, + }, + _: { + x_min: 29, + x_max: 563, + y_min: -110, + y_max: -1, + ha: 109, + leftSideBearing: 29, + advanceWidth: 598, + }, + '`': { + x_min: 54, + x_max: 321, + y_min: 540, + y_max: 747, + ha: 207, + leftSideBearing: 54, + advanceWidth: 368, + }, + a: { + x_min: 20, + x_max: 447, + y_min: -17, + y_max: 495, + ha: 512, + leftSideBearing: 20, + advanceWidth: 494, + }, + b: { + x_min: 37, + x_max: 466, + y_min: -27, + y_max: 770, + ha: 797, + leftSideBearing: 37, + advanceWidth: 510, + }, + c: { + x_min: 35, + x_max: 456, + y_min: -9, + y_max: 507, + ha: 516, + leftSideBearing: 35, + advanceWidth: 460, + }, + d: { + x_min: 45, + x_max: 520, + y_min: -15, + y_max: 764, + ha: 779, + leftSideBearing: 45, + advanceWidth: 560, + }, + e: { + x_min: 33, + x_max: 370, + y_min: -5, + y_max: 501, + ha: 506, + leftSideBearing: 33, + advanceWidth: 397, + }, + f: { + x_min: 35, + x_max: 411, + y_min: -13, + y_max: 695, + ha: 708, + leftSideBearing: 35, + advanceWidth: 453, + }, + g: { + x_min: 33, + x_max: 551, + y_min: -257, + y_max: 505, + ha: 762, + leftSideBearing: 33, + advanceWidth: 611, + }, + h: { + x_min: 32, + x_max: 458, + y_min: -29, + y_max: 743, + ha: 772, + leftSideBearing: 32, + advanceWidth: 491, + }, + i: { + x_min: 45, + x_max: 167, + y_min: -13, + y_max: 631, + ha: 644, + leftSideBearing: 45, + advanceWidth: 220, + }, + j: { + x_min: -127, + x_max: 261, + y_min: -231, + y_max: 601, + ha: 832, + leftSideBearing: -127, + advanceWidth: 308, + }, + k: { + x_min: 39, + x_max: 443, + y_min: -3, + y_max: 700, + ha: 703, + leftSideBearing: 39, + advanceWidth: 497, + }, + l: { + x_min: 58, + x_max: 168, + y_min: -8, + y_max: 686, + ha: 694, + leftSideBearing: 58, + advanceWidth: 227, + }, + m: { + x_min: 39, + x_max: 688, + y_min: -14, + y_max: 501, + ha: 515, + leftSideBearing: 39, + advanceWidth: 718, + }, + n: { + x_min: 45, + x_max: 491, + y_min: -32, + y_max: 512, + ha: 544, + leftSideBearing: 45, + advanceWidth: 541, + }, + o: { + x_min: 41, + x_max: 424, + y_min: -12, + y_max: 493, + ha: 505, + leftSideBearing: 41, + advanceWidth: 447, + }, + p: { + x_min: 25, + x_max: 529, + y_min: -260, + y_max: 500, + ha: 760, + leftSideBearing: 25, + advanceWidth: 573, + }, + q: { + x_min: 53, + x_max: 603, + y_min: -235, + y_max: 514, + ha: 749, + leftSideBearing: 53, + advanceWidth: 623, + }, + r: { + x_min: 32, + x_max: 407, + y_min: -7, + y_max: 492, + ha: 499, + leftSideBearing: 32, + advanceWidth: 460, + }, + s: { + x_min: 49, + x_max: 416, + y_min: -12, + y_max: 519, + ha: 531, + leftSideBearing: 49, + advanceWidth: 460, + }, + t: { + x_min: 32, + x_max: 442, + y_min: -5, + y_max: 684, + ha: 689, + leftSideBearing: 32, + advanceWidth: 469, + }, + u: { + x_min: 41, + x_max: 487, + y_min: -5, + y_max: 507, + ha: 512, + leftSideBearing: 41, + advanceWidth: 510, + }, + v: { + x_min: 16, + x_max: 441, + y_min: -20, + y_max: 542, + ha: 562, + leftSideBearing: 16, + advanceWidth: 456, + }, + w: { + x_min: 39, + x_max: 639, + y_min: -22, + y_max: 505, + ha: 527, + leftSideBearing: 39, + advanceWidth: 661, + }, + x: { + x_min: 15, + x_max: 505, + y_min: -39, + y_max: 539, + ha: 578, + leftSideBearing: 15, + advanceWidth: 541, + }, + y: { + x_min: -98, + x_max: 501, + y_min: -242, + y_max: 511, + ha: 753, + leftSideBearing: -98, + advanceWidth: 548, + }, + z: { + x_min: 27, + x_max: 479, + y_min: -3, + y_max: 494, + ha: 497, + leftSideBearing: 27, + advanceWidth: 494, + }, + '{': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '|': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '}': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '~': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + }, + fontFamily: 'PetalumaScript', + resolution: 1000, + generatedOn: '2020-06-14T18:33:25.407Z', +}; + + +/***/ }), + +/***/ "./src/fonts/robotoslab_glyphs.ts": +/*!****************************************!*\ + !*** ./src/fonts/robotoslab_glyphs.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RobotoSlabFont": () => (/* binding */ RobotoSlabFont) +/* harmony export */ }); +const RobotoSlabFont = { + spacing: 50, + glyphs: { + ' ': { + x_min: 0, + x_max: 509, + y_min: 0, + y_max: 2000, + ha: 2000, + leftSideBearing: 0, + advanceWidth: 509, + }, + '0': { + x_min: 121, + x_max: 1048, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 121, + advanceWidth: 1168, + }, + '1': { + x_min: 117, + x_max: 767, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 117, + advanceWidth: 844, + }, + '2': { + x_min: 75.8474576645637, + x_max: 1040, + y_min: 0, + y_max: 1477, + ha: 1477, + leftSideBearing: 75, + advanceWidth: 1131, + }, + '3': { + x_min: 74.85365853658536, + x_max: 994, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 74, + advanceWidth: 1106, + }, + '4': { + x_min: 63, + x_max: 1114, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 63, + advanceWidth: 1187, + }, + '5': { + x_min: 96.8448275474953, + x_max: 982, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 96, + advanceWidth: 1081, + }, + '6': { + x_min: 121, + x_max: 1067, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 121, + advanceWidth: 1144, + }, + '7': { + x_min: 76, + x_max: 1060, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: -30, + advanceWidth: 1128, + }, + '8': { + x_min: 92, + x_max: 1039, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 92, + advanceWidth: 1131, + }, + '9': { + x_min: 84, + x_max: 1026, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 84, + advanceWidth: 1154, + }, + '!': { + x_min: 143, + x_max: 340, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 143, + advanceWidth: 483, + }, + '"': { + x_min: 166, + x_max: 634, + y_min: 1055, + y_max: 1560, + ha: 505, + leftSideBearing: 166, + advanceWidth: 770, + }, + '#': { + x_min: 63, + x_max: 1179, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 63, + advanceWidth: 1246, + }, + $: { + x_min: 81.92156915727656, + x_max: 1012, + y_min: -208, + y_max: 1693, + ha: 1901, + leftSideBearing: 81, + advanceWidth: 1110, + }, + '%': { + x_min: 77, + x_max: 1384, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 77, + advanceWidth: 1460, + }, + '&': { + x_min: 74, + x_max: 1242, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 74, + advanceWidth: 1289, + }, + "'": { + x_min: 166, + x_max: 324, + y_min: 1055, + y_max: 1560, + ha: 505, + leftSideBearing: 166, + advanceWidth: 460, + }, + '(': { + x_min: 114, + x_max: 650, + y_min: -463, + y_max: 1636, + ha: 2099, + leftSideBearing: 114, + advanceWidth: 662, + }, + ')': { + x_min: 11, + x_max: 547, + y_min: -463, + y_max: 1636, + ha: 2099, + leftSideBearing: 11, + advanceWidth: 654, + }, + '*': { + x_min: 66, + x_max: 893, + y_min: 607, + y_max: 1456, + ha: 849, + leftSideBearing: 66, + advanceWidth: 958, + }, + '+': { + x_min: 73, + x_max: 1071, + y_min: 146, + y_max: 1206, + ha: 1060, + leftSideBearing: 73, + advanceWidth: 1145, + }, + ',': { + x_min: 23, + x_max: 315, + y_min: -311, + y_max: 221, + ha: 532, + leftSideBearing: 23, + advanceWidth: 404, + }, + '-': { + x_min: 154, + x_max: 643, + y_min: 538, + y_max: 692, + ha: 154, + leftSideBearing: 154, + advanceWidth: 797, + }, + '.': { + x_min: 145, + x_max: 342, + y_min: 0, + y_max: 202, + ha: 202, + leftSideBearing: 145, + advanceWidth: 493, + }, + '/': { + x_min: 0, + x_max: 774, + y_min: -125, + y_max: 1456, + ha: 1581, + leftSideBearing: 0, + advanceWidth: 824, + }, + ':': { + x_min: 145, + x_max: 342, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 145, + advanceWidth: 419, + }, + ';': { + x_min: 53, + x_max: 345, + y_min: -311, + y_max: 1082, + ha: 1393, + leftSideBearing: 53, + advanceWidth: 424, + }, + '<': { + x_min: 76, + x_max: 892, + y_min: 107, + y_max: 1013, + ha: 906, + leftSideBearing: 76, + advanceWidth: 1017, + }, + '=': { + x_min: 147, + x_max: 981, + y_min: 407, + y_max: 987, + ha: 580, + leftSideBearing: 147, + advanceWidth: 1127, + }, + '>': { + x_min: 125, + x_max: 980, + y_min: 87, + y_max: 993, + ha: 906, + leftSideBearing: 125, + advanceWidth: 1060, + }, + '?': { + x_min: 65.92660602419838, + x_max: 890, + y_min: 0, + y_max: 1477, + ha: 1477, + leftSideBearing: 65, + advanceWidth: 953, + }, + '@': { + x_min: 84.3592218305664, + x_max: 1705.2346925277395, + y_min: -453, + y_max: 1431, + ha: 1884, + leftSideBearing: 84, + advanceWidth: 1821, + }, + A: { + x_min: 70, + x_max: 1463, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 70, + advanceWidth: 1533, + }, + B: { + x_min: 81, + x_max: 1253, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1322, + }, + C: { + x_min: 80, + x_max: 1174, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 80, + advanceWidth: 1290, + }, + D: { + x_min: 81, + x_max: 1291, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1356, + }, + E: { + x_min: 81, + x_max: 1190, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1306, + }, + F: { + x_min: 81, + x_max: 1176, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1256, + }, + G: { + x_min: 80, + x_max: 1226, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 80, + advanceWidth: 1346, + }, + H: { + x_min: 81, + x_max: 1497, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1578, + }, + I: { + x_min: 81, + x_max: 604, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 685, + }, + J: { + x_min: 60, + x_max: 1100, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 60, + advanceWidth: 1169, + }, + K: { + x_min: 81, + x_max: 1427, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1501, + }, + L: { + x_min: 81, + x_max: 1130, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1210, + }, + M: { + x_min: 94, + x_max: 1888, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 94, + advanceWidth: 1982, + }, + N: { + x_min: 83, + x_max: 1509, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 83, + advanceWidth: 1592, + }, + O: { + x_min: 70, + x_max: 1281, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 70, + advanceWidth: 1351, + }, + P: { + x_min: 81, + x_max: 1242, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1297, + }, + Q: { + x_min: 70, + x_max: 1348, + y_min: -245, + y_max: 1477, + ha: 1722, + leftSideBearing: 70, + advanceWidth: 1376, + }, + R: { + x_min: 81, + x_max: 1285, + y_min: 0, + y_max: 1455, + ha: 1455, + leftSideBearing: 81, + advanceWidth: 1385, + }, + S: { + x_min: 115, + x_max: 1116, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 115, + advanceWidth: 1206, + }, + T: { + x_min: 96, + x_max: 1306, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 96, + advanceWidth: 1406, + }, + U: { + x_min: 70, + x_max: 1452, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 70, + advanceWidth: 1522, + }, + V: { + x_min: 65, + x_max: 1443, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 65, + advanceWidth: 1508, + }, + W: { + x_min: 72, + x_max: 2057, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 72, + advanceWidth: 2129, + }, + X: { + x_min: 80, + x_max: 1449, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 80, + advanceWidth: 1529, + }, + Y: { + x_min: 65, + x_max: 1396, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 65, + advanceWidth: 1461, + }, + Z: { + x_min: 90, + x_max: 1107, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 90, + advanceWidth: 1197, + }, + '[': { + x_min: 157, + x_max: 541, + y_min: -312, + y_max: 1664, + ha: 1976, + leftSideBearing: 157, + advanceWidth: 573, + }, + '\\': { + x_min: 36, + x_max: 830, + y_min: -125, + y_max: 1456, + ha: 1581, + leftSideBearing: 36, + advanceWidth: 841, + }, + ']': { + x_min: 23, + x_max: 408, + y_min: -312, + y_max: 1664, + ha: 1976, + leftSideBearing: 23, + advanceWidth: 552, + }, + '^': { + x_min: 71, + x_max: 802, + y_min: 729, + y_max: 1456, + ha: 727, + leftSideBearing: 71, + advanceWidth: 864, + }, + _: { + x_min: 119, + x_max: 1041, + y_min: -154, + y_max: 0, + ha: 154, + leftSideBearing: 119, + advanceWidth: 1168, + }, + '`': { + x_min: 40, + x_max: 456, + y_min: 1288, + y_max: 1560, + ha: 272, + leftSideBearing: 40, + advanceWidth: 496, + }, + a: { + x_min: 79, + x_max: 1053, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 79, + advanceWidth: 1132, + }, + b: { + x_min: -16, + x_max: 1071, + y_min: -21, + y_max: 1560, + ha: 1581, + leftSideBearing: -16, + advanceWidth: 1145, + }, + c: { + x_min: 78, + x_max: 988, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 78, + advanceWidth: 1067, + }, + d: { + x_min: 78, + x_max: 1156, + y_min: -21, + y_max: 1560, + ha: 1581, + leftSideBearing: 78, + advanceWidth: 1218, + }, + e: { + x_min: 74, + x_max: 980, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 74, + advanceWidth: 1059, + }, + f: { + x_min: 64, + x_max: 731, + y_min: 0, + y_max: 1581, + ha: 1581, + leftSideBearing: 64, + advanceWidth: 725, + }, + g: { + x_min: 78, + x_max: 1133, + y_min: -437, + y_max: 1102, + ha: 1539, + leftSideBearing: 78, + advanceWidth: 1157, + }, + h: { + x_min: 49, + x_max: 1255, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 49, + advanceWidth: 1315, + }, + i: { + x_min: 67, + x_max: 590, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 67, + advanceWidth: 652, + }, + j: { + x_min: -56, + x_max: 381, + y_min: -437, + y_max: 1560, + ha: 1997, + leftSideBearing: -56, + advanceWidth: 525, + }, + k: { + x_min: 64, + x_max: 1248, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 64, + advanceWidth: 1287, + }, + l: { + x_min: 64, + x_max: 587, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 64, + advanceWidth: 653, + }, + m: { + x_min: 74, + x_max: 1905, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 74, + advanceWidth: 1977, + }, + n: { + x_min: 74, + x_max: 1278, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 74, + advanceWidth: 1343, + }, + o: { + x_min: 78, + x_max: 1046, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 78, + advanceWidth: 1124, + }, + p: { + x_min: 34, + x_max: 1119, + y_min: -416, + y_max: 1102, + ha: 1518, + leftSideBearing: 34, + advanceWidth: 1197, + }, + q: { + x_min: 78, + x_max: 1135, + y_min: -416, + y_max: 1102, + ha: 1518, + leftSideBearing: 78, + advanceWidth: 1139, + }, + r: { + x_min: 72, + x_max: 808, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 72, + advanceWidth: 854, + }, + s: { + x_min: 104, + x_max: 933, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 104, + advanceWidth: 1022, + }, + t: { + x_min: 24, + x_max: 678, + y_min: -17, + y_max: 1343, + ha: 1360, + leftSideBearing: 24, + advanceWidth: 730, + }, + u: { + x_min: 52, + x_max: 1181, + y_min: -21, + y_max: 1082, + ha: 1103, + leftSideBearing: 52, + advanceWidth: 1245, + }, + v: { + x_min: 26, + x_max: 1176, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 26, + advanceWidth: 1206, + }, + w: { + x_min: 52, + x_max: 1777, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 52, + advanceWidth: 1823, + }, + x: { + x_min: 42, + x_max: 1163, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 42, + advanceWidth: 1203, + }, + y: { + x_min: 24, + x_max: 1172, + y_min: -437, + y_max: 1082, + ha: 1519, + leftSideBearing: 24, + advanceWidth: 1192, + }, + z: { + x_min: 88, + x_max: 960, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 88, + advanceWidth: 1032, + }, + '{': { + x_min: 63, + x_max: 671, + y_min: -364, + y_max: 1597, + ha: 1961, + leftSideBearing: 63, + advanceWidth: 701, + }, + '|': { + x_min: 150, + x_max: 307, + y_min: -270, + y_max: 1456, + ha: 1726, + leftSideBearing: 150, + advanceWidth: 451, + }, + '}': { + x_min: 27, + x_max: 635, + y_min: -364, + y_max: 1597, + ha: 1961, + leftSideBearing: 27, + advanceWidth: 701, + }, + '~': { + x_min: 121, + x_max: 1257, + y_min: 401, + y_max: 803, + ha: 402, + leftSideBearing: 121, + advanceWidth: 1386, + }, + }, + fontFamily: 'Roboto Slab', + resolution: 2048, + generatedOn: '2020-06-15T19:12:58.120Z', +}; + + +/***/ }), + +/***/ "./src/fonts/sans_bold_text_metrics.ts": +/*!*********************************************!*\ + !*** ./src/fonts/sans_bold_text_metrics.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SansFontBold": () => (/* binding */ SansFontBold) +/* harmony export */ }); +const SansFontBold = { + glyphs: { + '0': { + x_min: 86, + x_max: 1038, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 86, + advanceWidth: 1139, + }, + '1': { + x_min: 162, + x_max: 806, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 162, + advanceWidth: 1139, + }, + '2': { + x_min: 51, + x_max: 1036, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 51, + advanceWidth: 1139, + }, + '3': { + x_min: 77, + x_max: 1051, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 77, + advanceWidth: 1139, + }, + '4': { + x_min: 38, + x_max: 1092, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 38, + advanceWidth: 1139, + }, + '5': { + x_min: 91, + x_max: 1077, + y_min: -25, + y_max: 1446, + ha: 1471, + leftSideBearing: 91, + advanceWidth: 1139, + }, + '6': { + x_min: 87, + x_max: 1066, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 87, + advanceWidth: 1139, + }, + '7': { + x_min: 87, + x_max: 1048, + y_min: 0, + y_max: 1446, + ha: 1446, + leftSideBearing: 87, + advanceWidth: 1139, + }, + '8': { + x_min: 83, + x_max: 1047, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 83, + advanceWidth: 1139, + }, + '9': { + x_min: 65, + x_max: 1044, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 65, + advanceWidth: 1139, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 569, + }, + '!': { + x_min: 184, + x_max: 488, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 184, + advanceWidth: 682, + }, + '"': { + x_min: 112, + x_max: 869, + y_min: 945, + y_max: 1466, + ha: 521, + leftSideBearing: 112, + advanceWidth: 971, + }, + '#': { + x_min: 18, + x_max: 1115, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 18, + advanceWidth: 1139, + }, + $: { + x_min: 70, + x_max: 1048, + y_min: -205, + y_max: 1584, + ha: 1789, + leftSideBearing: 70, + advanceWidth: 1139, + }, + '%': { + x_min: 89, + x_max: 1725, + y_min: -59, + y_max: 1491, + ha: 1550, + leftSideBearing: 89, + advanceWidth: 1821, + }, + '&': { + x_min: 90, + x_max: 1446, + y_min: -38, + y_max: 1491, + ha: 1529, + leftSideBearing: 90, + advanceWidth: 1479, + }, + "'": { + x_min: 92, + x_max: 398, + y_min: 945, + y_max: 1466, + ha: 521, + leftSideBearing: 92, + advanceWidth: 487, + }, + '(': { + x_min: 107, + x_max: 616, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 107, + advanceWidth: 682, + }, + ')': { + x_min: 67, + x_max: 576, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 67, + advanceWidth: 682, + }, + '*': { + x_min: 28, + x_max: 753, + y_min: 792, + y_max: 1491, + ha: 699, + leftSideBearing: 28, + advanceWidth: 797, + }, + '+': { + x_min: 85, + x_max: 1110, + y_min: 211, + y_max: 1236, + ha: 1025, + leftSideBearing: 85, + advanceWidth: 1196, + }, + ',': { + x_min: 117, + x_max: 421, + y_min: -327, + y_max: 281, + ha: 608, + leftSideBearing: 117, + advanceWidth: 569, + }, + '-': { + x_min: 115, + x_max: 667, + y_min: 391, + y_max: 672, + ha: 281, + leftSideBearing: 115, + advanceWidth: 682, + }, + '.': { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 281, + ha: 281, + leftSideBearing: 147, + advanceWidth: 569, + }, + '/': { + x_min: -3, + x_max: 571, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: -3, + advanceWidth: 569, + }, + ':': { + x_min: 201, + x_max: 482, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 201, + advanceWidth: 682, + }, + ';': { + x_min: 170, + x_max: 474, + y_min: -327, + y_max: 1062, + ha: 1389, + leftSideBearing: 170, + advanceWidth: 682, + }, + '<': { + x_min: 95, + x_max: 1100, + y_min: 167, + y_max: 1281, + ha: 1114, + leftSideBearing: 95, + advanceWidth: 1196, + }, + '=': { + x_min: 85, + x_max: 1110, + y_min: 372, + y_max: 1074, + ha: 702, + leftSideBearing: 85, + advanceWidth: 1196, + }, + '>': { + x_min: 95, + x_max: 1101, + y_min: 166, + y_max: 1279, + ha: 1113, + leftSideBearing: 95, + advanceWidth: 1196, + }, + '?': { + x_min: 106, + x_max: 1158, + y_min: 0, + y_max: 1481, + ha: 1481, + leftSideBearing: 106, + advanceWidth: 1251, + }, + '@': { + x_min: 61, + x_max: 1990, + y_min: -431, + y_max: 1492, + ha: 1923, + leftSideBearing: 61, + advanceWidth: 1997, + }, + A: { + x_min: 0, + x_max: 1471, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 0, + advanceWidth: 1479, + }, + B: { + x_min: 150, + x_max: 1378, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + C: { + x_min: 97, + x_max: 1374, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 97, + advanceWidth: 1479, + }, + D: { + x_min: 148, + x_max: 1377, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 148, + advanceWidth: 1479, + }, + E: { + x_min: 149, + x_max: 1264, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 149, + advanceWidth: 1366, + }, + F: { + x_min: 151, + x_max: 1156, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 151, + advanceWidth: 1251, + }, + G: { + x_min: 98, + x_max: 1469, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 98, + advanceWidth: 1593, + }, + H: { + x_min: 150, + x_max: 1322, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + I: { + x_min: 140, + x_max: 436, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 140, + advanceWidth: 569, + }, + J: { + x_min: 35, + x_max: 973, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 35, + advanceWidth: 1139, + }, + K: { + x_min: 153, + x_max: 1475, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 153, + advanceWidth: 1479, + }, + L: { + x_min: 157, + x_max: 1189, + y_min: 0, + y_max: 1454, + ha: 1454, + leftSideBearing: 157, + advanceWidth: 1251, + }, + M: { + x_min: 145, + x_max: 1561, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 145, + advanceWidth: 1706, + }, + N: { + x_min: 152, + x_max: 1315, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 152, + advanceWidth: 1479, + }, + O: { + x_min: 89, + x_max: 1511, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 89, + advanceWidth: 1593, + }, + P: { + x_min: 149, + x_max: 1272, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 149, + advanceWidth: 1366, + }, + Q: { + x_min: 89, + x_max: 1566, + y_min: -147, + y_max: 1491, + ha: 1638, + leftSideBearing: 89, + advanceWidth: 1593, + }, + R: { + x_min: 150, + x_max: 1468, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + S: { + x_min: 74, + x_max: 1266, + y_min: -26, + y_max: 1491, + ha: 1517, + leftSideBearing: 74, + advanceWidth: 1366, + }, + T: { + x_min: 44, + x_max: 1209, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 44, + advanceWidth: 1251, + }, + U: { + x_min: 147, + x_max: 1316, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 147, + advanceWidth: 1479, + }, + V: { + x_min: -1, + x_max: 1364, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -1, + advanceWidth: 1366, + }, + W: { + x_min: 7, + x_max: 1931, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 7, + advanceWidth: 1933, + }, + X: { + x_min: 0, + x_max: 1363, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 0, + advanceWidth: 1366, + }, + Y: { + x_min: -3, + x_max: 1368, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -3, + advanceWidth: 1366, + }, + Z: { + x_min: 22, + x_max: 1213, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 22, + advanceWidth: 1251, + }, + '[': { + x_min: 146, + x_max: 644, + y_min: -413, + y_max: 1466, + ha: 1879, + leftSideBearing: 146, + advanceWidth: 682, + }, + '\\': { + x_min: -3, + x_max: 571, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: -3, + advanceWidth: 569, + }, + ']': { + x_min: 38, + x_max: 536, + y_min: -413, + y_max: 1466, + ha: 1879, + leftSideBearing: 38, + advanceWidth: 682, + }, + '^': { + x_min: 115, + x_max: 1080, + y_min: 692, + y_max: 1491, + ha: 799, + leftSideBearing: 115, + advanceWidth: 1196, + }, + _: { + x_min: -19, + x_max: 1149, + y_min: -405, + y_max: -223, + ha: 182, + leftSideBearing: -19, + advanceWidth: 1139, + }, + '`': { + x_min: 42, + x_max: 495, + y_min: 1192, + y_max: 1491, + ha: 299, + leftSideBearing: 42, + advanceWidth: 682, + }, + a: { + x_min: 73, + x_max: 1070, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 73, + advanceWidth: 1139, + }, + b: { + x_min: 135, + x_max: 1172, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 135, + advanceWidth: 1251, + }, + c: { + x_min: 85, + x_max: 1087, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 85, + advanceWidth: 1139, + }, + d: { + x_min: 84, + x_max: 1121, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 84, + advanceWidth: 1251, + }, + e: { + x_min: 65, + x_max: 1057.2517482517483, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 65, + advanceWidth: 1139, + }, + f: { + x_min: 24, + x_max: 742, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 24, + advanceWidth: 682, + }, + g: { + x_min: 84, + x_max: 1120, + y_min: -431, + y_max: 1086, + ha: 1517, + leftSideBearing: 84, + advanceWidth: 1251, + }, + h: { + x_min: 146, + x_max: 1113, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 146, + advanceWidth: 1251, + }, + i: { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 147, + advanceWidth: 569, + }, + j: { + x_min: -94, + x_max: 422, + y_min: -431, + y_max: 1466, + ha: 1897, + leftSideBearing: -94, + advanceWidth: 569, + }, + k: { + x_min: 137, + x_max: 1119, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 137, + advanceWidth: 1139, + }, + l: { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 147, + advanceWidth: 569, + }, + m: { + x_min: 126, + x_max: 1688, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 126, + advanceWidth: 1821, + }, + n: { + x_min: 145, + x_max: 1113, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 145, + advanceWidth: 1251, + }, + o: { + x_min: 82, + x_max: 1178, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 82, + advanceWidth: 1251, + }, + p: { + x_min: 139, + x_max: 1175, + y_min: -404, + y_max: 1086, + ha: 1490, + leftSideBearing: 139, + advanceWidth: 1251, + }, + q: { + x_min: 91, + x_max: 1122, + y_min: -404, + y_max: 1086, + ha: 1490, + leftSideBearing: 91, + advanceWidth: 1251, + }, + r: { + x_min: 135, + x_max: 823, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 797, + }, + s: { + x_min: 48, + x_max: 1040, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 48, + advanceWidth: 1139, + }, + t: { + x_min: 31, + x_max: 657, + y_min: -24, + y_max: 1437, + ha: 1461, + leftSideBearing: 31, + advanceWidth: 682, + }, + u: { + x_min: 141, + x_max: 1107, + y_min: -24, + y_max: 1062, + ha: 1086, + leftSideBearing: 141, + advanceWidth: 1251, + }, + v: { + x_min: 11, + x_max: 1114, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 11, + advanceWidth: 1139, + }, + w: { + x_min: 9, + x_max: 1592, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 9, + advanceWidth: 1593, + }, + x: { + x_min: 12, + x_max: 1120, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 12, + advanceWidth: 1139, + }, + y: { + x_min: 14, + x_max: 1106, + y_min: -431, + y_max: 1062, + ha: 1493, + leftSideBearing: 14, + advanceWidth: 1139, + }, + z: { + x_min: 34, + x_max: 982, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 34, + advanceWidth: 1024, + }, + '{': { + x_min: 60, + x_max: 744, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 60, + advanceWidth: 797, + }, + '|': { + x_min: 176, + x_max: 399, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 176, + advanceWidth: 573, + }, + '}': { + x_min: 45, + x_max: 729, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 45, + advanceWidth: 797, + }, + '~': { + x_min: 67, + x_max: 1129, + y_min: 519, + y_max: 924, + ha: 405, + leftSideBearing: 67, + advanceWidth: 1196, + }, + }, + fontFamily: 'Arial', + resolution: 2048, + generatedOn: '2022-11-04T20:05:21.000Z', +}; + + +/***/ }), + +/***/ "./src/fonts/sans_text_metrics.ts": +/*!****************************************!*\ + !*** ./src/fonts/sans_text_metrics.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SansFont": () => (/* binding */ SansFont) +/* harmony export */ }); +const SansFont = { + smufl: false, + name: 'SANS', + spacing: 50, + Description: 'Built-in sans-serif font', + bold: true, + italic: true, + monospaced: false, + serifs: false, + glyphs: { + '0': { + x_min: 85, + x_max: 1041, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 85, + advanceWidth: 1139, + }, + '1': { + x_min: 223, + x_max: 763, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 223, + advanceWidth: 1139, + }, + '2': { + x_min: 61.840001123045234, + x_max: 1031, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 61, + advanceWidth: 1139, + }, + '3': { + x_min: 86, + x_max: 1046, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 86, + advanceWidth: 1139, + }, + '4': { + x_min: 26, + x_max: 1040, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 26, + advanceWidth: 1139, + }, + '5': { + x_min: 85, + x_max: 1057, + y_min: -25, + y_max: 1446, + ha: 1471, + leftSideBearing: 85, + advanceWidth: 1139, + }, + '6': { + x_min: 77, + x_max: 1045, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 77, + advanceWidth: 1139, + }, + '7': { + x_min: 97, + x_max: 1046, + y_min: 0, + y_max: 1447, + ha: 1447, + leftSideBearing: 97, + advanceWidth: 1139, + }, + '8': { + x_min: 83, + x_max: 1049, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 83, + advanceWidth: 1139, + }, + '9': { + x_min: 85, + x_max: 1049, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 85, + advanceWidth: 1139, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 569, + }, + '!': { + x_min: 176, + x_max: 399, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 176, + advanceWidth: 569, + }, + '"': { + x_min: 94, + x_max: 631, + y_min: 947, + y_max: 1466, + ha: 519, + leftSideBearing: 94, + advanceWidth: 727, + }, + '#': { + x_min: 21, + x_max: 1113, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 21, + advanceWidth: 1139, + }, + $: { + x_min: 73, + x_max: 1043, + y_min: -211, + y_max: 1601, + ha: 1812, + leftSideBearing: 73, + advanceWidth: 1139, + }, + '%': { + x_min: 119, + x_max: 1695, + y_min: -54, + y_max: 1491, + ha: 1545, + leftSideBearing: 119, + advanceWidth: 1821, + }, + '&': { + x_min: 88, + x_max: 1319, + y_min: -34, + y_max: 1491, + ha: 1525, + leftSideBearing: 88, + advanceWidth: 1366, + }, + "'": { + x_min: 90, + x_max: 295, + y_min: 947, + y_max: 1466, + ha: 519, + leftSideBearing: 90, + advanceWidth: 391, + }, + '(': { + x_min: 124, + x_max: 608, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 124, + advanceWidth: 682, + }, + ')': { + x_min: 124, + x_max: 608, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 124, + advanceWidth: 682, + }, + '*': { + x_min: 64, + x_max: 725, + y_min: 867, + y_max: 1491, + ha: 624, + leftSideBearing: 64, + advanceWidth: 797, + }, + '+': { + x_min: 114, + x_max: 1082, + y_min: 237, + y_max: 1206, + ha: 969, + leftSideBearing: 114, + advanceWidth: 1196, + }, + ',': { + x_min: 170, + x_max: 387, + y_min: -290, + y_max: 205, + ha: 495, + leftSideBearing: 170, + advanceWidth: 569, + }, + '-': { + x_min: 65, + x_max: 618, + y_min: 440, + y_max: 621, + ha: 181, + leftSideBearing: 65, + advanceWidth: 682, + }, + '.': { + x_min: 186, + x_max: 391, + y_min: 0, + y_max: 205, + ha: 205, + leftSideBearing: 186, + advanceWidth: 569, + }, + '/': { + x_min: 0, + x_max: 569, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 0, + advanceWidth: 569, + }, + ':': { + x_min: 185, + x_max: 390, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 185, + advanceWidth: 569, + }, + ';': { + x_min: 170, + x_max: 387, + y_min: -290, + y_max: 1062, + ha: 1352, + leftSideBearing: 170, + advanceWidth: 569, + }, + '<': { + x_min: 112, + x_max: 1083, + y_min: 226, + y_max: 1219, + ha: 993, + leftSideBearing: 112, + advanceWidth: 1196, + }, + '=': { + x_min: 114, + x_max: 1082, + y_min: 417, + y_max: 1030, + ha: 613, + leftSideBearing: 114, + advanceWidth: 1196, + }, + '>': { + x_min: 112, + x_max: 1083, + y_min: 226, + y_max: 1219, + ha: 993, + leftSideBearing: 112, + advanceWidth: 1196, + }, + '?': { + x_min: 90, + x_max: 1036, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 90, + advanceWidth: 1139, + }, + '@': { + x_min: 111, + x_max: 2005, + y_min: -431, + y_max: 1493, + ha: 1924, + leftSideBearing: 111, + advanceWidth: 2079, + }, + A: { + x_min: -3, + x_max: 1369, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -3, + advanceWidth: 1366, + }, + B: { + x_min: 150, + x_max: 1257, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1366, + }, + C: { + x_min: 102, + x_max: 1398, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 102, + advanceWidth: 1479, + }, + D: { + x_min: 158, + x_max: 1370, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 158, + advanceWidth: 1479, + }, + E: { + x_min: 162, + x_max: 1256, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 162, + advanceWidth: 1366, + }, + F: { + x_min: 168, + x_max: 1157, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 168, + advanceWidth: 1251, + }, + G: { + x_min: 109, + x_max: 1465, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 109, + advanceWidth: 1593, + }, + H: { + x_min: 164, + x_max: 1314, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 164, + advanceWidth: 1479, + }, + I: { + x_min: 191, + x_max: 385, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 191, + advanceWidth: 569, + }, + J: { + x_min: 58.84976474807333, + x_max: 865, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 58, + advanceWidth: 1024, + }, + K: { + x_min: 150, + x_max: 1362, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1366, + }, + L: { + x_min: 150, + x_max: 1066, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1139, + }, + M: { + x_min: 152, + x_max: 1551, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 152, + advanceWidth: 1706, + }, + N: { + x_min: 156, + x_max: 1311, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 156, + advanceWidth: 1479, + }, + O: { + x_min: 99, + x_max: 1501, + y_min: -25, + y_max: 1492, + ha: 1517, + leftSideBearing: 99, + advanceWidth: 1593, + }, + P: { + x_min: 158, + x_max: 1277, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 158, + advanceWidth: 1366, + }, + Q: { + x_min: 88, + x_max: 1518, + y_min: -114, + y_max: 1492, + ha: 1606, + leftSideBearing: 88, + advanceWidth: 1593, + }, + R: { + x_min: 161, + x_max: 1453, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 161, + advanceWidth: 1479, + }, + S: { + x_min: 92, + x_max: 1259, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 92, + advanceWidth: 1366, + }, + T: { + x_min: 48, + x_max: 1210, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 48, + advanceWidth: 1251, + }, + U: { + x_min: 161, + x_max: 1314, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 161, + advanceWidth: 1479, + }, + V: { + x_min: 9, + x_max: 1350, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 9, + advanceWidth: 1366, + }, + W: { + x_min: 25, + x_max: 1910, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 25, + advanceWidth: 1933, + }, + X: { + x_min: 9, + x_max: 1353, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 9, + advanceWidth: 1366, + }, + Y: { + x_min: 6, + x_max: 1350, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 6, + advanceWidth: 1366, + }, + Z: { + x_min: 41, + x_max: 1200, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 41, + advanceWidth: 1251, + }, + '[': { + x_min: 139, + x_max: 536, + y_min: -407, + y_max: 1466, + ha: 1873, + leftSideBearing: 139, + advanceWidth: 569, + }, + '\\': { + x_min: 0, + x_max: 569, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 0, + advanceWidth: 569, + }, + ']': { + x_min: 39, + x_max: 436, + y_min: -407, + y_max: 1466, + ha: 1873, + leftSideBearing: 39, + advanceWidth: 569, + }, + '^': { + x_min: 54, + x_max: 907, + y_min: 690, + y_max: 1491, + ha: 801, + leftSideBearing: 54, + advanceWidth: 961, + }, + _: { + x_min: -31, + x_max: 1162, + y_min: -407, + y_max: -277, + ha: 130, + leftSideBearing: -31, + advanceWidth: 1139, + }, + '`': { + x_min: 89, + x_max: 465, + y_min: 1194, + y_max: 1474, + ha: 280, + leftSideBearing: 89, + advanceWidth: 682, + }, + a: { + x_min: 74, + x_max: 1052, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 74, + advanceWidth: 1139, + }, + b: { + x_min: 134, + x_max: 1055, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 134, + advanceWidth: 1139, + }, + c: { + x_min: 80, + x_max: 1005, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 80, + advanceWidth: 1024, + }, + d: { + x_min: 70, + x_max: 991, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 70, + advanceWidth: 1139, + }, + e: { + x_min: 75, + x_max: 1054, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 75, + advanceWidth: 1139, + }, + f: { + x_min: 19, + x_max: 640, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 19, + advanceWidth: 569, + }, + g: { + x_min: 66, + x_max: 1002, + y_min: -431, + y_max: 1086, + ha: 1517, + leftSideBearing: 66, + advanceWidth: 1139, + }, + h: { + x_min: 135, + x_max: 1000, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 135, + advanceWidth: 1139, + }, + i: { + x_min: 136, + x_max: 316, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 136, + advanceWidth: 455, + }, + j: { + x_min: -94, + x_max: 314, + y_min: -431, + y_max: 1466, + ha: 1897, + leftSideBearing: -94, + advanceWidth: 455, + }, + k: { + x_min: 136, + x_max: 1016, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 136, + advanceWidth: 1024, + }, + l: { + x_min: 131, + x_max: 311, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 131, + advanceWidth: 455, + }, + m: { + x_min: 135, + x_max: 1574, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 1706, + }, + n: { + x_min: 135, + x_max: 998, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 1139, + }, + o: { + x_min: 68, + x_max: 1063, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 68, + advanceWidth: 1139, + }, + p: { + x_min: 135, + x_max: 1057, + y_min: -407, + y_max: 1086, + ha: 1493, + leftSideBearing: 135, + advanceWidth: 1139, + }, + q: { + x_min: 72, + x_max: 992, + y_min: -407, + y_max: 1086, + ha: 1493, + leftSideBearing: 72, + advanceWidth: 1139, + }, + r: { + x_min: 133, + x_max: 710, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 133, + advanceWidth: 682, + }, + s: { + x_min: 63, + x_max: 945, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 63, + advanceWidth: 1024, + }, + t: { + x_min: 36, + x_max: 554, + y_min: -14, + y_max: 1433, + ha: 1447, + leftSideBearing: 36, + advanceWidth: 569, + }, + u: { + x_min: 131, + x_max: 992, + y_min: -24, + y_max: 1062, + ha: 1086, + leftSideBearing: 131, + advanceWidth: 1139, + }, + v: { + x_min: 26, + x_max: 1000, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 26, + advanceWidth: 1024, + }, + w: { + x_min: 6, + x_max: 1463, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 6, + advanceWidth: 1479, + }, + x: { + x_min: 15, + x_max: 1009, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 15, + advanceWidth: 1024, + }, + y: { + x_min: 33, + x_max: 1006, + y_min: -431, + y_max: 1062, + ha: 1493, + leftSideBearing: 33, + advanceWidth: 1024, + }, + z: { + x_min: 40, + x_max: 980, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 40, + advanceWidth: 1024, + }, + '{': { + x_min: 57, + x_max: 636, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 57, + advanceWidth: 684, + }, + '|': { + x_min: 188, + x_max: 345, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 188, + advanceWidth: 532, + }, + '}': { + x_min: 47, + x_max: 626, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 47, + advanceWidth: 684, + }, + '~': { + x_min: 87, + x_max: 1110, + y_min: 557, + y_max: 885, + ha: 328, + leftSideBearing: 87, + advanceWidth: 1196, + }, + }, + fontFamily: 'sans-serif', + resolution: 2048, + generatedOn: '2020-10-18T18:48:11.823Z', +}; + + +/***/ }), + +/***/ "./src/fonts/serif_text_metrics.ts": +/*!*****************************************!*\ + !*** ./src/fonts/serif_text_metrics.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SerifFont": () => (/* binding */ SerifFont) +/* harmony export */ }); +const SerifFont = { + smufl: false, + name: 'SERIF', + spacing: 50, + Description: 'Built-in serif font', + bold: true, + italic: true, + monospaced: false, + serifs: true, + glyphs: { + '0': { + x_min: 49, + x_max: 975, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 49, + advanceWidth: 1024, + }, + '1': { + x_min: 227, + x_max: 811, + y_min: 0, + y_max: 1383, + ha: 1383, + leftSideBearing: 227, + advanceWidth: 1024, + }, + '2': { + x_min: 61, + x_max: 965, + y_min: 0, + y_max: 1383, + ha: 1383, + leftSideBearing: 61, + advanceWidth: 1024, + }, + '3': { + x_min: 88, + x_max: 883, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 88, + advanceWidth: 1024, + }, + '4': { + x_min: 25, + x_max: 967, + y_min: 0, + y_max: 1384, + ha: 1384, + leftSideBearing: 25, + advanceWidth: 1024, + }, + '5': { + x_min: 66, + x_max: 898, + y_min: -27, + y_max: 1409, + ha: 1436, + leftSideBearing: 66, + advanceWidth: 1024, + }, + '6': { + x_min: 70, + x_max: 958, + y_min: -27, + y_max: 1401, + ha: 1428, + leftSideBearing: 70, + advanceWidth: 1024, + }, + '7': { + x_min: 41, + x_max: 920, + y_min: -16, + y_max: 1356, + ha: 1372, + leftSideBearing: 41, + advanceWidth: 1024, + }, + '8': { + x_min: 115, + x_max: 911, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 115, + advanceWidth: 1024, + }, + '9': { + x_min: 61, + x_max: 940, + y_min: -41, + y_max: 1383, + ha: 1424, + leftSideBearing: 61, + advanceWidth: 1024, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 512, + }, + '!': { + x_min: 266, + x_max: 488, + y_min: -22, + y_max: 1383, + ha: 1405, + leftSideBearing: 266, + advanceWidth: 682, + }, + '"': { + x_min: 157.2000021972655, + x_max: 678.2500021457677, + y_min: 881, + y_max: 1385, + ha: 504, + leftSideBearing: 157, + advanceWidth: 836, + }, + '#': { + x_min: 10, + x_max: 1016, + y_min: -1, + y_max: 1356, + ha: 1357, + leftSideBearing: 10, + advanceWidth: 1024, + }, + $: { + x_min: 90, + x_max: 936, + y_min: -180, + y_max: 1492, + ha: 1672, + leftSideBearing: 90, + advanceWidth: 1024, + }, + '%': { + x_min: 125, + x_max: 1581, + y_min: -30, + y_max: 1388, + ha: 1418, + leftSideBearing: 125, + advanceWidth: 1706, + }, + '&': { + x_min: 86, + x_max: 1536, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 86, + advanceWidth: 1593, + }, + "'": { + x_min: 97.20000219726548, + x_max: 273.2500021457677, + y_min: 881, + y_max: 1385, + ha: 504, + leftSideBearing: 97, + advanceWidth: 369, + }, + '(': { + x_min: 98, + x_max: 623, + y_min: -363, + y_max: 1383, + ha: 1746, + leftSideBearing: 98, + advanceWidth: 682, + }, + ')': { + x_min: 59, + x_max: 584, + y_min: -363, + y_max: 1383, + ha: 1746, + leftSideBearing: 59, + advanceWidth: 682, + }, + '*': { + x_min: 137.96078522291893, + x_max: 886.039214777081, + y_min: 543, + y_max: 1383, + ha: 840, + leftSideBearing: 137, + advanceWidth: 1024, + }, + '+': { + x_min: 61, + x_max: 1093, + y_min: 2, + y_max: 1034, + ha: 1032, + leftSideBearing: 61, + advanceWidth: 1155, + }, + ',': { + x_min: 115, + x_max: 399, + y_min: -291, + y_max: 208, + ha: 499, + leftSideBearing: 115, + advanceWidth: 512, + }, + '-': { + x_min: 80, + x_max: 584, + y_min: 396, + y_max: 525, + ha: 129, + leftSideBearing: 80, + advanceWidth: 682, + }, + '.': { + x_min: 143, + x_max: 371, + y_min: -22, + y_max: 205, + ha: 227, + leftSideBearing: 143, + advanceWidth: 512, + }, + '/': { + x_min: -17, + x_max: 586, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: -17, + advanceWidth: 569, + }, + ':': { + x_min: 166, + x_max: 394, + y_min: -22, + y_max: 943, + ha: 965, + leftSideBearing: 166, + advanceWidth: 569, + }, + ';': { + x_min: 164, + x_max: 448, + y_min: -290, + y_max: 943, + ha: 1233, + leftSideBearing: 164, + advanceWidth: 569, + }, + '<': { + x_min: 57, + x_max: 1098, + y_min: -15, + y_max: 1051, + ha: 1066, + leftSideBearing: 57, + advanceWidth: 1155, + }, + '=': { + x_min: 61, + x_max: 1093, + y_min: 246, + y_max: 791, + ha: 545, + leftSideBearing: 61, + advanceWidth: 1155, + }, + '>': { + x_min: 57, + x_max: 1098, + y_min: -15, + y_max: 1051, + ha: 1066, + leftSideBearing: 57, + advanceWidth: 1155, + }, + '?': { + x_min: 139, + x_max: 848, + y_min: -15, + y_max: 1383, + ha: 1398, + leftSideBearing: 139, + advanceWidth: 909, + }, + '@': { + x_min: 238, + x_max: 1657, + y_min: -29, + y_max: 1386, + ha: 1415, + leftSideBearing: 238, + advanceWidth: 1886, + }, + A: { + x_min: 31, + x_max: 1445, + y_min: 0, + y_max: 1380, + ha: 1380, + leftSideBearing: 31, + advanceWidth: 1479, + }, + B: { + x_min: 35, + x_max: 1214, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1366, + }, + C: { + x_min: 57, + x_max: 1296, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 57, + advanceWidth: 1366, + }, + D: { + x_min: 33, + x_max: 1403, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 33, + advanceWidth: 1479, + }, + E: { + x_min: 25, + x_max: 1222, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1251, + }, + F: { + x_min: 25, + x_max: 1119, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1139, + }, + G: { + x_min: 66, + x_max: 1452, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 66, + advanceWidth: 1479, + }, + H: { + x_min: 39, + x_max: 1438, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 39, + advanceWidth: 1479, + }, + I: { + x_min: 37, + x_max: 642, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 37, + advanceWidth: 682, + }, + J: { + x_min: 20, + x_max: 758, + y_min: -28, + y_max: 1356, + ha: 1384, + leftSideBearing: 20, + advanceWidth: 797, + }, + K: { + x_min: 70, + x_max: 1479, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 70, + advanceWidth: 1479, + }, + L: { + x_min: 25, + x_max: 1224, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1251, + }, + M: { + x_min: 25, + x_max: 1768, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1821, + }, + N: { + x_min: 25, + x_max: 1450, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 25, + advanceWidth: 1479, + }, + O: { + x_min: 70, + x_max: 1409, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 70, + advanceWidth: 1479, + }, + P: { + x_min: 33, + x_max: 1110, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 33, + advanceWidth: 1139, + }, + Q: { + x_min: 70, + x_max: 1435, + y_min: -364.28571588721996, + y_max: 1383, + ha: 1747.28571588722, + leftSideBearing: 70, + advanceWidth: 1479, + }, + R: { + x_min: 35, + x_max: 1347, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1366, + }, + S: { + x_min: 86, + x_max: 1006, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 86, + advanceWidth: 1139, + }, + T: { + x_min: 35, + x_max: 1214, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1251, + }, + U: { + x_min: 29, + x_max: 1444, + y_min: -28, + y_max: 1356, + ha: 1384, + leftSideBearing: 29, + advanceWidth: 1479, + }, + V: { + x_min: 33, + x_max: 1428, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 33, + advanceWidth: 1479, + }, + W: { + x_min: 10, + x_max: 1906, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 10, + advanceWidth: 1933, + }, + X: { + x_min: 20, + x_max: 1449, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 20, + advanceWidth: 1479, + }, + Y: { + x_min: 45, + x_max: 1441, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 45, + advanceWidth: 1479, + }, + Z: { + x_min: 18, + x_max: 1222, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 18, + advanceWidth: 1251, + }, + '[': { + x_min: 180, + x_max: 612, + y_min: -319, + y_max: 1355, + ha: 1674, + leftSideBearing: 180, + advanceWidth: 682, + }, + '\\': { + x_min: -17, + x_max: 586, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: -17, + advanceWidth: 569, + }, + ']': { + x_min: 70, + x_max: 502, + y_min: -319, + y_max: 1355, + ha: 1674, + leftSideBearing: 70, + advanceWidth: 682, + }, + '^': { + x_min: 49, + x_max: 914, + y_min: 608, + y_max: 1355, + ha: 747, + leftSideBearing: 49, + advanceWidth: 961, + }, + _: { + x_min: 0, + x_max: 1024, + y_min: -255, + y_max: -153, + ha: 102, + leftSideBearing: 0, + advanceWidth: 1024, + }, + '`': { + x_min: 39, + x_max: 499, + y_min: 1037, + y_max: 1392.509803639748, + ha: 355.50980363974804, + leftSideBearing: 39, + advanceWidth: 682, + }, + a: { + x_min: 76, + x_max: 905, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 76, + advanceWidth: 909, + }, + b: { + x_min: 6, + x_max: 958, + y_min: -20, + y_max: 1399, + ha: 1419, + leftSideBearing: 6, + advanceWidth: 1024, + }, + c: { + x_min: 51, + x_max: 843, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 51, + advanceWidth: 909, + }, + d: { + x_min: 55, + x_max: 1006, + y_min: -20, + y_max: 1399, + ha: 1419, + leftSideBearing: 55, + advanceWidth: 1024, + }, + e: { + x_min: 51, + x_max: 868, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 51, + advanceWidth: 909, + }, + f: { + x_min: 41, + x_max: 783, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 41, + advanceWidth: 682, + }, + g: { + x_min: 57, + x_max: 963, + y_min: -446, + y_max: 942, + ha: 1388, + leftSideBearing: 57, + advanceWidth: 1024, + }, + h: { + x_min: 18, + x_max: 997, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 18, + advanceWidth: 1024, + }, + i: { + x_min: 33, + x_max: 516, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 33, + advanceWidth: 569, + }, + j: { + x_min: -142, + x_max: 397, + y_min: -446, + y_max: 1399, + ha: 1845, + leftSideBearing: -142, + advanceWidth: 569, + }, + k: { + x_min: 14, + x_max: 1029, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 14, + advanceWidth: 1024, + }, + l: { + x_min: 39, + x_max: 523, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 39, + advanceWidth: 569, + }, + m: { + x_min: 33, + x_max: 1587, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 33, + advanceWidth: 1593, + }, + n: { + x_min: 33, + x_max: 993, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 33, + advanceWidth: 1024, + }, + o: { + x_min: 59, + x_max: 963, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 59, + advanceWidth: 1024, + }, + p: { + x_min: 10, + x_max: 964, + y_min: -443, + y_max: 944, + ha: 1387, + leftSideBearing: 10, + advanceWidth: 1024, + }, + q: { + x_min: 49, + x_max: 999, + y_min: -443, + y_max: 942.0135137169275, + ha: 1385.0135137169275, + leftSideBearing: 49, + advanceWidth: 1024, + }, + r: { + x_min: 10, + x_max: 685, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 10, + advanceWidth: 682, + }, + s: { + x_min: 104, + x_max: 713, + y_min: -20, + y_max: 942.0263161804552, + ha: 962.0263161804552, + leftSideBearing: 104, + advanceWidth: 797, + }, + t: { + x_min: 27, + x_max: 572, + y_min: -18, + y_max: 1186, + ha: 1204, + leftSideBearing: 27, + advanceWidth: 569, + }, + u: { + x_min: 18, + x_max: 981, + y_min: -21, + y_max: 921, + ha: 942, + leftSideBearing: 18, + advanceWidth: 1024, + }, + v: { + x_min: 39, + x_max: 976, + y_min: -28, + y_max: 921, + ha: 949, + leftSideBearing: 39, + advanceWidth: 1024, + }, + w: { + x_min: 43, + x_max: 1423, + y_min: -28, + y_max: 921, + ha: 949, + leftSideBearing: 43, + advanceWidth: 1479, + }, + x: { + x_min: 35, + x_max: 989, + y_min: 0, + y_max: 921, + ha: 921, + leftSideBearing: 35, + advanceWidth: 1024, + }, + y: { + x_min: 29, + x_max: 976, + y_min: -445, + y_max: 921, + ha: 1366, + leftSideBearing: 29, + advanceWidth: 1024, + }, + z: { + x_min: 55, + x_max: 855, + y_min: 0, + y_max: 921, + ha: 921, + leftSideBearing: 55, + advanceWidth: 909, + }, + '{': { + x_min: 205, + x_max: 717, + y_min: -377, + y_max: 1397, + ha: 1774, + leftSideBearing: 205, + advanceWidth: 983, + }, + '|': { + x_min: 137, + x_max: 273, + y_min: -512, + y_max: 1535, + ha: 2047, + leftSideBearing: 137, + advanceWidth: 410, + }, + '}': { + x_min: 266, + x_max: 778, + y_min: -377, + y_max: 1397, + ha: 1774, + leftSideBearing: 266, + advanceWidth: 983, + }, + '~': { + x_min: 82, + x_max: 1028, + y_min: 380, + y_max: 666, + ha: 286, + leftSideBearing: 82, + advanceWidth: 1108, + }, + }, + fontFamily: 'serif', + resolution: 2048, + generatedOn: '2020-10-18T19:03:12.514Z', +}; + + +/***/ }), + +/***/ "./src/fonts/textfonts.ts": +/*!********************************!*\ + !*** ./src/fonts/textfonts.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "loadTextFonts": () => (/* binding */ loadTextFonts) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petalumascript_glyphs */ "./src/fonts/petalumascript_glyphs.ts"); +/* harmony import */ var _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./robotoslab_glyphs */ "./src/fonts/robotoslab_glyphs.ts"); +/* harmony import */ var _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sans_bold_text_metrics */ "./src/fonts/sans_bold_text_metrics.ts"); +/* harmony import */ var _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sans_text_metrics */ "./src/fonts/sans_text_metrics.ts"); +/* harmony import */ var _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serif_text_metrics */ "./src/fonts/serif_text_metrics.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +function loadTextFonts() { + // Sans-serif fallback font, very close to Arial + { + const fontData = _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__.SansFontBold; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // Usually @ is the tallest and widest character, although not the + // highest since it starts below the baseline. + const maxSizeGlyph = '@'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: true, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Generic SANS font', + }); + } + // Sans-serif fallback font, very close to Arial + { + const fontData = _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__.SansFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // Usually @ is the tallest and widest character, although not the + // highest since it starts below the baseline. + const maxSizeGlyph = '@'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Generic SANS font', + }); + } + // Serif fallback font, very close to Times + { + const fontData = _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__.SerifFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // M is wider, but H is taller. :-) + // Lowercase b is also taller in this font. + const maxSizeGlyph = '@'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: true, + description: 'Generic SERIF font', + }); + } + // Roboto Slab + { + const fontData = _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__.RobotoSlabFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // Previously we used 'H', but it isn't actually the tallest or the widest. + // Interestingly, the lowercase 'b' is the tallest glyph. + const maxSizeGlyph = 'b'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: true, + description: 'Text font to pair with the Bravura / Gonville music fonts.', + }); + } + // PetalumaScript + { + const fontData = _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaScriptFont; + const { fontFamily, resolution, glyphs } = fontData; + _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); + // M is wider, but H is taller. :-) + // Lowercase b is also taller in this font. + const maxSizeGlyph = 'b'; + _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Text font to pair with the Petaluma music font.', + }); + } +} + + +/***/ }), + +/***/ "./src/formatter.ts": +/*!**************************!*\ + !*** ./src/formatter.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Formatter": () => (/* binding */ Formatter) +/* harmony export */ }); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + + + + + +/** + * Create `Alignment`s for each tick in `voices`. Also calculate the + * total number of ticks in voices. + */ +function createContexts(voices, makeContext, addToContext) { + if (voices.length == 0) + return { + map: {}, + array: [], + list: [], + resolutionMultiplier: 0, + }; + // Initialize tick maps. + const tickToContextMap = {}; + const tickList = []; + const contexts = []; + const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); + // For each voice, extract notes and create a context for every + // new tick that hasn't been seen before. + voices.forEach((voice, voiceIndex) => { + // Use resolution multiplier as denominator so that no additional expansion + // of fractional tick values is needed. + const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier); + voice.getTickables().forEach((tickable) => { + const integerTicks = ticksUsed.numerator; + // If we have no tick context for this tick, create one. + if (!tickToContextMap[integerTicks]) { + const newContext = makeContext({ tickID: integerTicks }); + contexts.push(newContext); + tickToContextMap[integerTicks] = newContext; + // Maintain a list of unique integerTicks. + tickList.push(integerTicks); + } + // Add this tickable to the TickContext. + addToContext(tickable, tickToContextMap[integerTicks], voiceIndex); + ticksUsed.add(tickable.getTicks()); + }); + }); + return { + map: tickToContextMap, + array: contexts, + list: tickList.sort((a, b) => a - b), + resolutionMultiplier, + }; +} +// eslint-disable-next-line +function L(...args) { + if (Formatter.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_9__.log)('Vex.Flow.Formatter', args); +} +/** + * Get the rest line number of the next non-rest note(s). + * @param notes array of Notes + * @param currRestLine + * @param currNoteIndex current note index + * @param compare if true, return the midpoint between the current rest line and the next rest line + * @returns a line number, which determines the vertical position of a rest. + */ +function getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) { + // If no valid next note group, nextRestLine is same as current. + let nextRestLine = currRestLine; + // Start with the next note and keep going until we find a valid non-rest note group. + for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) { + const note = notes[noteIndex]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isNote)(note) && !note.isRest() && !note.shouldIgnoreTicks()) { + nextRestLine = note.getLineForRest(); + break; + } + } + // Locate the mid point between two lines. + if (compare && currRestLine !== nextRestLine) { + const top = Math.max(currRestLine, nextRestLine); + const bot = Math.min(currRestLine, nextRestLine); + nextRestLine = (0,_util__WEBPACK_IMPORTED_MODULE_9__.midLine)(top, bot); + } + return nextRestLine; +} +/** + * Format implements the formatting and layout algorithms that are used + * to position notes in a voice. The algorithm can align multiple voices both + * within a stave, and across multiple staves. + * + * To do this, the formatter breaks up voices into a grid of rational-valued + * `ticks`, to which each note is assigned. Then, minimum widths are assigned + * to each tick based on the widths of the notes and modifiers in that tick. This + * establishes the smallest amount of space required for each tick. + * + * Finally, the formatter distributes the left over space proportionally to + * all the ticks, setting the `x` values of the notes in each tick. + * + * See `tests/formatter_tests.ts` for usage examples. The helper functions included + * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples. + */ +class Formatter { + /** + * Helper function to layout "notes" one after the other without + * regard for proportions. Useful for tests and debugging. + */ + static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) { + notes.reduce((accumulator, note) => { + note.addToModifierContext(new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext()); + const tick = new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext().addTickable(note).preFormat(); + const metrics = tick.getMetrics(); + tick.setX(accumulator + metrics.totalLeftPx); + return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween; + }, x); + } + /** Helper function to plot formatter debug info. */ + static plotDebugging(ctx, formatter, xPos, y1, y2, options) { + options = Object.assign({ stavePadding: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.padding') }, options); + const x = xPos + options.stavePadding; + const contextGaps = formatter.contextGaps; + function stroke(x1, x2, color) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(1); + ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1); + } + ctx.save(); + ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, 8); + contextGaps.gaps.forEach((gap) => { + stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)'); + ctx.setFillStyle('green'); + ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12); + }); + ctx.setFillStyle('red'); + ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27); + ctx.restore(); + } + /** + * Helper function to format and draw a single voice. Returns a bounding + * box for the notation. + * @param ctx the rendering context + * @param stave the stave to which to draw (`Stave` or `TabStave`) + * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.) + * @param params one of below: + * * Setting `autobeam` only `(context, stave, notes, true)` or + * `(ctx, stave, notes, {autobeam: true})` + * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})` + * * Setting both a struct is needed `(context, stave, notes, { + * autobeam: true, align_rests: true})` + * * `autobeam` automatically generates beams for the notes. + * * `align_rests` aligns rests with nearby notes. + */ + static FormatAndDraw(ctx, stave, notes, params) { + let options = { + auto_beam: false, + align_rests: false, + }; + if (typeof params === 'object') { + options = Object.assign(Object.assign({}, options), params); + } + else if (typeof params === 'boolean') { + options.auto_beam = params; + } + // Start by creating a voice and adding all the notes to it. + const voice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes); + // Then create beams, if requested. + const beams = options.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(voice) : []; + // Instantiate a `Formatter` and format the notes. + new Formatter() + .joinVoices([voice]) // , { align_rests: options.align_rests }) + .formatToStave([voice], stave, { align_rests: options.align_rests, stave }); + // Render the voice and beams to the stave. + voice.setStave(stave).draw(ctx, stave); + beams.forEach((beam) => beam.setContext(ctx).draw()); + // Return the bounding box of the voice. + return voice.getBoundingBox(); + } + /** + * Helper function to format and draw aligned tab and stave notes in two + * separate staves. + * @param ctx the rendering context + * @param tabstave a `TabStave` instance on which to render `TabNote`s. + * @param stave a `Stave` instance on which to render `Note`s. + * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.) + * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.) + * @param autobeam automatically generate beams. + * @param params a configuration object: + * * `autobeam` automatically generates beams for the notes. + * * `align_rests` aligns rests with nearby notes. + */ + static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) { + let opts = { + auto_beam: autobeam, + align_rests: false, + }; + if (typeof params === 'object') { + opts = Object.assign(Object.assign({}, opts), params); + } + else if (typeof params === 'boolean') { + opts.auto_beam = params; + } + // Create a `4/4` voice for `notes`. + const notevoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes); + // Create a `4/4` voice for `tabnotes`. + const tabvoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(tabnotes); + // Then create beams, if requested. + const beams = opts.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(notevoice) : []; + // Instantiate a `Formatter` and align tab and stave notes. + new Formatter() + .joinVoices([notevoice]) // , { align_rests: opts.align_rests }) + .joinVoices([tabvoice]) + .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests }); + // Render voices and beams to staves. + notevoice.draw(ctx, stave); + tabvoice.draw(ctx, tabstave); + beams.forEach((beam) => beam.setContext(ctx).draw()); + // Draw a connector between tab and note staves. + new _staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave, tabstave).setContext(ctx).draw(); + } + /** + * Automatically set the vertical position of rests based on previous/next note positions. + * @param tickables an array of Tickables. + * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes. + * @param alignTuplets If `false`, ignores tuplets. + */ + static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) { + tickables.forEach((currTickable, index) => { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(currTickable) && currTickable.isRest()) { + if (currTickable.getTuplet() && !alignTuplets) { + return; + } + // If activated rests not on default can be rendered as specified. + const position = currTickable.getGlyphProps().position.toUpperCase(); + if (position !== 'R/4' && position !== 'B/4') { + return; + } + if (alignAllNotes || currTickable.getBeam()) { + // Align rests with previous/next notes. + const props = currTickable.getKeyProps()[0]; + if (index === 0) { + props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false); + } + else if (index > 0 && index < tickables.length) { + // If previous tickable is a rest, use its line number. + const prevTickable = tickables[index - 1]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(prevTickable)) { + if (prevTickable.isRest()) { + props.line = prevTickable.getKeyProps()[0].line; + } + else { + const restLine = prevTickable.getLineForRest(); + // Get the rest line for next valid non-rest note group. + props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true); + } + } + } + currTickable.setKeyLine(0, props.line); + } + } + }); + } + constructor(options) { + this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options); + this.justifyWidth = 0; + this.totalCost = 0; + this.totalShift = 0; + this.durationStats = {}; + // Minimum width required to render all the notes in the voices. + this.minTotalWidth = 0; + // This is set to `true` after `minTotalWidth` is calculated. + this.hasMinTotalWidth = false; + // Arrays of tick and modifier contexts. + this.tickContexts = { + map: {}, + array: [], + list: [], + resolutionMultiplier: 0, + }; + this.modifierContexts = []; + // Gaps between contexts, for free movement of notes post + // formatting. + this.contextGaps = { + total: 0, + gaps: [], + }; + this.voices = []; + this.lossHistory = []; + } + /** + * Find all the rests in each of the `voices` and align them to neighboring notes. + * + * @param voices + * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests. + */ + alignRests(voices, alignAllNotes) { + if (!voices || !voices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format rests'); + } + voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes)); + } + /** + * Estimate the width required to render 'voices'. This is done by: + * 1. Sum the widths of all the tick contexts + * 2. Estimate the padding. + * The latter is done by calculating the padding 3 different ways, and taking the + * greatest value: + * 1. the padding required for unaligned notes in different voices + * 2. the padding based on the stddev of the tickable widths + * 3. the padding based on the stddev of the tickable durations. + * + * The last 2 quantities estimate a 'width entropy', where notes might need more + * room than the proportional formatting gives them. A measure of all same duration + * and width will need no extra padding, and all these quantities will be + * zero in that case. + * + * Note: joinVoices has to be called before calling preCalculateMinTotalWidth. + * + * @param voices the voices that contain the notes + * @returns the estimated width in pixels + */ + preCalculateMinTotalWidth(voices) { + const unalignedPadding = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding'); + // Calculate additional padding based on 3 methods: + // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations + let unalignedCtxCount = 0; + let wsum = 0; + let dsum = 0; + const widths = []; + const durations = []; + // Cache results. + if (this.hasMinTotalWidth) + return this.minTotalWidth; + // Create tick contexts. + if (!voices) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', "'voices' required to run preCalculateMinTotalWidth"); + } + this.createTickContexts(voices); + // eslint-disable-next-line + const { list: contextList, map: contextMap } = this.tickContexts; + this.minTotalWidth = 0; + // Go through each tick context and calculate total width, + // and also accumulate values used in padding hints + contextList.forEach((tick) => { + const context = contextMap[tick]; + context.preFormat(); + // If this TC doesn't have all the voices on it, it's unaligned. + // so increment the unaligned padding accumulator + if (context.getTickables().length < voices.length) { + unalignedCtxCount += 1; + } + // Calculate the 'width entropy' over all the Tickables. + context.getTickables().forEach((t) => { + wsum += t.getMetrics().width; + dsum += t.getTicks().value(); + widths.push(t.getMetrics().width); + durations.push(t.getTicks().value()); + }); + const width = context.getWidth(); + this.minTotalWidth += width; + }); + this.hasMinTotalWidth = true; + // normalized (0-1) STDDEV of widths/durations gives us padding hints. + const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length; + const wvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(widths.map((ll) => Math.pow(ll - wavg, 2))); + const wpads = Math.pow(wvar / widths.length, 0.5) / wavg; + const davg = dsum / durations.length; + const dvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(durations.map((ll) => Math.pow(ll - davg, 2))); + const dpads = Math.pow(dvar / durations.length, 0.5) / davg; + // Find max of 3 methods pad the width with that + const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding; + const unalignedPad = unalignedPadding * unalignedCtxCount; + return this.minTotalWidth + Math.max(unalignedPad, padmax); + } + /** + * Get minimum width required to render all voices. Either `format` or + * `preCalculateMinTotalWidth` must be called before this method. + */ + getMinTotalWidth() { + if (!this.hasMinTotalWidth) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoMinTotalWidth', "Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'"); + } + return this.minTotalWidth; + } + /** Calculate the resolution multiplier for `voices`. */ + static getResolutionMultiplier(voices) { + if (!voices || !voices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format'); + } + const totalTicks = voices[0].getTotalTicks(); + const resolutionMultiplier = voices.reduce((accumulator, voice) => { + if (!voice.getTotalTicks().equals(totalTicks)) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.'); + } + if (voice.getMode() === _voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.STRICT && !voice.isComplete()) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('IncompleteVoice', 'Voice does not have enough notes.'); + } + return Math.max(accumulator, _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction.LCM(accumulator, voice.getResolutionMultiplier())); + }, 1); + return resolutionMultiplier; + } + /** Create a `ModifierContext` for each tick in `voices`. */ + createModifierContexts(voices) { + if (voices.length == 0) + return; + const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); + // Initialize tick maps. + const tickToContextMap = new Map(); + const contexts = []; + // For each voice, extract notes and create a context for every + // new tick that hasn't been seen before. + voices.forEach((voice) => { + // Use resolution multiplier as denominator so that no additional expansion + // of fractional tick values is needed. + const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier); + voice.getTickables().forEach((tickable) => { + const integerTicks = ticksUsed.numerator; + let staveTickToContextMap = tickToContextMap.get(tickable.getStave()); + // If we have no tick context for this tick, create one. + if (!staveTickToContextMap) { + tickToContextMap.set(tickable.getStave(), {}); + staveTickToContextMap = tickToContextMap.get(tickable.getStave()); + } + if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) { + const newContext = new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext(); + contexts.push(newContext); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + staveTickToContextMap[integerTicks] = newContext; + } + // Add this tickable to the TickContext. + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + tickable.addToModifierContext(staveTickToContextMap[integerTicks]); + ticksUsed.add(tickable.getTicks()); + }); + }); + this.modifierContexts.push({ + map: tickToContextMap, + array: contexts, + resolutionMultiplier, + }); + } + /** + * Create a `TickContext` for each tick in `voices`. Also calculate the + * total number of ticks in voices. + */ + createTickContexts(voices) { + const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex); + const contexts = createContexts(voices, (tick) => new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext(tick), fn); + this.tickContexts = contexts; + const contextArray = this.tickContexts.array; + contextArray.forEach((context) => { + context.tContexts = contextArray; + }); + return contexts; + } + /** + * Get the AlignmentContexts of TickContexts that were created by createTickContexts. + * Returns undefined if createTickContexts has not yet been run. + */ + getTickContexts() { + return this.tickContexts; + } + /** + * This is the core formatter logic. Format voices and justify them + * to `justifyWidth` pixels. `renderingContext` is required to justify elements + * that can't retrieve widths without a canvas. This method sets the `x` positions + * of all the tickables/notes in the formatter. + */ + preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) { + // Initialize context maps. + const contexts = this.tickContexts; + if (!contexts) { + throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoTickContexts', 'preFormat requires TickContexts'); + } + const { list: contextList, map: contextMap } = contexts; + // Reset loss history for evaluator. + this.lossHistory = []; + // If voices and a stave were provided, set the Stave for each voice + // and preFormat to apply Y values to the notes; + if (voicesParam && stave) { + voicesParam.forEach((voice) => voice.setStave(stave).preFormat()); + } + // Now distribute the ticks to each tick context, and assign them their + // own X positions. + let x = 0; + let shift = 0; + this.minTotalWidth = 0; + let totalTicks = 0; + // Pass 1: Give each note maximum width requested by context. + contextList.forEach((tick) => { + const context = contextMap[tick]; + // Make sure that all tickables in this context have calculated their + // space requirements. + context.preFormat(); + const width = context.getWidth(); + this.minTotalWidth += width; + const maxTicks = context.getMaxTicks().value(); + totalTicks += maxTicks; + const metrics = context.getMetrics(); + x = x + shift + metrics.totalLeftPx; + context.setX(x); + // Calculate shift for the next tick. + shift = width - metrics.totalLeftPx; + }); + // Use softmax based on all notes across all staves. (options.globalSoftmax) + const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions; + const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks)); + const expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(contextList.map(exp)); + this.minTotalWidth = x + shift; + this.hasMinTotalWidth = true; + // No justification needed. End formatting. + if (justifyWidth <= 0) + return this.evaluate(); + // Start justification. Subtract the right extra pixels of the final context because the formatter + // justifies based on the context's X position, which is the left-most part of the note head. + const firstContext = contextMap[contextList[0]]; + const lastContext = contextMap[contextList[contextList.length - 1]]; + // Calculate the "distance error" between the tick contexts. The expected distance is the spacing proportional to + // the softmax of the ticks. + function calculateIdealDistances(adjustedJustifyWidth) { + const distances = contextList.map((tick, i) => { + const context = contextMap[tick]; + const voices = context.getTickablesByVoice(); + let backTickable; + if (i > 0) { + const prevContext = contextMap[contextList[i - 1]]; + // Go through each tickable and search backwards for another tickable + // in the same voice. If found, use that duration (ticks) to calculate + // the expected distance. + for (let j = i - 1; j >= 0; j--) { + const backTick = contextMap[contextList[j]]; + const backVoices = backTick.getTickablesByVoice(); + // Look for matching voices between tick contexts. + const matchingVoices = []; + Object.keys(voices).forEach((v) => { + if (backVoices[v]) { + matchingVoices.push(v); + } + }); + if (matchingVoices.length > 0) { + // Found matching voices, get largest duration + let maxTicks = 0; + let maxNegativeShiftPx = Infinity; + let expectedDistance = 0; + matchingVoices.forEach((v) => { + const ticks = backVoices[v].getTicks().value(); + if (ticks > maxTicks) { + backTickable = backVoices[v]; + maxTicks = ticks; + } + // Calculate the limits of the shift based on modifiers, etc. + const thisTickable = voices[v]; + const insideLeftEdge = thisTickable.getX() - + (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx); + const backMetrics = backVoices[v].getMetrics(); + const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx; + // Don't allow shifting if notes in the same voice can collide + maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge); + }); + // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right + // so that two different tick contexts don't align across staves. + maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05)); + // Calculate the expected distance of the current context from the last matching tickable. The + // distance is scaled down by the softmax for the voice. + if (globalSoftmax) { + const t = totalTicks; + expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth; + } + else if (typeof backTickable !== 'undefined') { + expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth; + } + return { + expectedDistance, + maxNegativeShiftPx, + fromTickable: backTickable, + }; + } + } + } + return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 }; + }); + return distances; + } + function shiftToIdealDistances(idealDistances) { + // Distribute ticks to the contexts based on the calculated distance error. + const centerX = adjustedJustifyWidth / 2; + let spaceAccum = 0; + contextList.forEach((tick, index) => { + const context = contextMap[tick]; + if (index > 0) { + const contextX = context.getX(); + const ideal = idealDistances[index]; + const errorPx = (0,_util__WEBPACK_IMPORTED_MODULE_9__.defined)(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum); + let negativeShiftPx = 0; + if (errorPx > 0) { + spaceAccum += errorPx; + } + else if (errorPx < 0) { + negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx)); + spaceAccum += -negativeShiftPx; + } + context.setX(contextX + spaceAccum); + } + // Move center aligned tickables to middle + context.getCenterAlignedTickables().forEach((tickable) => { + tickable.setCenterXShift(centerX - context.getX()); + }); + }); + return lastContext.getX() - firstContext.getX(); + } + const adjustedJustifyWidth = justifyWidth - + lastContext.getMetrics().notePx - + lastContext.getMetrics().totalRightPx - + firstContext.getMetrics().totalLeftPx; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont(); + const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin'); + const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax'); + const leftPadding = musicFont.lookupMetric('stave.padding'); + let targetWidth = adjustedJustifyWidth; + const distances = calculateIdealDistances(targetWidth); + let actualWidth = shiftToIdealDistances(distances); + // Just one context. Done formatting. + if (contextList.length === 1) + return 0; + const calcMinDistance = (targetWidth, distances) => { + let mdCalc = targetWidth / 2; + if (distances.length > 1) { + for (let di = 1; di < distances.length; ++di) { + mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc); + } + } + return mdCalc; + }; + const minDistance = calcMinDistance(targetWidth, distances); + // right justify to either the configured padding, or the min distance between notes, whichever is greatest. + // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break + // existing visual regression tests. + const paddingMaxCalc = (curTargetWidth) => { + let lastTickablePadding = 0; + const lastTickable = lastContext && lastContext.getMaxTickable(); + if (lastTickable) { + const voice = lastTickable.getVoice(); + // If the number of actual ticks in the measure <> configured ticks, right-justify + // because the softmax won't yield the correct value + if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) { + return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding; + } + const tickWidth = lastTickable.getWidth(); + lastTickablePadding = + voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding); + } + return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding; + }; + let paddingMax = paddingMaxCalc(targetWidth); + let paddingMin = paddingMax - (configMaxPadding - configMinPadding); + const maxX = adjustedJustifyWidth - paddingMin; + let iterations = maxIterations; + // Adjust justification width until the right margin is as close as possible to the calculated padding, + // without going over + while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) { + targetWidth -= actualWidth - maxX; + paddingMax = paddingMaxCalc(targetWidth); + paddingMin = paddingMax - (configMaxPadding - configMinPadding); + actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth)); + iterations--; + } + this.justifyWidth = justifyWidth; + return this.evaluate(); + } + /** Calculate the total cost of this formatting decision. */ + evaluate() { + const contexts = this.tickContexts; + const justifyWidth = this.justifyWidth; + // Calculate available slack per tick context. This works out how much freedom + // to move a context has in either direction, without affecting other notes. + this.contextGaps = { total: 0, gaps: [] }; + contexts.list.forEach((tick, index) => { + if (index === 0) + return; + const prevTick = contexts.list[index - 1]; + const prevContext = contexts.map[prevTick]; + const context = contexts.map[tick]; + const prevMetrics = prevContext.getMetrics(); + const currMetrics = context.getMetrics(); + // Calculate X position of right edge of previous note + const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx; + // Calculate X position of left edge of current note + const insideLeftEdge = context.getX() - currMetrics.totalLeftPx; + const gap = insideLeftEdge - insideRightEdge; + this.contextGaps.total += gap; + this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge }); + // Tell the tick contexts how much they can reposition themselves. + context.getFormatterMetrics().freedom.left = gap; + prevContext.getFormatterMetrics().freedom.right = gap; + }); + // Calculate mean distance in each voice for each duration type, then calculate + // how far each note is from the mean. + this.durationStats = {}; + const durationStats = this.durationStats; + function updateStats(duration, space) { + const stats = durationStats[duration]; + if (stats === undefined) { + durationStats[duration] = { mean: space, count: 1 }; + } + else { + stats.count += 1; + stats.mean = (stats.mean + space) / 2; + } + } + this.voices.forEach((voice) => { + voice.getTickables().forEach((note, i, notes) => { + const duration = note.getTicks().clone().simplify().toString(); + const metrics = note.getMetrics(); + const formatterMetrics = note.getFormatterMetrics(); + const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx; + let space = 0; + if (i < notes.length - 1) { + const rightNote = notes[i + 1]; + const rightMetrics = rightNote.getMetrics(); + const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx; + space = rightNoteEdge - leftNoteEdge; + formatterMetrics.space.used = rightNote.getX() - note.getX(); + rightNote.getFormatterMetrics().freedom.left = space; + } + else { + space = justifyWidth - leftNoteEdge; + formatterMetrics.space.used = justifyWidth - note.getX(); + } + formatterMetrics.freedom.right = space; + updateStats(duration, formatterMetrics.space.used); + }); + }); + // Calculate how much each note deviates from the mean. Loss function is square + // root of the sum of squared deviations. + let totalDeviation = 0; + this.voices.forEach((voice) => { + voice.getTickables().forEach((note) => { + const duration = note.getTicks().clone().simplify().toString(); + const metrics = note.getFormatterMetrics(); + metrics.space.mean = durationStats[duration].mean; + metrics.duration = duration; + metrics.iterations += 1; + metrics.space.deviation = metrics.space.used - metrics.space.mean; + totalDeviation += Math.pow(metrics.space.deviation, 2); + }); + }); + this.totalCost = Math.sqrt(totalDeviation); + this.lossHistory.push(this.totalCost); + return this.totalCost; + } + /** + * Run a single iteration of rejustification. At a high level, this method calculates + * the overall "loss" (or cost) of this layout, and repositions tickcontexts in an + * attempt to reduce the cost. You can call this method multiple times until it finds + * and oscillates around a global minimum. + * @param options[alpha] the "learning rate" for the formatter. It determines how much of a shift + * the formatter should make based on its cost function. + */ + tune(options) { + var _a; + const contexts = this.tickContexts; + if (!contexts) { + return 0; + } + const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5; + // Move `current` tickcontext by `shift` pixels, and adjust the freedom + // on adjacent tickcontexts. + function move(current, shift, prev, next) { + current.setX(current.getX() + shift); + current.getFormatterMetrics().freedom.left += shift; + current.getFormatterMetrics().freedom.right -= shift; + if (prev) + prev.getFormatterMetrics().freedom.right += shift; + if (next) + next.getFormatterMetrics().freedom.left -= shift; + } + let shift = 0; + this.totalShift = 0; + contexts.list.forEach((tick, index, list) => { + const context = contexts.map[tick]; + const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined; + const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined; + move(context, shift, prevContext, nextContext); + const cost = -(0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation)); + if (cost > 0) { + shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost)); + } + else if (cost < 0) { + if (nextContext) { + shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost)); + } + else { + shift = 0; + } + } + shift *= alpha; + this.totalShift += shift; + }); + return this.evaluate(); + } + /** + * This is the top-level call for all formatting logic completed + * after `x` *and* `y` values have been computed for the notes + * in the voices. + */ + postFormat() { + this.modifierContexts.forEach((modifierContexts) => { + modifierContexts.array.forEach((mc) => mc.postFormat()); + }); + this.tickContexts.list.forEach((tick) => { + this.tickContexts.map[tick].postFormat(); + }); + return this; + } + /** + * Take all `voices` and create `ModifierContext`s out of them. This tells + * the formatters that the voices belong on a single stave. + */ + joinVoices(voices) { + this.createModifierContexts(voices); + this.hasMinTotalWidth = false; + return this; + } + /** + * Align rests in voices, justify the contexts, and position the notes + * so voices are aligned and ready to render onto the stave. This method + * mutates the `x` positions of all tickables in `voices`. + * + * Voices are full justified to fit in `justifyWidth` pixels. + * + * Set `options.context` to the rendering context. Set `options.align_rests` + * to true to enable rest alignment. + */ + format(voices, justifyWidth, options) { + const opts = Object.assign({ align_rests: false }, options); + this.voices = voices; + const softmaxFactor = this.formatterOptions.softmaxFactor; + if (softmaxFactor) { + this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor)); + } + this.alignRests(voices, opts.align_rests); + this.createTickContexts(voices); + this.preFormat(justifyWidth, opts.context, voices, opts.stave); + // Only postFormat if a stave was supplied for y value formatting + if (opts.stave) + this.postFormat(); + return this; + } + // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`. + formatToStave(voices, stave, optionsParam) { + const options = Object.assign({ context: stave.getContext() }, optionsParam); + // eslint-disable-next-line + const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + L('Formatting voices to width: ', justifyWidth); + return this.format(voices, justifyWidth, options); + } + getTickContext(tick) { + var _a; + return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick]; + } +} +// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`. +Formatter.DEBUG = false; + + + +/***/ }), + +/***/ "./src/fraction.ts": +/*!*************************!*\ + !*** ./src/fraction.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Fraction": () => (/* binding */ Fraction) +/* harmony export */ }); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// Author: Joshua Koo / @zz85 +// Author: @incompleteopus + + +/** Fraction represents a rational number. */ +class Fraction { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.Fraction; + } + /** + * GCD: Greatest common divisor using the Euclidean algorithm. + * Note: GCD(0, 0) => 0 and GCD(0, n) => n. + */ + static GCD(a, b) { + if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`); + } + let t; + while (b !== 0) { + t = b; + b = a % b; + a = t; + } + return a; + } + /** LCM: Lowest common multiple. */ + static LCM(a, b) { + return (a * b) / Fraction.GCD(a, b); + } + /** Lowest common multiple for more than two numbers. */ + static LCMM(args) { + if (args.length === 0) { + return 0; + } + else if (args.length === 1) { + return args[0]; + } + else if (args.length === 2) { + return Fraction.LCM(args[0], args[1]); + } + else { + // args.shift() removes the first number. + // LCM the first number with the rest of the numbers. + return Fraction.LCM(args.shift(), Fraction.LCMM(args)); + } + } + /** Set the numerator and denominator. */ + constructor(numerator, denominator) { + this.numerator = 1; + this.denominator = 1; + this.set(numerator, denominator); + } + /** Set the numerator and denominator. */ + set(numerator = 1, denominator = 1) { + this.numerator = numerator; + this.denominator = denominator; + return this; + } + /** Return the value of the fraction. */ + value() { + return this.numerator / this.denominator; + } + /** Simplify numerator and denominator using GCD. */ + simplify() { + let u = this.numerator; + let d = this.denominator; + const gcd = Fraction.GCD(u, d); + u /= gcd; + d /= gcd; + if (d < 0) { + d = -d; + u = -u; + } + return this.set(u, d); + } + /** Add value of another fraction. */ + add(param1 = 0, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + const lcm = Fraction.LCM(this.denominator, otherDenominator); + const a = lcm / this.denominator; + const b = lcm / otherDenominator; + const u = this.numerator * a + otherNumerator * b; + return this.set(u, lcm); + } + /** Substract value of another fraction. */ + subtract(param1 = 0, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + const lcm = Fraction.LCM(this.denominator, otherDenominator); + const a = lcm / this.denominator; + const b = lcm / otherDenominator; + const u = this.numerator * a - otherNumerator * b; + return this.set(u, lcm); + } + /** Multiply by value of another fraction. */ + multiply(param1 = 1, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator); + } + /** Divide by value of another Fraction. */ + divide(param1 = 1, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator); + } + /** Simplify both sides and check if they are equal. */ + equals(compare) { + const a = Fraction.__staticFractionA.copy(compare).simplify(); + const b = Fraction.__staticFractionB.copy(this).simplify(); + return a.numerator === b.numerator && a.denominator === b.denominator; + } + /** Greater than operator. */ + greaterThan(compare) { + const a = Fraction.__staticFractionB.copy(this); + a.subtract(compare); + return a.numerator > 0; + } + /** Greater than or equals operator. */ + greaterThanEquals(compare) { + const a = Fraction.__staticFractionB.copy(this); + a.subtract(compare); + return a.numerator >= 0; + } + /** Less than operator. */ + lessThan(compare) { + return !this.greaterThanEquals(compare); + } + /** Less than or equals operator. */ + lessThanEquals(compare) { + return !this.greaterThan(compare); + } + /** Return a new copy with current values. */ + clone() { + return new Fraction(this.numerator, this.denominator); + } + /** Copy value of another fraction. */ + copy(other) { + if (typeof other === 'number') { + return this.set(other, 1); + } + else { + return this.set(other.numerator, other.denominator); + } + } + /** Return the integer component (eg. 5/2 => 2). */ + quotient() { + return Math.floor(this.numerator / this.denominator); + } + /** Return the remainder component (eg. 5/2 => 1). */ + remainder() { + return this.numerator % this.denominator; + } + /** Calculate absolute value. */ + makeAbs() { + this.denominator = Math.abs(this.denominator); + this.numerator = Math.abs(this.numerator); + return this; + } + /** Return a raw string representation (eg. "5/2"). */ + toString() { + return `${this.numerator}/${this.denominator}`; + } + /** Return a simplified string respresentation. */ + toSimplifiedString() { + return Fraction.__staticFractionTmp.copy(this).simplify().toString(); + } + /** Return string representation in mixed form. */ + toMixedString() { + let s = ''; + const q = this.quotient(); + const f = Fraction.__staticFractionTmp.copy(this); + if (q < 0) { + f.makeAbs(); + } + if (q !== 0) { + s += q; + if (f.numerator !== 0) { + s += ` ${f.toSimplifiedString()}`; + } + } + else if (f.numerator === 0) { + s = '0'; + } + else { + s = f.toSimplifiedString(); + } + return s; + } + /** Parse a fraction string. */ + parse(str) { + const i = str.split('/'); + const n = parseInt(i[0], 10); + const d = i[1] ? parseInt(i[1], 10) : 1; + return this.set(n, d); + } +} +// Cached objects for comparisons. +Fraction.__staticFractionA = new Fraction(); +Fraction.__staticFractionB = new Fraction(); +Fraction.__staticFractionTmp = new Fraction(); + +/** Helper function to extract the numerator and denominator from another fraction. */ +function getNumeratorAndDenominator(n, d = 1) { + if (typeof n === 'number') { + // Both params are numbers, so we return them as [numerator, denominator]. + return [n, d]; + } + else { + // First param is a Fraction object. We ignore the second param. + return [n.numerator, n.denominator]; + } +} + + +/***/ }), + +/***/ "./src/frethandfinger.ts": +/*!*******************************!*\ + !*** ./src/frethandfinger.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FretHandFinger": () => (/* binding */ FretHandFinger) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// Author Larry Kuhns 2013 +// Class to draws string numbers into the notation. + + + + + + +class FretHandFinger extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.FretHandFinger; + } + // Arrange fingerings inside a ModifierContext. + static format(nums, state) { + const { left_shift, right_shift } = state; + const num_spacing = 1; + if (!nums || nums.length === 0) + return false; + const nums_list = []; + let prev_note = null; + let shiftLeft = 0; + let shiftRight = 0; + for (let i = 0; i < nums.length; ++i) { + const num = nums[i]; + const note = num.getNote(); + const pos = num.getPosition(); + const index = num.checkIndex(); + const props = note.getKeyProps()[index]; + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_3__.TextFormatter.create(num.textFont); + const textHeight = textFormatter.maxHeight; + if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) { + state.top_text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5; + } + if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) { + state.text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5; + } + if (note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + if (left_shift === 0) { + shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft); + } + if (right_shift === 0) { + shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight); + } + } + prev_note = note; + } + nums_list.push({ + note, + num, + pos, + line: props.line, + shiftL: shiftLeft, + shiftR: shiftRight, + }); + } + // Sort fingernumbers by line number. + nums_list.sort((a, b) => b.line - a.line); + let numShiftL = 0; + let numShiftR = 0; + let xWidthL = 0; + let xWidthR = 0; + let lastLine = null; + let lastNote = null; + for (let i = 0; i < nums_list.length; ++i) { + let num_shift = 0; + const { note, pos, num, line, shiftL, shiftR } = nums_list[i]; + // Reset the position of the string number every line. + if (line !== lastLine || note !== lastNote) { + numShiftL = left_shift + shiftL; + numShiftR = right_shift + shiftR; + } + const numWidth = num.getWidth() + num_spacing; + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + num.setXShift(left_shift + numShiftL); + num_shift = left_shift + numWidth; // spacing + xWidthL = num_shift > xWidthL ? num_shift : xWidthL; + } + else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { + num.setXShift(numShiftR); + num_shift = shiftRight + numWidth; // spacing + xWidthR = num_shift > xWidthR ? num_shift : xWidthR; + } + lastLine = line; + lastNote = note; + } + state.left_shift += xWidthL; + state.right_shift += xWidthR; + return true; + } + static easyScoreHook({ fingerings } = {}, note, builder) { + fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => { + const split = fingeringString.trim().split('.'); + const params = { number: split[0] }; + if (split[1]) + params.position = split[1]; + return builder.getFactory().Fingering(params); + }).map((fingering, index) => note.addModifier(fingering, index)); + } + constructor(finger) { + super(); + this.finger = finger; + this.width = 7; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; // Default position above stem or note head + this.x_shift = 0; + this.y_shift = 0; + this.x_offset = 0; // Horizontal offset from default + this.y_offset = 0; // Vertical offset from default + this.resetFont(); + } + setFretHandFinger(finger) { + this.finger = finger; + return this; + } + getFretHandFinger() { + return this.finger; + } + setOffsetX(x) { + this.x_offset = x; + return this; + } + setOffsetY(y) { + this.y_offset = y; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + let dot_x = start.x + this.x_shift + this.x_offset; + let dot_y = start.y + this.y_shift + this.y_offset + 5; + switch (this.position) { + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE: + dot_x -= 4; + dot_y -= 12; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW: + dot_x -= 2; + dot_y += 10; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT: + dot_x -= this.width; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT: + dot_x += 1; + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} does not exist`); + } + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText('' + this.finger, dot_x, dot_y); + ctx.restore(); + } +} +FretHandFinger.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 9, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/ghostnote.ts": +/*!**************************!*\ + !*** ./src/ghostnote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GhostNote": () => (/* binding */ GhostNote) +/* harmony export */ }); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description + + + +const ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.'; +class GhostNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_0__.StemmableNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GhostNote; + } + constructor(parameter) { + if (!parameter) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG); + } + let noteStruct; + if (typeof parameter === 'string') { + // Preserve backwards-compatibility + noteStruct = { duration: parameter }; + } + else if (typeof parameter === 'object') { + noteStruct = parameter; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG); + } + super(noteStruct); + // Note properties + this.setWidth(0); + } + /** + * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. + */ + isRest() { + return true; + } + setStave(stave) { + super.setStave(stave); + return this; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + // Draw Annotations + this.setRendered(); + for (let i = 0; i < this.modifiers.length; ++i) { + const modifier = this.modifiers[i]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isAnnotation)(modifier)) { + modifier.setContext(this.getContext()); + modifier.drawWithStyle(); + } + } + } +} + + +/***/ }), + +/***/ "./src/glyph.ts": +/*!**********************!*\ + !*** ./src/glyph.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Glyph": () => (/* binding */ Glyph), +/* harmony export */ "OutlineCode": () => (/* binding */ OutlineCode) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +var OutlineCode; +(function (OutlineCode) { + OutlineCode[OutlineCode["MOVE"] = 0] = "MOVE"; + OutlineCode[OutlineCode["LINE"] = 1] = "LINE"; + OutlineCode[OutlineCode["QUADRATIC"] = 2] = "QUADRATIC"; + OutlineCode[OutlineCode["BEZIER"] = 3] = "BEZIER"; +})(OutlineCode || (OutlineCode = {})); +class GlyphCacheEntry { + constructor(fontStack, code, category) { + this.point = -1; + this.metrics = Glyph.loadMetrics(fontStack, code, category); + this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift); + if (category) { + this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1); + } + } +} +class GlyphCache { + constructor() { + this.cache = new Map(); + } + lookup(code, category) { + let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY); + if (entries === undefined) { + entries = {}; + this.cache.set(Glyph.CURRENT_CACHE_KEY, entries); + } + const key = category ? `${code}%${category}` : code; + let entry = entries[key]; + if (entry === undefined) { + entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category); + entries[key] = entry; + } + return entry; + } +} +class GlyphOutline { + constructor(outline, originX, originY, scale) { + this.outline = outline; + this.originX = originX; + this.originY = originY; + this.scale = scale; + this.i = 0; + this.precision = 1; + // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale. + this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RENDER_PRECISION_PLACES); + } + done() { + return this.i >= this.outline.length; + } + next() { + return Math.round((this.outline[this.i++] * this.precision) / this.precision); + } + nextX() { + return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision; + } + nextY() { + return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision; + } + static parse(str) { + const result = []; + const parts = str.split(' '); + let i = 0; + while (i < parts.length) { + switch (parts[i++]) { + case 'm': + result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'l': + result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'q': + result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'b': + result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); + break; + } + } + return result; + } +} +class Glyph extends _element__WEBPACK_IMPORTED_MODULE_2__.Element { + ////////////////////////////////////////////////////////////////////////////////////////////////// + // STATIC MEMBERS + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Glyph; + } + /** + * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails, + * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue. + * + * @param font + * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc. + * @param code + * @param key + * @param defaultValue + */ + static lookupFontMetric(font, category, code, key, defaultValue) { + let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined); + if (value === undefined) { + // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time). + value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue); + } + return value; + } + static lookupGlyph(fontStack, code) { + (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(fontStack, 'BadFontStack', 'Font stack is misconfigured'); + let glyph; + let font; + for (let i = 0; i < fontStack.length; i++) { + font = fontStack[i]; + glyph = font.getGlyphs()[code]; + if (glyph) + return { glyph, font }; + } + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`); + } + static loadMetrics(fontStack, code, category) { + const { glyph, font } = Glyph.lookupGlyph(fontStack, code); + if (!glyph.o) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`); + let x_shift = 0; + let y_shift = 0; + let scale = 1; + if (category && font) { + x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0); + y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0); + scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1); + } + const x_min = glyph.x_min; + const x_max = glyph.x_max; + const ha = glyph.ha; + if (!glyph.cached_outline) { + glyph.cached_outline = GlyphOutline.parse(glyph.o); + } + return { + x_min, + x_max, + x_shift, + y_shift, + scale, + ha, + outline: glyph.cached_outline, + font, + width: x_max - x_min, + height: ha, + }; + } + /** + * Renders glyphs from the default font stack. + * + * @param ctx Canvas or SVG context + * @param x_pos x coordinate + * @param y_pos y coordinate + * @param point the point size of the font + * @param code the glyph code in font.getGlyphs() + * @param options + * @returns + */ + static renderGlyph(ctx, x_pos, y_pos, point, code, options) { + var _a; + const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category); + const metrics = data.metrics; + if (data.point != -1) { + point = data.point; + } + const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1; + const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale; + Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale); + return metrics; + } + static renderOutline(ctx, outline, scale, x_pos, y_pos) { + const go = new GlyphOutline(outline, x_pos, y_pos, scale); + ctx.beginPath(); + let x, y; + while (!go.done()) { + switch (go.next()) { + case OutlineCode.MOVE: + ctx.moveTo(go.nextX(), go.nextY()); + break; + case OutlineCode.LINE: + ctx.lineTo(go.nextX(), go.nextY()); + break; + case OutlineCode.QUADRATIC: + x = go.nextX(); + y = go.nextY(); + ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y); + break; + case OutlineCode.BEZIER: + x = go.nextX(); + y = go.nextY(); + ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); + break; + } + } + ctx.fill(); + } + static getOutlineBoundingBox(outline, scale, x_pos, y_pos) { + const go = new GlyphOutline(outline, x_pos, y_pos, scale); + const bboxComp = new _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation(); + // (penX, penY) hold the pen position: the start of each stroke. + let penX = x_pos; + let penY = y_pos; + let x, y; + while (!go.done()) { + switch (go.next()) { + case OutlineCode.MOVE: + // Note that we don't add any points to the bounding box until a srroke is actually drawn. + penX = go.nextX(); + penY = go.nextY(); + break; + case OutlineCode.LINE: + bboxComp.addPoint(penX, penY); + penX = go.nextX(); + penY = go.nextY(); + bboxComp.addPoint(penX, penY); + break; + case OutlineCode.QUADRATIC: + x = go.nextX(); + y = go.nextY(); + bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y); + penX = x; + penY = y; + break; + case OutlineCode.BEZIER: + x = go.nextX(); + y = go.nextY(); + bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); + penX = x; + penY = y; + break; + } + } + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()); + } + static getWidth(code, point, category) { + const data = Glyph.cache.lookup(code, category); + if (data.point != -1) { + point = data.point; + } + const scale = (point * 72) / (data.metrics.font.getResolution() * 100); + return data.bbox.getW() * scale; + } + /** + * @param code + * @param point + * @param options + */ + constructor(code, point, options) { + super(); + ////////////////////////////////////////////////////////////////////////////////////////////////// + // INSTANCE MEMBERS + this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(0, 0, 0, 0); + this.topGlyphs = []; + this.botGlyphs = []; + this.options = {}; + this.scale = 1; + this.code = code; + this.point = point; + this.originShift = { x: 0, y: 0 }; + this.x_shift = 0; + this.y_shift = 0; + if (options) { + this.setOptions(options); + } + else { + this.reset(); + } + } + // eslint-disable-next-line + draw(...args) { + // DO NOTHING. + } + getCode() { + return this.code; + } + // eslint-disable-next-line + setOptions(options) { + this.options = Object.assign(Object.assign({}, this.options), options); + this.reset(); + } + setPoint(point) { + this.point = point; + return this; + } + setStave(stave) { + this.stave = stave; + return this; + } + getXShift() { + return this.x_shift; + } + setXShift(x_shift) { + this.x_shift = x_shift; + return this; + } + getYshift() { + return this.y_shift; + } + setYShift(y_shift) { + this.y_shift = y_shift; + return this; + } + reset() { + const data = Glyph.cache.lookup(this.code, this.options.category); + this.metrics = data.metrics; + // Override point from metrics file + if (data.point != -1) { + this.point = data.point; + } + this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100); + this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale); + } + checkMetrics() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`); + } + getMetrics() { + const metrics = this.checkMetrics(); + const metricsScale = metrics.scale; + return { + x_min: metrics.x_min * this.scale * metricsScale, + x_max: metrics.x_max * this.scale * metricsScale, + width: this.bbox.getW(), + height: this.bbox.getH(), + scale: this.scale * metricsScale, + x_shift: metrics.x_shift, + y_shift: metrics.y_shift, + outline: metrics.outline, + font: metrics.font, + ha: metrics.ha, + }; + } + setOriginX(x) { + const { bbox } = this; + const originX = Math.abs(bbox.getX() / bbox.getW()); + const xShift = (x - originX) * bbox.getW(); + this.originShift.x = -xShift; + } + setOriginY(y) { + const { bbox } = this; + const originY = Math.abs(bbox.getY() / bbox.getH()); + const yShift = (y - originY) * bbox.getH(); + this.originShift.y = -yShift; + } + setOrigin(x, y) { + this.setOriginX(x); + this.setOriginY(y); + } + render(ctx, x, y) { + const metrics = this.checkMetrics(); + const outline = metrics.outline; + const scale = this.scale * metrics.scale; + this.setRendered(); + this.applyStyle(ctx); + const xPos = x + this.originShift.x + metrics.x_shift; + const yPos = y + this.originShift.y + metrics.y_shift; + Glyph.renderOutline(ctx, outline, scale, xPos, yPos); + this.restoreStyle(ctx); + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + renderToStave(x) { + const context = this.checkContext(); + const metrics = this.checkMetrics(); + const stave = this.checkStave(); + const outline = metrics.outline; + const scale = this.scale * metrics.scale; + this.setRendered(); + this.applyStyle(); + const xPos = x + this.x_shift + metrics.x_shift; + const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift; + Glyph.renderOutline(context, outline, scale, xPos, yPos); + this.restoreStyle(); + } +} +Glyph.cache = new GlyphCache(); +// The current cache key for GlyphCache above. +// Computed when Flow.setMusicFont(...) is called. +// It is set to a comma separated list of font names. +Glyph.CURRENT_CACHE_KEY = ''; +// Used by the GlyphCache above. +// Set when Flow.setMusicFont(...) is called. +Glyph.MUSIC_FONT_STACK = []; + + + +/***/ }), + +/***/ "./src/glyphnote.ts": +/*!**************************!*\ + !*** ./src/glyphnote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GlyphNote": () => (/* binding */ GlyphNote) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Any glyph that is set to appear on a Stave and take up musical time and graphical space. + + +class GlyphNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GlyphNote; + } + constructor(glyph, noteStruct, options) { + super(noteStruct); + this.options = Object.assign({ ignoreTicks: false, line: 2 }, options); + // Note properties + this.ignore_ticks = this.options.ignoreTicks; + this.setGlyph(glyph); + } + setGlyph(glyph) { + this.glyph = glyph; + this.setWidth(this.glyph.getMetrics().width); + return this; + } + getBoundingBox() { + return this.glyph.getBoundingBox(); + } + preFormat() { + if (!this.preFormatted && this.modifierContext) { + this.modifierContext.preFormat(); + } + this.preFormatted = true; + return this; + } + drawModifiers() { + const ctx = this.checkContext(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + modifier.setContext(ctx); + modifier.drawWithStyle(); + } + } + /** Get the glyph width. */ + getGlyphWidth() { + return this.glyph.getMetrics().width; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('glyphNote', this.getAttribute('id')); + // Context is set when setStave is called on Note + const glyph = this.glyph; + if (!glyph.getContext()) { + glyph.setContext(ctx); + } + glyph.setStave(stave); + glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs()); + const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX(); + glyph.renderToStave(x); + this.drawModifiers(); + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} + + +/***/ }), + +/***/ "./src/gracenote.ts": +/*!**************************!*\ + !*** ./src/gracenote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceNote": () => (/* binding */ GraceNote) +/* harmony export */ }); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + + + + +class GraceNote extends _stavenote__WEBPACK_IMPORTED_MODULE_0__.StaveNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.GraceNote; + } + static get LEDGER_LINE_OFFSET() { + return 2; + } + static get SCALE() { + return 0.66; + } + constructor(noteStruct) { + super(Object.assign({ glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct)); + this.slash = noteStruct.slash || false; + this.slur = true; + this.buildNoteHeads(); + this.width = 3; + } + getStemExtension() { + if (this.stem_extension_override) { + return this.stem_extension_override; + } + const glyphProps = this.getGlyphProps(); + if (glyphProps) { + let ret = super.getStemExtension(); + if (glyphProps.stem) { + const staveNoteScale = this.getStaveNoteScale(); + ret = (_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT + ret) * staveNoteScale - _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT; + } + return ret; + } + return 0; + } + getStaveNoteScale() { + return this.render_options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; + } + draw() { + super.draw(); + this.setRendered(); + const stem = this.stem; + if (this.slash && stem) { + const staveNoteScale = this.getStaveNoteScale(); + // some magic numbers are based on the staveNoteScale 0.66. + const offsetScale = staveNoteScale / 0.66; + let slashBBox = undefined; + const beam = this.beam; + if (beam) { + // FIXME: should render slash after beam? + if (!beam.postFormatted) { + beam.postFormat(); + } + slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, { + stem: 6 * offsetScale, + beam: 5 * offsetScale, + }); + } + else { + const stem_direction = this.getStemDirection(); + const noteHeadBounds = this.getNoteHeadBounds(); + const noteStemHeight = stem.getHeight(); + let x = this.getAbsoluteX(); + let y = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN + ? noteHeadBounds.y_top - noteStemHeight + : noteHeadBounds.y_bottom - noteStemHeight; + const defaultStemExtention = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension; + let defaultOffsetY = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STEM_HEIGHT; + defaultOffsetY -= defaultOffsetY / 2.8; + defaultOffsetY += defaultStemExtention; + y += defaultOffsetY * staveNoteScale * stem_direction; + const offsets = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP + ? { + x1: 1, + y1: 0, + x2: 13, + y2: -9, + } + : { + x1: -4, + y1: 1, + x2: 13, + y2: 9, + }; + x += offsets.x1 * offsetScale; + y += offsets.y1 * offsetScale; + slashBBox = { + x1: x, + y1: y, + x2: x + offsets.x2 * offsetScale, + y2: y + offsets.y2 * offsetScale, + }; + } + // FIXME: avoid staff lines, ledger lines or others. + const ctx = this.checkContext(); + ctx.save(); + ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value. + ctx.beginPath(); + ctx.moveTo(slashBBox.x1, slashBBox.y1); + ctx.lineTo(slashBBox.x2, slashBBox.y2); + ctx.closePath(); + ctx.stroke(); + ctx.restore(); + } + } + calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) { + const beam = this.beam; + if (!beam) + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoBeam', "Can't calculate without a beam."); + const beam_slope = beam.slope; + const isBeamEndNote = beam.notes[beam.notes.length - 1] === this; + const scaleX = isBeamEndNote ? -1 : 1; + const beam_angle = Math.atan(beam_slope * scaleX); + // slash line intersecting point on beam. + const iPointOnBeam = { + dx: Math.cos(beam_angle) * slashBeamOffset, + dy: Math.sin(beam_angle) * slashBeamOffset, + }; + slashStemOffset *= this.getStemDirection(); + const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx); + const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX; + const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem; + const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX; + const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam; + const stemX = this.getStemX(); + const stem0X = beam.notes[0].getStemX(); + const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope; + const ret = { + x1: stemX - protrusion_stem_dx, + y1: stemY + slashStemOffset - protrusion_stem_dy, + x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx, + y2: stemY + iPointOnBeam.dy + protrusion_beam_dy, + }; + return ret; + } +} + + +/***/ }), + +/***/ "./src/gracenotegroup.ts": +/*!*******************************!*\ + !*** ./src/gracenotegroup.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceNoteGroup": () => (/* binding */ GraceNoteGroup) +/* harmony export */ }); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This file implements `GraceNoteGroup` which is used to format and +// render grace notes. + + + + + + + + + + +// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (GraceNoteGroup.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_8__.log)('Vex.Flow.GraceNoteGroup', args); +} +/** GraceNoteGroup is used to format and render grace notes. */ +class GraceNoteGroup extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_7__.Category.GraceNoteGroup; + } + /** Arranges groups inside a `ModifierContext`. */ + static format(gracenote_groups, state) { + const group_spacing_stave = 4; + const group_spacing_tab = 0; + if (!gracenote_groups || gracenote_groups.length === 0) + return false; + const group_list = []; + let prev_note = null; + let shiftL = 0; + for (let i = 0; i < gracenote_groups.length; ++i) { + const gracenote_group = gracenote_groups[i]; + const note = gracenote_group.getNote(); + const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note); + const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab; + if (is_stavenote && note !== prev_note) { + // Iterate through all notes to get the displaced pixels + for (let n = 0; n < note.keys.length; ++n) { + shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL); + } + prev_note = note; + } + group_list.push({ shift: shiftL, gracenote_group, spacing }); + } + // If first note left shift in case it is displaced + let group_shift = group_list[0].shift; + let formatWidth; + for (let i = 0; i < group_list.length; ++i) { + const gracenote_group = group_list[i].gracenote_group; + gracenote_group.preFormat(); + formatWidth = gracenote_group.getWidth() + group_list[i].spacing; + group_shift = Math.max(formatWidth, group_shift); + } + for (let i = 0; i < group_list.length; ++i) { + const gracenote_group = group_list[i].gracenote_group; + formatWidth = gracenote_group.getWidth() + group_list[i].spacing; + gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding); + } + state.left_shift += group_shift; + return true; + } + //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */ + constructor(grace_notes, show_slur) { + super(); + this.preFormatted = false; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; + this.grace_notes = grace_notes; + this.width = 0; + this.show_slur = show_slur; + this.slur = undefined; + this.voice = new _voice__WEBPACK_IMPORTED_MODULE_9__.Voice({ + num_beats: 4, + beat_value: 4, + resolution: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.RESOLUTION, + }).setStrict(false); + this.render_options = { + slur_y_shift: 0, + }; + this.beams = []; + this.voice.addTickables(this.grace_notes); + return this; + } + preFormat() { + if (this.preFormatted) + return; + if (!this.formatter) { + this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter(); + } + this.formatter.joinVoices([this.voice]).format([this.voice], 0, {}); + this.setWidth(this.formatter.getMinTotalWidth()); + this.preFormatted = true; + } + beamNotes(grace_notes) { + grace_notes = grace_notes || this.grace_notes; + if (grace_notes.length > 1) { + const beam = new _beam__WEBPACK_IMPORTED_MODULE_0__.Beam(grace_notes); + beam.render_options.beam_width = 3; + beam.render_options.partial_beam_length = 4; + this.beams.push(beam); + } + return this; + } + setWidth(width) { + this.width = width; + return this; + } + getWidth() { + return this.width + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding; + } + getGraceNotes() { + return this.grace_notes; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + L('Drawing grace note group for:', note); + this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function + // Draw grace notes. + this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw()); + // Draw beams. + this.beams.forEach((beam) => beam.setContext(ctx).draw()); + if (this.show_slur) { + // Create and draw slur. + const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note); + const TieClass = is_stavenote ? _stavetie__WEBPACK_IMPORTED_MODULE_4__.StaveTie : _tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie; + this.slur = new TieClass({ + last_note: this.grace_notes[0], + first_note: note, + first_indices: [0], + last_indices: [0], + }); + this.slur.render_options.cp2 = 12; + this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift; + this.slur.setContext(ctx).draw(); + } + } +} +GraceNoteGroup.DEBUG = false; + + + +/***/ }), + +/***/ "./src/gracetabnote.ts": +/*!*****************************!*\ + !*** ./src/gracetabnote.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "GraceTabNote": () => (/* binding */ GraceTabNote) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Balazs Forian-Szabo +// +// ## Description +// +// A basic implementation of grace notes +// to be rendered on a tab stave. +// +// See `tests/gracetabnote_tests.ts` for usage examples. + + + +class GraceTabNote extends _tabnote__WEBPACK_IMPORTED_MODULE_1__.TabNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.GraceTabNote; + } + constructor(noteStruct) { + super(noteStruct, false); + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // vertical shift from stave line + y_shift: 0.3, + // grace glyph scale + scale: 0.6, + // grace tablature font + font: `7.5pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` }); + this.updateWidth(); + } +} + + +/***/ }), + +/***/ "./src/index.ts": +/*!**********************!*\ + !*** ./src/index.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Accidental": () => (/* reexport safe */ _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental), +/* harmony export */ "Annotation": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation), +/* harmony export */ "AnnotationHorizontalJustify": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify), +/* harmony export */ "AnnotationVerticalJustify": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify), +/* harmony export */ "Articulation": () => (/* reexport safe */ _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation), +/* harmony export */ "BEAM_BOTH": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_BOTH), +/* harmony export */ "BEAM_LEFT": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_LEFT), +/* harmony export */ "BEAM_RIGHT": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_RIGHT), +/* harmony export */ "BarNote": () => (/* reexport safe */ _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote), +/* harmony export */ "Barline": () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.Barline), +/* harmony export */ "BarlineType": () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.BarlineType), +/* harmony export */ "Beam": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.Beam), +/* harmony export */ "Bend": () => (/* reexport safe */ _bend__WEBPACK_IMPORTED_MODULE_5__.Bend), +/* harmony export */ "BoundingBox": () => (/* reexport safe */ _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox), +/* harmony export */ "BoundingBoxComputation": () => (/* reexport safe */ _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation), +/* harmony export */ "Builder": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Builder), +/* harmony export */ "CanvasContext": () => (/* reexport safe */ _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext), +/* harmony export */ "Category": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.Category), +/* harmony export */ "ChordSymbol": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol), +/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify), +/* harmony export */ "ChordSymbolVerticalJustify": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify), +/* harmony export */ "Clef": () => (/* reexport safe */ _clef__WEBPACK_IMPORTED_MODULE_10__.Clef), +/* harmony export */ "ClefNote": () => (/* reexport safe */ _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote), +/* harmony export */ "Crescendo": () => (/* reexport safe */ _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo), +/* harmony export */ "Curve": () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.Curve), +/* harmony export */ "CurvePosition": () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition), +/* harmony export */ "Dot": () => (/* reexport safe */ _dot__WEBPACK_IMPORTED_MODULE_14__.Dot), +/* harmony export */ "EasyScore": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore), +/* harmony export */ "EasyScoreGrammar": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScoreGrammar), +/* harmony export */ "Element": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_16__.Element), +/* harmony export */ "Factory": () => (/* reexport safe */ _factory__WEBPACK_IMPORTED_MODULE_17__.Factory), +/* harmony export */ "Flow": () => (/* reexport safe */ _flow__WEBPACK_IMPORTED_MODULE_18__.Flow), +/* harmony export */ "Font": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.Font), +/* harmony export */ "FontStyle": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontStyle), +/* harmony export */ "FontWeight": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontWeight), +/* harmony export */ "Formatter": () => (/* reexport safe */ _formatter__WEBPACK_IMPORTED_MODULE_20__.Formatter), +/* harmony export */ "Fraction": () => (/* reexport safe */ _fraction__WEBPACK_IMPORTED_MODULE_21__.Fraction), +/* harmony export */ "FretHandFinger": () => (/* reexport safe */ _frethandfinger__WEBPACK_IMPORTED_MODULE_22__.FretHandFinger), +/* harmony export */ "GhostNote": () => (/* reexport safe */ _ghostnote__WEBPACK_IMPORTED_MODULE_23__.GhostNote), +/* harmony export */ "Glyph": () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.Glyph), +/* harmony export */ "GlyphNote": () => (/* reexport safe */ _glyphnote__WEBPACK_IMPORTED_MODULE_25__.GlyphNote), +/* harmony export */ "GraceNote": () => (/* reexport safe */ _gracenote__WEBPACK_IMPORTED_MODULE_26__.GraceNote), +/* harmony export */ "GraceNoteGroup": () => (/* reexport safe */ _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__.GraceNoteGroup), +/* harmony export */ "GraceTabNote": () => (/* reexport safe */ _gracetabnote__WEBPACK_IMPORTED_MODULE_28__.GraceTabNote), +/* harmony export */ "KeyManager": () => (/* reexport safe */ _keymanager__WEBPACK_IMPORTED_MODULE_29__.KeyManager), +/* harmony export */ "KeySigNote": () => (/* reexport safe */ _keysignote__WEBPACK_IMPORTED_MODULE_31__.KeySigNote), +/* harmony export */ "KeySignature": () => (/* reexport safe */ _keysignature__WEBPACK_IMPORTED_MODULE_30__.KeySignature), +/* harmony export */ "Modifier": () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.Modifier), +/* harmony export */ "ModifierContext": () => (/* reexport safe */ _modifiercontext__WEBPACK_IMPORTED_MODULE_33__.ModifierContext), +/* harmony export */ "ModifierPosition": () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.ModifierPosition), +/* harmony export */ "MultiMeasureRest": () => (/* reexport safe */ _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__.MultiMeasureRest), +/* harmony export */ "Music": () => (/* reexport safe */ _music__WEBPACK_IMPORTED_MODULE_35__.Music), +/* harmony export */ "Note": () => (/* reexport safe */ _note__WEBPACK_IMPORTED_MODULE_36__.Note), +/* harmony export */ "NoteHead": () => (/* reexport safe */ _notehead__WEBPACK_IMPORTED_MODULE_37__.NoteHead), +/* harmony export */ "NoteSubGroup": () => (/* reexport safe */ _notesubgroup__WEBPACK_IMPORTED_MODULE_38__.NoteSubGroup), +/* harmony export */ "Ornament": () => (/* reexport safe */ _ornament__WEBPACK_IMPORTED_MODULE_39__.Ornament), +/* harmony export */ "OutlineCode": () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.OutlineCode), +/* harmony export */ "Parenthesis": () => (/* reexport safe */ _parenthesis__WEBPACK_IMPORTED_MODULE_40__.Parenthesis), +/* harmony export */ "Parser": () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_41__.Parser), +/* harmony export */ "PedalMarking": () => (/* reexport safe */ _pedalmarking__WEBPACK_IMPORTED_MODULE_42__.PedalMarking), +/* harmony export */ "Piece": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Piece), +/* harmony export */ "Registry": () => (/* reexport safe */ _registry__WEBPACK_IMPORTED_MODULE_43__.Registry), +/* harmony export */ "RenderContext": () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.RenderContext), +/* harmony export */ "Renderer": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.Renderer), +/* harmony export */ "RendererBackends": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererBackends), +/* harmony export */ "RendererLineEndType": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererLineEndType), +/* harmony export */ "RepeatNote": () => (/* reexport safe */ _repeatnote__WEBPACK_IMPORTED_MODULE_46__.RepeatNote), +/* harmony export */ "Repetition": () => (/* reexport safe */ _staverepetition__WEBPACK_IMPORTED_MODULE_54__.Repetition), +/* harmony export */ "RuntimeError": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.RuntimeError), +/* harmony export */ "SVGContext": () => (/* reexport safe */ _svgcontext__WEBPACK_IMPORTED_MODULE_64__.SVGContext), +/* harmony export */ "Stave": () => (/* reexport safe */ _stave__WEBPACK_IMPORTED_MODULE_47__.Stave), +/* harmony export */ "StaveConnector": () => (/* reexport safe */ _staveconnector__WEBPACK_IMPORTED_MODULE_49__.StaveConnector), +/* harmony export */ "StaveHairpin": () => (/* reexport safe */ _stavehairpin__WEBPACK_IMPORTED_MODULE_50__.StaveHairpin), +/* harmony export */ "StaveLine": () => (/* reexport safe */ _staveline__WEBPACK_IMPORTED_MODULE_51__.StaveLine), +/* harmony export */ "StaveModifier": () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifier), +/* harmony export */ "StaveModifierPosition": () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifierPosition), +/* harmony export */ "StaveNote": () => (/* reexport safe */ _stavenote__WEBPACK_IMPORTED_MODULE_53__.StaveNote), +/* harmony export */ "StaveSection": () => (/* reexport safe */ _stavesection__WEBPACK_IMPORTED_MODULE_55__.StaveSection), +/* harmony export */ "StaveTempo": () => (/* reexport safe */ _stavetempo__WEBPACK_IMPORTED_MODULE_56__.StaveTempo), +/* harmony export */ "StaveText": () => (/* reexport safe */ _stavetext__WEBPACK_IMPORTED_MODULE_57__.StaveText), +/* harmony export */ "StaveTie": () => (/* reexport safe */ _stavetie__WEBPACK_IMPORTED_MODULE_58__.StaveTie), +/* harmony export */ "Stem": () => (/* reexport safe */ _stem__WEBPACK_IMPORTED_MODULE_60__.Stem), +/* harmony export */ "StemmableNote": () => (/* reexport safe */ _stemmablenote__WEBPACK_IMPORTED_MODULE_61__.StemmableNote), +/* harmony export */ "StringNumber": () => (/* reexport safe */ _stringnumber__WEBPACK_IMPORTED_MODULE_62__.StringNumber), +/* harmony export */ "Stroke": () => (/* reexport safe */ _strokes__WEBPACK_IMPORTED_MODULE_63__.Stroke), +/* harmony export */ "SymbolModifiers": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers), +/* harmony export */ "SymbolTypes": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes), +/* harmony export */ "System": () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_65__.System), +/* harmony export */ "TabNote": () => (/* reexport safe */ _tabnote__WEBPACK_IMPORTED_MODULE_66__.TabNote), +/* harmony export */ "TabSlide": () => (/* reexport safe */ _tabslide__WEBPACK_IMPORTED_MODULE_67__.TabSlide), +/* harmony export */ "TabStave": () => (/* reexport safe */ _tabstave__WEBPACK_IMPORTED_MODULE_68__.TabStave), +/* harmony export */ "TabTie": () => (/* reexport safe */ _tabtie__WEBPACK_IMPORTED_MODULE_69__.TabTie), +/* harmony export */ "TextBracket": () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracket), +/* harmony export */ "TextBracketPosition": () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracketPosition), +/* harmony export */ "TextDynamics": () => (/* reexport safe */ _textdynamics__WEBPACK_IMPORTED_MODULE_71__.TextDynamics), +/* harmony export */ "TextFormatter": () => (/* reexport safe */ _textformatter__WEBPACK_IMPORTED_MODULE_72__.TextFormatter), +/* harmony export */ "TextJustification": () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextJustification), +/* harmony export */ "TextNote": () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextNote), +/* harmony export */ "TickContext": () => (/* reexport safe */ _tickcontext__WEBPACK_IMPORTED_MODULE_75__.TickContext), +/* harmony export */ "Tickable": () => (/* reexport safe */ _tickable__WEBPACK_IMPORTED_MODULE_74__.Tickable), +/* harmony export */ "TimeSigNote": () => (/* reexport safe */ _timesignote__WEBPACK_IMPORTED_MODULE_78__.TimeSigNote), +/* harmony export */ "TimeSignature": () => (/* reexport safe */ _timesignature__WEBPACK_IMPORTED_MODULE_77__.TimeSignature), +/* harmony export */ "TimeSignatureGlyph": () => (/* reexport safe */ _timesigglyph__WEBPACK_IMPORTED_MODULE_76__.TimeSignatureGlyph), +/* harmony export */ "Tremolo": () => (/* reexport safe */ _tremolo__WEBPACK_IMPORTED_MODULE_79__.Tremolo), +/* harmony export */ "Tuning": () => (/* reexport safe */ _tuning__WEBPACK_IMPORTED_MODULE_80__.Tuning), +/* harmony export */ "Tuplet": () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.Tuplet), +/* harmony export */ "TupletLocation": () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.TupletLocation), +/* harmony export */ "Vex": () => (/* reexport safe */ _vex__WEBPACK_IMPORTED_MODULE_84__.Vex), +/* harmony export */ "Vibrato": () => (/* reexport safe */ _vibrato__WEBPACK_IMPORTED_MODULE_85__.Vibrato), +/* harmony export */ "VibratoBracket": () => (/* reexport safe */ _vibratobracket__WEBPACK_IMPORTED_MODULE_86__.VibratoBracket), +/* harmony export */ "Voice": () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.Voice), +/* harmony export */ "VoiceMode": () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.VoiceMode), +/* harmony export */ "Volta": () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.Volta), +/* harmony export */ "VoltaType": () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.VoltaType), +/* harmony export */ "defined": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.defined), +/* harmony export */ "drawDot": () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.drawDot), +/* harmony export */ "globalObject": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.globalObject), +/* harmony export */ "isAccidental": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAccidental), +/* harmony export */ "isAnnotation": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAnnotation), +/* harmony export */ "isBarline": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isBarline), +/* harmony export */ "isCategory": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isCategory), +/* harmony export */ "isDot": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isDot), +/* harmony export */ "isGraceNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNote), +/* harmony export */ "isGraceNoteGroup": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNoteGroup), +/* harmony export */ "isHTMLCanvas": () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLCanvas), +/* harmony export */ "isHTMLDiv": () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLDiv), +/* harmony export */ "isNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isNote), +/* harmony export */ "isRenderContext": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isRenderContext), +/* harmony export */ "isStaveNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStaveNote), +/* harmony export */ "isStemmableNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStemmableNote), +/* harmony export */ "isTabNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isTabNote), +/* harmony export */ "log": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.log), +/* harmony export */ "midLine": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.midLine), +/* harmony export */ "normalizeAngle": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.normalizeAngle), +/* harmony export */ "prefix": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.prefix), +/* harmony export */ "sumArray": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.sumArray), +/* harmony export */ "warn": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.warn) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ "./src/factory.ts"); +/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./flow */ "./src/flow.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); +/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./tickable */ "./src/tickable.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.ts"); +/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./tuning */ "./src/tuning.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./vex */ "./src/vex.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + + + + + + + + + + + + + + +// Do not export './fonts/*' because they are used by the entry/* files. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*. + + + + + + + + + + + + + + + + + + +// Do not export './version'. It is accessible via Vex.Flow.BUILD. + + + + + + + +/***/ }), + +/***/ "./src/keymanager.ts": +/*!***************************!*\ + !*** ./src/keymanager.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeyManager": () => (/* binding */ KeyManager) +/* harmony export */ }); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This class implements diatonic key management. + + +class KeyManager { + constructor(key) { + this.music = new _music__WEBPACK_IMPORTED_MODULE_0__.Music(); + this.setKey(key); + } + setKey(key) { + this.key = key; + this.reset(); + return this; + } + getKey() { + return this.key; + } + reset() { + this.keyParts = this.music.getKeyParts(this.key); + this.keyString = this.keyParts.root; + if (this.keyParts.accidental) + this.keyString += this.keyParts.accidental; + const is_supported_type = _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]; + if (!is_supported_type) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Unsupported key type: ${this.key}`); + } + this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]); + this.scaleMap = {}; + this.scaleMapByValue = {}; + this.originalScaleMapByValue = {}; + const noteLocation = _music__WEBPACK_IMPORTED_MODULE_0__.Music.root_indices[this.keyParts.root]; + for (let i = 0; i < _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; ++i) { + const index = (noteLocation + i) % _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; + const rootName = _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots[index]; + const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]); + this.scaleMap[rootName] = noteName; + this.scaleMapByValue[this.scale[i]] = noteName; + this.originalScaleMapByValue[this.scale[i]] = noteName; + } + return this; + } + getAccidental(key) { + const root = this.music.getKeyParts(key).root; + const parts = this.music.getNoteParts(this.scaleMap[root]); + return { + note: this.scaleMap[root], + accidental: parts.accidental, + }; + } + selectNote(note) { + note = note.toLowerCase(); + const parts = this.music.getNoteParts(note); + // First look for matching note in our altered scale + const scaleNote = this.scaleMap[parts.root]; + const modparts = this.music.getNoteParts(scaleNote); + if (scaleNote === note) { + return { + note: scaleNote, + accidental: parts.accidental, + change: false, + }; + } + // Then search for a note of equivalent value in our altered scale + const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)]; + if (valueNote != null) { + return { + note: valueNote, + accidental: this.music.getNoteParts(valueNote).accidental, + change: false, + }; + } + // Then search for a note of equivalent value in the original scale + const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)]; + if (originalValueNote != null) { + this.scaleMap[modparts.root] = originalValueNote; + delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)]; + this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote; + return { + note: originalValueNote, + accidental: this.music.getNoteParts(originalValueNote).accidental, + change: true, + }; + } + // Then try to unmodify a currently modified note. + if (modparts.root === note) { + delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; + this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root; + this.scaleMap[modparts.root] = modparts.root; + return { + note: modparts.root, + accidental: undefined, + change: true, + }; + } + // Last resort -- shitshoot + delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; + this.scaleMapByValue[this.music.getNoteValue(note)] = note; + delete this.scaleMap[modparts.root]; + this.scaleMap[modparts.root] = note; + return { + note, + accidental: parts.accidental, + change: true, + }; + } +} + + +/***/ }), + +/***/ "./src/keysignature.ts": +/*!*****************************!*\ + !*** ./src/keysignature.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeySignature": () => (/* binding */ KeySignature) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Cyril Silverman +// +// ## Description +// +// This file implements key signatures. A key signature sits on a stave +// and indicates the notes with implicit accidentals. + + + + + +class KeySignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.KeySignature; + } + // Create a new Key Signature based on a `key_spec` + constructor(keySpec, cancelKeySpec, alterKeySpec) { + super(); + this.accList = []; + this.setKeySig(keySpec, cancelKeySpec, alterKeySpec); + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); + this.glyphFontScale = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; + this.glyphs = []; + this.xPositions = []; // relative to this.x + this.paddingForced = false; + } + // Add an accidental glyph to the `KeySignature` instance which represents + // the provided `acc`. If `nextAcc` is also provided, the appropriate + // spacing will be included in the glyph's position + convertToGlyph(acc, nextAcc) { + const accGlyphData = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.accidentalCodes(acc.type); + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(accGlyphData.code, this.glyphFontScale); + // Determine spacing between current accidental and the next accidental + let extraWidth = 1; + if (acc.type === 'n' && nextAcc) { + const spacing = KeySignature.accidentalSpacing[nextAcc.type]; + if (spacing) { + const isAbove = nextAcc.line >= acc.line; + extraWidth = isAbove ? spacing.above : spacing.below; + } + } + // Place the glyph on the stave + this.placeGlyphOnLine(glyph, this.checkStave(), acc.line); + this.glyphs.push(glyph); + const xPosition = this.xPositions[this.xPositions.length - 1]; + const glyphWidth = glyph.getMetrics().width + extraWidth; + // Store the next accidental's x position + this.xPositions.push(xPosition + glyphWidth); + // Expand size of key signature + this.width += glyphWidth; + } + // Cancel out a key signature provided in the `spec` parameter. This will + // place appropriate natural accidentals before the key signature. + cancelKey(spec) { + this.formatted = false; + this.cancelKeySpec = spec; + return this; + } + convertToCancelAccList(spec) { + // Get the accidental list for the cancelled key signature + const cancel_accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature(spec); + // If the cancelled key has a different accidental type, ie: # vs b + const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type; + // Determine how many naturals needed to add + const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length; + // Return if no naturals needed + if (naturals < 1) + return undefined; + // Get the line position for each natural + const cancelled = []; + for (let i = 0; i < naturals; i++) { + let index = i; + if (!different_types) { + index = cancel_accList.length - naturals + i; + } + const acc = cancel_accList[index]; + cancelled.push({ type: 'n', line: acc.line }); + } + // Combine naturals with main accidental list for the key signature + this.accList = cancelled.concat(this.accList); + return { + accList: cancelled, + type: cancel_accList[0].type, + }; + } + // Deprecated + addToStave(stave) { + this.paddingForced = true; + stave.addModifier(this); + return this; + } + // Apply the accidental staff line placement based on the `clef` and + // the accidental `type` for the key signature ('# or 'b'). + convertAccLines(clef, type, accList = this.accList) { + let offset = 0.0; // if clef === "treble" + let customLines; // when clef doesn't follow treble key sig shape + switch (clef) { + // Treble & Subbass both have offsets of 0, so are not included. + case 'soprano': + if (type === '#') + customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1]; + else + offset = -1; + break; + case 'mezzo-soprano': + if (type === 'b') + customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5]; + else + offset = 1.5; + break; + case 'alto': + offset = 0.5; + break; + case 'tenor': + if (type === '#') + customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5]; + else + offset = -0.5; + break; + case 'baritone-f': + case 'baritone-c': + if (type === 'b') + customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2]; + else + offset = 2; + break; + case 'bass': + case 'french': + offset = 1; + break; + default: + break; + } + // If there's a special case, assign those lines/spaces: + let i; + if (typeof customLines !== 'undefined') { + for (i = 0; i < accList.length; ++i) { + accList[i].line = customLines[i]; + } + } + else if (offset !== 0) { + for (i = 0; i < accList.length; ++i) { + accList[i].line += offset; + } + } + } + getPadding(index) { + if (!this.formatted) + this.format(); + return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding; + } + getWidth() { + if (!this.formatted) + this.format(); + return this.width; + } + setKeySig(keySpec, cancelKeySpec, alterKeySpec) { + this.formatted = false; + this.keySpec = keySpec; + this.cancelKeySpec = cancelKeySpec; + this.alterKeySpec = alterKeySpec; + return this; + } + // Alter the accidentals of a key spec one by one. + // Each alteration is a new accidental that replaces the + // original accidental (or the canceled one). + alterKey(alterKeySpec) { + this.formatted = false; + this.alterKeySpec = alterKeySpec; + return this; + } + convertToAlterAccList(alterKeySpec) { + const max = Math.min(alterKeySpec.length, this.accList.length); + for (let i = 0; i < max; ++i) { + if (alterKeySpec[i]) { + this.accList[i].type = alterKeySpec[i]; + } + } + } + format() { + const stave = this.checkStave(); + this.width = 0; + this.glyphs = []; + this.xPositions = [0]; // initialize with initial x position + this.accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature((0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.keySpec)); + const accList = this.accList; + const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined; + let cancelAccList; + if (this.cancelKeySpec) { + cancelAccList = this.convertToCancelAccList(this.cancelKeySpec); + } + if (this.alterKeySpec) { + this.convertToAlterAccList(this.alterKeySpec); + } + if (this.accList.length > 0) { + const clef = (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef(); + if (cancelAccList) { + this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList); + } + this.convertAccLines(clef, firstAccidentalType, accList); + for (let i = 0; i < this.accList.length; ++i) { + this.convertToGlyph(this.accList[i], this.accList[i + 1]); + } + } + this.formatted = true; + } + /** + * Return the Glyph objects making up this KeySignature. + */ + getGlyphs() { + if (!this.formatted) + this.format(); + return this.glyphs; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + if (!this.formatted) + this.format(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('keysignature', this.getAttribute('id')); + for (let i = 0; i < this.glyphs.length; i++) { + const glyph = this.glyphs[i]; + const x = this.x + this.xPositions[i]; + glyph.setStave(stave); + glyph.setContext(ctx); + glyph.renderToStave(x); + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} +// Space between natural and following accidental depending +// on vertical position +KeySignature.accidentalSpacing = { + '#': { + above: 6, + below: 4, + }, + b: { + above: 4, + below: 7, + }, + n: { + above: 4, + below: 1, + }, + '##': { + above: 6, + below: 4, + }, + bb: { + above: 4, + below: 7, + }, + db: { + above: 4, + below: 7, + }, + d: { + above: 4, + below: 7, + }, + bbs: { + above: 4, + below: 7, + }, + '++': { + above: 6, + below: 4, + }, + '+': { + above: 6, + below: 4, + }, + '+-': { + above: 6, + below: 4, + }, + '++-': { + above: 6, + below: 4, + }, + bs: { + above: 4, + below: 10, + }, + bss: { + above: 4, + below: 10, + }, +}; + + + +/***/ }), + +/***/ "./src/keysignote.ts": +/*!***************************!*\ + !*** ./src/keysignote.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "KeySigNote": () => (/* binding */ KeySigNote) +/* harmony export */ }); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Mark Meeus 2019 + + + +class KeySigNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.KeySigNote; + } + constructor(keySpec, cancelKeySpec, alterKeySpec) { + super({ duration: 'b' }); + this.keySignature = new _keysignature__WEBPACK_IMPORTED_MODULE_0__.KeySignature(keySpec, cancelKeySpec, alterKeySpec); + // Note properties + this.ignore_ticks = true; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + preFormat() { + this.preFormatted = true; + this.keySignature.setStave(this.checkStave()); + this.setWidth(this.keySignature.getWidth()); + return this; + } + draw() { + const ctx = this.checkStave().checkContext(); + this.setRendered(); + this.keySignature.setX(this.getAbsoluteX()); + this.keySignature.setContext(ctx); + this.keySignature.draw(); + } +} + + +/***/ }), + +/***/ "./src/modifier.ts": +/*!*************************!*\ + !*** ./src/modifier.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Modifier": () => (/* binding */ Modifier), +/* harmony export */ "ModifierPosition": () => (/* binding */ ModifierPosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + +var ModifierPosition; +(function (ModifierPosition) { + ModifierPosition[ModifierPosition["CENTER"] = 0] = "CENTER"; + ModifierPosition[ModifierPosition["LEFT"] = 1] = "LEFT"; + ModifierPosition[ModifierPosition["RIGHT"] = 2] = "RIGHT"; + ModifierPosition[ModifierPosition["ABOVE"] = 3] = "ABOVE"; + ModifierPosition[ModifierPosition["BELOW"] = 4] = "BELOW"; +})(ModifierPosition || (ModifierPosition = {})); +// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`. +// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); } +/** + * `Modifier` is an abstract interface for notational elements that modify + * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc. + * + * For a `Modifier` instance to be positioned correctly, it must be part of + * a `ModifierContext`. All modifiers in the same context are rendered relative to + * one another. + * + * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also, + * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same + * `ModifierContext`. This ensures that multiple voices don't trample all over each other. + */ +class Modifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + /** + * Modifiers category string. Every modifier has a different category. + * The `ModifierContext` uses this to determine the type and order of the modifiers. + */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Modifier; + } + /** Modifiers can be positioned almost anywhere, relative to a note. */ + static get Position() { + return ModifierPosition; + } + static get PositionString() { + return { + center: ModifierPosition.CENTER, + above: ModifierPosition.ABOVE, + below: ModifierPosition.BELOW, + left: ModifierPosition.LEFT, + right: ModifierPosition.RIGHT, + }; + } + constructor() { + super(); + this.width = 0; + // The `text_line` is reserved space above or below a stave. + this.text_line = 0; + this.position = Modifier.Position.LEFT; + this.x_shift = 0; + this.y_shift = 0; + this.spacingFromNextModifier = 0; + } + /** Called when position changes. */ + reset() { + // DO NOTHING. + } + /** Get modifier widths. */ + getWidth() { + return this.width; + } + /** Set modifier widths. */ + setWidth(width) { + this.width = width; + return this; + } + /** Get attached note (`StaveNote`, `TabNote`, etc.) */ + getNote() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', 'Modifier has no note.'); + } + /** + * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.). + * Also verifies that the index is valid. + */ + checkAttachedNote() { + const category = this.getCategory(); + (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', `Can't draw ${category} without an index.`); + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', `Can't draw ${category} without a note.`); + } + /** + * Set attached note. + * @param note (`StaveNote`, `TabNote`, etc.) + */ + setNote(note) { + this.note = note; + return this; + } + /** Get note index, which is a specific note in a chord. */ + getIndex() { + return this.index; + } + /** Check and get note index, which is a specific note in a chord. */ + checkIndex() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', 'Modifier has an invalid index.'); + } + /** Set note index, which is a specific note in a chord. */ + setIndex(index) { + this.index = index; + return this; + } + /** Get `ModifierContext`. */ + getModifierContext() { + return this.modifierContext; + } + /** Check and get `ModifierContext`. */ + checkModifierContext() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.modifierContext, 'NoModifierContext', 'Modifier Context Required'); + } + /** Every modifier must be part of a `ModifierContext`. */ + setModifierContext(c) { + this.modifierContext = c; + return this; + } + /** Get position. */ + getPosition() { + return this.position; + } + /** + * Set position. + * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW + */ + setPosition(position) { + this.position = typeof position === 'string' ? Modifier.PositionString[position] : position; + this.reset(); + return this; + } + /** Set the `text_line` for the modifier. */ + setTextLine(line) { + this.text_line = line; + return this; + } + /** Shift modifier down `y` pixels. Negative values shift up. */ + setYShift(y) { + this.y_shift = y; + return this; + } + /** Set spacing from next modifier. */ + setSpacingFromNextModifier(x) { + this.spacingFromNextModifier = x; + } + /** Get spacing from next modifier. */ + getSpacingFromNextModifier() { + return this.spacingFromNextModifier; + } + /** + * Shift modifier `x` pixels in the direction of the modifier. Negative values + * shift reverse. + */ + setXShift(x) { + this.x_shift = 0; + if (this.position === Modifier.Position.LEFT) { + this.x_shift -= x; + } + else { + this.x_shift += x; + } + return this; + } + /** Get shift modifier `x` */ + getXShift() { + return this.x_shift; + } + /** Render the modifier onto the canvas. */ + draw() { + this.checkContext(); + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NotImplemented', 'draw() not implemented for this modifier.'); + } + // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset + alignSubNotesWithNote(subNotes, note) { + // Shift over the tick contexts of each note + const tickContext = note.getTickContext(); + const metrics = tickContext.getMetrics(); + const stave = note.getStave(); + const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier(); + subNotes.forEach((subNote) => { + const subTickContext = subNote.getTickContext(); + if (stave) + subNote.setStave(stave); + subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render + }); + } +} + + +/***/ }), + +/***/ "./src/modifiercontext.ts": +/*!********************************!*\ + !*** ./src/modifiercontext.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ModifierContext": () => (/* binding */ ModifierContext) +/* harmony export */ }); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This class implements various types of members to notes (e.g. bends, +// fingering positions etc.). The ModifierContext works with tickables +// that are at the same tick to ensure that they and their modifiers +// all have proper alignment. (Note that the ModifierContext also +// runs the spacing of the tickable). +// +// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works + + + + + + + + + + + + + + + + + +// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (ModifierContext.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_15__.log)('Vex.Flow.ModifierContext', args); +} +class ModifierContext { + constructor() { + // Formatting data. + this.state = { + left_shift: 0, + right_shift: 0, + text_line: 0, + top_text_line: 0, + }; + // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers, + // StaveNotes, TabNotes, etc. + this.members = {}; + this.preFormatted = false; + this.postFormatted = false; + this.formatted = false; + this.width = 0; + this.spacing = 0; + } + addModifier(member) { + L('addModifier is deprecated, use addMember instead.'); + return this.addMember(member); + } + /** + * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote. + * Here we add a new member to this.members, and create a new array if needed. + * @param member + * @returns this + */ + addMember(member) { + const category = member.getCategory(); + if (!this.members[category]) { + this.members[category] = []; + } + this.members[category].push(member); + member.setModifierContext(this); + this.preFormatted = false; + return this; + } + /** + * @deprecated + */ + getModifiers(category) { + L('getModifiers is deprecated, use getMembers instead.'); + return this.getMembers(category); + } + getMembers(category) { + var _a; + return (_a = this.members[category]) !== null && _a !== void 0 ? _a : []; + } + /** + * Get the width of the entire + */ + getWidth() { + return this.width; + } + getLeftShift() { + return this.state.left_shift; + } + getRightShift() { + return this.state.right_shift; + } + getState() { + return this.state; + } + getMetrics() { + if (!this.formatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('UnformattedMember', 'Unformatted member has no metrics.'); + } + return { + width: this.state.left_shift + this.state.right_shift + this.spacing, + spacing: this.spacing, + }; + } + preFormat() { + if (this.preFormatted) + return; + L('Preformatting ModifierContext'); + const state = this.state; + const members = this.members; + // The ordering below determines when different members are formatted and rendered. + _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote], state); + _parenthesis__WEBPACK_IMPORTED_MODULE_10__.Parenthesis.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Parenthesis], state); + _dot__WEBPACK_IMPORTED_MODULE_5__.Dot.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Dot], state); + _frethandfinger__WEBPACK_IMPORTED_MODULE_6__.FretHandFinger.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.FretHandFinger], state); + _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Accidental], state); + _strokes__WEBPACK_IMPORTED_MODULE_13__.Stroke.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stroke], state); + _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__.GraceNoteGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.GraceNoteGroup], state); + _notesubgroup__WEBPACK_IMPORTED_MODULE_8__.NoteSubGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.NoteSubGroup], state); + _stringnumber__WEBPACK_IMPORTED_MODULE_12__.StringNumber.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StringNumber], state); + _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Articulation], state); + _ornament__WEBPACK_IMPORTED_MODULE_9__.Ornament.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Ornament], state); + _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Annotation], state); + _chordsymbol__WEBPACK_IMPORTED_MODULE_4__.ChordSymbol.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.ChordSymbol], state); + _bend__WEBPACK_IMPORTED_MODULE_3__.Bend.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Bend], state); + _vibrato__WEBPACK_IMPORTED_MODULE_16__.Vibrato.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Vibrato], state, this); + // Update width of this member context + this.width = state.left_shift + state.right_shift; + this.preFormatted = true; + } + postFormat() { + if (this.postFormatted) + return; + L('Postformatting ModifierContext'); + // If post-formatting is required for an element, add more lines below. + _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.postFormat(this.getMembers(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote)); + } +} +ModifierContext.DEBUG = false; + + + +/***/ }), + +/***/ "./src/multimeasurerest.ts": +/*!*********************************!*\ + !*** ./src/multimeasurerest.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MultiMeasureRest": () => (/* binding */ MultiMeasureRest) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// VexFlow - Music Engraving for HTML5 +// Copyright Mohit Muthanna 2010 +// +// This class implements multiple measure rests. + + + + + + + + +let semibreve_rest; +function get_semibreve_rest() { + if (!semibreve_rest) { + const noteHead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ duration: 'w', note_type: 'r' }); + semibreve_rest = { + glyph_font_scale: noteHead.render_options.glyph_font_scale, + glyph_code: noteHead.glyph_code, + width: noteHead.getWidth(), + }; + } + return semibreve_rest; +} +class MultiMeasureRest extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.MultiMeasureRest; + } + /** + * + * @param number_of_measures Number of measures. + * @param options The options object. + */ + constructor(number_of_measures, options) { + var _a; + super(); + this.xs = { left: NaN, right: NaN }; + this.hasPaddingLeft = false; + this.hasPaddingRight = false; + this.hasLineThickness = false; + this.hasSymbolSpacing = false; + this.number_of_measures = number_of_measures; + // Keep track of whether these four options were provided. + this.hasPaddingLeft = typeof options.padding_left === 'number'; + this.hasPaddingRight = typeof options.padding_right === 'number'; + this.hasLineThickness = typeof options.line_thickness === 'number'; + this.hasSymbolSpacing = typeof options.symbol_spacing === 'number'; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); + this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options); + const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); + this.render_options.number_line += fontLineShift; + } + getXs() { + return this.xs; + } + setStave(stave) { + this.stave = stave; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + drawLine(stave, ctx, left, right, spacingBetweenLines) { + const options = this.render_options; + const y = stave.getYForLine(options.line); + const padding = (right - left) * 0.1; + left += padding; + right -= padding; + let lineThicknessHalf; + if (this.hasLineThickness) { + lineThicknessHalf = options.line_thickness * 0.5; + } + else { + lineThicknessHalf = spacingBetweenLines * 0.25; + } + const serifThickness = options.serif_thickness; + const top = y - spacingBetweenLines; + const bot = y + spacingBetweenLines; + const leftIndented = left + serifThickness; + const rightIndented = right - serifThickness; + const lineTop = y - lineThicknessHalf; + const lineBottom = y + lineThicknessHalf; + ctx.save(); + ctx.beginPath(); + ctx.moveTo(left, top); + ctx.lineTo(leftIndented, top); + ctx.lineTo(leftIndented, lineTop); + ctx.lineTo(rightIndented, lineTop); + ctx.lineTo(rightIndented, top); + ctx.lineTo(right, top); + ctx.lineTo(right, bot); + ctx.lineTo(rightIndented, bot); + ctx.lineTo(rightIndented, lineBottom); + ctx.lineTo(leftIndented, lineBottom); + ctx.lineTo(leftIndented, bot); + ctx.lineTo(left, bot); + ctx.closePath(); + ctx.fill(); + } + drawSymbols(stave, ctx, left, right, spacingBetweenLines) { + const n4 = Math.floor(this.number_of_measures / 4); + const n = this.number_of_measures % 4; + const n2 = Math.floor(n / 2); + const n1 = n % 2; + const options = this.render_options; + // FIXME: TODO: invalidate semibreve_rest at the appropriate time + // (e.g., if the system font settings are changed). + semibreve_rest = undefined; + const rest = get_semibreve_rest(); + const rest_scale = options.semibreve_rest_glyph_scale; + const rest_width = rest.width * (rest_scale / rest.glyph_font_scale); + const glyphs = { + 2: { + width: rest_width * 0.5, + height: spacingBetweenLines, + }, + 1: { + width: rest_width, + }, + }; + /* 10: normal spacingBetweenLines */ + const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10; + const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing; + let x = left + (right - left) * 0.5 - width * 0.5; + const line = options.line; + const yTop = stave.getYForLine(line - 1); + const yMiddle = stave.getYForLine(line); + const yBottom = stave.getYForLine(line + 1); + ctx.save(); + ctx.setStrokeStyle('none'); + ctx.setLineWidth(0); + for (let i = 0; i < n4; ++i) { + ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); + ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height); + x += glyphs[2].width + spacing; + } + for (let i = 0; i < n2; ++i) { + ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); + x += glyphs[2].width + spacing; + } + for (let i = 0; i < n1; ++i) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code); + x += glyphs[1].width + spacing; + } + ctx.restore(); + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const stave = this.checkStave(); + let left = stave.getNoteStartX(); + let right = stave.getNoteEndX(); + // FIXME: getNoteStartX() returns x + 5(barline width) + // getNoteEndX() returns x + width(no barline width) + // See Stave constructor. How do we fix this? + // Here, we subtract the barline width. + const begModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.BEGIN); + if (begModifiers.length === 1 && (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isBarline)(begModifiers[0])) { + left -= begModifiers[0].getWidth(); + } + const options = this.render_options; + if (this.hasPaddingLeft) { + left = stave.getX() + options.padding_left; + } + if (this.hasPaddingRight) { + right = stave.getX() + stave.getWidth() - options.padding_right; + } + this.xs.left = left; + this.xs.right = right; + const spacingBetweenLines = options.spacing_between_lines_px; + if (options.use_symbols) { + this.drawSymbols(stave, ctx, left, right, spacingBetweenLines); + } + else { + this.drawLine(stave, ctx, left, right, spacingBetweenLines); + } + if (options.show_number) { + const timeSpec = '/' + this.number_of_measures; + const timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_5__.TimeSignature(timeSpec, 0, false); + timeSig.point = options.number_glyph_point; + timeSig.setTimeSig(timeSpec); + timeSig.setStave(stave); + timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5); + timeSig.bottomLine = options.number_line; + timeSig.setContext(ctx).draw(); + } + } +} + + +/***/ }), + +/***/ "./src/music.ts": +/*!**********************!*\ + !*** ./src/music.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Music": () => (/* binding */ Music) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + +/** Music implements some standard music theory routines. */ +class Music { + /** Number of an canonical notes (12). */ + static get NUM_TONES() { + return this.canonical_notes.length; + } + /** Names of root notes ('c', 'd',...) */ + static get roots() { + return ['c', 'd', 'e', 'f', 'g', 'a', 'b']; + } + /** Values of the root notes.*/ + static get root_values() { + return [0, 2, 4, 5, 7, 9, 11]; + } + /** Indices of the root notes.*/ + static get root_indices() { + return { + c: 0, + d: 1, + e: 2, + f: 3, + g: 4, + a: 5, + b: 6, + }; + } + /** Names of canonical notes ('c', 'c#', 'd',...). */ + static get canonical_notes() { + return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b']; + } + /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */ + static get diatonic_intervals() { + return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave']; + } + /** NoteAccidental associated to diatonic intervals. */ + static get diatonic_accidentals() { + return { + unison: { note: 0, accidental: 0 }, + m2: { note: 1, accidental: -1 }, + M2: { note: 1, accidental: 0 }, + m3: { note: 2, accidental: -1 }, + M3: { note: 2, accidental: 0 }, + p4: { note: 3, accidental: 0 }, + dim5: { note: 4, accidental: -1 }, + p5: { note: 4, accidental: 0 }, + m6: { note: 5, accidental: -1 }, + M6: { note: 5, accidental: 0 }, + b7: { note: 6, accidental: -1 }, + M7: { note: 6, accidental: 0 }, + octave: { note: 7, accidental: 0 }, + }; + } + /** Semitones shift associated to intervals .*/ + static get intervals() { + return { + u: 0, + unison: 0, + m2: 1, + b2: 1, + min2: 1, + S: 1, + H: 1, + 2: 2, + M2: 2, + maj2: 2, + T: 2, + W: 2, + m3: 3, + b3: 3, + min3: 3, + M3: 4, + 3: 4, + maj3: 4, + 4: 5, + p4: 5, + '#4': 6, + b5: 6, + aug4: 6, + dim5: 6, + 5: 7, + p5: 7, + '#5': 8, + b6: 8, + aug5: 8, + 6: 9, + M6: 9, + maj6: 9, + b7: 10, + m7: 10, + min7: 10, + dom7: 10, + M7: 11, + maj7: 11, + 8: 12, + octave: 12, + }; + } + /** Semitones shifts associated with scales. */ + static get scales() { + return { + major: [2, 2, 1, 2, 2, 2, 1], + minor: [2, 1, 2, 2, 1, 2, 2], + ionian: [2, 2, 1, 2, 2, 2, 1], + dorian: [2, 1, 2, 2, 2, 1, 2], + phyrgian: [1, 2, 2, 2, 1, 2, 2], + lydian: [2, 2, 2, 1, 2, 2, 1], + mixolydian: [2, 2, 1, 2, 2, 1, 2], + aeolian: [2, 1, 2, 2, 1, 2, 2], + locrian: [1, 2, 2, 1, 2, 2, 2], + }; + } + /** Scales associated with m (minor) and M (major). */ + static get scaleTypes() { + return { + M: Music.scales.major, + m: Music.scales.minor, + }; + } + /** Accidentals abbreviations. */ + static get accidentals() { + return ['bb', 'b', 'n', '#', '##']; + } + /** Note values. */ + static get noteValues() { + return { + c: { root_index: 0, int_val: 0 }, + cn: { root_index: 0, int_val: 0 }, + 'c#': { root_index: 0, int_val: 1 }, + 'c##': { root_index: 0, int_val: 2 }, + cb: { root_index: 0, int_val: 11 }, + cbb: { root_index: 0, int_val: 10 }, + d: { root_index: 1, int_val: 2 }, + dn: { root_index: 1, int_val: 2 }, + 'd#': { root_index: 1, int_val: 3 }, + 'd##': { root_index: 1, int_val: 4 }, + db: { root_index: 1, int_val: 1 }, + dbb: { root_index: 1, int_val: 0 }, + e: { root_index: 2, int_val: 4 }, + en: { root_index: 2, int_val: 4 }, + 'e#': { root_index: 2, int_val: 5 }, + 'e##': { root_index: 2, int_val: 6 }, + eb: { root_index: 2, int_val: 3 }, + ebb: { root_index: 2, int_val: 2 }, + f: { root_index: 3, int_val: 5 }, + fn: { root_index: 3, int_val: 5 }, + 'f#': { root_index: 3, int_val: 6 }, + 'f##': { root_index: 3, int_val: 7 }, + fb: { root_index: 3, int_val: 4 }, + fbb: { root_index: 3, int_val: 3 }, + g: { root_index: 4, int_val: 7 }, + gn: { root_index: 4, int_val: 7 }, + 'g#': { root_index: 4, int_val: 8 }, + 'g##': { root_index: 4, int_val: 9 }, + gb: { root_index: 4, int_val: 6 }, + gbb: { root_index: 4, int_val: 5 }, + a: { root_index: 5, int_val: 9 }, + an: { root_index: 5, int_val: 9 }, + 'a#': { root_index: 5, int_val: 10 }, + 'a##': { root_index: 5, int_val: 11 }, + ab: { root_index: 5, int_val: 8 }, + abb: { root_index: 5, int_val: 7 }, + b: { root_index: 6, int_val: 11 }, + bn: { root_index: 6, int_val: 11 }, + 'b#': { root_index: 6, int_val: 0 }, + 'b##': { root_index: 6, int_val: 1 }, + bb: { root_index: 6, int_val: 10 }, + bbb: { root_index: 6, int_val: 9 }, + }; + } + isValidNoteValue(note) { + return note >= 0 && note < Music.canonical_notes.length; + } + isValidIntervalValue(interval) { + return interval >= 0 && interval < Music.diatonic_intervals.length; + } + /** Return root and accidental associated to a note. */ + getNoteParts(noteString) { + if (!noteString || noteString.length < 1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + if (noteString.length > 3) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + const note = noteString.toLowerCase(); + const regex = /^([cdefgab])(b|bb|n|#|##)?$/; + const match = regex.exec(note); + if (match !== null) { + const root = match[1]; + const accidental = match[2]; + return { + root, + accidental, + }; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + } + /** Return root, accidental and type associated to a key. */ + getKeyParts(keyString) { + if (!keyString || keyString.length < 1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid key: ' + keyString); + } + const key = keyString.toLowerCase(); + // Support Major, Minor, Melodic Minor, and Harmonic Minor key types. + const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/; + const match = regex.exec(key); + if (match !== null) { + const root = match[1]; + const accidental = match[2]; + let type = match[3]; + // Unspecified type implies major + if (!type) + type = 'M'; + return { + root, + accidental, + type, + }; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid key: ${keyString}`); + } + } + /** Note value associated to a note name. */ + getNoteValue(noteString) { + const value = Music.noteValues[noteString]; + if (value === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note name: ${noteString}`); + } + return value.int_val; + } + /** Interval value associated to an interval name. */ + getIntervalValue(intervalString) { + const value = Music.intervals[intervalString]; + if (value === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`); + } + return value; + } + /** Canonical note name associated to a value. */ + getCanonicalNoteName(noteValue) { + if (!this.isValidNoteValue(noteValue)) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note value: ${noteValue}`); + } + return Music.canonical_notes[noteValue]; + } + /** Interval name associated to a value. */ + getCanonicalIntervalName(intervalValue) { + if (!this.isValidIntervalValue(intervalValue)) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`); + } + return Music.diatonic_intervals[intervalValue]; + } + /** + * Given a note, interval, and interval direction, produce the relative note. + */ + getRelativeNoteValue(noteValue, intervalValue, direction = 1) { + if (direction !== 1 && direction !== -1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`); + } + let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES; + if (sum < 0) + sum += Music.NUM_TONES; + return sum; + } + /** + * Given a root and note value, produce the relative note name. + */ + getRelativeNoteName(root, noteValue) { + const parts = this.getNoteParts(root); + const rootValue = this.getNoteValue(parts.root); + let interval = noteValue - rootValue; + if (Math.abs(interval) > Music.NUM_TONES - 3) { + let multiplier = 1; + if (interval > 0) + multiplier = -1; + // Possibly wrap around. (Add +1 for modulo operator) + const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier; + if (Math.abs(reverse_interval) > 2) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); + } + else { + interval = reverse_interval; + } + } + if (Math.abs(interval) > 2) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); + } + let relativeNoteName = parts.root; + if (interval > 0) { + for (let i = 1; i <= interval; ++i) { + relativeNoteName += '#'; + } + } + else if (interval < 0) { + for (let i = -1; i >= interval; --i) { + relativeNoteName += 'b'; + } + } + return relativeNoteName; + } + /** + * Return scale tones, given intervals. Each successive interval is + * relative to the previous one, e.g., Major Scale: + * + * TTSTTTS = [2,2,1,2,2,2,1] + * + * When used with key = 0, returns C scale (which is isomorphic to + * interval list). + */ + getScaleTones(key, intervals) { + const tones = [key]; + let nextNote = key; + for (let i = 0; i < intervals.length; i++) { + nextNote = this.getRelativeNoteValue(nextNote, intervals[i]); + if (nextNote !== key) + tones.push(nextNote); + } + return tones; + } + /** + * Return the interval of a note, given a diatonic scale. + * e.g., given the scale C, and the note E, returns M3. + */ + getIntervalBetween(note1, note2, direction = 1) { + if (direction !== 1 && direction !== -1) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`); + } + if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`); + } + let difference = direction === 1 ? note2 - note1 : note1 - note2; + if (difference < 0) + difference += Music.NUM_TONES; + return difference; + } + /** + * Create a scale map that represents the pitch state for a + * `keySignature`. For example, passing a `G` to `keySignature` would + * return a scale map with every note naturalized except for `F` which + * has an `F#` state. + */ + createScaleMap(keySignature) { + const keySigParts = this.getKeyParts(keySignature); + if (!keySigParts.type) + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: undefined'); + const scaleName = Music.scaleTypes[keySigParts.type]; + let keySigString = keySigParts.root; + if (keySigParts.accidental) + keySigString += keySigParts.accidental; + if (!scaleName) + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature); + const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName); + const noteLocation = Music.root_indices[keySigParts.root]; + const scaleMap = {}; + for (let i = 0; i < Music.roots.length; ++i) { + const index = (noteLocation + i) % Music.roots.length; + const rootName = Music.roots[index]; + let noteName = this.getRelativeNoteName(rootName, scale[i]); + if (noteName.length === 1) { + noteName += 'n'; + } + scaleMap[rootName] = noteName; + } + return scaleMap; + } +} + + +/***/ }), + +/***/ "./src/note.ts": +/*!*********************!*\ + !*** ./src/note.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Note": () => (/* binding */ Note) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickable */ "./src/tickable.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +/** + * Note implements an abstract interface for notes and chords that + * are rendered on a stave. Notes have some common properties: All of them + * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.) + * + * Some notes have stems, heads, dots, etc. Most notational elements that + * surround a note are called *modifiers*, and every note has an associated + * array of them. All notes also have a rendering context and belong to a stave. + */ +class Note extends _tickable__WEBPACK_IMPORTED_MODULE_3__.Tickable { + ////////////////////////////////////////////////////////////////////////////////////////////////// + // STATIC MEMBERS + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Note; + } + /** Debug helper. Displays various note metrics for the given note. */ + static plotMetrics(ctx, note, yPos) { + const metrics = note.getMetrics(); + const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx; + const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx; + const xAbs = note.getAbsoluteX(); + const xPost1 = note.getAbsoluteX() + metrics.notePx; + const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx; + const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx; + const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0); + const xWidth = xEnd - xStart; + ctx.save(); + ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8); + ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos); + const y = yPos + 7; + function stroke(x1, x2, color, yy = y) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(3); + ctx.moveTo(x1 + note.getXShift(), yy); + ctx.lineTo(x2 + note.getXShift(), yy); + ctx.stroke(); + } + stroke(xStart, xPre1, 'red'); + stroke(xPre1, xAbs, '#999'); + stroke(xAbs, xPost1, 'green'); + stroke(xPost1, xPost2, '#999'); + stroke(xPost2, xEnd, 'red'); + stroke(xEnd, xFreedomRight, '#DD0'); + stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift + (0,_rendercontext__WEBPACK_IMPORTED_MODULE_1__.drawDot)(ctx, xAbs + note.getXShift(), y, 'blue'); + const formatterMetrics = note.getFormatterMetrics(); + if (formatterMetrics.iterations > 0) { + const spaceDeviation = formatterMetrics.space.deviation; + const prefix = spaceDeviation >= 0 ? '+' : ''; + ctx.setFillStyle('red'); + ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10); + } + ctx.restore(); + } + static parseDuration(durationString) { + if (!durationString) { + return undefined; + } + const regexp = /(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/; + const result = regexp.exec(durationString); + if (!result) { + return undefined; + } + const duration = result[1]; + const dots = result[2].length; + const type = result[3] || 'n'; + return { duration, dots, type }; + } + static parseNoteStruct(noteStruct) { + // Preserve backwards-compatibility + const durationProps = Note.parseDuration(noteStruct.duration); + if (!durationProps) { + return undefined; + } + // If specified type is invalid, return undefined. + let type = noteStruct.type; + if (type && !_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.validTypes[type]) { + return undefined; + } + // If no type specified, check duration or custom types + const customTypes = []; + if (!type) { + type = durationProps.type || 'n'; + // If we have keys, try and check if we've got a custom glyph + if (noteStruct.keys !== undefined) { + noteStruct.keys.forEach((k, i) => { + const result = k.split('/'); + // We have a custom glyph specified after the note eg. /X2 + customTypes[i] = (result && result.length === 3 ? result[2] : type); + }); + } + } + // Calculate the tick duration of the note + let ticks = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.durationToTicks(durationProps.duration); + if (!ticks) { + return undefined; + } + // Are there any dots? + const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots; + if (typeof dots !== 'number') { + return undefined; + } + // Add ticks as necessary depending on the numbr of dots + let currentTicks = ticks; + for (let i = 0; i < dots; i++) { + if (currentTicks <= 1) + return undefined; + currentTicks = currentTicks / 2; + ticks += currentTicks; + } + return { + duration: durationProps.duration, + type, + customTypes, + dots, + ticks, + }; + } + /** + * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for + * positioning and layout. + * + * @param noteStruct To create a new note you need to provide a `noteStruct`. + */ + constructor(noteStruct) { + super(); + if (!noteStruct) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.'); + } + /** Parses `noteStruct` and get note properties. */ + const parsedNoteStruct = Note.parseNoteStruct(noteStruct); + if (!parsedNoteStruct) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`); + } + // Set note properties from parameters. + this.keys = noteStruct.keys || []; + // per-pitch properties + this.keyProps = []; + this.duration = parsedNoteStruct.duration; + this.noteType = parsedNoteStruct.type; + this.customTypes = parsedNoteStruct.customTypes; + if (noteStruct.duration_override) { + // Custom duration + this.setDuration(noteStruct.duration_override); + } + else { + // Default duration + this.setIntrinsicTicks(parsedNoteStruct.ticks); + } + this.modifiers = []; + // Get the glyph code for this note from the font. + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, this.noteType); + this.customGlyphs = this.customTypes.map((t) => _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, t)); + // Note to play for audio players. + this.playNote = undefined; + // Positioning contexts used by the Formatter. + this.ignore_ticks = false; + // Positioning variables + this.width = 0; // Width in pixels calculated after preFormat + this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head + this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head + this.x_shift = 0; // X shift from tick context X + this.ys = []; // list of y coordinates for each note + // we need to hold on to these for ties and beams. + if (noteStruct.align_center) { + this.setCenterAlignment(noteStruct.align_center); + } + // The render surface. + this.render_options = { + annotation_spacing: 5, + glyph_font_scale: 1, + stroke_px: 1, + scale: 1, + font: '', + y_shift: 0, + }; + } + /** + * Get the play note, which is arbitrary data that can be used by an + * audio player. + */ + getPlayNote() { + return this.playNote; + } + /** + * Set the play note, which is arbitrary data that can be used by an + * audio player. + */ + setPlayNote(note) { + this.playNote = note; + return this; + } + /** + * @returns true if this note is a type of rest. + * + * Rests don't have pitches, but take up space in the score. + * Subclasses should override this default implementation. + */ + isRest() { + return false; + } + /** Add stroke. */ + addStroke(index, stroke) { + stroke.setNote(this); + stroke.setIndex(index); + this.modifiers.push(stroke); + this.preFormatted = false; + return this; + } + /** Get the target stave. */ + getStave() { + return this.stave; + } + /** Check and get the target stave. */ + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + /** Set the target stave. */ + setStave(stave) { + this.stave = stave; + this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed. + this.setContext(this.stave.getContext()); + return this; + } + /** Get spacing to the left of the notes. */ + getLeftDisplacedHeadPx() { + return this.leftDisplacedHeadPx; + } + /** Get spacing to the right of the notes. */ + getRightDisplacedHeadPx() { + return this.rightDisplacedHeadPx; + } + /** Set spacing to the left of the notes. */ + setLeftDisplacedHeadPx(x) { + this.leftDisplacedHeadPx = x; + return this; + } + /** Set spacing to the right of the notes. */ + setRightDisplacedHeadPx(x) { + this.rightDisplacedHeadPx = x; + return this; + } + /** True if this note has no duration (e.g., bar notes, spacers, etc.). */ + shouldIgnoreTicks() { + return this.ignore_ticks; + } + /** Get the stave line number for the note. */ + // eslint-disable-next-line + getLineNumber(isTopNote) { + return 0; + } + /** Get the stave line number for rest. */ + getLineForRest() { + return 0; + } + /** + * @deprecated Use `getGlyphProps()` instead. + */ + // eslint-disable-next-line + getGlyph() { + return this.glyphProps; + } + /** Get the glyph associated with this note. */ + getGlyphProps() { + return this.glyphProps; + } + /** Get the glyph width. */ + getGlyphWidth() { + return this.glyphProps.getWidth(this.render_options.glyph_font_scale); + } + /** + * Set Y positions for this note. Each Y value is associated with + * an individual pitch/key within the note/chord. + */ + setYs(ys) { + this.ys = ys; + return this; + } + /** + * Get Y positions for this note. Each Y value is associated with + * an individual pitch/key within the note/chord. + */ + getYs() { + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoYValues', 'No Y-values calculated for this note.'); + } + return this.ys; + } + /** + * Get the Y position of the space above the stave onto which text can + * be rendered. + */ + getYForTopText(text_line) { + return this.checkStave().getYForTopText(text_line); + } + /** Return the voice that this note belongs in. */ + getVoice() { + if (!this.voice) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoVoice', 'Note has no voice.'); + return this.voice; + } + /** Attach this note to `voice`. */ + setVoice(voice) { + this.voice = voice; + this.preFormatted = false; + return this; + } + /** Get the `TickContext` for this note. */ + getTickContext() { + return this.checkTickContext(); + } + /** Set the `TickContext` for this note. */ + setTickContext(tc) { + this.tickContext = tc; + this.preFormatted = false; + return this; + } + /** Accessor to duration. */ + getDuration() { + return this.duration; + } + /** Accessor to isDotted. */ + isDotted() { + return this.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Dot).length > 0; + } + /** Accessor to hasStem. */ + hasStem() { + return false; + } + /** Accessor to note type. */ + getNoteType() { + return this.noteType; + } + /** Get the beam. */ + getBeam() { + return this.beam; + } + /** Check and get the beam. */ + checkBeam() { + return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.beam, 'NoBeam', 'No beam attached to instance'); + } + /** Check it has a beam. */ + hasBeam() { + return this.beam != undefined; + } + /** Set the beam. */ + setBeam(beam) { + this.beam = beam; + return this; + } + /** + * Attach a modifier to this note. + * @param modifier the Modifier to add. + * @param index of the key to modify. + * @returns this + */ + addModifier(modifier, index = 0) { + const signature = 'Note.addModifier(modifier: Modifier, index: number=0)'; + // Backwards compatibility with 3.0.9. + if (typeof index === 'string') { + index = parseInt(index); + // eslint-disable-next-line + console.warn(signature + ' expected a number for `index`, but received a string.'); + } + // Some versions of VexFlow had the two parameters reversed. + // Check here and throw an error if the argument types are not correct. + if (typeof modifier !== 'object' || typeof index !== 'number') { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.'); + } + modifier.setNote(this); + modifier.setIndex(index); + super.addModifier(modifier); + return this; + } + /** Get all modifiers of a specific type in `this.modifiers`. */ + getModifiersByType(type) { + return this.modifiers.filter((modifier) => modifier.getCategory() === type); + } + /** Get the coordinates for where modifiers begin. */ + // eslint-disable-next-line + getModifierStartXY(position, index, options) { + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + return { + x: this.getAbsoluteX(), + y: this.ys[0], + }; + } + getRightParenthesisPx(index) { + const props = this.getKeyProps()[index]; + return props.displaced ? this.getRightDisplacedHeadPx() : 0; + } + getLeftParenthesisPx(index) { + const props = this.getKeyProps()[index]; + return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift; + } + getFirstDotPx() { + let px = this.getRightDisplacedHeadPx(); + if (this.checkModifierContext().getMembers('Parenthesis').length !== 0) + px += _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'); + return px; + } + /** Get the metrics for this note. */ + getMetrics() { + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', "Can't call getMetrics on an unformatted note."); + } + const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0; + const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0; + const width = this.getWidth(); + const glyphWidth = this.getGlyphWidth(); + const notePx = width - + modLeftPx - // subtract left modifiers + modRightPx - // subtract right modifiers + this.leftDisplacedHeadPx - // subtract left displaced head + this.rightDisplacedHeadPx; // subtract right displaced head + // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory. + return { + width, + glyphWidth, + notePx, + // Modifier spacing. + modLeftPx, + modRightPx, + // Displaced note head on left or right. + leftDisplacedHeadPx: this.leftDisplacedHeadPx, + rightDisplacedHeadPx: this.rightDisplacedHeadPx, + glyphPx: 0, + }; + } + /** + * Get the absolute `X` position of this note's tick context. This + * excludes x_shift, so you'll need to factor it in if you're + * looking for the post-formatted x-position. + */ + getAbsoluteX() { + const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); + // Position note to left edge of tick context. + let x = tickContext.getX(); + if (this.stave) { + x += this.stave.getNoteStartX() + _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('stave.padding'); + } + if (this.isCenterAligned()) { + x += this.getCenterXShift(); + } + return x; + } + /** Get point for notes. */ + static getPoint(size) { + // for sizes other than 'default', note is 2/3 of the default value + return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 5) * 3; + } + /** Get the direction of the stem. */ + getStemDirection() { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + } + /** Get the top and bottom `y` values of the stem. */ + getStemExtents() { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + } + /** Get the `x` coordinate to the right of the note. */ + getTieRightX() { + let tieStartX = this.getAbsoluteX(); + const note_glyph_width = this.glyphProps.getWidth(); + tieStartX += note_glyph_width / 2; + tieStartX += -this.width / 2 + this.width + 2; + return tieStartX; + } + /** Get the `x` coordinate to the left of the note. */ + getTieLeftX() { + let tieEndX = this.getAbsoluteX(); + const note_glyph_width = this.glyphProps.getWidth(); + tieEndX += note_glyph_width / 2; + tieEndX -= this.width / 2 + 2; + return tieEndX; + } + // Get the pitches in the note + getKeys() { + return this.keys; + } + // Get the properties for all the keys in the note + getKeyProps() { + return this.keyProps; + } +} + + +/***/ }), + +/***/ "./src/notehead.ts": +/*!*************************!*\ + !*** ./src/notehead.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NoteHead": () => (/* binding */ NoteHead) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (NoteHead.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.NoteHead', args); +} +/** + * Draw slashnote head manually. No glyph exists for this. + * @param ctx the Canvas context + * @param duration the duration of the note. ex: "4" + * @param x the x coordinate to draw at + * @param y the y coordinate to draw at + * @param stem_direction the direction of the stem + */ +function drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) { + const width = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.SLASH_NOTEHEAD_WIDTH; + ctx.save(); + ctx.setLineWidth(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH); + let fill = false; + if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToNumber(duration) > 2) { + fill = true; + } + if (!fill) + x -= (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH / 2) * stem_direction; + ctx.beginPath(); + ctx.moveTo(x, y + staveSpace); + ctx.lineTo(x, y + 1); + ctx.lineTo(x + width, y - staveSpace); + ctx.lineTo(x + width, y); + ctx.lineTo(x, y + staveSpace); + ctx.closePath(); + if (fill) { + ctx.fill(); + } + else { + ctx.stroke(); + } + if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToFraction(duration).equals(0.5)) { + const breve_lines = [-3, -1, width + 1, width + 3]; + for (let i = 0; i < breve_lines.length; i++) { + ctx.beginPath(); + ctx.moveTo(x + breve_lines[i], y - 10); + ctx.lineTo(x + breve_lines[i], y + 11); + ctx.stroke(); + } + } + ctx.restore(); +} +/** + * `NoteHeads` are typically not manipulated + * directly, but used internally in `StaveNote`. + * + * See `tests/notehead_tests.ts` for usage examples. + */ +class NoteHead extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.NoteHead; + } + constructor(noteStruct) { + super(noteStruct); + this.custom_glyph = false; + this.stem_up_x_offset = 0; + this.stem_down_x_offset = 0; + this.index = noteStruct.index; + this.x = noteStruct.x || 0; + this.y = noteStruct.y || 0; + if (noteStruct.note_type) + this.noteType = noteStruct.note_type; + this.displaced = noteStruct.displaced || false; + this.stem_direction = noteStruct.stem_direction || _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; + this.line = noteStruct.line || 0; + // Get glyph code based on duration and note type. This could be + // regular notes, rests, or other custom codes. + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.getGlyphProps(this.duration, this.noteType); + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + // Swap out the glyph with ledger lines + if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) { + this.glyphProps.code_head = this.glyphProps.ledger_code_head; + } + this.glyph_code = this.glyphProps.code_head; + this.x_shift = noteStruct.x_shift || 0; + if (noteStruct.custom_glyph_code) { + this.custom_glyph = true; + this.glyph_code = noteStruct.custom_glyph_code; + this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0; + this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0; + } + this.setStyle(noteStruct.style); + this.slashed = noteStruct.slashed || false; + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // font size for note heads + glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE }); + this.setWidth(this.custom_glyph && + !this.glyph_code.startsWith('noteheadSlashed') && + !this.glyph_code.startsWith('noteheadCircled') + ? _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale) + : this.glyphProps.getWidth(this.render_options.glyph_font_scale)); + } + /** Get the width of the notehead. */ + getWidth() { + return this.width; + } + /** Determine if the notehead is displaced. */ + isDisplaced() { + return this.displaced === true; + } + /** Set the X coordinate. */ + setX(x) { + this.x = x; + return this; + } + /** Get the Y coordinate. */ + getY() { + return this.y; + } + /** Set the Y coordinate. */ + setY(y) { + this.y = y; + return this; + } + /** Get the stave line the notehead is placed on. */ + getLine() { + return this.line; + } + /** Set the stave line the notehead is placed on. */ + setLine(line) { + this.line = line; + return this; + } + /** Get the canvas `x` coordinate position of the notehead. */ + getAbsoluteX() { + // If the note has not been preformatted, then get the static x value + // Otherwise, it's been formatted and we should use it's x value relative + // to its tick context + const x = !this.preFormatted ? this.x : super.getAbsoluteX(); + // For a more natural displaced notehead, we adjust the displacement amount + // by half the stem width in order to maintain a slight overlap with the stem + const displacementStemAdjustment = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); + const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction; + const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction; + return (x + + fontShift + + (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0)); + } + /** Get the `BoundingBox` for the `NoteHead`. */ + getBoundingBox() { + const spacing = this.checkStave().getSpacingBetweenLines(); + const half_spacing = spacing / 2; + const min_y = this.y - half_spacing; + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing); + } + /** Set notehead to a provided `stave`. */ + setStave(stave) { + const line = this.getLine(); + this.stave = stave; + if (this.stave) { + this.setY(this.stave.getYForNote(line)); + this.setContext(this.stave.getContext()); + } + return this; + } + /** Pre-render formatting. */ + preFormat() { + if (this.preFormatted) + return this; + const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx; + this.setWidth(width); + this.preFormatted = true; + return this; + } + /** Draw the notehead. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let head_x = this.getAbsoluteX(); + if (this.custom_glyph) { + // head_x += this.x_shift; + head_x += + this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? this.stem_up_x_offset + + (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0) + : this.stem_down_x_offset; + } + const y = this.y; + L("Drawing note head '", this.noteType, this.duration, "' at", head_x, y); + // Begin and end positions for head. + const stem_direction = this.stem_direction; + const glyph_font_scale = this.render_options.glyph_font_scale; + const categorySuffix = `${this.glyph_code}Stem${stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? 'Up' : 'Down'}`; + if (this.noteType === 's') { + const staveSpace = this.checkStave().getSpacingBetweenLines(); + drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace); + } + else { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, { + category: `noteHead.${categorySuffix}`, + }); + } + } +} +/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */ +NoteHead.DEBUG = false; + + + +/***/ }), + +/***/ "./src/notesubgroup.ts": +/*!*****************************!*\ + !*** ./src/notesubgroup.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NoteSubGroup": () => (/* binding */ NoteSubGroup) +/* harmony export */ }); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2016 +// +// ## Description +// +// This file implements `NoteSubGroup` which is used to format and +// render notes as a `Modifier` +// ex) ClefNote, TimeSigNote and BarNote. + + + + + +class NoteSubGroup extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.NoteSubGroup; + } + // Arrange groups inside a `ModifierContext` + static format(groups, state) { + if (!groups || groups.length === 0) + return false; + let width = 0; + for (let i = 0; i < groups.length; ++i) { + const group = groups[i]; + group.preFormat(); + width += group.getWidth(); + } + state.left_shift += width; + return true; + } + constructor(subNotes) { + super(); + this.preFormatted = false; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; + this.subNotes = subNotes; + this.subNotes.forEach((subNote) => { + subNote.setIgnoreTicks(false); + }); + this.width = 0; + this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_0__.Formatter(); + this.voice = new _voice__WEBPACK_IMPORTED_MODULE_4__.Voice({ + num_beats: 4, + beat_value: 4, + resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION, + }).setStrict(false); + this.voice.addTickables(this.subNotes); + } + preFormat() { + if (this.preFormatted) + return; + this.formatter.joinVoices([this.voice]).format([this.voice], 0); + this.setWidth(this.formatter.getMinTotalWidth()); + this.preFormatted = true; + } + setWidth(width) { + this.width = width; + return this; + } + getWidth() { + return this.width; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + this.alignSubNotesWithNote(this.subNotes, note); // Modifier function + this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle()); + } +} + + +/***/ }), + +/***/ "./src/ornament.ts": +/*!*************************!*\ + !*** ./src/ornament.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Ornament": () => (/* binding */ Ornament) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Cyril Silverman +// MIT License + + + + + + + +// eslint-disable-next-line +function L(...args) { + if (Ornament.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Ornament', args); +} +/** + * Ornament implements ornaments as modifiers that can be + * attached to notes. The complete list of ornaments is available in + * `tables.ts` under `Vex.Flow.ornamentCodes`. + * + * See `tests/ornament_tests.ts` for usage examples. + */ +class Ornament extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + /** Ornaments category string. */ + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Ornament; + } + static get minPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** Arrange ornaments inside `ModifierContext` */ + static format(ornaments, state) { + if (!ornaments || ornaments.length === 0) + return false; + let width = 0; // width is used by ornaments, which are always centered on the note head + let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately + let left_shift = state.left_shift; + let yOffset = 0; + for (let i = 0; i < ornaments.length; ++i) { + const ornament = ornaments[i]; + const increment = 2; + if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) { + ornament.x_shift += right_shift + 2; + } + if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) { + ornament.x_shift -= left_shift + 2; + } + if (ornament.reportedWidth && ornament.x_shift < 0) { + left_shift += ornament.reportedWidth; + } + else if (ornament.reportedWidth && ornament.x_shift >= 0) { + right_shift += ornament.reportedWidth + Ornament.minPadding; + } + else { + width = Math.max(ornament.getWidth(), width); + } + // articulations above/below the line can be stacked. + if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) { + // Unfortunately we don't know the stem direction. So we base it + // on the line number, but also allow it to be overridden. + const ornamentNote = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(ornament.note, 'NoAttachedNote'); + if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { + state.top_text_line += increment; + ornament.y_shift += yOffset; + yOffset -= ornament.glyph.bbox.getH(); + } + else { + state.text_line += increment; + ornament.y_shift += yOffset; + yOffset += ornament.glyph.bbox.getH(); + } + } + else { + if (ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { + ornament.setTextLine(state.top_text_line); + state.top_text_line += increment; + } + else { + ornament.setTextLine(state.text_line); + state.text_line += increment; + } + } + } + // Note: 'legit' ornaments don't consider other modifiers when calculating their + // X position, but jazz ornaments sometimes need to. + state.left_shift = left_shift + width / 2; + state.right_shift = right_shift + width / 2; + return true; + } + /** + * ornamentNoteTransition means the jazz ornament represents an effect from one note to another, + * these are generally on the top of the staff. + */ + static get ornamentNoteTransition() { + return ['flip', 'jazzTurn', 'smear']; + } + /** + * ornamentAttack indicates something that happens in the attach, placed before the note and + * any accidentals + */ + static get ornamentAttack() { + return ['scoop']; + } + /** + * The ornament is aligned based on the note head, but without regard to whether the + * stem goes up or down. + */ + static get ornamentAlignWithNoteHead() { + return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop']; + } + /** + * An ornament that happens on the release of the note, generally placed after the + * note and overlapping the next beat/measure.. + */ + static get ornamentRelease() { + return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip']; + } + /** ornamentArticulation goes above/below the note based on space availablity */ + static get ornamentArticulation() { + return ['bend', 'plungerClosed', 'plungerOpen']; + } + /** + * Legacy ornaments have hard-coded metrics. If additional ornament types are + * added, get their metrics here. + */ + getMetrics() { + const ornamentMetrics = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().ornament; + if (!ornamentMetrics) + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `ornament missing`); + return ornamentMetrics[this.ornament.code]; + } + /** + * Create a new ornament of type `type`, which is an entry in + * `Vex.Flow.ornamentCodes` in `tables.ts`. + */ + constructor(type) { + super(); + this.type = type; + this.delayed = false; + this.render_options = { + font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, + accidentalLowerPadding: 3, + accidentalUpperPadding: 3, + }; + this.ornament = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.ornamentCodes(this.type); + // new ornaments have their origin at the origin, and have more specific + // metrics. Legacy ornaments do some + // x scaling, and have hard-coded metrics + const metrics = this.getMetrics(); + // some jazz ornaments are above or below depending on stem direction. + this.adjustForStemDirection = false; + // some jazz ornaments like falls are supposed to overlap with future bars + // and so we report a different width than they actually take up. + this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0; + this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0; + this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0; + if (!this.ornament) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`); + } + this.x_shift = metrics ? metrics.xOffset : 0; + this.y_shift = metrics ? metrics.yOffset : 0; + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.ornament.code, this.render_options.font_scale, { + category: `ornament.${this.ornament.code}`, + }); + // Is this a jazz ornament that goes between this note and the next note. + if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { + this.delayed = true; + } + // Legacy ornaments need this. I don't know why, but horizontal spacing issues + // happen if I don't set it. + if (!metrics) { + this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift + } + } + /** Set whether the ornament is to be delayed. */ + setDelayed(delayed) { + this.delayed = delayed; + return this; + } + /** Set the upper accidental for the ornament. */ + setUpperAccidental(accid) { + const scale = this.render_options.font_scale / 1.3; + this.accidentalUpper = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale); + this.accidentalUpper.setOrigin(0.5, 1.0); + return this; + } + /** Set the lower accidental for the ornament. */ + setLowerAccidental(accid) { + const scale = this.render_options.font_scale / 1.3; + this.accidentalLower = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale); + this.accidentalLower.setOrigin(0.5, 1.0); + return this; + } + /** Render ornament in position next to note. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stemDir = note.getStemDirection(); + const stave = note.checkStave(); + this.applyStyle(); + ctx.openGroup('ornament', this.getAttribute('id')); + // Get stem extents + const stemExtents = note.checkStem().getExtents(); + let y = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? stemExtents.baseY : stemExtents.topY; + // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { + if (note.hasStem()) { + if (stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + y = stave.getYForTopText(this.text_line); + } + } + else { + // Without a stem + y = stave.getYForTopText(this.text_line); + } + } + const isPlacedOnNoteheadSide = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; + const spacing = stave.getSpacingBetweenLines(); + let lineSpacing = 1; + // Beamed stems are longer than quarter note stems, adjust accordingly + if (!isPlacedOnNoteheadSide && note.hasBeam()) { + lineSpacing += 0.5; + } + const totalSpacing = spacing * (this.text_line + lineSpacing); + const glyphYBetweenLines = y - totalSpacing; + // Get initial coordinates for the modifier position + const start = note.getModifierStartXY(this.position, this.index); + let glyphX = start.x; + // If the ornament is aligned with the note head, don't consider the stave y + // but use the 'natural' modifier y + let glyphY = this.ornamentAlignWithNoteHead + ? start.y + : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines); + glyphY += this.y_shift; + // Ajdust x position if ornament is delayed + if (this.delayed) { + let delayXShift = 0; + const startX = glyphX - (stave.getX() - 10); + if (this.delayXShift !== undefined) { + delayXShift = this.delayXShift; + } + else { + delayXShift += this.glyph.getMetrics().width / 2; + const nextContext = _tickcontext__WEBPACK_IMPORTED_MODULE_4__.TickContext.getNextContext(note.getTickContext()); + if (nextContext) { + delayXShift += (nextContext.getX() - startX) * 0.5; + } + else { + delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5; + } + this.delayXShift = delayXShift; + } + glyphX += delayXShift; + } + L('Rendering ornament: ', this.ornament, glyphX, glyphY); + if (this.accidentalLower) { + this.accidentalLower.render(ctx, glyphX, glyphY); + glyphY -= this.accidentalLower.getMetrics().height; + glyphY -= this.render_options.accidentalLowerPadding; + } + if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) { + glyphY += this.stemUpYOffset; + } + if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { + glyphY = note.checkStave().getBoundingBox().getY() + 40; + } + this.glyph.render(ctx, glyphX + this.x_shift, glyphY); + if (this.accidentalUpper) { + glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding; + this.accidentalUpper.render(ctx, glyphX, glyphY); + } + ctx.closeGroup(); + this.restoreStyle(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */ +Ornament.DEBUG = false; + + + +/***/ }), + +/***/ "./src/parenthesis.ts": +/*!****************************!*\ + !*** ./src/parenthesis.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Parenthesis": () => (/* binding */ Parenthesis) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Rodrigo Vilar +// MIT License + + + + + +/** Parenthesis implements parenthesis modifiers for notes. */ +class Parenthesis extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Parenthesis; + } + /** Add parentheses to the notes. */ + static buildAndAttach(notes) { + for (const note of notes) { + for (let i = 0; i < note.keys.length; i++) { + note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT), i); + note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT), i); + } + } + } + /** Arrange parentheses inside a ModifierContext. */ + static format(parentheses, state) { + if (!parentheses || parentheses.length === 0) + return false; + let x_widthL = 0; + let x_widthR = 0; + for (let i = 0; i < parentheses.length; ++i) { + const parenthesis = parentheses[i]; + const note = parenthesis.getNote(); + const pos = parenthesis.getPosition(); + const index = parenthesis.checkIndex(); + let shift = 0; + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT) { + shift = note.getRightParenthesisPx(index); + x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width; + } + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT) { + shift = note.getLeftParenthesisPx(index); + x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width; + } + parenthesis.setXShift(shift); + } + state.left_shift += x_widthL; + state.right_shift += x_widthR; + return true; + } + /** + * Constructor + * + * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT + */ + constructor(position) { + var _a; + super(); + this.position = position !== null && position !== void 0 ? position : _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; + this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default'); + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); + } + /** Set the associated note. */ + setNote(note) { + var _a, _b; + this.note = note; + this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default'); + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note)) { + this.point = (_b = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('gracenote'); + this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width')); + } + return this; + } + /** Render the parenthesis. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); + const x = start.x + this.x_shift; + const y = start.y + this.y_shift; + if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', { + category: `noteHead.standard.noteheadParenthesisRight`, + }); + } + else if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', { + category: `noteHead.standard.noteheadParenthesisLeft`, + }); + } + } +} + + +/***/ }), + +/***/ "./src/parser.ts": +/*!***********************!*\ + !*** ./src/parser.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Parser": () => (/* binding */ Parser) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// A generic text parsing class for VexFlow. + +// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (Parser.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_0__.log)('Vex.Flow.Parser', args); +} +const NO_ERROR_POS = -1; +// Converts parser results into an easy to reference list that can be +// used in triggers. This function returns: +// - nested array in which the leaf elements are string or null +// - string (including empty strings) +// - null +function flattenMatches(r) { + if ('matchedString' in r) + return r.matchedString; // string + if ('results' in r) + return flattenMatches(r.results); + const results = r; + if (results.length === 1) + return flattenMatches(results[0]); + if (results.length === 0) + return null; + return results.map(flattenMatches); // nested array +} +// This is the base parser class. Given an arbitrary context-free grammar, it +// can parse any line and execute code when specific rules are met (e.g., +// when a string is terminated.) +class Parser { + // For an example of a simple grammar, take a look at tests/parser_tests.ts or + // the EasyScore grammar in easyscore.ts. + constructor(grammar) { + this.grammar = grammar; + this.line = ''; + this.pos = 0; + this.errorPos = NO_ERROR_POS; + } + // Parse `line` using current grammar. Returns `{success: true}` if the + // line parsed correctly, otherwise returns `{success: false, errorPos: N}` + // where `errorPos` is the location of the error in the string. + parse(line) { + this.line = line; + this.pos = 0; + this.errorPos = NO_ERROR_POS; + const result = this.expect(this.grammar.begin()); + result.errorPos = this.errorPos; + return result; + } + matchFail(returnPos) { + if (this.errorPos === NO_ERROR_POS) + this.errorPos = this.pos; + this.pos = returnPos; + } + matchSuccess() { + this.errorPos = NO_ERROR_POS; + } + // Look for `token` in this.line[this.pos], and return success + // if one is found. `token` is specified as a regular expression. + matchToken(token, noSpace = false) { + const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\s*)'); + const workingLine = this.line.slice(this.pos); + const result = workingLine.match(regexp); + if (result !== null) { + return { + success: true, + matchedString: result[2], + incrementPos: result[1].length, + pos: this.pos, + }; + } + else { + return { success: false, pos: this.pos }; + } + } + // Execute rule to match a sequence of tokens (or rules). If `maybe` is + // set, then return success even if the token is not found, but reset + // the position before exiting. + // TODO: expectOne(...) is never called with the `maybe` parameter. + expectOne(rule, maybe = false) { + const results = []; + const pos = this.pos; + let allMatches = true; + let oneMatch = false; + maybe = maybe === true || rule.maybe === true; + // Execute all sub rules in sequence. + if (rule.expect) { + for (const next of rule.expect) { + const localPos = this.pos; + const result = this.expect(next); + // If `rule.or` is set, then return success if any one + // of the subrules match, else all subrules must match. + if (result.success) { + results.push(result); + oneMatch = true; + if (rule.or) + break; + } + else { + allMatches = false; + if (!rule.or) { + this.pos = localPos; + break; + } + } + } + } + const gotOne = (rule.or && oneMatch) || allMatches; + const success = gotOne || maybe === true; + const numMatches = gotOne ? 1 : 0; + if (maybe && !gotOne) + this.pos = pos; + if (success) { + this.matchSuccess(); + } + else { + this.matchFail(pos); + } + return { success, results, numMatches }; + } + // Try to match multiple (one or more) instances of the rule. If `maybe` is set, + // then a failed match is also a success (but the position is reset). + expectOneOrMore(rule, maybe = false) { + const results = []; + const pos = this.pos; + let numMatches = 0; + let more = true; + do { + const result = this.expectOne(rule); + if (result.success && result.results) { + numMatches++; + results.push(result.results); + } + else { + more = false; + } + } while (more); + const success = numMatches > 0 || maybe === true; + if (maybe && !(numMatches > 0)) + this.pos = pos; + if (success) { + this.matchSuccess(); + } + else { + this.matchFail(pos); + } + return { success, results, numMatches }; + } + // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`. + expectZeroOrMore(rule) { + return this.expectOneOrMore(rule, true); + } + // Execute the rule produced by the provided `rules` function. This + // offloads to one of the above matchers and consolidates the results. It is also + // responsible for executing any code triggered by the rule (in `rule.run`.) + expect(ruleFunc) { + L('Evaluating rule function:', ruleFunc); + if (!ruleFunc) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Invalid rule function'); + } + let result; + // Get rule from Grammar class. + // expect(...) handles both lexing & parsing: + // - lexer rules produce tokens. + // - parser rules produce expressions which may trigger code via the + // { run: () => ... } trigger functions in easyscore.ts. + // These functions build the VexFlow objects that are displayed on screen. + const rule = ruleFunc.bind(this.grammar)(); + if (rule.token) { + // A lexer rule has a `token` property. + // Base case: parse the regex and throw an error if the + // line doesn't match. + result = this.matchToken(rule.token, rule.noSpace === true); + if (result.success) { + // Token match! Update position and throw away parsed portion + // of string. + this.pos += result.incrementPos; + } + } + else if (rule.expect) { + // A parser rule has an `expect` property. + if (rule.oneOrMore) { + result = this.expectOneOrMore(rule); + } + else if (rule.zeroOrMore) { + result = this.expectZeroOrMore(rule); + } + else { + result = this.expectOne(rule); + } + } + else { + L(rule); + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Bad grammar! No `token` or `expect` property ' + rule); + } + // If there's a trigger attached to this rule, then run it. + // Make the matches accessible through `state.matches` in the + // `run: (state) => ...` trigger. + const matches = []; + result.matches = matches; + if (result.results) { + result.results.forEach((r) => matches.push(flattenMatches(r))); + } + if (rule.run && result.success) { + rule.run({ matches }); + } + return result; + } +} +Parser.DEBUG = false; + + + +/***/ }), + +/***/ "./src/pedalmarking.ts": +/*!*****************************!*\ + !*** ./src/pedalmarking.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PedalMarking": () => (/* binding */ PedalMarking) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +// eslint-disable-next-line +function L(...args) { + if (PedalMarking.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.PedalMarking', args); +} +/** + * Draws a pedal glyph with the provided `name` on a rendering `context` + * at the coordinates `x` and `y. Takes into account the glyph data + * coordinate shifts. + */ +function drawPedalGlyph(name, context, x, y, point) { + const glyph_data = PedalMarking.GLYPHS[name]; + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph(glyph_data.code, point, { category: 'pedalMarking' }); + // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2) + glyph.render(context, x - (glyph.getMetrics().width - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE) / 2, y); +} +/** + * PedalMarking implements different types of pedal markings. These notation + * elements indicate to the performer when to depress and release the a pedal. + * + * In order to create "Sostenuto", and "una corda" markings, you must set + * custom text for the release/depress pedal markings. + */ +class PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.PedalMarking; + } + /** + * Create a sustain pedal marking. Returns the defaults PedalMarking. + * Which uses the traditional "Ped" and "*"" markings. + */ + static createSustain(notes) { + const pedal = new PedalMarking(notes); + return pedal; + } + /** Create a sostenuto pedal marking */ + static createSostenuto(notes) { + const pedal = new PedalMarking(notes); + pedal.setType(PedalMarking.type.MIXED); + pedal.setCustomText('Sost. Ped.'); + return pedal; + } + /** Create an una corda pedal marking */ + static createUnaCorda(notes) { + const pedal = new PedalMarking(notes); + pedal.setType(PedalMarking.type.TEXT); + pedal.setCustomText('una corda', 'tre corda'); + return pedal; + } + constructor(notes) { + super(); + this.notes = notes; + this.type = PedalMarking.type.TEXT; + this.line = 0; + // Custom text for the release/depress markings + this.custom_depress_text = ''; + this.custom_release_text = ''; + this.resetFont(); + this.render_options = { + bracket_height: 10, + text_margin_right: 6, + bracket_line_width: 1, + color: 'black', + }; + } + /** Set pedal type. */ + setType(type) { + type = typeof type === 'string' ? PedalMarking.typeString[type] : type; + if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) { + this.type = type; + } + return this; + } + /** + * Set custom text for the `depress`/`release` pedal markings. No text is + * set if the parameter is falsy. + */ + setCustomText(depress, release) { + this.custom_depress_text = depress || ''; + this.custom_release_text = release || ''; + return this; + } + /** Set the staff line to render the markings on. */ + setLine(line) { + this.line = line; + return this; + } + /** Draw the bracket based pedal markings. */ + drawBracketed() { + const ctx = this.checkContext(); + let is_pedal_depressed = false; + let prev_x; + let prev_y; + // Iterate through each note + this.notes.forEach((note, index, notes) => { + var _a; + // Each note triggers the opposite pedal action + is_pedal_depressed = !is_pedal_depressed; + // Get the initial coordinates for the note + const x = note.getAbsoluteX(); + const y = note.checkStave().getYForBottomText(this.line + 3); + // Throw if current note is positioned before the previous note + if (x < prev_x) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions'); + } + // Determine if the previous or next note are the same + // as the current note. We need to keep track of this for + // when adjustments are made for the release+depress action + const next_is_same = notes[index + 1] === note; + const prev_is_same = notes[index - 1] === note; + let x_shift = 0; + const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + if (is_pedal_depressed) { + // Adjustment for release+depress + x_shift = prev_is_same ? 5 : 0; + if (this.type === PedalMarking.type.MIXED && !prev_is_same) { + // For MIXED style, start with text instead of bracket + if (this.custom_depress_text) { + // If we have custom text, use instead of the default "Ped" glyph + const text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x - text_width / 2, y); + x_shift = text_width / 2 + this.render_options.text_margin_right; + } + else { + // Render the Ped glyph in position + drawPedalGlyph('pedal_depress', ctx, x, y, point); + x_shift = 20 + this.render_options.text_margin_right; + } + } + else { + // Draw start bracket + ctx.beginPath(); + ctx.moveTo(x, y - this.render_options.bracket_height); + ctx.lineTo(x + x_shift, y); + ctx.stroke(); + ctx.closePath(); + } + } + else { + // Adjustment for release+depress + x_shift = next_is_same ? -5 : 0; + // Draw end bracket + ctx.beginPath(); + ctx.moveTo(prev_x, prev_y); + ctx.lineTo(x + x_shift, y); + ctx.lineTo(x, y - this.render_options.bracket_height); + ctx.stroke(); + ctx.closePath(); + } + // Store previous coordinates + prev_x = x + x_shift; + prev_y = y; + }); + } + /** + * Draw the text based pedal markings. This defaults to the traditional + * "Ped" and "*"" symbols if no custom text has been provided. + */ + drawText() { + const ctx = this.checkContext(); + let is_pedal_depressed = false; + // Iterate through each note, placing glyphs or custom text accordingly + this.notes.forEach((note) => { + var _a; + is_pedal_depressed = !is_pedal_depressed; + const stave = note.checkStave(); + const x = note.getAbsoluteX(); + const y = stave.getYForBottomText(this.line + 3); + const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + let text_width = 0; + if (is_pedal_depressed) { + if (this.custom_depress_text) { + text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x - text_width / 2, y); + } + else { + drawPedalGlyph('pedal_depress', ctx, x, y, point); + } + } + else { + if (this.custom_release_text) { + text_width = ctx.measureText(this.custom_release_text).width; + ctx.fillText(this.custom_release_text, x - text_width / 2, y); + } + else { + drawPedalGlyph('pedal_release', ctx, x, y, point); + } + } + }); + } + /** Render the pedal marking in position on the rendering context. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setStrokeStyle(this.render_options.color); + ctx.setFillStyle(this.render_options.color); + ctx.setFont(this.textFont); + L('Rendering Pedal Marking'); + if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) { + ctx.setLineWidth(this.render_options.bracket_line_width); + this.drawBracketed(); + } + else if (this.type === PedalMarking.type.TEXT) { + this.drawText(); + } + ctx.restore(); + } +} +/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */ +PedalMarking.DEBUG = false; +PedalMarking.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 12, + weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, +}; +/** Glyph data */ +PedalMarking.GLYPHS = { + pedal_depress: { + code: 'keyboardPedalPed', + }, + pedal_release: { + code: 'keyboardPedalUp', + }, +}; +/** Pedal type as number. */ +PedalMarking.type = { + TEXT: 1, + BRACKET: 2, + MIXED: 3, +}; +/** Pedal type as string. */ +PedalMarking.typeString = { + text: PedalMarking.type.TEXT, + bracket: PedalMarking.type.BRACKET, + mixed: PedalMarking.type.MIXED, +}; + + + +/***/ }), + +/***/ "./src/registry.ts": +/*!*************************!*\ + !*** ./src/registry.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Registry": () => (/* binding */ Registry) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// @author Mohit Cheppudira +// +// ## Description +// +// This file implements a registry for VexFlow elements. It allows users +// to track, query, and manage some subset of generated elements, and +// dynamically get and set attributes. +// +// There are two ways to register with a registry: +// +// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or, +// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future +// elements will automatically register with it. +// +// Once an element is registered, selected attributes are tracked and indexed by +// the registry. This allows fast look up of elements by attributes like id, type, +// and class. + +// Indexes are represented as maps of maps of maps. This allows +// for both multi-labeling (e.g., an element can have multiple classes) +// and efficient lookup. +class Index { + constructor() { + this.id = {}; + this.type = {}; + this.class = {}; + } +} +class Registry { + static getDefaultRegistry() { + return Registry.defaultRegistry; + } + // If you call `enableDefaultRegistry`, any new elements will auto-register with + // the provided registry as soon as they're constructed. + static enableDefaultRegistry(registry) { + Registry.defaultRegistry = registry; + } + static disableDefaultRegistry() { + Registry.defaultRegistry = undefined; + } + constructor() { + this.index = new Index(); + } + clear() { + this.index = new Index(); + return this; + } + setIndexValue(name, value, id, elem) { + const index = this.index; + if (!index[name][value]) { + index[name][value] = {}; + } + index[name][value][id] = elem; + } + // Updates the indexes for element 'id'. If an element's attribute changes + // from A -> B, make sure to remove the element from A. + updateIndex({ id, name, value, oldValue }) { + const elem = this.getElementById(id); + if (oldValue !== undefined && this.index[name][oldValue]) { + delete this.index[name][oldValue][id]; + } + if (value && elem) { + this.setIndexValue(name, value, elem.getAttribute('id'), elem); + } + } + /** + * Register element `elem` with this registry. + * This adds the element to its index and watches it for attribute changes. + * @param elem + * @param id + * @returns this + */ + register(elem, id) { + id = id || elem.getAttribute('id'); + if (!id) { + throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError("Can't add element without `id` attribute to registry"); + } + // Manually add id to index, then update other indexes. + elem.setAttribute('id', id); + this.setIndexValue('id', id, id, elem); + this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined }); + elem.onRegister(this); + return this; + } + getElementById(id) { + var _a, _b; + return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found. + } + getElementsByAttribute(attribute, value) { + const index_attr = this.index[attribute]; + if (index_attr) { + const index_attr_val = index_attr[value]; + if (index_attr_val) { + const keys = Object.keys(index_attr_val); + return keys.map((k) => index_attr_val[k]); + } + } + return []; + } + getElementsByType(type) { + return this.getElementsByAttribute('type', type); + } + getElementsByClass(className) { + return this.getElementsByAttribute('class', className); + } + // This is called by the element when an attribute value changes. If an indexed + // attribute changes, then update the local index. + onUpdate(info) { + const allowedNames = ['id', 'type', 'class']; + if (allowedNames.includes(info.name)) { + this.updateIndex(info); + } + return this; + } +} + + +/***/ }), + +/***/ "./src/rendercontext.ts": +/*!******************************!*\ + !*** ./src/rendercontext.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RenderContext": () => (/* binding */ RenderContext), +/* harmony export */ "drawDot": () => (/* binding */ drawDot) +/* harmony export */ }); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021. +// MIT License + +class RenderContext { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.RenderContext; + } + set font(f) { + this.setFont(f); + } + get font() { + return this.getFont(); + } + /** + * This is kept for backwards compatibility with 3.0.9. + * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand. + */ + setRawFont(f) { + this.setFont(f); + return this; + } +} +/** + * Draw a tiny dot marker on the specified context. A great debugging aid. + * @param ctx context + * @param x dot x coordinate + * @param y dot y coordinate + * @param color + */ +function drawDot(ctx, x, y, color = '#F55') { + ctx.save(); + ctx.setFillStyle(color); + // draw a circle + ctx.beginPath(); + ctx.arc(x, y, 3, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + ctx.restore(); +} + + +/***/ }), + +/***/ "./src/renderer.ts": +/*!*************************!*\ + !*** ./src/renderer.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Renderer": () => (/* binding */ Renderer), +/* harmony export */ "RendererBackends": () => (/* binding */ RendererBackends), +/* harmony export */ "RendererLineEndType": () => (/* binding */ RendererLineEndType) +/* harmony export */ }); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./web */ "./src/web.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +var RendererBackends; +(function (RendererBackends) { + RendererBackends[RendererBackends["CANVAS"] = 1] = "CANVAS"; + RendererBackends[RendererBackends["SVG"] = 2] = "SVG"; +})(RendererBackends || (RendererBackends = {})); +// End of line types +var RendererLineEndType; +(function (RendererLineEndType) { + RendererLineEndType[RendererLineEndType["NONE"] = 1] = "NONE"; + RendererLineEndType[RendererLineEndType["UP"] = 2] = "UP"; + RendererLineEndType[RendererLineEndType["DOWN"] = 3] = "DOWN"; +})(RendererLineEndType || (RendererLineEndType = {})); +/** + * Support Canvas & SVG rendering contexts. + */ +class Renderer { + static buildContext(elementId, backend, width, height, background = '#FFF') { + const renderer = new Renderer(elementId, backend); + if (width && height) { + renderer.resize(width, height); + } + const ctx = renderer.getContext(); + ctx.setBackgroundFillStyle(background); + Renderer.lastContext = ctx; + return ctx; + } + static getCanvasContext(elementId, width, height, background) { + return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background); + } + static getSVGContext(elementId, width, height, background) { + return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background); + } + // Draw a dashed line (horizontal, vertical or diagonal + // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space. + // setting the second number to 0 draws a solid line. + static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) { + context.beginPath(); + const dx = toX - fromX; + const dy = toY - fromY; + const angle = Math.atan2(dy, dx); + let x = fromX; + let y = fromY; + context.moveTo(fromX, fromY); + let idx = 0; + let draw = true; + while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) { + const dashLength = dashPattern[idx++ % dashPattern.length]; + const nx = x + Math.cos(angle) * dashLength; + x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx); + const ny = y + Math.sin(angle) * dashLength; + y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny); + if (draw) { + context.lineTo(x, y); + } + else { + context.moveTo(x, y); + } + draw = !draw; + } + context.closePath(); + context.stroke(); + } + constructor(arg0, arg1) { + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_2__.isRenderContext)(arg0)) { + // The user has provided what looks like a RenderContext, let's just use it. + this.ctx = arg0; + } + else { + if (arg1 === undefined) { + // The backend must be specified if the render context isn't directly provided. + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidArgument', 'Missing backend argument'); + } + const backend = arg1; + let element; + if (typeof arg0 == 'string') { + const maybeElement = document.getElementById(arg0); + if (!maybeElement) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElementId', `Can't find element with ID "${maybeElement}"`); + } + element = maybeElement; + } + else { + element = arg0; + } + // Verify backend and create context + if (backend === Renderer.Backends.CANVAS) { + if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLCanvas)(element)) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.'); + } + const context = element.getContext('2d', { willReadFrequently: true }); + if (!context) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', "Can't get canvas context"); + } + this.ctx = new _canvascontext__WEBPACK_IMPORTED_MODULE_0__.CanvasContext(context); + } + else if (backend === Renderer.Backends.SVG) { + if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLDiv)(element)) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.'); + } + this.ctx = new _svgcontext__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element); + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidBackend', `No support for backend: ${backend}`); + } + } + } + resize(width, height) { + this.ctx.resize(width, height); + return this; + } + getContext() { + return this.ctx; + } +} +Renderer.Backends = RendererBackends; +Renderer.LineEndType = RendererLineEndType; +// Used by vexflow_test_helpers.ts +// Should this be private? +// Can we do this in a cleaner way? +Renderer.lastContext = undefined; + + + +/***/ }), + +/***/ "./src/repeatnote.ts": +/*!***************************!*\ + !*** ./src/repeatnote.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RepeatNote": () => (/* binding */ RepeatNote) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + + + +// Map `type` to SMuFL glyph code. +const CODES = { + '1': 'repeat1Bar', + '2': 'repeat2Bars', + '4': 'repeat4Bars', + slash: 'repeatBarSlash', +}; +class RepeatNote extends _glyphnote__WEBPACK_IMPORTED_MODULE_1__.GlyphNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.RepeatNote; + } + constructor(type, noteStruct, options) { + const glyphCode = CODES[type] || 'repeat1Bar'; + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyphCode, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), { + category: 'repeatNote', + }); + super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options); + } +} + + +/***/ }), + +/***/ "./src/stave.ts": +/*!**********************!*\ + !*** ./src/stave.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Stave": () => (/* binding */ Stave) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + + + + + + + + + + +// Used by Stave.format() to sort the modifiers at the beginning and end of a stave. +// The keys (computed property names) match the CATEGORY property in the +// Barline, Clef, KeySignature, TimeSignature classes. +const SORT_ORDER_BEG_MODIFIERS = { + [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 0, + [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 1, + [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 2, + [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 3, +}; +const SORT_ORDER_END_MODIFIERS = { + [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 0, + [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 1, + [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 2, + [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 3, +}; +class Stave extends _element__WEBPACK_IMPORTED_MODULE_2__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stave; + } + // This is the sum of the padding that normally goes on left + right of a stave during + // drawing. Used to size staves correctly with content width. + static get defaultPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont(); + return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax'); + } + // Right padding, used by system if startX is already determined. + static get rightPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont(); + return musicFont.lookupMetric('stave.endPaddingMax'); + } + constructor(x, y, width, options) { + super(); + // Initialized by the constructor via this.resetLines(). + this.height = 0; + this.x = x; + this.y = y; + this.width = width; + this.formatted = false; + this.start_x = x + 5; + this.end_x = x + width; + this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.) + this.measure = 0; + this.clef = 'treble'; + this.endClef = undefined; + this.resetFont(); + this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options); + this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 }; + this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 }; + this.resetLines(); + // beg bar + this.addModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.left_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); + // end bar + this.addEndModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.right_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); + } + /** Set default style for ledger lines. */ + setDefaultLedgerLineStyle(style) { + this.defaultLedgerLineStyle = style; + } + /** Get default style for ledger lines. */ + getDefaultLedgerLineStyle() { + return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle); + } + space(spacing) { + return this.options.spacing_between_lines_px * spacing; + } + resetLines() { + this.options.line_config = []; + for (let i = 0; i < this.options.num_lines; i++) { + this.options.line_config.push({ visible: true }); + } + this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px; + this.options.bottom_text_position = this.options.num_lines; + } + setNoteStartX(x) { + if (!this.formatted) + this.format(); + this.start_x = x; + return this; + } + getNoteStartX() { + if (!this.formatted) + this.format(); + return this.start_x; + } + getNoteEndX() { + if (!this.formatted) + this.format(); + return this.end_x; + } + getTieStartX() { + return this.start_x; + } + getTieEndX() { + return this.end_x; + } + getX() { + return this.x; + } + getNumLines() { + return this.options.num_lines; + } + setNumLines(n) { + this.options.num_lines = n; + this.resetLines(); + return this; + } + setY(y) { + this.y = y; + return this; + } + getY() { + return this.y; + } + getTopLineTopY() { + return this.getYForLine(0) - _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2; + } + getBottomLineBottomY() { + return this.getYForLine(this.getNumLines() - 1) + _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2; + } + setX(x) { + const shift = x - this.x; + this.formatted = false; + this.x = x; + this.start_x += shift; + this.end_x += shift; + for (let i = 0; i < this.modifiers.length; i++) { + const mod = this.modifiers[i]; + mod.setX(mod.getX() + shift); + } + return this; + } + setWidth(width) { + this.formatted = false; + this.width = width; + this.end_x = this.x + width; + // reset the x position of the end barline (TODO(0xfe): This makes no sense) + // this.modifiers[1].setX(this.end_x); + return this; + } + getWidth() { + return this.width; + } + getStyle() { + return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS }, super.getStyle()); + } + /** + * Set the measure number of this Stave. + */ + setMeasure(measure) { + this.measure = measure; + return this; + } + /** + * Return the measure number of this Stave. + */ + getMeasure() { + return this.measure; + } + /** + * Gets the pixels to shift from the beginning of the stave + * following the modifier at the provided index + * @param {Number} index The index from which to determine the shift + * @return {Number} The amount of pixels shifted + */ + getModifierXShift(index = 0) { + if (typeof index !== 'number') { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('InvalidIndex', 'Must be of number type'); + } + if (!this.formatted) + this.format(); + if (this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN).length === 1) { + return 0; + } + // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test' + if (this.modifiers[index].getPosition() === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.RIGHT) { + return 0; + } + let start_x = this.start_x - this.x; + const begBarline = this.modifiers[0]; + if (begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) { + start_x -= begBarline.getWidth(); + } + return start_x; + } + /** Coda & Segno Symbol functions */ + setRepetitionType(type, yShift = 0) { + this.modifiers.push(new _staverepetition__WEBPACK_IMPORTED_MODULE_7__.Repetition(type, this.x, yShift)); + return this; + } + // Volta functions + setVoltaType(type, number_t, y) { + this.modifiers.push(new _stavevolta__WEBPACK_IMPORTED_MODULE_11__.Volta(type, number_t, this.x, y)); + return this; + } + // Section functions + setSection(section, y, xOffset = 0, fontSize, drawRect = true) { + const staveSection = new _stavesection__WEBPACK_IMPORTED_MODULE_8__.StaveSection(section, this.x + xOffset, y, drawRect); + if (fontSize) + staveSection.setFontSize(fontSize); + this.modifiers.push(staveSection); + return this; + } + // Tempo functions + setTempo(tempo, y) { + this.modifiers.push(new _stavetempo__WEBPACK_IMPORTED_MODULE_9__.StaveTempo(tempo, this.x, y)); + return this; + } + // Text functions + setText(text, position, options = {}) { + this.modifiers.push(new _stavetext__WEBPACK_IMPORTED_MODULE_10__.StaveText(text, position, options)); + return this; + } + getHeight() { + return this.height; + } + getSpacingBetweenLines() { + return this.options.spacing_between_lines_px; + } + getBoundingBox() { + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y); + } + getBottomY() { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing; + return score_bottom; + } + getBottomLineY() { + return this.getYForLine(this.options.num_lines); + } + // This returns + /** @returns the y for the *center* of a staff line */ + getYForLine(line) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + const y = this.y + line * spacing + headroom * spacing; + return y; + } + getLineForY(y) { + // Does the reverse of getYForLine - somewhat dumb and just calls + // getYForLine until the right value is reaches + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + return (y - this.y) / spacing - headroom; + } + getYForTopText(line = 0) { + return this.getYForLine(-line - this.options.top_text_position); + } + getYForBottomText(line = 0) { + return this.getYForLine(this.options.bottom_text_position + line); + } + getYForNote(line) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + return this.y + headroom * spacing + 5 * spacing - line * spacing; + } + getYForGlyphs() { + return this.getYForLine(3); + } + // This method adds a stave modifier to the stave. Note that the first two + // modifiers (BarLines) are automatically added upon construction. + addModifier(modifier, position) { + if (position !== undefined) { + modifier.setPosition(position); + } + modifier.setStave(this); + this.formatted = false; + this.modifiers.push(modifier); + return this; + } + addEndModifier(modifier) { + this.addModifier(modifier, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + // Bar Line functions + setBegBarType(type) { + // Only valid bar types at beginning of stave is none, single or begin repeat + const { SINGLE, REPEAT_BEGIN, NONE } = _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType; + if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) { + this.modifiers[0].setType(type); + this.formatted = false; + } + return this; + } + setEndBarType(type) { + // Repeat end not valid at end of stave + if (type !== _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) { + this.modifiers[1].setType(type); + this.formatted = false; + } + return this; + } + setClef(clefSpec, size, annotation, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) { + this.endClef = clefSpec; + } + else { + this.clef = clefSpec; + } + const clefs = this.getModifiers(position, _clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY); + if (clefs.length === 0) { + this.addClef(clefSpec, size, annotation, position); + } + else { + clefs[0].setType(clefSpec, size, annotation); + } + return this; + } + getClef() { + return this.clef; + } + setEndClef(clefSpec, size, annotation) { + this.setClef(clefSpec, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + getEndClef() { + return this.endClef; + } + setKeySignature(keySpec, cancelKeySpec, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + const keySignatures = this.getModifiers(position, _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY); + if (keySignatures.length === 0) { + this.addKeySignature(keySpec, cancelKeySpec, position); + } + else { + keySignatures[0].setKeySig(keySpec, cancelKeySpec); + } + return this; + } + setEndKeySignature(keySpec, cancelKeySpec) { + this.setKeySignature(keySpec, cancelKeySpec, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + setTimeSignature(timeSpec, customPadding, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + const timeSignatures = this.getModifiers(position, _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY); + if (timeSignatures.length === 0) { + this.addTimeSignature(timeSpec, customPadding, position); + } + else { + timeSignatures[0].setTimeSig(timeSpec); + } + return this; + } + setEndTimeSignature(timeSpec, customPadding) { + this.setTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + /** + * Add a key signature to the stave. + * + * Example: + * `stave.addKeySignature('Db');` + * @param keySpec new key specification `[A-G][b|#]?` + * @param cancelKeySpec + * @param position + * @returns + */ + addKeySignature(keySpec, cancelKeySpec, position) { + if (position === undefined) { + position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; + } + this.addModifier(new _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature(keySpec, cancelKeySpec).setPosition(position), position); + return this; + } + /** + * Add a clef to the stave. + * + * Example: + * + * stave.addClef('treble') + * @param clef clef (treble|bass|...) see {@link Clef.types} + * @param size + * @param annotation + * @param position + * @returns + */ + addClef(clef, size, annotation, position) { + if (position === undefined || position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN) { + this.clef = clef; + } + else if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) { + this.endClef = clef; + } + this.addModifier(new _clef__WEBPACK_IMPORTED_MODULE_1__.Clef(clef, size, annotation), position); + return this; + } + addEndClef(clef, size, annotation) { + this.addClef(clef, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + /** + * Add a time signature to the stave + * + * Example: + * + * `stave.addTimeSignature('4/4');` + * @param timeSpec time signature specification `(C\||C|\d\/\d)` + * @param customPadding + * @param position + * @returns + */ + addTimeSignature(timeSpec, customPadding, position) { + this.addModifier(new _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature(timeSpec, customPadding), position); + return this; + } + addEndTimeSignature(timeSpec, customPadding) { + this.addTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + return this; + } + // Deprecated + addTrebleGlyph() { + this.addClef('treble'); + return this; + } + /** + * @param position + * @param category + * @returns array of StaveModifiers that match the provided position and category. + */ + getModifiers(position, category) { + const noPosition = position === undefined; + const noCategory = category === undefined; + if (noPosition && noCategory) { + return this.modifiers; + } + else if (noPosition) { + // A category was provided. + return this.modifiers.filter((m) => category === m.getCategory()); + } + else if (noCategory) { + // A position was provided. + return this.modifiers.filter((m) => position === m.getPosition()); + } + else { + // Both position and category were provided! + return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory()); + } + } + /** + * Use the modifier's `getCategory()` as a key for the `order` array. + * The retrieved value is used to sort modifiers from left to right (0 to to 3). + */ + sortByCategory(items, order) { + for (let i = items.length - 1; i >= 0; i--) { + for (let j = 0; j < i; j++) { + if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) { + const temp = items[j]; + items[j] = items[j + 1]; + items[j + 1] = temp; + } + } + } + } + format() { + const begBarline = this.modifiers[0]; + const endBarline = this.modifiers[1]; + const begModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN); + const endModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); + this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS); + this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS); + if (begModifiers.length > 1 && begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) { + begModifiers.push(begModifiers.splice(0, 1)[0]); + begModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE)); + } + if (endModifiers.indexOf(endBarline) > 0) { + endModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); + } + let width; + let padding; + let modifier; + let offset = 0; + let x = this.x; + for (let i = 0; i < begModifiers.length; i++) { + modifier = begModifiers[i]; + padding = modifier.getPadding(i + offset); + width = modifier.getWidth(); + x += padding; + modifier.setX(x); + x += width; + if (padding + width === 0) + offset--; + } + this.start_x = x; + x = this.x + this.width; + const widths = { + left: 0, + right: 0, + paddingRight: 0, + paddingLeft: 0, + }; + let lastBarlineIdx = 0; + for (let i = 0; i < endModifiers.length; i++) { + modifier = endModifiers[i]; + lastBarlineIdx = (0,_typeguard__WEBPACK_IMPORTED_MODULE_14__.isBarline)(modifier) ? i : lastBarlineIdx; + widths.right = 0; + widths.left = 0; + widths.paddingRight = 0; + widths.paddingLeft = 0; + const layoutMetrics = modifier.getLayoutMetrics(); + if (layoutMetrics) { + if (i !== 0) { + widths.right = layoutMetrics.xMax || 0; + widths.paddingRight = layoutMetrics.paddingRight || 0; + } + widths.left = -layoutMetrics.xMin || 0; + widths.paddingLeft = layoutMetrics.paddingLeft || 0; + if (i === endModifiers.length - 1) { + widths.paddingLeft = 0; + } + } + else { + widths.paddingRight = modifier.getPadding(i - lastBarlineIdx); + if (i !== 0) { + widths.right = modifier.getWidth(); + } + if (i === 0) { + widths.left = modifier.getWidth(); + } + } + x -= widths.paddingRight; + x -= widths.right; + modifier.setX(x); + x -= widths.left; + x -= widths.paddingLeft; + } + this.end_x = endModifiers.length === 1 ? this.x + this.width : x; + this.formatted = true; + } + /** + * All drawing functions below need the context to be set. + */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + this.applyStyle(); + ctx.openGroup('stave', this.getAttribute('id')); + if (!this.formatted) + this.format(); + const num_lines = this.options.num_lines; + const width = this.width; + const x = this.x; + let y; + // Render lines + for (let line = 0; line < num_lines; line++) { + y = this.getYForLine(line); + if (this.options.line_config[line].visible) { + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + width, y); + ctx.stroke(); + } + } + ctx.closeGroup(); + this.restoreStyle(); + // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.) + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + // Only draw modifier if it has a draw function + if (typeof modifier.draw === 'function') { + modifier.applyStyle(ctx); + modifier.draw(this, this.getModifierXShift(i)); + modifier.restoreStyle(ctx); + } + } + // Render measure numbers + if (this.measure > 0) { + ctx.save(); + ctx.setFont(this.textFont); + const textWidth = ctx.measureText('' + this.measure).width; + y = this.getYForTopText(0) + 3; + ctx.fillText('' + this.measure, this.x - textWidth / 2, y); + ctx.restore(); + } + return this; + } + getVerticalBarWidth() { + return this.options.vertical_bar_width; + } + /** + * Get the current configuration for the Stave. + * @return {Array} An array of configuration objects. + */ + getConfigForLines() { + return this.options.line_config; + } + /** + * Configure properties of the lines in the Stave + * @param line_number The index of the line to configure. + * @param line_config An configuration object for the specified line. + * @throws RuntimeError "StaveConfigError" When the specified line number is out of + * range of the number of lines specified in the constructor. + */ + setConfigForLine(line_number, line_config) { + if (line_number >= this.options.num_lines || line_number < 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.'); + } + if (line_config.visible === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', "The line configuration object is missing the 'visible' property."); + } + if (typeof line_config.visible !== 'boolean') { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', "The line configuration objects 'visible' property must be true or false."); + } + this.options.line_config[line_number] = line_config; + return this; + } + /** + * Set the staff line configuration array for all of the lines at once. + * @param lines_configuration An array of line configuration objects. These objects + * are of the same format as the single one passed in to setLineConfiguration(). + * The caller can set null for any line config entry if it is desired that the default be used + * @throws RuntimeError "StaveConfigError" When the lines_configuration array does not have + * exactly the same number of elements as the num_lines configuration object set in + * the constructor. + */ + setConfigForLines(lines_configuration) { + if (lines_configuration.length !== this.options.num_lines) { + throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave'); + } + // Make sure the defaults are present in case an incomplete set of + // configuration options were supplied. + // eslint-disable-next-line + for (const line_config in lines_configuration) { + // Allow '{}' to be used if the caller just wants the default for a particular node. + if (lines_configuration[line_config].visible == undefined) { + lines_configuration[line_config] = this.options.line_config[line_config]; + } + this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]); + } + this.options.line_config = lines_configuration; + return this; + } + static formatBegModifiers(staves) { + const adjustCategoryStartX = (category) => { + let minStartX = 0; + // Calculate min start X for the category + staves.forEach((stave) => { + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category); + // Consider only the first instance + if (modifiers.length > 0 && modifiers[0].getX() > minStartX) + minStartX = modifiers[0].getX(); + }); + let adjustX = 0; + staves.forEach((stave) => { + adjustX = 0; + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category); + // Calculate adjustement required for the stave + modifiers.forEach((modifier) => { + if (minStartX - modifier.getX() > adjustX) + adjustX = minStartX - modifier.getX(); + }); + const allModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN); + let bAdjust = false; + // Apply adjustment to all the modifiers in and beyond the category + allModifiers.forEach((modifier) => { + if (modifier.getCategory() === category) + bAdjust = true; + if (bAdjust && adjustX > 0) + modifier.setX(modifier.getX() + adjustX); + }); + // Apply adjustment also to note start. + stave.setNoteStartX(stave.getNoteStartX() + adjustX); + }); + }; + // Make sure that staves are formatted + staves.forEach((stave) => { + if (!stave.formatted) + stave.format(); + }); + // Align Clefs + adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Clef); + // Align key signatures + adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.KeySignature); + // Align time signatures + adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.TimeSignature); + let maxX = 0; + // align note start + staves.forEach((stave) => { + if (stave.getNoteStartX() > maxX) + maxX = stave.getNoteStartX(); + }); + staves.forEach((stave) => { + stave.setNoteStartX(maxX); + }); + maxX = 0; + // align REPEAT_BEGIN + staves.forEach((stave) => { + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline); + modifiers.forEach((modifier) => { + if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) + if (modifier.getX() > maxX) + maxX = modifier.getX(); + }); + }); + staves.forEach((stave) => { + const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline); + modifiers.forEach((modifier) => { + if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) + modifier.setX(maxX); + }); + }); + } +} +Stave.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF, + size: 8, + weight: _font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_3__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavebarline.ts": +/*!*****************************!*\ + !*** ./src/stavebarline.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Barline": () => (/* binding */ Barline), +/* harmony export */ "BarlineType": () => (/* binding */ BarlineType) +/* harmony export */ }); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Author Larry Kuhns 2011 + + + +var BarlineType; +(function (BarlineType) { + BarlineType[BarlineType["SINGLE"] = 1] = "SINGLE"; + BarlineType[BarlineType["DOUBLE"] = 2] = "DOUBLE"; + BarlineType[BarlineType["END"] = 3] = "END"; + BarlineType[BarlineType["REPEAT_BEGIN"] = 4] = "REPEAT_BEGIN"; + BarlineType[BarlineType["REPEAT_END"] = 5] = "REPEAT_END"; + BarlineType[BarlineType["REPEAT_BOTH"] = 6] = "REPEAT_BOTH"; + BarlineType[BarlineType["NONE"] = 7] = "NONE"; +})(BarlineType || (BarlineType = {})); +class Barline extends _stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Barline; + } + static get type() { + return BarlineType; + } + static get typeString() { + return { + single: BarlineType.SINGLE, + double: BarlineType.DOUBLE, + end: BarlineType.END, + repeatBegin: BarlineType.REPEAT_BEGIN, + repeatEnd: BarlineType.REPEAT_END, + repeatBoth: BarlineType.REPEAT_BOTH, + none: BarlineType.NONE, + }; + } + constructor(type) { + super(); + this.thickness = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STAVE_LINE_THICKNESS; + const TYPE = BarlineType; + this.widths = {}; + this.widths[TYPE.SINGLE] = 5; + this.widths[TYPE.DOUBLE] = 5; + this.widths[TYPE.END] = 5; + this.widths[TYPE.REPEAT_BEGIN] = 5; + this.widths[TYPE.REPEAT_END] = 5; + this.widths[TYPE.REPEAT_BOTH] = 5; + this.widths[TYPE.NONE] = 5; + this.paddings = {}; + this.paddings[TYPE.SINGLE] = 0; + this.paddings[TYPE.DOUBLE] = 0; + this.paddings[TYPE.END] = 0; + this.paddings[TYPE.REPEAT_BEGIN] = 15; + this.paddings[TYPE.REPEAT_END] = 15; + this.paddings[TYPE.REPEAT_BOTH] = 15; + this.paddings[TYPE.NONE] = 0; + this.layoutMetricsMap = {}; + this.layoutMetricsMap[TYPE.SINGLE] = { + xMin: 0, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.DOUBLE] = { + xMin: -3, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.END] = { + xMin: -5, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_END] = { + xMin: -10, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = { + xMin: -2, + xMax: 10, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_BOTH] = { + xMin: -10, + xMax: 10, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.NONE] = { + xMin: 0, + xMax: 0, + paddingLeft: 5, + paddingRight: 5, + }; + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition.BEGIN); + this.setType(type); + } + getType() { + return this.type; + } + setType(type) { + this.type = typeof type === 'string' ? Barline.typeString[type] : type; + this.setWidth(this.widths[this.type]); + this.setPadding(this.paddings[this.type]); + this.setLayoutMetrics(this.layoutMetricsMap[this.type]); + return this; + } + // Draw barlines + draw(stave) { + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('stavebarline', this.getAttribute('id')); + switch (this.type) { + case BarlineType.SINGLE: + this.drawVerticalBar(stave, this.x, false); + break; + case BarlineType.DOUBLE: + this.drawVerticalBar(stave, this.x, true); + break; + case BarlineType.END: + this.drawVerticalEndBar(stave, this.x); + break; + case BarlineType.REPEAT_BEGIN: + // If the barline is shifted over (in front of clef/time/key) + // Draw vertical bar at the beginning. + this.drawRepeatBar(stave, this.x, true); + if (stave.getX() !== this.x) { + this.drawVerticalBar(stave, stave.getX()); + } + break; + case BarlineType.REPEAT_END: + this.drawRepeatBar(stave, this.x, false); + break; + case BarlineType.REPEAT_BOTH: + this.drawRepeatBar(stave, this.x, false); + this.drawRepeatBar(stave, this.x, true); + break; + default: + // Default is NONE, so nothing to draw + break; + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } + drawVerticalBar(stave, x, double_bar) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + if (double_bar) { + staveCtx.fillRect(x - 3, topY, 1, botY - topY); + } + staveCtx.fillRect(x, topY, 1, botY - topY); + } + drawVerticalEndBar(stave, x) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + staveCtx.fillRect(x - 5, topY, 1, botY - topY); + staveCtx.fillRect(x - 2, topY, 3, botY - topY); + } + drawRepeatBar(stave, x, begin) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + let x_shift = 3; + if (!begin) { + x_shift = -5; + } + staveCtx.fillRect(x + x_shift, topY, 1, botY - topY); + staveCtx.fillRect(x - 2, topY, 3, botY - topY); + const dot_radius = 2; + // Shift dots left or right + if (begin) { + x_shift += 4; + } + else { + x_shift -= 4; + } + const dot_x = x + x_shift + dot_radius / 2; + // calculate the y offset based on number of stave lines + let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines(); + y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2; + let dot_y = topY + y_offset + dot_radius / 2; + // draw the top repeat dot + staveCtx.beginPath(); + staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); + staveCtx.fill(); + // draw the bottom repeat dot + dot_y += stave.getSpacingBetweenLines(); + staveCtx.beginPath(); + staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); + staveCtx.fill(); + } +} + + +/***/ }), + +/***/ "./src/staveconnector.ts": +/*!*******************************!*\ + !*** ./src/staveconnector.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveConnector": () => (/* binding */ StaveConnector) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +function drawBoldDoubleLine(ctx, type, topX, topY, botY) { + if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.'); + } + let x_shift = 3; + let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues + const thickLineOffset = 2; // For aesthetics + if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) { + x_shift = -5; // Flips the side of the thin line + variableWidth = 3; + } + // Thin line + ctx.fillRect(topX + x_shift, topY, 1, botY - topY); + // Thick line + ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY); +} +/** StaveConnector implements the connector lines between staves of a system. */ +class StaveConnector extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StaveConnector; + } + constructor(top_stave, bottom_stave) { + super(); + this.thickness = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_THICKNESS; + this.width = 3; + this.top_stave = top_stave; + this.bottom_stave = bottom_stave; + this.type = StaveConnector.type.DOUBLE; + this.resetFont(); + // 1. Offset Bold Double Left to align with offset Repeat Begin bars + // 2. Offset BRACE type not to overlap with another StaveConnector + this.x_shift = 0; + this.texts = []; + } + /** + * Set type. + * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString} + */ + setType(type) { + const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type; + // Be certain that the type is a valid type: + if (Object.values(StaveConnector.type).includes(newType)) { + this.type = newType; + } + return this; + } + /** + * Get type. + * @returns number {@link StaveConnector.type} + */ + getType() { + return this.type; + } + /** Set optional associated Text. */ + setText(text, options = {}) { + this.texts.push({ + content: text, + options: Object.assign({ shift_x: 0, shift_y: 0 }, options), + }); + return this; + } + setXShift(x_shift) { + if (typeof x_shift !== 'number') { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', 'x_shift must be a Number'); + } + this.x_shift = x_shift; + return this; + } + getXShift() { + return this.x_shift; + } + /** Render connector and associated text. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let topY = this.top_stave.getYForLine(0); + let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness; + let width = this.width; + let topX = this.top_stave.getX(); + const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT || + this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT || + this.type === StaveConnector.type.THIN_DOUBLE; + if (isRightSidedConnector) { + topX = this.top_stave.getX() + this.top_stave.getWidth(); + } + let attachment_height = botY - topY; + switch (this.type) { + case StaveConnector.type.SINGLE: + width = 1; + break; + case StaveConnector.type.SINGLE_LEFT: + width = 1; + break; + case StaveConnector.type.SINGLE_RIGHT: + width = 1; + break; + case StaveConnector.type.DOUBLE: + topX -= this.width + 2; + topY -= this.thickness; + attachment_height += 0.5; + break; + case StaveConnector.type.BRACE: { + width = 12; + // May need additional code to draw brace + const x1 = this.top_stave.getX() - 2 + this.x_shift; + const y1 = topY; + const x3 = x1; + const y3 = botY; + const x2 = x1 - width; + const y2 = y1 + attachment_height / 2.0; + const cpx1 = x2 - 0.9 * width; + const cpy1 = y1 + 0.2 * attachment_height; + const cpx2 = x1 + 1.1 * width; + const cpy2 = y2 - 0.135 * attachment_height; + const cpx3 = cpx2; + const cpy3 = y2 + 0.135 * attachment_height; + const cpx4 = cpx1; + const cpy4 = y3 - 0.2 * attachment_height; + const cpx5 = x2 - width; + const cpy5 = cpy4; + const cpx6 = x1 + 0.4 * width; + const cpy6 = y2 + 0.135 * attachment_height; + const cpx7 = cpx6; + const cpy7 = y2 - 0.135 * attachment_height; + const cpx8 = cpx5; + const cpy8 = cpy1; + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2); + ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3); + ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2); + ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1); + ctx.fill(); + ctx.stroke(); + break; + } + case StaveConnector.type.BRACKET: + topY -= 6; + botY += 6; + attachment_height = botY - topY; + _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop'); + _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom'); + topX -= this.width + 2; + break; + case StaveConnector.type.BOLD_DOUBLE_LEFT: + drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness); + break; + case StaveConnector.type.BOLD_DOUBLE_RIGHT: + drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness); + break; + case StaveConnector.type.THIN_DOUBLE: + width = 1; + attachment_height -= this.thickness; + break; + case StaveConnector.type.NONE: + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`); + } + if (this.type !== StaveConnector.type.BRACE && + this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT && + this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT && + this.type !== StaveConnector.type.NONE) { + ctx.fillRect(topX, topY, width, attachment_height); + } + // If the connector is a thin double barline, draw the paralell line + if (this.type === StaveConnector.type.THIN_DOUBLE) { + ctx.fillRect(topX - 3, topY, width, attachment_height); + } + ctx.save(); + ctx.setLineWidth(2); + ctx.setFont(this.textFont); + // Add stave connector text + for (let i = 0; i < this.texts.length; i++) { + const text = this.texts[i]; + const text_width = ctx.measureText('' + text.content).width; + const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x; + const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y; + ctx.fillText('' + text.content, x, y + 4); + } + ctx.restore(); + } +} +StaveConnector.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 16, + weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, +}; +/** + * SINGLE_LEFT and SINGLE are the same value for compatibility + * with older versions of vexflow which didn't have right sided + * stave connectors. + */ +StaveConnector.type = { + SINGLE_RIGHT: 0, + SINGLE_LEFT: 1, + SINGLE: 1, + DOUBLE: 2, + BRACE: 3, + BRACKET: 4, + BOLD_DOUBLE_LEFT: 5, + BOLD_DOUBLE_RIGHT: 6, + THIN_DOUBLE: 7, + NONE: 8, +}; +/** + * Connector type: + * * "singleRight" + * * "singleLeft" + * * "single" + * * "double" + * * "brace" + * * "bracket" + * * "boldDoubleLeft" + * * "boldDoubleRight" + * * "thinDouble" + * * "none" + */ +StaveConnector.typeString = { + singleRight: StaveConnector.type.SINGLE_RIGHT, + singleLeft: StaveConnector.type.SINGLE_LEFT, + single: StaveConnector.type.SINGLE, + double: StaveConnector.type.DOUBLE, + brace: StaveConnector.type.BRACE, + bracket: StaveConnector.type.BRACKET, + boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT, + boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT, + thinDouble: StaveConnector.type.THIN_DOUBLE, + none: StaveConnector.type.NONE, +}; + + + +/***/ }), + +/***/ "./src/stavehairpin.ts": +/*!*****************************!*\ + !*** ./src/stavehairpin.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveHairpin": () => (/* binding */ StaveHairpin) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/ +// +// This class implements hairpins between notes. +// Hairpins can be either crescendo or decrescendo. + + + + +class StaveHairpin extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.StaveHairpin; + } + /* Helper function to convert ticks into pixels. + * Requires a Formatter with voices joined and formatted (to + * get pixels per tick) + * + * options is struct that has: + * + * { + * height: px, + * y_shift: px, // vertical offset + * left_shift_ticks: 0, // left horizontal offset expressed in ticks + * right_shift_ticks: 0 // right horizontal offset expressed in ticks + * } + * + **/ + static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) { + var _a, _b; + const ppt = formatter.pixelsPerTick; + if (ppt == null) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.'); + } + const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0); + const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0); + const hairpin_options = { + height: options.height, + y_shift: options.y_shift, + left_shift_px: l_shift_px, + right_shift_px: r_shift_px, + right_shift_ticks: 0, + left_shift_ticks: 0, + }; + new StaveHairpin({ + first_note: notes.first_note, + last_note: notes.last_note, + }, type) + .setContext(ctx) + .setRenderOptions(hairpin_options) + .setPosition(position) + .draw(); + } + /** + * Create a new hairpin from the specified notes. + * + * @param {!Object} notes The notes to tie up. + * Notes is a struct that has: + * + * { + * first_note: Note, + * last_note: Note, + * } + * @param {!Object} type The type of hairpin + */ + constructor(notes, type) { + super(); + this.setNotes(notes); + this.hairpin = type; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW; + this.render_options = { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, + right_shift_ticks: 0, + left_shift_ticks: 0, + }; + } + setPosition(position) { + if (position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE || position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW) { + this.position = position; + } + return this; + } + setRenderOptions(options) { + if (options.height != null && + options.y_shift != null && + options.left_shift_px != null && + options.right_shift_px != null) { + this.render_options = options; + } + return this; + } + /** + * Set the notes to attach this hairpin to. + * + * @param {!Object} notes The start and end notes. + */ + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.'); + } + this.notes = notes; + this.first_note = notes.first_note; + this.last_note = notes.last_note; + return this; + } + renderHairpin(params) { + const ctx = this.checkContext(); + let dis = this.render_options.y_shift + 20; + let y_shift = params.first_y; + if (this.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { + dis = -dis + 30; + y_shift = params.first_y - params.staff_height; + } + const l_shift = this.render_options.left_shift_px; + const r_shift = this.render_options.right_shift_px; + ctx.beginPath(); + switch (this.hairpin) { + case StaveHairpin.type.CRESC: + ctx.moveTo(params.last_x + r_shift, y_shift + dis); + ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis); + ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis); + break; + case StaveHairpin.type.DECRESC: + ctx.moveTo(params.first_x + l_shift, y_shift + dis); + ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis); + ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis); + break; + default: + // Default is NONE, so nothing to draw + break; + } + ctx.stroke(); + ctx.closePath(); + } + draw() { + this.checkContext(); + this.setRendered(); + const firstNote = this.first_note; + const lastNote = this.last_note; + if (!firstNote || !lastNote) + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NoNote', 'Notes required to draw'); + const start = firstNote.getModifierStartXY(this.position, 0); + const end = lastNote.getModifierStartXY(this.position, 0); + this.renderHairpin({ + first_x: start.x, + last_x: end.x, + first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(), + last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(), + staff_height: firstNote.checkStave().getHeight(), + }); + } +} +StaveHairpin.type = { + CRESC: 1, + DECRESC: 2, +}; + + + +/***/ }), + +/***/ "./src/staveline.ts": +/*!**************************!*\ + !*** ./src/staveline.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveLine": () => (/* binding */ StaveLine) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// This file implements `StaveLine` which are simply lines that connect +// two notes. This object is highly configurable, see the `render_options`. +// A simple line is often used for notating glissando articulations, but you +// can format a `StaveLine` with arrows or colors for more pedagogical +// purposes, such as diagrams. + + + + + +// Attribution: Arrow rendering implementations based off of +// Patrick Horgan's article, "Drawing lines and arcs with +// arrow heads on HTML5 Canvas" +// +// Draw an arrow head that connects between 3 coordinates. +function drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) { + // all cases do this. + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x0, y0); + ctx.closePath(); + ctx.fill(); +} +class StaveLine extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveLine; + } + // Initialize the StaveLine with the given `notes`. + // + // `notes` is a struct that has: + // + // ``` + // { + // first_note: Note, + // last_note: Note, + // first_indices: [n1, n2, n3], + // last_indices: [n1, n2, n3] + // } + // ``` + constructor(notes) { + super(); + this.setNotes(notes); + this.text = ''; + this.resetFont(); + this.render_options = { + // Space to add to the left or the right + padding_left: 4, + padding_right: 3, + // The width of the line in pixels + line_width: 1, + // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?). + line_dash: undefined, + // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?). + rounded_end: true, + // The color of the line and arrowheads + color: undefined, + // Flags to draw arrows on each end of the line + draw_start_arrow: false, + draw_end_arrow: false, + // The length of the arrowhead sides + arrowhead_length: 10, + // The angle of the arrowhead + arrowhead_angle: Math.PI / 8, + // The position of the text + text_position_vertical: StaveLine.TextVerticalPosition.TOP, + text_justification: StaveLine.TextJustification.CENTER, + }; + } + // The the annotation for the `StaveLine` + setText(text) { + this.text = text; + return this; + } + // Set the notes for the `StaveLine` + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.'); + } + if (!notes.first_indices) + notes.first_indices = [0]; + if (!notes.last_indices) + notes.last_indices = [0]; + if (notes.first_indices.length !== notes.last_indices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Connected notes must have same number of indices.'); + } + this.notes = notes; + this.first_note = notes.first_note; + this.first_indices = notes.first_indices; + this.last_note = notes.last_note; + this.last_indices = notes.last_indices; + return this; + } + // Apply the style of the `StaveLine` to the context + applyLineStyle() { + const ctx = this.checkContext(); + const render_options = this.render_options; + if (render_options.line_dash) { + ctx.setLineDash(render_options.line_dash); + } + if (render_options.line_width) { + ctx.setLineWidth(render_options.line_width); + } + if (render_options.rounded_end) { + ctx.setLineCap('round'); + } + else { + ctx.setLineCap('square'); + } + } + // Apply the text styling to the context + applyFontStyle() { + const ctx = this.checkContext(); + ctx.setFont(this.textFont); + const render_options = this.render_options; + const color = render_options.color; + if (color) { + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + } + } + // Helper function to draw a line with arrow heads + drawArrowLine(ctx, pt1, pt2) { + const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow; + const x1 = pt1.x; + const y1 = pt1.y; + const x2 = pt2.x; + const y2 = pt2.y; + // For ends with arrow we actually want to stop before we get to the arrow + // so that wide lines won't put a flat end on the arrow. + const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + const ratio = (distance - this.render_options.arrowhead_length / 3) / distance; + let end_x; + let end_y; + let start_x; + let start_y; + if (this.render_options.draw_end_arrow || both_arrows) { + end_x = Math.round(x1 + (x2 - x1) * ratio); + end_y = Math.round(y1 + (y2 - y1) * ratio); + } + else { + end_x = x2; + end_y = y2; + } + if (this.render_options.draw_start_arrow || both_arrows) { + start_x = x1 + (x2 - x1) * (1 - ratio); + start_y = y1 + (y2 - y1) * (1 - ratio); + } + else { + start_x = x1; + start_y = y1; + } + if (this.render_options.color) { + ctx.setStrokeStyle(this.render_options.color); + ctx.setFillStyle(this.render_options.color); + } + // Draw the shaft of the arrow + ctx.beginPath(); + ctx.moveTo(start_x, start_y); + ctx.lineTo(end_x, end_y); + ctx.stroke(); + ctx.closePath(); + // calculate the angle of the line + const line_angle = Math.atan2(y2 - y1, x2 - x1); + // h is the line length of a side of the arrow head + const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle)); + let angle1; + let angle2; + let top_x; + let top_y; + let bottom_x; + let bottom_y; + if (this.render_options.draw_end_arrow || both_arrows) { + angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle; + top_x = x2 + Math.cos(angle1) * h; + top_y = y2 + Math.sin(angle1) * h; + angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle; + bottom_x = x2 + Math.cos(angle2) * h; + bottom_y = y2 + Math.sin(angle2) * h; + drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y); + } + if (this.render_options.draw_start_arrow || both_arrows) { + angle1 = line_angle + this.render_options.arrowhead_angle; + top_x = x1 + Math.cos(angle1) * h; + top_y = y1 + Math.sin(angle1) * h; + angle2 = line_angle - this.render_options.arrowhead_angle; + bottom_x = x1 + Math.cos(angle2) * h; + bottom_y = y1 + Math.sin(angle2) * h; + drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y); + } + } + // Renders the `StaveLine` on the context + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const first_note = this.first_note; + const last_note = this.last_note; + const render_options = this.render_options; + ctx.save(); + this.applyLineStyle(); + // Cycle through each set of indices and draw lines + let start_position = { x: 0, y: 0 }; + let end_position = { x: 0, y: 0 }; + this.first_indices.forEach((first_index, i) => { + const last_index = this.last_indices[i]; + // Get initial coordinates for the start/end of the line + start_position = first_note.getModifierStartXY(2, first_index); + end_position = last_note.getModifierStartXY(1, last_index); + const upwards_slope = start_position.y > end_position.y; + // Adjust `x` coordinates for modifiers + start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left; + end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right; + // Adjust first `x` coordinates for displacements + const notehead_width = first_note.getGlyphProps().getWidth(); + const first_displaced = first_note.getKeyProps()[first_index].displaced; + if (first_displaced && first_note.getStemDirection() === 1) { + start_position.x += notehead_width + render_options.padding_left; + } + // Adjust last `x` coordinates for displacements + const last_displaced = last_note.getKeyProps()[last_index].displaced; + if (last_displaced && last_note.getStemDirection() === -1) { + end_position.x -= notehead_width + render_options.padding_right; + } + // Adjust y position better if it's not coming from the center of the note + start_position.y += upwards_slope ? -3 : 1; + end_position.y += upwards_slope ? 2 : 0; + this.drawArrowLine(ctx, start_position, end_position); + }); + ctx.restore(); + // Determine the x coordinate where to start the text + const text_width = ctx.measureText(this.text).width; + const justification = render_options.text_justification; + let x = 0; + if (justification === StaveLine.TextJustification.LEFT) { + x = start_position.x; + } + else if (justification === StaveLine.TextJustification.CENTER) { + const delta_x = end_position.x - start_position.x; + const center_x = delta_x / 2 + start_position.x; + x = center_x - text_width / 2; + } + else if (justification === StaveLine.TextJustification.RIGHT) { + x = end_position.x - text_width; + } + // Determine the y value to start the text + let y = 0; + const vertical_position = render_options.text_position_vertical; + if (vertical_position === StaveLine.TextVerticalPosition.TOP) { + y = first_note.checkStave().getYForTopText(); + } + else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) { + y = first_note.checkStave().getYForBottomText(_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.TEXT_HEIGHT_OFFSET_HACK); + } + // Draw the text + ctx.save(); + this.applyFontStyle(); + ctx.fillText(this.text, x, y); + ctx.restore(); + return this; + } +} +/** Default text font. */ +StaveLine.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); +// Text Positioning +StaveLine.TextVerticalPosition = { + TOP: 1, + BOTTOM: 2, +}; +StaveLine.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification; + + + +/***/ }), + +/***/ "./src/stavemodifier.ts": +/*!******************************!*\ + !*** ./src/stavemodifier.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveModifier": () => (/* binding */ StaveModifier), +/* harmony export */ "StaveModifierPosition": () => (/* binding */ StaveModifierPosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// A base class for stave modifiers (e.g. clefs, key signatures) + + + +var StaveModifierPosition; +(function (StaveModifierPosition) { + StaveModifierPosition[StaveModifierPosition["CENTER"] = 0] = "CENTER"; + StaveModifierPosition[StaveModifierPosition["LEFT"] = 1] = "LEFT"; + StaveModifierPosition[StaveModifierPosition["RIGHT"] = 2] = "RIGHT"; + StaveModifierPosition[StaveModifierPosition["ABOVE"] = 3] = "ABOVE"; + StaveModifierPosition[StaveModifierPosition["BELOW"] = 4] = "BELOW"; + StaveModifierPosition[StaveModifierPosition["BEGIN"] = 5] = "BEGIN"; + StaveModifierPosition[StaveModifierPosition["END"] = 6] = "END"; +})(StaveModifierPosition || (StaveModifierPosition = {})); +class StaveModifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveModifier; + } + static get Position() { + return StaveModifierPosition; + } + constructor() { + super(); + this.width = 0; + this.x = 0; + this.padding = 10; + this.position = StaveModifierPosition.ABOVE; + } + getPosition() { + return this.position; + } + setPosition(position) { + this.position = position; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + setStave(stave) { + this.stave = stave; + return this; + } + getWidth() { + return this.width; + } + setWidth(width) { + this.width = width; + return this; + } + getX() { + return this.x; + } + setX(x) { + this.x = x; + return this; + } + /** + * Runs setYShift() for the Glyph object so that it matches the position of line for + * the Stave provided. A `customShift` can also be given (measured in the same units + * as `setYShift` not in lines) and this will be added after all other positions are + * calculated from the Stave. + * + * Note that this routine only sets the yShift; it does not actually "place" (meaning + * draw) the Glyph on the Stave. Call .draw() afterwards to do that. + */ + placeGlyphOnLine(glyph, stave, line, customShift = 0) { + glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift); + } + getPadding(index) { + return index !== undefined && index < 2 ? 0 : this.padding; + } + setPadding(padding) { + this.padding = padding; + return this; + } + setLayoutMetrics(layoutMetrics) { + this.layoutMetrics = layoutMetrics; + return this; + } + getLayoutMetrics() { + return this.layoutMetrics; + } + // eslint-disable-next-line + draw(...args) { + // DO NOTHING. + } +} + + +/***/ }), + +/***/ "./src/stavenote.ts": +/*!**************************!*\ + !*** ./src/stavenote.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveNote": () => (/* binding */ StaveNote) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// This file implements notes for standard notation. This consists of one or +// more `NoteHeads`, an optional stem, and an optional flag. +// +// Throughout these comments, a "note" refers to the entire `StaveNote`, +// and a "key" refers to a specific pitch/notehead within a note. +// +// See `tests/stavenote_tests.ts` for usage examples. + + + + + + + + +function showDeprecationWarningForNoteHeads() { + // eslint-disable-next-line + console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.'); +} +// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (StaveNote.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_7__.log)('Vex.Flow.StaveNote', args); +} +const isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? note.keyProps.length - 1 : 0); +// Helper methods for rest positioning in ModifierContext. +function shiftRestVertical(rest, note, dir) { + const delta = dir; + rest.line += delta; + rest.maxLine += delta; + rest.minLine += delta; + rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta); +} +// Called from formatNotes :: center a rest between two notes +function centerRest(rest, noteU, noteL) { + const delta = rest.line - (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(noteU.minLine, noteL.maxLine); + rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta); + rest.line -= delta; + rest.maxLine -= delta; + rest.minLine -= delta; +} +class StaveNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.StaveNote; + } + /** + * @deprecated Use Stem.UP. + */ + static get STEM_UP() { + return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; + } + /** + * @deprecated Use Stem.DOWN. + */ + static get STEM_DOWN() { + return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN; + } + static get LEDGER_LINE_OFFSET() { + return 3; + } + static get minNoteheadPadding() { + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + /** Format notes inside a ModifierContext. */ + static format(notes, state) { + var _a, _b; + if (!notes || notes.length < 2) + return false; + const notesList = []; + for (let i = 0; i < notes.length; i++) { + // Formatting uses sortedKeyProps to calculate line and minL. + const props = notes[i].sortedKeyProps; + const line = props[0].keyProps.line; + let minL = props[props.length - 1].keyProps.line; + const stemDirection = notes[i].getStemDirection(); + const stemMax = notes[i].getStemLength() / 10; + const stemMin = notes[i].getStemMinimumLength() / 10; + let maxL; + if (notes[i].isRest()) { + maxL = line + notes[i].glyphProps.line_above; + minL = line - notes[i].glyphProps.line_below; + } + else { + maxL = + stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line; + minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax; + } + notesList.push({ + line: props[0].keyProps.line, + maxLine: maxL, + minLine: minL, + isrest: notes[i].isRest(), + stemDirection: stemDirection, + stemMax, + stemMin, + voice_shift: notes[i].getVoiceShiftWidth(), + is_displaced: notes[i].isDisplaced(), + note: notes[i], + }); + } + let voices = 0; + let noteU = undefined; + let noteM = undefined; + let noteL = undefined; + const draw = [false, false, false]; + for (let i = 0; i < notesList.length; i++) { + draw[i] = notesList[i].note.render_options.draw == false ? false : true; + } + if (draw[0] && draw[1] && draw[2]) { + // Three visible notes + voices = 3; + noteU = notesList[0]; + noteM = notesList[1]; + noteL = notesList[2]; + } + else if (draw[0] && draw[1]) { + // Two visible notes, 0 & 1 + voices = 2; + noteU = notesList[0]; + noteL = notesList[1]; + } + else if (draw[0] && draw[2]) { + // Two visible notes, 0 & 2 + voices = 2; + noteU = notesList[0]; + noteL = notesList[2]; + } + else if (draw[1] && draw[2]) { + // Two visible notes, 1 & 2 + voices = 2; + noteU = notesList[1]; + noteL = notesList[2]; + } + else { + // No shift required for less than 2 visible notes + return true; + } + // for two voice backward compatibility, ensure upper voice is stems up + // for three voices, the voices must be in order (upper, middle, lower) + if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) { + noteU = notesList[1]; + noteL = notesList[0]; + } + const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift); + let xShift = 0; + // Test for two voice note intersection + if (voices === 2) { + const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5; + if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) { + noteL.note.render_options.draw = false; + } + else if (noteU.minLine <= noteL.maxLine + lineSpacing) { + if (noteU.isrest) { + // shift rest up + shiftRestVertical(noteU, noteL, 1); + } + else if (noteL.isrest) { + // shift rest down + shiftRestVertical(noteL, noteU, -1); + } + else { + //Instead of shifting notes, remove the appropriate flag + //If we are sharing a line, switch one notes stem direction. + //If we are sharing a line and in the same voice, only then offset one note + const lineDiff = Math.abs(noteU.line - noteL.line); + if (noteU.note.hasStem() && noteL.note.hasStem()) { + const noteUHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration); + const noteLHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration); + if ( + // If unison is not configured, shift + !_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.UNISON || + // If we have different noteheads, shift + noteUHead !== noteLHead || + // If we have different dot values, shift + noteU.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0) + .length !== + noteL.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0) + .length || + // If the notes are quite close but not on the same line, shift + (lineDiff < 1 && lineDiff > 0) || + // If styles are different, shift + JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) { + xShift = voiceXShift + 2; + if (noteU.stemDirection === noteL.stemDirection) { + // upper voice is middle voice, so shift it right + noteU.note.setXShift(xShift); + } + else { + // shift lower voice right + noteL.note.setXShift(xShift); + } + } + else if (noteU.note.voice !== noteL.note.voice) { + //If we are not in the same voice + if (noteU.stemDirection === noteL.stemDirection) { + if (noteU.line != noteL.line) { + xShift = voiceXShift + 2; + noteU.note.setXShift(xShift); + } + else { + //same line, swap stem direction for one note + if (noteL.stemDirection === 1) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + } + } + } //Very close whole notes + } + else if (lineDiff < 1) { + xShift = voiceXShift + 2; + if (noteU.note.duration < noteL.note.duration) { + // upper voice is shorter, so shift it right + noteU.note.setXShift(xShift); + } + else { + // shift lower voice right + noteL.note.setXShift(xShift); + } + } + else if (noteU.note.hasStem()) { + noteU.stemDirection = -noteU.note.getStemDirection(); + noteU.note.setStemDirection(noteU.stemDirection); + } + else if (noteL.note.hasStem()) { + noteL.stemDirection = -noteL.note.getStemDirection(); + noteL.note.setStemDirection(noteL.stemDirection); + } + } + } + // format complete + state.right_shift += xShift; + return true; + } + if (!noteM) + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('InvalidState', 'noteM not defined.'); + // For three voices, test if rests can be repositioned + // + // Special case 1 :: middle voice rest between two notes + // + if (noteM.isrest && !noteU.isrest && !noteL.isrest) { + if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) { + const restHeight = noteM.maxLine - noteM.minLine; + const space = noteU.minLine - noteL.maxLine; + if (restHeight < space) { + // center middle voice rest between the upper and lower voices + centerRest(noteM, noteU, noteL); + } + else { + xShift = voiceXShift + 2; // shift middle rest right + noteM.note.setXShift(xShift); + if (noteL.note.hasBeam() === false) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { + noteU.stemDirection = 1; + noteU.note.setStemDirection(1); + } + } + // format complete + state.right_shift += xShift; + return true; + } + } + // Special case 2 :: all voices are rests + if (noteU.isrest && noteM.isrest && noteL.isrest) { + // Hide upper voice rest + noteU.note.render_options.draw = false; + // Hide lower voice rest + noteL.note.render_options.draw = false; + // format complete + state.right_shift += xShift; + return true; + } + // Test if any other rests can be repositioned + if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) { + // Hide middle voice rest + noteM.note.render_options.draw = false; + } + if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) { + // Hide middle voice rest + noteM.note.render_options.draw = false; + } + if (noteU.isrest && noteU.minLine <= noteM.maxLine) { + // shift upper voice rest up; + shiftRestVertical(noteU, noteM, 1); + } + if (noteL.isrest && noteM.minLine <= noteL.maxLine) { + // shift lower voice rest down + shiftRestVertical(noteL, noteM, -1); + } + // If middle voice intersects upper or lower voice + if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) { + // shift middle note right + xShift = voiceXShift + 2; + noteM.note.setXShift(xShift); + if (noteL.note.hasBeam() === false) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { + noteU.stemDirection = 1; + noteU.note.setStemDirection(1); + } + } + state.right_shift += xShift; + return true; + } + static postFormat(notes) { + if (!notes) + return false; + notes.forEach((note) => note.postFormat()); + return true; + } + constructor(noteStruct) { + var _a, _b, _c; + super(noteStruct); + ////////////////////////////////////////////////////////////////////////////////////////////////// + // INSTANCE MEMBERS + this.minLine = 0; + this.maxLine = 0; + // Sorted variant of keyProps used internally + this.sortedKeyProps = []; + this.ledgerLineStyle = {}; + this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble'; + this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0; + // Pull note rendering properties. + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType); + (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + // if true, displace note to right + this.displaced = false; + this.dot_shiftY = 0; + // for displaced ledger lines + this.use_default_head_x = false; + // Drawing + this._noteHeads = []; + this.modifiers = []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // font size for note heads and rests + glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.NOTATION_FONT_SCALE, + // number of stroke px to the left and right of head + stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET }); + this.calculateKeyProps(); + this.buildStem(); + // Set the stem direction + if (noteStruct.auto_stem) { + this.autoStem(); + } + else { + this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); + } + this.reset(); + this.buildFlag(); + } + reset() { + super.reset(); + // Save prior noteHead styles & reapply them after making new noteheads. + const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle()); + this.buildNoteHeads(); + this._noteHeads.forEach((noteHead, index) => { + const noteHeadStyle = noteHeadStyles[index]; + if (noteHeadStyle) + noteHead.setStyle(noteHeadStyle); + }); + const stave = this.stave; + if (stave) { + this.setStave(stave); + } + this.calcNoteDisplacements(); + return this; + } + setBeam(beam) { + this.beam = beam; + this.calcNoteDisplacements(); + // Update stem extension if a beam is assigned. + if (this.stem) { + this.stem.setExtension(this.getStemExtension()); + } + return this; + } + // Builds a `Stem` for the note + buildStem() { + this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem({ hide: !!this.isRest() })); + return this; + } + // Builds a `NoteHead` for each key in the note + buildNoteHeads() { + this._noteHeads = []; + const stemDirection = this.getStemDirection(); + const keys = this.getKeys(); + let lastLine = undefined; + let lineDiff = undefined; + let displaced = false; + // Draw notes from bottom to top. + // For down-stem notes, we draw from top to bottom. + let start; + let end; + let step; + if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + start = 0; + end = keys.length; + step = 1; + } + else { + start = keys.length - 1; + end = -1; + step = -1; + } + for (let i = start; i !== end; i += step) { + // Building noteheads rely on sortedKeNotes in order to calculate the displacements + const noteProps = this.sortedKeyProps[i].keyProps; + const line = noteProps.line; + // Keep track of last line with a note head, so that consecutive heads + // are correctly displaced. + if (lastLine === undefined) { + lastLine = line; + } + else { + lineDiff = Math.abs(lastLine - line); + if (lineDiff === 0 || lineDiff === 0.5) { + displaced = !displaced; + } + else { + displaced = false; + this.use_default_head_x = true; + } + } + lastLine = line; + const notehead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ + duration: this.duration, + note_type: this.noteType, + displaced, + stem_direction: stemDirection, + custom_glyph_code: noteProps.code, + glyph_font_scale: this.render_options.glyph_font_scale, + x_shift: noteProps.shift_right, + stem_up_x_offset: noteProps.stem_up_x_offset, + stem_down_x_offset: noteProps.stem_down_x_offset, + line: noteProps.line, + }); + this.addChildElement(notehead); + this._noteHeads[this.sortedKeyProps[i].index] = notehead; + } + } + // Automatically sets the stem direction based on the keys in the note + autoStem() { + this.setStemDirection(this.calculateOptimalStemDirection()); + } + calculateOptimalStemDirection() { + // Figure out optimal stem direction based on given notes + // minLine & maxLine rely on sortedKeyProps + this.minLine = this.sortedKeyProps[0].keyProps.line; + this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line; + const MIDDLE_LINE = 3; + const decider = (this.minLine + this.maxLine) / 2; + const stemDirection = decider < MIDDLE_LINE ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN; + return stemDirection; + } + // Calculates and stores the properties for each key in the note + calculateKeyProps() { + let lastLine; + for (let i = 0; i < this.keys.length; ++i) { + const key = this.keys[i]; + // All rests use the same position on the line. + // if (this.glyph.rest) key = this.glyph.position; + if (this.glyphProps.rest) + this.glyphProps.position = key; + const options = { octave_shift: this.octave_shift || 0, duration: this.duration }; + const props = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.keyProperties(key, this.clef, options); + if (!props) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('BadArguments', `Invalid key for note properties: ${key}`); + } + // Override line placement for default rests + if (props.key === 'R') { + if (this.duration === '1' || this.duration === 'w') { + props.line = 4; + } + else { + props.line = 3; + } + } + // Calculate displacement of this note + const line = props.line; + if (lastLine == undefined) { + lastLine = line; + } + else { + if (Math.abs(lastLine - line) === 0.5) { + this.displaced = true; + props.displaced = true; + // Have to mark the previous note as + // displaced as well, for modifier placement + if (this.keyProps.length > 0) { + this.keyProps[i - 1].displaced = true; + } + } + } + lastLine = line; + this.keyProps.push(props); + } + // Sort the notes from lowest line to highest line in sortedKeyProps + // Warn no longer required as keyProps remains unsorted + this.keyProps.forEach((keyProps, index) => { + this.sortedKeyProps.push({ keyProps, index }); + }); + this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line); + } + // Get the `BoundingBox` for the entire note + getBoundingBox() { + var _a, _b; + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call getBoundingBox on an unformatted note."); + } + const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics(); + const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx; + let minY = 0; + let maxY = 0; + const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2; + const lineSpacing = halfLineSpacing * 2; + if (this.isRest()) { + const y = this.ys[0]; + const frac = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToFraction(this.duration); + if (frac.equals(1) || frac.equals(2)) { + minY = y - halfLineSpacing; + maxY = y + halfLineSpacing; + } + else { + minY = y - this.glyphProps.line_above * lineSpacing; + maxY = y + this.glyphProps.line_below * lineSpacing; + } + } + else if (this.glyphProps.stem) { + const ys = this.getStemExtents(); + ys.baseY += halfLineSpacing * this.getStemDirection(); + minY = Math.min(ys.topY, ys.baseY); + maxY = Math.max(ys.topY, ys.baseY); + } + else { + minY = 0; + maxY = 0; + for (let i = 0; i < this.ys.length; ++i) { + const yy = this.ys[i]; + if (i === 0) { + minY = yy; + maxY = yy; + } + else { + minY = Math.min(yy, minY); + maxY = Math.max(yy, maxY); + } + } + minY -= halfLineSpacing; + maxY += halfLineSpacing; + } + return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(x, minY, w, maxY - minY); + } + // Gets the line number of the bottom note in the chord. + // If `isTopNote` is `true` then get the top note's line number instead + getLineNumber(isTopNote) { + if (!this.keyProps.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoKeyProps', "Can't get bottom note line, because note is not initialized properly."); + } + let resultLine = this.keyProps[0].line; + // No precondition assumed for sortedness of keyProps array + for (let i = 0; i < this.keyProps.length; i++) { + const thisLine = this.keyProps[i].line; + if (isTopNote) { + if (thisLine > resultLine) + resultLine = thisLine; + } + else { + if (thisLine < resultLine) + resultLine = thisLine; + } + } + return resultLine; + } + /** + * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. + */ + isRest() { + return this.glyphProps.rest; + } + // Determine if the current note is a chord + isChord() { + return !this.isRest() && this.keys.length > 1; + } + // Determine if the `StaveNote` has a stem + hasStem() { + return this.glyphProps.stem; + } + hasFlag() { + return super.hasFlag() && !this.isRest(); + } + getStemX() { + if (this.noteType === 'r') { + return this.getCenterGlyphX(); + } + else { + // We adjust the origin of the stem because we want the stem left-aligned + // with the notehead if stemmed-down, and right-aligned if stemmed-up + return super.getStemX() + (this.stem_direction ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / (2 * -this.stem_direction) : 0); + } + } + // Get the `y` coordinate for text placed on the top/bottom of a + // note at a desired `text_line` + getYForTopText(textLine) { + const extents = this.getStemExtents(); + return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); + } + getYForBottomText(textLine) { + const extents = this.getStemExtents(); + return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); + } + // Sets the current note to the provided `stave`. This applies + // `y` values to the `NoteHeads`. + setStave(stave) { + super.setStave(stave); + const ys = this._noteHeads.map((notehead) => { + notehead.setStave(stave); + return notehead.getY(); + }); + this.setYs(ys); + if (this.stem) { + const { y_top, y_bottom } = this.getNoteHeadBounds(); + this.stem.setYBounds(y_top, y_bottom); + } + return this; + } + // Check if note is shifted to the right + isDisplaced() { + return this.displaced; + } + // Sets whether shift note to the right. `displaced` is a `boolean` + setNoteDisplaced(displaced) { + this.displaced = displaced; + return this; + } + // Get the starting `x` coordinate for a `StaveTie` + getTieRightX() { + let tieStartX = this.getAbsoluteX(); + tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx; + if (this.modifierContext) + tieStartX += this.modifierContext.getRightShift(); + return tieStartX; + } + // Get the ending `x` coordinate for a `StaveTie` + getTieLeftX() { + let tieEndX = this.getAbsoluteX(); + tieEndX += this.x_shift - this.leftDisplacedHeadPx; + return tieEndX; + } + // Get the stave line on which to place a rest + getLineForRest() { + let restLine = this.keyProps[0].line; + if (this.keyProps.length > 1) { + const lastLine = this.keyProps[this.keyProps.length - 1].line; + const top = Math.max(restLine, lastLine); + const bot = Math.min(restLine, lastLine); + restLine = (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(top, bot); + } + return restLine; + } + // Get the default `x` and `y` coordinates for the provided `position` + // and key `index` + getModifierStartXY(position, index, options = {}) { + var _a, _b; + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); + } + const { ABOVE, BELOW, LEFT, RIGHT } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position; + let x = 0; + if (position === LEFT) { + // FIXME: Left modifier padding, move to font file + x = -1 * 2; + } + else if (position === RIGHT) { + // FIXME: Right modifier padding, move to font file + x = this.getGlyphWidth() + this.x_shift + 2; + if (this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP && + this.hasFlag() && + (options.forceFlagRight || isInnerNoteIndex(this, index))) { + x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0; + } + } + else if (position === BELOW || position === ABOVE) { + x = this.getGlyphWidth() / 2; + } + return { + x: this.getAbsoluteX() + x, + y: this.ys[index], + }; + } + // Sets the style of the complete StaveNote, including all keys + // and the stem. + setStyle(style) { + return super.setGroupStyle(style); + } + setStemStyle(style) { + const stem = this.getStem(); + if (stem) + stem.setStyle(style); + return this; + } + getStemStyle() { + var _a; + return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle(); + } + setLedgerLineStyle(style) { + this.ledgerLineStyle = style; + } + getLedgerLineStyle() { + return this.ledgerLineStyle; + } + setFlagStyle(style) { + var _a; + (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style); + } + getFlagStyle() { + var _a; + return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle(); + } + // Sets the notehead at `index` to the provided coloring `style`. + // + // `style` is an `object` with the following properties: `shadowColor`, + // `shadowBlur`, `fillStyle`, `strokeStyle` + setKeyStyle(index, style) { + this._noteHeads[index].setStyle(style); + return this; + } + setKeyLine(index, line) { + this.keyProps[index].line = line; + this.reset(); + return this; + } + getKeyLine(index) { + return this.keyProps[index].line; + } + // Get the width of the note if it is displaced. Used for `Voice` + // formatting + getVoiceShiftWidth() { + // TODO: may need to accommodate for dot here. + return this.getGlyphWidth() * (this.displaced ? 2 : 1); + } + // Calculates and sets the extra pixels to the left or right + // if the note is displaced. + calcNoteDisplacements() { + this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN ? this.getGlyphWidth() : 0); + // For upstems with flags, the extra space is unnecessary, since it's taken + // up by the flag. + this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? this.getGlyphWidth() : 0); + } + // Pre-render formatting + preFormat() { + if (this.preFormatted) + return; + let noteHeadPadding = 0; + if (this.modifierContext) { + this.modifierContext.preFormat(); + // If there are no modifiers on this note, make sure there is adequate padding + // between the notes. + if (this.modifierContext.getWidth() === 0) { + noteHeadPadding = StaveNote.minNoteheadPadding; + } + } + let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding; + // For upward flagged notes, the width of the flag needs to be added + if (this.shouldDrawFlag() && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + width += this.getGlyphWidth(); + // TODO: Add flag width as a separate metric + } + this.setWidth(width); + this.preFormatted = true; + } + /** + * @typedef {Object} noteHeadBounds + * @property {number} y_top the highest notehead bound + * @property {number} y_bottom the lowest notehead bound + * @property {number|Null} displaced_x the starting x for displaced noteheads + * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads + * @property {number} highest_line the highest notehead line in traditional music line + * numbering (bottom line = 1, top line = 5) + * @property {number} lowest_line the lowest notehead line + * @property {number|false} highest_displaced_line the highest staff line number + * for a displaced notehead + * @property {number|false} lowest_displaced_line + * @property {number} highest_non_displaced_line + * @property {number} lowest_non_displaced_line + */ + /** + * Get the staff line and y value for the highest & lowest noteheads + * @returns {noteHeadBounds} + */ + getNoteHeadBounds() { + // Top and bottom Y values for stem. + let yTop = +Infinity; + let yBottom = -Infinity; + let nonDisplacedX; + let displacedX; + let highestLine = this.checkStave().getNumLines(); + let lowestLine = 1; + let highestDisplacedLine; + let lowestDisplacedLine; + let highestNonDisplacedLine = highestLine; + let lowestNonDisplacedLine = lowestLine; + this._noteHeads.forEach((notehead) => { + const line = notehead.getLine(); + const y = notehead.getY(); + yTop = Math.min(y, yTop); + yBottom = Math.max(y, yBottom); + if (displacedX === undefined && notehead.isDisplaced()) { + displacedX = notehead.getAbsoluteX(); + } + if (nonDisplacedX === undefined && !notehead.isDisplaced()) { + nonDisplacedX = notehead.getAbsoluteX(); + } + highestLine = Math.max(line, highestLine); + lowestLine = Math.min(line, lowestLine); + if (notehead.isDisplaced()) { + highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine); + lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine); + } + else { + highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine); + lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine); + } + }, this); + return { + y_top: yTop, + y_bottom: yBottom, + displaced_x: displacedX, + non_displaced_x: nonDisplacedX, + highest_line: highestLine, + lowest_line: lowestLine, + highest_displaced_line: highestDisplacedLine, + lowest_displaced_line: lowestDisplacedLine, + highest_non_displaced_line: highestNonDisplacedLine, + lowest_non_displaced_line: lowestNonDisplacedLine, + }; + } + // Get the starting `x` coordinate for the noteheads + getNoteHeadBeginX() { + return this.getAbsoluteX() + this.x_shift; + } + // Get the ending `x` coordinate for the noteheads + getNoteHeadEndX() { + const xBegin = this.getNoteHeadBeginX(); + return xBegin + this.getGlyphWidth(); + } + get noteHeads() { + return this._noteHeads.slice(); + } + /** @deprecated use StaveNote.noteHeads instead. */ + get note_heads() { + showDeprecationWarningForNoteHeads(); + return this.noteHeads; + } + // Draw the ledger lines between the stave and the highest/lowest keys + drawLedgerLines() { + const stave = this.checkStave(); + const { glyphProps, render_options: { stroke_px }, } = this; + const ctx = this.checkContext(); + const width = glyphProps.getWidth() + stroke_px * 2; + const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2; + if (this.isRest()) + return; + if (!ctx) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); + } + const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds(); + // Early out if there are no ledger lines to draw. + if (highest_line < 6 && lowest_line > 0) + return; + const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0); + const drawLedgerLine = (y, normal, displaced) => { + let x; + if (displaced && normal) + x = min_x - stroke_px; + else if (normal) + x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px; + else + x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px; + const ledgerWidth = normal && displaced ? doubleWidth : width; + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + ledgerWidth, y); + ctx.stroke(); + }; + const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle()); + this.applyStyle(ctx, style); + // Draw ledger lines below the staff: + for (let line = 6; line <= highest_line; ++line) { + const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line; + const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line; + drawLedgerLine(stave.getYForNote(line), normal, displaced); + } + // Draw ledger lines above the staff: + for (let line = 0; line >= lowest_line; --line) { + const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line; + const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line; + drawLedgerLine(stave.getYForNote(line), normal, displaced); + } + this.restoreStyle(ctx, style); + } + // Draw all key modifiers + drawModifiers(noteheadParam) { + const ctx = this.checkContext(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + const index = modifier.checkIndex(); + const notehead = this._noteHeads[index]; + if (notehead == noteheadParam) { + const noteheadStyle = notehead.getStyle(); + notehead.applyStyle(ctx, noteheadStyle); + modifier.setContext(ctx); + modifier.drawWithStyle(); + notehead.restoreStyle(ctx, noteheadStyle); + } + } + } + shouldDrawFlag() { + const hasStem = this.stem !== undefined; + const hasFlag = this.glyphProps.flag == true; + const hasNoBeam = this.beam === undefined; + return hasStem && hasFlag && hasNoBeam; + } + // Draw the flag for the note + drawFlag() { + var _a, _b, _c, _d, _e; + const ctx = this.checkContext(); + if (!ctx) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); + } + if (this.shouldDrawFlag()) { + const { y_top, y_bottom } = this.getNoteHeadBounds(); + // eslint-disable-next-line + const noteStemHeight = this.stem.getHeight(); + const flagX = this.getStemX(); + // What's with the magic +/- 2 + // ANSWER: a corner of the note stem pokes out beyond the tip of the flag. + // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely. + // Alternatively, we could shorten the stem. + const flagY = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN + ? // Down stems are below the note head and have flags on the right. + y_top - + noteStemHeight + + 2 - + (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() - + ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale()) + : // Up stems are above the note head and have flags on the right. + y_bottom - + noteStemHeight - + 2 + + (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() - + ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale()); + // Draw the Flag + (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY); + } + } + // Draw the NoteHeads + drawNoteHeads() { + const ctx = this.checkContext(); + this._noteHeads.forEach((notehead) => { + notehead.applyStyle(ctx); + ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true }); + notehead.setContext(ctx).draw(); + this.drawModifiers(notehead); + ctx.closeGroup(); + notehead.restoreStyle(ctx); + }); + } + drawStem(stemOptions) { + // GCR TODO: I can't find any context in which this is called with the stemStruct + // argument in the codebase or tests. Nor can I find a case where super.drawStem + // is called at all. Perhaps these should be removed? + const ctx = this.checkContext(); + if (stemOptions) { + this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem(stemOptions)); + } + // If we will render a flag, we shorten the stem so that the tip + // does not poke through the flag. + if (this.shouldDrawFlag() && this.stem) { + this.stem.adjustHeightForFlag(); + } + if (this.stem) { + this.stem.setContext(ctx).draw(); + } + } + /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */ + getStaveNoteScale() { + return 1.0; + } + /** + * Override stemmablenote stem extension to adjust for distance from middle line. + */ + getStemExtension() { + const super_stem_extension = super.getStemExtension(); + if (!this.glyphProps.stem) { + return super_stem_extension; + } + const stem_direction = this.getStemDirection(); + if (stem_direction !== this.calculateOptimalStemDirection()) { + return super_stem_extension; // no adjustment for manually set stem direction. + } + let mid_line_distance; + const MIDDLE_LINE = 3; + if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + // Note that the use of maxLine here instead of minLine might + // seem counterintuitive, but in the case of (say) treble clef + // chord(F2, E4) stem up, we do not want to extend the stem because + // of F2, when a normal octave-length stem above E4 is fine. + // + // maxLine and minLine are set in calculateOptimalStemDirection() so + // will be known. + mid_line_distance = MIDDLE_LINE - this.maxLine; + } + else { + mid_line_distance = this.minLine - MIDDLE_LINE; + } + // how many lines more than an octave is the relevant notehead? + const lines_over_octave_from_mid_line = mid_line_distance - 3.5; + if (lines_over_octave_from_mid_line <= 0) { + return super_stem_extension; + } + const stave = this.getStave(); + let spacing_between_lines = 10; + if (stave != undefined) { + spacing_between_lines = stave.getSpacingBetweenLines(); + } + return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines; + } + // Draws all the `StaveNote` parts. This is the main drawing method. + draw() { + if (this.render_options.draw === false) + return; + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', "Can't draw note without Y values."); + } + const ctx = this.checkContext(); + const xBegin = this.getNoteHeadBeginX(); + const shouldRenderStem = this.hasStem() && !this.beam; + // Format note head x positions + this._noteHeads.forEach((notehead) => notehead.setX(xBegin)); + if (this.stem) { + // Format stem x positions + const stemX = this.getStemX(); + this.stem.setNoteHeadXBounds(stemX, stemX); + } + L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys); + // Apply the overall style -- may be contradicted by local settings: + this.applyStyle(); + ctx.openGroup('stavenote', this.getAttribute('id')); + this.drawLedgerLines(); + if (shouldRenderStem) + this.drawStem(); + this.drawNoteHeads(); + this.drawFlag(); + ctx.closeGroup(); + this.restoreStyle(); + this.setRendered(); + } +} +StaveNote.DEBUG = false; + + + +/***/ }), + +/***/ "./src/staverepetition.ts": +/*!********************************!*\ + !*** ./src/staverepetition.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Repetition": () => (/* binding */ Repetition) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Larry Kuhns 2011 + + + + + +class Repetition extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Repetition; + } + constructor(type, x, y_shift) { + super(); + this.symbol_type = type; + this.x = x; + this.x_shift = 0; + this.y_shift = y_shift; + this.resetFont(); + } + setShiftX(x) { + this.x_shift = x; + return this; + } + setShiftY(y) { + this.y_shift = y; + return this; + } + draw(stave, x) { + this.setRendered(); + switch (this.symbol_type) { + case Repetition.type.CODA_RIGHT: + this.drawCodaFixed(stave, x + stave.getWidth()); + break; + case Repetition.type.CODA_LEFT: + this.drawSymbolText(stave, x, 'Coda', true); + break; + case Repetition.type.SEGNO_LEFT: + this.drawSignoFixed(stave, x); + break; + case Repetition.type.SEGNO_RIGHT: + this.drawSignoFixed(stave, x + stave.getWidth()); + break; + case Repetition.type.DC: + this.drawSymbolText(stave, x, 'D.C.', false); + break; + case Repetition.type.DC_AL_CODA: + this.drawSymbolText(stave, x, 'D.C. al', true); + break; + case Repetition.type.DC_AL_FINE: + this.drawSymbolText(stave, x, 'D.C. al Fine', false); + break; + case Repetition.type.DS: + this.drawSymbolText(stave, x, 'D.S.', false); + break; + case Repetition.type.DS_AL_CODA: + this.drawSymbolText(stave, x, 'D.S. al', true); + break; + case Repetition.type.DS_AL_FINE: + this.drawSymbolText(stave, x, 'D.S. al Fine', false); + break; + case Repetition.type.FINE: + this.drawSymbolText(stave, x, 'Fine', false); + break; + case Repetition.type.TO_CODA: + this.drawSymbolText(stave, x, 'To', true); + break; + default: + break; + } + return this; + } + drawCodaFixed(stave, x) { + const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' }); + return this; + } + drawSignoFixed(stave, x) { + const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' }); + return this; + } + drawSymbolText(stave, x, text, draw_coda) { + var _a; + const ctx = stave.checkContext(); + ctx.save(); + ctx.setFont(this.textFont); + let text_x = 0; + let symbol_x = 0; + const modifierWidth = stave.getNoteStartX() - this.x; + switch (this.symbol_type) { + // To the left with symbol + case Repetition.type.CODA_LEFT: + // Offset Coda text to right of stave beginning + text_x = this.x + stave.getVerticalBarWidth(); + symbol_x = + text_x + + ctx.measureText(text).width + + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + break; + // To the right without symbol + case Repetition.type.DC: + case Repetition.type.DC_AL_FINE: + case Repetition.type.DS: + case Repetition.type.DS_AL_FINE: + case Repetition.type.FINE: + text_x = + this.x + + x + + this.x_shift + + stave.getWidth() - + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - + modifierWidth - + ctx.measureText(text).width; + break; + // To the right with symbol + default: + text_x = + this.x + + x + + this.x_shift + + stave.getWidth() - + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - + modifierWidth - + ctx.measureText(text).width - + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + symbol_x = + text_x + + ctx.measureText(text).width + + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + break; + } + const y = stave.getYForTopText(stave.getNumLines()) + + this.y_shift + + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY'); + if (draw_coda) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, symbol_x, y, _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', { + category: 'coda', + }); + } + ctx.fillText(text, text_x, y + 5); + ctx.restore(); + return this; + } +} +Repetition.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE / 3, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; +Repetition.type = { + NONE: 1, + CODA_LEFT: 2, + CODA_RIGHT: 3, + SEGNO_LEFT: 4, + SEGNO_RIGHT: 5, + DC: 6, + DC_AL_CODA: 7, + DC_AL_FINE: 8, + DS: 9, + DS_AL_CODA: 10, + DS_AL_FINE: 11, + FINE: 12, + TO_CODA: 13, // To Coda at end of stave +}; + + + +/***/ }), + +/***/ "./src/stavesection.ts": +/*!*****************************!*\ + !*** ./src/stavesection.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveSection": () => (/* binding */ StaveSection) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Larry Kuhns 2011 + + + + +class StaveSection extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveSection; + } + constructor(section, x, shift_y, drawRect = true) { + super(); + this.setWidth(16); + this.section = section; + this.x = x; + this.shift_x = 0; + this.shift_y = shift_y; + this.drawRect = drawRect; + this.resetFont(); + } + setStaveSection(section) { + this.section = section; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + draw(stave, shift_x) { + const borderWidth = 2; + const padding = 2; + const ctx = stave.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setLineWidth(borderWidth); + ctx.setFont(this.textFont); + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); + const textWidth = textFormatter.getWidthForTextInPx(this.section); + const textY = textFormatter.getYForStringInPx(this.section); + const textHeight = textY.height; + const headroom = -1 * textY.yMin; + const width = textWidth + 2 * padding; // add left & right padding + const height = textHeight + 2 * padding; // add top & bottom padding + // Seems to be a good default y + const y = stave.getYForTopText(1.5) + this.shift_y; + const x = this.x + shift_x; + if (this.drawRect) { + ctx.beginPath(); + ctx.rect(x, y - height + headroom, width, height); + ctx.stroke(); + } + ctx.fillText(this.section, x + padding, y - padding); + ctx.restore(); + return this; + } +} +StaveSection.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 10, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavetempo.ts": +/*!***************************!*\ + !*** ./src/stavetempo.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveTempo": () => (/* binding */ StaveTempo) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Radosaw Eichler 2012 + + + + + + +class StaveTempo extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StaveTempo; + } + constructor(tempo, x, shift_y) { + super(); + /** Font size for note. */ + this.render_options = { glyph_font_scale: 30 }; + this.tempo = tempo; + this.position = _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifierPosition.ABOVE; + this.x = x; + this.shift_x = 10; + this.shift_y = shift_y; + this.resetFont(); + } + setTempo(tempo) { + this.tempo = tempo; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + draw(stave, shift_x) { + const ctx = stave.checkContext(); + this.setRendered(); + const options = this.render_options; + const scale = options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + const name = this.tempo.name; + const duration = this.tempo.duration; + const dots = this.tempo.dots || 0; + const bpm = this.tempo.bpm; + let x = this.x + this.shift_x + shift_x; + const y = stave.getYForTopText(1) + this.shift_y; + ctx.save(); + const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); + if (name) { + ctx.setFont(this.textFont); + ctx.fillText(name, x, y); + x += textFormatter.getWidthForTextInPx(name); + } + if (duration && bpm) { + // Override the weight and style. + const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' }); + ctx.setFont(noteTextFont); + const noteTextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(noteTextFont); + if (name) { + x += noteTextFormatter.getWidthForTextInPx('|'); + ctx.fillText('(', x, y); + x += noteTextFormatter.getWidthForTextInPx('('); + } + const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(duration); + x += 3 * scale; + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head); + x += _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale); + // Draw stem and flags + if (glyphProps.stem) { + let stem_height = 30; + if (glyphProps.beam_count) + stem_height += 3 * (glyphProps.beam_count - 1); + stem_height *= scale; + const y_top = y - stem_height; + ctx.fillRect(x - scale, y_top, scale, stem_height); + if (glyphProps.code && glyphProps.code_flag_upstem) { + const flagMetrics = _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, { + category: 'flag.staveTempo', + }); + x += (flagMetrics.width * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution; + } + } + // Draw dot + for (let i = 0; i < dots; i++) { + x += 6 * scale; + ctx.beginPath(); + ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false); + ctx.fill(); + } + ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y); + } + ctx.restore(); + return this; + } +} +StaveTempo.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: 14, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavetext.ts": +/*!**************************!*\ + !*** ./src/stavetext.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveText": () => (/* binding */ StaveText) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2014 + + + + + +class StaveText extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveText; + } + constructor(text, position, options = {}) { + super(); + this.setWidth(16); + this.text = text; + this.position = position; + this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: _textnote__WEBPACK_IMPORTED_MODULE_2__.TextNote.Justification.CENTER }, options); + this.resetFont(); + } + setStaveText(text) { + this.text = text; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + setText(text) { + this.text = text; + return this; + } + draw(stave) { + const ctx = stave.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setLineWidth(2); + ctx.setFont(this.textFont); + const text_width = ctx.measureText('' + this.text).width; + let x; + let y; + switch (this.position) { + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT: + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.RIGHT: + y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y; + if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT) { + x = stave.getX() - text_width - 24 + this.options.shift_x; + } + else { + x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x; + } + break; + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE: + case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BELOW: + x = stave.getX() + this.options.shift_x; + if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.CENTER) { + x += stave.getWidth() / 2 - text_width / 2; + } + else if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.RIGHT) { + x += stave.getWidth() - text_width; + } + if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE) { + y = stave.getYForTopText(2) + this.options.shift_y; + } + else { + y = stave.getYForBottomText(2) + this.options.shift_y; + } + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.'); + } + ctx.fillText('' + this.text, x, y + 4); + ctx.restore(); + return this; + } +} +StaveText.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: 16, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stavetie.ts": +/*!*************************!*\ + !*** ./src/stavetie.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StaveTie": () => (/* binding */ StaveTie) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// This class implements varies types of ties between contiguous notes. The +// ties include: regular ties, hammer ons, pull offs, and slides. + + + +class StaveTie extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveTie; + } + /** + * @param notes is a struct that has: + * + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * + * @param text + */ + constructor(notes, text) { + super(); + this.setNotes(notes); + this.text = text; + this.render_options = { + cp1: 8, + cp2: 12, + text_shift_x: 0, + first_x_shift: 0, + last_x_shift: 0, + y_shift: 7, + tie_spacing: 0, + }; + this.resetFont(); + } + setDirection(direction) { + this.direction = direction; + return this; + } + /** + * Set the notes to attach this tie to. + * + * @param {!Object} notes The notes to tie up. + */ + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.'); + } + if (!notes.first_indices) { + notes.first_indices = [0]; + } + if (!notes.last_indices) { + notes.last_indices = [0]; + } + if (notes.first_indices.length !== notes.last_indices.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tied notes must have same number of indices.'); + } + this.notes = notes; + return this; + } + /** + * @return {boolean} Returns true if this is a partial bar. + */ + isPartial() { + return !this.notes.first_note || !this.notes.last_note; + } + renderTie(params) { + if (params.first_ys.length === 0 || params.last_ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'No Y-values to render'); + } + const ctx = this.checkContext(); + let cp1 = this.render_options.cp1; + let cp2 = this.render_options.cp2; + if (Math.abs(params.last_x_px - params.first_x_px) < 10) { + cp1 = 2; + cp2 = 8; + } + const first_x_shift = this.render_options.first_x_shift; + const last_x_shift = this.render_options.last_x_shift; + const y_shift = this.render_options.y_shift * params.direction; + // setNotes(...) verified that first_indices and last_indices are not undefined. + // As a result, we use the ! non-null assertion operator here. + // eslint-disable-next-line + const first_indices = this.notes.first_indices; + // eslint-disable-next-line + const last_indices = this.notes.last_indices; + this.applyStyle(); + ctx.openGroup('stavetie', this.getAttribute('id')); + for (let i = 0; i < first_indices.length; ++i) { + const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2; + const first_y_px = params.first_ys[first_indices[i]] + y_shift; + const last_y_px = params.last_ys[last_indices[i]] + y_shift; + if (isNaN(first_y_px) || isNaN(last_y_px)) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Bad indices for tie rendering.'); + } + const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction; + const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction; + ctx.beginPath(); + ctx.moveTo(params.first_x_px + first_x_shift, first_y_px); + ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px); + ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px); + ctx.closePath(); + ctx.fill(); + } + ctx.closeGroup(); + this.restoreStyle(); + } + renderText(first_x_px, last_x_px) { + var _a, _b, _c; + if (!this.text) + return; + const ctx = this.checkContext(); + let center_x = (first_x_px + last_x_px) / 2; + center_x -= ctx.measureText(this.text).width / 2; + const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave(); + if (stave) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1); + ctx.restore(); + } + } + /** + * Returns the TieNotes structure of the first and last note this tie connects. + */ + getNotes() { + return this.notes; + } + draw() { + this.checkContext(); + this.setRendered(); + const first_note = this.notes.first_note; + const last_note = this.notes.last_note; + // Provide some default values so the compiler doesn't complain. + let first_x_px = 0; + let last_x_px = 0; + let first_ys = [0]; + let last_ys = [0]; + let stem_direction = 0; + if (first_note) { + first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing; + stem_direction = first_note.getStemDirection(); + first_ys = first_note.getYs(); + } + else if (last_note) { + const stave = last_note.checkStave(); + first_x_px = stave.getTieStartX(); + first_ys = last_note.getYs(); + this.notes.first_indices = this.notes.last_indices; + } + if (last_note) { + last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing; + stem_direction = last_note.getStemDirection(); + last_ys = last_note.getYs(); + } + else if (first_note) { + const stave = first_note.checkStave(); + last_x_px = stave.getTieEndX(); + last_ys = first_note.getYs(); + this.notes.last_indices = this.notes.first_indices; + } + if (this.direction) { + stem_direction = this.direction; + } + this.renderTie({ + first_x_px, + last_x_px, + first_ys, + last_ys, + direction: stem_direction, + }); + this.renderText(first_x_px, last_x_px); + return true; + } +} +/** Default text font. */ +StaveTie.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); + + + +/***/ }), + +/***/ "./src/stavevolta.ts": +/*!***************************!*\ + !*** ./src/stavevolta.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Volta": () => (/* binding */ Volta), +/* harmony export */ "VoltaType": () => (/* binding */ VoltaType) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Larry Kuhns 2011 + + + +var VoltaType; +(function (VoltaType) { + VoltaType[VoltaType["NONE"] = 1] = "NONE"; + VoltaType[VoltaType["BEGIN"] = 2] = "BEGIN"; + VoltaType[VoltaType["MID"] = 3] = "MID"; + VoltaType[VoltaType["END"] = 4] = "END"; + VoltaType[VoltaType["BEGIN_END"] = 5] = "BEGIN_END"; +})(VoltaType || (VoltaType = {})); +class Volta extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Volta; + } + static get type() { + return VoltaType; + } + constructor(type, number, x, y_shift) { + super(); + this.volta = type; + this.x = x; + this.y_shift = y_shift; + this.number = number; + this.resetFont(); + } + setShiftY(y) { + this.y_shift = y; + return this; + } + draw(stave, x) { + const ctx = stave.checkContext(); + this.setRendered(); + let width = stave.getWidth() - x; // don't include x (offset) for width + const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + const vert_height = 1.5 * stave.getSpacingBetweenLines(); + switch (this.volta) { + case VoltaType.BEGIN: + ctx.fillRect(this.x + x, top_y, 1, vert_height); + break; + case VoltaType.END: + width -= 5; + ctx.fillRect(this.x + x + width, top_y, 1, vert_height); + break; + case VoltaType.BEGIN_END: + width -= 3; + ctx.fillRect(this.x + x, top_y, 1, vert_height); + ctx.fillRect(this.x + x + width, top_y, 1, vert_height); + break; + default: + break; + } + // If the beginning of a volta, draw measure number + if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText(this.number, this.x + x + 5, top_y + 15); + ctx.restore(); + } + ctx.fillRect(this.x + x, top_y, width, 1); + return this; + } +} +Volta.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 9, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/stem.ts": +/*!*********************!*\ + !*** ./src/stem.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Stem": () => (/* binding */ Stem) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// This file implements the `Stem` object. Generally this object is handled +// by its parent `StemmableNote`. + + + + +// eslint-disable-next-line +function L(...args) { + if (Stem.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Stem', args); +} +class Stem extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Stem; + } + // Stem directions + static get UP() { + return 1; + } + static get DOWN() { + return -1; + } + // Theme + static get WIDTH() { + return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_WIDTH; + } + static get HEIGHT() { + return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_HEIGHT; + } + constructor(options) { + super(); + this.stem_up_y_offset = 0; + this.stem_down_y_offset = 0; + this.stem_up_y_base_offset = 0; + this.stem_down_y_base_offset = 0; + // Default notehead x bounds + this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0; + this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0; + // Y bounds for top/bottom most notehead + this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0; + this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0; + // Stem top extension + this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0; + // Direction of the stem + this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0; + // Flag to override all draw calls + this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false; + this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false; + this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0; + // Use to adjust the rendered height without affecting + // the results of `.getExtents()` + this.renderHeightAdjustment = 0; + this.setOptions(options); + } + setOptions(options) { + // Changing where the stem meets the head + this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0; + this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0; + this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0; + this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0; + } + // Set the x bounds for the default notehead + setNoteHeadXBounds(x_begin, x_end) { + this.x_begin = x_begin; + this.x_end = x_end; + return this; + } + // Set the direction of the stem in relation to the noteheads + setDirection(direction) { + this.stem_direction = direction; + } + // Set the extension for the stem, generally for flags or beams + setExtension(ext) { + this.stem_extension = ext; + } + getExtension() { + return this.stem_extension; + } + // The the y bounds for the top and bottom noteheads + setYBounds(y_top, y_bottom) { + this.y_top = y_top; + this.y_bottom = y_bottom; + } + // Gets the entire height for the stem + getHeight() { + const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset; + const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping. + return unsigned_height * this.stem_direction; + } + getBoundingBox() { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NotImplemented', 'getBoundingBox() not implemented.'); + } + // Get the y coordinates for the very base of the stem to the top of + // the extension + getExtents() { + const isStemUp = this.stem_direction === Stem.UP; + const ys = [this.y_top, this.y_bottom]; + const stemHeight = Stem.HEIGHT + this.stem_extension; + const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys); + const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys); + const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction; + return { topY: stemTipY, baseY: outerMostNoteheadY }; + } + setVisibility(isVisible) { + this.hide = !isVisible; + return this; + } + setStemlet(isStemlet, stemletHeight) { + this.isStemlet = isStemlet; + this.stemletHeight = stemletHeight; + return this; + } + adjustHeightForFlag() { + this.renderHeightAdjustment = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3); + } + adjustHeightForBeam() { + this.renderHeightAdjustment = -Stem.WIDTH / 2; + } + // Render the stem onto the canvas + draw() { + this.setRendered(); + if (this.hide) + return; + const ctx = this.checkContext(); + let stem_x; + let stem_y; + const stem_direction = this.stem_direction; + let y_base_offset = 0; + if (stem_direction === Stem.DOWN) { + // Down stems are rendered to the left of the head. + stem_x = this.x_begin; + stem_y = this.y_top + this.stem_down_y_offset; + y_base_offset = this.stem_down_y_base_offset; + } + else { + // Up stems are rendered to the right of the head. + stem_x = this.x_end; + stem_y = this.y_bottom - this.stem_up_y_offset; + y_base_offset = this.stem_up_y_base_offset; + } + const stemHeight = this.getHeight(); + L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom); + // The offset from the stem's base which is required fo satisfy the stemlet height + const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0; + // Draw the stem + ctx.save(); + this.applyStyle(); + ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true }); + ctx.beginPath(); + ctx.setLineWidth(Stem.WIDTH); + ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset); + ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction); + ctx.stroke(); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */ +Stem.DEBUG = false; + + + +/***/ }), + +/***/ "./src/stemmablenote.ts": +/*!******************************!*\ + !*** ./src/stemmablenote.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StemmableNote": () => (/* binding */ StemmableNote) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// `StemmableNote` is an abstract interface for notes with optional stems. +// Examples of stemmable notes are `StaveNote` and `TabNote` + + + + + + +class StemmableNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StemmableNote; + } + constructor(noteStruct) { + super(noteStruct); + } + // Get and set the note's `Stem` + getStem() { + return this.stem; + } + checkStem() { + if (!this.stem) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to instance'); + } + return this.stem; + } + setStem(stem) { + this.stem = stem; + this.addChildElement(stem); + return this; + } + // Builds and sets a new stem + buildStem() { + const stem = new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(); + this.setStem(stem); + return this; + } + buildFlag(category = 'flag') { + const { glyphProps } = this; + if (this.hasFlag()) { + const flagCode = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem; + if (flagCode) + this.flag = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(flagCode, this.render_options.glyph_font_scale, { category }); + } + } + // Get the custom glyph associated with the outer note head on the base of the stem. + getBaseCustomNoteHeadGlyphProps() { + if (this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + return this.customGlyphs[this.customGlyphs.length - 1]; + } + else { + return this.customGlyphs[0]; + } + } + // Get the full length of stem + getStemLength() { + return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT + this.getStemExtension(); + } + // Get the number of beams for this duration + getBeamCount() { + const glyphProps = this.getGlyphProps(); + if (glyphProps) { + return glyphProps.beam_count; + } + else { + return 0; + } + } + // Get the minimum length of stem + getStemMinimumLength() { + const frac = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToFraction(this.duration); + let length = frac.value() <= 1 ? 0 : 20; + // if note is flagged, cannot shorten beam + switch (this.duration) { + case '8': + if (this.beam == undefined) + length = 35; + break; + case '16': + length = this.beam == undefined ? 35 : 25; + break; + case '32': + length = this.beam == undefined ? 45 : 35; + break; + case '64': + length = this.beam == undefined ? 50 : 40; + break; + case '128': + length = this.beam == undefined ? 55 : 45; + break; + default: + break; + } + return length; + } + // Get/set the direction of the stem + getStemDirection() { + if (!this.stem_direction) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + return this.stem_direction; + } + setStemDirection(direction) { + if (!direction) + direction = _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; + if (direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArgument', `Invalid stem direction: ${direction}`); + } + this.stem_direction = direction; + // Reset and reformat everything. Flag has to be built before calling getStemExtension. + this.reset(); + if (this.hasFlag()) { + this.buildFlag(); + } + this.beam = undefined; + if (this.stem) { + this.stem.setDirection(direction); + this.stem.setExtension(this.getStemExtension()); + // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten + // the stem appropriately. If there's no custom note head, lookup the standard notehead. + const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps(); + // Get the font-specific customizations for the note heads. + const offsets = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, { + offsetYBaseStemUp: 0, + offsetYTopStemUp: 0, + offsetYBaseStemDown: 0, + offsetYTopStemDown: 0, + }); + // Configure the stem to use these offsets. + this.stem.setOptions({ + stem_up_y_offset: offsets.offsetYTopStemUp, + stem_down_y_offset: offsets.offsetYTopStemDown, + stem_up_y_base_offset: offsets.offsetYBaseStemUp, + stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset, + }); + } + if (this.preFormatted) { + this.preFormat(); + } + return this; + } + // Get the `x` coordinate of the stem + getStemX() { + const x_begin = this.getAbsoluteX() + this.x_shift; + const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth(); + const stem_x = this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? x_begin : x_end; + return stem_x; + } + // Get the `x` coordinate for the center of the glyph. + // Used for `TabNote` stems and stemlets over rests + getCenterGlyphX() { + return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2; + } + // Get the stem extension for the current duration + getStemExtension() { + const glyphProps = this.getGlyphProps(); + if (this.stem_extension_override != undefined) { + return this.stem_extension_override; + } + // Use stem_beam_extension with beams + if (this.beam) { + return glyphProps.stem_beam_extension; + } + if (glyphProps) { + return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension; + } + return 0; + } + // Set the stem length to a specific. Will override the default length. + setStemLength(height) { + this.stem_extension_override = height - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT; + return this; + } + // Get the top and bottom `y` values of the stem. + getStemExtents() { + if (!this.stem) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); + return this.stem.getExtents(); + } + /** Gets the `y` value for the top modifiers at a specific `textLine`. */ + getYForTopText(textLine) { + const stave = this.checkStave(); + if (this.hasStem()) { + const extents = this.getStemExtents(); + if (!extents) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.'); + return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); + } + else { + return stave.getYForTopText(textLine); + } + } + /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */ + getYForBottomText(textLine) { + const stave = this.checkStave(); + if (this.hasStem()) { + const extents = this.getStemExtents(); + if (!extents) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.'); + return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); + } + else { + return stave.getYForBottomText(textLine); + } + } + hasFlag() { + return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(this.duration).flag == true && !this.beam; + } + /** Post formats the note. */ + postFormat() { + var _a; + (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat(); + this.postFormatted = true; + return this; + } + /** Renders the stem onto the canvas. */ + drawStem(stemOptions) { + var _a; + this.checkContext(); + this.setRendered(); + this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(stemOptions)); + (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw(); + } +} + + +/***/ }), + +/***/ "./src/stringnumber.ts": +/*!*****************************!*\ + !*** ./src/stringnumber.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StringNumber": () => (/* binding */ StringNumber) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Larry Kuhns +// +// This file implements the `StringNumber` class which renders string +// number annotations beside notes. + + + + + + + +class StringNumber extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StringNumber; + } + static get metrics() { + var _a; + return ((_a = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : { + verticalPadding: 0, + stemPadding: 0, + leftPadding: 0, + rightPadding: 0, + }); + } + // ## Static Methods + // Arrange string numbers inside a `ModifierContext` + static format(nums, state) { + /** + * The modifier context's left_shift state. + */ + const left_shift = state.left_shift; + /** + * The modifier context's right_shift state. + */ + const right_shift = state.right_shift; + const num_spacing = 1; + if (!nums || nums.length === 0) + return false; + const nums_list = []; + let prev_note = null; + let extraXSpaceForDisplacedNotehead = 0; + let shift_right = 0; + const modLines = 0; + for (let i = 0; i < nums.length; ++i) { + const num = nums[i]; + const note = num.getNote(); + const pos = num.getPosition(); + if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(note)) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoStaveNote'); + } + const index = num.checkIndex(); + const props = note.getKeyProps()[index]; + const mc = note.getModifierContext(); + const verticalSpaceNeeded = (num.radius * 2) / _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE + 0.5; + if (mc) { + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) { + num.text_line = mc.getState().top_text_line; + state.top_text_line += verticalSpaceNeeded; + } + else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) { + num.text_line = mc.getState().text_line; + state.text_line += verticalSpaceNeeded; + } + } + if (note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead); + } + if (right_shift === 0) { + shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right); + } + } + prev_note = note; + } + const glyphLine = modLines === 0 ? props.line : modLines; + nums_list.push({ + pos, + note, + num, + line: glyphLine, + shiftL: extraXSpaceForDisplacedNotehead, + shiftR: shift_right, + }); + } + // Sort string numbers by line number. + nums_list.sort((a, b) => b.line - a.line); + let num_shiftR = 0; + let x_widthL = 0; + let x_widthR = 0; + let last_line = null; + let last_note = null; + for (let i = 0; i < nums_list.length; ++i) { + const note = nums_list[i].note; + const pos = nums_list[i].pos; + const num = nums_list[i].num; + const line = nums_list[i].line; + const shiftR = nums_list[i].shiftR; + // Reset the position of the string number every line. + if (line !== last_line || note !== last_note) { + num_shiftR = right_shift + shiftR; + } + const num_width = num.getWidth() + num_spacing; + let num_x_shift = 0; + if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { + num.setXShift(left_shift + extraXSpaceForDisplacedNotehead); + num_x_shift = num_width; // spacing + x_widthL = Math.max(num_x_shift, x_widthL); + } + else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { + num.setXShift(num_shiftR); + num_x_shift += num_width; // spacing + x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR; + } + last_line = line; + last_note = note; + } + state.left_shift += x_widthL; + state.right_shift += x_widthR; + return true; + } + constructor(number) { + super(); + this.string_number = number; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE; // Default position above stem or note head + this.x_shift = 0; + this.y_shift = 0; + this.text_line = 0; + this.stem_offset = 0; + this.x_offset = 0; // Horizontal offset from default + this.y_offset = 0; // Vertical offset from default + this.dashed = true; // true - draw dashed extension false - no extension + this.leg = _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line + this.radius = 8; + this.drawCircle = true; + this.setWidth(this.radius * 2 + 4); + this.resetFont(); + } + setLineEndType(leg) { + if (leg >= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE && leg <= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN) { + this.leg = leg; + } + return this; + } + setStringNumber(number) { + this.string_number = number; + return this; + } + setOffsetX(x) { + this.x_offset = x; + return this; + } + setOffsetY(y) { + this.y_offset = y; + return this; + } + setLastNote(note) { + this.last_note = note; + return this; + } + setDashed(dashed) { + this.dashed = dashed; + return this; + } + setDrawCircle(drawCircle) { + this.drawCircle = drawCircle; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; + let dot_x = start.x + this.x_shift + this.x_offset; + let stem_ext = {}; + if (note.hasStem()) { + stem_ext = note.checkStem().getExtents(); + } + let dot_y = start.y + this.y_shift + this.y_offset; + switch (this.position) { + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE: + { + const ys = note.getYs(); + dot_y = ys.reduce((a, b) => (a < b ? a : b)); + if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { + dot_y = stem_ext.topY + StringNumber.metrics.stemPadding; + } + dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE; + } + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW: + { + const ys = note.getYs(); + dot_y = ys.reduce((a, b) => (a > b ? a : b)); + if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN) { + dot_y = stem_ext.topY - StringNumber.metrics.stemPadding; + } + dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE; + } + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT: + dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding; + break; + case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT: + dot_x += this.radius / 2 + StringNumber.metrics.rightPadding; + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid`); + } + ctx.save(); + if (this.drawCircle) { + ctx.beginPath(); + ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false); + ctx.setLineWidth(1.5); + ctx.stroke(); + } + ctx.setFont(this.textFont); + const x = dot_x - ctx.measureText(this.string_number).width / 2; + ctx.fillText('' + this.string_number, x, dot_y + 4.5); + const lastNote = this.last_note; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(lastNote)) { + // Only StemmableNote objects have getStemX(). + const end = lastNote.getStemX() - note.getX() + 5; + ctx.setStrokeStyle('#000000'); + ctx.setLineCap('round'); + ctx.setLineWidth(0.6); + if (this.dashed) { + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]); + } + else { + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]); + } + let len; + let pattern; + switch (this.leg) { + case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.UP: + len = -10; + pattern = this.dashed ? [3, 3] : [3, 0]; + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); + break; + case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN: + len = 10; + pattern = this.dashed ? [3, 3] : [3, 0]; + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); + break; + default: + break; + } + } + ctx.restore(); + } +} +StringNumber.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; + + + +/***/ }), + +/***/ "./src/strokes.ts": +/*!************************!*\ + !*** ./src/strokes.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Stroke": () => (/* binding */ Stroke) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Larry Kuhns +// +// This file implements the `Stroke` class which renders chord strokes +// that can be arpeggiated, brushed, rasquedo, etc. + + + + + + +class Stroke extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Stroke; + } + // Arrange strokes inside `ModifierContext` + static format(strokes, state) { + const left_shift = state.left_shift; + const stroke_spacing = 0; + if (!strokes || strokes.length === 0) + return false; + const strokeList = strokes.map((stroke) => { + const note = stroke.getNote(); + const index = stroke.checkIndex(); + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + // Only StaveNote objects have getKeyProps(). + const { line } = note.getKeyProps()[index]; + const shift = note.getLeftDisplacedHeadPx(); + return { line, shift, stroke }; + } + else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { + // Only TabNote objects have getPositions(). + const { str: string } = note.getPositions()[index]; + return { line: string, shift: 0, stroke }; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Internal', 'Unexpected instance.'); + } + }); + const strokeShift = left_shift; + // There can only be one stroke .. if more than one, they overlay each other + const xShift = strokeList.reduce((xShift, { stroke, shift }) => { + stroke.setXShift(strokeShift + shift); + return Math.max(stroke.getWidth() + stroke_spacing, xShift); + }, 0); + state.left_shift += xShift; + return true; + } + constructor(type, options) { + super(); + this.options = Object.assign({ all_voices: true }, options); + // multi voice - span stroke across all voices if true + this.all_voices = this.options.all_voices; + // multi voice - end note of stroke, set in draw() + this.type = type; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; + this.render_options = { + font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, + }; + this.resetFont(); + this.setXShift(0); + this.setWidth(10); + } + getPosition() { + return this.position; + } + addEndNote(note) { + this.note_end = note; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + let ys = note.getYs(); + let topY = start.y; + let botY = start.y; + const x = start.x - 5; + const line_space = note.checkStave().getSpacingBetweenLines(); + const notes = this.checkModifierContext().getMembers(note.getCategory()); + for (let i = 0; i < notes.length; i++) { + const note = notes[i]; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isNote)(note)) { + // Only Note objects have getYs(). + // note is an instance of either StaveNote or TabNote. + ys = note.getYs(); + for (let n = 0; n < ys.length; n++) { + if (this.note === notes[i] || this.all_voices) { + topY = Math.min(topY, ys[n]); + botY = Math.max(botY, ys[n]); + } + } + } + } + let arrow = ''; + let arrow_shift_x = 0; + let arrow_y = 0; + let text_shift_x = 0; + let text_y = 0; + switch (this.type) { + case Stroke.Type.BRUSH_DOWN: + arrow = 'arrowheadBlackUp'; + arrow_shift_x = -3; + arrow_y = topY - line_space / 2 + 10; + botY += line_space / 2; + break; + case Stroke.Type.BRUSH_UP: + arrow = 'arrowheadBlackDown'; + arrow_shift_x = 0.5; + arrow_y = botY + line_space / 2; + topY -= line_space / 2; + break; + case Stroke.Type.ROLL_DOWN: + case Stroke.Type.RASQUEDO_DOWN: + arrow = 'arrowheadBlackUp'; + arrow_shift_x = -3; + text_shift_x = this.x_shift + arrow_shift_x - 2; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + topY += 1.5 * line_space; + if ((botY - topY) % 2 !== 0) { + botY += 0.5 * line_space; + } + else { + botY += line_space; + } + arrow_y = topY - line_space; + text_y = botY + line_space + 2; + } + else { + topY += 1.5 * line_space; + botY += line_space; + arrow_y = topY - 0.75 * line_space; + text_y = botY + 0.25 * line_space; + } + break; + case Stroke.Type.ROLL_UP: + case Stroke.Type.RASQUEDO_UP: + arrow = 'arrowheadBlackDown'; + arrow_shift_x = -4; + text_shift_x = this.x_shift + arrow_shift_x - 1; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + arrow_y = line_space / 2; + topY += 0.5 * line_space; + if ((botY - topY) % 2 === 0) { + botY += line_space / 2; + } + arrow_y = botY + 0.5 * line_space; + text_y = topY - 1.25 * line_space; + } + else { + topY += 0.25 * line_space; + botY += 0.5 * line_space; + arrow_y = botY + 0.25 * line_space; + text_y = topY - line_space; + } + break; + case Stroke.Type.ARPEGGIO_DIRECTIONLESS: + topY += 0.5 * line_space; + botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`); + } + let strokeLine = 'straight'; + // Draw the stroke + if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) { + ctx.fillRect(x + this.x_shift, topY, 1, botY - topY); + } + else { + strokeLine = 'wiggly'; + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) { + for (let i = topY; i <= botY; i += line_space) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); + } + } + else { + let i; + for (i = topY; i <= botY; i += 10) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); + } + if (this.type === Stroke.Type.RASQUEDO_DOWN) { + text_y = i + 0.25 * line_space; + } + } + } + if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) { + return; // skip drawing arrow heads or text + } + // Draw the arrow head + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, { + category: `stroke_${strokeLine}.${arrow}`, + }); + // Draw the rasquedo "R" + if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText('R', x + text_shift_x, text_y); + ctx.restore(); + } + } +} +Stroke.Type = { + BRUSH_DOWN: 1, + BRUSH_UP: 2, + ROLL_DOWN: 3, + ROLL_UP: 4, + RASQUEDO_DOWN: 5, + RASQUEDO_UP: 6, + ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow +}; +Stroke.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC, +}; + + + +/***/ }), + +/***/ "./src/svgcontext.ts": +/*!***************************!*\ + !*** ./src/svgcontext.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SVGContext": () => (/* binding */ SVGContext) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// @author Gregory Ristow (2015) + + + + +/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */ +const ATTRIBUTES_TO_IGNORE = { + path: { + x: true, + y: true, + width: true, + height: true, + 'font-family': true, + 'font-weight': true, + 'font-style': true, + 'font-size': true, + }, + rect: { + 'font-family': true, + 'font-weight': true, + 'font-style': true, + 'font-size': true, + }, + text: { + width: true, + height: true, + }, +}; +/** Create the SVG in the SVG namespace. */ +const SVG_NS = 'http://www.w3.org/2000/svg'; +const TWO_PI = 2 * Math.PI; +class MeasureTextCache { + constructor() { + // The cache is keyed first by the text string, then by the font attributes + // joined together. + this.cache = {}; + } + lookup(text, svg, attributes) { + let entries = this.cache[text]; + if (entries === undefined) { + entries = {}; + this.cache[text] = entries; + } + const family = attributes['font-family']; + const size = attributes['font-size']; + const weight = attributes['font-weight']; + const style = attributes['font-style']; + const key = `${family}%${size}%${weight}%${style}`; + let entry = entries[key]; + if (entry === undefined) { + entry = this.measureImpl(text, svg, attributes); + entries[key] = entry; + } + return entry; + } + measureImpl(text, svg, attributes) { + let txt = this.txt; + if (!txt) { + // Create the SVG text element that will be used to measure text in the event + // of a cache miss. + txt = document.createElementNS(SVG_NS, 'text'); + this.txt = txt; + } + txt.textContent = text; + if (attributes['font-family']) + txt.setAttributeNS(null, 'font-family', attributes['font-family']); + if (attributes['font-size']) + txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`); + if (attributes['font-style']) + txt.setAttributeNS(null, 'font-style', attributes['font-style']); + if (attributes['font-weight']) + txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`); + svg.appendChild(txt); + const bbox = txt.getBBox(); + svg.removeChild(txt); + return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }; + } +} +/** + * SVG rendering context with an API similar to CanvasRenderingContext2D. + */ +class SVGContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext { + constructor(element) { + super(); + this.width = 0; + this.height = 0; + this.precision = 1; + this.backgroundFillStyle = 'white'; + /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */ + this.fontCSSString = ''; + this.element = element; + this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RENDER_PRECISION_PLACES); + // Create a SVG element and add it to the container element. + const svg = this.create('svg'); + this.element.appendChild(svg); + this.svg = svg; + this.parent = this.svg; + this.groups = [this.svg]; + this.path = ''; + this.pen = { x: NaN, y: NaN }; + this.lineWidth = 1.0; + const defaultFontAttributes = { + 'font-family': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + 'font-size': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE + 'pt', + 'font-weight': _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + 'font-style': _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, + }; + this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes); + this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes); + this.groupAttributes = []; + this.applyAttributes(svg, this.attributes); + this.groupAttributes.push(Object.assign({}, this.attributes)); + this.shadow_attributes = { + width: 0, + color: 'black', + }; + this.state_stack = []; + } + round(n) { + return Math.round(n * this.precision) / this.precision; + } + create(svgElementType) { + return document.createElementNS(SVG_NS, svgElementType); + } + // Allow grouping elements in containers for interactivity. + openGroup(cls, id, attrs) { + const group = this.create('g'); + this.groups.push(group); + this.parent.appendChild(group); + this.parent = group; + if (cls) + group.setAttribute('class', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(cls)); + if (id) + group.setAttribute('id', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(id)); + if (attrs && attrs.pointerBBox) { + group.setAttribute('pointer-events', 'bounding-box'); + } + this.applyAttributes(group, this.attributes); + this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes)); + return group; + } + closeGroup() { + this.groups.pop(); + this.groupAttributes.pop(); + this.parent = this.groups[this.groups.length - 1]; + } + add(elem) { + this.parent.appendChild(elem); + } + setFillStyle(style) { + this.attributes.fill = style; + return this; + } + /** + * Used to set the fill color for `clearRect()`. This allows us to simulate + * cutting a "hole" into the SVG drawing. + */ + setBackgroundFillStyle(style) { + this.backgroundFillStyle = style; + return this; + } + setStrokeStyle(style) { + this.attributes.stroke = style; + return this; + } + setShadowColor(color) { + this.shadow_attributes.color = color; + return this; + } + /** + * @param blur A non-negative float specifying the level of shadow blur, where 0 + * represents no blur and larger numbers represent increasingly more blur. + * @returns this + */ + setShadowBlur(blur) { + this.shadow_attributes.width = blur; + return this; + } + /** + * @param width + * @returns this + */ + setLineWidth(width) { + this.attributes['stroke-width'] = width; + this.lineWidth = width; + return this; + } + /** + * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...] + * @returns this + * + * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray) + */ + setLineDash(lineDash) { + if (Object.prototype.toString.call(lineDash) === '[object Array]') { + this.attributes['stroke-dasharray'] = lineDash.join(','); + return this; + } + else { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('ArgumentError', 'lineDash must be an array of integers.'); + } + } + /** + * @param capType + * @returns this + */ + setLineCap(capType) { + this.attributes['stroke-linecap'] = capType; + return this; + } + // ### Sizing & Scaling Methods: + // TODO (GCR): See note at scale() -- separate our internal + // conception of pixel-based width/height from the style.width + // and style.height properties eventually to allow users to + // apply responsive sizing attributes to the SVG. + resize(width, height) { + this.width = width; + this.height = height; + this.element.style.width = width.toString(); + this.svg.style.width = width.toString(); + this.svg.style.height = height.toString(); + const attributes = { + width, + height, + }; + this.applyAttributes(this.svg, attributes); + this.scale(this.state.scaleX, this.state.scaleY); + return this; + } + scale(x, y) { + // uses viewBox to scale + // TODO (GCR): we may at some point want to distinguish the + // style.width / style.height properties that are applied to + // the SVG object from our internal conception of the SVG + // width/height. This would allow us to create automatically + // scaling SVG's that filled their containers, for instance. + // + // As this isn't implemented in Canvas contexts, + // I've left as is for now, but in using the viewBox to + // handle internal scaling, am trying to make it possible + // for us to eventually move in that direction. + this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x; + this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y; + const visibleWidth = this.width / this.state.scaleX; + const visibleHeight = this.height / this.state.scaleY; + this.setViewBox(0, 0, visibleWidth, visibleHeight); + return this; + } + /** + * 1 arg: string in the "x y w h" format + * 4 args: x:number, y:number, w:number, h:number + */ + setViewBox(viewBox_or_minX, minY, width, height) { + if (typeof viewBox_or_minX === 'string') { + this.svg.setAttribute('viewBox', viewBox_or_minX); + } + else { + const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height; + this.svg.setAttribute('viewBox', viewBoxString); + } + } + // ### Drawing helper methods: + applyAttributes(element, attributes) { + const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName]; + for (const attrName in attributes) { + if (attrNamesToIgnore && attrNamesToIgnore[attrName]) { + continue; + } + if (attributes[attrName] && + (this.groupAttributes.length == 0 || + attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName])) + element.setAttributeNS(null, attrName, attributes[attrName]); + } + return element; + } + // ### Shape & Path Methods: + clear() { + // Clear the SVG by removing all inner children. + // (This approach is usually slightly more efficient + // than removing the old SVG & adding a new one to + // the container element, since it does not cause the + // container to resize twice. Also, the resize + // triggered by removing the entire SVG can trigger + // a touchcancel event when the element resizes away + // from a touch point.) + while (this.svg.lastChild) { + this.svg.removeChild(this.svg.lastChild); + } + // Replace the viewbox attribute we just removed. + this.scale(this.state.scaleX, this.state.scaleY); + } + // ## Rectangles: + rect(x, y, width, height, attributes) { + // Avoid invalid negative height attributes by flipping the rectangle on its head: + if (height < 0) { + y += height; + height *= -1; + } + const rectangle = this.create('rect'); + attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' }; + x = this.round(x); + y = this.round(y); + width = this.round(width); + height = this.round(height); + this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes)); + this.add(rectangle); + return this; + } + fillRect(x, y, width, height) { + const attributes = { fill: this.attributes.fill, stroke: 'none' }; + this.rect(x, y, width, height, attributes); + return this; + } + clearRect(x, y, width, height) { + // Currently this fills a rect with the backgroundFillStyle, rather + // than "cut a hole" into the existing shapes. + // + // Since tabNote seems to be the only module that makes use of this + // it may be worth creating a separate tabStave that would + // draw lines around locations of tablature fingering. + this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' }); + return this; + } + // ## Paths: + beginPath() { + this.path = ''; + this.pen.x = NaN; + this.pen.y = NaN; + return this; + } + moveTo(x, y) { + x = this.round(x); + y = this.round(y); + this.path += 'M' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + lineTo(x, y) { + x = this.round(x); + y = this.round(y); + this.path += 'L' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + bezierCurveTo(x1, y1, x2, y2, x, y) { + x = this.round(x); + y = this.round(y); + x1 = this.round(x1); + y1 = this.round(y1); + x2 = this.round(x2); + y2 = this.round(y2); + this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + quadraticCurveTo(x1, y1, x, y) { + x = this.round(x); + y = this.round(y); + x1 = this.round(x1); + y1 = this.round(y1); + this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + arc(x, y, radius, startAngle, endAngle, counterclockwise) { + let x0 = x + radius * Math.cos(startAngle); + let y0 = y + radius * Math.sin(startAngle); + x0 = this.round(x0); + y0 = this.round(y0); + // svg behavior different from canvas. Don't normalize angles if + // we are drawing a circle because they both normalize to 0 + const tmpStartTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(startAngle); + const tmpEndTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(endAngle); + if ((!counterclockwise && endAngle - startAngle >= TWO_PI) || + (counterclockwise && startAngle - endAngle >= TWO_PI) || + tmpStartTest === tmpEndTest) { + let x1 = x + radius * Math.cos(startAngle + Math.PI); + let y1 = y + radius * Math.sin(startAngle + Math.PI); + // There's no way to specify a completely circular arc in SVG so we have to + // use two semi-circular arcs. + x1 = this.round(x1); + y1 = this.round(y1); + radius = this.round(radius); + this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `; + this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`; + this.pen.x = x0; + this.pen.y = y0; + } + else { + let x1 = x + radius * Math.cos(endAngle); + let y1 = y + radius * Math.sin(endAngle); + startAngle = tmpStartTest; + endAngle = tmpEndTest; + let large; + if (Math.abs(endAngle - startAngle) < Math.PI) { + large = counterclockwise; + } + else { + large = !counterclockwise; + } + if (startAngle > endAngle) { + large = !large; + } + const sweep = !counterclockwise; + x1 = this.round(x1); + y1 = this.round(y1); + radius = this.round(radius); + this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`; + this.pen.x = x1; + this.pen.y = y1; + } + return this; + } + closePath() { + this.path += 'Z'; + return this; + } + getShadowStyle() { + const sa = this.shadow_attributes; + // A CSS drop-shadow filter blur looks different than a canvas shadowBlur + // of the same radius, so we scale the drop-shadow radius here to make it + // look close to the canvas shadow. + return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`; + } + fill(attributes) { + const path = this.create('path'); + if (typeof attributes === 'undefined') { + attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' }); + } + attributes.d = this.path; + if (this.shadow_attributes.width > 0) { + attributes.style = this.getShadowStyle(); + } + this.applyAttributes(path, attributes); + this.add(path); + return this; + } + stroke() { + const path = this.create('path'); + const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path }); + if (this.shadow_attributes.width > 0) { + attributes.style = this.getShadowStyle(); + } + this.applyAttributes(path, attributes); + this.add(path); + return this; + } + // ## Text Methods: + measureText(text) { + return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes); + } + fillText(text, x, y) { + if (!text || text.length <= 0) { + return this; + } + x = this.round(x); + y = this.round(y); + const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x, + y }); + const txt = this.create('text'); + txt.textContent = text; + this.applyAttributes(txt, attributes); + this.add(txt); + return this; + } + // TODO: State should be deep-copied. + save() { + this.state_stack.push({ + state: { + 'font-family': this.state['font-family'], + 'font-weight': this.state['font-weight'], + 'font-style': this.state['font-style'], + 'font-size': this.state['font-size'], + scale: this.state.scale, + }, + attributes: { + 'font-family': this.attributes['font-family'], + 'font-weight': this.attributes['font-weight'], + 'font-style': this.attributes['font-style'], + 'font-size': this.attributes['font-size'], + fill: this.attributes.fill, + stroke: this.attributes.stroke, + 'stroke-width': this.attributes['stroke-width'], + 'stroke-dasharray': this.attributes['stroke-dasharray'], + }, + shadow_attributes: { + width: this.shadow_attributes.width, + color: this.shadow_attributes.color, + }, + lineWidth: this.lineWidth, + }); + return this; + } + // TODO: State should be deep-restored. + restore() { + const savedState = this.state_stack.pop(); + if (savedState) { + const state = savedState; + this.state['font-family'] = state.state['font-family']; + this.state['font-weight'] = state.state['font-weight']; + this.state['font-style'] = state.state['font-style']; + this.state['font-size'] = state.state['font-size']; + this.state.scale = state.state.scale; + this.attributes['font-family'] = state.attributes['font-family']; + this.attributes['font-weight'] = state.attributes['font-weight']; + this.attributes['font-style'] = state.attributes['font-style']; + this.attributes['font-size'] = state.attributes['font-size']; + this.attributes.fill = state.attributes.fill; + this.attributes.stroke = state.attributes.stroke; + this.attributes['stroke-width'] = state.attributes['stroke-width']; + this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray']; + this.shadow_attributes.width = state.shadow_attributes.width; + this.shadow_attributes.color = state.shadow_attributes.color; + this.lineWidth = state.lineWidth; + } + return this; + } + set fillStyle(style) { + this.setFillStyle(style); + } + get fillStyle() { + return this.attributes.fill; + } + set strokeStyle(style) { + this.setStrokeStyle(style); + } + get strokeStyle() { + return this.attributes.stroke; + } + /** + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted + * into the font-weight attribute (e.g., font-weight="bold") + * @param style is a string (e.g., 'italic', 'normal') that is inserted into the + * font-style attribute (e.g., font-style="italic") + */ + setFont(f, size, weight, style) { + const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style); + this.fontCSSString = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo); + const fontAttributes = { + 'font-family': fontInfo.family, + 'font-size': fontInfo.size, + 'font-weight': fontInfo.weight, + 'font-style': fontInfo.style, + }; + this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes); + this.state = Object.assign(Object.assign({}, this.state), fontAttributes); + return this; + } + /** Return a string of the form `'italic bold 15pt Arial'` */ + getFont() { + return this.fontCSSString; + } +} +SVGContext.measureTextCache = new MeasureTextCache(); + + + +/***/ }), + +/***/ "./src/system.ts": +/*!***********************!*\ + !*** ./src/system.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "System": () => (/* binding */ System) +/* harmony export */ }); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + + +/** + * System implements a musical system, which is a collection of staves, + * each which can have one or more voices. All voices across all staves in + * the system are formatted together. + */ +class System extends _element__WEBPACK_IMPORTED_MODULE_1__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.System; + } + constructor(params = {}) { + super(); + this.setOptions(params); + this.partStaves = []; + this.partStaveInfos = []; + this.partVoices = []; + } + /** Set formatting options. */ + setOptions(options = {}) { + if (!options.factory) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.'); + } + this.factory = options.factory; + this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) }); + if (this.options.noJustification === false && typeof options.width === 'undefined') { + this.options.autoWidth = true; + } + } + /** Get origin X. */ + getX() { + return this.options.x; + } + /** Set origin X. */ + setX(x) { + this.options.x = x; + this.partStaves.forEach((s) => { + s.setX(x); + }); + } + /** Get origin y. */ + getY() { + return this.options.y; + } + /** Set origin y. */ + setY(y) { + this.options.y = y; + this.partStaves.forEach((s) => { + s.setY(y); + }); + } + /** Get associated staves. */ + getStaves() { + return this.partStaves; + } + /** Get associated voices. */ + getVoices() { + return this.partVoices; + } + /** Set associated context. */ + setContext(context) { + super.setContext(context); + this.factory.setContext(context); + return this; + } + /** + * Add connector between staves. + * @param type see {@link StaveConnector.typeString} + */ + addConnector(type = 'double') { + this.connector = this.factory.StaveConnector({ + top_stave: this.partStaves[0], + bottom_stave: this.partStaves[this.partStaves.length - 1], + type, + }); + return this.connector; + } + /** + * Add a stave to the system. + * + * Example (one voice): + * + * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});` + * + * Example (two voices): + * + * `system.addStave({voices: [` + * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),` + * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))` + * `]});` + */ + addStave(params) { + var _a; + const staveOptions = Object.assign({ left_bar: false }, params.options); + const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions }); + const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions }); + const ctx = this.getContext(); + p.voices.forEach((voice) => { + voice + .setContext(ctx) + .setStave(stave) + .getTickables() + .forEach((tickable) => tickable.setStave(stave)); + this.partVoices.push(voice); + }); + this.partStaves.push(stave); + this.partStaveInfos.push(p); + return stave; + } + /** + * Add voices to the system with stave already assigned. + */ + addVoices(voices) { + const ctx = this.getContext(); + voices.forEach((voice) => { + voice.setContext(ctx); + this.partVoices.push(voice); + }); + } + /** Format the system. */ + format() { + const options_details = this.options.details; + let justifyWidth = 0; + const formatter = new _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(options_details); + this.formatter = formatter; + let y = this.options.y; + let startX = 0; + const debugNoteMetricsYs = []; + this.partStaves.forEach((part, index) => { + y = y + part.space(this.partStaveInfos[index].spaceAbove); + part.setY(y); + y = y + part.space(this.partStaveInfos[index].spaceBelow); + y = y + part.space(this.options.spaceBetweenStaves); + if (this.partStaveInfos[index].debugNoteMetrics) { + debugNoteMetricsYs.push({ y, stave: part }); + y += 15; + } + startX = Math.max(startX, part.getNoteStartX()); + }); + // Re-assign Stave to update y position + this.partVoices.forEach((voice) => { + voice.getTickables().forEach((tickable) => { + const stave = tickable.getStave(); + if (stave) + tickable.setStave(stave); + }); + }); + // Join the voices + formatter.joinVoices(this.partVoices); + // Update the start position of all staves. + this.partStaves.forEach((part) => part.setNoteStartX(startX)); + if (this.options.autoWidth && this.partVoices.length > 0) { + justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices); + this.options.width = justifyWidth + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.rightPadding + (startX - this.options.x); + this.partStaves.forEach((part) => { + part.setWidth(this.options.width); + }); + } + else { + justifyWidth = this.options.noPadding + ? this.options.width - (startX - this.options.x) + : this.options.width - (startX - this.options.x) - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; + } + if (this.partVoices.length > 0) { + formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions); + } + formatter.postFormat(); + for (let i = 0; i < this.options.formatIterations; i++) { + formatter.tune(options_details); + } + this.startX = startX; + this.debugNoteMetricsYs = debugNoteMetricsYs; + this.lastY = y; + this.boundingBox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y); + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.formatBegModifiers(this.partStaves); + } + /** Render the system. */ + draw() { + // Render debugging information, if requested. + const ctx = this.checkContext(); + if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFormatter', 'format() must be called before draw()'); + } + this.setRendered(); + if (this.options.debugFormatter) { + _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY); + } + this.debugNoteMetricsYs.forEach((d) => { + this.partVoices.forEach((voice) => { + voice.getTickables().forEach((tickable) => { + if (tickable.getStave() === d.stave) + _note__WEBPACK_IMPORTED_MODULE_3__.Note.plotMetrics(ctx, tickable, d.y); + }); + }); + }); + } +} + + +/***/ }), + +/***/ "./src/tables.ts": +/*!***********************!*\ + !*** ./src/tables.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tables": () => (/* binding */ Tables) +/* harmony export */ }); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + + +const RESOLUTION = 16384; +/** + * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow. + * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks. + */ +const durations = { + '1/2': RESOLUTION * 2, + 1: RESOLUTION / 1, + 2: RESOLUTION / 2, + 4: RESOLUTION / 4, + 8: RESOLUTION / 8, + 16: RESOLUTION / 16, + 32: RESOLUTION / 32, + 64: RESOLUTION / 64, + 128: RESOLUTION / 128, + 256: RESOLUTION / 256, +}; +const durationAliases = { + w: '1', + h: '2', + q: '4', + // This is the default duration used to render bars (BarNote). Bars no longer + // consume ticks, so this should be a no-op. + // TODO(0xfe): This needs to be cleaned up. + b: '256', +}; +const keySignatures = { + C: { num: 0 }, + Am: { num: 0 }, + F: { acc: 'b', num: 1 }, + Dm: { acc: 'b', num: 1 }, + Bb: { acc: 'b', num: 2 }, + Gm: { acc: 'b', num: 2 }, + Eb: { acc: 'b', num: 3 }, + Cm: { acc: 'b', num: 3 }, + Ab: { acc: 'b', num: 4 }, + Fm: { acc: 'b', num: 4 }, + Db: { acc: 'b', num: 5 }, + Bbm: { acc: 'b', num: 5 }, + Gb: { acc: 'b', num: 6 }, + Ebm: { acc: 'b', num: 6 }, + Cb: { acc: 'b', num: 7 }, + Abm: { acc: 'b', num: 7 }, + G: { acc: '#', num: 1 }, + Em: { acc: '#', num: 1 }, + D: { acc: '#', num: 2 }, + Bm: { acc: '#', num: 2 }, + A: { acc: '#', num: 3 }, + 'F#m': { acc: '#', num: 3 }, + E: { acc: '#', num: 4 }, + 'C#m': { acc: '#', num: 4 }, + B: { acc: '#', num: 5 }, + 'G#m': { acc: '#', num: 5 }, + 'F#': { acc: '#', num: 6 }, + 'D#m': { acc: '#', num: 6 }, + 'C#': { acc: '#', num: 7 }, + 'A#m': { acc: '#', num: 7 }, +}; +const clefs = { + treble: { line_shift: 0 }, + bass: { line_shift: 6 }, + tenor: { line_shift: 4 }, + alto: { line_shift: 3 }, + soprano: { line_shift: 1 }, + percussion: { line_shift: 0 }, + 'mezzo-soprano': { line_shift: 2 }, + 'baritone-c': { line_shift: 5 }, + 'baritone-f': { line_shift: 5 }, + subbass: { line_shift: 7 }, + french: { line_shift: -1 }, +}; +const notesInfo = { + C: { index: 0, int_val: 0 }, + CN: { index: 0, int_val: 0, accidental: 'n' }, + 'C#': { index: 0, int_val: 1, accidental: '#' }, + 'C##': { index: 0, int_val: 2, accidental: '##' }, + CB: { index: 0, int_val: 11, accidental: 'b' }, + CBB: { index: 0, int_val: 10, accidental: 'bb' }, + D: { index: 1, int_val: 2 }, + DN: { index: 1, int_val: 2, accidental: 'n' }, + 'D#': { index: 1, int_val: 3, accidental: '#' }, + 'D##': { index: 1, int_val: 4, accidental: '##' }, + DB: { index: 1, int_val: 1, accidental: 'b' }, + DBB: { index: 1, int_val: 0, accidental: 'bb' }, + E: { index: 2, int_val: 4 }, + EN: { index: 2, int_val: 4, accidental: 'n' }, + 'E#': { index: 2, int_val: 5, accidental: '#' }, + 'E##': { index: 2, int_val: 6, accidental: '##' }, + EB: { index: 2, int_val: 3, accidental: 'b' }, + EBB: { index: 2, int_val: 2, accidental: 'bb' }, + F: { index: 3, int_val: 5 }, + FN: { index: 3, int_val: 5, accidental: 'n' }, + 'F#': { index: 3, int_val: 6, accidental: '#' }, + 'F##': { index: 3, int_val: 7, accidental: '##' }, + FB: { index: 3, int_val: 4, accidental: 'b' }, + FBB: { index: 3, int_val: 3, accidental: 'bb' }, + G: { index: 4, int_val: 7 }, + GN: { index: 4, int_val: 7, accidental: 'n' }, + 'G#': { index: 4, int_val: 8, accidental: '#' }, + 'G##': { index: 4, int_val: 9, accidental: '##' }, + GB: { index: 4, int_val: 6, accidental: 'b' }, + GBB: { index: 4, int_val: 5, accidental: 'bb' }, + A: { index: 5, int_val: 9 }, + AN: { index: 5, int_val: 9, accidental: 'n' }, + 'A#': { index: 5, int_val: 10, accidental: '#' }, + 'A##': { index: 5, int_val: 11, accidental: '##' }, + AB: { index: 5, int_val: 8, accidental: 'b' }, + ABB: { index: 5, int_val: 7, accidental: 'bb' }, + B: { index: 6, int_val: 11 }, + BN: { index: 6, int_val: 11, accidental: 'n' }, + 'B#': { index: 6, int_val: 12, accidental: '#' }, + 'B##': { index: 6, int_val: 13, accidental: '##' }, + BB: { index: 6, int_val: 10, accidental: 'b' }, + BBB: { index: 6, int_val: 9, accidental: 'bb' }, + R: { index: 6, rest: true }, + X: { + index: 6, + accidental: '', + octave: 4, + code: 'noteheadXBlack', + shift_right: 5.5, + }, +}; +const validNoteTypes = { + n: { name: 'note' }, + r: { name: 'rest' }, + h: { name: 'harmonic' }, + m: { name: 'muted' }, + s: { name: 'slash' }, + g: { name: 'ghost' }, + d: { name: 'diamond' }, + x: { name: 'x' }, + ci: { name: 'circled' }, + cx: { name: 'circle x' }, + sf: { name: 'slashed' }, + sb: { name: 'slashed backward' }, + sq: { name: 'square' }, + tu: { name: 'triangle up' }, + td: { name: 'triangle down' }, +}; +const accidentals = { + '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 }, + '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 }, + b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 }, + bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 }, + n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 }, + '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 }, + '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 }, + db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 }, + d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 }, + '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 }, + '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 }, + '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 }, + bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 }, + bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 }, + o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 }, + k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 }, + bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 }, + '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 }, + ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 }, + afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 }, + accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 }, + accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 }, + accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 }, + accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 }, + accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 }, + accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 }, + accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 }, + accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 }, + accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 }, + accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 }, + accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 }, + accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 }, + accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 }, + accidentalNarrowReversedFlatAndFlat: { + code: 'accidentalNarrowReversedFlatAndFlat', + parenRightPaddingAdjustment: -1, + }, + accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 }, + accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 }, +}; +// Helps determine the layout of accidentals. +const accidentalColumns = { + 1: { + a: [1], + b: [1], + }, + 2: { + a: [1, 2], + }, + 3: { + a: [1, 3, 2], + b: [1, 2, 1], + second_on_bottom: [1, 2, 3], + }, + 4: { + a: [1, 3, 4, 2], + b: [1, 2, 3, 1], + spaced_out_tetrachord: [1, 2, 1, 2], + }, + 5: { + a: [1, 3, 5, 4, 2], + b: [1, 2, 4, 3, 1], + spaced_out_pentachord: [1, 2, 3, 2, 1], + very_spaced_out_pentachord: [1, 2, 1, 2, 1], + }, + 6: { + a: [1, 3, 5, 6, 4, 2], + b: [1, 2, 4, 5, 3, 1], + spaced_out_hexachord: [1, 3, 2, 1, 3, 2], + very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2], + }, +}; +const articulations = { + 'a.': { code: 'augmentationDot', between_lines: true }, + av: { + aboveCode: 'articStaccatissimoAbove', + belowCode: 'articStaccatissimoBelow', + between_lines: true, + }, + 'a>': { + aboveCode: 'articAccentAbove', + belowCode: 'articAccentBelow', + between_lines: true, + }, + 'a-': { + aboveCode: 'articTenutoAbove', + belowCode: 'articTenutoBelow', + between_lines: true, + }, + 'a^': { + aboveCode: 'articMarcatoAbove', + belowCode: 'articMarcatoBelow', + between_lines: false, + }, + 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false }, + ao: { + aboveCode: 'pluckedSnapPizzicatoAbove', + belowCode: 'pluckedSnapPizzicatoBelow', + between_lines: false, + }, + ah: { code: 'stringsHarmonic', between_lines: false }, + 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false }, + 'a@a': { code: 'fermataAbove', between_lines: false }, + 'a@u': { code: 'fermataBelow', between_lines: false }, + 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false }, + 'a@as': { code: 'fermataShortAbove', between_lines: false }, + 'a@us': { code: 'fermataShortBelow', between_lines: false }, + 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false }, + 'a@al': { code: 'fermataLongAbove', between_lines: false }, + 'a@ul': { code: 'fermataLongBelow', between_lines: false }, + 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false }, + 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false }, + 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false }, + 'a|': { code: 'stringsUpBow', between_lines: false }, + am: { code: 'stringsDownBow', between_lines: false }, + 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked +}; +const ornaments = { + mordent: { code: 'ornamentShortTrill' }, + mordent_inverted: { code: 'ornamentMordent' }, + turn: { code: 'ornamentTurn' }, + turn_inverted: { code: 'ornamentTurnSlash' }, + tr: { code: 'ornamentTrill' }, + upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' }, + downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' }, + prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' }, + pralldown: { code: 'ornamentPrecompTrillLowerSuffix' }, + upmordent: { code: 'ornamentPrecompSlideTrillBach' }, + downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' }, + lineprall: { code: 'ornamentPrecompAppoggTrill' }, + prallprall: { code: 'ornamentTremblement' }, + scoop: { code: 'brassScoop' }, + doit: { code: 'brassDoitMedium' }, + fall: { code: 'brassFallLipShort' }, + doitLong: { code: 'brassLiftMedium' }, + fallLong: { code: 'brassFallRoughMedium' }, + bend: { code: 'brassBend' }, + plungerClosed: { code: 'brassMuteClosed' }, + plungerOpen: { code: 'brassMuteOpen' }, + flip: { code: 'brassFlip' }, + jazzTurn: { code: 'brassJazzTurn' }, + smear: { code: 'brassSmear' }, +}; +class Tables { + /** + * @returns the `Font` object at the head of the music font stack. + */ + static currentMusicFont() { + if (Tables.MUSIC_FONT_STACK.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).'); + } + else { + return Tables.MUSIC_FONT_STACK[0]; + } + } + static clefProperties(clef) { + if (!clef || !(clef in clefs)) + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArgument', 'Invalid clef: ' + clef); + return clefs[clef]; + } + /** + * @param keyOctaveGlyph a string in the format "key/octave" (e.g., "c/5") or "key/octave/custom-note-head-code" (e.g., "g/5/t3"). + * @param clef + * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.). + * @returns properties for the specified note. + */ + static keyProperties(keyOctaveGlyph, clef = 'treble', params) { + let options = { octave_shift: 0, duration: '4' }; + if (typeof params === 'object') { + options = Object.assign(Object.assign({}, options), params); + } + const duration = Tables.sanitizeDuration(options.duration); + const pieces = keyOctaveGlyph.split('/'); + if (pieces.length < 2) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`); + } + const key = pieces[0].toUpperCase(); + const value = notesInfo[key]; + if (!value) + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Invalid key name: ' + key); + if (value.octave) + pieces[1] = value.octave.toString(); + let octave = parseInt(pieces[1], 10); + // Octave_shift is the shift to compensate for clef 8va/8vb. + octave += -1 * options.octave_shift; + const baseIndex = octave * 7 - 4 * 7; + let line = (baseIndex + value.index) / 2; + line += Tables.clefProperties(clef).line_shift; + let stroke = 0; + if (line <= 0 && (line * 2) % 2 === 0) + stroke = 1; // stroke up + if (line >= 6 && (line * 2) % 2 === 0) + stroke = -1; // stroke down + // Integer value for note arithmetic. + const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined; + // If the user specified a glyph, overwrite the glyph code. + const code = value.code; + const shift_right = value.shift_right; + let customNoteHeadProps = {}; + if (pieces.length > 2 && pieces[2]) { + const glyphName = pieces[2].toUpperCase(); + customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {}; + } + return Object.assign({ key, + octave, + line, + int_value, accidental: value.accidental, code, + stroke, + shift_right, displaced: false }, customNoteHeadProps); + } + static integerToNote(integer) { + if (typeof integer === 'undefined' || integer < 0 || integer > 11) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`); + } + const table = { + 0: 'C', + 1: 'C#', + 2: 'D', + 3: 'D#', + 4: 'E', + 5: 'F', + 6: 'F#', + 7: 'G', + 8: 'G#', + 9: 'A', + 10: 'A#', + 11: 'B', + }; + const noteValue = table[integer]; + if (!noteValue) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`); + } + return noteValue; + } + static tabToGlyphProps(fret, scale = 1.0) { + let glyph = undefined; + let width = 0; + let shift_y = 0; + if (fret.toUpperCase() === 'X') { + const glyphMetrics = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics(); + glyph = 'accidentalDoubleSharp'; + if (glyphMetrics.width == undefined || glyphMetrics.height == undefined) + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidMetrics', 'Width and height required'); + width = glyphMetrics.width; + shift_y = -glyphMetrics.height / 2; + } + else { + width = Tables.textWidth(fret); + } + return { + text: fret, + code: glyph, + getWidth: () => width * scale, + shift_y, + }; + } + // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size. + // TODO: The actual width depends on the font family, size, weight, style. + static textWidth(text) { + return 7 * text.toString().length; + } + static articulationCodes(artic) { + return articulations[artic]; + } + static accidentalCodes(acc) { + return accidentals[acc]; + } + static ornamentCodes(acc) { + return ornaments[acc]; + } + static keySignature(spec) { + const keySpec = keySignatures[spec]; + if (!keySpec) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`); + } + if (!keySpec.acc) { + return []; + } + const accidentalList = { + b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5], + '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2], + }; + const notes = accidentalList[keySpec.acc]; + const acc_list = []; + for (let i = 0; i < keySpec.num; ++i) { + const line = notes[i]; + acc_list.push({ type: keySpec.acc, line }); + } + return acc_list; + } + static getKeySignatures() { + return keySignatures; + } + static hasKeySignature(spec) { + return spec in keySignatures; + } + /** + * Convert duration aliases to the number based duration. + * If the input isn't an alias, simply return the input. + * @param duration + * @returns Example: 'q' -> '4', '8' -> '8' + */ + static sanitizeDuration(duration) { + const durationNumber = durationAliases[duration]; + if (durationNumber !== undefined) { + duration = durationNumber; + } + if (durations[duration] === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`); + } + return duration; + } + /** Convert the `duration` to a fraction. */ + static durationToFraction(duration) { + return new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction().parse(Tables.sanitizeDuration(duration)); + } + /** Convert the `duration` to a number. */ + static durationToNumber(duration) { + return Tables.durationToFraction(duration).value(); + } + /* Convert the `duration` to total ticks. */ + static durationToTicks(duration) { + duration = Tables.sanitizeDuration(duration); + const ticks = durations[duration]; + if (ticks === undefined) { + throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidDuration'); + } + return ticks; + } + static codeNoteHead(type, duration) { + let code = ''; + switch (type) { + /* Diamond */ + case 'D0': + code = 'noteheadDiamondWhole'; + break; + case 'D1': + code = 'noteheadDiamondHalf'; + break; + case 'D2': + code = 'noteheadDiamondBlack'; + break; + case 'D3': + code = 'noteheadDiamondBlack'; + break; + /* Triangle */ + case 'T0': + code = 'noteheadTriangleUpWhole'; + break; + case 'T1': + code = 'noteheadTriangleUpHalf'; + break; + case 'T2': + code = 'noteheadTriangleUpBlack'; + break; + case 'T3': + code = 'noteheadTriangleUpBlack'; + break; + /* Cross */ + case 'X0': + code = 'noteheadXWhole'; + break; + case 'X1': + code = 'noteheadXHalf'; + break; + case 'X2': + code = 'noteheadXBlack'; + break; + case 'X3': + code = 'noteheadCircleX'; + break; + /* Square */ + case 'S1': + code = 'noteheadSquareWhite'; + break; + case 'S2': + code = 'noteheadSquareBlack'; + break; + /* Rectangle */ + case 'R1': + code = 'vexNoteHeadRectWhite'; // no smufl code + break; + case 'R2': + code = 'vexNoteHeadRectBlack'; // no smufl code + break; + case 'DO': + code = 'noteheadTriangleUpBlack'; + break; + case 'RE': + code = 'noteheadMoonBlack'; + break; + case 'MI': + code = 'noteheadDiamondBlack'; + break; + case 'FA': + code = 'noteheadTriangleLeftBlack'; + break; + case 'FAUP': + code = 'noteheadTriangleRightBlack'; + break; + case 'SO': + code = 'noteheadBlack'; + break; + case 'LA': + code = 'noteheadSquareBlack'; + break; + case 'TI': + code = 'noteheadTriangleRoundDownBlack'; + break; + case 'D': + case 'H': // left for backwards compatibility + switch (duration) { + case '1/2': + code = 'noteheadDiamondDoubleWhole'; + break; + case '1': + code = 'noteheadDiamondWhole'; + break; + case '2': + code = 'noteheadDiamondHalf'; + break; + default: + code = 'noteheadDiamondBlack'; + break; + } + break; + case 'N': + case 'G': + switch (duration) { + case '1/2': + code = 'noteheadDoubleWhole'; + break; + case '1': + code = 'noteheadWhole'; + break; + case '2': + code = 'noteheadHalf'; + break; + default: + code = 'noteheadBlack'; + break; + } + break; + case 'M': // left for backwards compatibility + case 'X': + switch (duration) { + case '1/2': + code = 'noteheadXDoubleWhole'; + break; + case '1': + code = 'noteheadXWhole'; + break; + case '2': + code = 'noteheadXHalf'; + break; + default: + code = 'noteheadXBlack'; + break; + } + break; + case 'CX': + switch (duration) { + case '1/2': + code = 'noteheadCircleXDoubleWhole'; + break; + case '1': + code = 'noteheadCircleXWhole'; + break; + case '2': + code = 'noteheadCircleXHalf'; + break; + default: + code = 'noteheadCircleX'; + break; + } + break; + case 'CI': + switch (duration) { + case '1/2': + code = 'noteheadCircledDoubleWhole'; + break; + case '1': + code = 'noteheadCircledWhole'; + break; + case '2': + code = 'noteheadCircledHalf'; + break; + default: + code = 'noteheadCircledBlack'; + break; + } + break; + case 'SQ': + switch (duration) { + case '1/2': + code = 'noteheadDoubleWholeSquare'; + break; + case '1': + code = 'noteheadSquareWhite'; + break; + case '2': + code = 'noteheadSquareWhite'; + break; + default: + code = 'noteheadSquareBlack'; + break; + } + break; + case 'TU': + switch (duration) { + case '1/2': + code = 'noteheadTriangleUpDoubleWhole'; + break; + case '1': + code = 'noteheadTriangleUpWhole'; + break; + case '2': + code = 'noteheadTriangleUpHalf'; + break; + default: + code = 'noteheadTriangleUpBlack'; + break; + } + break; + case 'TD': + switch (duration) { + case '1/2': + code = 'noteheadTriangleDownDoubleWhole'; + break; + case '1': + code = 'noteheadTriangleDownWhole'; + break; + case '2': + code = 'noteheadTriangleDownHalf'; + break; + default: + code = 'noteheadTriangleDownBlack'; + break; + } + break; + case 'SF': + switch (duration) { + case '1/2': + code = 'noteheadSlashedDoubleWhole1'; + break; + case '1': + code = 'noteheadSlashedWhole1'; + break; + case '2': + code = 'noteheadSlashedHalf1'; + break; + default: + code = 'noteheadSlashedBlack1'; + } + break; + case 'SB': + switch (duration) { + case '1/2': + code = 'noteheadSlashedDoubleWhole2'; + break; + case '1': + code = 'noteheadSlashedWhole2'; + break; + case '2': + code = 'noteheadSlashedHalf2'; + break; + default: + code = 'noteheadSlashedBlack2'; + } + break; + } + return code; + } + // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads. + // The default type is a regular note ('n'). + static getGlyphProps(duration, type = 'n') { + duration = Tables.sanitizeDuration(duration); + // Lookup duration for default glyph head code + let code = durationCodes[duration]; + if (code === undefined) { + code = durationCodes['4']; + } + // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash) + let glyphTypeProperties = code[type]; + // Try and get it from the custom list of note heads + const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration); + if (codeNoteHead != '') + glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead }); + const code_head = glyphTypeProperties.code_head; + // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale). + // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH). + const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(code_head, scale); + // Merge duration props for 'duration' with the note head properties. + return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties); + } +} +Tables.UNISON = true; +Tables.SOFTMAX_FACTOR = 10; +Tables.STEM_WIDTH = 1.5; +Tables.STEM_HEIGHT = 35; +Tables.STAVE_LINE_THICKNESS = 1; +Tables.RENDER_PRECISION_PLACES = 3; +Tables.RESOLUTION = RESOLUTION; +/** + * Customize this by calling Flow.setMusicFont(...fontNames); + */ +Tables.MUSIC_FONT_STACK = []; +Tables.NOTATION_FONT_SCALE = 39; +Tables.TABLATURE_FONT_SCALE = 39; +Tables.SLASH_NOTEHEAD_WIDTH = 15; +Tables.STAVE_LINE_DISTANCE = 10; +// HACK: +// Since text origins are positioned at the baseline, we must +// compensate for the ascender of the text. Of course, 1 staff space is +// a very poor approximation. +// +// This will be deprecated in the future. This is a temporary solution until +// we have more robust text metrics. +Tables.TEXT_HEIGHT_OFFSET_HACK = 1; +Tables.accidentalMap = accidentals; +Tables.accidentalColumnsTable = accidentalColumns; +Tables.unicode = { + // ♯ accidental sharp + sharp: String.fromCharCode(0x266f), + // ♭ accidental flat + flat: String.fromCharCode(0x266d), + // ♮ accidental natural + natural: String.fromCharCode(0x266e), + // △ major seventh + triangle: String.fromCharCode(0x25b3), + // ø half-diminished + 'o-with-slash': String.fromCharCode(0x00f8), + // ° diminished + degrees: String.fromCharCode(0x00b0), + // ○ diminished + circle: String.fromCharCode(0x25cb), +}; +/* The list of valid note types. Used by note.ts during parseNoteStruct(). */ +Tables.validTypes = validNoteTypes; +// Default time signature. +Tables.TIME4_4 = { + num_beats: 4, + beat_value: 4, + resolution: RESOLUTION, +}; + +// 1/2, 1, 2, 4, 8, 16, 32, 64, 128 +// NOTE: There is no 256 here! However, there are other mentions of 256 in this file. +// For example, in durations has a 256 key, and sanitizeDuration() can return 256. +// The sanitizeDuration() bit may need to be removed by 0xfe. +const durationCodes = { + '1/2': { + common: { + code_head: '', + stem: false, + flag: false, + stem_up_extension: -Tables.STEM_HEIGHT, + stem_down_extension: -Tables.STEM_HEIGHT, + tabnote_stem_up_extension: -Tables.STEM_HEIGHT, + tabnote_stem_down_extension: -Tables.STEM_HEIGHT, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Breve rest + code_head: 'restDoubleWhole', + rest: true, + position: 'B/5', + dot_shiftY: 0.5, + }, + s: { + // Breve note slash - + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 1: { + common: { + code_head: '', + stem: false, + flag: false, + stem_up_extension: -Tables.STEM_HEIGHT, + stem_down_extension: -Tables.STEM_HEIGHT, + tabnote_stem_up_extension: -Tables.STEM_HEIGHT, + tabnote_stem_down_extension: -Tables.STEM_HEIGHT, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Whole rest + code_head: 'restWhole', + ledger_code_head: 'restWholeLegerLine', + rest: true, + position: 'D/5', + dot_shiftY: 0.5, + }, + s: { + // Whole note slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 2: { + common: { + code_head: '', + stem: true, + flag: false, + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Half rest + code_head: 'restHalf', + ledger_code_head: 'restHalfLegerLine', + stem: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + }, + s: { + // Half note slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 4: { + common: { + code_head: '', + stem: true, + flag: false, + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Quarter rest + code_head: 'restQuarter', + stem: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.5, + line_below: 1.5, + }, + s: { + // Quarter slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 8: { + common: { + code_head: '', + stem: true, + flag: true, + beam_count: 1, + stem_beam_extension: 0, + code_flag_upstem: 'flag8thUp', + code_flag_downstem: 'flag8thDown', + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Eighth rest + code_head: 'rest8th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.0, + line_below: 1.0, + }, + s: { + // Eighth slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 16: { + common: { + code_head: '', + beam_count: 2, + stem_beam_extension: 0, + stem: true, + flag: true, + code_flag_upstem: 'flag16thUp', + code_flag_downstem: 'flag16thDown', + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Sixteenth rest + code_head: 'rest16th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.0, + line_below: 2.0, + }, + s: { + // Sixteenth slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 32: { + common: { + code_head: '', + beam_count: 3, + stem_beam_extension: 7.5, + stem: true, + flag: true, + code_flag_upstem: 'flag32ndUp', + code_flag_downstem: 'flag32ndDown', + stem_up_extension: 9, + stem_down_extension: 9, + tabnote_stem_up_extension: 9, + tabnote_stem_down_extension: 9, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Thirty-second rest + code_head: 'rest32nd', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -1.5, + line_above: 2.0, + line_below: 2.0, + }, + s: { + // Thirty-second slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 64: { + common: { + code_head: '', + beam_count: 4, + stem_beam_extension: 15, + stem: true, + flag: true, + code_flag_upstem: 'flag64thUp', + code_flag_downstem: 'flag64thDown', + stem_up_extension: 13, + stem_down_extension: 13, + tabnote_stem_up_extension: 13, + tabnote_stem_down_extension: 13, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Sixty-fourth rest + code_head: 'rest64th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -1.5, + line_above: 2.0, + line_below: 3.0, + }, + s: { + // Sixty-fourth slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 128: { + common: { + code_head: '', + beam_count: 5, + stem_beam_extension: 22.5, + stem: true, + flag: true, + code_flag_upstem: 'flag128thUp', + code_flag_downstem: 'flag128thDown', + stem_up_extension: 22, + stem_down_extension: 22, + tabnote_stem_up_extension: 22, + tabnote_stem_down_extension: 22, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + // Hundred-twenty-eight rest + code_head: 'rest128th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -2.5, + line_above: 3.0, + line_below: 3.0, + }, + s: { + // Hundred-twenty-eight slash + // Drawn with canvas primitives + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, +}; + + +/***/ }), + +/***/ "./src/tabnote.ts": +/*!************************!*\ + !*** ./src/tabnote.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabNote": () => (/* binding */ TabNote) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// +// The file implements notes for Tablature notation. This consists of one or +// more fret positions, and can either be drawn with or without stems. +// +// See `tests/tabnote_tests.ts` for usage examples. + + + + + + + + +// Gets the unused strings grouped together if consecutive. +// +// Parameters: +// * num_lines - The number of lines +// * strings_used - An array of numbers representing which strings have fret positions +function getUnusedStringGroups(num_lines, strings_used) { + const stem_through = []; + let group = []; + for (let string = 1; string <= num_lines; string++) { + const is_used = strings_used.indexOf(string) > -1; + if (!is_used) { + group.push(string); + } + else { + stem_through.push(group); + group = []; + } + } + if (group.length > 0) + stem_through.push(group); + return stem_through; +} +// Gets groups of points that outline the partial stem lines +// between fret positions +// +// Parameters: +// * stem_Y - The `y` coordinate the stem is located on +// * unused_strings - An array of groups of unused strings +// * stave - The stave to use for reference +// * stem_direction - The direction of the stem +function getPartialStemLines(stem_y, unused_strings, stave, stem_direction) { + const up_stem = stem_direction !== 1; + const down_stem = stem_direction !== -1; + const line_spacing = stave.getSpacingBetweenLines(); + const total_lines = stave.getNumLines(); + const stem_lines = []; + unused_strings.forEach((strings) => { + const containsLastString = strings.indexOf(total_lines) > -1; + const containsFirstString = strings.indexOf(1) > -1; + if ((up_stem && containsFirstString) || (down_stem && containsLastString)) { + return; + } + // If there's only one string in the group, push a duplicate value. + // We do this because we need 2 strings to convert into upper/lower y + // values. + if (strings.length === 1) { + strings.push(strings[0]); + } + const line_ys = []; + // Iterate through each group string and store it's y position + strings.forEach((string, index, strings) => { + const isTopBound = string === 1; + const isBottomBound = string === total_lines; + // Get the y value for the appropriate staff line, + // we adjust for a 0 index array, since string numbers are index 1 + let y = stave.getYForLine(string - 1); + // Unless the string is the first or last, add padding to each side + // of the line + if (index === 0 && !isTopBound) { + y -= line_spacing / 2 - 1; + } + else if (index === strings.length - 1 && !isBottomBound) { + y += line_spacing / 2 - 1; + } + // Store the y value + line_ys.push(y); + // Store a subsequent y value connecting this group to the main + // stem above/below the stave if it's the top/bottom string + if (stem_direction === 1 && isTopBound) { + line_ys.push(stem_y - 2); + } + else if (stem_direction === -1 && isBottomBound) { + line_ys.push(stem_y + 2); + } + }); + // Add the sorted y values to the + stem_lines.push(line_ys.sort((a, b) => a - b)); + }); + return stem_lines; +} +class TabNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.TabNote; + } + // Initialize the TabNote with a `noteStruct` full of properties + // and whether to `draw_stem` when rendering the note + constructor(noteStruct, draw_stem = false) { + super(noteStruct); + this.glyphPropsArr = []; + // Return the number of the greatest string, which is the string lowest on the display + this.greatestString = () => { + return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b)); + }; + // Return the number of the least string, which is the string highest on the display + this.leastString = () => { + return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b)); + }; + this.ghost = false; // Renders parenthesis around notes + // Note properties + // The fret positions in the note. An array of `{ str: X, fret: X }` + this.positions = noteStruct.positions || []; + // Render Options + this.render_options = Object.assign(Object.assign({}, this.render_options), { + // font size for note heads and rests + glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.TABLATURE_FONT_SCALE, + // Flag to draw a stem + draw_stem, + // Flag to draw dot modifiers + draw_dots: draw_stem, + // Flag to extend the main stem through the stave and fret positions + draw_stem_through_stave: false, + // vertical shift from stave line + y_shift: 0, + // normal glyph scale + scale: 1.0, + // default tablature font + font: `${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE}pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` }); + this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType); + (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + this.buildStem(); + if (noteStruct.stem_direction) { + this.setStemDirection(noteStruct.stem_direction); + } + else { + this.setStemDirection(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); + } + // Renders parenthesis around notes + this.ghost = false; + this.updateWidth(); + } + reset() { + super.reset(); + if (this.stave) + this.setStave(this.stave); + return this; + } + // Set as ghost `TabNote`, surrounds the fret positions with parenthesis. + // Often used for indicating frets that are being bent to + setGhost(ghost) { + this.ghost = ghost; + this.updateWidth(); + return this; + } + // Determine if the note has a stem + hasStem() { + if (this.render_options.draw_stem) + return true; + return false; + } + // Get the default stem extension for the note + getStemExtension() { + const glyphProps = this.getGlyphProps(); + if (this.stem_extension_override != null) { + return this.stem_extension_override; + } + if (glyphProps) { + return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? glyphProps.tabnote_stem_up_extension + : glyphProps.tabnote_stem_down_extension; + } + return 0; + } + // Calculate and store the width of the note + updateWidth() { + this.glyphPropsArr = []; + this.width = 0; + for (let i = 0; i < this.positions.length; ++i) { + let fret = this.positions[i].fret; + if (this.ghost) + fret = '(' + fret + ')'; + const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.tabToGlyphProps(fret.toString(), this.render_options.scale); + this.glyphPropsArr.push(glyphProps); + this.width = Math.max(glyphProps.getWidth(), this.width); + } + // For some reason we associate a notehead glyph with a TabNote, and this + // glyph is used for certain width calculations. Of course, this is totally + // incorrect since a notehead is a poor approximation for the dimensions of + // a fret number which can have multiple digits. As a result, we must + // overwrite getWidth() to return the correct width + this.glyphProps.getWidth = () => this.width; + } + // Set the `stave` to the note + setStave(stave) { + super.setStave(stave); + const ctx = stave.getContext(); + this.setContext(ctx); + // Calculate the fret number width based on font used + if (ctx) { + this.width = 0; + for (let i = 0; i < this.glyphPropsArr.length; ++i) { + const glyphProps = this.glyphPropsArr[i]; + const text = '' + glyphProps.text; + if (text.toUpperCase() !== 'X') { + ctx.save(); + ctx.setFont(this.render_options.font); + glyphProps.width = ctx.measureText(text).width; + ctx.restore(); + glyphProps.getWidth = () => glyphProps.width; + } + this.width = Math.max(glyphProps.getWidth(), this.width); + } + this.glyphProps.getWidth = () => this.width; + } + // we subtract 1 from `line` because getYForLine expects a 0-based index, + // while the position.str is a 1-based index + const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1)); + this.setYs(ys); + if (this.stem) { + this.stem.setYBounds(this.getStemY(), this.getStemY()); + } + return this; + } + // Get the fret positions for the note + getPositions() { + return this.positions; + } + // Get the default `x` and `y` coordinates for a modifier at a specific + // `position` at a fret position `index` + getModifierStartXY(position, index) { + if (!this.preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); + } + let x = 0; + if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT) { + x = -1 * 2; // FIXME: modifier padding, move to font file + } + else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.RIGHT) { + x = this.width + 2; // FIXME: modifier padding, move to font file + } + else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.BELOW || position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE) { + const note_glyph_width = this.glyphProps.getWidth(); + x = note_glyph_width / 2; + } + return { + x: this.getAbsoluteX() + x, + y: this.ys[index], + }; + } + // Get the default line for rest + getLineForRest() { + return Number(this.positions[0].str); + } + // Pre-render formatting + preFormat() { + if (this.preFormatted) + return; + if (this.modifierContext) + this.modifierContext.preFormat(); + // width is already set during init() + this.preFormatted = true; + } + // Get the x position for the stem + getStemX() { + return this.getCenterGlyphX(); + } + // Get the y position for the stem + getStemY() { + const num_lines = this.checkStave().getNumLines(); + // The decimal staff line amounts provide optimal spacing between the + // fret number and the stem + const stemUpLine = -0.5; + const stemDownLine = num_lines - 0.5; + const stemStartLine = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP === this.stem_direction ? stemUpLine : stemDownLine; + return this.checkStave().getYForLine(stemStartLine); + } + // Get the stem extents for the tabnote + getStemExtents() { + return this.checkStem().getExtents(); + } + // Draw the fal onto the context + drawFlag() { + var _a; + const { beam, glyphProps, render_options: { draw_stem }, } = this; + const context = this.checkContext(); + const shouldDrawFlag = beam == undefined && draw_stem; + // Now it's the flag's turn. + if (glyphProps.flag && shouldDrawFlag) { + const flag_x = this.getStemX(); + const flag_y = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN + ? // Down stems are below the note head and have flags on the right. + this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0) + : // Up stems are above the note head and have flags on the right. + this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0); + // Draw the Flag + //this.flag?.setOptions({ category: 'flag.tabStem' }); + (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y); + //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' }); + } + } + // Render the modifiers onto the context. + drawModifiers() { + this.modifiers.forEach((modifier) => { + // Only draw the dots if enabled. + if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isDot)(modifier) && !this.render_options.draw_dots) { + return; + } + modifier.setContext(this.getContext()); + modifier.drawWithStyle(); + }); + } + // Render the stem extension through the fret positions + drawStemThrough() { + const stemX = this.getStemX(); + const stemY = this.getStemY(); + const ctx = this.checkContext(); + const drawStem = this.render_options.draw_stem; + const stemThrough = this.render_options.draw_stem_through_stave; + if (drawStem && stemThrough) { + const numLines = this.checkStave().getNumLines(); + const stringsUsed = this.positions.map((position) => Number(position.str)); + const unusedStrings = getUnusedStringGroups(numLines, stringsUsed); + const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection()); + ctx.save(); + ctx.setLineWidth(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH); + stemLines.forEach((bounds) => { + if (bounds.length === 0) + return; + ctx.beginPath(); + ctx.moveTo(stemX, bounds[0]); + ctx.lineTo(stemX, bounds[bounds.length - 1]); + ctx.stroke(); + ctx.closePath(); + }); + ctx.restore(); + } + } + // Render the fret positions onto the context + drawPositions() { + var _a; + const ctx = this.checkContext(); + const x = this.getAbsoluteX(); + const ys = this.ys; + for (let i = 0; i < this.positions.length; ++i) { + const y = ys[i] + this.render_options.y_shift; + const glyphProps = this.glyphPropsArr[i]; + // Center the fret text beneath the notation note head + const note_glyph_width = this.glyphProps.getWidth(); + const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2; + // FIXME: Magic numbers. + ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6); + if (glyphProps.code) { + _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code); + } + else { + ctx.save(); + ctx.setFont(this.render_options.font); + const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : ''; + ctx.fillText(text, tab_x, y + 5 * this.render_options.scale); + ctx.restore(); + } + } + } + // The main rendering function for the entire note. + draw() { + const ctx = this.checkContext(); + if (this.ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', "Can't draw note without Y values."); + } + this.setRendered(); + const render_stem = this.beam == undefined && this.render_options.draw_stem; + this.applyStyle(); + ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true }); + this.drawPositions(); + this.drawStemThrough(); + if (this.stem && render_stem) { + const stem_x = this.getStemX(); + this.stem.setNoteHeadXBounds(stem_x, stem_x); + this.stem.setContext(ctx).draw(); + } + this.drawFlag(); + this.drawModifiers(); + ctx.closeGroup(); + this.restoreStyle(); + } +} + + +/***/ }), + +/***/ "./src/tabslide.ts": +/*!*************************!*\ + !*** ./src/tabslide.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabSlide": () => (/* binding */ TabSlide) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// This class implements varies types of ties between contiguous notes. The +// ties include: regular ties, hammer ons, pull offs, and slides. + + + + +class TabSlide extends _tabtie__WEBPACK_IMPORTED_MODULE_1__.TabTie { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TabSlide; + } + static get SLIDE_UP() { + return 1; + } + static get SLIDE_DOWN() { + return -1; + } + static createSlideUp(notes) { + return new TabSlide(notes, TabSlide.SLIDE_UP); + } + static createSlideDown(notes) { + return new TabSlide(notes, TabSlide.SLIDE_DOWN); + } + /** + * @param notes is a struct of the form: + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * @param notes.first_note the starting note of the slide + * @param notes.last_note the ending note of the slide + * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed. + * @param notes.last_indices currently unused. we assume it's the same as first_indices. + * + * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN + */ + constructor(notes, direction) { + super(notes, 'sl.'); + // Determine the direction automatically if it is not provided. + if (!direction) { + let first_fret = notes.first_note.getPositions()[0].fret; + if (typeof first_fret === 'string') { + first_fret = parseInt(first_fret, 10); + } + let last_fret = notes.last_note.getPositions()[0].fret; + if (typeof last_fret === 'string') { + last_fret = parseInt(last_fret, 10); + } + // If either of the frets are 'X', parseInt() above will return NaN. + // Choose TabSlide.SLIDE_UP by default. + if (isNaN(first_fret) || isNaN(last_fret)) { + direction = TabSlide.SLIDE_UP; + } + else { + direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP; + } + } + this.direction = direction; + this.render_options.cp1 = 11; + this.render_options.cp2 = 14; + this.render_options.y_shift = 0.5; + this.resetFont(); + } + renderTie(params) { + if (params.first_ys.length === 0 || params.last_ys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'No Y-values to render'); + } + const ctx = this.checkContext(); + const first_x_px = params.first_x_px; + const first_ys = params.first_ys; + const last_x_px = params.last_x_px; + const direction = params.direction; + if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadSlide', 'Invalid slide direction'); + } + // eslint-disable-next-line + const first_indices = this.notes.first_indices; + for (let i = 0; i < first_indices.length; ++i) { + const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift; + if (isNaN(slide_y)) { + throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Bad indices for slide rendering.'); + } + ctx.beginPath(); + ctx.moveTo(first_x_px, slide_y + 3 * direction); + ctx.lineTo(last_x_px, slide_y - 3 * direction); + ctx.closePath(); + ctx.stroke(); + } + this.setRendered(); + } +} +TabSlide.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, + size: 10, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC, +}; + + + +/***/ }), + +/***/ "./src/tabstave.ts": +/*!*************************!*\ + !*** ./src/tabstave.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabStave": () => (/* binding */ TabStave) +/* harmony export */ }); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. + + +class TabStave extends _stave__WEBPACK_IMPORTED_MODULE_0__.Stave { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabStave; + } + constructor(x, y, width, options) { + const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options); + super(x, y, width, tab_options); + } + getYForGlyphs() { + return this.getYForLine(2.5); + } + // Deprecated + addTabGlyph() { + this.addClef('tab'); + return this; + } +} + + +/***/ }), + +/***/ "./src/tabtie.ts": +/*!***********************!*\ + !*** ./src/tabtie.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TabTie": () => (/* binding */ TabTie) +/* harmony export */ }); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// This class implements varies types of ties between contiguous notes. The +// ties include: regular ties, hammer ons, pull offs, and slides. + + +class TabTie extends _stavetie__WEBPACK_IMPORTED_MODULE_0__.StaveTie { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabTie; + } + static createHammeron(notes) { + return new TabTie(notes, 'H'); + } + static createPulloff(notes) { + return new TabTie(notes, 'P'); + } + /** + * @param notes is a struct that has: + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * + * @param text + */ + constructor(notes, text) { + super(notes, text); + this.render_options.cp1 = 9; + this.render_options.cp2 = 11; + this.render_options.y_shift = 3; + this.direction = -1; // Tab tie's are always face up. + } +} + + +/***/ }), + +/***/ "./src/textbracket.ts": +/*!****************************!*\ + !*** ./src/textbracket.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextBracket": () => (/* binding */ TextBracket), +/* harmony export */ "TextBracketPosition": () => (/* binding */ TextBracketPosition) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Cyril Silverman +// +// This file implements `TextBrackets` which extend between two notes. +// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created +// using this class. + + + + + + +// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`. +// eslint-disable-next-line +function L(...args) { + if (TextBracket.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.TextBracket', args); +} +var TextBracketPosition; +(function (TextBracketPosition) { + TextBracketPosition[TextBracketPosition["TOP"] = 1] = "TOP"; + TextBracketPosition[TextBracketPosition["BOTTOM"] = -1] = "BOTTOM"; +})(TextBracketPosition || (TextBracketPosition = {})); +class TextBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextBracket; + } + static get Position() { + return TextBracketPosition; + } + static get PositionString() { + return { + top: TextBracketPosition.TOP, + bottom: TextBracketPosition.BOTTOM, + }; + } + /** + * @deprecated Use `TextBracket.Position` instead. + */ + static get Positions() { + L('Positions is deprecated, use TextBracketPosition instead.'); + return TextBracketPosition; + } + /** + * @deprecated Use `TextBracket.PositionString` instead. + */ + static get PositionsString() { + L('PositionsString is deprecated, use PositionString instead.'); + return TextBracket.PositionString; + } + constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) { + super(); + this.start = start; + this.stop = stop; + this.text = text; + this.superscript = superscript; + this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position; + this.line = 1; + this.resetFont(); + this.render_options = { + dashed: true, + dash: [5], + color: 'black', + line_width: 1, + show_bracket: true, + bracket_height: 8, + // In the BOTTOM position, the bracket line can extend + // under the superscript. + underline_superscript: true, + }; + } + /** + * Apply the text backet styling to the provided context. + * @param ctx + * @returns this + */ + applyStyle(ctx) { + ctx.setFont(this.font); + const options = this.render_options; + ctx.setStrokeStyle(options.color); + ctx.setFillStyle(options.color); + ctx.setLineWidth(options.line_width); + return this; + } + // Set whether the bracket line should be `dashed`. You can also + // optionally set the `dash` pattern by passing in an array of numbers + setDashed(dashed, dash) { + this.render_options.dashed = dashed; + if (dash) + this.render_options.dash = dash; + return this; + } + // Set the rendering `context` for the octave bracket + setLine(line) { + this.line = line; + return this; + } + // Draw the octave bracket on the rendering context + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let y = 0; + switch (this.position) { + case TextBracketPosition.TOP: + y = this.start.checkStave().getYForTopText(this.line); + break; + case TextBracketPosition.BOTTOM: + y = this.start.checkStave().getYForBottomText(this.line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK); + break; + default: + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`); + } + // Get the preliminary start and stop coordintates for the bracket + const start = { x: this.start.getAbsoluteX(), y }; + const stop = { x: this.stop.getAbsoluteX(), y }; + L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y); + const bracket_height = this.render_options.bracket_height * this.position; + ctx.save(); + this.applyStyle(ctx); + // Draw text + ctx.fillText(this.text, start.x, start.y); + // Get the width and height for the octave number + const main_measure = ctx.measureText(this.text); + const main_width = main_measure.width; + const main_height = main_measure.height; + // Calculate the y position for the super script + const super_y = start.y - main_height / 2.5; + // We called this.resetFont() in the constructor, so we know this.textFont is available. + // eslint-disable-next-line + const { family, size, weight, style } = this.textFont; + // To draw the superscript, we scale the font size by 1/1.4. + const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_1__.Font.scaleSize(size, 0.714286); + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.superscript, start.x + main_width + 1, super_y); + // Determine width and height of the superscript + const super_measure = ctx.measureText(this.superscript); + const super_width = super_measure.width; + const super_height = super_measure.height; + // Setup initial coordinates for the bracket line + let start_x = start.x; + let line_y = super_y; + const end_x = stop.x + this.stop.getGlyphProps().getWidth(); + // Adjust x and y coordinates based on position + if (this.position === TextBracketPosition.TOP) { + start_x += main_width + super_width + 5; + line_y -= super_height / 2.7; + } + else if (this.position === TextBracketPosition.BOTTOM) { + line_y += super_height / 2.7; + start_x += main_width + 2; + if (!this.render_options.underline_superscript) { + start_x += super_width; + } + } + if (this.render_options.dashed) { + // Main line + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash); + // Ending Bracket + if (this.render_options.show_bracket) { + _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash); + } + } + else { + ctx.beginPath(); + ctx.moveTo(start_x, line_y); + // Main line + ctx.lineTo(end_x, line_y); + if (this.render_options.show_bracket) { + // Ending bracket + ctx.lineTo(end_x, line_y + bracket_height); + } + ctx.stroke(); + ctx.closePath(); + } + ctx.restore(); + } +} +TextBracket.DEBUG = false; +TextBracket.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, + size: 15, + weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, +}; + + + +/***/ }), + +/***/ "./src/textdynamics.ts": +/*!*****************************!*\ + !*** ./src/textdynamics.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextDynamics": () => (/* binding */ TextDynamics) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +// eslint-disable-next-line +function L(...args) { + if (TextDynamics.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.TextDynamics', args); +} +/** + * `TextDynamics` renders traditional + * text dynamics markings, **ie: p, f, sfz, rfz, ppp** + * + * You can render any dynamics string that contains a combination of + * the following letters: P, M, F, Z, R, S + */ +class TextDynamics extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.TextDynamics; + } + /** The glyph data for each dynamics letter. */ + static get GLYPHS() { + return { + f: { + code: 'dynamicForte', + width: 12, + }, + p: { + code: 'dynamicPiano', + width: 14, + }, + m: { + code: 'dynamicMezzo', + width: 17, + }, + s: { + code: 'dynamicSforzando', + width: 10, + }, + z: { + code: 'dynamicZ', + width: 12, + }, + r: { + code: 'dynamicRinforzando', + width: 12, + }, + }; + } + /** + * Create the dynamics marking. + * + * A `TextDynamics` object inherits from `Note` so that it can be formatted + * within a `Voice`. + * + * @param noteStruct an object that contains a `duration` property and a + * `sequence` of letters that represents the letters to render. + */ + constructor(noteStruct) { + super(noteStruct); + this.sequence = (noteStruct.text || '').toLowerCase(); + this.line = noteStruct.line || 0; + this.glyphs = []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE }); + L('New Dynamics Text: ', this.sequence); + } + /** Set the Stave line on which the note should be placed. */ + setLine(line) { + this.line = line; + return this; + } + /** Preformat the dynamics text. */ + preFormat() { + let total_width = 0; + // length of this.glyphs must be <= + // length of this.sequence, so if we're formatted before + // create new glyphs. + this.glyphs = []; + // Iterate through each letter + this.sequence.split('').forEach((letter) => { + // Get the glyph data for the letter + const glyph_data = TextDynamics.GLYPHS[letter]; + if (!glyph_data) + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('Invalid dynamics character: ' + letter); + const size = (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.render_options.glyph_font_size); + const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyph_data.code, size, { category: 'textNote' }); + // Add the glyph + this.glyphs.push(glyph); + total_width += glyph_data.width; + }); + // Store the width of the text + this.setWidth(total_width); + this.preFormatted = true; + return this; + } + /** Draw the dynamics text on the rendering context. */ + draw() { + this.setRendered(); + const x = this.getAbsoluteX(); + const y = this.checkStave().getYForLine(this.line + -3); + L('Rendering Dynamics: ', this.sequence); + let letter_x = x; + this.glyphs.forEach((glyph, index) => { + const current_letter = this.sequence[index]; + glyph.render(this.checkContext(), letter_x, y); + letter_x += TextDynamics.GLYPHS[current_letter].width; + }); + } +} +/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */ +TextDynamics.DEBUG = false; + + + +/***/ }), + +/***/ "./src/textformatter.ts": +/*!******************************!*\ + !*** ./src/textformatter.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextFormatter": () => (/* binding */ TextFormatter) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + +// eslint-disable-next-line +function L(...args) { + if (TextFormatter.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)('Vex.Flow.TextFormatter', args); +} +/** + * Text widths are stored in a cache, so we don't have to recompute widths + * for the same font + string combination. + * + * The cache is first keyed by the font information. The key is of the form: + * `${family}-${size}-${weight}-${style}` + * The second level key is the specific text to be measured. + * + * The stored value is the measured width in `em` units. + * textWidth == textWidthCache[cacheKey][textToMeasure] + */ +const textWidthCache = {}; +const textHeightCache = {}; +/** + * Applications may register additional fonts via `TextFormatter.registerInfo(info)`. + * The metrics for those fonts will be made available to the application. + */ +const registry = {}; +class TextFormatter { + /** + * Return all registered font families. + */ + static getFontFamilies() { + const registeredFonts = []; + for (const fontFamily in registry) { + const formatterInfo = registry[fontFamily]; + registeredFonts.push(Object.assign({}, formatterInfo)); + } + return registeredFonts; + } + /** + * Call `TextFormatter.registerInfo(info)` to register font information before using this method. + * + * This method creates a formatter for the font that most closely matches the requested font. + * We compare font family, bold, and italic attributes. + * This method will return a fallback formatter if there are no matches. + */ + static create(requestedFont = {}) { + L('create: ', requestedFont); + if (!requestedFont.family) { + requestedFont.family = _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF; + } + // TODO: One potential (small) optimization is to cache the TextFormatter object + // returned for each font info. We would probably want to clear the cache if + // the registry is ever updated. + const candidates = []; + // The incoming font family is a string of comma-separated font family names. + // (e.g., `PetalumaScript, Arial, sans-serif`). + const requestedFamilies = requestedFont.family.split(/\s*,\s*/); + for (const requestedFamily of requestedFamilies) { + for (const fontFamily in registry) { + // Support cases where the registry contains 'Roboto Slab Medium', + // but the requestedFont.family is 'Roboto Slab'. + if (fontFamily.startsWith(requestedFamily)) { + candidates.push(registry[fontFamily]); + } + } + if (candidates.length > 0) { + break; + } + } + let formatter; + if (candidates.length === 0) { + // No match, so return a fallback text formatter. + formatter = new TextFormatter(Object.values(registry)[0]); + } + else if (candidates.length === 1) { + formatter = new TextFormatter(candidates[0]); + } + else { + const bold = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isBold(requestedFont.weight); + const italic = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isItalic(requestedFont.style); + const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic); + if (perfectMatch) { + formatter = new TextFormatter(perfectMatch); + } + else { + const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold); + if (partialMatch) { + formatter = new TextFormatter(partialMatch); + } + else { + formatter = new TextFormatter(candidates[0]); + } + } + } + const fontSize = requestedFont.size; + if (typeof fontSize !== 'undefined') { + const fontSizeInPt = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(fontSize); + formatter.setFontSize(fontSizeInPt); + } + return formatter; + } + /** + * @param fontFamily used as a key to the font registry. + * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)` + */ + static getInfo(fontFamily) { + return registry[fontFamily]; + } + /** + * Apps may register their own fonts and metrics, and those metrics + * will be available to the app for formatting. + * + * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory. + * @param info + * @param overwrite + */ + static registerInfo(info, overwrite = false) { + L('registerInfo: ', info, overwrite); + const fontFamily = info.family; + const currFontInfo = registry[fontFamily]; + if (currFontInfo === undefined || overwrite) { + registry[fontFamily] = info; + } + } + /** + * Use `TextFormatter.create(...)` to build an instance from information previously + * registered via `TextFormatter.registerInfo(info)`. + */ + constructor(formatterInfo) { + /** Font family. */ + this.family = ''; + /** Specified in `pt` units. */ + this.size = 14; + /** Font metrics are extracted at 1000 upem (units per em). */ + this.resolution = 1000; + /** + * For text formatting, we do not require glyph outlines, but instead rely on glyph + * bounding box metrics such as: + * ``` + * { + * x_min: 48, + * x_max: 235, + * y_min: -17, + * y_max: 734, + * ha: 751, + * leftSideBearing: 48, + * advanceWidth: 286, + * } + * ``` + */ + this.glyphs = {}; + this.serifs = false; + this.monospaced = false; + this.italic = false; + this.bold = false; + this.superscriptOffset = 0; + this.subscriptOffset = 0; + this.maxSizeGlyph = '@'; + // This is an internal key used to index the `textWidthCache`. + this.cacheKey = ''; + this.updateParams(formatterInfo); + } + get localHeightCache() { + var _a; + if (textHeightCache[this.cacheKey] === undefined) { + textHeightCache[this.cacheKey] = {}; + } + return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {}; + } + updateParams(params) { + if (params.family) + this.family = params.family; + if (params.resolution) + this.resolution = params.resolution; + if (params.glyphs) + this.glyphs = params.glyphs; + if (params.serifs) + this.serifs = params.serifs; + if (params.monospaced) + this.monospaced = params.monospaced; + if (params.italic) + this.italic = params.italic; + if (params.bold) + this.bold = params.bold; + if (params.maxSizeGlyph) + this.maxSizeGlyph = params.maxSizeGlyph; + if (params.superscriptOffset) + this.superscriptOffset = params.superscriptOffset; + if (params.subscriptOffset) + this.subscriptOffset = params.subscriptOffset; + this.updateCacheKey(); + } + /** Create a hash with the current font data, so we can cache computed widths. */ + updateCacheKey() { + const family = this.family.replace(/\s+/g, '_'); + const size = this.size; + const weight = this.bold ? _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD : _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL; + const style = this.italic ? _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC : _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL; + // Use the same key format as SVGContext. + this.cacheKey = `${family}%${size}%${weight}%${style}`; + } + /** + * The glyphs table is indexed by the character (e.g., 'C', '@'). + * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts. + */ + getGlyphMetrics(character) { + if (this.glyphs[character]) { + return this.glyphs[character]; + } + else { + return this.glyphs[this.maxSizeGlyph]; + } + } + get maxHeight() { + const metrics = this.getGlyphMetrics(this.maxSizeGlyph); + return (metrics.ha / this.resolution) * this.fontSizeInPixels; + } + /** + * Retrieve the character's advanceWidth as a fraction of an `em` unit. + * For the space character ' ' as defined in the: + * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25. + * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485. + */ + getWidthForCharacterInEm(c) { + var _a; + const metrics = this.getGlyphMetrics(c); + if (!metrics) { + // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript. + return 0.65; + } + else { + const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0; + return advanceWidth / this.resolution; + } + } + /** + * Retrieve the character's y bounds (ymin, ymax) and height. + */ + getYForCharacterInPx(c) { + const metrics = this.getGlyphMetrics(c); + const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; + if (!metrics) { + return rv; + } + else { + if (typeof metrics.y_min === 'number') { + rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels; + } + if (typeof metrics.y_max === 'number') { + rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels; + } + rv.height = rv.yMax - rv.yMin; + return rv; + } + } + getYForStringInPx(str) { + const entry = this.localHeightCache; + const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; + const cache = entry[str]; + if (cache !== undefined) { + return cache; + } + for (let i = 0; i < str.length; ++i) { + const curY = this.getYForCharacterInPx(str[i]); + extent.yMin = Math.min(extent.yMin, curY.yMin); + extent.yMax = Math.max(extent.yMax, curY.yMax); + extent.height = extent.yMax - extent.yMin; + } + entry[str] = extent; + return extent; + } + /** + * Retrieve the total width of `text` in `em` units. + */ + getWidthForTextInEm(text) { + const key = this.cacheKey; + // Get the cache for this specific font family, size, weight, style combination. + // The cache contains previously computed widths for different `text` strings. + let cachedWidths = textWidthCache[key]; + if (cachedWidths === undefined) { + cachedWidths = {}; + textWidthCache[key] = cachedWidths; + } + let width = cachedWidths[text]; + if (width === undefined) { + width = 0; + for (let i = 0; i < text.length; ++i) { + width += this.getWidthForCharacterInEm(text[i]); + } + cachedWidths[text] = width; + } + return width; + } + /** The width of the text (in `em`) is scaled by the font size (in `px`). */ + getWidthForTextInPx(text) { + return this.getWidthForTextInEm(text) * this.fontSizeInPixels; + } + /** + * @param size in pt. + */ + setFontSize(size) { + this.size = size; + // The width cache key depends on the current font size. + this.updateCacheKey(); + return this; + } + /** `this.size` is specified in points. Convert to pixels. */ + get fontSizeInPixels() { + return this.size * _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleToPxFrom.pt; + } + getResolution() { + return this.resolution; + } +} +/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */ +TextFormatter.DEBUG = false; + + + +/***/ }), + +/***/ "./src/textnote.ts": +/*!*************************!*\ + !*** ./src/textnote.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TextJustification": () => (/* binding */ TextJustification), +/* harmony export */ "TextNote": () => (/* binding */ TextNote) +/* harmony export */ }); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + + +var TextJustification; +(function (TextJustification) { + TextJustification[TextJustification["LEFT"] = 1] = "LEFT"; + TextJustification[TextJustification["CENTER"] = 2] = "CENTER"; + TextJustification[TextJustification["RIGHT"] = 3] = "RIGHT"; +})(TextJustification || (TextJustification = {})); +/** + * `TextNote` is a notation element that is positioned in time. Generally + * meant for objects that sit above/below the staff and inline with each other. + * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. + * Examples of this would be such as dynamics, lyrics, chord changes, etc. + */ +class TextNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextNote; + } + /** Glyph data. */ + static get GLYPHS() { + return { + segno: { + code: 'segno', + }, + tr: { + code: 'ornamentTrill', + }, + mordent: { + code: 'ornamentMordent', + }, + mordent_upper: { + code: 'ornamentShortTrill', + }, + mordent_lower: { + code: 'ornamentMordent', + }, + f: { + code: 'dynamicForte', + }, + p: { + code: 'dynamicPiano', + }, + m: { + code: 'dynamicMezzo', + }, + s: { + code: 'dynamicSforzando', + }, + z: { + code: 'dynamicZ', + }, + coda: { + code: 'coda', + }, + pedal_open: { + code: 'keyboardPedalPed', + }, + pedal_close: { + code: 'keyboardPedalUp', + }, + caesura_straight: { + code: 'caesura', + }, + caesura_curved: { + code: 'caesuraCurved', + }, + breath: { + code: 'breathMarkComma', + }, + tick: { + code: 'breathMarkTick', + }, + turn: { + code: 'ornamentTurn', + }, + turn_inverted: { + code: 'ornamentTurnSlash', + }, + }; + } + constructor(noteStruct) { + super(noteStruct); + this.text = noteStruct.text || ''; + this.superscript = noteStruct.superscript; + this.subscript = noteStruct.subscript; + this.setFont(noteStruct.font); + this.line = noteStruct.line || 0; + this.smooth = noteStruct.smooth || false; + this.ignore_ticks = noteStruct.ignore_ticks || false; + this.justification = TextJustification.LEFT; + // Determine and set initial note width. Note that the text width is + // an approximation and isn't very accurate. The only way to accurately + // measure the length of text is with `CanvasRenderingContext2D.measureText()`. + if (noteStruct.glyph) { + const struct = TextNote.GLYPHS[noteStruct.glyph]; + if (!struct) + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Invalid glyph type: ' + noteStruct.glyph); + this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(struct.code, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, { category: 'textNote' }); + this.setWidth(this.glyph.getMetrics().width); + } + else { + this.glyph = undefined; + } + } + /** Set the horizontal justification of the TextNote. */ + setJustification(just) { + this.justification = just; + return this; + } + /** Set the Stave line on which the note should be placed. */ + setLine(line) { + this.line = line; + return this; + } + /** Return the Stave line on which the TextNote is placed. */ + getLine() { + return this.line; + } + /** Return the unformatted text of this TextNote. */ + getText() { + return this.text; + } + /** Pre-render formatting. */ + preFormat() { + if (this.preFormatted) + return; + const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`); + if (this.smooth) { + this.setWidth(0); + } + else { + if (this.glyph) { + // Width already set. + } + else { + const ctx = this.checkContext(); + ctx.setFont(this.textFont); + this.setWidth(ctx.measureText(this.text).width); + } + } + if (this.justification === TextJustification.CENTER) { + this.leftDisplacedHeadPx = this.width / 2; + } + else if (this.justification === TextJustification.RIGHT) { + this.leftDisplacedHeadPx = this.width; + } + // We reposition to the center of the note head + this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2; + this.preFormatted = true; + } + /** + * Renders the TextNote. + * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. + */ + draw() { + const ctx = this.checkContext(); + const stave = this.checkStave(); + const tickContext = this.checkTickContext(`Can't draw without a TickContext.`); + this.setRendered(); + // Reposition to center of note head + let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2; + // Align based on tick-context width. + const width = this.getWidth(); + if (this.justification === TextJustification.CENTER) { + x -= width / 2; + } + else if (this.justification === TextJustification.RIGHT) { + x -= width; + } + let y; + if (this.glyph) { + y = stave.getYForLine(this.line + -3); + this.glyph.render(ctx, x, y); + } + else { + y = stave.getYForLine(this.line + -3); + this.applyStyle(ctx); + ctx.setFont(this.textFont); + ctx.fillText(this.text, x, y); + const height = ctx.measureText(this.text).height; + // We called this.setFont(...) in the constructor, so we know this.textFont is available. + // eslint-disable-next-line + const { family, size, weight, style } = this.textFont; + // Scale the font size by 1/1.3. + const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, 0.769231); + if (this.superscript) { + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2); + } + if (this.subscript) { + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1); + } + this.restoreStyle(ctx); + } + } +} +TextNote.TEXT_FONT = { + family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, + size: 12, + weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, + style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, +}; +TextNote.Justification = TextJustification; + + + +/***/ }), + +/***/ "./src/tickable.ts": +/*!*************************!*\ + !*** ./src/tickable.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tickable": () => (/* binding */ Tickable) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +/** + * Tickable represents a element that sit on a score and + * has a duration, i.e., Tickables occupy space in the musical rendering dimension. + */ +class Tickable extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Tickable; + } + constructor() { + super(); + this._preFormatted = false; + this._postFormatted = false; + // These properties represent the duration of + // this tickable element. + this.ticks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); // Fractional value of ticks + this.intrinsicTicks = 0; // Floating point value of ticks + this.tickMultiplier = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 1); + // Formatter metrics + this.width = 0; + this.x_shift = 0; // Shift from tick context + this.modifiers = []; + this.tupletStack = []; + this.align_center = false; + this.center_x_shift = 0; // Shift from tick context if center aligned + // This flag tells the formatter to ignore this tickable during + // formatting and justification. It is set by tickables such as BarNote. + this.ignore_ticks = false; + // This is a space for an external formatting class or function to maintain + // metrics. + this.formatterMetrics = { + // The freedom of a tickable is the distance it can move without colliding + // with neighboring elements. A formatter can set these values during its + // formatting pass, which a different formatter can then use to fine tune. + freedom: { left: 0, right: 0 }, + // The simplified rational duration of this tick as a string. It can be + // used as an index to a map or hashtable. + duration: '', + // The number of formatting iterations undergone. + iterations: 0, + // The space in pixels allocated by this formatter, along with the mean space + // for tickables of this duration, and the deviation from the mean. + space: { + used: 0, + mean: 0, + deviation: 0, + }, + }; + } + /** Reset the Tickable, this function will be overloaded. */ + reset() { + return this; + } + /** Return the ticks. */ + getTicks() { + return this.ticks; + } + /** Check if it ignores the ticks. */ + shouldIgnoreTicks() { + return this.ignore_ticks; + } + /** Ignore the ticks. */ + setIgnoreTicks(flag) { + this.ignore_ticks = flag; + return this; + } + /** Set width of note. Used by the formatter for positioning. */ + setWidth(width) { + this.width = width; + } + /** Get width of note. Used by the formatter for positioning. */ + getWidth() { + if (!this._preFormatted) { + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('UnformattedNote', "Can't call GetWidth on an unformatted note."); + } + return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0); + } + /** Displace note by `x` pixels. Used by the formatter. */ + setXShift(x) { + this.x_shift = x; + return this; + } + /** Get the `x` displaced pixels of the note. */ + getXShift() { + return this.x_shift; + } + /** Get `x` position of this tick context. */ + getX() { + const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`); + return tickContext.getX() + this.x_shift; + } + /** Return the formatterMetrics. */ + getFormatterMetrics() { + return this.formatterMetrics; + } + /** Return the center `x` shift. */ + getCenterXShift() { + if (this.isCenterAligned()) { + return this.center_x_shift; + } + return 0; + } + /** Set the center `x` shift. */ + setCenterXShift(centerXShift) { + this.center_x_shift = centerXShift; + return this; + } + // Check if tickable is center aligned. */ + isCenterAligned() { + return this.align_center; + } + // Set/unset center alignment. */ + setCenterAlignment(align_center) { + this.align_center = align_center; + return this; + } + /** + * Return the associated voice. Every tickable must be associated with a voice. + * This allows formatters and preFormatter to associate them with the right modifierContexts. + */ + getVoice() { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.voice, 'NoVoice', 'Tickable has no voice.'); + } + /** Set the associated voice. */ + setVoice(voice) { + this.voice = voice; + } + /** Get the tuplet. */ + getTuplet() { + return this.tuplet; + } + /** Return a list of Tuplets. */ + getTupletStack() { + return this.tupletStack; + } + /** + * Reset the specific Tuplet (if this is not provided, all tuplets are reset). + * Remove any prior tuplets from the tick calculation and + * reset the intrinsic tick value. + */ + resetTuplet(tuplet) { + let noteCount; + let notesOccupied; + if (tuplet) { + const i = this.tupletStack.indexOf(tuplet); + if (i !== -1) { + this.tupletStack.splice(i, 1); + noteCount = tuplet.getNoteCount(); + notesOccupied = tuplet.getNotesOccupied(); + // Revert old multiplier by inverting numerator & denom.: + this.applyTickMultiplier(noteCount, notesOccupied); + } + return this; + } + while (this.tupletStack.length) { + tuplet = this.tupletStack.pop(); + noteCount = tuplet.getNoteCount(); + notesOccupied = tuplet.getNotesOccupied(); + // Revert old multiplier by inverting numerator & denom.: + this.applyTickMultiplier(noteCount, notesOccupied); + } + return this; + } + /** Attach to new tuplet. */ + setTuplet(tuplet) { + if (tuplet) { + this.tupletStack.push(tuplet); + const noteCount = tuplet.getNoteCount(); + const notesOccupied = tuplet.getNotesOccupied(); + this.applyTickMultiplier(notesOccupied, noteCount); + } + this.tuplet = tuplet; + return this; + } + /** + * Add self to the provided ModifierContext `mc`. + * If this tickable has modifiers, set modifierContext. + * @returns this + */ + addToModifierContext(mc) { + this.modifierContext = mc; + for (let i = 0; i < this.modifiers.length; ++i) { + this.modifierContext.addMember(this.modifiers[i]); + } + this.modifierContext.addMember(this); + this._preFormatted = false; + return this; + } + /** + * Optional, if tickable has modifiers, associate a Modifier. + * @param mod the modifier + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + addModifier(modifier, index = 0) { + this.modifiers.push(modifier); + this._preFormatted = false; + return this; + } + /** Get the list of associated modifiers. */ + getModifiers() { + return this.modifiers; + } + /** Set the Tick Context. */ + setTickContext(tc) { + this.tickContext = tc; + this._preFormatted = false; + } + checkTickContext(message = 'Tickable has no tick context.') { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.tickContext, 'NoTickContext', message); + } + /** Preformat the Tickable. */ + preFormat() { + if (this._preFormatted) + return; + this.width = 0; + if (this.modifierContext) { + this.modifierContext.preFormat(); + this.width += this.modifierContext.getWidth(); + } + } + /** Set preformatted status. */ + set preFormatted(value) { + this._preFormatted = value; + } + get preFormatted() { + return this._preFormatted; + } + /** Postformat the Tickable. */ + postFormat() { + if (this._postFormatted) + return this; + this._postFormatted = true; + return this; + } + /** Set postformatted status. */ + set postFormatted(value) { + this._postFormatted = value; + } + get postFormatted() { + return this._postFormatted; + } + /** Return the intrinsic ticks. */ + getIntrinsicTicks() { + return this.intrinsicTicks; + } + /** Set the intrinsic ticks. */ + setIntrinsicTicks(intrinsicTicks) { + this.intrinsicTicks = intrinsicTicks; + this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); + } + /** Get the tick multiplier. */ + getTickMultiplier() { + return this.tickMultiplier; + } + /** Apply a tick multiplier. */ + applyTickMultiplier(numerator, denominator) { + this.tickMultiplier.multiply(numerator, denominator); + this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); + } + /** Set the duration. */ + setDuration(duration) { + const ticks = duration.numerator * (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION / duration.denominator); + this.ticks = this.tickMultiplier.clone().multiply(ticks); + this.intrinsicTicks = this.ticks.value(); + } + getAbsoluteX() { + const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); + return tickContext.getX(); + } + /** Attach this note to a modifier context. */ + setModifierContext(mc) { + this.modifierContext = mc; + return this; + } + /** Get `ModifierContext`. */ + getModifierContext() { + return this.modifierContext; + } + /** Check and get `ModifierContext`. */ + checkModifierContext() { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.'); + } +} + + +/***/ }), + +/***/ "./src/tickcontext.ts": +/*!****************************!*\ + !*** ./src/tickcontext.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TickContext": () => (/* binding */ TickContext) +/* harmony export */ }); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// A formatter for abstract tickable objects, such as notes, chords, +// tabs, etc. + + +/** + * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc. + */ +class TickContext { + static getNextContext(tContext) { + const contexts = tContext.tContexts; + const index = contexts.indexOf(tContext); + if (index + 1 < contexts.length) + return contexts[index + 1]; + } + constructor(options) { + this.preFormatted = false; + this.postFormatted = false; + this.tickID = options && options.tickID ? options.tickID : 0; + this.currentTick = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); + this.maxTicks = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); + this.maxTickable = undefined; // Biggest tickable + this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks + this.minTickable = undefined; + this.padding = 1; // padding on each side (width += padding * 2) + this.x = 0; + this.xBase = 0; // base x position without xOffset + this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO) + this.tickables = []; // Notes, tabs, chords, lyrics. + this.tickablesByVoice = {}; // Tickables indexed by voice number + // Formatting metrics + this.notePx = 0; // width of widest note in this context + this.glyphPx = 0; // width of glyph (note head) + this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes + this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes + this.modLeftPx = 0; // Left modifier pixels + this.modRightPx = 0; // Right modifier pixels + this.totalLeftPx = 0; // Total left pixels + this.totalRightPx = 0; // Total right pixels + this.tContexts = []; // Parent array of tick contexts + this.width = 0; + this.formatterMetrics = { + // The freedom of a tickcontext is the distance it can move without colliding + // with neighboring elements. A formatter can set these values during its + // formatting pass, which a different formatter can then use to fine tune. + freedom: { left: 0, right: 0 }, + }; + } + getTickID() { + return this.tickID; + } + getX() { + return this.x; + } + setX(x) { + this.x = x; + this.xBase = x; + this.xOffset = 0; + return this; + } + getXBase() { + return this.xBase; + } // use of xBase and xOffset is optional, avoids offset creep + setXBase(xBase) { + this.xBase = xBase; + this.x = xBase + this.xOffset; + } + getXOffset() { + return this.xOffset; + } + setXOffset(xOffset) { + this.xOffset = xOffset; + this.x = this.xBase + xOffset; + } + getWidth() { + return this.width + this.padding * 2; + } + setPadding(padding) { + this.padding = padding; + return this; + } + getMaxTicks() { + return this.maxTicks; + } + getMinTicks() { + return this.minTicks; + } + getMaxTickable() { + return this.maxTickable; + } + getMinTickable() { + return this.minTickable; + } + getTickables() { + return this.tickables; + } + /** + * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex). + * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63 + * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable. + */ + getTickableForVoice(voiceIndex) { + return this.tickablesByVoice[voiceIndex]; + } + getTickablesByVoice() { + return this.tickablesByVoice; + } + getCenterAlignedTickables() { + return this.tickables.filter((tickable) => tickable.isCenterAligned()); + } + /** Gets widths context, note and left/right modifiers for formatting. */ + getMetrics() { + const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this; + return { + width, + glyphPx, + notePx, + leftDisplacedHeadPx, + rightDisplacedHeadPx, + modLeftPx, + modRightPx, + totalLeftPx, + totalRightPx, + }; + } + getCurrentTick() { + return this.currentTick; + } + setCurrentTick(tick) { + this.currentTick = tick; + this.preFormatted = false; + } + addTickable(tickable, voiceIndex) { + if (!tickable) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid tickable added.'); + } + if (!tickable.shouldIgnoreTicks()) { + const ticks = tickable.getTicks(); + if (ticks.greaterThan(this.maxTicks)) { + this.maxTicks = ticks.clone(); + this.maxTickable = tickable; + } + if (this.minTicks == null) { + this.minTicks = ticks.clone(); + this.minTickable = tickable; + } + else if (ticks.lessThan(this.minTicks)) { + this.minTicks = ticks.clone(); + this.minTickable = tickable; + } + } + tickable.setTickContext(this); + this.tickables.push(tickable); + this.tickablesByVoice[voiceIndex || 0] = tickable; + this.preFormatted = false; + return this; + } + preFormat() { + if (this.preFormatted) + return this; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + tickable.preFormat(); + const metrics = tickable.getMetrics(); + // Maintain max displaced head pixels from all tickables in the context + this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx); + this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx); + // Maintain the widest note for all tickables in the context + this.notePx = Math.max(this.notePx, metrics.notePx); + // Maintain the widest note head + this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0); + // Total modifier shift + this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx); + this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx); + // Total shift + this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx); + this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx); + // Recalculate the tick context total width + this.width = this.notePx + this.totalLeftPx + this.totalRightPx; + } + return this; + } + postFormat() { + if (this.postFormatted) + return this; + this.postFormatted = true; + return this; + } + getFormatterMetrics() { + return this.formatterMetrics; + } +} + + +/***/ }), + +/***/ "./src/timesigglyph.ts": +/*!*****************************!*\ + !*** ./src/timesigglyph.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSignatureGlyph": () => (/* binding */ TimeSignatureGlyph) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// Renders time signatures glyphs for staffs +// This class is used by TimeSignature to render the associated glyphs + + +class TimeSignatureGlyph extends _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph { + constructor(timeSignature, topDigits, botDigits, code, point, options) { + var _a; + super(code, point, options); + this.timeSignature = timeSignature; + this.topGlyphs = []; + this.botGlyphs = []; + let topWidth = 0; + let height = 0; + for (let i = 0; i < topDigits.length; ++i) { + let timeSigType = topDigits[i]; + switch (topDigits[i]) { + case '-': + timeSigType = 'Minus'; + break; + case '+': + timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus'; + break; + case '(': + timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft'; + break; + case ')': + timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight'; + break; + } + const topGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point); + this.topGlyphs.push(topGlyph); + topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0; + height = Math.max(height, topGlyph.getMetrics().height); + } + let botWidth = 0; + for (let i = 0; i < botDigits.length; ++i) { + let timeSigType = botDigits[i]; + switch (botDigits[i]) { + case '+': + timeSigType = 'PlusSmall'; + break; + case '(': + timeSigType = 'ParensLeftSmall'; + break; + case ')': + timeSigType = 'ParensRightSmall'; + break; + } + const botGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point); + this.botGlyphs.push(botGlyph); + botWidth += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(botGlyph.getMetrics().width); + height = Math.max(height, botGlyph.getMetrics().height); + } + // If the height of the digits is more than two staff spaces (20), shift to the next line + // in order to center the digits on lines 1 and 5 rather than 2 and 4. + this.lineShift = height > 22 ? 1 : 0; + this.width = Math.max(topWidth, botWidth); + this.xMin = this.getMetrics().x_min; + this.topStartX = (this.width - topWidth) / 2.0; + this.botStartX = (this.width - botWidth) / 2.0; + this.reset(); + } + getMetrics() { + return { + x_min: this.xMin, + x_max: this.xMin + this.width, + width: this.width, + }; + } + renderToStave(x) { + const stave = this.checkStave(); + const ctx = this.checkContext(); + let start_x = x + this.topStartX; + let y = 0; + if (this.botGlyphs.length > 0) + y = stave.getYForLine(this.timeSignature.topLine - this.lineShift); + else + y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2; + for (let i = 0; i < this.topGlyphs.length; ++i) { + const glyph = this.topGlyphs[i]; + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y); + start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width); + } + start_x = x + this.botStartX; + y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift); + for (let i = 0; i < this.botGlyphs.length; ++i) { + const glyph = this.botGlyphs[i]; + this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine()); + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y); + start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width); + } + } +} + + +/***/ }), + +/***/ "./src/timesignature.ts": +/*!******************************!*\ + !*** ./src/timesignature.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSignature": () => (/* binding */ TimeSignature) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// ## Description +// Implements time signatures glyphs for staffs +// See tables.js for the internal time signatures +// representation + + + + + + +const assertIsValidTimeSig = (timeSpec) => { + const numbers = timeSpec.split('/'); + if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form "/"`); + } + numbers.forEach((number) => { + // Characters consisting in number 0..9, '+', '-', '(' or ')' + if (/^[0-9+\-()]+$/.test(number) == false) { + throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`); + } + }); +}; +/** + * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from + * a provided "timeSpec" such as "4/4", "C|" (cut time), or even something more advanced + * such as "3/4(6/8)" or "2/4+5/8". + */ +class TimeSignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TimeSignature; + } + static get glyphs() { + return { + C: { + code: 'timeSigCommon', + line: 2, + }, + 'C|': { + code: 'timeSigCutCommon', + line: 2, + }, + }; + } + constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) { + super(); + this.timeSpec = '4/4'; + this.line = 0; + this.is_numeric = true; + this.validate_args = validate_args; + const padding = customPadding; + // point must be defined before parsing spec. + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont(); + this.point = musicFont.lookupMetric('digits.point') || _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; + const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); + this.topLine = 2 + fontLineShift; + this.bottomLine = 4 + fontLineShift; + this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); + this.setTimeSig(timeSpec); + this.setPadding(padding); + } + /** + * Return TimeSignatureInfo given a string, consisting of line (number), + * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or + * TimeSignatureGlyph object). + */ + parseTimeSpec(timeSpec) { + var _a, _b; + if (timeSpec === 'C' || timeSpec === 'C|') { + const { line, code } = TimeSignature.glyphs[timeSpec]; + return { + line, + num: false, + glyph: new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE), + }; + } + if (this.validate_args) { + assertIsValidTimeSig(timeSpec); + } + const parts = timeSpec.split('/'); + return { + line: 0, + num: true, + glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''), + }; + } + /** + * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both + * top and bottom digits along with plus signs etc.) + */ + makeTimeSignatureGlyph(topDigits, botDigits) { + // note that 'code' is ignored by TimeSignatureGlyph when rendering. + return new _timesigglyph__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point); + } + /** + * Returns {line, num (=getIsNumeric), glyph} -- + * but these can also be accessed directly w/ getters and setters. + */ + getInfo() { + const { line, is_numeric, glyph } = this; + return { line, num: is_numeric, glyph }; + } + /** + * Set a new time signature specification without changing customPadding, etc. + * + * The getter for this is `getTimeSpec` not `getTimeSig`. + */ + setTimeSig(timeSpec) { + this.timeSpec = timeSpec; + const info = this.parseTimeSpec(timeSpec); + this.setGlyph(info.glyph); + this.is_numeric = info.num; + this.line = info.line; + return this; + } + /** + * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature + */ + getTimeSpec() { + return this.timeSpec; + } + /** + * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/ + * denominator time signatures such as 3/4 and 2 for cut/common. + */ + getLine() { + return this.line; + } + /** + * Set the line number that the TimeSignature sits on. Half-values are acceptable + * for spaces, etc. Can be altered, for instance, for signatures that sit above the + * staff in large orchestral scores. + */ + setLine(line) { + this.line = line; + } + /** + * Get the Glyph object used to create the time signature. Numeric time signatures + * such as 3/8 have a composite Glyph stored as a single Glyph object. + */ + getGlyph() { + return this.glyph; + } + /** + * Set the Glyph object used to draw the time signature, and update the width of the + * TimeSignature to match. The Glyph must define width in its metrics. + */ + setGlyph(glyph) { + this.glyph = glyph; + this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width)); + } + /** + * Return a boolean on whether this TimeSignature is drawn with one or more numbers + * (such as 4/4) or not (as in cut time). + */ + getIsNumeric() { + return this.is_numeric; + } + /** + * Set whether this TimeSignature is drawn with one or more numbers. + */ + setIsNumeric(isNumeric) { + this.is_numeric = isNumeric; + } + /** + * Draw the time signature on a Stave using its RenderContext. Both setStave + * and setContext must already be run. + */ + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('timesignature', this.getAttribute('id')); + this.glyph.setStave(stave); + this.glyph.setContext(ctx); + this.placeGlyphOnLine(this.glyph, stave, this.line); + this.glyph.renderToStave(this.x); + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} + + +/***/ }), + +/***/ "./src/timesignote.ts": +/*!****************************!*\ + !*** ./src/timesignote.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TimeSigNote": () => (/* binding */ TimeSigNote) +/* harmony export */ }); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author Taehoon Moon 2014 + + + +class TimeSigNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TimeSigNote; + } + constructor(timeSpec, customPadding) { + super({ duration: 'b' }); + this.timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_1__.TimeSignature(timeSpec, customPadding); + this.setWidth(this.timeSig.getGlyph().getMetrics().width); + // Note properties + this.ignore_ticks = true; + } + /* Overridden to ignore */ + // eslint-disable-next-line + addToModifierContext(mc) { + // DO NOTHING. + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + const stave = this.checkStave(); + const ctx = this.checkContext(); + this.setRendered(); + const tsGlyph = this.timeSig.getGlyph(); + if (!tsGlyph.getContext()) { + tsGlyph.setContext(ctx); + } + tsGlyph.setStave(stave); + tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs()); + tsGlyph.renderToStave(this.getAbsoluteX()); + } +} + + +/***/ }), + +/***/ "./src/tremolo.ts": +/*!************************!*\ + !*** ./src/tremolo.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tremolo": () => (/* binding */ Tremolo) +/* harmony export */ }); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Mike Corrigan +// MIT License + + + + + + + +/** Tremolo implements tremolo notation. */ +class Tremolo extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Tremolo; + } + /** + * @param num number of bars + */ + constructor(num) { + super(); + this.num = num; + this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.CENTER; + this.code = 'tremolo1'; + // big strokes scales initialised to 1 (no scale) + this.y_spacing_scale = 1; + this.extra_stroke_scale = 1; + } + /** Draw the tremolo on the rendering context. */ + draw() { + var _a; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stemDirection = note.getStemDirection(); + const start = note.getModifierStartXY(this.position, this.index); + let x = start.x; + const gn = (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isGraceNote)(note); + const scale = gn ? _gracenote__WEBPACK_IMPORTED_MODULE_1__.GraceNote.SCALE : 1; + const category = `tremolo.${gn ? 'grace' : 'default'}`; + const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont(); + let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection; + // add y_spacing_scale for big strokes (#1258) + y_spacing *= this.y_spacing_scale; + const height = this.num * y_spacing; + let y = note.getStemExtents().baseY - height; + if (stemDirection < 0) { + y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale; + } + else { + y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale; + } + const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_3__.Note.getPoint(gn ? 'grace' : 'default'); + x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP ? 'Up' : 'Down'}`); + for (let i = 0; i < this.num; ++i) { + _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale }); + y += y_spacing; + } + } +} + + +/***/ }), + +/***/ "./src/tuning.ts": +/*!***********************!*\ + !*** ./src/tuning.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tuning": () => (/* binding */ Tuning) +/* harmony export */ }); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + +/** `Tuning` implements varies types of tunings for tablature. */ +class Tuning { + static get names() { + return { + standard: 'E/5,B/4,G/4,D/4,A/3,E/3', + dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3', + dropd: 'E/5,B/4,G/4,D/4,A/3,D/3', + eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3', + standardBanjo: 'D/5,B/4,G/4,D/4,G/5', + }; + } + /** + * Constructor. + * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings + */ + constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') { + this.tuningValues = []; + // Default to standard tuning. + this.setTuning(tuningString); + } + /** Return the note number associated to the note string. */ + noteToInteger(noteString) { + var _a; + return (_a = _tables__WEBPACK_IMPORTED_MODULE_0__.Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1; + } + /** + * Set tuning identified by tuning name (eg. 'dagdad') + * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings + */ + setTuning(tuningString) { + if (Tuning.names[tuningString]) { + tuningString = Tuning.names[tuningString]; + } + this.tuningValues = []; + const keys = tuningString.split(/\s*,\s*/); + if (keys.length === 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`); + } + for (let i = 0; i < keys.length; ++i) { + this.tuningValues[i] = this.noteToInteger(keys[i]); + } + } + /** Return the note number associated with a tablature string. */ + getValueForString(stringNum) { + const s = Number(stringNum); + if (s < 1 || s > this.tuningValues.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`); + } + return this.tuningValues[s - 1]; + } + /** Return the note number associated with a tablature string and fret. */ + getValueForFret(fretNum, stringNum) { + const stringValue = this.getValueForString(stringNum); + const f = Number(fretNum); + if (f < 0) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`); + } + return stringValue + f; + } + /** Return the note string associated with tablature string and fret. */ + getNoteForFret(fretNum, stringNum) { + const noteValue = this.getValueForFret(fretNum, stringNum); + const octave = Math.floor(noteValue / 12); + const value = noteValue % 12; + return `${_tables__WEBPACK_IMPORTED_MODULE_0__.Tables.integerToNote(value)}/${octave}`; + } +} + + +/***/ }), + +/***/ "./src/tuplet.ts": +/*!***********************!*\ + !*** ./src/tuplet.ts ***! + \***********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Tuplet": () => (/* binding */ Tuplet), +/* harmony export */ "TupletLocation": () => (/* binding */ TupletLocation) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +/** + * ## Description + * + * Create a new tuplet from the specified notes. The notes must + * be part of the same voice. If they are of different rhythmic + * values, then options.num_notes must be set. + * + * @constructor + * @param {Array.} A set of notes: staveNotes, + * notes, etc... any class that inherits stemmableNote at some + * point in its prototype chain. + * @param options: object { + * + * num_notes: fit this many notes into... + * notes_occupied: ...the space of this many notes + * + * Together, these two properties make up the tuplet ratio + * in the form of num_notes : notes_occupied. + * num_notes defaults to the number of notes passed in, so + * it is important that if you omit this property, all of + * the notes passed should be of the same note value. + * notes_occupied defaults to 2 -- so you should almost + * certainly pass this parameter for anything other than + * a basic triplet. + * + * location: + * default 1, which is above the notes: ┌─── 3 ───┐ + * -1 is below the notes └─── 3 ───┘ + * + * bracketed: boolean, draw a bracket around the tuplet number + * when true: ┌─── 3 ───┐ when false: 3 + * defaults to true if notes are not beamed, false otherwise + * + * ratioed: boolean + * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐ + * defaults to true if the difference between num_notes and + * notes_occupied is greater than 1. + * + * y_offset: int, default 0 + * manually offset a tuplet, for instance to avoid collisions + * with articulations, etc... + * } + */ + + + + + + + +var TupletLocation; +(function (TupletLocation) { + TupletLocation[TupletLocation["BOTTOM"] = -1] = "BOTTOM"; + TupletLocation[TupletLocation["TOP"] = 1] = "TOP"; +})(TupletLocation || (TupletLocation = {})); +class Tuplet extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Tuplet; + } + static get LOCATION_TOP() { + return TupletLocation.TOP; + } + static get LOCATION_BOTTOM() { + return TupletLocation.BOTTOM; + } + static get NESTING_OFFSET() { + return 15; + } + static get metrics() { + const tupletMetrics = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().tuplet; + if (!tupletMetrics) + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `tuplet missing`); + return tupletMetrics; + } + constructor(notes, options = {}) { + super(); + this.numerator_glyphs = []; + this.denom_glyphs = []; + if (!notes || !notes.length) { + throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for tuplet.'); + } + this.options = options; + this.notes = notes; + this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length; + // We accept beats_occupied, but warn that it's deprecated: + // the preferred property name is now notes_occupied. + if (this.options.beats_occupied) { + this.beatsOccupiedDeprecationWarning(); + } + this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2; + if (this.options.bracketed != undefined) { + this.bracketed = this.options.bracketed; + } + else { + this.bracketed = notes.some((note) => !note.hasBeam()); + } + this.ratioed = + this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1; + this.point = (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE * 3) / 5; + this.y_pos = 16; + this.x_pos = 100; + this.width = 200; + this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP); + _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter.AlignRestsToNotes(notes, true, true); + this.resolveGlyphs(); + this.attach(); + } + attach() { + for (let i = 0; i < this.notes.length; i++) { + const note = this.notes[i]; + note.setTuplet(this); + } + } + detach() { + for (let i = 0; i < this.notes.length; i++) { + const note = this.notes[i]; + note.resetTuplet(this); + } + } + /** + * Set whether or not the bracket is drawn. + */ + setBracketed(bracketed) { + this.bracketed = !!bracketed; + return this; + } + /** + * Set whether or not the ratio is shown. + */ + setRatioed(ratioed) { + this.ratioed = !!ratioed; + return this; + } + /** + * Set the tuplet indicator to be displayed either on the top or bottom of the stave. + */ + setTupletLocation(location) { + if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) { + // eslint-disable-next-line + console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`); + location = Tuplet.LOCATION_TOP; + } + this.location = location; + return this; + } + getNotes() { + return this.notes; + } + getNoteCount() { + return this.num_notes; + } + beatsOccupiedDeprecationWarning() { + // eslint-disable-next-line + console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.'); + } + getBeatsOccupied() { + this.beatsOccupiedDeprecationWarning(); + return this.getNotesOccupied(); + } + setBeatsOccupied(beats) { + this.beatsOccupiedDeprecationWarning(); + return this.setNotesOccupied(beats); + } + getNotesOccupied() { + return this.notes_occupied; + } + setNotesOccupied(notes) { + this.detach(); + this.notes_occupied = notes; + this.resolveGlyphs(); + this.attach(); + } + resolveGlyphs() { + this.numerator_glyphs = []; + let n = this.num_notes; + while (n >= 1) { + this.numerator_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point)); + n = parseInt((n / 10).toString(), 10); + } + this.denom_glyphs = []; + n = this.notes_occupied; + while (n >= 1) { + this.denom_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point)); + n = parseInt((n / 10).toString(), 10); + } + } + // determine how many tuplets are nested within this tuplet + // on the same side (above/below), to calculate a y + // offset for this tuplet: + getNestedTupletCount() { + const location = this.location; + const first_note = this.notes[0]; + let maxTupletCount = countTuplets(first_note, location); + let minTupletCount = countTuplets(first_note, location); + // Count the tuplets that are on the same side (above/below) + // as this tuplet: + function countTuplets(note, location) { + return note.getTupletStack().filter((tuplet) => tuplet.location === location).length; + } + this.notes.forEach((note) => { + const tupletCount = countTuplets(note, location); + maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount; + minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount; + }); + return maxTupletCount - minTupletCount; + } + // determine the y position of the tuplet: + getYPosition() { + // offset the tuplet for any nested tuplets between + // it and the notes: + const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location; + // offset the tuplet for any manual y_offset: + const y_offset = this.options.y_offset || 0; + // now iterate through the notes and find our highest + // or lowest locations, to form a base y_pos + const first_note = this.notes[0]; + let y_pos; + if (this.location === Tuplet.LOCATION_TOP) { + y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset; + // check modifiers above note to see if they will collide with tuplet beam + for (let i = 0; i < this.notes.length; ++i) { + const note = this.notes[i]; + let modLines = 0; + const mc = note.getModifierContext(); + if (mc) { + modLines = Math.max(modLines, mc.getState().top_text_line); + } + const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset; + if (note.hasStem() || note.isRest()) { + const top_y = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? note.getStemExtents().topY - Tuplet.metrics.stemOffset + : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset; + y_pos = Math.min(top_y, y_pos); + if (modLines > 0) { + y_pos = Math.min(modY, y_pos); + } + } + } + } + else { + let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4 + // check modifiers below note to see if they will collide with tuplet beam + this.notes.forEach((nn) => { + const mc = nn.getModifierContext(); + if (mc) { + lineCheck = Math.max(lineCheck, mc.getState().text_line + 1); + } + }); + y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset; + for (let i = 0; i < this.notes.length; ++i) { + if (this.notes[i].hasStem() || this.notes[i].isRest()) { + const bottom_y = this.notes[i].getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP + ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset + : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset; + if (bottom_y > y_pos) { + y_pos = bottom_y; + } + } + } + } + return y_pos + nested_tuplet_y_offset + y_offset; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + // determine x value of left bound of tuplet + const first_note = this.notes[0]; + const last_note = this.notes[this.notes.length - 1]; + if (!this.bracketed) { + this.x_pos = first_note.getStemX(); + this.width = last_note.getStemX() - this.x_pos; + } + else { + this.x_pos = first_note.getTieLeftX() - 5; + this.width = last_note.getTieRightX() - this.x_pos + 5; + } + // determine y value for tuplet + this.y_pos = this.getYPosition(); + const addGlyphWidth = (width, glyph) => width + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); + // calculate total width of tuplet notation + let width = this.numerator_glyphs.reduce(addGlyphWidth, 0); + if (this.ratioed) { + width = this.denom_glyphs.reduce(addGlyphWidth, width); + width += this.point * 0.32; + } + const notation_center_x = this.x_pos + this.width / 2; + const notation_start_x = notation_center_x - width / 2; + // draw bracket if the tuplet is not beamed + if (this.bracketed) { + const line_width = this.width / 2 - width / 2 - 5; + // only draw the bracket if it has positive length + if (line_width > 0) { + ctx.fillRect(this.x_pos, this.y_pos, line_width, 1); + ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1); + ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); + ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); + } + } + // draw numerator glyphs + const shiftY = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().lookupMetric('digits.shiftY', 0); + let x_offset = 0; + this.numerator_glyphs.forEach((glyph) => { + glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); + x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); + }); + // display colon and denominator if the ratio is to be shown + if (this.ratioed) { + const colon_x = notation_start_x + x_offset + this.point * 0.16; + const colon_radius = this.point * 0.06; + ctx.beginPath(); + ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + x_offset += this.point * 0.32; + this.denom_glyphs.forEach((glyph) => { + glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); + x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); + }); + } + } +} + + +/***/ }), + +/***/ "./src/typeguard.ts": +/*!**************************!*\ + !*** ./src/typeguard.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Category": () => (/* binding */ Category), +/* harmony export */ "isAccidental": () => (/* binding */ isAccidental), +/* harmony export */ "isAnnotation": () => (/* binding */ isAnnotation), +/* harmony export */ "isBarline": () => (/* binding */ isBarline), +/* harmony export */ "isCategory": () => (/* binding */ isCategory), +/* harmony export */ "isDot": () => (/* binding */ isDot), +/* harmony export */ "isGraceNote": () => (/* binding */ isGraceNote), +/* harmony export */ "isGraceNoteGroup": () => (/* binding */ isGraceNoteGroup), +/* harmony export */ "isNote": () => (/* binding */ isNote), +/* harmony export */ "isRenderContext": () => (/* binding */ isRenderContext), +/* harmony export */ "isStaveNote": () => (/* binding */ isStaveNote), +/* harmony export */ "isStemmableNote": () => (/* binding */ isStemmableNote), +/* harmony export */ "isTabNote": () => (/* binding */ isTabNote) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Ron B. Yeh +// MIT License +/* eslint-disable @typescript-eslint/no-explicit-any */ +/** + * Use instead of `instanceof` as a more flexible type guard. + * @param obj check if this object's CATEGORY matches the provided category. + * @param category a string representing a category of VexFlow objects. + * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`. + * If `false`, we do not check the superclass or other ancestors. + * @returns true if `obj` has a static `CATEGORY` property that matches `category`. + */ +function isCategory(obj, category, checkAncestors = true) { + // obj is undefined, a number, a primitive string, or null. + if (typeof obj !== 'object' || obj === null) { + return false; + } + // `obj.constructor` is a reference to the constructor function that created the `obj` instance. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor + let constructorFcn = obj.constructor; + // Check if the object's static .CATEGORY matches the provided category. + if (checkAncestors) { + // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY. + while (obj !== null) { + constructorFcn = obj.constructor; + if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) { + return true; + } + obj = Object.getPrototypeOf(obj); + } + return false; + } + else { + // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string. + return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category; + } +} +const isAccidental = (obj) => isCategory(obj, Category.Accidental); +const isAnnotation = (obj) => isCategory(obj, Category.Annotation); +const isBarline = (obj) => isCategory(obj, Category.Barline); +const isDot = (obj) => isCategory(obj, Category.Dot); +const isGraceNote = (obj) => isCategory(obj, Category.GraceNote); +const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup); +const isNote = (obj) => isCategory(obj, Category.Note); +const isRenderContext = (obj) => isCategory(obj, Category.RenderContext); +const isStaveNote = (obj) => isCategory(obj, Category.StaveNote); +const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote); +const isTabNote = (obj) => isCategory(obj, Category.TabNote); +// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites. +// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums +var Category; +(function (Category) { + Category["Accidental"] = "Accidental"; + Category["Annotation"] = "Annotation"; + Category["Articulation"] = "Articulation"; + Category["Barline"] = "Barline"; + Category["BarNote"] = "BarNote"; + Category["Beam"] = "Beam"; + Category["Bend"] = "Bend"; + Category["ChordSymbol"] = "ChordSymbol"; + Category["Clef"] = "Clef"; + Category["ClefNote"] = "ClefNote"; + Category["Crescendo"] = "Crescendo"; + Category["Curve"] = "Curve"; + Category["Dot"] = "Dot"; + Category["Element"] = "Element"; + Category["Fraction"] = "Fraction"; + Category["FretHandFinger"] = "FretHandFinger"; + Category["GhostNote"] = "GhostNote"; + Category["Glyph"] = "Glyph"; + Category["GlyphNote"] = "GlyphNote"; + Category["GraceNote"] = "GraceNote"; + Category["GraceNoteGroup"] = "GraceNoteGroup"; + Category["GraceTabNote"] = "GraceTabNote"; + Category["KeySignature"] = "KeySignature"; + Category["KeySigNote"] = "KeySigNote"; + Category["Modifier"] = "Modifier"; + Category["MultiMeasureRest"] = "MultiMeasureRest"; + Category["Note"] = "Note"; + Category["NoteHead"] = "NoteHead"; + Category["NoteSubGroup"] = "NoteSubGroup"; + Category["Ornament"] = "Ornament"; + Category["Parenthesis"] = "Parenthesis"; + Category["PedalMarking"] = "PedalMarking"; + Category["RenderContext"] = "RenderContext"; + Category["RepeatNote"] = "RepeatNote"; + Category["Repetition"] = "Repetition"; + Category["Stave"] = "Stave"; + Category["StaveConnector"] = "StaveConnector"; + Category["StaveHairpin"] = "StaveHairpin"; + Category["StaveLine"] = "StaveLine"; + Category["StaveModifier"] = "StaveModifier"; + Category["StaveNote"] = "StaveNote"; + Category["StaveSection"] = "StaveSection"; + Category["StaveTempo"] = "StaveTempo"; + Category["StaveText"] = "StaveText"; + Category["StaveTie"] = "StaveTie"; + Category["Stem"] = "Stem"; + Category["StemmableNote"] = "StemmableNote"; + Category["StringNumber"] = "StringNumber"; + Category["Stroke"] = "Stroke"; + Category["System"] = "System"; + Category["TabNote"] = "TabNote"; + Category["TabSlide"] = "TabSlide"; + Category["TabStave"] = "TabStave"; + Category["TabTie"] = "TabTie"; + Category["TextBracket"] = "TextBracket"; + Category["TextDynamics"] = "TextDynamics"; + Category["TextNote"] = "TextNote"; + Category["Tickable"] = "Tickable"; + Category["TimeSignature"] = "TimeSignature"; + Category["TimeSigNote"] = "TimeSigNote"; + Category["Tremolo"] = "Tremolo"; + Category["Tuplet"] = "Tuplet"; + Category["Vibrato"] = "Vibrato"; + Category["VibratoBracket"] = "VibratoBracket"; + Category["Voice"] = "Voice"; + Category["Volta"] = "Volta"; +})(Category || (Category = {})); + + +/***/ }), + +/***/ "./src/util.ts": +/*!*********************!*\ + !*** ./src/util.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RuntimeError": () => (/* binding */ RuntimeError), +/* harmony export */ "defined": () => (/* binding */ defined), +/* harmony export */ "globalObject": () => (/* binding */ globalObject), +/* harmony export */ "log": () => (/* binding */ log), +/* harmony export */ "midLine": () => (/* binding */ midLine), +/* harmony export */ "normalizeAngle": () => (/* binding */ normalizeAngle), +/* harmony export */ "prefix": () => (/* binding */ prefix), +/* harmony export */ "sumArray": () => (/* binding */ sumArray), +/* harmony export */ "warn": () => (/* binding */ warn) +/* harmony export */ }); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// Note: Keep this module free of imports to reduce the chance of circular dependencies. +/** `RuntimeError` will be thrown by VexFlow classes in case of error. */ +class RuntimeError extends Error { + constructor(code, message = '') { + super('[RuntimeError] ' + code + ': ' + message); + this.code = code; + } +} +/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */ +// eslint-disable-next-line +function globalObject() { + if (typeof globalThis !== 'undefined') { + return globalThis; + } + if (typeof self !== 'undefined') { + return self; + } + if (typeof window !== 'undefined') { + return window; + } + if (typeof __webpack_require__.g !== 'undefined') { + return __webpack_require__.g; + } + return Function('return this')(); +} +/** + * Check that `x` is of type `T` and not `undefined`. + * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message. + */ +function defined(x, code = 'undefined', message = '') { + if (x === undefined) { + throw new RuntimeError(code, message); + } + return x; +} +/** Default log function sends all arguments to console. */ +// eslint-disable-next-line +function log(block, ...args) { + if (!args) + return; + const line = Array.prototype.slice.call(args).join(' '); + globalObject().console.log(block + ': ' + line); +} +/** Dump warning to console. */ +// eslint-disable-next-line +function warn(...args) { + const line = args.join(' '); + const err = new Error(); + globalObject().console.log('Warning: ', line, err.stack); +} +/** Round number to nearest fractional value (`.5`, `.25`, etc.) */ +function roundN(x, n) { + return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n; +} +/** Locate the mid point between stave lines. Returns a fractional line if a space. */ +function midLine(a, b) { + let mid_line = b + (a - b) / 2; + if (mid_line % 2 > 0) { + mid_line = roundN(mid_line * 10, 5) / 10; + } + return mid_line; +} +/** + * Used by various classes (e.g., SVGContext) to provide a + * unique prefix to element names (or other keys in shared namespaces). + */ +function prefix(text) { + return `vf-${text}`; +} +/** + * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi). + */ +function normalizeAngle(a) { + a = a % (2 * Math.PI); + if (a < 0) { + a += 2 * Math.PI; + } + return a; +} +/** + * Return the sum of an array of numbers. + */ +function sumArray(arr) { + return arr.reduce((a, b) => a + b, 0); +} + + +/***/ }), + +/***/ "./src/vex.ts": +/*!********************!*\ + !*** ./src/vex.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Vex": () => (/* binding */ Vex) +/* harmony export */ }); +/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flow */ "./src/flow.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// +// Utility methods used by the rest of the VexFlow codebase. + + +class Vex { + // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead. + // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) { + // arr.forEach(callbackFn); + // } + /** + * Take `arr` and return a new list consisting of the sorted, unique, + * contents of arr. Does not modify `arr`. + */ + // eslint-disable-next-line + static sortAndUnique(arr, cmp, eq) { + if (arr.length > 1) { + const newArr = []; + let last; + arr.sort(cmp); + for (let i = 0; i < arr.length; ++i) { + if (i === 0 || !eq(arr[i], last)) { + newArr.push(arr[i]); + } + last = arr[i]; + } + return newArr; + } + else { + return arr; + } + } + /** Check if array `arr` contains `obj`. */ + // eslint-disable-next-line + static contains(arr, obj) { + let i = arr.length; + while (i--) { + if (arr[i] === obj) { + return true; + } + } + return false; + } + // Get the 2D Canvas context from DOM element `canvas_sel`. + static getCanvasContext(canvasSelector) { + if (!canvasSelector) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector); + } + const canvas = document.getElementById(canvasSelector); + if (!(canvas && canvas.getContext)) { + throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas'); + } + return canvas.getContext('2d'); + } + /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */ + // eslint-disable-next-line + static benchmark(s, f) { + const start_time = new Date().getTime(); + f(); + const elapsed = new Date().getTime() - start_time; + (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)(s, elapsed + 'ms'); + } + // Get stack trace. + static stackTrace() { + const err = new Error(); + return err.stack; + } +} +Vex.Flow = _flow__WEBPACK_IMPORTED_MODULE_0__.Flow; + + + +/***/ }), + +/***/ "./src/vibrato.ts": +/*!************************!*\ + !*** ./src/vibrato.ts ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Vibrato": () => (/* binding */ Vibrato) +/* harmony export */ }); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + +/** `Vibrato` implements diverse vibratos. */ +class Vibrato extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Vibrato; + } + /** Arrange vibratos inside a `ModifierContext`. */ + static format(vibratos, state, context) { + if (!vibratos || vibratos.length === 0) + return false; + // Vibratos are always on top. + let text_line = state.top_text_line; + let width = 0; + let shift = state.right_shift - 7; + // If there's a bend, drop the text line + const bends = context.getMembers(_bend__WEBPACK_IMPORTED_MODULE_0__.Bend.CATEGORY); + if (bends && bends.length > 0) { + const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE; + text_line = text_line - (bendHeight + 1); + } + else { + state.top_text_line += 1; + } + // Format Vibratos + for (let i = 0; i < vibratos.length; ++i) { + const vibrato = vibratos[i]; + vibrato.setXShift(shift); + vibrato.setTextLine(text_line); + width += vibrato.getWidth(); + shift += width; + } + state.right_shift += width; + return true; + } + constructor() { + super(); + this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT; + this.render_options = { + harsh: false, + vibrato_width: 20, + wave_height: 6, + wave_width: 4, + wave_girth: 2, + }; + this.setVibratoWidth(this.render_options.vibrato_width); + } + /** Set harsh vibrato. */ + setHarsh(harsh) { + this.render_options.harsh = harsh; + return this; + } + /** Set vibrato width in pixels. */ + setVibratoWidth(width) { + this.render_options.vibrato_width = width; + this.setWidth(width); + return this; + } + /** Draw the vibrato on the rendering context. */ + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index); + const vx = start.x + this.x_shift; + const vy = note.getYForTopText(this.text_line) + 2; + Vibrato.renderVibrato(ctx, vx, vy, this.render_options); + } + /** + * Static rendering method that can be called from + * other classes (e.g. VibratoBracket). + */ + static renderVibrato(ctx, x, y, opts) { + const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts; + const num_waves = vibrato_width / wave_width; + ctx.beginPath(); + let i; + if (harsh) { + ctx.moveTo(x, y + wave_girth + 1); + for (i = 0; i < num_waves / 2; ++i) { + ctx.lineTo(x + wave_width, y - wave_height / 2); + x += wave_width; + ctx.lineTo(x + wave_width, y + wave_height / 2); + x += wave_width; + } + for (i = 0; i < num_waves / 2; ++i) { + ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1); + x -= wave_width; + ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1); + x -= wave_width; + } + ctx.fill(); + } + else { + ctx.moveTo(x, y + wave_girth); + for (i = 0; i < num_waves / 2; ++i) { + ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y); + x += wave_width; + ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y); + x += wave_width; + } + for (i = 0; i < num_waves / 2; ++i) { + ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); + x -= wave_width; + ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); + x -= wave_width; + } + ctx.fill(); + } + } +} + + +/***/ }), + +/***/ "./src/vibratobracket.ts": +/*!*******************************!*\ + !*** ./src/vibratobracket.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "VibratoBracket": () => (/* binding */ VibratoBracket) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Balazs Forian-Szabo +// MIT License + + + + +// eslint-disable-next-line +function L(...args) { + if (VibratoBracket.DEBUG) + (0,_util__WEBPACK_IMPORTED_MODULE_2__.log)('Vex.Flow.VibratoBracket', args); +} +/** `VibratoBracket` renders vibrato effect between two notes. */ +class VibratoBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.VibratoBracket; + } + /** + * Either the stop or start note must be set, or both of them. + * An undefined value for the start or stop note indicates that the vibrato + * is drawn from the beginning or until the end of the stave accordingly. + */ + constructor(bracket_data) { + super(); + if (bracket_data.start) + this.start = bracket_data.start; + if (bracket_data.stop) + this.stop = bracket_data.stop; + this.line = 1; + this.render_options = { + harsh: false, + wave_height: 6, + wave_width: 4, + wave_girth: 2, + vibrato_width: 0, + }; + } + /** Set line position of the vibrato bracket. */ + setLine(line) { + this.line = line; + return this; + } + /** Set harsh vibrato bracket. */ + setHarsh(harsh) { + this.render_options.harsh = harsh; + return this; + } + /** Draw the vibrato bracket on the rendering context. */ + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const y = (this.start && this.start.checkStave().getYForTopText(this.line)) || + (this.stop && this.stop.checkStave().getYForTopText(this.line)) || + 0; + // If start note is not set then vibrato will be drawn + // from the beginning of the stave + const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0; + // If stop note is not set then vibrato will be drawn + // until the end of the stave + const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) || + (this.start && this.start.checkStave().getTieEndX() - 10) || + 0; + this.render_options.vibrato_width = stop_x - start_x; + L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y); + _vibrato__WEBPACK_IMPORTED_MODULE_3__.Vibrato.renderVibrato(ctx, start_x, y, this.render_options); + } +} +/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */ +VibratoBracket.DEBUG = false; + + + +/***/ }), + +/***/ "./src/voice.ts": +/*!**********************!*\ + !*** ./src/voice.ts ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Voice": () => (/* binding */ Voice), +/* harmony export */ "VoiceMode": () => (/* binding */ VoiceMode) +/* harmony export */ }); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License + + + + + +var VoiceMode; +(function (VoiceMode) { + VoiceMode[VoiceMode["STRICT"] = 1] = "STRICT"; + VoiceMode[VoiceMode["SOFT"] = 2] = "SOFT"; + VoiceMode[VoiceMode["FULL"] = 3] = "FULL"; +})(VoiceMode || (VoiceMode = {})); +/** + * `Voice` is mainly a container object to group `Tickables` for formatting. + */ +class Voice extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { + static get CATEGORY() { + return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Voice; + } + /** + * Modes allow the addition of ticks in three different ways: + * - STRICT: This is the default. Ticks must fill the voice. + * - SOFT: Ticks can be added without restrictions. + * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length. + */ + static get Mode() { + return VoiceMode; + } + constructor(time) { + super(); + this.resolutionMultiplier = 1; + this.mode = VoiceMode.STRICT; + this.preFormatted = false; + this.ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); + this.largestTickWidth = 0; + this.tickables = []; + this.options = { + softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.SOFTMAX_FACTOR, + }; + // Convert the `time` string into a VoiceTime object if necessary. + let voiceTime; + if (typeof time === 'string') { + // Time signature shortcut: "4/4", "3/8", etc. + const match = time.match(/(\d+)\/(\d+)/); + if (match) { + voiceTime = { + num_beats: parseInt(match[1]), + beat_value: parseInt(match[2]), + }; + } + } + else { + voiceTime = time; + } + // Default time signature is 4/4. + this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION }, voiceTime); + // Recalculate total ticks. + this.totalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1); + // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration. + this.smallestTickCount = this.totalTicks.clone(); + } + /** Get the total ticks in the voice. */ + getTotalTicks() { + return this.totalTicks; + } + /** Get the total ticks used in the voice by all the tickables. */ + getTicksUsed() { + return this.ticksUsed; + } + /** Get the largest width of all the tickables. */ + getLargestTickWidth() { + return this.largestTickWidth; + } + /** Get the tick count for the shortest tickable */ + getSmallestTickCount() { + return this.smallestTickCount; + } + /** Get the tickables in the voice. */ + getTickables() { + return this.tickables; + } + /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */ + getMode() { + return this.mode; + } + /** + * Set the voice mode. + * @param mode value from `VoiceMode` or Voice.Mode + */ + setMode(mode) { + this.mode = mode; + return this; + } + /** Get the resolution multiplier for the voice. */ + getResolutionMultiplier() { + return this.resolutionMultiplier; + } + /** Get the actual tick resolution for the voice. */ + getActualResolution() { + return this.resolutionMultiplier * this.time.resolution; + } + /** Set the voice's stave. */ + setStave(stave) { + this.stave = stave; + // Reset the bounding box so we can reformat. + this.boundingBox = undefined; + return this; + } + getStave() { + return this.stave; + } + /** Get the bounding box for the voice. */ + getBoundingBox() { + if (!this.boundingBox) { + const stave = this.checkStave(); + let boundingBox = undefined; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + if (!tickable.getStave()) + tickable.setStave(stave); + const bb = tickable.getBoundingBox(); + if (bb) { + boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; + } + } + this.boundingBox = boundingBox; + } + return this.boundingBox; + } + /** Set the voice mode to strict or soft. */ + setStrict(strict) { + this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT; + return this; + } + /** Determine if the voice is complete according to the voice mode. */ + isComplete() { + if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) { + return this.ticksUsed.equals(this.totalTicks); + } + else { + return true; + } + } + /** + * We use softmax to layout the tickables proportional to the exponent of + * their duration. The softmax factor is used to determine the 'linearness' of + * the layout. + * + * The softmax of all the tickables in this voice should sum to 1. + */ + setSoftmaxFactor(factor) { + this.options.softmaxFactor = factor; + this.expTicksUsed = 0; // reset + return this; + } + /** + * Calculate the sum of the exponents of all the ticks in this voice to use + * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables) + * + * Note that the "exp" of "expTicksUsed" stands for "expontential" ticks used, + * not "expected" ticks used. + */ + reCalculateExpTicksUsed() { + const totalTicks = this.ticksUsed.value(); + const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks); + this.expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_4__.sumArray)(this.tickables.map(exp)); + return this.expTicksUsed; + } + /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */ + softmax(tickValue) { + if (!this.expTicksUsed) { + this.expTicksUsed = this.reCalculateExpTicksUsed(); + } + const totalTicks = this.ticksUsed.value(); + const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks); + const sm = exp(tickValue) / this.expTicksUsed; + return sm; + } + /** Add a tickable to the voice. */ + addTickable(tickable) { + if (!tickable.shouldIgnoreTicks()) { + const ticks = tickable.getTicks(); + // Update the total ticks for this line. + this.ticksUsed.add(ticks); + this.expTicksUsed = 0; // reset + if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) && + this.ticksUsed.greaterThan(this.totalTicks)) { + this.ticksUsed.subtract(ticks); + throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArgument', 'Too many ticks.'); + } + // Track the smallest tickable for formatting. + if (ticks.lessThan(this.smallestTickCount)) { + this.smallestTickCount = ticks.clone(); + } + this.resolutionMultiplier = this.ticksUsed.denominator; + // Expand total ticks using denominator from ticks used. + this.totalTicks.add(0, this.ticksUsed.denominator); + } + // Add the tickable to the line. + this.tickables.push(tickable); + tickable.setVoice(this); + return this; + } + /** Add an array of tickables to the voice. */ + addTickables(tickables) { + for (let i = 0; i < tickables.length; ++i) { + this.addTickable(tickables[i]); + } + return this; + } + /** Preformat the voice by applying the voice's stave to each note. */ + preFormat() { + if (this.preFormatted) + return this; + const stave = this.checkStave(); + this.tickables.forEach((tickable) => { + if (!tickable.getStave()) { + tickable.setStave(stave); + } + }); + this.preFormatted = true; + return this; + } + checkStave() { + return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); + } + /** + * Render the voice onto the canvas `context` and an optional `stave`. + * If `stave` is omitted, it is expected that the notes have staves + * already set. + * + * This method also calculates the voice's boundingBox while drawing + * the notes. Note the similarities with this.getBoundingBox(). + */ + draw(context = this.checkContext(), stave) { + stave = stave !== null && stave !== void 0 ? stave : this.stave; + this.setRendered(); + let boundingBox = undefined; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + // Set the stave if provided. + if (stave) { + tickable.setStave(stave); + } + (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.'); + const bb = tickable.getBoundingBox(); + if (bb) { + boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; + } + tickable.setContext(context); + tickable.drawWithStyle(); + } + this.boundingBox = boundingBox; + } +} + + +/***/ }), + +/***/ "./src/web.ts": +/*!********************!*\ + !*** ./src/web.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isHTMLCanvas": () => (/* binding */ isHTMLCanvas), +/* harmony export */ "isHTMLDiv": () => (/* binding */ isHTMLDiv) +/* harmony export */ }); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// Author: Ron B. Yeh +// MIT License +// +// Utilities for working with Web APIs. +// See: https://developer.mozilla.org/en-US/docs/Web/API + +// eslint-disable-next-line +function isHTMLCanvas(element) { + if (!element) + return false; + const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)(); + return ( + // It's either an instance of the HTMLCanvasElement class, + (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) || + // OR it's pretending to be a element. Good enough! + // Do not rely on .tagName, because node-canvas doesn't provide a tagName. + (typeof element.getContext === 'function' && typeof element.toDataURL === 'function')); +} +// eslint-disable-next-line +function isHTMLDiv(element) { + if (!element) + return false; + const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)(); + return ( + // It's either an instance of the HTMLDivElement class. + (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) || + // OR it's pretending to be a
. See: svgcontext.ts. + (typeof element.appendChild === 'function' && typeof element.style === 'object')); +} + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!********************************!*\ + !*** ./entry/vexflow-debug.ts ***! + \********************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Accidental": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Accidental), +/* harmony export */ "Annotation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Annotation), +/* harmony export */ "AnnotationHorizontalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationHorizontalJustify), +/* harmony export */ "AnnotationVerticalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationVerticalJustify), +/* harmony export */ "Articulation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Articulation), +/* harmony export */ "BEAM_BOTH": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_BOTH), +/* harmony export */ "BEAM_LEFT": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_LEFT), +/* harmony export */ "BEAM_RIGHT": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_RIGHT), +/* harmony export */ "BarNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarNote), +/* harmony export */ "Barline": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Barline), +/* harmony export */ "BarlineType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarlineType), +/* harmony export */ "Beam": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Beam), +/* harmony export */ "Bend": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Bend), +/* harmony export */ "BoundingBox": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBox), +/* harmony export */ "BoundingBoxComputation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBoxComputation), +/* harmony export */ "Builder": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Builder), +/* harmony export */ "CanvasContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CanvasContext), +/* harmony export */ "Category": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Category), +/* harmony export */ "ChordSymbol": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbol), +/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolHorizontalJustify), +/* harmony export */ "ChordSymbolVerticalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolVerticalJustify), +/* harmony export */ "Clef": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Clef), +/* harmony export */ "ClefNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ClefNote), +/* harmony export */ "Crescendo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Crescendo), +/* harmony export */ "Curve": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Curve), +/* harmony export */ "CurvePosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CurvePosition), +/* harmony export */ "Dot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Dot), +/* harmony export */ "EasyScore": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScore), +/* harmony export */ "EasyScoreGrammar": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScoreGrammar), +/* harmony export */ "Element": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Element), +/* harmony export */ "Factory": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Factory), +/* harmony export */ "Flow": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Flow), +/* harmony export */ "Font": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Font), +/* harmony export */ "FontStyle": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontStyle), +/* harmony export */ "FontWeight": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontWeight), +/* harmony export */ "Formatter": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Formatter), +/* harmony export */ "Fraction": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Fraction), +/* harmony export */ "FretHandFinger": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger), +/* harmony export */ "GhostNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GhostNote), +/* harmony export */ "Glyph": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Glyph), +/* harmony export */ "GlyphNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GlyphNote), +/* harmony export */ "GraceNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNote), +/* harmony export */ "GraceNoteGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup), +/* harmony export */ "GraceTabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceTabNote), +/* harmony export */ "KeyManager": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeyManager), +/* harmony export */ "KeySigNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySigNote), +/* harmony export */ "KeySignature": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySignature), +/* harmony export */ "Modifier": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Modifier), +/* harmony export */ "ModifierContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierContext), +/* harmony export */ "ModifierPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierPosition), +/* harmony export */ "MultiMeasureRest": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.MultiMeasureRest), +/* harmony export */ "Music": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Music), +/* harmony export */ "Note": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Note), +/* harmony export */ "NoteHead": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteHead), +/* harmony export */ "NoteSubGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteSubGroup), +/* harmony export */ "Ornament": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Ornament), +/* harmony export */ "OutlineCode": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.OutlineCode), +/* harmony export */ "Parenthesis": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parenthesis), +/* harmony export */ "Parser": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parser), +/* harmony export */ "PedalMarking": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.PedalMarking), +/* harmony export */ "Piece": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Piece), +/* harmony export */ "Registry": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Registry), +/* harmony export */ "RenderContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RenderContext), +/* harmony export */ "Renderer": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Renderer), +/* harmony export */ "RendererBackends": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererBackends), +/* harmony export */ "RendererLineEndType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererLineEndType), +/* harmony export */ "RepeatNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RepeatNote), +/* harmony export */ "Repetition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Repetition), +/* harmony export */ "RuntimeError": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RuntimeError), +/* harmony export */ "SVGContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SVGContext), +/* harmony export */ "Stave": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stave), +/* harmony export */ "StaveConnector": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveConnector), +/* harmony export */ "StaveHairpin": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveHairpin), +/* harmony export */ "StaveLine": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveLine), +/* harmony export */ "StaveModifier": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifier), +/* harmony export */ "StaveModifierPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition), +/* harmony export */ "StaveNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveNote), +/* harmony export */ "StaveSection": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveSection), +/* harmony export */ "StaveTempo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTempo), +/* harmony export */ "StaveText": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveText), +/* harmony export */ "StaveTie": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTie), +/* harmony export */ "Stem": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stem), +/* harmony export */ "StemmableNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StemmableNote), +/* harmony export */ "StringNumber": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StringNumber), +/* harmony export */ "Stroke": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stroke), +/* harmony export */ "SymbolModifiers": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolModifiers), +/* harmony export */ "SymbolTypes": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolTypes), +/* harmony export */ "System": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.System), +/* harmony export */ "TabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabNote), +/* harmony export */ "TabSlide": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabSlide), +/* harmony export */ "TabStave": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabStave), +/* harmony export */ "TabTie": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabTie), +/* harmony export */ "TextBracket": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracket), +/* harmony export */ "TextBracketPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracketPosition), +/* harmony export */ "TextDynamics": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextDynamics), +/* harmony export */ "TextFormatter": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextFormatter), +/* harmony export */ "TextJustification": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextJustification), +/* harmony export */ "TextNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextNote), +/* harmony export */ "TickContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TickContext), +/* harmony export */ "Tickable": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tickable), +/* harmony export */ "TimeSigNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSigNote), +/* harmony export */ "TimeSignature": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignature), +/* harmony export */ "TimeSignatureGlyph": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph), +/* harmony export */ "Tremolo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tremolo), +/* harmony export */ "Tuning": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuning), +/* harmony export */ "Tuplet": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuplet), +/* harmony export */ "TupletLocation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TupletLocation), +/* harmony export */ "Vex": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vex), +/* harmony export */ "Vibrato": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vibrato), +/* harmony export */ "VibratoBracket": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VibratoBracket), +/* harmony export */ "Voice": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Voice), +/* harmony export */ "VoiceMode": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoiceMode), +/* harmony export */ "Volta": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Volta), +/* harmony export */ "VoltaType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoltaType), +/* harmony export */ "default": () => (/* reexport module object */ _src_index__WEBPACK_IMPORTED_MODULE_3__), +/* harmony export */ "defined": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.defined), +/* harmony export */ "drawDot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.drawDot), +/* harmony export */ "globalObject": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.globalObject), +/* harmony export */ "isAccidental": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAccidental), +/* harmony export */ "isAnnotation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAnnotation), +/* harmony export */ "isBarline": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isBarline), +/* harmony export */ "isCategory": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isCategory), +/* harmony export */ "isDot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isDot), +/* harmony export */ "isGraceNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNote), +/* harmony export */ "isGraceNoteGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNoteGroup), +/* harmony export */ "isHTMLCanvas": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas), +/* harmony export */ "isHTMLDiv": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLDiv), +/* harmony export */ "isNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isNote), +/* harmony export */ "isRenderContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isRenderContext), +/* harmony export */ "isStaveNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStaveNote), +/* harmony export */ "isStemmableNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStemmableNote), +/* harmony export */ "isTabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isTabNote), +/* harmony export */ "log": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.log), +/* harmony export */ "midLine": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.midLine), +/* harmony export */ "normalizeAngle": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle), +/* harmony export */ "prefix": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.prefix), +/* harmony export */ "sumArray": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.sumArray), +/* harmony export */ "warn": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.warn) +/* harmony export */ }); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/fonts/load_all */ "./src/fonts/load_all.ts"); +/* harmony import */ var _src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/fonts/textfonts */ "./src/fonts/textfonts.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); +// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. +// MIT License +// +// vexflow-debug.ts is the entry point for the build output file vexflow-debug.js. +// It statically bundles all the music engraving fonts. +// Currently, it is identical to vexflow.ts, but the webpack config inside Gruntfile.js +// sets the webpack mode to 'development' to produce an unminified build. +// In the future, we could do something different with this entry file, such as turn on flags for logging. + + + +(0,_src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__.loadAllMusicFonts)(); +_src_flow__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); +(0,_src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__.loadTextFonts)(); +// Re-export all exports from index.ts. + +// Also collect all exports into a default export for CJS projects. + + +})(); + +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); +//# sourceMappingURL=vexflow-debug.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-debug.js.map b/build/cjs/vexflow-debug.js.map new file mode 100644 index 0000000000..484685214c --- /dev/null +++ b/build/cjs/vexflow-debug.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-debug.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;;;;;;;;;ACVO;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACFP;AACA;AACA;AACA;AACsC;AACN;AACM;AACN;AACE;AAC+D;AAC3D;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ;AACjC;AACA;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iDAAiD;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAA6C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,gEAAgE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D,6BAA6B,kEAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,+CAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wDAAY;AACxC;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,wBAAwB,4DAAgB;AACxC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA;AACA,0BAA0B,2DAAsB;AAChD,QAAQ,8CAAO,+DAA+D,KAAK;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA,iCAAiC,yCAAK,CAAC,2DAAsB,GAAG;AAChE,kCAAkC,yCAAK,CAAC,2DAAsB,GAAG;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC,+BAA+B,8CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO,2CAA2C,KAAK;AAC/D;AACA;AACA,YAAY,uDAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8EAA8E,qCAAqC,IAAI;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC,+BAA+B,8CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;;;;AC/etB;AACA;AACoC;AACoB;AAC1B;AACI;AACc;AACmB;AACtC;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kEAAkE;AAC5D;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,8DAA8D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ;AACjC;AACA;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA,kCAAkC,gEAAoB;AACtD;AACA,8FAA8F,+DAA0B;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,0CAAO;AACpF;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA;AACA;AACA,kEAAkE,+DAA0B;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,2DAAe;AACpC;AACA;AACA,8DAA8D,+DAA0B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS;AAC7B;AACA;AACA,sCAAsC,0CAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS;AAC7B;AACA;AACA,sCAAsC,4CAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAAO;AAChF,8BAA8B,gEAAoB;AAClD,8CAA8C,6DAAsB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,+DAA0B;AAClE,8CAA8C,4CAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,+DAA0B;AACxE,8CAA8C,0CAAO;AACrD;AACA;AACA,mEAAmE,+DAA0B;AAC7F;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,EAAE,uDAAiB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;AC5RtB;AACA;AACA;AACgC;AACM;AACR;AACI;AAC2D;AACzC;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,QAAQ,eAAe,EAAE,wDAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uDAAW,UAAU,uDAAW;AACrE;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAS;AACtB;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAS;AACtB;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,0CAAO;AAClF,2DAA2D,4CAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+CAAQ;AACnC;AACA;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAuH,8CAAO;AAC9H;AACA;AACA;AACA;AACA,6EAA6E,0CAAO;AACpF;AACA;AACA,gBAAgB,2DAAe;AAC/B;AACA;AACA,8DAA8D,+DAA0B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0CAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4CAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,iCAAiC,8DAAuB;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA;AACA,4BAA4B,6DAAwB;AACpD;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B,QAAQ,8CAAO,yDAAyD,UAAU;AAClF,sBAAsB,8CAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA,gBAAgB,IAAI;AACpB;AACA;AACA,wBAAwB,4DAAuB,gCAAgC,gBAAgB;AAC/F;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,EAAE,OAAO,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;;;ACnVxB;AACA;AAC8B;AACwB;AACf;AACV;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uCAAI;AAC1B;AACA,eAAe,wDAAgB;AAC/B;AACA,uBAAuB,6DAAkB;AACzC,gBAAgB,eAAe;AAC/B;AACA,sBAAsB;AACtB;AACA,qBAAqB,sDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,6DAAkB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACmB;;;;;;;;;;;;;;;;;;;;;;;;;AC7EnB;AACA;AACoC;AACE;AACR;AACI;AACQ;AACqB;AACzB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA,eAAe,4CAAS;AACxB;AACA,WAAW,0CAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACO,mBAAmB,6CAAO;AACjC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA;AACA,6CAA6C,+CAAQ;AACrD;AACA,oBAAoB,+CAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wBAAwB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA,iCAAiC,+CAAQ;AACzC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,0CAA0C,sDAAiB;AAC3D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0FAA0F,+CAAQ;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,+CAAQ;AACrD;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,iDAAiD,+CAAQ;AACzD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,2DAAsB;AAC9E;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,0CAAO;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,2DAAsB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iEAAiE,4CAAS,GAAG,0DAAqB,GAAG,uDAAkB;AACvH;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,0BAA0B,2DAAsB;AAChD,sBAAsB,+CAAY;AAClC;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,yBAAyB,uDAAW;AACpC;AACA;AACA,8BAA8B,qDAAS;AACvC;AACA;AACA,gDAAgD,0CAAO,GAAG,4CAAS;AACnE;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAwD,oDAAoD,IAAI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC,oDAAoD,IAAI;AACjH;AACA;AACA;AACA,0BAA0B;AAC1B,kCAAkC;AAClC;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4CAAS;AAC5C;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4CAAS;AACxC;AACA;AACA,oCAAoC,0CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,4CAAS;AAC7C;AACA;AACA,oCAAoC,0CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAqD,8CAA8C,IAAI;AACvH;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA,kEAAkE,0CAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAuB,eAAe;AACzE,gDAAgD,2DAAsB;AACtE,gDAAgD,2DAAsB;AACtE,sCAAsC,2DAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,2DAAsB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,6CAAU;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACvzBA;AACA;AACoC;AACE;AACU;AACE;AACZ;AACtC;AACA,mBAAmB,+CAAQ;AAC3B;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gCAAgC;AAC7D;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,+DAAwB;AAC7E;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,EAAE,uDAAiB;AACpC;;;;;;;;;;;;;;;ACxPhB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC/HA;AACA;AAC8B;AACkB;AACJ;AACP;AACrC;AACA;AACA;AACA;AACO,4BAA4B,yDAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2CAAI;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wGAAwG,mDAAY;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAa;AACtC,8BAA8B,mDAAgB;AAC9C,0BAA0B,+DAA4B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACrPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqD;AACrB;AACM;AACJ;AACc;AACQ;AACb;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,oEAAoE;AAC9D;AACP;AACA;AACA;AACA,CAAC,gEAAgE;AAC1D;AACP;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B;AACP;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA,0BAA0B,+CAAQ;AAClC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,4DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB;AACnD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+DAA4B;AACzD,4BAA4B,iDAAc;AAC1C;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2DAAe;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAAuB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oDAAiB;AACrC,mBAAmB,mDAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mBAAmB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA,sCAAsC,qCAAqC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yCAAK,gCAAgC,yBAAyB;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,iEAAiE,iBAAiB,kBAAkB;AACpG;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAmC;AACxE;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gEAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mEAA8B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D,gDAAgD,iDAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACuB;;;;;;;;;;;;;;;;;;;;ACnsBvB;AACA;AACA;AACgC;AACuC;AACrC;AACK;AACD;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yDAAa;AAChC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA,sBAAsB,kDAAc,mDAAmD,UAAU;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA,wDAAwD,UAAU,eAAe,WAAW,GAAG,UAAU;AACzG,2DAA2D,UAAU,eAAe,WAAW,GAAG,UAAU;AAC5G,gCAAgC;AAChC,kCAAkC,yCAAK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+DAA0B,IAAI,+DAA0B;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB;AACzB,8BAA8B,UAAU;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB;;;;;;;;;;;;;;;;;;;ACnKhB;AACA;AACA;AAC8B;AACE;AACF;AACS;AACvC;AACO,uBAAuB,uCAAI;AAClC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA,sBAAsB,kDAAc,iBAAiB,gDAAa,yBAAyB,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA,sBAAsB,kDAAc,iBAAiB,gDAAa,yBAAyB,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,gDAAgD,gDAAa;AACtF,kCAAkC,UAAU;AAC5C,SAAS;AACT;AACA;AACA,mCAAmC,yCAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACc;AACL;AACV;AAC7B;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uCAAI;AAC5B;AACA;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oEAA0B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;ACrGrB;AACA;AACA;AACA;AACoC;AACG;AACD;AAC/B;AACP;AACA;AACA;AACA,CAAC,sCAAsC;AAChC,oBAAoB,6CAAO;AAClC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;ACnIA;AACA;AACA;AACA;AACsC;AACsC;AACtC;AAC/B,kBAAkB,+CAAQ;AACjC;AACA,eAAe,oDAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAS;AAC9B,0BAA0B,aAAa;AACvC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA,4BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1JA;AACA;AAC8C;AAClB;AACsB;AAClB;AACE;AACJ;AACsB;AACpD;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA,sDAAsD;AACtD;AACA;AACA,qBAAqB,8CAAO;AAC5B;AACA,qBAAqB,8CAAO;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA,iFAAiF,UAAU,WAAW,EAAE;AACxG;AACA,oCAAoC,qDAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2CAA2C;AAC3C;AACA;AACA,kCAAkC,gBAAgB;AAClD,kCAAkC,6CAA6C;AAC/E;AACA,kDAAkD,0CAAO,GAAG,4CAAS;AACrE;AACA;AACA;AACA;AACA;AACA,wDAAwD,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,UAAU;AAClC,YAAY,oDAAkB,WAAW,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,qDAAqD,+BAA+B,qEAA0B,EAAE,yEAA4B,wBAAwB,cAAc;AAClL,qBAAqB;AACrB;AACA;AACA;AACA,0BAA0B,2CAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA,4BAA4B;AAC5B,kCAAkC,oDAAoD;AACtF;AACA;AACA;AACA,6BAA6B;AAC7B,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;ACjarB;AACA;AACA;AACqD;AACf;AACC;AACE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA,sBAAsB,aAAa;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAA2B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C;AACA,kCAAkC,kBAAkB,EAAE,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,kCAAkC;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,4BAA4B,qDAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B,UAAU,4CAAS;AACnB,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrYnB;AACA;AACA;AAC0C;AACwD;AACpD;AACV;AACN;AACc;AACN;AACN;AACQ;AACJ;AACI;AACU;AACV;AACA;AACA;AACU;AACR;AACU;AACE;AACR;AACR;AACQ;AACR;AACI;AACV;AACkB;AACV;AACA;AACF;AACQ;AACZ;AACE;AACE;AACM;AACE;AACR;AACM;AACA;AACV;AACkB;AACF;AAClB;AACK;AACrC;AACA;AACA;AACA,QAAQ,2CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA,6BAA6B,YAAY,4BAA4B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY,6CAA6C,EAAE;AAC7G;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAY;AAC5B,0BAA0B,gEAAwB;AAClD;AACA;AACA,0BAA0B,6DAAqB;AAC/C;AACA;AACA,uBAAuB,6DAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J,0BAA0B,0CAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J,0BAA0B,gDAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,4BAA4B,6CAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,eAAe;AACf,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C,gCAAgC,sDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAc;AACxC;AACA;AACA;AACA;AACA,0BAA0B,mDAAU;AACpC;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB,2EAAkC,YAAY,yEAAgC,EAAE;AACvI,+BAA+B,mDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uEAAuE;AACzG,gCAAgC,qDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E,6BAA6B,gDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAA4C;AAC9E,yBAAyB,wDAAY;AACrC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE,8BAA8B,4DAAc;AAC5C;AACA;AACA;AACA;AACA;AACA,iCAAiC,wDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sDAAW;AAC9B;AACA;AACA,mBAAmB,8DAAe;AAClC;AACA;AACA,4BAA4B,+CAAO;AACnC,qCAAqC,gEAAgB;AACrD;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C,0BAA0B,0CAAK;AAC/B;AACA;AACA;AACA;AACA,8BAA8B,4DAAc;AAC5C;AACA;AACA;AACA;AACA;AACA,mBAAmB,kDAAS;AAC5B;AACA;AACA,kCAAkC,wBAAwB;AAC1D,2BAA2B,4CAAM;AACjC;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA,wBAAwB,gDAAQ;AAChC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAc;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,2BAA2B,4CAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY,6CAA6C;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,mBAAmB,iDAAS;AAC5B;AACA;AACA,kCAAkC;AAClC;AACA,eAAe;AACf,0BAA0B,wDAAY;AACtC,sBAAsB,mEAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA,kCAAkC,WAAW;AAC7C,0BAA0B,wDAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,EAAE,uDAAiB;AACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9fnB,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AAC0C;AACwD;AACpD;AACV;AACN;AACA;AACc;AACsB;AAClB;AACqF;AACvG;AACQ;AACE;AACO;AACnB;AACY;AACJ;AACA;AACiB;AACb;AACF;AACY;AACV;AACR;AACQ;AACA;AACU;AACJ;AACJ;AACI;AACJ;AACc;AACJ;AACE;AACtB;AACF;AACQ;AACQ;AACR;AACM;AACV;AACY;AACR;AACU;AAC6B;AACnC;AACV;AACsB;AACJ;AACJ;AACN;AAC+B;AAC/B;AACO;AACL;AACF;AACF;AACU;AAClB;AACgB;AACX;AACO;AACR;AACA;AACE;AACE;AACA;AACJ;AAC+B;AACnB;AACE;AACS;AACb;AACI;AACJ;AACR;AACF;AACA;AACY;AACV;AACc;AACP;AAC3C;AACA;AACA;AACA;AACA,qBAAqB,8CAAO;AAC5B;AACA,gBAAgB,yCAAE;AAClB;AACA,kBAAkB,2CAAI;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,6CAAS;AAC3D,QAAQ,6DAAuB;AAC/B,QAAQ,2DAAsB;AAC9B,QAAQ,4DAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,6DAAuB;AAC7C;AACA;AACA;AACA,eAAe,6DAAuB;AACtC;AACA;AACA,eAAe,oEAA8B;AAC7C;AACA;AACA,QAAQ,oEAA8B;AACtC;AACA;AACA,eAAe,2DAAqB;AACpC;AACA;AACA,QAAQ,2DAAqB;AAC7B;AACA;AACA,eAAe,gEAA0B;AACzC;AACA;AACA,QAAQ,gEAA0B;AAClC;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,uDAAiB;AAChC;AACA;AACA,QAAQ,uDAAiB;AACzB;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,gEAA0B;AACzC;AACA;AACA,QAAQ,gEAA0B;AAClC;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,wDAAkB;AACjC;AACA;AACA,QAAQ,wDAAkB;AAC1B;AACA;AACA,eAAe,uDAAiB;AAChC;AACA;AACA,QAAQ,uDAAiB;AACzB;AACA;AACA,eAAe,oDAAc;AAC7B;AACA;AACA,eAAe,0DAAoB;AACnC;AACA;AACA,eAAe,oDAAc;AAC7B;AACA;AACA,eAAe,yDAAmB;AAClC;AACA;AACA,eAAe,4DAAsB;AACrC;AACA;AACA,eAAe,6DAAuB;AACtC;AACA;AACA,eAAe,2DAAqB;AACpC;AACA;AACA;AACA,eAAe,0DAAoB;AACnC;AACA;AACA,eAAe,4DAAsB;AACrC;AACA;AACA,kBAAkB,mDAAU;AAC5B,kBAAkB,mDAAU;AAC5B,oBAAoB,uDAAY;AAChC,eAAe,mDAAO;AACtB,eAAe,6CAAO;AACtB,YAAY,uCAAI;AAChB,YAAY,uCAAI;AAChB,mBAAmB,qDAAW;AAC9B,8BAA8B,2EAAsB;AACpD,qBAAqB,yDAAa;AAClC,mBAAmB,qDAAW;AAC9B,YAAY,wCAAI;AAChB,gBAAgB,gDAAQ;AACxB,iBAAiB,kDAAS;AAC1B,aAAa,0CAAK;AAClB,WAAW,sCAAG;AACd,iBAAiB,kDAAS;AAC1B,eAAe,8CAAO;AACtB,eAAe,8CAAO;AACtB,YAAY,wCAAI;AAChB,iBAAiB,kDAAS;AAC1B,gBAAgB,gDAAQ;AACxB,sBAAsB,4DAAc;AACpC,iBAAiB,kDAAS;AAC1B,aAAa,0CAAK;AAClB,iBAAiB,kDAAS;AAC1B,iBAAiB,kDAAS;AAC1B,sBAAsB,4DAAc;AACpC,oBAAoB,wDAAY;AAChC,kBAAkB,oDAAU;AAC5B,oBAAoB,wDAAY;AAChC,kBAAkB,oDAAU;AAC5B,gBAAgB,gDAAQ;AACxB,uBAAuB,8DAAe;AACtC,wBAAwB,gEAAgB;AACxC,aAAa,0CAAK;AAClB,YAAY,wCAAI;AAChB,gBAAgB,gDAAQ;AACxB,oBAAoB,wDAAY;AAChC,gBAAgB,gDAAQ;AACxB,mBAAmB,sDAAW;AAC9B,cAAc,4CAAM;AACpB,oBAAoB,wDAAY;AAChC,gBAAgB,gDAAQ;AACxB,qBAAqB,0DAAa;AAClC,gBAAgB,gDAAQ;AACxB,kBAAkB,oDAAU;AAC5B,kBAAkB,yDAAU;AAC5B,aAAa,0CAAK;AAClB,sBAAsB,4DAAc;AACpC,oBAAoB,wDAAY;AAChC,iBAAiB,kDAAS;AAC1B,qBAAqB,0DAAa;AAClC,iBAAiB,kDAAS;AAC1B,kBAAkB,oDAAU;AAC5B,iBAAiB,kDAAS;AAC1B,gBAAgB,gDAAQ;AACxB,YAAY,wCAAI;AAChB,oBAAoB,wDAAY;AAChC,cAAc,6CAAM;AACpB,kBAAkB,oDAAU;AAC5B,cAAc,4CAAM;AACpB,eAAe,8CAAO;AACtB,gBAAgB,gDAAQ;AACxB,gBAAgB,gDAAQ;AACxB,cAAc,4CAAM;AACpB,mBAAmB,sDAAW;AAC9B,oBAAoB,wDAAY;AAChC,qBAAqB,0DAAa;AAClC,gBAAgB,gDAAQ;AACxB,mBAAmB,sDAAW;AAC9B,qBAAqB,0DAAa;AAClC,mBAAmB,sDAAW;AAC9B,eAAe,8CAAO;AACtB,cAAc,4CAAM;AACpB,cAAc,4CAAM;AACpB,eAAe,8CAAO;AACtB,sBAAsB,4DAAc;AACpC,aAAa,0CAAK;AAClB,aAAa,+CAAK;AAClB;AACA;AACA,mCAAmC,oEAA2B;AAC9D,iCAAiC,kEAAyB;AAC1D,oCAAoC,sEAA4B;AAChE,kCAAkC,oEAA0B;AAC5D,mBAAmB,qDAAW;AAC9B,uBAAuB,yDAAe;AACtC,qBAAqB,kDAAa;AAClC,kBAAkB,8CAAU;AAC5B,iBAAiB,6CAAS;AAC1B,wBAAwB,wDAAgB;AACxC,wBAAwB,wDAAgB;AACxC,2BAA2B,2DAAmB;AAC9C,mBAAmB,uDAAW;AAC9B,6BAA6B,kEAAqB;AAClD,iBAAiB,mDAAS;AAC1B,2BAA2B,8DAAmB;AAC9C,yBAAyB,yDAAiB;AAC1C,iBAAiB,8CAAS;AACV;;;;;;;;;;;;;;;;;;ACtVhB,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACiC;AAC1B;AACP;AACA;AACA;AACA,CAAC,gCAAgC;AAC1B;AACP;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,sBAAsB,oBAAoB,EAAE,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB;;;;;;;;;;;;;;;AC/XT;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACt9GO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,wBAAwB;AACxB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,4BAA4B;AAC5B,0BAA0B;AAC1B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,+BAA+B;AAC/B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,4BAA4B;AAC5B,iCAAiC;AACjC;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,oBAAoB;AACpB;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;AC7YO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;ACzCO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9lCO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACtqCA;AACA;AACA;AACA;AAC6C;AACF;AACI;AACJ;AACI;AAC/C;AACA,YAAY,UAAU;AACtB;AACO;AACP,IAAI,0DAAW;AACf,IAAI,4DAAY;AAChB,IAAI,4DAAY;AAChB,IAAI,wDAAU;AACd,IAAI,wDAAU;AACd;AACA;AACA;;;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC+B;AACgB;AACE;AAC1C;AACP,IAAI,4CAAS,YAAY,wDAAW,EAAE,0DAAa;AACnD;;;;;;;;;;;;;;;;;;ACfA;AACA;AAC+B;AACkB;AACJ;AACtC;AACP,IAAI,4CAAS,WAAW,sDAAU,EAAE,0DAAa;AACjD;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACK;AAC/C;AACP,IAAI,4CAAS,aAAa,+DAAiB,EAAE,0DAAa;AAC1D;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACJ;AACtC;AACP,IAAI,4CAAS,WAAW,sDAAU,EAAE,0DAAa;AACjD;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACA;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACO;AACP,8CAA8C,0DAAa;AAC3D;AACA;AACA;AACA;AACA,IAAI,4CAAS,aAAa,0DAAY;AACtC;;;;;;;;;;;;;;;ACpFO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACtmDO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC91BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC91BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC71BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACr2BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACr2BA;AACA;AAC+B;AACkB;AACY;AACR;AACG;AACT;AACE;AAC1C;AACP;AACA;AACA,yBAAyB,iEAAY;AACrC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,wDAAQ;AACjC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,0DAAS;AAClC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,8DAAc;AACvC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,sEAAkB;AAC3C,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACxHA;AACA;AAC8B;AACA;AACQ;AACc;AACpB;AACkB;AAChB;AACU;AACM;AACqB;AACvC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAQ;AACtC;AACA;AACA;AACA;AACA,iDAAiD,sBAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0BAA0B;AACtE;AACA,YAAY,kDAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB,IAAI;AAClE;AACA,0CAA0C,6DAAe;AACzD,6BAA6B,qDAAW;AACxC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kCAAkC,cAAc,4DAAuB,kCAAkC;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAe;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8BAA8B,uCAAuC,SAAS,wCAAwC,OAAO,6BAA6B;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,+EAA+E,kBAAkB;AACjG;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA,0BAA0B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AACvE;AACA,0CAA0C,wDAAqB;AAC/D;AACA;AACA,wCAAwC,kCAAkC;AAC1E,6CAA6C,yCAAyC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AAC3E;AACA,6BAA6B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AAC1E;AACA,uCAAuC,wDAAqB;AAC5D;AACA;AACA,4CAA4C,+BAA+B;AAC3E;AACA,2DAA2D,+BAA+B;AAC1F;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAc;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gDAAgD,qCAAqC,0DAAqB,oBAAoB;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,4DAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,oCAAoC,sDAAiB;AACrD,0BAA0B,+CAAY;AACtC;AACA,yCAAyC,mDAAY;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+CAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA,2CAA2C,6DAAe;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qDAAW;AACzE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gBAAgB,8CAA8C;AAC9D;AACA,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,8CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yCAAyC;AAClF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6BAA6B;AACrE;AACA,2EAA2E,wDAAoB;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;ACp2BrB;AACA;AACA;AACA;AACA;AACuC;AACD;AACtC;AACA;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,oCAAoC,EAAE,IAAI,EAAE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe,GAAG,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACpNA;AACA;AACA;AACA;AACqD;AACG;AACtB;AACc;AACT;AACD;AACtC,6BAA6B,+CAAQ;AACrC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAoB;AACtD;AACA,iCAAiC,6DAAsB;AACvD,oDAAoD,+DAA0B;AAC9E;AACA,iCAAiC,6DAAsB;AACvD,gDAAgD,+DAA0B;AAC1E;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,oBAAoB,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,mDAAmD;AACnD;AACA;AACA,6BAA6B,8DAAuB;AACpD;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa,IAAI;AAC5C;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB,EAAE;AAChD;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,iBAAiB,6DAAsB;AACvC;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AAC0B;;;;;;;;;;;;;;;;;;ACpK1B;AACA;AACA;AACgD;AACK;AACf;AACtC;AACO,wBAAwB,yDAAa;AAC5C;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,gBAAgB,wDAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC7DA;AACA;AAC4C;AACsB;AAC9B;AACF;AACK;AACQ;AACxC;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,KAAK,GAAG,SAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAO;AAC3B;AACA;AACA;AACA,eAAe,sDAAc;AAC7B;AACA;AACA,uCAAuC,SAAS,EAAE,KAAK,EAAE,IAAI;AAC7D,wCAAwC,SAAS,EAAE,IAAI;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,SAAS,GAAG,KAAK,GAAG,IAAI;AACxE;AACA,sDAAsD,MAAM;AAC5D,gDAAgD,SAAS,GAAG,IAAI;AAChE;AACA;AACA;AACA;AACA,QAAQ,8CAAO;AACf;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA,yBAAyB;AACzB;AACA,kBAAkB,+CAAY,sBAAsB,MAAM;AAC1D;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA,sBAAsB,+CAAY,sBAAsB,MAAM;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2EAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAW;AACnC;AACA;AACA,eAAe,8CAAO,oCAAoC,WAAW;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACiB;;;;;;;;;;;;;;;;;ACzYjB;AACA;AACA;AAC8B;AACS;AAChC,wBAAwB,uCAAI;AACnC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC9DA;AACwC;AACV;AACI;AACK;AACD;AAC/B,wBAAwB,iDAAS;AACxC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB,+DAA0B,6DAA6D;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAW,2BAA2B,8CAAW;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,+DAA0B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,4CAAS;AACpD;AACA;AACA,gEAAgE,4CAAS;AACzE,qCAAqC,uDAAkB;AACvD;AACA;AACA;AACA,mDAAmD,0CAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACU;AACF;AACE;AACF;AACJ;AACA;AACkB;AACvB;AACG;AAChC;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA,6BAA6B,+CAAQ;AACrC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA,iCAAiC,uDAAW;AAC5C;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA,8BAA8B,yCAAyC;AACvE;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,0GAA0G,oEAA4B;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA,wBAAwB,sDAAiB;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iDAAS;AAC1C;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oEAA4B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAW;AAC5C,4CAA4C,+CAAQ,GAAG,2CAAM;AAC7D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AAC0B;;;;;;;;;;;;;;;;;;ACjJ1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACM;AACG;AAChC,2BAA2B,6CAAO;AACzC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAe,CAAC,GAAG;AAC9C;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AAC6B;AACA;AACE;AACL;AACH;AACA;AACO;AACW;AACT;AACF;AACP;AACI;AACC;AACJ;AACF;AACM;AACF;AACA;AACH;AACA;AACvB;AAC4B;AACD;AACM;AACL;AACJ;AACI;AACA;AACK;AACF;AACF;AACE;AACF;AACF;AACO;AACC;AACX;AACD;AACI;AACI;AACJ;AACG;AACL;AACM;AACJ;AACK;AACL;AACE;AACL;AACO;AACE;AACF;AACH;AACI;AACJ;AACM;AACH;AACF;AACD;AACD;AACE;AACN;AACS;AACD;AACL;AACG;AACJ;AACzB;AAC0B;AACC;AACA;AACF;AACK;AACC;AACC;AACL;AACA;AACG;AACC;AACC;AACF;AACJ;AACD;AACA;AACG;AACL;AACvB;AACsB;AACI;AACO;AACT;AACF;;;;;;;;;;;;;;;;;AC7FtB;AACA;AACA;AACA;AACA;AACgC;AACM;AAC/B;AACP;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oDAAgB;AAClD;AACA,sBAAsB,+CAAY,0CAA0C,SAAS;AACrF;AACA,uFAAuF,oDAAgB;AACvG;AACA;AACA;AACA,6BAA6B,sDAAkB;AAC/C,wBAAwB,IAAI,sDAAkB,EAAE;AAChD,+CAA+C,sDAAkB;AACjE,6BAA6B,+CAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACgC;AACuC;AACrC;AACK;AACN;AACjC,2BAA2B,yDAAa;AACxC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD,8BAA8B,+DAA0B;AACxD;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAAsB;AACnD,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,uBAAuB,wDAAmB,CAAC,8CAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qEAAyB;AACrE;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACwB;;;;;;;;;;;;;;;;;;ACtSxB;AACA;AAC8C;AAChB;AACS;AAChC,yBAAyB,uCAAI;AACpC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA,gBAAgB,eAAe;AAC/B,gCAAgC,uDAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClCA;AACA;AACoC;AACG;AACQ;AACxC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,6CAAO;AACrC;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO,sCAAsC,UAAU;AAC/D,eAAe,8CAAO,oCAAoC,UAAU;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0C;AACA;AACI;AAChB;AACc;AAChB;AACsB;AACA;AACJ;AACR;AACM;AACJ;AACM;AACX;AACI;AACI;AACP;AACpC;AACA;AACA;AACA;AACA,QAAQ,2CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAgB,SAAS,2DAAkB;AACnD,QAAQ,6DAAkB,SAAS,6DAAoB;AACvD,QAAQ,4CAAU,SAAS,qDAAY;AACvC,QAAQ,kEAAqB,SAAS,gEAAuB;AAC7D,QAAQ,0DAAiB,SAAS,4DAAmB;AACrD,QAAQ,oDAAa,SAAS,wDAAe;AAC7C,QAAQ,kEAAqB,SAAS,gEAAuB;AAC7D,QAAQ,8DAAmB,SAAS,8DAAqB;AACzD,QAAQ,+DAAmB,SAAS,8DAAqB;AACzD,QAAQ,8DAAmB,SAAS,8DAAqB;AACzD,QAAQ,sDAAe,SAAS,0DAAiB;AACjD,QAAQ,0DAAiB,SAAS,4DAAmB;AACrD,QAAQ,4DAAkB,SAAS,6DAAoB;AACvD,QAAQ,8CAAW,SAAS,sDAAa;AACzC,QAAQ,qDAAc,SAAS,yDAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAoB,iBAAiB,2DAAkB;AAC/D;AACA;AACA;AAC2B;;;;;;;;;;;;;;;;;;;;;;;AC9I3B;AACA;AACA;AACA;AACoC;AACJ;AACM;AACkB;AACtB;AACc;AACE;AACjB;AACjC;AACA;AACA;AACA,6BAA6B,+CAAQ,GAAG,+BAA+B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,6CAAO;AAC7C;AACA,eAAe,iEAAyB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD,8CAA8C,6JAA6J,+DAA0B,qCAAqC,+DAA0B,kDAAkD,+DAA0B,2EAA2E;AAC3b;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC,YAAY,qDAAiB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,uEAA2B;AAC3E,yCAAyC,qDAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yDAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9LA;AACA;AACsC;AACtC;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,wBAAwB;AAC1C,oBAAoB,yBAAyB;AAC7C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,4BAA4B;AAC/C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,4BAA4B;AAChD,qBAAqB,4BAA4B;AACjD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,4BAA4B;AAC7C,kBAAkB,4BAA4B;AAC9C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,iCAAiC,UAAU;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,WAAW;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,eAAe;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wCAAwC,UAAU;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,4CAA4C,cAAc;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,UAAU;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY,uCAAuC,KAAK,IAAI,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,KAAK,IAAI,UAAU;AAC5F;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,eAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,UAAU;AACnF;AACA;AACA,sBAAsB,+CAAY,mCAAmC,MAAM,IAAI,MAAM;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AClXA;AACA;AAC8B;AACY;AACR;AACI;AACC;AACQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,mBAAmB,+CAAQ;AAClC;AACA;AACA;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,QAAQ,uDAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,oBAAoB,2DAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,2BAA2B;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,wDAAwD,yDAAoB;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,sCAAsC;AACtC,uCAAuC;AACvC,0BAA0B;AAC1B,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oDAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4DAAuB;AACzC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,4DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+DAA0B,IAAI,+DAA0B;AAC3F;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC/eA;AACA;AAC4C;AACZ;AACF;AACA;AACI;AACK;AACD;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gEAA2B;AAC7C;AACA,qBAAqB,sDAAiB;AACtC;AACA,QAAQ,4DAAuB;AAC/B;AACA;AACA;AACA,cAAc,sDAAiB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8DAAyB;AACjC;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uCAAI;AAC3B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,0CAAO;AAClE;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,6DAA6D,+DAA0B,EAAE;AACzF;AACA;AACA;AACA,cAAc,kDAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,6CAAU;AACrD,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,MAAM,mBAAmB,0CAAO,iBAAiB;AACnG;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAiB;AAC7B,sCAAsC,eAAe;AACrD,aAAa;AACb;AACA;AACA;AACA;AACA;AACoB;;;;;;;;;;;;;;;;;;;;ACnNpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwC;AACF;AACJ;AACK;AACP;AACzB,2BAA2B,+CAAQ;AAC1C;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,iDAAS;AACtC,yBAAyB,yCAAK;AAC9B;AACA;AACA,wBAAwB,sDAAiB;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpEA;AACA;AACA;AACgC;AACM;AACR;AACI;AACU;AACM;AACE;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAQ;AAC/B;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,6CAA6C;AAC7C;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8CAAO;AAC5C,oFAAoF,8DAAuB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,8DAAuB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB;AACvD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA,wBAAwB,yDAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,0CAA0C,UAAU;AACtF;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B,kCAAkC,mBAAmB;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAK,CAAC,2DAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAK,CAAC,2DAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4CAAS;AACrC;AACA,YAAY,qDAAS;AACrB;AACA,gCAAgC,4CAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,4CAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oEAA0B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoB;;;;;;;;;;;;;;;;;;;;ACvRpB;AACA;AACA;AACgC;AACwB;AAC1B;AACI;AACkB;AACpD;AACO,0BAA0B,+CAAQ;AACzC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD,iDAAiD,4DAAqB;AACtE,iDAAiD,6DAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA,wBAAwB,4DAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,6DAAsB;AACpG,2BAA2B,4DAAuB,+EAA+E,gDAAa;AAC9I,sBAAsB,4DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA,2BAA2B,4DAAuB,+EAA+E,gDAAa;AAC9I,sBAAsB,4DAAuB;AAC7C,YAAY,uDAAW;AACvB,+BAA+B,4DAAuB,iFAAiF,gDAAa;AACpJ,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA,6BAA6B,8DAAuB;AACpD,YAAY,qDAAiB;AAC7B;AACA,aAAa;AACb;AACA,kCAAkC,6DAAsB;AACxD,YAAY,qDAAiB;AAC7B;AACA,aAAa;AACb;AACA;AACA;;;;;;;;;;;;;;;;AC3FA;AACA;AACA;AAC2C;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,cAAc;AACnE,kDAAkD,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACkB;;;;;;;;;;;;;;;;;;;;;ACpNlB;AACA;AACoC;AACiB;AACrB;AACE;AACK;AACI;AAC3C;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yCAAK,2BAA2B,0BAA0B;AAChF;AACA,0DAA0D,+DAA0B;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6CAAO;AAClC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB,gCAAgC,mCAAmC,2CAA2C,+DAA0B;AAC/L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB,gCAAgC,mCAAmC,2CAA2C,+DAA0B;AAC/L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;ACtPxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,2BAA2B,yEAAyE;AACpG;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnHA;AACA;AACuC;AAChC;AACP;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACgD;AACN;AACI;AACR;AACU;AACzC;AACP;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACO;AACP;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAY,gDAAgD,aAAa;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kDAAY;AACjC,8BAA8B,+CAAY;AAC1C;AACA,2DAA2D,0BAA0B;AACrF;AACA,8BAA8B,+CAAY;AAC1C;AACA,+BAA+B,yDAAa;AAC5C;AACA;AACA,qBAAqB,+CAAS;AAC9B,8BAA8B,+CAAY;AAC1C;AACA,+BAA+B,mDAAU;AACzC;AACA;AACA,0BAA0B,+CAAY,8CAA8C,QAAQ;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoB;;;;;;;;;;;;;;;;;;;AC/HpB;AACgC;AACQ;AACN;AACK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,iDAAS;AACzC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA,0BAA0B,yCAAK,YAAY,4DAAuB;AAClE;AACA,SAAS;AACT,qCAAqC,+CAA+C;AACpF;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AAC4C;AACd;AACM;AACiB;AACP;AACQ;AACE;AACT;AACD;AACJ;AACF;AACH;AACH;AACc;AACE;AACZ;AACtC;AACA;AACA;AACA;AACA,KAAK,2DAAgB;AACrB,KAAK,gDAAa;AAClB,KAAK,gEAAqB;AAC1B,KAAK,mEAAsB;AAC3B;AACA;AACA,KAAK,mEAAsB;AAC3B,KAAK,gEAAqB;AAC1B,KAAK,2DAAgB;AACrB,KAAK,gDAAa;AAClB;AACA,oBAAoB,6CAAO;AAC3B;AACA,eAAe,uDAAc;AAC7B;AACA;AACA;AACA;AACA,0BAA0B,6DAAuB;AACjD;AACA;AACA;AACA;AACA,0BAA0B,6DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uCAAuC,wHAAwH,gEAA0B,oHAAoH;AAC7S,wBAAwB;AACxB,wCAAwC;AACxC;AACA;AACA,6BAA6B,kDAAO,yBAAyB,6DAAkB,GAAG,2DAAgB;AAClG;AACA,gCAAgC,kDAAO,0BAA0B,6DAAkB,GAAG,2DAAgB;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iEAA2B;AAChE;AACA;AACA,0DAA0D,iEAA2B;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qFAAqF,iEAA2B,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA,8BAA8B,uEAA2B;AACzD;AACA;AACA;AACA,oDAAoD,uEAA2B;AAC/E;AACA;AACA;AACA;AACA,qCAAqC,mEAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,wDAAU;AAC1C;AACA;AACA;AACA;AACA,gCAAgC,+CAAK;AACrC;AACA;AACA;AACA;AACA,iCAAiC,uDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mDAAU;AAC1C;AACA;AACA;AACA,wCAAwC;AACxC,gCAAgC,kDAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qEAAyB;AAC5D;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B,EAAE,sDAAW;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAwB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,yBAAyB,qEAAyB;AAClD;AACA;AACA;AACA;AACA;AACA,kDAAkD,gDAAa;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,qEAAyB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,0DAA0D,gEAAqB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,qEAAyB;AAC9E;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,2DAA2D,mEAAsB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,qEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,6BAA6B,uDAAY;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uEAA2B;AAC9E;AACA;AACA,8BAA8B,qEAAyB;AACvD;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA,6CAA6C,qEAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,0DAAa;AAC1C;AACA;AACA;AACA,uDAAuD,qEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,uEAA2B;AAC1E,+CAA+C,qEAAyB;AACxE;AACA;AACA,gEAAgE,mEAAwB;AACxF;AACA,0CAA0C,kDAAO,CAAC,6DAAkB;AACpE;AACA;AACA,0CAA0C,kDAAO,CAAC,2DAAgB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA,6BAA6B,sDAAS;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,uEAA2B;AAChF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,qDAAqD,uEAA2B;AAChF;AACA;AACA;AACA;AACA,iBAAiB;AACjB,wDAAwD,uEAA2B;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,sDAAa;AAC1C;AACA,6BAA6B,8DAAqB;AAClD;AACA,6BAA6B,+DAAsB;AACnD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iDAAiD,uEAA2B,EAAE,yDAAgB;AAC9F;AACA,0CAA0C,mEAAwB;AAClE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,iDAAiD,uEAA2B,EAAE,yDAAgB;AAC9F;AACA,0CAA0C,mEAAwB;AAClE;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACiB;;;;;;;;;;;;;;;;;;;ACjuBjB;AACA;AACA;AACuE;AACrC;AACK;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B,sBAAsB,yDAAa;AAC1C;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACrMA;AACA;AACoC;AACiB;AACrB;AACE;AACK;AACD;AACtC;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAO;AACpC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA,yBAAyB,gEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,qCAAqC,wBAAwB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAiB;AACjC,gBAAgB,qDAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY,qDAAqD,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0B;;;;;;;;;;;;;;;;;;;AC/O1B;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACE;AACC;AACD;AACtC,2BAA2B,6CAAO;AAClC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAuB,iBAAiB,8DAAuB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAuB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;;;;AChKxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACF;AACa;AACR;AACD;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAO;AAC/B;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,mEAA8B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,EAAE,uDAAiB;AACzD;AACA;AACA;AACA;AACA;AACA,8BAA8B,wDAAiB;AAC1B;;;;;;;;;;;;;;;;;;;AClRrB;AACA;AACA;AACA;AACoC;AACG;AACN;AAC1B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AAChD,4BAA4B,6CAAO;AAC1C;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC4C;AACN;AACA;AACR;AACkB;AACd;AACK;AACsB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,iFAAiF,0CAAO;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC;AACA;AACA;AACA;AACA;AACA,wBAAwB,yDAAa;AACrC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA,eAAe,0CAAO;AACtB;AACA;AACA;AACA;AACA;AACA,eAAe,4CAAS;AACxB;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,wDAAmB;AAC7D,0CAA0C,wDAAmB;AAC7D;AACA;AACA,yBAAyB,kDAAa;AACtC;AACA;AACA;AACA,8FAA8F,oDAAY;AAC1G;AACA,kGAAkG,oDAAY;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,6DAA6D,+DAA0B;AACvF;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,0CAAO;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI,GAAG,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+CAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,0CAAO,GAAG,4CAAS;AACzE;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,0BAA0B,yDAAoB;AAC9C;AACA,0BAA0B,+CAAY,qDAAqD,IAAI;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAyB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,6CAAU;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,4BAA4B,EAAE,wDAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,4CAAS;AACvF;AACA;AACA,kGAAkG,0CAAO;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,0CAAO;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,kBAAkB,QAAQ;AAC1B;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,cAAc;AAChC;AACA,kBAAkB,cAAc;AAChC,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B,WAAW,IAAI;AAC7D;AACA;AACA,sEAAsE,6CAAU;AAChF;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,iKAAiK;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,4CAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mBAAmB;AACxF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,+BAA+B,0CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;;AC/iCrB;AACA;AACqD;AACrB;AACgB;AACd;AACK;AACvC,yBAAyB,yDAAa;AACtC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,sDAAsD,4DAAuB,+DAA+D,kBAAkB;AACvL;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,sDAAsD,4DAAuB,iEAAiE,mBAAmB;AAC1L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA,YAAY,4DAAuB;AACnC;AACA,YAAY,qDAAiB,mBAAmB,+DAA4B;AAC5E;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB,UAAU,+DAA0B;AACpC,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;ACrKtB;AACA;AACqD;AACL;AACA;AACT;AACvC,2BAA2B,yDAAa;AACxC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACwB;;;;;;;;;;;;;;;;;;;;;AClExB;AACA;AACqD;AACrB;AACuC;AACrC;AACc;AACT;AACvC,yBAAyB,yDAAa;AACtC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,wBAAwB,uEAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,+DAA0B;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oBAAoB,mCAAmC;AACtH;AACA,sCAAsC,gEAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA,+BAA+B,yDAAoB;AACnD;AACA,YAAY,qDAAiB;AAC7B,iBAAiB,kDAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qDAAiB;AACzD;AACA,qBAAqB;AACrB,8CAA8C,+DAA0B;AACxE;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACsB;;;;;;;;;;;;;;;;;;;;ACrGtB;AACA;AACqD;AACkB;AACd;AAClB;AACD;AACtC,wBAAwB,yDAAa;AACrC;AACA,eAAe,0DAAkB;AACjC;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,uCAAuC,uCAAuC,oEAA6B,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sEAA0B;AAC3C,iBAAiB,uEAA2B;AAC5C;AACA,sCAAsC,sEAA0B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uEAA2B;AAC5C,iBAAiB,uEAA2B;AAC5C;AACA,mDAAmD,+DAAwB;AAC3E;AACA;AACA,wDAAwD,8DAAuB;AAC/E;AACA;AACA,sCAAsC,uEAA2B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACqB;;;;;;;;;;;;;;;;;;ACrFrB;AACA;AACA;AACA;AACoC;AACG;AACD;AACtC,uBAAuB,6CAAO;AAC9B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC,EAAE,uDAAiB;AACpC;;;;;;;;;;;;;;;;;;;ACpLpB;AACA;AACqD;AACL;AACT;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B,oBAAoB,yDAAa;AACjC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACiB;;;;;;;;;;;;;;;;;;;ACvEjB;AACA;AACA;AACA;AACA;AACoC;AACF;AACK;AACI;AAC3C;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,mBAAmB,6CAAO;AAC1B;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sDAAiB;AAChC;AACA;AACA,eAAe,uDAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G;AAC7G;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4DAAuB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mBAAmB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB;;;;;;;;;;;;;;;;;;;;;ACnKhB;AACA;AACA;AACA;AACA;AACgC;AACF;AACA;AACI;AACK;AACD;AAC/B,4BAA4B,uCAAI;AACvC;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA,yDAAyD,4CAAS;AAClE;AACA,gCAAgC,yCAAK,mDAAmD,UAAU;AAClG;AACA;AACA;AACA;AACA,wCAAwC,4CAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAyB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,wBAAwB,0CAAO;AAC/B,0BAA0B,0CAAO,kBAAkB,4CAAS;AAC5D,sBAAsB,+CAAY,2CAA2C,UAAU;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB,iCAAiC,qBAAqB;AACzG;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,4CAAS;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0CAAO;AACtD;AACA;AACA;AACA;AACA;AACA,gDAAgD,8CAAW;AAC3D;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChOA;AACA;AACA;AACA;AACA;AACqD;AACG;AAClB;AACR;AACI;AACmC;AAC/B;AACtC,2BAA2B,+CAAQ;AACnC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA,sBAAsB,4DAAuB;AAC7C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA,iBAAiB,uDAAW;AAC5B,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA,2DAA2D,+DAA0B;AACrF;AACA,4BAA4B,6DAAsB;AAClD;AACA;AACA;AACA,iCAAiC,6DAAsB;AACvD;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD,gCAAgC,6DAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,yCAAyC;AACzC;AACA;AACA,6BAA6B,8DAAuB;AACpD;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB,EAAE;AACjD;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B,4BAA4B;AAC5B,mBAAmB,gEAAyB,EAAE;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gEAAyB,WAAW,gEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAAO;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,2DAA2D,0CAAO;AAClE;AACA;AACA,mGAAmG,+DAA0B;AAC7H;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,2DAA2D,4CAAS;AACpE;AACA;AACA,mGAAmG,+DAA0B;AAC7H;AACA;AACA,iBAAiB,6DAAsB;AACvC;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA;AACA;AACA,qBAAqB,8DAAuB;AAC5C;AACA;AACA,oBAAoB,8DAAuB;AAC3C;AACA,qBAAqB,gEAAyB;AAC9C;AACA;AACA,oBAAoB,8DAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B,UAAU,4CAAS;AACnB,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACwB;;;;;;;;;;;;;;;;;;;;;ACpQxB;AACA;AACA;AACA;AACA;AACqD;AACrB;AACM;AACJ;AACqC;AACjC;AACtC,qBAAqB,+CAAQ;AAC7B;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA,wBAAwB,OAAO;AAC/B;AACA,yBAAyB;AACzB;AACA,qBAAqB,qDAAS;AAC9B;AACA,wBAAwB,cAAc;AACtC,yBAAyB;AACzB;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,SAAS;AACT;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,wBAAwB,+DAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA,gBAAgB,kDAAM;AACtB;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,0BAA0B,+CAAY,mCAAmC,WAAW;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B,mCAAmC,WAAW;AAC9C,oBAAoB,qDAAiB;AACrC;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C,oBAAoB,qDAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,QAAQ,qDAAiB;AACzB,gCAAgC,WAAW,GAAG,MAAM;AACpD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB,UAAU,4CAAS;AACnB,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACkB;;;;;;;;;;;;;;;;;;;ACzNlB;AACA;AACA;AACqD;AACL;AACd;AAC4B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,wBAAwB;AAC7E;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,2BAA2B,kDAAe;AAC1C,yBAAyB,4CAAS;AAClC,2BAA2B,oDAAiB;AAC5C,0BAA0B,mDAAgB;AAC1C;AACA,qCAAqC,sBAAsB;AAC3D,0CAA0C,iFAAiF;AAC3H;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6CAAM;AAC9C;AACA,qCAAqC,6CAAM;AAC3C;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA,wDAAwD,qBAAqB;AAC7E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAgD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAc;AAC3C,2BAA2B,qDAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,IAAI;AAC9E,6BAA6B,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,GAAG;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAe,KAAK,SAAS;AACvE;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,4DAA4D;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB;AAC/E,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAa;AACtC,6BAA6B,mDAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;;ACpjBtB;AACA;AAC4C;AACR;AACI;AACV;AACE;AACO;AACD;AACtC;AACA;AACA;AACA;AACA;AACO,qBAAqB,6CAAO;AACnC;AACA,eAAe,uDAAe;AAC9B;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,qDAAqD,iLAAiL,cAAc,yBAAyB,YAAY,mDAAmD,0BAA0B;AACtW;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAyD,EAAE;AACpF;AACA;AACA;AACA,yBAAyB;AACzB,yDAAyD,WAAW;AACpE,iDAAiD,aAAa;AAC9D,UAAU,EAAE;AACZ;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D,gGAAgG,wFAAwF;AACxL,gDAAgD,+EAA+E,aAAa,uBAAuB;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,sDAAkB;AAClE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,mEAAmE,wDAAoB;AACvF;AACA;AACA;AACA;AACA;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA,+BAA+B,qDAAW;AAC1C,QAAQ,4DAAwB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,YAAY,+DAAuB;AACnC;AACA;AACA;AACA;AACA;AACA,wBAAwB,mDAAgB;AACxC,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;AC3MA;AACsC;AACN;AACM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ;AACjB,UAAU,QAAQ;AAClB,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;AACA,cAAc,eAAe;AAC7B,YAAY,eAAe;AAC3B,aAAa,eAAe;AAC5B,YAAY,eAAe;AAC3B,eAAe,eAAe;AAC9B,kBAAkB,eAAe;AACjC,uBAAuB,eAAe;AACtC,oBAAoB,eAAe;AACnC,oBAAoB,eAAe;AACnC,eAAe,eAAe;AAC9B,cAAc,gBAAgB;AAC9B;AACA;AACA,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,wCAAwC;AAClD,WAAW,yCAAyC;AACpD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,uBAAuB;AAChC,UAAU,wCAAwC;AAClD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,wCAAwC;AAClD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,WAAW;AACpB,UAAU,iBAAiB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,iBAAiB;AAC3B,UAAU,0BAA0B;AACpC,UAAU,gBAAgB;AAC1B,UAAU,qBAAqB;AAC/B,UAAU,uBAAuB;AACjC;AACA;AACA,WAAW,0DAA0D;AACrE,YAAY,gEAAgE;AAC5E,SAAS,yDAAyD;AAClE,UAAU,+DAA+D;AACzE,SAAS,4DAA4D;AACrE,MAAM,KAAK,+DAA+D;AAC1E,MAAM,KAAK,gEAAgE;AAC3E,UAAU,oFAAoF;AAC9F,SAAS,wEAAwE;AACjF,YAAY,gFAAgF;AAC5F,WAAW,0EAA0E;AACrF,YAAY,uEAAuE;AACnF,UAAU,+DAA+D;AACzE,WAAW,sEAAsE;AACjF,SAAS,yDAAyD;AAClE,SAAS,0DAA0D;AACnE,WAAW,mEAAmE;AAC9E,aAAa,uEAAuE;AACpF,YAAY,mEAAmE;AAC/E,YAAY,mEAAmE;AAC/E,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,wBAAwB,2DAA2D;AACnF,uBAAuB,0DAA0D;AACjF,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,sCAAsC,yEAAyE;AAC/G,wCAAwC,2EAA2E;AACnH,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,kCAAkC,qEAAqE;AACvG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,wCAAwC,2EAA2E;AACnH,qCAAqC,wEAAwE;AAC7G,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,wBAAwB,2DAA2D;AACnF,wBAAwB,2DAA2D;AACnF,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,oCAAoC,uEAAuE;AAC3G;AACA;AACA;AACA,KAAK;AACL,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,YAAY,wDAAwD;AACpE;AACA;AACA;AACA;AACA,KAAK;AACL,UAAU,+CAA+C;AACzD,YAAY,4EAA4E;AACxF,aAAa,4CAA4C;AACzD,aAAa,4CAA4C;AACzD,aAAa,sFAAsF;AACnG,cAAc,iDAAiD;AAC/D,cAAc,iDAAiD;AAC/D,aAAa,oFAAoF;AACjG,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,4FAA4F;AAC1G,eAAe,oDAAoD;AACnE,eAAe,oDAAoD;AACnE,YAAY,4CAA4C;AACxD,UAAU,8CAA8C;AACxD,YAAY,+CAA+C;AAC3D;AACA;AACA,eAAe,4BAA4B;AAC3C,wBAAwB,yBAAyB;AACjD,YAAY,sBAAsB;AAClC,qBAAqB,2BAA2B;AAChD,UAAU,uBAAuB;AACjC,eAAe,6CAA6C;AAC5D,iBAAiB,iDAAiD;AAClE,eAAe,4CAA4C;AAC3D,iBAAiB,yCAAyC;AAC1D,iBAAiB,uCAAuC;AACxD,mBAAmB,qDAAqD;AACxE,iBAAiB,oCAAoC;AACrD,kBAAkB,6BAA6B;AAC/C,aAAa,oBAAoB;AACjC,YAAY,yBAAyB;AACrC,YAAY,2BAA2B;AACvC,gBAAgB,yBAAyB;AACzC,gBAAgB,8BAA8B;AAC9C,YAAY,mBAAmB;AAC/B,qBAAqB,yBAAyB;AAC9C,mBAAmB,uBAAuB;AAC1C,YAAY,mBAAmB;AAC/B,gBAAgB,uBAAuB;AACvC,aAAa,oBAAoB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2EAA2E;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,gGAAgG,SAAS;AACzG;AACA;AACA;AACA,wBAAwB;AACxB;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,kFAAkF,eAAe;AACnI;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+CAA+C;AACnF;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,sBAAsB,+CAAY,8EAA8E,QAAQ;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,oDAAoD,QAAQ;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,yCAAK;AAC1C;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,gDAAgD,KAAK;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,SAAS;AACnG;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,0BAA0B,6CAA6C;AACvI;AACA;AACA;AACA,iEAAiE,kDAAc;AAC/E;AACA,2DAA2D,kBAAkB,oBAAoB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;;AC7xCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACE;AACM;AACR;AACkB;AACd;AACY;AACC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACO,sBAAsB,yDAAa;AAC1C;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA,4DAA4D;AAC5D;AACA,8BAA8B,gEAA2B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4CAAS,CAAC,KAAK,kDAAe,CAAC,GAAG;AACvD,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0CAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA,+BAA+B,2DAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,yBAAyB,6DAAsB;AAC/C,wBAAwB;AACxB;AACA,8BAA8B,8DAAuB;AACrD,gCAAgC;AAChC;AACA,8BAA8B,8DAAuB,iBAAiB,8DAAuB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oCAAoC,WAAW,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA,uDAAuD,4CAAS;AAChE;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE;AACA,wFAAwF,0BAA0B;AAClH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iDAAK;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzYA;AACA;AACA;AACA;AACA;AACqD;AACnB;AACK;AACD;AACtC,uBAAuB,2CAAM;AAC7B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACoB;;;;;;;;;;;;;;;;;ACrGpB;AACgC;AACO;AAChC,uBAAuB,yCAAK;AACnC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,4CAA4C,kEAAkE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACsC;AACC;AAChC,qBAAqB,+CAAQ;AACpC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACoC;AACiB;AACf;AACJ;AACK;AACI;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA,CAAC,kDAAkD;AACnD,0BAA0B,6CAAO;AACjC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8EAA8E;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,mEAA8B;AACxG;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA,gCAAgC,iDAAc;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8DAAuB;AACnC;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACuB;;;;;;;;;;;;;;;;;;;;ACxLvB;AACA;AACgC;AACF;AACI;AACK;AACa;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uCAAI;AAC/B;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B,iBAAiB,+DAA0B,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC,yBAAyB,8CAAO;AAChC,8BAA8B,yCAAK,0BAA0B,sBAAsB;AACnF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;AClHxB;AACA;AACqD;AACxB;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,mCAAmC,kDAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAW;AACpC,2BAA2B,gDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+DAA4B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kDAAe,GAAG,oDAAiB;AACtE,oCAAoC,mDAAgB,GAAG,mDAAgB;AACvE;AACA,2BAA2B,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,wDAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACyB;;;;;;;;;;;;;;;;;;;;;;AC7TzB;AACA;AACqD;AACrB;AACF;AACI;AACK;AACD;AAC/B;AACP;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uCAAI;AAC3B;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC,6BAA6B,yCAAK,cAAc,+DAA0B,IAAI,sBAAsB;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA,oCAAoC,iDAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACA;AACoB;;;;;;;;;;;;;;;;;;;;AClNpB;AACA;AACoC;AACE;AACJ;AACK;AACQ;AAC/C;AACA;AACA;AACA;AACO,uBAAuB,6CAAO;AACrC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ,QAAQ;AACzC,iCAAiC;AACjC,kCAAkC,+CAAQ;AAC1C;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sDAAiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;;;;;;;;;;;;;;;;;AChSA;AACA;AACA;AACA;AACA;AACsC;AACA;AACtC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,+CAAQ;AACvC,4BAA4B,+CAAQ;AACpC,sCAAsC;AACtC,mCAAmC;AACnC;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB,0BAA0B;AAC1B,6BAA6B;AAC7B,oCAAoC;AACpC;AACA,yBAAyB;AACzB,0BAA0B;AAC1B,sCAAsC;AACtC,uCAAuC;AACvC,4BAA4B;AAC5B,6BAA6B;AAC7B,8BAA8B;AAC9B,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uHAAuH;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjMA;AACA;AACA;AACA;AACA;AACgC;AACC;AAC1B,iCAAiC,yCAAK;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAK;AACtC;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAK;AACtC;AACA,wBAAwB,8CAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,YAAY,uDAAmB;AAC/B,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA,YAAY,uDAAmB;AAC/B,uBAAuB,8CAAO;AAC9B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACgC;AACuC;AACrC;AACkB;AACb;AACQ;AAC/C;AACA;AACA;AACA,kBAAkB,+CAAY,2CAA2C,SAAS;AAClF;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,SAAS;AACtF;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO,4BAA4B,yDAAa;AAChD;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD,+DAA+D,+DAA0B;AACzF;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA,2BAA2B,yCAAK,OAAO,+DAA0B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6DAAkB;AACrC;AACA;AACA,gBAAgB,kCAAkC;AAClD;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtLA;AACA;AAC8B;AACkB;AACT;AAChC,0BAA0B,uCAAI;AACrC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA,gBAAgB,eAAe;AAC/B,2BAA2B,yDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACgC;AACQ;AACF;AACR;AACA;AACI;AACkB;AACpD;AACO,sBAAsB,+CAAQ;AACrC;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAW;AAC9B,2BAA2B,uDAAe;AAC1C,oCAAoC,yBAAyB;AAC7D,0BAA0B,4DAAuB;AACjD,kDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA,2CAA2C,SAAS;AACpD;AACA,0DAA0D,SAAS,2CAA2C,gDAAa;AAC3H,uCAAuC,SAAS,cAAc,kBAAkB,0CAAO,iBAAiB;AACxG,wBAAwB,cAAc;AACtC,YAAY,qDAAiB,oCAAoC,0CAA0C;AAC3G;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC1DA;AACA;AACkC;AACI;AACtC;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,yDAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,aAAa;AAC1F;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,yBAAyB,GAAG,UAAU;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,qDAAqD,QAAQ;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAoB,QAAQ,GAAG,OAAO;AACxD;AACA;;;;;;;;;;;;;;;;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4BAA4B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACI;AACR;AACF;AACI;AACK;AACQ;AACxC;AACP;AACA;AACA;AACA,CAAC,wCAAwC;AAClC,qBAAqB,6CAAO;AACnC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4DAAuB;AACrD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+DAA0B;AAChD;AACA;AACA;AACA;AACA,QAAQ,mEAA2B;AACnC;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,SAAS;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yCAAK;AACnD;AACA;AACA;AACA;AACA;AACA,0CAA0C,yCAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,0CAAO;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,uBAAuB;AACnD;AACA,0EAA0E,0CAAO;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,8CAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAuB;AAC9C;AACA;AACA;AACA,wBAAwB,8CAAO;AAC/B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8CAAO;AACnC,aAAa;AACb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;ACtH7B;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAM;AACrB,eAAe,qBAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,MAAM,6BAA6B,MAAM;AACjF;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iBAAiB,KAAK;AACtB;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;;;;;;;;;;;;;;;;;ACtFA;AACA;AACA;AAC8B;AACa;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,uCAAI;AACA;;;;;;;;;;;;;;;;;;;ACrEf;AACA;AAC8B;AACQ;AACJ;AACK;AACvC;AACO,sBAAsB,+CAAQ;AACrC;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAa;AACtD;AACA,yGAAyG,+DAA0B;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClHA;AACA;AACA;AACoC;AACG;AACV;AACO;AACpC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA,6BAA6B,6CAAO;AACpC;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2DAAqB;AAC7B;AACA;AACA;AACA;AAC0B;;;;;;;;;;;;;;;;;;;;;ACrE1B;AACA;AACoC;AACE;AACJ;AACK;AACkB;AAClD;AACP;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACO,oBAAoB,6CAAO;AAClC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA,2BAA2B,0DAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yCAAyC,sDAAiB,EAAE;AAChG;AACA,8BAA8B,+CAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC/PA;AACA;AACA;AACA;AACA;AACA;AACsC;AACtC;AACO;AACP;AACA;AACA,mBAAmB,mDAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,mBAAmB,mDAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;;;;;;;UC7BA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACmC;AACuB;AACH;AACvD,sEAAiB;AACjB,wDAAiB;AACjB,mEAAa;AACb;AAC6B;AAC7B;AACwC","sources":["webpack://Vex/webpack/universalModuleDefinition","webpack://Vex/./src/version.ts","webpack://Vex/./src/accidental.ts","webpack://Vex/./src/annotation.ts","webpack://Vex/./src/articulation.ts","webpack://Vex/./src/barnote.ts","webpack://Vex/./src/beam.ts","webpack://Vex/./src/bend.ts","webpack://Vex/./src/boundingbox.ts","webpack://Vex/./src/boundingboxcomputation.ts","webpack://Vex/./src/canvascontext.ts","webpack://Vex/./src/chordsymbol.ts","webpack://Vex/./src/clef.ts","webpack://Vex/./src/clefnote.ts","webpack://Vex/./src/crescendo.ts","webpack://Vex/./src/curve.ts","webpack://Vex/./src/dot.ts","webpack://Vex/./src/easyscore.ts","webpack://Vex/./src/element.ts","webpack://Vex/./src/factory.ts","webpack://Vex/./src/flow.ts","webpack://Vex/./src/font.ts","webpack://Vex/./src/fonts/bravura_glyphs.ts","webpack://Vex/./src/fonts/common_metrics.ts","webpack://Vex/./src/fonts/custom_glyphs.ts","webpack://Vex/./src/fonts/gonville_glyphs.ts","webpack://Vex/./src/fonts/leland_glyphs.ts","webpack://Vex/./src/fonts/load_all.ts","webpack://Vex/./src/fonts/load_bravura.ts","webpack://Vex/./src/fonts/load_custom.ts","webpack://Vex/./src/fonts/load_gonville.ts","webpack://Vex/./src/fonts/load_leland.ts","webpack://Vex/./src/fonts/load_petaluma.ts","webpack://Vex/./src/fonts/petaluma_glyphs.ts","webpack://Vex/./src/fonts/petalumascript_glyphs.ts","webpack://Vex/./src/fonts/robotoslab_glyphs.ts","webpack://Vex/./src/fonts/sans_bold_text_metrics.ts","webpack://Vex/./src/fonts/sans_text_metrics.ts","webpack://Vex/./src/fonts/serif_text_metrics.ts","webpack://Vex/./src/fonts/textfonts.ts","webpack://Vex/./src/formatter.ts","webpack://Vex/./src/fraction.ts","webpack://Vex/./src/frethandfinger.ts","webpack://Vex/./src/ghostnote.ts","webpack://Vex/./src/glyph.ts","webpack://Vex/./src/glyphnote.ts","webpack://Vex/./src/gracenote.ts","webpack://Vex/./src/gracenotegroup.ts","webpack://Vex/./src/gracetabnote.ts","webpack://Vex/./src/index.ts","webpack://Vex/./src/keymanager.ts","webpack://Vex/./src/keysignature.ts","webpack://Vex/./src/keysignote.ts","webpack://Vex/./src/modifier.ts","webpack://Vex/./src/modifiercontext.ts","webpack://Vex/./src/multimeasurerest.ts","webpack://Vex/./src/music.ts","webpack://Vex/./src/note.ts","webpack://Vex/./src/notehead.ts","webpack://Vex/./src/notesubgroup.ts","webpack://Vex/./src/ornament.ts","webpack://Vex/./src/parenthesis.ts","webpack://Vex/./src/parser.ts","webpack://Vex/./src/pedalmarking.ts","webpack://Vex/./src/registry.ts","webpack://Vex/./src/rendercontext.ts","webpack://Vex/./src/renderer.ts","webpack://Vex/./src/repeatnote.ts","webpack://Vex/./src/stave.ts","webpack://Vex/./src/stavebarline.ts","webpack://Vex/./src/staveconnector.ts","webpack://Vex/./src/stavehairpin.ts","webpack://Vex/./src/staveline.ts","webpack://Vex/./src/stavemodifier.ts","webpack://Vex/./src/stavenote.ts","webpack://Vex/./src/staverepetition.ts","webpack://Vex/./src/stavesection.ts","webpack://Vex/./src/stavetempo.ts","webpack://Vex/./src/stavetext.ts","webpack://Vex/./src/stavetie.ts","webpack://Vex/./src/stavevolta.ts","webpack://Vex/./src/stem.ts","webpack://Vex/./src/stemmablenote.ts","webpack://Vex/./src/stringnumber.ts","webpack://Vex/./src/strokes.ts","webpack://Vex/./src/svgcontext.ts","webpack://Vex/./src/system.ts","webpack://Vex/./src/tables.ts","webpack://Vex/./src/tabnote.ts","webpack://Vex/./src/tabslide.ts","webpack://Vex/./src/tabstave.ts","webpack://Vex/./src/tabtie.ts","webpack://Vex/./src/textbracket.ts","webpack://Vex/./src/textdynamics.ts","webpack://Vex/./src/textformatter.ts","webpack://Vex/./src/textnote.ts","webpack://Vex/./src/tickable.ts","webpack://Vex/./src/tickcontext.ts","webpack://Vex/./src/timesigglyph.ts","webpack://Vex/./src/timesignature.ts","webpack://Vex/./src/timesignote.ts","webpack://Vex/./src/tremolo.ts","webpack://Vex/./src/tuning.ts","webpack://Vex/./src/tuplet.ts","webpack://Vex/./src/typeguard.ts","webpack://Vex/./src/util.ts","webpack://Vex/./src/vex.ts","webpack://Vex/./src/vibrato.ts","webpack://Vex/./src/vibratobracket.ts","webpack://Vex/./src/voice.ts","webpack://Vex/./src/web.ts","webpack://Vex/webpack/bootstrap","webpack://Vex/webpack/runtime/define property getters","webpack://Vex/webpack/runtime/global","webpack://Vex/webpack/runtime/hasOwnProperty shorthand","webpack://Vex/webpack/runtime/make namespace object","webpack://Vex/./entry/vexflow-debug.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","export const VERSION = '4.2.2';\nexport const ID = '7ad933bdf12b4137ce04d3f332a838887d08a595';\nexport const DATE = '2023-07-03T19:56:22.952Z';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.js statically bundles & preloads all of our music engraving fonts.\nimport { loadBravura } from './load_bravura';\nimport { loadCustom } from './load_custom';\nimport { loadGonville } from './load_gonville';\nimport { loadLeland } from './load_leland';\nimport { loadPetaluma } from './load_petaluma';\n// ADD_MUSIC_FONT\n// import { loadXXX } from './load_xxx';\n// Populate our font \"database\" with all our music fonts.\nexport function loadAllMusicFonts() {\n loadBravura();\n loadGonville();\n loadPetaluma();\n loadCustom();\n loadLeland();\n // ADD_MUSIC_FONT\n // loadXXX();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\nimport { Font } from '../font';\nimport { BravuraFont } from './bravura_glyphs';\nimport { CommonMetrics } from './common_metrics';\nexport function loadBravura() {\n Font.load('Bravura', BravuraFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { GonvilleSmuflFont } from './gonville_glyphs';\nexport function loadGonville() {\n Font.load('Gonville', GonvilleSmuflFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { LelandFont } from './leland_glyphs';\nexport function loadLeland() {\n Font.load('Leland', LelandFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { PetalumaFont } from './petaluma_glyphs';\nconst petalumaChordMetrics = {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n};\nexport function loadPetaluma() {\n const metrics = JSON.parse(JSON.stringify(CommonMetrics));\n const chordMetrics = metrics.chordSymbol;\n if (chordMetrics) {\n chordMetrics.glyphs = petalumaChordMetrics;\n }\n Font.load('Petaluma', PetalumaFont, metrics);\n}\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport * from './accidental';\nexport * from './annotation';\nexport * from './articulation';\nexport * from './barnote';\nexport * from './beam';\nexport * from './bend';\nexport * from './boundingbox';\nexport * from './boundingboxcomputation';\nexport * from './canvascontext';\nexport * from './chordsymbol';\nexport * from './clef';\nexport * from './clefnote';\nexport * from './crescendo';\nexport * from './curve';\nexport * from './dot';\nexport * from './easyscore';\nexport * from './element';\nexport * from './factory';\nexport * from './flow';\nexport * from './font';\n// Do not export './fonts/*' because they are used by the entry/* files.\nexport * from './formatter';\nexport * from './fraction';\nexport * from './frethandfinger';\nexport * from './ghostnote';\nexport * from './glyph';\nexport * from './glyphnote';\nexport * from './gracenote';\nexport * from './gracenotegroup';\nexport * from './gracetabnote';\nexport * from './keymanager';\nexport * from './keysignature';\nexport * from './keysignote';\nexport * from './modifier';\nexport * from './modifiercontext';\nexport * from './multimeasurerest';\nexport * from './music';\nexport * from './note';\nexport * from './notehead';\nexport * from './notesubgroup';\nexport * from './ornament';\nexport * from './parenthesis';\nexport * from './parser';\nexport * from './pedalmarking';\nexport * from './registry';\nexport * from './rendercontext';\nexport * from './renderer';\nexport * from './repeatnote';\nexport * from './stave';\nexport * from './stavebarline';\nexport * from './staveconnector';\nexport * from './stavehairpin';\nexport * from './staveline';\nexport * from './stavemodifier';\nexport * from './stavenote';\nexport * from './staverepetition';\nexport * from './stavesection';\nexport * from './stavetempo';\nexport * from './stavetext';\nexport * from './stavetie';\nexport * from './stavevolta';\nexport * from './stem';\nexport * from './stemmablenote';\nexport * from './stringnumber';\nexport * from './strokes';\nexport * from './svgcontext';\nexport * from './system';\n// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*.\nexport * from './tabnote';\nexport * from './tabslide';\nexport * from './tabstave';\nexport * from './tabtie';\nexport * from './textbracket';\nexport * from './textdynamics';\nexport * from './textformatter';\nexport * from './textnote';\nexport * from './tickable';\nexport * from './tickcontext';\nexport * from './timesigglyph';\nexport * from './timesignature';\nexport * from './timesignote';\nexport * from './tremolo';\nexport * from './tuning';\nexport * from './tuplet';\nexport * from './typeguard';\nexport * from './util';\n// Do not export './version'. It is accessible via Vex.Flow.BUILD.\nexport * from './vex';\nexport * from './vibrato';\nexport * from './vibratobracket';\nexport * from './voice';\nexport * from './web';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-debug.ts is the entry point for the build output file vexflow-debug.js.\n// It statically bundles all the music engraving fonts.\n// Currently, it is identical to vexflow.ts, but the webpack config inside Gruntfile.js\n// sets the webpack mode to 'development' to produce an unminified build.\n// In the future, we could do something different with this entry file, such as turn on flags for logging.\nimport { Flow } from '../src/flow';\nimport { loadAllMusicFonts } from '../src/fonts/load_all';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadAllMusicFonts();\nFlow.setMusicFont('Bravura', 'Gonville', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-bravura.js b/build/cjs/vexflow-font-bravura.js new file mode 100644 index 0000000000..2bcdd016ff --- /dev/null +++ b/build/cjs/vexflow-font-bravura.js @@ -0,0 +1,2 @@ +!function(b,l){"object"==typeof exports&&"object"==typeof module?module.exports=l():"function"==typeof define&&define.amd?define([],l):"object"==typeof exports?exports.VexFlowFont=l():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Bravura=l())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(l,a)=>{for(var m in a)b.o(a,m)&&!b.o(l,m)&&Object.defineProperty(l,m,{enumerable:!0,get:a[m]})},o:(b,l)=>Object.prototype.hasOwnProperty.call(b,l)},l={};b.d(l,{default:()=>a});const a={data:{glyphs:{bracketTop:{x_min:0,x_max:469,y_min:0,y_max:295,ha:295,o:"m 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z"},bracketBottom:{x_min:0,x_max:469,y_min:-295,y_max:0,ha:295,o:"m 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z"},barlineTick:{x_min:0,x_max:36,y_min:868,y_max:1120,ha:252,o:"m 52 1250 l 52 1613 l 0 1613 l 0 1250 z"},breathMarkTick:{x_min:0,x_max:500,y_min:0,y_max:502,ha:502,o:"m 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z"},segno:{x_min:4,x_max:550,y_min:-27,y_max:759,ha:786,o:"m 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z"},coda:{x_min:-4,x_max:955,y_min:-158,y_max:898,ha:1056,o:"m 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z"},gClef:{x_min:0,x_max:671,y_min:-658,y_max:1098,ha:1756,o:"m 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z"},cClef:{x_min:0,x_max:699,y_min:-506,y_max:506,ha:1012,o:"m 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z"},fClef:{x_min:-5,x_max:684,y_min:-635,y_max:262,ha:897,o:"m 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z"},unpitchedPercussionClef1:{x_min:0,x_max:382,y_min:-250,y_max:250,ha:500,o:"m 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z"},"6stringTabClef":{x_min:-3,x_max:408,y_min:-748,y_max:764,ha:1512,o:"m 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z"},timeSig0:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z"},timeSig1:{x_min:20,x_max:314,y_min:-250,y_max:251,ha:501,o:"m 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z"},timeSig2:{x_min:20,x_max:426,y_min:-257,y_max:254,ha:511,o:"m 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z"},timeSig3:{x_min:20,x_max:401,y_min:-251,y_max:249,ha:500,o:"m 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z"},timeSig4:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z"},timeSig5:{x_min:20,x_max:383,y_min:-251,y_max:246,ha:497,o:"m 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z"},timeSig6:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z"},timeSig7:{x_min:20,x_max:421,y_min:-250,y_max:249,ha:499,o:"m 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z"},timeSig8:{x_min:20,x_max:416,y_min:-259,y_max:259,ha:518,o:"m 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z"},timeSig9:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z"},timeSigCommon:{x_min:5,x_max:424,y_min:-249,y_max:251,ha:500,o:"m 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z"},timeSigCutCommon:{x_min:0,x_max:418,y_min:-359,y_max:361,ha:720,o:"m 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z"},timeSigPlus:{x_min:-1,x_max:499,y_min:-250,y_max:250,ha:500,o:"m 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z"},timeSigPlusSmall:{x_min:-1,x_max:255,y_min:-133,y_max:123,ha:256,o:"m 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z"},timeSigMinus:{x_min:0,x_max:448,y_min:-35,y_max:40,ha:75,o:"m 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z"},timeSigParensRight:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z"},timeSigParensRightSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z"},timeSigParensLeft:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z"},timeSigParensLeftSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z"},noteheadDoubleWhole:{x_min:0,x_max:599,y_min:-155,y_max:155,ha:310,o:"m 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z"},noteheadWhole:{x_min:0,x_max:422,y_min:-125,y_max:125,ha:250,o:"m 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z"},noteheadHalf:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z"},noteheadBlack:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z"},noteheadXDoubleWhole:{x_min:0,x_max:546,y_min:-155,y_max:155,ha:310,o:"m 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z"},noteheadXWhole:{x_min:0,x_max:377,y_min:-125,y_max:125,ha:250,o:"m 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z"},noteheadXHalf:{x_min:0,x_max:334,y_min:-125,y_max:125,ha:250,o:"m 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z"},noteheadXBlack:{x_min:0,x_max:290,y_min:-125,y_max:125,ha:250,o:"m 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:422,y_min:-155,y_max:155,ha:310,o:"m 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z"},noteheadCircleXWhole:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z"},noteheadCircleXHalf:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z"},noteheadCircleX:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:603,y_min:-218,y_max:213,ha:431,o:"m 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z"},noteheadCircledWhole:{x_min:0,x_max:437,y_min:-225,y_max:211,ha:436,o:"m 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z"},noteheadCircledHalf:{x_min:-18,x_max:311,y_min:-162,y_max:167,ha:329,o:"m 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z"},noteheadCircledBlack:{x_min:-21,x_max:321,y_min:-171,y_max:167,ha:338,o:"m 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:416,y_min:-190,y_max:198,ha:388,o:"m 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z"},noteheadSquareWhite:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z"},noteheadSquareBlack:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z"},noteheadTriangleDownWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z"},noteheadTriangleDownHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z"},noteheadTriangleDownBlack:{x_min:0,x_max:292,y_min:-125,y_max:125,ha:250,o:"m 207 -180 l 420 180 l 0 180 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z"},noteheadTriangleUpWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z"},noteheadTriangleUpHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z"},noteheadTriangleUpBlack:{x_min:0,x_max:293,y_min:-125,y_max:125,ha:250,o:"m 422 -180 l 207 180 l 0 -180 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:596,y_min:-179,y_max:168,ha:347,o:"m 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z"},noteheadSlashedWhole1:{x_min:-22,x_max:433,y_min:-157,y_max:148,ha:305,o:"m 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z"},noteheadSlashedHalf1:{x_min:-67,x_max:386,y_min:-142,y_max:160,ha:302,o:"m 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z"},noteheadSlashedBlack1:{x_min:-80,x_max:375,y_min:-165,y_max:167,ha:332,o:"m 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:596,y_min:-178,y_max:169,ha:347,o:"m 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z"},noteheadSlashedWhole2:{x_min:-18,x_max:436,y_min:-154,y_max:151,ha:305,o:"m 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z"},noteheadSlashedHalf2:{x_min:-73,x_max:380,y_min:-134,y_max:168,ha:302,o:"m 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z"},noteheadSlashedBlack2:{x_min:-79,x_max:376,y_min:-164,y_max:168,ha:332,o:"m 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:432,y_min:-155,y_max:155,ha:310,o:"m 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z"},noteheadDiamondWhole:{x_min:0,x_max:270,y_min:-125,y_max:125,ha:250,o:"m 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z"},noteheadDiamondHalf:{x_min:0,x_max:251,y_min:-125,y_max:125,ha:250,o:"m 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z"},noteheadDiamondBlack:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z"},noteheadParenthesis:{x_min:-73,x_max:368,y_min:-180,y_max:182,ha:362,o:"m 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z"},noteheadParenthesisRight:{x_min:-36,x_max:73,y_min:-181,y_max:181,ha:362,o:"m -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z"},noteheadParenthesisLeft:{x_min:0,x_max:109,y_min:-181,y_max:181,ha:362,o:"m 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z"},noteheadMoonBlack:{x_min:0,x_max:315,y_min:-125,y_max:125,ha:250,o:"m 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 -180 l 0 180 l 0 -180 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 180 l 0 -180 l 488 -180 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:278,y_min:-125,y_max:125,ha:250,o:"m 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z"},tremolo1:{x_min:-150,x_max:150,y_min:-93,y_max:94,ha:187,o:"m 216 -45 l 216 135 l -216 46 l -216 -134 z"},flag8thUp:{x_min:0,x_max:264,y_min:-810,y_max:9,ha:819,o:"m 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z"},flag8thDown:{x_min:0,x_max:306,y_min:-14,y_max:808,ha:822,o:"m 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z"},flag16thUp:{x_min:0,x_max:279,y_min:-813,y_max:2,ha:815,o:"m 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z"},flag16thDown:{x_min:0,x_max:291,y_min:-9,y_max:812,ha:821,o:"m 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z"},flag32ndUp:{x_min:0,x_max:261,y_min:-812,y_max:149,ha:961,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag32ndDown:{x_min:0,x_max:273,y_min:-172,y_max:812,ha:984,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z"},flag64thUp:{x_min:0,x_max:261,y_min:-812,y_max:347,ha:1159,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag64thDown:{x_min:0,x_max:273,y_min:-376,y_max:812,ha:1188,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z"},flag128thUp:{x_min:0,x_max:261,y_min:-812,y_max:533,ha:1345,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag128thDown:{x_min:0,x_max:273,y_min:-580,y_max:812,ha:1392,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z"},accidentalFlat:{x_min:0,x_max:226,y_min:-175,y_max:439,ha:614,o:"m 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z"},accidentalNatural:{x_min:0,x_max:168,y_min:-335,y_max:341,ha:676,o:"m 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z"},accidentalSharp:{x_min:0,x_max:249,y_min:-348,y_max:350,ha:698,o:"m 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z"},accidentalDoubleSharp:{x_min:0,x_max:247,y_min:-125,y_max:127,ha:252,o:"m 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z"},accidentalDoubleFlat:{x_min:0,x_max:411,y_min:-175,y_max:437,ha:612,o:"m 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z"},accidentalParensLeft:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z"},accidentalParensRight:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z"},accidentalQuarterToneFlatStein:{x_min:1,x_max:227,y_min:-175,y_max:439,ha:614,o:"m 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:1,x_max:466,y_min:-175,y_max:439,ha:614,o:"m 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:179,y_min:-353,y_max:307,ha:660,o:"m 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z"},accidentalThreeQuarterTonesSharpStein:{x_min:3,x_max:317,y_min:-347,y_max:369,ha:716,o:"m 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z"},accidentalBuyukMucennebFlat:{x_min:1,x_max:287,y_min:-174,y_max:438,ha:612,o:"m 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:341,y_min:-350,y_max:348,ha:698,o:"m 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z"},accidentalBakiyeFlat:{x_min:-1,x_max:286,y_min:-175,y_max:439,ha:614,o:"m 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z"},accidentalKomaSharp:{x_min:0,x_max:229,y_min:-337,y_max:322,ha:659,o:"m 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z"},accidentalKucukMucennebSharp:{x_min:-1,x_max:339,y_min:-338,y_max:321,ha:659,o:"m 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z"},accidentalKoron:{x_min:0,x_max:300,y_min:-472,y_max:157,ha:629,o:"m 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z"},accidentalSori:{x_min:0,x_max:421,y_min:-318,y_max:328,ha:646,o:"m 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z"},articAccentAbove:{x_min:0,x_max:339,y_min:1,y_max:245,ha:244,o:"m 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z"},articAccentBelow:{x_min:0,x_max:339,y_min:-244,y_max:0,ha:244,o:"m 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z"},articTenutoAbove:{x_min:-1,x_max:338,y_min:0,y_max:48,ha:48,o:"m 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z"},articTenutoBelow:{x_min:-1,x_max:338,y_min:-48,y_max:0,ha:48,o:"m 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z"},articStaccatoAbove:{x_min:0,x_max:84,y_min:0,y_max:84,ha:84,o:"m 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z"},articStaccatoBelow:{x_min:0,x_max:84,y_min:-84,y_max:0,ha:84,o:"m 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z"},articStaccatissimoAbove:{x_min:1,x_max:100,y_min:-2,y_max:293,ha:295,o:"m 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z"},articStaccatissimoBelow:{x_min:1,x_max:100,y_min:-295,y_max:0,ha:295,o:"m 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z"},articMarcatoAbove:{x_min:-1,x_max:235,y_min:-1,y_max:253,ha:254,o:"m 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z"},articMarcatoBelow:{x_min:-1,x_max:235,y_min:-254,y_max:0,ha:254,o:"m 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z"},fermataAbove:{x_min:3,x_max:605,y_min:-3,y_max:329,ha:332,o:"m 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z"},fermataBelow:{x_min:3,x_max:605,y_min:-332,y_max:0,ha:332,o:"m 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z"},fermataLongAbove:{x_min:0,x_max:603,y_min:-1,y_max:333,ha:334,o:"m 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z"},fermataLongBelow:{x_min:0,x_max:603,y_min:-333,y_max:1,ha:334,o:"m 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:0,y_max:408,ha:408,o:"m 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z"},fermataVeryLongBelow:{x_min:0,x_max:715,y_min:-408,y_max:0,ha:408,o:"m 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z"},fermataVeryShortAbove:{x_min:0,x_max:726,y_min:0,y_max:449,ha:449,o:"m 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z"},fermataVeryShortBelow:{x_min:0,x_max:726,y_min:-449,y_max:0,ha:449,o:"m 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z"},fermataShortAbove:{x_min:0,x_max:604,y_min:0,y_max:341,ha:341,o:"m 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z"},fermataShortBelow:{x_min:0,x_max:604,y_min:-341,y_max:0,ha:341,o:"m 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z"},breathMarkComma:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},breathMarkUpbow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},caesura:{x_min:0,x_max:384,y_min:-1,y_max:532,ha:533,o:"m 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z"},caesuraCurved:{x_min:0,x_max:373,y_min:0,y_max:530,ha:530,o:"m 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z"},restMaxima:{x_min:0,x_max:381,y_min:-249,y_max:250,ha:499,o:"m 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:0,y_max:250,ha:250,o:"m 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z"},restWhole:{x_min:0,x_max:282,y_min:-135,y_max:9,ha:144,o:"m 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z"},restWholeLegerLine:{x_min:-117,x_max:399,y_min:-135,y_max:20,ha:155,o:"m -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z"},restHalf:{x_min:0,x_max:282,y_min:-2,y_max:142,ha:144,o:"m 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z"},restHalfLegerLine:{x_min:-117,x_max:399,y_min:-13,y_max:142,ha:155,o:"m 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z"},restQuarter:{x_min:1,x_max:270,y_min:-375,y_max:373,ha:748,o:"m 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z"},rest8th:{x_min:0,x_max:247,y_min:-251,y_max:174,ha:425,o:"m 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z"},rest16th:{x_min:0,x_max:320,y_min:-500,y_max:179,ha:679,o:"m 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z"},rest32nd:{x_min:0,x_max:363,y_min:-500,y_max:426,ha:926,o:"m 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z"},rest64th:{x_min:0,x_max:423,y_min:-753,y_max:430,ha:1183,o:"m 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z"},rest128th:{x_min:0,x_max:485,y_min:-750,y_max:689,ha:1439,o:"m 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z"},dynamicPiano:{x_min:-89,x_max:366,y_min:-142,y_max:274,ha:416,o:"m 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z"},dynamicMezzo:{x_min:-20,x_max:446,y_min:-10,y_max:274,ha:284,o:"m 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z"},dynamicForte:{x_min:-141,x_max:364,y_min:-152,y_max:444,ha:596,o:"m 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z"},dynamicRinforzando:{x_min:-20,x_max:277,y_min:0,y_max:274,ha:274,o:"m 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z"},dynamicSforzando:{x_min:0,x_max:229,y_min:-10,y_max:273,ha:283,o:"m 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z"},dynamicZ:{x_min:-30,x_max:244,y_min:-10,y_max:268,ha:278,o:"m 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z"},ornamentTrill:{x_min:0,x_max:521,y_min:-10,y_max:390,ha:400,o:"m 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z"},ornamentTurn:{x_min:0,x_max:460,y_min:0,y_max:218,ha:218,o:"m 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z"},ornamentTurnSlash:{x_min:0,x_max:460,y_min:-90,y_max:306,ha:396,o:"m 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z"},ornamentMordent:{x_min:1,x_max:729,y_min:-73,y_max:319,ha:392,o:"m 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z"},ornamentShortTrill:{x_min:0,x_max:725,y_min:0,y_max:245,ha:245,o:"m 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z"},ornamentTremblement:{x_min:1,x_max:985,y_min:0,y_max:244,ha:244,o:"m 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1119,y_min:0,y_max:481,ha:481,o:"m 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:2,x_max:1150,y_min:-367,y_max:245,ha:612,o:"m 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1048,y_min:-367,y_max:331,ha:698,o:"m 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:949,y_min:0,y_max:381,ha:381,o:"m 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1278,y_min:0,y_max:247,ha:247,o:"m 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1277,y_min:-62,y_max:333,ha:395,o:"m 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:859,y_min:-222,y_max:246,ha:468,o:"m 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z"},brassScoop:{x_min:1,x_max:320,y_min:-373,y_max:13,ha:386,o:"m 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z"},brassDoitMedium:{x_min:0,x_max:489,y_min:-40,y_max:346,ha:386,o:"m 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z"},brassFallLipShort:{x_min:1,x_max:293,y_min:-345,y_max:42,ha:387,o:"m 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z"},brassLiftMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z"},brassFallRoughMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z"},brassBend:{x_min:0,x_max:392,y_min:0,y_max:282,ha:282,o:"m 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z"},brassMuteClosed:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},brassMuteOpen:{x_min:0,x_max:304,y_min:0,y_max:304,ha:304,o:"m 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z"},brassFlip:{x_min:0,x_max:379,y_min:0,y_max:282,ha:282,o:"m 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z"},brassJazzTurn:{x_min:0,x_max:620,y_min:0,y_max:245,ha:245,o:"m 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z"},brassSmear:{x_min:1,x_max:306,y_min:0,y_max:170,ha:170,o:"m 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z"},stringsDownBow:{x_min:0,x_max:312,y_min:0,y_max:318,ha:318,o:"m 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z"},stringsUpBow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},stringsHarmonic:{x_min:0,x_max:200,y_min:0,y_max:200,ha:200,o:"m 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},keyboardPedalPed:{x_min:0,x_max:1019,y_min:-8,y_max:555,ha:563,o:"m 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z"},keyboardPedalUp:{x_min:0,x_max:450,y_min:0,y_max:450,ha:450,o:"m 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z"},pictChokeCymbal:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},wiggleArpeggiatoUp:{x_min:-33,x_max:292,y_min:0,y_max:119,ha:119,o:"m 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z"},arrowheadBlackUp:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z"},arrowheadBlackDown:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z"},arpeggiatoUp:{x_min:1,x_max:229,y_min:7,y_max:1511,ha:1504,o:"m 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z"},arpeggiatoDown:{x_min:1,x_max:229,y_min:-4,y_max:1500,ha:1504,o:"m 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z"},repeat1Bar:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z"},repeat2Bars:{x_min:0,x_max:762,y_min:-250,y_max:279,ha:529,o:"m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z"},repeat4Bars:{x_min:0,x_max:1232,y_min:-250,y_max:279,ha:529,o:"m 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z"},repeatBarSlash:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z"},csymDiminished:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z"},csymHalfDiminished:{x_min:-16,x_max:488,y_min:-15,y_max:489,ha:504,o:"m 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z"},csymAugmented:{x_min:0,x_max:395,y_min:1,y_max:396,ha:395,o:"m 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z"},csymMajorSeventh:{x_min:0,x_max:558,y_min:1,y_max:477,ha:476,o:"m 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z"},csymMinor:{x_min:0,x_max:325,y_min:216,y_max:260,ha:44,o:"m 468 374 l 0 374 l 0 311 l 468 311 z"},csymParensLeftTall:{x_min:1,x_max:185,y_min:0,y_max:997,ha:997,o:"m 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z"},csymParensRightTall:{x_min:-20,x_max:164,y_min:0,y_max:997,ha:997,o:"m -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z"},csymBracketLeftTall:{x_min:0,x_max:155,y_min:0,y_max:1e3,ha:1e3,o:"m 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z"},csymBracketRightTall:{x_min:1,x_max:156,y_min:0,y_max:1e3,ha:1e3,o:"m 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:122,y_min:0,y_max:993,ha:993,o:"m 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z"},csymParensRightVeryTall:{x_min:-15,x_max:107,y_min:0,y_max:993,ha:993,o:"m -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:999,y_min:0,y_max:1e3,ha:1e3,o:"m 1439 1380 l 1377 1440 l 0 60 l 62 0 z"},accSagittal5v7KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z"},accSagittal5v7KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z"},accSagittal5CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z"},accSagittal5CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z"},accSagittal7CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z"},accSagittal7CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z"},accSagittal25SmallDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z"},accSagittal25SmallDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z"},accSagittal35MediumDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z"},accSagittal35MediumDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal11MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z"},accSagittal11MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z"},accSagittal11LargeDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal11LargeDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp25SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z"},accSagittalFlat25SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z"},accSagittalSharp7CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z"},accSagittalFlat7CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp5CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat5CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z"},accSagittalSharp5v7kDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z"},accSagittalFlat5v7kUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z"},accSagittalSharp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z"},accSagittalFlat:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z"},accSagittalSharp5v7kUp:{x_min:0,x_max:312,y_min:-361,y_max:172,ha:533,o:"m 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z"},accSagittalFlat5v7kDown:{x_min:0,x_max:312,y_min:-172,y_max:361,ha:533,o:"m 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z"},accSagittalSharp5CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z"},accSagittalFlat5CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z"},accSagittalSharp7CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z"},accSagittalFlat7CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp25SUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z"},accSagittalFlat25SDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z"},accSagittalSharp35MUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z"},accSagittalFlat35MDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z"},accSagittalSharp11MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z"},accSagittalFlat11MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z"},accSagittalSharp11LUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11LDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp35LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat35LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp25SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z"},accSagittalDoubleFlat25SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z"},accSagittalDoubleSharp7CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z"},accSagittalDoubleFlat7CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z"},accSagittalDoubleSharp5CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z"},accSagittalDoubleFlat5CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z"},accSagittalDoubleSharp5v7kDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z"},accSagittalDoubleFlat5v7kUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z"},accSagittalDoubleSharp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z"},accSagittalDoubleFlat:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z"},accSagittal7v11KleismaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z"},accSagittal7v11KleismaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal55CommaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z"},accSagittal55CommaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z"},accSagittal7v11CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal7v11CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal5v11SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z"},accSagittal5v11SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp5v11SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat5v11SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp7v11CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z"},accSagittalFlat7v11CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z"},accSagittalSharp55CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z"},accSagittalFlat55CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z"},accSagittalSharp17CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z"},accSagittalFlat17CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z"},accSagittalSharp7v11kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z"},accSagittalFlat7v11kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z"},accSagittalSharp7v11kUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z"},accSagittalFlat7v11kDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z"},accSagittalSharp17CUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17CDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp55CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat55CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z"},accSagittalSharp7v11CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z"},accSagittalFlat7v11CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z"},accSagittalSharp5v11SUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z"},accSagittalFlat5v11SDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp5v11SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat5v11SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp7v11CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z"},accSagittalDoubleFlat7v11CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z"},accSagittalDoubleSharp55CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z"},accSagittalDoubleFlat55CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z"},accSagittalDoubleSharp17CDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z"},accSagittalDoubleFlat17CUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z"},accSagittalDoubleSharp7v11kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat7v11kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittal23CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z"},accSagittal23CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z"},accSagittal5v19CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z"},accSagittal5v19CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal5v23SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z"},accSagittal5v23SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittalSharp5v23SDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z"},accSagittalFlat5v23SUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z"},accSagittalSharp5v19CDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z"},accSagittalFlat5v19CUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z"},accSagittalFlat23CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z"},accSagittalSharp23CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z"},accSagittalFlat23CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z"},accSagittalSharp5v19CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalFlat5v19CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z"},accSagittalSharp5v23SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalFlat5v23SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z"},accSagittalDoubleSharp5v23SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z"},accSagittalDoubleFlat5v23SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z"},accSagittalDoubleSharp5v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z"},accSagittalDoubleFlat5v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z"},accSagittalDoubleSharp23CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalDoubleFlat23CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z"},accSagittal19SchismaUp:{x_min:0,x_max:125,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z"},accSagittal19SchismaDown:{x_min:0,x_max:125,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal143CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z"},accSagittal143CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal11v49CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z"},accSagittal11v49CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z"},accSagittal19CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal19CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal7v19CommaUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal7v19CommaDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal49SmallDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal49SmallDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal23SmallDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal23SmallDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal5v13MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z"},accSagittal5v13MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z"},accSagittal11v19MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z"},accSagittal11v19MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z"},accSagittal49MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z"},accSagittal49MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z"},accSagittal5v49MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z"},accSagittal5v49MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z"},accSagittal49LargeDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z"},accSagittal49LargeDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z"},accSagittal11v19LargeDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z"},accSagittal11v19LargeDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z"},accSagittal5v13LargeDiesisUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z"},accSagittal5v13LargeDiesisDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z"},accSagittalFlat23SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp49SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z"},accSagittalFlat49SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalSharp7v19CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z"},accSagittalFlat7v19CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z"},accSagittalSharp19CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z"},accSagittalFlat19CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z"},accSagittalSharp11v49CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat11v49CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z"},accSagittalSharp143CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat143CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp17kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z"},accSagittalFlat17kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z"},accSagittalSharp19sDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z"},accSagittalFlat19sUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z"},accSagittalSharp19sUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z"},accSagittalFlat19sDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z"},accSagittalSharp17kUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17kDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp143CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalFlat143CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp11v49CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z"},accSagittalFlat11v49CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z"},accSagittalSharp19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp7v19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat7v19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp49SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat49SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp23SUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat23SDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp5v13MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z"},accSagittalFlat5v13MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z"},accSagittalSharp11v19MUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11v19MDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp49MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z"},accSagittalFlat49MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z"},accSagittalSharp5v49MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z"},accSagittalFlat5v49MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z"},accSagittalSharp49LUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z"},accSagittalFlat49LDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z"},accSagittalSharp11v19LUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z"},accSagittalFlat11v19LDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z"},accSagittalSharp5v13LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat5v13LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalDoubleSharp23SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalDoubleFlat23SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z"},accSagittalDoubleSharp49SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z"},accSagittalDoubleFlat49SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalDoubleSharp7v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalDoubleFlat7v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z"},accSagittalDoubleSharp19CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z"},accSagittalDoubleFlat19CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z"},accSagittalDoubleSharp11v49CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat11v49CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp143CDown:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat143CUp:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp17kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat17kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittalDoubleSharp19sDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalDoubleFlat19sUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z"},accSagittalShaftUp:{x_min:0,x_max:31,y_min:-359,y_max:172,ha:531,o:"m 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z"},accSagittalShaftDown:{x_min:0,x_max:31,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z"},accSagittalAcute:{x_min:0,x_max:125,y_min:-62,y_max:125,ha:187,o:"m 0 0 l 0 -89 l 180 89 l 180 180 z"},accSagittalGrave:{x_min:0,x_max:125,y_min:-125,y_max:62,ha:187,o:"m 180 -180 l 180 -89 l 0 89 l 0 0 z"},accSagittal1MinaUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal1MinaDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal2MinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal2MinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal1TinaUp:{x_min:0,x_max:93,y_min:16,y_max:107,ha:91,o:"m 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z"},accSagittal1TinaDown:{x_min:0,x_max:93,y_min:-107,y_max:-16,ha:91,o:"m 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z"},accSagittal2TinasUp:{x_min:0,x_max:94,y_min:16,y_max:107,ha:91,o:"m 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal2TinasDown:{x_min:0,x_max:94,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z"},accSagittal3TinasUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal3TinasDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal4TinasUp:{x_min:0,x_max:187,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal4TinasDown:{x_min:0,x_max:187,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal5TinasUp:{x_min:0,x_max:218,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal5TinasDown:{x_min:0,x_max:218,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal6TinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal6TinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal7TinasUp:{x_min:0,x_max:281,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal7TinasDown:{x_min:0,x_max:281,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal8TinasUp:{x_min:0,x_max:312,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal8TinasDown:{x_min:0,x_max:312,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal9TinasUp:{x_min:-7,x_max:312,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal9TinasDown:{x_min:-7,x_max:312,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittalFractionalTinaUp:{x_min:-3,x_max:35,y_min:73,y_max:111,ha:38,o:"m -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z"},accSagittalFractionalTinaDown:{x_min:-3,x_max:35,y_min:-111,y_max:-73,ha:38,o:"m -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:164,y_min:-194,y_max:421,ha:615,o:"m 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:414,y_min:-194,y_max:421,ha:615,o:"m 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z"},accidentalWilsonPlus:{x_min:0,x_max:281,y_min:-203,y_max:203,ha:406,o:"m 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z"},accidentalWilsonMinus:{x_min:0,x_max:281,y_min:-186,y_max:186,ha:372,o:"m 0 112 l 405 -268 l 405 -112 l 0 268 z"}},fontFamily:"Bravura",resolution:1e3,generatedOn:"2022-12-18T09:06:51.407Z"},metrics:{smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}}};return l=l.default})())); +//# sourceMappingURL=vexflow-font-bravura.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-bravura.js.map b/build/cjs/vexflow-font-bravura.js.map new file mode 100644 index 0000000000..c4025b8bed --- /dev/null +++ b/build/cjs/vexflow-font-bravura.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-font-bravura.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAW,QAAIC,IACnF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCaP,EAJoB,CAChBI,KDVuB,CACvBC,OAAQ,CACJC,WAAY,CACRC,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iLAEPkB,cAAe,CACXL,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,oMAEPmB,YAAa,CACTN,MAAO,EACPC,MAAO,GACPC,MAAO,IACPC,MAAO,KACPC,GAAI,IACJjB,EAAG,2CAEPoB,eAAgB,CACZP,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPqB,MAAO,CACHR,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,svCAEPsB,KAAM,CACFT,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,4oBAEPuB,MAAO,CACHV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,k6CAEPwB,MAAO,CACHX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,yvCAEPyB,MAAO,CACHZ,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ymBAEP0B,yBAA0B,CACtBb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP,iBAAkB,CACda,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,qkBAEP2B,SAAU,CACNd,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0OAEP4B,SAAU,CACNf,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6fAEP6B,SAAU,CACNhB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uqBAEP8B,SAAU,CACNjB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+4BAEP+B,SAAU,CACNlB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yqBAEPgC,SAAU,CACNnB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qsBAEPiC,SAAU,CACNpB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8mBAEPkC,SAAU,CACNrB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,imBAEPmC,SAAU,CACNtB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wcAEPoC,SAAU,CACNvB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,koBAEPqC,cAAe,CACXxB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qZAEPsC,iBAAkB,CACdzB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y3BAEPuC,YAAa,CACT1B,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,maAEPwC,iBAAkB,CACd3B,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,maAEPyC,aAAc,CACV5B,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,iIAEP0C,mBAAoB,CAChB7B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8PAEP2C,wBAAyB,CACrB9B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4MAEP4C,kBAAmB,CACf/B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEP6C,uBAAwB,CACpBhC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oOAEP8C,oBAAqB,CACjBjC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,i1BAEP+C,cAAe,CACXlC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iTAEPgD,aAAc,CACVnC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+QAEPiD,cAAe,CACXpC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mHAEPkD,qBAAsB,CAClBrC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qkCAEPmD,eAAgB,CACZtC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uiBAEPoD,cAAe,CACXvC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wiBAEPqD,eAAgB,CACZxC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEPsD,2BAA4B,CACxBzC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g+BAEPuD,qBAAsB,CAClB1C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qYAEPwD,oBAAqB,CACjB3C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEPyD,gBAAiB,CACb5C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,saAEP0D,2BAA4B,CACxB7C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qsCAEP2D,qBAAsB,CAClB9C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wiBAEP4D,oBAAqB,CACjB/C,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ulBAEP6D,qBAAsB,CAClBhD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+aAEP8D,0BAA2B,CACvBjD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2gBAEP+D,oBAAqB,CACjBlD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qFAEPgE,oBAAqB,CACjBnD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2CAEPiE,gCAAiC,CAC7BpD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s2BAEPkE,0BAA2B,CACvBrD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0SAEPmE,yBAA0B,CACtBtD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6OAEPoE,0BAA2B,CACvBvD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kCAEPqE,8BAA+B,CAC3BxD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,03BAEPsE,wBAAyB,CACrBzD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wTAEPuE,uBAAwB,CACpB1D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qPAEPwE,wBAAyB,CACrB3D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mCAEPyE,4BAA6B,CACzB5D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,i0CAEP0E,sBAAuB,CACnB7D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4pBAEP2E,qBAAsB,CAClB9D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,imBAEP4E,sBAAuB,CACnB/D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sZAEP6E,4BAA6B,CACzBhE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,myCAEP8E,sBAAuB,CACnBjE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4qBAEP+E,qBAAsB,CAClBlE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,srBAEPgF,sBAAuB,CACnBnE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gbAEPiF,2BAA4B,CACxBpE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y/BAEPkF,qBAAsB,CAClBrE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,saAEPmF,oBAAqB,CACjBtE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kWAEPoF,qBAAsB,CAClBvE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gOAEPqF,oBAAqB,CACjBxE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wTAEPsF,yBAA0B,CACtBzE,OAAQ,GACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qJAEPuF,wBAAyB,CACrB1E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gJAEPwF,kBAAmB,CACf3E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6FAEPyF,0BAA2B,CACvB5E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iCAEP0F,2BAA4B,CACxB7E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mCAEP2F,+BAAgC,CAC5B9E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8FAEP4F,gBAAiB,CACb/E,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,kGAEP6F,SAAU,CACNhF,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,+CAEP8F,UAAW,CACPjF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4UAEP+F,YAAa,CACTlF,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPgG,WAAY,CACRnF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,kyBAEPiG,aAAc,CACVpF,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kmBAEPkG,WAAY,CACRrF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhCAEPmG,aAAc,CACVtF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,85BAEPoG,WAAY,CACRvF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,ivCAEPqG,aAAc,CACVxF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,qnCAEPsG,YAAa,CACTzF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,m+CAEPuG,cAAe,CACX1F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,80CAEPwG,eAAgB,CACZ3F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,igBAEPyG,kBAAmB,CACf5F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2hBAEP0G,gBAAiB,CACb7F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s5CAEP2G,sBAAuB,CACnB9F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w0BAEP4G,qBAAsB,CAClB/F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mmCAEP6G,qBAAsB,CAClBhG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gPAEP8G,sBAAuB,CACnBjG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEP+G,+BAAgC,CAC5BlG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wiBAEPgH,0CAA2C,CACvCnG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oqCAEPiH,gCAAiC,CAC7BpG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g6BAEPkH,sCAAuC,CACnCrG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,03DAEPmH,4BAA6B,CACzBtG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uwCAEPoH,6BAA8B,CAC1BvG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhEAEPqH,qBAAsB,CAClBxG,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,i9BAEPsH,oBAAqB,CACjBzG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+6BAEPuH,6BAA8B,CAC1B1G,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2yCAEPwH,gBAAiB,CACb3G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8MAEPyH,eAAgB,CACZ5G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2pBAEP0H,iBAAkB,CACd7G,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wUAEP2H,iBAAkB,CACd9G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,gXAEP4H,iBAAkB,CACd/G,OAAQ,EACRC,MAAO,IACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,wGAEP6H,iBAAkB,CACdhH,OAAQ,EACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,EACPC,GAAI,GACJjB,EAAG,kHAEP8H,mBAAoB,CAChBjH,MAAO,EACPC,MAAO,GACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,8FAEP+H,mBAAoB,CAChBlH,MAAO,EACPC,MAAO,GACPC,OAAQ,GACRC,MAAO,EACPC,GAAI,GACJjB,EAAG,wGAEPgI,wBAAyB,CACrBnH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yGAEPiI,wBAAyB,CACrBpH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,gHAEPkI,kBAAmB,CACfrH,OAAQ,EACRC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4TAEPmI,kBAAmB,CACftH,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,2WAEPoI,aAAc,CACVvH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+XAEPqI,aAAc,CACVxH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,kaAEPsI,iBAAkB,CACdzH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0UAEPuI,iBAAkB,CACd1H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,wWAEPwI,qBAAsB,CAClB3H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,gkBAEPyI,qBAAsB,CAClB5H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,ooBAEP0I,sBAAuB,CACnB7H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6jBAEP2I,sBAAuB,CACnB9H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,0nBAEP4I,kBAAmB,CACf/H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wUAEP6I,kBAAmB,CACfhI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,6WAEP8I,gBAAiB,CACbjI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4RAEP+I,gBAAiB,CACblI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+OAEPgJ,QAAS,CACLnI,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0XAEPiJ,cAAe,CACXpI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kXAEPkJ,WAAY,CACRrI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iUAEPmJ,gBAAiB,CACbtI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sIAEPoJ,UAAW,CACPvI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,sJAEPqJ,mBAAoB,CAChBxI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,0OAEPsJ,SAAU,CACNzI,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0IAEPuJ,kBAAmB,CACf1I,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4NAEPwJ,YAAa,CACT3I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,k6BAEPyJ,QAAS,CACL5I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ibAEP0J,SAAU,CACN7I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,grBAEP2J,SAAU,CACN9I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kgCAEP4J,SAAU,CACN/I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,m5CAEP6J,UAAW,CACPhJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,yjDAEP8J,aAAc,CACVjJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+yBAEP+J,aAAc,CACVlJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,87BAEPgK,aAAc,CACVnJ,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2wBAEPiK,mBAAoB,CAChBpJ,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4gBAEPkK,iBAAkB,CACdrJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mfAEPmK,SAAU,CACNtJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,quBAEPoK,cAAe,CACXvJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,k2CAEPqK,aAAc,CACVxJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6bAEPsK,kBAAmB,CACfzJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2uBAEPuK,gBAAiB,CACb1J,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4zBAEPwK,mBAAoB,CAChB3J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ivBAEPyK,oBAAqB,CACjB5J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhCAEP0K,2BAA4B,CACxB7J,MAAO,EACPC,MAAO,KACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,szCAEP2K,oCAAqC,CACjC9J,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,suCAEP4K,8BAA+B,CAC3B/J,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,47CAEP6K,mCAAoC,CAChChK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4sCAEP8K,wCAAyC,CACrCjK,MAAO,EACPC,MAAO,KACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qxCAEP+K,4CAA6C,CACzClK,MAAO,EACPC,MAAO,KACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kxCAEPgL,gCAAiC,CAC7BnK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kiCAEPiL,WAAY,CACRpK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,4KAEPkL,gBAAiB,CACbrK,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iKAEPmL,kBAAmB,CACftK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,8LAEPoL,gBAAiB,CACbvK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,09CAEPqL,qBAAsB,CAClBxK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,q8CAEPsL,UAAW,CACPzK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mRAEPuL,gBAAiB,CACb1K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qHAEPwL,cAAe,CACX3K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mNAEPyL,UAAW,CACP5K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,oNAEP0L,cAAe,CACX7K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6sBAEP2L,WAAY,CACR9K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8ZAEP4L,eAAgB,CACZ/K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4OAEP6L,aAAc,CACVhL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+OAEP8L,gBAAiB,CACbjL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEP+L,0BAA2B,CACvBlL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2QAEPgM,0BAA2B,CACvBnL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sRAEPiM,yBAA0B,CACtBpL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qHAEPkM,iBAAkB,CACdrL,MAAO,EACPC,MAAO,KACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gnEAEPmM,gBAAiB,CACbtL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uxDAEPoM,gBAAiB,CACbvL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4RAEPqM,mBAAoB,CAChBxL,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kWAEPsM,iBAAkB,CACdzL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6JAEPuM,mBAAoB,CAChB1L,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,gLAEPwM,aAAc,CACV3L,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,mrCAEPyM,eAAgB,CACZ5L,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,ssCAEP0M,WAAY,CACR7L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6aAEP2M,YAAa,CACT9L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6oBAEP4M,YAAa,CACT/L,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qlCAEP6M,eAAgB,CACZhM,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uMAEP8M,eAAgB,CACZjM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yNAEP+M,mBAAoB,CAChBlM,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6YAEPgN,cAAe,CACXnM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qHAEPiN,iBAAkB,CACdpM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2DAEPkN,UAAW,CACPrM,MAAO,EACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,yCAEPmN,mBAAoB,CAChBtM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+QAEPoN,oBAAqB,CACjBvM,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPqN,oBAAqB,CACjBxM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uNAEPsN,qBAAsB,CAClBzM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yMAEPuN,uBAAwB,CACpB1M,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iPAEPwN,wBAAyB,CACrB3M,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uPAEPyN,6BAA8B,CAC1B5M,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2CAEP0N,wBAAyB,CACrB7M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wKAEP2N,0BAA2B,CACvB9M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mKAEP4N,oBAAqB,CACjB/M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0EAEP6N,sBAAuB,CACnBhN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yEAEP8N,oBAAqB,CACjBjN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oIAEP+N,sBAAuB,CACnBlN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wIAEPgO,2BAA4B,CACxBnN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6GAEPiO,6BAA8B,CAC1BpN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4GAEPkO,4BAA6B,CACzBrN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sKAEPmO,8BAA+B,CAC3BtN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yKAEPoO,4BAA6B,CACzBvN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6FAEPqO,8BAA+B,CAC3BxN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0FAEPsO,2BAA4B,CACxBzN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mOAEPuO,6BAA8B,CAC1B1N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oOAEPwO,2BAA4B,CACxB3N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kKAEPyO,6BAA8B,CAC1B5N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kKAEP0O,wBAAyB,CACrB7N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kUAEP2O,qBAAsB,CAClB9N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP4O,uBAAwB,CACpB/N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2LAEP6O,oBAAqB,CACjBhO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iMAEP8O,uBAAwB,CACpBjO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iHAEP+O,oBAAqB,CACjBlO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4GAEPgP,yBAA0B,CACtBnO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gNAEPiP,sBAAuB,CACnBpO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEPkP,iBAAkB,CACdrO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gJAEPmP,gBAAiB,CACbtO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wIAEPoP,uBAAwB,CACpBvO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4QAEPqP,wBAAyB,CACrBxO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2PAEPsP,qBAAsB,CAClBzO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8JAEPuP,sBAAuB,CACnB1O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sJAEPwP,qBAAsB,CAClB3O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2NAEPyP,sBAAuB,CACnB5O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8NAEP0P,sBAAuB,CACnB7O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qMAEP2P,uBAAwB,CACpB9O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4LAEP4P,sBAAuB,CACnB/O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yQAEP6P,uBAAwB,CACpBhP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0QAEP8P,sBAAuB,CACnBjP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mLAEP+P,uBAAwB,CACpBlP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wKAEPgQ,sBAAuB,CACnBnP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iSAEPiQ,uBAAwB,CACpBpP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gSAEPkQ,sBAAuB,CACnBrP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wOAEPmQ,uBAAwB,CACpBtP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sOAEPoQ,8BAA+B,CAC3BvP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0RAEPqQ,2BAA4B,CACxBxP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4QAEPsQ,6BAA8B,CAC1BzP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8NAEPuQ,0BAA2B,CACvB1P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mOAEPwQ,6BAA8B,CAC1B3P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2IAEPyQ,0BAA2B,CACvB5P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yIAEP0Q,+BAAgC,CAC5B7P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2MAEP2Q,4BAA6B,CACzB9P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0MAEP4Q,uBAAwB,CACpB/P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+IAEP6Q,sBAAuB,CACnBhQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yIAEP8Q,yBAA0B,CACtBjQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP+Q,2BAA4B,CACxBlQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEPgR,qBAAsB,CAClBnQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+SAEPiR,uBAAwB,CACpBpQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oSAEPkR,qBAAsB,CAClBrQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uEAEPmR,uBAAwB,CACpBtQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sEAEPoR,uBAAwB,CACpBvQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gIAEPqR,yBAA0B,CACtBxQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oIAEPsR,6BAA8B,CAC1BzQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPuR,+BAAgC,CAC5B1Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gRAEPwR,0BAA2B,CACvB3Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uTAEPyR,uBAAwB,CACpB5Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0SAEP0R,0BAA2B,CACvB7Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sUAEP2R,uBAAwB,CACpB9Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iTAEP4R,wBAAyB,CACrB/Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qHAEP6R,qBAAsB,CAClBhR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gHAEP8R,wBAAyB,CACrBjR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uRAEP+R,qBAAsB,CAClBlR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sRAEPgS,0BAA2B,CACvBnR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yJAEPiS,uBAAwB,CACpBpR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oJAEPkS,wBAAyB,CACrBrR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sUAEPmS,yBAA0B,CACtBtR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0SAEPoS,sBAAuB,CACnBvR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+UAEPqS,uBAAwB,CACpBxR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gUAEPsS,sBAAuB,CACnBzR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2JAEPuS,uBAAwB,CACpB1R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oJAEPwS,wBAAyB,CACrB3R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8NAEPyS,yBAA0B,CACtB5R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4NAEP0S,wBAAyB,CACrB7R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8SAEP2S,yBAA0B,CACtB9R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP4S,gCAAiC,CAC7B/R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qTAEP6S,6BAA8B,CAC1BhS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP8S,gCAAiC,CAC7BjS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kVAEP+S,6BAA8B,CAC1BlS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sUAEPgT,8BAA+B,CAC3BnS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qIAEPiT,2BAA4B,CACxBpS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iIAEPkT,8BAA+B,CAC3BrS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8QAEPmT,2BAA4B,CACxBtS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yQAEPoT,gCAAiC,CAC7BvS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEPqT,6BAA8B,CAC1BxS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gNAEPsT,qBAAsB,CAClBzS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qKAEPuT,uBAAwB,CACpB1S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gKAEPwT,uBAAwB,CACpB3S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qJAEPyT,yBAA0B,CACtB5S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8JAEP0T,6BAA8B,CAC1B7S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mMAEP2T,+BAAgC,CAC5B9S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4LAEP4T,0BAA2B,CACvB/S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEP6T,uBAAwB,CACpBhT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wMAEP8T,0BAA2B,CACvBjT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEP+T,uBAAwB,CACpBlT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8RAEPgU,wBAAyB,CACrBnT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4OAEPiU,qBAAsB,CAClBpT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mOAEPkU,sBAAuB,CACnBrT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2PAEPmU,uBAAwB,CACpBtT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gPAEPoU,wBAAyB,CACrBvT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wOAEPqU,yBAA0B,CACtBxT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sOAEPsU,wBAAyB,CACrBzT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8QAEPuU,yBAA0B,CACtB1T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kQAEPwU,gCAAiC,CAC7B3T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qNAEPyU,6BAA8B,CAC1B5T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEP0U,gCAAiC,CAC7B7T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iSAEP2U,6BAA8B,CAC1B9T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEP4U,8BAA+B,CAC3B/T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iPAEP6U,2BAA4B,CACxBhU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yOAEP8U,uBAAwB,CACpBjU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8KAEP+U,yBAA0B,CACtBlU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yKAEPgV,uBAAwB,CACpBnU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wKAEPiV,yBAA0B,CACtBpU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mKAEPkV,sBAAuB,CACnBrU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iOAEPmV,wBAAyB,CACrBtU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wNAEPoV,wBAAyB,CACrBvU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mTAEPqV,0BAA2B,CACvBxU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8SAEPsV,qBAAsB,CAClBzU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEPuV,uBAAwB,CACpB1U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mRAEPwV,uBAAwB,CACpB3U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gQAEPyV,yBAA0B,CACtB5U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gQAEP0V,2BAA4B,CACxB7U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6QAEP2V,6BAA8B,CAC1B9U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mQAEP4V,2BAA4B,CACxB/U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6LAEP6V,6BAA8B,CAC1BhV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sLAEP8V,8BAA+B,CAC3BjV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2LAEP+V,gCAAiC,CAC7BlV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oMAEPgW,+BAAgC,CAC5BnV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mQAEPiW,iCAAkC,CAC9BpV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kQAEPkW,4BAA6B,CACzBrV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yKAEPmW,8BAA+B,CAC3BtV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kKAEPoW,8BAA+B,CAC3BvV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oKAEPqW,gCAAiC,CAC7BxV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2KAEPsW,2BAA4B,CACxBzV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oKAEPuW,6BAA8B,CAC1B1V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qKAEPwW,8BAA+B,CAC3B3V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4GAEPyW,gCAAiC,CAC7B5V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2GAEP0W,6BAA8B,CAC1B7V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kOAEP2W,+BAAgC,CAC5B9V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4NAEP4W,wBAAyB,CACrB/V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gRAEP6W,qBAAsB,CAClBhW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uQAEP8W,wBAAyB,CACrBjW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0WAEP+W,qBAAsB,CAClBlW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wVAEPgX,0BAA2B,CACvBnW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+LAEPiX,uBAAwB,CACpBpW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gMAEPkX,wBAAyB,CACrBrW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wLAEPmX,qBAAsB,CAClBtW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8LAEPoX,2BAA4B,CACxBvW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oSAEPqX,wBAAyB,CACrBxW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oSAEPsX,yBAA0B,CACtBzW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uOAEPuX,sBAAuB,CACnB1W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gOAEPwX,wBAAyB,CACrB3W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wOAEPyX,qBAAsB,CAClB5W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6OAEP0X,wBAAyB,CACrB7W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kSAEP2X,qBAAsB,CAClB9W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kSAEP4X,sBAAuB,CACnB/W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP6X,uBAAwB,CACpBhX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gRAEP8X,sBAAuB,CACnBjX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oPAEP+X,uBAAwB,CACpBlX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0OAEPgY,uBAAwB,CACpBnX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wSAEPiY,wBAAyB,CACrBpX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qSAEPkY,yBAA0B,CACtBrX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oYAEPmY,0BAA2B,CACvBtX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wXAEPoY,sBAAuB,CACnBvX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0WAEPqY,uBAAwB,CACpBxX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kVAEPsY,wBAAyB,CACrBzX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qWAEPuY,yBAA0B,CACtB1X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0VAEPwY,sBAAuB,CACnB3X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8VAEPyY,uBAAwB,CACpB5X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8VAEP0Y,sBAAuB,CACnB7X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yQAEP2Y,uBAAwB,CACpB9X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6PAEP4Y,wBAAyB,CACrB/X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mRAEP6Y,yBAA0B,CACtBhY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oRAEP8Y,yBAA0B,CACtBjY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yUAEP+Y,0BAA2B,CACvBlY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+TAEPgZ,sBAAuB,CACnBnY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0PAEPiZ,uBAAwB,CACpBpY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mPAEPkZ,wBAAyB,CACrBrY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4PAEPmZ,yBAA0B,CACtBtY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0PAEPoZ,sBAAuB,CACnBvY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4PAEPqZ,uBAAwB,CACpBxY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qPAEPsZ,yBAA0B,CACtBzY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oMAEPuZ,0BAA2B,CACvB1Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2LAEPwZ,wBAAyB,CACrB3Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yTAEPyZ,yBAA0B,CACtB5Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kSAEP0Z,8BAA+B,CAC3B7Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gRAEP2Z,2BAA4B,CACxB9Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2QAEP4Z,8BAA+B,CAC3B/Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oUAEP6Z,2BAA4B,CACxBhZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0TAEP8Z,gCAAiC,CAC7BjZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEP+Z,6BAA8B,CAC1BlZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEPga,8BAA+B,CAC3BnZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iOAEPia,2BAA4B,CACxBpZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+NAEPka,iCAAkC,CAC9BrZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0SAEPma,8BAA+B,CAC3BtZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uSAEPoa,+BAAgC,CAC5BvZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6OAEPqa,4BAA6B,CACzBxZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qOAEPsa,8BAA+B,CAC3BzZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gSAEPua,2BAA4B,CACxB1Z,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPwa,8BAA+B,CAC3B3Z,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPya,2BAA4B,CACxB5Z,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sSAEP0a,mBAAoB,CAChB7Z,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kDAEP2a,qBAAsB,CAClB9Z,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mDAEP4a,iBAAkB,CACd/Z,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sCAEP6a,iBAAkB,CACdha,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,uCAEP8a,mBAAoB,CAChBja,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,2KAEP+a,qBAAsB,CAClBla,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,sLAEPgb,oBAAqB,CACjBna,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,yUAEPib,sBAAuB,CACnBpa,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,uWAEPkb,mBAAoB,CAChBra,MAAO,EACPC,MAAO,GACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,+FAEPmb,qBAAsB,CAClBta,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,gGAEPob,oBAAqB,CACjBva,MAAO,EACPC,MAAO,GACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,uIAEPqb,sBAAuB,CACnBxa,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,yJAEPsb,oBAAqB,CACjBza,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,2KAEPub,sBAAuB,CACnB1a,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,sLAEPwb,oBAAqB,CACjB3a,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,oMAEPyb,sBAAuB,CACnB5a,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,oNAEP0b,oBAAqB,CACjB7a,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,2TAEP2b,sBAAuB,CACnB9a,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,mWAEP4b,oBAAqB,CACjB/a,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,yUAEP6b,sBAAuB,CACnBhb,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,uWAEP8b,oBAAqB,CACjBjb,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,kWAEP+b,sBAAuB,CACnBlb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,qYAEPgc,oBAAqB,CACjBnb,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,ydAEPic,sBAAuB,CACnBpb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,ohBAEPkc,oBAAqB,CACjBrb,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,ueAEPmc,sBAAuB,CACnBtb,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,whBAEPoc,4BAA6B,CACzBvb,OAAQ,EACRC,MAAO,GACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,wGAEPqc,8BAA+B,CAC3Bxb,OAAQ,EACRC,MAAO,GACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,qHAEPsc,6BAA8B,CAC1Bzb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yNAEPuc,oCAAqC,CACjC1b,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+dAEPwc,qBAAsB,CAClB3b,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2HAEPyc,sBAAuB,CACnB5b,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4CAGX0c,WAAY,UACZC,WAAY,IACZC,YAAa,4BC18GbC,QCXyB,CACzBC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnBrd,OAAQ,CACJmM,eAAgB,CACZmR,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbpR,mBAAoB,CAChBkR,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbnR,cAAe,CACXiR,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbhR,mBAAoB,CAChB8Q,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEb/Q,oBAAqB,CACjB6Q,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEb9Q,oBAAqB,CACjB4Q,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEb7Q,qBAAsB,CAClB2Q,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEb5Q,uBAAwB,CACpB0Q,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEb3Q,wBAAyB,CACrByQ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEb1Q,6BAA8B,CAC1BwQ,gBAAiB,IACjBC,aAAc,IACdC,QAAS,KAEbjR,UAAW,CACP+Q,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEblR,iBAAkB,CACdgR,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElBxX,gBAAiB,CACbuX,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEd3X,eAAgB,CACZyX,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBC,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,EACPC,OAAQ,KAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,EACNC,OAAQ,MAKxBE,WAAY,CACRN,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACN3T,WAAY,CACR4T,SAAU,GACVV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnB7T,gBAAiB,CACb2T,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnB5T,kBAAmB,CACf0T,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnB3T,gBAAiB,CACbyT,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,GAEnB1T,qBAAsB,CAClBwT,QAAS,GACTV,QAAS,GACTW,cAAe,EACfC,cAAe,GAEnBzT,UAAW,CACPuT,QAAS,EACTV,SAAU,EACVW,cAAe,GACfC,cAAe,GAEnBxT,gBAAiB,CACbsT,QAAS,EACTV,SAAU,EACVW,cAAe,GACfC,cAAe,GAEnBvT,cAAe,CACXqT,QAAS,EACTV,SAAU,EACVW,cAAe,GACfC,cAAe,GAEnBtT,UAAW,CACPoT,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnBrT,cAAe,CACXmT,QAAS,EACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnBpT,WAAY,CACRkT,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAGvBC,YAAa,CACTC,QAAS,CACLZ,MAAO,GAEXa,UAAW,CACPb,MAAO,IAGfc,aAAc,CAAC,EAEfC,OAAQ,CAEJC,WAAY,EAEZC,QAAS,GAEbC,aAAc,CACVvX,wBAAyB,CACrBgV,QAAS,GAEb/U,wBAAyB,CACrB+U,QAAS,IAGjBwC,QAAS,CACLP,QAAS,CACLlB,QAAS,EACT0B,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACH9B,QAAS,IACT0B,eAAe,IACfC,gBAAiB,IACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACTlC,QAAS,GAEbzc,KAAM,CACF2e,QAAS,IAEb5e,MAAO,CACH4e,QAAS,KAGjBC,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACN3b,uBAAwB,CACpB+b,kBAAmB,EACnBC,oBAAqB,GAEzB/b,wBAAyB,CACrB8b,kBAAmB,EACnBC,oBAAqB,GAEzBjc,wBAAyB,CACrBgc,kBAAmB,EACnBC,oBAAqB,GAEzBnd,cAAe,CACXkd,mBAAoB,EACpBC,oBAAqB,GAEzBld,eAAgB,CACZid,mBAAoB,EACpBC,oBAAqB,GAEzBpd,eAAgB,CACZmd,mBAAoB,EACpBC,oBAAqB,GAEzBvd,aAAc,CACVsd,mBAAoB,KACpBC,oBAAqB,MAEzBtd,cAAe,CACXqd,mBAAoB,EACpBC,oBAAqB,GAEzBxc,oBAAqB,CACjBwc,qBAAsB,EACtBD,kBAAmB,KAI/BE,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACbpD,YAAa,EACbqD,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvBrgB,OAAQ,CACJW,KAAM,CACFmd,QAAS,EACTa,OAAQ,GAEZje,MAAO,CACHod,QAAS,GAEbwC,KAAM,CACFxC,QAAS,IACTyC,WAAY,CACRzC,QAAS,IAGjBL,aAAc,CAAC,EACfO,WAAY,CACRpd,MAAO,CACH+d,OAAQ,MAGhB6B,iBAAkB,CAAC,EACnBC,eAAgB,CAAC,EACjBC,gBAAiB,CACb9U,mBAAoB,CAChBkS,QAAS,KAEbnS,iBAAkB,CACdmS,QAAS,MAGjB6C,cAAe,CACX/U,mBAAoB,CAChBkS,QAAS,EACTa,OAAQ,GAEZhT,iBAAkB,CACdmS,QAAS,EACTa,OAAQ,IAGhBiC,SAAU,CACNngB,eAAgB,CACZke,OAAQ,GAEZxW,gBAAiB,CAAC,EAClBzH,MAAO,CACHod,QAAS,EACTa,OAAQ,GAEZhe,KAAM,CACFmd,QAAS,EACTa,OAAQ,GAEZlV,cAAe,CACXqU,QAAS,EACTa,OAAQ,GAEZjV,aAAc,CAAC,EACfC,kBAAmB,CAAC,EACpBC,gBAAiB,CACbkU,QAAS,GAEbjU,mBAAoB,CAChBiU,QAAS,IAGjByB,SAAU,CAAC,EACX1C,YAAa,CACTgE,MAAO,O","sources":["webpack://VexFlowFont.Bravura/webpack/universalModuleDefinition","webpack://VexFlowFont.Bravura/webpack/bootstrap","webpack://VexFlowFont.Bravura/webpack/runtime/define property getters","webpack://VexFlowFont.Bravura/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Bravura/./src/fonts/bravura_glyphs.ts","webpack://VexFlowFont.Bravura/./entry/vexflow-font-bravura.ts","webpack://VexFlowFont.Bravura/./src/fonts/common_metrics.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Bravura\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// This entry file will be exported as a font module that can be dynamically loaded by vexflow-core.js.\n// Search for 'vexflow-font-bravura' in Gruntfile.js.\n// ADD_MUSIC_FONT\n// To add a new music engraving font named XXX, make a copy of this file and name it vexflow-font-xxx.ts.\n// Then you will need to import the xxx_glyphs.ts and xxx_metrics.ts files.\nimport { BravuraFont } from '../src/fonts/bravura_glyphs';\nimport { CommonMetrics } from '../src/fonts/common_metrics';\nexport const Font = {\n data: BravuraFont,\n metrics: CommonMetrics,\n};\nexport default Font;\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","glyphs","bracketTop","x_min","x_max","y_min","y_max","ha","bracketBottom","barlineTick","breathMarkTick","segno","coda","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arrowheadBlackUp","arrowheadBlackDown","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","fontFamily","resolution","generatedOn","metrics","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","leftSideBearing","advanceWidth","yOffset","clef_default","width","annotations","treble","line","shiftX","bass","clef_small","ornament","xOffset","stemUpYOffset","reportedWidth","parenthesis","default","gracenote","pedalMarking","digits","shiftLine","shiftY","articulation","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","noteHead","minPadding","stem","heightAdjustmentForFlag","offsetYBaseStemUp","offsetYBaseStemDown","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","clefNote_default","clefNote_small","stroke_straight","stroke_wiggly","textNote","scale"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-custom.js b/build/cjs/vexflow-font-custom.js new file mode 100644 index 0000000000..6ce6318618 --- /dev/null +++ b/build/cjs/vexflow-font-custom.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.VexFlowFont=t():(e.VexFlowFont=e.VexFlowFont||{},e.VexFlowFont.Custom=t())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var e={d:(t,b)=>{for(var f in b)e.o(b,f)&&!e.o(t,f)&&Object.defineProperty(t,f,{enumerable:!0,get:b[f]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{default:()=>b});const b={data:{resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}},metrics:{smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}}};return t=t.default})())); +//# sourceMappingURL=vexflow-font-custom.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-custom.js.map b/build/cjs/vexflow-font-custom.js.map new file mode 100644 index 0000000000..27478fd2b1 --- /dev/null +++ b/build/cjs/vexflow-font-custom.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-font-custom.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAU,OAAIC,IAClF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCQP,EAJoB,CAChBI,KCLsB,CACtBC,WAAY,IACZC,WAAY,gBACZC,OAAQ,CACJC,yBAA0B,CACtBC,OAAQ,MACRC,MAAO,SACPC,GAAI,IACJjB,EAAG,0lDAEPkB,yBAA0B,CACtBH,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,qoGAEPmB,yBAA0B,CACtBJ,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,4gDAEPoB,qBAAsB,CAClBL,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,kDAEPqB,qBAAsB,CAClBN,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,kGAEPsB,oBAAqB,CACjBP,MAAO,SACPC,MAAO,WACPC,GAAI,IACJjB,EAAG,ohBDhCXuB,QDNyB,CACzBC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnB7B,OAAQ,CACJ8B,eAAgB,CACZC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbC,mBAAoB,CAChBH,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbE,cAAe,CACXJ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbG,mBAAoB,CAChBL,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEbI,oBAAqB,CACjBN,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbK,oBAAqB,CACjBP,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbM,qBAAsB,CAClBR,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbO,uBAAwB,CACpBT,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEbQ,wBAAyB,CACrBV,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbS,6BAA8B,CAC1BX,gBAAiB,IACjBC,aAAc,IACdC,QAAS,KAEbU,UAAW,CACPZ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbW,iBAAkB,CACdb,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElBa,gBAAiB,CACbd,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEda,eAAgB,CACZf,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBc,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,EACPC,OAAQ,KAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,EACNC,OAAQ,MAKxBE,WAAY,CACRN,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACNC,WAAY,CACRC,SAAU,GACVxB,QAAS,EACTyB,cAAe,EACfC,cAAe,IAEnBC,gBAAiB,CACbH,QAAS,GACTxB,QAAS,EACTyB,cAAe,EACfC,cAAe,IAEnBE,kBAAmB,CACfJ,QAAS,GACTxB,QAAS,EACTyB,cAAe,EACfC,cAAe,IAEnBG,gBAAiB,CACbL,QAAS,GACTxB,QAAS,EACTyB,cAAe,EACfC,cAAe,GAEnBI,qBAAsB,CAClBN,QAAS,GACTxB,QAAS,GACTyB,cAAe,EACfC,cAAe,GAEnBK,UAAW,CACPP,QAAS,EACTxB,SAAU,EACVyB,cAAe,GACfC,cAAe,GAEnBM,gBAAiB,CACbR,QAAS,EACTxB,SAAU,EACVyB,cAAe,GACfC,cAAe,GAEnBO,cAAe,CACXT,QAAS,EACTxB,SAAU,EACVyB,cAAe,GACfC,cAAe,GAEnBQ,UAAW,CACPV,QAAS,GACTxB,QAAS,EACTyB,cAAe,EACfC,cAAe,IAEnBS,cAAe,CACXX,QAAS,EACTxB,QAAS,EACTyB,cAAe,EACfC,cAAe,IAEnBU,WAAY,CACRZ,QAAS,GACTxB,QAAS,EACTyB,cAAe,EACfC,cAAe,IAGvBW,YAAa,CACTC,QAAS,CACLvB,MAAO,GAEXwB,UAAW,CACPxB,MAAO,IAGfyB,aAAc,CAAC,EAEfC,OAAQ,CAEJC,WAAY,EAEZC,QAAS,GAEbC,aAAc,CACVC,wBAAyB,CACrBjE,QAAS,GAEbkE,wBAAyB,CACrBlE,QAAS,IAGjBmE,QAAS,CACLT,QAAS,CACL3C,QAAS,EACTqD,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACHzD,QAAS,IACTqD,eAAe,IACfC,gBAAiB,IACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACT7D,QAAS,GAEb8D,KAAM,CACFD,QAAS,IAEbE,MAAO,CACHF,QAAS,KAGjBG,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACNI,uBAAwB,CACpBC,kBAAmB,EACnBC,oBAAqB,GAEzBC,wBAAyB,CACrBF,kBAAmB,EACnBC,oBAAqB,GAEzBE,wBAAyB,CACrBH,kBAAmB,EACnBC,oBAAqB,GAEzBG,cAAe,CACXJ,mBAAoB,EACpBC,oBAAqB,GAEzBI,eAAgB,CACZL,mBAAoB,EACpBC,oBAAqB,GAEzBK,eAAgB,CACZN,mBAAoB,EACpBC,oBAAqB,GAEzBM,aAAc,CACVP,mBAAoB,KACpBC,oBAAqB,MAEzBO,cAAe,CACXR,mBAAoB,EACpBC,oBAAqB,GAEzBQ,oBAAqB,CACjBR,qBAAsB,EACtBD,kBAAmB,KAI/BU,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACb1F,YAAa,EACb2F,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvBnH,OAAQ,CACJ0F,KAAM,CACFtC,QAAS,EACTwB,OAAQ,GAEZe,MAAO,CACHvC,QAAS,GAEbgE,KAAM,CACFhE,QAAS,IACTiE,WAAY,CACRjE,QAAS,IAGjBL,aAAc,CAAC,EACfO,WAAY,CACRgE,MAAO,CACH1C,OAAQ,MAGhB2C,iBAAkB,CAAC,EACnBC,eAAgB,CAAC,EACjBC,gBAAiB,CACbC,mBAAoB,CAChBtE,QAAS,KAEbuE,iBAAkB,CACdvE,QAAS,MAGjBwE,cAAe,CACXF,mBAAoB,CAChBtE,QAAS,EACTwB,OAAQ,GAEZ+C,iBAAkB,CACdvE,QAAS,EACTwB,OAAQ,IAGhBiD,SAAU,CACNC,eAAgB,CACZlD,OAAQ,GAEZmD,gBAAiB,CAAC,EAClBpC,MAAO,CACHvC,QAAS,EACTwB,OAAQ,GAEZc,KAAM,CACFtC,QAAS,EACTwB,OAAQ,GAEZoD,cAAe,CACX5E,QAAS,EACTwB,OAAQ,GAEZqD,aAAc,CAAC,EACfC,kBAAmB,CAAC,EACpBC,gBAAiB,CACb/E,QAAS,GAEbgF,mBAAoB,CAChBhF,QAAS,IAGjBwC,SAAU,CAAC,EACXvE,YAAa,CACTgH,MAAO,O","sources":["webpack://VexFlowFont.Custom/webpack/universalModuleDefinition","webpack://VexFlowFont.Custom/webpack/bootstrap","webpack://VexFlowFont.Custom/webpack/runtime/define property getters","webpack://VexFlowFont.Custom/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Custom/./src/fonts/common_metrics.ts","webpack://VexFlowFont.Custom/./entry/vexflow-font-custom.ts","webpack://VexFlowFont.Custom/./src/fonts/custom_glyphs.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Custom\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CommonMetrics } from '../src/fonts/common_metrics';\nimport { CustomFont } from '../src/fonts/custom_glyphs';\nexport const Font = {\n data: CustomFont,\n metrics: CommonMetrics,\n};\nexport default Font;\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","resolution","fontFamily","glyphs","vexAccidentalMicrotonal1","x_min","x_max","ha","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","metrics","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","csymDiminished","leftSideBearing","advanceWidth","yOffset","csymHalfDiminished","csymAugmented","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","csymMajorSeventh","accidentalSharp","accidentalFlat","clef_default","width","annotations","treble","line","shiftX","bass","clef_small","ornament","brassScoop","xOffset","stemUpYOffset","reportedWidth","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","parenthesis","default","gracenote","pedalMarking","digits","shiftLine","shiftY","articulation","articStaccatissimoAbove","articStaccatissimoBelow","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","coda","segno","noteHead","minPadding","stem","heightAdjustmentForFlag","noteheadTriangleUpHalf","offsetYBaseStemUp","offsetYBaseStemDown","noteheadTriangleUpBlack","noteheadTriangleUpWhole","noteheadXHalf","noteheadXBlack","noteheadXWhole","noteheadHalf","noteheadBlack","noteheadSquareWhite","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","gClef","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","textNote","breathMarkTick","breathMarkComma","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","scale"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-gonville.js b/build/cjs/vexflow-font-gonville.js new file mode 100644 index 0000000000..9285195bcc --- /dev/null +++ b/build/cjs/vexflow-font-gonville.js @@ -0,0 +1,2 @@ +!function(b,l){"object"==typeof exports&&"object"==typeof module?module.exports=l():"function"==typeof define&&define.amd?define([],l):"object"==typeof exports?exports.VexFlowFont=l():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Gonville=l())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(l,m)=>{for(var a in m)b.o(m,a)&&!b.o(l,a)&&Object.defineProperty(l,a,{enumerable:!0,get:m[a]})},o:(b,l)=>Object.prototype.hasOwnProperty.call(b,l)},l={};b.d(l,{default:()=>m});const m={data:{glyphs:{bracketTop:{x_min:0,x_max:412,y_min:-18,y_max:223,ha:241,o:"m 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z"},bracketBottom:{x_min:0,x_max:412,y_min:-223,y_max:18,ha:241,o:"m 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z"},barlineTick:{x_min:-59,x_max:59,y_min:-139,y_max:139,ha:279,o:"m 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z"},breathMarkTick:{x_min:-151,x_max:272,y_min:0,y_max:429,ha:429,o:"m 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z"},segno:{x_min:7,x_max:493,y_min:-50,y_max:650,ha:699,o:"m 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z"},coda:{x_min:22,x_max:478,y_min:-31,y_max:531,ha:563,o:"m 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z"},gClef:{x_min:0,x_max:623,y_min:-632,y_max:1082,ha:1713,o:"m 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z"},cClef:{x_min:0,x_max:643,y_min:-508,y_max:508,ha:1016,o:"m 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z"},fClef:{x_min:0,x_max:661,y_min:-545,y_max:254,ha:798,o:"m 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z"},unpitchedPercussionClef1:{x_min:-4,x_max:337,y_min:-250,y_max:250,ha:500,o:"m -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z"},"6stringTabClef":{x_min:0,x_max:501,y_min:-735,y_max:753,ha:1487,o:"m 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z"},timeSig0:{x_min:0,x_max:380,y_min:-250,y_max:236,ha:486,o:"m 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z"},timeSig1:{x_min:0,x_max:254,y_min:-250,y_max:236,ha:486,o:"m 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z"},timeSig2:{x_min:0,x_max:337,y_min:-250,y_max:236,ha:486,o:"m 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z"},timeSig3:{x_min:0,x_max:302,y_min:-250,y_max:236,ha:486,o:"m 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z"},timeSig4:{x_min:0,x_max:345,y_min:-250,y_max:236,ha:486,o:"m 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z"},timeSig5:{x_min:0,x_max:302,y_min:-250,y_max:236,ha:486,o:"m 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z"},timeSig6:{x_min:0,x_max:349,y_min:-250,y_max:236,ha:486,o:"m 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z"},timeSig7:{x_min:0,x_max:326,y_min:-250,y_max:236,ha:486,o:"m 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z"},timeSig8:{x_min:0,x_max:360,y_min:-250,y_max:236,ha:486,o:"m 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z"},timeSig9:{x_min:0,x_max:349,y_min:-250,y_max:236,ha:486,o:"m 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z"},timeSigCommon:{x_min:0,x_max:409,y_min:-233,y_max:233,ha:466,o:"m 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z"},timeSigCutCommon:{x_min:0,x_max:409,y_min:-394,y_max:394,ha:788,o:"m 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z"},timeSigPlus:{x_min:0,x_max:235,y_min:-118,y_max:118,ha:235,o:"m 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z"},timeSigPlusSmall:{x_min:0,x_max:235,y_min:-118,y_max:118,ha:235,o:"m 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z"},timeSigMinus:{x_min:0,x_max:235,y_min:-23,y_max:23,ha:46,o:"m 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z"},timeSigParensRight:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},timeSigParensRightSmall:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},timeSigParensLeft:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},timeSigParensLeftSmall:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},noteheadDoubleWhole:{x_min:0,x_max:663,y_min:-174,y_max:174,ha:349,o:"m 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z"},noteheadWhole:{x_min:0,x_max:455,y_min:-135,y_max:135,ha:269,o:"m 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z"},noteheadHalf:{x_min:0,x_max:316,y_min:-135,y_max:135,ha:269,o:"m 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z"},noteheadBlack:{x_min:0,x_max:316,y_min:-135,y_max:135,ha:269,o:"m 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z"},noteheadXWhole:{x_min:0,x_max:440,y_min:-133,y_max:133,ha:265,o:"m 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z"},noteheadXHalf:{x_min:0,x_max:300,y_min:-133,y_max:133,ha:265,o:"m 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z"},noteheadXBlack:{x_min:0,x_max:300,y_min:-133,y_max:133,ha:265,o:"m 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z"},noteheadCircleX:{x_min:0,x_max:357,y_min:-178,y_max:178,ha:357,o:"m 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z"},noteheadTriangleUpWhole:{x_min:0,x_max:462,y_min:-149,y_max:149,ha:297,o:"m 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z"},noteheadTriangleUpHalf:{x_min:0,x_max:323,y_min:-149,y_max:149,ha:298,o:"m 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z"},noteheadTriangleUpBlack:{x_min:0,x_max:322,y_min:-149,y_max:149,ha:297,o:"m 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z"},noteheadDiamondWhole:{x_min:0,x_max:462,y_min:-138,y_max:138,ha:277,o:"m 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z"},noteheadDiamondHalf:{x_min:0,x_max:322,y_min:-138,y_max:138,ha:277,o:"m 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z"},noteheadDiamondBlack:{x_min:0,x_max:322,y_min:-138,y_max:138,ha:277,o:"m 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z"},augmentationDot:{x_min:-63,x_max:63,y_min:-63,y_max:63,ha:126,o:"m -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z"},tremolo1:{x_min:-252,x_max:216,y_min:-185,y_max:148,ha:333,o:"m 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z"},flag8thUp:{x_min:-17,x_max:234,y_min:-745,y_max:-4,ha:741,o:"m -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z"},flag8thDown:{x_min:-15,x_max:271,y_min:4,y_max:745,ha:741,o:"m 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z"},flag16thUp:{x_min:-17,x_max:234,y_min:-847,y_max:-4,ha:843,o:"m -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z"},flag16thDown:{x_min:-15,x_max:267,y_min:4,y_max:745,ha:741,o:"m 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z"},flag32ndUp:{x_min:-17,x_max:233,y_min:-1005,y_max:96,ha:1101,o:"m -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z"},flag32ndDown:{x_min:-15,x_max:270,y_min:-96,y_max:895,ha:991,o:"m 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z"},flag64thUp:{x_min:-17,x_max:233,y_min:-933,y_max:296,ha:1230,o:"m -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z"},flag64thDown:{x_min:-15,x_max:271,y_min:-296,y_max:820,ha:1116,o:"m 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z"},flag128thUp:{x_min:-17,x_max:231,y_min:-987,y_max:496,ha:1484,o:"m -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z"},flag128thDown:{x_min:-15,x_max:270,y_min:-496,y_max:870,ha:1366,o:"m 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z"},accidentalFlat:{x_min:-15,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalNatural:{x_min:0,x_max:176,y_min:-334,y_max:334,ha:667,o:"m 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z"},accidentalSharp:{x_min:0,x_max:239,y_min:-388,y_max:388,ha:775,o:"m 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z"},accidentalDoubleSharp:{x_min:0,x_max:271,y_min:-135,y_max:135,ha:271,o:"m 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z"},accidentalDoubleFlat:{x_min:-15,x_max:356,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z"},accidentalParensLeft:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},accidentalParensRight:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:200,y_min:-165,y_max:457,ha:622,o:"m 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:446,y_min:-165,y_max:457,ha:622,o:"m 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:142,y_min:-373,y_max:373,ha:747,o:"m 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:335,y_min:-391,y_max:391,ha:782,o:"m 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z"},accidentalBuyukMucennebFlat:{x_min:-125,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:284,y_min:-388,y_max:388,ha:775,o:"m 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z"},accidentalBakiyeFlat:{x_min:-129,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalKomaSharp:{x_min:0,x_max:142,y_min:-373,y_max:373,ha:747,o:"m 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:188,y_min:-373,y_max:373,ha:747,o:"m 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z"},articAccentAbove:{x_min:-256,x_max:19,y_min:-114,y_max:114,ha:227,o:"m -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z"},articAccentBelow:{x_min:-256,x_max:19,y_min:-114,y_max:114,ha:227,o:"m -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z"},articTenutoAbove:{x_min:-154,x_max:154,y_min:-15,y_max:15,ha:30,o:"m -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z"},articTenutoBelow:{x_min:-154,x_max:154,y_min:-15,y_max:15,ha:30,o:"m -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z"},articStaccatoAbove:{x_min:-49,x_max:49,y_min:-49,y_max:49,ha:99,o:"m -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z"},articStaccatoBelow:{x_min:-49,x_max:49,y_min:-49,y_max:49,ha:99,o:"m -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z"},articStaccatissimoAbove:{x_min:-53,x_max:53,y_min:0,y_max:184,ha:184,o:"m -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z"},articStaccatissimoBelow:{x_min:-53,x_max:53,y_min:-184,y_max:0,ha:184,o:"m -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z"},articMarcatoAbove:{x_min:-114,x_max:114,y_min:-256,y_max:19,ha:275,o:"m -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z"},articMarcatoBelow:{x_min:-114,x_max:114,y_min:-19,y_max:256,ha:275,o:"m -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z"},fermataAbove:{x_min:-324,x_max:324,y_min:0,y_max:353,ha:353,o:"m -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataBelow:{x_min:-324,x_max:324,y_min:-353,y_max:0,ha:353,o:"m -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataLongAbove:{x_min:-286,x_max:286,y_min:0,y_max:364,ha:364,o:"m -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z"},fermataLongBelow:{x_min:-286,x_max:286,y_min:-364,y_max:0,ha:364,o:"m -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataVeryLongAbove:{x_min:-286,x_max:286,y_min:0,y_max:438,ha:438,o:"m -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataVeryLongBelow:{x_min:-286,x_max:286,y_min:-438,y_max:0,ha:438,o:"m -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataVeryShortAbove:{x_min:-351,x_max:351,y_min:0,y_max:571,ha:571,o:"m -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z"},fermataVeryShortBelow:{x_min:-351,x_max:351,y_min:-571,y_max:0,ha:571,o:"m 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z"},fermataShortAbove:{x_min:-286,x_max:286,y_min:0,y_max:469,ha:469,o:"m -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataShortBelow:{x_min:-286,x_max:286,y_min:-469,y_max:0,ha:469,o:"m -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},breathMarkComma:{x_min:0,x_max:168,y_min:-155,y_max:155,ha:311,o:"m 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z"},breathMarkUpbow:{x_min:-125,x_max:125,y_min:0,y_max:409,ha:409,o:"m -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z"},caesura:{x_min:0,x_max:457,y_min:-202,y_max:303,ha:504,o:"m 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z"},caesuraCurved:{x_min:0,x_max:370,y_min:-207,y_max:310,ha:517,o:"m 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z"},restMaxima:{x_min:0,x_max:853,y_min:-250,y_max:250,ha:500,o:"m 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z"},restDoubleWhole:{x_min:0,x_max:284,y_min:0,y_max:250,ha:250,o:"m 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z"},restWhole:{x_min:0,x_max:330,y_min:-125,y_max:0,ha:125,o:"m 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z"},restWholeLegerLine:{x_min:0,x_max:542,y_min:-125,y_max:11,ha:137,o:"m 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z"},restHalf:{x_min:0,x_max:330,y_min:0,y_max:125,ha:125,o:"m 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z"},restHalfLegerLine:{x_min:0,x_max:542,y_min:-11,y_max:125,ha:137,o:"m 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z"},restQuarter:{x_min:0,x_max:221,y_min:-365,y_max:365,ha:730,o:"m 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z"},rest8th:{x_min:0,x_max:258,y_min:-197,y_max:219,ha:416,o:"m 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z"},rest16th:{x_min:0,x_max:331,y_min:-443,y_max:219,ha:662,o:"m 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z"},rest32nd:{x_min:0,x_max:405,y_min:-443,y_max:466,ha:909,o:"m 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z"},rest64th:{x_min:0,x_max:479,y_min:-689,y_max:466,ha:1155,o:"m 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z"},rest128th:{x_min:0,x_max:553,y_min:-689,y_max:712,ha:1401,o:"m 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z"},dynamicPiano:{x_min:-39,x_max:378,y_min:-178,y_max:277,ha:455,o:"m 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z"},dynamicMezzo:{x_min:35,x_max:493,y_min:-19,y_max:272,ha:291,o:"m 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z"},dynamicForte:{x_min:-87,x_max:440,y_min:-182,y_max:415,ha:597,o:"m 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z"},dynamicRinforzando:{x_min:58,x_max:357,y_min:0,y_max:275,ha:275,o:"m 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z"},dynamicSforzando:{x_min:52,x_max:278,y_min:-22,y_max:270,ha:292,o:"m 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z"},dynamicZ:{x_min:23,x_max:309,y_min:2,y_max:250,ha:248,o:"m 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z"},ornamentTrill:{x_min:-249,x_max:249,y_min:0,y_max:376,ha:376,o:"m -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z"},ornamentTurn:{x_min:-310,x_max:310,y_min:-143,y_max:143,ha:286,o:"m -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z"},ornamentTurnSlash:{x_min:-310,x_max:310,y_min:-201,y_max:201,ha:402,o:"m -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z"},ornamentMordent:{x_min:-296,x_max:296,y_min:-215,y_max:198,ha:413,o:"m -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z"},ornamentShortTrill:{x_min:-296,x_max:296,y_min:-127,y_max:127,ha:253,o:"m -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z"},ornamentTremblement:{x_min:-419,x_max:419,y_min:-127,y_max:127,ha:253,o:"m -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z"},ornamentPrecompAppoggTrill:{x_min:-419,x_max:419,y_min:-127,y_max:255,ha:381,o:"m -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:-433,x_max:433,y_min:-243,y_max:127,ha:370,o:"m -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z"},ornamentPrecompSlideTrillBach:{x_min:-433,x_max:433,y_min:-243,y_max:198,ha:442,o:"m 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:-433,x_max:433,y_min:-127,y_max:244,ha:370,o:"m 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:-439,x_max:439,y_min:-127,y_max:236,ha:363,o:"m -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:-439,x_max:439,y_min:-215,y_max:236,ha:451,o:"m -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z"},ornamentPrecompTrillLowerSuffix:{x_min:-439,x_max:439,y_min:-236,y_max:127,ha:362,o:"m -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z"},stringsDownBow:{x_min:-168,x_max:168,y_min:0,y_max:353,ha:353,o:"m -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z"},stringsUpBow:{x_min:-110,x_max:110,y_min:0,y_max:277,ha:277,o:"m -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z"},stringsHarmonic:{x_min:-82,x_max:82,y_min:-82,y_max:82,ha:163,o:"m -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z"},pluckedSnapPizzicatoAbove:{x_min:-110,x_max:110,y_min:-110,y_max:205,ha:315,o:"m -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z"},pluckedSnapPizzicatoBelow:{x_min:-110,x_max:110,y_min:-205,y_max:110,ha:315,o:"m 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z"},pluckedLeftHandPizzicato:{x_min:-155,x_max:155,y_min:-157,y_max:157,ha:315,o:"m -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z"},keyboardPedalPed:{x_min:0,x_max:782,y_min:-1,y_max:500,ha:501,o:"m 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z"},keyboardPedalUp:{x_min:0,x_max:435,y_min:65,y_max:500,ha:435,o:"m 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z"},pictChokeCymbal:{x_min:0,x_max:168,y_min:-155,y_max:155,ha:311,o:"m 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z"},wiggleArpeggiatoUp:{x_min:-8,x_max:269,y_min:0,y_max:126,ha:126,o:"m 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z"},arrowheadBlackUp:{x_min:11,x_max:239,y_min:-6,y_max:269,ha:275,o:"m 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z"},arrowheadBlackDown:{x_min:11,x_max:239,y_min:6,y_max:281,ha:275,o:"m 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z"}},fontFamily:"GonvilleSmufl",resolution:1e3,generatedOn:"2023-04-20T22:11:26.009Z"},metrics:{smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}}};return l=l.default})())); +//# sourceMappingURL=vexflow-font-gonville.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-gonville.js.map b/build/cjs/vexflow-font-gonville.js.map new file mode 100644 index 0000000000..52f9dcbe21 --- /dev/null +++ b/build/cjs/vexflow-font-gonville.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-font-gonville.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAY,SAAIC,IACpF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCQP,EAJoB,CAChBI,KCL6B,CAC7BC,OAAQ,CACJC,WAAY,CACRC,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iUAEPkB,cAAe,CACXL,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,oYAEPmB,YAAa,CACTN,OAAQ,GACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sVAEPoB,eAAgB,CACZP,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4aAEPqB,MAAO,CACHR,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mtDAEPsB,KAAM,CACFT,MAAO,GACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,61CAEPuB,MAAO,CACHV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,w/EAEPwB,MAAO,CACHX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,uuDAEPyB,MAAO,CACHZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4iCAEP0B,yBAA0B,CACtBb,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gKAEP,iBAAkB,CACda,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,66GAEP2B,SAAU,CACNd,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qmBAEP4B,SAAU,CACNf,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,osBAEP6B,SAAU,CACNhB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kkCAEP8B,SAAU,CACNjB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q9BAEP+B,SAAU,CACNlB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wrCAEPgC,SAAU,CACNnB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,isCAEPiC,SAAU,CACNpB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6iCAEPkC,SAAU,CACNrB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y9BAEPmC,SAAU,CACNtB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2/BAEPoC,SAAU,CACNvB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,unCAEPqC,cAAe,CACXxB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ytBAEPsC,iBAAkB,CACdzB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4pCAEPuC,YAAa,CACT1B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wkBAEPwC,iBAAkB,CACd3B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wkBAEPyC,aAAc,CACV5B,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,+LAEP0C,mBAAoB,CAChB7B,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP2C,wBAAyB,CACrB9B,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP4C,kBAAmB,CACf/B,OAAQ,IACRC,OAAQ,GACRC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEP6C,uBAAwB,CACpBhC,OAAQ,IACRC,OAAQ,GACRC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEP8C,oBAAqB,CACjBjC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+qDAEP+C,cAAe,CACXlC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uWAEPgD,aAAc,CACVnC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8aAEPiD,cAAe,CACXpC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wNAEPkD,eAAgB,CACZrC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2xCAEPmD,cAAe,CACXtC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g8CAEPoD,eAAgB,CACZvC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+tBAEPqD,gBAAiB,CACbxC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yzBAEPsD,wBAAyB,CACrBzC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u1BAEPuD,uBAAwB,CACpB1C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mvBAEPwD,wBAAyB,CACrB3C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wmBAEPyD,qBAAsB,CAClB5C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ytBAEP0D,oBAAqB,CACjB7C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,glBAEP2D,qBAAsB,CAClB9C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kVAEP4D,gBAAiB,CACb/C,OAAQ,GACRC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,4KAEP6D,SAAU,CACNhD,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mnBAEP8D,UAAW,CACPjD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,EACRC,GAAI,IACJjB,EAAG,gWAEP+D,YAAa,CACTlD,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qYAEPgE,WAAY,CACRnD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,EACRC,GAAI,IACJjB,EAAG,05BAEPiE,aAAc,CACVpD,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8oBAEPkE,WAAY,CACRrD,OAAQ,GACRC,MAAO,IACPC,OAAQ,KACRC,MAAO,GACPC,GAAI,KACJjB,EAAG,onCAEPmE,aAAc,CACVtD,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0jCAEPoE,WAAY,CACRvD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,upDAEPqE,aAAc,CACVxD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,05CAEPsE,YAAa,CACTzD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,ozDAEPuE,cAAe,CACX1D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,+uDAEPwE,eAAgB,CACZ3D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mjBAEPyE,kBAAmB,CACf5D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gvBAEP0E,gBAAiB,CACb7D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2xDAEP2E,sBAAuB,CACnB9D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4cAEP4E,qBAAsB,CAClB/D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8nCAEP6E,qBAAsB,CAClBhE,OAAQ,IACRC,OAAQ,GACRC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEP8E,sBAAuB,CACnBjE,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP+E,+BAAgC,CAC5BlE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wkBAEPgF,0CAA2C,CACvCnE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2pCAEPiF,gCAAiC,CAC7BpE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ynCAEPkF,sCAAuC,CACnCrE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s2EAEPmF,4BAA6B,CACzBtE,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g1CAEPoF,6BAA8B,CAC1BvE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ygFAEPqF,qBAAsB,CAClBxE,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,28BAEPsF,oBAAqB,CACjBzE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ynCAEPuF,6BAA8B,CAC1B1E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yqDAEPwF,iBAAkB,CACd3E,OAAQ,IACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+iBAEPyF,iBAAkB,CACd5E,OAAQ,IACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+iBAEP0F,iBAAkB,CACd7E,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,sQAEP2F,iBAAkB,CACd9E,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,sQAEP4F,mBAAoB,CAChB/E,OAAQ,GACRC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,+LAEP6F,mBAAoB,CAChBhF,OAAQ,GACRC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,+LAEP8F,wBAAyB,CACrBjF,OAAQ,GACRC,MAAO,GACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0FAEP+F,wBAAyB,CACrBlF,OAAQ,GACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,8HAEPgG,kBAAmB,CACfnF,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,2cAEPiG,kBAAmB,CACfpF,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,odAEPkG,aAAc,CACVrF,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yjBAEPmG,aAAc,CACVtF,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,koBAEPoG,iBAAkB,CACdvF,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kmBAEPqG,iBAAkB,CACdxF,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,ynBAEPsG,qBAAsB,CAClBzF,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0/BAEPuG,qBAAsB,CAClB1F,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,wmCAEPwG,sBAAuB,CACnB3F,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,41DAEPyG,sBAAuB,CACnB5F,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4gEAEP0G,kBAAmB,CACf7F,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kyBAEP2G,kBAAmB,CACf9F,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,2+BAEP4G,gBAAiB,CACb/F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6VAEP6G,gBAAiB,CACbhG,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,waAEP8G,QAAS,CACLjG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qfAEP+G,cAAe,CACXlG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8lBAEPgH,WAAY,CACRnG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oKAEPiH,gBAAiB,CACbpG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yEAEPkH,UAAW,CACPrG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4EAEPmH,mBAAoB,CAChBtG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,2QAEPoH,SAAU,CACNvG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uEAEPqH,kBAAmB,CACfxG,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4QAEPsH,YAAa,CACTzG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,47BAEPuH,QAAS,CACL1G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6jBAEPwH,SAAU,CACN3G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,26BAEPyH,SAAU,CACN5G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uvCAEP0H,SAAU,CACN7G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,ymDAEP2H,UAAW,CACP9G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,+7DAEP4H,aAAc,CACV/G,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,80CAEP6H,aAAc,CACVhH,MAAO,GACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y1DAEP8H,aAAc,CACVjH,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,isCAEP+H,mBAAoB,CAChBlH,MAAO,GACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,g3BAEPgI,iBAAkB,CACdnH,MAAO,GACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,42BAEPiI,SAAU,CACNpH,MAAO,GACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,khCAEPkI,cAAe,CACXrH,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,umDAEPmI,aAAc,CACVtH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4/BAEPoI,kBAAmB,CACfvH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gvCAEPqI,gBAAiB,CACbxH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yjCAEPsI,mBAAoB,CAChBzH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0xBAEPuI,oBAAqB,CACjB1H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,unCAEPwI,2BAA4B,CACxB3H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4wCAEPyI,oCAAqC,CACjC5H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yyCAEP0I,8BAA+B,CAC3B7H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,goDAEP2I,mCAAoC,CAChC9H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6zCAEP4I,wCAAyC,CACrC/H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q3CAEP6I,4CAA6C,CACzChI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oqDAEP8I,gCAAiC,CAC7BjI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,85CAEP+I,eAAgB,CACZlI,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ycAEPgJ,aAAc,CACVnI,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0XAEPiJ,gBAAiB,CACbpI,OAAQ,GACRC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,mXAEPkJ,0BAA2B,CACvBrI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,urBAEPmJ,0BAA2B,CACvBtI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0sBAEPoJ,yBAA0B,CACtBvI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+kBAEPqJ,iBAAkB,CACdxI,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u5FAEPsJ,gBAAiB,CACbzI,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,u5EAEPuJ,gBAAiB,CACb1I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6VAEPwJ,mBAAoB,CAChB3I,OAAQ,EACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,odAEPyJ,iBAAkB,CACd5I,MAAO,GACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iYAEP0J,mBAAoB,CAChB7I,MAAO,GACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8YAGX2J,WAAY,gBACZC,WAAY,IACZC,YAAa,4BDvlCbC,QDNyB,CACzBC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnBtK,OAAQ,CACJuK,eAAgB,CACZC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbC,mBAAoB,CAChBH,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbE,cAAe,CACXJ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbG,mBAAoB,CAChBL,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEbI,oBAAqB,CACjBN,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbK,oBAAqB,CACjBP,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbM,qBAAsB,CAClBR,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbO,uBAAwB,CACpBT,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEbQ,wBAAyB,CACrBV,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbS,6BAA8B,CAC1BX,gBAAiB,IACjBC,aAAc,IACdC,QAAS,KAEbU,UAAW,CACPZ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbW,iBAAkB,CACdb,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElB1G,gBAAiB,CACbyG,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEd7G,eAAgB,CACZ2G,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBY,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,EACPC,OAAQ,KAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,EACNC,OAAQ,MAKxBE,WAAY,CACRN,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACNC,WAAY,CACRC,SAAU,GACVtB,QAAS,EACTuB,cAAe,EACfC,cAAe,IAEnBC,gBAAiB,CACbH,QAAS,GACTtB,QAAS,EACTuB,cAAe,EACfC,cAAe,IAEnBE,kBAAmB,CACfJ,QAAS,GACTtB,QAAS,EACTuB,cAAe,EACfC,cAAe,IAEnBG,gBAAiB,CACbL,QAAS,GACTtB,QAAS,EACTuB,cAAe,EACfC,cAAe,GAEnBI,qBAAsB,CAClBN,QAAS,GACTtB,QAAS,GACTuB,cAAe,EACfC,cAAe,GAEnBK,UAAW,CACPP,QAAS,EACTtB,SAAU,EACVuB,cAAe,GACfC,cAAe,GAEnBM,gBAAiB,CACbR,QAAS,EACTtB,SAAU,EACVuB,cAAe,GACfC,cAAe,GAEnBO,cAAe,CACXT,QAAS,EACTtB,SAAU,EACVuB,cAAe,GACfC,cAAe,GAEnBQ,UAAW,CACPV,QAAS,GACTtB,QAAS,EACTuB,cAAe,EACfC,cAAe,IAEnBS,cAAe,CACXX,QAAS,EACTtB,QAAS,EACTuB,cAAe,EACfC,cAAe,IAEnBU,WAAY,CACRZ,QAAS,GACTtB,QAAS,EACTuB,cAAe,EACfC,cAAe,IAGvBW,YAAa,CACTC,QAAS,CACLvB,MAAO,GAEXwB,UAAW,CACPxB,MAAO,IAGfyB,aAAc,CAAC,EAEfC,OAAQ,CAEJC,WAAY,EAEZC,QAAS,GAEbC,aAAc,CACVjI,wBAAyB,CACrBmE,QAAS,GAEblE,wBAAyB,CACrBkE,QAAS,IAGjB+D,QAAS,CACLP,QAAS,CACLzC,QAAS,EACTiD,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACHrD,QAAS,IACTiD,eAAe,IACfC,gBAAiB,IACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACTzD,QAAS,GAEb1J,KAAM,CACFmN,QAAS,IAEbpN,MAAO,CACHoN,QAAS,KAGjBC,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACNnL,uBAAwB,CACpBuL,kBAAmB,EACnBC,oBAAqB,GAEzBvL,wBAAyB,CACrBsL,kBAAmB,EACnBC,oBAAqB,GAEzBzL,wBAAyB,CACrBwL,kBAAmB,EACnBC,oBAAqB,GAEzB5L,cAAe,CACX2L,mBAAoB,EACpBC,oBAAqB,GAEzB3L,eAAgB,CACZ0L,mBAAoB,EACpBC,oBAAqB,GAEzB7L,eAAgB,CACZ4L,mBAAoB,EACpBC,oBAAqB,GAEzB/L,aAAc,CACV8L,mBAAoB,KACpBC,oBAAqB,MAEzB9L,cAAe,CACX6L,mBAAoB,EACpBC,oBAAqB,GAEzBC,oBAAqB,CACjBD,qBAAsB,EACtBD,kBAAmB,KAI/BG,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACb5E,YAAa,EACb6E,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvB9O,OAAQ,CACJW,KAAM,CACFgL,QAAS,EACTwB,OAAQ,GAEZzM,MAAO,CACHiL,QAAS,GAEboD,KAAM,CACFpD,QAAS,IACTqD,WAAY,CACRrD,QAAS,IAGjBL,aAAc,CAAC,EACfO,WAAY,CACRjL,MAAO,CACHuM,OAAQ,MAGhB8B,iBAAkB,CAAC,EACnBC,eAAgB,CAAC,EACjBC,gBAAiB,CACbpG,mBAAoB,CAChB4C,QAAS,KAEb7C,iBAAkB,CACd6C,QAAS,MAGjByD,cAAe,CACXrG,mBAAoB,CAChB4C,QAAS,EACTwB,OAAQ,GAEZrE,iBAAkB,CACd6C,QAAS,EACTwB,OAAQ,IAGhBkC,SAAU,CACN5O,eAAgB,CACZ0M,OAAQ,GAEZlH,gBAAiB,CAAC,EAClBvF,MAAO,CACHiL,QAAS,EACTwB,OAAQ,GAEZxM,KAAM,CACFgL,QAAS,EACTwB,OAAQ,GAEZ5F,cAAe,CACXoE,QAAS,EACTwB,OAAQ,GAEZ3F,aAAc,CAAC,EACfC,kBAAmB,CAAC,EACpBC,gBAAiB,CACbiE,QAAS,GAEbhE,mBAAoB,CAChBgE,QAAS,IAGjBoC,SAAU,CAAC,EACXjE,YAAa,CACTwF,MAAO,O","sources":["webpack://VexFlowFont.Gonville/webpack/universalModuleDefinition","webpack://VexFlowFont.Gonville/webpack/bootstrap","webpack://VexFlowFont.Gonville/webpack/runtime/define property getters","webpack://VexFlowFont.Gonville/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Gonville/./src/fonts/common_metrics.ts","webpack://VexFlowFont.Gonville/./entry/vexflow-font-gonville.ts","webpack://VexFlowFont.Gonville/./src/fonts/gonville_glyphs.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Gonville\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CommonMetrics } from '../src/fonts/common_metrics';\nimport { GonvilleSmuflFont } from '../src/fonts/gonville_glyphs';\nexport const Font = {\n data: GonvilleSmuflFont,\n metrics: CommonMetrics,\n};\nexport default Font;\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","glyphs","bracketTop","x_min","x_max","y_min","y_max","ha","bracketBottom","barlineTick","breathMarkTick","segno","coda","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleX","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arrowheadBlackUp","arrowheadBlackDown","fontFamily","resolution","generatedOn","metrics","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","csymDiminished","leftSideBearing","advanceWidth","yOffset","csymHalfDiminished","csymAugmented","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","csymMajorSeventh","clef_default","width","annotations","treble","line","shiftX","bass","clef_small","ornament","brassScoop","xOffset","stemUpYOffset","reportedWidth","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","parenthesis","default","gracenote","pedalMarking","digits","shiftLine","shiftY","articulation","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","noteHead","minPadding","stem","heightAdjustmentForFlag","offsetYBaseStemUp","offsetYBaseStemDown","noteheadSquareWhite","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","clefNote_default","clefNote_small","stroke_straight","stroke_wiggly","textNote","scale"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-leland.js b/build/cjs/vexflow-font-leland.js new file mode 100644 index 0000000000..f116dc57d5 --- /dev/null +++ b/build/cjs/vexflow-font-leland.js @@ -0,0 +1,2 @@ +!function(b,l){"object"==typeof exports&&"object"==typeof module?module.exports=l():"function"==typeof define&&define.amd?define([],l):"object"==typeof exports?exports.VexFlowFont=l():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Leland=l())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(l,m)=>{for(var a in m)b.o(m,a)&&!b.o(l,a)&&Object.defineProperty(l,a,{enumerable:!0,get:m[a]})},o:(b,l)=>Object.prototype.hasOwnProperty.call(b,l)},l={};b.d(l,{default:()=>m});const m={data:{glyphs:{bracketTop:{x_min:0,x_max:491,y_min:0,y_max:279,ha:279,o:"m 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z"},bracketBottom:{x_min:0,x_max:491,y_min:-279,y_max:0,ha:279,o:"m 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z"},segno:{x_min:0,x_max:654,y_min:0,y_max:869,ha:869,o:"m 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z"},coda:{x_min:0,x_max:745,y_min:-113,y_max:735,ha:848,o:"m 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z"},gClef:{x_min:0,x_max:640,y_min:-666,y_max:1112,ha:1778,o:"m 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z"},cClef:{x_min:0,x_max:627,y_min:-480,y_max:482,ha:962,o:"m 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z"},fClef:{x_min:0,x_max:664,y_min:-617,y_max:251,ha:868,o:"m 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z"},unpitchedPercussionClef1:{x_min:0,x_max:352,y_min:-252,y_max:252,ha:504,o:"m 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z"},"6stringTabClef":{x_min:0,x_max:439,y_min:-743,y_max:746,ha:1489,o:"m 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z"},timeSig0:{x_min:15,x_max:389,y_min:-254,y_max:255,ha:509,o:"m 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z"},timeSig1:{x_min:15,x_max:336,y_min:-243,y_max:245,ha:488,o:"m 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z"},timeSig2:{x_min:15,x_max:377,y_min:-243,y_max:245,ha:488,o:"m 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z"},timeSig3:{x_min:15,x_max:364,y_min:-244,y_max:244,ha:488,o:"m 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z"},timeSig4:{x_min:14,x_max:442,y_min:-248,y_max:249,ha:497,o:"m 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z"},timeSig5:{x_min:15,x_max:362,y_min:-244,y_max:246,ha:490,o:"m 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z"},timeSig6:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z"},timeSig7:{x_min:15,x_max:366,y_min:-250,y_max:251,ha:501,o:"m 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z"},timeSig8:{x_min:15,x_max:393,y_min:-248,y_max:246,ha:494,o:"m 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z"},timeSig9:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z"},timeSigCommon:{x_min:0,x_max:463,y_min:-256,y_max:258,ha:514,o:"m 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z"},timeSigCutCommon:{x_min:0,x_max:463,y_min:-376,y_max:388,ha:764,o:"m 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z"},timeSigPlus:{x_min:0,x_max:408,y_min:-204,y_max:204,ha:408,o:"m 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z"},noteheadDoubleWhole:{x_min:0,x_max:538,y_min:-178,y_max:179,ha:357,o:"m 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z"},noteheadWhole:{x_min:0,x_max:373,y_min:-134,y_max:136,ha:270,o:"m 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z"},noteheadHalf:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z"},noteheadBlack:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z"},noteheadXBlack:{x_min:0,x_max:325,y_min:-132,y_max:132,ha:264,o:"m 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z"},noteheadCircleX:{x_min:0,x_max:325,y_min:-162,y_max:163,ha:325,o:"m 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:432,y_min:-179,y_max:177,ha:356,o:"m 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z"},noteheadSquareWhite:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadSquareBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadTriangleUpBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 223 176 l 0 -196 l 446 -196 z"},noteheadSlashedDoubleWhole1:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z"},noteheadSlashedWhole1:{x_min:-75,x_max:448,y_min:-211,y_max:214,ha:425,o:"m 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z"},noteheadSlashedHalf1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z"},noteheadSlashedBlack1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z"},noteheadSlashedDoubleWhole2:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z"},noteheadSlashedWhole2:{x_min:-75,x_max:448,y_min:-212,y_max:214,ha:426,o:"m 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z"},noteheadSlashedHalf2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z"},noteheadSlashedBlack2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:373,y_min:-178,y_max:179,ha:357,o:"m 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z"},noteheadDiamondWhole:{x_min:0,x_max:373,y_min:-133,y_max:132,ha:265,o:"m 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z"},noteheadDiamondHalf:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z"},noteheadDiamondBlack:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z"},noteheadParenthesisRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},noteheadParenthesisLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},noteheadMoonBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 0 176 l 0 -196 l 488 -196 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 488 176 l 0 -196 l 488 -196 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z"},tremolo1:{x_min:0,x_max:290,y_min:-93,y_max:96,ha:189,o:"m 0 48 l 0 -134 l 418 -43 l 418 138 z"},flag8thUp:{x_min:0,x_max:289,y_min:-817,y_max:12,ha:829,o:"m 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z"},flag8thDown:{x_min:0,x_max:309,y_min:-12,y_max:817,ha:829,o:"m 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z"},flag16thUp:{x_min:0,x_max:279,y_min:-820,y_max:12,ha:832,o:"m 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z"},flag16thDown:{x_min:0,x_max:309,y_min:-26,y_max:803,ha:829,o:"m 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag32ndUp:{x_min:0,x_max:279,y_min:-821,y_max:186,ha:1007,o:"m 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z"},flag32ndDown:{x_min:0,x_max:309,y_min:-216,y_max:803,ha:1019,o:"m 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag64thUp:{x_min:0,x_max:279,y_min:-822,y_max:373,ha:1195,o:"m 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z"},flag64thDown:{x_min:0,x_max:309,y_min:-403,y_max:804,ha:1207,o:"m 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z"},flag128thUp:{x_min:0,x_max:279,y_min:-821,y_max:573,ha:1394,o:"m 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z"},flag128thDown:{x_min:0,x_max:309,y_min:-591,y_max:803,ha:1394,o:"m 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z"},accidentalFlat:{x_min:0,x_max:203,y_min:-176,y_max:453,ha:629,o:"m 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z"},accidentalNatural:{x_min:0,x_max:171,y_min:-323,y_max:325,ha:648,o:"m 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z"},accidentalSharp:{x_min:0,x_max:244,y_min:-333,y_max:334,ha:667,o:"m 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z"},accidentalDoubleSharp:{x_min:0,x_max:275,y_min:-137,y_max:138,ha:275,o:"m 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z"},accidentalDoubleFlat:{x_min:0,x_max:371,y_min:-176,y_max:453,ha:629,o:"m 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z"},accidentalParensLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},accidentalParensRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:193,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-176,y_max:452,ha:628,o:"m 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:180,y_min:-316,y_max:320,ha:636,o:"m 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:290,y_min:-328,y_max:339,ha:667,o:"m 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z"},accidentalBuyukMucennebFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:348,y_min:-332,y_max:334,ha:666,o:"m 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z"},accidentalBakiyeFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:348,y_min:-316,y_max:318,ha:634,o:"m 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z"},articAccentAbove:{x_min:0,x_max:361,y_min:0,y_max:235,ha:235,o:"m 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z"},articAccentBelow:{x_min:0,x_max:361,y_min:-235,y_max:0,ha:235,o:"m 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z"},articTenutoAbove:{x_min:0,x_max:316,y_min:0,y_max:46,ha:46,o:"m 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z"},articTenutoBelow:{x_min:0,x_max:316,y_min:-46,y_max:0,ha:46,o:"m 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z"},articStaccatoAbove:{x_min:0,x_max:78,y_min:0,y_max:78,ha:78,o:"m 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z"},articStaccatoBelow:{x_min:0,x_max:78,y_min:-78,y_max:0,ha:78,o:"m 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z"},articStaccatissimoAbove:{x_min:0,x_max:127,y_min:0,y_max:248,ha:248,o:"m 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z"},articStaccatissimoBelow:{x_min:0,x_max:127,y_min:-248,y_max:0,ha:248,o:"m 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z"},articMarcatoAbove:{x_min:1,x_max:296,y_min:0,y_max:253,ha:253,o:"m 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z"},articMarcatoBelow:{x_min:0,x_max:295,y_min:-253,y_max:0,ha:253,o:"m 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z"},fermataAbove:{x_min:0,x_max:622,y_min:0,y_max:368,ha:368,o:"m 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z"},fermataBelow:{x_min:0,x_max:622,y_min:-368,y_max:0,ha:368,o:"m 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z"},fermataLongAbove:{x_min:0,x_max:623,y_min:0,y_max:368,ha:368,o:"m 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z"},fermataLongBelow:{x_min:0,x_max:623,y_min:-368,y_max:0,ha:368,o:"m 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z"},fermataVeryLongAbove:{x_min:0,x_max:842,y_min:0,y_max:549,ha:549,o:"m 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z"},fermataVeryLongBelow:{x_min:0,x_max:842,y_min:-549,y_max:0,ha:549,o:"m 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z"},fermataShortAbove:{x_min:0,x_max:642,y_min:0,y_max:454,ha:454,o:"m 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z"},fermataShortBelow:{x_min:0,x_max:642,y_min:-454,y_max:0,ha:454,o:"m 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z"},breathMarkComma:{x_min:0,x_max:191,y_min:0,y_max:321,ha:321,o:"m 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z"},caesura:{x_min:0,x_max:380,y_min:0,y_max:490,ha:490,o:"m 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z"},caesuraCurved:{x_min:0,x_max:368,y_min:0,y_max:491,ha:491,o:"m 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z"},restMaxima:{x_min:0,x_max:450,y_min:-250,y_max:250,ha:500,o:"m 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:-11,y_max:262,ha:273,o:"m 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z"},restWhole:{x_min:0,x_max:325,y_min:-131,y_max:5,ha:136,o:"m 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z"},restWholeLegerLine:{x_min:-139,x_max:464,y_min:-122,y_max:14,ha:136,o:"m 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z"},restHalf:{x_min:0,x_max:325,y_min:-4,y_max:132,ha:136,o:"m 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z"},restHalfLegerLine:{x_min:-139,x_max:464,y_min:-14,y_max:122,ha:136,o:"m 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z"},restQuarter:{x_min:0,x_max:235,y_min:-331,y_max:401,ha:732,o:"m 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z"},rest8th:{x_min:0,x_max:276,y_min:-255,y_max:204,ha:459,o:"m 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z"},rest16th:{x_min:1,x_max:344,y_min:-507,y_max:204,ha:711,o:"m 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z"},rest32nd:{x_min:0,x_max:391,y_min:-507,y_max:460,ha:967,o:"m 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z"},rest64th:{x_min:0,x_max:423,y_min:-758,y_max:464,ha:1222,o:"m 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z"},rest128th:{x_min:-1,x_max:475,y_min:-759,y_max:717,ha:1476,o:"m 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z"},dynamicPiano:{x_min:-95,x_max:317,y_min:-163,y_max:263,ha:426,o:"m 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z"},dynamicMezzo:{x_min:-7,x_max:374,y_min:-2,y_max:251,ha:253,o:"m 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z"},dynamicForte:{x_min:-137,x_max:334,y_min:-193,y_max:421,ha:614,o:"m -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z"},dynamicRinforzando:{x_min:-12,x_max:230,y_min:0,y_max:254,ha:254,o:"m 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z"},dynamicSforzando:{x_min:0,x_max:208,y_min:-5,y_max:263,ha:268,o:"m 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z"},dynamicZ:{x_min:-42,x_max:239,y_min:-1,y_max:258,ha:259,o:"m 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z"},ornamentTrill:{x_min:-12,x_max:383,y_min:0,y_max:383,ha:383,o:"m 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z"},ornamentTurn:{x_min:0,x_max:456,y_min:0,y_max:232,ha:232,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentTurnSlash:{x_min:0,x_max:456,y_min:-80,y_max:313,ha:393,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentMordent:{x_min:0,x_max:473,y_min:-77,y_max:316,ha:393,o:"m 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentShortTrill:{x_min:0,x_max:473,y_min:0,y_max:248,ha:248,o:"m 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentTremblement:{x_min:0,x_max:654,y_min:0,y_max:248,ha:248,o:"m 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:680,y_min:0,y_max:388,ha:388,o:"m 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:662,y_min:-158,y_max:248,ha:406,o:"m 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:662,y_min:-158,y_max:321,ha:479,o:"m 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:662,y_min:0,y_max:406,ha:406,o:"m 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:857,y_min:0,y_max:248,ha:248,o:"m 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:565,y_min:-171,y_max:249,ha:420,o:"m 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z"},brassMuteClosed:{x_min:0,x_max:312,y_min:0,y_max:312,ha:312,o:"m 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z"},brassMuteOpen:{x_min:0,x_max:280,y_min:0,y_max:280,ha:280,o:"m 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z"},stringsDownBow:{x_min:0,x_max:315,y_min:0,y_max:293,ha:293,o:"m 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z"},stringsUpBow:{x_min:0,x_max:262,y_min:0,y_max:343,ha:343,o:"m 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z"},stringsHarmonic:{x_min:0,x_max:181,y_min:0,y_max:181,ha:181,o:"m 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z"},keyboardPedalPed:{x_min:0,x_max:981,y_min:-10,y_max:545,ha:555,o:"m 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z"},keyboardPedalUp:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:242,y_min:0,y_max:164,ha:164,o:"m 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z"},repeat1Bar:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z"},repeat2Bars:{x_min:0,x_max:735,y_min:-250,y_max:250,ha:500,o:"m 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z"},repeat4Bars:{x_min:0,x_max:1243,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z"},repeatBarSlash:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 693 360 l 511 360 l 0 -360 l 181 -360 z"},csymDiminished:{x_min:0,x_max:501,y_min:0,y_max:501,ha:501,o:"m 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z"},csymHalfDiminished:{x_min:-1,x_max:502,y_min:-1,y_max:502,ha:503,o:"m 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z"},csymAugmented:{x_min:1,x_max:321,y_min:90,y_max:410,ha:320,o:"m 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z"},csymMajorSeventh:{x_min:0,x_max:500,y_min:10,y_max:490,ha:480,o:"m 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:160,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:416,y_min:-176,y_max:452,ha:628,o:"m 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"}},fontFamily:"Leland",resolution:1e3,generatedOn:"2022-12-19T23:52:37.756Z"},metrics:{smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}}};return l=l.default})())); +//# sourceMappingURL=vexflow-font-leland.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-leland.js.map b/build/cjs/vexflow-font-leland.js.map new file mode 100644 index 0000000000..81a10c01a6 --- /dev/null +++ b/build/cjs/vexflow-font-leland.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-font-leland.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAU,OAAIC,IAClF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCQP,EAJoB,CAChBI,KCLsB,CACtBC,OAAQ,CACJC,WAAY,CACRC,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2NAEPkB,cAAe,CACXL,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,kPAEPmB,MAAO,CACHN,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4vCAEPoB,KAAM,CACFP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qnBAEPqB,MAAO,CACHR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,qxCAEPsB,MAAO,CACHT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2mCAEPuB,MAAO,CACHV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s/BAEPwB,yBAA0B,CACtBX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP,iBAAkB,CACda,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,g3BAEPyB,SAAU,CACNZ,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0PAEP0B,SAAU,CACNb,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+XAEP2B,SAAU,CACNd,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sxBAEP4B,SAAU,CACNf,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,msBAEP6B,SAAU,CACNhB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4xBAEP8B,SAAU,CACNjB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2gCAEP+B,SAAU,CACNlB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6jBAEPgC,SAAU,CACNnB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,suBAEPiC,SAAU,CACNpB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,scAEPkC,SAAU,CACNrB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6kBAEPmC,cAAe,CACXtB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhBAEPoC,iBAAkB,CACdvB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uwBAEPqC,YAAa,CACTxB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6TAEPsC,oBAAqB,CACjBzB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qxCAEPuC,cAAe,CACX1B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8UAEPwC,aAAc,CACV3B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mRAEPyC,cAAe,CACX5B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gHAEP0C,eAAgB,CACZ7B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ohBAEP2C,gBAAiB,CACb9B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8YAEP4C,0BAA2B,CACvB/B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iXAEP6C,oBAAqB,CACjBhC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qFAEP8C,oBAAqB,CACjBjC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2CAEP+C,wBAAyB,CACrBlC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mCAEPgD,4BAA6B,CACzBnC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,msCAEPiD,sBAAuB,CACnBpC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8vBAEPkD,qBAAsB,CAClBrC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w7BAEPmD,sBAAuB,CACnBtC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ubAEPoD,4BAA6B,CACzBvC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kzCAEPqD,sBAAuB,CACnBxC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iwBAEPsD,qBAAsB,CAClBzC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u6BAEPuD,sBAAuB,CACnB1C,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wcAEPwD,2BAA4B,CACxB3C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ghBAEPyD,qBAAsB,CAClB5C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6TAEP0D,oBAAqB,CACjB7C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iRAEP2D,qBAAsB,CAClB9C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yOAEP4D,yBAA0B,CACtB/C,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gSAEP6D,wBAAyB,CACrBhD,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+TAEP8D,kBAAmB,CACfjD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+EAEP+D,0BAA2B,CACvBlD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iCAEPgE,2BAA4B,CACxBnD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mCAEPiE,+BAAgC,CAC5BpD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qEAEPkE,gBAAiB,CACbrD,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,gGAEPmE,SAAU,CACNtD,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,yCAEPoE,UAAW,CACPvD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,kcAEPqE,YAAa,CACTxD,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qYAEPsE,WAAY,CACRzD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,0rBAEPuE,aAAc,CACV1D,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0lBAEPwE,WAAY,CACR3D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,68BAEPyE,aAAc,CACV5D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,s0BAEP0E,WAAY,CACR7D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,ktCAEP2E,aAAc,CACV9D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,6lCAEP4E,YAAa,CACT/D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,u5CAEP6E,cAAe,CACXhE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,q3CAEP8E,eAAgB,CACZjE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sZAEP+E,kBAAmB,CACflE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oRAEPgF,gBAAiB,CACbnE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2nBAEPiF,sBAAuB,CACnBpE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,spBAEPkF,qBAAsB,CAClBrE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6yBAEPmF,qBAAsB,CAClBtE,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+TAEPoF,sBAAuB,CACnBvE,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gSAEPqF,+BAAgC,CAC5BxE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,maAEPsF,0CAA2C,CACvCzE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q1BAEPuF,gCAAiC,CAC7B1E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qfAEPwF,sCAAuC,CACnC3E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wuBAEPyF,4BAA6B,CACzB5E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0kBAEP0F,6BAA8B,CAC1B7E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g/BAEP2F,qBAAsB,CAClB9E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8fAEP4F,6BAA8B,CAC1B/E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,o3BAEP6F,iBAAkB,CACdhF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8NAEP8F,iBAAkB,CACdjF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,yPAEP+F,iBAAkB,CACdlF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,iHAEPgG,iBAAkB,CACdnF,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,EACPC,GAAI,GACJjB,EAAG,6HAEPiG,mBAAoB,CAChBpF,MAAO,EACPC,MAAO,GACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,iGAEPkG,mBAAoB,CAChBrF,MAAO,EACPC,MAAO,GACPC,OAAQ,GACRC,MAAO,EACPC,GAAI,GACJjB,EAAG,0GAEPmG,wBAAyB,CACrBtF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,oQAEPoG,wBAAyB,CACrBvF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,iSAEPqG,kBAAmB,CACfxF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6KAEPsG,kBAAmB,CACfzF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,oLAEPuG,aAAc,CACV1F,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0ZAEPwG,aAAc,CACV3F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,ycAEPyG,iBAAkB,CACd5F,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qOAEP0G,iBAAkB,CACd7F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4PAEP2G,qBAAsB,CAClB9F,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0WAEP4G,qBAAsB,CAClB/F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,2YAEP6G,kBAAmB,CACfhG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2UAEP8G,kBAAmB,CACfjG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,8WAEP+G,gBAAiB,CACblG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2OAEPgH,QAAS,CACLnG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sXAEPiH,cAAe,CACXpG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2YAEPkH,WAAY,CACRrG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPmH,gBAAiB,CACbtG,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mIAEPoH,UAAW,CACPvG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,qIAEPqH,mBAAoB,CAChBxG,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,yJAEPsH,SAAU,CACNzG,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+HAEPuH,kBAAmB,CACf1G,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iJAEPwH,YAAa,CACT3G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,05BAEPyH,QAAS,CACL5G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iXAEP0H,SAAU,CACN7G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+gBAEP2H,SAAU,CACN9G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mrBAEP4H,SAAU,CACN/G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,i9BAEP6H,UAAW,CACPhH,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,irCAEP8H,aAAc,CACVjH,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yyBAEP+H,aAAc,CACVlH,OAAQ,EACRC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,urCAEPgI,aAAc,CACVnH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,slCAEPiI,mBAAoB,CAChBpH,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wpBAEPkI,iBAAkB,CACdrH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ogBAEPmI,SAAU,CACNtH,OAAQ,GACRC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ijCAEPoI,cAAe,CACXvH,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,42BAEPqI,aAAc,CACVxH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0fAEPsI,kBAAmB,CACfzH,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oqBAEPuI,gBAAiB,CACb1H,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6eAEPwI,mBAAoB,CAChB3H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+SAEPyI,oBAAqB,CACjB5H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0dAEP0I,2BAA4B,CACxB7H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wkBAEP2I,oCAAqC,CACjC9H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,45BAEP4I,8BAA+B,CAC3B/H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g7BAEP6I,mCAAoC,CAChChI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,orBAEP8I,wCAAyC,CACrCjI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uxBAEP+I,gCAAiC,CAC7BlI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uqBAEPgJ,gBAAiB,CACbnI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6QAEPiJ,cAAe,CACXpI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,oNAEPkJ,eAAgB,CACZrI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sHAEPmJ,aAAc,CACVtI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPoJ,gBAAiB,CACbvI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEPqJ,0BAA2B,CACvBxI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yVAEPsJ,0BAA2B,CACvBzI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yVAEPuJ,iBAAkB,CACd1I,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ozEAEPwJ,gBAAiB,CACb3I,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iuFAEPyJ,mBAAoB,CAChB5I,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mjBAEP0J,WAAY,CACR7I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kRAEP2J,YAAa,CACT9I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qUAEP4J,YAAa,CACT/I,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0aAEP6J,eAAgB,CACZhJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6CAEP8J,eAAgB,CACZjJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iUAEP+J,mBAAoB,CAChBlJ,OAAQ,EACRC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8bAEPgK,cAAe,CACXnJ,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yHAEPiK,iBAAkB,CACdpJ,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6DAEPkK,6BAA8B,CAC1BrJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qXAEPmK,oCAAqC,CACjCtJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8vBAGXoK,WAAY,SACZC,WAAY,IACZC,YAAa,4BD/pCbC,QDNyB,CACzBC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnB/K,OAAQ,CACJmJ,eAAgB,CACZ6B,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEb9B,mBAAoB,CAChB4B,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEb7B,cAAe,CACX2B,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbC,mBAAoB,CAChBH,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEbE,oBAAqB,CACjBJ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbG,oBAAqB,CACjBL,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbI,qBAAsB,CAClBN,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbK,uBAAwB,CACpBP,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEbM,wBAAyB,CACrBR,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbO,6BAA8B,CAC1BT,gBAAiB,IACjBC,aAAc,IACdC,QAAS,KAEbQ,UAAW,CACPV,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEb5B,iBAAkB,CACd0B,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElB5G,gBAAiB,CACb2G,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEd/G,eAAgB,CACZ6G,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBS,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,EACPC,OAAQ,KAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,EACNC,OAAQ,MAKxBE,WAAY,CACRN,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACNC,WAAY,CACRC,SAAU,GACVnB,QAAS,EACToB,cAAe,EACfC,cAAe,IAEnBC,gBAAiB,CACbH,QAAS,GACTnB,QAAS,EACToB,cAAe,EACfC,cAAe,IAEnBE,kBAAmB,CACfJ,QAAS,GACTnB,QAAS,EACToB,cAAe,EACfC,cAAe,IAEnBG,gBAAiB,CACbL,QAAS,GACTnB,QAAS,EACToB,cAAe,EACfC,cAAe,GAEnBI,qBAAsB,CAClBN,QAAS,GACTnB,QAAS,GACToB,cAAe,EACfC,cAAe,GAEnBK,UAAW,CACPP,QAAS,EACTnB,SAAU,EACVoB,cAAe,GACfC,cAAe,GAEnBlE,gBAAiB,CACbgE,QAAS,EACTnB,SAAU,EACVoB,cAAe,GACfC,cAAe,GAEnBjE,cAAe,CACX+D,QAAS,EACTnB,SAAU,EACVoB,cAAe,GACfC,cAAe,GAEnBM,UAAW,CACPR,QAAS,GACTnB,QAAS,EACToB,cAAe,EACfC,cAAe,IAEnBO,cAAe,CACXT,QAAS,EACTnB,QAAS,EACToB,cAAe,EACfC,cAAe,IAEnBQ,WAAY,CACRV,QAAS,GACTnB,QAAS,EACToB,cAAe,EACfC,cAAe,IAGvBS,YAAa,CACTC,QAAS,CACLrB,MAAO,GAEXsB,UAAW,CACPtB,MAAO,IAGfuB,aAAc,CAAC,EAEfC,OAAQ,CAEJC,WAAY,EAEZC,QAAS,GAEbC,aAAc,CACV/H,wBAAyB,CACrBuE,QAAS,GAEbtE,wBAAyB,CACrBsE,QAAS,IAGjByD,QAAS,CACLP,QAAS,CACLnC,QAAS,EACT2C,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACH/C,QAAS,IACT2C,eAAe,IACfC,gBAAiB,IACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACTnD,QAAS,GAEbrK,KAAM,CACFwN,QAAS,IAEbzN,MAAO,CACHyN,QAAS,KAGjBC,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACNI,uBAAwB,CACpBC,kBAAmB,EACnBC,oBAAqB,GAEzBpM,wBAAyB,CACrBmM,kBAAmB,EACnBC,oBAAqB,GAEzBC,wBAAyB,CACrBF,kBAAmB,EACnBC,oBAAqB,GAEzBE,cAAe,CACXH,mBAAoB,EACpBC,oBAAqB,GAEzBzM,eAAgB,CACZwM,mBAAoB,EACpBC,oBAAqB,GAEzBG,eAAgB,CACZJ,mBAAoB,EACpBC,oBAAqB,GAEzB3M,aAAc,CACV0M,mBAAoB,KACpBC,oBAAqB,MAEzB1M,cAAe,CACXyM,mBAAoB,EACpBC,oBAAqB,GAEzBtM,oBAAqB,CACjBsM,qBAAsB,EACtBD,kBAAmB,KAI/BK,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACbzE,YAAa,EACb0E,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvBpP,OAAQ,CACJS,KAAM,CACFuL,QAAS,EACTsB,OAAQ,GAEZ9M,MAAO,CACHwL,QAAS,GAEbqD,KAAM,CACFrD,QAAS,IACTsD,WAAY,CACRtD,QAAS,IAGjBL,aAAc,CAAC,EACfO,WAAY,CACRxL,MAAO,CACH4M,OAAQ,MAGhBiC,iBAAkB,CAAC,EACnBC,eAAgB,CAAC,EACjBC,gBAAiB,CACbC,mBAAoB,CAChB1D,QAAS,KAEb2D,iBAAkB,CACd3D,QAAS,MAGjB4D,cAAe,CACXF,mBAAoB,CAChB1D,QAAS,EACTsB,OAAQ,GAEZqC,iBAAkB,CACd3D,QAAS,EACTsB,OAAQ,IAGhBuC,SAAU,CACNC,eAAgB,CACZxC,OAAQ,GAEZlH,gBAAiB,CAAC,EAClB5F,MAAO,CACHwL,QAAS,EACTsB,OAAQ,GAEZ7M,KAAM,CACFuL,QAAS,EACTsB,OAAQ,GAEZ7F,cAAe,CACXuE,QAAS,EACTsB,OAAQ,GAEZ5F,aAAc,CAAC,EACfC,kBAAmB,CAAC,EACpBC,gBAAiB,CACboE,QAAS,GAEbnE,mBAAoB,CAChBmE,QAAS,IAGjBkC,SAAU,CAAC,EACX3D,YAAa,CACTwF,MAAO,O","sources":["webpack://VexFlowFont.Leland/webpack/universalModuleDefinition","webpack://VexFlowFont.Leland/webpack/bootstrap","webpack://VexFlowFont.Leland/webpack/runtime/define property getters","webpack://VexFlowFont.Leland/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Leland/./src/fonts/common_metrics.ts","webpack://VexFlowFont.Leland/./entry/vexflow-font-leland.ts","webpack://VexFlowFont.Leland/./src/fonts/leland_glyphs.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Leland\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CommonMetrics } from '../src/fonts/common_metrics';\nimport { LelandFont } from '../src/fonts/leland_glyphs';\nexport const Font = {\n data: LelandFont,\n metrics: CommonMetrics,\n};\nexport default Font;\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","glyphs","bracketTop","x_min","x_max","y_min","y_max","ha","bracketBottom","segno","coda","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXBlack","noteheadCircleX","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKucukMucennebSharp","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompTrillLowerSuffix","brassMuteClosed","brassMuteOpen","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","keyboardPedalPed","keyboardPedalUp","wiggleArpeggiatoUp","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","fontFamily","resolution","generatedOn","metrics","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","leftSideBearing","advanceWidth","yOffset","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","clef_default","width","annotations","treble","line","shiftX","bass","clef_small","ornament","brassScoop","xOffset","stemUpYOffset","reportedWidth","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassFlip","brassJazzTurn","brassSmear","parenthesis","default","gracenote","pedalMarking","digits","shiftLine","shiftY","articulation","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","noteHead","minPadding","stem","heightAdjustmentForFlag","noteheadTriangleUpHalf","offsetYBaseStemUp","offsetYBaseStemDown","noteheadTriangleUpWhole","noteheadXHalf","noteheadXWhole","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","textNote","breathMarkTick","scale"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-petaluma.js b/build/cjs/vexflow-font-petaluma.js new file mode 100644 index 0000000000..ec73748806 --- /dev/null +++ b/build/cjs/vexflow-font-petaluma.js @@ -0,0 +1,2 @@ +!function(b,m){"object"==typeof exports&&"object"==typeof module?module.exports=m():"function"==typeof define&&define.amd?define([],m):"object"==typeof exports?exports.VexFlowFont=m():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Petaluma=m())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(m,a)=>{for(var l in a)b.o(a,l)&&!b.o(m,l)&&Object.defineProperty(m,l,{enumerable:!0,get:a[l]})},o:(b,m)=>Object.prototype.hasOwnProperty.call(b,m)},m={};b.d(m,{default:()=>a});const a={data:{glyphs:{bracketTop:{x_min:0,x_max:508,y_min:0,y_max:370,ha:370,o:"m 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z"},bracketBottom:{x_min:0,x_max:496,y_min:-393,y_max:0,ha:393,o:"m 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z"},barlineTick:{x_min:0,x_max:56,y_min:877,y_max:1122,ha:245,o:"m 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z"},breathMarkTick:{x_min:0,x_max:568,y_min:0,y_max:621,ha:621,o:"m 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z"},segno:{x_min:0,x_max:798,y_min:-65,y_max:806,ha:871,o:"m 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z"},coda:{x_min:0,x_max:1380,y_min:-196,y_max:1037,ha:1233,o:"m 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z"},gClef:{x_min:0,x_max:664,y_min:-559,y_max:1009,ha:1568,o:"m 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z"},cClef:{x_min:0,x_max:731,y_min:-543,y_max:543,ha:1086,o:"m 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z"},fClef:{x_min:0,x_max:776,y_min:-496,y_max:216,ha:712,o:"m 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z"},unpitchedPercussionClef1:{x_min:0,x_max:379,y_min:-250,y_max:250,ha:500,o:"m 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z"},"6stringTabClef":{x_min:0,x_max:438,y_min:-768,y_max:767,ha:1535,o:"m 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z"},timeSig0:{x_min:20,x_max:513,y_min:-358,y_max:359,ha:717,o:"m 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z"},timeSig1:{x_min:20,x_max:283,y_min:-364,y_max:366,ha:730,o:"m 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z"},timeSig2:{x_min:20,x_max:660,y_min:-379,y_max:382,ha:761,o:"m 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z"},timeSig3:{x_min:20,x_max:540,y_min:-392,y_max:392,ha:784,o:"m 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z"},timeSig4:{x_min:20,x_max:633,y_min:-490,y_max:491,ha:981,o:"m 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z"},timeSig5:{x_min:20,x_max:583,y_min:-389,y_max:389,ha:778,o:"m 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z"},timeSig6:{x_min:20,x_max:565,y_min:-363,y_max:363,ha:726,o:"m 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z"},timeSig7:{x_min:20,x_max:592,y_min:-345,y_max:345,ha:690,o:"m 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z"},timeSig8:{x_min:20,x_max:504,y_min:-428,y_max:428,ha:856,o:"m 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z"},timeSig9:{x_min:20,x_max:494,y_min:-421,y_max:421,ha:842,o:"m 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z"},timeSigCommon:{x_min:20,x_max:585,y_min:-298,y_max:294,ha:592,o:"m 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z"},timeSigCutCommon:{x_min:20,x_max:695,y_min:-687,y_max:687,ha:1374,o:"m 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z"},timeSigPlus:{x_min:0,x_max:661,y_min:-358,y_max:358,ha:716,o:"m 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z"},timeSigPlusSmall:{x_min:0,x_max:418,y_min:-197,y_max:199,ha:396,o:"m 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z"},timeSigMinus:{x_min:0,x_max:662,y_min:-54,y_max:55,ha:109,o:"m 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z"},timeSigParensRight:{x_min:0,x_max:274,y_min:-723,y_max:725,ha:1448,o:"m 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z"},timeSigParensRightSmall:{x_min:0,x_max:154,y_min:-422,y_max:422,ha:844,o:"m 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z"},timeSigParensLeft:{x_min:1,x_max:400,y_min:-728,y_max:728,ha:1456,o:"m 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z"},timeSigParensLeftSmall:{x_min:0,x_max:173,y_min:-405,y_max:404,ha:809,o:"m 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z"},noteheadDoubleWhole:{x_min:0,x_max:614,y_min:-223,y_max:223,ha:446,o:"m 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z"},noteheadWhole:{x_min:0,x_max:380,y_min:-186,y_max:165,ha:351,o:"m 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z"},noteheadHalf:{x_min:0,x_max:334,y_min:-174,y_max:175,ha:349,o:"m 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z"},noteheadBlack:{x_min:0,x_max:334,y_min:-164,y_max:164,ha:328,o:"m 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z"},noteheadXDoubleWhole:{x_min:0,x_max:730,y_min:-266,y_max:267,ha:533,o:"m 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z"},noteheadXWhole:{x_min:0,x_max:506,y_min:-143,y_max:144,ha:287,o:"m 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z"},noteheadXHalf:{x_min:0,x_max:421,y_min:-146,y_max:151,ha:297,o:"m 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z"},noteheadXBlack:{x_min:0,x_max:289,y_min:-156,y_max:157,ha:313,o:"m 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:437,y_min:-220,y_max:219,ha:439,o:"m 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z"},noteheadCircleXWhole:{x_min:0,x_max:323,y_min:-190,y_max:184,ha:374,o:"m 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z"},noteheadCircleXHalf:{x_min:0,x_max:309,y_min:-179,y_max:179,ha:358,o:"m 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z"},noteheadCircleX:{x_min:0,x_max:344,y_min:-179,y_max:175,ha:354,o:"m 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:672,y_min:-291,y_max:291,ha:582,o:"m 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z"},noteheadCircledWhole:{x_min:-50,x_max:472,y_min:-231,y_max:232,ha:463,o:"m 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z"},noteheadCircledHalf:{x_min:-50,x_max:393,y_min:-175,y_max:175,ha:350,o:"m 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z"},noteheadCircledBlack:{x_min:-70,x_max:326,y_min:-168,y_max:192,ha:360,o:"m 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:474,y_min:-209,y_max:211,ha:420,o:"m 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z"},noteheadSquareWhite:{x_min:0,x_max:350,y_min:-131,y_max:131,ha:262,o:"m 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z"},noteheadSquareBlack:{x_min:0,x_max:342,y_min:-130,y_max:132,ha:262,o:"m 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z"},noteheadTriangleDownWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z"},noteheadTriangleDownHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z"},noteheadTriangleDownBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z"},noteheadTriangleUpWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z"},noteheadTriangleUpHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z"},noteheadTriangleUpBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:697,y_min:-290,y_max:290,ha:580,o:"m 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z"},noteheadSlashedWhole1:{x_min:-76,x_max:498,y_min:-168,y_max:168,ha:336,o:"m -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z"},noteheadSlashedHalf1:{x_min:-79,x_max:471,y_min:-184,y_max:184,ha:368,o:"m -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z"},noteheadSlashedBlack1:{x_min:-110,x_max:452,y_min:-190,y_max:190,ha:380,o:"m -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:697,y_min:-295,y_max:295,ha:590,o:"m 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z"},noteheadSlashedWhole2:{x_min:-83,x_max:510,y_min:-201,y_max:198,ha:399,o:"m 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z"},noteheadSlashedHalf2:{x_min:-73,x_max:454,y_min:-188,y_max:188,ha:376,o:"m 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z"},noteheadSlashedBlack2:{x_min:-84,x_max:405,y_min:-189,y_max:189,ha:378,o:"m 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:429,y_min:-221,y_max:221,ha:442,o:"m 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z"},noteheadDiamondWhole:{x_min:0,x_max:271,y_min:-132,y_max:132,ha:264,o:"m 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z"},noteheadDiamondHalf:{x_min:0,x_max:295,y_min:-148,y_max:148,ha:296,o:"m 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z"},noteheadDiamondBlack:{x_min:0,x_max:310,y_min:-146,y_max:146,ha:292,o:"m 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z"},noteheadParenthesis:{x_min:-70,x_max:329,y_min:-196,y_max:201,ha:397,o:"m 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z"},noteheadParenthesisRight:{x_min:-30,x_max:82,y_min:-199,y_max:206,ha:405,o:"m -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z"},noteheadParenthesisLeft:{x_min:0,x_max:106,y_min:-197,y_max:197,ha:394,o:"m 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z"},noteheadMoonBlack:{x_min:0,x_max:328,y_min:-125,y_max:125,ha:250,o:"m 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:391,y_min:-142,y_max:142,ha:284,o:"m 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z"},noteheadTriangleRightBlack:{x_min:0,x_max:398,y_min:-139,y_max:140,ha:279,o:"m 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:334,y_min:-134,y_max:136,ha:270,o:"m 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z"},augmentationDot:{x_min:0,x_max:96,y_min:-57,y_max:57,ha:114,o:"m 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z"},tremolo1:{x_min:-158,x_max:156,y_min:-88,y_max:88,ha:176,o:"m -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z"},flag8thUp:{x_min:0,x_max:261,y_min:-819,y_max:0,ha:819,o:"m 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z"},flag8thDown:{x_min:0,x_max:261,y_min:0,y_max:819,ha:819,o:"m 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z"},flag16thUp:{x_min:0,x_max:327,y_min:-819,y_max:0,ha:819,o:"m 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z"},flag16thDown:{x_min:0,x_max:327,y_min:0,y_max:819,ha:819,o:"m 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z"},flag32ndUp:{x_min:0,x_max:268,y_min:-849,y_max:149,ha:999,o:"m 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z"},flag32ndDown:{x_min:-3,x_max:268,y_min:-169,y_max:829,ha:999,o:"m 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z"},flag64thUp:{x_min:-4,x_max:282,y_min:-824,y_max:347,ha:1171,o:"m 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z"},flag64thDown:{x_min:-5,x_max:281,y_min:-375,y_max:796,ha:1171,o:"m 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z"},flag128thUp:{x_min:0,x_max:252,y_min:-804,y_max:530,ha:1334,o:"m 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z"},flag128thDown:{x_min:-1,x_max:252,y_min:-580,y_max:754,ha:1334,o:"m 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z"},accidentalFlat:{x_min:1,x_max:209,y_min:-208,y_max:472,ha:680,o:"m 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z"},accidentalNatural:{x_min:0,x_max:214,y_min:-456,y_max:462,ha:918,o:"m 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z"},accidentalSharp:{x_min:-22,x_max:390,y_min:-384,y_max:383,ha:767,o:"m 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z"},accidentalDoubleSharp:{x_min:0,x_max:287,y_min:-159,y_max:159,ha:318,o:"m 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z"},accidentalDoubleFlat:{x_min:0,x_max:359,y_min:-220,y_max:446,ha:666,o:"m 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z"},accidentalParensLeft:{x_min:0,x_max:130,y_min:-270,y_max:268,ha:538,o:"m 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z"},accidentalParensRight:{x_min:0,x_max:139,y_min:-275,y_max:277,ha:552,o:"m 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:208,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalThreeQuarterTonesSharpStein:{x_min:-23,x_max:388,y_min:-373,y_max:445,ha:818,o:"m 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z"},accidentalBuyukMucennebFlat:{x_min:2,x_max:287,y_min:-248,y_max:432,ha:680,o:"m 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z"},accidentalBuyukMucennebSharp:{x_min:-1,x_max:467,y_min:-460,y_max:350,ha:810,o:"m 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z"},accidentalBakiyeFlat:{x_min:2,x_max:287,y_min:-236,y_max:444,ha:680,o:"m 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z"},accidentalKomaSharp:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:359,y_min:-420,y_max:343,ha:763,o:"m 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z"},accidentalKoron:{x_min:0,x_max:303,y_min:-462,y_max:180,ha:642,o:"m 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z"},accidentalSori:{x_min:0,x_max:434,y_min:-295,y_max:325,ha:620,o:"m 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z"},articAccentAbove:{x_min:0,x_max:425,y_min:0,y_max:326,ha:326,o:"m 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z"},articAccentBelow:{x_min:0,x_max:425,y_min:-326,y_max:0,ha:326,o:"m 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z"},articTenutoAbove:{x_min:0,x_max:471,y_min:0,y_max:56,ha:56,o:"m 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z"},articTenutoBelow:{x_min:0,x_max:471,y_min:-59,y_max:-3,ha:56,o:"m 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z"},articStaccatoAbove:{x_min:1,x_max:112,y_min:0,y_max:156,ha:156,o:"m 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z"},articStaccatoBelow:{x_min:1,x_max:112,y_min:-156,y_max:0,ha:156,o:"m 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z"},articStaccatissimoAbove:{x_min:0,x_max:139,y_min:0,y_max:411,ha:411,o:"m 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z"},articStaccatissimoBelow:{x_min:0,x_max:139,y_min:-411,y_max:0,ha:411,o:"m 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z"},articMarcatoAbove:{x_min:0,x_max:396,y_min:0,y_max:328,ha:328,o:"m 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z"},articMarcatoBelow:{x_min:0,x_max:396,y_min:-328,y_max:0,ha:328,o:"m 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z"},fermataAbove:{x_min:0,x_max:472,y_min:2,y_max:454,ha:452,o:"m 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z"},fermataBelow:{x_min:0,x_max:519,y_min:-430,y_max:-1,ha:429,o:"m 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z"},fermataLongAbove:{x_min:0,x_max:591,y_min:-6,y_max:337,ha:343,o:"m 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z"},fermataLongBelow:{x_min:0,x_max:602,y_min:-335,y_max:7,ha:342,o:"m 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:-14,y_max:437,ha:451,o:"m 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z"},fermataVeryLongBelow:{x_min:0,x_max:686,y_min:-427,y_max:30,ha:457,o:"m 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z"},fermataVeryShortAbove:{x_min:0,x_max:711,y_min:-31,y_max:496,ha:527,o:"m 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z"},fermataVeryShortBelow:{x_min:0,x_max:697,y_min:-475,y_max:13,ha:488,o:"m 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z"},fermataShortAbove:{x_min:0,x_max:545,y_min:-18,y_max:348,ha:366,o:"m 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z"},fermataShortBelow:{x_min:0,x_max:565,y_min:-335,y_max:10,ha:345,o:"m 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z"},breathMarkComma:{x_min:0,x_max:148,y_min:0,y_max:275,ha:275,o:"m 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z"},breathMarkUpbow:{x_min:0,x_max:254,y_min:0,y_max:595,ha:595,o:"m 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z"},caesura:{x_min:0,x_max:566,y_min:0,y_max:562,ha:563,o:"m 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z"},caesuraCurved:{x_min:0,x_max:386,y_min:-10,y_max:584,ha:594,o:"m 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z"},restMaxima:{x_min:0,x_max:366,y_min:-255,y_max:255,ha:510,o:"m 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z"},restDoubleWhole:{x_min:0,x_max:122,y_min:0,y_max:249,ha:249,o:"m 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z"},restWhole:{x_min:1,x_max:500,y_min:-120,y_max:14,ha:134,o:"m 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z"},restWholeLegerLine:{x_min:-197,x_max:685,y_min:-157,y_max:29,ha:186,o:"m 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z"},restHalf:{x_min:0,x_max:518,y_min:0,y_max:162,ha:162,o:"m 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z"},restHalfLegerLine:{x_min:-120,x_max:448,y_min:-20,y_max:143,ha:163,o:"m 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z"},restQuarter:{x_min:0,x_max:263,y_min:-415,y_max:415,ha:830,o:"m 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z"},rest8th:{x_min:0,x_max:289,y_min:-260,y_max:261,ha:521,o:"m 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z"},rest16th:{x_min:0,x_max:333,y_min:-328,y_max:244,ha:572,o:"m 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z"},rest32nd:{x_min:0,x_max:347,y_min:-498,y_max:483,ha:981,o:"m 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z"},rest64th:{x_min:0,x_max:428,y_min:-720,y_max:474,ha:1194,o:"m 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z"},rest128th:{x_min:1,x_max:491,y_min:-711,y_max:719,ha:1430,o:"m 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z"},dynamicPiano:{x_min:-49,x_max:327,y_min:-142,y_max:515,ha:657,o:"m -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z"},dynamicMezzo:{x_min:-18,x_max:559,y_min:-50,y_max:365,ha:415,o:"m 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z"},dynamicForte:{x_min:-144,x_max:311,y_min:-115,y_max:504,ha:619,o:"m -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z"},dynamicRinforzando:{x_min:-75,x_max:322,y_min:-90,y_max:325,ha:415,o:"m 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z"},dynamicSforzando:{x_min:0,x_max:296,y_min:0,y_max:379,ha:379,o:"m 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z"},dynamicZ:{x_min:-43,x_max:331,y_min:0,y_max:328,ha:328,o:"m -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z"},ornamentTrill:{x_min:1,x_max:551,y_min:-18,y_max:539,ha:557,o:"m 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z"},ornamentTurn:{x_min:0,x_max:574,y_min:0,y_max:312,ha:312,o:"m 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z"},ornamentTurnSlash:{x_min:0,x_max:574,y_min:-106,y_max:405,ha:511,o:"m 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z"},ornamentMordent:{x_min:0,x_max:700,y_min:0,y_max:497,ha:497,o:"m 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z"},ornamentShortTrill:{x_min:0,x_max:747,y_min:0,y_max:243,ha:243,o:"m 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z"},ornamentTremblement:{x_min:0,x_max:982,y_min:0,y_max:224,ha:224,o:"m 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1066,y_min:-50,y_max:533,ha:583,o:"m 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:1088,y_min:-380,y_max:252,ha:632,o:"m 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1185,y_min:-380,y_max:465,ha:845,o:"m 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:1003,y_min:-20,y_max:521,ha:541,o:"m 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1246,y_min:-30,y_max:296,ha:326,o:"m 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1226,y_min:-237,y_max:436,ha:673,o:"m 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:833,y_min:-309,y_max:319,ha:628,o:"m 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z"},brassScoop:{x_min:0,x_max:312,y_min:-390,y_max:28,ha:418,o:"m 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z"},brassDoitMedium:{x_min:0,x_max:476,y_min:-50,y_max:333,ha:383,o:"m 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z"},brassFallLipShort:{x_min:0,x_max:298,y_min:-344,y_max:65,ha:409,o:"m 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z"},brassLiftMedium:{x_min:0,x_max:807,y_min:0,y_max:838,ha:838,o:"m 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z"},brassFallRoughMedium:{x_min:0,x_max:791,y_min:0,y_max:819,ha:819,o:"m 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z"},brassBend:{x_min:0,x_max:381,y_min:0,y_max:367,ha:367,o:"m 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z"},brassMuteClosed:{x_min:0,x_max:274,y_min:0,y_max:260,ha:260,o:"m 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z"},brassMuteOpen:{x_min:1,x_max:313,y_min:0,y_max:309,ha:309,o:"m 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z"},brassFlip:{x_min:0,x_max:402,y_min:0,y_max:361,ha:361,o:"m 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z"},brassJazzTurn:{x_min:0,x_max:646,y_min:0,y_max:212,ha:212,o:"m 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z"},brassSmear:{x_min:0,x_max:334,y_min:0,y_max:151,ha:151,o:"m 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z"},stringsDownBow:{x_min:0,x_max:306,y_min:0,y_max:366,ha:366,o:"m 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z"},stringsUpBow:{x_min:0,x_max:219,y_min:0,y_max:489,ha:489,o:"m 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z"},stringsHarmonic:{x_min:0,x_max:191,y_min:0,y_max:202,ha:202,o:"m 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:201,y_min:0,y_max:325,ha:325,o:"m 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:211,y_min:0,y_max:307,ha:307,o:"m 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:271,y_min:0,y_max:284,ha:284,o:"m 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z"},keyboardPedalPed:{x_min:0,x_max:944,y_min:-13,y_max:550,ha:563,o:"m 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z"},keyboardPedalUp:{x_min:0,x_max:437,y_min:0,y_max:461,ha:461,o:"m 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z"},pictChokeCymbal:{x_min:1,x_max:147,y_min:0,y_max:242,ha:242,o:"m 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:300,y_min:0,y_max:176,ha:176,o:"m 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z"},arpeggiatoUp:{x_min:0,x_max:262,y_min:0,y_max:1459,ha:1459,o:"m 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z"},arpeggiatoDown:{x_min:0,x_max:218,y_min:0,y_max:1440,ha:1440,o:"m 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z"},repeat1Bar:{x_min:0,x_max:599,y_min:-250,y_max:175,ha:425,o:"m 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z"},repeat2Bars:{x_min:0,x_max:775,y_min:-247,y_max:363,ha:610,o:"m 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z"},repeat4Bars:{x_min:0,x_max:1374,y_min:-304,y_max:304,ha:608,o:"m 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z"},repeatBarSlash:{x_min:0,x_max:630,y_min:-225,y_max:265,ha:490,o:"m 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z"},csymDiminished:{x_min:0,x_max:506,y_min:0,y_max:500,ha:500,o:"m 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z"},csymHalfDiminished:{x_min:-32,x_max:496,y_min:-33,y_max:492,ha:525,o:"m -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z"},csymAugmented:{x_min:0,x_max:530,y_min:0,y_max:539,ha:539,o:"m 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z"},csymMajorSeventh:{x_min:0,x_max:593,y_min:0,y_max:569,ha:569,o:"m 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z"},csymMinor:{x_min:0,x_max:482,y_min:193,y_max:265,ha:72,o:"m 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z"},csymParensLeftTall:{x_min:0,x_max:185,y_min:0,y_max:1034,ha:1034,o:"m 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z"},csymParensRightTall:{x_min:-40,x_max:189,y_min:0,y_max:1058,ha:1058,o:"m 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z"},csymBracketLeftTall:{x_min:0,x_max:328,y_min:2,y_max:807,ha:805,o:"m 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z"},csymBracketRightTall:{x_min:1,x_max:306,y_min:0,y_max:829,ha:829,o:"m 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:116,y_min:0,y_max:934,ha:934,o:"m 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z"},csymParensRightVeryTall:{x_min:-20,x_max:111,y_min:0,y_max:1009,ha:1009,o:"m -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:990,y_min:-27,y_max:1028,ha:1054,o:"m 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:208,y_min:-231,y_max:449,ha:680,o:"m 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:335,y_min:-231,y_max:449,ha:680,o:"m 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z"},accidentalWilsonPlus:{x_min:0,x_max:298,y_min:-218,y_max:218,ha:436,o:"m 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z"},accidentalWilsonMinus:{x_min:0,x_max:284,y_min:-163,y_max:163,ha:326,o:"m 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z"}},fontFamily:"Petaluma",resolution:1e3,generatedOn:"2022-12-18T09:07:50.817Z"},metrics:{smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}}};return m=m.default})())); +//# sourceMappingURL=vexflow-font-petaluma.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-petaluma.js.map b/build/cjs/vexflow-font-petaluma.js.map new file mode 100644 index 0000000000..27827495d6 --- /dev/null +++ b/build/cjs/vexflow-font-petaluma.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vexflow-font-petaluma.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAY,SAAIC,IACpF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCQP,EAJoB,CAChBI,KCLwB,CACxBC,OAAQ,CACJC,WAAY,CACRC,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6WAEPkB,cAAe,CACXL,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,scAEPmB,YAAa,CACTN,MAAO,EACPC,MAAO,GACPC,MAAO,IACPC,MAAO,KACPC,GAAI,IACJjB,EAAG,gLAEPoB,eAAgB,CACZP,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,smBAEPqB,MAAO,CACHR,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u0DAEPsB,KAAM,CACFT,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,mrDAEPuB,MAAO,CACHV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,87DAEPwB,MAAO,CACHX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,soFAEPyB,MAAO,CACHZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qqCAEP0B,yBAA0B,CACtBb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ytBAEP,iBAAkB,CACda,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,u3EAEP2B,SAAU,CACNd,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ooBAEP4B,SAAU,CACNf,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2gBAEP6B,SAAU,CACNhB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wnCAEP8B,SAAU,CACNjB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4iCAEP+B,SAAU,CACNlB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kkCAEPgC,SAAU,CACNnB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,46BAEPiC,SAAU,CACNpB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w7BAEPkC,SAAU,CACNrB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8mBAEPmC,SAAU,CACNtB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w/BAEPoC,SAAU,CACNvB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,k2BAEPqC,cAAe,CACXxB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g3BAEPsC,iBAAkB,CACdzB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,wwDAEPuC,YAAa,CACT1B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mwBAEPwC,iBAAkB,CACd3B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uuBAEPyC,aAAc,CACV5B,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,kRAEP0C,mBAAoB,CAChB7B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,gfAEP2C,wBAAyB,CACrB9B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+bAEP4C,kBAAmB,CACf/B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,qhBAEP6C,uBAAwB,CACpBhC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oZAEP8C,oBAAqB,CACjBjC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u3DAEP+C,cAAe,CACXlC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,weAEPgD,aAAc,CACVnC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wbAEPiD,cAAe,CACXpC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gMAEPkD,qBAAsB,CAClBrC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mjFAEPmD,eAAgB,CACZtC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wpCAEPoD,cAAe,CACXvC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kjCAEPqD,eAAgB,CACZxC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8rBAEPsD,2BAA4B,CACxBzC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uxDAEPuD,qBAAsB,CAClB1C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0jCAEPwD,oBAAqB,CACjB3C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gwBAEPyD,gBAAiB,CACb5C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2sBAEP0D,2BAA4B,CACxB7C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wlEAEP2D,qBAAsB,CAClB9C,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+hCAEP4D,oBAAqB,CACjB/C,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,whCAEP6D,qBAAsB,CAClBhD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2tBAEP8D,0BAA2B,CACvBjD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qiCAEP+D,oBAAqB,CACjBlD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qwBAEPgE,oBAAqB,CACjBnD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yUAEPiE,gCAAiC,CAC7BpD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhDAEPkE,0BAA2B,CACvBrD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qeAEPmE,yBAA0B,CACtBtD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,idAEPoE,0BAA2B,CACvBvD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEPqE,8BAA+B,CAC3BxD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q/CAEPsE,wBAAyB,CACrBzD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ieAEPuE,uBAAwB,CACpB1D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oeAEPwE,wBAAyB,CACrB3D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPyE,4BAA6B,CACzB5D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wjEAEP0E,sBAAuB,CACnB7D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s3BAEP2E,qBAAsB,CAClB9D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s1BAEP4E,sBAAuB,CACnB/D,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ysBAEP6E,4BAA6B,CACzBhE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kvDAEP8E,sBAAuB,CACnBjE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,o4BAEP+E,qBAAsB,CAClBlE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yyBAEPgF,sBAAuB,CACnBnE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wpBAEPiF,2BAA4B,CACxBpE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0/CAEPkF,qBAAsB,CAClBrE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ggBAEPmF,oBAAqB,CACjBtE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,glBAEPoF,qBAAsB,CAClBvE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2TAEPqF,oBAAqB,CACjBxE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ivBAEPsF,yBAA0B,CACtBzE,OAAQ,GACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wYAEPuF,wBAAyB,CACrB1E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sWAEPwF,kBAAmB,CACf3E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8QAEPyF,0BAA2B,CACvB5E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2VAEP0F,2BAA4B,CACxB7E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qPAEP2F,+BAAgC,CAC5B9E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yRAEP4F,gBAAiB,CACb/E,MAAO,EACPC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,8PAEP6F,SAAU,CACNhF,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,qUAEP8F,UAAW,CACPjF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,2lBAEP+F,YAAa,CACTlF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8hBAEPgG,WAAY,CACRnF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,0vBAEPiG,aAAc,CACVpF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+pBAEPkG,WAAY,CACRrF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0gCAEPmG,aAAc,CACVtF,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,m7BAEPoG,WAAY,CACRvF,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,q+CAEPqG,aAAc,CACVxF,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,q5CAEPsG,YAAa,CACTzF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,yhDAEPuG,cAAe,CACX1F,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,4+CAEPwG,eAAgB,CACZ3F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ipBAEPyG,kBAAmB,CACf5F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+xBAEP0G,gBAAiB,CACb7F,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sgDAEP2G,sBAAuB,CACnB9F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,msBAEP4G,qBAAsB,CAClB/F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4yCAEP6G,qBAAsB,CAClBhG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oYAEP8G,sBAAuB,CACnBjG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yYAEP+G,+BAAgC,CAC5BlG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0qBAEPgH,0CAA2C,CACvCnG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q2CAEPiH,gCAAiC,CAC7BpG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w3BAEPkH,sCAAuC,CACnCrG,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,87DAEPmH,4BAA6B,CACzBtG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,glCAEPoH,6BAA8B,CAC1BvG,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0hEAEPqH,qBAAsB,CAClBxG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,47BAEPsH,oBAAqB,CACjBzG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w3BAEPuH,6BAA8B,CAC1B1G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4wCAEPwH,gBAAiB,CACb3G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,idAEPyH,eAAgB,CACZ5G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kpCAEP0H,iBAAkB,CACd7G,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qdAEP2H,iBAAkB,CACd9G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,+fAEP4H,iBAAkB,CACd/G,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,yTAEP6H,iBAAkB,CACdhH,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,OAAQ,EACRC,GAAI,GACJjB,EAAG,6WAEP8H,mBAAoB,CAChBjH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wOAEP+H,mBAAoB,CAChBlH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4QAEPgI,wBAAyB,CACrBnH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,gQAEPiI,wBAAyB,CACrBpH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,qSAEPkI,kBAAmB,CACfrH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mbAEPmI,kBAAmB,CACftH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,8dAEPoI,aAAc,CACVvH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qtBAEPqI,aAAc,CACVxH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,EACRC,GAAI,IACJjB,EAAG,gtBAEPsI,iBAAkB,CACdzH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gpBAEPuI,iBAAkB,CACd1H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,47BAEPwI,qBAAsB,CAClB3H,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ypCAEPyI,qBAAsB,CAClB5H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,42CAEP0I,sBAAuB,CACnB7H,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wgCAEP2I,sBAAuB,CACnB9H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,skCAEP4I,kBAAmB,CACf/H,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2lBAEP6I,kBAAmB,CACfhI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,gqBAEP8I,gBAAiB,CACbjI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2YAEP+I,gBAAiB,CACblI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qeAEPgJ,QAAS,CACLnI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wgBAEPiJ,cAAe,CACXpI,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0rBAEPkJ,WAAY,CACRrI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qjBAEPmJ,gBAAiB,CACbtI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPoJ,UAAW,CACPvI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,0TAEPqJ,mBAAoB,CAChBxI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,mpBAEPsJ,SAAU,CACNzI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4PAEPuJ,kBAAmB,CACf1I,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iqBAEPwJ,YAAa,CACT3I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y+BAEPyJ,QAAS,CACL5I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qkBAEP0J,SAAU,CACN7I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,26BAEP2J,SAAU,CACN9I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yxCAEP4J,SAAU,CACN/I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,uiDAEP6J,UAAW,CACPhJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,upDAEP8J,aAAc,CACVjJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ijCAEP+J,aAAc,CACVlJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,woCAEPgK,aAAc,CACVnJ,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,i+BAEPiK,mBAAoB,CAChBpJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,omBAEPkK,iBAAkB,CACdrJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+3BAEPmK,SAAU,CACNtJ,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8uBAEPoK,cAAe,CACXvJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,21CAEPqK,aAAc,CACVxJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,q3BAEPsK,kBAAmB,CACfzJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mrCAEPuK,gBAAiB,CACb1J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4mCAEPwK,mBAAoB,CAChB3J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,84BAEPyK,oBAAqB,CACjB5J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,spCAEP0K,2BAA4B,CACxB7J,MAAO,EACPC,MAAO,KACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,45CAEP2K,oCAAqC,CACjC9J,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,m5CAEP4K,8BAA+B,CAC3B/J,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,snEAEP6K,mCAAoC,CAChChK,MAAO,EACPC,MAAO,KACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8lDAEP8K,wCAAyC,CACrCjK,MAAO,EACPC,MAAO,KACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s4CAEP+K,4CAA6C,CACzClK,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,suDAEPgL,gCAAiC,CAC7BnK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0yCAEPiL,WAAY,CACRpK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,oPAEPkL,gBAAiB,CACbrK,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kRAEPmL,kBAAmB,CACftK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,iUAEPoL,gBAAiB,CACbvK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ooCAEPqL,qBAAsB,CAClBxK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ovDAEPsL,UAAW,CACPzK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4nBAEPuL,gBAAiB,CACb1K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4gBAEPwL,cAAe,CACX3K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0bAEPyL,UAAW,CACP5K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEP0L,cAAe,CACX7K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,szBAEP2L,WAAY,CACR9K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kXAEP4L,eAAgB,CACZ/K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mmBAEP6L,aAAc,CACVhL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uVAEP8L,gBAAiB,CACbjL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iTAEP+L,0BAA2B,CACvBlL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,meAEPgM,0BAA2B,CACvBnL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,skBAEPiM,yBAA0B,CACtBpL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+aAEPkM,iBAAkB,CACdrL,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q6EAEPmM,gBAAiB,CACbtL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mjCAEPoM,gBAAiB,CACbvL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8TAEPqM,mBAAoB,CAChBxL,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2eAEPsM,aAAc,CACVzL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,28DAEPuM,eAAgB,CACZ1L,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,qmEAEPwM,WAAY,CACR3L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w2BAEPyM,YAAa,CACT5L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g7BAEP0M,YAAa,CACT7L,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,koEAEP2M,eAAgB,CACZ9L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sXAEP4M,eAAgB,CACZ/L,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0bAEP6M,mBAAoB,CAChBhM,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g+BAEP8M,cAAe,CACXjM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,umBAEP+M,iBAAkB,CACdlM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6jBAEPgN,UAAW,CACPnM,MAAO,EACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,iQAEPiN,mBAAoB,CAChBpM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,qfAEPkN,oBAAqB,CACjBrM,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,8eAEPmN,oBAAqB,CACjBtM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kqBAEPoN,qBAAsB,CAClBvM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mrBAEPqN,uBAAwB,CACpBxM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ocAEPsN,wBAAyB,CACrBzM,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,iaAEPuN,6BAA8B,CAC1B1M,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,6YAEPwN,6BAA8B,CAC1B3M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4qBAEPyN,oCAAqC,CACjC5M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uyCAEP0N,qBAAsB,CAClB7M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wmBAEP2N,sBAAuB,CACnB9M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yQAGX4N,WAAY,WACZC,WAAY,IACZC,YAAa,4BD/lDbC,QDNyB,CACzBC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnBvO,OAAQ,CACJiM,eAAgB,CACZuC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbxC,mBAAoB,CAChBsC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbvC,cAAe,CACXqC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbpC,mBAAoB,CAChBkC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEbnC,oBAAqB,CACjBiC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEblC,oBAAqB,CACjBgC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbjC,qBAAsB,CAClB+B,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbhC,uBAAwB,CACpB8B,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEb/B,wBAAyB,CACrB6B,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEb9B,6BAA8B,CAC1B4B,gBAAiB,IACjBC,aAAc,IACdC,QAAS,KAEbrC,UAAW,CACPmC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbtC,iBAAkB,CACdoC,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElB1I,gBAAiB,CACbyI,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEd7I,eAAgB,CACZ2I,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBC,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,EACPC,OAAQ,KAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,EACNC,OAAQ,MAKxBE,WAAY,CACRN,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHF,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACN7E,WAAY,CACR8E,SAAU,GACVV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnB/E,gBAAiB,CACb6E,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnB9E,kBAAmB,CACf4E,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnB7E,gBAAiB,CACb2E,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,GAEnB5E,qBAAsB,CAClB0E,QAAS,GACTV,QAAS,GACTW,cAAe,EACfC,cAAe,GAEnB3E,UAAW,CACPyE,QAAS,EACTV,SAAU,EACVW,cAAe,GACfC,cAAe,GAEnB1E,gBAAiB,CACbwE,QAAS,EACTV,SAAU,EACVW,cAAe,GACfC,cAAe,GAEnBzE,cAAe,CACXuE,QAAS,EACTV,SAAU,EACVW,cAAe,GACfC,cAAe,GAEnBxE,UAAW,CACPsE,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnBvE,cAAe,CACXqE,QAAS,EACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAEnBtE,WAAY,CACRoE,QAAS,GACTV,QAAS,EACTW,cAAe,EACfC,cAAe,IAGvBC,YAAa,CACTC,QAAS,CACLZ,MAAO,GAEXa,UAAW,CACPb,MAAO,IAGfc,aAAc,CAAC,EAEfC,OAAQ,CAEJC,WAAY,EAEZC,QAAS,GAEbC,aAAc,CACVzI,wBAAyB,CACrBkG,QAAS,GAEbjG,wBAAyB,CACrBiG,QAAS,IAGjBwC,QAAS,CACLP,QAAS,CACLlB,QAAS,EACT0B,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACH9B,QAAS,IACT0B,eAAe,IACfC,gBAAiB,IACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACTlC,QAAS,GAEb3N,KAAM,CACF6P,QAAS,IAEb9P,MAAO,CACH8P,QAAS,KAGjBC,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACN7M,uBAAwB,CACpBiN,kBAAmB,EACnBC,oBAAqB,GAEzBjN,wBAAyB,CACrBgN,kBAAmB,EACnBC,oBAAqB,GAEzBnN,wBAAyB,CACrBkN,kBAAmB,EACnBC,oBAAqB,GAEzBrO,cAAe,CACXoO,mBAAoB,EACpBC,oBAAqB,GAEzBpO,eAAgB,CACZmO,mBAAoB,EACpBC,oBAAqB,GAEzBtO,eAAgB,CACZqO,mBAAoB,EACpBC,oBAAqB,GAEzBzO,aAAc,CACVwO,mBAAoB,KACpBC,oBAAqB,MAEzBxO,cAAe,CACXuO,mBAAoB,EACpBC,oBAAqB,GAEzB1N,oBAAqB,CACjB0N,qBAAsB,EACtBD,kBAAmB,KAI/BE,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACbpD,YAAa,EACbqD,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvBvR,OAAQ,CACJW,KAAM,CACFqO,QAAS,EACTa,OAAQ,GAEZnP,MAAO,CACHsO,QAAS,GAEbwC,KAAM,CACFxC,QAAS,IACTyC,WAAY,CACRzC,QAAS,IAGjBL,aAAc,CAAC,EACfO,WAAY,CACRtO,MAAO,CACHiP,OAAQ,MAGhB6B,iBAAkB,CAAC,EACnBC,eAAgB,CAAC,EACjBC,gBAAiB,CACbC,mBAAoB,CAChB7C,QAAS,KAEb8C,iBAAkB,CACd9C,QAAS,MAGjB+C,cAAe,CACXF,mBAAoB,CAChB7C,QAAS,EACTa,OAAQ,GAEZiC,iBAAkB,CACd9C,QAAS,EACTa,OAAQ,IAGhBmC,SAAU,CACNvR,eAAgB,CACZoP,OAAQ,GAEZ1H,gBAAiB,CAAC,EAClBzH,MAAO,CACHsO,QAAS,EACTa,OAAQ,GAEZlP,KAAM,CACFqO,QAAS,EACTa,OAAQ,GAEZpG,cAAe,CACXuF,QAAS,EACTa,OAAQ,GAEZnG,aAAc,CAAC,EACfC,kBAAmB,CAAC,EACpBC,gBAAiB,CACboF,QAAS,GAEbnF,mBAAoB,CAChBmF,QAAS,IAGjByB,SAAU,CAAC,EACX1C,YAAa,CACTkE,MAAO,O","sources":["webpack://VexFlowFont.Petaluma/webpack/universalModuleDefinition","webpack://VexFlowFont.Petaluma/webpack/bootstrap","webpack://VexFlowFont.Petaluma/webpack/runtime/define property getters","webpack://VexFlowFont.Petaluma/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Petaluma/./src/fonts/common_metrics.ts","webpack://VexFlowFont.Petaluma/./entry/vexflow-font-petaluma.ts","webpack://VexFlowFont.Petaluma/./src/fonts/petaluma_glyphs.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Petaluma\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CommonMetrics } from '../src/fonts/common_metrics';\nimport { PetalumaFont } from '../src/fonts/petaluma_glyphs';\nexport const Font = {\n data: PetalumaFont,\n metrics: CommonMetrics,\n};\nexport default Font;\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","glyphs","bracketTop","x_min","x_max","y_min","y_max","ha","bracketBottom","barlineTick","breathMarkTick","segno","coda","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","fontFamily","resolution","generatedOn","metrics","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","leftSideBearing","advanceWidth","yOffset","clef_default","width","annotations","treble","line","shiftX","bass","clef_small","ornament","xOffset","stemUpYOffset","reportedWidth","parenthesis","default","gracenote","pedalMarking","digits","shiftLine","shiftY","articulation","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","noteHead","minPadding","stem","heightAdjustmentForFlag","offsetYBaseStemUp","offsetYBaseStemDown","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","textNote","scale"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-gonville.js b/build/cjs/vexflow-gonville.js new file mode 100644 index 0000000000..192714c967 --- /dev/null +++ b/build/cjs/vexflow-gonville.js @@ -0,0 +1,7 @@ +/*! + * VexFlow 4.2.2 2023-07-03T19:56:22.952Z 7ad933bdf12b4137ce04d3f332a838887d08a595 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function s(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let s=t.constructor;if(i){for(;null!==t;){if(s=t.constructor,"CATEGORY"in s&&s.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in s&&s.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>st,Annotation:()=>bt,AnnotationHorizontalJustify:()=>ct,AnnotationVerticalJustify:()=>dt,Articulation:()=>ft,BEAM_BOTH:()=>Re,BEAM_LEFT:()=>Fe,BEAM_RIGHT:()=>Oe,BarNote:()=>Dt,Barline:()=>kt,BarlineType:()=>Et,Beam:()=>Le,Bend:()=>Mt,BoundingBox:()=>C,BoundingBoxComputation:()=>P,Builder:()=>Ke,CanvasContext:()=>Zt,Category:()=>_,ChordSymbol:()=>Ot,ChordSymbolHorizontalJustify:()=>Bt,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>ge,ClefNote:()=>We,Crescendo:()=>Ie,Curve:()=>Ue,CurvePosition:()=>Ge,Dot:()=>Rt,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>L,Factory:()=>vi,Flow:()=>ki,Font:()=>F,FontStyle:()=>A,FontWeight:()=>N,Formatter:()=>Ae,Fraction:()=>E,FretHandFinger:()=>Lt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>Ei,KeySigNote:()=>si,KeySignature:()=>_e,Modifier:()=>tt,ModifierContext:()=>me,ModifierPosition:()=>J,MultiMeasureRest:()=>ai,Music:()=>et,Note:()=>vt,NoteHead:()=>Wt,NoteSubGroup:()=>Vt,Ornament:()=>$t,OutlineCode:()=>$,Parenthesis:()=>Jt,Parser:()=>ze,PedalMarking:()=>ri,Piece:()=>Ve,Registry:()=>R,RenderContext:()=>yt,Renderer:()=>he,RendererBackends:()=>ne,RendererLineEndType:()=>ae,RepeatNote:()=>li,Repetition:()=>xe,RuntimeError:()=>x,SVGContext:()=>se,Stave:()=>Be,StaveConnector:()=>Pe,StaveHairpin:()=>Bi,StaveLine:()=>di,StaveModifier:()=>At,StaveModifierPosition:()=>wt,StaveNote:()=>Ut,StaveSection:()=>ue,StaveTempo:()=>pe,StaveText:()=>ye,StaveTie:()=>Yt,Stem:()=>nt,StemmableNote:()=>It,StringNumber:()=>le,Stroke:()=>ce,SymbolModifiers:()=>Nt,SymbolTypes:()=>Pt,System:()=>bi,TabNote:()=>mi,TabSlide:()=>Ci,TabStave:()=>gi,TabTie:()=>Ht,TextBracket:()=>ui,TextBracketPosition:()=>xi,TextDynamics:()=>fi,TextFormatter:()=>lt,TextJustification:()=>oe,TextNote:()=>fe,TickContext:()=>Kt,Tickable:()=>Tt,TimeSigNote:()=>yi,TimeSignature:()=>ve,TimeSignatureGlyph:()=>Te,Tremolo:()=>Pi,Tuning:()=>Ni,Tuplet:()=>De,TupletLocation:()=>ke,Vex:()=>Gi,Vibrato:()=>de,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>zt,Volta:()=>Se,VoltaType:()=>re,defined:()=>p,drawDot:()=>St,globalObject:()=>u,isAccidental:()=>n,isAnnotation:()=>a,isBarline:()=>o,isCategory:()=>s,isDot:()=>r,isGraceNote:()=>h,isGraceNoteGroup:()=>l,isHTMLCanvas:()=>qt,isHTMLDiv:()=>Qt,isNote:()=>c,isRenderContext:()=>d,isStaveNote:()=>b,isStemmableNote:()=>m,isTabNote:()=>g,log:()=>f,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>y});const n=t=>s(t,_.Accidental),a=t=>s(t,_.Annotation),o=t=>s(t,_.Barline),r=t=>s(t,_.Dot),h=t=>s(t,_.GraceNote),l=t=>s(t,_.GraceNoteGroup),c=t=>s(t,_.Note),d=t=>s(t,_.RenderContext),b=t=>s(t,_.StaveNote),m=t=>s(t,_.StemmableNote),g=t=>s(t,_.TabNote);var _;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(_||(_={}));class x extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function u(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function p(t,e="undefined",i=""){if(void 0===t)throw new x(e,i);return t}function f(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");u().console.log(t+": "+i)}function y(...t){const e=t.join(" "),i=new Error;u().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var s,n;return i%2>0&&(i=((s=10*i)%(n=5)>=n/2?parseInt(""+s/n,10)*n+n:parseInt(""+s/n,10)*n)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class E{static get CATEGORY(){return _.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new x("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/E.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?E.LCM(t[0],t[1]):E.LCM(t.shift(),E.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=E.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a+i*o;return this.set(r,n)}subtract(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a-i*o;return this.set(r,n)}multiply(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*i,this.denominator*s)}divide(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*s,this.denominator*i)}equals(t){const e=E.__staticFractionA.copy(t).simplify(),i=E.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new E(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return E.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=E.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),s=e[1]?parseInt(e[1],10):1;return this.set(i,s)}}function B(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}E.__staticFractionA=new E,E.__staticFractionB=new E,E.__staticFractionTmp=new E;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,s){this.x=t,this.y=e,this.w=i,this.h=s}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,s,n,a){this.addPoint(t,e),this.addPoint(n,a);const o=i-t;let r=o-(n-i);if(0!=r){const e=o/r;if(e>0&&e<1){const s=1-e;this.addX(s*s*t+2*s*e*i+e*e*n)}}const h=s-e;if(r=h-(a-s),0!=r){const t=h/r;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*s+t*t*a)}}}addBezierCurve(t,e,i,s,n,a,o,r){const h=[t,e],l=[i,s],c=[n,a],d=[o,r];let b;this.addPoint(h[0],h[1]),this.addPoint(d[0],d[1]);const m=(t,e)=>Math.pow(1-t,3)*h[e]+3*Math.pow(1-t,2)*t*l[e]+3*(1-t)*Math.pow(t,2)*c[e]+Math.pow(t,3)*d[e];for(b=0;b<=1;b++){const t=6*h[b]-12*l[b]+6*c[b],e=-3*h[b]+9*l[b]-9*c[b]+3*d[b],i=3*l[b]-3*h[b];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===A.ITALIC}static loadWebFont(t,e,i=!0){return k(this,void 0,void 0,(function*(){const s=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield s.load(),document.fonts.add(s),s}))}static loadWebFonts(){return k(this,void 0,void 0,(function*(){const t=F.WEB_FONT_HOST,e=F.WEB_FONT_FILES;for(const i in e){const s=e[i];F.loadWebFont(i,t+s)}}))}static load(t,e,i){let s=M[t];return s||(s=new F(t),M[t]=s),e&&s.setData(e),i&&s.setMetrics(i),s}constructor(t){this.name=t}getName(){return this.name}getData(){return p(this.data,"FontError","Missing font data")}getMetrics(){return p(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let s=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class L{static get CATEGORY(){return _.Element}static newID(){return"auto"+L.ID++}constructor(){var t;this.children=[],this.attrs={id:L.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=R.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const s=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return s&&(s.splice(s.indexOf(t)),this.attrs.class=s.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const s=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:s,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return p(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return F.toCSSString(this.textFont)}setFont(t,e,i,s){const n=this.constructor.TEXT_FONT,a="object"==typeof t,o="string"==typeof t,r=void 0===t,h=void 0===e&&void 0===i&&void 0===s;return this.textFont=a?Object.assign(Object.assign({},n),t):o&&h?F.fromCSSString(t):r&&h?Object.assign({},n):F.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=s?s:n.style),this}getFont(){return this.textFont||this.resetFont(),F.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return F.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return F.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}L.ID=1e3,L.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:N.NORMAL,style:A.NORMAL};const W=16384,I={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},G={w:"1",h:"2",q:"4",b:"256"},U={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},Y={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},H={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},z={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"accidentalBuyukMucennebSharp",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new x("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in Y))throw new x("BadArgument","Invalid clef: "+t);return Y[t]}static keyProperties(t,e="treble",i){let s={octave_shift:0,duration:"4"};"object"==typeof i&&(s=Object.assign(Object.assign({},s),i));const n=V.sanitizeDuration(s.duration),a=t.split("/");if(a.length<2)throw new x("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=a[0].toUpperCase(),r=H[o];if(!r)throw new x("BadArguments","Invalid key name: "+o);r.octave&&(a[1]=r.octave.toString());let h=parseInt(a[1],10);h+=-1*s.octave_shift;let l=(7*h-28+r.index)/2;l+=V.clefProperties(e).line_shift;let c=0;l<=0&&2*l%2==0&&(c=1),l>=6&&2*l%2==0&&(c=-1);const d=void 0!==r.int_val?12*h+r.int_val:void 0,b=r.code,m=r.shift_right;let g={};if(a.length>2&&a[2]){const t=a[2].toUpperCase();g={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:h,line:l,int_value:d,accidental:r.accidental,code:b,stroke:c,shift_right:m,displaced:!1},g)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new x("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new x("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,s=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new x("InvalidMetrics","Width and height required");s=t.width,n=-t.height/2}else s=V.textWidth(t);return{text:t,code:i,getWidth:()=>s*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return z[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=U[t];if(!e)throw new x("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],s=[];for(let t=0;tZ.getWidth(a,t)}),s)}}V.UNISON=!0,V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=W,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=z,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:W};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,s){this.outline=t,this.originX=e,this.originY=i,this.scale=s,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let s=0;for(;s{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(a)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new x("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new x("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new x("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let s=i[3];return s||(s="M"),{root:t,accidental:e,type:s}}throw new x("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new x("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new x("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new x("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new x("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new x("BadArguments",`Invalid direction: ${i}`);let s=(t+i*e)%et.NUM_TONES;return s<0&&(s+=et.NUM_TONES),s}getRelativeNoteName(t,e){const i=this.getNoteParts(t),s=this.getNoteValue(i.root);let n=e-s;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const a=(e+1+(s+1))%et.NUM_TONES*i;if(Math.abs(a)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);n=a}if(Math.abs(n)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);let a=i.root;if(n>0)for(let t=1;t<=n;++t)a+="#";else if(n<0)for(let t=-1;t>=n;--t)a+="b";return a}getScaleTones(t,e){const i=[t];let s=t;for(let n=0;ne.line-t.line));const c=[];let d=0;for(let t=0;tc[i+t],a=t=>t.map(n),o=(t,e)=>{const[i,s]=a([t,e]).map((t=>t.line));return i-s},r=(...t)=>t.map(a).every((([t,e])=>!this.checkCollision(t,e))),h=s-i+1;let l,d,m=this.checkCollision(c[i],c[s])?"a":"b";switch(h){case 3:"a"===m&&.5===o(1,2)&&.5!==o(0,1)&&(m="second_on_bottom");break;case 4:r([0,2],[1,3])&&(m="spaced_out_tetrachord");break;case 5:"b"===m&&r([1,3])&&(m="spaced_out_pentachord",r([0,2],[2,4])&&(m="very_spaced_out_pentachord"));break;case 6:r([0,3],[1,4],[2,5])&&(m="spaced_out_hexachord"),r([0,2],[2,4],[1,3],[3,5])&&(m="very_spaced_out_hexachord")}if(h>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+ed?b:d}else for(l=t;l<=s;l++)d=V.accidentalColumnsTable[h][m][l-t],c[l].column=d,b=b>d?b:d;t=s}const m=[],g=[];for(let t=0;t<=b;t++)m[t]=0,g[t]=0;m[0]=n+d,g[0]=n,c.forEach((t=>{t.width>m[t.column]&&(m[t.column]=t.width)}));for(let t=1;t{let e=0;const i=x+t.numAcc;for(;x0?(s=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(s=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new E(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=s[e.value()];n?n.push(t):(i.push(e.value()),s[e.value()]=[t]),e.add(t.getTicks())}))}));const a=new et;e||(e="C");const o=a.createScaleMap(e),r={};i.forEach((t=>{const e=s[t],i=[],h=t=>{if(!b(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,s)=>{const h=a.getNoteParts(t.split("/")[0]),l=t.split("/")[1],c=h.accidental||"n",d=h.root+c;r[h.root+l]||(r[h.root+l]=o[h.root]);const b=r[h.root+l]===d,m=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==c&&t.getIndex()==s&&e.getModifiers().splice(i,1)})),!b||b&&m){r[h.root+l]=d;const n=new st(c);e.addModifier(n,s),i.push(t)}})),e.getModifiers().forEach((t=>{l(t)&&t.getGraceNotes().forEach(h)}))};e.forEach(h)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),p(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=p(this.parenLeft),e=p(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return p(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,h(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:s,x_shift:n,y_shift:a,glyph:o,render_options:{parenLeftPadding:r,parenRightPadding:h}}=this,l=this.checkContext(),c=this.checkAttachedNote();this.setRendered();const d=c.getModifierStartXY(e,i);let b=d.x+n;const m=d.y+a;if(it("Rendering: ",t,b,m),s){const t=p(this.parenLeft),e=p(this.parenRight);e.render(l,b,m),b-=e.getMetrics().width,b-=h,b-=this.accidental.parenRightPaddingAdjustment,o.render(l,b,m),b-=o.getMetrics().width,b-=r,t.render(l,b,m)}else o.render(l,b,m)}}st.DEBUG=!1;class nt extends L{static get CATEGORY(){return _.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new x("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,s=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:s+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const s=this.stem_direction;let n=0;s===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const a=this.getHeight();!function(...t){nt.DEBUG&&f("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?a-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-a-this.renderHeightAdjustment*s),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function at(...t){lt.DEBUG&&f("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},rt={},ht={};class lt{static getFontFamilies(){const t=[];for(const e in ht){const i=ht[e];t.push(Object.assign({},i))}return t}static create(t={}){at("create: ",t),t.family||(t.family=F.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ht)i.startsWith(t)&&e.push(ht[i]);if(e.length>0)break}let s;if(0===e.length)s=new lt(Object.values(ht)[0]);else if(1===e.length)s=new lt(e[0]);else{const i=F.isBold(t.weight),n=F.isItalic(t.style),a=e.find((t=>t.bold===i&&t.italic===n));if(a)s=new lt(a);else{const t=e.find((t=>t.italic===n||t.bold===i));s=new lt(t||e[0])}}const n=t.size;if(void 0!==n){const t=F.convertSizeToPointValue(n);s.setFontSize(t)}return s}static getInfo(t){return ht[t]}static registerInfo(t,e=!1){at("registerInfo: ",t,e);const i=t.family;(void 0===ht[i]||e)&&(ht[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===rt[this.cacheKey]&&(rt[this.cacheKey]={}),null!==(t=rt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?N.BOLD:N.NORMAL,s=this.italic?A.ITALIC:A.NORMAL;this.cacheKey=`${t}%${e}%${i}%${s}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},s=e[t];if(void 0!==s)return s;for(let e=0;et>e?t:e)),h+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+o,d&&i===nt.DOWN&&(h=Math.max(h,l.topY+o+c*this.text_line))}else if(this.verticalJustification===dt.CENTER){const t=e.getYForTopText(this.text_line)-1;h=t+(b.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===dt.TOP){h=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,d&&i===nt.UP&&(c=l.topY=1}function ut(t,e){return xt(t,e)?e===mt?Math.ceil:Math.floor:Math.round}const pt=t=>b(t)||h(t);class ft extends tt{static get CATEGORY(){return _.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const s=(t,e,i)=>_t(ut(e,i),p(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let a=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let r=0;if(m(n)){const t=n.getStem();t&&(r=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const h=n.getStave();if(h&&(a=h.getNumLines()),t.getPosition()===mt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=r);let h=s(t,e.top_text_line,mt);const l=i+e.top_text_line+.5;!t.articulation.between_lines&&lt.getWidth())).reduce(((t,e)=>Math.max(e,t))),a=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=a/2,e.right_shift+=a/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const s={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:s[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=mt,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=mt),this.type.endsWith("Below")&&(this.position=gt));const t=(this.position===mt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),p(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(p(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:s,glyph:n,text_line:a}=this,o=this.articulation.between_lines,r=e.checkStave(),h=r.getSpacingBetweenLines(),l=g(e),{x:c}=e.getModifierStartXY(s,i),d=!o||l,b=function(t,e){const i=e===mt&&t.getStemDirection()===nt.UP||e===gt&&t.getStemDirection()===nt.DOWN;return pt(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,s),m=V.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let _={[mt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?s:n:Math.min(...t.getYs());if(g(t))return t.hasStem()&&i===nt.UP?s:t.checkStave().getYForTopText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)-(a+b)*h;return d?Math.min(r.getYForTopText(ft.INITIAL_OFFSET),t):t},[gt]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?n:s:Math.max(...t.getYs());if(g(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):s:t.checkStave().getYForBottomText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)+(a+b)*h;return d?Math.max(r.getYForBottomText(ft.INITIAL_OFFSET),t):t}}[s]();if(!l){const t=s===mt?-1:1,a=e.getKeyProps()[i].line,r=(e.getYs()[i]-_)/h+Number(a),l=function(t,e,i,s){const n=_t(ut(e,i),e);if(t&&xt(n,i)&&n%1==0)return n+.5*-s;return n}(o,r,s,t);xt(l,s)&&n.setOrigin(.5,.5),_+=Math.abs(l-r)*h*t+m*t}!function(...t){ft.DEBUG&&f("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${c}, y: ${_})`),n.render(t,c,_)}}ft.DEBUG=!1,ft.INITIAL_OFFSET=-.5;class yt{static get CATEGORY(){return _.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,s="#F55"){t.save(),t.setFillStyle(s),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends L{static get CATEGORY(){return _.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new E(0,1),this.intrinsicTicks=0,this.tickMultiplier=new E(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new x("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return p(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const s=this.tupletStack.indexOf(t);return-1!==s&&(this.tupletStack.splice(s,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const s=g.space.deviation,n=s>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(s),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const s=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");s[e]=n&&3===n.length?n[2]:i})));let n=V.durationToTicks(e.duration);if(!n)return;const a=t.dots?t.dots:e.dots;if("number"!=typeof a)return;let o=n;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new x("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new x("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(_.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return p(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new x("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new x("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}static getPoint(t){return"default"==t?V.NOTATION_FONT_SCALE:V.NOTATION_FONT_SCALE/5*3}getStemDirection(){throw new x("NoStem","No stem attached to this note.")}getStemExtents(){throw new x("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Et,Bt,Ct,Pt,Nt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class At extends L{static get CATEGORY(){return _.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,s=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+s)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Et||(Et={}));class kt extends At{static get CATEGORY(){return _.Barline}static get type(){return Et}static get typeString(){return{single:Et.SINGLE,double:Et.DOUBLE,end:Et.END,repeatBegin:Et.REPEAT_BEGIN,repeatEnd:Et.REPEAT_END,repeatBoth:Et.REPEAT_BOTH,none:Et.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=Et;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Et.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Et.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Et.END:this.drawVerticalEndBar(t,this.x);break;case Et.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Et.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Et.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();i&&s.fillRect(e-3,n,1,a-n),s.fillRect(e,n,1,a-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),s=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,s,1,n-s),i.fillRect(e-2,s,3,n-s)}drawRepeatBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();let o=3;i||(o=-5),s.fillRect(e+o,n,1,a-n),s.fillRect(e-2,n,3,a-n);i?o+=4:o-=4;const r=e+o+1;let h=(t.getNumLines()-1)*t.getSpacingBetweenLines();h=h/2-t.getSpacingBetweenLines()/2;let l=n+h+1;s.beginPath(),s.arc(r,l,2,0,2*Math.PI,!1),s.fill(),l+=t.getSpacingBetweenLines(),s.beginPath(),s.arc(r,l,2,0,2*Math.PI,!1),s.fill()}}class Dt extends vt{static get CATEGORY(){return _.BarNote}constructor(t=Et.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Et;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Dt.DEBUG&&f("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t);const e=new kt(this.type);e.setX(this.getAbsoluteX()),e.draw(this.checkStave()),this.restoreStyle(t),this.setRendered()}}Dt.DEBUG=!1;class Mt extends tt{static get CATEGORY(){return _.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let s=0;st{const a=t+s,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(a,o,t+s,n),e.stroke(),e.restore()},c=(t,i,s,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+s,n,t+s,i),e.stroke(),e.restore()},d=(t,i,s)=>{const n=i+4*s;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},b=(t,i)=>{e.save(),e.setFont(this.textFont);const s=t-e.measureText(i).width/2;e.fillText(i,s,h),e.restore()};let m,g=0,_=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){b(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=l.symbolBlocks[t-1];Ot.isSuperscript(e)||(n=s)}a&&n>0&&(x=!0,e.xShift=e.xShift+(n-s),s=n,n=0,l.setEnableKerning(!1)),i||a||(n=0),e.vAlign=x,s+=e.width,g=s}if(l.updateKerningAdjustments(),l.updateOverBarAdjustments(),l.getVertical()===Ct.TOP?(l.setTextLine(e.top_text_line),e.top_text_line+=_):(l.setTextLine(e.text_line+1),e.text_line+=_+1),l.getReportWidth()&&m(b)){const t=b.getGlyphProps().getWidth();l.getHorizontal()===Bt.LEFT?(r=Math.max(t,r),a=Math.max(a,g)+Ot.minPadding):l.getHorizontal()===Bt.RIGHT?(h=Math.max(t,h),o=Math.max(o,g)):(a=Math.max(a,g/2)+Ot.minPadding,o=Math.max(o,g/2),r=Math.max(t/2,r),h=Math.max(t/2,h))}s=0}const l=Math.min(Math.max(o-h,0),Math.max(o-e.right_shift,0)),c=Math.min(Math.max(a-r,0),Math.max(a-e.left_shift,0));return e.left_shift+=c,e.right_shift+=l,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Bt.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:N.NORMAL,style:A.NORMAL}}get superscriptOffset(){return Ot.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Ot.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Pt.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let s=0;for(;s0?this.symbolBlocks[t-1]:void 0;let s=0;e.symbolType===Pt.GLYPH&&void 0!==e.glyph&&e.glyph.code===Ot.glyphs.over.code&&(s+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Pt.GLYPH&&void 0!==i.glyph&&i.glyph.code===Ot.glyphs.over.code&&(s+=i.glyph.metrics.x_shift);let n=!1,a=!1;void 0!==i&&i.symbolType===Pt.TEXT&&(n=Ot.upperKerningText.some((t=>t===i.text[i.text.length-1])),a=Ot.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Ot.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===Nt.SUPERSCRIPT&&(s+=o),a&&e.symbolType===Pt.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(s+=o/2),Ot.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(s+=o/2)),s}getSymbolBlock(t={}){var e,i,s;const n=null!==(e=t.symbolType)&&void 0!==e?e:Pt.TEXT,a={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(s=t.symbolModifier)&&void 0!==s?s:Nt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Pt.GLYPH&&"string"==typeof t.glyph){const e=Ot.glyphs[t.glyph],i=20;a.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Pt.TEXT?a.width=this.textFormatter.getWidthForTextInEm(a.text):n===Pt.LINE&&(a.width=t.width);return a}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Pt.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Pt.TEXT,i=Nt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Pt.TEXT,i=Nt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Pt.GLYPH,i=Nt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Pt.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let s=0;s0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Pt.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,s){return super.setFont(t,e,i,s),this.textFormatter=lt.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Ot.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Ot.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,s=0;for(s=0;s0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let s;t.setFont(this.textFont);const n=e.hasStem(),a=e.checkStave();if(this.vertical===Ct.BOTTOM){if(s=a.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;s=Math.max(s,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(s=Math.min(a.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines();s=Math.min(s,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Bt.LEFT?i.x:this.horizontal===Bt.RIGHT?i.x+this.getWidth():this.horizontal===Bt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Ft("Rendering ChordSymbol: ",this.textFormatter,o,s),this.symbolBlocks.forEach((e=>{const i=Ot.isSuperscript(e),n=Ot.isSubscript(e);let a=s;if(Ft("shift was ",e.xShift,e.yShift),Ft("curY pre sub ",a),i&&(a+=this.superscriptOffset),n&&(a+=this.subscriptOffset),Ft("curY sup/sub ",a),e.symbolType===Pt.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:s,style:n}=this.textFont,a=F.scaleSize(i,Ot.superSubRatio);t.setFont(e,a,s,n)}Ft("Rendering Text: ",e.text,o+e.xShift,a+e.yShift),t.fillText(e.text,o+e.xShift,a+e.yShift),(i||n)&&t.restore()}else e.symbolType===Pt.GLYPH&&e.glyph?(a+=e.yShift,Ft("Rendering Glyph: ",e.glyph.code,o+e.xShift,a),e.glyph.render(t,o+e.xShift,a)):e.symbolType===Pt.LINE&&(Ft("Rendering Line : ",e.width,o,a),t.beginPath(),t.setLineWidth(1),t.moveTo(o,s),t.lineTo(o+e.width,a),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Ot.DEBUG=!1,Ot.HorizontalJustify=Bt,Ot.HorizontalJustifyString={left:Bt.LEFT,right:Bt.RIGHT,center:Bt.CENTER,centerStem:Bt.CENTER_STEM},Ot.VerticalJustify=Ct,Ot.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Ot.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Ot.symbolTypes=Pt,Ot.symbolModifiers=Nt,Ot.noFormat=!1;class Rt extends tt{static get CATEGORY(){return _.Dot}static getDots(t){return t.getModifiersByType(Rt.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let a=i,o=0,r=null,h=null,l=null,c=0;for(let t=0;to?a:o,r=b,h=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,h(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),s=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});g(e)&&(s.y=e.getStemExtents().baseY);const n=s.x+this.x_shift+this.width-this.radius,a=s.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,a,this.radius,0,2*Math.PI,!1),t.fill()}}class Lt extends tt{static get CATEGORY(){return _.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:s}=e;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,l=0,c=0,d=0,b=null,m=null;for(let t=0;tc?e:c):o===tt.Position.RIGHT&&(g.setXShift(l),e=r+p,d=e>d?e:d),b=_,m=a}return e.left_shift+=c,e.right_shift+=d,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),s={number:e[0]};return e[1]&&(s.position=e[1]),i.getFactory().Fingering(s)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:s-=4,n-=12;break;case tt.Position.BELOW:s-=2,n+=10;break;case tt.Position.LEFT:s-=this.width;break;case tt.Position.RIGHT:s+=1;break;default:throw new x("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,s,n),t.restore()}}Lt.TEXT_FONT={family:F.SANS_SERIF,size:9,weight:N.BOLD,style:A.NORMAL};class Wt extends vt{static get CATEGORY(){return _.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=V.currentMusicFont(),s=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+s+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Wt.DEBUG&&f("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const s=this.stem_direction,n=this.render_options.glyph_font_scale,a=`${this.glyph_code}Stem${s===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,s,n,a){const o=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let r=!1;if(V.durationToNumber(e)>2&&(r=!0),r||(i-=V.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,s+a),t.lineTo(i,s+1),t.lineTo(i+o,s-a),t.lineTo(i+o,s),t.lineTo(i,s+a),t.closePath(),r?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;nt.getCategory()===_.Dot&&0===t.getIndex())).length!==r.note.getModifiers().filter((t=>t.getCategory()===_.Dot&&0===t.getIndex())).length||t<1&&t>0||JSON.stringify(a.note.getStyle())!==JSON.stringify(r.note.getStyle())?(d=c+2,a.stemDirection===r.stemDirection?a.note.setXShift(d):r.note.setXShift(d)):a.note.voice!==r.note.voice&&a.stemDirection===r.stemDirection&&(a.line!=r.line?(d=c+2,a.note.setXShift(d)):1===r.stemDirection&&(r.stemDirection=-1,r.note.setStemDirection(-1)))}else t<1?(d=c+2,a.note.durationt.postFormat())),!0)}constructor(t){var e,i,s;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Ut.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(s=t.stem_direction)&&void 0!==s?s:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const s=t[i];s&&e.setStyle(s)}));const e=this.stave;return e&&this.setStave(e),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,s,n,a,o,r=!1;t===nt.UP?(n=0,a=e.length,o=1):(n=e.length-1,a=-1,o=-1);for(let e=n;e!==a;e+=o){const n=this.sortedKeyProps[e].keyProps,a=n.line;void 0===i?i=a:(s=Math.abs(i-a),0===s||.5===s?r=!r:(r=!1,this.use_default_head_x=!0)),i=a;const o=new Wt({duration:this.duration,note_type:this.noteType,displaced:r,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=a,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new x("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:s,leftDisplacedHeadPx:n}=this.getMetrics(),a=this.getAbsoluteX()-s-n;let o=0,r=0;const h=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,l=2*h;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-h,r=t+h):(o=t-this.glyphProps.line_above*l,r=t+this.glyphProps.line_below*l)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=h*this.getStemDirection(),o=Math.min(t.topY,t.baseY),r=Math.max(t.topY,t.baseY)}else{o=0,r=0;for(let t=0;te&&(e=s):s1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var s,n;if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");const{ABOVE:a,BELOW:o,LEFT:r,RIGHT:h}=tt.Position;let l=0;return t===r?l=-2:t===h?(l=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(l+=null!==(n=null===(s=null==this?void 0:this.flag)||void 0===s?void 0:s.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==a||(l=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+l,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Ut.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,s,n=1/0,a=-1/0,o=this.checkStave().getNumLines(),r=1,h=o,l=r;return this._noteHeads.forEach((c=>{const d=c.getLine(),b=c.getY();n=Math.min(b,n),a=Math.max(b,a),void 0===e&&c.isDisplaced()&&(e=c.getAbsoluteX()),void 0!==t||c.isDisplaced()||(t=c.getAbsoluteX()),o=Math.max(d,o),r=Math.min(d,r),c.isDisplaced()?(i=void 0===i?d:Math.max(d,i),s=void 0===s?d:Math.min(d,s)):(h=Math.max(d,h),l=Math.min(d,l))}),this),{y_top:n,y_bottom:a,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:r,highest_displaced_line:i,lowest_displaced_line:s,highest_non_displaced_line:h,lowest_non_displaced_line:l}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,s=this.checkContext(),n=e.getWidth()+2*i,a=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!s)throw new x("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:r,highest_displaced_line:h,highest_non_displaced_line:l,lowest_displaced_line:c,lowest_non_displaced_line:d,displaced_x:b,non_displaced_x:m}=this.getNoteHeadBounds();if(o<6&&r>0)return;const g=Math.min(null!=b?b:0,null!=m?m:0),_=(t,e,o)=>{let r;r=o&&e?g-i:e?(null!=m?m:0)-i:(null!=b?b:0)-i;const h=e&&o?a:n;s.beginPath(),s.moveTo(r,t),s.lineTo(r+h,t),s.stroke()},u=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(s,u);for(let e=6;e<=o;++e){const i=void 0!==m&&e<=l,s=void 0!==h&&e<=h;_(t.getYForNote(e),i,s)}for(let e=0;e>=r;--e){const i=void 0!==m&&e>=d,s=void 0!==c&&e>=c;_(t.getYForNote(e),i,s)}this.restoreStyle(s,u)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const s=i-3.5;if(s<=0)return t;const n=this.getStave();let a=10;return null!=n&&(a=n.getSpacingBetweenLines()),t+s*a}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new x("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Ut.DEBUG&&f("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Ut.DEBUG=!1;class Yt extends L{static get CATEGORY(){return _.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,s=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,s=8);const n=this.render_options.first_x_shift,a=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,r=this.notes.first_indices,h=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let l=0;lMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===zt.STRICT||this.mode===zt.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new x("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let s=0;s1){const e=new Le(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Ut.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&f("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=b(e),s=i?Yt:Ht;this.slur=new s({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return _.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new Ae,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt{static getNextContext(t){const e=t.tContexts,i=e.indexOf(t);if(i+1t.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new x("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t=0&&(r.x_shift+=s+2),$t.ornamentAttack.indexOf(r.type)>=0&&(r.x_shift-=n+2),r.reportedWidth&&r.x_shift<0?n+=r.reportedWidth:r.reportedWidth&&r.x_shift>=0?s+=r.reportedWidth+$t.minPadding:i=Math.max(r.getWidth(),i),$t.ornamentArticulation.indexOf(r.type)>=0){p(r.note,"NoAttachedNote").getLineNumber()>=3||r.getPosition()===tt.Position.ABOVE?(e.top_text_line+=h,r.y_shift+=a,a-=r.glyph.bbox.getH()):(e.text_line+=h,r.y_shift+=a,a+=r.glyph.bbox.getH())}else r.getPosition()===tt.Position.ABOVE?(r.setTextLine(e.top_text_line),e.top_text_line+=h):(r.setTextLine(e.text_line),e.text_line+=h)}return e.left_shift=n+i/2,e.right_shift=s+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new x("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:V.NOTATION_FONT_SCALE,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=$t.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new x("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),$t.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),s=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let a=i===nt.DOWN?n.baseY:n.topY;g(e)&&(e.hasStem()?i===nt.DOWN&&(a=s.getYForTopText(this.text_line)):a=s.getYForTopText(this.text_line));const o=i===nt.DOWN,r=s.getSpacingBetweenLines();let h=1;!o&&e.hasBeam()&&(h+=.5);const l=a-r*(this.text_line+h),c=e.getModifierStartXY(this.position,this.index);let d=c.x,b=this.ornamentAlignWithNoteHead?c.y:Math.min(s.getYForTopText(this.text_line),l);if(b+=this.y_shift,this.delayed){let t=0;const i=d-(s.getX()-10);if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=Kt.getNextContext(e.getTickContext());t+=n?.5*(n.getX()-i):.5*(s.getX()+s.getWidth()-i),this.delayXShift=t}d+=t}!function(...t){$t.DEBUG&&f("Vex.Flow.Ornament",t)}("Rendering ornament: ",this.ornament,d,b),this.accidentalLower&&(this.accidentalLower.render(t,d,b),b-=this.accidentalLower.getMetrics().height,b-=this.render_options.accidentalLowerPadding),this.stemUpYOffset&&e.hasStem()&&1===e.getStemDirection()&&(b+=this.stemUpYOffset),e.getLineNumber()<5&&$t.ornamentNoteTransition.indexOf(this.type)>=0&&(b=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,d+this.x_shift,b),this.accidentalUpper&&(b-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,d,b)),t.closeGroup(),this.restoreStyle()}}$t.DEBUG=!1;class Jt extends tt{static get CATEGORY(){return _.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;th+n.width?s:h+n.width),o===J.LEFT&&(h=a.getLeftParenthesisPx(r),i=i>h+n.width?i:h+n.width),n.setXShift(h)}return e.left_shift+=i,e.right_shift+=s,!0}constructor(t){var e;super(),this.position=null!=t?t:tt.Position.LEFT,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){var e,i;return this.note=t,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),h(t)&&(this.point=null!==(i=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"))&&void 0!==i?i:vt.getPoint("gracenote"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),s=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,s+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,s-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function Qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Zt extends yt{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(y("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Zt.WIDTH,height:Zt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e,i){var s;const n=this.context2D.canvas,a=null!==(s=null!=i?i:u().devicePixelRatio)&&void 0!==s?s:1;return[t,e]=Zt.sanitizeCanvasDims(t*a,e*a),t=t/a|0,e=e/a|0,n.width=t*a,n.height=e*a,qt(n)&&(n.style.width=t+"px",n.style.height=e+"px"),this.scale(a,a)}rect(t,e,i,s){return this.context2D.rect(t,e,i,s),this}fillRect(t,e,i,s){return this.context2D.fillRect(t,e,i,s),this}clearRect(t,e,i,s){return this.context2D.clearRect(t,e,i,s),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,s,n,a){return this.context2D.bezierCurveTo(t,e,i,s,n,a),this}quadraticCurveTo(t,e,i,s){return this.context2D.quadraticCurveTo(t,e,i,s),this}arc(t,e,i,s,n,a){return this.context2D.arc(t,e,i,s,n,a),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,s=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,s=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,s=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:s}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,s){const n=F.validate(t,e,i,s);return this.context2D.font=F.toCSSString(n),this.textHeight=F.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const te={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},ee="http://www.w3.org/2000/svg",ie=2*Math.PI;class se extends yt{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":F.SANS_SERIF,"font-size":F.SIZE+"pt","font-weight":N.NORMAL,"font-style":A.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(ee,t)}openGroup(t,e,i){const s=this.create("g");return this.groups.push(s),this.parent.appendChild(s),this.parent=s,t&&s.setAttribute("class",T(t)),e&&s.setAttribute("id",T(e)),i&&i.pointerBBox&&s.setAttribute("pointer-events","bounding-box"),this.applyAttributes(s,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),s}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new x("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,s=this.height/this.state.scaleY;return this.setViewBox(0,0,i,s),this}setViewBox(t,e,i,s){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+s;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=te[t.nodeName];for(const s in e)i&&i[s]||!e[s]||0!=this.groupAttributes.length&&e[s]==this.groupAttributes[this.groupAttributes.length-1][s]||t.setAttributeNS(null,s,e[s]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,s,n){s<0&&(e+=s,s*=-1);const a=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.applyAttributes(a,Object.assign({x:t,y:e,width:i,height:s},n)),this.add(a),this}fillRect(t,e,i,s){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,s,n),this}clearRect(t,e,i,s){return this.rect(t,e,i,s,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,s,n,a){return n=this.round(n),a=this.round(a),t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.path+="C"+t+" "+e+","+i+" "+s+","+n+" "+a,this.pen.x=n,this.pen.y=a,this}quadraticCurveTo(t,e,i,s){return i=this.round(i),s=this.round(s),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+s,this.pen.x=i,this.pen.y=s,this}arc(t,e,i,s,n,a){let o=t+i*Math.cos(s),r=e+i*Math.sin(s);o=this.round(o),r=this.round(r);const h=v(s),l=v(n);if(!a&&n-s>=ie||a&&s-n>=ie||h===l){let n=t+i*Math.cos(s+Math.PI),a=e+i*Math.sin(s+Math.PI);n=this.round(n),a=this.round(a),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 0 0 ${n} ${a} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${r}`,this.pen.x=o,this.pen.y=r}else{let c,d=t+i*Math.cos(n),b=e+i*Math.sin(n);s=h,n=l,c=Math.abs(n-s)n&&(c=!c);const m=!a;d=this.round(d),b=this.round(b),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 ${+c} ${+m} ${d} ${b}`,this.pen.x=d,this.pen.y=b}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return se.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const s=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,s),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,s){const n=F.validate(t,e,i,s);this.fontCSSString=F.toCSSString(n);const a={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),a),this.state=Object.assign(Object.assign({},this.state),a),this}getFont(){return this.fontCSSString}}var ne,ae,oe,re;se.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let s=this.cache[t];void 0===s&&(s={},this.cache[t]=s);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let a=s[n];return void 0===a&&(a=this.measureImpl(t,e,i),s[n]=a),a}measureImpl(t,e,i){let s=this.txt;s||(s=document.createElementNS(ee,"text"),this.txt=s),s.textContent=t,i["font-family"]&&s.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&s.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&s.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&s.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(s);const n=s.getBBox();return e.removeChild(s),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ne||(ne={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ae||(ae={}));class he{static buildContext(t,e,i,s,n="#FFF"){const a=new he(t,e);i&&s&&a.resize(i,s);const o=a.getContext();return o.setBackgroundFillStyle(n),he.lastContext=o,o}static getCanvasContext(t,e,i,s){return he.buildContext(t,he.Backends.CANVAS,e,i,s)}static getSVGContext(t,e,i,s){return he.buildContext(t,he.Backends.SVG,e,i,s)}static drawDashedLine(t,e,i,s,n,a){t.beginPath();const o=s-e,r=n-i,h=Math.atan2(r,o);let l=e,c=i;t.moveTo(e,i);let d=0,b=!0;for(;!(o<0?l<=s:l>=s)||!(r<0?c<=n:c>=n);){const e=a[d++%a.length],i=l+Math.cos(h)*e;l=o<0?Math.max(s,i):Math.min(s,i);const m=c+Math.sin(h)*e;c=r<0?Math.max(n,m):Math.min(n,m),b?t.lineTo(l,c):t.moveTo(l,c),b=!b}t.closePath(),t.stroke()}constructor(t,e){if(d(t))this.ctx=t;else{if(void 0===e)throw new x("InvalidArgument","Missing backend argument");const i=e;let s;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new x("BadElementId",`Can't find element with ID "${e}"`);s=e}else s=t;if(i===he.Backends.CANVAS){if(!qt(s))throw new x("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=s.getContext("2d",{willReadFrequently:!0});if(!t)throw new x("BadElement","Can't get canvas context");this.ctx=new Zt(t)}else{if(i!==he.Backends.SVG)throw new x("InvalidBackend",`No support for backend: ${i}`);if(!Qt(s))throw new x("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new se(s)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}he.Backends=ne,he.LineEndType=ae,he.lastContext=void 0;class le extends tt{static get CATEGORY(){return _.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,s=e.right_shift;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let i=0;ie.line-t.line));let h=0,l=0,c=0,d=null,m=null;for(let t=0;tc?x:c),d=b,m=e}return e.left_shift+=l,e.right_shift+=c,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=he.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=he.LineEndType.NONE&&t<=he.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),s=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,a={};e.hasStem()&&(a=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&s==nt.DOWN&&(o=a.topY-le.metrics.stemPadding),o+=this.radius+le.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+le.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+le.metrics.rightPadding;break;default:throw new x("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const r=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,r,o+4.5);const h=this.last_note;if(m(h)){const i=h.getStemX()-e.getX()+5;let s,a;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?he.drawDashedLine(t,n+10,o,n+i,o,[3,3]):he.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case he.LineEndType.UP:s=-10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a);break;case he.LineEndType.DOWN:s=10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a)}}t.restore()}}le.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:N.BOLD,style:A.NORMAL};class ce extends tt{static get CATEGORY(){return _.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const s=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(b(e)){const{line:s}=e.getKeyProps()[i];return{line:s,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(g(e)){const{str:s}=e.getPositions()[i];return{line:s,shift:0,stroke:t}}throw new x("Internal","Unexpected instance.")})),n=i,a=s.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=a,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=e.getYs(),n=i.y,a=i.y;const o=i.x-5,r=e.checkStave().getSpacingBetweenLines(),h=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){s-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(s,this.checkStave(),t.line),this.glyphs.push(s);const a=this.xPositions[this.xPositions.length-1],o=s.getMetrics().width+n;this.xPositions.push(a+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,s=i?e.length:e.length-this.accList.length;if(s<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let s;if(this.cancelKeySpec&&(s=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();s&&this.convertAccLines(n,s.type,s.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":s=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":s=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+s,this.timeSignature.point);this.topGlyphs.push(n),r+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0,h=Math.max(h,n.getMetrics().height)}let l=0;for(let t=0;t22?1:0,this.width=Math.max(r,l),this.xMin=this.getMetrics().x_min,this.topStartX=(this.width-r)/2,this.botStartX=(this.width-l)/2,this.reset()}getMetrics(){return{x_min:this.xMin,x_max:this.xMin+this.width,width:this.width}}renderToStave(t){const e=this.checkStave(),i=this.checkContext();let s=t+this.topStartX,n=0;n=this.botGlyphs.length>0?e.getYForLine(this.timeSignature.topLine-this.lineShift):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const s=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=s[0])&&void 0!==e?e:"",null!==(i=s[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Te(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(p(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const we={[kt.CATEGORY]:0,[ge.CATEGORY]:1,[_e.CATEGORY]:2,[ve.CATEGORY]:3},Ee={[ve.CATEGORY]:0,[_e.CATEGORY]:1,[kt.CATEGORY]:2,[ge.CATEGORY]:3};class Be extends L{static get CATEGORY(){return _.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,s){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},s),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new kt(this.options.left_bar?Et.SINGLE:Et.NONE)),this.addEndModifier(new kt(this.options.right_bar?Et.SINGLE:Et.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new xe(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new Se(t,e,this.x,i)),this}setSection(t,e,i=0,s,n=!0){const a=new ue(t,this.x+i,e,n);return s&&a.setFontSize(s),this.modifiers.push(a),this}setTempo(t,e){return this.modifiers.push(new pe(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new ye(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+t*i+s*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return(t-this.y)/i-s}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+s*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:s}=Et;return t!==e&&t!==i&&t!==s||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Et.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClef(t,e,i,s){void 0===s&&(s=wt.BEGIN),s===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(s,ge.CATEGORY);return 0===n.length?this.addClef(t,e,i,s):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,_e.CATEGORY);return 0===s.length?this.addKeySignature(t,e,i):s[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,ve.CATEGORY);return 0===s.length?this.addTimeSignature(t,e,i):s[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new _e(t,e).setPosition(i),i),this}addClef(t,e,i,s){return void 0===s||s===wt.BEGIN?this.clef=t:s===wt.END&&(this.endClef=t),this.addModifier(new ge(t,e,i),s),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new ve(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,s=void 0===e;return i&&s?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):s?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let s=0;se[t[s+1].getCategory()]){const e=t[s];t[s]=t[s+1],t[s+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),s=this.getModifiers(wt.END);let n,a,r;this.sortByCategory(i,we),this.sortByCategory(s,Ee),i.length>1&&t.getType()===Et.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new kt(Et.SINGLE))),s.indexOf(e)>0&&s.splice(0,0,new kt(Et.NONE));let h=0,l=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new x("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new x("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new x("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new x("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const s=t.getModifiers(wt.BEGIN,e);s.length>0&&s[0].getX()>i&&(i=s[0].getX())}));let s=0;t.forEach((t=>{s=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>s&&(s=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let a=!1;n.forEach((t=>{t.getCategory()===e&&(a=!0),a&&s>0&&t.setX(t.getX()+s)})),t.setNoteStartX(t.getNoteStartX()+s)}))};t.forEach((t=>{t.formatted||t.format()})),e(_.Clef),e(_.KeySignature),e(_.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.setX(i)}))}))}}function Ce(t,e,i,s,n){if(e!==Pe.type.BOLD_DOUBLE_LEFT&&e!==Pe.type.BOLD_DOUBLE_RIGHT)throw new x("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let a=3,o=3.5;e===Pe.type.BOLD_DOUBLE_RIGHT&&(a=-5,o=3),t.fillRect(i+a,s,1,n-s),t.fillRect(i-2,s,o,n-s)}Be.TEXT_FONT={family:F.SANS_SERIF,size:8,weight:N.NORMAL,style:A.NORMAL};class Pe extends L{static get CATEGORY(){return _.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Pe.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Pe.typeString[t]:t;return Object.values(Pe.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new x("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,s=this.width,n=this.top_stave.getX();(this.type===Pe.type.SINGLE_RIGHT||this.type===Pe.type.BOLD_DOUBLE_RIGHT||this.type===Pe.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let a=i-e;switch(this.type){case Pe.type.SINGLE:case Pe.type.SINGLE_LEFT:case Pe.type.SINGLE_RIGHT:s=1;break;case Pe.type.DOUBLE:n-=this.width+2,e-=this.thickness,a+=.5;break;case Pe.type.BRACE:{s=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,r=n,h=i,l=n-s,c=o+a/2,d=l-.9*s,b=o+.2*a,m=n+1.1*s,g=c-.135*a,_=m,x=c+.135*a,u=d,p=h-.2*a,f=l-s,y=p,S=n+.4*s,T=c+.135*a,v=S,w=c-.135*a,E=f,B=b;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(d,b,m,g,l,c),t.bezierCurveTo(_,x,u,p,r,h),t.bezierCurveTo(f,y,S,T,l,c),t.bezierCurveTo(v,w,E,B,n,o),t.fill(),t.stroke();break}case Pe.type.BRACKET:e-=6,i+=6,a=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Pe.type.BOLD_DOUBLE_LEFT:Ce(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Pe.type.BOLD_DOUBLE_RIGHT:Ce(t,this.type,n,e,i-this.thickness);break;case Pe.type.THIN_DOUBLE:s=1,a-=this.thickness;break;case Pe.type.NONE:break;default:throw new x("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Pe.type.BRACE&&this.type!==Pe.type.BOLD_DOUBLE_LEFT&&this.type!==Pe.type.BOLD_DOUBLE_RIGHT&&this.type!==Pe.type.NONE&&t.fillRect(n,e,s,a),this.type===Pe.type.THIN_DOUBLE&&t.fillRect(n-3,e,s,a),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;e{e.addToModifierContext(new me);const s=(new Kt).addTickable(e).preFormat(),n=s.getMetrics();return s.setX(t+n.totalLeftPx),t+s.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,s,n,a){const o=i+(a=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},a)).stavePadding,r=e.contextGaps;t.save(),t.setFont(F.SANS_SERIF,8),r.gaps.forEach((e=>{var i,a,r;i=o+e.x1,a=o+e.x2,r="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(r),t.setFillStyle(r),t.setLineWidth(1),t.fillRect(i,s,Math.max(a-i,0),n-s),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${r.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,s){let n={auto_beam:!1,align_rests:!1};"object"==typeof s?n=Object.assign(Object.assign({},n),s):"boolean"==typeof s&&(n.auto_beam=s);const a=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),o=n.auto_beam?Le.applyAndGetBeams(a):[];return(new Ae).joinVoices([a]).formatToStave([a],e,{align_rests:n.align_rests,stave:e}),a.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),a.getBoundingBox()}static FormatAndDrawTab(t,e,i,s,n,a,o){let r={auto_beam:a,align_rests:!1};"object"==typeof o?r=Object.assign(Object.assign({},r),o):"boolean"==typeof o&&(r.auto_beam=o);const h=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(n),l=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(s),c=r.auto_beam?Le.applyAndGetBeams(h):[];(new Ae).joinVoices([h]).joinVoices([l]).formatToStave([h,l],i,{align_rests:r.align_rests}),h.draw(t,i),l.draw(t,e),c.forEach((e=>e.setContext(t).draw())),new Pe(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((s,n)=>{if(b(s)&&s.isRest()){if(s.getTuplet()&&!i)return;const a=s.getGlyphProps().position.toUpperCase();if("R/4"!==a&&"B/4"!==a)return;if(e||s.getBeam()){const e=s.getKeyProps()[0];if(0===n)e.line=Ne(t,e.line,n,!1);else if(n>0&&nAe.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,s=0,n=0;const a=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new x("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:r,map:h}=this.tickContexts;this.minTotalWidth=0,r.forEach((e=>{const r=h[e];r.preFormat(),r.getTickables().length{s+=t.getMetrics().width,n+=t.getTicks().value(),a.push(t.getMetrics().width),o.push(t.getTicks().value())}));const l=r.getWidth();this.minTotalWidth+=l})),this.hasMinTotalWidth=!0;const l=s>0?s/a.length:1/a.length,c=w(a.map((t=>Math.pow(t-l,2)))),d=Math.pow(c/a.length,.5)/l,b=n/o.length,m=w(o.map((t=>Math.pow(t-b,2)))),g=Math.pow(m/o.length,.5)/b,_=Math.max(g,d)*r.length*e,u=e*i;return this.minTotalWidth+Math.max(u,_)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new x("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new x("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new x("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new x("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,E.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=Ae.getResolutionMultiplier(t),i=new Map,s=[];t.forEach((t=>{const n=new E(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let a=i.get(t.getStave());if(a||(i.set(t.getStave(),{}),a=i.get(t.getStave())),!(a?a[e]:void 0)){const t=new me;s.push(t),a[e]=t}t.addToModifierContext(a[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:s,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const s={},n=[],a=[],o=Ae.getResolutionMultiplier(t);return t.forEach(((t,r)=>{const h=new E(0,o);t.getTickables().forEach((t=>{const o=h.numerator;if(!s[o]){const t=e({tickID:o});a.push(t),s[o]=t,n.push(o)}i(t,s[o],r),h.add(t.getTicks())}))})),{map:s,array:a,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Kt(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,s){const n=this.tickContexts;if(!n)throw new x("NoTickContexts","preFormat requires TickContexts");const{list:a,map:o}=n;this.lossHistory=[],i&&s&&i.forEach((t=>t.setStave(s).preFormat()));let r=0,h=0;this.minTotalWidth=0;let l=0;a.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const s=e.getMaxTicks().value();l+=s;const n=e.getMetrics();r=r+h+n.totalLeftPx,e.setX(r),h=i-n.totalLeftPx}));const{globalSoftmax:c,softmaxFactor:d,maxIterations:b}=this.formatterOptions,m=w(a.map((t=>Math.pow(d,o[t].getMaxTicks().value()/l))));if(this.minTotalWidth=r+h,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const g=o[a[0]],_=o[a[a.length-1]];function u(t){return a.map(((e,i)=>{const s=o[e],n=s.getTickablesByVoice();let r;if(i>0){const e=o[a[i-1]];for(let h=i-1;h>=0;h--){const i=o[a[h]].getTickablesByVoice(),b=[];if(Object.keys(n).forEach((t=>{i[t]&&b.push(t)})),b.length>0){let a=0,o=1/0,h=0;if(b.forEach((t=>{const e=i[t].getTicks().value();e>a&&(r=i[t],a=e);const s=n[t],h=s.getX()-(s.getMetrics().modLeftPx+s.getMetrics().leftDisplacedHeadPx),l=i[t].getMetrics(),c=i[t].getX()+l.notePx+l.modRightPx+l.rightDisplacedHeadPx;o=Math.min(o,h-c)})),o=Math.min(o,s.getX()-(e.getX()+.05*t)),c){const e=l;h=Math.pow(d,a/e)/m*t}else void 0!==r&&(h=r.getVoice().softmax(a)*t);return{expectedDistance:h,maxNegativeShiftPx:o,fromTickable:r}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function f(t){const e=y/2;let i=0;return a.forEach(((s,n)=>{const a=o[s];if(n>0){const e=a.getX(),s=t[n],o=p(s.fromTickable).getX()+s.expectedDistance-(e+i);let r=0;o>0?i+=o:o<0&&(r=Math.min(s.maxNegativeShiftPx,Math.abs(o)),i+=-r),a.setX(e+i)}a.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-a.getX())}))})),_.getX()-g.getX()}const y=t-_.getMetrics().notePx-_.getMetrics().totalRightPx-g.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),E=S.lookupMetric("stave.padding");let B=y;const C=u(B);let P=f(C);if(1===a.length)return 0;const N=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=_&&_.getMaxTickable();if(i){const s=i.getVoice();if(s.getTicksUsed().value()>s.getTotalTicks().value())return 2*vM&&F>0||P+k1;)B-=P-M,k=A(B),D=k-(v-T),P=f(u(B)),F--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const s=t.list[i-1],n=t.map[s],a=t.map[e],o=n.getMetrics(),r=a.getMetrics(),h=n.getX()+o.notePx+o.totalRightPx,l=a.getX()-r.totalLeftPx,c=l-h;this.contextGaps.total+=c,this.contextGaps.gaps.push({x1:h,x2:l}),a.getFormatterMetrics().freedom.left=c,n.getFormatterMetrics().freedom.right=c})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,s,n)=>{const a=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),r=t.getFormatterMetrics(),h=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let l=0;if(s{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,s+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(s),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const s=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,a)=>{const o=i.map[t],r=e>0?i.map[a[e-1]]:void 0,h=et.getFormatterMetrics().space.deviation)));l>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(l)):l<0&&(n=h?Math.min(h.getFormatterMetrics().freedom.right,Math.abs(l)):0),n*=s,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const s=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,s.align_rests),this.createTickContexts(t),this.preFormat(e,s.context,t,s.stave),s.stave&&this.postFormat(),this}formatToStave(t,e,i){const s=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-Be.defaultPadding;return function(...t){Ae.DEBUG&&f("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,s)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var ke;Ae.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(ke||(ke={}));class De extends L{static get CATEGORY(){return _.Tuplet}static get LOCATION_TOP(){return ke.TOP}static get LOCATION_BOTTOM(){return ke.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new x("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new x("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=3*V.NOTATION_FONT_SCALE/5,this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||De.LOCATION_TOP),Ae.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),s=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const a=n(e,t);i=a>i?a:i,s=a0&&(s=Math.min(a,s))}}}else{let t=De.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),s=i.checkStave().getYForLine(t)+De.metrics.noteHeadOffset;for(let t=0;ts&&(s=e)}}return s+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const s=(t,e)=>t+p(e.getMetrics().width);let n=this.numerator_glyphs.reduce(s,0);this.ratioed&&(n=this.denom_glyphs.reduce(s,n),n+=.32*this.point);const a=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=V.currentMusicFont().lookupMetric("digits.shiftY",0);let r=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)})),this.ratioed){const e=a+r+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),r+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)}))}}}function Me(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Fe="L",Oe="R",Re="B";class Le extends L{static get CATEGORY(){return _.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new E).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new E(3,i)];if(i>4)return[new E(2,i)];if(i<=4)return[new E(1,i)]}return[new E(1,4)]}static applyAndGetBeams(t,e,i){return Le.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new E(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new x("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),s=t;let n=0,a=[],o=[];function r(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new E(0,1);s.forEach((s=>{if(t=[],s.shouldIgnoreTicks())return a.push(o),void(o=t);o.push(s);const h=i[n].clone(),l=(c=o,c.reduce(((t,e)=>e.getTicks().clone().add(t)),new E(0,1))).add(e);var c;const d=V.durationToNumber(s.getDuration())<8;if(d&&s.getTuplet()&&(h.numerator*=2),l.greaterThan(h)){if(!d){const e=o.pop();e&&t.push(e)}a.push(o);do{e=l.subtract(i[n]),r()}while(e.greaterThanEquals(i[n]));o=t}else l.equals(h)&&(a.push(o),e=new E(0,1),o=t,r())})),o.length>0&&a.push(o)}(),function(){const t=[];a.forEach((i=>{let s=[];i.forEach(((i,n,a)=>{const o=0===n||n===a.length-1,r=a[n-1],h=!e.beam_rests&&i.isRest(),l=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let c=!1;if(e.maintain_stem_directions&&r&&!i.isRest()&&!r.isRest()){const t=r.getStemDirection();c=i.getStemDirection()!==t}const d=parseInt(i.getDuration(),10)<8;h||l||c||d?(s.length>0&&t.push(s),s=c?[i]:[]):s.push(i)})),s.length>0&&t.push(s)})),a=t}(),a.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const h=a.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),l=function(){const t=[];return a.forEach((e=>{let i;e.forEach((e=>{const s=e.getTuplet();s&&i!==s&&(i=s,t.push(i))}))})),t}(),c=[];return h.forEach((t=>{const i=new Le(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),c.push(i)})),l.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?ke.BOTTOM:ke.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new x("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,s;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&b(t[0]))n=Me(t);else if(e&&g(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,s){return i+(t-e)*s}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:s,slope_iterations:n,slope_cost:a}}=this,o=t[0],r=function(t,e){const i=t.getStemExtents().topY,s=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-s)}(o,t[t.length-1]),h=(i-s)/n;let l=Number.MAX_VALUE,c=0,d=0;for(let n=s;n<=i;n+=h){let i=0,s=0;for(let a=1;an)&&(h=n,o=Math.min(...s.getYs()),r=s.getBeamCount())}let l=a/t.length;const c=s+r*(1.5*i),d=o+c*-e;e===nt.DOWN&&ld&&(l=o-c),n?(e===nt.DOWN&&l>n||e===nt.UP&&l=8&&(c=-1!==this.break_on_indices.indexOf(h),this.render_options.secondary_break_ticks&&r>=this.render_options.secondary_break_ticks&&(r=0,c=!0));const d=l.getIntrinsicTicks(){const i=e.getStem();if(i){const s=e.getStemX();i.setNoteHeadXBounds(s,s),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let s=this.getBeamYToDraw();const n=i.getStemX(),a=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=s),o?this.matchSuccess():this.matchFail(s),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ye("Evaluating rule function:",t),!t)throw new x("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ye(i),new x("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const s=[];return e.matches=s,e.results&&e.results.forEach((t=>s.push(He(t)))),i.run&&e.success&&i.run({matches:s}),e}}function je(...t){Qe.DEBUG&&f("Vex.Flow.EasyScore",t)}ze.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=p(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),s=p(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:a,dots:o,type:r}=this.piece,h=et.accidentals,l=n.map((t=>{var e;return t.key+(h.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),c="auto"===i,d="g"==(null==r?void 0:r.toLowerCase())?t.GhostNote({duration:a,dots:o}):t.StaveNote({keys:l,duration:a,dots:o,type:r,clef:s,auto_stem:c});c||d.setStemDirection("up"===i?nt.UP:nt.DOWN);const b=[];n.forEach(((e,i)=>{const s=e.accid;if("string"==typeof s){const e=t.Accidental({type:s});d.addModifier(e,i),b.push(e)}else b.push(void 0)}));for(let t=0;tt(e,d,this))),this.elements.notes.push(d),this.elements.accidentals.push(b),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const s=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(s);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,ft.easyScoreHook,Lt.easyScoreHook],throwOnError:!1},t),{factory:s,builder:n}),this.factory=s,this.builder=n,this.grammar=new Xe(this.builder),this.parser=new ze(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new x("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends It{static get CATEGORY(){return _.GhostNote}constructor(t){if(!t)throw new x("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new x("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=ri.type.TEXT&&t<=ri.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,s=!1;this.notes.forEach(((n,a,o)=>{var r;s=!s;const h=n.getAbsoluteX(),l=n.checkStave().getYForBottomText(this.line+3);if(h{var s;e=!e;const n=i.checkStave(),a=i.getAbsoluteX(),o=n.getYForBottomText(this.line+3),r=null!==(s=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`))&&void 0!==s?s:V.NOTATION_FONT_SCALE;let h=0;e?this.custom_depress_text?(h=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,a-h/2,o)):oi("pedal_depress",t,a,o,r):this.custom_release_text?(h=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,a-h/2,o)):oi("pedal_release",t,a,o,r)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){ri.DEBUG&&f("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===ri.type.BRACKET||this.type===ri.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===ri.type.TEXT&&this.drawText(),t.restore()}}ri.DEBUG=!1,ri.TEXT_FONT={family:F.SERIF,size:12,weight:N.BOLD,style:A.ITALIC},ri.GLYPHS={pedal_depress:{code:"keyboardPedalPed"},pedal_release:{code:"keyboardPedalUp"}},ri.type={TEXT:1,BRACKET:2,MIXED:3},ri.typeString={text:ri.type.TEXT,bracket:ri.type.BRACKET,mixed:ri.type.MIXED};const hi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class li extends ei{static get CATEGORY(){return _.RepeatNote}constructor(t,e,i){super(new Z(hi[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function ci(t,e,i,s,n,a,o){t.beginPath(),t.moveTo(e,i),t.lineTo(s,n),t.lineTo(a,o),t.lineTo(e,i),t.closePath(),t.fill()}class di extends L{static get CATEGORY(){return _.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:di.TextVerticalPosition.TOP,text_justification:di.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const s=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,a=e.y,o=i.x,r=i.y,h=Math.sqrt((o-n)*(o-n)+(r-a)*(r-a)),l=(h-this.render_options.arrowhead_length/3)/h;let c,d,b,m;this.render_options.draw_end_arrow||s?(c=Math.round(n+(o-n)*l),d=Math.round(a+(r-a)*l)):(c=o,d=r),this.render_options.draw_start_arrow||s?(b=n+(o-n)*(1-l),m=a+(r-a)*(1-l)):(b=n,m=a),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(b,m),t.lineTo(c,d),t.stroke(),t.closePath();const g=Math.atan2(r-a,o-n),_=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let x,u,p,f,y,S;(this.render_options.draw_end_arrow||s)&&(x=g+Math.PI+this.render_options.arrowhead_angle,p=o+Math.cos(x)*_,f=r+Math.sin(x)*_,u=g+Math.PI-this.render_options.arrowhead_angle,y=o+Math.cos(u)*_,S=r+Math.sin(u)*_,ci(t,p,f,o,r,y,S)),(this.render_options.draw_start_arrow||s)&&(x=g+this.render_options.arrowhead_angle,p=n+Math.cos(x)*_,f=a+Math.sin(x)*_,u=g-this.render_options.arrowhead_angle,y=n+Math.cos(u)*_,S=a+Math.sin(u)*_,ci(t,p,f,n,a,y,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,s=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},a={x:0,y:0};this.first_indices.forEach(((o,r)=>{const h=this.last_indices[r];n=e.getModifierStartXY(2,o),a=i.getModifierStartXY(1,h);const l=n.y>a.y;n.x+=e.getMetrics().modRightPx+s.padding_left,a.x-=i.getMetrics().modLeftPx+s.padding_right;const c=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=c+s.padding_left);i.getKeyProps()[h].displaced&&-1===i.getStemDirection()&&(a.x-=c+s.padding_right),n.y+=l?-3:1,a.y+=l?2:0,this.drawArrowLine(t,n,a)})),t.restore();const o=t.measureText(this.text).width,r=s.text_justification;let h=0;if(r===di.TextJustification.LEFT)h=n.x;else if(r===di.TextJustification.CENTER){h=(a.x-n.x)/2+n.x-o/2}else r===di.TextJustification.RIGHT&&(h=a.x-o);let l=0;const c=s.text_position_vertical;return c===di.TextVerticalPosition.TOP?l=e.checkStave().getYForTopText():c===di.TextVerticalPosition.BOTTOM&&(l=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,h,l),t.restore(),this}}di.TEXT_FONT=Object.assign({},L.TEXT_FONT),di.TextVerticalPosition={TOP:1,BOTTOM:2},di.TextJustification=oe;class bi extends L{static get CATEGORY(){return _.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new x("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),s=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),a=this.getContext();return n.voices.forEach((t=>{t.setContext(a).setStave(s).getTickables().forEach((t=>t.setStave(s))),this.partVoices.push(t)})),this.partStaves.push(s),this.partStaveInfos.push(n),s}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new Ae(t);this.formatter=i;let s=this.options.y,n=0;const a=[];this.partStaves.forEach(((t,e)=>{s+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(s),s+=t.space(this.partStaveInfos[e].spaceBelow),s+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(a.push({y:s,stave:t}),s+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Be.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-Be.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class mi extends It{static get CATEGORY(){return _.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:s}}=this,n=this.checkContext(),a=null==e&&s;if(i.flag&&a){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{r(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),s=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(s&&n){const s=function(t,e,i,s){const n=1!==s,a=-1!==s,o=i.getSpacingBetweenLines(),r=i.getNumLines(),h=[];return e.forEach((e=>{const l=e.indexOf(r)>-1,c=e.indexOf(1)>-1;if(n&&c||a&&l)return;1===e.length&&e.push(e[0]);const d=[];e.forEach(((e,n,a)=>{const h=1===e,l=e===r;let c=i.getYForLine(e-1);0!==n||h?n!==a.length-1||l||(c+=o/2-1):c-=o/2-1,d.push(c),1===s&&h?d.push(t-2):-1===s&&l&&d.push(t+2)})),h.push(d.sort(((t,e)=>t-e)))})),h}(e,function(t,e){const i=[];let s=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(s),s=[]):s.push(n);return s.length>0&&i.push(s),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),s.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),s=this.ys;for(let n=0;n{const i=fi.GLYPHS[e];if(!i)throw new x("Invalid dynamics character: "+e);const s=p(this.render_options.glyph_font_size),n=new Z(i.code,s,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);pi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,s)=>{const n=this.sequence[s];t.render(this.checkContext(),i,e),i+=fi.GLYPHS[n].width}))}}fi.DEBUG=!1;class yi extends vt{static get CATEGORY(){return _.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new ve(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends L{static get CATEGORY(){return _.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,s=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=s-i,function(...t){Si.DEBUG&&f("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",s,"y:",e),de.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&f("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:s}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new x("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=qt(document.getElementById(t))?he.Backends.CANVAS:he.Backends.SVG}this.context=he.buildContext(t,n,e,i,s)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),s=new Be(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),s=new gi(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}StaveNote(t){const e=new Ut(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const s=new ei(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}RepeatNote(t,e,i){const s=new li(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new fe(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Dt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new We(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new yi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new si(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new mi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new st(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ct.CENTER,vJustify:dt.BOTTOM},t),i=new bt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Ot;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new ft(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),s=new $t(t);return s.setPosition(i.position),i.upperAccidental&&s.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&s.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&s.setDelayed(i.delayed),s.setContext(this.context),s}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new fi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Lt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new le(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Kt}ModifierContext(){return new me}MultiMeasureRest(t){const e=p(t.number_of_measures,"NoNumberOfMeasures"),i=new ai(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Pe(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new Ae(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new De(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,s,n,a;const o=new Le(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(s=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==s?s:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ue(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Yt({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const s=new di({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&s.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&s.setFont(t.options.font),s.setContext(this.context),this.renderQ.push(s),s}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new ui({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new bi(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new ri(e.notes);return i.setType(ri.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},L.TEXT_FONT);class wi extends mi{static get CATEGORY(){return _.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${F.SANS_SERIF}`}),this.updateWidth()}}class Ei{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new x("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;es?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,s=t.first_ys,n=t.last_x_px,a=t.direction;if(a!==Ci.SLIDE_UP&&a!==Ci.SLIDE_DOWN)throw new x("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new x("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),s=Number(t);if(s<0)throw new x("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+s}getNoteForFret(t,e){const i=this.getValueForFret(t,e),s=Math.floor(i/12),n=i%12;return`${V.integerToNote(n)}/${s}`}}var Ai=function(t,e,i,s){return new(i||(i=Promise))((function(n,a){function o(t){try{h(s.next(t))}catch(t){a(t)}}function r(t){try{h(s.throw(t))}catch(t){a(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,r)}h((s=s.apply(t,e||[])).next())}))};class ki{static get BUILD(){return{VERSION:"4.2.2",ID:"7ad933bdf12b4137ce04d3f332a838887d08a595",DATE:"2023-07-03T19:56:22.952Z"}}static setMusicFont(...t){const e=t.map((t=>F.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return Ai(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static getMusicFontStack(){return V.MUSIC_FONT_STACK}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}ki.Accidental=st,ki.Annotation=bt,ki.Articulation=ft,ki.Barline=kt,ki.BarNote=Dt,ki.Beam=Le,ki.Bend=Mt,ki.BoundingBox=C,ki.BoundingBoxComputation=P,ki.CanvasContext=Zt,ki.ChordSymbol=Ot,ki.Clef=ge,ki.ClefNote=We,ki.Crescendo=Ie,ki.Curve=Ue,ki.Dot=Rt,ki.EasyScore=Qe,ki.Element=L,ki.Factory=vi,ki.Font=F,ki.Formatter=Ae,ki.Fraction=E,ki.FretHandFinger=Lt,ki.GhostNote=ti,ki.Glyph=Z,ki.GlyphNote=ei,ki.GraceNote=ii,ki.GraceNoteGroup=Xt,ki.GraceTabNote=wi,ki.KeyManager=Ei,ki.KeySignature=_e,ki.KeySigNote=si,ki.Modifier=tt,ki.ModifierContext=me,ki.MultiMeasureRest=ai,ki.Music=et,ki.Note=vt,ki.NoteHead=Wt,ki.NoteSubGroup=Vt,ki.Ornament=$t,ki.Parenthesis=Jt,ki.Parser=ze,ki.PedalMarking=ri,ki.Registry=R,ki.RenderContext=yt,ki.Renderer=he,ki.RepeatNote=li,ki.Repetition=xe,ki.Stave=Be,ki.StaveConnector=Pe,ki.StaveHairpin=Bi,ki.StaveLine=di,ki.StaveModifier=At,ki.StaveNote=Ut,ki.StaveTempo=pe,ki.StaveText=ye,ki.StaveTie=Yt,ki.Stem=nt,ki.StringNumber=le,ki.Stroke=ce,ki.SVGContext=se,ki.System=bi,ki.TabNote=mi,ki.TabSlide=Ci,ki.TabStave=gi,ki.TabTie=Ht,ki.TextBracket=ui,ki.TextDynamics=fi,ki.TextFormatter=lt,ki.TextNote=fe,ki.TickContext=Kt,ki.TimeSignature=ve,ki.TimeSigNote=yi,ki.Tremolo=Pi,ki.Tuning=Ni,ki.Tuplet=De,ki.Vibrato=de,ki.VibratoBracket=Si,ki.Voice=jt,ki.Volta=Se,ki.AnnotationHorizontalJustify=ct,ki.AnnotationVerticalJustify=dt,ki.ChordSymbolHorizontalJustify=Bt,ki.ChordSymbolVerticalJustify=Ct,ki.SymbolTypes=Pt,ki.SymbolModifiers=Nt,ki.CurvePosition=Ge,ki.FontWeight=N,ki.FontStyle=A,ki.ModifierPosition=J,ki.RendererBackends=ne,ki.RendererLineEndType=ae,ki.BarlineType=Et,ki.StaveModifierPosition=wt,ki.VoltaType=re,ki.TextBracketPosition=xi,ki.TextJustification=oe,ki.VoiceMode=zt;const Di={smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}},Mi={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}};const Fi={glyphs:{bracketTop:{x_min:0,x_max:412,y_min:-18,y_max:223,ha:241,o:"m 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z"},bracketBottom:{x_min:0,x_max:412,y_min:-223,y_max:18,ha:241,o:"m 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z"},barlineTick:{x_min:-59,x_max:59,y_min:-139,y_max:139,ha:279,o:"m 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z"},breathMarkTick:{x_min:-151,x_max:272,y_min:0,y_max:429,ha:429,o:"m 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z"},segno:{x_min:7,x_max:493,y_min:-50,y_max:650,ha:699,o:"m 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z"},coda:{x_min:22,x_max:478,y_min:-31,y_max:531,ha:563,o:"m 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z"},gClef:{x_min:0,x_max:623,y_min:-632,y_max:1082,ha:1713,o:"m 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z"},cClef:{x_min:0,x_max:643,y_min:-508,y_max:508,ha:1016,o:"m 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z"},fClef:{x_min:0,x_max:661,y_min:-545,y_max:254,ha:798,o:"m 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z"},unpitchedPercussionClef1:{x_min:-4,x_max:337,y_min:-250,y_max:250,ha:500,o:"m -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z"},"6stringTabClef":{x_min:0,x_max:501,y_min:-735,y_max:753,ha:1487,o:"m 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z"},timeSig0:{x_min:0,x_max:380,y_min:-250,y_max:236,ha:486,o:"m 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z"},timeSig1:{x_min:0,x_max:254,y_min:-250,y_max:236,ha:486,o:"m 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z"},timeSig2:{x_min:0,x_max:337,y_min:-250,y_max:236,ha:486,o:"m 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z"},timeSig3:{x_min:0,x_max:302,y_min:-250,y_max:236,ha:486,o:"m 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z"},timeSig4:{x_min:0,x_max:345,y_min:-250,y_max:236,ha:486,o:"m 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z"},timeSig5:{x_min:0,x_max:302,y_min:-250,y_max:236,ha:486,o:"m 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z"},timeSig6:{x_min:0,x_max:349,y_min:-250,y_max:236,ha:486,o:"m 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z"},timeSig7:{x_min:0,x_max:326,y_min:-250,y_max:236,ha:486,o:"m 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z"},timeSig8:{x_min:0,x_max:360,y_min:-250,y_max:236,ha:486,o:"m 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z"},timeSig9:{x_min:0,x_max:349,y_min:-250,y_max:236,ha:486,o:"m 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z"},timeSigCommon:{x_min:0,x_max:409,y_min:-233,y_max:233,ha:466,o:"m 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z"},timeSigCutCommon:{x_min:0,x_max:409,y_min:-394,y_max:394,ha:788,o:"m 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z"},timeSigPlus:{x_min:0,x_max:235,y_min:-118,y_max:118,ha:235,o:"m 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z"},timeSigPlusSmall:{x_min:0,x_max:235,y_min:-118,y_max:118,ha:235,o:"m 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z"},timeSigMinus:{x_min:0,x_max:235,y_min:-23,y_max:23,ha:46,o:"m 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z"},timeSigParensRight:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},timeSigParensRightSmall:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},timeSigParensLeft:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},timeSigParensLeftSmall:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},noteheadDoubleWhole:{x_min:0,x_max:663,y_min:-174,y_max:174,ha:349,o:"m 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z"},noteheadWhole:{x_min:0,x_max:455,y_min:-135,y_max:135,ha:269,o:"m 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z"},noteheadHalf:{x_min:0,x_max:316,y_min:-135,y_max:135,ha:269,o:"m 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z"},noteheadBlack:{x_min:0,x_max:316,y_min:-135,y_max:135,ha:269,o:"m 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z"},noteheadXWhole:{x_min:0,x_max:440,y_min:-133,y_max:133,ha:265,o:"m 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z"},noteheadXHalf:{x_min:0,x_max:300,y_min:-133,y_max:133,ha:265,o:"m 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z"},noteheadXBlack:{x_min:0,x_max:300,y_min:-133,y_max:133,ha:265,o:"m 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z"},noteheadCircleX:{x_min:0,x_max:357,y_min:-178,y_max:178,ha:357,o:"m 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z"},noteheadTriangleUpWhole:{x_min:0,x_max:462,y_min:-149,y_max:149,ha:297,o:"m 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z"},noteheadTriangleUpHalf:{x_min:0,x_max:323,y_min:-149,y_max:149,ha:298,o:"m 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z"},noteheadTriangleUpBlack:{x_min:0,x_max:322,y_min:-149,y_max:149,ha:297,o:"m 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z"},noteheadDiamondWhole:{x_min:0,x_max:462,y_min:-138,y_max:138,ha:277,o:"m 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z"},noteheadDiamondHalf:{x_min:0,x_max:322,y_min:-138,y_max:138,ha:277,o:"m 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z"},noteheadDiamondBlack:{x_min:0,x_max:322,y_min:-138,y_max:138,ha:277,o:"m 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z"},augmentationDot:{x_min:-63,x_max:63,y_min:-63,y_max:63,ha:126,o:"m -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z"},tremolo1:{x_min:-252,x_max:216,y_min:-185,y_max:148,ha:333,o:"m 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z"},flag8thUp:{x_min:-17,x_max:234,y_min:-745,y_max:-4,ha:741,o:"m -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z"},flag8thDown:{x_min:-15,x_max:271,y_min:4,y_max:745,ha:741,o:"m 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z"},flag16thUp:{x_min:-17,x_max:234,y_min:-847,y_max:-4,ha:843,o:"m -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z"},flag16thDown:{x_min:-15,x_max:267,y_min:4,y_max:745,ha:741,o:"m 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z"},flag32ndUp:{x_min:-17,x_max:233,y_min:-1005,y_max:96,ha:1101,o:"m -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z"},flag32ndDown:{x_min:-15,x_max:270,y_min:-96,y_max:895,ha:991,o:"m 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z"},flag64thUp:{x_min:-17,x_max:233,y_min:-933,y_max:296,ha:1230,o:"m -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z"},flag64thDown:{x_min:-15,x_max:271,y_min:-296,y_max:820,ha:1116,o:"m 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z"},flag128thUp:{x_min:-17,x_max:231,y_min:-987,y_max:496,ha:1484,o:"m -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z"},flag128thDown:{x_min:-15,x_max:270,y_min:-496,y_max:870,ha:1366,o:"m 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z"},accidentalFlat:{x_min:-15,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalNatural:{x_min:0,x_max:176,y_min:-334,y_max:334,ha:667,o:"m 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z"},accidentalSharp:{x_min:0,x_max:239,y_min:-388,y_max:388,ha:775,o:"m 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z"},accidentalDoubleSharp:{x_min:0,x_max:271,y_min:-135,y_max:135,ha:271,o:"m 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z"},accidentalDoubleFlat:{x_min:-15,x_max:356,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z"},accidentalParensLeft:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},accidentalParensRight:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:200,y_min:-165,y_max:457,ha:622,o:"m 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:446,y_min:-165,y_max:457,ha:622,o:"m 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:142,y_min:-373,y_max:373,ha:747,o:"m 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:335,y_min:-391,y_max:391,ha:782,o:"m 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z"},accidentalBuyukMucennebFlat:{x_min:-125,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:284,y_min:-388,y_max:388,ha:775,o:"m 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z"},accidentalBakiyeFlat:{x_min:-129,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalKomaSharp:{x_min:0,x_max:142,y_min:-373,y_max:373,ha:747,o:"m 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:188,y_min:-373,y_max:373,ha:747,o:"m 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z"},articAccentAbove:{x_min:-256,x_max:19,y_min:-114,y_max:114,ha:227,o:"m -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z"},articAccentBelow:{x_min:-256,x_max:19,y_min:-114,y_max:114,ha:227,o:"m -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z"},articTenutoAbove:{x_min:-154,x_max:154,y_min:-15,y_max:15,ha:30,o:"m -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z"},articTenutoBelow:{x_min:-154,x_max:154,y_min:-15,y_max:15,ha:30,o:"m -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z"},articStaccatoAbove:{x_min:-49,x_max:49,y_min:-49,y_max:49,ha:99,o:"m -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z"},articStaccatoBelow:{x_min:-49,x_max:49,y_min:-49,y_max:49,ha:99,o:"m -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z"},articStaccatissimoAbove:{x_min:-53,x_max:53,y_min:0,y_max:184,ha:184,o:"m -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z"},articStaccatissimoBelow:{x_min:-53,x_max:53,y_min:-184,y_max:0,ha:184,o:"m -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z"},articMarcatoAbove:{x_min:-114,x_max:114,y_min:-256,y_max:19,ha:275,o:"m -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z"},articMarcatoBelow:{x_min:-114,x_max:114,y_min:-19,y_max:256,ha:275,o:"m -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z"},fermataAbove:{x_min:-324,x_max:324,y_min:0,y_max:353,ha:353,o:"m -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataBelow:{x_min:-324,x_max:324,y_min:-353,y_max:0,ha:353,o:"m -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataLongAbove:{x_min:-286,x_max:286,y_min:0,y_max:364,ha:364,o:"m -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z"},fermataLongBelow:{x_min:-286,x_max:286,y_min:-364,y_max:0,ha:364,o:"m -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataVeryLongAbove:{x_min:-286,x_max:286,y_min:0,y_max:438,ha:438,o:"m -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataVeryLongBelow:{x_min:-286,x_max:286,y_min:-438,y_max:0,ha:438,o:"m -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataVeryShortAbove:{x_min:-351,x_max:351,y_min:0,y_max:571,ha:571,o:"m -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z"},fermataVeryShortBelow:{x_min:-351,x_max:351,y_min:-571,y_max:0,ha:571,o:"m 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z"},fermataShortAbove:{x_min:-286,x_max:286,y_min:0,y_max:469,ha:469,o:"m -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataShortBelow:{x_min:-286,x_max:286,y_min:-469,y_max:0,ha:469,o:"m -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},breathMarkComma:{x_min:0,x_max:168,y_min:-155,y_max:155,ha:311,o:"m 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z"},breathMarkUpbow:{x_min:-125,x_max:125,y_min:0,y_max:409,ha:409,o:"m -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z"},caesura:{x_min:0,x_max:457,y_min:-202,y_max:303,ha:504,o:"m 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z"},caesuraCurved:{x_min:0,x_max:370,y_min:-207,y_max:310,ha:517,o:"m 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z"},restMaxima:{x_min:0,x_max:853,y_min:-250,y_max:250,ha:500,o:"m 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z"},restDoubleWhole:{x_min:0,x_max:284,y_min:0,y_max:250,ha:250,o:"m 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z"},restWhole:{x_min:0,x_max:330,y_min:-125,y_max:0,ha:125,o:"m 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z"},restWholeLegerLine:{x_min:0,x_max:542,y_min:-125,y_max:11,ha:137,o:"m 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z"},restHalf:{x_min:0,x_max:330,y_min:0,y_max:125,ha:125,o:"m 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z"},restHalfLegerLine:{x_min:0,x_max:542,y_min:-11,y_max:125,ha:137,o:"m 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z"},restQuarter:{x_min:0,x_max:221,y_min:-365,y_max:365,ha:730,o:"m 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z"},rest8th:{x_min:0,x_max:258,y_min:-197,y_max:219,ha:416,o:"m 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z"},rest16th:{x_min:0,x_max:331,y_min:-443,y_max:219,ha:662,o:"m 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z"},rest32nd:{x_min:0,x_max:405,y_min:-443,y_max:466,ha:909,o:"m 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z"},rest64th:{x_min:0,x_max:479,y_min:-689,y_max:466,ha:1155,o:"m 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z"},rest128th:{x_min:0,x_max:553,y_min:-689,y_max:712,ha:1401,o:"m 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z"},dynamicPiano:{x_min:-39,x_max:378,y_min:-178,y_max:277,ha:455,o:"m 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z"},dynamicMezzo:{x_min:35,x_max:493,y_min:-19,y_max:272,ha:291,o:"m 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z"},dynamicForte:{x_min:-87,x_max:440,y_min:-182,y_max:415,ha:597,o:"m 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z"},dynamicRinforzando:{x_min:58,x_max:357,y_min:0,y_max:275,ha:275,o:"m 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z"},dynamicSforzando:{x_min:52,x_max:278,y_min:-22,y_max:270,ha:292,o:"m 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z"},dynamicZ:{x_min:23,x_max:309,y_min:2,y_max:250,ha:248,o:"m 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z"},ornamentTrill:{x_min:-249,x_max:249,y_min:0,y_max:376,ha:376,o:"m -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z"},ornamentTurn:{x_min:-310,x_max:310,y_min:-143,y_max:143,ha:286,o:"m -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z"},ornamentTurnSlash:{x_min:-310,x_max:310,y_min:-201,y_max:201,ha:402,o:"m -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z"},ornamentMordent:{x_min:-296,x_max:296,y_min:-215,y_max:198,ha:413,o:"m -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z"},ornamentShortTrill:{x_min:-296,x_max:296,y_min:-127,y_max:127,ha:253,o:"m -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z"},ornamentTremblement:{x_min:-419,x_max:419,y_min:-127,y_max:127,ha:253,o:"m -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z"},ornamentPrecompAppoggTrill:{x_min:-419,x_max:419,y_min:-127,y_max:255,ha:381,o:"m -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:-433,x_max:433,y_min:-243,y_max:127,ha:370,o:"m -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z"},ornamentPrecompSlideTrillBach:{x_min:-433,x_max:433,y_min:-243,y_max:198,ha:442,o:"m 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:-433,x_max:433,y_min:-127,y_max:244,ha:370,o:"m 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:-439,x_max:439,y_min:-127,y_max:236,ha:363,o:"m -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:-439,x_max:439,y_min:-215,y_max:236,ha:451,o:"m -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z"},ornamentPrecompTrillLowerSuffix:{x_min:-439,x_max:439,y_min:-236,y_max:127,ha:362,o:"m -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z"},stringsDownBow:{x_min:-168,x_max:168,y_min:0,y_max:353,ha:353,o:"m -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z"},stringsUpBow:{x_min:-110,x_max:110,y_min:0,y_max:277,ha:277,o:"m -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z"},stringsHarmonic:{x_min:-82,x_max:82,y_min:-82,y_max:82,ha:163,o:"m -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z"},pluckedSnapPizzicatoAbove:{x_min:-110,x_max:110,y_min:-110,y_max:205,ha:315,o:"m -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z"},pluckedSnapPizzicatoBelow:{x_min:-110,x_max:110,y_min:-205,y_max:110,ha:315,o:"m 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z"},pluckedLeftHandPizzicato:{x_min:-155,x_max:155,y_min:-157,y_max:157,ha:315,o:"m -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z"},keyboardPedalPed:{x_min:0,x_max:782,y_min:-1,y_max:500,ha:501,o:"m 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z"},keyboardPedalUp:{x_min:0,x_max:435,y_min:65,y_max:500,ha:435,o:"m 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z"},pictChokeCymbal:{x_min:0,x_max:168,y_min:-155,y_max:155,ha:311,o:"m 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z"},wiggleArpeggiatoUp:{x_min:-8,x_max:269,y_min:0,y_max:126,ha:126,o:"m 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z"},arrowheadBlackUp:{x_min:11,x_max:239,y_min:-6,y_max:269,ha:275,o:"m 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z"},arrowheadBlackDown:{x_min:11,x_max:239,y_min:6,y_max:281,ha:275,o:"m 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z"}},fontFamily:"GonvilleSmufl",resolution:1e3,generatedOn:"2023-04-20T22:11:26.009Z"};const Oi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Ri={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Li={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Wi={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},Ii={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Gi{static sortAndUnique(t,e,i){if(t.length>1){const s=[];let n;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","export const VERSION = '4.2.2';\nexport const ID = '7ad933bdf12b4137ce04d3f332a838887d08a595';\nexport const DATE = '2023-07-03T19:56:22.952Z';\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { GonvilleSmuflFont } from './gonville_glyphs';\nexport function loadGonville() {\n Font.load('Gonville', GonvilleSmuflFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-gonville.ts is the entry point for vexflow-gonville.js.\n// This version bundles the Gonville music engraving font.\nimport { Flow } from '../src/flow';\nimport { loadCustom } from '../src/fonts/load_custom';\nimport { loadGonville } from '../src/fonts/load_gonville';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadGonville();\nloadCustom();\nFlow.setMusicFont('Gonville', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","static","Number","isNaN","t","GCD","length","LCM","shift","LCMM","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","fontInfo","st","trim","wt","sz","scaleFactor","parsedWeight","ITALIC","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","loadWebFont","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","defaultRegistry","registry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","ID","children","attrs","newID","getCategory","rendered","getDefaultRegistry","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","toCSSString","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","validate","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","convertSizeToPointValue","fontSizeInPixels","convertSizeToPixelValue","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","MUSIC_FONT_STACK","clef","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","clefProperties","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integer","noteValue","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","artic","spec","keySpec","notes","acc_list","durationNumber","durationToFraction","ticks","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","UNISON","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySignature","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","state","musicFont","currentMusicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accidentalLinePositionsAndSpaceNeeds","prevNote","extraXSpaceNeededForLeftDisplacedNotehead","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","extraXSpaceNeeded","spacingBetweenStaveLines","sort","staveLineAccidentalLayoutMetrics","maxExtraXSpaceNeeded","accidentalLinePositionAndSpaceNeeds","priorLineMetric","currentLineMetric","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","accidentalCodes","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","registeredFonts","formatterInfo","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","isBold","italic","isItalic","perfectMatch","find","partialMatch","fontSizeInPt","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","create","verticalSpaceNeeded","glyphWidth","getGlyphProps","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","articulationCodes","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","durationString","dots","noteStruct","durationProps","parseDuration","customTypes","durationToTicks","currentTicks","parsedNoteStruct","parseNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","glyphCode","engravingFontResolution","spacingBetweenBlocks","metric","getMetricForGlyph","yOffset","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","symbolModifier","SUPERSCRIPT","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","scaleSize","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","isSuperscript","sub","isSubscript","superSubScale","adj","symbolType","GLYPH","superSubFontSize","getWidthForGlyph","getYShiftForGlyph","getXShiftForGlyph","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","durationToNumber","breve_lines","drawSlashNoteHead","renderGlyph","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","noteUHead","noteLHead","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","keyProperties","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","format","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","TickContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","tick","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","ornamentCodes","adjustForStemDirection","stemUpYOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","getNextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","getPoint","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","dpr","sanitizeCanvasDims","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","elementId","backend","background","renderer","lastContext","buildContext","Backends","CANVAS","SVG","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","extraXSpaceForDisplacedNotehead","glyphLine","num_shiftR","num_width","num_x_shift","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","drawDashedLine","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","accList","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","lineShift","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","getInfo","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClef","clefSpec","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","paddingBetween","accumulator","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","auto_beam","align_rests","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","AlignRestsToNotes","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","buildAndAttach","setId","commaSeparatedRegex","setClass","defaults","easyScoreHook","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","pedal","MIXED","setCustomText","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","formatBegModifiers","plotDebugging","plotMetrics","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","tabToGlyphProps","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","integerToNote","Flow","BUILD","VERSION","DATE","fontNames","fontModuleOrPath","hasKeySignature","getKeySignatures","CommonMetrics","smufl","endPaddingMax","endPaddingMin","unalignedNotePadding","csymDiminished","csymHalfDiminished","csymAugmented","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","csymMajorSeventh","accidentalSharp","accidentalFlat","clef_default","shiftX","clef_small","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","default","gracenote","pedalMarking","digits","shiftLine","articStaccatissimoAbove","articStaccatissimoBelow","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadTriangleUpWhole","noteheadXHalf","noteheadXBlack","noteheadXWhole","noteheadHalf","noteheadBlack","noteheadSquareWhite","staveTempo","gClef","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","breathMarkTick","breathMarkComma","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","CustomFont","vexAccidentalMicrotonal1","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","GonvilleSmuflFont","bracketTop","bracketBottom","barlineTick","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadCircleX","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalNatural","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","generatedOn","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","cmp","eq","newArr","last","canvasSelector","start_time","Date","getTime","setMusicFont","fontData","registerInfo","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-leland.js b/build/cjs/vexflow-leland.js new file mode 100644 index 0000000000..1a091c0d8f --- /dev/null +++ b/build/cjs/vexflow-leland.js @@ -0,0 +1,7 @@ +/*! + * VexFlow 4.2.2 2023-07-03T19:56:22.952Z 7ad933bdf12b4137ce04d3f332a838887d08a595 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function s(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let s=t.constructor;if(i){for(;null!==t;){if(s=t.constructor,"CATEGORY"in s&&s.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in s&&s.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>st,Annotation:()=>mt,AnnotationHorizontalJustify:()=>ct,AnnotationVerticalJustify:()=>dt,Articulation:()=>ft,BEAM_BOTH:()=>Re,BEAM_LEFT:()=>Fe,BEAM_RIGHT:()=>Oe,BarNote:()=>Dt,Barline:()=>kt,BarlineType:()=>Et,Beam:()=>Le,Bend:()=>Mt,BoundingBox:()=>C,BoundingBoxComputation:()=>P,Builder:()=>Ke,CanvasContext:()=>Zt,Category:()=>x,ChordSymbol:()=>Ot,ChordSymbolHorizontalJustify:()=>Bt,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>_e,ClefNote:()=>We,Crescendo:()=>Ie,Curve:()=>Ue,CurvePosition:()=>Ge,Dot:()=>Rt,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>L,Factory:()=>vi,Flow:()=>ki,Font:()=>F,FontStyle:()=>A,FontWeight:()=>N,Formatter:()=>Ae,Fraction:()=>E,FretHandFinger:()=>Lt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>Ei,KeySigNote:()=>si,KeySignature:()=>xe,Modifier:()=>tt,ModifierContext:()=>ge,ModifierPosition:()=>J,MultiMeasureRest:()=>ai,Music:()=>et,Note:()=>vt,NoteHead:()=>Wt,NoteSubGroup:()=>Vt,Ornament:()=>$t,OutlineCode:()=>$,Parenthesis:()=>Jt,Parser:()=>He,PedalMarking:()=>ri,Piece:()=>Ve,Registry:()=>R,RenderContext:()=>yt,Renderer:()=>he,RendererBackends:()=>ne,RendererLineEndType:()=>ae,RepeatNote:()=>li,Repetition:()=>be,RuntimeError:()=>b,SVGContext:()=>se,Stave:()=>Be,StaveConnector:()=>Pe,StaveHairpin:()=>Bi,StaveLine:()=>di,StaveModifier:()=>At,StaveModifierPosition:()=>wt,StaveNote:()=>Ut,StaveSection:()=>ue,StaveTempo:()=>pe,StaveText:()=>ye,StaveTie:()=>Yt,Stem:()=>nt,StemmableNote:()=>It,StringNumber:()=>le,Stroke:()=>ce,SymbolModifiers:()=>Nt,SymbolTypes:()=>Pt,System:()=>mi,TabNote:()=>gi,TabSlide:()=>Ci,TabStave:()=>_i,TabTie:()=>zt,TextBracket:()=>ui,TextBracketPosition:()=>bi,TextDynamics:()=>fi,TextFormatter:()=>lt,TextJustification:()=>oe,TextNote:()=>fe,TickContext:()=>Kt,Tickable:()=>Tt,TimeSigNote:()=>yi,TimeSignature:()=>ve,TimeSignatureGlyph:()=>Te,Tremolo:()=>Pi,Tuning:()=>Ni,Tuplet:()=>De,TupletLocation:()=>ke,Vex:()=>Gi,Vibrato:()=>de,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>Ht,Volta:()=>Se,VoltaType:()=>re,defined:()=>p,drawDot:()=>St,globalObject:()=>u,isAccidental:()=>n,isAnnotation:()=>a,isBarline:()=>o,isCategory:()=>s,isDot:()=>r,isGraceNote:()=>h,isGraceNoteGroup:()=>l,isHTMLCanvas:()=>qt,isHTMLDiv:()=>Qt,isNote:()=>c,isRenderContext:()=>d,isStaveNote:()=>m,isStemmableNote:()=>g,isTabNote:()=>_,log:()=>f,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>y});const n=t=>s(t,x.Accidental),a=t=>s(t,x.Annotation),o=t=>s(t,x.Barline),r=t=>s(t,x.Dot),h=t=>s(t,x.GraceNote),l=t=>s(t,x.GraceNoteGroup),c=t=>s(t,x.Note),d=t=>s(t,x.RenderContext),m=t=>s(t,x.StaveNote),g=t=>s(t,x.StemmableNote),_=t=>s(t,x.TabNote);var x;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(x||(x={}));class b extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function u(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function p(t,e="undefined",i=""){if(void 0===t)throw new b(e,i);return t}function f(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");u().console.log(t+": "+i)}function y(...t){const e=t.join(" "),i=new Error;u().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var s,n;return i%2>0&&(i=((s=10*i)%(n=5)>=n/2?parseInt(""+s/n,10)*n+n:parseInt(""+s/n,10)*n)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class E{static get CATEGORY(){return x.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new b("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/E.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?E.LCM(t[0],t[1]):E.LCM(t.shift(),E.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=E.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a+i*o;return this.set(r,n)}subtract(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a-i*o;return this.set(r,n)}multiply(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*i,this.denominator*s)}divide(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*s,this.denominator*i)}equals(t){const e=E.__staticFractionA.copy(t).simplify(),i=E.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new E(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return E.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=E.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),s=e[1]?parseInt(e[1],10):1;return this.set(i,s)}}function B(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}E.__staticFractionA=new E,E.__staticFractionB=new E,E.__staticFractionTmp=new E;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,s){this.x=t,this.y=e,this.w=i,this.h=s}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,s,n,a){this.addPoint(t,e),this.addPoint(n,a);const o=i-t;let r=o-(n-i);if(0!=r){const e=o/r;if(e>0&&e<1){const s=1-e;this.addX(s*s*t+2*s*e*i+e*e*n)}}const h=s-e;if(r=h-(a-s),0!=r){const t=h/r;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*s+t*t*a)}}}addBezierCurve(t,e,i,s,n,a,o,r){const h=[t,e],l=[i,s],c=[n,a],d=[o,r];let m;this.addPoint(h[0],h[1]),this.addPoint(d[0],d[1]);const g=(t,e)=>Math.pow(1-t,3)*h[e]+3*Math.pow(1-t,2)*t*l[e]+3*(1-t)*Math.pow(t,2)*c[e]+Math.pow(t,3)*d[e];for(m=0;m<=1;m++){const t=6*h[m]-12*l[m]+6*c[m],e=-3*h[m]+9*l[m]-9*c[m]+3*d[m],i=3*l[m]-3*h[m];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===A.ITALIC}static loadWebFont(t,e,i=!0){return k(this,void 0,void 0,(function*(){const s=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield s.load(),document.fonts.add(s),s}))}static loadWebFonts(){return k(this,void 0,void 0,(function*(){const t=F.WEB_FONT_HOST,e=F.WEB_FONT_FILES;for(const i in e){const s=e[i];F.loadWebFont(i,t+s)}}))}static load(t,e,i){let s=M[t];return s||(s=new F(t),M[t]=s),e&&s.setData(e),i&&s.setMetrics(i),s}constructor(t){this.name=t}getName(){return this.name}getData(){return p(this.data,"FontError","Missing font data")}getMetrics(){return p(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let s=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class L{static get CATEGORY(){return x.Element}static newID(){return"auto"+L.ID++}constructor(){var t;this.children=[],this.attrs={id:L.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=R.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const s=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return s&&(s.splice(s.indexOf(t)),this.attrs.class=s.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const s=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:s,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return p(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return F.toCSSString(this.textFont)}setFont(t,e,i,s){const n=this.constructor.TEXT_FONT,a="object"==typeof t,o="string"==typeof t,r=void 0===t,h=void 0===e&&void 0===i&&void 0===s;return this.textFont=a?Object.assign(Object.assign({},n),t):o&&h?F.fromCSSString(t):r&&h?Object.assign({},n):F.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=s?s:n.style),this}getFont(){return this.textFont||this.resetFont(),F.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return F.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return F.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}L.ID=1e3,L.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:N.NORMAL,style:A.NORMAL};const W=16384,I={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},G={w:"1",h:"2",q:"4",b:"256"},U={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},Y={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},z={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},H={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"accidentalBuyukMucennebSharp",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new b("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in Y))throw new b("BadArgument","Invalid clef: "+t);return Y[t]}static keyProperties(t,e="treble",i){let s={octave_shift:0,duration:"4"};"object"==typeof i&&(s=Object.assign(Object.assign({},s),i));const n=V.sanitizeDuration(s.duration),a=t.split("/");if(a.length<2)throw new b("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=a[0].toUpperCase(),r=z[o];if(!r)throw new b("BadArguments","Invalid key name: "+o);r.octave&&(a[1]=r.octave.toString());let h=parseInt(a[1],10);h+=-1*s.octave_shift;let l=(7*h-28+r.index)/2;l+=V.clefProperties(e).line_shift;let c=0;l<=0&&2*l%2==0&&(c=1),l>=6&&2*l%2==0&&(c=-1);const d=void 0!==r.int_val?12*h+r.int_val:void 0,m=r.code,g=r.shift_right;let _={};if(a.length>2&&a[2]){const t=a[2].toUpperCase();_={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:h,line:l,int_value:d,accidental:r.accidental,code:m,stroke:c,shift_right:g,displaced:!1},_)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new b("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new b("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,s=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new b("InvalidMetrics","Width and height required");s=t.width,n=-t.height/2}else s=V.textWidth(t);return{text:t,code:i,getWidth:()=>s*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return H[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=U[t];if(!e)throw new b("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],s=[];for(let t=0;tZ.getWidth(a,t)}),s)}}V.UNISON=!0,V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=W,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=H,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:W};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,s){this.outline=t,this.originX=e,this.originY=i,this.scale=s,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let s=0;for(;s{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(a)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new b("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new b("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new b("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let s=i[3];return s||(s="M"),{root:t,accidental:e,type:s}}throw new b("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new b("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new b("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new b("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new b("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new b("BadArguments",`Invalid direction: ${i}`);let s=(t+i*e)%et.NUM_TONES;return s<0&&(s+=et.NUM_TONES),s}getRelativeNoteName(t,e){const i=this.getNoteParts(t),s=this.getNoteValue(i.root);let n=e-s;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const a=(e+1+(s+1))%et.NUM_TONES*i;if(Math.abs(a)>2)throw new b("BadArguments",`Notes not related: ${t}, ${e})`);n=a}if(Math.abs(n)>2)throw new b("BadArguments",`Notes not related: ${t}, ${e})`);let a=i.root;if(n>0)for(let t=1;t<=n;++t)a+="#";else if(n<0)for(let t=-1;t>=n;--t)a+="b";return a}getScaleTones(t,e){const i=[t];let s=t;for(let n=0;ne.line-t.line));const c=[];let d=0;for(let t=0;tc[i+t],a=t=>t.map(n),o=(t,e)=>{const[i,s]=a([t,e]).map((t=>t.line));return i-s},r=(...t)=>t.map(a).every((([t,e])=>!this.checkCollision(t,e))),h=s-i+1;let l,d,g=this.checkCollision(c[i],c[s])?"a":"b";switch(h){case 3:"a"===g&&.5===o(1,2)&&.5!==o(0,1)&&(g="second_on_bottom");break;case 4:r([0,2],[1,3])&&(g="spaced_out_tetrachord");break;case 5:"b"===g&&r([1,3])&&(g="spaced_out_pentachord",r([0,2],[2,4])&&(g="very_spaced_out_pentachord"));break;case 6:r([0,3],[1,4],[2,5])&&(g="spaced_out_hexachord"),r([0,2],[2,4],[1,3],[3,5])&&(g="very_spaced_out_hexachord")}if(h>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+ed?m:d}else for(l=t;l<=s;l++)d=V.accidentalColumnsTable[h][g][l-t],c[l].column=d,m=m>d?m:d;t=s}const g=[],_=[];for(let t=0;t<=m;t++)g[t]=0,_[t]=0;g[0]=n+d,_[0]=n,c.forEach((t=>{t.width>g[t.column]&&(g[t.column]=t.width)}));for(let t=1;t{let e=0;const i=b+t.numAcc;for(;b0?(s=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(s=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new E(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=s[e.value()];n?n.push(t):(i.push(e.value()),s[e.value()]=[t]),e.add(t.getTicks())}))}));const a=new et;e||(e="C");const o=a.createScaleMap(e),r={};i.forEach((t=>{const e=s[t],i=[],h=t=>{if(!m(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,s)=>{const h=a.getNoteParts(t.split("/")[0]),l=t.split("/")[1],c=h.accidental||"n",d=h.root+c;r[h.root+l]||(r[h.root+l]=o[h.root]);const m=r[h.root+l]===d,g=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==c&&t.getIndex()==s&&e.getModifiers().splice(i,1)})),!m||m&&g){r[h.root+l]=d;const n=new st(c);e.addModifier(n,s),i.push(t)}})),e.getModifiers().forEach((t=>{l(t)&&t.getGraceNotes().forEach(h)}))};e.forEach(h)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),p(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=p(this.parenLeft),e=p(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return p(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,h(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:s,x_shift:n,y_shift:a,glyph:o,render_options:{parenLeftPadding:r,parenRightPadding:h}}=this,l=this.checkContext(),c=this.checkAttachedNote();this.setRendered();const d=c.getModifierStartXY(e,i);let m=d.x+n;const g=d.y+a;if(it("Rendering: ",t,m,g),s){const t=p(this.parenLeft),e=p(this.parenRight);e.render(l,m,g),m-=e.getMetrics().width,m-=h,m-=this.accidental.parenRightPaddingAdjustment,o.render(l,m,g),m-=o.getMetrics().width,m-=r,t.render(l,m,g)}else o.render(l,m,g)}}st.DEBUG=!1;class nt extends L{static get CATEGORY(){return x.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new b("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,s=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:s+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const s=this.stem_direction;let n=0;s===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const a=this.getHeight();!function(...t){nt.DEBUG&&f("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?a-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-a-this.renderHeightAdjustment*s),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function at(...t){lt.DEBUG&&f("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},rt={},ht={};class lt{static getFontFamilies(){const t=[];for(const e in ht){const i=ht[e];t.push(Object.assign({},i))}return t}static create(t={}){at("create: ",t),t.family||(t.family=F.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ht)i.startsWith(t)&&e.push(ht[i]);if(e.length>0)break}let s;if(0===e.length)s=new lt(Object.values(ht)[0]);else if(1===e.length)s=new lt(e[0]);else{const i=F.isBold(t.weight),n=F.isItalic(t.style),a=e.find((t=>t.bold===i&&t.italic===n));if(a)s=new lt(a);else{const t=e.find((t=>t.italic===n||t.bold===i));s=new lt(t||e[0])}}const n=t.size;if(void 0!==n){const t=F.convertSizeToPointValue(n);s.setFontSize(t)}return s}static getInfo(t){return ht[t]}static registerInfo(t,e=!1){at("registerInfo: ",t,e);const i=t.family;(void 0===ht[i]||e)&&(ht[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===rt[this.cacheKey]&&(rt[this.cacheKey]={}),null!==(t=rt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?N.BOLD:N.NORMAL,s=this.italic?A.ITALIC:A.NORMAL;this.cacheKey=`${t}%${e}%${i}%${s}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},s=e[t];if(void 0!==s)return s;for(let e=0;et>e?t:e)),h+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+o,d&&i===nt.DOWN&&(h=Math.max(h,l.topY+o+c*this.text_line))}else if(this.verticalJustification===dt.CENTER){const t=e.getYForTopText(this.text_line)-1;h=t+(m.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===dt.TOP){h=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,d&&i===nt.UP&&(c=l.topY=1}function ut(t,e){return bt(t,e)?e===gt?Math.ceil:Math.floor:Math.round}const pt=t=>m(t)||h(t);class ft extends tt{static get CATEGORY(){return x.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const s=(t,e,i)=>xt(ut(e,i),p(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let a=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let r=0;if(g(n)){const t=n.getStem();t&&(r=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const h=n.getStave();if(h&&(a=h.getNumLines()),t.getPosition()===gt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=r);let h=s(t,e.top_text_line,gt);const l=i+e.top_text_line+.5;!t.articulation.between_lines&&lt.getWidth())).reduce(((t,e)=>Math.max(e,t))),a=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=a/2,e.right_shift+=a/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const s={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:s[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=gt,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=gt),this.type.endsWith("Below")&&(this.position=_t));const t=(this.position===gt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),p(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(p(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:s,glyph:n,text_line:a}=this,o=this.articulation.between_lines,r=e.checkStave(),h=r.getSpacingBetweenLines(),l=_(e),{x:c}=e.getModifierStartXY(s,i),d=!o||l,m=function(t,e){const i=e===gt&&t.getStemDirection()===nt.UP||e===_t&&t.getStemDirection()===nt.DOWN;return pt(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,s),g=V.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let x={[gt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?s:n:Math.min(...t.getYs());if(_(t))return t.hasStem()&&i===nt.UP?s:t.checkStave().getYForTopText(e);throw new b("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)-(a+m)*h;return d?Math.min(r.getYForTopText(ft.INITIAL_OFFSET),t):t},[_t]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?n:s:Math.max(...t.getYs());if(_(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):s:t.checkStave().getYForBottomText(e);throw new b("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)+(a+m)*h;return d?Math.max(r.getYForBottomText(ft.INITIAL_OFFSET),t):t}}[s]();if(!l){const t=s===gt?-1:1,a=e.getKeyProps()[i].line,r=(e.getYs()[i]-x)/h+Number(a),l=function(t,e,i,s){const n=xt(ut(e,i),e);if(t&&bt(n,i)&&n%1==0)return n+.5*-s;return n}(o,r,s,t);bt(l,s)&&n.setOrigin(.5,.5),x+=Math.abs(l-r)*h*t+g*t}!function(...t){ft.DEBUG&&f("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${c}, y: ${x})`),n.render(t,c,x)}}ft.DEBUG=!1,ft.INITIAL_OFFSET=-.5;class yt{static get CATEGORY(){return x.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,s="#F55"){t.save(),t.setFillStyle(s),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends L{static get CATEGORY(){return x.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new E(0,1),this.intrinsicTicks=0,this.tickMultiplier=new E(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new b("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return p(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const s=this.tupletStack.indexOf(t);return-1!==s&&(this.tupletStack.splice(s,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const s=_.space.deviation,n=s>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(s),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const s=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");s[e]=n&&3===n.length?n[2]:i})));let n=V.durationToTicks(e.duration);if(!n)return;const a=t.dots?t.dots:e.dots;if("number"!=typeof a)return;let o=n;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new b("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new b("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(x.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return p(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new b("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new b("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new b("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}static getPoint(t){return"default"==t?V.NOTATION_FONT_SCALE:V.NOTATION_FONT_SCALE/5*3}getStemDirection(){throw new b("NoStem","No stem attached to this note.")}getStemExtents(){throw new b("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Et,Bt,Ct,Pt,Nt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class At extends L{static get CATEGORY(){return x.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,s=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+s)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Et||(Et={}));class kt extends At{static get CATEGORY(){return x.Barline}static get type(){return Et}static get typeString(){return{single:Et.SINGLE,double:Et.DOUBLE,end:Et.END,repeatBegin:Et.REPEAT_BEGIN,repeatEnd:Et.REPEAT_END,repeatBoth:Et.REPEAT_BOTH,none:Et.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=Et;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Et.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Et.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Et.END:this.drawVerticalEndBar(t,this.x);break;case Et.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Et.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Et.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();i&&s.fillRect(e-3,n,1,a-n),s.fillRect(e,n,1,a-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),s=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,s,1,n-s),i.fillRect(e-2,s,3,n-s)}drawRepeatBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();let o=3;i||(o=-5),s.fillRect(e+o,n,1,a-n),s.fillRect(e-2,n,3,a-n);i?o+=4:o-=4;const r=e+o+1;let h=(t.getNumLines()-1)*t.getSpacingBetweenLines();h=h/2-t.getSpacingBetweenLines()/2;let l=n+h+1;s.beginPath(),s.arc(r,l,2,0,2*Math.PI,!1),s.fill(),l+=t.getSpacingBetweenLines(),s.beginPath(),s.arc(r,l,2,0,2*Math.PI,!1),s.fill()}}class Dt extends vt{static get CATEGORY(){return x.BarNote}constructor(t=Et.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Et;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Dt.DEBUG&&f("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t);const e=new kt(this.type);e.setX(this.getAbsoluteX()),e.draw(this.checkStave()),this.restoreStyle(t),this.setRendered()}}Dt.DEBUG=!1;class Mt extends tt{static get CATEGORY(){return x.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let s=0;st{const a=t+s,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(a,o,t+s,n),e.stroke(),e.restore()},c=(t,i,s,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+s,n,t+s,i),e.stroke(),e.restore()},d=(t,i,s)=>{const n=i+4*s;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},m=(t,i)=>{e.save(),e.setFont(this.textFont);const s=t-e.measureText(i).width/2;e.fillText(i,s,h),e.restore()};let g,_=0,x=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){m(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=l.symbolBlocks[t-1];Ot.isSuperscript(e)||(n=s)}a&&n>0&&(b=!0,e.xShift=e.xShift+(n-s),s=n,n=0,l.setEnableKerning(!1)),i||a||(n=0),e.vAlign=b,s+=e.width,_=s}if(l.updateKerningAdjustments(),l.updateOverBarAdjustments(),l.getVertical()===Ct.TOP?(l.setTextLine(e.top_text_line),e.top_text_line+=x):(l.setTextLine(e.text_line+1),e.text_line+=x+1),l.getReportWidth()&&g(m)){const t=m.getGlyphProps().getWidth();l.getHorizontal()===Bt.LEFT?(r=Math.max(t,r),a=Math.max(a,_)+Ot.minPadding):l.getHorizontal()===Bt.RIGHT?(h=Math.max(t,h),o=Math.max(o,_)):(a=Math.max(a,_/2)+Ot.minPadding,o=Math.max(o,_/2),r=Math.max(t/2,r),h=Math.max(t/2,h))}s=0}const l=Math.min(Math.max(o-h,0),Math.max(o-e.right_shift,0)),c=Math.min(Math.max(a-r,0),Math.max(a-e.left_shift,0));return e.left_shift+=c,e.right_shift+=l,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Bt.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:N.NORMAL,style:A.NORMAL}}get superscriptOffset(){return Ot.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Ot.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Pt.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let s=0;for(;s0?this.symbolBlocks[t-1]:void 0;let s=0;e.symbolType===Pt.GLYPH&&void 0!==e.glyph&&e.glyph.code===Ot.glyphs.over.code&&(s+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Pt.GLYPH&&void 0!==i.glyph&&i.glyph.code===Ot.glyphs.over.code&&(s+=i.glyph.metrics.x_shift);let n=!1,a=!1;void 0!==i&&i.symbolType===Pt.TEXT&&(n=Ot.upperKerningText.some((t=>t===i.text[i.text.length-1])),a=Ot.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Ot.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===Nt.SUPERSCRIPT&&(s+=o),a&&e.symbolType===Pt.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(s+=o/2),Ot.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(s+=o/2)),s}getSymbolBlock(t={}){var e,i,s;const n=null!==(e=t.symbolType)&&void 0!==e?e:Pt.TEXT,a={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(s=t.symbolModifier)&&void 0!==s?s:Nt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Pt.GLYPH&&"string"==typeof t.glyph){const e=Ot.glyphs[t.glyph],i=20;a.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Pt.TEXT?a.width=this.textFormatter.getWidthForTextInEm(a.text):n===Pt.LINE&&(a.width=t.width);return a}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Pt.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Pt.TEXT,i=Nt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Pt.TEXT,i=Nt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Pt.GLYPH,i=Nt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Pt.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let s=0;s0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Pt.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,s){return super.setFont(t,e,i,s),this.textFormatter=lt.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Ot.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Ot.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,s=0;for(s=0;s0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let s;t.setFont(this.textFont);const n=e.hasStem(),a=e.checkStave();if(this.vertical===Ct.BOTTOM){if(s=a.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;s=Math.max(s,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(s=Math.min(a.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines();s=Math.min(s,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Bt.LEFT?i.x:this.horizontal===Bt.RIGHT?i.x+this.getWidth():this.horizontal===Bt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Ft("Rendering ChordSymbol: ",this.textFormatter,o,s),this.symbolBlocks.forEach((e=>{const i=Ot.isSuperscript(e),n=Ot.isSubscript(e);let a=s;if(Ft("shift was ",e.xShift,e.yShift),Ft("curY pre sub ",a),i&&(a+=this.superscriptOffset),n&&(a+=this.subscriptOffset),Ft("curY sup/sub ",a),e.symbolType===Pt.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:s,style:n}=this.textFont,a=F.scaleSize(i,Ot.superSubRatio);t.setFont(e,a,s,n)}Ft("Rendering Text: ",e.text,o+e.xShift,a+e.yShift),t.fillText(e.text,o+e.xShift,a+e.yShift),(i||n)&&t.restore()}else e.symbolType===Pt.GLYPH&&e.glyph?(a+=e.yShift,Ft("Rendering Glyph: ",e.glyph.code,o+e.xShift,a),e.glyph.render(t,o+e.xShift,a)):e.symbolType===Pt.LINE&&(Ft("Rendering Line : ",e.width,o,a),t.beginPath(),t.setLineWidth(1),t.moveTo(o,s),t.lineTo(o+e.width,a),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Ot.DEBUG=!1,Ot.HorizontalJustify=Bt,Ot.HorizontalJustifyString={left:Bt.LEFT,right:Bt.RIGHT,center:Bt.CENTER,centerStem:Bt.CENTER_STEM},Ot.VerticalJustify=Ct,Ot.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Ot.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Ot.symbolTypes=Pt,Ot.symbolModifiers=Nt,Ot.noFormat=!1;class Rt extends tt{static get CATEGORY(){return x.Dot}static getDots(t){return t.getModifiersByType(Rt.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let a=i,o=0,r=null,h=null,l=null,c=0;for(let t=0;to?a:o,r=m,h=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,h(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),s=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});_(e)&&(s.y=e.getStemExtents().baseY);const n=s.x+this.x_shift+this.width-this.radius,a=s.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,a,this.radius,0,2*Math.PI,!1),t.fill()}}class Lt extends tt{static get CATEGORY(){return x.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:s}=e;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,l=0,c=0,d=0,m=null,g=null;for(let t=0;tc?e:c):o===tt.Position.RIGHT&&(_.setXShift(l),e=r+p,d=e>d?e:d),m=x,g=a}return e.left_shift+=c,e.right_shift+=d,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),s={number:e[0]};return e[1]&&(s.position=e[1]),i.getFactory().Fingering(s)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:s-=4,n-=12;break;case tt.Position.BELOW:s-=2,n+=10;break;case tt.Position.LEFT:s-=this.width;break;case tt.Position.RIGHT:s+=1;break;default:throw new b("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,s,n),t.restore()}}Lt.TEXT_FONT={family:F.SANS_SERIF,size:9,weight:N.BOLD,style:A.NORMAL};class Wt extends vt{static get CATEGORY(){return x.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=V.currentMusicFont(),s=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+s+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Wt.DEBUG&&f("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const s=this.stem_direction,n=this.render_options.glyph_font_scale,a=`${this.glyph_code}Stem${s===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,s,n,a){const o=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let r=!1;if(V.durationToNumber(e)>2&&(r=!0),r||(i-=V.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,s+a),t.lineTo(i,s+1),t.lineTo(i+o,s-a),t.lineTo(i+o,s),t.lineTo(i,s+a),t.closePath(),r?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;nt.getCategory()===x.Dot&&0===t.getIndex())).length!==r.note.getModifiers().filter((t=>t.getCategory()===x.Dot&&0===t.getIndex())).length||t<1&&t>0||JSON.stringify(a.note.getStyle())!==JSON.stringify(r.note.getStyle())?(d=c+2,a.stemDirection===r.stemDirection?a.note.setXShift(d):r.note.setXShift(d)):a.note.voice!==r.note.voice&&a.stemDirection===r.stemDirection&&(a.line!=r.line?(d=c+2,a.note.setXShift(d)):1===r.stemDirection&&(r.stemDirection=-1,r.note.setStemDirection(-1)))}else t<1?(d=c+2,a.note.durationt.postFormat())),!0)}constructor(t){var e,i,s;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Ut.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(s=t.stem_direction)&&void 0!==s?s:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const s=t[i];s&&e.setStyle(s)}));const e=this.stave;return e&&this.setStave(e),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,s,n,a,o,r=!1;t===nt.UP?(n=0,a=e.length,o=1):(n=e.length-1,a=-1,o=-1);for(let e=n;e!==a;e+=o){const n=this.sortedKeyProps[e].keyProps,a=n.line;void 0===i?i=a:(s=Math.abs(i-a),0===s||.5===s?r=!r:(r=!1,this.use_default_head_x=!0)),i=a;const o=new Wt({duration:this.duration,note_type:this.noteType,displaced:r,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=a,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new b("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:s,leftDisplacedHeadPx:n}=this.getMetrics(),a=this.getAbsoluteX()-s-n;let o=0,r=0;const h=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,l=2*h;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-h,r=t+h):(o=t-this.glyphProps.line_above*l,r=t+this.glyphProps.line_below*l)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=h*this.getStemDirection(),o=Math.min(t.topY,t.baseY),r=Math.max(t.topY,t.baseY)}else{o=0,r=0;for(let t=0;te&&(e=s):s1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var s,n;if(!this.preFormatted)throw new b("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new b("NoYValues","No Y-Values calculated for this note.");const{ABOVE:a,BELOW:o,LEFT:r,RIGHT:h}=tt.Position;let l=0;return t===r?l=-2:t===h?(l=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(l+=null!==(n=null===(s=null==this?void 0:this.flag)||void 0===s?void 0:s.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==a||(l=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+l,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Ut.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,s,n=1/0,a=-1/0,o=this.checkStave().getNumLines(),r=1,h=o,l=r;return this._noteHeads.forEach((c=>{const d=c.getLine(),m=c.getY();n=Math.min(m,n),a=Math.max(m,a),void 0===e&&c.isDisplaced()&&(e=c.getAbsoluteX()),void 0!==t||c.isDisplaced()||(t=c.getAbsoluteX()),o=Math.max(d,o),r=Math.min(d,r),c.isDisplaced()?(i=void 0===i?d:Math.max(d,i),s=void 0===s?d:Math.min(d,s)):(h=Math.max(d,h),l=Math.min(d,l))}),this),{y_top:n,y_bottom:a,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:r,highest_displaced_line:i,lowest_displaced_line:s,highest_non_displaced_line:h,lowest_non_displaced_line:l}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,s=this.checkContext(),n=e.getWidth()+2*i,a=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!s)throw new b("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:r,highest_displaced_line:h,highest_non_displaced_line:l,lowest_displaced_line:c,lowest_non_displaced_line:d,displaced_x:m,non_displaced_x:g}=this.getNoteHeadBounds();if(o<6&&r>0)return;const _=Math.min(null!=m?m:0,null!=g?g:0),x=(t,e,o)=>{let r;r=o&&e?_-i:e?(null!=g?g:0)-i:(null!=m?m:0)-i;const h=e&&o?a:n;s.beginPath(),s.moveTo(r,t),s.lineTo(r+h,t),s.stroke()},u=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(s,u);for(let e=6;e<=o;++e){const i=void 0!==g&&e<=l,s=void 0!==h&&e<=h;x(t.getYForNote(e),i,s)}for(let e=0;e>=r;--e){const i=void 0!==g&&e>=d,s=void 0!==c&&e>=c;x(t.getYForNote(e),i,s)}this.restoreStyle(s,u)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const s=i-3.5;if(s<=0)return t;const n=this.getStave();let a=10;return null!=n&&(a=n.getSpacingBetweenLines()),t+s*a}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new b("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Ut.DEBUG&&f("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Ut.DEBUG=!1;class Yt extends L{static get CATEGORY(){return x.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new b("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new b("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new b("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,s=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,s=8);const n=this.render_options.first_x_shift,a=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,r=this.notes.first_indices,h=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let l=0;lMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===Ht.STRICT||this.mode===Ht.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new b("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let s=0;s1){const e=new Le(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Ut.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&f("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=m(e),s=i?Yt:zt;this.slur=new s({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return x.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new Ae,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt{static getNextContext(t){const e=t.tContexts,i=e.indexOf(t);if(i+1t.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new b("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t=0&&(r.x_shift+=s+2),$t.ornamentAttack.indexOf(r.type)>=0&&(r.x_shift-=n+2),r.reportedWidth&&r.x_shift<0?n+=r.reportedWidth:r.reportedWidth&&r.x_shift>=0?s+=r.reportedWidth+$t.minPadding:i=Math.max(r.getWidth(),i),$t.ornamentArticulation.indexOf(r.type)>=0){p(r.note,"NoAttachedNote").getLineNumber()>=3||r.getPosition()===tt.Position.ABOVE?(e.top_text_line+=h,r.y_shift+=a,a-=r.glyph.bbox.getH()):(e.text_line+=h,r.y_shift+=a,a+=r.glyph.bbox.getH())}else r.getPosition()===tt.Position.ABOVE?(r.setTextLine(e.top_text_line),e.top_text_line+=h):(r.setTextLine(e.text_line),e.text_line+=h)}return e.left_shift=n+i/2,e.right_shift=s+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new b("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:V.NOTATION_FONT_SCALE,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=$t.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new b("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),$t.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),s=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let a=i===nt.DOWN?n.baseY:n.topY;_(e)&&(e.hasStem()?i===nt.DOWN&&(a=s.getYForTopText(this.text_line)):a=s.getYForTopText(this.text_line));const o=i===nt.DOWN,r=s.getSpacingBetweenLines();let h=1;!o&&e.hasBeam()&&(h+=.5);const l=a-r*(this.text_line+h),c=e.getModifierStartXY(this.position,this.index);let d=c.x,m=this.ornamentAlignWithNoteHead?c.y:Math.min(s.getYForTopText(this.text_line),l);if(m+=this.y_shift,this.delayed){let t=0;const i=d-(s.getX()-10);if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=Kt.getNextContext(e.getTickContext());t+=n?.5*(n.getX()-i):.5*(s.getX()+s.getWidth()-i),this.delayXShift=t}d+=t}!function(...t){$t.DEBUG&&f("Vex.Flow.Ornament",t)}("Rendering ornament: ",this.ornament,d,m),this.accidentalLower&&(this.accidentalLower.render(t,d,m),m-=this.accidentalLower.getMetrics().height,m-=this.render_options.accidentalLowerPadding),this.stemUpYOffset&&e.hasStem()&&1===e.getStemDirection()&&(m+=this.stemUpYOffset),e.getLineNumber()<5&&$t.ornamentNoteTransition.indexOf(this.type)>=0&&(m=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,d+this.x_shift,m),this.accidentalUpper&&(m-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,d,m)),t.closeGroup(),this.restoreStyle()}}$t.DEBUG=!1;class Jt extends tt{static get CATEGORY(){return x.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;th+n.width?s:h+n.width),o===J.LEFT&&(h=a.getLeftParenthesisPx(r),i=i>h+n.width?i:h+n.width),n.setXShift(h)}return e.left_shift+=i,e.right_shift+=s,!0}constructor(t){var e;super(),this.position=null!=t?t:tt.Position.LEFT,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){var e,i;return this.note=t,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),h(t)&&(this.point=null!==(i=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"))&&void 0!==i?i:vt.getPoint("gracenote"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),s=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,s+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,s-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function Qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Zt extends yt{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(y("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Zt.WIDTH,height:Zt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e,i){var s;const n=this.context2D.canvas,a=null!==(s=null!=i?i:u().devicePixelRatio)&&void 0!==s?s:1;return[t,e]=Zt.sanitizeCanvasDims(t*a,e*a),t=t/a|0,e=e/a|0,n.width=t*a,n.height=e*a,qt(n)&&(n.style.width=t+"px",n.style.height=e+"px"),this.scale(a,a)}rect(t,e,i,s){return this.context2D.rect(t,e,i,s),this}fillRect(t,e,i,s){return this.context2D.fillRect(t,e,i,s),this}clearRect(t,e,i,s){return this.context2D.clearRect(t,e,i,s),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,s,n,a){return this.context2D.bezierCurveTo(t,e,i,s,n,a),this}quadraticCurveTo(t,e,i,s){return this.context2D.quadraticCurveTo(t,e,i,s),this}arc(t,e,i,s,n,a){return this.context2D.arc(t,e,i,s,n,a),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,s=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,s=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,s=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:s}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,s){const n=F.validate(t,e,i,s);return this.context2D.font=F.toCSSString(n),this.textHeight=F.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const te={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},ee="http://www.w3.org/2000/svg",ie=2*Math.PI;class se extends yt{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":F.SANS_SERIF,"font-size":F.SIZE+"pt","font-weight":N.NORMAL,"font-style":A.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(ee,t)}openGroup(t,e,i){const s=this.create("g");return this.groups.push(s),this.parent.appendChild(s),this.parent=s,t&&s.setAttribute("class",T(t)),e&&s.setAttribute("id",T(e)),i&&i.pointerBBox&&s.setAttribute("pointer-events","bounding-box"),this.applyAttributes(s,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),s}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new b("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,s=this.height/this.state.scaleY;return this.setViewBox(0,0,i,s),this}setViewBox(t,e,i,s){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+s;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=te[t.nodeName];for(const s in e)i&&i[s]||!e[s]||0!=this.groupAttributes.length&&e[s]==this.groupAttributes[this.groupAttributes.length-1][s]||t.setAttributeNS(null,s,e[s]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,s,n){s<0&&(e+=s,s*=-1);const a=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.applyAttributes(a,Object.assign({x:t,y:e,width:i,height:s},n)),this.add(a),this}fillRect(t,e,i,s){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,s,n),this}clearRect(t,e,i,s){return this.rect(t,e,i,s,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,s,n,a){return n=this.round(n),a=this.round(a),t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.path+="C"+t+" "+e+","+i+" "+s+","+n+" "+a,this.pen.x=n,this.pen.y=a,this}quadraticCurveTo(t,e,i,s){return i=this.round(i),s=this.round(s),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+s,this.pen.x=i,this.pen.y=s,this}arc(t,e,i,s,n,a){let o=t+i*Math.cos(s),r=e+i*Math.sin(s);o=this.round(o),r=this.round(r);const h=v(s),l=v(n);if(!a&&n-s>=ie||a&&s-n>=ie||h===l){let n=t+i*Math.cos(s+Math.PI),a=e+i*Math.sin(s+Math.PI);n=this.round(n),a=this.round(a),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 0 0 ${n} ${a} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${r}`,this.pen.x=o,this.pen.y=r}else{let c,d=t+i*Math.cos(n),m=e+i*Math.sin(n);s=h,n=l,c=Math.abs(n-s)n&&(c=!c);const g=!a;d=this.round(d),m=this.round(m),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 ${+c} ${+g} ${d} ${m}`,this.pen.x=d,this.pen.y=m}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return se.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const s=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,s),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,s){const n=F.validate(t,e,i,s);this.fontCSSString=F.toCSSString(n);const a={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),a),this.state=Object.assign(Object.assign({},this.state),a),this}getFont(){return this.fontCSSString}}var ne,ae,oe,re;se.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let s=this.cache[t];void 0===s&&(s={},this.cache[t]=s);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let a=s[n];return void 0===a&&(a=this.measureImpl(t,e,i),s[n]=a),a}measureImpl(t,e,i){let s=this.txt;s||(s=document.createElementNS(ee,"text"),this.txt=s),s.textContent=t,i["font-family"]&&s.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&s.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&s.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&s.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(s);const n=s.getBBox();return e.removeChild(s),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ne||(ne={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ae||(ae={}));class he{static buildContext(t,e,i,s,n="#FFF"){const a=new he(t,e);i&&s&&a.resize(i,s);const o=a.getContext();return o.setBackgroundFillStyle(n),he.lastContext=o,o}static getCanvasContext(t,e,i,s){return he.buildContext(t,he.Backends.CANVAS,e,i,s)}static getSVGContext(t,e,i,s){return he.buildContext(t,he.Backends.SVG,e,i,s)}static drawDashedLine(t,e,i,s,n,a){t.beginPath();const o=s-e,r=n-i,h=Math.atan2(r,o);let l=e,c=i;t.moveTo(e,i);let d=0,m=!0;for(;!(o<0?l<=s:l>=s)||!(r<0?c<=n:c>=n);){const e=a[d++%a.length],i=l+Math.cos(h)*e;l=o<0?Math.max(s,i):Math.min(s,i);const g=c+Math.sin(h)*e;c=r<0?Math.max(n,g):Math.min(n,g),m?t.lineTo(l,c):t.moveTo(l,c),m=!m}t.closePath(),t.stroke()}constructor(t,e){if(d(t))this.ctx=t;else{if(void 0===e)throw new b("InvalidArgument","Missing backend argument");const i=e;let s;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new b("BadElementId",`Can't find element with ID "${e}"`);s=e}else s=t;if(i===he.Backends.CANVAS){if(!qt(s))throw new b("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=s.getContext("2d",{willReadFrequently:!0});if(!t)throw new b("BadElement","Can't get canvas context");this.ctx=new Zt(t)}else{if(i!==he.Backends.SVG)throw new b("InvalidBackend",`No support for backend: ${i}`);if(!Qt(s))throw new b("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new se(s)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}he.Backends=ne,he.LineEndType=ae,he.lastContext=void 0;class le extends tt{static get CATEGORY(){return x.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,s=e.right_shift;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let i=0;ie.line-t.line));let h=0,l=0,c=0,d=null,g=null;for(let t=0;tc?b:c),d=m,g=e}return e.left_shift+=l,e.right_shift+=c,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=he.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=he.LineEndType.NONE&&t<=he.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),s=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,a={};e.hasStem()&&(a=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&s==nt.DOWN&&(o=a.topY-le.metrics.stemPadding),o+=this.radius+le.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+le.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+le.metrics.rightPadding;break;default:throw new b("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const r=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,r,o+4.5);const h=this.last_note;if(g(h)){const i=h.getStemX()-e.getX()+5;let s,a;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?he.drawDashedLine(t,n+10,o,n+i,o,[3,3]):he.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case he.LineEndType.UP:s=-10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a);break;case he.LineEndType.DOWN:s=10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a)}}t.restore()}}le.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:N.BOLD,style:A.NORMAL};class ce extends tt{static get CATEGORY(){return x.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const s=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(m(e)){const{line:s}=e.getKeyProps()[i];return{line:s,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(_(e)){const{str:s}=e.getPositions()[i];return{line:s,shift:0,stroke:t}}throw new b("Internal","Unexpected instance.")})),n=i,a=s.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=a,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=e.getYs(),n=i.y,a=i.y;const o=i.x-5,r=e.checkStave().getSpacingBetweenLines(),h=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){s-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(s,this.checkStave(),t.line),this.glyphs.push(s);const a=this.xPositions[this.xPositions.length-1],o=s.getMetrics().width+n;this.xPositions.push(a+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,s=i?e.length:e.length-this.accList.length;if(s<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let s;if(this.cancelKeySpec&&(s=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();s&&this.convertAccLines(n,s.type,s.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":s=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":s=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+s,this.timeSignature.point);this.topGlyphs.push(n),r+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0,h=Math.max(h,n.getMetrics().height)}let l=0;for(let t=0;t22?1:0,this.width=Math.max(r,l),this.xMin=this.getMetrics().x_min,this.topStartX=(this.width-r)/2,this.botStartX=(this.width-l)/2,this.reset()}getMetrics(){return{x_min:this.xMin,x_max:this.xMin+this.width,width:this.width}}renderToStave(t){const e=this.checkStave(),i=this.checkContext();let s=t+this.topStartX,n=0;n=this.botGlyphs.length>0?e.getYForLine(this.timeSignature.topLine-this.lineShift):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new b("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new b("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const s=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=s[0])&&void 0!==e?e:"",null!==(i=s[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Te(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(p(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const we={[kt.CATEGORY]:0,[_e.CATEGORY]:1,[xe.CATEGORY]:2,[ve.CATEGORY]:3},Ee={[ve.CATEGORY]:0,[xe.CATEGORY]:1,[kt.CATEGORY]:2,[_e.CATEGORY]:3};class Be extends L{static get CATEGORY(){return x.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,s){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},s),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new kt(this.options.left_bar?Et.SINGLE:Et.NONE)),this.addEndModifier(new kt(this.options.right_bar?Et.SINGLE:Et.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new be(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new Se(t,e,this.x,i)),this}setSection(t,e,i=0,s,n=!0){const a=new ue(t,this.x+i,e,n);return s&&a.setFontSize(s),this.modifiers.push(a),this}setTempo(t,e){return this.modifiers.push(new pe(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new ye(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+t*i+s*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return(t-this.y)/i-s}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+s*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:s}=Et;return t!==e&&t!==i&&t!==s||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Et.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClef(t,e,i,s){void 0===s&&(s=wt.BEGIN),s===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(s,_e.CATEGORY);return 0===n.length?this.addClef(t,e,i,s):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,xe.CATEGORY);return 0===s.length?this.addKeySignature(t,e,i):s[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,ve.CATEGORY);return 0===s.length?this.addTimeSignature(t,e,i):s[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new xe(t,e).setPosition(i),i),this}addClef(t,e,i,s){return void 0===s||s===wt.BEGIN?this.clef=t:s===wt.END&&(this.endClef=t),this.addModifier(new _e(t,e,i),s),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new ve(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,s=void 0===e;return i&&s?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):s?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let s=0;se[t[s+1].getCategory()]){const e=t[s];t[s]=t[s+1],t[s+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),s=this.getModifiers(wt.END);let n,a,r;this.sortByCategory(i,we),this.sortByCategory(s,Ee),i.length>1&&t.getType()===Et.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new kt(Et.SINGLE))),s.indexOf(e)>0&&s.splice(0,0,new kt(Et.NONE));let h=0,l=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new b("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new b("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new b("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new b("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const s=t.getModifiers(wt.BEGIN,e);s.length>0&&s[0].getX()>i&&(i=s[0].getX())}));let s=0;t.forEach((t=>{s=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>s&&(s=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let a=!1;n.forEach((t=>{t.getCategory()===e&&(a=!0),a&&s>0&&t.setX(t.getX()+s)})),t.setNoteStartX(t.getNoteStartX()+s)}))};t.forEach((t=>{t.formatted||t.format()})),e(x.Clef),e(x.KeySignature),e(x.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.setX(i)}))}))}}function Ce(t,e,i,s,n){if(e!==Pe.type.BOLD_DOUBLE_LEFT&&e!==Pe.type.BOLD_DOUBLE_RIGHT)throw new b("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let a=3,o=3.5;e===Pe.type.BOLD_DOUBLE_RIGHT&&(a=-5,o=3),t.fillRect(i+a,s,1,n-s),t.fillRect(i-2,s,o,n-s)}Be.TEXT_FONT={family:F.SANS_SERIF,size:8,weight:N.NORMAL,style:A.NORMAL};class Pe extends L{static get CATEGORY(){return x.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Pe.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Pe.typeString[t]:t;return Object.values(Pe.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new b("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,s=this.width,n=this.top_stave.getX();(this.type===Pe.type.SINGLE_RIGHT||this.type===Pe.type.BOLD_DOUBLE_RIGHT||this.type===Pe.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let a=i-e;switch(this.type){case Pe.type.SINGLE:case Pe.type.SINGLE_LEFT:case Pe.type.SINGLE_RIGHT:s=1;break;case Pe.type.DOUBLE:n-=this.width+2,e-=this.thickness,a+=.5;break;case Pe.type.BRACE:{s=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,r=n,h=i,l=n-s,c=o+a/2,d=l-.9*s,m=o+.2*a,g=n+1.1*s,_=c-.135*a,x=g,b=c+.135*a,u=d,p=h-.2*a,f=l-s,y=p,S=n+.4*s,T=c+.135*a,v=S,w=c-.135*a,E=f,B=m;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(d,m,g,_,l,c),t.bezierCurveTo(x,b,u,p,r,h),t.bezierCurveTo(f,y,S,T,l,c),t.bezierCurveTo(v,w,E,B,n,o),t.fill(),t.stroke();break}case Pe.type.BRACKET:e-=6,i+=6,a=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Pe.type.BOLD_DOUBLE_LEFT:Ce(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Pe.type.BOLD_DOUBLE_RIGHT:Ce(t,this.type,n,e,i-this.thickness);break;case Pe.type.THIN_DOUBLE:s=1,a-=this.thickness;break;case Pe.type.NONE:break;default:throw new b("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Pe.type.BRACE&&this.type!==Pe.type.BOLD_DOUBLE_LEFT&&this.type!==Pe.type.BOLD_DOUBLE_RIGHT&&this.type!==Pe.type.NONE&&t.fillRect(n,e,s,a),this.type===Pe.type.THIN_DOUBLE&&t.fillRect(n-3,e,s,a),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;e{e.addToModifierContext(new ge);const s=(new Kt).addTickable(e).preFormat(),n=s.getMetrics();return s.setX(t+n.totalLeftPx),t+s.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,s,n,a){const o=i+(a=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},a)).stavePadding,r=e.contextGaps;t.save(),t.setFont(F.SANS_SERIF,8),r.gaps.forEach((e=>{var i,a,r;i=o+e.x1,a=o+e.x2,r="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(r),t.setFillStyle(r),t.setLineWidth(1),t.fillRect(i,s,Math.max(a-i,0),n-s),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${r.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,s){let n={auto_beam:!1,align_rests:!1};"object"==typeof s?n=Object.assign(Object.assign({},n),s):"boolean"==typeof s&&(n.auto_beam=s);const a=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),o=n.auto_beam?Le.applyAndGetBeams(a):[];return(new Ae).joinVoices([a]).formatToStave([a],e,{align_rests:n.align_rests,stave:e}),a.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),a.getBoundingBox()}static FormatAndDrawTab(t,e,i,s,n,a,o){let r={auto_beam:a,align_rests:!1};"object"==typeof o?r=Object.assign(Object.assign({},r),o):"boolean"==typeof o&&(r.auto_beam=o);const h=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(n),l=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(s),c=r.auto_beam?Le.applyAndGetBeams(h):[];(new Ae).joinVoices([h]).joinVoices([l]).formatToStave([h,l],i,{align_rests:r.align_rests}),h.draw(t,i),l.draw(t,e),c.forEach((e=>e.setContext(t).draw())),new Pe(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((s,n)=>{if(m(s)&&s.isRest()){if(s.getTuplet()&&!i)return;const a=s.getGlyphProps().position.toUpperCase();if("R/4"!==a&&"B/4"!==a)return;if(e||s.getBeam()){const e=s.getKeyProps()[0];if(0===n)e.line=Ne(t,e.line,n,!1);else if(n>0&&nAe.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,s=0,n=0;const a=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new b("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:r,map:h}=this.tickContexts;this.minTotalWidth=0,r.forEach((e=>{const r=h[e];r.preFormat(),r.getTickables().length{s+=t.getMetrics().width,n+=t.getTicks().value(),a.push(t.getMetrics().width),o.push(t.getTicks().value())}));const l=r.getWidth();this.minTotalWidth+=l})),this.hasMinTotalWidth=!0;const l=s>0?s/a.length:1/a.length,c=w(a.map((t=>Math.pow(t-l,2)))),d=Math.pow(c/a.length,.5)/l,m=n/o.length,g=w(o.map((t=>Math.pow(t-m,2)))),_=Math.pow(g/o.length,.5)/m,x=Math.max(_,d)*r.length*e,u=e*i;return this.minTotalWidth+Math.max(u,x)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new b("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new b("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new b("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new b("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,E.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=Ae.getResolutionMultiplier(t),i=new Map,s=[];t.forEach((t=>{const n=new E(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let a=i.get(t.getStave());if(a||(i.set(t.getStave(),{}),a=i.get(t.getStave())),!(a?a[e]:void 0)){const t=new ge;s.push(t),a[e]=t}t.addToModifierContext(a[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:s,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const s={},n=[],a=[],o=Ae.getResolutionMultiplier(t);return t.forEach(((t,r)=>{const h=new E(0,o);t.getTickables().forEach((t=>{const o=h.numerator;if(!s[o]){const t=e({tickID:o});a.push(t),s[o]=t,n.push(o)}i(t,s[o],r),h.add(t.getTicks())}))})),{map:s,array:a,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Kt(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,s){const n=this.tickContexts;if(!n)throw new b("NoTickContexts","preFormat requires TickContexts");const{list:a,map:o}=n;this.lossHistory=[],i&&s&&i.forEach((t=>t.setStave(s).preFormat()));let r=0,h=0;this.minTotalWidth=0;let l=0;a.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const s=e.getMaxTicks().value();l+=s;const n=e.getMetrics();r=r+h+n.totalLeftPx,e.setX(r),h=i-n.totalLeftPx}));const{globalSoftmax:c,softmaxFactor:d,maxIterations:m}=this.formatterOptions,g=w(a.map((t=>Math.pow(d,o[t].getMaxTicks().value()/l))));if(this.minTotalWidth=r+h,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const _=o[a[0]],x=o[a[a.length-1]];function u(t){return a.map(((e,i)=>{const s=o[e],n=s.getTickablesByVoice();let r;if(i>0){const e=o[a[i-1]];for(let h=i-1;h>=0;h--){const i=o[a[h]].getTickablesByVoice(),m=[];if(Object.keys(n).forEach((t=>{i[t]&&m.push(t)})),m.length>0){let a=0,o=1/0,h=0;if(m.forEach((t=>{const e=i[t].getTicks().value();e>a&&(r=i[t],a=e);const s=n[t],h=s.getX()-(s.getMetrics().modLeftPx+s.getMetrics().leftDisplacedHeadPx),l=i[t].getMetrics(),c=i[t].getX()+l.notePx+l.modRightPx+l.rightDisplacedHeadPx;o=Math.min(o,h-c)})),o=Math.min(o,s.getX()-(e.getX()+.05*t)),c){const e=l;h=Math.pow(d,a/e)/g*t}else void 0!==r&&(h=r.getVoice().softmax(a)*t);return{expectedDistance:h,maxNegativeShiftPx:o,fromTickable:r}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function f(t){const e=y/2;let i=0;return a.forEach(((s,n)=>{const a=o[s];if(n>0){const e=a.getX(),s=t[n],o=p(s.fromTickable).getX()+s.expectedDistance-(e+i);let r=0;o>0?i+=o:o<0&&(r=Math.min(s.maxNegativeShiftPx,Math.abs(o)),i+=-r),a.setX(e+i)}a.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-a.getX())}))})),x.getX()-_.getX()}const y=t-x.getMetrics().notePx-x.getMetrics().totalRightPx-_.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),E=S.lookupMetric("stave.padding");let B=y;const C=u(B);let P=f(C);if(1===a.length)return 0;const N=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=x&&x.getMaxTickable();if(i){const s=i.getVoice();if(s.getTicksUsed().value()>s.getTotalTicks().value())return 2*vM&&F>0||P+k1;)B-=P-M,k=A(B),D=k-(v-T),P=f(u(B)),F--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const s=t.list[i-1],n=t.map[s],a=t.map[e],o=n.getMetrics(),r=a.getMetrics(),h=n.getX()+o.notePx+o.totalRightPx,l=a.getX()-r.totalLeftPx,c=l-h;this.contextGaps.total+=c,this.contextGaps.gaps.push({x1:h,x2:l}),a.getFormatterMetrics().freedom.left=c,n.getFormatterMetrics().freedom.right=c})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,s,n)=>{const a=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),r=t.getFormatterMetrics(),h=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let l=0;if(s{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,s+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(s),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const s=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,a)=>{const o=i.map[t],r=e>0?i.map[a[e-1]]:void 0,h=et.getFormatterMetrics().space.deviation)));l>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(l)):l<0&&(n=h?Math.min(h.getFormatterMetrics().freedom.right,Math.abs(l)):0),n*=s,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const s=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,s.align_rests),this.createTickContexts(t),this.preFormat(e,s.context,t,s.stave),s.stave&&this.postFormat(),this}formatToStave(t,e,i){const s=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-Be.defaultPadding;return function(...t){Ae.DEBUG&&f("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,s)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var ke;Ae.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(ke||(ke={}));class De extends L{static get CATEGORY(){return x.Tuplet}static get LOCATION_TOP(){return ke.TOP}static get LOCATION_BOTTOM(){return ke.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new b("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new b("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=3*V.NOTATION_FONT_SCALE/5,this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||De.LOCATION_TOP),Ae.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),s=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const a=n(e,t);i=a>i?a:i,s=a0&&(s=Math.min(a,s))}}}else{let t=De.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),s=i.checkStave().getYForLine(t)+De.metrics.noteHeadOffset;for(let t=0;ts&&(s=e)}}return s+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const s=(t,e)=>t+p(e.getMetrics().width);let n=this.numerator_glyphs.reduce(s,0);this.ratioed&&(n=this.denom_glyphs.reduce(s,n),n+=.32*this.point);const a=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=V.currentMusicFont().lookupMetric("digits.shiftY",0);let r=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)})),this.ratioed){const e=a+r+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),r+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)}))}}}function Me(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Fe="L",Oe="R",Re="B";class Le extends L{static get CATEGORY(){return x.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new E).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new E(3,i)];if(i>4)return[new E(2,i)];if(i<=4)return[new E(1,i)]}return[new E(1,4)]}static applyAndGetBeams(t,e,i){return Le.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new E(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new b("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),s=t;let n=0,a=[],o=[];function r(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new E(0,1);s.forEach((s=>{if(t=[],s.shouldIgnoreTicks())return a.push(o),void(o=t);o.push(s);const h=i[n].clone(),l=(c=o,c.reduce(((t,e)=>e.getTicks().clone().add(t)),new E(0,1))).add(e);var c;const d=V.durationToNumber(s.getDuration())<8;if(d&&s.getTuplet()&&(h.numerator*=2),l.greaterThan(h)){if(!d){const e=o.pop();e&&t.push(e)}a.push(o);do{e=l.subtract(i[n]),r()}while(e.greaterThanEquals(i[n]));o=t}else l.equals(h)&&(a.push(o),e=new E(0,1),o=t,r())})),o.length>0&&a.push(o)}(),function(){const t=[];a.forEach((i=>{let s=[];i.forEach(((i,n,a)=>{const o=0===n||n===a.length-1,r=a[n-1],h=!e.beam_rests&&i.isRest(),l=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let c=!1;if(e.maintain_stem_directions&&r&&!i.isRest()&&!r.isRest()){const t=r.getStemDirection();c=i.getStemDirection()!==t}const d=parseInt(i.getDuration(),10)<8;h||l||c||d?(s.length>0&&t.push(s),s=c?[i]:[]):s.push(i)})),s.length>0&&t.push(s)})),a=t}(),a.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const h=a.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),l=function(){const t=[];return a.forEach((e=>{let i;e.forEach((e=>{const s=e.getTuplet();s&&i!==s&&(i=s,t.push(i))}))})),t}(),c=[];return h.forEach((t=>{const i=new Le(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),c.push(i)})),l.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?ke.BOTTOM:ke.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new b("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,s;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&m(t[0]))n=Me(t);else if(e&&_(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,s){return i+(t-e)*s}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:s,slope_iterations:n,slope_cost:a}}=this,o=t[0],r=function(t,e){const i=t.getStemExtents().topY,s=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-s)}(o,t[t.length-1]),h=(i-s)/n;let l=Number.MAX_VALUE,c=0,d=0;for(let n=s;n<=i;n+=h){let i=0,s=0;for(let a=1;an)&&(h=n,o=Math.min(...s.getYs()),r=s.getBeamCount())}let l=a/t.length;const c=s+r*(1.5*i),d=o+c*-e;e===nt.DOWN&&ld&&(l=o-c),n?(e===nt.DOWN&&l>n||e===nt.UP&&l=8&&(c=-1!==this.break_on_indices.indexOf(h),this.render_options.secondary_break_ticks&&r>=this.render_options.secondary_break_ticks&&(r=0,c=!0));const d=l.getIntrinsicTicks(){const i=e.getStem();if(i){const s=e.getStemX();i.setNoteHeadXBounds(s,s),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let s=this.getBeamYToDraw();const n=i.getStemX(),a=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=s),o?this.matchSuccess():this.matchFail(s),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ye("Evaluating rule function:",t),!t)throw new b("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ye(i),new b("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const s=[];return e.matches=s,e.results&&e.results.forEach((t=>s.push(ze(t)))),i.run&&e.success&&i.run({matches:s}),e}}function je(...t){Qe.DEBUG&&f("Vex.Flow.EasyScore",t)}He.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=p(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),s=p(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:a,dots:o,type:r}=this.piece,h=et.accidentals,l=n.map((t=>{var e;return t.key+(h.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),c="auto"===i,d="g"==(null==r?void 0:r.toLowerCase())?t.GhostNote({duration:a,dots:o}):t.StaveNote({keys:l,duration:a,dots:o,type:r,clef:s,auto_stem:c});c||d.setStemDirection("up"===i?nt.UP:nt.DOWN);const m=[];n.forEach(((e,i)=>{const s=e.accid;if("string"==typeof s){const e=t.Accidental({type:s});d.addModifier(e,i),m.push(e)}else m.push(void 0)}));for(let t=0;tt(e,d,this))),this.elements.notes.push(d),this.elements.accidentals.push(m),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const s=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(s);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,ft.easyScoreHook,Lt.easyScoreHook],throwOnError:!1},t),{factory:s,builder:n}),this.factory=s,this.builder=n,this.grammar=new Xe(this.builder),this.parser=new He(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new b("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends It{static get CATEGORY(){return x.GhostNote}constructor(t){if(!t)throw new b("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new b("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=ri.type.TEXT&&t<=ri.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,s=!1;this.notes.forEach(((n,a,o)=>{var r;s=!s;const h=n.getAbsoluteX(),l=n.checkStave().getYForBottomText(this.line+3);if(h{var s;e=!e;const n=i.checkStave(),a=i.getAbsoluteX(),o=n.getYForBottomText(this.line+3),r=null!==(s=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`))&&void 0!==s?s:V.NOTATION_FONT_SCALE;let h=0;e?this.custom_depress_text?(h=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,a-h/2,o)):oi("pedal_depress",t,a,o,r):this.custom_release_text?(h=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,a-h/2,o)):oi("pedal_release",t,a,o,r)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){ri.DEBUG&&f("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===ri.type.BRACKET||this.type===ri.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===ri.type.TEXT&&this.drawText(),t.restore()}}ri.DEBUG=!1,ri.TEXT_FONT={family:F.SERIF,size:12,weight:N.BOLD,style:A.ITALIC},ri.GLYPHS={pedal_depress:{code:"keyboardPedalPed"},pedal_release:{code:"keyboardPedalUp"}},ri.type={TEXT:1,BRACKET:2,MIXED:3},ri.typeString={text:ri.type.TEXT,bracket:ri.type.BRACKET,mixed:ri.type.MIXED};const hi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class li extends ei{static get CATEGORY(){return x.RepeatNote}constructor(t,e,i){super(new Z(hi[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function ci(t,e,i,s,n,a,o){t.beginPath(),t.moveTo(e,i),t.lineTo(s,n),t.lineTo(a,o),t.lineTo(e,i),t.closePath(),t.fill()}class di extends L{static get CATEGORY(){return x.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:di.TextVerticalPosition.TOP,text_justification:di.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new b("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new b("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const s=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,a=e.y,o=i.x,r=i.y,h=Math.sqrt((o-n)*(o-n)+(r-a)*(r-a)),l=(h-this.render_options.arrowhead_length/3)/h;let c,d,m,g;this.render_options.draw_end_arrow||s?(c=Math.round(n+(o-n)*l),d=Math.round(a+(r-a)*l)):(c=o,d=r),this.render_options.draw_start_arrow||s?(m=n+(o-n)*(1-l),g=a+(r-a)*(1-l)):(m=n,g=a),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(m,g),t.lineTo(c,d),t.stroke(),t.closePath();const _=Math.atan2(r-a,o-n),x=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let b,u,p,f,y,S;(this.render_options.draw_end_arrow||s)&&(b=_+Math.PI+this.render_options.arrowhead_angle,p=o+Math.cos(b)*x,f=r+Math.sin(b)*x,u=_+Math.PI-this.render_options.arrowhead_angle,y=o+Math.cos(u)*x,S=r+Math.sin(u)*x,ci(t,p,f,o,r,y,S)),(this.render_options.draw_start_arrow||s)&&(b=_+this.render_options.arrowhead_angle,p=n+Math.cos(b)*x,f=a+Math.sin(b)*x,u=_-this.render_options.arrowhead_angle,y=n+Math.cos(u)*x,S=a+Math.sin(u)*x,ci(t,p,f,n,a,y,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,s=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},a={x:0,y:0};this.first_indices.forEach(((o,r)=>{const h=this.last_indices[r];n=e.getModifierStartXY(2,o),a=i.getModifierStartXY(1,h);const l=n.y>a.y;n.x+=e.getMetrics().modRightPx+s.padding_left,a.x-=i.getMetrics().modLeftPx+s.padding_right;const c=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=c+s.padding_left);i.getKeyProps()[h].displaced&&-1===i.getStemDirection()&&(a.x-=c+s.padding_right),n.y+=l?-3:1,a.y+=l?2:0,this.drawArrowLine(t,n,a)})),t.restore();const o=t.measureText(this.text).width,r=s.text_justification;let h=0;if(r===di.TextJustification.LEFT)h=n.x;else if(r===di.TextJustification.CENTER){h=(a.x-n.x)/2+n.x-o/2}else r===di.TextJustification.RIGHT&&(h=a.x-o);let l=0;const c=s.text_position_vertical;return c===di.TextVerticalPosition.TOP?l=e.checkStave().getYForTopText():c===di.TextVerticalPosition.BOTTOM&&(l=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,h,l),t.restore(),this}}di.TEXT_FONT=Object.assign({},L.TEXT_FONT),di.TextVerticalPosition={TOP:1,BOTTOM:2},di.TextJustification=oe;class mi extends L{static get CATEGORY(){return x.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new b("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),s=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),a=this.getContext();return n.voices.forEach((t=>{t.setContext(a).setStave(s).getTickables().forEach((t=>t.setStave(s))),this.partVoices.push(t)})),this.partStaves.push(s),this.partStaveInfos.push(n),s}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new Ae(t);this.formatter=i;let s=this.options.y,n=0;const a=[];this.partStaves.forEach(((t,e)=>{s+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(s),s+=t.space(this.partStaveInfos[e].spaceBelow),s+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(a.push({y:s,stave:t}),s+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Be.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-Be.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class gi extends It{static get CATEGORY(){return x.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new b("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new b("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:s}}=this,n=this.checkContext(),a=null==e&&s;if(i.flag&&a){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{r(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),s=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(s&&n){const s=function(t,e,i,s){const n=1!==s,a=-1!==s,o=i.getSpacingBetweenLines(),r=i.getNumLines(),h=[];return e.forEach((e=>{const l=e.indexOf(r)>-1,c=e.indexOf(1)>-1;if(n&&c||a&&l)return;1===e.length&&e.push(e[0]);const d=[];e.forEach(((e,n,a)=>{const h=1===e,l=e===r;let c=i.getYForLine(e-1);0!==n||h?n!==a.length-1||l||(c+=o/2-1):c-=o/2-1,d.push(c),1===s&&h?d.push(t-2):-1===s&&l&&d.push(t+2)})),h.push(d.sort(((t,e)=>t-e)))})),h}(e,function(t,e){const i=[];let s=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(s),s=[]):s.push(n);return s.length>0&&i.push(s),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),s.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),s=this.ys;for(let n=0;n{const i=fi.GLYPHS[e];if(!i)throw new b("Invalid dynamics character: "+e);const s=p(this.render_options.glyph_font_size),n=new Z(i.code,s,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);pi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,s)=>{const n=this.sequence[s];t.render(this.checkContext(),i,e),i+=fi.GLYPHS[n].width}))}}fi.DEBUG=!1;class yi extends vt{static get CATEGORY(){return x.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new ve(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends L{static get CATEGORY(){return x.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,s=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=s-i,function(...t){Si.DEBUG&&f("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",s,"y:",e),de.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&f("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:s}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new b("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=qt(document.getElementById(t))?he.Backends.CANVAS:he.Backends.SVG}this.context=he.buildContext(t,n,e,i,s)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),s=new Be(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),s=new _i(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}StaveNote(t){const e=new Ut(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const s=new ei(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}RepeatNote(t,e,i){const s=new li(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new fe(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Dt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new We(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new yi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new si(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new gi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new st(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ct.CENTER,vJustify:dt.BOTTOM},t),i=new mt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Ot;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new ft(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),s=new $t(t);return s.setPosition(i.position),i.upperAccidental&&s.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&s.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&s.setDelayed(i.delayed),s.setContext(this.context),s}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new fi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Lt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new le(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Kt}ModifierContext(){return new ge}MultiMeasureRest(t){const e=p(t.number_of_measures,"NoNumberOfMeasures"),i=new ai(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Pe(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new Ae(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new De(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,s,n,a;const o=new Le(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(s=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==s?s:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ue(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Yt({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const s=new di({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&s.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&s.setFont(t.options.font),s.setContext(this.context),this.renderQ.push(s),s}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new ui({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new mi(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new ri(e.notes);return i.setType(ri.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},L.TEXT_FONT);class wi extends gi{static get CATEGORY(){return x.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${F.SANS_SERIF}`}),this.updateWidth()}}class Ei{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new b("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;es?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new b("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,s=t.first_ys,n=t.last_x_px,a=t.direction;if(a!==Ci.SLIDE_UP&&a!==Ci.SLIDE_DOWN)throw new b("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new b("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),s=Number(t);if(s<0)throw new b("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+s}getNoteForFret(t,e){const i=this.getValueForFret(t,e),s=Math.floor(i/12),n=i%12;return`${V.integerToNote(n)}/${s}`}}var Ai=function(t,e,i,s){return new(i||(i=Promise))((function(n,a){function o(t){try{h(s.next(t))}catch(t){a(t)}}function r(t){try{h(s.throw(t))}catch(t){a(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,r)}h((s=s.apply(t,e||[])).next())}))};class ki{static get BUILD(){return{VERSION:"4.2.2",ID:"7ad933bdf12b4137ce04d3f332a838887d08a595",DATE:"2023-07-03T19:56:22.952Z"}}static setMusicFont(...t){const e=t.map((t=>F.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return Ai(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static getMusicFontStack(){return V.MUSIC_FONT_STACK}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}ki.Accidental=st,ki.Annotation=mt,ki.Articulation=ft,ki.Barline=kt,ki.BarNote=Dt,ki.Beam=Le,ki.Bend=Mt,ki.BoundingBox=C,ki.BoundingBoxComputation=P,ki.CanvasContext=Zt,ki.ChordSymbol=Ot,ki.Clef=_e,ki.ClefNote=We,ki.Crescendo=Ie,ki.Curve=Ue,ki.Dot=Rt,ki.EasyScore=Qe,ki.Element=L,ki.Factory=vi,ki.Font=F,ki.Formatter=Ae,ki.Fraction=E,ki.FretHandFinger=Lt,ki.GhostNote=ti,ki.Glyph=Z,ki.GlyphNote=ei,ki.GraceNote=ii,ki.GraceNoteGroup=Xt,ki.GraceTabNote=wi,ki.KeyManager=Ei,ki.KeySignature=xe,ki.KeySigNote=si,ki.Modifier=tt,ki.ModifierContext=ge,ki.MultiMeasureRest=ai,ki.Music=et,ki.Note=vt,ki.NoteHead=Wt,ki.NoteSubGroup=Vt,ki.Ornament=$t,ki.Parenthesis=Jt,ki.Parser=He,ki.PedalMarking=ri,ki.Registry=R,ki.RenderContext=yt,ki.Renderer=he,ki.RepeatNote=li,ki.Repetition=be,ki.Stave=Be,ki.StaveConnector=Pe,ki.StaveHairpin=Bi,ki.StaveLine=di,ki.StaveModifier=At,ki.StaveNote=Ut,ki.StaveTempo=pe,ki.StaveText=ye,ki.StaveTie=Yt,ki.Stem=nt,ki.StringNumber=le,ki.Stroke=ce,ki.SVGContext=se,ki.System=mi,ki.TabNote=gi,ki.TabSlide=Ci,ki.TabStave=_i,ki.TabTie=zt,ki.TextBracket=ui,ki.TextDynamics=fi,ki.TextFormatter=lt,ki.TextNote=fe,ki.TickContext=Kt,ki.TimeSignature=ve,ki.TimeSigNote=yi,ki.Tremolo=Pi,ki.Tuning=Ni,ki.Tuplet=De,ki.Vibrato=de,ki.VibratoBracket=Si,ki.Voice=jt,ki.Volta=Se,ki.AnnotationHorizontalJustify=ct,ki.AnnotationVerticalJustify=dt,ki.ChordSymbolHorizontalJustify=Bt,ki.ChordSymbolVerticalJustify=Ct,ki.SymbolTypes=Pt,ki.SymbolModifiers=Nt,ki.CurvePosition=Ge,ki.FontWeight=N,ki.FontStyle=A,ki.ModifierPosition=J,ki.RendererBackends=ne,ki.RendererLineEndType=ae,ki.BarlineType=Et,ki.StaveModifierPosition=wt,ki.VoltaType=re,ki.TextBracketPosition=bi,ki.TextJustification=oe,ki.VoiceMode=Ht;const Di={smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}},Mi={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}};const Fi={glyphs:{bracketTop:{x_min:0,x_max:491,y_min:0,y_max:279,ha:279,o:"m 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z"},bracketBottom:{x_min:0,x_max:491,y_min:-279,y_max:0,ha:279,o:"m 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z"},segno:{x_min:0,x_max:654,y_min:0,y_max:869,ha:869,o:"m 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z"},coda:{x_min:0,x_max:745,y_min:-113,y_max:735,ha:848,o:"m 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z"},gClef:{x_min:0,x_max:640,y_min:-666,y_max:1112,ha:1778,o:"m 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z"},cClef:{x_min:0,x_max:627,y_min:-480,y_max:482,ha:962,o:"m 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z"},fClef:{x_min:0,x_max:664,y_min:-617,y_max:251,ha:868,o:"m 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z"},unpitchedPercussionClef1:{x_min:0,x_max:352,y_min:-252,y_max:252,ha:504,o:"m 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z"},"6stringTabClef":{x_min:0,x_max:439,y_min:-743,y_max:746,ha:1489,o:"m 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z"},timeSig0:{x_min:15,x_max:389,y_min:-254,y_max:255,ha:509,o:"m 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z"},timeSig1:{x_min:15,x_max:336,y_min:-243,y_max:245,ha:488,o:"m 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z"},timeSig2:{x_min:15,x_max:377,y_min:-243,y_max:245,ha:488,o:"m 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z"},timeSig3:{x_min:15,x_max:364,y_min:-244,y_max:244,ha:488,o:"m 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z"},timeSig4:{x_min:14,x_max:442,y_min:-248,y_max:249,ha:497,o:"m 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z"},timeSig5:{x_min:15,x_max:362,y_min:-244,y_max:246,ha:490,o:"m 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z"},timeSig6:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z"},timeSig7:{x_min:15,x_max:366,y_min:-250,y_max:251,ha:501,o:"m 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z"},timeSig8:{x_min:15,x_max:393,y_min:-248,y_max:246,ha:494,o:"m 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z"},timeSig9:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z"},timeSigCommon:{x_min:0,x_max:463,y_min:-256,y_max:258,ha:514,o:"m 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z"},timeSigCutCommon:{x_min:0,x_max:463,y_min:-376,y_max:388,ha:764,o:"m 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z"},timeSigPlus:{x_min:0,x_max:408,y_min:-204,y_max:204,ha:408,o:"m 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z"},noteheadDoubleWhole:{x_min:0,x_max:538,y_min:-178,y_max:179,ha:357,o:"m 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z"},noteheadWhole:{x_min:0,x_max:373,y_min:-134,y_max:136,ha:270,o:"m 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z"},noteheadHalf:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z"},noteheadBlack:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z"},noteheadXBlack:{x_min:0,x_max:325,y_min:-132,y_max:132,ha:264,o:"m 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z"},noteheadCircleX:{x_min:0,x_max:325,y_min:-162,y_max:163,ha:325,o:"m 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:432,y_min:-179,y_max:177,ha:356,o:"m 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z"},noteheadSquareWhite:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadSquareBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadTriangleUpBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 223 176 l 0 -196 l 446 -196 z"},noteheadSlashedDoubleWhole1:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z"},noteheadSlashedWhole1:{x_min:-75,x_max:448,y_min:-211,y_max:214,ha:425,o:"m 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z"},noteheadSlashedHalf1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z"},noteheadSlashedBlack1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z"},noteheadSlashedDoubleWhole2:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z"},noteheadSlashedWhole2:{x_min:-75,x_max:448,y_min:-212,y_max:214,ha:426,o:"m 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z"},noteheadSlashedHalf2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z"},noteheadSlashedBlack2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:373,y_min:-178,y_max:179,ha:357,o:"m 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z"},noteheadDiamondWhole:{x_min:0,x_max:373,y_min:-133,y_max:132,ha:265,o:"m 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z"},noteheadDiamondHalf:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z"},noteheadDiamondBlack:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z"},noteheadParenthesisRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},noteheadParenthesisLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},noteheadMoonBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 0 176 l 0 -196 l 488 -196 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 488 176 l 0 -196 l 488 -196 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z"},tremolo1:{x_min:0,x_max:290,y_min:-93,y_max:96,ha:189,o:"m 0 48 l 0 -134 l 418 -43 l 418 138 z"},flag8thUp:{x_min:0,x_max:289,y_min:-817,y_max:12,ha:829,o:"m 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z"},flag8thDown:{x_min:0,x_max:309,y_min:-12,y_max:817,ha:829,o:"m 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z"},flag16thUp:{x_min:0,x_max:279,y_min:-820,y_max:12,ha:832,o:"m 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z"},flag16thDown:{x_min:0,x_max:309,y_min:-26,y_max:803,ha:829,o:"m 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag32ndUp:{x_min:0,x_max:279,y_min:-821,y_max:186,ha:1007,o:"m 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z"},flag32ndDown:{x_min:0,x_max:309,y_min:-216,y_max:803,ha:1019,o:"m 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag64thUp:{x_min:0,x_max:279,y_min:-822,y_max:373,ha:1195,o:"m 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z"},flag64thDown:{x_min:0,x_max:309,y_min:-403,y_max:804,ha:1207,o:"m 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z"},flag128thUp:{x_min:0,x_max:279,y_min:-821,y_max:573,ha:1394,o:"m 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z"},flag128thDown:{x_min:0,x_max:309,y_min:-591,y_max:803,ha:1394,o:"m 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z"},accidentalFlat:{x_min:0,x_max:203,y_min:-176,y_max:453,ha:629,o:"m 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z"},accidentalNatural:{x_min:0,x_max:171,y_min:-323,y_max:325,ha:648,o:"m 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z"},accidentalSharp:{x_min:0,x_max:244,y_min:-333,y_max:334,ha:667,o:"m 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z"},accidentalDoubleSharp:{x_min:0,x_max:275,y_min:-137,y_max:138,ha:275,o:"m 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z"},accidentalDoubleFlat:{x_min:0,x_max:371,y_min:-176,y_max:453,ha:629,o:"m 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z"},accidentalParensLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},accidentalParensRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:193,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-176,y_max:452,ha:628,o:"m 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:180,y_min:-316,y_max:320,ha:636,o:"m 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:290,y_min:-328,y_max:339,ha:667,o:"m 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z"},accidentalBuyukMucennebFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:348,y_min:-332,y_max:334,ha:666,o:"m 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z"},accidentalBakiyeFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:348,y_min:-316,y_max:318,ha:634,o:"m 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z"},articAccentAbove:{x_min:0,x_max:361,y_min:0,y_max:235,ha:235,o:"m 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z"},articAccentBelow:{x_min:0,x_max:361,y_min:-235,y_max:0,ha:235,o:"m 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z"},articTenutoAbove:{x_min:0,x_max:316,y_min:0,y_max:46,ha:46,o:"m 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z"},articTenutoBelow:{x_min:0,x_max:316,y_min:-46,y_max:0,ha:46,o:"m 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z"},articStaccatoAbove:{x_min:0,x_max:78,y_min:0,y_max:78,ha:78,o:"m 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z"},articStaccatoBelow:{x_min:0,x_max:78,y_min:-78,y_max:0,ha:78,o:"m 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z"},articStaccatissimoAbove:{x_min:0,x_max:127,y_min:0,y_max:248,ha:248,o:"m 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z"},articStaccatissimoBelow:{x_min:0,x_max:127,y_min:-248,y_max:0,ha:248,o:"m 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z"},articMarcatoAbove:{x_min:1,x_max:296,y_min:0,y_max:253,ha:253,o:"m 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z"},articMarcatoBelow:{x_min:0,x_max:295,y_min:-253,y_max:0,ha:253,o:"m 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z"},fermataAbove:{x_min:0,x_max:622,y_min:0,y_max:368,ha:368,o:"m 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z"},fermataBelow:{x_min:0,x_max:622,y_min:-368,y_max:0,ha:368,o:"m 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z"},fermataLongAbove:{x_min:0,x_max:623,y_min:0,y_max:368,ha:368,o:"m 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z"},fermataLongBelow:{x_min:0,x_max:623,y_min:-368,y_max:0,ha:368,o:"m 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z"},fermataVeryLongAbove:{x_min:0,x_max:842,y_min:0,y_max:549,ha:549,o:"m 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z"},fermataVeryLongBelow:{x_min:0,x_max:842,y_min:-549,y_max:0,ha:549,o:"m 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z"},fermataShortAbove:{x_min:0,x_max:642,y_min:0,y_max:454,ha:454,o:"m 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z"},fermataShortBelow:{x_min:0,x_max:642,y_min:-454,y_max:0,ha:454,o:"m 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z"},breathMarkComma:{x_min:0,x_max:191,y_min:0,y_max:321,ha:321,o:"m 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z"},caesura:{x_min:0,x_max:380,y_min:0,y_max:490,ha:490,o:"m 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z"},caesuraCurved:{x_min:0,x_max:368,y_min:0,y_max:491,ha:491,o:"m 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z"},restMaxima:{x_min:0,x_max:450,y_min:-250,y_max:250,ha:500,o:"m 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:-11,y_max:262,ha:273,o:"m 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z"},restWhole:{x_min:0,x_max:325,y_min:-131,y_max:5,ha:136,o:"m 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z"},restWholeLegerLine:{x_min:-139,x_max:464,y_min:-122,y_max:14,ha:136,o:"m 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z"},restHalf:{x_min:0,x_max:325,y_min:-4,y_max:132,ha:136,o:"m 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z"},restHalfLegerLine:{x_min:-139,x_max:464,y_min:-14,y_max:122,ha:136,o:"m 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z"},restQuarter:{x_min:0,x_max:235,y_min:-331,y_max:401,ha:732,o:"m 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z"},rest8th:{x_min:0,x_max:276,y_min:-255,y_max:204,ha:459,o:"m 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z"},rest16th:{x_min:1,x_max:344,y_min:-507,y_max:204,ha:711,o:"m 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z"},rest32nd:{x_min:0,x_max:391,y_min:-507,y_max:460,ha:967,o:"m 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z"},rest64th:{x_min:0,x_max:423,y_min:-758,y_max:464,ha:1222,o:"m 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z"},rest128th:{x_min:-1,x_max:475,y_min:-759,y_max:717,ha:1476,o:"m 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z"},dynamicPiano:{x_min:-95,x_max:317,y_min:-163,y_max:263,ha:426,o:"m 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z"},dynamicMezzo:{x_min:-7,x_max:374,y_min:-2,y_max:251,ha:253,o:"m 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z"},dynamicForte:{x_min:-137,x_max:334,y_min:-193,y_max:421,ha:614,o:"m -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z"},dynamicRinforzando:{x_min:-12,x_max:230,y_min:0,y_max:254,ha:254,o:"m 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z"},dynamicSforzando:{x_min:0,x_max:208,y_min:-5,y_max:263,ha:268,o:"m 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z"},dynamicZ:{x_min:-42,x_max:239,y_min:-1,y_max:258,ha:259,o:"m 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z"},ornamentTrill:{x_min:-12,x_max:383,y_min:0,y_max:383,ha:383,o:"m 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z"},ornamentTurn:{x_min:0,x_max:456,y_min:0,y_max:232,ha:232,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentTurnSlash:{x_min:0,x_max:456,y_min:-80,y_max:313,ha:393,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentMordent:{x_min:0,x_max:473,y_min:-77,y_max:316,ha:393,o:"m 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentShortTrill:{x_min:0,x_max:473,y_min:0,y_max:248,ha:248,o:"m 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentTremblement:{x_min:0,x_max:654,y_min:0,y_max:248,ha:248,o:"m 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:680,y_min:0,y_max:388,ha:388,o:"m 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:662,y_min:-158,y_max:248,ha:406,o:"m 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:662,y_min:-158,y_max:321,ha:479,o:"m 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:662,y_min:0,y_max:406,ha:406,o:"m 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:857,y_min:0,y_max:248,ha:248,o:"m 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:565,y_min:-171,y_max:249,ha:420,o:"m 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z"},brassMuteClosed:{x_min:0,x_max:312,y_min:0,y_max:312,ha:312,o:"m 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z"},brassMuteOpen:{x_min:0,x_max:280,y_min:0,y_max:280,ha:280,o:"m 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z"},stringsDownBow:{x_min:0,x_max:315,y_min:0,y_max:293,ha:293,o:"m 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z"},stringsUpBow:{x_min:0,x_max:262,y_min:0,y_max:343,ha:343,o:"m 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z"},stringsHarmonic:{x_min:0,x_max:181,y_min:0,y_max:181,ha:181,o:"m 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z"},keyboardPedalPed:{x_min:0,x_max:981,y_min:-10,y_max:545,ha:555,o:"m 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z"},keyboardPedalUp:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:242,y_min:0,y_max:164,ha:164,o:"m 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z"},repeat1Bar:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z"},repeat2Bars:{x_min:0,x_max:735,y_min:-250,y_max:250,ha:500,o:"m 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z"},repeat4Bars:{x_min:0,x_max:1243,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z"},repeatBarSlash:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 693 360 l 511 360 l 0 -360 l 181 -360 z"},csymDiminished:{x_min:0,x_max:501,y_min:0,y_max:501,ha:501,o:"m 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z"},csymHalfDiminished:{x_min:-1,x_max:502,y_min:-1,y_max:502,ha:503,o:"m 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z"},csymAugmented:{x_min:1,x_max:321,y_min:90,y_max:410,ha:320,o:"m 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z"},csymMajorSeventh:{x_min:0,x_max:500,y_min:10,y_max:490,ha:480,o:"m 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:160,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:416,y_min:-176,y_max:452,ha:628,o:"m 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"}},fontFamily:"Leland",resolution:1e3,generatedOn:"2022-12-19T23:52:37.756Z"};const Oi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Ri={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Li={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Wi={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},Ii={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Gi{static sortAndUnique(t,e,i){if(t.length>1){const s=[];let n;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","export const VERSION = '4.2.2';\nexport const ID = '7ad933bdf12b4137ce04d3f332a838887d08a595';\nexport const DATE = '2023-07-03T19:56:22.952Z';\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { LelandFont } from './leland_glyphs';\nexport function loadLeland() {\n Font.load('Leland', LelandFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-gonville.ts is the entry point for vexflow-gonville.js.\n// This version bundles the Gonville music engraving font.\nimport { Flow } from '../src/flow';\nimport { loadCustom } from '../src/fonts/load_custom';\nimport { loadLeland } from '../src/fonts/load_leland';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadLeland();\nloadCustom();\nFlow.setMusicFont('Leland', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","static","Number","isNaN","t","GCD","length","LCM","shift","LCMM","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","fontInfo","st","trim","wt","sz","scaleFactor","parsedWeight","ITALIC","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","loadWebFont","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","defaultRegistry","registry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","ID","children","attrs","newID","getCategory","rendered","getDefaultRegistry","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","toCSSString","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","validate","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","convertSizeToPointValue","fontSizeInPixels","convertSizeToPixelValue","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","MUSIC_FONT_STACK","clef","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","clefProperties","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integer","noteValue","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","artic","spec","keySpec","notes","acc_list","durationNumber","durationToFraction","ticks","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","UNISON","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySignature","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","state","musicFont","currentMusicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accidentalLinePositionsAndSpaceNeeds","prevNote","extraXSpaceNeededForLeftDisplacedNotehead","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","extraXSpaceNeeded","spacingBetweenStaveLines","sort","staveLineAccidentalLayoutMetrics","maxExtraXSpaceNeeded","accidentalLinePositionAndSpaceNeeds","priorLineMetric","currentLineMetric","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","accidentalCodes","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","registeredFonts","formatterInfo","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","isBold","italic","isItalic","perfectMatch","find","partialMatch","fontSizeInPt","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","create","verticalSpaceNeeded","glyphWidth","getGlyphProps","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","articulationCodes","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","durationString","dots","noteStruct","durationProps","parseDuration","customTypes","durationToTicks","currentTicks","parsedNoteStruct","parseNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","glyphCode","engravingFontResolution","spacingBetweenBlocks","metric","getMetricForGlyph","yOffset","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","symbolModifier","SUPERSCRIPT","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","scaleSize","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","isSuperscript","sub","isSubscript","superSubScale","adj","symbolType","GLYPH","superSubFontSize","getWidthForGlyph","getYShiftForGlyph","getXShiftForGlyph","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","durationToNumber","breve_lines","drawSlashNoteHead","renderGlyph","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","noteUHead","noteLHead","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","keyProperties","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","format","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","TickContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","tick","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","ornamentCodes","adjustForStemDirection","stemUpYOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","getNextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","getPoint","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","dpr","sanitizeCanvasDims","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","elementId","backend","background","renderer","lastContext","buildContext","Backends","CANVAS","SVG","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","extraXSpaceForDisplacedNotehead","glyphLine","num_shiftR","num_width","num_x_shift","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","drawDashedLine","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","accList","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","lineShift","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","getInfo","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClef","clefSpec","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","paddingBetween","accumulator","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","auto_beam","align_rests","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","AlignRestsToNotes","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","buildAndAttach","setId","commaSeparatedRegex","setClass","defaults","easyScoreHook","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","pedal","MIXED","setCustomText","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","formatBegModifiers","plotDebugging","plotMetrics","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","tabToGlyphProps","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","integerToNote","Flow","BUILD","VERSION","DATE","fontNames","fontModuleOrPath","hasKeySignature","getKeySignatures","CommonMetrics","smufl","endPaddingMax","endPaddingMin","unalignedNotePadding","csymDiminished","csymHalfDiminished","csymAugmented","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","csymMajorSeventh","accidentalSharp","accidentalFlat","clef_default","shiftX","clef_small","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","default","gracenote","pedalMarking","digits","shiftLine","articStaccatissimoAbove","articStaccatissimoBelow","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadTriangleUpWhole","noteheadXHalf","noteheadXBlack","noteheadXWhole","noteheadHalf","noteheadBlack","noteheadSquareWhite","staveTempo","gClef","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","breathMarkTick","breathMarkComma","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","CustomFont","vexAccidentalMicrotonal1","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","LelandFont","bracketTop","bracketBottom","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","noteheadDoubleWhole","noteheadWhole","noteheadCircleX","noteheadDoubleWholeSquare","noteheadSquareBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalNatural","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKucukMucennebSharp","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataShortAbove","fermataShortBelow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompTrillLowerSuffix","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","keyboardPedalPed","keyboardPedalUp","wiggleArpeggiatoUp","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","generatedOn","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","cmp","eq","newArr","last","canvasSelector","start_time","Date","getTime","setMusicFont","fontData","registerInfo","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-petaluma.js b/build/cjs/vexflow-petaluma.js new file mode 100644 index 0000000000..5bcb411a12 --- /dev/null +++ b/build/cjs/vexflow-petaluma.js @@ -0,0 +1,7 @@ +/*! + * VexFlow 4.2.2 2023-07-03T19:56:22.952Z 7ad933bdf12b4137ce04d3f332a838887d08a595 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function n(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let n=t.constructor;if(i){for(;null!==t;){if(n=t.constructor,"CATEGORY"in n&&n.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in n&&n.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>nt,Annotation:()=>dt,AnnotationHorizontalJustify:()=>ct,AnnotationVerticalJustify:()=>lt,Articulation:()=>ft,BEAM_BOTH:()=>Re,BEAM_LEFT:()=>Fe,BEAM_RIGHT:()=>Oe,BarNote:()=>Dt,Barline:()=>At,BarlineType:()=>Bt,Beam:()=>We,Bend:()=>Mt,BoundingBox:()=>C,BoundingBoxComputation:()=>P,Builder:()=>Ke,CanvasContext:()=>Zt,Category:()=>_,ChordSymbol:()=>Ot,ChordSymbolHorizontalJustify:()=>Et,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>ge,ClefNote:()=>Le,Crescendo:()=>Ie,Curve:()=>Ge,CurvePosition:()=>ze,Dot:()=>Rt,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>W,Factory:()=>vi,Flow:()=>Ai,Font:()=>F,FontStyle:()=>k,FontWeight:()=>N,Formatter:()=>ke,Fraction:()=>B,FretHandFinger:()=>Wt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>Bi,KeySigNote:()=>ni,KeySignature:()=>_e,Modifier:()=>tt,ModifierContext:()=>me,ModifierPosition:()=>J,MultiMeasureRest:()=>ai,Music:()=>et,Note:()=>vt,NoteHead:()=>Lt,NoteSubGroup:()=>Vt,Ornament:()=>$t,OutlineCode:()=>$,Parenthesis:()=>Jt,Parser:()=>He,PedalMarking:()=>ri,Piece:()=>Ve,Registry:()=>R,RenderContext:()=>yt,Renderer:()=>he,RendererBackends:()=>se,RendererLineEndType:()=>ae,RepeatNote:()=>bi,Repetition:()=>xe,RuntimeError:()=>x,SVGContext:()=>ne,Stave:()=>Ee,StaveConnector:()=>Pe,StaveHairpin:()=>Ei,StaveLine:()=>li,StaveModifier:()=>kt,StaveModifierPosition:()=>wt,StaveNote:()=>Gt,StaveSection:()=>ue,StaveTempo:()=>pe,StaveText:()=>ye,StaveTie:()=>Ut,Stem:()=>st,StemmableNote:()=>It,StringNumber:()=>be,Stroke:()=>ce,SymbolModifiers:()=>Nt,SymbolTypes:()=>Pt,System:()=>di,TabNote:()=>mi,TabSlide:()=>Ci,TabStave:()=>gi,TabTie:()=>Yt,TextBracket:()=>ui,TextBracketPosition:()=>xi,TextDynamics:()=>fi,TextFormatter:()=>bt,TextJustification:()=>oe,TextNote:()=>fe,TickContext:()=>Kt,Tickable:()=>Tt,TimeSigNote:()=>yi,TimeSignature:()=>ve,TimeSignatureGlyph:()=>Te,Tremolo:()=>Pi,Tuning:()=>Ni,Tuplet:()=>De,TupletLocation:()=>Ae,Vex:()=>Gi,Vibrato:()=>le,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>Ht,Volta:()=>Se,VoltaType:()=>re,defined:()=>p,drawDot:()=>St,globalObject:()=>u,isAccidental:()=>s,isAnnotation:()=>a,isBarline:()=>o,isCategory:()=>n,isDot:()=>r,isGraceNote:()=>h,isGraceNoteGroup:()=>b,isHTMLCanvas:()=>qt,isHTMLDiv:()=>Qt,isNote:()=>c,isRenderContext:()=>l,isStaveNote:()=>d,isStemmableNote:()=>m,isTabNote:()=>g,log:()=>f,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>y});const s=t=>n(t,_.Accidental),a=t=>n(t,_.Annotation),o=t=>n(t,_.Barline),r=t=>n(t,_.Dot),h=t=>n(t,_.GraceNote),b=t=>n(t,_.GraceNoteGroup),c=t=>n(t,_.Note),l=t=>n(t,_.RenderContext),d=t=>n(t,_.StaveNote),m=t=>n(t,_.StemmableNote),g=t=>n(t,_.TabNote);var _;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(_||(_={}));class x extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function u(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function p(t,e="undefined",i=""){if(void 0===t)throw new x(e,i);return t}function f(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");u().console.log(t+": "+i)}function y(...t){const e=t.join(" "),i=new Error;u().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var n,s;return i%2>0&&(i=((n=10*i)%(s=5)>=s/2?parseInt(""+n/s,10)*s+s:parseInt(""+n/s,10)*s)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class B{static get CATEGORY(){return _.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new x("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/B.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?B.LCM(t[0],t[1]):B.LCM(t.shift(),B.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=B.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,n]=E(t,e),s=B.LCM(this.denominator,n),a=s/this.denominator,o=s/n,r=this.numerator*a+i*o;return this.set(r,s)}subtract(t=0,e=1){const[i,n]=E(t,e),s=B.LCM(this.denominator,n),a=s/this.denominator,o=s/n,r=this.numerator*a-i*o;return this.set(r,s)}multiply(t=1,e=1){const[i,n]=E(t,e);return this.set(this.numerator*i,this.denominator*n)}divide(t=1,e=1){const[i,n]=E(t,e);return this.set(this.numerator*n,this.denominator*i)}equals(t){const e=B.__staticFractionA.copy(t).simplify(),i=B.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=B.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=B.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new B(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return B.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=B.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),n=e[1]?parseInt(e[1],10):1;return this.set(i,n)}}function E(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}B.__staticFractionA=new B,B.__staticFractionB=new B,B.__staticFractionTmp=new B;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,n){this.x=t,this.y=e,this.w=i,this.h=n}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,n,s,a){this.addPoint(t,e),this.addPoint(s,a);const o=i-t;let r=o-(s-i);if(0!=r){const e=o/r;if(e>0&&e<1){const n=1-e;this.addX(n*n*t+2*n*e*i+e*e*s)}}const h=n-e;if(r=h-(a-n),0!=r){const t=h/r;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*n+t*t*a)}}}addBezierCurve(t,e,i,n,s,a,o,r){const h=[t,e],b=[i,n],c=[s,a],l=[o,r];let d;this.addPoint(h[0],h[1]),this.addPoint(l[0],l[1]);const m=(t,e)=>Math.pow(1-t,3)*h[e]+3*Math.pow(1-t,2)*t*b[e]+3*(1-t)*Math.pow(t,2)*c[e]+Math.pow(t,3)*l[e];for(d=0;d<=1;d++){const t=6*h[d]-12*b[d]+6*c[d],e=-3*h[d]+9*b[d]-9*c[d]+3*l[d],i=3*b[d]-3*h[d];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===k.ITALIC}static loadWebFont(t,e,i=!0){return A(this,void 0,void 0,(function*(){const n=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield n.load(),document.fonts.add(n),n}))}static loadWebFonts(){return A(this,void 0,void 0,(function*(){const t=F.WEB_FONT_HOST,e=F.WEB_FONT_FILES;for(const i in e){const n=e[i];F.loadWebFont(i,t+n)}}))}static load(t,e,i){let n=M[t];return n||(n=new F(t),M[t]=n),e&&n.setData(e),i&&n.setMetrics(i),n}constructor(t){this.name=t}getName(){return this.name}getData(){return p(this.data,"FontError","Missing font data")}getMetrics(){return p(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let n=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class W{static get CATEGORY(){return _.Element}static newID(){return"auto"+W.ID++}constructor(){var t;this.children=[],this.attrs={id:W.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=R.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const n=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return n&&(n.splice(n.indexOf(t)),this.attrs.class=n.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const n=this.attrs.id,s=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:n,name:t,value:e,oldValue:s}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return p(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return F.toCSSString(this.textFont)}setFont(t,e,i,n){const s=this.constructor.TEXT_FONT,a="object"==typeof t,o="string"==typeof t,r=void 0===t,h=void 0===e&&void 0===i&&void 0===n;return this.textFont=a?Object.assign(Object.assign({},s),t):o&&h?F.fromCSSString(t):r&&h?Object.assign({},s):F.validate(null!=t?t:s.family,null!=e?e:s.size,null!=i?i:s.weight,null!=n?n:s.style),this}getFont(){return this.textFont||this.resetFont(),F.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return F.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return F.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}W.ID=1e3,W.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:N.NORMAL,style:k.NORMAL};const L=16384,I={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},z={w:"1",h:"2",q:"4",b:"256"},G={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},U={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},Y={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},H={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"accidentalBuyukMucennebSharp",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new x("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in U))throw new x("BadArgument","Invalid clef: "+t);return U[t]}static keyProperties(t,e="treble",i){let n={octave_shift:0,duration:"4"};"object"==typeof i&&(n=Object.assign(Object.assign({},n),i));const s=V.sanitizeDuration(n.duration),a=t.split("/");if(a.length<2)throw new x("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=a[0].toUpperCase(),r=Y[o];if(!r)throw new x("BadArguments","Invalid key name: "+o);r.octave&&(a[1]=r.octave.toString());let h=parseInt(a[1],10);h+=-1*n.octave_shift;let b=(7*h-28+r.index)/2;b+=V.clefProperties(e).line_shift;let c=0;b<=0&&2*b%2==0&&(c=1),b>=6&&2*b%2==0&&(c=-1);const l=void 0!==r.int_val?12*h+r.int_val:void 0,d=r.code,m=r.shift_right;let g={};if(a.length>2&&a[2]){const t=a[2].toUpperCase();g={code:this.codeNoteHead(t,s)}||{}}return Object.assign({key:o,octave:h,line:b,int_value:l,accidental:r.accidental,code:d,stroke:c,shift_right:m,displaced:!1},g)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new x("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new x("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,n=0,s=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new x("InvalidMetrics","Width and height required");n=t.width,s=-t.height/2}else n=V.textWidth(t);return{text:t,code:i,getWidth:()=>n*e,shift_y:s}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return H[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=G[t];if(!e)throw new x("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],n=[];for(let t=0;tZ.getWidth(a,t)}),n)}}V.UNISON=!0,V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=L,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=H,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:L};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,n){this.outline=t,this.originX=e,this.originY=i,this.scale=n,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let n=0;for(;n{const e=t.getTickContext();s&&t.setStave(s),e.setXOffset(a)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new x("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new x("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new x("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let n=i[3];return n||(n="M"),{root:t,accidental:e,type:n}}throw new x("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new x("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new x("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new x("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new x("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new x("BadArguments",`Invalid direction: ${i}`);let n=(t+i*e)%et.NUM_TONES;return n<0&&(n+=et.NUM_TONES),n}getRelativeNoteName(t,e){const i=this.getNoteParts(t),n=this.getNoteValue(i.root);let s=e-n;if(Math.abs(s)>et.NUM_TONES-3){let i=1;s>0&&(i=-1);const a=(e+1+(n+1))%et.NUM_TONES*i;if(Math.abs(a)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);s=a}if(Math.abs(s)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);let a=i.root;if(s>0)for(let t=1;t<=s;++t)a+="#";else if(s<0)for(let t=-1;t>=s;--t)a+="b";return a}getScaleTones(t,e){const i=[t];let n=t;for(let s=0;se.line-t.line));const c=[];let l=0;for(let t=0;tc[i+t],a=t=>t.map(s),o=(t,e)=>{const[i,n]=a([t,e]).map((t=>t.line));return i-n},r=(...t)=>t.map(a).every((([t,e])=>!this.checkCollision(t,e))),h=n-i+1;let b,l,m=this.checkCollision(c[i],c[n])?"a":"b";switch(h){case 3:"a"===m&&.5===o(1,2)&&.5!==o(0,1)&&(m="second_on_bottom");break;case 4:r([0,2],[1,3])&&(m="spaced_out_tetrachord");break;case 5:"b"===m&&r([1,3])&&(m="spaced_out_pentachord",r([0,2],[2,4])&&(m="very_spaced_out_pentachord"));break;case 6:r([0,3],[1,4],[2,5])&&(m="spaced_out_hexachord"),r([0,2],[2,4],[1,3],[3,5])&&(m="very_spaced_out_hexachord")}if(h>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+el?d:l}else for(b=t;b<=n;b++)l=V.accidentalColumnsTable[h][m][b-t],c[b].column=l,d=d>l?d:l;t=n}const m=[],g=[];for(let t=0;t<=d;t++)m[t]=0,g[t]=0;m[0]=s+l,g[0]=s,c.forEach((t=>{t.width>m[t.column]&&(m[t.column]=t.width)}));for(let t=1;t{let e=0;const i=x+t.numAcc;for(;x0?(n=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(n=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const s=Math.abs(i){const e=new B(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const s=n[e.value()];s?s.push(t):(i.push(e.value()),n[e.value()]=[t]),e.add(t.getTicks())}))}));const a=new et;e||(e="C");const o=a.createScaleMap(e),r={};i.forEach((t=>{const e=n[t],i=[],h=t=>{if(!d(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,n)=>{const h=a.getNoteParts(t.split("/")[0]),b=t.split("/")[1],c=h.accidental||"n",l=h.root+c;r[h.root+b]||(r[h.root+b]=o[h.root]);const d=r[h.root+b]===l,m=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{s(t)&&t.type==c&&t.getIndex()==n&&e.getModifiers().splice(i,1)})),!d||d&&m){r[h.root+b]=l;const s=new nt(c);e.addModifier(s,n),i.push(t)}})),e.getModifiers().forEach((t=>{b(t)&&t.getGraceNotes().forEach(h)}))};e.forEach(h)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),p(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=p(this.parenLeft),e=p(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return p(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,h(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:n,x_shift:s,y_shift:a,glyph:o,render_options:{parenLeftPadding:r,parenRightPadding:h}}=this,b=this.checkContext(),c=this.checkAttachedNote();this.setRendered();const l=c.getModifierStartXY(e,i);let d=l.x+s;const m=l.y+a;if(it("Rendering: ",t,d,m),n){const t=p(this.parenLeft),e=p(this.parenRight);e.render(b,d,m),d-=e.getMetrics().width,d-=h,d-=this.accidental.parenRightPaddingAdjustment,o.render(b,d,m),d-=o.getMetrics().width,d-=r,t.render(b,d,m)}else o.render(b,d,m)}}nt.DEBUG=!1;class st extends W{static get CATEGORY(){return _.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===st.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(st.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new x("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===st.UP,e=[this.y_top,this.y_bottom],i=st.HEIGHT+this.stem_extension,n=(t?Math.min:Math.max)(...e),s=(t?Math.max:Math.min)(...e);return{topY:n+i*-this.stem_direction,baseY:s}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-st.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const n=this.stem_direction;let s=0;n===st.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,s=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,s=this.stem_up_y_base_offset);const a=this.getHeight();!function(...t){st.DEBUG&&f("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?a-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(st.WIDTH),t.moveTo(e,i-o+s),t.lineTo(e,i-a-this.renderHeightAdjustment*n),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function at(...t){bt.DEBUG&&f("Vex.Flow.TextFormatter",t)}st.DEBUG=!1;const ot={},rt={},ht={};class bt{static getFontFamilies(){const t=[];for(const e in ht){const i=ht[e];t.push(Object.assign({},i))}return t}static create(t={}){at("create: ",t),t.family||(t.family=F.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ht)i.startsWith(t)&&e.push(ht[i]);if(e.length>0)break}let n;if(0===e.length)n=new bt(Object.values(ht)[0]);else if(1===e.length)n=new bt(e[0]);else{const i=F.isBold(t.weight),s=F.isItalic(t.style),a=e.find((t=>t.bold===i&&t.italic===s));if(a)n=new bt(a);else{const t=e.find((t=>t.italic===s||t.bold===i));n=new bt(t||e[0])}}const s=t.size;if(void 0!==s){const t=F.convertSizeToPointValue(s);n.setFontSize(t)}return n}static getInfo(t){return ht[t]}static registerInfo(t,e=!1){at("registerInfo: ",t,e);const i=t.family;(void 0===ht[i]||e)&&(ht[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===rt[this.cacheKey]&&(rt[this.cacheKey]={}),null!==(t=rt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?N.BOLD:N.NORMAL,n=this.italic?k.ITALIC:k.NORMAL;this.cacheKey=`${t}%${e}%${i}%${n}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},n=e[t];if(void 0!==n)return n;for(let e=0;et>e?t:e)),h+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+o,l&&i===st.DOWN&&(h=Math.max(h,b.topY+o+c*this.text_line))}else if(this.verticalJustification===lt.CENTER){const t=e.getYForTopText(this.text_line)-1;h=t+(d.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===lt.TOP){h=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,l&&i===st.UP&&(c=b.topY=1}function ut(t,e){return xt(t,e)?e===mt?Math.ceil:Math.floor:Math.round}const pt=t=>d(t)||h(t);class ft extends tt{static get CATEGORY(){return _.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const n=(t,e,i)=>_t(ut(e,i),p(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const s=t.checkAttachedNote();i=Math.max(s.getGlyphProps().getWidth(),i);let a=5;const o=s.hasStem()?s.getStemDirection():st.UP;let r=0;if(m(s)){const t=s.getStem();t&&(r=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const h=s.getStave();if(h&&(a=h.getNumLines()),t.getPosition()===mt){let i=s.getLineNumber(!0);o===st.UP&&(i+=r);let h=n(t,e.top_text_line,mt);const b=i+e.top_text_line+.5;!t.articulation.between_lines&&bt.getWidth())).reduce(((t,e)=>Math.max(e,t))),a=Math.min(Math.max(s-i,0),Math.max(s-(e.left_shift+e.right_shift),0));return e.left_shift+=a/2,e.right_shift+=a/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const n={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const s={type:n[t]};return e&&(s.position=tt.PositionString[e]),i.getFactory().Articulation(s)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=mt,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=mt),this.type.endsWith("Below")&&(this.position=gt));const t=(this.position===mt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),p(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(p(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:n,glyph:s,text_line:a}=this,o=this.articulation.between_lines,r=e.checkStave(),h=r.getSpacingBetweenLines(),b=g(e),{x:c}=e.getModifierStartXY(n,i),l=!o||b,d=function(t,e){const i=e===mt&&t.getStemDirection()===st.UP||e===gt&&t.getStemDirection()===st.DOWN;return pt(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,n),m=V.currentMusicFont().lookupMetric(`articulation.${s.getCode()}.padding`,0);let _={[mt]:()=>{s.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:n,baseY:s}=t.getStemExtents();if(pt(t))return t.hasStem()?i===st.UP?n:s:Math.min(...t.getYs());if(g(t))return t.hasStem()&&i===st.UP?n:t.checkStave().getYForTopText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)-(a+d)*h;return l?Math.min(r.getYForTopText(ft.INITIAL_OFFSET),t):t},[gt]:()=>{s.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:n,baseY:s}=t.getStemExtents();if(pt(t))return t.hasStem()?i===st.UP?s:n:Math.max(...t.getYs());if(g(t))return t.hasStem()?i===st.UP?t.checkStave().getYForBottomText(e):n:t.checkStave().getYForBottomText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)+(a+d)*h;return l?Math.max(r.getYForBottomText(ft.INITIAL_OFFSET),t):t}}[n]();if(!b){const t=n===mt?-1:1,a=e.getKeyProps()[i].line,r=(e.getYs()[i]-_)/h+Number(a),b=function(t,e,i,n){const s=_t(ut(e,i),e);if(t&&xt(s,i)&&s%1==0)return s+.5*-n;return s}(o,r,n,t);xt(b,n)&&s.setOrigin(.5,.5),_+=Math.abs(b-r)*h*t+m*t}!function(...t){ft.DEBUG&&f("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${c}, y: ${_})`),s.render(t,c,_)}}ft.DEBUG=!1,ft.INITIAL_OFFSET=-.5;class yt{static get CATEGORY(){return _.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,n="#F55"){t.save(),t.setFillStyle(n),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends W{static get CATEGORY(){return _.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new B(0,1),this.intrinsicTicks=0,this.tickMultiplier=new B(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new x("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return p(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const n=this.tupletStack.indexOf(t);return-1!==n&&(this.tupletStack.splice(n,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const n=g.space.deviation,s=n>=0?"+":"";t.setFillStyle("red"),t.fillText(s+Math.round(n),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const n=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const s=t.split("/");n[e]=s&&3===s.length?s[2]:i})));let s=V.durationToTicks(e.duration);if(!s)return;const a=t.dots?t.dots:e.dots;if("number"!=typeof a)return;let o=s;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new x("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new x("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(_.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return p(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new x("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new x("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}static getPoint(t){return"default"==t?V.NOTATION_FONT_SCALE:V.NOTATION_FONT_SCALE/5*3}getStemDirection(){throw new x("NoStem","No stem attached to this note.")}getStemExtents(){throw new x("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Bt,Et,Ct,Pt,Nt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class kt extends W{static get CATEGORY(){return _.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,n=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+n)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Bt||(Bt={}));class At extends kt{static get CATEGORY(){return _.Barline}static get type(){return Bt}static get typeString(){return{single:Bt.SINGLE,double:Bt.DOUBLE,end:Bt.END,repeatBegin:Bt.REPEAT_BEGIN,repeatEnd:Bt.REPEAT_END,repeatBoth:Bt.REPEAT_BOTH,none:Bt.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=Bt;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?At.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Bt.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Bt.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Bt.END:this.drawVerticalEndBar(t,this.x);break;case Bt.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Bt.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Bt.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const n=t.checkContext(),s=t.getTopLineTopY(),a=t.getBottomLineBottomY();i&&n.fillRect(e-3,s,1,a-s),n.fillRect(e,s,1,a-s)}drawVerticalEndBar(t,e){const i=t.checkContext(),n=t.getTopLineTopY(),s=t.getBottomLineBottomY();i.fillRect(e-5,n,1,s-n),i.fillRect(e-2,n,3,s-n)}drawRepeatBar(t,e,i){const n=t.checkContext(),s=t.getTopLineTopY(),a=t.getBottomLineBottomY();let o=3;i||(o=-5),n.fillRect(e+o,s,1,a-s),n.fillRect(e-2,s,3,a-s);i?o+=4:o-=4;const r=e+o+1;let h=(t.getNumLines()-1)*t.getSpacingBetweenLines();h=h/2-t.getSpacingBetweenLines()/2;let b=s+h+1;n.beginPath(),n.arc(r,b,2,0,2*Math.PI,!1),n.fill(),b+=t.getSpacingBetweenLines(),n.beginPath(),n.arc(r,b,2,0,2*Math.PI,!1),n.fill()}}class Dt extends vt{static get CATEGORY(){return _.BarNote}constructor(t=Bt.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Bt;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?At.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Dt.DEBUG&&f("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t);const e=new At(this.type);e.setX(this.getAbsoluteX()),e.draw(this.checkStave()),this.restoreStyle(t),this.setRendered()}}Dt.DEBUG=!1;class Mt extends tt{static get CATEGORY(){return _.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let n=0;nt{const a=t+n,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(a,o,t+n,s),e.stroke(),e.restore()},c=(t,i,n,s)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,s),e.quadraticCurveTo(t+n,s,t+n,i),e.stroke(),e.restore()},l=(t,i,n)=>{const s=i+4*n;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,s),e.lineTo(t+4,s),e.closePath(),e.fill()},d=(t,i)=>{e.save(),e.setFont(this.textFont);const n=t-e.measureText(i).width/2;e.fillText(i,n,h),e.restore()};let m,g=0,_=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){d(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=b.symbolBlocks[t-1];Ot.isSuperscript(e)||(s=n)}a&&s>0&&(x=!0,e.xShift=e.xShift+(s-n),n=s,s=0,b.setEnableKerning(!1)),i||a||(s=0),e.vAlign=x,n+=e.width,g=n}if(b.updateKerningAdjustments(),b.updateOverBarAdjustments(),b.getVertical()===Ct.TOP?(b.setTextLine(e.top_text_line),e.top_text_line+=_):(b.setTextLine(e.text_line+1),e.text_line+=_+1),b.getReportWidth()&&m(d)){const t=d.getGlyphProps().getWidth();b.getHorizontal()===Et.LEFT?(r=Math.max(t,r),a=Math.max(a,g)+Ot.minPadding):b.getHorizontal()===Et.RIGHT?(h=Math.max(t,h),o=Math.max(o,g)):(a=Math.max(a,g/2)+Ot.minPadding,o=Math.max(o,g/2),r=Math.max(t/2,r),h=Math.max(t/2,h))}n=0}const b=Math.min(Math.max(o-h,0),Math.max(o-e.right_shift,0)),c=Math.min(Math.max(a-r,0),Math.max(a-e.left_shift,0));return e.left_shift+=c,e.right_shift+=b,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Et.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:N.NORMAL,style:k.NORMAL}}get superscriptOffset(){return Ot.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Ot.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Pt.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let n=0;for(;n0?this.symbolBlocks[t-1]:void 0;let n=0;e.symbolType===Pt.GLYPH&&void 0!==e.glyph&&e.glyph.code===Ot.glyphs.over.code&&(n+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Pt.GLYPH&&void 0!==i.glyph&&i.glyph.code===Ot.glyphs.over.code&&(n+=i.glyph.metrics.x_shift);let s=!1,a=!1;void 0!==i&&i.symbolType===Pt.TEXT&&(s=Ot.upperKerningText.some((t=>t===i.text[i.text.length-1])),a=Ot.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Ot.kerningOffset*this.textFormatter.fontSizeInPixels;return s&&e.symbolModifier===Nt.SUPERSCRIPT&&(n+=o),a&&e.symbolType===Pt.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(n+=o/2),Ot.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(n+=o/2)),n}getSymbolBlock(t={}){var e,i,n;const s=null!==(e=t.symbolType)&&void 0!==e?e:Pt.TEXT,a={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:s,symbolModifier:null!==(n=t.symbolModifier)&&void 0!==n?n:Nt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(s===Pt.GLYPH&&"string"==typeof t.glyph){const e=Ot.glyphs[t.glyph],i=20;a.glyph=new Z(e.code,i,{category:"chordSymbol"})}else s===Pt.TEXT?a.width=this.textFormatter.getWidthForTextInEm(a.text):s===Pt.LINE&&(a.width=t.width);return a}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Pt.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Pt.TEXT,i=Nt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Pt.TEXT,i=Nt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Pt.GLYPH,i=Nt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Pt.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let n=0;n0&&(this.addText(i,e),i=""),this.addGlyph(s,e)):i+=s}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Pt.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,n){return super.setFont(t,e,i,n),this.textFormatter=bt.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Ot.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Ot.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,n=0;for(n=0;n0?i/s*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let n;t.setFont(this.textFont);const s=e.hasStem(),a=e.checkStave();if(this.vertical===Ct.BOTTOM){if(n=a.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),s){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines(),s=1===e.getStemDirection()?t.baseY:t.topY;n=Math.max(n,s+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(n=Math.min(a.getYForTopText(this.text_line),t-10),s){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines();n=Math.min(n,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Et.LEFT?i.x:this.horizontal===Et.RIGHT?i.x+this.getWidth():this.horizontal===Et.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Ft("Rendering ChordSymbol: ",this.textFormatter,o,n),this.symbolBlocks.forEach((e=>{const i=Ot.isSuperscript(e),s=Ot.isSubscript(e);let a=n;if(Ft("shift was ",e.xShift,e.yShift),Ft("curY pre sub ",a),i&&(a+=this.superscriptOffset),s&&(a+=this.subscriptOffset),Ft("curY sup/sub ",a),e.symbolType===Pt.TEXT){if((i||s)&&(t.save(),this.textFont)){const{family:e,size:i,weight:n,style:s}=this.textFont,a=F.scaleSize(i,Ot.superSubRatio);t.setFont(e,a,n,s)}Ft("Rendering Text: ",e.text,o+e.xShift,a+e.yShift),t.fillText(e.text,o+e.xShift,a+e.yShift),(i||s)&&t.restore()}else e.symbolType===Pt.GLYPH&&e.glyph?(a+=e.yShift,Ft("Rendering Glyph: ",e.glyph.code,o+e.xShift,a),e.glyph.render(t,o+e.xShift,a)):e.symbolType===Pt.LINE&&(Ft("Rendering Line : ",e.width,o,a),t.beginPath(),t.setLineWidth(1),t.moveTo(o,n),t.lineTo(o+e.width,a),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Ot.DEBUG=!1,Ot.HorizontalJustify=Et,Ot.HorizontalJustifyString={left:Et.LEFT,right:Et.RIGHT,center:Et.CENTER,centerStem:Et.CENTER_STEM},Ot.VerticalJustify=Ct,Ot.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Ot.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Ot.symbolTypes=Pt,Ot.symbolModifiers=Nt,Ot.noFormat=!1;class Rt extends tt{static get CATEGORY(){return _.Dot}static getDots(t){return t.getModifiersByType(Rt.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let a=i,o=0,r=null,h=null,b=null,c=0;for(let t=0;to?a:o,r=d,h=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,h(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),n=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});g(e)&&(n.y=e.getStemExtents().baseY);const s=n.x+this.x_shift+this.width-this.radius,a=n.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(s,a,this.radius,0,2*Math.PI,!1),t.fill()}}class Wt extends tt{static get CATEGORY(){return _.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:n}=e;if(!t||0===t.length)return!1;const s=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,b=0,c=0,l=0,d=null,m=null;for(let t=0;tc?e:c):o===tt.Position.RIGHT&&(g.setXShift(b),e=r+p,l=e>l?e:l),d=_,m=a}return e.left_shift+=c,e.right_shift+=l,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),n={number:e[0]};return e[1]&&(n.position=e[1]),i.getFactory().Fingering(n)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let n=i.x+this.x_shift+this.x_offset,s=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:n-=4,s-=12;break;case tt.Position.BELOW:n-=2,s+=10;break;case tt.Position.LEFT:n-=this.width;break;case tt.Position.RIGHT:n+=1;break;default:throw new x("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,n,s),t.restore()}}Wt.TEXT_FONT={family:F.SANS_SERIF,size:9,weight:N.BOLD,style:k.NORMAL};class Lt extends vt{static get CATEGORY(){return _.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||st.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=st.WIDTH/2,i=V.currentMusicFont(),n=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,s=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+n+(this.displaced?(this.width-e)*this.stem_direction+s:0)}getBoundingBox(){const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===st.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Lt.DEBUG&&f("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const n=this.stem_direction,s=this.render_options.glyph_font_scale,a=`${this.glyph_code}Stem${n===st.UP?"Up":"Down"}`;if("s"===this.noteType){const s=this.checkStave().getSpacingBetweenLines();!function(t,e,i,n,s,a){const o=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let r=!1;if(V.durationToNumber(e)>2&&(r=!0),r||(i-=V.STEM_WIDTH/2*s),t.beginPath(),t.moveTo(i,n+a),t.lineTo(i,n+1),t.lineTo(i+o,n-a),t.lineTo(i+o,n),t.lineTo(i,n+a),t.closePath(),r?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let s=0;st.getCategory()===_.Dot&&0===t.getIndex())).length!==r.note.getModifiers().filter((t=>t.getCategory()===_.Dot&&0===t.getIndex())).length||t<1&&t>0||JSON.stringify(a.note.getStyle())!==JSON.stringify(r.note.getStyle())?(l=c+2,a.stemDirection===r.stemDirection?a.note.setXShift(l):r.note.setXShift(l)):a.note.voice!==r.note.voice&&a.stemDirection===r.stemDirection&&(a.line!=r.line?(l=c+2,a.note.setXShift(l)):1===r.stemDirection&&(r.stemDirection=-1,r.note.setStemDirection(-1)))}else t<1?(l=c+2,a.note.durationt.postFormat())),!0)}constructor(t){var e,i,n;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Gt.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(n=t.stem_direction)&&void 0!==n?n:st.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const n=t[i];n&&e.setStyle(n)}));const e=this.stave;return e&&this.setStave(e),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new st({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,n,s,a,o,r=!1;t===st.UP?(s=0,a=e.length,o=1):(s=e.length-1,a=-1,o=-1);for(let e=s;e!==a;e+=o){const s=this.sortedKeyProps[e].keyProps,a=s.line;void 0===i?i=a:(n=Math.abs(i-a),0===n||.5===n?r=!r:(r=!1,this.use_default_head_x=!0)),i=a;const o=new Lt({duration:this.duration,note_type:this.noteType,displaced:r,stem_direction:t,custom_glyph_code:s.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:s.shift_right,stem_up_x_offset:s.stem_up_x_offset,stem_down_x_offset:s.stem_down_x_offset,line:s.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?st.UP:st.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=a,this.keyProps.push(s)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new x("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:n,leftDisplacedHeadPx:s}=this.getMetrics(),a=this.getAbsoluteX()-n-s;let o=0,r=0;const h=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,b=2*h;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-h,r=t+h):(o=t-this.glyphProps.line_above*b,r=t+this.glyphProps.line_below*b)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=h*this.getStemDirection(),o=Math.min(t.topY,t.baseY),r=Math.max(t.topY,t.baseY)}else{o=0,r=0;for(let t=0;te&&(e=n):n1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?st.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var n,s;if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");const{ABOVE:a,BELOW:o,LEFT:r,RIGHT:h}=tt.Position;let b=0;return t===r?b=-2:t===h?(b=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===st.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===st.UP?t.keyProps.length-1:0))(this,e))&&(b+=null!==(s=null===(n=null==this?void 0:this.flag)||void 0===n?void 0:n.getMetrics().width)&&void 0!==s?s:0)):t!==o&&t!==a||(b=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+b,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===st.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===st.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Gt.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===st.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,n,s=1/0,a=-1/0,o=this.checkStave().getNumLines(),r=1,h=o,b=r;return this._noteHeads.forEach((c=>{const l=c.getLine(),d=c.getY();s=Math.min(d,s),a=Math.max(d,a),void 0===e&&c.isDisplaced()&&(e=c.getAbsoluteX()),void 0!==t||c.isDisplaced()||(t=c.getAbsoluteX()),o=Math.max(l,o),r=Math.min(l,r),c.isDisplaced()?(i=void 0===i?l:Math.max(l,i),n=void 0===n?l:Math.min(l,n)):(h=Math.max(l,h),b=Math.min(l,b))}),this),{y_top:s,y_bottom:a,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:r,highest_displaced_line:i,lowest_displaced_line:n,highest_non_displaced_line:h,lowest_non_displaced_line:b}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,n=this.checkContext(),s=e.getWidth()+2*i,a=2*(e.getWidth()+i)-st.WIDTH/2;if(this.isRest())return;if(!n)throw new x("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:r,highest_displaced_line:h,highest_non_displaced_line:b,lowest_displaced_line:c,lowest_non_displaced_line:l,displaced_x:d,non_displaced_x:m}=this.getNoteHeadBounds();if(o<6&&r>0)return;const g=Math.min(null!=d?d:0,null!=m?m:0),_=(t,e,o)=>{let r;r=o&&e?g-i:e?(null!=m?m:0)-i:(null!=d?d:0)-i;const h=e&&o?a:s;n.beginPath(),n.moveTo(r,t),n.lineTo(r+h,t),n.stroke()},u=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(n,u);for(let e=6;e<=o;++e){const i=void 0!==m&&e<=b,n=void 0!==h&&e<=h;_(t.getYForNote(e),i,n)}for(let e=0;e>=r;--e){const i=void 0!==m&&e>=l,n=void 0!==c&&e>=c;_(t.getYForNote(e),i,n)}this.restoreStyle(n,u)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new st(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===st.UP?3-this.maxLine:this.minLine-3;const n=i-3.5;if(n<=0)return t;const s=this.getStave();let a=10;return null!=s&&(a=s.getSpacingBetweenLines()),t+n*a}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new x("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Gt.DEBUG&&f("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Gt.DEBUG=!1;class Ut extends W{static get CATEGORY(){return _.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,n=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,n=8);const s=this.render_options.first_x_shift,a=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,r=this.notes.first_indices,h=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let b=0;bMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===Ht.STRICT||this.mode===Ht.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new x("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let n=0;n1){const e=new We(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Gt.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&f("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=d(e),n=i?Ut:Yt;this.slur=new n({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return _.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new ke,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt{static getNextContext(t){const e=t.tContexts,i=e.indexOf(t);if(i+1t.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:n,rightDisplacedHeadPx:s,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:n,rightDisplacedHeadPx:s,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new x("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t=0&&(r.x_shift+=n+2),$t.ornamentAttack.indexOf(r.type)>=0&&(r.x_shift-=s+2),r.reportedWidth&&r.x_shift<0?s+=r.reportedWidth:r.reportedWidth&&r.x_shift>=0?n+=r.reportedWidth+$t.minPadding:i=Math.max(r.getWidth(),i),$t.ornamentArticulation.indexOf(r.type)>=0){p(r.note,"NoAttachedNote").getLineNumber()>=3||r.getPosition()===tt.Position.ABOVE?(e.top_text_line+=h,r.y_shift+=a,a-=r.glyph.bbox.getH()):(e.text_line+=h,r.y_shift+=a,a+=r.glyph.bbox.getH())}else r.getPosition()===tt.Position.ABOVE?(r.setTextLine(e.top_text_line),e.top_text_line+=h):(r.setTextLine(e.text_line),e.text_line+=h)}return e.left_shift=s+i/2,e.right_shift=n+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new x("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:V.NOTATION_FONT_SCALE,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=$t.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new x("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),$t.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),n=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const s=e.checkStem().getExtents();let a=i===st.DOWN?s.baseY:s.topY;g(e)&&(e.hasStem()?i===st.DOWN&&(a=n.getYForTopText(this.text_line)):a=n.getYForTopText(this.text_line));const o=i===st.DOWN,r=n.getSpacingBetweenLines();let h=1;!o&&e.hasBeam()&&(h+=.5);const b=a-r*(this.text_line+h),c=e.getModifierStartXY(this.position,this.index);let l=c.x,d=this.ornamentAlignWithNoteHead?c.y:Math.min(n.getYForTopText(this.text_line),b);if(d+=this.y_shift,this.delayed){let t=0;const i=l-(n.getX()-10);if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const s=Kt.getNextContext(e.getTickContext());t+=s?.5*(s.getX()-i):.5*(n.getX()+n.getWidth()-i),this.delayXShift=t}l+=t}!function(...t){$t.DEBUG&&f("Vex.Flow.Ornament",t)}("Rendering ornament: ",this.ornament,l,d),this.accidentalLower&&(this.accidentalLower.render(t,l,d),d-=this.accidentalLower.getMetrics().height,d-=this.render_options.accidentalLowerPadding),this.stemUpYOffset&&e.hasStem()&&1===e.getStemDirection()&&(d+=this.stemUpYOffset),e.getLineNumber()<5&&$t.ornamentNoteTransition.indexOf(this.type)>=0&&(d=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,l+this.x_shift,d),this.accidentalUpper&&(d-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,l,d)),t.closeGroup(),this.restoreStyle()}}$t.DEBUG=!1;class Jt extends tt{static get CATEGORY(){return _.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;th+s.width?n:h+s.width),o===J.LEFT&&(h=a.getLeftParenthesisPx(r),i=i>h+s.width?i:h+s.width),s.setXShift(h)}return e.left_shift+=i,e.right_shift+=n,!0}constructor(t){var e;super(),this.position=null!=t?t:tt.Position.LEFT,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){var e,i;return this.note=t,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),h(t)&&(this.point=null!==(i=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"))&&void 0!==i?i:vt.getPoint("gracenote"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),n=i.x+this.x_shift,s=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,n+1,s,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,n-2,s,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function Qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Zt extends yt{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(y("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Zt.WIDTH,height:Zt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e,i){var n;const s=this.context2D.canvas,a=null!==(n=null!=i?i:u().devicePixelRatio)&&void 0!==n?n:1;return[t,e]=Zt.sanitizeCanvasDims(t*a,e*a),t=t/a|0,e=e/a|0,s.width=t*a,s.height=e*a,qt(s)&&(s.style.width=t+"px",s.style.height=e+"px"),this.scale(a,a)}rect(t,e,i,n){return this.context2D.rect(t,e,i,n),this}fillRect(t,e,i,n){return this.context2D.fillRect(t,e,i,n),this}clearRect(t,e,i,n){return this.context2D.clearRect(t,e,i,n),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,n,s,a){return this.context2D.bezierCurveTo(t,e,i,n,s,a),this}quadraticCurveTo(t,e,i,n){return this.context2D.quadraticCurveTo(t,e,i,n),this}arc(t,e,i,n,s,a){return this.context2D.arc(t,e,i,n,s,a),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,n=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,n=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,n=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:n}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,n){const s=F.validate(t,e,i,n);return this.context2D.font=F.toCSSString(s),this.textHeight=F.convertSizeToPixelValue(s.size),this}getFont(){return this.context2D.font}}const te={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},ee="http://www.w3.org/2000/svg",ie=2*Math.PI;class ne extends yt{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":F.SANS_SERIF,"font-size":F.SIZE+"pt","font-weight":N.NORMAL,"font-style":k.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(ee,t)}openGroup(t,e,i){const n=this.create("g");return this.groups.push(n),this.parent.appendChild(n),this.parent=n,t&&n.setAttribute("class",T(t)),e&&n.setAttribute("id",T(e)),i&&i.pointerBBox&&n.setAttribute("pointer-events","bounding-box"),this.applyAttributes(n,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),n}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new x("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,n=this.height/this.state.scaleY;return this.setViewBox(0,0,i,n),this}setViewBox(t,e,i,n){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const s=t+" "+e+" "+i+" "+n;this.svg.setAttribute("viewBox",s)}}applyAttributes(t,e){const i=te[t.nodeName];for(const n in e)i&&i[n]||!e[n]||0!=this.groupAttributes.length&&e[n]==this.groupAttributes[this.groupAttributes.length-1][n]||t.setAttributeNS(null,n,e[n]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,n,s){n<0&&(e+=n,n*=-1);const a=this.create("rect");return s=null!=s?s:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),n=this.round(n),this.applyAttributes(a,Object.assign({x:t,y:e,width:i,height:n},s)),this.add(a),this}fillRect(t,e,i,n){const s={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,n,s),this}clearRect(t,e,i,n){return this.rect(t,e,i,n,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,n,s,a){return s=this.round(s),a=this.round(a),t=this.round(t),e=this.round(e),i=this.round(i),n=this.round(n),this.path+="C"+t+" "+e+","+i+" "+n+","+s+" "+a,this.pen.x=s,this.pen.y=a,this}quadraticCurveTo(t,e,i,n){return i=this.round(i),n=this.round(n),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+n,this.pen.x=i,this.pen.y=n,this}arc(t,e,i,n,s,a){let o=t+i*Math.cos(n),r=e+i*Math.sin(n);o=this.round(o),r=this.round(r);const h=v(n),b=v(s);if(!a&&s-n>=ie||a&&n-s>=ie||h===b){let s=t+i*Math.cos(n+Math.PI),a=e+i*Math.sin(n+Math.PI);s=this.round(s),a=this.round(a),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 0 0 ${s} ${a} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${r}`,this.pen.x=o,this.pen.y=r}else{let c,l=t+i*Math.cos(s),d=e+i*Math.sin(s);n=h,s=b,c=Math.abs(s-n)s&&(c=!c);const m=!a;l=this.round(l),d=this.round(d),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 ${+c} ${+m} ${l} ${d}`,this.pen.x=l,this.pen.y=d}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return ne.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const n=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),s=this.create("text");return s.textContent=t,this.applyAttributes(s,n),this.add(s),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,n){const s=F.validate(t,e,i,n);this.fontCSSString=F.toCSSString(s);const a={"font-family":s.family,"font-size":s.size,"font-weight":s.weight,"font-style":s.style};return this.attributes=Object.assign(Object.assign({},this.attributes),a),this.state=Object.assign(Object.assign({},this.state),a),this}getFont(){return this.fontCSSString}}var se,ae,oe,re;ne.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let n=this.cache[t];void 0===n&&(n={},this.cache[t]=n);const s=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let a=n[s];return void 0===a&&(a=this.measureImpl(t,e,i),n[s]=a),a}measureImpl(t,e,i){let n=this.txt;n||(n=document.createElementNS(ee,"text"),this.txt=n),n.textContent=t,i["font-family"]&&n.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&n.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&n.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&n.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(n);const s=n.getBBox();return e.removeChild(n),{x:s.x,y:s.y,width:s.width,height:s.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(se||(se={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ae||(ae={}));class he{static buildContext(t,e,i,n,s="#FFF"){const a=new he(t,e);i&&n&&a.resize(i,n);const o=a.getContext();return o.setBackgroundFillStyle(s),he.lastContext=o,o}static getCanvasContext(t,e,i,n){return he.buildContext(t,he.Backends.CANVAS,e,i,n)}static getSVGContext(t,e,i,n){return he.buildContext(t,he.Backends.SVG,e,i,n)}static drawDashedLine(t,e,i,n,s,a){t.beginPath();const o=n-e,r=s-i,h=Math.atan2(r,o);let b=e,c=i;t.moveTo(e,i);let l=0,d=!0;for(;!(o<0?b<=n:b>=n)||!(r<0?c<=s:c>=s);){const e=a[l++%a.length],i=b+Math.cos(h)*e;b=o<0?Math.max(n,i):Math.min(n,i);const m=c+Math.sin(h)*e;c=r<0?Math.max(s,m):Math.min(s,m),d?t.lineTo(b,c):t.moveTo(b,c),d=!d}t.closePath(),t.stroke()}constructor(t,e){if(l(t))this.ctx=t;else{if(void 0===e)throw new x("InvalidArgument","Missing backend argument");const i=e;let n;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new x("BadElementId",`Can't find element with ID "${e}"`);n=e}else n=t;if(i===he.Backends.CANVAS){if(!qt(n))throw new x("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=n.getContext("2d",{willReadFrequently:!0});if(!t)throw new x("BadElement","Can't get canvas context");this.ctx=new Zt(t)}else{if(i!==he.Backends.SVG)throw new x("InvalidBackend",`No support for backend: ${i}`);if(!Qt(n))throw new x("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new ne(n)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}he.Backends=se,he.LineEndType=ae,he.lastContext=void 0;class be extends tt{static get CATEGORY(){return _.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,n=e.right_shift;if(!t||0===t.length)return!1;const s=[];let a=null,o=0,r=0;for(let i=0;ie.line-t.line));let h=0,b=0,c=0,l=null,m=null;for(let t=0;tc?x:c),l=d,m=e}return e.left_shift+=b,e.right_shift+=c,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=he.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=he.LineEndType.NONE&&t<=he.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),n=e.hasStem()?e.getStemDirection():st.UP;let s=i.x+this.x_shift+this.x_offset,a={};e.hasStem()&&(a=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&n==st.DOWN&&(o=a.topY-be.metrics.stemPadding),o+=this.radius+be.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:s-=this.radius/2+be.metrics.leftPadding;break;case tt.Position.RIGHT:s+=this.radius/2+be.metrics.rightPadding;break;default:throw new x("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(s,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const r=s-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,r,o+4.5);const h=this.last_note;if(m(h)){const i=h.getStemX()-e.getX()+5;let n,a;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?he.drawDashedLine(t,s+10,o,s+i,o,[3,3]):he.drawDashedLine(t,s+10,o,s+i,o,[3,0]),this.leg){case he.LineEndType.UP:n=-10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,s+i,o,s+i,o+n,a);break;case he.LineEndType.DOWN:n=10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,s+i,o,s+i,o+n,a)}}t.restore()}}be.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:N.BOLD,style:k.NORMAL};class ce extends tt{static get CATEGORY(){return _.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const n=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(d(e)){const{line:n}=e.getKeyProps()[i];return{line:n,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(g(e)){const{str:n}=e.getPositions()[i];return{line:n,shift:0,stroke:t}}throw new x("Internal","Unexpected instance.")})),s=i,a=n.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(s+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=a,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let n=e.getYs(),s=i.y,a=i.y;const o=i.x-5,r=e.checkStave().getSpacingBetweenLines(),h=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){n-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(n,this.checkStave(),t.line),this.glyphs.push(n);const a=this.xPositions[this.xPositions.length-1],o=n.getMetrics().width+s;this.xPositions.push(a+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,n=i?e.length:e.length-this.accList.length;if(n<1)return;const s=[];for(let t=0;t0?e[0].type:void 0;let n;if(this.cancelKeySpec&&(n=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const s=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();n&&this.convertAccLines(s,n.type,n.accList),this.convertAccLines(s,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":n=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":n=i.length>0?"ParensRightSmall":"ParensRight"}const s=new Z("timeSig"+n,this.timeSignature.point);this.topGlyphs.push(s),r+=null!==(o=s.getMetrics().width)&&void 0!==o?o:0,h=Math.max(h,s.getMetrics().height)}let b=0;for(let t=0;t22?1:0,this.width=Math.max(r,b),this.xMin=this.getMetrics().x_min,this.topStartX=(this.width-r)/2,this.botStartX=(this.width-b)/2,this.reset()}getMetrics(){return{x_min:this.xMin,x_max:this.xMin+this.width,width:this.width}}renderToStave(t){const e=this.checkStave(),i=this.checkContext();let n=t+this.topStartX,s=0;s=this.botGlyphs.length>0?e.getYForLine(this.timeSignature.topLine-this.lineShift):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const n=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=n[0])&&void 0!==e?e:"",null!==(i=n[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Te(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(p(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const we={[At.CATEGORY]:0,[ge.CATEGORY]:1,[_e.CATEGORY]:2,[ve.CATEGORY]:3},Be={[ve.CATEGORY]:0,[_e.CATEGORY]:1,[At.CATEGORY]:2,[ge.CATEGORY]:3};class Ee extends W{static get CATEGORY(){return _.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,n){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},n),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new At(this.options.left_bar?Bt.SINGLE:Bt.NONE)),this.addEndModifier(new At(this.options.right_bar?Bt.SINGLE:Bt.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new xe(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new Se(t,e,this.x,i)),this}setSection(t,e,i=0,n,s=!0){const a=new ue(t,this.x+i,e,s);return n&&a.setFontSize(n),this.modifiers.push(a),this}setTempo(t,e){return this.modifiers.push(new pe(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new ye(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,n=e.space_above_staff_ln;return this.y+t*i+n*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,n=e.space_above_staff_ln;return(t-this.y)/i-n}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,n=e.space_above_staff_ln;return this.y+n*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:n}=Bt;return t!==e&&t!==i&&t!==n||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Bt.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClef(t,e,i,n){void 0===n&&(n=wt.BEGIN),n===wt.END?this.endClef=t:this.clef=t;const s=this.getModifiers(n,ge.CATEGORY);return 0===s.length?this.addClef(t,e,i,n):s[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const n=this.getModifiers(i,_e.CATEGORY);return 0===n.length?this.addKeySignature(t,e,i):n[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const n=this.getModifiers(i,ve.CATEGORY);return 0===n.length?this.addTimeSignature(t,e,i):n[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new _e(t,e).setPosition(i),i),this}addClef(t,e,i,n){return void 0===n||n===wt.BEGIN?this.clef=t:n===wt.END&&(this.endClef=t),this.addModifier(new ge(t,e,i),n),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new ve(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,n=void 0===e;return i&&n?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):n?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let n=0;ne[t[n+1].getCategory()]){const e=t[n];t[n]=t[n+1],t[n+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),n=this.getModifiers(wt.END);let s,a,r;this.sortByCategory(i,we),this.sortByCategory(n,Be),i.length>1&&t.getType()===Bt.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new At(Bt.SINGLE))),n.indexOf(e)>0&&n.splice(0,0,new At(Bt.NONE));let h=0,b=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;s=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,s),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new x("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new x("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new x("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new x("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const n=t.getModifiers(wt.BEGIN,e);n.length>0&&n[0].getX()>i&&(i=n[0].getX())}));let n=0;t.forEach((t=>{n=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>n&&(n=i-t.getX())}));const s=t.getModifiers(wt.BEGIN);let a=!1;s.forEach((t=>{t.getCategory()===e&&(a=!0),a&&n>0&&t.setX(t.getX()+n)})),t.setNoteStartX(t.getNoteStartX()+n)}))};t.forEach((t=>{t.formatted||t.format()})),e(_.Clef),e(_.KeySignature),e(_.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Bt.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Bt.REPEAT_BEGIN&&t.setX(i)}))}))}}function Ce(t,e,i,n,s){if(e!==Pe.type.BOLD_DOUBLE_LEFT&&e!==Pe.type.BOLD_DOUBLE_RIGHT)throw new x("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let a=3,o=3.5;e===Pe.type.BOLD_DOUBLE_RIGHT&&(a=-5,o=3),t.fillRect(i+a,n,1,s-n),t.fillRect(i-2,n,o,s-n)}Ee.TEXT_FONT={family:F.SANS_SERIF,size:8,weight:N.NORMAL,style:k.NORMAL};class Pe extends W{static get CATEGORY(){return _.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Pe.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Pe.typeString[t]:t;return Object.values(Pe.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new x("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,n=this.width,s=this.top_stave.getX();(this.type===Pe.type.SINGLE_RIGHT||this.type===Pe.type.BOLD_DOUBLE_RIGHT||this.type===Pe.type.THIN_DOUBLE)&&(s=this.top_stave.getX()+this.top_stave.getWidth());let a=i-e;switch(this.type){case Pe.type.SINGLE:case Pe.type.SINGLE_LEFT:case Pe.type.SINGLE_RIGHT:n=1;break;case Pe.type.DOUBLE:s-=this.width+2,e-=this.thickness,a+=.5;break;case Pe.type.BRACE:{n=12;const s=this.top_stave.getX()-2+this.x_shift,o=e,r=s,h=i,b=s-n,c=o+a/2,l=b-.9*n,d=o+.2*a,m=s+1.1*n,g=c-.135*a,_=m,x=c+.135*a,u=l,p=h-.2*a,f=b-n,y=p,S=s+.4*n,T=c+.135*a,v=S,w=c-.135*a,B=f,E=d;t.beginPath(),t.moveTo(s,o),t.bezierCurveTo(l,d,m,g,b,c),t.bezierCurveTo(_,x,u,p,r,h),t.bezierCurveTo(f,y,S,T,b,c),t.bezierCurveTo(v,w,B,E,s,o),t.fill(),t.stroke();break}case Pe.type.BRACKET:e-=6,i+=6,a=i-e,Z.renderGlyph(t,s-5,e,40,"bracketTop"),Z.renderGlyph(t,s-5,i,40,"bracketBottom"),s-=this.width+2;break;case Pe.type.BOLD_DOUBLE_LEFT:Ce(t,this.type,s+this.x_shift,e,i-this.thickness);break;case Pe.type.BOLD_DOUBLE_RIGHT:Ce(t,this.type,s,e,i-this.thickness);break;case Pe.type.THIN_DOUBLE:n=1,a-=this.thickness;break;case Pe.type.NONE:break;default:throw new x("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Pe.type.BRACE&&this.type!==Pe.type.BOLD_DOUBLE_LEFT&&this.type!==Pe.type.BOLD_DOUBLE_RIGHT&&this.type!==Pe.type.NONE&&t.fillRect(s,e,n,a),this.type===Pe.type.THIN_DOUBLE&&t.fillRect(s-3,e,n,a),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;e{e.addToModifierContext(new me);const n=(new Kt).addTickable(e).preFormat(),s=n.getMetrics();return n.setX(t+s.totalLeftPx),t+n.getWidth()+s.totalRightPx+i}),e)}static plotDebugging(t,e,i,n,s,a){const o=i+(a=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},a)).stavePadding,r=e.contextGaps;t.save(),t.setFont(F.SANS_SERIF,8),r.gaps.forEach((e=>{var i,a,r;i=o+e.x1,a=o+e.x2,r="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(r),t.setFillStyle(r),t.setLineWidth(1),t.fillRect(i,n,Math.max(a-i,0),s-n),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,s+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${r.total.toFixed(2)}`,o-20,s+27),t.restore()}static FormatAndDraw(t,e,i,n){let s={auto_beam:!1,align_rests:!1};"object"==typeof n?s=Object.assign(Object.assign({},s),n):"boolean"==typeof n&&(s.auto_beam=n);const a=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),o=s.auto_beam?We.applyAndGetBeams(a):[];return(new ke).joinVoices([a]).formatToStave([a],e,{align_rests:s.align_rests,stave:e}),a.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),a.getBoundingBox()}static FormatAndDrawTab(t,e,i,n,s,a,o){let r={auto_beam:a,align_rests:!1};"object"==typeof o?r=Object.assign(Object.assign({},r),o):"boolean"==typeof o&&(r.auto_beam=o);const h=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(s),b=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(n),c=r.auto_beam?We.applyAndGetBeams(h):[];(new ke).joinVoices([h]).joinVoices([b]).formatToStave([h,b],i,{align_rests:r.align_rests}),h.draw(t,i),b.draw(t,e),c.forEach((e=>e.setContext(t).draw())),new Pe(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((n,s)=>{if(d(n)&&n.isRest()){if(n.getTuplet()&&!i)return;const a=n.getGlyphProps().position.toUpperCase();if("R/4"!==a&&"B/4"!==a)return;if(e||n.getBeam()){const e=n.getKeyProps()[0];if(0===s)e.line=Ne(t,e.line,s,!1);else if(s>0&&ske.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,n=0,s=0;const a=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new x("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:r,map:h}=this.tickContexts;this.minTotalWidth=0,r.forEach((e=>{const r=h[e];r.preFormat(),r.getTickables().length{n+=t.getMetrics().width,s+=t.getTicks().value(),a.push(t.getMetrics().width),o.push(t.getTicks().value())}));const b=r.getWidth();this.minTotalWidth+=b})),this.hasMinTotalWidth=!0;const b=n>0?n/a.length:1/a.length,c=w(a.map((t=>Math.pow(t-b,2)))),l=Math.pow(c/a.length,.5)/b,d=s/o.length,m=w(o.map((t=>Math.pow(t-d,2)))),g=Math.pow(m/o.length,.5)/d,_=Math.max(g,l)*r.length*e,u=e*i;return this.minTotalWidth+Math.max(u,_)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new x("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new x("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new x("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new x("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,B.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=ke.getResolutionMultiplier(t),i=new Map,n=[];t.forEach((t=>{const s=new B(0,e);t.getTickables().forEach((t=>{const e=s.numerator;let a=i.get(t.getStave());if(a||(i.set(t.getStave(),{}),a=i.get(t.getStave())),!(a?a[e]:void 0)){const t=new me;n.push(t),a[e]=t}t.addToModifierContext(a[e]),s.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:n,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const n={},s=[],a=[],o=ke.getResolutionMultiplier(t);return t.forEach(((t,r)=>{const h=new B(0,o);t.getTickables().forEach((t=>{const o=h.numerator;if(!n[o]){const t=e({tickID:o});a.push(t),n[o]=t,s.push(o)}i(t,n[o],r),h.add(t.getTicks())}))})),{map:n,array:a,list:s.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Kt(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,n){const s=this.tickContexts;if(!s)throw new x("NoTickContexts","preFormat requires TickContexts");const{list:a,map:o}=s;this.lossHistory=[],i&&n&&i.forEach((t=>t.setStave(n).preFormat()));let r=0,h=0;this.minTotalWidth=0;let b=0;a.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const n=e.getMaxTicks().value();b+=n;const s=e.getMetrics();r=r+h+s.totalLeftPx,e.setX(r),h=i-s.totalLeftPx}));const{globalSoftmax:c,softmaxFactor:l,maxIterations:d}=this.formatterOptions,m=w(a.map((t=>Math.pow(l,o[t].getMaxTicks().value()/b))));if(this.minTotalWidth=r+h,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const g=o[a[0]],_=o[a[a.length-1]];function u(t){return a.map(((e,i)=>{const n=o[e],s=n.getTickablesByVoice();let r;if(i>0){const e=o[a[i-1]];for(let h=i-1;h>=0;h--){const i=o[a[h]].getTickablesByVoice(),d=[];if(Object.keys(s).forEach((t=>{i[t]&&d.push(t)})),d.length>0){let a=0,o=1/0,h=0;if(d.forEach((t=>{const e=i[t].getTicks().value();e>a&&(r=i[t],a=e);const n=s[t],h=n.getX()-(n.getMetrics().modLeftPx+n.getMetrics().leftDisplacedHeadPx),b=i[t].getMetrics(),c=i[t].getX()+b.notePx+b.modRightPx+b.rightDisplacedHeadPx;o=Math.min(o,h-c)})),o=Math.min(o,n.getX()-(e.getX()+.05*t)),c){const e=b;h=Math.pow(l,a/e)/m*t}else void 0!==r&&(h=r.getVoice().softmax(a)*t);return{expectedDistance:h,maxNegativeShiftPx:o,fromTickable:r}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function f(t){const e=y/2;let i=0;return a.forEach(((n,s)=>{const a=o[n];if(s>0){const e=a.getX(),n=t[s],o=p(n.fromTickable).getX()+n.expectedDistance-(e+i);let r=0;o>0?i+=o:o<0&&(r=Math.min(n.maxNegativeShiftPx,Math.abs(o)),i+=-r),a.setX(e+i)}a.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-a.getX())}))})),_.getX()-g.getX()}const y=t-_.getMetrics().notePx-_.getMetrics().totalRightPx-g.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),B=S.lookupMetric("stave.padding");let E=y;const C=u(E);let P=f(C);if(1===a.length)return 0;const N=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=_&&_.getMaxTickable();if(i){const n=i.getVoice();if(n.getTicksUsed().value()>n.getTotalTicks().value())return 2*vM&&F>0||P+A1;)E-=P-M,A=k(E),D=A-(v-T),P=f(u(E)),F--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const n=t.list[i-1],s=t.map[n],a=t.map[e],o=s.getMetrics(),r=a.getMetrics(),h=s.getX()+o.notePx+o.totalRightPx,b=a.getX()-r.totalLeftPx,c=b-h;this.contextGaps.total+=c,this.contextGaps.gaps.push({x1:h,x2:b}),a.getFormatterMetrics().freedom.left=c,s.getFormatterMetrics().freedom.right=c})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,n,s)=>{const a=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),r=t.getFormatterMetrics(),h=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let b=0;if(n{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),s=t.getFormatterMetrics();s.space.mean=i[e].mean,s.duration=e,s.iterations+=1,s.space.deviation=s.space.used-s.space.mean,n+=Math.pow(s.space.deviation,2)}))})),this.totalCost=Math.sqrt(n),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const n=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let s=0;return this.totalShift=0,i.list.forEach(((t,e,a)=>{const o=i.map[t],r=e>0?i.map[a[e-1]]:void 0,h=et.getFormatterMetrics().space.deviation)));b>0?s=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(b)):b<0&&(s=h?Math.min(h.getFormatterMetrics().freedom.right,Math.abs(b)):0),s*=n,this.totalShift+=s})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const n=Object.assign({align_rests:!1},i);this.voices=t;const s=this.formatterOptions.softmaxFactor;return s&&this.voices.forEach((t=>t.setSoftmaxFactor(s))),this.alignRests(t,n.align_rests),this.createTickContexts(t),this.preFormat(e,n.context,t,n.stave),n.stave&&this.postFormat(),this}formatToStave(t,e,i){const n=Object.assign({context:e.getContext()},i),s=e.getNoteEndX()-e.getNoteStartX()-Ee.defaultPadding;return function(...t){ke.DEBUG&&f("Vex.Flow.Formatter",t)}("Formatting voices to width: ",s),this.format(t,s,n)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var Ae;ke.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(Ae||(Ae={}));class De extends W{static get CATEGORY(){return _.Tuplet}static get LOCATION_TOP(){return Ae.TOP}static get LOCATION_BOTTOM(){return Ae.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new x("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new x("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=3*V.NOTATION_FONT_SCALE/5,this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||De.LOCATION_TOP),ke.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=s(e,t),n=s(e,t);function s(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const a=s(e,t);i=a>i?a:i,n=a0&&(n=Math.min(a,n))}}}else{let t=De.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),n=i.checkStave().getYForLine(t)+De.metrics.noteHeadOffset;for(let t=0;tn&&(n=e)}}return n+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const n=(t,e)=>t+p(e.getMetrics().width);let s=this.numerator_glyphs.reduce(n,0);this.ratioed&&(s=this.denom_glyphs.reduce(n,s),s+=.32*this.point);const a=this.x_pos+this.width/2-s/2;if(this.bracketed){const e=this.width/2-s/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+s/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=V.currentMusicFont().lookupMetric("digits.shiftY",0);let r=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)})),this.ratioed){const e=a+r+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),r+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)}))}}}function Me(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?st.DOWN:st.UP}const Fe="L",Oe="R",Re="B";class We extends W{static get CATEGORY(){return _.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new B).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new B(3,i)];if(i>4)return[new B(2,i)];if(i<=4)return[new B(1,i)]}return[new B(1,4)]}static applyAndGetBeams(t,e,i){return We.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new B(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new x("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),n=t;let s=0,a=[],o=[];function r(){i.length-1>s?s+=1:s=0}!function(){let t=[],e=new B(0,1);n.forEach((n=>{if(t=[],n.shouldIgnoreTicks())return a.push(o),void(o=t);o.push(n);const h=i[s].clone(),b=(c=o,c.reduce(((t,e)=>e.getTicks().clone().add(t)),new B(0,1))).add(e);var c;const l=V.durationToNumber(n.getDuration())<8;if(l&&n.getTuplet()&&(h.numerator*=2),b.greaterThan(h)){if(!l){const e=o.pop();e&&t.push(e)}a.push(o);do{e=b.subtract(i[s]),r()}while(e.greaterThanEquals(i[s]));o=t}else b.equals(h)&&(a.push(o),e=new B(0,1),o=t,r())})),o.length>0&&a.push(o)}(),function(){const t=[];a.forEach((i=>{let n=[];i.forEach(((i,s,a)=>{const o=0===s||s===a.length-1,r=a[s-1],h=!e.beam_rests&&i.isRest(),b=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let c=!1;if(e.maintain_stem_directions&&r&&!i.isRest()&&!r.isRest()){const t=r.getStemDirection();c=i.getStemDirection()!==t}const l=parseInt(i.getDuration(),10)<8;h||b||c||l?(n.length>0&&t.push(n),n=c?[i]:[]):n.push(i)})),n.length>0&&t.push(n)})),a=t}(),a.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const h=a.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),b=function(){const t=[];return a.forEach((e=>{let i;e.forEach((e=>{const n=e.getTuplet();n&&i!==n&&(i=n,t.push(i))}))})),t}(),c=[];return h.forEach((t=>{const i=new We(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),c.push(i)})),b.forEach((t=>{const e=t.notes[0].stem_direction===st.DOWN?Ae.BOTTOM:Ae.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new x("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,n;this.stem_direction=t[0].getStemDirection();let s=this.stem_direction;if(e&&d(t[0]))s=Me(t);else if(e&&g(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);s=e>-1?st.UP:st.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,n){return i+(t-e)*n}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:n,slope_iterations:s,slope_cost:a}}=this,o=t[0],r=function(t,e){const i=t.getStemExtents().topY,n=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-n)}(o,t[t.length-1]),h=(i-n)/s;let b=Number.MAX_VALUE,c=0,l=0;for(let s=n;s<=i;s+=h){let i=0,n=0;for(let a=1;as)&&(h=s,o=Math.min(...n.getYs()),r=n.getBeamCount())}let b=a/t.length;const c=n+r*(1.5*i),l=o+c*-e;e===st.DOWN&&bl&&(b=o-c),s?(e===st.DOWN&&b>s||e===st.UP&&b=8&&(c=-1!==this.break_on_indices.indexOf(h),this.render_options.secondary_break_ticks&&r>=this.render_options.secondary_break_ticks&&(r=0,c=!0));const l=b.getIntrinsicTicks(){const i=e.getStem();if(i){const n=e.getStemX();i.setNoteHeadXBounds(n,n),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let n=this.getBeamYToDraw();const s=i.getStemX(),a=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||s>0||(this.pos=n),o?this.matchSuccess():this.matchFail(n),{success:o,results:i,numMatches:s}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ue("Evaluating rule function:",t),!t)throw new x("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ue(i),new x("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const n=[];return e.matches=n,e.results&&e.results.forEach((t=>n.push(Ye(t)))),i.run&&e.success&&i.run({matches:n}),e}}function je(...t){Qe.DEBUG&&f("Vex.Flow.EasyScore",t)}He.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=p(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),n=p(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:s,duration:a,dots:o,type:r}=this.piece,h=et.accidentals,b=s.map((t=>{var e;return t.key+(h.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),c="auto"===i,l="g"==(null==r?void 0:r.toLowerCase())?t.GhostNote({duration:a,dots:o}):t.StaveNote({keys:b,duration:a,dots:o,type:r,clef:n,auto_stem:c});c||l.setStemDirection("up"===i?st.UP:st.DOWN);const d=[];s.forEach(((e,i)=>{const n=e.accid;if("string"==typeof n){const e=t.Accidental({type:n});l.addModifier(e,i),d.push(e)}else d.push(void 0)}));for(let t=0;tt(e,l,this))),this.elements.notes.push(l),this.elements.accidentals.push(d),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const n=t.factory,s=null!==(e=t.builder)&&void 0!==e?e:new Ke(n);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,ft.easyScoreHook,Wt.easyScoreHook],throwOnError:!1},t),{factory:n,builder:s}),this.factory=n,this.builder=s,this.grammar=new Xe(this.builder),this.parser=new He(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new x("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends It{static get CATEGORY(){return _.GhostNote}constructor(t){if(!t)throw new x("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new x("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=ri.type.TEXT&&t<=ri.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,n=!1;this.notes.forEach(((s,a,o)=>{var r;n=!n;const h=s.getAbsoluteX(),b=s.checkStave().getYForBottomText(this.line+3);if(h{var n;e=!e;const s=i.checkStave(),a=i.getAbsoluteX(),o=s.getYForBottomText(this.line+3),r=null!==(n=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`))&&void 0!==n?n:V.NOTATION_FONT_SCALE;let h=0;e?this.custom_depress_text?(h=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,a-h/2,o)):oi("pedal_depress",t,a,o,r):this.custom_release_text?(h=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,a-h/2,o)):oi("pedal_release",t,a,o,r)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){ri.DEBUG&&f("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===ri.type.BRACKET||this.type===ri.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===ri.type.TEXT&&this.drawText(),t.restore()}}ri.DEBUG=!1,ri.TEXT_FONT={family:F.SERIF,size:12,weight:N.BOLD,style:k.ITALIC},ri.GLYPHS={pedal_depress:{code:"keyboardPedalPed"},pedal_release:{code:"keyboardPedalUp"}},ri.type={TEXT:1,BRACKET:2,MIXED:3},ri.typeString={text:ri.type.TEXT,bracket:ri.type.BRACKET,mixed:ri.type.MIXED};const hi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class bi extends ei{static get CATEGORY(){return _.RepeatNote}constructor(t,e,i){super(new Z(hi[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function ci(t,e,i,n,s,a,o){t.beginPath(),t.moveTo(e,i),t.lineTo(n,s),t.lineTo(a,o),t.lineTo(e,i),t.closePath(),t.fill()}class li extends W{static get CATEGORY(){return _.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:li.TextVerticalPosition.TOP,text_justification:li.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const n=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,s=e.x,a=e.y,o=i.x,r=i.y,h=Math.sqrt((o-s)*(o-s)+(r-a)*(r-a)),b=(h-this.render_options.arrowhead_length/3)/h;let c,l,d,m;this.render_options.draw_end_arrow||n?(c=Math.round(s+(o-s)*b),l=Math.round(a+(r-a)*b)):(c=o,l=r),this.render_options.draw_start_arrow||n?(d=s+(o-s)*(1-b),m=a+(r-a)*(1-b)):(d=s,m=a),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(d,m),t.lineTo(c,l),t.stroke(),t.closePath();const g=Math.atan2(r-a,o-s),_=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let x,u,p,f,y,S;(this.render_options.draw_end_arrow||n)&&(x=g+Math.PI+this.render_options.arrowhead_angle,p=o+Math.cos(x)*_,f=r+Math.sin(x)*_,u=g+Math.PI-this.render_options.arrowhead_angle,y=o+Math.cos(u)*_,S=r+Math.sin(u)*_,ci(t,p,f,o,r,y,S)),(this.render_options.draw_start_arrow||n)&&(x=g+this.render_options.arrowhead_angle,p=s+Math.cos(x)*_,f=a+Math.sin(x)*_,u=g-this.render_options.arrowhead_angle,y=s+Math.cos(u)*_,S=a+Math.sin(u)*_,ci(t,p,f,s,a,y,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,n=this.render_options;t.save(),this.applyLineStyle();let s={x:0,y:0},a={x:0,y:0};this.first_indices.forEach(((o,r)=>{const h=this.last_indices[r];s=e.getModifierStartXY(2,o),a=i.getModifierStartXY(1,h);const b=s.y>a.y;s.x+=e.getMetrics().modRightPx+n.padding_left,a.x-=i.getMetrics().modLeftPx+n.padding_right;const c=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(s.x+=c+n.padding_left);i.getKeyProps()[h].displaced&&-1===i.getStemDirection()&&(a.x-=c+n.padding_right),s.y+=b?-3:1,a.y+=b?2:0,this.drawArrowLine(t,s,a)})),t.restore();const o=t.measureText(this.text).width,r=n.text_justification;let h=0;if(r===li.TextJustification.LEFT)h=s.x;else if(r===li.TextJustification.CENTER){h=(a.x-s.x)/2+s.x-o/2}else r===li.TextJustification.RIGHT&&(h=a.x-o);let b=0;const c=n.text_position_vertical;return c===li.TextVerticalPosition.TOP?b=e.checkStave().getYForTopText():c===li.TextVerticalPosition.BOTTOM&&(b=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,h,b),t.restore(),this}}li.TEXT_FONT=Object.assign({},W.TEXT_FONT),li.TextVerticalPosition={TOP:1,BOTTOM:2},li.TextJustification=oe;class di extends W{static get CATEGORY(){return _.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new x("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),n=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),s=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),a=this.getContext();return s.voices.forEach((t=>{t.setContext(a).setStave(n).getTickables().forEach((t=>t.setStave(n))),this.partVoices.push(t)})),this.partStaves.push(n),this.partStaveInfos.push(s),n}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new ke(t);this.formatter=i;let n=this.options.y,s=0;const a=[];this.partStaves.forEach(((t,e)=>{n+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(n),n+=t.space(this.partStaveInfos[e].spaceBelow),n+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(a.push({y:n,stave:t}),n+=15),s=Math.max(s,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(s))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Ee.rightPadding+(s-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(s-this.options.x):this.options.width-(s-this.options.x)-Ee.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class mi extends It{static get CATEGORY(){return _.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=st.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:n}}=this,s=this.checkContext(),a=null==e&&n;if(i.flag&&a){const e=this.getStemX(),i=this.getStemDirection()===st.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(s,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{r(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),n=this.render_options.draw_stem,s=this.render_options.draw_stem_through_stave;if(n&&s){const n=function(t,e,i,n){const s=1!==n,a=-1!==n,o=i.getSpacingBetweenLines(),r=i.getNumLines(),h=[];return e.forEach((e=>{const b=e.indexOf(r)>-1,c=e.indexOf(1)>-1;if(s&&c||a&&b)return;1===e.length&&e.push(e[0]);const l=[];e.forEach(((e,s,a)=>{const h=1===e,b=e===r;let c=i.getYForLine(e-1);0!==s||h?s!==a.length-1||b||(c+=o/2-1):c-=o/2-1,l.push(c),1===n&&h?l.push(t-2):-1===n&&b&&l.push(t+2)})),h.push(l.sort(((t,e)=>t-e)))})),h}(e,function(t,e){const i=[];let n=[];for(let s=1;s<=t;s++)e.indexOf(s)>-1?(i.push(n),n=[]):n.push(s);return n.length>0&&i.push(n),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(st.WIDTH),n.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),n=this.ys;for(let s=0;s{const i=fi.GLYPHS[e];if(!i)throw new x("Invalid dynamics character: "+e);const n=p(this.render_options.glyph_font_size),s=new Z(i.code,n,{category:"textNote"});this.glyphs.push(s),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);pi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,n)=>{const s=this.sequence[n];t.render(this.checkContext(),i,e),i+=fi.GLYPHS[s].width}))}}fi.DEBUG=!1;class yi extends vt{static get CATEGORY(){return _.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new ve(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends W{static get CATEGORY(){return _.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,n=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=n-i,function(...t){Si.DEBUG&&f("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",n,"y:",e),le.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&f("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:n}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new x("renderer.elementId not set in FactoryOptions");let s=this.options.renderer.backend;if(void 0===s){s=qt(document.getElementById(t))?he.Backends.CANVAS:he.Backends.SVG}this.context=he.buildContext(t,s,e,i,n)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),n=new Ee(i.x,i.y,i.width,i.options);return this.staves.push(n),n.setContext(this.context),this.stave=n,n}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),n=new gi(i.x,i.y,i.width,i.options);return this.staves.push(n),n.setContext(this.context),this.stave=n,n}StaveNote(t){const e=new Gt(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const n=new ei(t,e,i);return this.stave&&n.setStave(this.stave),n.setContext(this.context),this.renderQ.push(n),n}RepeatNote(t,e,i){const n=new bi(t,e,i);return this.stave&&n.setStave(this.stave),n.setContext(this.context),this.renderQ.push(n),n}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new fe(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Dt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new Le(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new yi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new ni(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new mi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new nt(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ct.CENTER,vJustify:lt.BOTTOM},t),i=new dt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Ot;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new ft(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),n=new $t(t);return n.setPosition(i.position),i.upperAccidental&&n.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&n.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&n.setDelayed(i.delayed),n.setContext(this.context),n}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new fi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Wt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new be(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Kt}ModifierContext(){return new me}MultiMeasureRest(t){const e=p(t.number_of_measures,"NoNumberOfMeasures"),i=new ai(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Pe(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new ke(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new De(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,n,s,a;const o=new We(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(n=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==n?n:[]),(null===(s=t.options)||void 0===s?void 0:s.partialBeamDirections)&&Object.entries(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ge(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Ut({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const n=new li({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&n.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&n.setFont(t.options.font),n.setContext(this.context),this.renderQ.push(n),n}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new ui({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new di(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new ri(e.notes);return i.setType(ri.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},W.TEXT_FONT);class wi extends mi{static get CATEGORY(){return _.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${F.SANS_SERIF}`}),this.updateWidth()}}class Bi{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new x("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;en?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,n=t.first_ys,s=t.last_x_px,a=t.direction;if(a!==Ci.SLIDE_UP&&a!==Ci.SLIDE_DOWN)throw new x("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new x("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),n=Number(t);if(n<0)throw new x("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+n}getNoteForFret(t,e){const i=this.getValueForFret(t,e),n=Math.floor(i/12),s=i%12;return`${V.integerToNote(s)}/${n}`}}var ki=function(t,e,i,n){return new(i||(i=Promise))((function(s,a){function o(t){try{h(n.next(t))}catch(t){a(t)}}function r(t){try{h(n.throw(t))}catch(t){a(t)}}function h(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,r)}h((n=n.apply(t,e||[])).next())}))};class Ai{static get BUILD(){return{VERSION:"4.2.2",ID:"7ad933bdf12b4137ce04d3f332a838887d08a595",DATE:"2023-07-03T19:56:22.952Z"}}static setMusicFont(...t){const e=t.map((t=>F.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return ki(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static getMusicFontStack(){return V.MUSIC_FONT_STACK}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}Ai.Accidental=nt,Ai.Annotation=dt,Ai.Articulation=ft,Ai.Barline=At,Ai.BarNote=Dt,Ai.Beam=We,Ai.Bend=Mt,Ai.BoundingBox=C,Ai.BoundingBoxComputation=P,Ai.CanvasContext=Zt,Ai.ChordSymbol=Ot,Ai.Clef=ge,Ai.ClefNote=Le,Ai.Crescendo=Ie,Ai.Curve=Ge,Ai.Dot=Rt,Ai.EasyScore=Qe,Ai.Element=W,Ai.Factory=vi,Ai.Font=F,Ai.Formatter=ke,Ai.Fraction=B,Ai.FretHandFinger=Wt,Ai.GhostNote=ti,Ai.Glyph=Z,Ai.GlyphNote=ei,Ai.GraceNote=ii,Ai.GraceNoteGroup=Xt,Ai.GraceTabNote=wi,Ai.KeyManager=Bi,Ai.KeySignature=_e,Ai.KeySigNote=ni,Ai.Modifier=tt,Ai.ModifierContext=me,Ai.MultiMeasureRest=ai,Ai.Music=et,Ai.Note=vt,Ai.NoteHead=Lt,Ai.NoteSubGroup=Vt,Ai.Ornament=$t,Ai.Parenthesis=Jt,Ai.Parser=He,Ai.PedalMarking=ri,Ai.Registry=R,Ai.RenderContext=yt,Ai.Renderer=he,Ai.RepeatNote=bi,Ai.Repetition=xe,Ai.Stave=Ee,Ai.StaveConnector=Pe,Ai.StaveHairpin=Ei,Ai.StaveLine=li,Ai.StaveModifier=kt,Ai.StaveNote=Gt,Ai.StaveTempo=pe,Ai.StaveText=ye,Ai.StaveTie=Ut,Ai.Stem=st,Ai.StringNumber=be,Ai.Stroke=ce,Ai.SVGContext=ne,Ai.System=di,Ai.TabNote=mi,Ai.TabSlide=Ci,Ai.TabStave=gi,Ai.TabTie=Yt,Ai.TextBracket=ui,Ai.TextDynamics=fi,Ai.TextFormatter=bt,Ai.TextNote=fe,Ai.TickContext=Kt,Ai.TimeSignature=ve,Ai.TimeSigNote=yi,Ai.Tremolo=Pi,Ai.Tuning=Ni,Ai.Tuplet=De,Ai.Vibrato=le,Ai.VibratoBracket=Si,Ai.Voice=jt,Ai.Volta=Se,Ai.AnnotationHorizontalJustify=ct,Ai.AnnotationVerticalJustify=lt,Ai.ChordSymbolHorizontalJustify=Et,Ai.ChordSymbolVerticalJustify=Ct,Ai.SymbolTypes=Pt,Ai.SymbolModifiers=Nt,Ai.CurvePosition=ze,Ai.FontWeight=N,Ai.FontStyle=k,Ai.ModifierPosition=J,Ai.RendererBackends=se,Ai.RendererLineEndType=ae,Ai.BarlineType=Bt,Ai.StaveModifierPosition=wt,Ai.VoltaType=re,Ai.TextBracketPosition=xi,Ai.TextJustification=oe,Ai.VoiceMode=Ht;const Di={smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}},Mi={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}};const Fi={glyphs:{bracketTop:{x_min:0,x_max:508,y_min:0,y_max:370,ha:370,o:"m 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z"},bracketBottom:{x_min:0,x_max:496,y_min:-393,y_max:0,ha:393,o:"m 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z"},barlineTick:{x_min:0,x_max:56,y_min:877,y_max:1122,ha:245,o:"m 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z"},breathMarkTick:{x_min:0,x_max:568,y_min:0,y_max:621,ha:621,o:"m 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z"},segno:{x_min:0,x_max:798,y_min:-65,y_max:806,ha:871,o:"m 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z"},coda:{x_min:0,x_max:1380,y_min:-196,y_max:1037,ha:1233,o:"m 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z"},gClef:{x_min:0,x_max:664,y_min:-559,y_max:1009,ha:1568,o:"m 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z"},cClef:{x_min:0,x_max:731,y_min:-543,y_max:543,ha:1086,o:"m 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z"},fClef:{x_min:0,x_max:776,y_min:-496,y_max:216,ha:712,o:"m 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z"},unpitchedPercussionClef1:{x_min:0,x_max:379,y_min:-250,y_max:250,ha:500,o:"m 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z"},"6stringTabClef":{x_min:0,x_max:438,y_min:-768,y_max:767,ha:1535,o:"m 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z"},timeSig0:{x_min:20,x_max:513,y_min:-358,y_max:359,ha:717,o:"m 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z"},timeSig1:{x_min:20,x_max:283,y_min:-364,y_max:366,ha:730,o:"m 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z"},timeSig2:{x_min:20,x_max:660,y_min:-379,y_max:382,ha:761,o:"m 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z"},timeSig3:{x_min:20,x_max:540,y_min:-392,y_max:392,ha:784,o:"m 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z"},timeSig4:{x_min:20,x_max:633,y_min:-490,y_max:491,ha:981,o:"m 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z"},timeSig5:{x_min:20,x_max:583,y_min:-389,y_max:389,ha:778,o:"m 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z"},timeSig6:{x_min:20,x_max:565,y_min:-363,y_max:363,ha:726,o:"m 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z"},timeSig7:{x_min:20,x_max:592,y_min:-345,y_max:345,ha:690,o:"m 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z"},timeSig8:{x_min:20,x_max:504,y_min:-428,y_max:428,ha:856,o:"m 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z"},timeSig9:{x_min:20,x_max:494,y_min:-421,y_max:421,ha:842,o:"m 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z"},timeSigCommon:{x_min:20,x_max:585,y_min:-298,y_max:294,ha:592,o:"m 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z"},timeSigCutCommon:{x_min:20,x_max:695,y_min:-687,y_max:687,ha:1374,o:"m 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z"},timeSigPlus:{x_min:0,x_max:661,y_min:-358,y_max:358,ha:716,o:"m 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z"},timeSigPlusSmall:{x_min:0,x_max:418,y_min:-197,y_max:199,ha:396,o:"m 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z"},timeSigMinus:{x_min:0,x_max:662,y_min:-54,y_max:55,ha:109,o:"m 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z"},timeSigParensRight:{x_min:0,x_max:274,y_min:-723,y_max:725,ha:1448,o:"m 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z"},timeSigParensRightSmall:{x_min:0,x_max:154,y_min:-422,y_max:422,ha:844,o:"m 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z"},timeSigParensLeft:{x_min:1,x_max:400,y_min:-728,y_max:728,ha:1456,o:"m 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z"},timeSigParensLeftSmall:{x_min:0,x_max:173,y_min:-405,y_max:404,ha:809,o:"m 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z"},noteheadDoubleWhole:{x_min:0,x_max:614,y_min:-223,y_max:223,ha:446,o:"m 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z"},noteheadWhole:{x_min:0,x_max:380,y_min:-186,y_max:165,ha:351,o:"m 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z"},noteheadHalf:{x_min:0,x_max:334,y_min:-174,y_max:175,ha:349,o:"m 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z"},noteheadBlack:{x_min:0,x_max:334,y_min:-164,y_max:164,ha:328,o:"m 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z"},noteheadXDoubleWhole:{x_min:0,x_max:730,y_min:-266,y_max:267,ha:533,o:"m 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z"},noteheadXWhole:{x_min:0,x_max:506,y_min:-143,y_max:144,ha:287,o:"m 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z"},noteheadXHalf:{x_min:0,x_max:421,y_min:-146,y_max:151,ha:297,o:"m 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z"},noteheadXBlack:{x_min:0,x_max:289,y_min:-156,y_max:157,ha:313,o:"m 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:437,y_min:-220,y_max:219,ha:439,o:"m 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z"},noteheadCircleXWhole:{x_min:0,x_max:323,y_min:-190,y_max:184,ha:374,o:"m 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z"},noteheadCircleXHalf:{x_min:0,x_max:309,y_min:-179,y_max:179,ha:358,o:"m 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z"},noteheadCircleX:{x_min:0,x_max:344,y_min:-179,y_max:175,ha:354,o:"m 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:672,y_min:-291,y_max:291,ha:582,o:"m 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z"},noteheadCircledWhole:{x_min:-50,x_max:472,y_min:-231,y_max:232,ha:463,o:"m 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z"},noteheadCircledHalf:{x_min:-50,x_max:393,y_min:-175,y_max:175,ha:350,o:"m 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z"},noteheadCircledBlack:{x_min:-70,x_max:326,y_min:-168,y_max:192,ha:360,o:"m 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:474,y_min:-209,y_max:211,ha:420,o:"m 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z"},noteheadSquareWhite:{x_min:0,x_max:350,y_min:-131,y_max:131,ha:262,o:"m 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z"},noteheadSquareBlack:{x_min:0,x_max:342,y_min:-130,y_max:132,ha:262,o:"m 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z"},noteheadTriangleDownWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z"},noteheadTriangleDownHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z"},noteheadTriangleDownBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z"},noteheadTriangleUpWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z"},noteheadTriangleUpHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z"},noteheadTriangleUpBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:697,y_min:-290,y_max:290,ha:580,o:"m 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z"},noteheadSlashedWhole1:{x_min:-76,x_max:498,y_min:-168,y_max:168,ha:336,o:"m -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z"},noteheadSlashedHalf1:{x_min:-79,x_max:471,y_min:-184,y_max:184,ha:368,o:"m -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z"},noteheadSlashedBlack1:{x_min:-110,x_max:452,y_min:-190,y_max:190,ha:380,o:"m -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:697,y_min:-295,y_max:295,ha:590,o:"m 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z"},noteheadSlashedWhole2:{x_min:-83,x_max:510,y_min:-201,y_max:198,ha:399,o:"m 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z"},noteheadSlashedHalf2:{x_min:-73,x_max:454,y_min:-188,y_max:188,ha:376,o:"m 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z"},noteheadSlashedBlack2:{x_min:-84,x_max:405,y_min:-189,y_max:189,ha:378,o:"m 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:429,y_min:-221,y_max:221,ha:442,o:"m 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z"},noteheadDiamondWhole:{x_min:0,x_max:271,y_min:-132,y_max:132,ha:264,o:"m 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z"},noteheadDiamondHalf:{x_min:0,x_max:295,y_min:-148,y_max:148,ha:296,o:"m 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z"},noteheadDiamondBlack:{x_min:0,x_max:310,y_min:-146,y_max:146,ha:292,o:"m 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z"},noteheadParenthesis:{x_min:-70,x_max:329,y_min:-196,y_max:201,ha:397,o:"m 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z"},noteheadParenthesisRight:{x_min:-30,x_max:82,y_min:-199,y_max:206,ha:405,o:"m -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z"},noteheadParenthesisLeft:{x_min:0,x_max:106,y_min:-197,y_max:197,ha:394,o:"m 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z"},noteheadMoonBlack:{x_min:0,x_max:328,y_min:-125,y_max:125,ha:250,o:"m 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:391,y_min:-142,y_max:142,ha:284,o:"m 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z"},noteheadTriangleRightBlack:{x_min:0,x_max:398,y_min:-139,y_max:140,ha:279,o:"m 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:334,y_min:-134,y_max:136,ha:270,o:"m 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z"},augmentationDot:{x_min:0,x_max:96,y_min:-57,y_max:57,ha:114,o:"m 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z"},tremolo1:{x_min:-158,x_max:156,y_min:-88,y_max:88,ha:176,o:"m -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z"},flag8thUp:{x_min:0,x_max:261,y_min:-819,y_max:0,ha:819,o:"m 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z"},flag8thDown:{x_min:0,x_max:261,y_min:0,y_max:819,ha:819,o:"m 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z"},flag16thUp:{x_min:0,x_max:327,y_min:-819,y_max:0,ha:819,o:"m 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z"},flag16thDown:{x_min:0,x_max:327,y_min:0,y_max:819,ha:819,o:"m 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z"},flag32ndUp:{x_min:0,x_max:268,y_min:-849,y_max:149,ha:999,o:"m 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z"},flag32ndDown:{x_min:-3,x_max:268,y_min:-169,y_max:829,ha:999,o:"m 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z"},flag64thUp:{x_min:-4,x_max:282,y_min:-824,y_max:347,ha:1171,o:"m 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z"},flag64thDown:{x_min:-5,x_max:281,y_min:-375,y_max:796,ha:1171,o:"m 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z"},flag128thUp:{x_min:0,x_max:252,y_min:-804,y_max:530,ha:1334,o:"m 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z"},flag128thDown:{x_min:-1,x_max:252,y_min:-580,y_max:754,ha:1334,o:"m 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z"},accidentalFlat:{x_min:1,x_max:209,y_min:-208,y_max:472,ha:680,o:"m 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z"},accidentalNatural:{x_min:0,x_max:214,y_min:-456,y_max:462,ha:918,o:"m 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z"},accidentalSharp:{x_min:-22,x_max:390,y_min:-384,y_max:383,ha:767,o:"m 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z"},accidentalDoubleSharp:{x_min:0,x_max:287,y_min:-159,y_max:159,ha:318,o:"m 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z"},accidentalDoubleFlat:{x_min:0,x_max:359,y_min:-220,y_max:446,ha:666,o:"m 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z"},accidentalParensLeft:{x_min:0,x_max:130,y_min:-270,y_max:268,ha:538,o:"m 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z"},accidentalParensRight:{x_min:0,x_max:139,y_min:-275,y_max:277,ha:552,o:"m 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:208,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalThreeQuarterTonesSharpStein:{x_min:-23,x_max:388,y_min:-373,y_max:445,ha:818,o:"m 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z"},accidentalBuyukMucennebFlat:{x_min:2,x_max:287,y_min:-248,y_max:432,ha:680,o:"m 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z"},accidentalBuyukMucennebSharp:{x_min:-1,x_max:467,y_min:-460,y_max:350,ha:810,o:"m 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z"},accidentalBakiyeFlat:{x_min:2,x_max:287,y_min:-236,y_max:444,ha:680,o:"m 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z"},accidentalKomaSharp:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:359,y_min:-420,y_max:343,ha:763,o:"m 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z"},accidentalKoron:{x_min:0,x_max:303,y_min:-462,y_max:180,ha:642,o:"m 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z"},accidentalSori:{x_min:0,x_max:434,y_min:-295,y_max:325,ha:620,o:"m 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z"},articAccentAbove:{x_min:0,x_max:425,y_min:0,y_max:326,ha:326,o:"m 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z"},articAccentBelow:{x_min:0,x_max:425,y_min:-326,y_max:0,ha:326,o:"m 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z"},articTenutoAbove:{x_min:0,x_max:471,y_min:0,y_max:56,ha:56,o:"m 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z"},articTenutoBelow:{x_min:0,x_max:471,y_min:-59,y_max:-3,ha:56,o:"m 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z"},articStaccatoAbove:{x_min:1,x_max:112,y_min:0,y_max:156,ha:156,o:"m 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z"},articStaccatoBelow:{x_min:1,x_max:112,y_min:-156,y_max:0,ha:156,o:"m 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z"},articStaccatissimoAbove:{x_min:0,x_max:139,y_min:0,y_max:411,ha:411,o:"m 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z"},articStaccatissimoBelow:{x_min:0,x_max:139,y_min:-411,y_max:0,ha:411,o:"m 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z"},articMarcatoAbove:{x_min:0,x_max:396,y_min:0,y_max:328,ha:328,o:"m 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z"},articMarcatoBelow:{x_min:0,x_max:396,y_min:-328,y_max:0,ha:328,o:"m 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z"},fermataAbove:{x_min:0,x_max:472,y_min:2,y_max:454,ha:452,o:"m 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z"},fermataBelow:{x_min:0,x_max:519,y_min:-430,y_max:-1,ha:429,o:"m 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z"},fermataLongAbove:{x_min:0,x_max:591,y_min:-6,y_max:337,ha:343,o:"m 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z"},fermataLongBelow:{x_min:0,x_max:602,y_min:-335,y_max:7,ha:342,o:"m 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:-14,y_max:437,ha:451,o:"m 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z"},fermataVeryLongBelow:{x_min:0,x_max:686,y_min:-427,y_max:30,ha:457,o:"m 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z"},fermataVeryShortAbove:{x_min:0,x_max:711,y_min:-31,y_max:496,ha:527,o:"m 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z"},fermataVeryShortBelow:{x_min:0,x_max:697,y_min:-475,y_max:13,ha:488,o:"m 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z"},fermataShortAbove:{x_min:0,x_max:545,y_min:-18,y_max:348,ha:366,o:"m 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z"},fermataShortBelow:{x_min:0,x_max:565,y_min:-335,y_max:10,ha:345,o:"m 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z"},breathMarkComma:{x_min:0,x_max:148,y_min:0,y_max:275,ha:275,o:"m 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z"},breathMarkUpbow:{x_min:0,x_max:254,y_min:0,y_max:595,ha:595,o:"m 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z"},caesura:{x_min:0,x_max:566,y_min:0,y_max:562,ha:563,o:"m 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z"},caesuraCurved:{x_min:0,x_max:386,y_min:-10,y_max:584,ha:594,o:"m 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z"},restMaxima:{x_min:0,x_max:366,y_min:-255,y_max:255,ha:510,o:"m 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z"},restDoubleWhole:{x_min:0,x_max:122,y_min:0,y_max:249,ha:249,o:"m 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z"},restWhole:{x_min:1,x_max:500,y_min:-120,y_max:14,ha:134,o:"m 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z"},restWholeLegerLine:{x_min:-197,x_max:685,y_min:-157,y_max:29,ha:186,o:"m 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z"},restHalf:{x_min:0,x_max:518,y_min:0,y_max:162,ha:162,o:"m 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z"},restHalfLegerLine:{x_min:-120,x_max:448,y_min:-20,y_max:143,ha:163,o:"m 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z"},restQuarter:{x_min:0,x_max:263,y_min:-415,y_max:415,ha:830,o:"m 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z"},rest8th:{x_min:0,x_max:289,y_min:-260,y_max:261,ha:521,o:"m 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z"},rest16th:{x_min:0,x_max:333,y_min:-328,y_max:244,ha:572,o:"m 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z"},rest32nd:{x_min:0,x_max:347,y_min:-498,y_max:483,ha:981,o:"m 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z"},rest64th:{x_min:0,x_max:428,y_min:-720,y_max:474,ha:1194,o:"m 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z"},rest128th:{x_min:1,x_max:491,y_min:-711,y_max:719,ha:1430,o:"m 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z"},dynamicPiano:{x_min:-49,x_max:327,y_min:-142,y_max:515,ha:657,o:"m -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z"},dynamicMezzo:{x_min:-18,x_max:559,y_min:-50,y_max:365,ha:415,o:"m 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z"},dynamicForte:{x_min:-144,x_max:311,y_min:-115,y_max:504,ha:619,o:"m -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z"},dynamicRinforzando:{x_min:-75,x_max:322,y_min:-90,y_max:325,ha:415,o:"m 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z"},dynamicSforzando:{x_min:0,x_max:296,y_min:0,y_max:379,ha:379,o:"m 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z"},dynamicZ:{x_min:-43,x_max:331,y_min:0,y_max:328,ha:328,o:"m -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z"},ornamentTrill:{x_min:1,x_max:551,y_min:-18,y_max:539,ha:557,o:"m 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z"},ornamentTurn:{x_min:0,x_max:574,y_min:0,y_max:312,ha:312,o:"m 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z"},ornamentTurnSlash:{x_min:0,x_max:574,y_min:-106,y_max:405,ha:511,o:"m 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z"},ornamentMordent:{x_min:0,x_max:700,y_min:0,y_max:497,ha:497,o:"m 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z"},ornamentShortTrill:{x_min:0,x_max:747,y_min:0,y_max:243,ha:243,o:"m 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z"},ornamentTremblement:{x_min:0,x_max:982,y_min:0,y_max:224,ha:224,o:"m 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1066,y_min:-50,y_max:533,ha:583,o:"m 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:1088,y_min:-380,y_max:252,ha:632,o:"m 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1185,y_min:-380,y_max:465,ha:845,o:"m 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:1003,y_min:-20,y_max:521,ha:541,o:"m 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1246,y_min:-30,y_max:296,ha:326,o:"m 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1226,y_min:-237,y_max:436,ha:673,o:"m 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:833,y_min:-309,y_max:319,ha:628,o:"m 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z"},brassScoop:{x_min:0,x_max:312,y_min:-390,y_max:28,ha:418,o:"m 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z"},brassDoitMedium:{x_min:0,x_max:476,y_min:-50,y_max:333,ha:383,o:"m 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z"},brassFallLipShort:{x_min:0,x_max:298,y_min:-344,y_max:65,ha:409,o:"m 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z"},brassLiftMedium:{x_min:0,x_max:807,y_min:0,y_max:838,ha:838,o:"m 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z"},brassFallRoughMedium:{x_min:0,x_max:791,y_min:0,y_max:819,ha:819,o:"m 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z"},brassBend:{x_min:0,x_max:381,y_min:0,y_max:367,ha:367,o:"m 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z"},brassMuteClosed:{x_min:0,x_max:274,y_min:0,y_max:260,ha:260,o:"m 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z"},brassMuteOpen:{x_min:1,x_max:313,y_min:0,y_max:309,ha:309,o:"m 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z"},brassFlip:{x_min:0,x_max:402,y_min:0,y_max:361,ha:361,o:"m 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z"},brassJazzTurn:{x_min:0,x_max:646,y_min:0,y_max:212,ha:212,o:"m 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z"},brassSmear:{x_min:0,x_max:334,y_min:0,y_max:151,ha:151,o:"m 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z"},stringsDownBow:{x_min:0,x_max:306,y_min:0,y_max:366,ha:366,o:"m 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z"},stringsUpBow:{x_min:0,x_max:219,y_min:0,y_max:489,ha:489,o:"m 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z"},stringsHarmonic:{x_min:0,x_max:191,y_min:0,y_max:202,ha:202,o:"m 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:201,y_min:0,y_max:325,ha:325,o:"m 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:211,y_min:0,y_max:307,ha:307,o:"m 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:271,y_min:0,y_max:284,ha:284,o:"m 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z"},keyboardPedalPed:{x_min:0,x_max:944,y_min:-13,y_max:550,ha:563,o:"m 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z"},keyboardPedalUp:{x_min:0,x_max:437,y_min:0,y_max:461,ha:461,o:"m 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z"},pictChokeCymbal:{x_min:1,x_max:147,y_min:0,y_max:242,ha:242,o:"m 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:300,y_min:0,y_max:176,ha:176,o:"m 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z"},arpeggiatoUp:{x_min:0,x_max:262,y_min:0,y_max:1459,ha:1459,o:"m 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z"},arpeggiatoDown:{x_min:0,x_max:218,y_min:0,y_max:1440,ha:1440,o:"m 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z"},repeat1Bar:{x_min:0,x_max:599,y_min:-250,y_max:175,ha:425,o:"m 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z"},repeat2Bars:{x_min:0,x_max:775,y_min:-247,y_max:363,ha:610,o:"m 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z"},repeat4Bars:{x_min:0,x_max:1374,y_min:-304,y_max:304,ha:608,o:"m 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z"},repeatBarSlash:{x_min:0,x_max:630,y_min:-225,y_max:265,ha:490,o:"m 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z"},csymDiminished:{x_min:0,x_max:506,y_min:0,y_max:500,ha:500,o:"m 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z"},csymHalfDiminished:{x_min:-32,x_max:496,y_min:-33,y_max:492,ha:525,o:"m -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z"},csymAugmented:{x_min:0,x_max:530,y_min:0,y_max:539,ha:539,o:"m 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z"},csymMajorSeventh:{x_min:0,x_max:593,y_min:0,y_max:569,ha:569,o:"m 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z"},csymMinor:{x_min:0,x_max:482,y_min:193,y_max:265,ha:72,o:"m 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z"},csymParensLeftTall:{x_min:0,x_max:185,y_min:0,y_max:1034,ha:1034,o:"m 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z"},csymParensRightTall:{x_min:-40,x_max:189,y_min:0,y_max:1058,ha:1058,o:"m 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z"},csymBracketLeftTall:{x_min:0,x_max:328,y_min:2,y_max:807,ha:805,o:"m 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z"},csymBracketRightTall:{x_min:1,x_max:306,y_min:0,y_max:829,ha:829,o:"m 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:116,y_min:0,y_max:934,ha:934,o:"m 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z"},csymParensRightVeryTall:{x_min:-20,x_max:111,y_min:0,y_max:1009,ha:1009,o:"m -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:990,y_min:-27,y_max:1028,ha:1054,o:"m 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:208,y_min:-231,y_max:449,ha:680,o:"m 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:335,y_min:-231,y_max:449,ha:680,o:"m 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z"},accidentalWilsonPlus:{x_min:0,x_max:298,y_min:-218,y_max:218,ha:436,o:"m 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z"},accidentalWilsonMinus:{x_min:0,x_max:284,y_min:-163,y_max:163,ha:326,o:"m 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z"}},fontFamily:"Petaluma",resolution:1e3,generatedOn:"2022-12-18T09:07:50.817Z"},Oi={csymDiminished:{leftSideBearing:-95,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:-25,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:0,advanceWidth:155,yOffset:150},csymParensRightTall:{leftSideBearing:40,advanceWidth:189,yOffset:150},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:0,advanceWidth:210,yOffset:250},csymParensRightVeryTall:{leftSideBearing:-100,advanceWidth:111,yOffset:250},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:100,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:0,advanceWidth:425,yOffset:-422},accidentalFlat:{leftSideBearing:-10,advanceWidth:228,yOffset:-284}};const Ri={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Wi={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Li={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Ii={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},zi={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Gi{static sortAndUnique(t,e,i){if(t.length>1){const n=[];let s;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","export const VERSION = '4.2.2';\nexport const ID = '7ad933bdf12b4137ce04d3f332a838887d08a595';\nexport const DATE = '2023-07-03T19:56:22.952Z';\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { PetalumaFont } from './petaluma_glyphs';\nconst petalumaChordMetrics = {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n};\nexport function loadPetaluma() {\n const metrics = JSON.parse(JSON.stringify(CommonMetrics));\n const chordMetrics = metrics.chordSymbol;\n if (chordMetrics) {\n chordMetrics.glyphs = petalumaChordMetrics;\n }\n Font.load('Petaluma', PetalumaFont, metrics);\n}\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-petaluma.ts is the entry point for vexflow-petaluma.js.\n// This version bundles the Petaluma music engraving font.\nimport { Flow } from '../src/flow';\nimport { loadCustom } from '../src/fonts/load_custom';\nimport { loadPetaluma } from '../src/fonts/load_petaluma';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadPetaluma();\nloadCustom();\nFlow.setMusicFont('Petaluma', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","static","Number","isNaN","t","GCD","length","LCM","shift","LCMM","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","fontInfo","st","trim","wt","sz","scaleFactor","parsedWeight","ITALIC","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","loadWebFont","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","defaultRegistry","registry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","ID","children","attrs","newID","getCategory","rendered","getDefaultRegistry","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","toCSSString","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","validate","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","convertSizeToPointValue","fontSizeInPixels","convertSizeToPixelValue","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","MUSIC_FONT_STACK","clef","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","clefProperties","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integer","noteValue","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","artic","spec","keySpec","notes","acc_list","durationNumber","durationToFraction","ticks","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","UNISON","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySignature","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","state","musicFont","currentMusicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accidentalLinePositionsAndSpaceNeeds","prevNote","extraXSpaceNeededForLeftDisplacedNotehead","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","extraXSpaceNeeded","spacingBetweenStaveLines","sort","staveLineAccidentalLayoutMetrics","maxExtraXSpaceNeeded","accidentalLinePositionAndSpaceNeeds","priorLineMetric","currentLineMetric","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","accidentalCodes","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","registeredFonts","formatterInfo","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","isBold","italic","isItalic","perfectMatch","find","partialMatch","fontSizeInPt","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","create","verticalSpaceNeeded","glyphWidth","getGlyphProps","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","articulationCodes","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","durationString","dots","noteStruct","durationProps","parseDuration","customTypes","durationToTicks","currentTicks","parsedNoteStruct","parseNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","glyphCode","engravingFontResolution","spacingBetweenBlocks","metric","getMetricForGlyph","yOffset","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","symbolModifier","SUPERSCRIPT","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","scaleSize","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","isSuperscript","sub","isSubscript","superSubScale","adj","symbolType","GLYPH","superSubFontSize","getWidthForGlyph","getYShiftForGlyph","getXShiftForGlyph","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","durationToNumber","breve_lines","drawSlashNoteHead","renderGlyph","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","noteUHead","noteLHead","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","keyProperties","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","format","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","TickContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","tick","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","ornamentCodes","adjustForStemDirection","stemUpYOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","getNextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","getPoint","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","dpr","sanitizeCanvasDims","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","elementId","backend","background","renderer","lastContext","buildContext","Backends","CANVAS","SVG","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","extraXSpaceForDisplacedNotehead","glyphLine","num_shiftR","num_width","num_x_shift","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","drawDashedLine","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","accList","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","lineShift","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","getInfo","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClef","clefSpec","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","paddingBetween","accumulator","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","auto_beam","align_rests","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","AlignRestsToNotes","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","buildAndAttach","setId","commaSeparatedRegex","setClass","defaults","easyScoreHook","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","pedal","MIXED","setCustomText","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","formatBegModifiers","plotDebugging","plotMetrics","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","tabToGlyphProps","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","integerToNote","Flow","BUILD","VERSION","DATE","fontNames","fontModuleOrPath","hasKeySignature","getKeySignatures","CommonMetrics","smufl","endPaddingMax","endPaddingMin","unalignedNotePadding","csymDiminished","csymHalfDiminished","csymAugmented","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","csymMajorSeventh","accidentalSharp","accidentalFlat","clef_default","shiftX","clef_small","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","default","gracenote","pedalMarking","digits","shiftLine","articStaccatissimoAbove","articStaccatissimoBelow","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadTriangleUpWhole","noteheadXHalf","noteheadXBlack","noteheadXWhole","noteheadHalf","noteheadBlack","noteheadSquareWhite","staveTempo","gClef","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","breathMarkTick","breathMarkComma","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","CustomFont","vexAccidentalMicrotonal1","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","PetalumaFont","bracketTop","bracketBottom","barlineTick","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadXDoubleWhole","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalNatural","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","generatedOn","petalumaChordMetrics","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","cmp","eq","newArr","last","canvasSelector","start_time","Date","getTime","chordMetrics","loadPetaluma","setMusicFont","fontData","registerInfo","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow.js b/build/cjs/vexflow.js new file mode 100644 index 0000000000..4d07e334d7 --- /dev/null +++ b/build/cjs/vexflow.js @@ -0,0 +1,7 @@ +/*! + * VexFlow 4.2.2 2023-07-03T19:56:22.952Z 7ad933bdf12b4137ce04d3f332a838887d08a595 + * Copyright (c) 2010 Mohit Muthanna Cheppudira + * https://www.vexflow.com https://github.com/0xfe/vexflow + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var b in i)t.o(i,b)&&!t.o(e,b)&&Object.defineProperty(e,b,{enumerable:!0,get:i[b]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function b(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let b=t.constructor;if(i){for(;null!==t;){if(b=t.constructor,"CATEGORY"in b&&b.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in b&&b.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>bt,Annotation:()=>ct,AnnotationHorizontalJustify:()=>ht,AnnotationVerticalJustify:()=>mt,Articulation:()=>ut,BEAM_BOTH:()=>Oe,BEAM_LEFT:()=>Fe,BEAM_RIGHT:()=>Me,BarNote:()=>At,Barline:()=>kt,BarlineType:()=>zt,Beam:()=>Re,Bend:()=>Nt,BoundingBox:()=>D,BoundingBoxComputation:()=>C,Builder:()=>Ke,CanvasContext:()=>Zt,Category:()=>x,ChordSymbol:()=>Mt,ChordSymbolHorizontalJustify:()=>Bt,ChordSymbolVerticalJustify:()=>Dt,Clef:()=>_e,ClefNote:()=>Le,Crescendo:()=>We,Curve:()=>Ie,CurvePosition:()=>Ue,Dot:()=>Ot,EasyScore:()=>Qe,EasyScoreGrammar:()=>je,Element:()=>R,Factory:()=>vi,Flow:()=>ki,Font:()=>F,FontStyle:()=>P,FontWeight:()=>E,Formatter:()=>Pe,Fraction:()=>z,FretHandFinger:()=>Rt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>jt,GraceTabNote:()=>wi,KeyManager:()=>zi,KeySigNote:()=>bi,KeySignature:()=>xe,Modifier:()=>tt,ModifierContext:()=>de,ModifierPosition:()=>J,MultiMeasureRest:()=>ni,Music:()=>et,Note:()=>vt,NoteHead:()=>Lt,NoteSubGroup:()=>Vt,Ornament:()=>$t,OutlineCode:()=>$,Parenthesis:()=>Jt,Parser:()=>Ye,PedalMarking:()=>li,Piece:()=>Ve,Registry:()=>O,RenderContext:()=>ft,Renderer:()=>oe,RendererBackends:()=>ae,RendererLineEndType:()=>ne,RepeatNote:()=>ri,Repetition:()=>ge,RuntimeError:()=>g,SVGContext:()=>be,Stave:()=>Be,StaveConnector:()=>Ce,StaveHairpin:()=>Bi,StaveLine:()=>mi,StaveModifier:()=>Pt,StaveModifierPosition:()=>wt,StaveNote:()=>It,StaveSection:()=>ye,StaveTempo:()=>pe,StaveText:()=>fe,StaveTie:()=>Gt,Stem:()=>at,StemmableNote:()=>Wt,StringNumber:()=>re,Stroke:()=>he,SymbolModifiers:()=>Et,SymbolTypes:()=>Ct,System:()=>ci,TabNote:()=>di,TabSlide:()=>Di,TabStave:()=>_i,TabTie:()=>Ht,TextBracket:()=>yi,TextBracketPosition:()=>gi,TextDynamics:()=>ui,TextFormatter:()=>rt,TextJustification:()=>se,TextNote:()=>ue,TickContext:()=>Kt,Tickable:()=>Tt,TimeSigNote:()=>fi,TimeSignature:()=>ve,TimeSignatureGlyph:()=>Te,Tremolo:()=>Ci,Tuning:()=>Ei,Tuplet:()=>Ae,TupletLocation:()=>ke,Vex:()=>Yi,Vibrato:()=>me,VibratoBracket:()=>Si,Voice:()=>Xt,VoiceMode:()=>Yt,Volta:()=>Se,VoltaType:()=>le,defined:()=>p,drawDot:()=>St,globalObject:()=>y,isAccidental:()=>a,isAnnotation:()=>n,isBarline:()=>s,isCategory:()=>b,isDot:()=>l,isGraceNote:()=>o,isGraceNoteGroup:()=>r,isHTMLCanvas:()=>qt,isHTMLDiv:()=>Qt,isNote:()=>h,isRenderContext:()=>m,isStaveNote:()=>c,isStemmableNote:()=>d,isTabNote:()=>_,log:()=>u,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>f});const a=t=>b(t,x.Accidental),n=t=>b(t,x.Annotation),s=t=>b(t,x.Barline),l=t=>b(t,x.Dot),o=t=>b(t,x.GraceNote),r=t=>b(t,x.GraceNoteGroup),h=t=>b(t,x.Note),m=t=>b(t,x.RenderContext),c=t=>b(t,x.StaveNote),d=t=>b(t,x.StemmableNote),_=t=>b(t,x.TabNote);var x;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(x||(x={}));class g extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function y(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function p(t,e="undefined",i=""){if(void 0===t)throw new g(e,i);return t}function u(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");y().console.log(t+": "+i)}function f(...t){const e=t.join(" "),i=new Error;y().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var b,a;return i%2>0&&(i=((b=10*i)%(a=5)>=a/2?parseInt(""+b/a,10)*a+a:parseInt(""+b/a,10)*a)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class z{static get CATEGORY(){return x.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new g("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/z.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?z.LCM(t[0],t[1]):z.LCM(t.shift(),z.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=z.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,b]=B(t,e),a=z.LCM(this.denominator,b),n=a/this.denominator,s=a/b,l=this.numerator*n+i*s;return this.set(l,a)}subtract(t=0,e=1){const[i,b]=B(t,e),a=z.LCM(this.denominator,b),n=a/this.denominator,s=a/b,l=this.numerator*n-i*s;return this.set(l,a)}multiply(t=1,e=1){const[i,b]=B(t,e);return this.set(this.numerator*i,this.denominator*b)}divide(t=1,e=1){const[i,b]=B(t,e);return this.set(this.numerator*b,this.denominator*i)}equals(t){const e=z.__staticFractionA.copy(t).simplify(),i=z.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=z.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=z.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new z(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return z.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=z.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),b=e[1]?parseInt(e[1],10):1;return this.set(i,b)}}function B(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}z.__staticFractionA=new z,z.__staticFractionB=new z,z.__staticFractionTmp=new z;class D{static copy(t){return new D(t.x,t.y,t.w,t.h)}constructor(t,e,i,b){this.x=t,this.y=e,this.w=i,this.h=b}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return D.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,b,a,n){this.addPoint(t,e),this.addPoint(a,n);const s=i-t;let l=s-(a-i);if(0!=l){const e=s/l;if(e>0&&e<1){const b=1-e;this.addX(b*b*t+2*b*e*i+e*e*a)}}const o=b-e;if(l=o-(n-b),0!=l){const t=o/l;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*b+t*t*n)}}}addBezierCurve(t,e,i,b,a,n,s,l){const o=[t,e],r=[i,b],h=[a,n],m=[s,l];let c;this.addPoint(o[0],o[1]),this.addPoint(m[0],m[1]);const d=(t,e)=>Math.pow(1-t,3)*o[e]+3*Math.pow(1-t,2)*t*r[e]+3*(1-t)*Math.pow(t,2)*h[e]+Math.pow(t,3)*m[e];for(c=0;c<=1;c++){const t=6*o[c]-12*r[c]+6*h[c],e=-3*o[c]+9*r[c]-9*h[c]+3*m[c],i=3*r[c]-3*o[c];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===P.ITALIC}static loadWebFont(t,e,i=!0){return k(this,void 0,void 0,(function*(){const b=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield b.load(),document.fonts.add(b),b}))}static loadWebFonts(){return k(this,void 0,void 0,(function*(){const t=F.WEB_FONT_HOST,e=F.WEB_FONT_FILES;for(const i in e){const b=e[i];F.loadWebFont(i,t+b)}}))}static load(t,e,i){let b=N[t];return b||(b=new F(t),N[t]=b),e&&b.setData(e),i&&b.setMetrics(i),b}constructor(t){this.name=t}getName(){return this.name}getData(){return p(this.data,"FontError","Missing font data")}getMetrics(){return p(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let b=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class R{static get CATEGORY(){return x.Element}static newID(){return"auto"+R.ID++}constructor(){var t;this.children=[],this.attrs={id:R.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=O.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const b=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return b&&(b.splice(b.indexOf(t)),this.attrs.class=b.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const b=this.attrs.id,a=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:b,name:t,value:e,oldValue:a}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return p(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return F.toCSSString(this.textFont)}setFont(t,e,i,b){const a=this.constructor.TEXT_FONT,n="object"==typeof t,s="string"==typeof t,l=void 0===t,o=void 0===e&&void 0===i&&void 0===b;return this.textFont=n?Object.assign(Object.assign({},a),t):s&&o?F.fromCSSString(t):l&&o?Object.assign({},a):F.validate(null!=t?t:a.family,null!=e?e:a.size,null!=i?i:a.weight,null!=b?b:a.style),this}getFont(){return this.textFont||this.resetFont(),F.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return F.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return F.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}R.ID=1e3,R.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:E.NORMAL,style:P.NORMAL};const L=16384,W={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},U={w:"1",h:"2",q:"4",b:"256"},I={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},G={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},H={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},Y={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"accidentalBuyukMucennebSharp",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},X={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},j={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new g("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in G))throw new g("BadArgument","Invalid clef: "+t);return G[t]}static keyProperties(t,e="treble",i){let b={octave_shift:0,duration:"4"};"object"==typeof i&&(b=Object.assign(Object.assign({},b),i));const a=V.sanitizeDuration(b.duration),n=t.split("/");if(n.length<2)throw new g("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const s=n[0].toUpperCase(),l=H[s];if(!l)throw new g("BadArguments","Invalid key name: "+s);l.octave&&(n[1]=l.octave.toString());let o=parseInt(n[1],10);o+=-1*b.octave_shift;let r=(7*o-28+l.index)/2;r+=V.clefProperties(e).line_shift;let h=0;r<=0&&2*r%2==0&&(h=1),r>=6&&2*r%2==0&&(h=-1);const m=void 0!==l.int_val?12*o+l.int_val:void 0,c=l.code,d=l.shift_right;let _={};if(n.length>2&&n[2]){const t=n[2].toUpperCase();_={code:this.codeNoteHead(t,a)}||{}}return Object.assign({key:s,octave:o,line:r,int_value:m,accidental:l.accidental,code:c,stroke:h,shift_right:d,displaced:!1},_)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new g("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new g("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,b=0,a=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new g("InvalidMetrics","Width and height required");b=t.width,a=-t.height/2}else b=V.textWidth(t);return{text:t,code:i,getWidth:()=>b*e,shift_y:a}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return X[t]}static accidentalCodes(t){return Y[t]}static ornamentCodes(t){return j[t]}static keySignature(t){const e=I[t];if(!e)throw new g("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],b=[];for(let t=0;tZ.getWidth(n,t)}),b)}}V.UNISON=!0,V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=L,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=Y,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:L};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,b){this.outline=t,this.originX=e,this.originY=i,this.scale=b,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let b=0;for(;b{const e=t.getTickContext();a&&t.setStave(a),e.setXOffset(n)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new g("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new g("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new g("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let b=i[3];return b||(b="M"),{root:t,accidental:e,type:b}}throw new g("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new g("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new g("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new g("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new g("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new g("BadArguments",`Invalid direction: ${i}`);let b=(t+i*e)%et.NUM_TONES;return b<0&&(b+=et.NUM_TONES),b}getRelativeNoteName(t,e){const i=this.getNoteParts(t),b=this.getNoteValue(i.root);let a=e-b;if(Math.abs(a)>et.NUM_TONES-3){let i=1;a>0&&(i=-1);const n=(e+1+(b+1))%et.NUM_TONES*i;if(Math.abs(n)>2)throw new g("BadArguments",`Notes not related: ${t}, ${e})`);a=n}if(Math.abs(a)>2)throw new g("BadArguments",`Notes not related: ${t}, ${e})`);let n=i.root;if(a>0)for(let t=1;t<=a;++t)n+="#";else if(a<0)for(let t=-1;t>=a;--t)n+="b";return n}getScaleTones(t,e){const i=[t];let b=t;for(let a=0;ae.line-t.line));const h=[];let m=0;for(let t=0;th[i+t],n=t=>t.map(a),s=(t,e)=>{const[i,b]=n([t,e]).map((t=>t.line));return i-b},l=(...t)=>t.map(n).every((([t,e])=>!this.checkCollision(t,e))),o=b-i+1;let r,m,d=this.checkCollision(h[i],h[b])?"a":"b";switch(o){case 3:"a"===d&&.5===s(1,2)&&.5!==s(0,1)&&(d="second_on_bottom");break;case 4:l([0,2],[1,3])&&(d="spaced_out_tetrachord");break;case 5:"b"===d&&l([1,3])&&(d="spaced_out_pentachord",l([0,2],[2,4])&&(d="very_spaced_out_pentachord"));break;case 6:l([0,3],[1,4],[2,5])&&(d="spaced_out_hexachord"),l([0,2],[2,4],[1,3],[3,5])&&(d="very_spaced_out_hexachord")}if(o>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+em?c:m}else for(r=t;r<=b;r++)m=V.accidentalColumnsTable[o][d][r-t],h[r].column=m,c=c>m?c:m;t=b}const d=[],_=[];for(let t=0;t<=c;t++)d[t]=0,_[t]=0;d[0]=a+m,_[0]=a,h.forEach((t=>{t.width>d[t.column]&&(d[t.column]=t.width)}));for(let t=1;t{let e=0;const i=g+t.numAcc;for(;g0?(b=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(b=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const a=Math.abs(i){const e=new z(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const a=b[e.value()];a?a.push(t):(i.push(e.value()),b[e.value()]=[t]),e.add(t.getTicks())}))}));const n=new et;e||(e="C");const s=n.createScaleMap(e),l={};i.forEach((t=>{const e=b[t],i=[],o=t=>{if(!c(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,b)=>{const o=n.getNoteParts(t.split("/")[0]),r=t.split("/")[1],h=o.accidental||"n",m=o.root+h;l[o.root+r]||(l[o.root+r]=s[o.root]);const c=l[o.root+r]===m,d=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{a(t)&&t.type==h&&t.getIndex()==b&&e.getModifiers().splice(i,1)})),!c||c&&d){l[o.root+r]=m;const a=new bt(h);e.addModifier(a,b),i.push(t)}})),e.getModifiers().forEach((t=>{r(t)&&t.getGraceNotes().forEach(o)}))};e.forEach(o)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),p(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=p(this.parenLeft),e=p(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return p(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,o(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:b,x_shift:a,y_shift:n,glyph:s,render_options:{parenLeftPadding:l,parenRightPadding:o}}=this,r=this.checkContext(),h=this.checkAttachedNote();this.setRendered();const m=h.getModifierStartXY(e,i);let c=m.x+a;const d=m.y+n;if(it("Rendering: ",t,c,d),b){const t=p(this.parenLeft),e=p(this.parenRight);e.render(r,c,d),c-=e.getMetrics().width,c-=o,c-=this.accidental.parenRightPaddingAdjustment,s.render(r,c,d),c-=s.getMetrics().width,c-=l,t.render(r,c,d)}else s.render(r,c,d)}}bt.DEBUG=!1;class at extends R{static get CATEGORY(){return x.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===at.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(at.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new g("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===at.UP,e=[this.y_top,this.y_bottom],i=at.HEIGHT+this.stem_extension,b=(t?Math.min:Math.max)(...e),a=(t?Math.max:Math.min)(...e);return{topY:b+i*-this.stem_direction,baseY:a}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-at.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const b=this.stem_direction;let a=0;b===at.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,a=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,a=this.stem_up_y_base_offset);const n=this.getHeight();!function(...t){at.DEBUG&&u("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const s=this.isStemlet?n-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(at.WIDTH),t.moveTo(e,i-s+a),t.lineTo(e,i-n-this.renderHeightAdjustment*b),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function nt(...t){rt.DEBUG&&u("Vex.Flow.TextFormatter",t)}at.DEBUG=!1;const st={},lt={},ot={};class rt{static getFontFamilies(){const t=[];for(const e in ot){const i=ot[e];t.push(Object.assign({},i))}return t}static create(t={}){nt("create: ",t),t.family||(t.family=F.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ot)i.startsWith(t)&&e.push(ot[i]);if(e.length>0)break}let b;if(0===e.length)b=new rt(Object.values(ot)[0]);else if(1===e.length)b=new rt(e[0]);else{const i=F.isBold(t.weight),a=F.isItalic(t.style),n=e.find((t=>t.bold===i&&t.italic===a));if(n)b=new rt(n);else{const t=e.find((t=>t.italic===a||t.bold===i));b=new rt(t||e[0])}}const a=t.size;if(void 0!==a){const t=F.convertSizeToPointValue(a);b.setFontSize(t)}return b}static getInfo(t){return ot[t]}static registerInfo(t,e=!1){nt("registerInfo: ",t,e);const i=t.family;(void 0===ot[i]||e)&&(ot[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===lt[this.cacheKey]&&(lt[this.cacheKey]={}),null!==(t=lt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?E.BOLD:E.NORMAL,b=this.italic?P.ITALIC:P.NORMAL;this.cacheKey=`${t}%${e}%${i}%${b}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},b=e[t];if(void 0!==b)return b;for(let e=0;et>e?t:e)),o+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+s,m&&i===at.DOWN&&(o=Math.max(o,r.topY+s+h*this.text_line))}else if(this.verticalJustification===mt.CENTER){const t=e.getYForTopText(this.text_line)-1;o=t+(c.getYForBottomText(this.text_line)-t)/2+s/2}else if(this.verticalJustification===mt.TOP){o=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,m&&i===at.UP&&(h=r.topY=1}function yt(t,e){return gt(t,e)?e===dt?Math.ceil:Math.floor:Math.round}const pt=t=>c(t)||o(t);class ut extends tt{static get CATEGORY(){return x.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const b=(t,e,i)=>xt(yt(e,i),p(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const a=t.checkAttachedNote();i=Math.max(a.getGlyphProps().getWidth(),i);let n=5;const s=a.hasStem()?a.getStemDirection():at.UP;let l=0;if(d(a)){const t=a.getStem();t&&(l=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const o=a.getStave();if(o&&(n=o.getNumLines()),t.getPosition()===dt){let i=a.getLineNumber(!0);s===at.UP&&(i+=l);let o=b(t,e.top_text_line,dt);const r=i+e.top_text_line+.5;!t.articulation.between_lines&&rt.getWidth())).reduce(((t,e)=>Math.max(e,t))),n=Math.min(Math.max(a-i,0),Math.max(a-(e.left_shift+e.right_shift),0));return e.left_shift+=n/2,e.right_shift+=n/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const b={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const a={type:b[t]};return e&&(a.position=tt.PositionString[e]),i.getFactory().Articulation(a)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=dt,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=dt),this.type.endsWith("Below")&&(this.position=_t));const t=(this.position===dt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),p(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(p(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:b,glyph:a,text_line:n}=this,s=this.articulation.between_lines,l=e.checkStave(),o=l.getSpacingBetweenLines(),r=_(e),{x:h}=e.getModifierStartXY(b,i),m=!s||r,c=function(t,e){const i=e===dt&&t.getStemDirection()===at.UP||e===_t&&t.getStemDirection()===at.DOWN;return pt(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,b),d=V.currentMusicFont().lookupMetric(`articulation.${a.getCode()}.padding`,0);let x={[dt]:()=>{a.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:b,baseY:a}=t.getStemExtents();if(pt(t))return t.hasStem()?i===at.UP?b:a:Math.min(...t.getYs());if(_(t))return t.hasStem()&&i===at.UP?b:t.checkStave().getYForTopText(e);throw new g("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,n)-(n+c)*o;return m?Math.min(l.getYForTopText(ut.INITIAL_OFFSET),t):t},[_t]:()=>{a.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:b,baseY:a}=t.getStemExtents();if(pt(t))return t.hasStem()?i===at.UP?a:b:Math.max(...t.getYs());if(_(t))return t.hasStem()?i===at.UP?t.checkStave().getYForBottomText(e):b:t.checkStave().getYForBottomText(e);throw new g("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,n)+(n+c)*o;return m?Math.max(l.getYForBottomText(ut.INITIAL_OFFSET),t):t}}[b]();if(!r){const t=b===dt?-1:1,n=e.getKeyProps()[i].line,l=(e.getYs()[i]-x)/o+Number(n),r=function(t,e,i,b){const a=xt(yt(e,i),e);if(t&>(a,i)&&a%1==0)return a+.5*-b;return a}(s,l,b,t);gt(r,b)&&a.setOrigin(.5,.5),x+=Math.abs(r-l)*o*t+d*t}!function(...t){ut.DEBUG&&u("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${h}, y: ${x})`),a.render(t,h,x)}}ut.DEBUG=!1,ut.INITIAL_OFFSET=-.5;class ft{static get CATEGORY(){return x.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,b="#F55"){t.save(),t.setFillStyle(b),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends R{static get CATEGORY(){return x.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new z(0,1),this.intrinsicTicks=0,this.tickMultiplier=new z(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new g("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return p(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const b=this.tupletStack.indexOf(t);return-1!==b&&(this.tupletStack.splice(b,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const b=_.space.deviation,a=b>=0?"+":"";t.setFillStyle("red"),t.fillText(a+Math.round(b),s+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const b=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const a=t.split("/");b[e]=a&&3===a.length?a[2]:i})));let a=V.durationToTicks(e.duration);if(!a)return;const n=t.dots?t.dots:e.dots;if("number"!=typeof n)return;let s=a;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new g("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new g("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(x.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return p(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new g("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new g("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}static getPoint(t){return"default"==t?V.NOTATION_FONT_SCALE:V.NOTATION_FONT_SCALE/5*3}getStemDirection(){throw new g("NoStem","No stem attached to this note.")}getStemExtents(){throw new g("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,zt,Bt,Dt,Ct,Et;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class Pt extends R{static get CATEGORY(){return x.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,b=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+b)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(zt||(zt={}));class kt extends Pt{static get CATEGORY(){return x.Barline}static get type(){return zt}static get typeString(){return{single:zt.SINGLE,double:zt.DOUBLE,end:zt.END,repeatBegin:zt.REPEAT_BEGIN,repeatEnd:zt.REPEAT_END,repeatBoth:zt.REPEAT_BOTH,none:zt.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=zt;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case zt.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case zt.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case zt.END:this.drawVerticalEndBar(t,this.x);break;case zt.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case zt.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case zt.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const b=t.checkContext(),a=t.getTopLineTopY(),n=t.getBottomLineBottomY();i&&b.fillRect(e-3,a,1,n-a),b.fillRect(e,a,1,n-a)}drawVerticalEndBar(t,e){const i=t.checkContext(),b=t.getTopLineTopY(),a=t.getBottomLineBottomY();i.fillRect(e-5,b,1,a-b),i.fillRect(e-2,b,3,a-b)}drawRepeatBar(t,e,i){const b=t.checkContext(),a=t.getTopLineTopY(),n=t.getBottomLineBottomY();let s=3;i||(s=-5),b.fillRect(e+s,a,1,n-a),b.fillRect(e-2,a,3,n-a);i?s+=4:s-=4;const l=e+s+1;let o=(t.getNumLines()-1)*t.getSpacingBetweenLines();o=o/2-t.getSpacingBetweenLines()/2;let r=a+o+1;b.beginPath(),b.arc(l,r,2,0,2*Math.PI,!1),b.fill(),r+=t.getSpacingBetweenLines(),b.beginPath(),b.arc(l,r,2,0,2*Math.PI,!1),b.fill()}}class At extends vt{static get CATEGORY(){return x.BarNote}constructor(t=zt.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=zt;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?kt.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){At.DEBUG&&u("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t);const e=new kt(this.type);e.setX(this.getAbsoluteX()),e.draw(this.checkStave()),this.restoreStyle(t),this.setRendered()}}At.DEBUG=!1;class Nt extends tt{static get CATEGORY(){return x.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let b=0;bt{const n=t+b,s=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(n,s,t+b,a),e.stroke(),e.restore()},h=(t,i,b,a)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,a),e.quadraticCurveTo(t+b,a,t+b,i),e.stroke(),e.restore()},m=(t,i,b)=>{const a=i+4*b;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,a),e.lineTo(t+4,a),e.closePath(),e.fill()},c=(t,i)=>{e.save(),e.setFont(this.textFont);const b=t-e.measureText(i).width/2;e.fillText(i,b,o),e.restore()};let d,_=0,x=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){c(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=r.symbolBlocks[t-1];Mt.isSuperscript(e)||(a=b)}n&&a>0&&(g=!0,e.xShift=e.xShift+(a-b),b=a,a=0,r.setEnableKerning(!1)),i||n||(a=0),e.vAlign=g,b+=e.width,_=b}if(r.updateKerningAdjustments(),r.updateOverBarAdjustments(),r.getVertical()===Dt.TOP?(r.setTextLine(e.top_text_line),e.top_text_line+=x):(r.setTextLine(e.text_line+1),e.text_line+=x+1),r.getReportWidth()&&d(c)){const t=c.getGlyphProps().getWidth();r.getHorizontal()===Bt.LEFT?(l=Math.max(t,l),n=Math.max(n,_)+Mt.minPadding):r.getHorizontal()===Bt.RIGHT?(o=Math.max(t,o),s=Math.max(s,_)):(n=Math.max(n,_/2)+Mt.minPadding,s=Math.max(s,_/2),l=Math.max(t/2,l),o=Math.max(t/2,o))}b=0}const r=Math.min(Math.max(s-o,0),Math.max(s-e.right_shift,0)),h=Math.min(Math.max(n-l,0),Math.max(n-e.left_shift,0));return e.left_shift+=h,e.right_shift+=r,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Bt.LEFT,this.vertical=Dt.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:E.NORMAL,style:P.NORMAL}}get superscriptOffset(){return Mt.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Mt.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Ct.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let b=0;for(;b0?this.symbolBlocks[t-1]:void 0;let b=0;e.symbolType===Ct.GLYPH&&void 0!==e.glyph&&e.glyph.code===Mt.glyphs.over.code&&(b+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Ct.GLYPH&&void 0!==i.glyph&&i.glyph.code===Mt.glyphs.over.code&&(b+=i.glyph.metrics.x_shift);let a=!1,n=!1;void 0!==i&&i.symbolType===Ct.TEXT&&(a=Mt.upperKerningText.some((t=>t===i.text[i.text.length-1])),n=Mt.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const s=Mt.kerningOffset*this.textFormatter.fontSizeInPixels;return a&&e.symbolModifier===Et.SUPERSCRIPT&&(b+=s),n&&e.symbolType===Ct.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(b+=s/2),Mt.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(b+=s/2)),b}getSymbolBlock(t={}){var e,i,b;const a=null!==(e=t.symbolType)&&void 0!==e?e:Ct.TEXT,n={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:a,symbolModifier:null!==(b=t.symbolModifier)&&void 0!==b?b:Et.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(a===Ct.GLYPH&&"string"==typeof t.glyph){const e=Mt.glyphs[t.glyph],i=20;n.glyph=new Z(e.code,i,{category:"chordSymbol"})}else a===Ct.TEXT?n.width=this.textFormatter.getWidthForTextInEm(n.text):a===Ct.LINE&&(n.width=t.width);return n}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Ct.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Ct.TEXT,i=Et.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Ct.TEXT,i=Et.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Ct.GLYPH,i=Et.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Ct.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let b=0;b0&&(this.addText(i,e),i=""),this.addGlyph(a,e)):i+=a}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Ct.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,b){return super.setFont(t,e,i,b),this.textFormatter=rt.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Mt.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Mt.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,b=0;for(b=0;b0?i/a*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let b;t.setFont(this.textFont);const a=e.hasStem(),n=e.checkStave();if(this.vertical===Dt.BOTTOM){if(b=n.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),a){const t=e.checkStem().getExtents(),i=n.getSpacingBetweenLines(),a=1===e.getStemDirection()?t.baseY:t.topY;b=Math.max(b,a+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(b=Math.min(n.getYForTopText(this.text_line),t-10),a){const t=e.checkStem().getExtents(),i=n.getSpacingBetweenLines();b=Math.min(b,t.topY-5-i*this.text_line)}}let s=i.x;s=this.horizontal===Bt.LEFT?i.x:this.horizontal===Bt.RIGHT?i.x+this.getWidth():this.horizontal===Bt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Ft("Rendering ChordSymbol: ",this.textFormatter,s,b),this.symbolBlocks.forEach((e=>{const i=Mt.isSuperscript(e),a=Mt.isSubscript(e);let n=b;if(Ft("shift was ",e.xShift,e.yShift),Ft("curY pre sub ",n),i&&(n+=this.superscriptOffset),a&&(n+=this.subscriptOffset),Ft("curY sup/sub ",n),e.symbolType===Ct.TEXT){if((i||a)&&(t.save(),this.textFont)){const{family:e,size:i,weight:b,style:a}=this.textFont,n=F.scaleSize(i,Mt.superSubRatio);t.setFont(e,n,b,a)}Ft("Rendering Text: ",e.text,s+e.xShift,n+e.yShift),t.fillText(e.text,s+e.xShift,n+e.yShift),(i||a)&&t.restore()}else e.symbolType===Ct.GLYPH&&e.glyph?(n+=e.yShift,Ft("Rendering Glyph: ",e.glyph.code,s+e.xShift,n),e.glyph.render(t,s+e.xShift,n)):e.symbolType===Ct.LINE&&(Ft("Rendering Line : ",e.width,s,n),t.beginPath(),t.setLineWidth(1),t.moveTo(s,b),t.lineTo(s+e.width,n),t.stroke());s+=e.width,e.vAlign&&(s+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Mt.DEBUG=!1,Mt.HorizontalJustify=Bt,Mt.HorizontalJustifyString={left:Bt.LEFT,right:Bt.RIGHT,center:Bt.CENTER,centerStem:Bt.CENTER_STEM},Mt.VerticalJustify=Dt,Mt.VerticalJustifyString={top:Dt.TOP,above:Dt.TOP,below:Dt.BOTTOM,bottom:Dt.BOTTOM},Mt.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Mt.symbolTypes=Ct,Mt.symbolModifiers=Et,Mt.noFormat=!1;class Ot extends tt{static get CATEGORY(){return x.Dot}static getDots(t){return t.getModifiersByType(Ot.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let n=i,s=0,l=null,o=null,r=null,h=0;for(let t=0;ts?n:s,l=c,o=i}return e.right_shift+=s,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,o(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),b=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});_(e)&&(b.y=e.getStemExtents().baseY);const a=b.x+this.x_shift+this.width-this.radius,n=b.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(a,n,this.radius,0,2*Math.PI,!1),t.fill()}}class Rt extends tt{static get CATEGORY(){return x.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:b}=e;if(!t||0===t.length)return!1;const a=[];let n=null,s=0,l=0;for(let o=0;oe.line-t.line));let o=0,r=0,h=0,m=0,c=null,d=null;for(let t=0;th?e:h):s===tt.Position.RIGHT&&(_.setXShift(r),e=l+p,m=e>m?e:m),c=x,d=n}return e.left_shift+=h,e.right_shift+=m,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),b={number:e[0]};return e[1]&&(b.position=e[1]),i.getFactory().Fingering(b)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let b=i.x+this.x_shift+this.x_offset,a=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:b-=4,a-=12;break;case tt.Position.BELOW:b-=2,a+=10;break;case tt.Position.LEFT:b-=this.width;break;case tt.Position.RIGHT:b+=1;break;default:throw new g("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,b,a),t.restore()}}Rt.TEXT_FONT={family:F.SANS_SERIF,size:9,weight:E.BOLD,style:P.NORMAL};class Lt extends vt{static get CATEGORY(){return x.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||at.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=at.WIDTH/2,i=V.currentMusicFont(),b=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,a=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+b+(this.displaced?(this.width-e)*this.stem_direction+a:0)}getBoundingBox(){const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new D(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===at.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Lt.DEBUG&&u("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const b=this.stem_direction,a=this.render_options.glyph_font_scale,n=`${this.glyph_code}Stem${b===at.UP?"Up":"Down"}`;if("s"===this.noteType){const a=this.checkStave().getSpacingBetweenLines();!function(t,e,i,b,a,n){const s=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let l=!1;if(V.durationToNumber(e)>2&&(l=!0),l||(i-=V.STEM_WIDTH/2*a),t.beginPath(),t.moveTo(i,b+n),t.lineTo(i,b+1),t.lineTo(i+s,b-n),t.lineTo(i+s,b),t.lineTo(i,b+n),t.closePath(),l?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,s+1,s+3];for(let a=0;at.getCategory()===x.Dot&&0===t.getIndex())).length!==l.note.getModifiers().filter((t=>t.getCategory()===x.Dot&&0===t.getIndex())).length||t<1&&t>0||JSON.stringify(n.note.getStyle())!==JSON.stringify(l.note.getStyle())?(m=h+2,n.stemDirection===l.stemDirection?n.note.setXShift(m):l.note.setXShift(m)):n.note.voice!==l.note.voice&&n.stemDirection===l.stemDirection&&(n.line!=l.line?(m=h+2,n.note.setXShift(m)):1===l.stemDirection&&(l.stemDirection=-1,l.note.setStemDirection(-1)))}else t<1?(m=h+2,n.note.durationt.postFormat())),!0)}constructor(t){var e,i,b;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||It.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(b=t.stem_direction)&&void 0!==b?b:at.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const b=t[i];b&&e.setStyle(b)}));const e=this.stave;return e&&this.setStave(e),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new at({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,b,a,n,s,l=!1;t===at.UP?(a=0,n=e.length,s=1):(a=e.length-1,n=-1,s=-1);for(let e=a;e!==n;e+=s){const a=this.sortedKeyProps[e].keyProps,n=a.line;void 0===i?i=n:(b=Math.abs(i-n),0===b||.5===b?l=!l:(l=!1,this.use_default_head_x=!0)),i=n;const s=new Lt({duration:this.duration,note_type:this.noteType,displaced:l,stem_direction:t,custom_glyph_code:a.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:a.shift_right,stem_up_x_offset:a.stem_up_x_offset,stem_down_x_offset:a.stem_down_x_offset,line:a.line});this.addChildElement(s),this._noteHeads[this.sortedKeyProps[e].index]=s}}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?at.UP:at.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=n,this.keyProps.push(a)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new g("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:b,leftDisplacedHeadPx:a}=this.getMetrics(),n=this.getAbsoluteX()-b-a;let s=0,l=0;const o=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,r=2*o;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(s=t-o,l=t+o):(s=t-this.glyphProps.line_above*r,l=t+this.glyphProps.line_below*r)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=o*this.getStemDirection(),s=Math.min(t.topY,t.baseY),l=Math.max(t.topY,t.baseY)}else{s=0,l=0;for(let t=0;te&&(e=b):b1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?at.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var b,a;if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new g("NoYValues","No Y-Values calculated for this note.");const{ABOVE:n,BELOW:s,LEFT:l,RIGHT:o}=tt.Position;let r=0;return t===l?r=-2:t===o?(r=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===at.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===at.UP?t.keyProps.length-1:0))(this,e))&&(r+=null!==(a=null===(b=null==this?void 0:this.flag)||void 0===b?void 0:b.getMetrics().width)&&void 0!==a?a:0)):t!==s&&t!==n||(r=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+r,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===at.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===at.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=It.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===at.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,b,a=1/0,n=-1/0,s=this.checkStave().getNumLines(),l=1,o=s,r=l;return this._noteHeads.forEach((h=>{const m=h.getLine(),c=h.getY();a=Math.min(c,a),n=Math.max(c,n),void 0===e&&h.isDisplaced()&&(e=h.getAbsoluteX()),void 0!==t||h.isDisplaced()||(t=h.getAbsoluteX()),s=Math.max(m,s),l=Math.min(m,l),h.isDisplaced()?(i=void 0===i?m:Math.max(m,i),b=void 0===b?m:Math.min(m,b)):(o=Math.max(m,o),r=Math.min(m,r))}),this),{y_top:a,y_bottom:n,displaced_x:e,non_displaced_x:t,highest_line:s,lowest_line:l,highest_displaced_line:i,lowest_displaced_line:b,highest_non_displaced_line:o,lowest_non_displaced_line:r}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,b=this.checkContext(),a=e.getWidth()+2*i,n=2*(e.getWidth()+i)-at.WIDTH/2;if(this.isRest())return;if(!b)throw new g("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:s,lowest_line:l,highest_displaced_line:o,highest_non_displaced_line:r,lowest_displaced_line:h,lowest_non_displaced_line:m,displaced_x:c,non_displaced_x:d}=this.getNoteHeadBounds();if(s<6&&l>0)return;const _=Math.min(null!=c?c:0,null!=d?d:0),x=(t,e,s)=>{let l;l=s&&e?_-i:e?(null!=d?d:0)-i:(null!=c?c:0)-i;const o=e&&s?n:a;b.beginPath(),b.moveTo(l,t),b.lineTo(l+o,t),b.stroke()},y=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(b,y);for(let e=6;e<=s;++e){const i=void 0!==d&&e<=r,b=void 0!==o&&e<=o;x(t.getYForNote(e),i,b)}for(let e=0;e>=l;--e){const i=void 0!==d&&e>=m,b=void 0!==h&&e>=h;x(t.getYForNote(e),i,b)}this.restoreStyle(b,y)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new at(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===at.UP?3-this.maxLine:this.minLine-3;const b=i-3.5;if(b<=0)return t;const a=this.getStave();let n=10;return null!=a&&(n=a.getSpacingBetweenLines()),t+b*n}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new g("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){It.DEBUG&&u("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}It.DEBUG=!1;class Gt extends R{static get CATEGORY(){return x.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new g("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new g("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new g("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,b=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,b=8);const a=this.render_options.first_x_shift,n=this.render_options.last_x_shift,s=this.render_options.y_shift*t.direction,l=this.notes.first_indices,o=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let r=0;rMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===Yt.STRICT||this.mode===Yt.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new g("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let b=0;b1){const e=new Re(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+It.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){jt.DEBUG&&u("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=c(e),b=i?Gt:Ht;this.slur=new b({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}jt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return x.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new Pe,this.voice=new Xt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt{static getNextContext(t){const e=t.tContexts,i=e.indexOf(t);if(i+1t.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:b,rightDisplacedHeadPx:a,modLeftPx:n,modRightPx:s,totalLeftPx:l,totalRightPx:o}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:b,rightDisplacedHeadPx:a,modLeftPx:n,modRightPx:s,totalLeftPx:l,totalRightPx:o}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new g("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t=0&&(l.x_shift+=b+2),$t.ornamentAttack.indexOf(l.type)>=0&&(l.x_shift-=a+2),l.reportedWidth&&l.x_shift<0?a+=l.reportedWidth:l.reportedWidth&&l.x_shift>=0?b+=l.reportedWidth+$t.minPadding:i=Math.max(l.getWidth(),i),$t.ornamentArticulation.indexOf(l.type)>=0){p(l.note,"NoAttachedNote").getLineNumber()>=3||l.getPosition()===tt.Position.ABOVE?(e.top_text_line+=o,l.y_shift+=n,n-=l.glyph.bbox.getH()):(e.text_line+=o,l.y_shift+=n,n+=l.glyph.bbox.getH())}else l.getPosition()===tt.Position.ABOVE?(l.setTextLine(e.top_text_line),e.top_text_line+=o):(l.setTextLine(e.text_line),e.text_line+=o)}return e.left_shift=a+i/2,e.right_shift=b+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new g("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:V.NOTATION_FONT_SCALE,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=$t.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new g("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),$t.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),b=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const a=e.checkStem().getExtents();let n=i===at.DOWN?a.baseY:a.topY;_(e)&&(e.hasStem()?i===at.DOWN&&(n=b.getYForTopText(this.text_line)):n=b.getYForTopText(this.text_line));const s=i===at.DOWN,l=b.getSpacingBetweenLines();let o=1;!s&&e.hasBeam()&&(o+=.5);const r=n-l*(this.text_line+o),h=e.getModifierStartXY(this.position,this.index);let m=h.x,c=this.ornamentAlignWithNoteHead?h.y:Math.min(b.getYForTopText(this.text_line),r);if(c+=this.y_shift,this.delayed){let t=0;const i=m-(b.getX()-10);if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const a=Kt.getNextContext(e.getTickContext());t+=a?.5*(a.getX()-i):.5*(b.getX()+b.getWidth()-i),this.delayXShift=t}m+=t}!function(...t){$t.DEBUG&&u("Vex.Flow.Ornament",t)}("Rendering ornament: ",this.ornament,m,c),this.accidentalLower&&(this.accidentalLower.render(t,m,c),c-=this.accidentalLower.getMetrics().height,c-=this.render_options.accidentalLowerPadding),this.stemUpYOffset&&e.hasStem()&&1===e.getStemDirection()&&(c+=this.stemUpYOffset),e.getLineNumber()<5&&$t.ornamentNoteTransition.indexOf(this.type)>=0&&(c=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,m+this.x_shift,c),this.accidentalUpper&&(c-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,m,c)),t.closeGroup(),this.restoreStyle()}}$t.DEBUG=!1;class Jt extends tt{static get CATEGORY(){return x.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;to+a.width?b:o+a.width),s===J.LEFT&&(o=n.getLeftParenthesisPx(l),i=i>o+a.width?i:o+a.width),a.setXShift(o)}return e.left_shift+=i,e.right_shift+=b,!0}constructor(t){var e;super(),this.position=null!=t?t:tt.Position.LEFT,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){var e,i;return this.note=t,this.point=null!==(e=V.currentMusicFont().lookupMetric("parenthesis.default.point"))&&void 0!==e?e:vt.getPoint("default"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),o(t)&&(this.point=null!==(i=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"))&&void 0!==i?i:vt.getPoint("gracenote"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),b=i.x+this.x_shift,a=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,b+1,a,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,b-2,a,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function qt(t){if(!t)return!1;const e=y();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function Qt(t){if(!t)return!1;const e=y();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Zt extends ft{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(f("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Zt.WIDTH,height:Zt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e,i){var b;const a=this.context2D.canvas,n=null!==(b=null!=i?i:y().devicePixelRatio)&&void 0!==b?b:1;return[t,e]=Zt.sanitizeCanvasDims(t*n,e*n),t=t/n|0,e=e/n|0,a.width=t*n,a.height=e*n,qt(a)&&(a.style.width=t+"px",a.style.height=e+"px"),this.scale(n,n)}rect(t,e,i,b){return this.context2D.rect(t,e,i,b),this}fillRect(t,e,i,b){return this.context2D.fillRect(t,e,i,b),this}clearRect(t,e,i,b){return this.context2D.clearRect(t,e,i,b),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,b,a,n){return this.context2D.bezierCurveTo(t,e,i,b,a,n),this}quadraticCurveTo(t,e,i,b){return this.context2D.quadraticCurveTo(t,e,i,b),this}arc(t,e,i,b,a,n){return this.context2D.arc(t,e,i,b,a,n),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,b=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,b=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,b=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:b}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,b){const a=F.validate(t,e,i,b);return this.context2D.font=F.toCSSString(a),this.textHeight=F.convertSizeToPixelValue(a.size),this}getFont(){return this.context2D.font}}const te={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},ee="http://www.w3.org/2000/svg",ie=2*Math.PI;class be extends ft{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":F.SANS_SERIF,"font-size":F.SIZE+"pt","font-weight":E.NORMAL,"font-style":P.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(ee,t)}openGroup(t,e,i){const b=this.create("g");return this.groups.push(b),this.parent.appendChild(b),this.parent=b,t&&b.setAttribute("class",T(t)),e&&b.setAttribute("id",T(e)),i&&i.pointerBBox&&b.setAttribute("pointer-events","bounding-box"),this.applyAttributes(b,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),b}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new g("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,b=this.height/this.state.scaleY;return this.setViewBox(0,0,i,b),this}setViewBox(t,e,i,b){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const a=t+" "+e+" "+i+" "+b;this.svg.setAttribute("viewBox",a)}}applyAttributes(t,e){const i=te[t.nodeName];for(const b in e)i&&i[b]||!e[b]||0!=this.groupAttributes.length&&e[b]==this.groupAttributes[this.groupAttributes.length-1][b]||t.setAttributeNS(null,b,e[b]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,b,a){b<0&&(e+=b,b*=-1);const n=this.create("rect");return a=null!=a?a:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),b=this.round(b),this.applyAttributes(n,Object.assign({x:t,y:e,width:i,height:b},a)),this.add(n),this}fillRect(t,e,i,b){const a={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,b,a),this}clearRect(t,e,i,b){return this.rect(t,e,i,b,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,b,a,n){return a=this.round(a),n=this.round(n),t=this.round(t),e=this.round(e),i=this.round(i),b=this.round(b),this.path+="C"+t+" "+e+","+i+" "+b+","+a+" "+n,this.pen.x=a,this.pen.y=n,this}quadraticCurveTo(t,e,i,b){return i=this.round(i),b=this.round(b),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+b,this.pen.x=i,this.pen.y=b,this}arc(t,e,i,b,a,n){let s=t+i*Math.cos(b),l=e+i*Math.sin(b);s=this.round(s),l=this.round(l);const o=v(b),r=v(a);if(!n&&a-b>=ie||n&&b-a>=ie||o===r){let a=t+i*Math.cos(b+Math.PI),n=e+i*Math.sin(b+Math.PI);a=this.round(a),n=this.round(n),i=this.round(i),this.path+=`M${s} ${l} A${i} ${i} 0 0 0 ${a} ${n} `,this.path+=`A${i} ${i} 0 0 0 ${s} ${l}`,this.pen.x=s,this.pen.y=l}else{let h,m=t+i*Math.cos(a),c=e+i*Math.sin(a);b=o,a=r,h=Math.abs(a-b)a&&(h=!h);const d=!n;m=this.round(m),c=this.round(c),i=this.round(i),this.path+=`M${s} ${l} A${i} ${i} 0 ${+h} ${+d} ${m} ${c}`,this.pen.x=m,this.pen.y=c}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return be.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const b=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),a=this.create("text");return a.textContent=t,this.applyAttributes(a,b),this.add(a),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,b){const a=F.validate(t,e,i,b);this.fontCSSString=F.toCSSString(a);const n={"font-family":a.family,"font-size":a.size,"font-weight":a.weight,"font-style":a.style};return this.attributes=Object.assign(Object.assign({},this.attributes),n),this.state=Object.assign(Object.assign({},this.state),n),this}getFont(){return this.fontCSSString}}var ae,ne,se,le;be.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let b=this.cache[t];void 0===b&&(b={},this.cache[t]=b);const a=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let n=b[a];return void 0===n&&(n=this.measureImpl(t,e,i),b[a]=n),n}measureImpl(t,e,i){let b=this.txt;b||(b=document.createElementNS(ee,"text"),this.txt=b),b.textContent=t,i["font-family"]&&b.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&b.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&b.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&b.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(b);const a=b.getBBox();return e.removeChild(b),{x:a.x,y:a.y,width:a.width,height:a.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ae||(ae={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ne||(ne={}));class oe{static buildContext(t,e,i,b,a="#FFF"){const n=new oe(t,e);i&&b&&n.resize(i,b);const s=n.getContext();return s.setBackgroundFillStyle(a),oe.lastContext=s,s}static getCanvasContext(t,e,i,b){return oe.buildContext(t,oe.Backends.CANVAS,e,i,b)}static getSVGContext(t,e,i,b){return oe.buildContext(t,oe.Backends.SVG,e,i,b)}static drawDashedLine(t,e,i,b,a,n){t.beginPath();const s=b-e,l=a-i,o=Math.atan2(l,s);let r=e,h=i;t.moveTo(e,i);let m=0,c=!0;for(;!(s<0?r<=b:r>=b)||!(l<0?h<=a:h>=a);){const e=n[m++%n.length],i=r+Math.cos(o)*e;r=s<0?Math.max(b,i):Math.min(b,i);const d=h+Math.sin(o)*e;h=l<0?Math.max(a,d):Math.min(a,d),c?t.lineTo(r,h):t.moveTo(r,h),c=!c}t.closePath(),t.stroke()}constructor(t,e){if(m(t))this.ctx=t;else{if(void 0===e)throw new g("InvalidArgument","Missing backend argument");const i=e;let b;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new g("BadElementId",`Can't find element with ID "${e}"`);b=e}else b=t;if(i===oe.Backends.CANVAS){if(!qt(b))throw new g("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=b.getContext("2d",{willReadFrequently:!0});if(!t)throw new g("BadElement","Can't get canvas context");this.ctx=new Zt(t)}else{if(i!==oe.Backends.SVG)throw new g("InvalidBackend",`No support for backend: ${i}`);if(!Qt(b))throw new g("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new be(b)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}oe.Backends=ae,oe.LineEndType=ne,oe.lastContext=void 0;class re extends tt{static get CATEGORY(){return x.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,b=e.right_shift;if(!t||0===t.length)return!1;const a=[];let n=null,s=0,l=0;for(let i=0;ie.line-t.line));let o=0,r=0,h=0,m=null,d=null;for(let t=0;th?g:h),m=c,d=e}return e.left_shift+=r,e.right_shift+=h,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=oe.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=oe.LineEndType.NONE&&t<=oe.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),b=e.hasStem()?e.getStemDirection():at.UP;let a=i.x+this.x_shift+this.x_offset,n={};e.hasStem()&&(n=e.checkStem().getExtents());let s=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:s=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&b==at.DOWN&&(s=n.topY-re.metrics.stemPadding),s+=this.radius+re.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:a-=this.radius/2+re.metrics.leftPadding;break;case tt.Position.RIGHT:a+=this.radius/2+re.metrics.rightPadding;break;default:throw new g("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(a,s,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const l=a-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,l,s+4.5);const o=this.last_note;if(d(o)){const i=o.getStemX()-e.getX()+5;let b,n;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?oe.drawDashedLine(t,a+10,s,a+i,s,[3,3]):oe.drawDashedLine(t,a+10,s,a+i,s,[3,0]),this.leg){case oe.LineEndType.UP:b=-10,n=this.dashed?[3,3]:[3,0],oe.drawDashedLine(t,a+i,s,a+i,s+b,n);break;case oe.LineEndType.DOWN:b=10,n=this.dashed?[3,3]:[3,0],oe.drawDashedLine(t,a+i,s,a+i,s+b,n)}}t.restore()}}re.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:E.BOLD,style:P.NORMAL};class he extends tt{static get CATEGORY(){return x.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const b=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(c(e)){const{line:b}=e.getKeyProps()[i];return{line:b,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(_(e)){const{str:b}=e.getPositions()[i];return{line:b,shift:0,stroke:t}}throw new g("Internal","Unexpected instance.")})),a=i,n=b.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(a+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=n,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:V.NOTATION_FONT_SCALE},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let b=e.getYs(),a=i.y,n=i.y;const s=i.x-5,l=e.checkStave().getSpacingBetweenLines(),o=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){b-=s.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(b,this.checkStave(),t.line),this.glyphs.push(b);const n=this.xPositions[this.xPositions.length-1],s=b.getMetrics().width+a;this.xPositions.push(n+s),this.width+=s}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,b=i?e.length:e.length-this.accList.length;if(b<1)return;const a=[];for(let t=0;t0?e[0].type:void 0;let b;if(this.cancelKeySpec&&(b=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const a=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();b&&this.convertAccLines(a,b.type,b.accList),this.convertAccLines(a,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":b=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":b=i.length>0?"ParensRightSmall":"ParensRight"}const a=new Z("timeSig"+b,this.timeSignature.point);this.topGlyphs.push(a),l+=null!==(s=a.getMetrics().width)&&void 0!==s?s:0,o=Math.max(o,a.getMetrics().height)}let r=0;for(let t=0;t22?1:0,this.width=Math.max(l,r),this.xMin=this.getMetrics().x_min,this.topStartX=(this.width-l)/2,this.botStartX=(this.width-r)/2,this.reset()}getMetrics(){return{x_min:this.xMin,x_max:this.xMin+this.width,width:this.width}}renderToStave(t){const e=this.checkStave(),i=this.checkContext();let b=t+this.topStartX,a=0;a=this.botGlyphs.length>0?e.getYForLine(this.timeSignature.topLine-this.lineShift):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new g("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new g("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const b=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=b[0])&&void 0!==e?e:"",null!==(i=b[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Te(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(p(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const we={[kt.CATEGORY]:0,[_e.CATEGORY]:1,[xe.CATEGORY]:2,[ve.CATEGORY]:3},ze={[ve.CATEGORY]:0,[xe.CATEGORY]:1,[kt.CATEGORY]:2,[_e.CATEGORY]:3};class Be extends R{static get CATEGORY(){return x.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,b){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},b),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new kt(this.options.left_bar?zt.SINGLE:zt.NONE)),this.addEndModifier(new kt(this.options.right_bar?zt.SINGLE:zt.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new ge(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new Se(t,e,this.x,i)),this}setSection(t,e,i=0,b,a=!0){const n=new ye(t,this.x+i,e,a);return b&&n.setFontSize(b),this.modifiers.push(n),this}setTempo(t,e){return this.modifiers.push(new pe(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new fe(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new D(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,b=e.space_above_staff_ln;return this.y+t*i+b*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,b=e.space_above_staff_ln;return(t-this.y)/i-b}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,b=e.space_above_staff_ln;return this.y+b*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:b}=zt;return t!==e&&t!==i&&t!==b||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==zt.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClef(t,e,i,b){void 0===b&&(b=wt.BEGIN),b===wt.END?this.endClef=t:this.clef=t;const a=this.getModifiers(b,_e.CATEGORY);return 0===a.length?this.addClef(t,e,i,b):a[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const b=this.getModifiers(i,xe.CATEGORY);return 0===b.length?this.addKeySignature(t,e,i):b[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const b=this.getModifiers(i,ve.CATEGORY);return 0===b.length?this.addTimeSignature(t,e,i):b[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new xe(t,e).setPosition(i),i),this}addClef(t,e,i,b){return void 0===b||b===wt.BEGIN?this.clef=t:b===wt.END&&(this.endClef=t),this.addModifier(new _e(t,e,i),b),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new ve(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,b=void 0===e;return i&&b?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):b?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let b=0;be[t[b+1].getCategory()]){const e=t[b];t[b]=t[b+1],t[b+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),b=this.getModifiers(wt.END);let a,n,l;this.sortByCategory(i,we),this.sortByCategory(b,ze),i.length>1&&t.getType()===zt.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new kt(zt.SINGLE))),b.indexOf(e)>0&&b.splice(0,0,new kt(zt.NONE));let o=0,r=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;a=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,a),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new g("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new g("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new g("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new g("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const b=t.getModifiers(wt.BEGIN,e);b.length>0&&b[0].getX()>i&&(i=b[0].getX())}));let b=0;t.forEach((t=>{b=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>b&&(b=i-t.getX())}));const a=t.getModifiers(wt.BEGIN);let n=!1;a.forEach((t=>{t.getCategory()===e&&(n=!0),n&&b>0&&t.setX(t.getX()+b)})),t.setNoteStartX(t.getNoteStartX()+b)}))};t.forEach((t=>{t.formatted||t.format()})),e(x.Clef),e(x.KeySignature),e(x.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==zt.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==zt.REPEAT_BEGIN&&t.setX(i)}))}))}}function De(t,e,i,b,a){if(e!==Ce.type.BOLD_DOUBLE_LEFT&&e!==Ce.type.BOLD_DOUBLE_RIGHT)throw new g("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let n=3,s=3.5;e===Ce.type.BOLD_DOUBLE_RIGHT&&(n=-5,s=3),t.fillRect(i+n,b,1,a-b),t.fillRect(i-2,b,s,a-b)}Be.TEXT_FONT={family:F.SANS_SERIF,size:8,weight:E.NORMAL,style:P.NORMAL};class Ce extends R{static get CATEGORY(){return x.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Ce.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Ce.typeString[t]:t;return Object.values(Ce.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new g("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,b=this.width,a=this.top_stave.getX();(this.type===Ce.type.SINGLE_RIGHT||this.type===Ce.type.BOLD_DOUBLE_RIGHT||this.type===Ce.type.THIN_DOUBLE)&&(a=this.top_stave.getX()+this.top_stave.getWidth());let n=i-e;switch(this.type){case Ce.type.SINGLE:case Ce.type.SINGLE_LEFT:case Ce.type.SINGLE_RIGHT:b=1;break;case Ce.type.DOUBLE:a-=this.width+2,e-=this.thickness,n+=.5;break;case Ce.type.BRACE:{b=12;const a=this.top_stave.getX()-2+this.x_shift,s=e,l=a,o=i,r=a-b,h=s+n/2,m=r-.9*b,c=s+.2*n,d=a+1.1*b,_=h-.135*n,x=d,g=h+.135*n,y=m,p=o-.2*n,u=r-b,f=p,S=a+.4*b,T=h+.135*n,v=S,w=h-.135*n,z=u,B=c;t.beginPath(),t.moveTo(a,s),t.bezierCurveTo(m,c,d,_,r,h),t.bezierCurveTo(x,g,y,p,l,o),t.bezierCurveTo(u,f,S,T,r,h),t.bezierCurveTo(v,w,z,B,a,s),t.fill(),t.stroke();break}case Ce.type.BRACKET:e-=6,i+=6,n=i-e,Z.renderGlyph(t,a-5,e,40,"bracketTop"),Z.renderGlyph(t,a-5,i,40,"bracketBottom"),a-=this.width+2;break;case Ce.type.BOLD_DOUBLE_LEFT:De(t,this.type,a+this.x_shift,e,i-this.thickness);break;case Ce.type.BOLD_DOUBLE_RIGHT:De(t,this.type,a,e,i-this.thickness);break;case Ce.type.THIN_DOUBLE:b=1,n-=this.thickness;break;case Ce.type.NONE:break;default:throw new g("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Ce.type.BRACE&&this.type!==Ce.type.BOLD_DOUBLE_LEFT&&this.type!==Ce.type.BOLD_DOUBLE_RIGHT&&this.type!==Ce.type.NONE&&t.fillRect(a,e,b,n),this.type===Ce.type.THIN_DOUBLE&&t.fillRect(a-3,e,b,n),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;e{e.addToModifierContext(new de);const b=(new Kt).addTickable(e).preFormat(),a=b.getMetrics();return b.setX(t+a.totalLeftPx),t+b.getWidth()+a.totalRightPx+i}),e)}static plotDebugging(t,e,i,b,a,n){const s=i+(n=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},n)).stavePadding,l=e.contextGaps;t.save(),t.setFont(F.SANS_SERIF,8),l.gaps.forEach((e=>{var i,n,l;i=s+e.x1,n=s+e.x2,l="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(l),t.setFillStyle(l),t.setLineWidth(1),t.fillRect(i,b,Math.max(n-i,0),a-b),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),s+e.x1,a+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${l.total.toFixed(2)}`,s-20,a+27),t.restore()}static FormatAndDraw(t,e,i,b){let a={auto_beam:!1,align_rests:!1};"object"==typeof b?a=Object.assign(Object.assign({},a),b):"boolean"==typeof b&&(a.auto_beam=b);const n=new Xt(V.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(i),s=a.auto_beam?Re.applyAndGetBeams(n):[];return(new Pe).joinVoices([n]).formatToStave([n],e,{align_rests:a.align_rests,stave:e}),n.setStave(e).draw(t,e),s.forEach((e=>e.setContext(t).draw())),n.getBoundingBox()}static FormatAndDrawTab(t,e,i,b,a,n,s){let l={auto_beam:n,align_rests:!1};"object"==typeof s?l=Object.assign(Object.assign({},l),s):"boolean"==typeof s&&(l.auto_beam=s);const o=new Xt(V.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(a),r=new Xt(V.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(b),h=l.auto_beam?Re.applyAndGetBeams(o):[];(new Pe).joinVoices([o]).joinVoices([r]).formatToStave([o,r],i,{align_rests:l.align_rests}),o.draw(t,i),r.draw(t,e),h.forEach((e=>e.setContext(t).draw())),new Ce(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((b,a)=>{if(c(b)&&b.isRest()){if(b.getTuplet()&&!i)return;const n=b.getGlyphProps().position.toUpperCase();if("R/4"!==n&&"B/4"!==n)return;if(e||b.getBeam()){const e=b.getKeyProps()[0];if(0===a)e.line=Ee(t,e.line,a,!1);else if(a>0&&aPe.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,b=0,a=0;const n=[],s=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new g("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:l,map:o}=this.tickContexts;this.minTotalWidth=0,l.forEach((e=>{const l=o[e];l.preFormat(),l.getTickables().length{b+=t.getMetrics().width,a+=t.getTicks().value(),n.push(t.getMetrics().width),s.push(t.getTicks().value())}));const r=l.getWidth();this.minTotalWidth+=r})),this.hasMinTotalWidth=!0;const r=b>0?b/n.length:1/n.length,h=w(n.map((t=>Math.pow(t-r,2)))),m=Math.pow(h/n.length,.5)/r,c=a/s.length,d=w(s.map((t=>Math.pow(t-c,2)))),_=Math.pow(d/s.length,.5)/c,x=Math.max(_,m)*l.length*e,y=e*i;return this.minTotalWidth+Math.max(y,x)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new g("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new g("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new g("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===Xt.Mode.STRICT&&!i.isComplete())throw new g("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,z.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=Pe.getResolutionMultiplier(t),i=new Map,b=[];t.forEach((t=>{const a=new z(0,e);t.getTickables().forEach((t=>{const e=a.numerator;let n=i.get(t.getStave());if(n||(i.set(t.getStave(),{}),n=i.get(t.getStave())),!(n?n[e]:void 0)){const t=new de;b.push(t),n[e]=t}t.addToModifierContext(n[e]),a.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:b,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const b={},a=[],n=[],s=Pe.getResolutionMultiplier(t);return t.forEach(((t,l)=>{const o=new z(0,s);t.getTickables().forEach((t=>{const s=o.numerator;if(!b[s]){const t=e({tickID:s});n.push(t),b[s]=t,a.push(s)}i(t,b[s],l),o.add(t.getTicks())}))})),{map:b,array:n,list:a.sort(((t,e)=>t-e)),resolutionMultiplier:s}}(t,(t=>new Kt(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,b){const a=this.tickContexts;if(!a)throw new g("NoTickContexts","preFormat requires TickContexts");const{list:n,map:s}=a;this.lossHistory=[],i&&b&&i.forEach((t=>t.setStave(b).preFormat()));let l=0,o=0;this.minTotalWidth=0;let r=0;n.forEach((t=>{const e=s[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const b=e.getMaxTicks().value();r+=b;const a=e.getMetrics();l=l+o+a.totalLeftPx,e.setX(l),o=i-a.totalLeftPx}));const{globalSoftmax:h,softmaxFactor:m,maxIterations:c}=this.formatterOptions,d=w(n.map((t=>Math.pow(m,s[t].getMaxTicks().value()/r))));if(this.minTotalWidth=l+o,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const _=s[n[0]],x=s[n[n.length-1]];function y(t){return n.map(((e,i)=>{const b=s[e],a=b.getTickablesByVoice();let l;if(i>0){const e=s[n[i-1]];for(let o=i-1;o>=0;o--){const i=s[n[o]].getTickablesByVoice(),c=[];if(Object.keys(a).forEach((t=>{i[t]&&c.push(t)})),c.length>0){let n=0,s=1/0,o=0;if(c.forEach((t=>{const e=i[t].getTicks().value();e>n&&(l=i[t],n=e);const b=a[t],o=b.getX()-(b.getMetrics().modLeftPx+b.getMetrics().leftDisplacedHeadPx),r=i[t].getMetrics(),h=i[t].getX()+r.notePx+r.modRightPx+r.rightDisplacedHeadPx;s=Math.min(s,o-h)})),s=Math.min(s,b.getX()-(e.getX()+.05*t)),h){const e=r;o=Math.pow(m,n/e)/d*t}else void 0!==l&&(o=l.getVoice().softmax(n)*t);return{expectedDistance:o,maxNegativeShiftPx:s,fromTickable:l}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function u(t){const e=f/2;let i=0;return n.forEach(((b,a)=>{const n=s[b];if(a>0){const e=n.getX(),b=t[a],s=p(b.fromTickable).getX()+b.expectedDistance-(e+i);let l=0;s>0?i+=s:s<0&&(l=Math.min(b.maxNegativeShiftPx,Math.abs(s)),i+=-l),n.setX(e+i)}n.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-n.getX())}))})),x.getX()-_.getX()}const f=t-x.getMetrics().notePx-x.getMetrics().totalRightPx-_.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),z=S.lookupMetric("stave.padding");let B=f;const D=y(B);let C=u(D);if(1===n.length)return 0;const E=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=x&&x.getMaxTickable();if(i){const b=i.getVoice();if(b.getTicksUsed().value()>b.getTotalTicks().value())return 2*vN&&F>0||C+k1;)B-=C-N,k=P(B),A=k-(v-T),C=u(y(B)),F--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const b=t.list[i-1],a=t.map[b],n=t.map[e],s=a.getMetrics(),l=n.getMetrics(),o=a.getX()+s.notePx+s.totalRightPx,r=n.getX()-l.totalLeftPx,h=r-o;this.contextGaps.total+=h,this.contextGaps.gaps.push({x1:o,x2:r}),n.getFormatterMetrics().freedom.left=h,a.getFormatterMetrics().freedom.right=h})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,b,a)=>{const n=t.getTicks().clone().simplify().toString(),s=t.getMetrics(),l=t.getFormatterMetrics(),o=t.getX()+s.notePx+s.modRightPx+s.rightDisplacedHeadPx;let r=0;if(b{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),a=t.getFormatterMetrics();a.space.mean=i[e].mean,a.duration=e,a.iterations+=1,a.space.deviation=a.space.used-a.space.mean,b+=Math.pow(a.space.deviation,2)}))})),this.totalCost=Math.sqrt(b),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const b=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let a=0;return this.totalShift=0,i.list.forEach(((t,e,n)=>{const s=i.map[t],l=e>0?i.map[n[e-1]]:void 0,o=et.getFormatterMetrics().space.deviation)));r>0?a=-Math.min(s.getFormatterMetrics().freedom.right,Math.abs(r)):r<0&&(a=o?Math.min(o.getFormatterMetrics().freedom.right,Math.abs(r)):0),a*=b,this.totalShift+=a})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const b=Object.assign({align_rests:!1},i);this.voices=t;const a=this.formatterOptions.softmaxFactor;return a&&this.voices.forEach((t=>t.setSoftmaxFactor(a))),this.alignRests(t,b.align_rests),this.createTickContexts(t),this.preFormat(e,b.context,t,b.stave),b.stave&&this.postFormat(),this}formatToStave(t,e,i){const b=Object.assign({context:e.getContext()},i),a=e.getNoteEndX()-e.getNoteStartX()-Be.defaultPadding;return function(...t){Pe.DEBUG&&u("Vex.Flow.Formatter",t)}("Formatting voices to width: ",a),this.format(t,a,b)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var ke;Pe.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(ke||(ke={}));class Ae extends R{static get CATEGORY(){return x.Tuplet}static get LOCATION_TOP(){return ke.TOP}static get LOCATION_BOTTOM(){return ke.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new g("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new g("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=3*V.NOTATION_FONT_SCALE/5,this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||Ae.LOCATION_TOP),Pe.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=a(e,t),b=a(e,t);function a(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const n=a(e,t);i=n>i?n:i,b=n0&&(b=Math.min(n,b))}}}else{let t=Ae.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),b=i.checkStave().getYForLine(t)+Ae.metrics.noteHeadOffset;for(let t=0;tb&&(b=e)}}return b+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const b=(t,e)=>t+p(e.getMetrics().width);let a=this.numerator_glyphs.reduce(b,0);this.ratioed&&(a=this.denom_glyphs.reduce(b,a),a+=.32*this.point);const n=this.x_pos+this.width/2-a/2;if(this.bracketed){const e=this.width/2-a/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+a/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===Ae.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===Ae.LOCATION_BOTTOM?1:0),1,10*this.location))}const s=V.currentMusicFont().lookupMetric("digits.shiftY",0);let l=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,n+l,this.y_pos+this.point/3-2+s),l+=p(e.getMetrics().width)})),this.ratioed){const e=n+l+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),l+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,n+l,this.y_pos+this.point/3-2+s),l+=p(e.getMetrics().width)}))}}}function Ne(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?at.DOWN:at.UP}const Fe="L",Me="R",Oe="B";class Re extends R{static get CATEGORY(){return x.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new z).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new z(3,i)];if(i>4)return[new z(2,i)];if(i<=4)return[new z(1,i)]}return[new z(1,4)]}static applyAndGetBeams(t,e,i){return Re.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new z(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new g("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),b=t;let a=0,n=[],s=[];function l(){i.length-1>a?a+=1:a=0}!function(){let t=[],e=new z(0,1);b.forEach((b=>{if(t=[],b.shouldIgnoreTicks())return n.push(s),void(s=t);s.push(b);const o=i[a].clone(),r=(h=s,h.reduce(((t,e)=>e.getTicks().clone().add(t)),new z(0,1))).add(e);var h;const m=V.durationToNumber(b.getDuration())<8;if(m&&b.getTuplet()&&(o.numerator*=2),r.greaterThan(o)){if(!m){const e=s.pop();e&&t.push(e)}n.push(s);do{e=r.subtract(i[a]),l()}while(e.greaterThanEquals(i[a]));s=t}else r.equals(o)&&(n.push(s),e=new z(0,1),s=t,l())})),s.length>0&&n.push(s)}(),function(){const t=[];n.forEach((i=>{let b=[];i.forEach(((i,a,n)=>{const s=0===a||a===n.length-1,l=n[a-1],o=!e.beam_rests&&i.isRest(),r=e.beam_rests&&e.beam_middle_only&&i.isRest()&&s;let h=!1;if(e.maintain_stem_directions&&l&&!i.isRest()&&!l.isRest()){const t=l.getStemDirection();h=i.getStemDirection()!==t}const m=parseInt(i.getDuration(),10)<8;o||r||h||m?(b.length>0&&t.push(b),b=h?[i]:[]):b.push(i)})),b.length>0&&t.push(b)})),n=t}(),n.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const o=n.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),r=function(){const t=[];return n.forEach((e=>{let i;e.forEach((e=>{const b=e.getTuplet();b&&i!==b&&(i=b,t.push(i))}))})),t}(),h=[];return o.forEach((t=>{const i=new Re(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),h.push(i)})),r.forEach((t=>{const e=t.notes[0].stem_direction===at.DOWN?ke.BOTTOM:ke.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new g("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,b;this.stem_direction=t[0].getStemDirection();let a=this.stem_direction;if(e&&c(t[0]))a=Ne(t);else if(e&&_(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);a=e>-1?at.UP:at.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,b){return i+(t-e)*b}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:b,slope_iterations:a,slope_cost:n}}=this,s=t[0],l=function(t,e){const i=t.getStemExtents().topY,b=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-b)}(s,t[t.length-1]),o=(i-b)/a;let r=Number.MAX_VALUE,h=0,m=0;for(let a=b;a<=i;a+=o){let i=0,b=0;for(let n=1;na)&&(o=a,s=Math.min(...b.getYs()),l=b.getBeamCount())}let r=n/t.length;const h=b+l*(1.5*i),m=s+h*-e;e===at.DOWN&&rm&&(r=s-h),a?(e===at.DOWN&&r>a||e===at.UP&&r=8&&(h=-1!==this.break_on_indices.indexOf(o),this.render_options.secondary_break_ticks&&l>=this.render_options.secondary_break_ticks&&(l=0,h=!0));const m=r.getIntrinsicTicks(){const i=e.getStem();if(i){const b=e.getStemX();i.setNoteHeadXBounds(b,b),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let b=this.getBeamYToDraw();const a=i.getStemX(),n=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||a>0||(this.pos=b),s?this.matchSuccess():this.matchFail(b),{success:s,results:i,numMatches:a}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ge("Evaluating rule function:",t),!t)throw new g("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ge(i),new g("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const b=[];return e.matches=b,e.results&&e.results.forEach((t=>b.push(He(t)))),i.run&&e.success&&i.run({matches:b}),e}}function Xe(...t){Qe.DEBUG&&u("Vex.Flow.EasyScore",t)}Ye.DEBUG=!1;class je{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){Xe("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){Xe("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){Xe("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){Xe("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){Xe("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){Xe("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){Xe("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){Xe("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),Xe("endChord")}commitPiece(){Xe("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=p(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),b=p(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:a,duration:n,dots:s,type:l}=this.piece,o=et.accidentals,r=a.map((t=>{var e;return t.key+(o.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),h="auto"===i,m="g"==(null==l?void 0:l.toLowerCase())?t.GhostNote({duration:n,dots:s}):t.StaveNote({keys:r,duration:n,dots:s,type:l,clef:b,auto_stem:h});h||m.setStemDirection("up"===i?at.UP:at.DOWN);const c=[];a.forEach(((e,i)=>{const b=e.accid;if("string"==typeof b){const e=t.Accidental({type:b});m.addModifier(e,i),c.push(e)}else c.push(void 0)}));for(let t=0;tt(e,m,this))),this.elements.notes.push(m),this.elements.accidentals.push(c),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const b=t.factory,a=null!==(e=t.builder)&&void 0!==e?e:new Ke(b);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,ut.easyScoreHook,Rt.easyScoreHook],throwOnError:!1},t),{factory:b,builder:a}),this.factory=b,this.builder=a,this.grammar=new je(this.builder),this.parser=new Ye(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw Xe(i),new g("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends Wt{static get CATEGORY(){return x.GhostNote}constructor(t){if(!t)throw new g("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new g("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=li.type.TEXT&&t<=li.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,b=!1;this.notes.forEach(((a,n,s)=>{var l;b=!b;const o=a.getAbsoluteX(),r=a.checkStave().getYForBottomText(this.line+3);if(o{var b;e=!e;const a=i.checkStave(),n=i.getAbsoluteX(),s=a.getYForBottomText(this.line+3),l=null!==(b=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`))&&void 0!==b?b:V.NOTATION_FONT_SCALE;let o=0;e?this.custom_depress_text?(o=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,n-o/2,s)):si("pedal_depress",t,n,s,l):this.custom_release_text?(o=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,n-o/2,s)):si("pedal_release",t,n,s,l)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){li.DEBUG&&u("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===li.type.BRACKET||this.type===li.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===li.type.TEXT&&this.drawText(),t.restore()}}li.DEBUG=!1,li.TEXT_FONT={family:F.SERIF,size:12,weight:E.BOLD,style:P.ITALIC},li.GLYPHS={pedal_depress:{code:"keyboardPedalPed"},pedal_release:{code:"keyboardPedalUp"}},li.type={TEXT:1,BRACKET:2,MIXED:3},li.typeString={text:li.type.TEXT,bracket:li.type.BRACKET,mixed:li.type.MIXED};const oi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class ri extends ei{static get CATEGORY(){return x.RepeatNote}constructor(t,e,i){super(new Z(oi[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function hi(t,e,i,b,a,n,s){t.beginPath(),t.moveTo(e,i),t.lineTo(b,a),t.lineTo(n,s),t.lineTo(e,i),t.closePath(),t.fill()}class mi extends R{static get CATEGORY(){return x.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:mi.TextVerticalPosition.TOP,text_justification:mi.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new g("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new g("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const b=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,a=e.x,n=e.y,s=i.x,l=i.y,o=Math.sqrt((s-a)*(s-a)+(l-n)*(l-n)),r=(o-this.render_options.arrowhead_length/3)/o;let h,m,c,d;this.render_options.draw_end_arrow||b?(h=Math.round(a+(s-a)*r),m=Math.round(n+(l-n)*r)):(h=s,m=l),this.render_options.draw_start_arrow||b?(c=a+(s-a)*(1-r),d=n+(l-n)*(1-r)):(c=a,d=n),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(c,d),t.lineTo(h,m),t.stroke(),t.closePath();const _=Math.atan2(l-n,s-a),x=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let g,y,p,u,f,S;(this.render_options.draw_end_arrow||b)&&(g=_+Math.PI+this.render_options.arrowhead_angle,p=s+Math.cos(g)*x,u=l+Math.sin(g)*x,y=_+Math.PI-this.render_options.arrowhead_angle,f=s+Math.cos(y)*x,S=l+Math.sin(y)*x,hi(t,p,u,s,l,f,S)),(this.render_options.draw_start_arrow||b)&&(g=_+this.render_options.arrowhead_angle,p=a+Math.cos(g)*x,u=n+Math.sin(g)*x,y=_-this.render_options.arrowhead_angle,f=a+Math.cos(y)*x,S=n+Math.sin(y)*x,hi(t,p,u,a,n,f,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,b=this.render_options;t.save(),this.applyLineStyle();let a={x:0,y:0},n={x:0,y:0};this.first_indices.forEach(((s,l)=>{const o=this.last_indices[l];a=e.getModifierStartXY(2,s),n=i.getModifierStartXY(1,o);const r=a.y>n.y;a.x+=e.getMetrics().modRightPx+b.padding_left,n.x-=i.getMetrics().modLeftPx+b.padding_right;const h=e.getGlyphProps().getWidth();e.getKeyProps()[s].displaced&&1===e.getStemDirection()&&(a.x+=h+b.padding_left);i.getKeyProps()[o].displaced&&-1===i.getStemDirection()&&(n.x-=h+b.padding_right),a.y+=r?-3:1,n.y+=r?2:0,this.drawArrowLine(t,a,n)})),t.restore();const s=t.measureText(this.text).width,l=b.text_justification;let o=0;if(l===mi.TextJustification.LEFT)o=a.x;else if(l===mi.TextJustification.CENTER){o=(n.x-a.x)/2+a.x-s/2}else l===mi.TextJustification.RIGHT&&(o=n.x-s);let r=0;const h=b.text_position_vertical;return h===mi.TextVerticalPosition.TOP?r=e.checkStave().getYForTopText():h===mi.TextVerticalPosition.BOTTOM&&(r=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,o,r),t.restore(),this}}mi.TEXT_FONT=Object.assign({},R.TEXT_FONT),mi.TextVerticalPosition={TOP:1,BOTTOM:2},mi.TextJustification=se;class ci extends R{static get CATEGORY(){return x.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new g("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),b=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),a=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),n=this.getContext();return a.voices.forEach((t=>{t.setContext(n).setStave(b).getTickables().forEach((t=>t.setStave(b))),this.partVoices.push(t)})),this.partStaves.push(b),this.partStaveInfos.push(a),b}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new Pe(t);this.formatter=i;let b=this.options.y,a=0;const n=[];this.partStaves.forEach(((t,e)=>{b+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(b),b+=t.space(this.partStaveInfos[e].spaceBelow),b+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(n.push({y:b,stave:t}),b+=15),a=Math.max(a,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(a))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Be.rightPadding+(a-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(a-this.options.x):this.options.width-(a-this.options.x)-Be.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class di extends Wt{static get CATEGORY(){return x.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new g("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=at.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:b}}=this,a=this.checkContext(),n=null==e&&b;if(i.flag&&n){const e=this.getStemX(),i=this.getStemDirection()===at.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(a,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{l(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),b=this.render_options.draw_stem,a=this.render_options.draw_stem_through_stave;if(b&&a){const b=function(t,e,i,b){const a=1!==b,n=-1!==b,s=i.getSpacingBetweenLines(),l=i.getNumLines(),o=[];return e.forEach((e=>{const r=e.indexOf(l)>-1,h=e.indexOf(1)>-1;if(a&&h||n&&r)return;1===e.length&&e.push(e[0]);const m=[];e.forEach(((e,a,n)=>{const o=1===e,r=e===l;let h=i.getYForLine(e-1);0!==a||o?a!==n.length-1||r||(h+=s/2-1):h-=s/2-1,m.push(h),1===b&&o?m.push(t-2):-1===b&&r&&m.push(t+2)})),o.push(m.sort(((t,e)=>t-e)))})),o}(e,function(t,e){const i=[];let b=[];for(let a=1;a<=t;a++)e.indexOf(a)>-1?(i.push(b),b=[]):b.push(a);return b.length>0&&i.push(b),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(at.WIDTH),b.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),b=this.ys;for(let a=0;a{const i=ui.GLYPHS[e];if(!i)throw new g("Invalid dynamics character: "+e);const b=p(this.render_options.glyph_font_size),a=new Z(i.code,b,{category:"textNote"});this.glyphs.push(a),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);pi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,b)=>{const a=this.sequence[b];t.render(this.checkContext(),i,e),i+=ui.GLYPHS[a].width}))}}ui.DEBUG=!1;class fi extends vt{static get CATEGORY(){return x.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new ve(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends R{static get CATEGORY(){return x.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,b=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=b-i,function(...t){Si.DEBUG&&u("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",b,"y:",e),me.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&u("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:b}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new g("renderer.elementId not set in FactoryOptions");let a=this.options.renderer.backend;if(void 0===a){a=qt(document.getElementById(t))?oe.Backends.CANVAS:oe.Backends.SVG}this.context=oe.buildContext(t,a,e,i,b)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),b=new Be(i.x,i.y,i.width,i.options);return this.staves.push(b),b.setContext(this.context),this.stave=b,b}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),b=new _i(i.x,i.y,i.width,i.options);return this.staves.push(b),b.setContext(this.context),this.stave=b,b}StaveNote(t){const e=new It(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const b=new ei(t,e,i);return this.stave&&b.setStave(this.stave),b.setContext(this.context),this.renderQ.push(b),b}RepeatNote(t,e,i){const b=new ri(t,e,i);return this.stave&&b.setStave(this.stave),b.setContext(this.context),this.renderQ.push(b),b}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new ue(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new At(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new Le(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new fi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new bi(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new di(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new jt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new bt(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ht.CENTER,vJustify:mt.BOTTOM},t),i=new ct(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Mt;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new ut(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),b=new $t(t);return b.setPosition(i.position),i.upperAccidental&&b.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&b.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&b.setDelayed(i.delayed),b.setContext(this.context),b}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new ui({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Rt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new re(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Kt}ModifierContext(){return new de}MultiMeasureRest(t){const e=p(t.number_of_measures,"NoNumberOfMeasures"),i=new ni(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new Xt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Ce(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new Pe(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new Ae(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,b,a,n;const s=new Re(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return s.breakSecondaryAt(null!==(b=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==b?b:[]),(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections)&&Object.entries(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections).forEach((([t,e])=>{s.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(s),s}Curve(t){const e=new Ie(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Gt({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const b=new mi({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&b.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&b.setFont(t.options.font),b.setContext(this.context),this.renderQ.push(b),b}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new yi({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new ci(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new li(e.notes);return i.setType(li.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},R.TEXT_FONT);class wi extends di{static get CATEGORY(){return x.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${F.SANS_SERIF}`}),this.updateWidth()}}class zi{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new g("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;eb?Di.SLIDE_DOWN:Di.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new g("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,b=t.first_ys,a=t.last_x_px,n=t.direction;if(n!==Di.SLIDE_UP&&n!==Di.SLIDE_DOWN)throw new g("BadSlide","Invalid slide direction");const s=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new g("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),b=Number(t);if(b<0)throw new g("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+b}getNoteForFret(t,e){const i=this.getValueForFret(t,e),b=Math.floor(i/12),a=i%12;return`${V.integerToNote(a)}/${b}`}}var Pi=function(t,e,i,b){return new(i||(i=Promise))((function(a,n){function s(t){try{o(b.next(t))}catch(t){n(t)}}function l(t){try{o(b.throw(t))}catch(t){n(t)}}function o(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,l)}o((b=b.apply(t,e||[])).next())}))};class ki{static get BUILD(){return{VERSION:"4.2.2",ID:"7ad933bdf12b4137ce04d3f332a838887d08a595",DATE:"2023-07-03T19:56:22.952Z"}}static setMusicFont(...t){const e=t.map((t=>F.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return Pi(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static getMusicFontStack(){return V.MUSIC_FONT_STACK}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}ki.Accidental=bt,ki.Annotation=ct,ki.Articulation=ut,ki.Barline=kt,ki.BarNote=At,ki.Beam=Re,ki.Bend=Nt,ki.BoundingBox=D,ki.BoundingBoxComputation=C,ki.CanvasContext=Zt,ki.ChordSymbol=Mt,ki.Clef=_e,ki.ClefNote=Le,ki.Crescendo=We,ki.Curve=Ie,ki.Dot=Ot,ki.EasyScore=Qe,ki.Element=R,ki.Factory=vi,ki.Font=F,ki.Formatter=Pe,ki.Fraction=z,ki.FretHandFinger=Rt,ki.GhostNote=ti,ki.Glyph=Z,ki.GlyphNote=ei,ki.GraceNote=ii,ki.GraceNoteGroup=jt,ki.GraceTabNote=wi,ki.KeyManager=zi,ki.KeySignature=xe,ki.KeySigNote=bi,ki.Modifier=tt,ki.ModifierContext=de,ki.MultiMeasureRest=ni,ki.Music=et,ki.Note=vt,ki.NoteHead=Lt,ki.NoteSubGroup=Vt,ki.Ornament=$t,ki.Parenthesis=Jt,ki.Parser=Ye,ki.PedalMarking=li,ki.Registry=O,ki.RenderContext=ft,ki.Renderer=oe,ki.RepeatNote=ri,ki.Repetition=ge,ki.Stave=Be,ki.StaveConnector=Ce,ki.StaveHairpin=Bi,ki.StaveLine=mi,ki.StaveModifier=Pt,ki.StaveNote=It,ki.StaveTempo=pe,ki.StaveText=fe,ki.StaveTie=Gt,ki.Stem=at,ki.StringNumber=re,ki.Stroke=he,ki.SVGContext=be,ki.System=ci,ki.TabNote=di,ki.TabSlide=Di,ki.TabStave=_i,ki.TabTie=Ht,ki.TextBracket=yi,ki.TextDynamics=ui,ki.TextFormatter=rt,ki.TextNote=ue,ki.TickContext=Kt,ki.TimeSignature=ve,ki.TimeSigNote=fi,ki.Tremolo=Ci,ki.Tuning=Ei,ki.Tuplet=Ae,ki.Vibrato=me,ki.VibratoBracket=Si,ki.Voice=Xt,ki.Volta=Se,ki.AnnotationHorizontalJustify=ht,ki.AnnotationVerticalJustify=mt,ki.ChordSymbolHorizontalJustify=Bt,ki.ChordSymbolVerticalJustify=Dt,ki.SymbolTypes=Ct,ki.SymbolModifiers=Et,ki.CurvePosition=Ue,ki.FontWeight=E,ki.FontStyle=P,ki.ModifierPosition=J,ki.RendererBackends=ae,ki.RendererLineEndType=ne,ki.BarlineType=zt,ki.StaveModifierPosition=wt,ki.VoltaType=le,ki.TextBracketPosition=gi,ki.TextJustification=se,ki.VoiceMode=Yt;const Ai={glyphs:{bracketTop:{x_min:0,x_max:469,y_min:0,y_max:295,ha:295,o:"m 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z"},bracketBottom:{x_min:0,x_max:469,y_min:-295,y_max:0,ha:295,o:"m 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z"},barlineTick:{x_min:0,x_max:36,y_min:868,y_max:1120,ha:252,o:"m 52 1250 l 52 1613 l 0 1613 l 0 1250 z"},breathMarkTick:{x_min:0,x_max:500,y_min:0,y_max:502,ha:502,o:"m 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z"},segno:{x_min:4,x_max:550,y_min:-27,y_max:759,ha:786,o:"m 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z"},coda:{x_min:-4,x_max:955,y_min:-158,y_max:898,ha:1056,o:"m 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z"},gClef:{x_min:0,x_max:671,y_min:-658,y_max:1098,ha:1756,o:"m 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z"},cClef:{x_min:0,x_max:699,y_min:-506,y_max:506,ha:1012,o:"m 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z"},fClef:{x_min:-5,x_max:684,y_min:-635,y_max:262,ha:897,o:"m 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z"},unpitchedPercussionClef1:{x_min:0,x_max:382,y_min:-250,y_max:250,ha:500,o:"m 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z"},"6stringTabClef":{x_min:-3,x_max:408,y_min:-748,y_max:764,ha:1512,o:"m 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z"},timeSig0:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z"},timeSig1:{x_min:20,x_max:314,y_min:-250,y_max:251,ha:501,o:"m 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z"},timeSig2:{x_min:20,x_max:426,y_min:-257,y_max:254,ha:511,o:"m 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z"},timeSig3:{x_min:20,x_max:401,y_min:-251,y_max:249,ha:500,o:"m 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z"},timeSig4:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z"},timeSig5:{x_min:20,x_max:383,y_min:-251,y_max:246,ha:497,o:"m 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z"},timeSig6:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z"},timeSig7:{x_min:20,x_max:421,y_min:-250,y_max:249,ha:499,o:"m 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z"},timeSig8:{x_min:20,x_max:416,y_min:-259,y_max:259,ha:518,o:"m 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z"},timeSig9:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z"},timeSigCommon:{x_min:5,x_max:424,y_min:-249,y_max:251,ha:500,o:"m 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z"},timeSigCutCommon:{x_min:0,x_max:418,y_min:-359,y_max:361,ha:720,o:"m 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z"},timeSigPlus:{x_min:-1,x_max:499,y_min:-250,y_max:250,ha:500,o:"m 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z"},timeSigPlusSmall:{x_min:-1,x_max:255,y_min:-133,y_max:123,ha:256,o:"m 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z"},timeSigMinus:{x_min:0,x_max:448,y_min:-35,y_max:40,ha:75,o:"m 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z"},timeSigParensRight:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z"},timeSigParensRightSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z"},timeSigParensLeft:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z"},timeSigParensLeftSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z"},noteheadDoubleWhole:{x_min:0,x_max:599,y_min:-155,y_max:155,ha:310,o:"m 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z"},noteheadWhole:{x_min:0,x_max:422,y_min:-125,y_max:125,ha:250,o:"m 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z"},noteheadHalf:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z"},noteheadBlack:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z"},noteheadXDoubleWhole:{x_min:0,x_max:546,y_min:-155,y_max:155,ha:310,o:"m 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z"},noteheadXWhole:{x_min:0,x_max:377,y_min:-125,y_max:125,ha:250,o:"m 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z"},noteheadXHalf:{x_min:0,x_max:334,y_min:-125,y_max:125,ha:250,o:"m 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z"},noteheadXBlack:{x_min:0,x_max:290,y_min:-125,y_max:125,ha:250,o:"m 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:422,y_min:-155,y_max:155,ha:310,o:"m 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z"},noteheadCircleXWhole:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z"},noteheadCircleXHalf:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z"},noteheadCircleX:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:603,y_min:-218,y_max:213,ha:431,o:"m 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z"},noteheadCircledWhole:{x_min:0,x_max:437,y_min:-225,y_max:211,ha:436,o:"m 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z"},noteheadCircledHalf:{x_min:-18,x_max:311,y_min:-162,y_max:167,ha:329,o:"m 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z"},noteheadCircledBlack:{x_min:-21,x_max:321,y_min:-171,y_max:167,ha:338,o:"m 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:416,y_min:-190,y_max:198,ha:388,o:"m 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z"},noteheadSquareWhite:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z"},noteheadSquareBlack:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z"},noteheadTriangleDownWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z"},noteheadTriangleDownHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z"},noteheadTriangleDownBlack:{x_min:0,x_max:292,y_min:-125,y_max:125,ha:250,o:"m 207 -180 l 420 180 l 0 180 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z"},noteheadTriangleUpWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z"},noteheadTriangleUpHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z"},noteheadTriangleUpBlack:{x_min:0,x_max:293,y_min:-125,y_max:125,ha:250,o:"m 422 -180 l 207 180 l 0 -180 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:596,y_min:-179,y_max:168,ha:347,o:"m 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z"},noteheadSlashedWhole1:{x_min:-22,x_max:433,y_min:-157,y_max:148,ha:305,o:"m 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z"},noteheadSlashedHalf1:{x_min:-67,x_max:386,y_min:-142,y_max:160,ha:302,o:"m 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z"},noteheadSlashedBlack1:{x_min:-80,x_max:375,y_min:-165,y_max:167,ha:332,o:"m 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:596,y_min:-178,y_max:169,ha:347,o:"m 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z"},noteheadSlashedWhole2:{x_min:-18,x_max:436,y_min:-154,y_max:151,ha:305,o:"m 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z"},noteheadSlashedHalf2:{x_min:-73,x_max:380,y_min:-134,y_max:168,ha:302,o:"m 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z"},noteheadSlashedBlack2:{x_min:-79,x_max:376,y_min:-164,y_max:168,ha:332,o:"m 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:432,y_min:-155,y_max:155,ha:310,o:"m 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z"},noteheadDiamondWhole:{x_min:0,x_max:270,y_min:-125,y_max:125,ha:250,o:"m 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z"},noteheadDiamondHalf:{x_min:0,x_max:251,y_min:-125,y_max:125,ha:250,o:"m 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z"},noteheadDiamondBlack:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z"},noteheadParenthesis:{x_min:-73,x_max:368,y_min:-180,y_max:182,ha:362,o:"m 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z"},noteheadParenthesisRight:{x_min:-36,x_max:73,y_min:-181,y_max:181,ha:362,o:"m -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z"},noteheadParenthesisLeft:{x_min:0,x_max:109,y_min:-181,y_max:181,ha:362,o:"m 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z"},noteheadMoonBlack:{x_min:0,x_max:315,y_min:-125,y_max:125,ha:250,o:"m 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 -180 l 0 180 l 0 -180 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 180 l 0 -180 l 488 -180 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:278,y_min:-125,y_max:125,ha:250,o:"m 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z"},tremolo1:{x_min:-150,x_max:150,y_min:-93,y_max:94,ha:187,o:"m 216 -45 l 216 135 l -216 46 l -216 -134 z"},flag8thUp:{x_min:0,x_max:264,y_min:-810,y_max:9,ha:819,o:"m 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z"},flag8thDown:{x_min:0,x_max:306,y_min:-14,y_max:808,ha:822,o:"m 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z"},flag16thUp:{x_min:0,x_max:279,y_min:-813,y_max:2,ha:815,o:"m 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z"},flag16thDown:{x_min:0,x_max:291,y_min:-9,y_max:812,ha:821,o:"m 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z"},flag32ndUp:{x_min:0,x_max:261,y_min:-812,y_max:149,ha:961,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag32ndDown:{x_min:0,x_max:273,y_min:-172,y_max:812,ha:984,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z"},flag64thUp:{x_min:0,x_max:261,y_min:-812,y_max:347,ha:1159,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag64thDown:{x_min:0,x_max:273,y_min:-376,y_max:812,ha:1188,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z"},flag128thUp:{x_min:0,x_max:261,y_min:-812,y_max:533,ha:1345,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag128thDown:{x_min:0,x_max:273,y_min:-580,y_max:812,ha:1392,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z"},accidentalFlat:{x_min:0,x_max:226,y_min:-175,y_max:439,ha:614,o:"m 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z"},accidentalNatural:{x_min:0,x_max:168,y_min:-335,y_max:341,ha:676,o:"m 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z"},accidentalSharp:{x_min:0,x_max:249,y_min:-348,y_max:350,ha:698,o:"m 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z"},accidentalDoubleSharp:{x_min:0,x_max:247,y_min:-125,y_max:127,ha:252,o:"m 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z"},accidentalDoubleFlat:{x_min:0,x_max:411,y_min:-175,y_max:437,ha:612,o:"m 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z"},accidentalParensLeft:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z"},accidentalParensRight:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z"},accidentalQuarterToneFlatStein:{x_min:1,x_max:227,y_min:-175,y_max:439,ha:614,o:"m 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:1,x_max:466,y_min:-175,y_max:439,ha:614,o:"m 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:179,y_min:-353,y_max:307,ha:660,o:"m 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z"},accidentalThreeQuarterTonesSharpStein:{x_min:3,x_max:317,y_min:-347,y_max:369,ha:716,o:"m 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z"},accidentalBuyukMucennebFlat:{x_min:1,x_max:287,y_min:-174,y_max:438,ha:612,o:"m 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:341,y_min:-350,y_max:348,ha:698,o:"m 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z"},accidentalBakiyeFlat:{x_min:-1,x_max:286,y_min:-175,y_max:439,ha:614,o:"m 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z"},accidentalKomaSharp:{x_min:0,x_max:229,y_min:-337,y_max:322,ha:659,o:"m 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z"},accidentalKucukMucennebSharp:{x_min:-1,x_max:339,y_min:-338,y_max:321,ha:659,o:"m 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z"},accidentalKoron:{x_min:0,x_max:300,y_min:-472,y_max:157,ha:629,o:"m 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z"},accidentalSori:{x_min:0,x_max:421,y_min:-318,y_max:328,ha:646,o:"m 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z"},articAccentAbove:{x_min:0,x_max:339,y_min:1,y_max:245,ha:244,o:"m 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z"},articAccentBelow:{x_min:0,x_max:339,y_min:-244,y_max:0,ha:244,o:"m 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z"},articTenutoAbove:{x_min:-1,x_max:338,y_min:0,y_max:48,ha:48,o:"m 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z"},articTenutoBelow:{x_min:-1,x_max:338,y_min:-48,y_max:0,ha:48,o:"m 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z"},articStaccatoAbove:{x_min:0,x_max:84,y_min:0,y_max:84,ha:84,o:"m 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z"},articStaccatoBelow:{x_min:0,x_max:84,y_min:-84,y_max:0,ha:84,o:"m 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z"},articStaccatissimoAbove:{x_min:1,x_max:100,y_min:-2,y_max:293,ha:295,o:"m 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z"},articStaccatissimoBelow:{x_min:1,x_max:100,y_min:-295,y_max:0,ha:295,o:"m 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z"},articMarcatoAbove:{x_min:-1,x_max:235,y_min:-1,y_max:253,ha:254,o:"m 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z"},articMarcatoBelow:{x_min:-1,x_max:235,y_min:-254,y_max:0,ha:254,o:"m 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z"},fermataAbove:{x_min:3,x_max:605,y_min:-3,y_max:329,ha:332,o:"m 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z"},fermataBelow:{x_min:3,x_max:605,y_min:-332,y_max:0,ha:332,o:"m 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z"},fermataLongAbove:{x_min:0,x_max:603,y_min:-1,y_max:333,ha:334,o:"m 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z"},fermataLongBelow:{x_min:0,x_max:603,y_min:-333,y_max:1,ha:334,o:"m 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:0,y_max:408,ha:408,o:"m 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z"},fermataVeryLongBelow:{x_min:0,x_max:715,y_min:-408,y_max:0,ha:408,o:"m 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z"},fermataVeryShortAbove:{x_min:0,x_max:726,y_min:0,y_max:449,ha:449,o:"m 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z"},fermataVeryShortBelow:{x_min:0,x_max:726,y_min:-449,y_max:0,ha:449,o:"m 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z"},fermataShortAbove:{x_min:0,x_max:604,y_min:0,y_max:341,ha:341,o:"m 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z"},fermataShortBelow:{x_min:0,x_max:604,y_min:-341,y_max:0,ha:341,o:"m 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z"},breathMarkComma:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},breathMarkUpbow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},caesura:{x_min:0,x_max:384,y_min:-1,y_max:532,ha:533,o:"m 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z"},caesuraCurved:{x_min:0,x_max:373,y_min:0,y_max:530,ha:530,o:"m 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z"},restMaxima:{x_min:0,x_max:381,y_min:-249,y_max:250,ha:499,o:"m 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:0,y_max:250,ha:250,o:"m 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z"},restWhole:{x_min:0,x_max:282,y_min:-135,y_max:9,ha:144,o:"m 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z"},restWholeLegerLine:{x_min:-117,x_max:399,y_min:-135,y_max:20,ha:155,o:"m -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z"},restHalf:{x_min:0,x_max:282,y_min:-2,y_max:142,ha:144,o:"m 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z"},restHalfLegerLine:{x_min:-117,x_max:399,y_min:-13,y_max:142,ha:155,o:"m 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z"},restQuarter:{x_min:1,x_max:270,y_min:-375,y_max:373,ha:748,o:"m 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z"},rest8th:{x_min:0,x_max:247,y_min:-251,y_max:174,ha:425,o:"m 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z"},rest16th:{x_min:0,x_max:320,y_min:-500,y_max:179,ha:679,o:"m 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z"},rest32nd:{x_min:0,x_max:363,y_min:-500,y_max:426,ha:926,o:"m 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z"},rest64th:{x_min:0,x_max:423,y_min:-753,y_max:430,ha:1183,o:"m 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z"},rest128th:{x_min:0,x_max:485,y_min:-750,y_max:689,ha:1439,o:"m 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z"},dynamicPiano:{x_min:-89,x_max:366,y_min:-142,y_max:274,ha:416,o:"m 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z"},dynamicMezzo:{x_min:-20,x_max:446,y_min:-10,y_max:274,ha:284,o:"m 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z"},dynamicForte:{x_min:-141,x_max:364,y_min:-152,y_max:444,ha:596,o:"m 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z"},dynamicRinforzando:{x_min:-20,x_max:277,y_min:0,y_max:274,ha:274,o:"m 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z"},dynamicSforzando:{x_min:0,x_max:229,y_min:-10,y_max:273,ha:283,o:"m 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z"},dynamicZ:{x_min:-30,x_max:244,y_min:-10,y_max:268,ha:278,o:"m 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z"},ornamentTrill:{x_min:0,x_max:521,y_min:-10,y_max:390,ha:400,o:"m 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z"},ornamentTurn:{x_min:0,x_max:460,y_min:0,y_max:218,ha:218,o:"m 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z"},ornamentTurnSlash:{x_min:0,x_max:460,y_min:-90,y_max:306,ha:396,o:"m 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z"},ornamentMordent:{x_min:1,x_max:729,y_min:-73,y_max:319,ha:392,o:"m 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z"},ornamentShortTrill:{x_min:0,x_max:725,y_min:0,y_max:245,ha:245,o:"m 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z"},ornamentTremblement:{x_min:1,x_max:985,y_min:0,y_max:244,ha:244,o:"m 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1119,y_min:0,y_max:481,ha:481,o:"m 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:2,x_max:1150,y_min:-367,y_max:245,ha:612,o:"m 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1048,y_min:-367,y_max:331,ha:698,o:"m 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:949,y_min:0,y_max:381,ha:381,o:"m 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1278,y_min:0,y_max:247,ha:247,o:"m 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1277,y_min:-62,y_max:333,ha:395,o:"m 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:859,y_min:-222,y_max:246,ha:468,o:"m 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z"},brassScoop:{x_min:1,x_max:320,y_min:-373,y_max:13,ha:386,o:"m 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z"},brassDoitMedium:{x_min:0,x_max:489,y_min:-40,y_max:346,ha:386,o:"m 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z"},brassFallLipShort:{x_min:1,x_max:293,y_min:-345,y_max:42,ha:387,o:"m 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z"},brassLiftMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z"},brassFallRoughMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z"},brassBend:{x_min:0,x_max:392,y_min:0,y_max:282,ha:282,o:"m 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z"},brassMuteClosed:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},brassMuteOpen:{x_min:0,x_max:304,y_min:0,y_max:304,ha:304,o:"m 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z"},brassFlip:{x_min:0,x_max:379,y_min:0,y_max:282,ha:282,o:"m 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z"},brassJazzTurn:{x_min:0,x_max:620,y_min:0,y_max:245,ha:245,o:"m 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z"},brassSmear:{x_min:1,x_max:306,y_min:0,y_max:170,ha:170,o:"m 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z"},stringsDownBow:{x_min:0,x_max:312,y_min:0,y_max:318,ha:318,o:"m 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z"},stringsUpBow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},stringsHarmonic:{x_min:0,x_max:200,y_min:0,y_max:200,ha:200,o:"m 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},keyboardPedalPed:{x_min:0,x_max:1019,y_min:-8,y_max:555,ha:563,o:"m 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z"},keyboardPedalUp:{x_min:0,x_max:450,y_min:0,y_max:450,ha:450,o:"m 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z"},pictChokeCymbal:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},wiggleArpeggiatoUp:{x_min:-33,x_max:292,y_min:0,y_max:119,ha:119,o:"m 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z"},arrowheadBlackUp:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z"},arrowheadBlackDown:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z"},arpeggiatoUp:{x_min:1,x_max:229,y_min:7,y_max:1511,ha:1504,o:"m 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z"},arpeggiatoDown:{x_min:1,x_max:229,y_min:-4,y_max:1500,ha:1504,o:"m 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z"},repeat1Bar:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z"},repeat2Bars:{x_min:0,x_max:762,y_min:-250,y_max:279,ha:529,o:"m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z"},repeat4Bars:{x_min:0,x_max:1232,y_min:-250,y_max:279,ha:529,o:"m 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z"},repeatBarSlash:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z"},csymDiminished:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z"},csymHalfDiminished:{x_min:-16,x_max:488,y_min:-15,y_max:489,ha:504,o:"m 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z"},csymAugmented:{x_min:0,x_max:395,y_min:1,y_max:396,ha:395,o:"m 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z"},csymMajorSeventh:{x_min:0,x_max:558,y_min:1,y_max:477,ha:476,o:"m 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z"},csymMinor:{x_min:0,x_max:325,y_min:216,y_max:260,ha:44,o:"m 468 374 l 0 374 l 0 311 l 468 311 z"},csymParensLeftTall:{x_min:1,x_max:185,y_min:0,y_max:997,ha:997,o:"m 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z"},csymParensRightTall:{x_min:-20,x_max:164,y_min:0,y_max:997,ha:997,o:"m -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z"},csymBracketLeftTall:{x_min:0,x_max:155,y_min:0,y_max:1e3,ha:1e3,o:"m 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z"},csymBracketRightTall:{x_min:1,x_max:156,y_min:0,y_max:1e3,ha:1e3,o:"m 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:122,y_min:0,y_max:993,ha:993,o:"m 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z"},csymParensRightVeryTall:{x_min:-15,x_max:107,y_min:0,y_max:993,ha:993,o:"m -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:999,y_min:0,y_max:1e3,ha:1e3,o:"m 1439 1380 l 1377 1440 l 0 60 l 62 0 z"},accSagittal5v7KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z"},accSagittal5v7KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z"},accSagittal5CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z"},accSagittal5CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z"},accSagittal7CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z"},accSagittal7CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z"},accSagittal25SmallDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z"},accSagittal25SmallDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z"},accSagittal35MediumDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z"},accSagittal35MediumDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal11MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z"},accSagittal11MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z"},accSagittal11LargeDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal11LargeDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp25SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z"},accSagittalFlat25SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z"},accSagittalSharp7CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z"},accSagittalFlat7CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp5CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat5CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z"},accSagittalSharp5v7kDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z"},accSagittalFlat5v7kUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z"},accSagittalSharp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z"},accSagittalFlat:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z"},accSagittalSharp5v7kUp:{x_min:0,x_max:312,y_min:-361,y_max:172,ha:533,o:"m 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z"},accSagittalFlat5v7kDown:{x_min:0,x_max:312,y_min:-172,y_max:361,ha:533,o:"m 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z"},accSagittalSharp5CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z"},accSagittalFlat5CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z"},accSagittalSharp7CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z"},accSagittalFlat7CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp25SUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z"},accSagittalFlat25SDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z"},accSagittalSharp35MUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z"},accSagittalFlat35MDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z"},accSagittalSharp11MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z"},accSagittalFlat11MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z"},accSagittalSharp11LUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11LDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp35LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat35LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp25SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z"},accSagittalDoubleFlat25SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z"},accSagittalDoubleSharp7CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z"},accSagittalDoubleFlat7CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z"},accSagittalDoubleSharp5CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z"},accSagittalDoubleFlat5CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z"},accSagittalDoubleSharp5v7kDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z"},accSagittalDoubleFlat5v7kUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z"},accSagittalDoubleSharp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z"},accSagittalDoubleFlat:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z"},accSagittal7v11KleismaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z"},accSagittal7v11KleismaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal55CommaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z"},accSagittal55CommaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z"},accSagittal7v11CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal7v11CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal5v11SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z"},accSagittal5v11SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp5v11SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat5v11SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp7v11CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z"},accSagittalFlat7v11CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z"},accSagittalSharp55CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z"},accSagittalFlat55CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z"},accSagittalSharp17CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z"},accSagittalFlat17CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z"},accSagittalSharp7v11kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z"},accSagittalFlat7v11kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z"},accSagittalSharp7v11kUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z"},accSagittalFlat7v11kDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z"},accSagittalSharp17CUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17CDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp55CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat55CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z"},accSagittalSharp7v11CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z"},accSagittalFlat7v11CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z"},accSagittalSharp5v11SUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z"},accSagittalFlat5v11SDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp5v11SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat5v11SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp7v11CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z"},accSagittalDoubleFlat7v11CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z"},accSagittalDoubleSharp55CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z"},accSagittalDoubleFlat55CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z"},accSagittalDoubleSharp17CDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z"},accSagittalDoubleFlat17CUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z"},accSagittalDoubleSharp7v11kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat7v11kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittal23CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z"},accSagittal23CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z"},accSagittal5v19CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z"},accSagittal5v19CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal5v23SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z"},accSagittal5v23SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittalSharp5v23SDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z"},accSagittalFlat5v23SUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z"},accSagittalSharp5v19CDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z"},accSagittalFlat5v19CUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z"},accSagittalFlat23CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z"},accSagittalSharp23CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z"},accSagittalFlat23CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z"},accSagittalSharp5v19CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalFlat5v19CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z"},accSagittalSharp5v23SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalFlat5v23SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z"},accSagittalDoubleSharp5v23SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z"},accSagittalDoubleFlat5v23SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z"},accSagittalDoubleSharp5v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z"},accSagittalDoubleFlat5v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z"},accSagittalDoubleSharp23CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalDoubleFlat23CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z"},accSagittal19SchismaUp:{x_min:0,x_max:125,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z"},accSagittal19SchismaDown:{x_min:0,x_max:125,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal143CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z"},accSagittal143CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal11v49CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z"},accSagittal11v49CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z"},accSagittal19CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal19CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal7v19CommaUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal7v19CommaDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal49SmallDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal49SmallDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal23SmallDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal23SmallDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal5v13MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z"},accSagittal5v13MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z"},accSagittal11v19MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z"},accSagittal11v19MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z"},accSagittal49MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z"},accSagittal49MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z"},accSagittal5v49MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z"},accSagittal5v49MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z"},accSagittal49LargeDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z"},accSagittal49LargeDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z"},accSagittal11v19LargeDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z"},accSagittal11v19LargeDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z"},accSagittal5v13LargeDiesisUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z"},accSagittal5v13LargeDiesisDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z"},accSagittalFlat23SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp49SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z"},accSagittalFlat49SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalSharp7v19CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z"},accSagittalFlat7v19CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z"},accSagittalSharp19CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z"},accSagittalFlat19CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z"},accSagittalSharp11v49CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat11v49CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z"},accSagittalSharp143CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat143CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp17kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z"},accSagittalFlat17kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z"},accSagittalSharp19sDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z"},accSagittalFlat19sUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z"},accSagittalSharp19sUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z"},accSagittalFlat19sDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z"},accSagittalSharp17kUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17kDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp143CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalFlat143CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp11v49CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z"},accSagittalFlat11v49CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z"},accSagittalSharp19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp7v19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat7v19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp49SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat49SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp23SUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat23SDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp5v13MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z"},accSagittalFlat5v13MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z"},accSagittalSharp11v19MUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11v19MDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp49MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z"},accSagittalFlat49MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z"},accSagittalSharp5v49MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z"},accSagittalFlat5v49MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z"},accSagittalSharp49LUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z"},accSagittalFlat49LDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z"},accSagittalSharp11v19LUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z"},accSagittalFlat11v19LDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z"},accSagittalSharp5v13LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat5v13LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalDoubleSharp23SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalDoubleFlat23SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z"},accSagittalDoubleSharp49SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z"},accSagittalDoubleFlat49SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalDoubleSharp7v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalDoubleFlat7v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z"},accSagittalDoubleSharp19CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z"},accSagittalDoubleFlat19CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z"},accSagittalDoubleSharp11v49CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat11v49CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp143CDown:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat143CUp:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp17kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat17kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittalDoubleSharp19sDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalDoubleFlat19sUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z"},accSagittalShaftUp:{x_min:0,x_max:31,y_min:-359,y_max:172,ha:531,o:"m 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z"},accSagittalShaftDown:{x_min:0,x_max:31,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z"},accSagittalAcute:{x_min:0,x_max:125,y_min:-62,y_max:125,ha:187,o:"m 0 0 l 0 -89 l 180 89 l 180 180 z"},accSagittalGrave:{x_min:0,x_max:125,y_min:-125,y_max:62,ha:187,o:"m 180 -180 l 180 -89 l 0 89 l 0 0 z"},accSagittal1MinaUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal1MinaDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal2MinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal2MinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal1TinaUp:{x_min:0,x_max:93,y_min:16,y_max:107,ha:91,o:"m 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z"},accSagittal1TinaDown:{x_min:0,x_max:93,y_min:-107,y_max:-16,ha:91,o:"m 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z"},accSagittal2TinasUp:{x_min:0,x_max:94,y_min:16,y_max:107,ha:91,o:"m 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal2TinasDown:{x_min:0,x_max:94,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z"},accSagittal3TinasUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal3TinasDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal4TinasUp:{x_min:0,x_max:187,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal4TinasDown:{x_min:0,x_max:187,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal5TinasUp:{x_min:0,x_max:218,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal5TinasDown:{x_min:0,x_max:218,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal6TinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal6TinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal7TinasUp:{x_min:0,x_max:281,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal7TinasDown:{x_min:0,x_max:281,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal8TinasUp:{x_min:0,x_max:312,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal8TinasDown:{x_min:0,x_max:312,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal9TinasUp:{x_min:-7,x_max:312,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal9TinasDown:{x_min:-7,x_max:312,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittalFractionalTinaUp:{x_min:-3,x_max:35,y_min:73,y_max:111,ha:38,o:"m -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z"},accSagittalFractionalTinaDown:{x_min:-3,x_max:35,y_min:-111,y_max:-73,ha:38,o:"m -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:164,y_min:-194,y_max:421,ha:615,o:"m 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:414,y_min:-194,y_max:421,ha:615,o:"m 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z"},accidentalWilsonPlus:{x_min:0,x_max:281,y_min:-203,y_max:203,ha:406,o:"m 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z"},accidentalWilsonMinus:{x_min:0,x_max:281,y_min:-186,y_max:186,ha:372,o:"m 0 112 l 405 -268 l 405 -112 l 0 268 z"}},fontFamily:"Bravura",resolution:1e3,generatedOn:"2022-12-18T09:06:51.407Z"},Ni={smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:250,advanceWidth:990,yOffset:300},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{treble:{line:-2,shiftX:12}},"8vb":{treble:{line:6.5,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{treble:{line:-.2,shiftX:8}},"8vb":{treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{width:7},gracenote:{width:3}},pedalMarking:{},digits:{shiftLine:-1,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{spacing:7,offsetYStemUp:-8,offsetYStemDown:8,offsetXStemUp:11,offsetXStemDown:1},grace:{spacing:4.2,offsetYStemUp:-4.8,offsetYStemDown:4.8,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{},clef_small:{gClef:{shiftY:1.5}},clefNote_default:{},clefNote_small:{},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{breathMarkTick:{shiftY:9},breathMarkComma:{},segno:{shiftX:-7,shiftY:8},coda:{shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{},ornamentTurnSlash:{},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{},chordSymbol:{scale:.8}}};const Fi={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}};const Mi={glyphs:{bracketTop:{x_min:0,x_max:412,y_min:-18,y_max:223,ha:241,o:"m 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z"},bracketBottom:{x_min:0,x_max:412,y_min:-223,y_max:18,ha:241,o:"m 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z"},barlineTick:{x_min:-59,x_max:59,y_min:-139,y_max:139,ha:279,o:"m 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z"},breathMarkTick:{x_min:-151,x_max:272,y_min:0,y_max:429,ha:429,o:"m 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z"},segno:{x_min:7,x_max:493,y_min:-50,y_max:650,ha:699,o:"m 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z"},coda:{x_min:22,x_max:478,y_min:-31,y_max:531,ha:563,o:"m 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z"},gClef:{x_min:0,x_max:623,y_min:-632,y_max:1082,ha:1713,o:"m 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z"},cClef:{x_min:0,x_max:643,y_min:-508,y_max:508,ha:1016,o:"m 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z"},fClef:{x_min:0,x_max:661,y_min:-545,y_max:254,ha:798,o:"m 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z"},unpitchedPercussionClef1:{x_min:-4,x_max:337,y_min:-250,y_max:250,ha:500,o:"m -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z"},"6stringTabClef":{x_min:0,x_max:501,y_min:-735,y_max:753,ha:1487,o:"m 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z"},timeSig0:{x_min:0,x_max:380,y_min:-250,y_max:236,ha:486,o:"m 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z"},timeSig1:{x_min:0,x_max:254,y_min:-250,y_max:236,ha:486,o:"m 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z"},timeSig2:{x_min:0,x_max:337,y_min:-250,y_max:236,ha:486,o:"m 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z"},timeSig3:{x_min:0,x_max:302,y_min:-250,y_max:236,ha:486,o:"m 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z"},timeSig4:{x_min:0,x_max:345,y_min:-250,y_max:236,ha:486,o:"m 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z"},timeSig5:{x_min:0,x_max:302,y_min:-250,y_max:236,ha:486,o:"m 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z"},timeSig6:{x_min:0,x_max:349,y_min:-250,y_max:236,ha:486,o:"m 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z"},timeSig7:{x_min:0,x_max:326,y_min:-250,y_max:236,ha:486,o:"m 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z"},timeSig8:{x_min:0,x_max:360,y_min:-250,y_max:236,ha:486,o:"m 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z"},timeSig9:{x_min:0,x_max:349,y_min:-250,y_max:236,ha:486,o:"m 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z"},timeSigCommon:{x_min:0,x_max:409,y_min:-233,y_max:233,ha:466,o:"m 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z"},timeSigCutCommon:{x_min:0,x_max:409,y_min:-394,y_max:394,ha:788,o:"m 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z"},timeSigPlus:{x_min:0,x_max:235,y_min:-118,y_max:118,ha:235,o:"m 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z"},timeSigPlusSmall:{x_min:0,x_max:235,y_min:-118,y_max:118,ha:235,o:"m 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z"},timeSigMinus:{x_min:0,x_max:235,y_min:-23,y_max:23,ha:46,o:"m 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z"},timeSigParensRight:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},timeSigParensRightSmall:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},timeSigParensLeft:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},timeSigParensLeftSmall:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},noteheadDoubleWhole:{x_min:0,x_max:663,y_min:-174,y_max:174,ha:349,o:"m 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z"},noteheadWhole:{x_min:0,x_max:455,y_min:-135,y_max:135,ha:269,o:"m 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z"},noteheadHalf:{x_min:0,x_max:316,y_min:-135,y_max:135,ha:269,o:"m 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z"},noteheadBlack:{x_min:0,x_max:316,y_min:-135,y_max:135,ha:269,o:"m 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z"},noteheadXWhole:{x_min:0,x_max:440,y_min:-133,y_max:133,ha:265,o:"m 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z"},noteheadXHalf:{x_min:0,x_max:300,y_min:-133,y_max:133,ha:265,o:"m 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z"},noteheadXBlack:{x_min:0,x_max:300,y_min:-133,y_max:133,ha:265,o:"m 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z"},noteheadCircleX:{x_min:0,x_max:357,y_min:-178,y_max:178,ha:357,o:"m 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z"},noteheadTriangleUpWhole:{x_min:0,x_max:462,y_min:-149,y_max:149,ha:297,o:"m 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z"},noteheadTriangleUpHalf:{x_min:0,x_max:323,y_min:-149,y_max:149,ha:298,o:"m 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z"},noteheadTriangleUpBlack:{x_min:0,x_max:322,y_min:-149,y_max:149,ha:297,o:"m 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z"},noteheadDiamondWhole:{x_min:0,x_max:462,y_min:-138,y_max:138,ha:277,o:"m 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z"},noteheadDiamondHalf:{x_min:0,x_max:322,y_min:-138,y_max:138,ha:277,o:"m 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z"},noteheadDiamondBlack:{x_min:0,x_max:322,y_min:-138,y_max:138,ha:277,o:"m 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z"},augmentationDot:{x_min:-63,x_max:63,y_min:-63,y_max:63,ha:126,o:"m -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z"},tremolo1:{x_min:-252,x_max:216,y_min:-185,y_max:148,ha:333,o:"m 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z"},flag8thUp:{x_min:-17,x_max:234,y_min:-745,y_max:-4,ha:741,o:"m -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z"},flag8thDown:{x_min:-15,x_max:271,y_min:4,y_max:745,ha:741,o:"m 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z"},flag16thUp:{x_min:-17,x_max:234,y_min:-847,y_max:-4,ha:843,o:"m -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z"},flag16thDown:{x_min:-15,x_max:267,y_min:4,y_max:745,ha:741,o:"m 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z"},flag32ndUp:{x_min:-17,x_max:233,y_min:-1005,y_max:96,ha:1101,o:"m -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z"},flag32ndDown:{x_min:-15,x_max:270,y_min:-96,y_max:895,ha:991,o:"m 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z"},flag64thUp:{x_min:-17,x_max:233,y_min:-933,y_max:296,ha:1230,o:"m -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z"},flag64thDown:{x_min:-15,x_max:271,y_min:-296,y_max:820,ha:1116,o:"m 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z"},flag128thUp:{x_min:-17,x_max:231,y_min:-987,y_max:496,ha:1484,o:"m -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z"},flag128thDown:{x_min:-15,x_max:270,y_min:-496,y_max:870,ha:1366,o:"m 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z"},accidentalFlat:{x_min:-15,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalNatural:{x_min:0,x_max:176,y_min:-334,y_max:334,ha:667,o:"m 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z"},accidentalSharp:{x_min:0,x_max:239,y_min:-388,y_max:388,ha:775,o:"m 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z"},accidentalDoubleSharp:{x_min:0,x_max:271,y_min:-135,y_max:135,ha:271,o:"m 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z"},accidentalDoubleFlat:{x_min:-15,x_max:356,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z"},accidentalParensLeft:{x_min:-122,x_max:-19,y_min:-267,y_max:267,ha:534,o:"m -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z"},accidentalParensRight:{x_min:19,x_max:122,y_min:-267,y_max:267,ha:535,o:"m 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:200,y_min:-165,y_max:457,ha:622,o:"m 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:446,y_min:-165,y_max:457,ha:622,o:"m 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:142,y_min:-373,y_max:373,ha:747,o:"m 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:335,y_min:-391,y_max:391,ha:782,o:"m 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z"},accidentalBuyukMucennebFlat:{x_min:-125,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:284,y_min:-388,y_max:388,ha:775,o:"m 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z"},accidentalBakiyeFlat:{x_min:-129,x_max:185,y_min:-165,y_max:457,ha:622,o:"m -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z"},accidentalKomaSharp:{x_min:0,x_max:142,y_min:-373,y_max:373,ha:747,o:"m 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:188,y_min:-373,y_max:373,ha:747,o:"m 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z"},articAccentAbove:{x_min:-256,x_max:19,y_min:-114,y_max:114,ha:227,o:"m -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z"},articAccentBelow:{x_min:-256,x_max:19,y_min:-114,y_max:114,ha:227,o:"m -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z"},articTenutoAbove:{x_min:-154,x_max:154,y_min:-15,y_max:15,ha:30,o:"m -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z"},articTenutoBelow:{x_min:-154,x_max:154,y_min:-15,y_max:15,ha:30,o:"m -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z"},articStaccatoAbove:{x_min:-49,x_max:49,y_min:-49,y_max:49,ha:99,o:"m -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z"},articStaccatoBelow:{x_min:-49,x_max:49,y_min:-49,y_max:49,ha:99,o:"m -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z"},articStaccatissimoAbove:{x_min:-53,x_max:53,y_min:0,y_max:184,ha:184,o:"m -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z"},articStaccatissimoBelow:{x_min:-53,x_max:53,y_min:-184,y_max:0,ha:184,o:"m -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z"},articMarcatoAbove:{x_min:-114,x_max:114,y_min:-256,y_max:19,ha:275,o:"m -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z"},articMarcatoBelow:{x_min:-114,x_max:114,y_min:-19,y_max:256,ha:275,o:"m -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z"},fermataAbove:{x_min:-324,x_max:324,y_min:0,y_max:353,ha:353,o:"m -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataBelow:{x_min:-324,x_max:324,y_min:-353,y_max:0,ha:353,o:"m -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataLongAbove:{x_min:-286,x_max:286,y_min:0,y_max:364,ha:364,o:"m -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z"},fermataLongBelow:{x_min:-286,x_max:286,y_min:-364,y_max:0,ha:364,o:"m -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataVeryLongAbove:{x_min:-286,x_max:286,y_min:0,y_max:438,ha:438,o:"m -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataVeryLongBelow:{x_min:-286,x_max:286,y_min:-438,y_max:0,ha:438,o:"m -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},fermataVeryShortAbove:{x_min:-351,x_max:351,y_min:0,y_max:571,ha:571,o:"m -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z"},fermataVeryShortBelow:{x_min:-351,x_max:351,y_min:-571,y_max:0,ha:571,o:"m 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z"},fermataShortAbove:{x_min:-286,x_max:286,y_min:0,y_max:469,ha:469,o:"m -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z"},fermataShortBelow:{x_min:-286,x_max:286,y_min:-469,y_max:0,ha:469,o:"m -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z"},breathMarkComma:{x_min:0,x_max:168,y_min:-155,y_max:155,ha:311,o:"m 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z"},breathMarkUpbow:{x_min:-125,x_max:125,y_min:0,y_max:409,ha:409,o:"m -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z"},caesura:{x_min:0,x_max:457,y_min:-202,y_max:303,ha:504,o:"m 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z"},caesuraCurved:{x_min:0,x_max:370,y_min:-207,y_max:310,ha:517,o:"m 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z"},restMaxima:{x_min:0,x_max:853,y_min:-250,y_max:250,ha:500,o:"m 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z"},restDoubleWhole:{x_min:0,x_max:284,y_min:0,y_max:250,ha:250,o:"m 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z"},restWhole:{x_min:0,x_max:330,y_min:-125,y_max:0,ha:125,o:"m 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z"},restWholeLegerLine:{x_min:0,x_max:542,y_min:-125,y_max:11,ha:137,o:"m 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z"},restHalf:{x_min:0,x_max:330,y_min:0,y_max:125,ha:125,o:"m 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z"},restHalfLegerLine:{x_min:0,x_max:542,y_min:-11,y_max:125,ha:137,o:"m 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z"},restQuarter:{x_min:0,x_max:221,y_min:-365,y_max:365,ha:730,o:"m 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z"},rest8th:{x_min:0,x_max:258,y_min:-197,y_max:219,ha:416,o:"m 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z"},rest16th:{x_min:0,x_max:331,y_min:-443,y_max:219,ha:662,o:"m 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z"},rest32nd:{x_min:0,x_max:405,y_min:-443,y_max:466,ha:909,o:"m 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z"},rest64th:{x_min:0,x_max:479,y_min:-689,y_max:466,ha:1155,o:"m 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z"},rest128th:{x_min:0,x_max:553,y_min:-689,y_max:712,ha:1401,o:"m 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z"},dynamicPiano:{x_min:-39,x_max:378,y_min:-178,y_max:277,ha:455,o:"m 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z"},dynamicMezzo:{x_min:35,x_max:493,y_min:-19,y_max:272,ha:291,o:"m 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z"},dynamicForte:{x_min:-87,x_max:440,y_min:-182,y_max:415,ha:597,o:"m 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z"},dynamicRinforzando:{x_min:58,x_max:357,y_min:0,y_max:275,ha:275,o:"m 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z"},dynamicSforzando:{x_min:52,x_max:278,y_min:-22,y_max:270,ha:292,o:"m 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z"},dynamicZ:{x_min:23,x_max:309,y_min:2,y_max:250,ha:248,o:"m 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z"},ornamentTrill:{x_min:-249,x_max:249,y_min:0,y_max:376,ha:376,o:"m -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z"},ornamentTurn:{x_min:-310,x_max:310,y_min:-143,y_max:143,ha:286,o:"m -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z"},ornamentTurnSlash:{x_min:-310,x_max:310,y_min:-201,y_max:201,ha:402,o:"m -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z"},ornamentMordent:{x_min:-296,x_max:296,y_min:-215,y_max:198,ha:413,o:"m -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z"},ornamentShortTrill:{x_min:-296,x_max:296,y_min:-127,y_max:127,ha:253,o:"m -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z"},ornamentTremblement:{x_min:-419,x_max:419,y_min:-127,y_max:127,ha:253,o:"m -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z"},ornamentPrecompAppoggTrill:{x_min:-419,x_max:419,y_min:-127,y_max:255,ha:381,o:"m -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:-433,x_max:433,y_min:-243,y_max:127,ha:370,o:"m -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z"},ornamentPrecompSlideTrillBach:{x_min:-433,x_max:433,y_min:-243,y_max:198,ha:442,o:"m 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:-433,x_max:433,y_min:-127,y_max:244,ha:370,o:"m 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:-439,x_max:439,y_min:-127,y_max:236,ha:363,o:"m -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:-439,x_max:439,y_min:-215,y_max:236,ha:451,o:"m -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z"},ornamentPrecompTrillLowerSuffix:{x_min:-439,x_max:439,y_min:-236,y_max:127,ha:362,o:"m -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z"},stringsDownBow:{x_min:-168,x_max:168,y_min:0,y_max:353,ha:353,o:"m -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z"},stringsUpBow:{x_min:-110,x_max:110,y_min:0,y_max:277,ha:277,o:"m -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z"},stringsHarmonic:{x_min:-82,x_max:82,y_min:-82,y_max:82,ha:163,o:"m -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z"},pluckedSnapPizzicatoAbove:{x_min:-110,x_max:110,y_min:-110,y_max:205,ha:315,o:"m -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z"},pluckedSnapPizzicatoBelow:{x_min:-110,x_max:110,y_min:-205,y_max:110,ha:315,o:"m 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z"},pluckedLeftHandPizzicato:{x_min:-155,x_max:155,y_min:-157,y_max:157,ha:315,o:"m -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z"},keyboardPedalPed:{x_min:0,x_max:782,y_min:-1,y_max:500,ha:501,o:"m 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z"},keyboardPedalUp:{x_min:0,x_max:435,y_min:65,y_max:500,ha:435,o:"m 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z"},pictChokeCymbal:{x_min:0,x_max:168,y_min:-155,y_max:155,ha:311,o:"m 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z"},wiggleArpeggiatoUp:{x_min:-8,x_max:269,y_min:0,y_max:126,ha:126,o:"m 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z"},arrowheadBlackUp:{x_min:11,x_max:239,y_min:-6,y_max:269,ha:275,o:"m 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z"},arrowheadBlackDown:{x_min:11,x_max:239,y_min:6,y_max:281,ha:275,o:"m 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z"}},fontFamily:"GonvilleSmufl",resolution:1e3,generatedOn:"2023-04-20T22:11:26.009Z"};const Oi={glyphs:{bracketTop:{x_min:0,x_max:491,y_min:0,y_max:279,ha:279,o:"m 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z"},bracketBottom:{x_min:0,x_max:491,y_min:-279,y_max:0,ha:279,o:"m 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z"},segno:{x_min:0,x_max:654,y_min:0,y_max:869,ha:869,o:"m 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z"},coda:{x_min:0,x_max:745,y_min:-113,y_max:735,ha:848,o:"m 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z"},gClef:{x_min:0,x_max:640,y_min:-666,y_max:1112,ha:1778,o:"m 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z"},cClef:{x_min:0,x_max:627,y_min:-480,y_max:482,ha:962,o:"m 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z"},fClef:{x_min:0,x_max:664,y_min:-617,y_max:251,ha:868,o:"m 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z"},unpitchedPercussionClef1:{x_min:0,x_max:352,y_min:-252,y_max:252,ha:504,o:"m 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z"},"6stringTabClef":{x_min:0,x_max:439,y_min:-743,y_max:746,ha:1489,o:"m 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z"},timeSig0:{x_min:15,x_max:389,y_min:-254,y_max:255,ha:509,o:"m 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z"},timeSig1:{x_min:15,x_max:336,y_min:-243,y_max:245,ha:488,o:"m 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z"},timeSig2:{x_min:15,x_max:377,y_min:-243,y_max:245,ha:488,o:"m 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z"},timeSig3:{x_min:15,x_max:364,y_min:-244,y_max:244,ha:488,o:"m 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z"},timeSig4:{x_min:14,x_max:442,y_min:-248,y_max:249,ha:497,o:"m 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z"},timeSig5:{x_min:15,x_max:362,y_min:-244,y_max:246,ha:490,o:"m 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z"},timeSig6:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z"},timeSig7:{x_min:15,x_max:366,y_min:-250,y_max:251,ha:501,o:"m 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z"},timeSig8:{x_min:15,x_max:393,y_min:-248,y_max:246,ha:494,o:"m 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z"},timeSig9:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z"},timeSigCommon:{x_min:0,x_max:463,y_min:-256,y_max:258,ha:514,o:"m 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z"},timeSigCutCommon:{x_min:0,x_max:463,y_min:-376,y_max:388,ha:764,o:"m 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z"},timeSigPlus:{x_min:0,x_max:408,y_min:-204,y_max:204,ha:408,o:"m 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z"},noteheadDoubleWhole:{x_min:0,x_max:538,y_min:-178,y_max:179,ha:357,o:"m 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z"},noteheadWhole:{x_min:0,x_max:373,y_min:-134,y_max:136,ha:270,o:"m 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z"},noteheadHalf:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z"},noteheadBlack:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z"},noteheadXBlack:{x_min:0,x_max:325,y_min:-132,y_max:132,ha:264,o:"m 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z"},noteheadCircleX:{x_min:0,x_max:325,y_min:-162,y_max:163,ha:325,o:"m 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:432,y_min:-179,y_max:177,ha:356,o:"m 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z"},noteheadSquareWhite:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadSquareBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadTriangleUpBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 223 176 l 0 -196 l 446 -196 z"},noteheadSlashedDoubleWhole1:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z"},noteheadSlashedWhole1:{x_min:-75,x_max:448,y_min:-211,y_max:214,ha:425,o:"m 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z"},noteheadSlashedHalf1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z"},noteheadSlashedBlack1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z"},noteheadSlashedDoubleWhole2:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z"},noteheadSlashedWhole2:{x_min:-75,x_max:448,y_min:-212,y_max:214,ha:426,o:"m 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z"},noteheadSlashedHalf2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z"},noteheadSlashedBlack2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:373,y_min:-178,y_max:179,ha:357,o:"m 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z"},noteheadDiamondWhole:{x_min:0,x_max:373,y_min:-133,y_max:132,ha:265,o:"m 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z"},noteheadDiamondHalf:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z"},noteheadDiamondBlack:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z"},noteheadParenthesisRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},noteheadParenthesisLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},noteheadMoonBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 0 176 l 0 -196 l 488 -196 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 488 176 l 0 -196 l 488 -196 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z"},tremolo1:{x_min:0,x_max:290,y_min:-93,y_max:96,ha:189,o:"m 0 48 l 0 -134 l 418 -43 l 418 138 z"},flag8thUp:{x_min:0,x_max:289,y_min:-817,y_max:12,ha:829,o:"m 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z"},flag8thDown:{x_min:0,x_max:309,y_min:-12,y_max:817,ha:829,o:"m 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z"},flag16thUp:{x_min:0,x_max:279,y_min:-820,y_max:12,ha:832,o:"m 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z"},flag16thDown:{x_min:0,x_max:309,y_min:-26,y_max:803,ha:829,o:"m 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag32ndUp:{x_min:0,x_max:279,y_min:-821,y_max:186,ha:1007,o:"m 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z"},flag32ndDown:{x_min:0,x_max:309,y_min:-216,y_max:803,ha:1019,o:"m 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag64thUp:{x_min:0,x_max:279,y_min:-822,y_max:373,ha:1195,o:"m 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z"},flag64thDown:{x_min:0,x_max:309,y_min:-403,y_max:804,ha:1207,o:"m 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z"},flag128thUp:{x_min:0,x_max:279,y_min:-821,y_max:573,ha:1394,o:"m 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z"},flag128thDown:{x_min:0,x_max:309,y_min:-591,y_max:803,ha:1394,o:"m 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z"},accidentalFlat:{x_min:0,x_max:203,y_min:-176,y_max:453,ha:629,o:"m 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z"},accidentalNatural:{x_min:0,x_max:171,y_min:-323,y_max:325,ha:648,o:"m 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z"},accidentalSharp:{x_min:0,x_max:244,y_min:-333,y_max:334,ha:667,o:"m 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z"},accidentalDoubleSharp:{x_min:0,x_max:275,y_min:-137,y_max:138,ha:275,o:"m 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z"},accidentalDoubleFlat:{x_min:0,x_max:371,y_min:-176,y_max:453,ha:629,o:"m 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z"},accidentalParensLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},accidentalParensRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:193,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-176,y_max:452,ha:628,o:"m 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:180,y_min:-316,y_max:320,ha:636,o:"m 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:290,y_min:-328,y_max:339,ha:667,o:"m 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z"},accidentalBuyukMucennebFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalBuyukMucennebSharp:{x_min:0,x_max:348,y_min:-332,y_max:334,ha:666,o:"m 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z"},accidentalBakiyeFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:348,y_min:-316,y_max:318,ha:634,o:"m 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z"},articAccentAbove:{x_min:0,x_max:361,y_min:0,y_max:235,ha:235,o:"m 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z"},articAccentBelow:{x_min:0,x_max:361,y_min:-235,y_max:0,ha:235,o:"m 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z"},articTenutoAbove:{x_min:0,x_max:316,y_min:0,y_max:46,ha:46,o:"m 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z"},articTenutoBelow:{x_min:0,x_max:316,y_min:-46,y_max:0,ha:46,o:"m 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z"},articStaccatoAbove:{x_min:0,x_max:78,y_min:0,y_max:78,ha:78,o:"m 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z"},articStaccatoBelow:{x_min:0,x_max:78,y_min:-78,y_max:0,ha:78,o:"m 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z"},articStaccatissimoAbove:{x_min:0,x_max:127,y_min:0,y_max:248,ha:248,o:"m 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z"},articStaccatissimoBelow:{x_min:0,x_max:127,y_min:-248,y_max:0,ha:248,o:"m 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z"},articMarcatoAbove:{x_min:1,x_max:296,y_min:0,y_max:253,ha:253,o:"m 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z"},articMarcatoBelow:{x_min:0,x_max:295,y_min:-253,y_max:0,ha:253,o:"m 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z"},fermataAbove:{x_min:0,x_max:622,y_min:0,y_max:368,ha:368,o:"m 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z"},fermataBelow:{x_min:0,x_max:622,y_min:-368,y_max:0,ha:368,o:"m 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z"},fermataLongAbove:{x_min:0,x_max:623,y_min:0,y_max:368,ha:368,o:"m 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z"},fermataLongBelow:{x_min:0,x_max:623,y_min:-368,y_max:0,ha:368,o:"m 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z"},fermataVeryLongAbove:{x_min:0,x_max:842,y_min:0,y_max:549,ha:549,o:"m 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z"},fermataVeryLongBelow:{x_min:0,x_max:842,y_min:-549,y_max:0,ha:549,o:"m 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z"},fermataShortAbove:{x_min:0,x_max:642,y_min:0,y_max:454,ha:454,o:"m 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z"},fermataShortBelow:{x_min:0,x_max:642,y_min:-454,y_max:0,ha:454,o:"m 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z"},breathMarkComma:{x_min:0,x_max:191,y_min:0,y_max:321,ha:321,o:"m 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z"},caesura:{x_min:0,x_max:380,y_min:0,y_max:490,ha:490,o:"m 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z"},caesuraCurved:{x_min:0,x_max:368,y_min:0,y_max:491,ha:491,o:"m 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z"},restMaxima:{x_min:0,x_max:450,y_min:-250,y_max:250,ha:500,o:"m 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:-11,y_max:262,ha:273,o:"m 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z"},restWhole:{x_min:0,x_max:325,y_min:-131,y_max:5,ha:136,o:"m 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z"},restWholeLegerLine:{x_min:-139,x_max:464,y_min:-122,y_max:14,ha:136,o:"m 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z"},restHalf:{x_min:0,x_max:325,y_min:-4,y_max:132,ha:136,o:"m 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z"},restHalfLegerLine:{x_min:-139,x_max:464,y_min:-14,y_max:122,ha:136,o:"m 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z"},restQuarter:{x_min:0,x_max:235,y_min:-331,y_max:401,ha:732,o:"m 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z"},rest8th:{x_min:0,x_max:276,y_min:-255,y_max:204,ha:459,o:"m 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z"},rest16th:{x_min:1,x_max:344,y_min:-507,y_max:204,ha:711,o:"m 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z"},rest32nd:{x_min:0,x_max:391,y_min:-507,y_max:460,ha:967,o:"m 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z"},rest64th:{x_min:0,x_max:423,y_min:-758,y_max:464,ha:1222,o:"m 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z"},rest128th:{x_min:-1,x_max:475,y_min:-759,y_max:717,ha:1476,o:"m 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z"},dynamicPiano:{x_min:-95,x_max:317,y_min:-163,y_max:263,ha:426,o:"m 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z"},dynamicMezzo:{x_min:-7,x_max:374,y_min:-2,y_max:251,ha:253,o:"m 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z"},dynamicForte:{x_min:-137,x_max:334,y_min:-193,y_max:421,ha:614,o:"m -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z"},dynamicRinforzando:{x_min:-12,x_max:230,y_min:0,y_max:254,ha:254,o:"m 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z"},dynamicSforzando:{x_min:0,x_max:208,y_min:-5,y_max:263,ha:268,o:"m 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z"},dynamicZ:{x_min:-42,x_max:239,y_min:-1,y_max:258,ha:259,o:"m 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z"},ornamentTrill:{x_min:-12,x_max:383,y_min:0,y_max:383,ha:383,o:"m 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z"},ornamentTurn:{x_min:0,x_max:456,y_min:0,y_max:232,ha:232,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentTurnSlash:{x_min:0,x_max:456,y_min:-80,y_max:313,ha:393,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentMordent:{x_min:0,x_max:473,y_min:-77,y_max:316,ha:393,o:"m 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentShortTrill:{x_min:0,x_max:473,y_min:0,y_max:248,ha:248,o:"m 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentTremblement:{x_min:0,x_max:654,y_min:0,y_max:248,ha:248,o:"m 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:680,y_min:0,y_max:388,ha:388,o:"m 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:662,y_min:-158,y_max:248,ha:406,o:"m 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:662,y_min:-158,y_max:321,ha:479,o:"m 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:662,y_min:0,y_max:406,ha:406,o:"m 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:857,y_min:0,y_max:248,ha:248,o:"m 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:565,y_min:-171,y_max:249,ha:420,o:"m 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z"},brassMuteClosed:{x_min:0,x_max:312,y_min:0,y_max:312,ha:312,o:"m 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z"},brassMuteOpen:{x_min:0,x_max:280,y_min:0,y_max:280,ha:280,o:"m 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z"},stringsDownBow:{x_min:0,x_max:315,y_min:0,y_max:293,ha:293,o:"m 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z"},stringsUpBow:{x_min:0,x_max:262,y_min:0,y_max:343,ha:343,o:"m 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z"},stringsHarmonic:{x_min:0,x_max:181,y_min:0,y_max:181,ha:181,o:"m 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z"},keyboardPedalPed:{x_min:0,x_max:981,y_min:-10,y_max:545,ha:555,o:"m 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z"},keyboardPedalUp:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:242,y_min:0,y_max:164,ha:164,o:"m 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z"},repeat1Bar:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z"},repeat2Bars:{x_min:0,x_max:735,y_min:-250,y_max:250,ha:500,o:"m 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z"},repeat4Bars:{x_min:0,x_max:1243,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z"},repeatBarSlash:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 693 360 l 511 360 l 0 -360 l 181 -360 z"},csymDiminished:{x_min:0,x_max:501,y_min:0,y_max:501,ha:501,o:"m 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z"},csymHalfDiminished:{x_min:-1,x_max:502,y_min:-1,y_max:502,ha:503,o:"m 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z"},csymAugmented:{x_min:1,x_max:321,y_min:90,y_max:410,ha:320,o:"m 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z"},csymMajorSeventh:{x_min:0,x_max:500,y_min:10,y_max:490,ha:480,o:"m 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:160,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:416,y_min:-176,y_max:452,ha:628,o:"m 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"}},fontFamily:"Leland",resolution:1e3,generatedOn:"2022-12-19T23:52:37.756Z"};const Ri={glyphs:{bracketTop:{x_min:0,x_max:508,y_min:0,y_max:370,ha:370,o:"m 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z"},bracketBottom:{x_min:0,x_max:496,y_min:-393,y_max:0,ha:393,o:"m 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z"},barlineTick:{x_min:0,x_max:56,y_min:877,y_max:1122,ha:245,o:"m 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z"},breathMarkTick:{x_min:0,x_max:568,y_min:0,y_max:621,ha:621,o:"m 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z"},segno:{x_min:0,x_max:798,y_min:-65,y_max:806,ha:871,o:"m 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z"},coda:{x_min:0,x_max:1380,y_min:-196,y_max:1037,ha:1233,o:"m 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z"},gClef:{x_min:0,x_max:664,y_min:-559,y_max:1009,ha:1568,o:"m 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z"},cClef:{x_min:0,x_max:731,y_min:-543,y_max:543,ha:1086,o:"m 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z"},fClef:{x_min:0,x_max:776,y_min:-496,y_max:216,ha:712,o:"m 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z"},unpitchedPercussionClef1:{x_min:0,x_max:379,y_min:-250,y_max:250,ha:500,o:"m 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z"},"6stringTabClef":{x_min:0,x_max:438,y_min:-768,y_max:767,ha:1535,o:"m 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z"},timeSig0:{x_min:20,x_max:513,y_min:-358,y_max:359,ha:717,o:"m 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z"},timeSig1:{x_min:20,x_max:283,y_min:-364,y_max:366,ha:730,o:"m 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z"},timeSig2:{x_min:20,x_max:660,y_min:-379,y_max:382,ha:761,o:"m 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z"},timeSig3:{x_min:20,x_max:540,y_min:-392,y_max:392,ha:784,o:"m 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z"},timeSig4:{x_min:20,x_max:633,y_min:-490,y_max:491,ha:981,o:"m 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z"},timeSig5:{x_min:20,x_max:583,y_min:-389,y_max:389,ha:778,o:"m 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z"},timeSig6:{x_min:20,x_max:565,y_min:-363,y_max:363,ha:726,o:"m 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z"},timeSig7:{x_min:20,x_max:592,y_min:-345,y_max:345,ha:690,o:"m 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z"},timeSig8:{x_min:20,x_max:504,y_min:-428,y_max:428,ha:856,o:"m 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z"},timeSig9:{x_min:20,x_max:494,y_min:-421,y_max:421,ha:842,o:"m 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z"},timeSigCommon:{x_min:20,x_max:585,y_min:-298,y_max:294,ha:592,o:"m 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z"},timeSigCutCommon:{x_min:20,x_max:695,y_min:-687,y_max:687,ha:1374,o:"m 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z"},timeSigPlus:{x_min:0,x_max:661,y_min:-358,y_max:358,ha:716,o:"m 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z"},timeSigPlusSmall:{x_min:0,x_max:418,y_min:-197,y_max:199,ha:396,o:"m 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z"},timeSigMinus:{x_min:0,x_max:662,y_min:-54,y_max:55,ha:109,o:"m 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z"},timeSigParensRight:{x_min:0,x_max:274,y_min:-723,y_max:725,ha:1448,o:"m 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z"},timeSigParensRightSmall:{x_min:0,x_max:154,y_min:-422,y_max:422,ha:844,o:"m 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z"},timeSigParensLeft:{x_min:1,x_max:400,y_min:-728,y_max:728,ha:1456,o:"m 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z"},timeSigParensLeftSmall:{x_min:0,x_max:173,y_min:-405,y_max:404,ha:809,o:"m 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z"},noteheadDoubleWhole:{x_min:0,x_max:614,y_min:-223,y_max:223,ha:446,o:"m 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z"},noteheadWhole:{x_min:0,x_max:380,y_min:-186,y_max:165,ha:351,o:"m 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z"},noteheadHalf:{x_min:0,x_max:334,y_min:-174,y_max:175,ha:349,o:"m 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z"},noteheadBlack:{x_min:0,x_max:334,y_min:-164,y_max:164,ha:328,o:"m 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z"},noteheadXDoubleWhole:{x_min:0,x_max:730,y_min:-266,y_max:267,ha:533,o:"m 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z"},noteheadXWhole:{x_min:0,x_max:506,y_min:-143,y_max:144,ha:287,o:"m 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z"},noteheadXHalf:{x_min:0,x_max:421,y_min:-146,y_max:151,ha:297,o:"m 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z"},noteheadXBlack:{x_min:0,x_max:289,y_min:-156,y_max:157,ha:313,o:"m 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:437,y_min:-220,y_max:219,ha:439,o:"m 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z"},noteheadCircleXWhole:{x_min:0,x_max:323,y_min:-190,y_max:184,ha:374,o:"m 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z"},noteheadCircleXHalf:{x_min:0,x_max:309,y_min:-179,y_max:179,ha:358,o:"m 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z"},noteheadCircleX:{x_min:0,x_max:344,y_min:-179,y_max:175,ha:354,o:"m 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:672,y_min:-291,y_max:291,ha:582,o:"m 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z"},noteheadCircledWhole:{x_min:-50,x_max:472,y_min:-231,y_max:232,ha:463,o:"m 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z"},noteheadCircledHalf:{x_min:-50,x_max:393,y_min:-175,y_max:175,ha:350,o:"m 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z"},noteheadCircledBlack:{x_min:-70,x_max:326,y_min:-168,y_max:192,ha:360,o:"m 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:474,y_min:-209,y_max:211,ha:420,o:"m 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z"},noteheadSquareWhite:{x_min:0,x_max:350,y_min:-131,y_max:131,ha:262,o:"m 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z"},noteheadSquareBlack:{x_min:0,x_max:342,y_min:-130,y_max:132,ha:262,o:"m 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z"},noteheadTriangleDownWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z"},noteheadTriangleDownHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z"},noteheadTriangleDownBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z"},noteheadTriangleUpWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z"},noteheadTriangleUpHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z"},noteheadTriangleUpBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:697,y_min:-290,y_max:290,ha:580,o:"m 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z"},noteheadSlashedWhole1:{x_min:-76,x_max:498,y_min:-168,y_max:168,ha:336,o:"m -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z"},noteheadSlashedHalf1:{x_min:-79,x_max:471,y_min:-184,y_max:184,ha:368,o:"m -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z"},noteheadSlashedBlack1:{x_min:-110,x_max:452,y_min:-190,y_max:190,ha:380,o:"m -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:697,y_min:-295,y_max:295,ha:590,o:"m 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z"},noteheadSlashedWhole2:{x_min:-83,x_max:510,y_min:-201,y_max:198,ha:399,o:"m 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z"},noteheadSlashedHalf2:{x_min:-73,x_max:454,y_min:-188,y_max:188,ha:376,o:"m 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z"},noteheadSlashedBlack2:{x_min:-84,x_max:405,y_min:-189,y_max:189,ha:378,o:"m 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:429,y_min:-221,y_max:221,ha:442,o:"m 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z"},noteheadDiamondWhole:{x_min:0,x_max:271,y_min:-132,y_max:132,ha:264,o:"m 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z"},noteheadDiamondHalf:{x_min:0,x_max:295,y_min:-148,y_max:148,ha:296,o:"m 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z"},noteheadDiamondBlack:{x_min:0,x_max:310,y_min:-146,y_max:146,ha:292,o:"m 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z"},noteheadParenthesis:{x_min:-70,x_max:329,y_min:-196,y_max:201,ha:397,o:"m 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z"},noteheadParenthesisRight:{x_min:-30,x_max:82,y_min:-199,y_max:206,ha:405,o:"m -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z"},noteheadParenthesisLeft:{x_min:0,x_max:106,y_min:-197,y_max:197,ha:394,o:"m 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z"},noteheadMoonBlack:{x_min:0,x_max:328,y_min:-125,y_max:125,ha:250,o:"m 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:391,y_min:-142,y_max:142,ha:284,o:"m 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z"},noteheadTriangleRightBlack:{x_min:0,x_max:398,y_min:-139,y_max:140,ha:279,o:"m 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:334,y_min:-134,y_max:136,ha:270,o:"m 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z"},augmentationDot:{x_min:0,x_max:96,y_min:-57,y_max:57,ha:114,o:"m 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z"},tremolo1:{x_min:-158,x_max:156,y_min:-88,y_max:88,ha:176,o:"m -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z"},flag8thUp:{x_min:0,x_max:261,y_min:-819,y_max:0,ha:819,o:"m 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z"},flag8thDown:{x_min:0,x_max:261,y_min:0,y_max:819,ha:819,o:"m 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z"},flag16thUp:{x_min:0,x_max:327,y_min:-819,y_max:0,ha:819,o:"m 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z"},flag16thDown:{x_min:0,x_max:327,y_min:0,y_max:819,ha:819,o:"m 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z"},flag32ndUp:{x_min:0,x_max:268,y_min:-849,y_max:149,ha:999,o:"m 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z"},flag32ndDown:{x_min:-3,x_max:268,y_min:-169,y_max:829,ha:999,o:"m 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z"},flag64thUp:{x_min:-4,x_max:282,y_min:-824,y_max:347,ha:1171,o:"m 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z"},flag64thDown:{x_min:-5,x_max:281,y_min:-375,y_max:796,ha:1171,o:"m 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z"},flag128thUp:{x_min:0,x_max:252,y_min:-804,y_max:530,ha:1334,o:"m 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z"},flag128thDown:{x_min:-1,x_max:252,y_min:-580,y_max:754,ha:1334,o:"m 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z"},accidentalFlat:{x_min:1,x_max:209,y_min:-208,y_max:472,ha:680,o:"m 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z"},accidentalNatural:{x_min:0,x_max:214,y_min:-456,y_max:462,ha:918,o:"m 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z"},accidentalSharp:{x_min:-22,x_max:390,y_min:-384,y_max:383,ha:767,o:"m 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z"},accidentalDoubleSharp:{x_min:0,x_max:287,y_min:-159,y_max:159,ha:318,o:"m 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z"},accidentalDoubleFlat:{x_min:0,x_max:359,y_min:-220,y_max:446,ha:666,o:"m 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z"},accidentalParensLeft:{x_min:0,x_max:130,y_min:-270,y_max:268,ha:538,o:"m 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z"},accidentalParensRight:{x_min:0,x_max:139,y_min:-275,y_max:277,ha:552,o:"m 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:208,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalThreeQuarterTonesSharpStein:{x_min:-23,x_max:388,y_min:-373,y_max:445,ha:818,o:"m 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z"},accidentalBuyukMucennebFlat:{x_min:2,x_max:287,y_min:-248,y_max:432,ha:680,o:"m 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z"},accidentalBuyukMucennebSharp:{x_min:-1,x_max:467,y_min:-460,y_max:350,ha:810,o:"m 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z"},accidentalBakiyeFlat:{x_min:2,x_max:287,y_min:-236,y_max:444,ha:680,o:"m 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z"},accidentalKomaSharp:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:359,y_min:-420,y_max:343,ha:763,o:"m 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z"},accidentalKoron:{x_min:0,x_max:303,y_min:-462,y_max:180,ha:642,o:"m 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z"},accidentalSori:{x_min:0,x_max:434,y_min:-295,y_max:325,ha:620,o:"m 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z"},articAccentAbove:{x_min:0,x_max:425,y_min:0,y_max:326,ha:326,o:"m 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z"},articAccentBelow:{x_min:0,x_max:425,y_min:-326,y_max:0,ha:326,o:"m 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z"},articTenutoAbove:{x_min:0,x_max:471,y_min:0,y_max:56,ha:56,o:"m 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z"},articTenutoBelow:{x_min:0,x_max:471,y_min:-59,y_max:-3,ha:56,o:"m 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z"},articStaccatoAbove:{x_min:1,x_max:112,y_min:0,y_max:156,ha:156,o:"m 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z"},articStaccatoBelow:{x_min:1,x_max:112,y_min:-156,y_max:0,ha:156,o:"m 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z"},articStaccatissimoAbove:{x_min:0,x_max:139,y_min:0,y_max:411,ha:411,o:"m 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z"},articStaccatissimoBelow:{x_min:0,x_max:139,y_min:-411,y_max:0,ha:411,o:"m 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z"},articMarcatoAbove:{x_min:0,x_max:396,y_min:0,y_max:328,ha:328,o:"m 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z"},articMarcatoBelow:{x_min:0,x_max:396,y_min:-328,y_max:0,ha:328,o:"m 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z"},fermataAbove:{x_min:0,x_max:472,y_min:2,y_max:454,ha:452,o:"m 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z"},fermataBelow:{x_min:0,x_max:519,y_min:-430,y_max:-1,ha:429,o:"m 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z"},fermataLongAbove:{x_min:0,x_max:591,y_min:-6,y_max:337,ha:343,o:"m 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z"},fermataLongBelow:{x_min:0,x_max:602,y_min:-335,y_max:7,ha:342,o:"m 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:-14,y_max:437,ha:451,o:"m 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z"},fermataVeryLongBelow:{x_min:0,x_max:686,y_min:-427,y_max:30,ha:457,o:"m 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z"},fermataVeryShortAbove:{x_min:0,x_max:711,y_min:-31,y_max:496,ha:527,o:"m 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z"},fermataVeryShortBelow:{x_min:0,x_max:697,y_min:-475,y_max:13,ha:488,o:"m 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z"},fermataShortAbove:{x_min:0,x_max:545,y_min:-18,y_max:348,ha:366,o:"m 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z"},fermataShortBelow:{x_min:0,x_max:565,y_min:-335,y_max:10,ha:345,o:"m 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z"},breathMarkComma:{x_min:0,x_max:148,y_min:0,y_max:275,ha:275,o:"m 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z"},breathMarkUpbow:{x_min:0,x_max:254,y_min:0,y_max:595,ha:595,o:"m 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z"},caesura:{x_min:0,x_max:566,y_min:0,y_max:562,ha:563,o:"m 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z"},caesuraCurved:{x_min:0,x_max:386,y_min:-10,y_max:584,ha:594,o:"m 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z"},restMaxima:{x_min:0,x_max:366,y_min:-255,y_max:255,ha:510,o:"m 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z"},restDoubleWhole:{x_min:0,x_max:122,y_min:0,y_max:249,ha:249,o:"m 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z"},restWhole:{x_min:1,x_max:500,y_min:-120,y_max:14,ha:134,o:"m 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z"},restWholeLegerLine:{x_min:-197,x_max:685,y_min:-157,y_max:29,ha:186,o:"m 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z"},restHalf:{x_min:0,x_max:518,y_min:0,y_max:162,ha:162,o:"m 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z"},restHalfLegerLine:{x_min:-120,x_max:448,y_min:-20,y_max:143,ha:163,o:"m 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z"},restQuarter:{x_min:0,x_max:263,y_min:-415,y_max:415,ha:830,o:"m 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z"},rest8th:{x_min:0,x_max:289,y_min:-260,y_max:261,ha:521,o:"m 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z"},rest16th:{x_min:0,x_max:333,y_min:-328,y_max:244,ha:572,o:"m 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z"},rest32nd:{x_min:0,x_max:347,y_min:-498,y_max:483,ha:981,o:"m 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z"},rest64th:{x_min:0,x_max:428,y_min:-720,y_max:474,ha:1194,o:"m 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z"},rest128th:{x_min:1,x_max:491,y_min:-711,y_max:719,ha:1430,o:"m 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z"},dynamicPiano:{x_min:-49,x_max:327,y_min:-142,y_max:515,ha:657,o:"m -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z"},dynamicMezzo:{x_min:-18,x_max:559,y_min:-50,y_max:365,ha:415,o:"m 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z"},dynamicForte:{x_min:-144,x_max:311,y_min:-115,y_max:504,ha:619,o:"m -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z"},dynamicRinforzando:{x_min:-75,x_max:322,y_min:-90,y_max:325,ha:415,o:"m 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z"},dynamicSforzando:{x_min:0,x_max:296,y_min:0,y_max:379,ha:379,o:"m 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z"},dynamicZ:{x_min:-43,x_max:331,y_min:0,y_max:328,ha:328,o:"m -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z"},ornamentTrill:{x_min:1,x_max:551,y_min:-18,y_max:539,ha:557,o:"m 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z"},ornamentTurn:{x_min:0,x_max:574,y_min:0,y_max:312,ha:312,o:"m 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z"},ornamentTurnSlash:{x_min:0,x_max:574,y_min:-106,y_max:405,ha:511,o:"m 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z"},ornamentMordent:{x_min:0,x_max:700,y_min:0,y_max:497,ha:497,o:"m 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z"},ornamentShortTrill:{x_min:0,x_max:747,y_min:0,y_max:243,ha:243,o:"m 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z"},ornamentTremblement:{x_min:0,x_max:982,y_min:0,y_max:224,ha:224,o:"m 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1066,y_min:-50,y_max:533,ha:583,o:"m 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:1088,y_min:-380,y_max:252,ha:632,o:"m 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1185,y_min:-380,y_max:465,ha:845,o:"m 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:1003,y_min:-20,y_max:521,ha:541,o:"m 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1246,y_min:-30,y_max:296,ha:326,o:"m 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1226,y_min:-237,y_max:436,ha:673,o:"m 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:833,y_min:-309,y_max:319,ha:628,o:"m 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z"},brassScoop:{x_min:0,x_max:312,y_min:-390,y_max:28,ha:418,o:"m 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z"},brassDoitMedium:{x_min:0,x_max:476,y_min:-50,y_max:333,ha:383,o:"m 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z"},brassFallLipShort:{x_min:0,x_max:298,y_min:-344,y_max:65,ha:409,o:"m 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z"},brassLiftMedium:{x_min:0,x_max:807,y_min:0,y_max:838,ha:838,o:"m 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z"},brassFallRoughMedium:{x_min:0,x_max:791,y_min:0,y_max:819,ha:819,o:"m 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z"},brassBend:{x_min:0,x_max:381,y_min:0,y_max:367,ha:367,o:"m 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z"},brassMuteClosed:{x_min:0,x_max:274,y_min:0,y_max:260,ha:260,o:"m 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z"},brassMuteOpen:{x_min:1,x_max:313,y_min:0,y_max:309,ha:309,o:"m 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z"},brassFlip:{x_min:0,x_max:402,y_min:0,y_max:361,ha:361,o:"m 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z"},brassJazzTurn:{x_min:0,x_max:646,y_min:0,y_max:212,ha:212,o:"m 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z"},brassSmear:{x_min:0,x_max:334,y_min:0,y_max:151,ha:151,o:"m 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z"},stringsDownBow:{x_min:0,x_max:306,y_min:0,y_max:366,ha:366,o:"m 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z"},stringsUpBow:{x_min:0,x_max:219,y_min:0,y_max:489,ha:489,o:"m 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z"},stringsHarmonic:{x_min:0,x_max:191,y_min:0,y_max:202,ha:202,o:"m 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:201,y_min:0,y_max:325,ha:325,o:"m 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:211,y_min:0,y_max:307,ha:307,o:"m 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:271,y_min:0,y_max:284,ha:284,o:"m 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z"},keyboardPedalPed:{x_min:0,x_max:944,y_min:-13,y_max:550,ha:563,o:"m 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z"},keyboardPedalUp:{x_min:0,x_max:437,y_min:0,y_max:461,ha:461,o:"m 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z"},pictChokeCymbal:{x_min:1,x_max:147,y_min:0,y_max:242,ha:242,o:"m 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:300,y_min:0,y_max:176,ha:176,o:"m 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z"},arpeggiatoUp:{x_min:0,x_max:262,y_min:0,y_max:1459,ha:1459,o:"m 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z"},arpeggiatoDown:{x_min:0,x_max:218,y_min:0,y_max:1440,ha:1440,o:"m 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z"},repeat1Bar:{x_min:0,x_max:599,y_min:-250,y_max:175,ha:425,o:"m 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z"},repeat2Bars:{x_min:0,x_max:775,y_min:-247,y_max:363,ha:610,o:"m 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z"},repeat4Bars:{x_min:0,x_max:1374,y_min:-304,y_max:304,ha:608,o:"m 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z"},repeatBarSlash:{x_min:0,x_max:630,y_min:-225,y_max:265,ha:490,o:"m 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z"},csymDiminished:{x_min:0,x_max:506,y_min:0,y_max:500,ha:500,o:"m 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z"},csymHalfDiminished:{x_min:-32,x_max:496,y_min:-33,y_max:492,ha:525,o:"m -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z"},csymAugmented:{x_min:0,x_max:530,y_min:0,y_max:539,ha:539,o:"m 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z"},csymMajorSeventh:{x_min:0,x_max:593,y_min:0,y_max:569,ha:569,o:"m 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z"},csymMinor:{x_min:0,x_max:482,y_min:193,y_max:265,ha:72,o:"m 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z"},csymParensLeftTall:{x_min:0,x_max:185,y_min:0,y_max:1034,ha:1034,o:"m 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z"},csymParensRightTall:{x_min:-40,x_max:189,y_min:0,y_max:1058,ha:1058,o:"m 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z"},csymBracketLeftTall:{x_min:0,x_max:328,y_min:2,y_max:807,ha:805,o:"m 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z"},csymBracketRightTall:{x_min:1,x_max:306,y_min:0,y_max:829,ha:829,o:"m 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:116,y_min:0,y_max:934,ha:934,o:"m 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z"},csymParensRightVeryTall:{x_min:-20,x_max:111,y_min:0,y_max:1009,ha:1009,o:"m -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:990,y_min:-27,y_max:1028,ha:1054,o:"m 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:208,y_min:-231,y_max:449,ha:680,o:"m 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:335,y_min:-231,y_max:449,ha:680,o:"m 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z"},accidentalWilsonPlus:{x_min:0,x_max:298,y_min:-218,y_max:218,ha:436,o:"m 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z"},accidentalWilsonMinus:{x_min:0,x_max:284,y_min:-163,y_max:163,ha:326,o:"m 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z"}},fontFamily:"Petaluma",resolution:1e3,generatedOn:"2022-12-18T09:07:50.817Z"},Li={csymDiminished:{leftSideBearing:-95,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:-25,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:0,advanceWidth:155,yOffset:150},csymParensRightTall:{leftSideBearing:40,advanceWidth:189,yOffset:150},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:0,advanceWidth:210,yOffset:250},csymParensRightVeryTall:{leftSideBearing:-100,advanceWidth:111,yOffset:250},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:100,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:0,advanceWidth:425,yOffset:-422},accidentalFlat:{leftSideBearing:-10,advanceWidth:228,yOffset:-284}};const Wi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Ui={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Ii={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Gi={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},Hi={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Yi{static sortAndUnique(t,e,i){if(t.length>1){const b=[];let a;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\nexport { Fraction };\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\nexport { Font };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Element };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\nexport { Tables };\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\nexport { Glyph };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accidentalLinePositionsAndSpaceNeeds = [];\n let prevNote = undefined;\n let extraXSpaceNeededForLeftDisplacedNotehead = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n // If the current extra left-space needed isn't as big as this note's,\n // then we need to use this note's.\n extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accidentalLinePositionsAndSpaceNeeds.push({\n y,\n line: accLine,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n spacingBetweenStaveLines: lineSpace,\n });\n }\n else {\n accidentalLinePositionsAndSpaceNeeds.push({\n line: props.line,\n extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead,\n acc,\n });\n }\n }\n // Sort accidentals by line number.\n accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line);\n const staveLineAccidentalLayoutMetrics = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let maxExtraXSpaceNeeded = 0;\n // Create an array of unique line numbers (staveLineAccidentalLayoutMetrics)\n // from accidentalLinePositionsAndSpaceNeeds\n for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) {\n const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i];\n const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1];\n let currentLineMetric;\n // if this is the first line, or a new line, add a staveLineAccidentalLayoutMetric\n if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) {\n currentLineMetric = {\n line: accidentalLinePositionAndSpaceNeeds.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n };\n staveLineAccidentalLayoutMetrics.push(currentLineMetric);\n }\n else {\n currentLineMetric = priorLineMetric;\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' &&\n accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') {\n currentLineMetric.flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') {\n currentLineMetric.dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n currentLineMetric.numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing;\n // if this extraXSpaceNeeded is the largest so far, use it as the starting point for\n // all accidental columns.\n maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded);\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd])\n ? 'a'\n : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) {\n if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n staveLineAccidentalLayoutMetrics[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = leftShift + maxExtraXSpaceNeeded;\n columnXOffsets[0] = leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n staveLineAccidentalLayoutMetrics.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded;\n accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift = totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\nexport { Accidental };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nclass Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\nexport { Stem };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\nexport { TextFormatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\nexport { Annotation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\nexport { Articulation };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\nexport { ChordSymbol };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\nexport { BarNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nclass Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Bend };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { FretHandFinger };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\nexport { NoteHead };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\nexport { StaveNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { StaveTie };\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\nexport { GraceNoteGroup };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\nexport { Ornament };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height, devicePixelRatio) {\n var _a;\n const canvas = this.context2D.canvas;\n const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / dpr) | 0;\n height = (height / dpr) | 0;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(dpr, dpr);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\nexport { SVGContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\nexport { Renderer };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\nexport { TextNote };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { Volta };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n /**\n * The modifier context's left_shift state.\n */\n const left_shift = state.left_shift;\n /**\n * The modifier context's right_shift state.\n */\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let extraXSpaceForDisplacedNotehead = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (pos === Modifier.Position.LEFT) {\n extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: extraXSpaceForDisplacedNotehead,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n let num_x_shift = 0;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + extraXSpaceForDisplacedNotehead);\n num_x_shift = num_width; // spacing\n x_widthL = Math.max(num_x_shift, x_widthL);\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_x_shift += num_width; // spacing\n x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StringNumber };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nclass Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { Stroke };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\nexport { ModifierContext };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\nexport { Clef };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nclass KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\nexport { KeySignature };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nclass Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n var _a;\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', {\n category: 'coda',\n });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: Tables.NOTATION_FONT_SCALE / 3,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\nexport { Repetition };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveSection };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nclass StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nexport { StaveTempo };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { StaveText };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nclass Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nexport { Stave };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\nexport { StaveConnector };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\nexport { Formatter };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\nexport { Crescendo };\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\nexport { Parser };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\nexport { EasyScore };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\nexport { PedalMarking };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\nexport { StaveLine };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\nexport { TextBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\nexport { TextDynamics };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\nexport { VibratoBracket };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\nexport { Factory };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\nexport { StaveHairpin };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nclass TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\nexport { TabSlide };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static getMusicFontStack() {\n return Tables.MUSIC_FONT_STACK;\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\nexport { Flow };\n","export const VERSION = '4.2.2';\nexport const ID = '7ad933bdf12b4137ce04d3f332a838887d08a595';\nexport const DATE = '2023-07-03T19:56:22.952Z';\n","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","export const CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { PetalumaFont } from './petaluma_glyphs';\nconst petalumaChordMetrics = {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n};\nexport function loadPetaluma() {\n const metrics = JSON.parse(JSON.stringify(CommonMetrics));\n const chordMetrics = metrics.chordSymbol;\n if (chordMetrics) {\n chordMetrics.glyphs = petalumaChordMetrics;\n }\n Font.load('Petaluma', PetalumaFont, metrics);\n}\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\nexport { Vex };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\nimport { Font } from '../font';\nimport { BravuraFont } from './bravura_glyphs';\nimport { CommonMetrics } from './common_metrics';\nexport function loadBravura() {\n Font.load('Bravura', BravuraFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { GonvilleSmuflFont } from './gonville_glyphs';\nexport function loadGonville() {\n Font.load('Gonville', GonvilleSmuflFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.js statically bundles & preloads all of our music engraving fonts.\nimport { loadBravura } from './load_bravura';\nimport { loadCustom } from './load_custom';\nimport { loadGonville } from './load_gonville';\nimport { loadLeland } from './load_leland';\nimport { loadPetaluma } from './load_petaluma';\n// ADD_MUSIC_FONT\n// import { loadXXX } from './load_xxx';\n// Populate our font \"database\" with all our music fonts.\nexport function loadAllMusicFonts() {\n loadBravura();\n loadGonville();\n loadPetaluma();\n loadCustom();\n loadLeland();\n // ADD_MUSIC_FONT\n // loadXXX();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { CustomFont } from './custom_glyphs';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CommonMetrics } from './common_metrics';\nimport { LelandFont } from './leland_glyphs';\nexport function loadLeland() {\n Font.load('Leland', LelandFont, CommonMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.ts is the entry point for the build output file vexflow.js.\n// It statically bundles all the music engraving fonts, and sets the music font stack to:\n// Flow.setMusicFont('Bravura', 'Gonville', 'Custom');\n// The webpack config inside Gruntfile.js sets the mode to 'production' to produce a minified build.\nimport { Flow } from '../src/flow';\nimport { loadAllMusicFonts } from '../src/fonts/load_all';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadAllMusicFonts();\nFlow.setMusicFont('Bravura', 'Gonville', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","static","Number","isNaN","t","GCD","length","LCM","shift","LCMM","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","fontInfo","st","trim","wt","sz","scaleFactor","parsedWeight","ITALIC","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","loadWebFont","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","defaultRegistry","registry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","ID","children","attrs","newID","getCategory","rendered","getDefaultRegistry","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","toCSSString","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","validate","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","convertSizeToPointValue","fontSizeInPixels","convertSizeToPixelValue","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","MUSIC_FONT_STACK","clef","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","clefProperties","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integer","noteValue","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","artic","spec","keySpec","notes","acc_list","durationNumber","durationToFraction","ticks","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","UNISON","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySignature","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","state","musicFont","currentMusicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accidentalLinePositionsAndSpaceNeeds","prevNote","extraXSpaceNeededForLeftDisplacedNotehead","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","extraXSpaceNeeded","spacingBetweenStaveLines","sort","staveLineAccidentalLayoutMetrics","maxExtraXSpaceNeeded","accidentalLinePositionAndSpaceNeeds","priorLineMetric","currentLineMetric","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","accidentalCodes","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","registeredFonts","formatterInfo","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","isBold","italic","isItalic","perfectMatch","find","partialMatch","fontSizeInPt","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","create","verticalSpaceNeeded","glyphWidth","getGlyphProps","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","articulationCodes","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","durationString","dots","noteStruct","durationProps","parseDuration","customTypes","durationToTicks","currentTicks","parsedNoteStruct","parseNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","glyphCode","engravingFontResolution","spacingBetweenBlocks","metric","getMetricForGlyph","yOffset","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","symbolModifier","SUPERSCRIPT","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","scaleSize","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","isSuperscript","sub","isSubscript","superSubScale","adj","symbolType","GLYPH","superSubFontSize","getWidthForGlyph","getYShiftForGlyph","getXShiftForGlyph","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","durationToNumber","breve_lines","drawSlashNoteHead","renderGlyph","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","noteUHead","noteLHead","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","keyProperties","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","format","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","TickContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","tick","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","ornamentCodes","adjustForStemDirection","stemUpYOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","getNextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","getPoint","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","dpr","sanitizeCanvasDims","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","elementId","backend","background","renderer","lastContext","buildContext","Backends","CANVAS","SVG","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","extraXSpaceForDisplacedNotehead","glyphLine","num_shiftR","num_width","num_x_shift","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","drawDashedLine","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","accList","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","lineShift","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","getInfo","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClef","clefSpec","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","paddingBetween","accumulator","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","auto_beam","align_rests","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","AlignRestsToNotes","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","buildAndAttach","setId","commaSeparatedRegex","setClass","defaults","easyScoreHook","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","pedal","MIXED","setCustomText","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","formatBegModifiers","plotDebugging","plotMetrics","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","tabToGlyphProps","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","integerToNote","Flow","BUILD","VERSION","DATE","fontNames","fontModuleOrPath","hasKeySignature","getKeySignatures","BravuraFont","bracketTop","bracketBottom","barlineTick","breathMarkTick","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBuyukMucennebSharp","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arrowheadBlackUp","arrowheadBlackDown","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","generatedOn","CommonMetrics","smufl","endPaddingMax","endPaddingMin","unalignedNotePadding","clef_default","shiftX","clef_small","default","gracenote","pedalMarking","digits","shiftLine","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","staveTempo","clefNote_default","clefNote_small","stroke_straight","stroke_wiggly","CustomFont","vexAccidentalMicrotonal1","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","GonvilleSmuflFont","LelandFont","PetalumaFont","petalumaChordMetrics","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","cmp","eq","newArr","last","canvasSelector","start_time","Date","getTime","chordMetrics","loadPetaluma","setMusicFont","fontData","registerInfo","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/esm/entry/vexflow-bravura.js b/build/esm/entry/vexflow-bravura.js new file mode 100644 index 0000000000..d11dbcf0a4 --- /dev/null +++ b/build/esm/entry/vexflow-bravura.js @@ -0,0 +1,10 @@ +import { Flow } from '../src/flow.js'; +import { loadBravura } from '../src/fonts/load_bravura.js'; +import { loadCustom } from '../src/fonts/load_custom.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadBravura(); +loadCustom(); +Flow.setMusicFont('Bravura', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-core.js b/build/esm/entry/vexflow-core.js new file mode 100644 index 0000000000..61664497c8 --- /dev/null +++ b/build/esm/entry/vexflow-core.js @@ -0,0 +1,54 @@ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +import { Flow } from '../src/flow.js'; +import { Font } from '../src/font.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +import { globalObject, RuntimeError } from '../src/util.js'; +const fontModules = { + Bravura: './vexflow-font-bravura.js', + Gonville: './vexflow-font-gonville.js', + Petaluma: './vexflow-font-petaluma.js', + Leland: './vexflow-font-leland.js', + Custom: './vexflow-font-custom.js', +}; +Flow.fetchMusicFont = (fontName, fontModuleOrPath) => __awaiter(void 0, void 0, void 0, function* () { + const font = Font.load(fontName); + if (font.hasData()) { + return; + } + if (!fontModuleOrPath) { + if (fontName in fontModules) { + fontModuleOrPath = fontModules[fontName]; + } + else { + throw new RuntimeError('UnknownFont', `Music font ${fontName} does not exist.`); + } + } + let fontModule; + if (typeof fontModuleOrPath === 'string') { + const module = yield import(fontModuleOrPath); + const g = globalObject(); + const VexFlowFont = g['VexFlowFont']; + if (typeof VexFlowFont !== 'undefined' && typeof VexFlowFont[fontName] !== 'undefined') { + fontModule = VexFlowFont[fontName]; + } + else { + fontModule = module.Font; + } + } + else { + fontModule = fontModuleOrPath; + } + font.setData(fontModule.data); + font.setMetrics(fontModule.metrics); +}); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-debug-with-tests.js b/build/esm/entry/vexflow-debug-with-tests.js new file mode 100644 index 0000000000..cb08380693 --- /dev/null +++ b/build/esm/entry/vexflow-debug-with-tests.js @@ -0,0 +1,11 @@ +import * as VexSrc from '../src/index.js'; +import * as VexTests from '../tests/index.js'; +import { Flow } from '../src/flow.js'; +import { loadAllMusicFonts } from '../src/fonts/load_all.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadAllMusicFonts(); +Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * from '../tests/index.js'; +export default Object.assign(Object.assign({}, VexSrc), VexTests); diff --git a/build/esm/entry/vexflow-debug.js b/build/esm/entry/vexflow-debug.js new file mode 100644 index 0000000000..c1af57c988 --- /dev/null +++ b/build/esm/entry/vexflow-debug.js @@ -0,0 +1,8 @@ +import { Flow } from '../src/flow.js'; +import { loadAllMusicFonts } from '../src/fonts/load_all.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadAllMusicFonts(); +Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-font-bravura.js b/build/esm/entry/vexflow-font-bravura.js new file mode 100644 index 0000000000..5f7d008b74 --- /dev/null +++ b/build/esm/entry/vexflow-font-bravura.js @@ -0,0 +1,7 @@ +import { BravuraFont } from '../src/fonts/bravura_glyphs.js'; +import { CommonMetrics } from '../src/fonts/common_metrics.js'; +export const Font = { + data: BravuraFont, + metrics: CommonMetrics, +}; +export default Font; diff --git a/build/esm/entry/vexflow-font-custom.js b/build/esm/entry/vexflow-font-custom.js new file mode 100644 index 0000000000..865c08286b --- /dev/null +++ b/build/esm/entry/vexflow-font-custom.js @@ -0,0 +1,7 @@ +import { CommonMetrics } from '../src/fonts/common_metrics.js'; +import { CustomFont } from '../src/fonts/custom_glyphs.js'; +export const Font = { + data: CustomFont, + metrics: CommonMetrics, +}; +export default Font; diff --git a/build/esm/entry/vexflow-font-gonville.js b/build/esm/entry/vexflow-font-gonville.js new file mode 100644 index 0000000000..61b518b0ce --- /dev/null +++ b/build/esm/entry/vexflow-font-gonville.js @@ -0,0 +1,7 @@ +import { CommonMetrics } from '../src/fonts/common_metrics.js'; +import { GonvilleSmuflFont } from '../src/fonts/gonville_glyphs.js'; +export const Font = { + data: GonvilleSmuflFont, + metrics: CommonMetrics, +}; +export default Font; diff --git a/build/esm/entry/vexflow-font-leland.js b/build/esm/entry/vexflow-font-leland.js new file mode 100644 index 0000000000..dd7282f33d --- /dev/null +++ b/build/esm/entry/vexflow-font-leland.js @@ -0,0 +1,7 @@ +import { CommonMetrics } from '../src/fonts/common_metrics.js'; +import { LelandFont } from '../src/fonts/leland_glyphs.js'; +export const Font = { + data: LelandFont, + metrics: CommonMetrics, +}; +export default Font; diff --git a/build/esm/entry/vexflow-font-petaluma.js b/build/esm/entry/vexflow-font-petaluma.js new file mode 100644 index 0000000000..a7e95124bd --- /dev/null +++ b/build/esm/entry/vexflow-font-petaluma.js @@ -0,0 +1,7 @@ +import { CommonMetrics } from '../src/fonts/common_metrics.js'; +import { PetalumaFont } from '../src/fonts/petaluma_glyphs.js'; +export const Font = { + data: PetalumaFont, + metrics: CommonMetrics, +}; +export default Font; diff --git a/build/esm/entry/vexflow-gonville.js b/build/esm/entry/vexflow-gonville.js new file mode 100644 index 0000000000..4d7948edf6 --- /dev/null +++ b/build/esm/entry/vexflow-gonville.js @@ -0,0 +1,10 @@ +import { Flow } from '../src/flow.js'; +import { loadCustom } from '../src/fonts/load_custom.js'; +import { loadGonville } from '../src/fonts/load_gonville.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadGonville(); +loadCustom(); +Flow.setMusicFont('Gonville', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-leland.js b/build/esm/entry/vexflow-leland.js new file mode 100644 index 0000000000..3ab21d2ad8 --- /dev/null +++ b/build/esm/entry/vexflow-leland.js @@ -0,0 +1,10 @@ +import { Flow } from '../src/flow.js'; +import { loadCustom } from '../src/fonts/load_custom.js'; +import { loadLeland } from '../src/fonts/load_leland.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadLeland(); +loadCustom(); +Flow.setMusicFont('Leland', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-petaluma.js b/build/esm/entry/vexflow-petaluma.js new file mode 100644 index 0000000000..10532eb61e --- /dev/null +++ b/build/esm/entry/vexflow-petaluma.js @@ -0,0 +1,10 @@ +import { Flow } from '../src/flow.js'; +import { loadCustom } from '../src/fonts/load_custom.js'; +import { loadPetaluma } from '../src/fonts/load_petaluma.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadPetaluma(); +loadCustom(); +Flow.setMusicFont('Petaluma', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow.js b/build/esm/entry/vexflow.js new file mode 100644 index 0000000000..c1af57c988 --- /dev/null +++ b/build/esm/entry/vexflow.js @@ -0,0 +1,8 @@ +import { Flow } from '../src/flow.js'; +import { loadAllMusicFonts } from '../src/fonts/load_all.js'; +import { loadTextFonts } from '../src/fonts/textfonts.js'; +loadAllMusicFonts(); +Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); +loadTextFonts(); +export * from '../src/index.js'; +export * as default from '../src/index.js'; diff --git a/build/esm/package.json b/build/esm/package.json new file mode 100644 index 0000000000..3dbc1ca591 --- /dev/null +++ b/build/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/build/esm/src/accidental.js b/build/esm/src/accidental.js new file mode 100644 index 0000000000..2448901f01 --- /dev/null +++ b/build/esm/src/accidental.js @@ -0,0 +1,366 @@ +import { Fraction } from './fraction.js'; +import { Glyph } from './glyph.js'; +import { Modifier } from './modifier.js'; +import { Music } from './music.js'; +import { Tables } from './tables.js'; +import { isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard.js'; +import { defined, log } from './util.js'; +function L(...args) { + if (Accidental.DEBUG) + log('Vex.Flow.Accidental', args); +} +class Accidental extends Modifier { + static get CATEGORY() { + return "Accidental"; + } + static format(accidentals, state) { + if (!accidentals || accidentals.length === 0) + return; + const musicFont = Tables.currentMusicFont(); + const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding'); + const leftShift = state.left_shift + noteheadAccidentalPadding; + const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing'); + const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); + const accidentalLinePositionsAndSpaceNeeds = []; + let prevNote = undefined; + let extraXSpaceNeededForLeftDisplacedNotehead = 0; + for (let i = 0; i < accidentals.length; ++i) { + const acc = accidentals[i]; + const note = acc.getNote(); + const stave = note.getStave(); + const index = acc.checkIndex(); + const props = note.getKeyProps()[index]; + if (note !== prevNote) { + for (let n = 0; n < note.keys.length; ++n) { + extraXSpaceNeededForLeftDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), extraXSpaceNeededForLeftDisplacedNotehead); + } + prevNote = note; + } + if (stave) { + const lineSpace = stave.getSpacingBetweenLines(); + const y = stave.getYForLine(props.line); + const accLine = Math.round((y / lineSpace) * 2) / 2; + accidentalLinePositionsAndSpaceNeeds.push({ + y, + line: accLine, + extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead, + acc, + spacingBetweenStaveLines: lineSpace, + }); + } + else { + accidentalLinePositionsAndSpaceNeeds.push({ + line: props.line, + extraXSpaceNeeded: extraXSpaceNeededForLeftDisplacedNotehead, + acc, + }); + } + } + accidentalLinePositionsAndSpaceNeeds.sort((a, b) => b.line - a.line); + const staveLineAccidentalLayoutMetrics = []; + let maxExtraXSpaceNeeded = 0; + for (let i = 0; i < accidentalLinePositionsAndSpaceNeeds.length; i++) { + const accidentalLinePositionAndSpaceNeeds = accidentalLinePositionsAndSpaceNeeds[i]; + const priorLineMetric = staveLineAccidentalLayoutMetrics[staveLineAccidentalLayoutMetrics.length - 1]; + let currentLineMetric; + if (!priorLineMetric || (priorLineMetric === null || priorLineMetric === void 0 ? void 0 : priorLineMetric.line) !== accidentalLinePositionAndSpaceNeeds.line) { + currentLineMetric = { + line: accidentalLinePositionAndSpaceNeeds.line, + flatLine: true, + dblSharpLine: true, + numAcc: 0, + width: 0, + column: 0, + }; + staveLineAccidentalLayoutMetrics.push(currentLineMetric); + } + else { + currentLineMetric = priorLineMetric; + } + if (accidentalLinePositionAndSpaceNeeds.acc.type !== 'b' && + accidentalLinePositionAndSpaceNeeds.acc.type !== 'bb') { + currentLineMetric.flatLine = false; + } + if (accidentalLinePositionAndSpaceNeeds.acc.type !== '##') { + currentLineMetric.dblSharpLine = false; + } + currentLineMetric.numAcc++; + currentLineMetric.width += accidentalLinePositionAndSpaceNeeds.acc.getWidth() + accidentalSpacing; + maxExtraXSpaceNeeded = Math.max(accidentalLinePositionAndSpaceNeeds.extraXSpaceNeeded, maxExtraXSpaceNeeded); + } + let totalColumns = 0; + for (let i = 0; i < staveLineAccidentalLayoutMetrics.length; i++) { + let noFurtherConflicts = false; + const groupStart = i; + let groupEnd = i; + while (groupEnd + 1 < staveLineAccidentalLayoutMetrics.length && !noFurtherConflicts) { + if (this.checkCollision(staveLineAccidentalLayoutMetrics[groupEnd], staveLineAccidentalLayoutMetrics[groupEnd + 1])) { + groupEnd++; + } + else { + noFurtherConflicts = true; + } + } + const getGroupLine = (index) => staveLineAccidentalLayoutMetrics[groupStart + index]; + const getGroupLines = (indexes) => indexes.map(getGroupLine); + const lineDifference = (indexA, indexB) => { + const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line); + return a - b; + }; + const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2)); + const groupLength = groupEnd - groupStart + 1; + let endCase = this.checkCollision(staveLineAccidentalLayoutMetrics[groupStart], staveLineAccidentalLayoutMetrics[groupEnd]) + ? 'a' + : 'b'; + switch (groupLength) { + case 3: + if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) { + endCase = 'second_on_bottom'; + } + break; + case 4: + if (notColliding([0, 2], [1, 3])) { + endCase = 'spaced_out_tetrachord'; + } + break; + case 5: + if (endCase === 'b' && notColliding([1, 3])) { + endCase = 'spaced_out_pentachord'; + if (notColliding([0, 2], [2, 4])) { + endCase = 'very_spaced_out_pentachord'; + } + } + break; + case 6: + if (notColliding([0, 3], [1, 4], [2, 5])) { + endCase = 'spaced_out_hexachord'; + } + if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) { + endCase = 'very_spaced_out_hexachord'; + } + break; + default: + break; + } + let groupMember; + let column; + if (groupLength >= 7) { + let patternLength = 2; + let collisionDetected = true; + while (collisionDetected === true) { + collisionDetected = false; + for (let line = 0; line + patternLength < staveLineAccidentalLayoutMetrics.length; line++) { + if (this.checkCollision(staveLineAccidentalLayoutMetrics[line], staveLineAccidentalLayoutMetrics[line + patternLength])) { + collisionDetected = true; + patternLength++; + break; + } + } + } + for (groupMember = i; groupMember <= groupEnd; groupMember++) { + column = ((groupMember - i) % patternLength) + 1; + staveLineAccidentalLayoutMetrics[groupMember].column = column; + totalColumns = totalColumns > column ? totalColumns : column; + } + } + else { + for (groupMember = i; groupMember <= groupEnd; groupMember++) { + column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i]; + staveLineAccidentalLayoutMetrics[groupMember].column = column; + totalColumns = totalColumns > column ? totalColumns : column; + } + } + i = groupEnd; + } + const columnWidths = []; + const columnXOffsets = []; + for (let i = 0; i <= totalColumns; i++) { + columnWidths[i] = 0; + columnXOffsets[i] = 0; + } + columnWidths[0] = leftShift + maxExtraXSpaceNeeded; + columnXOffsets[0] = leftShift; + staveLineAccidentalLayoutMetrics.forEach((line) => { + if (line.width > columnWidths[line.column]) + columnWidths[line.column] = line.width; + }); + for (let i = 1; i < columnWidths.length; i++) { + columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1]; + } + const totalShift = columnXOffsets[columnXOffsets.length - 1]; + let accCount = 0; + staveLineAccidentalLayoutMetrics.forEach((line) => { + let lineWidth = 0; + const lastAccOnLine = accCount + line.numAcc; + for (accCount; accCount < lastAccOnLine; accCount++) { + const xShift = columnXOffsets[line.column - 1] + lineWidth + maxExtraXSpaceNeeded; + accidentalLinePositionsAndSpaceNeeds[accCount].acc.setXShift(xShift); + lineWidth += accidentalLinePositionsAndSpaceNeeds[accCount].acc.getWidth() + accidentalSpacing; + L('Line, accCount, shift: ', line.line, accCount, xShift); + } + }); + state.left_shift = totalShift + additionalPadding; + } + static checkCollision(line1, line2) { + let clearance = line2.line - line1.line; + let clearanceRequired = 3; + if (clearance > 0) { + clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0; + if (line1.dblSharpLine) + clearance -= 0.5; + } + else { + clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0; + if (line2.dblSharpLine) + clearance -= 0.5; + } + const collision = Math.abs(clearance) < clearanceRequired; + L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision); + return collision; + } + static applyAccidentals(voices, keySignature) { + const tickPositions = []; + const tickNoteMap = {}; + voices.forEach((voice) => { + const tickPosition = new Fraction(0, 1); + const tickable = voice.getTickables(); + tickable.forEach((t) => { + if (t.shouldIgnoreTicks()) + return; + const notesAtPosition = tickNoteMap[tickPosition.value()]; + if (!notesAtPosition) { + tickPositions.push(tickPosition.value()); + tickNoteMap[tickPosition.value()] = [t]; + } + else { + notesAtPosition.push(t); + } + tickPosition.add(t.getTicks()); + }); + }); + const music = new Music(); + if (!keySignature) + keySignature = 'C'; + const scaleMapKey = music.createScaleMap(keySignature); + const scaleMap = {}; + tickPositions.forEach((tickPos) => { + const tickables = tickNoteMap[tickPos]; + const modifiedPitches = []; + const processNote = (t) => { + if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) { + return; + } + const staveNote = t; + staveNote.keys.forEach((keyString, keyIndex) => { + const key = music.getNoteParts(keyString.split('/')[0]); + const octave = keyString.split('/')[1]; + const accidentalString = key.accidental || 'n'; + const pitch = key.root + accidentalString; + if (!scaleMap[key.root + octave]) + scaleMap[key.root + octave] = scaleMapKey[key.root]; + const sameAccidental = scaleMap[key.root + octave] === pitch; + const previouslyModified = modifiedPitches.indexOf(keyString) > -1; + staveNote.getModifiers().forEach((modifier, index) => { + if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) { + staveNote.getModifiers().splice(index, 1); + } + }); + if (!sameAccidental || (sameAccidental && previouslyModified)) { + scaleMap[key.root + octave] = pitch; + const accidental = new Accidental(accidentalString); + staveNote.addModifier(accidental, keyIndex); + modifiedPitches.push(keyString); + } + }); + staveNote.getModifiers().forEach((modifier) => { + if (isGraceNoteGroup(modifier)) { + modifier.getGraceNotes().forEach(processNote); + } + }); + }; + tickables.forEach(processNote); + }); + } + constructor(type) { + super(); + L('New accidental: ', type); + this.type = type; + this.position = Modifier.Position.LEFT; + this.render_options = { + font_scale: Tables.NOTATION_FONT_SCALE, + parenLeftPadding: 2, + parenRightPadding: 2, + }; + this.accidental = Tables.accidentalCodes(this.type); + defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`); + this.cautionary = false; + this.reset(); + } + reset() { + const fontScale = this.render_options.font_scale; + this.glyph = new Glyph(this.accidental.code, fontScale); + this.glyph.setOriginX(1.0); + if (this.cautionary) { + this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale); + this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale); + this.parenLeft.setOriginX(1.0); + this.parenRight.setOriginX(1.0); + } + } + getWidth() { + if (this.cautionary) { + const parenLeft = defined(this.parenLeft); + const parenRight = defined(this.parenRight); + const parenWidth = parenLeft.getMetrics().width + + parenRight.getMetrics().width + + this.render_options.parenLeftPadding + + this.render_options.parenRightPadding; + return this.glyph.getMetrics().width + parenWidth; + } + else { + return this.glyph.getMetrics().width; + } + } + setNote(note) { + defined(note, 'ArgumentError', `Bad note value: ${note}`); + this.note = note; + if (isGraceNote(note)) { + this.render_options.font_scale = 25; + this.reset(); + } + return this; + } + setAsCautionary() { + this.cautionary = true; + this.render_options.font_scale = 28; + this.reset(); + return this; + } + draw() { + const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(position, index); + let accX = start.x + x_shift; + const accY = start.y + y_shift; + L('Rendering: ', type, accX, accY); + if (!cautionary) { + glyph.render(ctx, accX, accY); + } + else { + const parenLeft = defined(this.parenLeft); + const parenRight = defined(this.parenRight); + parenRight.render(ctx, accX, accY); + accX -= parenRight.getMetrics().width; + accX -= parenRightPadding; + accX -= this.accidental.parenRightPaddingAdjustment; + glyph.render(ctx, accX, accY); + accX -= glyph.getMetrics().width; + accX -= parenLeftPadding; + parenLeft.render(ctx, accX, accY); + } + } +} +Accidental.DEBUG = false; +export { Accidental }; diff --git a/build/esm/src/annotation.js b/build/esm/src/annotation.js new file mode 100644 index 0000000000..ea004366e4 --- /dev/null +++ b/build/esm/src/annotation.js @@ -0,0 +1,239 @@ +import { Element } from './element.js'; +import { Modifier, ModifierPosition } from './modifier.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { TextFormatter } from './textformatter.js'; +import { isStemmableNote, isTabNote } from './typeguard.js'; +import { log } from './util.js'; +function L(...args) { + if (Annotation.DEBUG) + log('Vex.Flow.Annotation', args); +} +export var AnnotationHorizontalJustify; +(function (AnnotationHorizontalJustify) { + AnnotationHorizontalJustify[AnnotationHorizontalJustify["LEFT"] = 1] = "LEFT"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER"] = 2] = "CENTER"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["RIGHT"] = 3] = "RIGHT"; + AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {})); +export var AnnotationVerticalJustify; +(function (AnnotationVerticalJustify) { + AnnotationVerticalJustify[AnnotationVerticalJustify["TOP"] = 1] = "TOP"; + AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER"] = 2] = "CENTER"; + AnnotationVerticalJustify[AnnotationVerticalJustify["BOTTOM"] = 3] = "BOTTOM"; + AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {})); +class Annotation extends Modifier { + static get CATEGORY() { + return "Annotation"; + } + static get minAnnotationPadding() { + const musicFont = Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + static format(annotations, state) { + if (!annotations || annotations.length === 0) + return false; + let leftWidth = 0; + let rightWidth = 0; + let maxLeftGlyphWidth = 0; + let maxRightGlyphWidth = 0; + for (let i = 0; i < annotations.length; ++i) { + const annotation = annotations[i]; + const textFormatter = TextFormatter.create(annotation.textFont); + const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE; + let verticalSpaceNeeded = textLines; + const note = annotation.checkAttachedNote(); + const glyphWidth = note.getGlyphProps().getWidth(); + const textWidth = textFormatter.getWidthForTextInPx(annotation.text); + if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) { + maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); + leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding; + } + else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { + maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); + rightWidth = Math.max(rightWidth, textWidth); + } + else { + leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding; + rightWidth = Math.max(rightWidth, textWidth / 2); + maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); + maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); + } + const stave = note.getStave(); + const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP; + let stemHeight = 0; + let lines = 5; + if (isTabNote(note)) { + if (note.render_options.draw_stem) { + const stem = note.getStem(); + if (stem) { + stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE; + } + } + else { + stemHeight = 0; + } + } + else if (isStemmableNote(note)) { + const stem = note.getStem(); + if (stem && note.getNoteType() === 'n') { + stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE; + } + } + if (stave) { + lines = stave.getNumLines(); + } + if (annotation.verticalJustification === this.VerticalJustify.TOP) { + let noteLine = note.getLineNumber(true); + if (isTabNote(note)) { + noteLine = lines - (note.leastString() - 0.5); + } + if (stemDirection === Stem.UP) { + noteLine += stemHeight; + } + const curTop = noteLine + state.top_text_line + 0.5; + if (curTop < lines) { + annotation.setTextLine(lines - noteLine); + verticalSpaceNeeded += lines - noteLine; + state.top_text_line = verticalSpaceNeeded; + } + else { + annotation.setTextLine(state.top_text_line); + state.top_text_line += verticalSpaceNeeded; + } + } + else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) { + let noteLine = lines - note.getLineNumber(); + if (isTabNote(note)) { + noteLine = note.greatestString() - 1; + } + if (stemDirection === Stem.DOWN) { + noteLine += stemHeight; + } + const curBottom = noteLine + state.text_line + 1; + if (curBottom < lines) { + annotation.setTextLine(lines - curBottom); + verticalSpaceNeeded += lines - curBottom; + state.text_line = verticalSpaceNeeded; + } + else { + annotation.setTextLine(state.text_line); + state.text_line += verticalSpaceNeeded; + } + } + else { + annotation.setTextLine(state.text_line); + } + } + const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); + const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); + state.left_shift += leftOverlap; + state.right_shift += rightOverlap; + return true; + } + constructor(text) { + super(); + this.text = text; + this.horizontalJustification = AnnotationHorizontalJustify.CENTER; + this.verticalJustification = AnnotationVerticalJustify.TOP; + this.resetFont(); + this.setWidth(Tables.textWidth(text)); + } + setVerticalJustification(just) { + this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just; + return this; + } + getJustification() { + return this.horizontalJustification; + } + setJustification(just) { + this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP; + const textFormatter = TextFormatter.create(this.textFont); + const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index); + this.setRendered(); + ctx.save(); + this.applyStyle(); + ctx.openGroup('annotation', this.getAttribute('id')); + ctx.setFont(this.textFont); + const text_width = textFormatter.getWidthForTextInPx(this.text); + const text_height = textFormatter.getYForStringInPx(this.text).height; + let x; + let y; + if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) { + x = start.x; + } + else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { + x = start.x - text_width; + } + else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) { + x = start.x - text_width / 2; + } + else { + x = note.getStemX() - text_width / 2; + } + let stem_ext = {}; + let spacing = 0; + const has_stem = note.hasStem(); + const stave = note.checkStave(); + if (has_stem) { + stem_ext = note.checkStem().getExtents(); + spacing = stave.getSpacingBetweenLines(); + } + if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) { + const ys = note.getYs(); + y = ys.reduce((a, b) => (a > b ? a : b)); + y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height; + if (has_stem && stemDirection === Stem.DOWN) { + y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line); + } + } + else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) { + const yt = note.getYForTopText(this.text_line) - 1; + const yb = stave.getYForBottomText(this.text_line); + y = yt + (yb - yt) / 2 + text_height / 2; + } + else if (this.verticalJustification === AnnotationVerticalJustify.TOP) { + const topY = Math.min(...note.getYs()); + y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE; + if (has_stem && stemDirection === Stem.UP) { + spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing; + y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1)); + } + } + else { + const extents = note.getStemExtents(); + y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2; + } + L('Rendering annotation: ', this.text, x, y); + ctx.fillText(this.text, x, y); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +Annotation.DEBUG = false; +Annotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); +Annotation.HorizontalJustify = AnnotationHorizontalJustify; +Annotation.HorizontalJustifyString = { + left: AnnotationHorizontalJustify.LEFT, + right: AnnotationHorizontalJustify.RIGHT, + center: AnnotationHorizontalJustify.CENTER, + centerStem: AnnotationHorizontalJustify.CENTER_STEM, +}; +Annotation.VerticalJustify = AnnotationVerticalJustify; +Annotation.VerticalJustifyString = { + above: AnnotationVerticalJustify.TOP, + top: AnnotationVerticalJustify.TOP, + below: AnnotationVerticalJustify.BOTTOM, + bottom: AnnotationVerticalJustify.BOTTOM, + center: AnnotationVerticalJustify.CENTER, + centerStem: AnnotationVerticalJustify.CENTER_STEM, +}; +export { Annotation }; diff --git a/build/esm/src/articulation.js b/build/esm/src/articulation.js new file mode 100644 index 0000000000..cc3db1f487 --- /dev/null +++ b/build/esm/src/articulation.js @@ -0,0 +1,279 @@ +import { Glyph } from './glyph.js'; +import { Modifier } from './modifier.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard.js'; +import { defined, log, RuntimeError } from './util.js'; +function L(...args) { + if (Articulation.DEBUG) + log('Vex.Flow.Articulation', args); +} +const { ABOVE, BELOW } = Modifier.Position; +function roundToNearestHalf(mathFn, value) { + return mathFn(value / 0.5) * 0.5; +} +function isWithinLines(line, position) { + return position === ABOVE ? line <= 5 : line >= 1; +} +function getRoundingFunction(line, position) { + if (isWithinLines(line, position)) { + if (position === ABOVE) { + return Math.ceil; + } + else { + return Math.floor; + } + } + else { + return Math.round; + } +} +function snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) { + const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line); + const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position); + const onStaffLine = snappedLine % 1 === 0; + if (canSnapToStaffSpace && onStaffLine) { + const HALF_STAFF_SPACE = 0.5; + return snappedLine + HALF_STAFF_SPACE * -offsetDirection; + } + else { + return snappedLine; + } +} +const isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note); +function getTopY(note, textLine) { + const stemDirection = note.getStemDirection(); + const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); + if (isStaveOrGraceNote(note)) { + if (note.hasStem()) { + if (stemDirection === Stem.UP) { + return stemTipY; + } + else { + return stemBaseY; + } + } + else { + return Math.min(...note.getYs()); + } + } + else if (isTabNote(note)) { + if (note.hasStem()) { + if (stemDirection === Stem.UP) { + return stemTipY; + } + else { + return note.checkStave().getYForTopText(textLine); + } + } + else { + return note.checkStave().getYForTopText(textLine); + } + } + else { + throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); + } +} +function getBottomY(note, textLine) { + const stemDirection = note.getStemDirection(); + const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); + if (isStaveOrGraceNote(note)) { + if (note.hasStem()) { + if (stemDirection === Stem.UP) { + return stemBaseY; + } + else { + return stemTipY; + } + } + else { + return Math.max(...note.getYs()); + } + } + else if (isTabNote(note)) { + if (note.hasStem()) { + if (stemDirection === Stem.UP) { + return note.checkStave().getYForBottomText(textLine); + } + else { + return stemTipY; + } + } + else { + return note.checkStave().getYForBottomText(textLine); + } + } + else { + throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); + } +} +function getInitialOffset(note, position) { + const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) || + (position === BELOW && note.getStemDirection() === Stem.DOWN); + if (isStaveOrGraceNote(note)) { + if (note.hasStem() && isOnStemTip) { + return 0.5; + } + else { + return 1; + } + } + else { + if (note.hasStem() && isOnStemTip) { + return 1; + } + else { + return 0; + } + } +} +class Articulation extends Modifier { + static get CATEGORY() { + return "Articulation"; + } + static format(articulations, state) { + if (!articulations || articulations.length === 0) + return false; + const margin = 0.5; + let maxGlyphWidth = 0; + const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin); + articulations.forEach((articulation) => { + const note = articulation.checkAttachedNote(); + maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth); + let lines = 5; + const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP; + let stemHeight = 0; + if (isStemmableNote(note)) { + const stem = note.getStem(); + if (stem) { + stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE; + } + } + const stave = note.getStave(); + if (stave) { + lines = stave.getNumLines(); + } + if (articulation.getPosition() === ABOVE) { + let noteLine = note.getLineNumber(true); + if (stemDirection === Stem.UP) { + noteLine += stemHeight; + } + let increment = getIncrement(articulation, state.top_text_line, ABOVE); + const curTop = noteLine + state.top_text_line + 0.5; + if (!articulation.articulation.between_lines && curTop < lines) { + increment += lines - curTop; + } + articulation.setTextLine(state.top_text_line); + state.top_text_line += increment; + } + else if (articulation.getPosition() === BELOW) { + let noteLine = Math.max(lines - note.getLineNumber(), 0); + if (stemDirection === Stem.DOWN) { + noteLine += stemHeight; + } + let increment = getIncrement(articulation, state.text_line, BELOW); + const curBottom = noteLine + state.text_line + 0.5; + if (!articulation.articulation.between_lines && curBottom < lines) { + increment += lines - curBottom; + } + articulation.setTextLine(state.text_line); + state.text_line += increment; + } + }); + const width = articulations + .map((articulation) => articulation.getWidth()) + .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth)); + const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0)); + state.left_shift += overlap / 2; + state.right_shift += overlap / 2; + return true; + } + static easyScoreHook({ articulations }, note, builder) { + if (!articulations) + return; + const articNameToCode = { + staccato: 'a.', + tenuto: 'a-', + accent: 'a>', + }; + articulations + .split(',') + .map((articString) => articString.trim().split('.')) + .map(([name, position]) => { + const artic = { type: articNameToCode[name] }; + if (position) + artic.position = Modifier.PositionString[position]; + return builder.getFactory().Articulation(artic); + }) + .map((artic) => note.addModifier(artic, 0)); + } + constructor(type) { + super(); + this.type = type; + this.position = ABOVE; + this.render_options = { + font_scale: Tables.NOTATION_FONT_SCALE, + }; + this.reset(); + } + reset() { + this.articulation = Tables.articulationCodes(this.type); + if (!this.articulation) { + this.articulation = { code: this.type, between_lines: false }; + if (this.type.endsWith('Above')) + this.position = ABOVE; + if (this.type.endsWith('Below')) + this.position = BELOW; + } + const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code; + this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale); + defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`); + this.setWidth(defined(this.glyph.getMetrics().width)); + } + setBetweenLines(betweenLines = true) { + this.articulation.between_lines = betweenLines; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const index = this.checkIndex(); + const { position, glyph, text_line: textLine } = this; + const canSitBetweenLines = this.articulation.between_lines; + const stave = note.checkStave(); + const staffSpace = stave.getSpacingBetweenLines(); + const isTab = isTabNote(note); + const { x } = note.getModifierStartXY(position, index); + const shouldSitOutsideStaff = !canSitBetweenLines || isTab; + const initialOffset = getInitialOffset(note, position); + const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0); + let y = { + [ABOVE]: () => { + glyph.setOrigin(0.5, 1); + const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace; + return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y; + }, + [BELOW]: () => { + glyph.setOrigin(0.5, 0); + const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace; + return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y; + }, + }[position](); + if (!isTab) { + const offsetDirection = position === ABOVE ? -1 : +1; + const noteLine = note.getKeyProps()[index].line; + const distanceFromNote = (note.getYs()[index] - y) / staffSpace; + const articLine = distanceFromNote + Number(noteLine); + const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection); + if (isWithinLines(snappedLine, position)) + glyph.setOrigin(0.5, 0.5); + y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection; + } + L(`Rendering articulation at (x: ${x}, y: ${y})`); + glyph.render(ctx, x, y); + } +} +Articulation.DEBUG = false; +Articulation.INITIAL_OFFSET = -0.5; +export { Articulation }; diff --git a/build/esm/src/barnote.js b/build/esm/src/barnote.js new file mode 100644 index 0000000000..a4004c9aa5 --- /dev/null +++ b/build/esm/src/barnote.js @@ -0,0 +1,57 @@ +import { Note } from './note.js'; +import { Barline, BarlineType } from './stavebarline.js'; +import { log } from './util.js'; +function L(...args) { + if (BarNote.DEBUG) + log('Vex.Flow.BarNote', args); +} +class BarNote extends Note { + static get CATEGORY() { + return "BarNote"; + } + constructor(type = BarlineType.SINGLE) { + super({ duration: 'b' }); + this.metrics = { + widths: {}, + }; + const TYPE = BarlineType; + this.metrics.widths = { + [TYPE.SINGLE]: 8, + [TYPE.DOUBLE]: 12, + [TYPE.END]: 15, + [TYPE.REPEAT_BEGIN]: 14, + [TYPE.REPEAT_END]: 14, + [TYPE.REPEAT_BOTH]: 18, + [TYPE.NONE]: 0, + }; + this.ignore_ticks = true; + this.setType(type); + } + getType() { + return this.type; + } + setType(type) { + this.type = typeof type === 'string' ? Barline.typeString[type] : type; + this.setWidth(this.metrics.widths[this.type]); + return this; + } + addToModifierContext(mc) { + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + const ctx = this.checkContext(); + L('Rendering bar line at: ', this.getAbsoluteX()); + this.applyStyle(ctx); + const barline = new Barline(this.type); + barline.setX(this.getAbsoluteX()); + barline.draw(this.checkStave()); + this.restoreStyle(ctx); + this.setRendered(); + } +} +BarNote.DEBUG = false; +export { BarNote }; diff --git a/build/esm/src/beam.js b/build/esm/src/beam.js new file mode 100644 index 0000000000..4e955a3cf0 --- /dev/null +++ b/build/esm/src/beam.js @@ -0,0 +1,642 @@ +import { Element } from './element.js'; +import { Fraction } from './fraction.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { isStaveNote, isTabNote } from './typeguard.js'; +import { RuntimeError } from './util.js'; +function calculateStemDirection(notes) { + let lineSum = 0; + notes.forEach((note) => { + if (note.keyProps) { + note.keyProps.forEach((keyProp) => { + lineSum += keyProp.line - 3; + }); + } + }); + if (lineSum >= 0) { + return Stem.DOWN; + } + return Stem.UP; +} +function getStemSlope(firstNote, lastNote) { + const firstStemTipY = firstNote.getStemExtents().topY; + const firstStemX = firstNote.getStemX(); + const lastStemTipY = lastNote.getStemExtents().topY; + const lastStemX = lastNote.getStemX(); + return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX); +} +export const BEAM_LEFT = 'L'; +export const BEAM_RIGHT = 'R'; +export const BEAM_BOTH = 'B'; +export class Beam extends Element { + static get CATEGORY() { + return "Beam"; + } + getStemDirection() { + return this.stem_direction; + } + static getDefaultBeamGroups(time_sig) { + if (!time_sig || time_sig === 'c') { + time_sig = '4/4'; + } + const defaults = { + '1/2': ['1/2'], + '2/2': ['1/2'], + '3/2': ['1/2'], + '4/2': ['1/2'], + '1/4': ['1/4'], + '2/4': ['1/4'], + '3/4': ['1/4'], + '4/4': ['1/4'], + '1/8': ['1/8'], + '2/8': ['2/8'], + '3/8': ['3/8'], + '4/8': ['2/8'], + '1/16': ['1/16'], + '2/16': ['2/16'], + '3/16': ['3/16'], + '4/16': ['2/16'], + }; + const groups = defaults[time_sig]; + if (groups === undefined) { + const beatTotal = parseInt(time_sig.split('/')[0], 10); + const beatValue = parseInt(time_sig.split('/')[1], 10); + const tripleMeter = beatTotal % 3 === 0; + if (tripleMeter) { + return [new Fraction(3, beatValue)]; + } + else if (beatValue > 4) { + return [new Fraction(2, beatValue)]; + } + else if (beatValue <= 4) { + return [new Fraction(1, beatValue)]; + } + } + else { + return groups.map((group) => new Fraction().parse(group)); + } + return [new Fraction(1, 4)]; + } + static applyAndGetBeams(voice, stem_direction, groups) { + return Beam.generateBeams(voice.getTickables(), { groups, stem_direction }); + } + static generateBeams(notes, config = {}) { + if (!config.groups || !config.groups.length) { + config.groups = [new Fraction(2, 8)]; + } + const tickGroups = config.groups.map((group) => { + if (!group.multiply) { + throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions'); + } + return group.clone().multiply(Tables.RESOLUTION, 1); + }); + const unprocessedNotes = notes; + let currentTickGroup = 0; + let noteGroups = []; + let currentGroup = []; + function getTotalTicks(vf_notes) { + return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1)); + } + function nextTickGroup() { + if (tickGroups.length - 1 > currentTickGroup) { + currentTickGroup += 1; + } + else { + currentTickGroup = 0; + } + } + function createGroups() { + let nextGroup = []; + let currentGroupTotalTicks = new Fraction(0, 1); + unprocessedNotes.forEach((unprocessedNote) => { + nextGroup = []; + if (unprocessedNote.shouldIgnoreTicks()) { + noteGroups.push(currentGroup); + currentGroup = nextGroup; + return; + } + currentGroup.push(unprocessedNote); + const ticksPerGroup = tickGroups[currentTickGroup].clone(); + const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks); + const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8; + if (unbeamable && unprocessedNote.getTuplet()) { + ticksPerGroup.numerator *= 2; + } + if (totalTicks.greaterThan(ticksPerGroup)) { + if (!unbeamable) { + const note = currentGroup.pop(); + if (note) + nextGroup.push(note); + } + noteGroups.push(currentGroup); + do { + currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]); + nextTickGroup(); + } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup])); + currentGroup = nextGroup; + } + else if (totalTicks.equals(ticksPerGroup)) { + noteGroups.push(currentGroup); + currentGroupTotalTicks = new Fraction(0, 1); + currentGroup = nextGroup; + nextTickGroup(); + } + }); + if (currentGroup.length > 0) { + noteGroups.push(currentGroup); + } + } + function getBeamGroups() { + return noteGroups.filter((group) => { + if (group.length > 1) { + let beamable = true; + group.forEach((note) => { + if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) { + beamable = false; + } + }); + return beamable; + } + return false; + }); + } + function sanitizeGroups() { + const sanitizedGroups = []; + noteGroups.forEach((group) => { + let tempGroup = []; + group.forEach((note, index, group) => { + const isFirstOrLast = index === 0 || index === group.length - 1; + const prevNote = group[index - 1]; + const breaksOnEachRest = !config.beam_rests && note.isRest(); + const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast; + let breakOnStemChange = false; + if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) { + const prevDirection = prevNote.getStemDirection(); + const currentDirection = note.getStemDirection(); + breakOnStemChange = currentDirection !== prevDirection; + } + const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8; + const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration; + if (shouldBreak) { + if (tempGroup.length > 0) { + sanitizedGroups.push(tempGroup); + } + tempGroup = breakOnStemChange ? [note] : []; + } + else { + tempGroup.push(note); + } + }); + if (tempGroup.length > 0) { + sanitizedGroups.push(tempGroup); + } + }); + noteGroups = sanitizedGroups; + } + function formatStems() { + noteGroups.forEach((group) => { + let stemDirection; + if (config.maintain_stem_directions) { + const note = findFirstNote(group); + stemDirection = note ? note.getStemDirection() : Stem.UP; + } + else { + if (config.stem_direction) { + stemDirection = config.stem_direction; + } + else { + stemDirection = calculateStemDirection(group); + } + } + applyStemDirection(group, stemDirection); + }); + } + function findFirstNote(group) { + for (let i = 0; i < group.length; i++) { + const note = group[i]; + if (!note.isRest()) { + return note; + } + } + return false; + } + function applyStemDirection(group, direction) { + group.forEach((note) => { + note.setStemDirection(direction); + }); + } + function getTuplets() { + const uniqueTuplets = []; + noteGroups.forEach((group) => { + let tuplet; + group.forEach((note) => { + const noteTuplet = note.getTuplet(); + if (noteTuplet && tuplet !== noteTuplet) { + tuplet = noteTuplet; + uniqueTuplets.push(tuplet); + } + }); + }); + return uniqueTuplets; + } + createGroups(); + sanitizeGroups(); + formatStems(); + const beamedNoteGroups = getBeamGroups(); + const allTuplets = getTuplets(); + const beams = []; + beamedNoteGroups.forEach((group) => { + const beam = new Beam(group); + if (config.show_stemlets) { + beam.render_options.show_stemlets = true; + } + if (config.secondary_breaks) { + beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks); + } + if (config.flat_beams === true) { + beam.render_options.flat_beams = true; + beam.render_options.flat_beam_offset = config.flat_beam_offset; + } + beams.push(beam); + }); + allTuplets.forEach((tuplet) => { + const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? -1 : 1; + tuplet.setTupletLocation(direction); + let bracketed = false; + for (let i = 0; i < tuplet.notes.length; i++) { + const note = tuplet.notes[i]; + if (!note.hasBeam()) { + bracketed = true; + break; + } + } + tuplet.setBracketed(bracketed); + }); + return beams; + } + constructor(notes, auto_stem = false) { + super(); + this.slope = 0; + this.y_shift = 0; + this.forcedPartialDirections = {}; + if (!notes || notes.length === 0) { + throw new RuntimeError('BadArguments', 'No notes provided for beam.'); + } + if (notes.length === 1) { + throw new RuntimeError('BadArguments', 'Too few notes for beam.'); + } + this.ticks = notes[0].getIntrinsicTicks(); + if (this.ticks >= Tables.durationToTicks('4')) { + throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.'); + } + let i; + let note; + this.stem_direction = notes[0].getStemDirection(); + let stem_direction = this.stem_direction; + if (auto_stem && isStaveNote(notes[0])) { + stem_direction = calculateStemDirection(notes); + } + else if (auto_stem && isTabNote(notes[0])) { + const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0); + stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN; + } + for (i = 0; i < notes.length; ++i) { + note = notes[i]; + if (auto_stem) { + note.setStemDirection(stem_direction); + this.stem_direction = stem_direction; + } + note.setBeam(this); + } + this.postFormatted = false; + this.notes = notes; + this.beam_count = this.getBeamCount(); + this.break_on_indices = []; + this.render_options = { + beam_width: 5, + max_slope: 0.25, + min_slope: -0.25, + slope_iterations: 20, + slope_cost: 100, + show_stemlets: false, + stemlet_extension: 7, + partial_beam_length: 10, + flat_beams: false, + min_flat_beam_offset: 15, + }; + } + getNotes() { + return this.notes; + } + getBeamCount() { + const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count); + const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max)); + return maxBeamCount; + } + breakSecondaryAt(indices) { + this.break_on_indices = indices; + return this; + } + setPartialBeamSideAt(noteIndex, side) { + this.forcedPartialDirections[noteIndex] = side; + return this; + } + unsetPartialBeamSideAt(noteIndex) { + delete this.forcedPartialDirections[noteIndex]; + return this; + } + getSlopeY(x, first_x_px, first_y_px, slope) { + return first_y_px + (x - first_x_px) * slope; + } + calculateSlope() { + const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this; + const firstNote = notes[0]; + const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]); + const increment = (max_slope - min_slope) / slope_iterations; + let minCost = Number.MAX_VALUE; + let bestSlope = 0; + let yShift = 0; + for (let slope = min_slope; slope <= max_slope; slope += increment) { + let totalStemExtension = 0; + let yShiftTemp = 0; + for (let i = 1; i < notes.length; ++i) { + const note = notes[i]; + if (note.hasStem() || note.isRest()) { + const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp; + const stemTipY = note.getStemExtents().topY; + if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) { + const diff = Math.abs(stemTipY - adjustedStemTipY); + yShiftTemp += diff * -stemDirection; + totalStemExtension += diff * i; + } + else { + totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection; + } + } + } + const idealSlope = initialSlope / 2; + const distanceFromIdeal = Math.abs(idealSlope - slope); + const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension); + if (cost < minCost) { + minCost = cost; + bestSlope = slope; + yShift = yShiftTemp; + } + } + this.slope = bestSlope; + this.y_shift = yShift; + } + calculateFlatSlope() { + const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this; + let total = 0; + let extremeY = 0; + let extremeBeamCount = 0; + let currentExtreme = 0; + for (let i = 0; i < notes.length; i++) { + const note = notes[i]; + const stemTipY = note.getStemExtents().topY; + total += stemTipY; + if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) { + currentExtreme = stemTipY; + extremeY = Math.max(...note.getYs()); + extremeBeamCount = note.getBeamCount(); + } + else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) { + currentExtreme = stemTipY; + extremeY = Math.min(...note.getYs()); + extremeBeamCount = note.getBeamCount(); + } + } + let offset = total / notes.length; + const beamWidth = beam_width * 1.5; + const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth; + const newOffset = extremeY + extremeTest * -stem_direction; + if (stem_direction === Stem.DOWN && offset < newOffset) { + offset = extremeY + extremeTest; + } + else if (stem_direction === Stem.UP && offset > newOffset) { + offset = extremeY - extremeTest; + } + if (!flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + else if (stem_direction === Stem.UP && offset < flat_beam_offset) { + this.render_options.flat_beam_offset = offset; + } + this.slope = 0; + this.y_shift = 0; + } + getBeamYToDraw() { + const firstNote = this.notes[0]; + const firstStemTipY = firstNote.getStemExtents().topY; + let beamY = firstStemTipY; + if (this.render_options.flat_beams && this.render_options.flat_beam_offset) { + beamY = this.render_options.flat_beam_offset; + } + return beamY; + } + applyStemExtensions() { + const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this; + const firstNote = notes[0]; + const firstStemTipY = this.getBeamYToDraw(); + const firstStemX = firstNote.getStemX(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const stem = note.getStem(); + if (stem) { + const stemX = note.getStemX(); + const { topY: stemTipY } = note.getStemExtents(); + const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift; + const preBeamExtension = stem.getExtension(); + const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY; + let crossStemExtension = 0; + if (note.getStemDirection() !== this.stem_direction) { + const beamCount = note.getGlyphProps().beam_count; + crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width; + } + stem.setExtension(preBeamExtension + beamExtension + crossStemExtension); + stem.adjustHeightForBeam(); + if (note.isRest() && show_stemlets) { + const beamWidth = beam_width; + const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth; + stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension); + } + } + } + } + lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) { + if (duration === '4') { + return BEAM_LEFT; + } + const forcedBeamDirection = this.forcedPartialDirections[noteIndex]; + if (forcedBeamDirection) + return forcedBeamDirection; + const lookup_duration = `${Tables.durationToNumber(duration) / 2}`; + const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration); + const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration); + const note_gets_beam = tick < Tables.durationToTicks(lookup_duration); + if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { + return BEAM_BOTH; + } + else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) { + return BEAM_LEFT; + } + else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { + return BEAM_RIGHT; + } + return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex); + } + getBeamLines(duration) { + const tick_of_duration = Tables.durationToTicks(duration); + let beam_started = false; + const beam_lines = []; + let current_beam = undefined; + const partial_beam_length = this.render_options.partial_beam_length; + let previous_should_break = false; + let tick_tally = 0; + for (let i = 0; i < this.notes.length; ++i) { + const note = this.notes[i]; + const ticks = note.getTicks().value(); + tick_tally += ticks; + let should_break = false; + if (parseInt(duration, 10) >= 8) { + should_break = this.break_on_indices.indexOf(i) !== -1; + if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) { + tick_tally = 0; + should_break = true; + } + } + const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration; + const stem_x = note.getStemX() - Stem.WIDTH / 2; + const prev_note = this.notes[i - 1]; + const next_note = this.notes[i + 1]; + const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration; + const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration; + const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; + if (note_gets_beam) { + if (beam_started) { + current_beam = beam_lines[beam_lines.length - 1]; + current_beam.end = stem_x; + if (should_break) { + beam_started = false; + if (next_note && !next_note_gets_beam && current_beam.end === undefined) { + current_beam.end = current_beam.start - partial_beam_length; + } + } + } + else { + current_beam = { start: stem_x, end: undefined }; + beam_started = true; + if (beam_alone) { + const prev_tick = prev_note.getIntrinsicTicks(); + const next_tick = next_note.getIntrinsicTicks(); + const tick = note.getIntrinsicTicks(); + const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i); + if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) { + current_beam.end = current_beam.start - partial_beam_length; + } + else { + current_beam.end = current_beam.start + partial_beam_length; + } + } + else if (!next_note_gets_beam) { + if ((previous_should_break || i === 0) && next_note) { + current_beam.end = current_beam.start + partial_beam_length; + } + else { + current_beam.end = current_beam.start - partial_beam_length; + } + } + else if (should_break) { + current_beam.end = current_beam.start - partial_beam_length; + beam_started = false; + } + beam_lines.push(current_beam); + } + } + else { + beam_started = false; + } + previous_should_break = should_break; + } + const last_beam = beam_lines[beam_lines.length - 1]; + if (last_beam && last_beam.end === undefined) { + last_beam.end = last_beam.start - partial_beam_length; + } + return beam_lines; + } + drawStems(ctx) { + this.notes.forEach((note) => { + const stem = note.getStem(); + if (stem) { + const stem_x = note.getStemX(); + stem.setNoteHeadXBounds(stem_x, stem_x); + stem.setContext(ctx).draw(); + } + }, this); + } + drawBeamLines(ctx) { + const valid_beam_durations = ['4', '8', '16', '32', '64']; + const firstNote = this.notes[0]; + let beamY = this.getBeamYToDraw(); + const firstStemX = firstNote.getStemX(); + const beamThickness = this.render_options.beam_width * this.stem_direction; + for (let i = 0; i < valid_beam_durations.length; ++i) { + const duration = valid_beam_durations[i]; + const beamLines = this.getBeamLines(duration); + for (let j = 0; j < beamLines.length; ++j) { + const beam_line = beamLines[j]; + const startBeamX = beam_line.start; + const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope); + const lastBeamX = beam_line.end; + if (lastBeamX) { + const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope); + ctx.beginPath(); + ctx.moveTo(startBeamX, startBeamY); + ctx.lineTo(startBeamX, startBeamY + beamThickness); + ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness); + ctx.lineTo(lastBeamX + 1, lastBeamY); + ctx.closePath(); + ctx.fill(); + } + else { + throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.'); + } + } + beamY += beamThickness * 1.5; + } + } + preFormat() { + return this; + } + postFormat() { + if (this.postFormatted) + return; + if (isTabNote(this.notes[0]) || this.render_options.flat_beams) { + this.calculateFlatSlope(); + } + else { + this.calculateSlope(); + } + this.applyStemExtensions(); + this.postFormatted = true; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + if (this.unbeamable) + return; + if (!this.postFormatted) { + this.postFormat(); + } + this.drawStems(ctx); + this.applyStyle(); + ctx.openGroup('beam', this.getAttribute('id')); + this.drawBeamLines(ctx); + ctx.closeGroup(); + this.restoreStyle(); + } +} diff --git a/build/esm/src/bend.js b/build/esm/src/bend.js new file mode 100644 index 0000000000..5068c8a9f2 --- /dev/null +++ b/build/esm/src/bend.js @@ -0,0 +1,203 @@ +import { Element } from './element.js'; +import { Modifier } from './modifier.js'; +import { TextFormatter } from './textformatter.js'; +import { isTabNote } from './typeguard.js'; +import { RuntimeError } from './util.js'; +class Bend extends Modifier { + static get CATEGORY() { + return "Bend"; + } + static get UP() { + return 0; + } + static get DOWN() { + return 1; + } + static format(bends, state) { + if (!bends || bends.length === 0) + return false; + let last_width = 0; + for (let i = 0; i < bends.length; ++i) { + const bend = bends[i]; + const note = bend.checkAttachedNote(); + if (isTabNote(note)) { + const stringPos = note.leastString() - 1; + if (state.top_text_line < stringPos) { + state.top_text_line = stringPos; + } + } + bend.setXShift(last_width); + last_width = bend.getWidth(); + bend.setTextLine(state.top_text_line); + } + state.right_shift += last_width; + state.top_text_line += 1; + return true; + } + constructor(text, release = false, phrase) { + super(); + this.text = text; + this.x_shift = 0; + this.release = release; + this.tap = ''; + this.resetFont(); + this.render_options = { + line_width: 1.5, + line_style: '#777777', + bend_width: 8, + release_width: 8, + }; + if (phrase) { + this.phrase = phrase; + } + else { + this.phrase = [{ type: Bend.UP, text: this.text }]; + if (this.release) + this.phrase.push({ type: Bend.DOWN, text: '' }); + } + this.updateWidth(); + } + setXShift(value) { + this.x_shift = value; + this.updateWidth(); + return this; + } + setTap(value) { + this.tap = value; + return this; + } + getText() { + return this.text; + } + getTextHeight() { + const textFormatter = TextFormatter.create(this.textFont); + return textFormatter.maxHeight; + } + updateWidth() { + const textFormatter = TextFormatter.create(this.textFont); + const measureText = (text) => { + return textFormatter.getWidthForTextInPx(text); + }; + let totalWidth = 0; + for (let i = 0; i < this.phrase.length; ++i) { + const bend = this.phrase[i]; + if (bend.width !== undefined) { + totalWidth += bend.width; + } + else { + const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width; + bend.width = Math.max(additional_width, measureText(bend.text)) + 3; + bend.draw_width = bend.width / 2; + totalWidth += bend.width; + } + } + this.setWidth(totalWidth + this.x_shift); + return this; + } + draw() { + var _a; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index); + start.x += 3; + start.y += 0.5; + const x_shift = this.x_shift; + const stave = note.checkStave(); + const spacing = stave.getSpacingBetweenLines(); + const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b)); + const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3; + const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1; + const renderBend = (x, y, width, height) => { + const cp_x = x + width; + const cp_y = y; + ctx.save(); + ctx.beginPath(); + ctx.setLineWidth(this.render_options.line_width); + ctx.setStrokeStyle(this.render_options.line_style); + ctx.setFillStyle(this.render_options.line_style); + ctx.moveTo(x, y); + ctx.quadraticCurveTo(cp_x, cp_y, x + width, height); + ctx.stroke(); + ctx.restore(); + }; + const renderRelease = (x, y, width, height) => { + ctx.save(); + ctx.beginPath(); + ctx.setLineWidth(this.render_options.line_width); + ctx.setStrokeStyle(this.render_options.line_style); + ctx.setFillStyle(this.render_options.line_style); + ctx.moveTo(x, height); + ctx.quadraticCurveTo(x + width, height, x + width, y); + ctx.stroke(); + ctx.restore(); + }; + const renderArrowHead = (x, y, direction) => { + const width = 4; + const yBase = y + width * direction; + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x - width, yBase); + ctx.lineTo(x + width, yBase); + ctx.closePath(); + ctx.fill(); + }; + const renderText = (x, text) => { + ctx.save(); + ctx.setFont(this.textFont); + const render_x = x - ctx.measureText(text).width / 2; + ctx.fillText(text, render_x, annotation_y); + ctx.restore(); + }; + let last_bend = undefined; + let last_bend_draw_width = 0; + let last_drawn_width = 0; + if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) { + const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index); + renderText(tapStart.x, this.tap); + } + for (let i = 0; i < this.phrase.length; ++i) { + const bend = this.phrase[i]; + if (!bend.draw_width) + bend.draw_width = 0; + if (i === 0) + bend.draw_width += x_shift; + last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0); + if (bend.type === Bend.UP) { + if (last_bend && last_bend.type === Bend.UP) { + renderArrowHead(start.x, bend_height, +1); + } + renderBend(start.x, start.y, last_drawn_width, bend_height); + } + if (bend.type === Bend.DOWN) { + if (last_bend && last_bend.type === Bend.UP) { + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + if (last_bend && last_bend.type === Bend.DOWN) { + renderArrowHead(start.x, start.y, -1); + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + if (!last_bend) { + last_drawn_width = bend.draw_width; + renderRelease(start.x, start.y, last_drawn_width, bend_height); + } + } + renderText(start.x + last_drawn_width, bend.text); + last_bend = bend; + last_bend_draw_width = bend.draw_width; + last_bend.x = start.x; + start.x += last_drawn_width; + } + if (!last_bend || last_bend.x == undefined) { + throw new RuntimeError('NoLastBendForBend', 'Internal error.'); + } + if (last_bend.type === Bend.UP) { + renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1); + } + else if (last_bend.type === Bend.DOWN) { + renderArrowHead(last_bend.x + last_drawn_width, start.y, -1); + } + } +} +Bend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); +export { Bend }; diff --git a/build/esm/src/boundingbox.js b/build/esm/src/boundingbox.js new file mode 100644 index 0000000000..1d1adbcea0 --- /dev/null +++ b/build/esm/src/boundingbox.js @@ -0,0 +1,59 @@ +export class BoundingBox { + static copy(that) { + return new BoundingBox(that.x, that.y, that.w, that.h); + } + constructor(x, y, w, h) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + } + getX() { + return this.x; + } + getY() { + return this.y; + } + getW() { + return this.w; + } + getH() { + return this.h; + } + setX(x) { + this.x = x; + return this; + } + setY(y) { + this.y = y; + return this; + } + setW(w) { + this.w = w; + return this; + } + setH(h) { + this.h = h; + return this; + } + move(x, y) { + this.x += x; + this.y += y; + return this; + } + clone() { + return BoundingBox.copy(this); + } + mergeWith(boundingBox) { + const that = boundingBox; + const new_x = this.x < that.x ? this.x : that.x; + const new_y = this.y < that.y ? this.y : that.y; + const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x; + const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y; + this.x = new_x; + this.y = new_y; + this.w = new_w; + this.h = new_h; + return this; + } +} diff --git a/build/esm/src/boundingboxcomputation.js b/build/esm/src/boundingboxcomputation.js new file mode 100644 index 0000000000..ee8588e456 --- /dev/null +++ b/build/esm/src/boundingboxcomputation.js @@ -0,0 +1,107 @@ +export class BoundingBoxComputation { + constructor() { + this.x1 = Number.NaN; + this.y1 = Number.NaN; + this.x2 = Number.NaN; + this.y2 = Number.NaN; + } + getX1() { + return this.x1; + } + getY1() { + return this.y1; + } + width() { + return this.x2 - this.x1; + } + height() { + return this.y2 - this.y1; + } + addPoint(x, y) { + if (isNaN(this.x1) || x < this.x1) + this.x1 = x; + if (isNaN(this.x2) || x > this.x2) + this.x2 = x; + if (isNaN(this.y1) || y < this.y1) + this.y1 = y; + if (isNaN(this.y2) || y > this.y2) + this.y2 = y; + } + addX(x) { + this.addPoint(x, this.y1); + } + addY(y) { + this.addPoint(this.x1, y); + } + addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) { + this.addPoint(p0x, p0y); + this.addPoint(p2x, p2y); + const p01x = p1x - p0x; + const p12x = p2x - p1x; + let denom = p01x - p12x; + if (denom != 0) { + const t = p01x / denom; + if (t > 0 && t < 1) { + const it = 1 - t; + this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x); + } + } + const p01y = p1y - p0y; + const p12y = p2y - p1y; + denom = p01y - p12y; + if (denom != 0) { + const t = p01y / denom; + if (t > 0 && t < 1) { + const it = 1 - t; + this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y); + } + } + } + addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { + const p0 = [p0x, p0y]; + const p1 = [p1x, p1y]; + const p2 = [p2x, p2y]; + const p3 = [p3x, p3y]; + let i; + this.addPoint(p0[0], p0[1]); + this.addPoint(p3[0], p3[1]); + const f = (t, i) => Math.pow(1 - t, 3) * p0[i] + + 3 * Math.pow(1 - t, 2) * t * p1[i] + + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + + Math.pow(t, 3) * p3[i]; + for (i = 0; i <= 1; i++) { + const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; + const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; + const c = 3 * p1[i] - 3 * p0[i]; + if (a === 0) { + if (b === 0) + continue; + const t = -c / b; + if (0 < t && t < 1) { + if (i === 0) + this.addX(f(t, i)); + if (i === 1) + this.addY(f(t, i)); + } + continue; + } + const b2ac = Math.pow(b, 2) - 4 * c * a; + if (b2ac < 0) + continue; + const t1 = (-b + Math.sqrt(b2ac)) / (2 * a); + if (0 < t1 && t1 < 1) { + if (i === 0) + this.addX(f(t1, i)); + if (i === 1) + this.addY(f(t1, i)); + } + const t2 = (-b - Math.sqrt(b2ac)) / (2 * a); + if (0 < t2 && t2 < 1) { + if (i === 0) + this.addX(f(t2, i)); + if (i === 1) + this.addY(f(t2, i)); + } + } + } +} diff --git a/build/esm/src/canvascontext.js b/build/esm/src/canvascontext.js new file mode 100644 index 0000000000..6efadd10f6 --- /dev/null +++ b/build/esm/src/canvascontext.js @@ -0,0 +1,203 @@ +import { Font } from './font.js'; +import { RenderContext } from './rendercontext.js'; +import { globalObject, warn } from './util.js'; +import { isHTMLCanvas } from './web.js'; +export class CanvasContext extends RenderContext { + static get WIDTH() { + return 600; + } + static get HEIGHT() { + return 400; + } + static get CANVAS_BROWSER_SIZE_LIMIT() { + return 32767; + } + static sanitizeCanvasDims(width, height) { + const limit = this.CANVAS_BROWSER_SIZE_LIMIT; + if (Math.max(width, height) > limit) { + warn('Canvas dimensions exceed browser limit. Cropping to ' + limit); + if (width > limit) { + width = limit; + } + if (height > limit) { + height = limit; + } + } + return [width, height]; + } + constructor(context) { + super(); + this.textHeight = 0; + this.context2D = context; + if (!context.canvas) { + this.canvas = { + width: CanvasContext.WIDTH, + height: CanvasContext.HEIGHT, + }; + } + else { + this.canvas = context.canvas; + } + } + clear() { + this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height); + } + openGroup(cls, id, attrs) { + } + closeGroup() { + } + add(child) { + } + setFillStyle(style) { + this.context2D.fillStyle = style; + return this; + } + setBackgroundFillStyle(style) { + return this; + } + setStrokeStyle(style) { + this.context2D.strokeStyle = style; + return this; + } + setShadowColor(color) { + this.context2D.shadowColor = color; + return this; + } + setShadowBlur(blur) { + const t = this.context2D.getTransform(); + const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d); + this.context2D.shadowBlur = scale * blur; + return this; + } + setLineWidth(width) { + this.context2D.lineWidth = width; + return this; + } + setLineCap(capType) { + this.context2D.lineCap = capType; + return this; + } + setLineDash(dash) { + this.context2D.setLineDash(dash); + return this; + } + scale(x, y) { + this.context2D.scale(x, y); + return this; + } + resize(width, height, devicePixelRatio) { + var _a; + const canvas = this.context2D.canvas; + const dpr = (_a = devicePixelRatio !== null && devicePixelRatio !== void 0 ? devicePixelRatio : globalObject().devicePixelRatio) !== null && _a !== void 0 ? _a : 1; + [width, height] = CanvasContext.sanitizeCanvasDims(width * dpr, height * dpr); + width = (width / dpr) | 0; + height = (height / dpr) | 0; + canvas.width = width * dpr; + canvas.height = height * dpr; + if (isHTMLCanvas(canvas)) { + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + return this.scale(dpr, dpr); + } + rect(x, y, width, height) { + this.context2D.rect(x, y, width, height); + return this; + } + fillRect(x, y, width, height) { + this.context2D.fillRect(x, y, width, height); + return this; + } + clearRect(x, y, width, height) { + this.context2D.clearRect(x, y, width, height); + return this; + } + beginPath() { + this.context2D.beginPath(); + return this; + } + moveTo(x, y) { + this.context2D.moveTo(x, y); + return this; + } + lineTo(x, y) { + this.context2D.lineTo(x, y); + return this; + } + bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { + this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + return this; + } + quadraticCurveTo(cpx, cpy, x, y) { + this.context2D.quadraticCurveTo(cpx, cpy, x, y); + return this; + } + arc(x, y, radius, startAngle, endAngle, counterclockwise) { + this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise); + return this; + } + fill() { + this.context2D.fill(); + return this; + } + stroke() { + this.context2D.stroke(); + return this; + } + closePath() { + this.context2D.closePath(); + return this; + } + measureText(text) { + const metrics = this.context2D.measureText(text); + let y = 0; + let height = 0; + if (metrics.fontBoundingBoxAscent) { + y = -metrics.fontBoundingBoxAscent; + height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent; + } + else { + y = -metrics.actualBoundingBoxAscent; + height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent; + } + return { + x: 0, + y: y, + width: metrics.width, + height: height, + }; + } + fillText(text, x, y) { + this.context2D.fillText(text, x, y); + return this; + } + save() { + this.context2D.save(); + return this; + } + restore() { + this.context2D.restore(); + return this; + } + set fillStyle(style) { + this.context2D.fillStyle = style; + } + get fillStyle() { + return this.context2D.fillStyle; + } + set strokeStyle(style) { + this.context2D.strokeStyle = style; + } + get strokeStyle() { + return this.context2D.strokeStyle; + } + setFont(f, size, weight, style) { + const fontInfo = Font.validate(f, size, weight, style); + this.context2D.font = Font.toCSSString(fontInfo); + this.textHeight = Font.convertSizeToPixelValue(fontInfo.size); + return this; + } + getFont() { + return this.context2D.font; + } +} diff --git a/build/esm/src/chordsymbol.js b/build/esm/src/chordsymbol.js new file mode 100644 index 0000000000..3759d79e83 --- /dev/null +++ b/build/esm/src/chordsymbol.js @@ -0,0 +1,608 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { Modifier } from './modifier.js'; +import { Tables } from './tables.js'; +import { TextFormatter } from './textformatter.js'; +import { isStemmableNote } from './typeguard.js'; +import { log, RuntimeError } from './util.js'; +function L(...args) { + if (ChordSymbol.DEBUG) + log('Vex.Flow.ChordSymbol', args); +} +export var ChordSymbolHorizontalJustify; +(function (ChordSymbolHorizontalJustify) { + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["LEFT"] = 1] = "LEFT"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER"] = 2] = "CENTER"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["RIGHT"] = 3] = "RIGHT"; + ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; +})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {})); +export var ChordSymbolVerticalJustify; +(function (ChordSymbolVerticalJustify) { + ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["TOP"] = 1] = "TOP"; + ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["BOTTOM"] = 2] = "BOTTOM"; +})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {})); +export var SymbolTypes; +(function (SymbolTypes) { + SymbolTypes[SymbolTypes["GLYPH"] = 1] = "GLYPH"; + SymbolTypes[SymbolTypes["TEXT"] = 2] = "TEXT"; + SymbolTypes[SymbolTypes["LINE"] = 3] = "LINE"; +})(SymbolTypes || (SymbolTypes = {})); +export var SymbolModifiers; +(function (SymbolModifiers) { + SymbolModifiers[SymbolModifiers["NONE"] = 1] = "NONE"; + SymbolModifiers[SymbolModifiers["SUBSCRIPT"] = 2] = "SUBSCRIPT"; + SymbolModifiers[SymbolModifiers["SUPERSCRIPT"] = 3] = "SUPERSCRIPT"; +})(SymbolModifiers || (SymbolModifiers = {})); +class ChordSymbol extends Modifier { + static get CATEGORY() { + return "ChordSymbol"; + } + static get superSubRatio() { + return ChordSymbol.metrics.global.superSubRatio; + } + static set NO_TEXT_FORMAT(val) { + ChordSymbol.noFormat = val; + } + static get NO_TEXT_FORMAT() { + return ChordSymbol.noFormat; + } + static getMetricForGlyph(glyphCode) { + if (ChordSymbol.metrics.glyphs[glyphCode]) { + return ChordSymbol.metrics.glyphs[glyphCode]; + } + return undefined; + } + static get engravingFontResolution() { + return Tables.currentMusicFont().getResolution(); + } + static get spacingBetweenBlocks() { + return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution; + } + static getWidthForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0.65; + } + return metric.advanceWidth / ChordSymbol.engravingFontResolution; + } + static getYShiftForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0; + } + return metric.yOffset / ChordSymbol.engravingFontResolution; + } + static getXShiftForGlyph(glyph) { + const metric = ChordSymbol.getMetricForGlyph(glyph.code); + if (!metric) { + return 0; + } + return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution; + } + static get superscriptOffset() { + return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution; + } + static get subscriptOffset() { + return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution; + } + static get kerningOffset() { + return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution; + } + static get metrics() { + const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol; + if (!chordSymbol) + throw new RuntimeError('BadMetrics', `chordSymbol missing`); + return chordSymbol; + } + static get lowerKerningText() { + return ChordSymbol.metrics.global.lowerKerningText; + } + static get upperKerningText() { + return ChordSymbol.metrics.global.upperKerningText; + } + static isSuperscript(block) { + return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT; + } + static isSubscript(block) { + return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT; + } + static get minPadding() { + const musicFont = Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + static format(symbols, state) { + var _a; + if (!symbols || symbols.length === 0) + return false; + let width = 0; + let nonSuperWidth = 0; + let leftWidth = 0; + let rightWidth = 0; + let maxLeftGlyphWidth = 0; + let maxRightGlyphWidth = 0; + for (const symbol of symbols) { + const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size); + const fontAdj = Font.scaleSize(fontSize, 0.05); + const glyphAdj = fontAdj * 2; + const note = symbol.checkAttachedNote(); + let symbolWidth = 0; + let lineSpaces = 1; + let vAlign = false; + for (let j = 0; j < symbol.symbolBlocks.length; ++j) { + const block = symbol.symbolBlocks[j]; + const sup = ChordSymbol.isSuperscript(block); + const sub = ChordSymbol.isSubscript(block); + const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1; + const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale; + if (sup || sub) { + lineSpaces = 2; + } + const fontSize = symbol.textFormatter.fontSizeInPixels; + const superSubFontSize = fontSize * superSubScale; + if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) { + block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize; + block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize; + block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize; + block.glyph.scale = block.glyph.scale * adj; + } + else if (block.symbolType === SymbolTypes.TEXT) { + block.width = block.width * superSubFontSize; + block.yShift += symbol.getYOffsetForText(block.text) * adj; + } + if (block.symbolType === SymbolTypes.GLYPH && + block.glyph !== undefined && + block.glyph.code === ChordSymbol.glyphs.over.code) { + lineSpaces = 2; + } + block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale; + if (sup && j > 0) { + const prev = symbol.symbolBlocks[j - 1]; + if (!ChordSymbol.isSuperscript(prev)) { + nonSuperWidth = width; + } + } + if (sub && nonSuperWidth > 0) { + vAlign = true; + block.xShift = block.xShift + (nonSuperWidth - width); + width = nonSuperWidth; + nonSuperWidth = 0; + symbol.setEnableKerning(false); + } + if (!sup && !sub) { + nonSuperWidth = 0; + } + block.vAlign = vAlign; + width += block.width; + symbolWidth = width; + } + symbol.updateKerningAdjustments(); + symbol.updateOverBarAdjustments(); + if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) { + symbol.setTextLine(state.top_text_line); + state.top_text_line += lineSpaces; + } + else { + symbol.setTextLine(state.text_line + 1); + state.text_line += lineSpaces + 1; + } + if (symbol.getReportWidth() && isStemmableNote(note)) { + const glyphWidth = note.getGlyphProps().getWidth(); + if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) { + maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); + leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding; + } + else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) { + maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); + rightWidth = Math.max(rightWidth, symbolWidth); + } + else { + leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding; + rightWidth = Math.max(rightWidth, symbolWidth / 2); + maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); + maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); + } + } + width = 0; + } + const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); + const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); + state.left_shift += leftOverlap; + state.right_shift += rightOverlap; + return true; + } + constructor() { + super(); + this.symbolBlocks = []; + this.horizontal = ChordSymbolHorizontalJustify.LEFT; + this.vertical = ChordSymbolVerticalJustify.TOP; + this.useKerning = true; + this.reportWidth = true; + this.resetFont(); + } + static get TEXT_FONT() { + let family = 'Roboto Slab, Times, serif'; + if (Tables.currentMusicFont().getName() === 'Petaluma') { + family = 'PetalumaScript, Arial, sans-serif'; + } + return { + family, + size: 12, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, + }; + } + get superscriptOffset() { + return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels; + } + get subscriptOffset() { + return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels; + } + setReportWidth(value) { + this.reportWidth = value; + return this; + } + getReportWidth() { + return this.reportWidth; + } + updateOverBarAdjustments() { + const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash'); + if (barIndex < 0) { + return; + } + const bar = this.symbolBlocks[barIndex]; + const xoff = bar.width / 4; + const yoff = 0.25 * this.textFormatter.fontSizeInPixels; + let symIndex = 0; + for (symIndex === 0; symIndex < barIndex; ++symIndex) { + const symbol = this.symbolBlocks[symIndex]; + symbol.xShift = symbol.xShift + xoff; + symbol.yShift = symbol.yShift - yoff; + } + for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) { + const symbol = this.symbolBlocks[symIndex]; + symbol.xShift = symbol.xShift - xoff; + symbol.yShift = symbol.yShift + yoff; + } + } + updateKerningAdjustments() { + let accum = 0; + for (let j = 0; j < this.symbolBlocks.length; ++j) { + const symbol = this.symbolBlocks[j]; + accum += this.getKerningAdjustment(j); + symbol.xShift += accum; + } + } + getKerningAdjustment(j) { + if (!this.useKerning) { + return 0; + } + const currSymbol = this.symbolBlocks[j]; + const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined; + let adjustment = 0; + if (currSymbol.symbolType === SymbolTypes.GLYPH && + currSymbol.glyph !== undefined && + currSymbol.glyph.code === ChordSymbol.glyphs.over.code) { + adjustment += currSymbol.glyph.metrics.x_shift; + } + if (prevSymbol !== undefined && + prevSymbol.symbolType === SymbolTypes.GLYPH && + prevSymbol.glyph !== undefined && + prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) { + adjustment += prevSymbol.glyph.metrics.x_shift; + } + let preKernUpper = false; + let preKernLower = false; + if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) { + preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); + preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); + } + const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels; + if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) { + adjustment += kerningOffsetPixels; + } + if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) { + if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') { + adjustment += kerningOffsetPixels / 2; + } + if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) { + adjustment += kerningOffsetPixels / 2; + } + } + return adjustment; + } + getSymbolBlock(params = {}) { + var _a, _b, _c; + const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT; + const symbolBlock = { + text: (_b = params.text) !== null && _b !== void 0 ? _b : '', + symbolType, + symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE, + xShift: 0, + yShift: 0, + vAlign: false, + width: 0, + }; + if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') { + const glyphArgs = ChordSymbol.glyphs[params.glyph]; + const glyphPoints = 20; + symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' }); + } + else if (symbolType === SymbolTypes.TEXT) { + symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text); + } + else if (symbolType === SymbolTypes.LINE) { + symbolBlock.width = params.width; + } + return symbolBlock; + } + addSymbolBlock(parameters) { + this.symbolBlocks.push(this.getSymbolBlock(parameters)); + return this; + } + addText(text, parameters = {}) { + const symbolType = SymbolTypes.TEXT; + return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType })); + } + addTextSuperscript(text) { + const symbolType = SymbolTypes.TEXT; + const symbolModifier = SymbolModifiers.SUPERSCRIPT; + return this.addSymbolBlock({ text, symbolType, symbolModifier }); + } + addTextSubscript(text) { + const symbolType = SymbolTypes.TEXT; + const symbolModifier = SymbolModifiers.SUBSCRIPT; + return this.addSymbolBlock({ text, symbolType, symbolModifier }); + } + addGlyphSuperscript(glyph) { + const symbolType = SymbolTypes.GLYPH; + const symbolModifier = SymbolModifiers.SUPERSCRIPT; + return this.addSymbolBlock({ glyph, symbolType, symbolModifier }); + } + addGlyph(glyph, params = {}) { + const symbolType = SymbolTypes.GLYPH; + return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType })); + } + addGlyphOrText(text, params = {}) { + let str = ''; + for (let i = 0; i < text.length; ++i) { + const char = text[i]; + if (ChordSymbol.glyphs[char]) { + if (str.length > 0) { + this.addText(str, params); + str = ''; + } + this.addGlyph(char, params); + } + else { + str += char; + } + } + if (str.length > 0) { + this.addText(str, params); + } + return this; + } + addLine(width, params = {}) { + const symbolType = SymbolTypes.LINE; + return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width })); + } + setFont(f, size, weight, style) { + super.setFont(f, size, weight, style); + this.textFormatter = TextFormatter.create(this.textFont); + return this; + } + setEnableKerning(val) { + this.useKerning = val; + return this; + } + setVertical(vj) { + this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj; + return this; + } + getVertical() { + return this.vertical; + } + setHorizontal(hj) { + this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj; + return this; + } + getHorizontal() { + return this.horizontal; + } + getWidth() { + let width = 0; + this.symbolBlocks.forEach((symbol) => { + width += symbol.vAlign ? 0 : symbol.width; + }); + return width; + } + getYOffsetForText(text) { + var _a; + let acc = 0; + let i = 0; + for (i = 0; i < text.length; ++i) { + const metrics = this.textFormatter.getGlyphMetrics(text[i]); + if (metrics) { + const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0; + acc = yMax < acc ? yMax : acc; + } + } + const resolution = this.textFormatter.getResolution(); + return i > 0 ? -1 * (acc / resolution) : 0; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + ctx.save(); + this.applyStyle(); + ctx.openGroup('chordsymbol', this.getAttribute('id')); + const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index); + ctx.setFont(this.textFont); + let y; + const hasStem = note.hasStem(); + const stave = note.checkStave(); + if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) { + y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK); + if (hasStem) { + const stem_ext = note.checkStem().getExtents(); + const spacing = stave.getSpacingBetweenLines(); + const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY; + y = Math.max(y, stem_base + spacing * (this.text_line + 2)); + } + } + else { + const topY = Math.min(...note.getYs()); + y = Math.min(stave.getYForTopText(this.text_line), topY - 10); + if (hasStem) { + const stem_ext = note.checkStem().getExtents(); + const spacing = stave.getSpacingBetweenLines(); + y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line); + } + } + let x = start.x; + if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) { + x = start.x; + } + else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) { + x = start.x + this.getWidth(); + } + else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) { + x = start.x - this.getWidth() / 2; + } + else { + x = note.getStemX() - this.getWidth() / 2; + } + L('Rendering ChordSymbol: ', this.textFormatter, x, y); + this.symbolBlocks.forEach((symbol) => { + const isSuper = ChordSymbol.isSuperscript(symbol); + const isSub = ChordSymbol.isSubscript(symbol); + let curY = y; + L('shift was ', symbol.xShift, symbol.yShift); + L('curY pre sub ', curY); + if (isSuper) { + curY += this.superscriptOffset; + } + if (isSub) { + curY += this.subscriptOffset; + } + L('curY sup/sub ', curY); + if (symbol.symbolType === SymbolTypes.TEXT) { + if (isSuper || isSub) { + ctx.save(); + if (this.textFont) { + const { family, size, weight, style } = this.textFont; + const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio); + ctx.setFont(family, smallerFontSize, weight, style); + } + } + L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift); + ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift); + if (isSuper || isSub) { + ctx.restore(); + } + } + else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) { + curY += symbol.yShift; + L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY); + symbol.glyph.render(ctx, x + symbol.xShift, curY); + } + else if (symbol.symbolType === SymbolTypes.LINE) { + L('Rendering Line : ', symbol.width, x, curY); + ctx.beginPath(); + ctx.setLineWidth(1); + ctx.moveTo(x, y); + ctx.lineTo(x + symbol.width, curY); + ctx.stroke(); + } + x += symbol.width; + if (symbol.vAlign) { + x += symbol.xShift; + } + }); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +ChordSymbol.DEBUG = false; +ChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify; +ChordSymbol.HorizontalJustifyString = { + left: ChordSymbolHorizontalJustify.LEFT, + right: ChordSymbolHorizontalJustify.RIGHT, + center: ChordSymbolHorizontalJustify.CENTER, + centerStem: ChordSymbolHorizontalJustify.CENTER_STEM, +}; +ChordSymbol.VerticalJustify = ChordSymbolVerticalJustify; +ChordSymbol.VerticalJustifyString = { + top: ChordSymbolVerticalJustify.TOP, + above: ChordSymbolVerticalJustify.TOP, + below: ChordSymbolVerticalJustify.BOTTOM, + bottom: ChordSymbolVerticalJustify.BOTTOM, +}; +ChordSymbol.glyphs = { + diminished: { + code: 'csymDiminished', + }, + dim: { + code: 'csymDiminished', + }, + halfDiminished: { + code: 'csymHalfDiminished', + }, + '+': { + code: 'csymAugmented', + }, + augmented: { + code: 'csymAugmented', + }, + majorSeventh: { + code: 'csymMajorSeventh', + }, + minor: { + code: 'csymMinor', + }, + '-': { + code: 'csymMinor', + }, + '(': { + code: 'csymParensLeftTall', + }, + leftParen: { + code: 'csymParensLeftTall', + }, + ')': { + code: 'csymParensRightTall', + }, + rightParen: { + code: 'csymParensRightTall', + }, + leftBracket: { + code: 'csymBracketLeftTall', + }, + rightBracket: { + code: 'csymBracketRightTall', + }, + leftParenTall: { + code: 'csymParensLeftVeryTall', + }, + rightParenTall: { + code: 'csymParensRightVeryTall', + }, + '/': { + code: 'csymDiagonalArrangementSlash', + }, + over: { + code: 'csymDiagonalArrangementSlash', + }, + '#': { + code: 'accidentalSharp', + }, + b: { + code: 'accidentalFlat', + }, +}; +ChordSymbol.symbolTypes = SymbolTypes; +ChordSymbol.symbolModifiers = SymbolModifiers; +ChordSymbol.noFormat = false; +export { ChordSymbol }; diff --git a/build/esm/src/clef.js b/build/esm/src/clef.js new file mode 100644 index 0000000000..9dd24003bc --- /dev/null +++ b/build/esm/src/clef.js @@ -0,0 +1,137 @@ +import { Glyph } from './glyph.js'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { Tables } from './tables.js'; +import { defined, log } from './util.js'; +function L(...args) { + if (Clef.DEBUG) + log('Vex.Flow.Clef', args); +} +class Clef extends StaveModifier { + static get CATEGORY() { + return "Clef"; + } + static get types() { + return { + treble: { + code: 'gClef', + line: 3, + }, + bass: { + code: 'fClef', + line: 1, + }, + alto: { + code: 'cClef', + line: 2, + }, + tenor: { + code: 'cClef', + line: 1, + }, + percussion: { + code: 'unpitchedPercussionClef1', + line: 2, + }, + soprano: { + code: 'cClef', + line: 4, + }, + 'mezzo-soprano': { + code: 'cClef', + line: 3, + }, + 'baritone-c': { + code: 'cClef', + line: 0, + }, + 'baritone-f': { + code: 'fClef', + line: 2, + }, + subbass: { + code: 'fClef', + line: 0, + }, + french: { + code: 'gClef', + line: 4, + }, + tab: { + code: '6stringTabClef', + line: 2.5, + }, + }; + } + static get annotationSmufl() { + return { + '8va': 'timeSig8', + '8vb': 'timeSig8', + }; + } + constructor(type, size, annotation) { + super(); + this.clef = Clef.types['treble']; + this.setPosition(StaveModifierPosition.BEGIN); + this.setType(type, size, annotation); + this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`)); + L('Creating clef:', type); + } + setType(type, size, annotation) { + this.type = type; + this.clef = Clef.types[type]; + if (size === undefined) { + this.size = 'default'; + } + else { + this.size = size; + } + const musicFont = Tables.currentMusicFont(); + if (annotation !== undefined) { + const code = Clef.annotationSmufl[annotation]; + const point = (Clef.getPoint(this.size) / 5) * 3; + const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`); + const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`); + this.annotation = { code, point, line, x_shift }; + this.attachment = new Glyph(this.annotation.code, this.annotation.point); + this.attachment.metrics.x_max = 0; + this.attachment.setXShift(this.annotation.x_shift); + } + else { + this.annotation = undefined; + } + return this; + } + getWidth() { + if (this.type === 'tab') { + defined(this.stave, 'ClefError', "Can't get width without stave."); + } + return this.width; + } + static getPoint(size) { + return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 3) * 2; + } + setStave(stave) { + this.stave = stave; + return this; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('clef', this.getAttribute('id')); + Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, { + category: `clef_${this.size}`, + }); + if (this.annotation !== undefined && this.attachment !== undefined) { + this.placeGlyphOnLine(this.attachment, stave, this.annotation.line); + this.attachment.setStave(stave); + this.attachment.setContext(ctx); + this.attachment.renderToStave(this.x); + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} +Clef.DEBUG = false; +export { Clef }; diff --git a/build/esm/src/clefnote.js b/build/esm/src/clefnote.js new file mode 100644 index 0000000000..57f8ffa106 --- /dev/null +++ b/build/esm/src/clefnote.js @@ -0,0 +1,51 @@ +import { Clef } from './clef.js'; +import { Glyph } from './glyph.js'; +import { Note } from './note.js'; +export class ClefNote extends Note { + static get CATEGORY() { + return "ClefNote"; + } + constructor(type, size, annotation) { + super({ duration: 'b' }); + this.type = type; + const clef = new Clef(type, size, annotation); + this.clef = clef.clef; + this.annotation = clef.annotation; + this.size = size === undefined ? 'default' : size; + this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`)); + this.ignore_ticks = true; + } + setType(type, size, annotation) { + this.type = type; + this.size = size; + const clef = new Clef(type, size, annotation); + this.clef = clef.clef; + this.annotation = clef.annotation; + this.setWidth(Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clefNote_${this.size}`)); + return this; + } + getClef() { + return this.clef; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + const stave = this.checkStave(); + const ctx = this.checkContext(); + this.setRendered(); + const abs_x = this.getAbsoluteX(); + Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, { + category: `clefNote_${this.size}`, + }); + if (this.annotation !== undefined) { + const attachment = new Glyph(this.annotation.code, this.annotation.point); + attachment.setContext(ctx); + attachment.setStave(stave); + attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs()); + attachment.setXShift(this.annotation.x_shift); + attachment.renderToStave(abs_x); + } + } +} diff --git a/build/esm/src/crescendo.js b/build/esm/src/crescendo.js new file mode 100644 index 0000000000..f757ccc150 --- /dev/null +++ b/build/esm/src/crescendo.js @@ -0,0 +1,78 @@ +import { Note } from './note.js'; +import { TickContext } from './tickcontext.js'; +import { log } from './util.js'; +function L(...args) { + if (Crescendo.DEBUG) + log('Vex.Flow.Crescendo', args); +} +function renderHairpin(ctx, params) { + const begin_x = params.begin_x; + const end_x = params.end_x; + const y = params.y; + const half_height = params.height / 2; + ctx.beginPath(); + if (params.reverse) { + ctx.moveTo(begin_x, y - half_height); + ctx.lineTo(end_x, y); + ctx.lineTo(begin_x, y + half_height); + } + else { + ctx.moveTo(end_x, y - half_height); + ctx.lineTo(begin_x, y); + ctx.lineTo(end_x, y + half_height); + } + ctx.stroke(); + ctx.closePath(); +} +class Crescendo extends Note { + static get CATEGORY() { + return "Crescendo"; + } + constructor(noteStruct) { + super(noteStruct); + this.options = { + extend_left: 0, + extend_right: 0, + y_shift: 0, + }; + this.decrescendo = false; + this.line = noteStruct.line || 0; + this.height = 15; + } + setLine(line) { + this.line = line; + return this; + } + setHeight(height) { + this.height = height; + return this; + } + setDecrescendo(decresc) { + this.decrescendo = decresc; + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + const ctx = this.checkContext(); + const stave = this.checkStave(); + this.setRendered(); + const tick_context = this.getTickContext(); + const next_context = TickContext.getNextContext(tick_context); + const begin_x = this.getAbsoluteX(); + const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth(); + const y = stave.getYForLine(this.line + -3) + 1; + L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x); + renderHairpin(ctx, { + begin_x: begin_x - this.options.extend_left, + end_x: end_x + this.options.extend_right, + y: y + this.options.y_shift, + height: this.height, + reverse: this.decrescendo, + }); + } +} +Crescendo.DEBUG = false; +export { Crescendo }; diff --git a/build/esm/src/curve.js b/build/esm/src/curve.js new file mode 100644 index 0000000000..199b170757 --- /dev/null +++ b/build/esm/src/curve.js @@ -0,0 +1,118 @@ +import { Element } from './element.js'; +import { RuntimeError } from './util.js'; +export var CurvePosition; +(function (CurvePosition) { + CurvePosition[CurvePosition["NEAR_HEAD"] = 1] = "NEAR_HEAD"; + CurvePosition[CurvePosition["NEAR_TOP"] = 2] = "NEAR_TOP"; +})(CurvePosition || (CurvePosition = {})); +export class Curve extends Element { + static get CATEGORY() { + return "Curve"; + } + static get Position() { + return CurvePosition; + } + static get PositionString() { + return { + nearHead: CurvePosition.NEAR_HEAD, + nearTop: CurvePosition.NEAR_TOP, + }; + } + constructor(from, to, options) { + super(); + this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [ + { x: 0, y: 10 }, + { x: 0, y: 10 }, + ] }, options); + this.from = from; + this.to = to; + } + setNotes(from, to) { + if (!from && !to) { + throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.'); + } + this.from = from; + this.to = to; + return this; + } + isPartial() { + return !this.from || !this.to; + } + renderCurve(params) { + const ctx = this.checkContext(); + const x_shift = this.render_options.x_shift; + const y_shift = this.render_options.y_shift * params.direction; + const first_x = params.first_x + x_shift; + const first_y = params.first_y + y_shift; + const last_x = params.last_x - x_shift; + const last_y = params.last_y + y_shift; + const thickness = this.render_options.thickness; + const cps = this.render_options.cps; + const { x: cp0x, y: cp0y } = cps[0]; + const { x: cp1x, y: cp1y } = cps[1]; + const cp_spacing = (last_x - first_x) / (cps.length + 2); + ctx.beginPath(); + ctx.moveTo(first_x, first_y); + ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y); + ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y); + ctx.stroke(); + ctx.closePath(); + ctx.fill(); + } + draw() { + this.checkContext(); + this.setRendered(); + const first_note = this.from; + const last_note = this.to; + let first_x; + let last_x; + let first_y; + let last_y; + let stem_direction = 0; + let metric = 'baseY'; + let end_metric = 'baseY'; + function getPosition(position) { + return typeof position === 'string' ? Curve.PositionString[position] : position; + } + const position = getPosition(this.render_options.position); + const position_end = getPosition(this.render_options.position_end); + if (position === CurvePosition.NEAR_TOP) { + metric = 'topY'; + end_metric = 'topY'; + } + if (position_end === CurvePosition.NEAR_HEAD) { + end_metric = 'baseY'; + } + else if (position_end === CurvePosition.NEAR_TOP) { + end_metric = 'topY'; + } + if (first_note) { + first_x = first_note.getTieRightX(); + stem_direction = first_note.getStemDirection(); + first_y = first_note.getStemExtents()[metric]; + } + else { + const stave = last_note.checkStave(); + first_x = stave.getTieStartX(); + first_y = last_note.getStemExtents()[metric]; + } + if (last_note) { + last_x = last_note.getTieLeftX(); + stem_direction = last_note.getStemDirection(); + last_y = last_note.getStemExtents()[end_metric]; + } + else { + const stave = first_note.checkStave(); + last_x = stave.getTieEndX(); + last_y = first_note.getStemExtents()[end_metric]; + } + this.renderCurve({ + first_x, + last_x, + first_y, + last_y, + direction: stem_direction * (this.render_options.invert === true ? -1 : 1), + }); + return true; + } +} diff --git a/build/esm/src/dot.js b/build/esm/src/dot.js new file mode 100644 index 0000000000..454e3d08e0 --- /dev/null +++ b/build/esm/src/dot.js @@ -0,0 +1,137 @@ +import { Modifier } from './modifier.js'; +import { isGraceNote, isStaveNote, isTabNote } from './typeguard.js'; +import { RuntimeError } from './util.js'; +export class Dot extends Modifier { + static get CATEGORY() { + return "Dot"; + } + static getDots(note) { + return note.getModifiersByType(Dot.CATEGORY); + } + static buildAndAttach(notes, options) { + for (const note of notes) { + if (options === null || options === void 0 ? void 0 : options.all) { + for (let i = 0; i < note.keys.length; i++) { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, i); + } + } + else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index); + } + else { + const dot = new Dot(); + dot.setDotShiftY(note.glyphProps.dot_shiftY); + note.addModifier(dot, 0); + } + } + } + static format(dots, state) { + const right_shift = state.right_shift; + const dot_spacing = 1; + if (!dots || dots.length === 0) + return false; + const dot_list = []; + const max_shift_map = {}; + for (let i = 0; i < dots.length; ++i) { + const dot = dots[i]; + const note = dot.getNote(); + let props; + let shift; + if (isStaveNote(note)) { + const index = dot.checkIndex(); + props = note.getKeyProps()[index]; + shift = note.getFirstDotPx(); + } + else if (isTabNote(note)) { + props = { line: 0.5 }; + shift = right_shift; + } + else { + throw new RuntimeError('Internal', 'Unexpected instance.'); + } + const note_id = note.getAttribute('id'); + dot_list.push({ line: props.line, note, note_id, dot }); + max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift); + } + dot_list.sort((a, b) => b.line - a.line); + let dot_shift = right_shift; + let x_width = 0; + let last_line = null; + let last_note = null; + let prev_dotted_space = null; + let half_shiftY = 0; + for (let i = 0; i < dot_list.length; ++i) { + const { dot, note, note_id, line } = dot_list[i]; + if (line !== last_line || note !== last_note) { + dot_shift = max_shift_map[note_id]; + } + if (!note.isRest() && line !== last_line) { + if (Math.abs(line % 1) === 0.5) { + half_shiftY = 0; + } + else { + half_shiftY = 0.5; + if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) { + half_shiftY = -0.5; + } + else if (line + half_shiftY === prev_dotted_space) { + half_shiftY = -0.5; + } + } + } + if (note.isRest()) { + dot.dot_shiftY += -half_shiftY; + } + else { + dot.dot_shiftY = -half_shiftY; + } + prev_dotted_space = line + half_shiftY; + dot.setXShift(dot_shift); + dot_shift += dot.getWidth() + dot_spacing; + x_width = dot_shift > x_width ? dot_shift : x_width; + last_line = line; + last_note = note; + } + state.right_shift += x_width; + return true; + } + constructor() { + super(); + this.position = Modifier.Position.RIGHT; + this.radius = 2; + this.setWidth(5); + this.dot_shiftY = 0; + } + setNote(note) { + this.note = note; + if (isGraceNote(note)) { + this.radius *= 0.5; + this.setWidth(3); + } + return this; + } + setDotShiftY(y) { + this.dot_shiftY = y; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stave = note.checkStave(); + const lineSpace = stave.getSpacingBetweenLines(); + const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); + if (isTabNote(note)) { + start.y = note.getStemExtents().baseY; + } + const x = start.x + this.x_shift + this.width - this.radius; + const y = start.y + this.y_shift + this.dot_shiftY * lineSpace; + ctx.beginPath(); + ctx.arc(x, y, this.radius, 0, Math.PI * 2, false); + ctx.fill(); + } +} diff --git a/build/esm/src/easyscore.js b/build/esm/src/easyscore.js new file mode 100644 index 0000000000..e46852d75a --- /dev/null +++ b/build/esm/src/easyscore.js @@ -0,0 +1,375 @@ +import { Articulation } from './articulation.js'; +import { Dot } from './dot.js'; +import { FretHandFinger } from './frethandfinger.js'; +import { Music } from './music.js'; +import { Parser } from './parser.js'; +import { Stem } from './stem.js'; +import { defined, log, RuntimeError } from './util.js'; +function L(...args) { + if (EasyScore.DEBUG) + log('Vex.Flow.EasyScore', args); +} +export class EasyScoreGrammar { + constructor(builder) { + this.builder = builder; + } + begin() { + return this.LINE; + } + LINE() { + return { + expect: [this.PIECE, this.PIECES, this.EOL], + }; + } + PIECE() { + return { + expect: [this.CHORDORNOTE, this.PARAMS], + run: () => this.builder.commitPiece(), + }; + } + PIECES() { + return { + expect: [this.COMMA, this.PIECE], + zeroOrMore: true, + }; + } + PARAMS() { + return { + expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS], + }; + } + CHORDORNOTE() { + return { + expect: [this.CHORD, this.SINGLENOTE], + or: true, + }; + } + CHORD() { + return { + expect: [this.LPAREN, this.NOTES, this.RPAREN], + run: (state) => this.builder.addChord(state.matches[1]), + }; + } + NOTES() { + return { + expect: [this.NOTE], + oneOrMore: true, + }; + } + NOTE() { + return { + expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], + }; + } + SINGLENOTE() { + return { + expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], + run: (state) => { + const s = state; + this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]); + }, + }; + } + ACCIDENTAL() { + return { + expect: [this.MICROTONES, this.ACCIDENTALS], + maybe: true, + or: true, + }; + } + DOTS() { + return { + expect: [this.DOT], + zeroOrMore: true, + run: (state) => this.builder.setNoteDots(state.matches), + }; + } + TYPE() { + return { + expect: [this.SLASH, this.MAYBESLASH, this.TYPES], + maybe: true, + run: (state) => this.builder.setNoteType(state.matches[2]), + }; + } + DURATION() { + return { + expect: [this.SLASH, this.DURATIONS], + maybe: true, + run: (state) => this.builder.setNoteDuration(state.matches[1]), + }; + } + OPTS() { + return { + expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET], + maybe: true, + }; + } + KEYVALS() { + return { + expect: [this.COMMA, this.KEYVAL], + zeroOrMore: true, + }; + } + KEYVAL() { + const unquote = (str) => str.slice(1, -1); + return { + expect: [this.KEY, this.EQUALS, this.VAL], + run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])), + }; + } + VAL() { + return { + expect: [this.SVAL, this.DVAL], + or: true, + }; + } + KEY() { + return { token: '[a-zA-Z][a-zA-Z0-9]*' }; + } + DVAL() { + return { token: '["][^"]*["]' }; + } + SVAL() { + return { token: "['][^']*[']" }; + } + NOTENAME() { + return { token: '[a-gA-G]' }; + } + OCTAVE() { + return { token: '[0-9]+' }; + } + ACCIDENTALS() { + return { token: 'bb|b|##|#|n' }; + } + MICROTONES() { + return { token: 'bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o' }; + } + DURATIONS() { + return { token: '[0-9whq]+' }; + } + TYPES() { + return { token: '[rRsSmMhHgG]' }; + } + LPAREN() { + return { token: '[(]' }; + } + RPAREN() { + return { token: '[)]' }; + } + COMMA() { + return { token: '[,]' }; + } + DOT() { + return { token: '[.]' }; + } + SLASH() { + return { token: '[/]' }; + } + MAYBESLASH() { + return { token: '[/]?' }; + } + EQUALS() { + return { token: '[=]' }; + } + LBRACKET() { + return { token: '\\[' }; + } + RBRACKET() { + return { token: '\\]' }; + } + EOL() { + return { token: '$' }; + } +} +export class Piece { + constructor(duration) { + this.chord = []; + this.dots = 0; + this.options = {}; + this.duration = duration; + } +} +export class Builder { + constructor(factory) { + this.commitHooks = []; + this.factory = factory; + this.reset(); + } + reset(options) { + this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options); + this.elements = { notes: [], accidentals: [] }; + this.rollingDuration = '8'; + this.resetPiece(); + } + getFactory() { + return this.factory; + } + getElements() { + return this.elements; + } + addCommitHook(commitHook) { + this.commitHooks.push(commitHook); + } + resetPiece() { + L('resetPiece'); + this.piece = new Piece(this.rollingDuration); + } + setNoteDots(dots) { + L('setNoteDots:', dots); + if (dots) + this.piece.dots = dots.length; + } + setNoteDuration(duration) { + L('setNoteDuration:', duration); + this.rollingDuration = this.piece.duration = duration || this.rollingDuration; + } + setNoteType(type) { + L('setNoteType:', type); + if (type) + this.piece.type = type; + } + addNoteOption(key, value) { + L('addNoteOption: key:', key, 'value:', value); + this.piece.options[key] = value; + } + addNote(key, accid, octave) { + L('addNote:', key, accid, octave); + this.piece.chord.push({ + key: key, + accid, + octave, + }); + } + addSingleNote(key, accid, octave) { + L('addSingleNote:', key, accid, octave); + this.addNote(key, accid, octave); + } + addChord(notes) { + L('startChord'); + if (typeof notes[0] !== 'object') { + this.addSingleNote(notes[0]); + } + else { + notes.forEach((n) => { + if (n) + this.addNote(...n); + }); + } + L('endChord'); + } + commitPiece() { + L('commitPiece'); + const { factory } = this; + if (!factory) + return; + const options = Object.assign(Object.assign({}, this.options), this.piece.options); + const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase(); + const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase(); + const { chord, duration, dots, type } = this.piece; + const standardAccidentals = Music.accidentals; + const keys = chord.map((notePiece) => { + var _a; + return notePiece.key + + (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') + + '/' + + notePiece.octave; + }); + const auto_stem = stem === 'auto'; + const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g' + ? factory.GhostNote({ duration, dots }) + : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem }); + if (!auto_stem) + note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN); + const accidentals = []; + chord.forEach((notePiece, index) => { + const accid = notePiece.accid; + if (typeof accid === 'string') { + const accidental = factory.Accidental({ type: accid }); + note.addModifier(accidental, index); + accidentals.push(accidental); + } + else { + accidentals.push(undefined); + } + }); + for (let i = 0; i < dots; i++) + Dot.buildAndAttach([note], { all: true }); + this.commitHooks.forEach((commitHook) => commitHook(options, note, this)); + this.elements.notes.push(note); + this.elements.accidentals.push(accidentals); + this.resetPiece(); + } +} +function setId(options, note) { + if (options.id === undefined) + return; + note.setAttribute('id', options.id); +} +const commaSeparatedRegex = /\s*,\s*/; +function setClass(options, note) { + if (options.class === undefined) + return; + options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className)); +} +class EasyScore { + constructor(options = {}) { + this.defaults = { + clef: 'treble', + time: '4/4', + stem: 'auto', + }; + this.setOptions(options); + } + set(defaults) { + this.defaults = Object.assign(Object.assign({}, this.defaults), defaults); + return this; + } + setOptions(options) { + var _a, _b; + const factory = options.factory; + const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory); + this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory, + builder }); + this.factory = factory; + this.builder = builder; + this.grammar = new EasyScoreGrammar(this.builder); + this.parser = new Parser(this.grammar); + (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook)); + return this; + } + setContext(context) { + this.factory.setContext(context); + return this; + } + parse(line, options = {}) { + this.builder.reset(options); + const result = this.parser.parse(line); + if (!result.success && this.options.throwOnError) { + L(result); + throw new RuntimeError('Error parsing line: ' + line); + } + return result; + } + beam(notes, options) { + this.factory.Beam({ notes, options }); + return notes; + } + tuplet(notes, options) { + this.factory.Tuplet({ notes, options }); + return notes; + } + notes(line, options = {}) { + options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options); + this.parse(line, options); + return this.builder.getElements().notes; + } + voice(notes, options = {}) { + options = Object.assign({ time: this.defaults.time }, options); + return this.factory.Voice(options).addTickables(notes); + } + addCommitHook(commitHook) { + this.builder.addCommitHook(commitHook); + } +} +EasyScore.DEBUG = false; +export { EasyScore }; diff --git a/build/esm/src/element.js b/build/esm/src/element.js new file mode 100644 index 0000000000..3cbfe9e745 --- /dev/null +++ b/build/esm/src/element.js @@ -0,0 +1,246 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Registry } from './registry.js'; +import { defined, prefix } from './util.js'; +class Element { + static get CATEGORY() { + return "Element"; + } + static newID() { + return `auto${Element.ID++}`; + } + constructor() { + var _a; + this.children = []; + this.attrs = { + id: Element.newID(), + type: this.getCategory(), + class: '', + }; + this.rendered = false; + (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this); + } + addChildElement(child) { + this.children.push(child); + return this; + } + getCategory() { + return this.constructor.CATEGORY; + } + setStyle(style) { + this.style = style; + return this; + } + setGroupStyle(style) { + this.style = style; + this.children.forEach((child) => child.setGroupStyle(style)); + return this; + } + getStyle() { + return this.style; + } + applyStyle(context = this.context, style = this.getStyle()) { + if (!style) + return this; + if (!context) + return this; + context.save(); + if (style.shadowColor) + context.setShadowColor(style.shadowColor); + if (style.shadowBlur) + context.setShadowBlur(style.shadowBlur); + if (style.fillStyle) + context.setFillStyle(style.fillStyle); + if (style.strokeStyle) + context.setStrokeStyle(style.strokeStyle); + if (style.lineWidth) + context.setLineWidth(style.lineWidth); + return this; + } + restoreStyle(context = this.context, style = this.getStyle()) { + if (!style) + return this; + if (!context) + return this; + context.restore(); + return this; + } + drawWithStyle() { + this.checkContext(); + this.applyStyle(); + this.draw(); + this.restoreStyle(); + } + hasClass(className) { + var _a; + if (!this.attrs.class) + return false; + return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1; + } + addClass(className) { + var _a; + if (this.hasClass(className)) + return this; + if (!this.attrs.class) + this.attrs.class = `${className}`; + else + this.attrs.class = `${this.attrs.class} ${className}`; + (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ + id: this.attrs.id, + name: 'class', + value: className, + oldValue: undefined, + }); + return this; + } + removeClass(className) { + var _a, _b; + if (!this.hasClass(className)) + return this; + const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' '); + if (arr) { + arr.splice(arr.indexOf(className)); + this.attrs.class = arr.join(' '); + } + (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({ + id: this.attrs.id, + name: 'class', + value: undefined, + oldValue: className, + }); + return this; + } + onRegister(registry) { + this.registry = registry; + return this; + } + isRendered() { + return this.rendered; + } + setRendered(rendered = true) { + this.rendered = rendered; + return this; + } + getAttributes() { + return this.attrs; + } + getAttribute(name) { + return this.attrs[name]; + } + getSVGElement(suffix = '') { + const id = prefix(this.attrs.id + suffix); + const element = document.getElementById(id); + if (element) + return element; + } + setAttribute(name, value) { + var _a; + const oldID = this.attrs.id; + const oldValue = this.attrs[name]; + this.attrs[name] = value; + (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue }); + return this; + } + getBoundingBox() { + return this.boundingBox; + } + getContext() { + return this.context; + } + setContext(context) { + this.context = context; + return this; + } + checkContext() { + return defined(this.context, 'NoContext', 'No rendering context attached to instance.'); + } + set font(f) { + this.setFont(f); + } + get font() { + return Font.toCSSString(this.textFont); + } + setFont(font, size, weight, style) { + const defaultTextFont = this.constructor.TEXT_FONT; + const fontIsObject = typeof font === 'object'; + const fontIsString = typeof font === 'string'; + const fontIsUndefined = font === undefined; + const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined; + if (fontIsObject) { + this.textFont = Object.assign(Object.assign({}, defaultTextFont), font); + } + else if (fontIsString && sizeWeightStyleAreUndefined) { + this.textFont = Font.fromCSSString(font); + } + else if (fontIsUndefined && sizeWeightStyleAreUndefined) { + this.textFont = Object.assign({}, defaultTextFont); + } + else { + this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style); + } + return this; + } + getFont() { + if (!this.textFont) { + this.resetFont(); + } + return Font.toCSSString(this.textFont); + } + resetFont() { + this.setFont(); + } + get fontInfo() { + if (!this.textFont) { + this.resetFont(); + } + return Object.assign({}, this.textFont); + } + set fontInfo(fontInfo) { + this.setFont(fontInfo); + } + setFontSize(size) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style); + return this; + } + getFontSize() { + return this.fontSize; + } + set fontSize(size) { + this.setFontSize(size); + } + get fontSize() { + let size = this.fontInfo.size; + if (typeof size === 'number') { + size = `${size}pt`; + } + return size; + } + get fontSizeInPoints() { + return Font.convertSizeToPointValue(this.fontSize); + } + get fontSizeInPixels() { + return Font.convertSizeToPixelValue(this.fontSize); + } + get fontStyle() { + return this.fontInfo.style; + } + set fontStyle(style) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style); + } + get fontWeight() { + return this.fontInfo.weight + ''; + } + set fontWeight(weight) { + const fontInfo = this.fontInfo; + this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style); + } +} +Element.ID = 1000; +Element.TEXT_FONT = { + family: Font.SANS_SERIF, + size: Font.SIZE, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, +}; +export { Element }; diff --git a/build/esm/src/factory.js b/build/esm/src/factory.js new file mode 100644 index 0000000000..a9c9e5f0d5 --- /dev/null +++ b/build/esm/src/factory.js @@ -0,0 +1,467 @@ +import { Accidental } from './accidental.js'; +import { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation.js'; +import { Articulation } from './articulation.js'; +import { BarNote } from './barnote.js'; +import { Beam } from './beam.js'; +import { ChordSymbol } from './chordsymbol.js'; +import { ClefNote } from './clefnote.js'; +import { Curve } from './curve.js'; +import { EasyScore } from './easyscore.js'; +import { Element } from './element.js'; +import { Formatter } from './formatter.js'; +import { FretHandFinger } from './frethandfinger.js'; +import { GhostNote } from './ghostnote.js'; +import { GlyphNote } from './glyphnote.js'; +import { GraceNote } from './gracenote.js'; +import { GraceNoteGroup } from './gracenotegroup.js'; +import { KeySigNote } from './keysignote.js'; +import { ModifierContext } from './modifiercontext.js'; +import { MultiMeasureRest } from './multimeasurerest.js'; +import { NoteSubGroup } from './notesubgroup.js'; +import { Ornament } from './ornament.js'; +import { PedalMarking } from './pedalmarking.js'; +import { Renderer } from './renderer.js'; +import { RepeatNote } from './repeatnote.js'; +import { Stave } from './stave.js'; +import { StaveConnector } from './staveconnector.js'; +import { StaveLine } from './staveline.js'; +import { StaveNote } from './stavenote.js'; +import { StaveTie } from './stavetie.js'; +import { StringNumber } from './stringnumber.js'; +import { System } from './system.js'; +import { TabNote } from './tabnote.js'; +import { TabStave } from './tabstave.js'; +import { TextBracket } from './textbracket.js'; +import { TextDynamics } from './textdynamics.js'; +import { TextNote } from './textnote.js'; +import { TickContext } from './tickcontext.js'; +import { TimeSigNote } from './timesignote.js'; +import { Tuplet } from './tuplet.js'; +import { defined, log, RuntimeError } from './util.js'; +import { VibratoBracket } from './vibratobracket.js'; +import { Voice } from './voice.js'; +import { isHTMLCanvas } from './web.js'; +function L(...args) { + if (Factory.DEBUG) + log('Vex.Flow.Factory', args); +} +class Factory { + static newFromElementId(elementId, width = 500, height = 200) { + return new Factory({ renderer: { elementId, width, height } }); + } + constructor(options = {}) { + L('New factory: ', options); + this.options = { + stave: { + space: 10, + }, + renderer: { + elementId: '', + width: 500, + height: 200, + background: '#FFF', + }, + font: Factory.TEXT_FONT, + }; + this.setOptions(options); + } + reset() { + this.renderQ = []; + this.systems = []; + this.staves = []; + this.voices = []; + this.stave = undefined; + } + setOptions(options) { + this.options = Object.assign(Object.assign({}, this.options), options); + this.initRenderer(); + this.reset(); + } + initRenderer() { + const { elementId, width, height, background } = this.options.renderer; + if (elementId == null) { + return; + } + if (elementId == '') { + L(this); + throw new RuntimeError('renderer.elementId not set in FactoryOptions'); + } + let backend = this.options.renderer.backend; + if (backend === undefined) { + const elem = document.getElementById(elementId); + if (isHTMLCanvas(elem)) { + backend = Renderer.Backends.CANVAS; + } + else { + backend = Renderer.Backends.SVG; + } + } + this.context = Renderer.buildContext(elementId, backend, width, height, background); + } + getContext() { + return this.context; + } + setContext(context) { + this.context = context; + return this; + } + getStave() { + return this.stave; + } + getVoices() { + return this.voices; + } + Stave(params) { + const staveSpace = this.options.stave.space; + const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params); + const stave = new Stave(p.x, p.y, p.width, p.options); + this.staves.push(stave); + stave.setContext(this.context); + this.stave = stave; + return stave; + } + TabStave(params) { + const staveSpace = this.options.stave.space; + const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params); + const stave = new TabStave(p.x, p.y, p.width, p.options); + this.staves.push(stave); + stave.setContext(this.context); + this.stave = stave; + return stave; + } + StaveNote(noteStruct) { + const note = new StaveNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GlyphNote(glyph, noteStruct, options) { + const note = new GlyphNote(glyph, noteStruct, options); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + RepeatNote(type, noteStruct, options) { + const note = new RepeatNote(type, noteStruct, options); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GhostNote(noteStruct) { + const ghostNote = new GhostNote(noteStruct); + if (this.stave) + ghostNote.setStave(this.stave); + ghostNote.setContext(this.context); + this.renderQ.push(ghostNote); + return ghostNote; + } + TextNote(noteStruct) { + const textNote = new TextNote(noteStruct); + if (this.stave) + textNote.setStave(this.stave); + textNote.setContext(this.context); + this.renderQ.push(textNote); + return textNote; + } + BarNote(params = {}) { + const barNote = new BarNote(params.type); + if (this.stave) + barNote.setStave(this.stave); + barNote.setContext(this.context); + this.renderQ.push(barNote); + return barNote; + } + ClefNote(params) { + const p = Object.assign({ type: 'treble', options: { + size: 'default', + annotation: undefined, + } }, params); + const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation); + if (this.stave) + clefNote.setStave(this.stave); + clefNote.setContext(this.context); + this.renderQ.push(clefNote); + return clefNote; + } + TimeSigNote(params) { + const p = Object.assign({ time: '4/4' }, params); + const timeSigNote = new TimeSigNote(p.time); + if (this.stave) + timeSigNote.setStave(this.stave); + timeSigNote.setContext(this.context); + this.renderQ.push(timeSigNote); + return timeSigNote; + } + KeySigNote(params) { + const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey); + if (this.stave) + keySigNote.setStave(this.stave); + keySigNote.setContext(this.context); + this.renderQ.push(keySigNote); + return keySigNote; + } + TabNote(noteStruct) { + const note = new TabNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + this.renderQ.push(note); + return note; + } + GraceNote(noteStruct) { + const note = new GraceNote(noteStruct); + if (this.stave) + note.setStave(this.stave); + note.setContext(this.context); + return note; + } + GraceNoteGroup(params) { + const group = new GraceNoteGroup(params.notes, params.slur); + group.setContext(this.context); + return group; + } + Accidental(params) { + const accid = new Accidental(params.type); + accid.setContext(this.context); + return accid; + } + Annotation(params) { + const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params); + const annotation = new Annotation(p.text); + annotation.setJustification(p.hJustify); + annotation.setVerticalJustification(p.vJustify); + annotation.setFont(p.font); + annotation.setContext(this.context); + return annotation; + } + ChordSymbol(params) { + const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params); + const chordSymbol = new ChordSymbol(); + chordSymbol.setHorizontal(p.hJustify); + chordSymbol.setVertical(p.vJustify); + chordSymbol.setEnableKerning(p.kerning); + chordSymbol.setReportWidth(p.reportWidth); + if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') { + if (typeof p.fontWeight === 'string') + chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight); + else + chordSymbol.setFont(p.fontFamily, p.fontSize, ''); + } + else if (typeof p.fontSize === 'number') { + chordSymbol.setFontSize(p.fontSize); + } + chordSymbol.setContext(this.context); + return chordSymbol; + } + Articulation(params) { + var _a; + const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.'); + if ((params === null || params === void 0 ? void 0 : params.position) != undefined) + articulation.setPosition(params.position); + if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined) + articulation.setBetweenLines(params.betweenLines); + articulation.setContext(this.context); + return articulation; + } + Ornament(type, params) { + const options = Object.assign({ type, position: 0, accidental: '' }, params); + const ornament = new Ornament(type); + ornament.setPosition(options.position); + if (options.upperAccidental) { + ornament.setUpperAccidental(options.upperAccidental); + } + if (options.lowerAccidental) { + ornament.setLowerAccidental(options.lowerAccidental); + } + if (typeof options.delayed !== 'undefined') { + ornament.setDelayed(options.delayed); + } + ornament.setContext(this.context); + return ornament; + } + TextDynamics(params) { + const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params); + const text = new TextDynamics({ + text: p.text, + line: p.line, + duration: p.duration, + dots: p.dots, + }); + if (this.stave) + text.setStave(this.stave); + text.setContext(this.context); + this.renderQ.push(text); + return text; + } + Fingering(params) { + const p = Object.assign({ number: '0', position: 'left' }, params); + const fingering = new FretHandFinger(p.number); + fingering.setPosition(p.position); + fingering.setContext(this.context); + return fingering; + } + StringNumber(params, drawCircle = true) { + const stringNumber = new StringNumber(params.number); + stringNumber.setPosition(params.position); + stringNumber.setContext(this.context); + stringNumber.setDrawCircle(drawCircle); + return stringNumber; + } + TickContext() { + return new TickContext(); + } + ModifierContext() { + return new ModifierContext(); + } + MultiMeasureRest(params) { + const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures'); + const multiMeasureRest = new MultiMeasureRest(numMeasures, params); + multiMeasureRest.setContext(this.context); + this.renderQ.push(multiMeasureRest); + return multiMeasureRest; + } + Voice(params) { + const p = Object.assign({ time: '4/4' }, params); + const voice = new Voice(p.time); + this.voices.push(voice); + return voice; + } + StaveConnector(params) { + const connector = new StaveConnector(params.top_stave, params.bottom_stave); + connector.setType(params.type).setContext(this.context); + this.renderQ.push(connector); + return connector; + } + Formatter(options) { + return new Formatter(options); + } + Tuplet(params) { + const p = Object.assign({ notes: [], options: {} }, params); + const tuplet = new Tuplet(p.notes, p.options).setContext(this.context); + this.renderQ.push(tuplet); + return tuplet; + } + Beam(params) { + var _a, _b, _c, _d, _e; + const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context); + beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []); + if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) { + Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => { + beam.setPartialBeamSideAt(Number(noteIndex), direction); + }); + } + this.renderQ.push(beam); + return beam; + } + Curve(params) { + const curve = new Curve(params.from, params.to, params.options).setContext(this.context); + this.renderQ.push(curve); + return curve; + } + StaveTie(params) { + var _a; + const tie = new StaveTie({ + first_note: params.from, + last_note: params.to, + first_indices: params.first_indices, + last_indices: params.last_indices, + }, params.text); + if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction) + tie.setDirection(params.options.direction); + tie.setContext(this.context); + this.renderQ.push(tie); + return tie; + } + StaveLine(params) { + var _a, _b; + const line = new StaveLine({ + first_note: params.from, + last_note: params.to, + first_indices: params.first_indices, + last_indices: params.last_indices, + }); + if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text) + line.setText(params.options.text); + if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font) + line.setFont(params.options.font); + line.setContext(this.context); + this.renderQ.push(line); + return line; + } + VibratoBracket(params) { + const vibratoBracket = new VibratoBracket({ + start: params.from, + stop: params.to, + }); + if (params.options.line) + vibratoBracket.setLine(params.options.line); + if (params.options.harsh) + vibratoBracket.setHarsh(params.options.harsh); + vibratoBracket.setContext(this.context); + this.renderQ.push(vibratoBracket); + return vibratoBracket; + } + TextBracket(params) { + const textBracket = new TextBracket({ + start: params.from, + stop: params.to, + text: params.text, + superscript: params.options.superscript, + position: params.options.position, + }); + if (params.options.line) + textBracket.setLine(params.options.line); + if (params.options.font) + textBracket.setFont(params.options.font); + textBracket.setContext(this.context); + this.renderQ.push(textBracket); + return textBracket; + } + System(params = {}) { + params.factory = this; + const system = new System(params).setContext(this.context); + this.systems.push(system); + return system; + } + EasyScore(options = {}) { + options.factory = this; + return new EasyScore(options); + } + PedalMarking(params) { + const p = Object.assign({ notes: [], options: { + style: 'mixed', + } }, params); + const pedal = new PedalMarking(p.notes); + pedal.setType(PedalMarking.typeString[p.options.style]); + pedal.setContext(this.context); + this.renderQ.push(pedal); + return pedal; + } + NoteSubGroup(params) { + const p = Object.assign({ notes: [] }, params); + const group = new NoteSubGroup(p.notes); + group.setContext(this.context); + return group; + } + draw() { + const ctx = this.context; + this.systems.forEach((s) => s.setContext(ctx).format()); + this.staves.forEach((s) => s.setContext(ctx).draw()); + this.voices.forEach((v) => v.setContext(ctx).draw()); + this.renderQ.forEach((e) => { + if (!e.isRendered()) + e.setContext(ctx).draw(); + }); + this.systems.forEach((s) => s.setContext(ctx).draw()); + this.reset(); + } +} +Factory.DEBUG = false; +Factory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); +export { Factory }; diff --git a/build/esm/src/flow.js b/build/esm/src/flow.js new file mode 100644 index 0000000000..feade2705b --- /dev/null +++ b/build/esm/src/flow.js @@ -0,0 +1,304 @@ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +import { Accidental } from './accidental.js'; +import { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation.js'; +import { Articulation } from './articulation.js'; +import { BarNote } from './barnote.js'; +import { Beam } from './beam.js'; +import { Bend } from './bend.js'; +import { BoundingBox } from './boundingbox.js'; +import { BoundingBoxComputation } from './boundingboxcomputation.js'; +import { CanvasContext } from './canvascontext.js'; +import { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol.js'; +import { Clef } from './clef.js'; +import { ClefNote } from './clefnote.js'; +import { Crescendo } from './crescendo.js'; +import { Curve, CurvePosition } from './curve.js'; +import { Dot } from './dot.js'; +import { EasyScore } from './easyscore.js'; +import { Element } from './element.js'; +import { Factory } from './factory.js'; +import { Font, FontStyle, FontWeight } from './font.js'; +import { Formatter } from './formatter.js'; +import { Fraction } from './fraction.js'; +import { FretHandFinger } from './frethandfinger.js'; +import { GhostNote } from './ghostnote.js'; +import { Glyph } from './glyph.js'; +import { GlyphNote } from './glyphnote.js'; +import { GraceNote } from './gracenote.js'; +import { GraceNoteGroup } from './gracenotegroup.js'; +import { GraceTabNote } from './gracetabnote.js'; +import { KeyManager } from './keymanager.js'; +import { KeySignature } from './keysignature.js'; +import { KeySigNote } from './keysignote.js'; +import { Modifier, ModifierPosition } from './modifier.js'; +import { ModifierContext } from './modifiercontext.js'; +import { MultiMeasureRest } from './multimeasurerest.js'; +import { Music } from './music.js'; +import { Note } from './note.js'; +import { NoteHead } from './notehead.js'; +import { NoteSubGroup } from './notesubgroup.js'; +import { Ornament } from './ornament.js'; +import { Parenthesis } from './parenthesis.js'; +import { Parser } from './parser.js'; +import { PedalMarking } from './pedalmarking.js'; +import { Registry } from './registry.js'; +import { RenderContext } from './rendercontext.js'; +import { Renderer, RendererBackends, RendererLineEndType } from './renderer.js'; +import { RepeatNote } from './repeatnote.js'; +import { Stave } from './stave.js'; +import { Barline, BarlineType } from './stavebarline.js'; +import { StaveConnector } from './staveconnector.js'; +import { StaveHairpin } from './stavehairpin.js'; +import { StaveLine } from './staveline.js'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { StaveNote } from './stavenote.js'; +import { Repetition } from './staverepetition.js'; +import { StaveTempo } from './stavetempo.js'; +import { StaveText } from './stavetext.js'; +import { StaveTie } from './stavetie.js'; +import { Volta, VoltaType } from './stavevolta.js'; +import { Stem } from './stem.js'; +import { StringNumber } from './stringnumber.js'; +import { Stroke } from './strokes.js'; +import { SVGContext } from './svgcontext.js'; +import { System } from './system.js'; +import { Tables } from './tables.js'; +import { TabNote } from './tabnote.js'; +import { TabSlide } from './tabslide.js'; +import { TabStave } from './tabstave.js'; +import { TabTie } from './tabtie.js'; +import { TextBracket, TextBracketPosition } from './textbracket.js'; +import { TextDynamics } from './textdynamics.js'; +import { TextFormatter } from './textformatter.js'; +import { TextJustification, TextNote } from './textnote.js'; +import { TickContext } from './tickcontext.js'; +import { TimeSignature } from './timesignature.js'; +import { TimeSigNote } from './timesignote.js'; +import { Tremolo } from './tremolo.js'; +import { Tuning } from './tuning.js'; +import { Tuplet } from './tuplet.js'; +import { DATE, ID, VERSION } from './version.js'; +import { Vibrato } from './vibrato.js'; +import { VibratoBracket } from './vibratobracket.js'; +import { Voice, VoiceMode } from './voice.js'; +class Flow { + static get BUILD() { + return { + VERSION: VERSION, + ID: ID, + DATE: DATE, + }; + } + static setMusicFont(...fontNames) { + const fonts = fontNames.map((fontName) => Font.load(fontName)); + Tables.MUSIC_FONT_STACK = fonts; + Glyph.MUSIC_FONT_STACK = fonts.slice(); + Glyph.CURRENT_CACHE_KEY = fontNames.join(','); + return fonts; + } + static fetchMusicFont(fontName, fontModuleOrPath) { + return __awaiter(this, void 0, void 0, function* () { + }); + } + static getMusicFont() { + const fonts = Tables.MUSIC_FONT_STACK; + return fonts.map((font) => font.getName()); + } + static getMusicFontStack() { + return Tables.MUSIC_FONT_STACK; + } + static get RENDER_PRECISION_PLACES() { + return Tables.RENDER_PRECISION_PLACES; + } + static set RENDER_PRECISION_PLACES(precision) { + Tables.RENDER_PRECISION_PLACES = precision; + } + static get SOFTMAX_FACTOR() { + return Tables.SOFTMAX_FACTOR; + } + static set SOFTMAX_FACTOR(factor) { + Tables.SOFTMAX_FACTOR = factor; + } + static get NOTATION_FONT_SCALE() { + return Tables.NOTATION_FONT_SCALE; + } + static set NOTATION_FONT_SCALE(value) { + Tables.NOTATION_FONT_SCALE = value; + } + static get TABLATURE_FONT_SCALE() { + return Tables.TABLATURE_FONT_SCALE; + } + static set TABLATURE_FONT_SCALE(value) { + Tables.TABLATURE_FONT_SCALE = value; + } + static get RESOLUTION() { + return Tables.RESOLUTION; + } + static set RESOLUTION(value) { + Tables.RESOLUTION = value; + } + static get SLASH_NOTEHEAD_WIDTH() { + return Tables.SLASH_NOTEHEAD_WIDTH; + } + static set SLASH_NOTEHEAD_WIDTH(value) { + Tables.SLASH_NOTEHEAD_WIDTH = value; + } + static get STAVE_LINE_DISTANCE() { + return Tables.STAVE_LINE_DISTANCE; + } + static set STAVE_LINE_DISTANCE(value) { + Tables.STAVE_LINE_DISTANCE = value; + } + static get STAVE_LINE_THICKNESS() { + return Tables.STAVE_LINE_THICKNESS; + } + static set STAVE_LINE_THICKNESS(value) { + Tables.STAVE_LINE_THICKNESS = value; + } + static get STEM_HEIGHT() { + return Tables.STEM_HEIGHT; + } + static set STEM_HEIGHT(value) { + Tables.STEM_HEIGHT = value; + } + static get STEM_WIDTH() { + return Tables.STEM_WIDTH; + } + static set STEM_WIDTH(value) { + Tables.STEM_WIDTH = value; + } + static get TIME4_4() { + return Tables.TIME4_4; + } + static get accidentalMap() { + return Tables.accidentalMap; + } + static get unicode() { + return Tables.unicode; + } + static keySignature(spec) { + return Tables.keySignature(spec); + } + static hasKeySignature(spec) { + return Tables.hasKeySignature(spec); + } + static getKeySignatures() { + return Tables.getKeySignatures(); + } + static clefProperties(clef) { + return Tables.clefProperties(clef); + } + static keyProperties(key, clef, params) { + return Tables.keyProperties(key, clef, params); + } + static durationToTicks(duration) { + return Tables.durationToTicks(duration); + } +} +Flow.Accidental = Accidental; +Flow.Annotation = Annotation; +Flow.Articulation = Articulation; +Flow.Barline = Barline; +Flow.BarNote = BarNote; +Flow.Beam = Beam; +Flow.Bend = Bend; +Flow.BoundingBox = BoundingBox; +Flow.BoundingBoxComputation = BoundingBoxComputation; +Flow.CanvasContext = CanvasContext; +Flow.ChordSymbol = ChordSymbol; +Flow.Clef = Clef; +Flow.ClefNote = ClefNote; +Flow.Crescendo = Crescendo; +Flow.Curve = Curve; +Flow.Dot = Dot; +Flow.EasyScore = EasyScore; +Flow.Element = Element; +Flow.Factory = Factory; +Flow.Font = Font; +Flow.Formatter = Formatter; +Flow.Fraction = Fraction; +Flow.FretHandFinger = FretHandFinger; +Flow.GhostNote = GhostNote; +Flow.Glyph = Glyph; +Flow.GlyphNote = GlyphNote; +Flow.GraceNote = GraceNote; +Flow.GraceNoteGroup = GraceNoteGroup; +Flow.GraceTabNote = GraceTabNote; +Flow.KeyManager = KeyManager; +Flow.KeySignature = KeySignature; +Flow.KeySigNote = KeySigNote; +Flow.Modifier = Modifier; +Flow.ModifierContext = ModifierContext; +Flow.MultiMeasureRest = MultiMeasureRest; +Flow.Music = Music; +Flow.Note = Note; +Flow.NoteHead = NoteHead; +Flow.NoteSubGroup = NoteSubGroup; +Flow.Ornament = Ornament; +Flow.Parenthesis = Parenthesis; +Flow.Parser = Parser; +Flow.PedalMarking = PedalMarking; +Flow.Registry = Registry; +Flow.RenderContext = RenderContext; +Flow.Renderer = Renderer; +Flow.RepeatNote = RepeatNote; +Flow.Repetition = Repetition; +Flow.Stave = Stave; +Flow.StaveConnector = StaveConnector; +Flow.StaveHairpin = StaveHairpin; +Flow.StaveLine = StaveLine; +Flow.StaveModifier = StaveModifier; +Flow.StaveNote = StaveNote; +Flow.StaveTempo = StaveTempo; +Flow.StaveText = StaveText; +Flow.StaveTie = StaveTie; +Flow.Stem = Stem; +Flow.StringNumber = StringNumber; +Flow.Stroke = Stroke; +Flow.SVGContext = SVGContext; +Flow.System = System; +Flow.TabNote = TabNote; +Flow.TabSlide = TabSlide; +Flow.TabStave = TabStave; +Flow.TabTie = TabTie; +Flow.TextBracket = TextBracket; +Flow.TextDynamics = TextDynamics; +Flow.TextFormatter = TextFormatter; +Flow.TextNote = TextNote; +Flow.TickContext = TickContext; +Flow.TimeSignature = TimeSignature; +Flow.TimeSigNote = TimeSigNote; +Flow.Tremolo = Tremolo; +Flow.Tuning = Tuning; +Flow.Tuplet = Tuplet; +Flow.Vibrato = Vibrato; +Flow.VibratoBracket = VibratoBracket; +Flow.Voice = Voice; +Flow.Volta = Volta; +Flow.AnnotationHorizontalJustify = AnnotationHorizontalJustify; +Flow.AnnotationVerticalJustify = AnnotationVerticalJustify; +Flow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify; +Flow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify; +Flow.SymbolTypes = SymbolTypes; +Flow.SymbolModifiers = SymbolModifiers; +Flow.CurvePosition = CurvePosition; +Flow.FontWeight = FontWeight; +Flow.FontStyle = FontStyle; +Flow.ModifierPosition = ModifierPosition; +Flow.RendererBackends = RendererBackends; +Flow.RendererLineEndType = RendererLineEndType; +Flow.BarlineType = BarlineType; +Flow.StaveModifierPosition = StaveModifierPosition; +Flow.VoltaType = VoltaType; +Flow.TextBracketPosition = TextBracketPosition; +Flow.TextJustification = TextJustification; +Flow.VoiceMode = VoiceMode; +export { Flow }; diff --git a/build/esm/src/font.js b/build/esm/src/font.js new file mode 100644 index 0000000000..eaa808c19a --- /dev/null +++ b/build/esm/src/font.js @@ -0,0 +1,263 @@ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +import { defined } from './util.js'; +export var FontWeight; +(function (FontWeight) { + FontWeight["NORMAL"] = "normal"; + FontWeight["BOLD"] = "bold"; +})(FontWeight || (FontWeight = {})); +export var FontStyle; +(function (FontStyle) { + FontStyle["NORMAL"] = "normal"; + FontStyle["ITALIC"] = "italic"; +})(FontStyle || (FontStyle = {})); +let fontParser; +const Fonts = {}; +class Font { + static convertSizeToPixelValue(fontSize = Font.SIZE) { + var _a; + if (typeof fontSize === 'number') { + return fontSize * Font.scaleToPxFrom.pt; + } + else { + const value = parseFloat(fontSize); + if (isNaN(value)) { + return 0; + } + const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); + const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1; + return value * conversionFactor; + } + } + static convertSizeToPointValue(fontSize = Font.SIZE) { + var _a; + if (typeof fontSize === 'number') { + return fontSize; + } + else { + const value = parseFloat(fontSize); + if (isNaN(value)) { + return 0; + } + const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); + const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt; + return value * conversionFactor; + } + } + static validate(f, size, weight, style) { + if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) { + return Font.fromCSSString(f); + } + let family; + if (typeof f === 'object') { + family = f.family; + size = f.size; + weight = f.weight; + style = f.style; + } + else { + family = f; + } + family = family !== null && family !== void 0 ? family : Font.SANS_SERIF; + size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt'; + weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL; + style = style !== null && style !== void 0 ? style : FontStyle.NORMAL; + if (weight === '') { + weight = FontWeight.NORMAL; + } + if (style === '') { + style = FontStyle.NORMAL; + } + if (typeof size === 'number') { + size = `${size}pt`; + } + if (typeof weight === 'number') { + weight = weight.toString(); + } + return { family, size, weight, style }; + } + static fromCSSString(cssFontShorthand) { + if (!fontParser) { + fontParser = document.createElement('span'); + } + fontParser.style.font = cssFontShorthand; + const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style; + return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle }; + } + static toCSSString(fontInfo) { + var _a; + if (!fontInfo) { + return ''; + } + let style; + const st = fontInfo.style; + if (st === FontStyle.NORMAL || st === '' || st === undefined) { + style = ''; + } + else { + style = st.trim() + ' '; + } + let weight; + const wt = fontInfo.weight; + if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) { + weight = ''; + } + else if (typeof wt === 'number') { + weight = wt + ' '; + } + else { + weight = wt.trim() + ' '; + } + let size; + const sz = fontInfo.size; + if (sz === undefined) { + size = Font.SIZE + 'pt '; + } + else if (typeof sz === 'number') { + size = sz + 'pt '; + } + else { + size = sz.trim() + ' '; + } + const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF; + return `${style}${weight}${size}${family}`; + } + static scaleSize(fontSize, scaleFactor) { + if (typeof fontSize === 'number') { + return (fontSize * scaleFactor); + } + else { + const value = parseFloat(fontSize); + const unit = fontSize.replace(/[\d.\s]/g, ''); + return `${value * scaleFactor}${unit}`; + } + } + static isBold(weight) { + if (!weight) { + return false; + } + else if (typeof weight === 'number') { + return weight >= 600; + } + else { + const parsedWeight = parseInt(weight, 10); + if (isNaN(parsedWeight)) { + return weight.toLowerCase() === 'bold'; + } + else { + return parsedWeight >= 600; + } + } + } + static isItalic(style) { + if (!style) { + return false; + } + else { + return style.toLowerCase() === FontStyle.ITALIC; + } + } + static loadWebFont(fontName, woffURL, includeWoff2 = true) { + return __awaiter(this, void 0, void 0, function* () { + const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : ''; + const woff1URL = `url(${woffURL}) format('woff')`; + const woffURLs = woff2URL + woff1URL; + const fontFace = new FontFace(fontName, woffURLs); + yield fontFace.load(); + document.fonts.add(fontFace); + return fontFace; + }); + } + static loadWebFonts() { + return __awaiter(this, void 0, void 0, function* () { + const host = Font.WEB_FONT_HOST; + const files = Font.WEB_FONT_FILES; + for (const fontName in files) { + const fontPath = files[fontName]; + Font.loadWebFont(fontName, host + fontPath); + } + }); + } + static load(fontName, data, metrics) { + let font = Fonts[fontName]; + if (!font) { + font = new Font(fontName); + Fonts[fontName] = font; + } + if (data) { + font.setData(data); + } + if (metrics) { + font.setMetrics(metrics); + } + return font; + } + constructor(fontName) { + this.name = fontName; + } + getName() { + return this.name; + } + getData() { + return defined(this.data, 'FontError', 'Missing font data'); + } + getMetrics() { + return defined(this.metrics, 'FontError', 'Missing metrics'); + } + setData(data) { + this.data = data; + } + setMetrics(metrics) { + this.metrics = metrics; + } + hasData() { + return this.data !== undefined; + } + getResolution() { + return this.getData().resolution; + } + getGlyphs() { + return this.getData().glyphs; + } + lookupMetric(key, defaultValue) { + const keyParts = key.split('.'); + let currObj = this.getMetrics(); + for (let i = 0; i < keyParts.length; i++) { + const keyPart = keyParts[i]; + const value = currObj[keyPart]; + if (value === undefined) { + return defaultValue; + } + currObj = value; + } + return currObj; + } + toString() { + return '[' + this.name + ' Font]'; + } +} +Font.SANS_SERIF = 'Arial, sans-serif'; +Font.SERIF = 'Times New Roman, serif'; +Font.SIZE = 10; +Font.scaleToPxFrom = { + pt: 4 / 3, + px: 1, + em: 16, + '%': 4 / 25, + in: 96, + mm: 96 / 25.4, + cm: 96 / 2.54, +}; +Font.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/'; +Font.WEB_FONT_FILES = { + 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff', + PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff', +}; +export { Font }; diff --git a/build/esm/src/fonts/bravura_glyphs.js b/build/esm/src/fonts/bravura_glyphs.js new file mode 100644 index 0000000000..743b08204b --- /dev/null +++ b/build/esm/src/fonts/bravura_glyphs.js @@ -0,0 +1,3543 @@ +export const BravuraFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 469, + y_min: 0, + y_max: 295, + ha: 295, + o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z', + }, + bracketBottom: { + x_min: 0, + x_max: 469, + y_min: -295, + y_max: 0, + ha: 295, + o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z', + }, + barlineTick: { + x_min: 0, + x_max: 36, + y_min: 868, + y_max: 1120, + ha: 252, + o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z', + }, + breathMarkTick: { + x_min: 0, + x_max: 500, + y_min: 0, + y_max: 502, + ha: 502, + o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z', + }, + segno: { + x_min: 4, + x_max: 550, + y_min: -27, + y_max: 759, + ha: 786, + o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z', + }, + coda: { + x_min: -4, + x_max: 955, + y_min: -158, + y_max: 898, + ha: 1056, + o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z', + }, + gClef: { + x_min: 0, + x_max: 671, + y_min: -658, + y_max: 1098, + ha: 1756, + o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z', + }, + cClef: { + x_min: 0, + x_max: 699, + y_min: -506, + y_max: 506, + ha: 1012, + o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z', + }, + fClef: { + x_min: -5, + x_max: 684, + y_min: -635, + y_max: 262, + ha: 897, + o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 382, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z', + }, + '6stringTabClef': { + x_min: -3, + x_max: 408, + y_min: -748, + y_max: 764, + ha: 1512, + o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z', + }, + timeSig0: { + x_min: 20, + x_max: 450, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z', + }, + timeSig1: { + x_min: 20, + x_max: 314, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z', + }, + timeSig2: { + x_min: 20, + x_max: 426, + y_min: -257, + y_max: 254, + ha: 511, + o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z', + }, + timeSig3: { + x_min: 20, + x_max: 401, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z', + }, + timeSig4: { + x_min: 20, + x_max: 450, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z', + }, + timeSig5: { + x_min: 20, + x_max: 383, + y_min: -251, + y_max: 246, + ha: 497, + o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z', + }, + timeSig6: { + x_min: 20, + x_max: 414, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z', + }, + timeSig7: { + x_min: 20, + x_max: 421, + y_min: -250, + y_max: 249, + ha: 499, + o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z', + }, + timeSig8: { + x_min: 20, + x_max: 416, + y_min: -259, + y_max: 259, + ha: 518, + o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z', + }, + timeSig9: { + x_min: 20, + x_max: 414, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z', + }, + timeSigCommon: { + x_min: 5, + x_max: 424, + y_min: -249, + y_max: 251, + ha: 500, + o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 418, + y_min: -359, + y_max: 361, + ha: 720, + o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z', + }, + timeSigPlus: { + x_min: -1, + x_max: 499, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z', + }, + timeSigPlusSmall: { + x_min: -1, + x_max: 255, + y_min: -133, + y_max: 123, + ha: 256, + o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 448, + y_min: -35, + y_max: 40, + ha: 75, + o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z', + }, + timeSigParensRight: { + x_min: 0, + x_max: 184, + y_min: -489, + y_max: 491, + ha: 980, + o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z', + }, + timeSigParensRightSmall: { + x_min: 0, + x_max: 110, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z', + }, + timeSigParensLeft: { + x_min: 0, + x_max: 184, + y_min: -489, + y_max: 491, + ha: 980, + o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z', + }, + timeSigParensLeftSmall: { + x_min: 0, + x_max: 110, + y_min: -251, + y_max: 249, + ha: 500, + o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 599, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 422, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 295, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 295, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z', + }, + noteheadXDoubleWhole: { + x_min: 0, + x_max: 546, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 377, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 334, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 290, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z', + }, + noteheadCircleXDoubleWhole: { + x_min: 0, + x_max: 422, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z', + }, + noteheadCircleXWhole: { + x_min: 0, + x_max: 249, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z', + }, + noteheadCircleXHalf: { + x_min: 0, + x_max: 250, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 249, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z', + }, + noteheadCircledDoubleWhole: { + x_min: 0, + x_max: 603, + y_min: -218, + y_max: 213, + ha: 431, + o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z', + }, + noteheadCircledWhole: { + x_min: 0, + x_max: 437, + y_min: -225, + y_max: 211, + ha: 436, + o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z', + }, + noteheadCircledHalf: { + x_min: -18, + x_max: 311, + y_min: -162, + y_max: 167, + ha: 329, + o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z', + }, + noteheadCircledBlack: { + x_min: -21, + x_max: 321, + y_min: -171, + y_max: 167, + ha: 338, + o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 416, + y_min: -190, + y_max: 198, + ha: 388, + o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 313, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 313, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z', + }, + noteheadTriangleDownDoubleWhole: { + x_min: 0, + x_max: 483, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z', + }, + noteheadTriangleDownWhole: { + x_min: 0, + x_max: 319, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z', + }, + noteheadTriangleDownHalf: { + x_min: 0, + x_max: 285, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z', + }, + noteheadTriangleDownBlack: { + x_min: 0, + x_max: 292, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 207 -180 l 420 180 l 0 180 z', + }, + noteheadTriangleUpDoubleWhole: { + x_min: 0, + x_max: 483, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 319, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 285, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 293, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 422 -180 l 207 180 l 0 -180 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: 0, + x_max: 596, + y_min: -179, + y_max: 168, + ha: 347, + o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z', + }, + noteheadSlashedWhole1: { + x_min: -22, + x_max: 433, + y_min: -157, + y_max: 148, + ha: 305, + o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z', + }, + noteheadSlashedHalf1: { + x_min: -67, + x_max: 386, + y_min: -142, + y_max: 160, + ha: 302, + o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z', + }, + noteheadSlashedBlack1: { + x_min: -80, + x_max: 375, + y_min: -165, + y_max: 167, + ha: 332, + o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: 0, + x_max: 596, + y_min: -178, + y_max: 169, + ha: 347, + o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z', + }, + noteheadSlashedWhole2: { + x_min: -18, + x_max: 436, + y_min: -154, + y_max: 151, + ha: 305, + o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z', + }, + noteheadSlashedHalf2: { + x_min: -73, + x_max: 380, + y_min: -134, + y_max: 168, + ha: 302, + o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z', + }, + noteheadSlashedBlack2: { + x_min: -79, + x_max: 376, + y_min: -164, + y_max: 168, + ha: 332, + o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 432, + y_min: -155, + y_max: 155, + ha: 310, + o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 270, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 251, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 250, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z', + }, + noteheadParenthesis: { + x_min: -73, + x_max: 368, + y_min: -180, + y_max: 182, + ha: 362, + o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z', + }, + noteheadParenthesisRight: { + x_min: -36, + x_max: 73, + y_min: -181, + y_max: 181, + ha: 362, + o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 109, + y_min: -181, + y_max: 181, + ha: 362, + o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 315, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 339, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 488 -180 l 0 180 l 0 -180 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 339, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 488 180 l 0 -180 l 488 -180 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 278, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z', + }, + augmentationDot: { + x_min: 0, + x_max: 100, + y_min: -50, + y_max: 50, + ha: 100, + o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z', + }, + tremolo1: { + x_min: -150, + x_max: 150, + y_min: -93, + y_max: 94, + ha: 187, + o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z', + }, + flag8thUp: { + x_min: 0, + x_max: 264, + y_min: -810, + y_max: 9, + ha: 819, + o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z', + }, + flag8thDown: { + x_min: 0, + x_max: 306, + y_min: -14, + y_max: 808, + ha: 822, + o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z', + }, + flag16thUp: { + x_min: 0, + x_max: 279, + y_min: -813, + y_max: 2, + ha: 815, + o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z', + }, + flag16thDown: { + x_min: 0, + x_max: 291, + y_min: -9, + y_max: 812, + ha: 821, + o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 149, + ha: 961, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag32ndDown: { + x_min: 0, + x_max: 273, + y_min: -172, + y_max: 812, + ha: 984, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z', + }, + flag64thUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 347, + ha: 1159, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag64thDown: { + x_min: 0, + x_max: 273, + y_min: -376, + y_max: 812, + ha: 1188, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z', + }, + flag128thUp: { + x_min: 0, + x_max: 261, + y_min: -812, + y_max: 533, + ha: 1345, + o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', + }, + flag128thDown: { + x_min: 0, + x_max: 273, + y_min: -580, + y_max: 812, + ha: 1392, + o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z', + }, + accidentalFlat: { + x_min: 0, + x_max: 226, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 168, + y_min: -335, + y_max: 341, + ha: 676, + o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 249, + y_min: -348, + y_max: 350, + ha: 698, + o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 247, + y_min: -125, + y_max: 127, + ha: 252, + o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 411, + y_min: -175, + y_max: 437, + ha: 612, + o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 141, + y_min: -248, + y_max: 247, + ha: 495, + o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 141, + y_min: -248, + y_max: 247, + ha: 495, + o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 1, + x_max: 227, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 1, + x_max: 466, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 179, + y_min: -353, + y_max: 307, + ha: 660, + o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 3, + x_max: 317, + y_min: -347, + y_max: 369, + ha: 716, + o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 1, + x_max: 287, + y_min: -174, + y_max: 438, + ha: 612, + o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 341, + y_min: -350, + y_max: 348, + ha: 698, + o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z', + }, + accidentalBakiyeFlat: { + x_min: -1, + x_max: 286, + y_min: -175, + y_max: 439, + ha: 614, + o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 229, + y_min: -337, + y_max: 322, + ha: 659, + o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z', + }, + accidentalKucukMucennebSharp: { + x_min: -1, + x_max: 339, + y_min: -338, + y_max: 321, + ha: 659, + o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z', + }, + accidentalKoron: { + x_min: 0, + x_max: 300, + y_min: -472, + y_max: 157, + ha: 629, + o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z', + }, + accidentalSori: { + x_min: 0, + x_max: 421, + y_min: -318, + y_max: 328, + ha: 646, + o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 339, + y_min: 1, + y_max: 245, + ha: 244, + o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 339, + y_min: -244, + y_max: 0, + ha: 244, + o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z', + }, + articTenutoAbove: { + x_min: -1, + x_max: 338, + y_min: 0, + y_max: 48, + ha: 48, + o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z', + }, + articTenutoBelow: { + x_min: -1, + x_max: 338, + y_min: -48, + y_max: 0, + ha: 48, + o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z', + }, + articStaccatoAbove: { + x_min: 0, + x_max: 84, + y_min: 0, + y_max: 84, + ha: 84, + o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z', + }, + articStaccatoBelow: { + x_min: 0, + x_max: 84, + y_min: -84, + y_max: 0, + ha: 84, + o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z', + }, + articStaccatissimoAbove: { + x_min: 1, + x_max: 100, + y_min: -2, + y_max: 293, + ha: 295, + o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z', + }, + articStaccatissimoBelow: { + x_min: 1, + x_max: 100, + y_min: -295, + y_max: 0, + ha: 295, + o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z', + }, + articMarcatoAbove: { + x_min: -1, + x_max: 235, + y_min: -1, + y_max: 253, + ha: 254, + o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z', + }, + articMarcatoBelow: { + x_min: -1, + x_max: 235, + y_min: -254, + y_max: 0, + ha: 254, + o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z', + }, + fermataAbove: { + x_min: 3, + x_max: 605, + y_min: -3, + y_max: 329, + ha: 332, + o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z', + }, + fermataBelow: { + x_min: 3, + x_max: 605, + y_min: -332, + y_max: 0, + ha: 332, + o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 603, + y_min: -1, + y_max: 333, + ha: 334, + o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 603, + y_min: -333, + y_max: 1, + ha: 334, + o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 715, + y_min: 0, + y_max: 408, + ha: 408, + o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 715, + y_min: -408, + y_max: 0, + ha: 408, + o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z', + }, + fermataVeryShortAbove: { + x_min: 0, + x_max: 726, + y_min: 0, + y_max: 449, + ha: 449, + o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z', + }, + fermataVeryShortBelow: { + x_min: 0, + x_max: 726, + y_min: -449, + y_max: 0, + ha: 449, + o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 604, + y_min: 0, + y_max: 341, + ha: 341, + o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 604, + y_min: -341, + y_max: 0, + ha: 341, + o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z', + }, + breathMarkComma: { + x_min: 1, + x_max: 152, + y_min: 2, + y_max: 251, + ha: 249, + o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', + }, + breathMarkUpbow: { + x_min: 1, + x_max: 249, + y_min: 1, + y_max: 495, + ha: 494, + o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', + }, + caesura: { + x_min: 0, + x_max: 384, + y_min: -1, + y_max: 532, + ha: 533, + o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 373, + y_min: 0, + y_max: 530, + ha: 530, + o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z', + }, + restMaxima: { + x_min: 0, + x_max: 381, + y_min: -249, + y_max: 250, + ha: 499, + o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 125, + y_min: 0, + y_max: 250, + ha: 250, + o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z', + }, + restWhole: { + x_min: 0, + x_max: 282, + y_min: -135, + y_max: 9, + ha: 144, + o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z', + }, + restWholeLegerLine: { + x_min: -117, + x_max: 399, + y_min: -135, + y_max: 20, + ha: 155, + o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z', + }, + restHalf: { + x_min: 0, + x_max: 282, + y_min: -2, + y_max: 142, + ha: 144, + o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z', + }, + restHalfLegerLine: { + x_min: -117, + x_max: 399, + y_min: -13, + y_max: 142, + ha: 155, + o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z', + }, + restQuarter: { + x_min: 1, + x_max: 270, + y_min: -375, + y_max: 373, + ha: 748, + o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z', + }, + rest8th: { + x_min: 0, + x_max: 247, + y_min: -251, + y_max: 174, + ha: 425, + o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z', + }, + rest16th: { + x_min: 0, + x_max: 320, + y_min: -500, + y_max: 179, + ha: 679, + o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z', + }, + rest32nd: { + x_min: 0, + x_max: 363, + y_min: -500, + y_max: 426, + ha: 926, + o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z', + }, + rest64th: { + x_min: 0, + x_max: 423, + y_min: -753, + y_max: 430, + ha: 1183, + o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z', + }, + rest128th: { + x_min: 0, + x_max: 485, + y_min: -750, + y_max: 689, + ha: 1439, + o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z', + }, + dynamicPiano: { + x_min: -89, + x_max: 366, + y_min: -142, + y_max: 274, + ha: 416, + o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z', + }, + dynamicMezzo: { + x_min: -20, + x_max: 446, + y_min: -10, + y_max: 274, + ha: 284, + o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z', + }, + dynamicForte: { + x_min: -141, + x_max: 364, + y_min: -152, + y_max: 444, + ha: 596, + o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z', + }, + dynamicRinforzando: { + x_min: -20, + x_max: 277, + y_min: 0, + y_max: 274, + ha: 274, + o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 229, + y_min: -10, + y_max: 273, + ha: 283, + o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z', + }, + dynamicZ: { + x_min: -30, + x_max: 244, + y_min: -10, + y_max: 268, + ha: 278, + o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z', + }, + ornamentTrill: { + x_min: 0, + x_max: 521, + y_min: -10, + y_max: 390, + ha: 400, + o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 460, + y_min: 0, + y_max: 218, + ha: 218, + o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 460, + y_min: -90, + y_max: 306, + ha: 396, + o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z', + }, + ornamentMordent: { + x_min: 1, + x_max: 729, + y_min: -73, + y_max: 319, + ha: 392, + o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 725, + y_min: 0, + y_max: 245, + ha: 245, + o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z', + }, + ornamentTremblement: { + x_min: 1, + x_max: 985, + y_min: 0, + y_max: 244, + ha: 244, + o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 1119, + y_min: 0, + y_max: 481, + ha: 481, + o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 2, + x_max: 1150, + y_min: -367, + y_max: 245, + ha: 612, + o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 1048, + y_min: -367, + y_max: 331, + ha: 698, + o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 949, + y_min: 0, + y_max: 381, + ha: 381, + o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 1278, + y_min: 0, + y_max: 247, + ha: 247, + o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: 0, + x_max: 1277, + y_min: -62, + y_max: 333, + ha: 395, + o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 859, + y_min: -222, + y_max: 246, + ha: 468, + o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z', + }, + brassScoop: { + x_min: 1, + x_max: 320, + y_min: -373, + y_max: 13, + ha: 386, + o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z', + }, + brassDoitMedium: { + x_min: 0, + x_max: 489, + y_min: -40, + y_max: 346, + ha: 386, + o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z', + }, + brassFallLipShort: { + x_min: 1, + x_max: 293, + y_min: -345, + y_max: 42, + ha: 387, + o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z', + }, + brassLiftMedium: { + x_min: 0, + x_max: 811, + y_min: 0, + y_max: 852, + ha: 852, + o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z', + }, + brassFallRoughMedium: { + x_min: 0, + x_max: 811, + y_min: 0, + y_max: 852, + ha: 852, + o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z', + }, + brassBend: { + x_min: 0, + x_max: 392, + y_min: 0, + y_max: 282, + ha: 282, + o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 272, + y_min: 0, + y_max: 272, + ha: 272, + o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', + }, + brassMuteOpen: { + x_min: 0, + x_max: 304, + y_min: 0, + y_max: 304, + ha: 304, + o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z', + }, + brassFlip: { + x_min: 0, + x_max: 379, + y_min: 0, + y_max: 282, + ha: 282, + o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z', + }, + brassJazzTurn: { + x_min: 0, + x_max: 620, + y_min: 0, + y_max: 245, + ha: 245, + o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z', + }, + brassSmear: { + x_min: 1, + x_max: 306, + y_min: 0, + y_max: 170, + ha: 170, + o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 312, + y_min: 0, + y_max: 318, + ha: 318, + o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z', + }, + stringsUpBow: { + x_min: 1, + x_max: 249, + y_min: 1, + y_max: 495, + ha: 494, + o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 200, + ha: 200, + o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 300, + ha: 300, + o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 200, + y_min: 0, + y_max: 300, + ha: 300, + o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z', + }, + pluckedLeftHandPizzicato: { + x_min: 0, + x_max: 272, + y_min: 0, + y_max: 272, + ha: 272, + o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 1019, + y_min: -8, + y_max: 555, + ha: 563, + o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 450, + y_min: 0, + y_max: 450, + ha: 450, + o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z', + }, + pictChokeCymbal: { + x_min: 1, + x_max: 152, + y_min: 2, + y_max: 251, + ha: 249, + o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', + }, + wiggleArpeggiatoUp: { + x_min: -33, + x_max: 292, + y_min: 0, + y_max: 119, + ha: 119, + o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z', + }, + arrowheadBlackUp: { + x_min: 0, + x_max: 228, + y_min: 0, + y_max: 299, + ha: 299, + o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z', + }, + arrowheadBlackDown: { + x_min: 0, + x_max: 228, + y_min: 0, + y_max: 299, + ha: 299, + o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z', + }, + arpeggiatoUp: { + x_min: 1, + x_max: 229, + y_min: 7, + y_max: 1511, + ha: 1504, + o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z', + }, + arpeggiatoDown: { + x_min: 1, + x_max: 229, + y_min: -4, + y_max: 1500, + ha: 1504, + o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 532, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 762, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1232, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 532, + y_min: -250, + y_max: 279, + ha: 529, + o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z', + }, + csymDiminished: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 473, + ha: 473, + o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z', + }, + csymHalfDiminished: { + x_min: -16, + x_max: 488, + y_min: -15, + y_max: 489, + ha: 504, + o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z', + }, + csymAugmented: { + x_min: 0, + x_max: 395, + y_min: 1, + y_max: 396, + ha: 395, + o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 558, + y_min: 1, + y_max: 477, + ha: 476, + o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z', + }, + csymMinor: { + x_min: 0, + x_max: 325, + y_min: 216, + y_max: 260, + ha: 44, + o: 'm 468 374 l 0 374 l 0 311 l 468 311 z', + }, + csymParensLeftTall: { + x_min: 1, + x_max: 185, + y_min: 0, + y_max: 997, + ha: 997, + o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z', + }, + csymParensRightTall: { + x_min: -20, + x_max: 164, + y_min: 0, + y_max: 997, + ha: 997, + o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z', + }, + csymBracketLeftTall: { + x_min: 0, + x_max: 155, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z', + }, + csymBracketRightTall: { + x_min: 1, + x_max: 156, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z', + }, + csymParensLeftVeryTall: { + x_min: 0, + x_max: 122, + y_min: 0, + y_max: 993, + ha: 993, + o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z', + }, + csymParensRightVeryTall: { + x_min: -15, + x_max: 107, + y_min: 0, + y_max: 993, + ha: 993, + o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z', + }, + csymDiagonalArrangementSlash: { + x_min: 0, + x_max: 999, + y_min: 0, + y_max: 1000, + ha: 1000, + o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z', + }, + accSagittal5v7KleismaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z', + }, + accSagittal5v7KleismaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z', + }, + accSagittal5CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z', + }, + accSagittal5CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z', + }, + accSagittal7CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z', + }, + accSagittal7CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z', + }, + accSagittal25SmallDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z', + }, + accSagittal25SmallDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z', + }, + accSagittal35MediumDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z', + }, + accSagittal35MediumDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittal11MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z', + }, + accSagittal11MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z', + }, + accSagittal11LargeDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z', + }, + accSagittal11LargeDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal35LargeDiesisUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal35LargeDiesisDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalSharp25SDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z', + }, + accSagittalFlat25SUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z', + }, + accSagittalSharp7CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z', + }, + accSagittalFlat7CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z', + }, + accSagittalSharp5CDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z', + }, + accSagittalFlat5CUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z', + }, + accSagittalSharp5v7kDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z', + }, + accSagittalFlat5v7kUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z', + }, + accSagittalSharp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z', + }, + accSagittalFlat: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z', + }, + accSagittalSharp5v7kUp: { + x_min: 0, + x_max: 312, + y_min: -361, + y_max: 172, + ha: 533, + o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z', + }, + accSagittalFlat5v7kDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 361, + ha: 533, + o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z', + }, + accSagittalSharp5CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z', + }, + accSagittalFlat5CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z', + }, + accSagittalSharp7CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z', + }, + accSagittalFlat7CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z', + }, + accSagittalSharp25SUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z', + }, + accSagittalFlat25SDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z', + }, + accSagittalSharp35MUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z', + }, + accSagittalFlat35MDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z', + }, + accSagittalSharp11MUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z', + }, + accSagittalFlat11MDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z', + }, + accSagittalSharp11LUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat11LDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalSharp35LUp: { + x_min: 0, + x_max: 500, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat35LDown: { + x_min: 0, + x_max: 500, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalDoubleSharp25SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z', + }, + accSagittalDoubleFlat25SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z', + }, + accSagittalDoubleSharp7CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z', + }, + accSagittalDoubleFlat7CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z', + }, + accSagittalDoubleSharp5CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z', + }, + accSagittalDoubleFlat5CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z', + }, + accSagittalDoubleSharp5v7kDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z', + }, + accSagittalDoubleFlat5v7kUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z', + }, + accSagittalDoubleSharp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z', + }, + accSagittalDoubleFlat: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z', + }, + accSagittal7v11KleismaUp: { + x_min: 0, + x_max: 219, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z', + }, + accSagittal7v11KleismaDown: { + x_min: 0, + x_max: 219, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', + }, + accSagittal17CommaUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal17CommaDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal55CommaUp: { + x_min: 0, + x_max: 219, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z', + }, + accSagittal55CommaDown: { + x_min: 0, + x_max: 219, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z', + }, + accSagittal7v11CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z', + }, + accSagittal7v11CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittal5v11SmallDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z', + }, + accSagittal5v11SmallDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalSharp5v11SDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat5v11SUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp7v11CDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z', + }, + accSagittalFlat7v11CUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z', + }, + accSagittalSharp55CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z', + }, + accSagittalFlat55CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z', + }, + accSagittalSharp17CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z', + }, + accSagittalFlat17CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z', + }, + accSagittalSharp7v11kDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z', + }, + accSagittalFlat7v11kUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z', + }, + accSagittalSharp7v11kUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z', + }, + accSagittalFlat7v11kDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z', + }, + accSagittalSharp17CUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat17CDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp55CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z', + }, + accSagittalFlat55CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z', + }, + accSagittalSharp7v11CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z', + }, + accSagittalFlat7v11CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z', + }, + accSagittalSharp5v11SUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z', + }, + accSagittalFlat5v11SDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalDoubleSharp5v11SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat5v11SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp7v11CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z', + }, + accSagittalDoubleFlat7v11CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z', + }, + accSagittalDoubleSharp55CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z', + }, + accSagittalDoubleFlat55CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z', + }, + accSagittalDoubleSharp17CDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z', + }, + accSagittalDoubleFlat17CUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z', + }, + accSagittalDoubleSharp7v11kDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z', + }, + accSagittalDoubleFlat7v11kUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z', + }, + accSagittal23CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z', + }, + accSagittal23CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z', + }, + accSagittal5v19CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z', + }, + accSagittal5v19CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittal5v23SmallDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z', + }, + accSagittal5v23SmallDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z', + }, + accSagittalSharp5v23SDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z', + }, + accSagittalFlat5v23SUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z', + }, + accSagittalSharp5v19CDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z', + }, + accSagittalFlat5v19CUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z', + }, + accSagittalSharp23CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z', + }, + accSagittalFlat23CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z', + }, + accSagittalSharp23CUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z', + }, + accSagittalFlat23CDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z', + }, + accSagittalSharp5v19CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', + }, + accSagittalFlat5v19CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z', + }, + accSagittalSharp5v23SUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', + }, + accSagittalFlat5v23SDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z', + }, + accSagittalDoubleSharp5v23SDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z', + }, + accSagittalDoubleFlat5v23SUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z', + }, + accSagittalDoubleSharp5v19CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z', + }, + accSagittalDoubleFlat5v19CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z', + }, + accSagittalDoubleSharp23CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', + }, + accSagittalDoubleFlat23CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z', + }, + accSagittal19SchismaUp: { + x_min: 0, + x_max: 125, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z', + }, + accSagittal19SchismaDown: { + x_min: 0, + x_max: 125, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', + }, + accSagittal17KleismaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal17KleismaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal143CommaUp: { + x_min: 0, + x_max: 156, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z', + }, + accSagittal143CommaDown: { + x_min: 0, + x_max: 156, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal11v49CommaUp: { + x_min: 0, + x_max: 188, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z', + }, + accSagittal11v49CommaDown: { + x_min: 0, + x_max: 188, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z', + }, + accSagittal19CommaUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', + }, + accSagittal19CommaDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', + }, + accSagittal7v19CommaUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', + }, + accSagittal7v19CommaDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', + }, + accSagittal49SmallDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal49SmallDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal23SmallDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', + }, + accSagittal23SmallDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', + }, + accSagittal5v13MediumDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z', + }, + accSagittal5v13MediumDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z', + }, + accSagittal11v19MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z', + }, + accSagittal11v19MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z', + }, + accSagittal49MediumDiesisUp: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z', + }, + accSagittal49MediumDiesisDown: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z', + }, + accSagittal5v49MediumDiesisUp: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z', + }, + accSagittal5v49MediumDiesisDown: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z', + }, + accSagittal49LargeDiesisUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z', + }, + accSagittal49LargeDiesisDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z', + }, + accSagittal11v19LargeDiesisUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z', + }, + accSagittal11v19LargeDiesisDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z', + }, + accSagittal5v13LargeDiesisUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z', + }, + accSagittal5v13LargeDiesisDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z', + }, + accSagittalSharp23SDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z', + }, + accSagittalFlat23SUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp49SDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z', + }, + accSagittalFlat49SUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z', + }, + accSagittalSharp7v19CDown: { + x_min: 0, + x_max: 250, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z', + }, + accSagittalFlat7v19CUp: { + x_min: 0, + x_max: 250, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z', + }, + accSagittalSharp19CDown: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z', + }, + accSagittalFlat19CUp: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z', + }, + accSagittalSharp11v49CDown: { + x_min: 0, + x_max: 344, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat11v49CUp: { + x_min: 0, + x_max: 344, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z', + }, + accSagittalSharp143CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', + }, + accSagittalFlat143CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', + }, + accSagittalSharp17kDown: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z', + }, + accSagittalFlat17kUp: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z', + }, + accSagittalSharp19sDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z', + }, + accSagittalFlat19sUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z', + }, + accSagittalSharp19sUp: { + x_min: 0, + x_max: 281, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z', + }, + accSagittalFlat19sDown: { + x_min: 0, + x_max: 281, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z', + }, + accSagittalSharp17kUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat17kDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp143CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', + }, + accSagittalFlat143CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp11v49CUp: { + x_min: 0, + x_max: 312, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z', + }, + accSagittalFlat11v49CDown: { + x_min: 0, + x_max: 312, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z', + }, + accSagittalSharp19CUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat19CDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalSharp7v19CUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat7v19CDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalSharp49SUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat49SDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp23SUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalFlat23SDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalSharp5v13MUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z', + }, + accSagittalFlat5v13MDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z', + }, + accSagittalSharp11v19MUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalFlat11v19MDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', + }, + accSagittalSharp49MUp: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z', + }, + accSagittalFlat49MDown: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z', + }, + accSagittalSharp5v49MUp: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z', + }, + accSagittalFlat5v49MDown: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z', + }, + accSagittalSharp49LUp: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z', + }, + accSagittalFlat49LDown: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z', + }, + accSagittalSharp11v19LUp: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z', + }, + accSagittalFlat11v19LDown: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z', + }, + accSagittalSharp5v13LUp: { + x_min: 0, + x_max: 500, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', + }, + accSagittalFlat5v13LDown: { + x_min: 0, + x_max: 500, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', + }, + accSagittalDoubleSharp23SDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', + }, + accSagittalDoubleFlat23SUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z', + }, + accSagittalDoubleSharp49SDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z', + }, + accSagittalDoubleFlat49SUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z', + }, + accSagittalDoubleSharp7v19CDown: { + x_min: 0, + x_max: 375, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', + }, + accSagittalDoubleFlat7v19CUp: { + x_min: 0, + x_max: 375, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z', + }, + accSagittalDoubleSharp19CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z', + }, + accSagittalDoubleFlat19CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z', + }, + accSagittalDoubleSharp11v49CDown: { + x_min: 0, + x_max: 406, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat11v49CUp: { + x_min: 0, + x_max: 406, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp143CDown: { + x_min: 0, + x_max: 469, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', + }, + accSagittalDoubleFlat143CUp: { + x_min: 0, + x_max: 469, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', + }, + accSagittalDoubleSharp17kDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z', + }, + accSagittalDoubleFlat17kUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z', + }, + accSagittalDoubleSharp19sDown: { + x_min: 0, + x_max: 438, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', + }, + accSagittalDoubleFlat19sUp: { + x_min: 0, + x_max: 438, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z', + }, + accSagittalShaftUp: { + x_min: 0, + x_max: 31, + y_min: -359, + y_max: 172, + ha: 531, + o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z', + }, + accSagittalShaftDown: { + x_min: 0, + x_max: 31, + y_min: -172, + y_max: 359, + ha: 531, + o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z', + }, + accSagittalAcute: { + x_min: 0, + x_max: 125, + y_min: -62, + y_max: 125, + ha: 187, + o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z', + }, + accSagittalGrave: { + x_min: 0, + x_max: 125, + y_min: -125, + y_max: 62, + ha: 187, + o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z', + }, + accSagittal1MinaUp: { + x_min: -7, + x_max: 124, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal1MinaDown: { + x_min: -7, + x_max: 124, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal2MinasUp: { + x_min: -7, + x_max: 218, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal2MinasDown: { + x_min: -7, + x_max: 218, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal1TinaUp: { + x_min: 0, + x_max: 93, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z', + }, + accSagittal1TinaDown: { + x_min: 0, + x_max: 93, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z', + }, + accSagittal2TinasUp: { + x_min: 0, + x_max: 94, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal2TinasDown: { + x_min: 0, + x_max: 94, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z', + }, + accSagittal3TinasUp: { + x_min: -7, + x_max: 124, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal3TinasDown: { + x_min: -7, + x_max: 124, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal4TinasUp: { + x_min: 0, + x_max: 187, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', + }, + accSagittal4TinasDown: { + x_min: 0, + x_max: 187, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', + }, + accSagittal5TinasUp: { + x_min: 0, + x_max: 218, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal5TinasDown: { + x_min: 0, + x_max: 218, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', + }, + accSagittal6TinasUp: { + x_min: -7, + x_max: 218, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal6TinasDown: { + x_min: -7, + x_max: 218, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittal7TinasUp: { + x_min: 0, + x_max: 281, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', + }, + accSagittal7TinasDown: { + x_min: 0, + x_max: 281, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', + }, + accSagittal8TinasUp: { + x_min: 0, + x_max: 312, + y_min: 16, + y_max: 107, + ha: 91, + o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', + }, + accSagittal8TinasDown: { + x_min: 0, + x_max: 312, + y_min: -107, + y_max: -16, + ha: 91, + o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', + }, + accSagittal9TinasUp: { + x_min: -7, + x_max: 312, + y_min: 16, + y_max: 106, + ha: 90, + o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', + }, + accSagittal9TinasDown: { + x_min: -7, + x_max: 312, + y_min: -106, + y_max: -16, + ha: 90, + o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', + }, + accSagittalFractionalTinaUp: { + x_min: -3, + x_max: 35, + y_min: 73, + y_max: 111, + ha: 38, + o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z', + }, + accSagittalFractionalTinaDown: { + x_min: -3, + x_max: 35, + y_min: -111, + y_max: -73, + ha: 38, + o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 164, + y_min: -194, + y_max: 421, + ha: 615, + o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 414, + y_min: -194, + y_max: 421, + ha: 615, + o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z', + }, + accidentalWilsonPlus: { + x_min: 0, + x_max: 281, + y_min: -203, + y_max: 203, + ha: 406, + o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z', + }, + accidentalWilsonMinus: { + x_min: 0, + x_max: 281, + y_min: -186, + y_max: 186, + ha: 372, + o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z', + }, + }, + fontFamily: 'Bravura', + resolution: 1000, + generatedOn: '2022-12-18T09:06:51.407Z', +}; diff --git a/build/esm/src/fonts/common_metrics.js b/build/esm/src/fonts/common_metrics.js new file mode 100644 index 0000000000..806cda2f52 --- /dev/null +++ b/build/esm/src/fonts/common_metrics.js @@ -0,0 +1,384 @@ +export const CommonMetrics = { + smufl: true, + stave: { + padding: 12, + endPaddingMax: 10, + endPaddingMin: 5, + unalignedNotePadding: 10, + }, + accidental: { + noteheadAccidentalPadding: 1, + leftPadding: 2, + accidentalSpacing: 3, + }, + chordSymbol: { + global: { + superscriptOffset: -400, + subscriptOffset: 300, + kerningOffset: -250, + lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], + upperKerningText: ['A', 'L'], + spacing: 100, + superSubRatio: 0.66, + }, + glyphs: { + csymDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymHalfDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymAugmented: { + leftSideBearing: 0, + advanceWidth: 530, + yOffset: 0, + }, + csymParensLeftTall: { + leftSideBearing: -20, + advanceWidth: 184, + yOffset: 250, + }, + csymParensRightTall: { + leftSideBearing: 0, + advanceWidth: 189, + yOffset: 250, + }, + csymBracketLeftTall: { + leftSideBearing: 0, + advanceWidth: 328, + yOffset: 0, + }, + csymBracketRightTall: { + leftSideBearing: 1, + advanceWidth: 600, + yOffset: 0, + }, + csymParensLeftVeryTall: { + leftSideBearing: 50, + advanceWidth: 121, + yOffset: 350, + }, + csymParensRightVeryTall: { + leftSideBearing: 0, + advanceWidth: 111, + yOffset: 350, + }, + csymDiagonalArrangementSlash: { + leftSideBearing: 250, + advanceWidth: 990, + yOffset: 300, + }, + csymMinor: { + leftSideBearing: 0, + advanceWidth: 482, + yOffset: 0, + }, + csymMajorSeventh: { + leftSideBearing: 200, + yOffset: 0, + advanceWidth: 600, + }, + accidentalSharp: { + leftSideBearing: 20, + advanceWidth: 250, + yOffset: -302, + }, + accidentalFlat: { + leftSideBearing: -20, + advanceWidth: 226, + yOffset: -184, + }, + }, + }, + clef_default: { + width: 26, + annotations: { + '8va': { + treble: { + line: -2, + shiftX: 12, + }, + }, + '8vb': { + treble: { + line: 6.5, + shiftX: 10, + }, + bass: { + line: 4, + shiftX: 1, + }, + }, + }, + }, + clef_small: { + width: 20, + annotations: { + '8va': { + treble: { + line: -0.2, + shiftX: 8, + }, + }, + '8vb': { + treble: { + line: 5.3, + shiftX: 6, + }, + bass: { + line: 3.1, + shiftX: 0.5, + }, + }, + }, + }, + ornament: { + brassScoop: { + xOffset: -12, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 20, + }, + brassDoitMedium: { + xOffset: 16, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 22, + }, + brassFallLipShort: { + xOffset: 16, + yOffset: 0, + stemUpYOffset: 0, + reportedWidth: 15, + }, + brassLiftMedium: { + xOffset: 16, + yOffset: 5, + stemUpYOffset: 0, + reportedWidth: 5, + }, + brassFallRoughMedium: { + xOffset: 16, + yOffset: 28, + stemUpYOffset: 0, + reportedWidth: 5, + }, + brassBend: { + xOffset: 2, + yOffset: -8, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassMuteClosed: { + xOffset: 3, + yOffset: -8, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassMuteOpen: { + xOffset: 3, + yOffset: -7, + stemUpYOffset: 25, + reportedWidth: 5, + }, + brassFlip: { + xOffset: 10, + yOffset: 0, + stemUpYOffset: 7, + reportedWidth: 10, + }, + brassJazzTurn: { + xOffset: 0, + yOffset: 0, + stemUpYOffset: 8, + reportedWidth: 31, + }, + brassSmear: { + xOffset: 10, + yOffset: 0, + stemUpYOffset: 8, + reportedWidth: 5, + }, + }, + parenthesis: { + default: { + width: 7, + }, + gracenote: { + width: 3, + }, + }, + pedalMarking: {}, + digits: { + shiftLine: -1, + shiftY: -6, + }, + articulation: { + articStaccatissimoAbove: { + padding: 2, + }, + articStaccatissimoBelow: { + padding: 2, + }, + }, + tremolo: { + default: { + spacing: 7, + offsetYStemUp: -8, + offsetYStemDown: 8, + offsetXStemUp: 11, + offsetXStemDown: 1, + }, + grace: { + spacing: (7 * 3) / 5, + offsetYStemUp: -(8 * 3) / 5, + offsetYStemDown: (8 * 3) / 5, + offsetXStemUp: 7, + offsetXStemDown: 1, + }, + }, + staveRepetition: { + symbolText: { + offsetX: 12, + offsetY: 25, + spacing: 5, + }, + coda: { + offsetY: 25, + }, + segno: { + offsetY: 10, + }, + }, + noteHead: { + minPadding: 2, + }, + stem: { + heightAdjustmentForFlag: -3, + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadTriangleUpBlack: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadTriangleUpWhole: { + offsetYBaseStemUp: 5, + offsetYBaseStemDown: 4, + }, + noteheadXHalf: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadXBlack: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadXWhole: { + offsetYBaseStemUp: -4, + offsetYBaseStemDown: 4, + }, + noteheadHalf: { + offsetYBaseStemUp: -2.55, + offsetYBaseStemDown: 2.65, + }, + noteheadBlack: { + offsetYBaseStemUp: -2, + offsetYBaseStemDown: 2, + }, + noteheadSquareWhite: { + offsetYBaseStemDown: -5, + offsetYBaseStemUp: 5, + }, + }, + }, + stringNumber: { + verticalPadding: 8, + stemPadding: 2, + leftPadding: 5, + rightPadding: 6, + }, + tuplet: { + noteHeadOffset: 20, + stemOffset: 10, + bottomLine: 4, + topModifierOffset: 15, + }, + glyphs: { + coda: { + shiftX: -7, + shiftY: 8, + }, + segno: { + shiftX: -7, + }, + flag: { + shiftX: -0.75, + staveTempo: { + shiftX: -1, + }, + }, + clef_default: {}, + clef_small: { + gClef: { + shiftY: 1.5, + }, + }, + clefNote_default: {}, + clefNote_small: {}, + stroke_straight: { + arrowheadBlackDown: { + shiftX: -4.5, + }, + arrowheadBlackUp: { + shiftX: -0.85, + }, + }, + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: -1, + shiftY: 1, + }, + arrowheadBlackUp: { + shiftX: -1, + shiftY: 1, + }, + }, + textNote: { + breathMarkTick: { + shiftY: 9, + }, + breathMarkComma: {}, + segno: { + shiftX: -7, + shiftY: 8, + }, + coda: { + shiftX: -7, + shiftY: 8, + }, + ornamentTrill: { + shiftX: -8, + shiftY: 8, + }, + ornamentTurn: {}, + ornamentTurnSlash: {}, + ornamentMordent: { + shiftX: -8, + }, + ornamentShortTrill: { + shiftX: -8, + }, + }, + noteHead: {}, + chordSymbol: { + scale: 0.8, + }, + }, +}; diff --git a/build/esm/src/fonts/custom_glyphs.js b/build/esm/src/fonts/custom_glyphs.js new file mode 100644 index 0000000000..fc46ea245d --- /dev/null +++ b/build/esm/src/fonts/custom_glyphs.js @@ -0,0 +1,42 @@ +export const CustomFont = { + resolution: 1000, + fontFamily: 'VexFlowCustom', + glyphs: { + vexAccidentalMicrotonal1: { + x_min: -171.5, + x_max: 483.1875, + ha: 493, + o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ', + }, + vexAccidentalMicrotonal3: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ', + }, + vexAccidentalMicrotonal4: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ', + }, + vexNoteHeadRectBlack: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ', + }, + vexNoteHeadRectWhite: { + x_min: 0, + x_max: 430.75, + ha: 360, + o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100', + }, + vexWiggleArpeggioUp: { + x_min: 58.53125, + x_max: 228.671875, + ha: 294, + o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ', + }, + }, +}; diff --git a/build/esm/src/fonts/gonville_glyphs.js b/build/esm/src/fonts/gonville_glyphs.js new file mode 100644 index 0000000000..1dfdacb243 --- /dev/null +++ b/build/esm/src/fonts/gonville_glyphs.js @@ -0,0 +1,1119 @@ +export const GonvilleSmuflFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 412, + y_min: -18, + y_max: 223, + ha: 241, + o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z', + }, + bracketBottom: { + x_min: 0, + x_max: 412, + y_min: -223, + y_max: 18, + ha: 241, + o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z', + }, + barlineTick: { + x_min: -59, + x_max: 59, + y_min: -139, + y_max: 139, + ha: 279, + o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z', + }, + breathMarkTick: { + x_min: -151, + x_max: 272, + y_min: 0, + y_max: 429, + ha: 429, + o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z', + }, + segno: { + x_min: 7, + x_max: 493, + y_min: -50, + y_max: 650, + ha: 699, + o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z', + }, + coda: { + x_min: 22, + x_max: 478, + y_min: -31, + y_max: 531, + ha: 563, + o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z', + }, + gClef: { + x_min: 0, + x_max: 623, + y_min: -632, + y_max: 1082, + ha: 1713, + o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z', + }, + cClef: { + x_min: 0, + x_max: 643, + y_min: -508, + y_max: 508, + ha: 1016, + o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z', + }, + fClef: { + x_min: 0, + x_max: 661, + y_min: -545, + y_max: 254, + ha: 798, + o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z', + }, + unpitchedPercussionClef1: { + x_min: -4, + x_max: 337, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 501, + y_min: -735, + y_max: 753, + ha: 1487, + o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z', + }, + timeSig0: { + x_min: 0, + x_max: 380, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z', + }, + timeSig1: { + x_min: 0, + x_max: 254, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z', + }, + timeSig2: { + x_min: 0, + x_max: 337, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z', + }, + timeSig3: { + x_min: 0, + x_max: 302, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z', + }, + timeSig4: { + x_min: 0, + x_max: 345, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z', + }, + timeSig5: { + x_min: 0, + x_max: 302, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z', + }, + timeSig6: { + x_min: 0, + x_max: 349, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z', + }, + timeSig7: { + x_min: 0, + x_max: 326, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z', + }, + timeSig8: { + x_min: 0, + x_max: 360, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z', + }, + timeSig9: { + x_min: 0, + x_max: 349, + y_min: -250, + y_max: 236, + ha: 486, + o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z', + }, + timeSigCommon: { + x_min: 0, + x_max: 409, + y_min: -233, + y_max: 233, + ha: 466, + o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 409, + y_min: -394, + y_max: 394, + ha: 788, + o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 235, + y_min: -118, + y_max: 118, + ha: 235, + o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z', + }, + timeSigPlusSmall: { + x_min: 0, + x_max: 235, + y_min: -118, + y_max: 118, + ha: 235, + o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 235, + y_min: -23, + y_max: 23, + ha: 46, + o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z', + }, + timeSigParensRight: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + timeSigParensRightSmall: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + timeSigParensLeft: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + timeSigParensLeftSmall: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 663, + y_min: -174, + y_max: 174, + ha: 349, + o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 455, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 316, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 316, + y_min: -135, + y_max: 135, + ha: 269, + o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 440, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 300, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 300, + y_min: -133, + y_max: 133, + ha: 265, + o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 357, + y_min: -178, + y_max: 178, + ha: 357, + o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 462, + y_min: -149, + y_max: 149, + ha: 297, + o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 323, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 322, + y_min: -149, + y_max: 149, + ha: 297, + o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 462, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 322, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 322, + y_min: -138, + y_max: 138, + ha: 277, + o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z', + }, + augmentationDot: { + x_min: -63, + x_max: 63, + y_min: -63, + y_max: 63, + ha: 126, + o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z', + }, + tremolo1: { + x_min: -252, + x_max: 216, + y_min: -185, + y_max: 148, + ha: 333, + o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z', + }, + flag8thUp: { + x_min: -17, + x_max: 234, + y_min: -745, + y_max: -4, + ha: 741, + o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z', + }, + flag8thDown: { + x_min: -15, + x_max: 271, + y_min: 4, + y_max: 745, + ha: 741, + o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z', + }, + flag16thUp: { + x_min: -17, + x_max: 234, + y_min: -847, + y_max: -4, + ha: 843, + o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z', + }, + flag16thDown: { + x_min: -15, + x_max: 267, + y_min: 4, + y_max: 745, + ha: 741, + o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z', + }, + flag32ndUp: { + x_min: -17, + x_max: 233, + y_min: -1005, + y_max: 96, + ha: 1101, + o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z', + }, + flag32ndDown: { + x_min: -15, + x_max: 270, + y_min: -96, + y_max: 895, + ha: 991, + o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z', + }, + flag64thUp: { + x_min: -17, + x_max: 233, + y_min: -933, + y_max: 296, + ha: 1230, + o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z', + }, + flag64thDown: { + x_min: -15, + x_max: 271, + y_min: -296, + y_max: 820, + ha: 1116, + o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z', + }, + flag128thUp: { + x_min: -17, + x_max: 231, + y_min: -987, + y_max: 496, + ha: 1484, + o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z', + }, + flag128thDown: { + x_min: -15, + x_max: 270, + y_min: -496, + y_max: 870, + ha: 1366, + o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z', + }, + accidentalFlat: { + x_min: -15, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 176, + y_min: -334, + y_max: 334, + ha: 667, + o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 239, + y_min: -388, + y_max: 388, + ha: 775, + o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 271, + y_min: -135, + y_max: 135, + ha: 271, + o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z', + }, + accidentalDoubleFlat: { + x_min: -15, + x_max: 356, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z', + }, + accidentalParensLeft: { + x_min: -122, + x_max: -19, + y_min: -267, + y_max: 267, + ha: 534, + o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z', + }, + accidentalParensRight: { + x_min: 19, + x_max: 122, + y_min: -267, + y_max: 267, + ha: 535, + o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 200, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 446, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 142, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 0, + x_max: 335, + y_min: -391, + y_max: 391, + ha: 782, + o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z', + }, + accidentalBuyukMucennebFlat: { + x_min: -125, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 284, + y_min: -388, + y_max: 388, + ha: 775, + o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z', + }, + accidentalBakiyeFlat: { + x_min: -129, + x_max: 185, + y_min: -165, + y_max: 457, + ha: 622, + o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 142, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 188, + y_min: -373, + y_max: 373, + ha: 747, + o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z', + }, + articAccentAbove: { + x_min: -256, + x_max: 19, + y_min: -114, + y_max: 114, + ha: 227, + o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z', + }, + articAccentBelow: { + x_min: -256, + x_max: 19, + y_min: -114, + y_max: 114, + ha: 227, + o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z', + }, + articTenutoAbove: { + x_min: -154, + x_max: 154, + y_min: -15, + y_max: 15, + ha: 30, + o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z', + }, + articTenutoBelow: { + x_min: -154, + x_max: 154, + y_min: -15, + y_max: 15, + ha: 30, + o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z', + }, + articStaccatoAbove: { + x_min: -49, + x_max: 49, + y_min: -49, + y_max: 49, + ha: 99, + o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z', + }, + articStaccatoBelow: { + x_min: -49, + x_max: 49, + y_min: -49, + y_max: 49, + ha: 99, + o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z', + }, + articStaccatissimoAbove: { + x_min: -53, + x_max: 53, + y_min: 0, + y_max: 184, + ha: 184, + o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z', + }, + articStaccatissimoBelow: { + x_min: -53, + x_max: 53, + y_min: -184, + y_max: 0, + ha: 184, + o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z', + }, + articMarcatoAbove: { + x_min: -114, + x_max: 114, + y_min: -256, + y_max: 19, + ha: 275, + o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z', + }, + articMarcatoBelow: { + x_min: -114, + x_max: 114, + y_min: -19, + y_max: 256, + ha: 275, + o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z', + }, + fermataAbove: { + x_min: -324, + x_max: 324, + y_min: 0, + y_max: 353, + ha: 353, + o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataBelow: { + x_min: -324, + x_max: 324, + y_min: -353, + y_max: 0, + ha: 353, + o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataLongAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 364, + ha: 364, + o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z', + }, + fermataLongBelow: { + x_min: -286, + x_max: 286, + y_min: -364, + y_max: 0, + ha: 364, + o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataVeryLongAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 438, + ha: 438, + o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataVeryLongBelow: { + x_min: -286, + x_max: 286, + y_min: -438, + y_max: 0, + ha: 438, + o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + fermataVeryShortAbove: { + x_min: -351, + x_max: 351, + y_min: 0, + y_max: 571, + ha: 571, + o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z', + }, + fermataVeryShortBelow: { + x_min: -351, + x_max: 351, + y_min: -571, + y_max: 0, + ha: 571, + o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z', + }, + fermataShortAbove: { + x_min: -286, + x_max: 286, + y_min: 0, + y_max: 469, + ha: 469, + o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z', + }, + fermataShortBelow: { + x_min: -286, + x_max: 286, + y_min: -469, + y_max: 0, + ha: 469, + o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 168, + y_min: -155, + y_max: 155, + ha: 311, + o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z', + }, + breathMarkUpbow: { + x_min: -125, + x_max: 125, + y_min: 0, + y_max: 409, + ha: 409, + o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z', + }, + caesura: { + x_min: 0, + x_max: 457, + y_min: -202, + y_max: 303, + ha: 504, + o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 370, + y_min: -207, + y_max: 310, + ha: 517, + o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z', + }, + restMaxima: { + x_min: 0, + x_max: 853, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 284, + y_min: 0, + y_max: 250, + ha: 250, + o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z', + }, + restWhole: { + x_min: 0, + x_max: 330, + y_min: -125, + y_max: 0, + ha: 125, + o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z', + }, + restWholeLegerLine: { + x_min: 0, + x_max: 542, + y_min: -125, + y_max: 11, + ha: 137, + o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z', + }, + restHalf: { + x_min: 0, + x_max: 330, + y_min: 0, + y_max: 125, + ha: 125, + o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z', + }, + restHalfLegerLine: { + x_min: 0, + x_max: 542, + y_min: -11, + y_max: 125, + ha: 137, + o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z', + }, + restQuarter: { + x_min: 0, + x_max: 221, + y_min: -365, + y_max: 365, + ha: 730, + o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z', + }, + rest8th: { + x_min: 0, + x_max: 258, + y_min: -197, + y_max: 219, + ha: 416, + o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z', + }, + rest16th: { + x_min: 0, + x_max: 331, + y_min: -443, + y_max: 219, + ha: 662, + o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z', + }, + rest32nd: { + x_min: 0, + x_max: 405, + y_min: -443, + y_max: 466, + ha: 909, + o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z', + }, + rest64th: { + x_min: 0, + x_max: 479, + y_min: -689, + y_max: 466, + ha: 1155, + o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z', + }, + rest128th: { + x_min: 0, + x_max: 553, + y_min: -689, + y_max: 712, + ha: 1401, + o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z', + }, + dynamicPiano: { + x_min: -39, + x_max: 378, + y_min: -178, + y_max: 277, + ha: 455, + o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z', + }, + dynamicMezzo: { + x_min: 35, + x_max: 493, + y_min: -19, + y_max: 272, + ha: 291, + o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z', + }, + dynamicForte: { + x_min: -87, + x_max: 440, + y_min: -182, + y_max: 415, + ha: 597, + o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z', + }, + dynamicRinforzando: { + x_min: 58, + x_max: 357, + y_min: 0, + y_max: 275, + ha: 275, + o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z', + }, + dynamicSforzando: { + x_min: 52, + x_max: 278, + y_min: -22, + y_max: 270, + ha: 292, + o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z', + }, + dynamicZ: { + x_min: 23, + x_max: 309, + y_min: 2, + y_max: 250, + ha: 248, + o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z', + }, + ornamentTrill: { + x_min: -249, + x_max: 249, + y_min: 0, + y_max: 376, + ha: 376, + o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z', + }, + ornamentTurn: { + x_min: -310, + x_max: 310, + y_min: -143, + y_max: 143, + ha: 286, + o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z', + }, + ornamentTurnSlash: { + x_min: -310, + x_max: 310, + y_min: -201, + y_max: 201, + ha: 402, + o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z', + }, + ornamentMordent: { + x_min: -296, + x_max: 296, + y_min: -215, + y_max: 198, + ha: 413, + o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z', + }, + ornamentShortTrill: { + x_min: -296, + x_max: 296, + y_min: -127, + y_max: 127, + ha: 253, + o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z', + }, + ornamentTremblement: { + x_min: -419, + x_max: 419, + y_min: -127, + y_max: 127, + ha: 253, + o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z', + }, + ornamentPrecompAppoggTrill: { + x_min: -419, + x_max: 419, + y_min: -127, + y_max: 255, + ha: 381, + o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: -433, + x_max: 433, + y_min: -243, + y_max: 127, + ha: 370, + o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: -433, + x_max: 433, + y_min: -243, + y_max: 198, + ha: 442, + o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: -433, + x_max: 433, + y_min: -127, + y_max: 244, + ha: 370, + o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: -439, + x_max: 439, + y_min: -127, + y_max: 236, + ha: 363, + o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: -439, + x_max: 439, + y_min: -215, + y_max: 236, + ha: 451, + o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: -439, + x_max: 439, + y_min: -236, + y_max: 127, + ha: 362, + o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z', + }, + stringsDownBow: { + x_min: -168, + x_max: 168, + y_min: 0, + y_max: 353, + ha: 353, + o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z', + }, + stringsUpBow: { + x_min: -110, + x_max: 110, + y_min: 0, + y_max: 277, + ha: 277, + o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z', + }, + stringsHarmonic: { + x_min: -82, + x_max: 82, + y_min: -82, + y_max: 82, + ha: 163, + o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: -110, + x_max: 110, + y_min: -110, + y_max: 205, + ha: 315, + o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: -110, + x_max: 110, + y_min: -205, + y_max: 110, + ha: 315, + o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z', + }, + pluckedLeftHandPizzicato: { + x_min: -155, + x_max: 155, + y_min: -157, + y_max: 157, + ha: 315, + o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 782, + y_min: -1, + y_max: 500, + ha: 501, + o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 435, + y_min: 65, + y_max: 500, + ha: 435, + o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z', + }, + pictChokeCymbal: { + x_min: 0, + x_max: 168, + y_min: -155, + y_max: 155, + ha: 311, + o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z', + }, + wiggleArpeggiatoUp: { + x_min: -8, + x_max: 269, + y_min: 0, + y_max: 126, + ha: 126, + o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z', + }, + arrowheadBlackUp: { + x_min: 11, + x_max: 239, + y_min: -6, + y_max: 269, + ha: 275, + o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z', + }, + arrowheadBlackDown: { + x_min: 11, + x_max: 239, + y_min: 6, + y_max: 281, + ha: 275, + o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z', + }, + }, + fontFamily: 'GonvilleSmufl', + resolution: 1000, + generatedOn: '2023-04-20T22:11:26.009Z', +}; diff --git a/build/esm/src/fonts/leland_glyphs.js b/build/esm/src/fonts/leland_glyphs.js new file mode 100644 index 0000000000..b08ceec834 --- /dev/null +++ b/build/esm/src/fonts/leland_glyphs.js @@ -0,0 +1,1191 @@ +export const LelandFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 491, + y_min: 0, + y_max: 279, + ha: 279, + o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z', + }, + bracketBottom: { + x_min: 0, + x_max: 491, + y_min: -279, + y_max: 0, + ha: 279, + o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z', + }, + segno: { + x_min: 0, + x_max: 654, + y_min: 0, + y_max: 869, + ha: 869, + o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z', + }, + coda: { + x_min: 0, + x_max: 745, + y_min: -113, + y_max: 735, + ha: 848, + o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z', + }, + gClef: { + x_min: 0, + x_max: 640, + y_min: -666, + y_max: 1112, + ha: 1778, + o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z', + }, + cClef: { + x_min: 0, + x_max: 627, + y_min: -480, + y_max: 482, + ha: 962, + o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z', + }, + fClef: { + x_min: 0, + x_max: 664, + y_min: -617, + y_max: 251, + ha: 868, + o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 352, + y_min: -252, + y_max: 252, + ha: 504, + o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 439, + y_min: -743, + y_max: 746, + ha: 1489, + o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z', + }, + timeSig0: { + x_min: 15, + x_max: 389, + y_min: -254, + y_max: 255, + ha: 509, + o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z', + }, + timeSig1: { + x_min: 15, + x_max: 336, + y_min: -243, + y_max: 245, + ha: 488, + o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z', + }, + timeSig2: { + x_min: 15, + x_max: 377, + y_min: -243, + y_max: 245, + ha: 488, + o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z', + }, + timeSig3: { + x_min: 15, + x_max: 364, + y_min: -244, + y_max: 244, + ha: 488, + o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z', + }, + timeSig4: { + x_min: 14, + x_max: 442, + y_min: -248, + y_max: 249, + ha: 497, + o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z', + }, + timeSig5: { + x_min: 15, + x_max: 362, + y_min: -244, + y_max: 246, + ha: 490, + o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z', + }, + timeSig6: { + x_min: 15, + x_max: 387, + y_min: -244, + y_max: 245, + ha: 489, + o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z', + }, + timeSig7: { + x_min: 15, + x_max: 366, + y_min: -250, + y_max: 251, + ha: 501, + o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z', + }, + timeSig8: { + x_min: 15, + x_max: 393, + y_min: -248, + y_max: 246, + ha: 494, + o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z', + }, + timeSig9: { + x_min: 15, + x_max: 387, + y_min: -244, + y_max: 245, + ha: 489, + o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z', + }, + timeSigCommon: { + x_min: 0, + x_max: 463, + y_min: -256, + y_max: 258, + ha: 514, + o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z', + }, + timeSigCutCommon: { + x_min: 0, + x_max: 463, + y_min: -376, + y_max: 388, + ha: 764, + o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 408, + y_min: -204, + y_max: 204, + ha: 408, + o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 538, + y_min: -178, + y_max: 179, + ha: 357, + o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 373, + y_min: -134, + y_max: 136, + ha: 270, + o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 325, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 325, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 325, + y_min: -132, + y_max: 132, + ha: 264, + o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 325, + y_min: -162, + y_max: 163, + ha: 325, + o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 432, + y_min: -179, + y_max: 177, + ha: 356, + o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 310, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 223 176 l 0 -196 l 446 -196 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: -66, + x_max: 456, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z', + }, + noteheadSlashedWhole1: { + x_min: -75, + x_max: 448, + y_min: -211, + y_max: 214, + ha: 425, + o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z', + }, + noteheadSlashedHalf1: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z', + }, + noteheadSlashedBlack1: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: -66, + x_max: 456, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z', + }, + noteheadSlashedWhole2: { + x_min: -75, + x_max: 448, + y_min: -212, + y_max: 214, + ha: 426, + o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z', + }, + noteheadSlashedHalf2: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z', + }, + noteheadSlashedBlack2: { + x_min: -98, + x_max: 424, + y_min: -213, + y_max: 212, + ha: 425, + o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 373, + y_min: -178, + y_max: 179, + ha: 357, + o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 373, + y_min: -133, + y_max: 132, + ha: 265, + o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 335, + y_min: -132, + y_max: 133, + ha: 265, + o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 335, + y_min: -132, + y_max: 133, + ha: 265, + o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z', + }, + noteheadParenthesisRight: { + x_min: 0, + x_max: 75, + y_min: -209, + y_max: 212, + ha: 421, + o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 75, + y_min: -212, + y_max: 209, + ha: 421, + o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 310, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 339, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 0 176 l 0 -196 l 488 -196 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 339, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 488 176 l 0 -196 l 488 -196 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 310, + y_min: -136, + y_max: 122, + ha: 258, + o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z', + }, + augmentationDot: { + x_min: 0, + x_max: 100, + y_min: -50, + y_max: 50, + ha: 100, + o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z', + }, + tremolo1: { + x_min: 0, + x_max: 290, + y_min: -93, + y_max: 96, + ha: 189, + o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z', + }, + flag8thUp: { + x_min: 0, + x_max: 289, + y_min: -817, + y_max: 12, + ha: 829, + o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z', + }, + flag8thDown: { + x_min: 0, + x_max: 309, + y_min: -12, + y_max: 817, + ha: 829, + o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z', + }, + flag16thUp: { + x_min: 0, + x_max: 279, + y_min: -820, + y_max: 12, + ha: 832, + o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z', + }, + flag16thDown: { + x_min: 0, + x_max: 309, + y_min: -26, + y_max: 803, + ha: 829, + o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 279, + y_min: -821, + y_max: 186, + ha: 1007, + o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z', + }, + flag32ndDown: { + x_min: 0, + x_max: 309, + y_min: -216, + y_max: 803, + ha: 1019, + o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', + }, + flag64thUp: { + x_min: 0, + x_max: 279, + y_min: -822, + y_max: 373, + ha: 1195, + o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z', + }, + flag64thDown: { + x_min: 0, + x_max: 309, + y_min: -403, + y_max: 804, + ha: 1207, + o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z', + }, + flag128thUp: { + x_min: 0, + x_max: 279, + y_min: -821, + y_max: 573, + ha: 1394, + o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z', + }, + flag128thDown: { + x_min: 0, + x_max: 309, + y_min: -591, + y_max: 803, + ha: 1394, + o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z', + }, + accidentalFlat: { + x_min: 0, + x_max: 203, + y_min: -176, + y_max: 453, + ha: 629, + o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 171, + y_min: -323, + y_max: 325, + ha: 648, + o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z', + }, + accidentalSharp: { + x_min: 0, + x_max: 244, + y_min: -333, + y_max: 334, + ha: 667, + o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 275, + y_min: -137, + y_max: 138, + ha: 275, + o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 371, + y_min: -176, + y_max: 453, + ha: 629, + o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 75, + y_min: -212, + y_max: 209, + ha: 421, + o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 75, + y_min: -209, + y_max: 212, + ha: 421, + o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 193, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 422, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 180, + y_min: -316, + y_max: 320, + ha: 636, + o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: 0, + x_max: 290, + y_min: -328, + y_max: 339, + ha: 667, + o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 0, + x_max: 277, + y_min: -176, + y_max: 454, + ha: 630, + o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', + }, + accidentalBuyukMucennebSharp: { + x_min: 0, + x_max: 348, + y_min: -332, + y_max: 334, + ha: 666, + o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z', + }, + accidentalBakiyeFlat: { + x_min: 0, + x_max: 277, + y_min: -176, + y_max: 454, + ha: 630, + o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 348, + y_min: -316, + y_max: 318, + ha: 634, + o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 361, + y_min: 0, + y_max: 235, + ha: 235, + o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 361, + y_min: -235, + y_max: 0, + ha: 235, + o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z', + }, + articTenutoAbove: { + x_min: 0, + x_max: 316, + y_min: 0, + y_max: 46, + ha: 46, + o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z', + }, + articTenutoBelow: { + x_min: 0, + x_max: 316, + y_min: -46, + y_max: 0, + ha: 46, + o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z', + }, + articStaccatoAbove: { + x_min: 0, + x_max: 78, + y_min: 0, + y_max: 78, + ha: 78, + o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z', + }, + articStaccatoBelow: { + x_min: 0, + x_max: 78, + y_min: -78, + y_max: 0, + ha: 78, + o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z', + }, + articStaccatissimoAbove: { + x_min: 0, + x_max: 127, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z', + }, + articStaccatissimoBelow: { + x_min: 0, + x_max: 127, + y_min: -248, + y_max: 0, + ha: 248, + o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z', + }, + articMarcatoAbove: { + x_min: 1, + x_max: 296, + y_min: 0, + y_max: 253, + ha: 253, + o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z', + }, + articMarcatoBelow: { + x_min: 0, + x_max: 295, + y_min: -253, + y_max: 0, + ha: 253, + o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z', + }, + fermataAbove: { + x_min: 0, + x_max: 622, + y_min: 0, + y_max: 368, + ha: 368, + o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z', + }, + fermataBelow: { + x_min: 0, + x_max: 622, + y_min: -368, + y_max: 0, + ha: 368, + o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 623, + y_min: 0, + y_max: 368, + ha: 368, + o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 623, + y_min: -368, + y_max: 0, + ha: 368, + o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 842, + y_min: 0, + y_max: 549, + ha: 549, + o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 842, + y_min: -549, + y_max: 0, + ha: 549, + o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 642, + y_min: 0, + y_max: 454, + ha: 454, + o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 642, + y_min: -454, + y_max: 0, + ha: 454, + o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 191, + y_min: 0, + y_max: 321, + ha: 321, + o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z', + }, + caesura: { + x_min: 0, + x_max: 380, + y_min: 0, + y_max: 490, + ha: 490, + o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 368, + y_min: 0, + y_max: 491, + ha: 491, + o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z', + }, + restMaxima: { + x_min: 0, + x_max: 450, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 125, + y_min: -11, + y_max: 262, + ha: 273, + o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z', + }, + restWhole: { + x_min: 0, + x_max: 325, + y_min: -131, + y_max: 5, + ha: 136, + o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z', + }, + restWholeLegerLine: { + x_min: -139, + x_max: 464, + y_min: -122, + y_max: 14, + ha: 136, + o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z', + }, + restHalf: { + x_min: 0, + x_max: 325, + y_min: -4, + y_max: 132, + ha: 136, + o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z', + }, + restHalfLegerLine: { + x_min: -139, + x_max: 464, + y_min: -14, + y_max: 122, + ha: 136, + o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z', + }, + restQuarter: { + x_min: 0, + x_max: 235, + y_min: -331, + y_max: 401, + ha: 732, + o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z', + }, + rest8th: { + x_min: 0, + x_max: 276, + y_min: -255, + y_max: 204, + ha: 459, + o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z', + }, + rest16th: { + x_min: 1, + x_max: 344, + y_min: -507, + y_max: 204, + ha: 711, + o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z', + }, + rest32nd: { + x_min: 0, + x_max: 391, + y_min: -507, + y_max: 460, + ha: 967, + o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z', + }, + rest64th: { + x_min: 0, + x_max: 423, + y_min: -758, + y_max: 464, + ha: 1222, + o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z', + }, + rest128th: { + x_min: -1, + x_max: 475, + y_min: -759, + y_max: 717, + ha: 1476, + o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z', + }, + dynamicPiano: { + x_min: -95, + x_max: 317, + y_min: -163, + y_max: 263, + ha: 426, + o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z', + }, + dynamicMezzo: { + x_min: -7, + x_max: 374, + y_min: -2, + y_max: 251, + ha: 253, + o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z', + }, + dynamicForte: { + x_min: -137, + x_max: 334, + y_min: -193, + y_max: 421, + ha: 614, + o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z', + }, + dynamicRinforzando: { + x_min: -12, + x_max: 230, + y_min: 0, + y_max: 254, + ha: 254, + o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 208, + y_min: -5, + y_max: 263, + ha: 268, + o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z', + }, + dynamicZ: { + x_min: -42, + x_max: 239, + y_min: -1, + y_max: 258, + ha: 259, + o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z', + }, + ornamentTrill: { + x_min: -12, + x_max: 383, + y_min: 0, + y_max: 383, + ha: 383, + o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 456, + y_min: 0, + y_max: 232, + ha: 232, + o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 456, + y_min: -80, + y_max: 313, + ha: 393, + o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', + }, + ornamentMordent: { + x_min: 0, + x_max: 473, + y_min: -77, + y_max: 316, + ha: 393, + o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z', + }, + ornamentTremblement: { + x_min: 0, + x_max: 654, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 680, + y_min: 0, + y_max: 388, + ha: 388, + o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 0, + x_max: 662, + y_min: -158, + y_max: 248, + ha: 406, + o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 662, + y_min: -158, + y_max: 321, + ha: 479, + o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 662, + y_min: 0, + y_max: 406, + ha: 406, + o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 857, + y_min: 0, + y_max: 248, + ha: 248, + o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 565, + y_min: -171, + y_max: 249, + ha: 420, + o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 312, + y_min: 0, + y_max: 312, + ha: 312, + o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z', + }, + brassMuteOpen: { + x_min: 0, + x_max: 280, + y_min: 0, + y_max: 280, + ha: 280, + o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 315, + y_min: 0, + y_max: 293, + ha: 293, + o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z', + }, + stringsUpBow: { + x_min: 0, + x_max: 262, + y_min: 0, + y_max: 343, + ha: 343, + o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 181, + y_min: 0, + y_max: 181, + ha: 181, + o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 269, + y_min: 0, + y_max: 389, + ha: 389, + o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 269, + y_min: 0, + y_max: 389, + ha: 389, + o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 981, + y_min: -10, + y_max: 545, + ha: 555, + o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 473, + y_min: 0, + y_max: 473, + ha: 473, + o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z', + }, + wiggleArpeggiatoUp: { + x_min: -22, + x_max: 242, + y_min: 0, + y_max: 164, + ha: 164, + o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 481, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 735, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1243, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 481, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z', + }, + csymDiminished: { + x_min: 0, + x_max: 501, + y_min: 0, + y_max: 501, + ha: 501, + o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z', + }, + csymHalfDiminished: { + x_min: -1, + x_max: 502, + y_min: -1, + y_max: 502, + ha: 503, + o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z', + }, + csymAugmented: { + x_min: 1, + x_max: 321, + y_min: 90, + y_max: 410, + ha: 320, + o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 500, + y_min: 10, + y_max: 490, + ha: 480, + o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 160, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 416, + y_min: -176, + y_max: 452, + ha: 628, + o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', + }, + }, + fontFamily: 'Leland', + resolution: 1000, + generatedOn: '2022-12-19T23:52:37.756Z', +}; diff --git a/build/esm/src/fonts/load_all.js b/build/esm/src/fonts/load_all.js new file mode 100644 index 0000000000..09b7cde58a --- /dev/null +++ b/build/esm/src/fonts/load_all.js @@ -0,0 +1,12 @@ +import { loadBravura } from './load_bravura.js'; +import { loadCustom } from './load_custom.js'; +import { loadGonville } from './load_gonville.js'; +import { loadLeland } from './load_leland.js'; +import { loadPetaluma } from './load_petaluma.js'; +export function loadAllMusicFonts() { + loadBravura(); + loadGonville(); + loadPetaluma(); + loadCustom(); + loadLeland(); +} diff --git a/build/esm/src/fonts/load_bravura.js b/build/esm/src/fonts/load_bravura.js new file mode 100644 index 0000000000..2f8600f99d --- /dev/null +++ b/build/esm/src/fonts/load_bravura.js @@ -0,0 +1,6 @@ +import { Font } from '../font.js'; +import { BravuraFont } from './bravura_glyphs.js'; +import { CommonMetrics } from './common_metrics.js'; +export function loadBravura() { + Font.load('Bravura', BravuraFont, CommonMetrics); +} diff --git a/build/esm/src/fonts/load_custom.js b/build/esm/src/fonts/load_custom.js new file mode 100644 index 0000000000..23abe0d4fa --- /dev/null +++ b/build/esm/src/fonts/load_custom.js @@ -0,0 +1,6 @@ +import { Font } from '../font.js'; +import { CommonMetrics } from './common_metrics.js'; +import { CustomFont } from './custom_glyphs.js'; +export function loadCustom() { + Font.load('Custom', CustomFont, CommonMetrics); +} diff --git a/build/esm/src/fonts/load_gonville.js b/build/esm/src/fonts/load_gonville.js new file mode 100644 index 0000000000..e0ce947d73 --- /dev/null +++ b/build/esm/src/fonts/load_gonville.js @@ -0,0 +1,6 @@ +import { Font } from '../font.js'; +import { CommonMetrics } from './common_metrics.js'; +import { GonvilleSmuflFont } from './gonville_glyphs.js'; +export function loadGonville() { + Font.load('Gonville', GonvilleSmuflFont, CommonMetrics); +} diff --git a/build/esm/src/fonts/load_leland.js b/build/esm/src/fonts/load_leland.js new file mode 100644 index 0000000000..9106e80307 --- /dev/null +++ b/build/esm/src/fonts/load_leland.js @@ -0,0 +1,6 @@ +import { Font } from '../font.js'; +import { CommonMetrics } from './common_metrics.js'; +import { LelandFont } from './leland_glyphs.js'; +export function loadLeland() { + Font.load('Leland', LelandFont, CommonMetrics); +} diff --git a/build/esm/src/fonts/load_petaluma.js b/build/esm/src/fonts/load_petaluma.js new file mode 100644 index 0000000000..1cdfee755c --- /dev/null +++ b/build/esm/src/fonts/load_petaluma.js @@ -0,0 +1,83 @@ +import { Font } from '../font.js'; +import { CommonMetrics } from './common_metrics.js'; +import { PetalumaFont } from './petaluma_glyphs.js'; +const petalumaChordMetrics = { + csymDiminished: { + leftSideBearing: -95, + advanceWidth: 506, + yOffset: 0, + }, + csymHalfDiminished: { + leftSideBearing: -32, + advanceWidth: 506, + yOffset: 0, + }, + csymAugmented: { + leftSideBearing: -25, + advanceWidth: 530, + yOffset: 0, + }, + csymParensLeftTall: { + leftSideBearing: 0, + advanceWidth: 155, + yOffset: 150, + }, + csymParensRightTall: { + leftSideBearing: 40, + advanceWidth: 189, + yOffset: 150, + }, + csymBracketLeftTall: { + leftSideBearing: 0, + advanceWidth: 328, + yOffset: 0, + }, + csymBracketRightTall: { + leftSideBearing: 1, + advanceWidth: 600, + yOffset: 0, + }, + csymParensLeftVeryTall: { + leftSideBearing: 0, + advanceWidth: 210, + yOffset: 250, + }, + csymParensRightVeryTall: { + leftSideBearing: -100, + advanceWidth: 111, + yOffset: 250, + }, + csymDiagonalArrangementSlash: { + leftSideBearing: -1, + advanceWidth: 990, + yOffset: 0, + }, + csymMinor: { + leftSideBearing: 0, + advanceWidth: 482, + yOffset: 0, + }, + csymMajorSeventh: { + leftSideBearing: 100, + yOffset: 0, + advanceWidth: 600, + }, + accidentalSharp: { + leftSideBearing: 0, + advanceWidth: 425, + yOffset: -422, + }, + accidentalFlat: { + leftSideBearing: -10, + advanceWidth: 228, + yOffset: -284, + }, +}; +export function loadPetaluma() { + const metrics = JSON.parse(JSON.stringify(CommonMetrics)); + const chordMetrics = metrics.chordSymbol; + if (chordMetrics) { + chordMetrics.glyphs = petalumaChordMetrics; + } + Font.load('Petaluma', PetalumaFont, metrics); +} diff --git a/build/esm/src/fonts/petaluma_glyphs.js b/build/esm/src/fonts/petaluma_glyphs.js new file mode 100644 index 0000000000..0c8298babf --- /dev/null +++ b/build/esm/src/fonts/petaluma_glyphs.js @@ -0,0 +1,1639 @@ +export const PetalumaFont = { + glyphs: { + bracketTop: { + x_min: 0, + x_max: 508, + y_min: 0, + y_max: 370, + ha: 370, + o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z', + }, + bracketBottom: { + x_min: 0, + x_max: 496, + y_min: -393, + y_max: 0, + ha: 393, + o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z', + }, + barlineTick: { + x_min: 0, + x_max: 56, + y_min: 877, + y_max: 1122, + ha: 245, + o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z', + }, + breathMarkTick: { + x_min: 0, + x_max: 568, + y_min: 0, + y_max: 621, + ha: 621, + o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z', + }, + segno: { + x_min: 0, + x_max: 798, + y_min: -65, + y_max: 806, + ha: 871, + o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z', + }, + coda: { + x_min: 0, + x_max: 1380, + y_min: -196, + y_max: 1037, + ha: 1233, + o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z', + }, + gClef: { + x_min: 0, + x_max: 664, + y_min: -559, + y_max: 1009, + ha: 1568, + o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z', + }, + cClef: { + x_min: 0, + x_max: 731, + y_min: -543, + y_max: 543, + ha: 1086, + o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z', + }, + fClef: { + x_min: 0, + x_max: 776, + y_min: -496, + y_max: 216, + ha: 712, + o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z', + }, + unpitchedPercussionClef1: { + x_min: 0, + x_max: 379, + y_min: -250, + y_max: 250, + ha: 500, + o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z', + }, + '6stringTabClef': { + x_min: 0, + x_max: 438, + y_min: -768, + y_max: 767, + ha: 1535, + o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z', + }, + timeSig0: { + x_min: 20, + x_max: 513, + y_min: -358, + y_max: 359, + ha: 717, + o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z', + }, + timeSig1: { + x_min: 20, + x_max: 283, + y_min: -364, + y_max: 366, + ha: 730, + o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z', + }, + timeSig2: { + x_min: 20, + x_max: 660, + y_min: -379, + y_max: 382, + ha: 761, + o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z', + }, + timeSig3: { + x_min: 20, + x_max: 540, + y_min: -392, + y_max: 392, + ha: 784, + o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z', + }, + timeSig4: { + x_min: 20, + x_max: 633, + y_min: -490, + y_max: 491, + ha: 981, + o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z', + }, + timeSig5: { + x_min: 20, + x_max: 583, + y_min: -389, + y_max: 389, + ha: 778, + o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z', + }, + timeSig6: { + x_min: 20, + x_max: 565, + y_min: -363, + y_max: 363, + ha: 726, + o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z', + }, + timeSig7: { + x_min: 20, + x_max: 592, + y_min: -345, + y_max: 345, + ha: 690, + o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z', + }, + timeSig8: { + x_min: 20, + x_max: 504, + y_min: -428, + y_max: 428, + ha: 856, + o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z', + }, + timeSig9: { + x_min: 20, + x_max: 494, + y_min: -421, + y_max: 421, + ha: 842, + o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z', + }, + timeSigCommon: { + x_min: 20, + x_max: 585, + y_min: -298, + y_max: 294, + ha: 592, + o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z', + }, + timeSigCutCommon: { + x_min: 20, + x_max: 695, + y_min: -687, + y_max: 687, + ha: 1374, + o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z', + }, + timeSigPlus: { + x_min: 0, + x_max: 661, + y_min: -358, + y_max: 358, + ha: 716, + o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z', + }, + timeSigPlusSmall: { + x_min: 0, + x_max: 418, + y_min: -197, + y_max: 199, + ha: 396, + o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z', + }, + timeSigMinus: { + x_min: 0, + x_max: 662, + y_min: -54, + y_max: 55, + ha: 109, + o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z', + }, + timeSigParensRight: { + x_min: 0, + x_max: 274, + y_min: -723, + y_max: 725, + ha: 1448, + o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z', + }, + timeSigParensRightSmall: { + x_min: 0, + x_max: 154, + y_min: -422, + y_max: 422, + ha: 844, + o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z', + }, + timeSigParensLeft: { + x_min: 1, + x_max: 400, + y_min: -728, + y_max: 728, + ha: 1456, + o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z', + }, + timeSigParensLeftSmall: { + x_min: 0, + x_max: 173, + y_min: -405, + y_max: 404, + ha: 809, + o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z', + }, + noteheadDoubleWhole: { + x_min: 0, + x_max: 614, + y_min: -223, + y_max: 223, + ha: 446, + o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z', + }, + noteheadWhole: { + x_min: 0, + x_max: 380, + y_min: -186, + y_max: 165, + ha: 351, + o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z', + }, + noteheadHalf: { + x_min: 0, + x_max: 334, + y_min: -174, + y_max: 175, + ha: 349, + o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z', + }, + noteheadBlack: { + x_min: 0, + x_max: 334, + y_min: -164, + y_max: 164, + ha: 328, + o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z', + }, + noteheadXDoubleWhole: { + x_min: 0, + x_max: 730, + y_min: -266, + y_max: 267, + ha: 533, + o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z', + }, + noteheadXWhole: { + x_min: 0, + x_max: 506, + y_min: -143, + y_max: 144, + ha: 287, + o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z', + }, + noteheadXHalf: { + x_min: 0, + x_max: 421, + y_min: -146, + y_max: 151, + ha: 297, + o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z', + }, + noteheadXBlack: { + x_min: 0, + x_max: 289, + y_min: -156, + y_max: 157, + ha: 313, + o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z', + }, + noteheadCircleXDoubleWhole: { + x_min: 0, + x_max: 437, + y_min: -220, + y_max: 219, + ha: 439, + o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z', + }, + noteheadCircleXWhole: { + x_min: 0, + x_max: 323, + y_min: -190, + y_max: 184, + ha: 374, + o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z', + }, + noteheadCircleXHalf: { + x_min: 0, + x_max: 309, + y_min: -179, + y_max: 179, + ha: 358, + o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z', + }, + noteheadCircleX: { + x_min: 0, + x_max: 344, + y_min: -179, + y_max: 175, + ha: 354, + o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z', + }, + noteheadCircledDoubleWhole: { + x_min: 0, + x_max: 672, + y_min: -291, + y_max: 291, + ha: 582, + o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z', + }, + noteheadCircledWhole: { + x_min: -50, + x_max: 472, + y_min: -231, + y_max: 232, + ha: 463, + o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z', + }, + noteheadCircledHalf: { + x_min: -50, + x_max: 393, + y_min: -175, + y_max: 175, + ha: 350, + o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z', + }, + noteheadCircledBlack: { + x_min: -70, + x_max: 326, + y_min: -168, + y_max: 192, + ha: 360, + o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z', + }, + noteheadDoubleWholeSquare: { + x_min: 0, + x_max: 474, + y_min: -209, + y_max: 211, + ha: 420, + o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z', + }, + noteheadSquareWhite: { + x_min: 0, + x_max: 350, + y_min: -131, + y_max: 131, + ha: 262, + o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z', + }, + noteheadSquareBlack: { + x_min: 0, + x_max: 342, + y_min: -130, + y_max: 132, + ha: 262, + o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z', + }, + noteheadTriangleDownDoubleWhole: { + x_min: 0, + x_max: 510, + y_min: -213, + y_max: 213, + ha: 426, + o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z', + }, + noteheadTriangleDownWhole: { + x_min: 0, + x_max: 366, + y_min: -145, + y_max: 138, + ha: 283, + o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z', + }, + noteheadTriangleDownHalf: { + x_min: 0, + x_max: 341, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z', + }, + noteheadTriangleDownBlack: { + x_min: 0, + x_max: 346, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z', + }, + noteheadTriangleUpDoubleWhole: { + x_min: 0, + x_max: 510, + y_min: -213, + y_max: 213, + ha: 426, + o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z', + }, + noteheadTriangleUpWhole: { + x_min: 0, + x_max: 366, + y_min: -145, + y_max: 138, + ha: 283, + o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z', + }, + noteheadTriangleUpHalf: { + x_min: 0, + x_max: 341, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z', + }, + noteheadTriangleUpBlack: { + x_min: 0, + x_max: 346, + y_min: -149, + y_max: 149, + ha: 298, + o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z', + }, + noteheadSlashedDoubleWhole1: { + x_min: 0, + x_max: 697, + y_min: -290, + y_max: 290, + ha: 580, + o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z', + }, + noteheadSlashedWhole1: { + x_min: -76, + x_max: 498, + y_min: -168, + y_max: 168, + ha: 336, + o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z', + }, + noteheadSlashedHalf1: { + x_min: -79, + x_max: 471, + y_min: -184, + y_max: 184, + ha: 368, + o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z', + }, + noteheadSlashedBlack1: { + x_min: -110, + x_max: 452, + y_min: -190, + y_max: 190, + ha: 380, + o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z', + }, + noteheadSlashedDoubleWhole2: { + x_min: 0, + x_max: 697, + y_min: -295, + y_max: 295, + ha: 590, + o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z', + }, + noteheadSlashedWhole2: { + x_min: -83, + x_max: 510, + y_min: -201, + y_max: 198, + ha: 399, + o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z', + }, + noteheadSlashedHalf2: { + x_min: -73, + x_max: 454, + y_min: -188, + y_max: 188, + ha: 376, + o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z', + }, + noteheadSlashedBlack2: { + x_min: -84, + x_max: 405, + y_min: -189, + y_max: 189, + ha: 378, + o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z', + }, + noteheadDiamondDoubleWhole: { + x_min: 0, + x_max: 429, + y_min: -221, + y_max: 221, + ha: 442, + o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z', + }, + noteheadDiamondWhole: { + x_min: 0, + x_max: 271, + y_min: -132, + y_max: 132, + ha: 264, + o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z', + }, + noteheadDiamondHalf: { + x_min: 0, + x_max: 295, + y_min: -148, + y_max: 148, + ha: 296, + o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z', + }, + noteheadDiamondBlack: { + x_min: 0, + x_max: 310, + y_min: -146, + y_max: 146, + ha: 292, + o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z', + }, + noteheadParenthesis: { + x_min: -70, + x_max: 329, + y_min: -196, + y_max: 201, + ha: 397, + o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z', + }, + noteheadParenthesisRight: { + x_min: -30, + x_max: 82, + y_min: -199, + y_max: 206, + ha: 405, + o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z', + }, + noteheadParenthesisLeft: { + x_min: 0, + x_max: 106, + y_min: -197, + y_max: 197, + ha: 394, + o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z', + }, + noteheadMoonBlack: { + x_min: 0, + x_max: 328, + y_min: -125, + y_max: 125, + ha: 250, + o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z', + }, + noteheadTriangleLeftBlack: { + x_min: 0, + x_max: 391, + y_min: -142, + y_max: 142, + ha: 284, + o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z', + }, + noteheadTriangleRightBlack: { + x_min: 0, + x_max: 398, + y_min: -139, + y_max: 140, + ha: 279, + o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z', + }, + noteheadTriangleRoundDownBlack: { + x_min: 0, + x_max: 334, + y_min: -134, + y_max: 136, + ha: 270, + o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z', + }, + augmentationDot: { + x_min: 0, + x_max: 96, + y_min: -57, + y_max: 57, + ha: 114, + o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z', + }, + tremolo1: { + x_min: -158, + x_max: 156, + y_min: -88, + y_max: 88, + ha: 176, + o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z', + }, + flag8thUp: { + x_min: 0, + x_max: 261, + y_min: -819, + y_max: 0, + ha: 819, + o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z', + }, + flag8thDown: { + x_min: 0, + x_max: 261, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z', + }, + flag16thUp: { + x_min: 0, + x_max: 327, + y_min: -819, + y_max: 0, + ha: 819, + o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z', + }, + flag16thDown: { + x_min: 0, + x_max: 327, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z', + }, + flag32ndUp: { + x_min: 0, + x_max: 268, + y_min: -849, + y_max: 149, + ha: 999, + o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z', + }, + flag32ndDown: { + x_min: -3, + x_max: 268, + y_min: -169, + y_max: 829, + ha: 999, + o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z', + }, + flag64thUp: { + x_min: -4, + x_max: 282, + y_min: -824, + y_max: 347, + ha: 1171, + o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z', + }, + flag64thDown: { + x_min: -5, + x_max: 281, + y_min: -375, + y_max: 796, + ha: 1171, + o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z', + }, + flag128thUp: { + x_min: 0, + x_max: 252, + y_min: -804, + y_max: 530, + ha: 1334, + o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z', + }, + flag128thDown: { + x_min: -1, + x_max: 252, + y_min: -580, + y_max: 754, + ha: 1334, + o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z', + }, + accidentalFlat: { + x_min: 1, + x_max: 209, + y_min: -208, + y_max: 472, + ha: 680, + o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z', + }, + accidentalNatural: { + x_min: 0, + x_max: 214, + y_min: -456, + y_max: 462, + ha: 918, + o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z', + }, + accidentalSharp: { + x_min: -22, + x_max: 390, + y_min: -384, + y_max: 383, + ha: 767, + o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z', + }, + accidentalDoubleSharp: { + x_min: 0, + x_max: 287, + y_min: -159, + y_max: 159, + ha: 318, + o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z', + }, + accidentalDoubleFlat: { + x_min: 0, + x_max: 359, + y_min: -220, + y_max: 446, + ha: 666, + o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z', + }, + accidentalParensLeft: { + x_min: 0, + x_max: 130, + y_min: -270, + y_max: 268, + ha: 538, + o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z', + }, + accidentalParensRight: { + x_min: 0, + x_max: 139, + y_min: -275, + y_max: 277, + ha: 552, + o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z', + }, + accidentalQuarterToneFlatStein: { + x_min: 0, + x_max: 208, + y_min: -240, + y_max: 440, + ha: 680, + o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z', + }, + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: 0, + x_max: 422, + y_min: -240, + y_max: 440, + ha: 680, + o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z', + }, + accidentalQuarterToneSharpStein: { + x_min: 0, + x_max: 300, + y_min: -338, + y_max: 351, + ha: 689, + o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', + }, + accidentalThreeQuarterTonesSharpStein: { + x_min: -23, + x_max: 388, + y_min: -373, + y_max: 445, + ha: 818, + o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z', + }, + accidentalBuyukMucennebFlat: { + x_min: 2, + x_max: 287, + y_min: -248, + y_max: 432, + ha: 680, + o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z', + }, + accidentalBuyukMucennebSharp: { + x_min: -1, + x_max: 467, + y_min: -460, + y_max: 350, + ha: 810, + o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z', + }, + accidentalBakiyeFlat: { + x_min: 2, + x_max: 287, + y_min: -236, + y_max: 444, + ha: 680, + o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z', + }, + accidentalKomaSharp: { + x_min: 0, + x_max: 300, + y_min: -338, + y_max: 351, + ha: 689, + o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', + }, + accidentalKucukMucennebSharp: { + x_min: 0, + x_max: 359, + y_min: -420, + y_max: 343, + ha: 763, + o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z', + }, + accidentalKoron: { + x_min: 0, + x_max: 303, + y_min: -462, + y_max: 180, + ha: 642, + o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z', + }, + accidentalSori: { + x_min: 0, + x_max: 434, + y_min: -295, + y_max: 325, + ha: 620, + o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z', + }, + articAccentAbove: { + x_min: 0, + x_max: 425, + y_min: 0, + y_max: 326, + ha: 326, + o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z', + }, + articAccentBelow: { + x_min: 0, + x_max: 425, + y_min: -326, + y_max: 0, + ha: 326, + o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z', + }, + articTenutoAbove: { + x_min: 0, + x_max: 471, + y_min: 0, + y_max: 56, + ha: 56, + o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z', + }, + articTenutoBelow: { + x_min: 0, + x_max: 471, + y_min: -59, + y_max: -3, + ha: 56, + o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z', + }, + articStaccatoAbove: { + x_min: 1, + x_max: 112, + y_min: 0, + y_max: 156, + ha: 156, + o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z', + }, + articStaccatoBelow: { + x_min: 1, + x_max: 112, + y_min: -156, + y_max: 0, + ha: 156, + o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z', + }, + articStaccatissimoAbove: { + x_min: 0, + x_max: 139, + y_min: 0, + y_max: 411, + ha: 411, + o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z', + }, + articStaccatissimoBelow: { + x_min: 0, + x_max: 139, + y_min: -411, + y_max: 0, + ha: 411, + o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z', + }, + articMarcatoAbove: { + x_min: 0, + x_max: 396, + y_min: 0, + y_max: 328, + ha: 328, + o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z', + }, + articMarcatoBelow: { + x_min: 0, + x_max: 396, + y_min: -328, + y_max: 0, + ha: 328, + o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z', + }, + fermataAbove: { + x_min: 0, + x_max: 472, + y_min: 2, + y_max: 454, + ha: 452, + o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z', + }, + fermataBelow: { + x_min: 0, + x_max: 519, + y_min: -430, + y_max: -1, + ha: 429, + o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z', + }, + fermataLongAbove: { + x_min: 0, + x_max: 591, + y_min: -6, + y_max: 337, + ha: 343, + o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z', + }, + fermataLongBelow: { + x_min: 0, + x_max: 602, + y_min: -335, + y_max: 7, + ha: 342, + o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z', + }, + fermataVeryLongAbove: { + x_min: 0, + x_max: 715, + y_min: -14, + y_max: 437, + ha: 451, + o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z', + }, + fermataVeryLongBelow: { + x_min: 0, + x_max: 686, + y_min: -427, + y_max: 30, + ha: 457, + o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z', + }, + fermataVeryShortAbove: { + x_min: 0, + x_max: 711, + y_min: -31, + y_max: 496, + ha: 527, + o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z', + }, + fermataVeryShortBelow: { + x_min: 0, + x_max: 697, + y_min: -475, + y_max: 13, + ha: 488, + o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z', + }, + fermataShortAbove: { + x_min: 0, + x_max: 545, + y_min: -18, + y_max: 348, + ha: 366, + o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z', + }, + fermataShortBelow: { + x_min: 0, + x_max: 565, + y_min: -335, + y_max: 10, + ha: 345, + o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z', + }, + breathMarkComma: { + x_min: 0, + x_max: 148, + y_min: 0, + y_max: 275, + ha: 275, + o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z', + }, + breathMarkUpbow: { + x_min: 0, + x_max: 254, + y_min: 0, + y_max: 595, + ha: 595, + o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z', + }, + caesura: { + x_min: 0, + x_max: 566, + y_min: 0, + y_max: 562, + ha: 563, + o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z', + }, + caesuraCurved: { + x_min: 0, + x_max: 386, + y_min: -10, + y_max: 584, + ha: 594, + o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z', + }, + restMaxima: { + x_min: 0, + x_max: 366, + y_min: -255, + y_max: 255, + ha: 510, + o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z', + }, + restDoubleWhole: { + x_min: 0, + x_max: 122, + y_min: 0, + y_max: 249, + ha: 249, + o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z', + }, + restWhole: { + x_min: 1, + x_max: 500, + y_min: -120, + y_max: 14, + ha: 134, + o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z', + }, + restWholeLegerLine: { + x_min: -197, + x_max: 685, + y_min: -157, + y_max: 29, + ha: 186, + o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z', + }, + restHalf: { + x_min: 0, + x_max: 518, + y_min: 0, + y_max: 162, + ha: 162, + o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z', + }, + restHalfLegerLine: { + x_min: -120, + x_max: 448, + y_min: -20, + y_max: 143, + ha: 163, + o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z', + }, + restQuarter: { + x_min: 0, + x_max: 263, + y_min: -415, + y_max: 415, + ha: 830, + o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z', + }, + rest8th: { + x_min: 0, + x_max: 289, + y_min: -260, + y_max: 261, + ha: 521, + o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z', + }, + rest16th: { + x_min: 0, + x_max: 333, + y_min: -328, + y_max: 244, + ha: 572, + o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z', + }, + rest32nd: { + x_min: 0, + x_max: 347, + y_min: -498, + y_max: 483, + ha: 981, + o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z', + }, + rest64th: { + x_min: 0, + x_max: 428, + y_min: -720, + y_max: 474, + ha: 1194, + o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z', + }, + rest128th: { + x_min: 1, + x_max: 491, + y_min: -711, + y_max: 719, + ha: 1430, + o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z', + }, + dynamicPiano: { + x_min: -49, + x_max: 327, + y_min: -142, + y_max: 515, + ha: 657, + o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z', + }, + dynamicMezzo: { + x_min: -18, + x_max: 559, + y_min: -50, + y_max: 365, + ha: 415, + o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z', + }, + dynamicForte: { + x_min: -144, + x_max: 311, + y_min: -115, + y_max: 504, + ha: 619, + o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z', + }, + dynamicRinforzando: { + x_min: -75, + x_max: 322, + y_min: -90, + y_max: 325, + ha: 415, + o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z', + }, + dynamicSforzando: { + x_min: 0, + x_max: 296, + y_min: 0, + y_max: 379, + ha: 379, + o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z', + }, + dynamicZ: { + x_min: -43, + x_max: 331, + y_min: 0, + y_max: 328, + ha: 328, + o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z', + }, + ornamentTrill: { + x_min: 1, + x_max: 551, + y_min: -18, + y_max: 539, + ha: 557, + o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z', + }, + ornamentTurn: { + x_min: 0, + x_max: 574, + y_min: 0, + y_max: 312, + ha: 312, + o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z', + }, + ornamentTurnSlash: { + x_min: 0, + x_max: 574, + y_min: -106, + y_max: 405, + ha: 511, + o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z', + }, + ornamentMordent: { + x_min: 0, + x_max: 700, + y_min: 0, + y_max: 497, + ha: 497, + o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z', + }, + ornamentShortTrill: { + x_min: 0, + x_max: 747, + y_min: 0, + y_max: 243, + ha: 243, + o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z', + }, + ornamentTremblement: { + x_min: 0, + x_max: 982, + y_min: 0, + y_max: 224, + ha: 224, + o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z', + }, + ornamentPrecompAppoggTrill: { + x_min: 0, + x_max: 1066, + y_min: -50, + y_max: 533, + ha: 583, + o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z', + }, + ornamentPrecompSlideTrillDAnglebert: { + x_min: 0, + x_max: 1088, + y_min: -380, + y_max: 252, + ha: 632, + o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z', + }, + ornamentPrecompSlideTrillBach: { + x_min: 0, + x_max: 1185, + y_min: -380, + y_max: 465, + ha: 845, + o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z', + }, + ornamentPrecompTrillSuffixDandrieu: { + x_min: 0, + x_max: 1003, + y_min: -20, + y_max: 521, + ha: 541, + o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z', + }, + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: 0, + x_max: 1246, + y_min: -30, + y_max: 296, + ha: 326, + o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z', + }, + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: 0, + x_max: 1226, + y_min: -237, + y_max: 436, + ha: 673, + o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z', + }, + ornamentPrecompTrillLowerSuffix: { + x_min: 0, + x_max: 833, + y_min: -309, + y_max: 319, + ha: 628, + o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z', + }, + brassScoop: { + x_min: 0, + x_max: 312, + y_min: -390, + y_max: 28, + ha: 418, + o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z', + }, + brassDoitMedium: { + x_min: 0, + x_max: 476, + y_min: -50, + y_max: 333, + ha: 383, + o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z', + }, + brassFallLipShort: { + x_min: 0, + x_max: 298, + y_min: -344, + y_max: 65, + ha: 409, + o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z', + }, + brassLiftMedium: { + x_min: 0, + x_max: 807, + y_min: 0, + y_max: 838, + ha: 838, + o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z', + }, + brassFallRoughMedium: { + x_min: 0, + x_max: 791, + y_min: 0, + y_max: 819, + ha: 819, + o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z', + }, + brassBend: { + x_min: 0, + x_max: 381, + y_min: 0, + y_max: 367, + ha: 367, + o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z', + }, + brassMuteClosed: { + x_min: 0, + x_max: 274, + y_min: 0, + y_max: 260, + ha: 260, + o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z', + }, + brassMuteOpen: { + x_min: 1, + x_max: 313, + y_min: 0, + y_max: 309, + ha: 309, + o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z', + }, + brassFlip: { + x_min: 0, + x_max: 402, + y_min: 0, + y_max: 361, + ha: 361, + o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z', + }, + brassJazzTurn: { + x_min: 0, + x_max: 646, + y_min: 0, + y_max: 212, + ha: 212, + o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z', + }, + brassSmear: { + x_min: 0, + x_max: 334, + y_min: 0, + y_max: 151, + ha: 151, + o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z', + }, + stringsDownBow: { + x_min: 0, + x_max: 306, + y_min: 0, + y_max: 366, + ha: 366, + o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z', + }, + stringsUpBow: { + x_min: 0, + x_max: 219, + y_min: 0, + y_max: 489, + ha: 489, + o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z', + }, + stringsHarmonic: { + x_min: 0, + x_max: 191, + y_min: 0, + y_max: 202, + ha: 202, + o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z', + }, + pluckedSnapPizzicatoAbove: { + x_min: 0, + x_max: 201, + y_min: 0, + y_max: 325, + ha: 325, + o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z', + }, + pluckedSnapPizzicatoBelow: { + x_min: 0, + x_max: 211, + y_min: 0, + y_max: 307, + ha: 307, + o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z', + }, + pluckedLeftHandPizzicato: { + x_min: 0, + x_max: 271, + y_min: 0, + y_max: 284, + ha: 284, + o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z', + }, + keyboardPedalPed: { + x_min: 0, + x_max: 944, + y_min: -13, + y_max: 550, + ha: 563, + o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z', + }, + keyboardPedalUp: { + x_min: 0, + x_max: 437, + y_min: 0, + y_max: 461, + ha: 461, + o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z', + }, + pictChokeCymbal: { + x_min: 1, + x_max: 147, + y_min: 0, + y_max: 242, + ha: 242, + o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z', + }, + wiggleArpeggiatoUp: { + x_min: -22, + x_max: 300, + y_min: 0, + y_max: 176, + ha: 176, + o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z', + }, + arpeggiatoUp: { + x_min: 0, + x_max: 262, + y_min: 0, + y_max: 1459, + ha: 1459, + o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z', + }, + arpeggiatoDown: { + x_min: 0, + x_max: 218, + y_min: 0, + y_max: 1440, + ha: 1440, + o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z', + }, + repeat1Bar: { + x_min: 0, + x_max: 599, + y_min: -250, + y_max: 175, + ha: 425, + o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z', + }, + repeat2Bars: { + x_min: 0, + x_max: 775, + y_min: -247, + y_max: 363, + ha: 610, + o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z', + }, + repeat4Bars: { + x_min: 0, + x_max: 1374, + y_min: -304, + y_max: 304, + ha: 608, + o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z', + }, + repeatBarSlash: { + x_min: 0, + x_max: 630, + y_min: -225, + y_max: 265, + ha: 490, + o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z', + }, + csymDiminished: { + x_min: 0, + x_max: 506, + y_min: 0, + y_max: 500, + ha: 500, + o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z', + }, + csymHalfDiminished: { + x_min: -32, + x_max: 496, + y_min: -33, + y_max: 492, + ha: 525, + o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z', + }, + csymAugmented: { + x_min: 0, + x_max: 530, + y_min: 0, + y_max: 539, + ha: 539, + o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z', + }, + csymMajorSeventh: { + x_min: 0, + x_max: 593, + y_min: 0, + y_max: 569, + ha: 569, + o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z', + }, + csymMinor: { + x_min: 0, + x_max: 482, + y_min: 193, + y_max: 265, + ha: 72, + o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z', + }, + csymParensLeftTall: { + x_min: 0, + x_max: 185, + y_min: 0, + y_max: 1034, + ha: 1034, + o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z', + }, + csymParensRightTall: { + x_min: -40, + x_max: 189, + y_min: 0, + y_max: 1058, + ha: 1058, + o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z', + }, + csymBracketLeftTall: { + x_min: 0, + x_max: 328, + y_min: 2, + y_max: 807, + ha: 805, + o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z', + }, + csymBracketRightTall: { + x_min: 1, + x_max: 306, + y_min: 0, + y_max: 829, + ha: 829, + o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z', + }, + csymParensLeftVeryTall: { + x_min: 0, + x_max: 116, + y_min: 0, + y_max: 934, + ha: 934, + o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z', + }, + csymParensRightVeryTall: { + x_min: -20, + x_max: 111, + y_min: 0, + y_max: 1009, + ha: 1009, + o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z', + }, + csymDiagonalArrangementSlash: { + x_min: 0, + x_max: 990, + y_min: -27, + y_max: 1028, + ha: 1054, + o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z', + }, + accidentalNarrowReversedFlat: { + x_min: 0, + x_max: 208, + y_min: -231, + y_max: 449, + ha: 680, + o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z', + }, + accidentalNarrowReversedFlatAndFlat: { + x_min: 0, + x_max: 335, + y_min: -231, + y_max: 449, + ha: 680, + o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z', + }, + accidentalWilsonPlus: { + x_min: 0, + x_max: 298, + y_min: -218, + y_max: 218, + ha: 436, + o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z', + }, + accidentalWilsonMinus: { + x_min: 0, + x_max: 284, + y_min: -163, + y_max: 163, + ha: 326, + o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z', + }, + }, + fontFamily: 'Petaluma', + resolution: 1000, + generatedOn: '2022-12-18T09:07:50.817Z', +}; diff --git a/build/esm/src/fonts/petalumascript_glyphs.js b/build/esm/src/fonts/petalumascript_glyphs.js new file mode 100644 index 0000000000..2589c61a67 --- /dev/null +++ b/build/esm/src/fonts/petalumascript_glyphs.js @@ -0,0 +1,863 @@ +export const PetalumaScriptFont = { + spacing: 50, + glyphs: { + ' ': { + x_min: 0, + x_max: 250, + y_min: 0, + y_max: 500, + ha: 500, + leftSideBearing: 0, + advanceWidth: 250, + }, + '0': { + x_min: 33, + x_max: 534, + y_min: -13, + y_max: 751, + ha: 764, + leftSideBearing: 33, + advanceWidth: 570, + }, + '1': { + x_min: 48, + x_max: 235, + y_min: -17, + y_max: 734, + ha: 751, + leftSideBearing: 48, + advanceWidth: 286, + }, + '2': { + x_min: 56, + x_max: 571, + y_min: -19, + y_max: 741, + ha: 760, + leftSideBearing: 56, + advanceWidth: 626, + }, + '3': { + x_min: 50, + x_max: 528, + y_min: -7, + y_max: 731, + ha: 738, + leftSideBearing: 50, + advanceWidth: 589, + }, + '4': { + x_min: 38, + x_max: 564, + y_min: -13, + y_max: 743, + ha: 756, + leftSideBearing: 38, + advanceWidth: 614, + }, + '5': { + x_min: 42, + x_max: 601, + y_min: -34, + y_max: 743, + ha: 777, + leftSideBearing: 42, + advanceWidth: 648, + }, + '6': { + x_min: 47, + x_max: 606, + y_min: -16, + y_max: 743, + ha: 759, + leftSideBearing: 47, + advanceWidth: 667, + }, + '7': { + x_min: 47, + x_max: 567, + y_min: 5, + y_max: 739, + ha: 734, + leftSideBearing: 0, + advanceWidth: 615, + }, + '8': { + x_min: 40, + x_max: 541, + y_min: -15, + y_max: 752, + ha: 767, + leftSideBearing: 40, + advanceWidth: 585, + }, + '9': { + x_min: 40, + x_max: 537, + y_min: -52, + y_max: 736, + ha: 788, + leftSideBearing: 40, + advanceWidth: 592, + }, + '!': { + x_min: 49, + x_max: 180, + y_min: -7, + y_max: 761, + ha: 768, + leftSideBearing: 49, + advanceWidth: 230, + }, + '"': { + x_min: 39, + x_max: 304, + y_min: 596, + y_max: 804, + ha: 208, + leftSideBearing: 39, + advanceWidth: 353, + }, + '#': { + x_min: 33, + x_max: 599, + y_min: -8, + y_max: 765, + ha: 773, + leftSideBearing: 33, + advanceWidth: 648, + }, + $: { + x_min: 53, + x_max: 495, + y_min: -111, + y_max: 823, + ha: 934, + leftSideBearing: 53, + advanceWidth: 560, + }, + '%': { + x_min: 35, + x_max: 656, + y_min: -128, + y_max: 808, + ha: 936, + leftSideBearing: 35, + advanceWidth: 711, + }, + '&': { + x_min: 53, + x_max: 441, + y_min: -3, + y_max: 753, + ha: 756, + leftSideBearing: 53, + advanceWidth: 500, + }, + "'": { + x_min: 43, + x_max: 161, + y_min: 590, + y_max: 811, + ha: 221, + leftSideBearing: 43, + advanceWidth: 217, + }, + '(': { + x_min: 41, + x_max: 311, + y_min: -36, + y_max: 845, + ha: 881, + leftSideBearing: 41, + advanceWidth: 308, + }, + ')': { + x_min: -8, + x_max: 257, + y_min: -21, + y_max: 852, + ha: 873, + leftSideBearing: -8, + advanceWidth: 280, + }, + '*': { + x_min: 59, + x_max: 539, + y_min: 175, + y_max: 589, + ha: 414, + leftSideBearing: 59, + advanceWidth: 601, + }, + '+': { + x_min: 33, + x_max: 361, + y_min: 180, + y_max: 587, + ha: 407, + leftSideBearing: 33, + advanceWidth: 400, + }, + ',': { + x_min: 15, + x_max: 176, + y_min: -129, + y_max: 92, + ha: 221, + leftSideBearing: 15, + advanceWidth: 205, + }, + '-': { + x_min: 40, + x_max: 380, + y_min: 317, + y_max: 452, + ha: 135, + leftSideBearing: 40, + advanceWidth: 422, + }, + '.': { + x_min: 48, + x_max: 185, + y_min: -56, + y_max: 84, + ha: 140, + leftSideBearing: 48, + advanceWidth: 227, + }, + '/': { + x_min: -58, + x_max: 654, + y_min: -122, + y_max: 844, + ha: 966, + leftSideBearing: -58, + advanceWidth: 626, + }, + ':': { + x_min: 65, + x_max: 225, + y_min: 97, + y_max: 536, + ha: 439, + leftSideBearing: 65, + advanceWidth: 302, + }, + ';': { + x_min: 13, + x_max: 295, + y_min: -139, + y_max: 536, + ha: 675, + leftSideBearing: 13, + advanceWidth: 334, + }, + '<': { + x_min: 28, + x_max: 438, + y_min: -1, + y_max: 607, + ha: 608, + leftSideBearing: 28, + advanceWidth: 475, + }, + '=': { + x_min: 40, + x_max: 383, + y_min: 199.9598640852289, + y_max: 541, + ha: 341.0401359147711, + leftSideBearing: 40, + advanceWidth: 422, + }, + '>': { + x_min: 35, + x_max: 421, + y_min: 28, + y_max: 632, + ha: 604, + leftSideBearing: 35, + advanceWidth: 466, + }, + '?': { + x_min: 45, + x_max: 548, + y_min: -17, + y_max: 767, + ha: 784, + leftSideBearing: 45, + advanceWidth: 592, + }, + '@': { + x_min: 51, + x_max: 730, + y_min: -78, + y_max: 753, + ha: 831, + leftSideBearing: 51, + advanceWidth: 781, + }, + A: { + x_min: 37, + x_max: 554, + y_min: -4, + y_max: 746, + ha: 750, + leftSideBearing: 37, + advanceWidth: 617, + }, + B: { + x_min: 37, + x_max: 532, + y_min: 3, + y_max: 783, + ha: 780, + leftSideBearing: 37, + advanceWidth: 579, + }, + C: { + x_min: 37, + x_max: 583, + y_min: -3, + y_max: 775, + ha: 778, + leftSideBearing: 37, + advanceWidth: 623, + }, + D: { + x_min: 50, + x_max: 530, + y_min: -15, + y_max: 749, + ha: 764, + leftSideBearing: 50, + advanceWidth: 579, + }, + E: { + x_min: 45, + x_max: 531, + y_min: -1, + y_max: 743, + ha: 744, + leftSideBearing: 45, + advanceWidth: 585, + }, + F: { + x_min: 45, + x_max: 459, + y_min: 23, + y_max: 727, + ha: 704, + leftSideBearing: 45, + advanceWidth: 510, + }, + G: { + x_min: 31, + x_max: 577, + y_min: -8, + y_max: 733, + ha: 741, + leftSideBearing: 31, + advanceWidth: 611, + }, + H: { + x_min: 37, + x_max: 493, + y_min: -22, + y_max: 758, + ha: 780, + leftSideBearing: 37, + advanceWidth: 535, + }, + I: { + x_min: 47, + x_max: 501, + y_min: -3, + y_max: 731, + ha: 734, + leftSideBearing: 47, + advanceWidth: 541, + }, + J: { + x_min: 33, + x_max: 531, + y_min: -23, + y_max: 725, + ha: 748, + leftSideBearing: 33, + advanceWidth: 573, + }, + K: { + x_min: 43, + x_max: 505, + y_min: -10, + y_max: 740, + ha: 750, + leftSideBearing: 43, + advanceWidth: 560, + }, + L: { + x_min: 49, + x_max: 457, + y_min: -2, + y_max: 746, + ha: 748, + leftSideBearing: 49, + advanceWidth: 510, + }, + M: { + x_min: 35, + x_max: 699, + y_min: 1, + y_max: 744, + ha: 743, + leftSideBearing: 35, + advanceWidth: 743, + }, + N: { + x_min: 34, + x_max: 533, + y_min: -17, + y_max: 761, + ha: 778, + leftSideBearing: 34, + advanceWidth: 579, + }, + O: { + x_min: 41, + x_max: 608, + y_min: -5, + y_max: 735, + ha: 740, + leftSideBearing: 41, + advanceWidth: 667, + }, + P: { + x_min: 53, + x_max: 451, + y_min: -18, + y_max: 735, + ha: 753, + leftSideBearing: 53, + advanceWidth: 497, + }, + Q: { + x_min: 40, + x_max: 599, + y_min: -67, + y_max: 744, + ha: 811, + leftSideBearing: 40, + advanceWidth: 648, + }, + R: { + x_min: 39, + x_max: 487, + y_min: 16, + y_max: 735, + ha: 719, + leftSideBearing: 39, + advanceWidth: 535, + }, + S: { + x_min: 35, + x_max: 552, + y_min: -47, + y_max: 708, + ha: 755, + leftSideBearing: 35, + advanceWidth: 604, + }, + T: { + x_min: 26, + x_max: 656, + y_min: -13, + y_max: 718, + ha: 731, + leftSideBearing: 26, + advanceWidth: 705, + }, + U: { + x_min: 41, + x_max: 518, + y_min: -20, + y_max: 748, + ha: 768, + leftSideBearing: 41, + advanceWidth: 567, + }, + V: { + x_min: 47, + x_max: 509, + y_min: -26, + y_max: 744, + ha: 770, + leftSideBearing: 47, + advanceWidth: 567, + }, + W: { + x_min: 44, + x_max: 789, + y_min: -35, + y_max: 720, + ha: 755, + leftSideBearing: 44, + advanceWidth: 833, + }, + X: { + x_min: 63, + x_max: 635, + y_min: -10, + y_max: 745, + ha: 755, + leftSideBearing: 63, + advanceWidth: 680, + }, + Y: { + x_min: 43, + x_max: 503, + y_min: -21, + y_max: 734, + ha: 755, + leftSideBearing: 43, + advanceWidth: 541, + }, + Z: { + x_min: 42, + x_max: 584, + y_min: -10, + y_max: 739, + ha: 749, + leftSideBearing: 42, + advanceWidth: 629, + }, + '[': { + x_min: 46, + x_max: 346, + y_min: -150, + y_max: 884, + ha: 1034, + leftSideBearing: 46, + advanceWidth: 291, + }, + '\\': { + x_min: 20, + x_max: 616, + y_min: -100, + y_max: 797, + ha: 897, + leftSideBearing: 20, + advanceWidth: 645, + }, + ']': { + x_min: -76, + x_max: 226, + y_min: -150, + y_max: 881, + ha: 1031, + leftSideBearing: -76, + advanceWidth: 297, + }, + '^': { + x_min: 43, + x_max: 437, + y_min: 517, + y_max: 812, + ha: 295, + leftSideBearing: 43, + advanceWidth: 478, + }, + _: { + x_min: 29, + x_max: 563, + y_min: -110, + y_max: -1, + ha: 109, + leftSideBearing: 29, + advanceWidth: 598, + }, + '`': { + x_min: 54, + x_max: 321, + y_min: 540, + y_max: 747, + ha: 207, + leftSideBearing: 54, + advanceWidth: 368, + }, + a: { + x_min: 20, + x_max: 447, + y_min: -17, + y_max: 495, + ha: 512, + leftSideBearing: 20, + advanceWidth: 494, + }, + b: { + x_min: 37, + x_max: 466, + y_min: -27, + y_max: 770, + ha: 797, + leftSideBearing: 37, + advanceWidth: 510, + }, + c: { + x_min: 35, + x_max: 456, + y_min: -9, + y_max: 507, + ha: 516, + leftSideBearing: 35, + advanceWidth: 460, + }, + d: { + x_min: 45, + x_max: 520, + y_min: -15, + y_max: 764, + ha: 779, + leftSideBearing: 45, + advanceWidth: 560, + }, + e: { + x_min: 33, + x_max: 370, + y_min: -5, + y_max: 501, + ha: 506, + leftSideBearing: 33, + advanceWidth: 397, + }, + f: { + x_min: 35, + x_max: 411, + y_min: -13, + y_max: 695, + ha: 708, + leftSideBearing: 35, + advanceWidth: 453, + }, + g: { + x_min: 33, + x_max: 551, + y_min: -257, + y_max: 505, + ha: 762, + leftSideBearing: 33, + advanceWidth: 611, + }, + h: { + x_min: 32, + x_max: 458, + y_min: -29, + y_max: 743, + ha: 772, + leftSideBearing: 32, + advanceWidth: 491, + }, + i: { + x_min: 45, + x_max: 167, + y_min: -13, + y_max: 631, + ha: 644, + leftSideBearing: 45, + advanceWidth: 220, + }, + j: { + x_min: -127, + x_max: 261, + y_min: -231, + y_max: 601, + ha: 832, + leftSideBearing: -127, + advanceWidth: 308, + }, + k: { + x_min: 39, + x_max: 443, + y_min: -3, + y_max: 700, + ha: 703, + leftSideBearing: 39, + advanceWidth: 497, + }, + l: { + x_min: 58, + x_max: 168, + y_min: -8, + y_max: 686, + ha: 694, + leftSideBearing: 58, + advanceWidth: 227, + }, + m: { + x_min: 39, + x_max: 688, + y_min: -14, + y_max: 501, + ha: 515, + leftSideBearing: 39, + advanceWidth: 718, + }, + n: { + x_min: 45, + x_max: 491, + y_min: -32, + y_max: 512, + ha: 544, + leftSideBearing: 45, + advanceWidth: 541, + }, + o: { + x_min: 41, + x_max: 424, + y_min: -12, + y_max: 493, + ha: 505, + leftSideBearing: 41, + advanceWidth: 447, + }, + p: { + x_min: 25, + x_max: 529, + y_min: -260, + y_max: 500, + ha: 760, + leftSideBearing: 25, + advanceWidth: 573, + }, + q: { + x_min: 53, + x_max: 603, + y_min: -235, + y_max: 514, + ha: 749, + leftSideBearing: 53, + advanceWidth: 623, + }, + r: { + x_min: 32, + x_max: 407, + y_min: -7, + y_max: 492, + ha: 499, + leftSideBearing: 32, + advanceWidth: 460, + }, + s: { + x_min: 49, + x_max: 416, + y_min: -12, + y_max: 519, + ha: 531, + leftSideBearing: 49, + advanceWidth: 460, + }, + t: { + x_min: 32, + x_max: 442, + y_min: -5, + y_max: 684, + ha: 689, + leftSideBearing: 32, + advanceWidth: 469, + }, + u: { + x_min: 41, + x_max: 487, + y_min: -5, + y_max: 507, + ha: 512, + leftSideBearing: 41, + advanceWidth: 510, + }, + v: { + x_min: 16, + x_max: 441, + y_min: -20, + y_max: 542, + ha: 562, + leftSideBearing: 16, + advanceWidth: 456, + }, + w: { + x_min: 39, + x_max: 639, + y_min: -22, + y_max: 505, + ha: 527, + leftSideBearing: 39, + advanceWidth: 661, + }, + x: { + x_min: 15, + x_max: 505, + y_min: -39, + y_max: 539, + ha: 578, + leftSideBearing: 15, + advanceWidth: 541, + }, + y: { + x_min: -98, + x_max: 501, + y_min: -242, + y_max: 511, + ha: 753, + leftSideBearing: -98, + advanceWidth: 548, + }, + z: { + x_min: 27, + x_max: 479, + y_min: -3, + y_max: 494, + ha: 497, + leftSideBearing: 27, + advanceWidth: 494, + }, + '{': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '|': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '}': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + '~': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 308, + }, + }, + fontFamily: 'PetalumaScript', + resolution: 1000, + generatedOn: '2020-06-14T18:33:25.407Z', +}; diff --git a/build/esm/src/fonts/robotoslab_glyphs.js b/build/esm/src/fonts/robotoslab_glyphs.js new file mode 100644 index 0000000000..e7f8b1d3e9 --- /dev/null +++ b/build/esm/src/fonts/robotoslab_glyphs.js @@ -0,0 +1,863 @@ +export const RobotoSlabFont = { + spacing: 50, + glyphs: { + ' ': { + x_min: 0, + x_max: 509, + y_min: 0, + y_max: 2000, + ha: 2000, + leftSideBearing: 0, + advanceWidth: 509, + }, + '0': { + x_min: 121, + x_max: 1048, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 121, + advanceWidth: 1168, + }, + '1': { + x_min: 117, + x_max: 767, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 117, + advanceWidth: 844, + }, + '2': { + x_min: 75.8474576645637, + x_max: 1040, + y_min: 0, + y_max: 1477, + ha: 1477, + leftSideBearing: 75, + advanceWidth: 1131, + }, + '3': { + x_min: 74.85365853658536, + x_max: 994, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 74, + advanceWidth: 1106, + }, + '4': { + x_min: 63, + x_max: 1114, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 63, + advanceWidth: 1187, + }, + '5': { + x_min: 96.8448275474953, + x_max: 982, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 96, + advanceWidth: 1081, + }, + '6': { + x_min: 121, + x_max: 1067, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 121, + advanceWidth: 1144, + }, + '7': { + x_min: 76, + x_max: 1060, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: -30, + advanceWidth: 1128, + }, + '8': { + x_min: 92, + x_max: 1039, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 92, + advanceWidth: 1131, + }, + '9': { + x_min: 84, + x_max: 1026, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 84, + advanceWidth: 1154, + }, + '!': { + x_min: 143, + x_max: 340, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 143, + advanceWidth: 483, + }, + '"': { + x_min: 166, + x_max: 634, + y_min: 1055, + y_max: 1560, + ha: 505, + leftSideBearing: 166, + advanceWidth: 770, + }, + '#': { + x_min: 63, + x_max: 1179, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 63, + advanceWidth: 1246, + }, + $: { + x_min: 81.92156915727656, + x_max: 1012, + y_min: -208, + y_max: 1693, + ha: 1901, + leftSideBearing: 81, + advanceWidth: 1110, + }, + '%': { + x_min: 77, + x_max: 1384, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 77, + advanceWidth: 1460, + }, + '&': { + x_min: 74, + x_max: 1242, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 74, + advanceWidth: 1289, + }, + "'": { + x_min: 166, + x_max: 324, + y_min: 1055, + y_max: 1560, + ha: 505, + leftSideBearing: 166, + advanceWidth: 460, + }, + '(': { + x_min: 114, + x_max: 650, + y_min: -463, + y_max: 1636, + ha: 2099, + leftSideBearing: 114, + advanceWidth: 662, + }, + ')': { + x_min: 11, + x_max: 547, + y_min: -463, + y_max: 1636, + ha: 2099, + leftSideBearing: 11, + advanceWidth: 654, + }, + '*': { + x_min: 66, + x_max: 893, + y_min: 607, + y_max: 1456, + ha: 849, + leftSideBearing: 66, + advanceWidth: 958, + }, + '+': { + x_min: 73, + x_max: 1071, + y_min: 146, + y_max: 1206, + ha: 1060, + leftSideBearing: 73, + advanceWidth: 1145, + }, + ',': { + x_min: 23, + x_max: 315, + y_min: -311, + y_max: 221, + ha: 532, + leftSideBearing: 23, + advanceWidth: 404, + }, + '-': { + x_min: 154, + x_max: 643, + y_min: 538, + y_max: 692, + ha: 154, + leftSideBearing: 154, + advanceWidth: 797, + }, + '.': { + x_min: 145, + x_max: 342, + y_min: 0, + y_max: 202, + ha: 202, + leftSideBearing: 145, + advanceWidth: 493, + }, + '/': { + x_min: 0, + x_max: 774, + y_min: -125, + y_max: 1456, + ha: 1581, + leftSideBearing: 0, + advanceWidth: 824, + }, + ':': { + x_min: 145, + x_max: 342, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 145, + advanceWidth: 419, + }, + ';': { + x_min: 53, + x_max: 345, + y_min: -311, + y_max: 1082, + ha: 1393, + leftSideBearing: 53, + advanceWidth: 424, + }, + '<': { + x_min: 76, + x_max: 892, + y_min: 107, + y_max: 1013, + ha: 906, + leftSideBearing: 76, + advanceWidth: 1017, + }, + '=': { + x_min: 147, + x_max: 981, + y_min: 407, + y_max: 987, + ha: 580, + leftSideBearing: 147, + advanceWidth: 1127, + }, + '>': { + x_min: 125, + x_max: 980, + y_min: 87, + y_max: 993, + ha: 906, + leftSideBearing: 125, + advanceWidth: 1060, + }, + '?': { + x_min: 65.92660602419838, + x_max: 890, + y_min: 0, + y_max: 1477, + ha: 1477, + leftSideBearing: 65, + advanceWidth: 953, + }, + '@': { + x_min: 84.3592218305664, + x_max: 1705.2346925277395, + y_min: -453, + y_max: 1431, + ha: 1884, + leftSideBearing: 84, + advanceWidth: 1821, + }, + A: { + x_min: 70, + x_max: 1463, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 70, + advanceWidth: 1533, + }, + B: { + x_min: 81, + x_max: 1253, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1322, + }, + C: { + x_min: 80, + x_max: 1174, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 80, + advanceWidth: 1290, + }, + D: { + x_min: 81, + x_max: 1291, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1356, + }, + E: { + x_min: 81, + x_max: 1190, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1306, + }, + F: { + x_min: 81, + x_max: 1176, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1256, + }, + G: { + x_min: 80, + x_max: 1226, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 80, + advanceWidth: 1346, + }, + H: { + x_min: 81, + x_max: 1497, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1578, + }, + I: { + x_min: 81, + x_max: 604, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 685, + }, + J: { + x_min: 60, + x_max: 1100, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 60, + advanceWidth: 1169, + }, + K: { + x_min: 81, + x_max: 1427, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1501, + }, + L: { + x_min: 81, + x_max: 1130, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1210, + }, + M: { + x_min: 94, + x_max: 1888, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 94, + advanceWidth: 1982, + }, + N: { + x_min: 83, + x_max: 1509, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 83, + advanceWidth: 1592, + }, + O: { + x_min: 70, + x_max: 1281, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 70, + advanceWidth: 1351, + }, + P: { + x_min: 81, + x_max: 1242, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 81, + advanceWidth: 1297, + }, + Q: { + x_min: 70, + x_max: 1348, + y_min: -245, + y_max: 1477, + ha: 1722, + leftSideBearing: 70, + advanceWidth: 1376, + }, + R: { + x_min: 81, + x_max: 1285, + y_min: 0, + y_max: 1455, + ha: 1455, + leftSideBearing: 81, + advanceWidth: 1385, + }, + S: { + x_min: 115, + x_max: 1116, + y_min: -21, + y_max: 1477, + ha: 1498, + leftSideBearing: 115, + advanceWidth: 1206, + }, + T: { + x_min: 96, + x_max: 1306, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 96, + advanceWidth: 1406, + }, + U: { + x_min: 70, + x_max: 1452, + y_min: -21, + y_max: 1456, + ha: 1477, + leftSideBearing: 70, + advanceWidth: 1522, + }, + V: { + x_min: 65, + x_max: 1443, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 65, + advanceWidth: 1508, + }, + W: { + x_min: 72, + x_max: 2057, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 72, + advanceWidth: 2129, + }, + X: { + x_min: 80, + x_max: 1449, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 80, + advanceWidth: 1529, + }, + Y: { + x_min: 65, + x_max: 1396, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 65, + advanceWidth: 1461, + }, + Z: { + x_min: 90, + x_max: 1107, + y_min: 0, + y_max: 1456, + ha: 1456, + leftSideBearing: 90, + advanceWidth: 1197, + }, + '[': { + x_min: 157, + x_max: 541, + y_min: -312, + y_max: 1664, + ha: 1976, + leftSideBearing: 157, + advanceWidth: 573, + }, + '\\': { + x_min: 36, + x_max: 830, + y_min: -125, + y_max: 1456, + ha: 1581, + leftSideBearing: 36, + advanceWidth: 841, + }, + ']': { + x_min: 23, + x_max: 408, + y_min: -312, + y_max: 1664, + ha: 1976, + leftSideBearing: 23, + advanceWidth: 552, + }, + '^': { + x_min: 71, + x_max: 802, + y_min: 729, + y_max: 1456, + ha: 727, + leftSideBearing: 71, + advanceWidth: 864, + }, + _: { + x_min: 119, + x_max: 1041, + y_min: -154, + y_max: 0, + ha: 154, + leftSideBearing: 119, + advanceWidth: 1168, + }, + '`': { + x_min: 40, + x_max: 456, + y_min: 1288, + y_max: 1560, + ha: 272, + leftSideBearing: 40, + advanceWidth: 496, + }, + a: { + x_min: 79, + x_max: 1053, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 79, + advanceWidth: 1132, + }, + b: { + x_min: -16, + x_max: 1071, + y_min: -21, + y_max: 1560, + ha: 1581, + leftSideBearing: -16, + advanceWidth: 1145, + }, + c: { + x_min: 78, + x_max: 988, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 78, + advanceWidth: 1067, + }, + d: { + x_min: 78, + x_max: 1156, + y_min: -21, + y_max: 1560, + ha: 1581, + leftSideBearing: 78, + advanceWidth: 1218, + }, + e: { + x_min: 74, + x_max: 980, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 74, + advanceWidth: 1059, + }, + f: { + x_min: 64, + x_max: 731, + y_min: 0, + y_max: 1581, + ha: 1581, + leftSideBearing: 64, + advanceWidth: 725, + }, + g: { + x_min: 78, + x_max: 1133, + y_min: -437, + y_max: 1102, + ha: 1539, + leftSideBearing: 78, + advanceWidth: 1157, + }, + h: { + x_min: 49, + x_max: 1255, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 49, + advanceWidth: 1315, + }, + i: { + x_min: 67, + x_max: 590, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 67, + advanceWidth: 652, + }, + j: { + x_min: -56, + x_max: 381, + y_min: -437, + y_max: 1560, + ha: 1997, + leftSideBearing: -56, + advanceWidth: 525, + }, + k: { + x_min: 64, + x_max: 1248, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 64, + advanceWidth: 1287, + }, + l: { + x_min: 64, + x_max: 587, + y_min: 0, + y_max: 1560, + ha: 1560, + leftSideBearing: 64, + advanceWidth: 653, + }, + m: { + x_min: 74, + x_max: 1905, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 74, + advanceWidth: 1977, + }, + n: { + x_min: 74, + x_max: 1278, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 74, + advanceWidth: 1343, + }, + o: { + x_min: 78, + x_max: 1046, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 78, + advanceWidth: 1124, + }, + p: { + x_min: 34, + x_max: 1119, + y_min: -416, + y_max: 1102, + ha: 1518, + leftSideBearing: 34, + advanceWidth: 1197, + }, + q: { + x_min: 78, + x_max: 1135, + y_min: -416, + y_max: 1102, + ha: 1518, + leftSideBearing: 78, + advanceWidth: 1139, + }, + r: { + x_min: 72, + x_max: 808, + y_min: 0, + y_max: 1102, + ha: 1102, + leftSideBearing: 72, + advanceWidth: 854, + }, + s: { + x_min: 104, + x_max: 933, + y_min: -21, + y_max: 1102, + ha: 1123, + leftSideBearing: 104, + advanceWidth: 1022, + }, + t: { + x_min: 24, + x_max: 678, + y_min: -17, + y_max: 1343, + ha: 1360, + leftSideBearing: 24, + advanceWidth: 730, + }, + u: { + x_min: 52, + x_max: 1181, + y_min: -21, + y_max: 1082, + ha: 1103, + leftSideBearing: 52, + advanceWidth: 1245, + }, + v: { + x_min: 26, + x_max: 1176, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 26, + advanceWidth: 1206, + }, + w: { + x_min: 52, + x_max: 1777, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 52, + advanceWidth: 1823, + }, + x: { + x_min: 42, + x_max: 1163, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 42, + advanceWidth: 1203, + }, + y: { + x_min: 24, + x_max: 1172, + y_min: -437, + y_max: 1082, + ha: 1519, + leftSideBearing: 24, + advanceWidth: 1192, + }, + z: { + x_min: 88, + x_max: 960, + y_min: 0, + y_max: 1082, + ha: 1082, + leftSideBearing: 88, + advanceWidth: 1032, + }, + '{': { + x_min: 63, + x_max: 671, + y_min: -364, + y_max: 1597, + ha: 1961, + leftSideBearing: 63, + advanceWidth: 701, + }, + '|': { + x_min: 150, + x_max: 307, + y_min: -270, + y_max: 1456, + ha: 1726, + leftSideBearing: 150, + advanceWidth: 451, + }, + '}': { + x_min: 27, + x_max: 635, + y_min: -364, + y_max: 1597, + ha: 1961, + leftSideBearing: 27, + advanceWidth: 701, + }, + '~': { + x_min: 121, + x_max: 1257, + y_min: 401, + y_max: 803, + ha: 402, + leftSideBearing: 121, + advanceWidth: 1386, + }, + }, + fontFamily: 'Roboto Slab', + resolution: 2048, + generatedOn: '2020-06-15T19:12:58.120Z', +}; diff --git a/build/esm/src/fonts/sans_bold_text_metrics.js b/build/esm/src/fonts/sans_bold_text_metrics.js new file mode 100644 index 0000000000..350031ffe1 --- /dev/null +++ b/build/esm/src/fonts/sans_bold_text_metrics.js @@ -0,0 +1,862 @@ +export const SansFontBold = { + glyphs: { + '0': { + x_min: 86, + x_max: 1038, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 86, + advanceWidth: 1139, + }, + '1': { + x_min: 162, + x_max: 806, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 162, + advanceWidth: 1139, + }, + '2': { + x_min: 51, + x_max: 1036, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 51, + advanceWidth: 1139, + }, + '3': { + x_min: 77, + x_max: 1051, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 77, + advanceWidth: 1139, + }, + '4': { + x_min: 38, + x_max: 1092, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 38, + advanceWidth: 1139, + }, + '5': { + x_min: 91, + x_max: 1077, + y_min: -25, + y_max: 1446, + ha: 1471, + leftSideBearing: 91, + advanceWidth: 1139, + }, + '6': { + x_min: 87, + x_max: 1066, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 87, + advanceWidth: 1139, + }, + '7': { + x_min: 87, + x_max: 1048, + y_min: 0, + y_max: 1446, + ha: 1446, + leftSideBearing: 87, + advanceWidth: 1139, + }, + '8': { + x_min: 83, + x_max: 1047, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 83, + advanceWidth: 1139, + }, + '9': { + x_min: 65, + x_max: 1044, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 65, + advanceWidth: 1139, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 569, + }, + '!': { + x_min: 184, + x_max: 488, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 184, + advanceWidth: 682, + }, + '"': { + x_min: 112, + x_max: 869, + y_min: 945, + y_max: 1466, + ha: 521, + leftSideBearing: 112, + advanceWidth: 971, + }, + '#': { + x_min: 18, + x_max: 1115, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 18, + advanceWidth: 1139, + }, + $: { + x_min: 70, + x_max: 1048, + y_min: -205, + y_max: 1584, + ha: 1789, + leftSideBearing: 70, + advanceWidth: 1139, + }, + '%': { + x_min: 89, + x_max: 1725, + y_min: -59, + y_max: 1491, + ha: 1550, + leftSideBearing: 89, + advanceWidth: 1821, + }, + '&': { + x_min: 90, + x_max: 1446, + y_min: -38, + y_max: 1491, + ha: 1529, + leftSideBearing: 90, + advanceWidth: 1479, + }, + "'": { + x_min: 92, + x_max: 398, + y_min: 945, + y_max: 1466, + ha: 521, + leftSideBearing: 92, + advanceWidth: 487, + }, + '(': { + x_min: 107, + x_max: 616, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 107, + advanceWidth: 682, + }, + ')': { + x_min: 67, + x_max: 576, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 67, + advanceWidth: 682, + }, + '*': { + x_min: 28, + x_max: 753, + y_min: 792, + y_max: 1491, + ha: 699, + leftSideBearing: 28, + advanceWidth: 797, + }, + '+': { + x_min: 85, + x_max: 1110, + y_min: 211, + y_max: 1236, + ha: 1025, + leftSideBearing: 85, + advanceWidth: 1196, + }, + ',': { + x_min: 117, + x_max: 421, + y_min: -327, + y_max: 281, + ha: 608, + leftSideBearing: 117, + advanceWidth: 569, + }, + '-': { + x_min: 115, + x_max: 667, + y_min: 391, + y_max: 672, + ha: 281, + leftSideBearing: 115, + advanceWidth: 682, + }, + '.': { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 281, + ha: 281, + leftSideBearing: 147, + advanceWidth: 569, + }, + '/': { + x_min: -3, + x_max: 571, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: -3, + advanceWidth: 569, + }, + ':': { + x_min: 201, + x_max: 482, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 201, + advanceWidth: 682, + }, + ';': { + x_min: 170, + x_max: 474, + y_min: -327, + y_max: 1062, + ha: 1389, + leftSideBearing: 170, + advanceWidth: 682, + }, + '<': { + x_min: 95, + x_max: 1100, + y_min: 167, + y_max: 1281, + ha: 1114, + leftSideBearing: 95, + advanceWidth: 1196, + }, + '=': { + x_min: 85, + x_max: 1110, + y_min: 372, + y_max: 1074, + ha: 702, + leftSideBearing: 85, + advanceWidth: 1196, + }, + '>': { + x_min: 95, + x_max: 1101, + y_min: 166, + y_max: 1279, + ha: 1113, + leftSideBearing: 95, + advanceWidth: 1196, + }, + '?': { + x_min: 106, + x_max: 1158, + y_min: 0, + y_max: 1481, + ha: 1481, + leftSideBearing: 106, + advanceWidth: 1251, + }, + '@': { + x_min: 61, + x_max: 1990, + y_min: -431, + y_max: 1492, + ha: 1923, + leftSideBearing: 61, + advanceWidth: 1997, + }, + A: { + x_min: 0, + x_max: 1471, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 0, + advanceWidth: 1479, + }, + B: { + x_min: 150, + x_max: 1378, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + C: { + x_min: 97, + x_max: 1374, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 97, + advanceWidth: 1479, + }, + D: { + x_min: 148, + x_max: 1377, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 148, + advanceWidth: 1479, + }, + E: { + x_min: 149, + x_max: 1264, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 149, + advanceWidth: 1366, + }, + F: { + x_min: 151, + x_max: 1156, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 151, + advanceWidth: 1251, + }, + G: { + x_min: 98, + x_max: 1469, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 98, + advanceWidth: 1593, + }, + H: { + x_min: 150, + x_max: 1322, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + I: { + x_min: 140, + x_max: 436, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 140, + advanceWidth: 569, + }, + J: { + x_min: 35, + x_max: 973, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 35, + advanceWidth: 1139, + }, + K: { + x_min: 153, + x_max: 1475, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 153, + advanceWidth: 1479, + }, + L: { + x_min: 157, + x_max: 1189, + y_min: 0, + y_max: 1454, + ha: 1454, + leftSideBearing: 157, + advanceWidth: 1251, + }, + M: { + x_min: 145, + x_max: 1561, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 145, + advanceWidth: 1706, + }, + N: { + x_min: 152, + x_max: 1315, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 152, + advanceWidth: 1479, + }, + O: { + x_min: 89, + x_max: 1511, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 89, + advanceWidth: 1593, + }, + P: { + x_min: 149, + x_max: 1272, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 149, + advanceWidth: 1366, + }, + Q: { + x_min: 89, + x_max: 1566, + y_min: -147, + y_max: 1491, + ha: 1638, + leftSideBearing: 89, + advanceWidth: 1593, + }, + R: { + x_min: 150, + x_max: 1468, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1479, + }, + S: { + x_min: 74, + x_max: 1266, + y_min: -26, + y_max: 1491, + ha: 1517, + leftSideBearing: 74, + advanceWidth: 1366, + }, + T: { + x_min: 44, + x_max: 1209, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 44, + advanceWidth: 1251, + }, + U: { + x_min: 147, + x_max: 1316, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 147, + advanceWidth: 1479, + }, + V: { + x_min: -1, + x_max: 1364, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -1, + advanceWidth: 1366, + }, + W: { + x_min: 7, + x_max: 1931, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 7, + advanceWidth: 1933, + }, + X: { + x_min: 0, + x_max: 1363, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 0, + advanceWidth: 1366, + }, + Y: { + x_min: -3, + x_max: 1368, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -3, + advanceWidth: 1366, + }, + Z: { + x_min: 22, + x_max: 1213, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 22, + advanceWidth: 1251, + }, + '[': { + x_min: 146, + x_max: 644, + y_min: -413, + y_max: 1466, + ha: 1879, + leftSideBearing: 146, + advanceWidth: 682, + }, + '\\': { + x_min: -3, + x_max: 571, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: -3, + advanceWidth: 569, + }, + ']': { + x_min: 38, + x_max: 536, + y_min: -413, + y_max: 1466, + ha: 1879, + leftSideBearing: 38, + advanceWidth: 682, + }, + '^': { + x_min: 115, + x_max: 1080, + y_min: 692, + y_max: 1491, + ha: 799, + leftSideBearing: 115, + advanceWidth: 1196, + }, + _: { + x_min: -19, + x_max: 1149, + y_min: -405, + y_max: -223, + ha: 182, + leftSideBearing: -19, + advanceWidth: 1139, + }, + '`': { + x_min: 42, + x_max: 495, + y_min: 1192, + y_max: 1491, + ha: 299, + leftSideBearing: 42, + advanceWidth: 682, + }, + a: { + x_min: 73, + x_max: 1070, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 73, + advanceWidth: 1139, + }, + b: { + x_min: 135, + x_max: 1172, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 135, + advanceWidth: 1251, + }, + c: { + x_min: 85, + x_max: 1087, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 85, + advanceWidth: 1139, + }, + d: { + x_min: 84, + x_max: 1121, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 84, + advanceWidth: 1251, + }, + e: { + x_min: 65, + x_max: 1057.2517482517483, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 65, + advanceWidth: 1139, + }, + f: { + x_min: 24, + x_max: 742, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 24, + advanceWidth: 682, + }, + g: { + x_min: 84, + x_max: 1120, + y_min: -431, + y_max: 1086, + ha: 1517, + leftSideBearing: 84, + advanceWidth: 1251, + }, + h: { + x_min: 146, + x_max: 1113, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 146, + advanceWidth: 1251, + }, + i: { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 147, + advanceWidth: 569, + }, + j: { + x_min: -94, + x_max: 422, + y_min: -431, + y_max: 1466, + ha: 1897, + leftSideBearing: -94, + advanceWidth: 569, + }, + k: { + x_min: 137, + x_max: 1119, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 137, + advanceWidth: 1139, + }, + l: { + x_min: 147, + x_max: 428, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 147, + advanceWidth: 569, + }, + m: { + x_min: 126, + x_max: 1688, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 126, + advanceWidth: 1821, + }, + n: { + x_min: 145, + x_max: 1113, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 145, + advanceWidth: 1251, + }, + o: { + x_min: 82, + x_max: 1178, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 82, + advanceWidth: 1251, + }, + p: { + x_min: 139, + x_max: 1175, + y_min: -404, + y_max: 1086, + ha: 1490, + leftSideBearing: 139, + advanceWidth: 1251, + }, + q: { + x_min: 91, + x_max: 1122, + y_min: -404, + y_max: 1086, + ha: 1490, + leftSideBearing: 91, + advanceWidth: 1251, + }, + r: { + x_min: 135, + x_max: 823, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 797, + }, + s: { + x_min: 48, + x_max: 1040, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 48, + advanceWidth: 1139, + }, + t: { + x_min: 31, + x_max: 657, + y_min: -24, + y_max: 1437, + ha: 1461, + leftSideBearing: 31, + advanceWidth: 682, + }, + u: { + x_min: 141, + x_max: 1107, + y_min: -24, + y_max: 1062, + ha: 1086, + leftSideBearing: 141, + advanceWidth: 1251, + }, + v: { + x_min: 11, + x_max: 1114, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 11, + advanceWidth: 1139, + }, + w: { + x_min: 9, + x_max: 1592, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 9, + advanceWidth: 1593, + }, + x: { + x_min: 12, + x_max: 1120, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 12, + advanceWidth: 1139, + }, + y: { + x_min: 14, + x_max: 1106, + y_min: -431, + y_max: 1062, + ha: 1493, + leftSideBearing: 14, + advanceWidth: 1139, + }, + z: { + x_min: 34, + x_max: 982, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 34, + advanceWidth: 1024, + }, + '{': { + x_min: 60, + x_max: 744, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 60, + advanceWidth: 797, + }, + '|': { + x_min: 176, + x_max: 399, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 176, + advanceWidth: 573, + }, + '}': { + x_min: 45, + x_max: 729, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 45, + advanceWidth: 797, + }, + '~': { + x_min: 67, + x_max: 1129, + y_min: 519, + y_max: 924, + ha: 405, + leftSideBearing: 67, + advanceWidth: 1196, + }, + }, + fontFamily: 'Arial', + resolution: 2048, + generatedOn: '2022-11-04T20:05:21.000Z', +}; diff --git a/build/esm/src/fonts/sans_text_metrics.js b/build/esm/src/fonts/sans_text_metrics.js new file mode 100644 index 0000000000..bb6d9affcd --- /dev/null +++ b/build/esm/src/fonts/sans_text_metrics.js @@ -0,0 +1,870 @@ +export const SansFont = { + smufl: false, + name: 'SANS', + spacing: 50, + Description: 'Built-in sans-serif font', + bold: true, + italic: true, + monospaced: false, + serifs: false, + glyphs: { + '0': { + x_min: 85, + x_max: 1041, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 85, + advanceWidth: 1139, + }, + '1': { + x_min: 223, + x_max: 763, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 223, + advanceWidth: 1139, + }, + '2': { + x_min: 61.840001123045234, + x_max: 1031, + y_min: 0, + y_max: 1472, + ha: 1472, + leftSideBearing: 61, + advanceWidth: 1139, + }, + '3': { + x_min: 86, + x_max: 1046, + y_min: -26, + y_max: 1472, + ha: 1498, + leftSideBearing: 86, + advanceWidth: 1139, + }, + '4': { + x_min: 26, + x_max: 1040, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 26, + advanceWidth: 1139, + }, + '5': { + x_min: 85, + x_max: 1057, + y_min: -25, + y_max: 1446, + ha: 1471, + leftSideBearing: 85, + advanceWidth: 1139, + }, + '6': { + x_min: 77, + x_max: 1045, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 77, + advanceWidth: 1139, + }, + '7': { + x_min: 97, + x_max: 1046, + y_min: 0, + y_max: 1447, + ha: 1447, + leftSideBearing: 97, + advanceWidth: 1139, + }, + '8': { + x_min: 83, + x_max: 1049, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 83, + advanceWidth: 1139, + }, + '9': { + x_min: 85, + x_max: 1049, + y_min: -25, + y_max: 1472, + ha: 1497, + leftSideBearing: 85, + advanceWidth: 1139, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 569, + }, + '!': { + x_min: 176, + x_max: 399, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 176, + advanceWidth: 569, + }, + '"': { + x_min: 94, + x_max: 631, + y_min: 947, + y_max: 1466, + ha: 519, + leftSideBearing: 94, + advanceWidth: 727, + }, + '#': { + x_min: 21, + x_max: 1113, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 21, + advanceWidth: 1139, + }, + $: { + x_min: 73, + x_max: 1043, + y_min: -211, + y_max: 1601, + ha: 1812, + leftSideBearing: 73, + advanceWidth: 1139, + }, + '%': { + x_min: 119, + x_max: 1695, + y_min: -54, + y_max: 1491, + ha: 1545, + leftSideBearing: 119, + advanceWidth: 1821, + }, + '&': { + x_min: 88, + x_max: 1319, + y_min: -34, + y_max: 1491, + ha: 1525, + leftSideBearing: 88, + advanceWidth: 1366, + }, + "'": { + x_min: 90, + x_max: 295, + y_min: 947, + y_max: 1466, + ha: 519, + leftSideBearing: 90, + advanceWidth: 391, + }, + '(': { + x_min: 124, + x_max: 608, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 124, + advanceWidth: 682, + }, + ')': { + x_min: 124, + x_max: 608, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 124, + advanceWidth: 682, + }, + '*': { + x_min: 64, + x_max: 725, + y_min: 867, + y_max: 1491, + ha: 624, + leftSideBearing: 64, + advanceWidth: 797, + }, + '+': { + x_min: 114, + x_max: 1082, + y_min: 237, + y_max: 1206, + ha: 969, + leftSideBearing: 114, + advanceWidth: 1196, + }, + ',': { + x_min: 170, + x_max: 387, + y_min: -290, + y_max: 205, + ha: 495, + leftSideBearing: 170, + advanceWidth: 569, + }, + '-': { + x_min: 65, + x_max: 618, + y_min: 440, + y_max: 621, + ha: 181, + leftSideBearing: 65, + advanceWidth: 682, + }, + '.': { + x_min: 186, + x_max: 391, + y_min: 0, + y_max: 205, + ha: 205, + leftSideBearing: 186, + advanceWidth: 569, + }, + '/': { + x_min: 0, + x_max: 569, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 0, + advanceWidth: 569, + }, + ':': { + x_min: 185, + x_max: 390, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 185, + advanceWidth: 569, + }, + ';': { + x_min: 170, + x_max: 387, + y_min: -290, + y_max: 1062, + ha: 1352, + leftSideBearing: 170, + advanceWidth: 569, + }, + '<': { + x_min: 112, + x_max: 1083, + y_min: 226, + y_max: 1219, + ha: 993, + leftSideBearing: 112, + advanceWidth: 1196, + }, + '=': { + x_min: 114, + x_max: 1082, + y_min: 417, + y_max: 1030, + ha: 613, + leftSideBearing: 114, + advanceWidth: 1196, + }, + '>': { + x_min: 112, + x_max: 1083, + y_min: 226, + y_max: 1219, + ha: 993, + leftSideBearing: 112, + advanceWidth: 1196, + }, + '?': { + x_min: 90, + x_max: 1036, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 90, + advanceWidth: 1139, + }, + '@': { + x_min: 111, + x_max: 2005, + y_min: -431, + y_max: 1493, + ha: 1924, + leftSideBearing: 111, + advanceWidth: 2079, + }, + A: { + x_min: -3, + x_max: 1369, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: -3, + advanceWidth: 1366, + }, + B: { + x_min: 150, + x_max: 1257, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1366, + }, + C: { + x_min: 102, + x_max: 1398, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 102, + advanceWidth: 1479, + }, + D: { + x_min: 158, + x_max: 1370, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 158, + advanceWidth: 1479, + }, + E: { + x_min: 162, + x_max: 1256, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 162, + advanceWidth: 1366, + }, + F: { + x_min: 168, + x_max: 1157, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 168, + advanceWidth: 1251, + }, + G: { + x_min: 109, + x_max: 1465, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 109, + advanceWidth: 1593, + }, + H: { + x_min: 164, + x_max: 1314, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 164, + advanceWidth: 1479, + }, + I: { + x_min: 191, + x_max: 385, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 191, + advanceWidth: 569, + }, + J: { + x_min: 58.84976474807333, + x_max: 865, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 58, + advanceWidth: 1024, + }, + K: { + x_min: 150, + x_max: 1362, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1366, + }, + L: { + x_min: 150, + x_max: 1066, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 150, + advanceWidth: 1139, + }, + M: { + x_min: 152, + x_max: 1551, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 152, + advanceWidth: 1706, + }, + N: { + x_min: 156, + x_max: 1311, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 156, + advanceWidth: 1479, + }, + O: { + x_min: 99, + x_max: 1501, + y_min: -25, + y_max: 1492, + ha: 1517, + leftSideBearing: 99, + advanceWidth: 1593, + }, + P: { + x_min: 158, + x_max: 1277, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 158, + advanceWidth: 1366, + }, + Q: { + x_min: 88, + x_max: 1518, + y_min: -114, + y_max: 1492, + ha: 1606, + leftSideBearing: 88, + advanceWidth: 1593, + }, + R: { + x_min: 161, + x_max: 1453, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 161, + advanceWidth: 1479, + }, + S: { + x_min: 92, + x_max: 1259, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 92, + advanceWidth: 1366, + }, + T: { + x_min: 48, + x_max: 1210, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 48, + advanceWidth: 1251, + }, + U: { + x_min: 161, + x_max: 1314, + y_min: -25, + y_max: 1466, + ha: 1491, + leftSideBearing: 161, + advanceWidth: 1479, + }, + V: { + x_min: 9, + x_max: 1350, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 9, + advanceWidth: 1366, + }, + W: { + x_min: 25, + x_max: 1910, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 25, + advanceWidth: 1933, + }, + X: { + x_min: 9, + x_max: 1353, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 9, + advanceWidth: 1366, + }, + Y: { + x_min: 6, + x_max: 1350, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 6, + advanceWidth: 1366, + }, + Z: { + x_min: 41, + x_max: 1200, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 41, + advanceWidth: 1251, + }, + '[': { + x_min: 139, + x_max: 536, + y_min: -407, + y_max: 1466, + ha: 1873, + leftSideBearing: 139, + advanceWidth: 569, + }, + '\\': { + x_min: 0, + x_max: 569, + y_min: -25, + y_max: 1491, + ha: 1516, + leftSideBearing: 0, + advanceWidth: 569, + }, + ']': { + x_min: 39, + x_max: 436, + y_min: -407, + y_max: 1466, + ha: 1873, + leftSideBearing: 39, + advanceWidth: 569, + }, + '^': { + x_min: 54, + x_max: 907, + y_min: 690, + y_max: 1491, + ha: 801, + leftSideBearing: 54, + advanceWidth: 961, + }, + _: { + x_min: -31, + x_max: 1162, + y_min: -407, + y_max: -277, + ha: 130, + leftSideBearing: -31, + advanceWidth: 1139, + }, + '`': { + x_min: 89, + x_max: 465, + y_min: 1194, + y_max: 1474, + ha: 280, + leftSideBearing: 89, + advanceWidth: 682, + }, + a: { + x_min: 74, + x_max: 1052, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 74, + advanceWidth: 1139, + }, + b: { + x_min: 134, + x_max: 1055, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 134, + advanceWidth: 1139, + }, + c: { + x_min: 80, + x_max: 1005, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 80, + advanceWidth: 1024, + }, + d: { + x_min: 70, + x_max: 991, + y_min: -24, + y_max: 1466, + ha: 1490, + leftSideBearing: 70, + advanceWidth: 1139, + }, + e: { + x_min: 75, + x_max: 1054, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 75, + advanceWidth: 1139, + }, + f: { + x_min: 19, + x_max: 640, + y_min: 0, + y_max: 1491, + ha: 1491, + leftSideBearing: 19, + advanceWidth: 569, + }, + g: { + x_min: 66, + x_max: 1002, + y_min: -431, + y_max: 1086, + ha: 1517, + leftSideBearing: 66, + advanceWidth: 1139, + }, + h: { + x_min: 135, + x_max: 1000, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 135, + advanceWidth: 1139, + }, + i: { + x_min: 136, + x_max: 316, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 136, + advanceWidth: 455, + }, + j: { + x_min: -94, + x_max: 314, + y_min: -431, + y_max: 1466, + ha: 1897, + leftSideBearing: -94, + advanceWidth: 455, + }, + k: { + x_min: 136, + x_max: 1016, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 136, + advanceWidth: 1024, + }, + l: { + x_min: 131, + x_max: 311, + y_min: 0, + y_max: 1466, + ha: 1466, + leftSideBearing: 131, + advanceWidth: 455, + }, + m: { + x_min: 135, + x_max: 1574, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 1706, + }, + n: { + x_min: 135, + x_max: 998, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 135, + advanceWidth: 1139, + }, + o: { + x_min: 68, + x_max: 1063, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 68, + advanceWidth: 1139, + }, + p: { + x_min: 135, + x_max: 1057, + y_min: -407, + y_max: 1086, + ha: 1493, + leftSideBearing: 135, + advanceWidth: 1139, + }, + q: { + x_min: 72, + x_max: 992, + y_min: -407, + y_max: 1086, + ha: 1493, + leftSideBearing: 72, + advanceWidth: 1139, + }, + r: { + x_min: 133, + x_max: 710, + y_min: 0, + y_max: 1086, + ha: 1086, + leftSideBearing: 133, + advanceWidth: 682, + }, + s: { + x_min: 63, + x_max: 945, + y_min: -24, + y_max: 1086, + ha: 1110, + leftSideBearing: 63, + advanceWidth: 1024, + }, + t: { + x_min: 36, + x_max: 554, + y_min: -14, + y_max: 1433, + ha: 1447, + leftSideBearing: 36, + advanceWidth: 569, + }, + u: { + x_min: 131, + x_max: 992, + y_min: -24, + y_max: 1062, + ha: 1086, + leftSideBearing: 131, + advanceWidth: 1139, + }, + v: { + x_min: 26, + x_max: 1000, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 26, + advanceWidth: 1024, + }, + w: { + x_min: 6, + x_max: 1463, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 6, + advanceWidth: 1479, + }, + x: { + x_min: 15, + x_max: 1009, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 15, + advanceWidth: 1024, + }, + y: { + x_min: 33, + x_max: 1006, + y_min: -431, + y_max: 1062, + ha: 1493, + leftSideBearing: 33, + advanceWidth: 1024, + }, + z: { + x_min: 40, + x_max: 980, + y_min: 0, + y_max: 1062, + ha: 1062, + leftSideBearing: 40, + advanceWidth: 1024, + }, + '{': { + x_min: 57, + x_max: 636, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 57, + advanceWidth: 684, + }, + '|': { + x_min: 188, + x_max: 345, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 188, + advanceWidth: 532, + }, + '}': { + x_min: 47, + x_max: 626, + y_min: -431, + y_max: 1491, + ha: 1922, + leftSideBearing: 47, + advanceWidth: 684, + }, + '~': { + x_min: 87, + x_max: 1110, + y_min: 557, + y_max: 885, + ha: 328, + leftSideBearing: 87, + advanceWidth: 1196, + }, + }, + fontFamily: 'sans-serif', + resolution: 2048, + generatedOn: '2020-10-18T18:48:11.823Z', +}; diff --git a/build/esm/src/fonts/serif_text_metrics.js b/build/esm/src/fonts/serif_text_metrics.js new file mode 100644 index 0000000000..a2af7634f4 --- /dev/null +++ b/build/esm/src/fonts/serif_text_metrics.js @@ -0,0 +1,870 @@ +export const SerifFont = { + smufl: false, + name: 'SERIF', + spacing: 50, + Description: 'Built-in serif font', + bold: true, + italic: true, + monospaced: false, + serifs: true, + glyphs: { + '0': { + x_min: 49, + x_max: 975, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 49, + advanceWidth: 1024, + }, + '1': { + x_min: 227, + x_max: 811, + y_min: 0, + y_max: 1383, + ha: 1383, + leftSideBearing: 227, + advanceWidth: 1024, + }, + '2': { + x_min: 61, + x_max: 965, + y_min: 0, + y_max: 1383, + ha: 1383, + leftSideBearing: 61, + advanceWidth: 1024, + }, + '3': { + x_min: 88, + x_max: 883, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 88, + advanceWidth: 1024, + }, + '4': { + x_min: 25, + x_max: 967, + y_min: 0, + y_max: 1384, + ha: 1384, + leftSideBearing: 25, + advanceWidth: 1024, + }, + '5': { + x_min: 66, + x_max: 898, + y_min: -27, + y_max: 1409, + ha: 1436, + leftSideBearing: 66, + advanceWidth: 1024, + }, + '6': { + x_min: 70, + x_max: 958, + y_min: -27, + y_max: 1401, + ha: 1428, + leftSideBearing: 70, + advanceWidth: 1024, + }, + '7': { + x_min: 41, + x_max: 920, + y_min: -16, + y_max: 1356, + ha: 1372, + leftSideBearing: 41, + advanceWidth: 1024, + }, + '8': { + x_min: 115, + x_max: 911, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: 115, + advanceWidth: 1024, + }, + '9': { + x_min: 61, + x_max: 940, + y_min: -41, + y_max: 1383, + ha: 1424, + leftSideBearing: 61, + advanceWidth: 1024, + }, + ' ': { + x_min: 0, + x_max: 0, + y_min: 0, + y_max: 0, + ha: 0, + leftSideBearing: 0, + advanceWidth: 512, + }, + '!': { + x_min: 266, + x_max: 488, + y_min: -22, + y_max: 1383, + ha: 1405, + leftSideBearing: 266, + advanceWidth: 682, + }, + '"': { + x_min: 157.2000021972655, + x_max: 678.2500021457677, + y_min: 881, + y_max: 1385, + ha: 504, + leftSideBearing: 157, + advanceWidth: 836, + }, + '#': { + x_min: 10, + x_max: 1016, + y_min: -1, + y_max: 1356, + ha: 1357, + leftSideBearing: 10, + advanceWidth: 1024, + }, + $: { + x_min: 90, + x_max: 936, + y_min: -180, + y_max: 1492, + ha: 1672, + leftSideBearing: 90, + advanceWidth: 1024, + }, + '%': { + x_min: 125, + x_max: 1581, + y_min: -30, + y_max: 1388, + ha: 1418, + leftSideBearing: 125, + advanceWidth: 1706, + }, + '&': { + x_min: 86, + x_max: 1536, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 86, + advanceWidth: 1593, + }, + "'": { + x_min: 97.20000219726548, + x_max: 273.2500021457677, + y_min: 881, + y_max: 1385, + ha: 504, + leftSideBearing: 97, + advanceWidth: 369, + }, + '(': { + x_min: 98, + x_max: 623, + y_min: -363, + y_max: 1383, + ha: 1746, + leftSideBearing: 98, + advanceWidth: 682, + }, + ')': { + x_min: 59, + x_max: 584, + y_min: -363, + y_max: 1383, + ha: 1746, + leftSideBearing: 59, + advanceWidth: 682, + }, + '*': { + x_min: 137.96078522291893, + x_max: 886.039214777081, + y_min: 543, + y_max: 1383, + ha: 840, + leftSideBearing: 137, + advanceWidth: 1024, + }, + '+': { + x_min: 61, + x_max: 1093, + y_min: 2, + y_max: 1034, + ha: 1032, + leftSideBearing: 61, + advanceWidth: 1155, + }, + ',': { + x_min: 115, + x_max: 399, + y_min: -291, + y_max: 208, + ha: 499, + leftSideBearing: 115, + advanceWidth: 512, + }, + '-': { + x_min: 80, + x_max: 584, + y_min: 396, + y_max: 525, + ha: 129, + leftSideBearing: 80, + advanceWidth: 682, + }, + '.': { + x_min: 143, + x_max: 371, + y_min: -22, + y_max: 205, + ha: 227, + leftSideBearing: 143, + advanceWidth: 512, + }, + '/': { + x_min: -17, + x_max: 586, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: -17, + advanceWidth: 569, + }, + ':': { + x_min: 166, + x_max: 394, + y_min: -22, + y_max: 943, + ha: 965, + leftSideBearing: 166, + advanceWidth: 569, + }, + ';': { + x_min: 164, + x_max: 448, + y_min: -290, + y_max: 943, + ha: 1233, + leftSideBearing: 164, + advanceWidth: 569, + }, + '<': { + x_min: 57, + x_max: 1098, + y_min: -15, + y_max: 1051, + ha: 1066, + leftSideBearing: 57, + advanceWidth: 1155, + }, + '=': { + x_min: 61, + x_max: 1093, + y_min: 246, + y_max: 791, + ha: 545, + leftSideBearing: 61, + advanceWidth: 1155, + }, + '>': { + x_min: 57, + x_max: 1098, + y_min: -15, + y_max: 1051, + ha: 1066, + leftSideBearing: 57, + advanceWidth: 1155, + }, + '?': { + x_min: 139, + x_max: 848, + y_min: -15, + y_max: 1383, + ha: 1398, + leftSideBearing: 139, + advanceWidth: 909, + }, + '@': { + x_min: 238, + x_max: 1657, + y_min: -29, + y_max: 1386, + ha: 1415, + leftSideBearing: 238, + advanceWidth: 1886, + }, + A: { + x_min: 31, + x_max: 1445, + y_min: 0, + y_max: 1380, + ha: 1380, + leftSideBearing: 31, + advanceWidth: 1479, + }, + B: { + x_min: 35, + x_max: 1214, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1366, + }, + C: { + x_min: 57, + x_max: 1296, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 57, + advanceWidth: 1366, + }, + D: { + x_min: 33, + x_max: 1403, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 33, + advanceWidth: 1479, + }, + E: { + x_min: 25, + x_max: 1222, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1251, + }, + F: { + x_min: 25, + x_max: 1119, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1139, + }, + G: { + x_min: 66, + x_max: 1452, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 66, + advanceWidth: 1479, + }, + H: { + x_min: 39, + x_max: 1438, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 39, + advanceWidth: 1479, + }, + I: { + x_min: 37, + x_max: 642, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 37, + advanceWidth: 682, + }, + J: { + x_min: 20, + x_max: 758, + y_min: -28, + y_max: 1356, + ha: 1384, + leftSideBearing: 20, + advanceWidth: 797, + }, + K: { + x_min: 70, + x_max: 1479, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 70, + advanceWidth: 1479, + }, + L: { + x_min: 25, + x_max: 1224, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1251, + }, + M: { + x_min: 25, + x_max: 1768, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 25, + advanceWidth: 1821, + }, + N: { + x_min: 25, + x_max: 1450, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 25, + advanceWidth: 1479, + }, + O: { + x_min: 70, + x_max: 1409, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 70, + advanceWidth: 1479, + }, + P: { + x_min: 33, + x_max: 1110, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 33, + advanceWidth: 1139, + }, + Q: { + x_min: 70, + x_max: 1435, + y_min: -364.28571588721996, + y_max: 1383, + ha: 1747.28571588722, + leftSideBearing: 70, + advanceWidth: 1479, + }, + R: { + x_min: 35, + x_max: 1347, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1366, + }, + S: { + x_min: 86, + x_max: 1006, + y_min: -28, + y_max: 1383, + ha: 1411, + leftSideBearing: 86, + advanceWidth: 1139, + }, + T: { + x_min: 35, + x_max: 1214, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 35, + advanceWidth: 1251, + }, + U: { + x_min: 29, + x_max: 1444, + y_min: -28, + y_max: 1356, + ha: 1384, + leftSideBearing: 29, + advanceWidth: 1479, + }, + V: { + x_min: 33, + x_max: 1428, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 33, + advanceWidth: 1479, + }, + W: { + x_min: 10, + x_max: 1906, + y_min: -22, + y_max: 1356, + ha: 1378, + leftSideBearing: 10, + advanceWidth: 1933, + }, + X: { + x_min: 20, + x_max: 1449, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 20, + advanceWidth: 1479, + }, + Y: { + x_min: 45, + x_max: 1441, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 45, + advanceWidth: 1479, + }, + Z: { + x_min: 18, + x_max: 1222, + y_min: 0, + y_max: 1356, + ha: 1356, + leftSideBearing: 18, + advanceWidth: 1251, + }, + '[': { + x_min: 180, + x_max: 612, + y_min: -319, + y_max: 1355, + ha: 1674, + leftSideBearing: 180, + advanceWidth: 682, + }, + '\\': { + x_min: -17, + x_max: 586, + y_min: -27, + y_max: 1383, + ha: 1410, + leftSideBearing: -17, + advanceWidth: 569, + }, + ']': { + x_min: 70, + x_max: 502, + y_min: -319, + y_max: 1355, + ha: 1674, + leftSideBearing: 70, + advanceWidth: 682, + }, + '^': { + x_min: 49, + x_max: 914, + y_min: 608, + y_max: 1355, + ha: 747, + leftSideBearing: 49, + advanceWidth: 961, + }, + _: { + x_min: 0, + x_max: 1024, + y_min: -255, + y_max: -153, + ha: 102, + leftSideBearing: 0, + advanceWidth: 1024, + }, + '`': { + x_min: 39, + x_max: 499, + y_min: 1037, + y_max: 1392.509803639748, + ha: 355.50980363974804, + leftSideBearing: 39, + advanceWidth: 682, + }, + a: { + x_min: 76, + x_max: 905, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 76, + advanceWidth: 909, + }, + b: { + x_min: 6, + x_max: 958, + y_min: -20, + y_max: 1399, + ha: 1419, + leftSideBearing: 6, + advanceWidth: 1024, + }, + c: { + x_min: 51, + x_max: 843, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 51, + advanceWidth: 909, + }, + d: { + x_min: 55, + x_max: 1006, + y_min: -20, + y_max: 1399, + ha: 1419, + leftSideBearing: 55, + advanceWidth: 1024, + }, + e: { + x_min: 51, + x_max: 868, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 51, + advanceWidth: 909, + }, + f: { + x_min: 41, + x_max: 783, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 41, + advanceWidth: 682, + }, + g: { + x_min: 57, + x_max: 963, + y_min: -446, + y_max: 942, + ha: 1388, + leftSideBearing: 57, + advanceWidth: 1024, + }, + h: { + x_min: 18, + x_max: 997, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 18, + advanceWidth: 1024, + }, + i: { + x_min: 33, + x_max: 516, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 33, + advanceWidth: 569, + }, + j: { + x_min: -142, + x_max: 397, + y_min: -446, + y_max: 1399, + ha: 1845, + leftSideBearing: -142, + advanceWidth: 569, + }, + k: { + x_min: 14, + x_max: 1029, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 14, + advanceWidth: 1024, + }, + l: { + x_min: 39, + x_max: 523, + y_min: 0, + y_max: 1399, + ha: 1399, + leftSideBearing: 39, + advanceWidth: 569, + }, + m: { + x_min: 33, + x_max: 1587, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 33, + advanceWidth: 1593, + }, + n: { + x_min: 33, + x_max: 993, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 33, + advanceWidth: 1024, + }, + o: { + x_min: 59, + x_max: 963, + y_min: -20, + y_max: 942, + ha: 962, + leftSideBearing: 59, + advanceWidth: 1024, + }, + p: { + x_min: 10, + x_max: 964, + y_min: -443, + y_max: 944, + ha: 1387, + leftSideBearing: 10, + advanceWidth: 1024, + }, + q: { + x_min: 49, + x_max: 999, + y_min: -443, + y_max: 942.0135137169275, + ha: 1385.0135137169275, + leftSideBearing: 49, + advanceWidth: 1024, + }, + r: { + x_min: 10, + x_max: 685, + y_min: 0, + y_max: 944, + ha: 944, + leftSideBearing: 10, + advanceWidth: 682, + }, + s: { + x_min: 104, + x_max: 713, + y_min: -20, + y_max: 942.0263161804552, + ha: 962.0263161804552, + leftSideBearing: 104, + advanceWidth: 797, + }, + t: { + x_min: 27, + x_max: 572, + y_min: -18, + y_max: 1186, + ha: 1204, + leftSideBearing: 27, + advanceWidth: 569, + }, + u: { + x_min: 18, + x_max: 981, + y_min: -21, + y_max: 921, + ha: 942, + leftSideBearing: 18, + advanceWidth: 1024, + }, + v: { + x_min: 39, + x_max: 976, + y_min: -28, + y_max: 921, + ha: 949, + leftSideBearing: 39, + advanceWidth: 1024, + }, + w: { + x_min: 43, + x_max: 1423, + y_min: -28, + y_max: 921, + ha: 949, + leftSideBearing: 43, + advanceWidth: 1479, + }, + x: { + x_min: 35, + x_max: 989, + y_min: 0, + y_max: 921, + ha: 921, + leftSideBearing: 35, + advanceWidth: 1024, + }, + y: { + x_min: 29, + x_max: 976, + y_min: -445, + y_max: 921, + ha: 1366, + leftSideBearing: 29, + advanceWidth: 1024, + }, + z: { + x_min: 55, + x_max: 855, + y_min: 0, + y_max: 921, + ha: 921, + leftSideBearing: 55, + advanceWidth: 909, + }, + '{': { + x_min: 205, + x_max: 717, + y_min: -377, + y_max: 1397, + ha: 1774, + leftSideBearing: 205, + advanceWidth: 983, + }, + '|': { + x_min: 137, + x_max: 273, + y_min: -512, + y_max: 1535, + ha: 2047, + leftSideBearing: 137, + advanceWidth: 410, + }, + '}': { + x_min: 266, + x_max: 778, + y_min: -377, + y_max: 1397, + ha: 1774, + leftSideBearing: 266, + advanceWidth: 983, + }, + '~': { + x_min: 82, + x_max: 1028, + y_min: 380, + y_max: 666, + ha: 286, + leftSideBearing: 82, + advanceWidth: 1108, + }, + }, + fontFamily: 'serif', + resolution: 2048, + generatedOn: '2020-10-18T19:03:12.514Z', +}; diff --git a/build/esm/src/fonts/textfonts.js b/build/esm/src/fonts/textfonts.js new file mode 100644 index 0000000000..35bacbfa06 --- /dev/null +++ b/build/esm/src/fonts/textfonts.js @@ -0,0 +1,104 @@ +import { Font } from '../font.js'; +import { TextFormatter } from '../textformatter.js'; +import { PetalumaScriptFont } from './petalumascript_glyphs.js'; +import { RobotoSlabFont } from './robotoslab_glyphs.js'; +import { SansFontBold } from './sans_bold_text_metrics.js'; +import { SansFont } from './sans_text_metrics.js'; +import { SerifFont } from './serif_text_metrics.js'; +export function loadTextFonts() { + { + const fontData = SansFontBold; + const { fontFamily, resolution, glyphs } = fontData; + Font.load(fontFamily, fontData); + const maxSizeGlyph = '@'; + TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: true, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Generic SANS font', + }); + } + { + const fontData = SansFont; + const { fontFamily, resolution, glyphs } = fontData; + Font.load(fontFamily, fontData); + const maxSizeGlyph = '@'; + TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Generic SANS font', + }); + } + { + const fontData = SerifFont; + const { fontFamily, resolution, glyphs } = fontData; + Font.load(fontFamily, fontData); + const maxSizeGlyph = '@'; + TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: true, + description: 'Generic SERIF font', + }); + } + { + const fontData = RobotoSlabFont; + const { fontFamily, resolution, glyphs } = fontData; + Font.load(fontFamily, fontData); + const maxSizeGlyph = 'b'; + TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: true, + description: 'Text font to pair with the Bravura / Gonville music fonts.', + }); + } + { + const fontData = PetalumaScriptFont; + const { fontFamily, resolution, glyphs } = fontData; + Font.load(fontFamily, fontData); + const maxSizeGlyph = 'b'; + TextFormatter.registerInfo({ + family: fontFamily, + resolution, + glyphs, + maxSizeGlyph, + monospaced: false, + bold: false, + italic: false, + superscriptOffset: 0.66, + subscriptOffset: 0.66, + serifs: false, + description: 'Text font to pair with the Petaluma music font.', + }); + } +} diff --git a/build/esm/src/formatter.js b/build/esm/src/formatter.js new file mode 100644 index 0000000000..03dc3bd139 --- /dev/null +++ b/build/esm/src/formatter.js @@ -0,0 +1,621 @@ +import { Beam } from './beam.js'; +import { Font } from './font.js'; +import { Fraction } from './fraction.js'; +import { ModifierContext } from './modifiercontext.js'; +import { Stave } from './stave.js'; +import { StaveConnector } from './staveconnector.js'; +import { Tables } from './tables.js'; +import { TickContext } from './tickcontext.js'; +import { isNote, isStaveNote } from './typeguard.js'; +import { defined, log, midLine, RuntimeError, sumArray } from './util.js'; +import { Voice } from './voice.js'; +function createContexts(voices, makeContext, addToContext) { + if (voices.length == 0) + return { + map: {}, + array: [], + list: [], + resolutionMultiplier: 0, + }; + const tickToContextMap = {}; + const tickList = []; + const contexts = []; + const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); + voices.forEach((voice, voiceIndex) => { + const ticksUsed = new Fraction(0, resolutionMultiplier); + voice.getTickables().forEach((tickable) => { + const integerTicks = ticksUsed.numerator; + if (!tickToContextMap[integerTicks]) { + const newContext = makeContext({ tickID: integerTicks }); + contexts.push(newContext); + tickToContextMap[integerTicks] = newContext; + tickList.push(integerTicks); + } + addToContext(tickable, tickToContextMap[integerTicks], voiceIndex); + ticksUsed.add(tickable.getTicks()); + }); + }); + return { + map: tickToContextMap, + array: contexts, + list: tickList.sort((a, b) => a - b), + resolutionMultiplier, + }; +} +function L(...args) { + if (Formatter.DEBUG) + log('Vex.Flow.Formatter', args); +} +function getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) { + let nextRestLine = currRestLine; + for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) { + const note = notes[noteIndex]; + if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) { + nextRestLine = note.getLineForRest(); + break; + } + } + if (compare && currRestLine !== nextRestLine) { + const top = Math.max(currRestLine, nextRestLine); + const bot = Math.min(currRestLine, nextRestLine); + nextRestLine = midLine(top, bot); + } + return nextRestLine; +} +class Formatter { + static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) { + notes.reduce((accumulator, note) => { + note.addToModifierContext(new ModifierContext()); + const tick = new TickContext().addTickable(note).preFormat(); + const metrics = tick.getMetrics(); + tick.setX(accumulator + metrics.totalLeftPx); + return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween; + }, x); + } + static plotDebugging(ctx, formatter, xPos, y1, y2, options) { + options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options); + const x = xPos + options.stavePadding; + const contextGaps = formatter.contextGaps; + function stroke(x1, x2, color) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(1); + ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1); + } + ctx.save(); + ctx.setFont(Font.SANS_SERIF, 8); + contextGaps.gaps.forEach((gap) => { + stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)'); + ctx.setFillStyle('green'); + ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12); + }); + ctx.setFillStyle('red'); + ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27); + ctx.restore(); + } + static FormatAndDraw(ctx, stave, notes, params) { + let options = { + auto_beam: false, + align_rests: false, + }; + if (typeof params === 'object') { + options = Object.assign(Object.assign({}, options), params); + } + else if (typeof params === 'boolean') { + options.auto_beam = params; + } + const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes); + const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : []; + new Formatter() + .joinVoices([voice]) + .formatToStave([voice], stave, { align_rests: options.align_rests, stave }); + voice.setStave(stave).draw(ctx, stave); + beams.forEach((beam) => beam.setContext(ctx).draw()); + return voice.getBoundingBox(); + } + static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) { + let opts = { + auto_beam: autobeam, + align_rests: false, + }; + if (typeof params === 'object') { + opts = Object.assign(Object.assign({}, opts), params); + } + else if (typeof params === 'boolean') { + opts.auto_beam = params; + } + const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes); + const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes); + const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : []; + new Formatter() + .joinVoices([notevoice]) + .joinVoices([tabvoice]) + .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests }); + notevoice.draw(ctx, stave); + tabvoice.draw(ctx, tabstave); + beams.forEach((beam) => beam.setContext(ctx).draw()); + new StaveConnector(stave, tabstave).setContext(ctx).draw(); + } + static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) { + tickables.forEach((currTickable, index) => { + if (isStaveNote(currTickable) && currTickable.isRest()) { + if (currTickable.getTuplet() && !alignTuplets) { + return; + } + const position = currTickable.getGlyphProps().position.toUpperCase(); + if (position !== 'R/4' && position !== 'B/4') { + return; + } + if (alignAllNotes || currTickable.getBeam()) { + const props = currTickable.getKeyProps()[0]; + if (index === 0) { + props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false); + } + else if (index > 0 && index < tickables.length) { + const prevTickable = tickables[index - 1]; + if (isStaveNote(prevTickable)) { + if (prevTickable.isRest()) { + props.line = prevTickable.getKeyProps()[0].line; + } + else { + const restLine = prevTickable.getLineForRest(); + props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true); + } + } + } + currTickable.setKeyLine(0, props.line); + } + } + }); + } + constructor(options) { + this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options); + this.justifyWidth = 0; + this.totalCost = 0; + this.totalShift = 0; + this.durationStats = {}; + this.minTotalWidth = 0; + this.hasMinTotalWidth = false; + this.tickContexts = { + map: {}, + array: [], + list: [], + resolutionMultiplier: 0, + }; + this.modifierContexts = []; + this.contextGaps = { + total: 0, + gaps: [], + }; + this.voices = []; + this.lossHistory = []; + } + alignRests(voices, alignAllNotes) { + if (!voices || !voices.length) { + throw new RuntimeError('BadArgument', 'No voices to format rests'); + } + voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes)); + } + preCalculateMinTotalWidth(voices) { + const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding'); + let unalignedCtxCount = 0; + let wsum = 0; + let dsum = 0; + const widths = []; + const durations = []; + if (this.hasMinTotalWidth) + return this.minTotalWidth; + if (!voices) { + throw new RuntimeError('BadArgument', "'voices' required to run preCalculateMinTotalWidth"); + } + this.createTickContexts(voices); + const { list: contextList, map: contextMap } = this.tickContexts; + this.minTotalWidth = 0; + contextList.forEach((tick) => { + const context = contextMap[tick]; + context.preFormat(); + if (context.getTickables().length < voices.length) { + unalignedCtxCount += 1; + } + context.getTickables().forEach((t) => { + wsum += t.getMetrics().width; + dsum += t.getTicks().value(); + widths.push(t.getMetrics().width); + durations.push(t.getTicks().value()); + }); + const width = context.getWidth(); + this.minTotalWidth += width; + }); + this.hasMinTotalWidth = true; + const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length; + const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2))); + const wpads = Math.pow(wvar / widths.length, 0.5) / wavg; + const davg = dsum / durations.length; + const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2))); + const dpads = Math.pow(dvar / durations.length, 0.5) / davg; + const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding; + const unalignedPad = unalignedPadding * unalignedCtxCount; + return this.minTotalWidth + Math.max(unalignedPad, padmax); + } + getMinTotalWidth() { + if (!this.hasMinTotalWidth) { + throw new RuntimeError('NoMinTotalWidth', "Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'"); + } + return this.minTotalWidth; + } + static getResolutionMultiplier(voices) { + if (!voices || !voices.length) { + throw new RuntimeError('BadArgument', 'No voices to format'); + } + const totalTicks = voices[0].getTotalTicks(); + const resolutionMultiplier = voices.reduce((accumulator, voice) => { + if (!voice.getTotalTicks().equals(totalTicks)) { + throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.'); + } + if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) { + throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.'); + } + return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier())); + }, 1); + return resolutionMultiplier; + } + createModifierContexts(voices) { + if (voices.length == 0) + return; + const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); + const tickToContextMap = new Map(); + const contexts = []; + voices.forEach((voice) => { + const ticksUsed = new Fraction(0, resolutionMultiplier); + voice.getTickables().forEach((tickable) => { + const integerTicks = ticksUsed.numerator; + let staveTickToContextMap = tickToContextMap.get(tickable.getStave()); + if (!staveTickToContextMap) { + tickToContextMap.set(tickable.getStave(), {}); + staveTickToContextMap = tickToContextMap.get(tickable.getStave()); + } + if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) { + const newContext = new ModifierContext(); + contexts.push(newContext); + staveTickToContextMap[integerTicks] = newContext; + } + tickable.addToModifierContext(staveTickToContextMap[integerTicks]); + ticksUsed.add(tickable.getTicks()); + }); + }); + this.modifierContexts.push({ + map: tickToContextMap, + array: contexts, + resolutionMultiplier, + }); + } + createTickContexts(voices) { + const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex); + const contexts = createContexts(voices, (tick) => new TickContext(tick), fn); + this.tickContexts = contexts; + const contextArray = this.tickContexts.array; + contextArray.forEach((context) => { + context.tContexts = contextArray; + }); + return contexts; + } + getTickContexts() { + return this.tickContexts; + } + preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) { + const contexts = this.tickContexts; + if (!contexts) { + throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts'); + } + const { list: contextList, map: contextMap } = contexts; + this.lossHistory = []; + if (voicesParam && stave) { + voicesParam.forEach((voice) => voice.setStave(stave).preFormat()); + } + let x = 0; + let shift = 0; + this.minTotalWidth = 0; + let totalTicks = 0; + contextList.forEach((tick) => { + const context = contextMap[tick]; + context.preFormat(); + const width = context.getWidth(); + this.minTotalWidth += width; + const maxTicks = context.getMaxTicks().value(); + totalTicks += maxTicks; + const metrics = context.getMetrics(); + x = x + shift + metrics.totalLeftPx; + context.setX(x); + shift = width - metrics.totalLeftPx; + }); + const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions; + const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks)); + const expTicksUsed = sumArray(contextList.map(exp)); + this.minTotalWidth = x + shift; + this.hasMinTotalWidth = true; + if (justifyWidth <= 0) + return this.evaluate(); + const firstContext = contextMap[contextList[0]]; + const lastContext = contextMap[contextList[contextList.length - 1]]; + function calculateIdealDistances(adjustedJustifyWidth) { + const distances = contextList.map((tick, i) => { + const context = contextMap[tick]; + const voices = context.getTickablesByVoice(); + let backTickable; + if (i > 0) { + const prevContext = contextMap[contextList[i - 1]]; + for (let j = i - 1; j >= 0; j--) { + const backTick = contextMap[contextList[j]]; + const backVoices = backTick.getTickablesByVoice(); + const matchingVoices = []; + Object.keys(voices).forEach((v) => { + if (backVoices[v]) { + matchingVoices.push(v); + } + }); + if (matchingVoices.length > 0) { + let maxTicks = 0; + let maxNegativeShiftPx = Infinity; + let expectedDistance = 0; + matchingVoices.forEach((v) => { + const ticks = backVoices[v].getTicks().value(); + if (ticks > maxTicks) { + backTickable = backVoices[v]; + maxTicks = ticks; + } + const thisTickable = voices[v]; + const insideLeftEdge = thisTickable.getX() - + (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx); + const backMetrics = backVoices[v].getMetrics(); + const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx; + maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge); + }); + maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05)); + if (globalSoftmax) { + const t = totalTicks; + expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth; + } + else if (typeof backTickable !== 'undefined') { + expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth; + } + return { + expectedDistance, + maxNegativeShiftPx, + fromTickable: backTickable, + }; + } + } + } + return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 }; + }); + return distances; + } + function shiftToIdealDistances(idealDistances) { + const centerX = adjustedJustifyWidth / 2; + let spaceAccum = 0; + contextList.forEach((tick, index) => { + const context = contextMap[tick]; + if (index > 0) { + const contextX = context.getX(); + const ideal = idealDistances[index]; + const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum); + let negativeShiftPx = 0; + if (errorPx > 0) { + spaceAccum += errorPx; + } + else if (errorPx < 0) { + negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx)); + spaceAccum += -negativeShiftPx; + } + context.setX(contextX + spaceAccum); + } + context.getCenterAlignedTickables().forEach((tickable) => { + tickable.setCenterXShift(centerX - context.getX()); + }); + }); + return lastContext.getX() - firstContext.getX(); + } + const adjustedJustifyWidth = justifyWidth - + lastContext.getMetrics().notePx - + lastContext.getMetrics().totalRightPx - + firstContext.getMetrics().totalLeftPx; + const musicFont = Tables.currentMusicFont(); + const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin'); + const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax'); + const leftPadding = musicFont.lookupMetric('stave.padding'); + let targetWidth = adjustedJustifyWidth; + const distances = calculateIdealDistances(targetWidth); + let actualWidth = shiftToIdealDistances(distances); + if (contextList.length === 1) + return 0; + const calcMinDistance = (targetWidth, distances) => { + let mdCalc = targetWidth / 2; + if (distances.length > 1) { + for (let di = 1; di < distances.length; ++di) { + mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc); + } + } + return mdCalc; + }; + const minDistance = calcMinDistance(targetWidth, distances); + const paddingMaxCalc = (curTargetWidth) => { + let lastTickablePadding = 0; + const lastTickable = lastContext && lastContext.getMaxTickable(); + if (lastTickable) { + const voice = lastTickable.getVoice(); + if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) { + return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding; + } + const tickWidth = lastTickable.getWidth(); + lastTickablePadding = + voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding); + } + return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding; + }; + let paddingMax = paddingMaxCalc(targetWidth); + let paddingMin = paddingMax - (configMaxPadding - configMinPadding); + const maxX = adjustedJustifyWidth - paddingMin; + let iterations = maxIterations; + while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) { + targetWidth -= actualWidth - maxX; + paddingMax = paddingMaxCalc(targetWidth); + paddingMin = paddingMax - (configMaxPadding - configMinPadding); + actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth)); + iterations--; + } + this.justifyWidth = justifyWidth; + return this.evaluate(); + } + evaluate() { + const contexts = this.tickContexts; + const justifyWidth = this.justifyWidth; + this.contextGaps = { total: 0, gaps: [] }; + contexts.list.forEach((tick, index) => { + if (index === 0) + return; + const prevTick = contexts.list[index - 1]; + const prevContext = contexts.map[prevTick]; + const context = contexts.map[tick]; + const prevMetrics = prevContext.getMetrics(); + const currMetrics = context.getMetrics(); + const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx; + const insideLeftEdge = context.getX() - currMetrics.totalLeftPx; + const gap = insideLeftEdge - insideRightEdge; + this.contextGaps.total += gap; + this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge }); + context.getFormatterMetrics().freedom.left = gap; + prevContext.getFormatterMetrics().freedom.right = gap; + }); + this.durationStats = {}; + const durationStats = this.durationStats; + function updateStats(duration, space) { + const stats = durationStats[duration]; + if (stats === undefined) { + durationStats[duration] = { mean: space, count: 1 }; + } + else { + stats.count += 1; + stats.mean = (stats.mean + space) / 2; + } + } + this.voices.forEach((voice) => { + voice.getTickables().forEach((note, i, notes) => { + const duration = note.getTicks().clone().simplify().toString(); + const metrics = note.getMetrics(); + const formatterMetrics = note.getFormatterMetrics(); + const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx; + let space = 0; + if (i < notes.length - 1) { + const rightNote = notes[i + 1]; + const rightMetrics = rightNote.getMetrics(); + const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx; + space = rightNoteEdge - leftNoteEdge; + formatterMetrics.space.used = rightNote.getX() - note.getX(); + rightNote.getFormatterMetrics().freedom.left = space; + } + else { + space = justifyWidth - leftNoteEdge; + formatterMetrics.space.used = justifyWidth - note.getX(); + } + formatterMetrics.freedom.right = space; + updateStats(duration, formatterMetrics.space.used); + }); + }); + let totalDeviation = 0; + this.voices.forEach((voice) => { + voice.getTickables().forEach((note) => { + const duration = note.getTicks().clone().simplify().toString(); + const metrics = note.getFormatterMetrics(); + metrics.space.mean = durationStats[duration].mean; + metrics.duration = duration; + metrics.iterations += 1; + metrics.space.deviation = metrics.space.used - metrics.space.mean; + totalDeviation += Math.pow(metrics.space.deviation, 2); + }); + }); + this.totalCost = Math.sqrt(totalDeviation); + this.lossHistory.push(this.totalCost); + return this.totalCost; + } + tune(options) { + var _a; + const contexts = this.tickContexts; + if (!contexts) { + return 0; + } + const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5; + function move(current, shift, prev, next) { + current.setX(current.getX() + shift); + current.getFormatterMetrics().freedom.left += shift; + current.getFormatterMetrics().freedom.right -= shift; + if (prev) + prev.getFormatterMetrics().freedom.right += shift; + if (next) + next.getFormatterMetrics().freedom.left -= shift; + } + let shift = 0; + this.totalShift = 0; + contexts.list.forEach((tick, index, list) => { + const context = contexts.map[tick]; + const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined; + const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined; + move(context, shift, prevContext, nextContext); + const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation)); + if (cost > 0) { + shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost)); + } + else if (cost < 0) { + if (nextContext) { + shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost)); + } + else { + shift = 0; + } + } + shift *= alpha; + this.totalShift += shift; + }); + return this.evaluate(); + } + postFormat() { + this.modifierContexts.forEach((modifierContexts) => { + modifierContexts.array.forEach((mc) => mc.postFormat()); + }); + this.tickContexts.list.forEach((tick) => { + this.tickContexts.map[tick].postFormat(); + }); + return this; + } + joinVoices(voices) { + this.createModifierContexts(voices); + this.hasMinTotalWidth = false; + return this; + } + format(voices, justifyWidth, options) { + const opts = Object.assign({ align_rests: false }, options); + this.voices = voices; + const softmaxFactor = this.formatterOptions.softmaxFactor; + if (softmaxFactor) { + this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor)); + } + this.alignRests(voices, opts.align_rests); + this.createTickContexts(voices); + this.preFormat(justifyWidth, opts.context, voices, opts.stave); + if (opts.stave) + this.postFormat(); + return this; + } + formatToStave(voices, stave, optionsParam) { + const options = Object.assign({ context: stave.getContext() }, optionsParam); + const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding; + L('Formatting voices to width: ', justifyWidth); + return this.format(voices, justifyWidth, options); + } + getTickContext(tick) { + var _a; + return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick]; + } +} +Formatter.DEBUG = false; +export { Formatter }; diff --git a/build/esm/src/fraction.js b/build/esm/src/fraction.js new file mode 100644 index 0000000000..e9c234f2e4 --- /dev/null +++ b/build/esm/src/fraction.js @@ -0,0 +1,172 @@ +import { RuntimeError } from './util.js'; +class Fraction { + static get CATEGORY() { + return "Fraction"; + } + static GCD(a, b) { + if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) { + throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`); + } + let t; + while (b !== 0) { + t = b; + b = a % b; + a = t; + } + return a; + } + static LCM(a, b) { + return (a * b) / Fraction.GCD(a, b); + } + static LCMM(args) { + if (args.length === 0) { + return 0; + } + else if (args.length === 1) { + return args[0]; + } + else if (args.length === 2) { + return Fraction.LCM(args[0], args[1]); + } + else { + return Fraction.LCM(args.shift(), Fraction.LCMM(args)); + } + } + constructor(numerator, denominator) { + this.numerator = 1; + this.denominator = 1; + this.set(numerator, denominator); + } + set(numerator = 1, denominator = 1) { + this.numerator = numerator; + this.denominator = denominator; + return this; + } + value() { + return this.numerator / this.denominator; + } + simplify() { + let u = this.numerator; + let d = this.denominator; + const gcd = Fraction.GCD(u, d); + u /= gcd; + d /= gcd; + if (d < 0) { + d = -d; + u = -u; + } + return this.set(u, d); + } + add(param1 = 0, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + const lcm = Fraction.LCM(this.denominator, otherDenominator); + const a = lcm / this.denominator; + const b = lcm / otherDenominator; + const u = this.numerator * a + otherNumerator * b; + return this.set(u, lcm); + } + subtract(param1 = 0, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + const lcm = Fraction.LCM(this.denominator, otherDenominator); + const a = lcm / this.denominator; + const b = lcm / otherDenominator; + const u = this.numerator * a - otherNumerator * b; + return this.set(u, lcm); + } + multiply(param1 = 1, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator); + } + divide(param1 = 1, param2 = 1) { + const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); + return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator); + } + equals(compare) { + const a = Fraction.__staticFractionA.copy(compare).simplify(); + const b = Fraction.__staticFractionB.copy(this).simplify(); + return a.numerator === b.numerator && a.denominator === b.denominator; + } + greaterThan(compare) { + const a = Fraction.__staticFractionB.copy(this); + a.subtract(compare); + return a.numerator > 0; + } + greaterThanEquals(compare) { + const a = Fraction.__staticFractionB.copy(this); + a.subtract(compare); + return a.numerator >= 0; + } + lessThan(compare) { + return !this.greaterThanEquals(compare); + } + lessThanEquals(compare) { + return !this.greaterThan(compare); + } + clone() { + return new Fraction(this.numerator, this.denominator); + } + copy(other) { + if (typeof other === 'number') { + return this.set(other, 1); + } + else { + return this.set(other.numerator, other.denominator); + } + } + quotient() { + return Math.floor(this.numerator / this.denominator); + } + remainder() { + return this.numerator % this.denominator; + } + makeAbs() { + this.denominator = Math.abs(this.denominator); + this.numerator = Math.abs(this.numerator); + return this; + } + toString() { + return `${this.numerator}/${this.denominator}`; + } + toSimplifiedString() { + return Fraction.__staticFractionTmp.copy(this).simplify().toString(); + } + toMixedString() { + let s = ''; + const q = this.quotient(); + const f = Fraction.__staticFractionTmp.copy(this); + if (q < 0) { + f.makeAbs(); + } + if (q !== 0) { + s += q; + if (f.numerator !== 0) { + s += ` ${f.toSimplifiedString()}`; + } + } + else if (f.numerator === 0) { + s = '0'; + } + else { + s = f.toSimplifiedString(); + } + return s; + } + parse(str) { + const i = str.split('/'); + const n = parseInt(i[0], 10); + const d = i[1] ? parseInt(i[1], 10) : 1; + return this.set(n, d); + } +} +Fraction.__staticFractionA = new Fraction(); +Fraction.__staticFractionB = new Fraction(); +Fraction.__staticFractionTmp = new Fraction(); +export { Fraction }; +function getNumeratorAndDenominator(n, d = 1) { + if (typeof n === 'number') { + return [n, d]; + } + else { + return [n.numerator, n.denominator]; + } +} diff --git a/build/esm/src/frethandfinger.js b/build/esm/src/frethandfinger.js new file mode 100644 index 0000000000..60cc1aadc4 --- /dev/null +++ b/build/esm/src/frethandfinger.js @@ -0,0 +1,157 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Modifier, ModifierPosition } from './modifier.js'; +import { Tables } from './tables.js'; +import { TextFormatter } from './textformatter.js'; +import { RuntimeError } from './util.js'; +class FretHandFinger extends Modifier { + static get CATEGORY() { + return "FretHandFinger"; + } + static format(nums, state) { + const { left_shift, right_shift } = state; + const num_spacing = 1; + if (!nums || nums.length === 0) + return false; + const nums_list = []; + let prev_note = null; + let shiftLeft = 0; + let shiftRight = 0; + for (let i = 0; i < nums.length; ++i) { + const num = nums[i]; + const note = num.getNote(); + const pos = num.getPosition(); + const index = num.checkIndex(); + const props = note.getKeyProps()[index]; + const textFormatter = TextFormatter.create(num.textFont); + const textHeight = textFormatter.maxHeight; + if (num.position === ModifierPosition.ABOVE) { + state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5; + } + if (num.position === ModifierPosition.BELOW) { + state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5; + } + if (note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + if (left_shift === 0) { + shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft); + } + if (right_shift === 0) { + shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight); + } + } + prev_note = note; + } + nums_list.push({ + note, + num, + pos, + line: props.line, + shiftL: shiftLeft, + shiftR: shiftRight, + }); + } + nums_list.sort((a, b) => b.line - a.line); + let numShiftL = 0; + let numShiftR = 0; + let xWidthL = 0; + let xWidthR = 0; + let lastLine = null; + let lastNote = null; + for (let i = 0; i < nums_list.length; ++i) { + let num_shift = 0; + const { note, pos, num, line, shiftL, shiftR } = nums_list[i]; + if (line !== lastLine || note !== lastNote) { + numShiftL = left_shift + shiftL; + numShiftR = right_shift + shiftR; + } + const numWidth = num.getWidth() + num_spacing; + if (pos === Modifier.Position.LEFT) { + num.setXShift(left_shift + numShiftL); + num_shift = left_shift + numWidth; + xWidthL = num_shift > xWidthL ? num_shift : xWidthL; + } + else if (pos === Modifier.Position.RIGHT) { + num.setXShift(numShiftR); + num_shift = shiftRight + numWidth; + xWidthR = num_shift > xWidthR ? num_shift : xWidthR; + } + lastLine = line; + lastNote = note; + } + state.left_shift += xWidthL; + state.right_shift += xWidthR; + return true; + } + static easyScoreHook({ fingerings } = {}, note, builder) { + fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => { + const split = fingeringString.trim().split('.'); + const params = { number: split[0] }; + if (split[1]) + params.position = split[1]; + return builder.getFactory().Fingering(params); + }).map((fingering, index) => note.addModifier(fingering, index)); + } + constructor(finger) { + super(); + this.finger = finger; + this.width = 7; + this.position = Modifier.Position.LEFT; + this.x_shift = 0; + this.y_shift = 0; + this.x_offset = 0; + this.y_offset = 0; + this.resetFont(); + } + setFretHandFinger(finger) { + this.finger = finger; + return this; + } + getFretHandFinger() { + return this.finger; + } + setOffsetX(x) { + this.x_offset = x; + return this; + } + setOffsetY(y) { + this.y_offset = y; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + let dot_x = start.x + this.x_shift + this.x_offset; + let dot_y = start.y + this.y_shift + this.y_offset + 5; + switch (this.position) { + case Modifier.Position.ABOVE: + dot_x -= 4; + dot_y -= 12; + break; + case Modifier.Position.BELOW: + dot_x -= 2; + dot_y += 10; + break; + case Modifier.Position.LEFT: + dot_x -= this.width; + break; + case Modifier.Position.RIGHT: + dot_x += 1; + break; + default: + throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`); + } + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText('' + this.finger, dot_x, dot_y); + ctx.restore(); + } +} +FretHandFinger.TEXT_FONT = { + family: Font.SANS_SERIF, + size: 9, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, +}; +export { FretHandFinger }; diff --git a/build/esm/src/ghostnote.js b/build/esm/src/ghostnote.js new file mode 100644 index 0000000000..02b3f05342 --- /dev/null +++ b/build/esm/src/ghostnote.js @@ -0,0 +1,50 @@ +import { StemmableNote } from './stemmablenote.js'; +import { isAnnotation } from './typeguard.js'; +import { RuntimeError } from './util.js'; +const ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.'; +export class GhostNote extends StemmableNote { + static get CATEGORY() { + return "GhostNote"; + } + constructor(parameter) { + if (!parameter) { + throw new RuntimeError('BadArguments', ERROR_MSG); + } + let noteStruct; + if (typeof parameter === 'string') { + noteStruct = { duration: parameter }; + } + else if (typeof parameter === 'object') { + noteStruct = parameter; + } + else { + throw new RuntimeError('BadArguments', ERROR_MSG); + } + super(noteStruct); + this.setWidth(0); + } + isRest() { + return true; + } + setStave(stave) { + super.setStave(stave); + return this; + } + addToModifierContext(mc) { + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + this.setRendered(); + for (let i = 0; i < this.modifiers.length; ++i) { + const modifier = this.modifiers[i]; + if (isAnnotation(modifier)) { + modifier.setContext(this.getContext()); + modifier.drawWithStyle(); + } + } + } +} diff --git a/build/esm/src/glyph.js b/build/esm/src/glyph.js new file mode 100644 index 0000000000..a3f0f92393 --- /dev/null +++ b/build/esm/src/glyph.js @@ -0,0 +1,341 @@ +import { BoundingBox } from './boundingbox.js'; +import { BoundingBoxComputation } from './boundingboxcomputation.js'; +import { Element } from './element.js'; +import { Tables } from './tables.js'; +import { defined, RuntimeError } from './util.js'; +class GlyphCacheEntry { + constructor(fontStack, code, category) { + this.point = -1; + this.metrics = Glyph.loadMetrics(fontStack, code, category); + this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift); + if (category) { + this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1); + } + } +} +class GlyphCache { + constructor() { + this.cache = new Map(); + } + lookup(code, category) { + let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY); + if (entries === undefined) { + entries = {}; + this.cache.set(Glyph.CURRENT_CACHE_KEY, entries); + } + const key = category ? `${code}%${category}` : code; + let entry = entries[key]; + if (entry === undefined) { + entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category); + entries[key] = entry; + } + return entry; + } +} +class GlyphOutline { + constructor(outline, originX, originY, scale) { + this.outline = outline; + this.originX = originX; + this.originY = originY; + this.scale = scale; + this.i = 0; + this.precision = 1; + this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES); + } + done() { + return this.i >= this.outline.length; + } + next() { + return Math.round((this.outline[this.i++] * this.precision) / this.precision); + } + nextX() { + return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision; + } + nextY() { + return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision; + } + static parse(str) { + const result = []; + const parts = str.split(' '); + let i = 0; + while (i < parts.length) { + switch (parts[i++]) { + case 'm': + result.push(0, parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'l': + result.push(1, parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'q': + result.push(2, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); + break; + case 'b': + result.push(3, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); + break; + } + } + return result; + } +} +class Glyph extends Element { + static get CATEGORY() { + return "Glyph"; + } + static lookupFontMetric(font, category, code, key, defaultValue) { + let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined); + if (value === undefined) { + value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue); + } + return value; + } + static lookupGlyph(fontStack, code) { + defined(fontStack, 'BadFontStack', 'Font stack is misconfigured'); + let glyph; + let font; + for (let i = 0; i < fontStack.length; i++) { + font = fontStack[i]; + glyph = font.getGlyphs()[code]; + if (glyph) + return { glyph, font }; + } + throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`); + } + static loadMetrics(fontStack, code, category) { + const { glyph, font } = Glyph.lookupGlyph(fontStack, code); + if (!glyph.o) + throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`); + let x_shift = 0; + let y_shift = 0; + let scale = 1; + if (category && font) { + x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0); + y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0); + scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1); + } + const x_min = glyph.x_min; + const x_max = glyph.x_max; + const ha = glyph.ha; + if (!glyph.cached_outline) { + glyph.cached_outline = GlyphOutline.parse(glyph.o); + } + return { + x_min, + x_max, + x_shift, + y_shift, + scale, + ha, + outline: glyph.cached_outline, + font, + width: x_max - x_min, + height: ha, + }; + } + static renderGlyph(ctx, x_pos, y_pos, point, code, options) { + var _a; + const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category); + const metrics = data.metrics; + if (data.point != -1) { + point = data.point; + } + const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1; + const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale; + Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale); + return metrics; + } + static renderOutline(ctx, outline, scale, x_pos, y_pos) { + const go = new GlyphOutline(outline, x_pos, y_pos, scale); + ctx.beginPath(); + let x, y; + while (!go.done()) { + switch (go.next()) { + case 0: + ctx.moveTo(go.nextX(), go.nextY()); + break; + case 1: + ctx.lineTo(go.nextX(), go.nextY()); + break; + case 2: + x = go.nextX(); + y = go.nextY(); + ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y); + break; + case 3: + x = go.nextX(); + y = go.nextY(); + ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); + break; + } + } + ctx.fill(); + } + static getOutlineBoundingBox(outline, scale, x_pos, y_pos) { + const go = new GlyphOutline(outline, x_pos, y_pos, scale); + const bboxComp = new BoundingBoxComputation(); + let penX = x_pos; + let penY = y_pos; + let x, y; + while (!go.done()) { + switch (go.next()) { + case 0: + penX = go.nextX(); + penY = go.nextY(); + break; + case 1: + bboxComp.addPoint(penX, penY); + penX = go.nextX(); + penY = go.nextY(); + bboxComp.addPoint(penX, penY); + break; + case 2: + x = go.nextX(); + y = go.nextY(); + bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y); + penX = x; + penY = y; + break; + case 3: + x = go.nextX(); + y = go.nextY(); + bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); + penX = x; + penY = y; + break; + } + } + return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()); + } + static getWidth(code, point, category) { + const data = Glyph.cache.lookup(code, category); + if (data.point != -1) { + point = data.point; + } + const scale = (point * 72) / (data.metrics.font.getResolution() * 100); + return data.bbox.getW() * scale; + } + constructor(code, point, options) { + super(); + this.bbox = new BoundingBox(0, 0, 0, 0); + this.topGlyphs = []; + this.botGlyphs = []; + this.options = {}; + this.scale = 1; + this.code = code; + this.point = point; + this.originShift = { x: 0, y: 0 }; + this.x_shift = 0; + this.y_shift = 0; + if (options) { + this.setOptions(options); + } + else { + this.reset(); + } + } + draw(...args) { + } + getCode() { + return this.code; + } + setOptions(options) { + this.options = Object.assign(Object.assign({}, this.options), options); + this.reset(); + } + setPoint(point) { + this.point = point; + return this; + } + setStave(stave) { + this.stave = stave; + return this; + } + getXShift() { + return this.x_shift; + } + setXShift(x_shift) { + this.x_shift = x_shift; + return this; + } + getYshift() { + return this.y_shift; + } + setYShift(y_shift) { + this.y_shift = y_shift; + return this; + } + reset() { + const data = Glyph.cache.lookup(this.code, this.options.category); + this.metrics = data.metrics; + if (data.point != -1) { + this.point = data.point; + } + this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100); + this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale); + } + checkMetrics() { + return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`); + } + getMetrics() { + const metrics = this.checkMetrics(); + const metricsScale = metrics.scale; + return { + x_min: metrics.x_min * this.scale * metricsScale, + x_max: metrics.x_max * this.scale * metricsScale, + width: this.bbox.getW(), + height: this.bbox.getH(), + scale: this.scale * metricsScale, + x_shift: metrics.x_shift, + y_shift: metrics.y_shift, + outline: metrics.outline, + font: metrics.font, + ha: metrics.ha, + }; + } + setOriginX(x) { + const { bbox } = this; + const originX = Math.abs(bbox.getX() / bbox.getW()); + const xShift = (x - originX) * bbox.getW(); + this.originShift.x = -xShift; + } + setOriginY(y) { + const { bbox } = this; + const originY = Math.abs(bbox.getY() / bbox.getH()); + const yShift = (y - originY) * bbox.getH(); + this.originShift.y = -yShift; + } + setOrigin(x, y) { + this.setOriginX(x); + this.setOriginY(y); + } + render(ctx, x, y) { + const metrics = this.checkMetrics(); + const outline = metrics.outline; + const scale = this.scale * metrics.scale; + this.setRendered(); + this.applyStyle(ctx); + const xPos = x + this.originShift.x + metrics.x_shift; + const yPos = y + this.originShift.y + metrics.y_shift; + Glyph.renderOutline(ctx, outline, scale, xPos, yPos); + this.restoreStyle(ctx); + } + checkStave() { + return defined(this.stave, 'NoStave', 'No stave attached to instance.'); + } + renderToStave(x) { + const context = this.checkContext(); + const metrics = this.checkMetrics(); + const stave = this.checkStave(); + const outline = metrics.outline; + const scale = this.scale * metrics.scale; + this.setRendered(); + this.applyStyle(); + const xPos = x + this.x_shift + metrics.x_shift; + const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift; + Glyph.renderOutline(context, outline, scale, xPos, yPos); + this.restoreStyle(); + } +} +Glyph.cache = new GlyphCache(); +Glyph.CURRENT_CACHE_KEY = ''; +Glyph.MUSIC_FONT_STACK = []; +export { Glyph }; diff --git a/build/esm/src/glyphnote.js b/build/esm/src/glyphnote.js new file mode 100644 index 0000000000..b7b3446b1b --- /dev/null +++ b/build/esm/src/glyphnote.js @@ -0,0 +1,56 @@ +import { Note } from './note.js'; +export class GlyphNote extends Note { + static get CATEGORY() { + return "GlyphNote"; + } + constructor(glyph, noteStruct, options) { + super(noteStruct); + this.options = Object.assign({ ignoreTicks: false, line: 2 }, options); + this.ignore_ticks = this.options.ignoreTicks; + this.setGlyph(glyph); + } + setGlyph(glyph) { + this.glyph = glyph; + this.setWidth(this.glyph.getMetrics().width); + return this; + } + getBoundingBox() { + return this.glyph.getBoundingBox(); + } + preFormat() { + if (!this.preFormatted && this.modifierContext) { + this.modifierContext.preFormat(); + } + this.preFormatted = true; + return this; + } + drawModifiers() { + const ctx = this.checkContext(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + modifier.setContext(ctx); + modifier.drawWithStyle(); + } + } + getGlyphWidth() { + return this.glyph.getMetrics().width; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('glyphNote', this.getAttribute('id')); + const glyph = this.glyph; + if (!glyph.getContext()) { + glyph.setContext(ctx); + } + glyph.setStave(stave); + glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs()); + const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX(); + glyph.renderToStave(x); + this.drawModifiers(); + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} diff --git a/build/esm/src/gracenote.js b/build/esm/src/gracenote.js new file mode 100644 index 0000000000..29b2aaacda --- /dev/null +++ b/build/esm/src/gracenote.js @@ -0,0 +1,133 @@ +import { StaveNote } from './stavenote.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { RuntimeError } from './util.js'; +export class GraceNote extends StaveNote { + static get CATEGORY() { + return "GraceNote"; + } + static get LEDGER_LINE_OFFSET() { + return 2; + } + static get SCALE() { + return 0.66; + } + constructor(noteStruct) { + super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct)); + this.slash = noteStruct.slash || false; + this.slur = true; + this.buildNoteHeads(); + this.width = 3; + } + getStemExtension() { + if (this.stem_extension_override) { + return this.stem_extension_override; + } + const glyphProps = this.getGlyphProps(); + if (glyphProps) { + let ret = super.getStemExtension(); + if (glyphProps.stem) { + const staveNoteScale = this.getStaveNoteScale(); + ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT; + } + return ret; + } + return 0; + } + getStaveNoteScale() { + return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE; + } + draw() { + super.draw(); + this.setRendered(); + const stem = this.stem; + if (this.slash && stem) { + const staveNoteScale = this.getStaveNoteScale(); + const offsetScale = staveNoteScale / 0.66; + let slashBBox = undefined; + const beam = this.beam; + if (beam) { + if (!beam.postFormatted) { + beam.postFormat(); + } + slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, { + stem: 6 * offsetScale, + beam: 5 * offsetScale, + }); + } + else { + const stem_direction = this.getStemDirection(); + const noteHeadBounds = this.getNoteHeadBounds(); + const noteStemHeight = stem.getHeight(); + let x = this.getAbsoluteX(); + let y = stem_direction === Stem.DOWN + ? noteHeadBounds.y_top - noteStemHeight + : noteHeadBounds.y_bottom - noteStemHeight; + const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension; + let defaultOffsetY = Tables.STEM_HEIGHT; + defaultOffsetY -= defaultOffsetY / 2.8; + defaultOffsetY += defaultStemExtention; + y += defaultOffsetY * staveNoteScale * stem_direction; + const offsets = stem_direction === Stem.UP + ? { + x1: 1, + y1: 0, + x2: 13, + y2: -9, + } + : { + x1: -4, + y1: 1, + x2: 13, + y2: 9, + }; + x += offsets.x1 * offsetScale; + y += offsets.y1 * offsetScale; + slashBBox = { + x1: x, + y1: y, + x2: x + offsets.x2 * offsetScale, + y2: y + offsets.y2 * offsetScale, + }; + } + const ctx = this.checkContext(); + ctx.save(); + ctx.setLineWidth(1 * offsetScale); + ctx.beginPath(); + ctx.moveTo(slashBBox.x1, slashBBox.y1); + ctx.lineTo(slashBBox.x2, slashBBox.y2); + ctx.closePath(); + ctx.stroke(); + ctx.restore(); + } + } + calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) { + const beam = this.beam; + if (!beam) + throw new RuntimeError('NoBeam', "Can't calculate without a beam."); + const beam_slope = beam.slope; + const isBeamEndNote = beam.notes[beam.notes.length - 1] === this; + const scaleX = isBeamEndNote ? -1 : 1; + const beam_angle = Math.atan(beam_slope * scaleX); + const iPointOnBeam = { + dx: Math.cos(beam_angle) * slashBeamOffset, + dy: Math.sin(beam_angle) * slashBeamOffset, + }; + slashStemOffset *= this.getStemDirection(); + const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx); + const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX; + const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem; + const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX; + const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam; + const stemX = this.getStemX(); + const stem0X = beam.notes[0].getStemX(); + const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope; + const ret = { + x1: stemX - protrusion_stem_dx, + y1: stemY + slashStemOffset - protrusion_stem_dy, + x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx, + y2: stemY + iPointOnBeam.dy + protrusion_beam_dy, + }; + return ret; + } +} diff --git a/build/esm/src/gracenotegroup.js b/build/esm/src/gracenotegroup.js new file mode 100644 index 0000000000..74b19ba78f --- /dev/null +++ b/build/esm/src/gracenotegroup.js @@ -0,0 +1,130 @@ +import { Beam } from './beam.js'; +import { Formatter } from './formatter.js'; +import { Modifier } from './modifier.js'; +import { StaveNote } from './stavenote.js'; +import { StaveTie } from './stavetie.js'; +import { Tables } from './tables.js'; +import { TabTie } from './tabtie.js'; +import { isStaveNote } from './typeguard.js'; +import { log } from './util.js'; +import { Voice } from './voice.js'; +function L(...args) { + if (GraceNoteGroup.DEBUG) + log('Vex.Flow.GraceNoteGroup', args); +} +class GraceNoteGroup extends Modifier { + static get CATEGORY() { + return "GraceNoteGroup"; + } + static format(gracenote_groups, state) { + const group_spacing_stave = 4; + const group_spacing_tab = 0; + if (!gracenote_groups || gracenote_groups.length === 0) + return false; + const group_list = []; + let prev_note = null; + let shiftL = 0; + for (let i = 0; i < gracenote_groups.length; ++i) { + const gracenote_group = gracenote_groups[i]; + const note = gracenote_group.getNote(); + const is_stavenote = isStaveNote(note); + const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab; + if (is_stavenote && note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL); + } + prev_note = note; + } + group_list.push({ shift: shiftL, gracenote_group, spacing }); + } + let group_shift = group_list[0].shift; + let formatWidth; + for (let i = 0; i < group_list.length; ++i) { + const gracenote_group = group_list[i].gracenote_group; + gracenote_group.preFormat(); + formatWidth = gracenote_group.getWidth() + group_list[i].spacing; + group_shift = Math.max(formatWidth, group_shift); + } + for (let i = 0; i < group_list.length; ++i) { + const gracenote_group = group_list[i].gracenote_group; + formatWidth = gracenote_group.getWidth() + group_list[i].spacing; + gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding); + } + state.left_shift += group_shift; + return true; + } + constructor(grace_notes, show_slur) { + super(); + this.preFormatted = false; + this.position = Modifier.Position.LEFT; + this.grace_notes = grace_notes; + this.width = 0; + this.show_slur = show_slur; + this.slur = undefined; + this.voice = new Voice({ + num_beats: 4, + beat_value: 4, + resolution: Tables.RESOLUTION, + }).setStrict(false); + this.render_options = { + slur_y_shift: 0, + }; + this.beams = []; + this.voice.addTickables(this.grace_notes); + return this; + } + preFormat() { + if (this.preFormatted) + return; + if (!this.formatter) { + this.formatter = new Formatter(); + } + this.formatter.joinVoices([this.voice]).format([this.voice], 0, {}); + this.setWidth(this.formatter.getMinTotalWidth()); + this.preFormatted = true; + } + beamNotes(grace_notes) { + grace_notes = grace_notes || this.grace_notes; + if (grace_notes.length > 1) { + const beam = new Beam(grace_notes); + beam.render_options.beam_width = 3; + beam.render_options.partial_beam_length = 4; + this.beams.push(beam); + } + return this; + } + setWidth(width) { + this.width = width; + return this; + } + getWidth() { + return this.width + StaveNote.minNoteheadPadding; + } + getGraceNotes() { + return this.grace_notes; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + L('Drawing grace note group for:', note); + this.alignSubNotesWithNote(this.getGraceNotes(), note); + this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw()); + this.beams.forEach((beam) => beam.setContext(ctx).draw()); + if (this.show_slur) { + const is_stavenote = isStaveNote(note); + const TieClass = is_stavenote ? StaveTie : TabTie; + this.slur = new TieClass({ + last_note: this.grace_notes[0], + first_note: note, + first_indices: [0], + last_indices: [0], + }); + this.slur.render_options.cp2 = 12; + this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift; + this.slur.setContext(ctx).draw(); + } + } +} +GraceNoteGroup.DEBUG = false; +export { GraceNoteGroup }; diff --git a/build/esm/src/gracetabnote.js b/build/esm/src/gracetabnote.js new file mode 100644 index 0000000000..8aba164203 --- /dev/null +++ b/build/esm/src/gracetabnote.js @@ -0,0 +1,12 @@ +import { Font } from './font.js'; +import { TabNote } from './tabnote.js'; +export class GraceTabNote extends TabNote { + static get CATEGORY() { + return "GraceTabNote"; + } + constructor(noteStruct) { + super(noteStruct, false); + this.render_options = Object.assign(Object.assign({}, this.render_options), { y_shift: 0.3, scale: 0.6, font: `7.5pt ${Font.SANS_SERIF}` }); + this.updateWidth(); + } +} diff --git a/build/esm/src/index.js b/build/esm/src/index.js new file mode 100644 index 0000000000..2c9f8c57d8 --- /dev/null +++ b/build/esm/src/index.js @@ -0,0 +1,89 @@ +export * from './accidental.js'; +export * from './annotation.js'; +export * from './articulation.js'; +export * from './barnote.js'; +export * from './beam.js'; +export * from './bend.js'; +export * from './boundingbox.js'; +export * from './boundingboxcomputation.js'; +export * from './canvascontext.js'; +export * from './chordsymbol.js'; +export * from './clef.js'; +export * from './clefnote.js'; +export * from './crescendo.js'; +export * from './curve.js'; +export * from './dot.js'; +export * from './easyscore.js'; +export * from './element.js'; +export * from './factory.js'; +export * from './flow.js'; +export * from './font.js'; +export * from './formatter.js'; +export * from './fraction.js'; +export * from './frethandfinger.js'; +export * from './ghostnote.js'; +export * from './glyph.js'; +export * from './glyphnote.js'; +export * from './gracenote.js'; +export * from './gracenotegroup.js'; +export * from './gracetabnote.js'; +export * from './keymanager.js'; +export * from './keysignature.js'; +export * from './keysignote.js'; +export * from './modifier.js'; +export * from './modifiercontext.js'; +export * from './multimeasurerest.js'; +export * from './music.js'; +export * from './note.js'; +export * from './notehead.js'; +export * from './notesubgroup.js'; +export * from './ornament.js'; +export * from './parenthesis.js'; +export * from './parser.js'; +export * from './pedalmarking.js'; +export * from './registry.js'; +export * from './rendercontext.js'; +export * from './renderer.js'; +export * from './repeatnote.js'; +export * from './stave.js'; +export * from './stavebarline.js'; +export * from './staveconnector.js'; +export * from './stavehairpin.js'; +export * from './staveline.js'; +export * from './stavemodifier.js'; +export * from './stavenote.js'; +export * from './staverepetition.js'; +export * from './stavesection.js'; +export * from './stavetempo.js'; +export * from './stavetext.js'; +export * from './stavetie.js'; +export * from './stavevolta.js'; +export * from './stem.js'; +export * from './stemmablenote.js'; +export * from './stringnumber.js'; +export * from './strokes.js'; +export * from './svgcontext.js'; +export * from './system.js'; +export * from './tabnote.js'; +export * from './tabslide.js'; +export * from './tabstave.js'; +export * from './tabtie.js'; +export * from './textbracket.js'; +export * from './textdynamics.js'; +export * from './textformatter.js'; +export * from './textnote.js'; +export * from './tickable.js'; +export * from './tickcontext.js'; +export * from './timesigglyph.js'; +export * from './timesignature.js'; +export * from './timesignote.js'; +export * from './tremolo.js'; +export * from './tuning.js'; +export * from './tuplet.js'; +export * from './typeguard.js'; +export * from './util.js'; +export * from './vex.js'; +export * from './vibrato.js'; +export * from './vibratobracket.js'; +export * from './voice.js'; +export * from './web.js'; diff --git a/build/esm/src/keymanager.js b/build/esm/src/keymanager.js new file mode 100644 index 0000000000..6ccffe83c2 --- /dev/null +++ b/build/esm/src/keymanager.js @@ -0,0 +1,99 @@ +import { Music } from './music.js'; +import { RuntimeError } from './util.js'; +export class KeyManager { + constructor(key) { + this.music = new Music(); + this.setKey(key); + } + setKey(key) { + this.key = key; + this.reset(); + return this; + } + getKey() { + return this.key; + } + reset() { + this.keyParts = this.music.getKeyParts(this.key); + this.keyString = this.keyParts.root; + if (this.keyParts.accidental) + this.keyString += this.keyParts.accidental; + const is_supported_type = Music.scaleTypes[this.keyParts.type]; + if (!is_supported_type) { + throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`); + } + this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]); + this.scaleMap = {}; + this.scaleMapByValue = {}; + this.originalScaleMapByValue = {}; + const noteLocation = Music.root_indices[this.keyParts.root]; + for (let i = 0; i < Music.roots.length; ++i) { + const index = (noteLocation + i) % Music.roots.length; + const rootName = Music.roots[index]; + const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]); + this.scaleMap[rootName] = noteName; + this.scaleMapByValue[this.scale[i]] = noteName; + this.originalScaleMapByValue[this.scale[i]] = noteName; + } + return this; + } + getAccidental(key) { + const root = this.music.getKeyParts(key).root; + const parts = this.music.getNoteParts(this.scaleMap[root]); + return { + note: this.scaleMap[root], + accidental: parts.accidental, + }; + } + selectNote(note) { + note = note.toLowerCase(); + const parts = this.music.getNoteParts(note); + const scaleNote = this.scaleMap[parts.root]; + const modparts = this.music.getNoteParts(scaleNote); + if (scaleNote === note) { + return { + note: scaleNote, + accidental: parts.accidental, + change: false, + }; + } + const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)]; + if (valueNote != null) { + return { + note: valueNote, + accidental: this.music.getNoteParts(valueNote).accidental, + change: false, + }; + } + const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)]; + if (originalValueNote != null) { + this.scaleMap[modparts.root] = originalValueNote; + delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)]; + this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote; + return { + note: originalValueNote, + accidental: this.music.getNoteParts(originalValueNote).accidental, + change: true, + }; + } + if (modparts.root === note) { + delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; + this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root; + this.scaleMap[modparts.root] = modparts.root; + return { + note: modparts.root, + accidental: undefined, + change: true, + }; + } + delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; + this.scaleMapByValue[this.music.getNoteValue(note)] = note; + delete this.scaleMap[modparts.root]; + this.scaleMap[modparts.root] = note; + return { + note, + accidental: parts.accidental, + change: true, + }; + } +} diff --git a/build/esm/src/keysignature.js b/build/esm/src/keysignature.js new file mode 100644 index 0000000000..83bdcb979f --- /dev/null +++ b/build/esm/src/keysignature.js @@ -0,0 +1,258 @@ +import { Glyph } from './glyph.js'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { Tables } from './tables.js'; +import { defined } from './util.js'; +class KeySignature extends StaveModifier { + static get CATEGORY() { + return "KeySignature"; + } + constructor(keySpec, cancelKeySpec, alterKeySpec) { + super(); + this.accList = []; + this.setKeySig(keySpec, cancelKeySpec, alterKeySpec); + this.setPosition(StaveModifierPosition.BEGIN); + this.glyphFontScale = Tables.NOTATION_FONT_SCALE; + this.glyphs = []; + this.xPositions = []; + this.paddingForced = false; + } + convertToGlyph(acc, nextAcc) { + const accGlyphData = Tables.accidentalCodes(acc.type); + const glyph = new Glyph(accGlyphData.code, this.glyphFontScale); + let extraWidth = 1; + if (acc.type === 'n' && nextAcc) { + const spacing = KeySignature.accidentalSpacing[nextAcc.type]; + if (spacing) { + const isAbove = nextAcc.line >= acc.line; + extraWidth = isAbove ? spacing.above : spacing.below; + } + } + this.placeGlyphOnLine(glyph, this.checkStave(), acc.line); + this.glyphs.push(glyph); + const xPosition = this.xPositions[this.xPositions.length - 1]; + const glyphWidth = glyph.getMetrics().width + extraWidth; + this.xPositions.push(xPosition + glyphWidth); + this.width += glyphWidth; + } + cancelKey(spec) { + this.formatted = false; + this.cancelKeySpec = spec; + return this; + } + convertToCancelAccList(spec) { + const cancel_accList = Tables.keySignature(spec); + const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type; + const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length; + if (naturals < 1) + return undefined; + const cancelled = []; + for (let i = 0; i < naturals; i++) { + let index = i; + if (!different_types) { + index = cancel_accList.length - naturals + i; + } + const acc = cancel_accList[index]; + cancelled.push({ type: 'n', line: acc.line }); + } + this.accList = cancelled.concat(this.accList); + return { + accList: cancelled, + type: cancel_accList[0].type, + }; + } + addToStave(stave) { + this.paddingForced = true; + stave.addModifier(this); + return this; + } + convertAccLines(clef, type, accList = this.accList) { + let offset = 0.0; + let customLines; + switch (clef) { + case 'soprano': + if (type === '#') + customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1]; + else + offset = -1; + break; + case 'mezzo-soprano': + if (type === 'b') + customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5]; + else + offset = 1.5; + break; + case 'alto': + offset = 0.5; + break; + case 'tenor': + if (type === '#') + customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5]; + else + offset = -0.5; + break; + case 'baritone-f': + case 'baritone-c': + if (type === 'b') + customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2]; + else + offset = 2; + break; + case 'bass': + case 'french': + offset = 1; + break; + default: + break; + } + let i; + if (typeof customLines !== 'undefined') { + for (i = 0; i < accList.length; ++i) { + accList[i].line = customLines[i]; + } + } + else if (offset !== 0) { + for (i = 0; i < accList.length; ++i) { + accList[i].line += offset; + } + } + } + getPadding(index) { + if (!this.formatted) + this.format(); + return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding; + } + getWidth() { + if (!this.formatted) + this.format(); + return this.width; + } + setKeySig(keySpec, cancelKeySpec, alterKeySpec) { + this.formatted = false; + this.keySpec = keySpec; + this.cancelKeySpec = cancelKeySpec; + this.alterKeySpec = alterKeySpec; + return this; + } + alterKey(alterKeySpec) { + this.formatted = false; + this.alterKeySpec = alterKeySpec; + return this; + } + convertToAlterAccList(alterKeySpec) { + const max = Math.min(alterKeySpec.length, this.accList.length); + for (let i = 0; i < max; ++i) { + if (alterKeySpec[i]) { + this.accList[i].type = alterKeySpec[i]; + } + } + } + format() { + const stave = this.checkStave(); + this.width = 0; + this.glyphs = []; + this.xPositions = [0]; + this.accList = Tables.keySignature(defined(this.keySpec)); + const accList = this.accList; + const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined; + let cancelAccList; + if (this.cancelKeySpec) { + cancelAccList = this.convertToCancelAccList(this.cancelKeySpec); + } + if (this.alterKeySpec) { + this.convertToAlterAccList(this.alterKeySpec); + } + if (this.accList.length > 0) { + const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef(); + if (cancelAccList) { + this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList); + } + this.convertAccLines(clef, firstAccidentalType, accList); + for (let i = 0; i < this.accList.length; ++i) { + this.convertToGlyph(this.accList[i], this.accList[i + 1]); + } + } + this.formatted = true; + } + getGlyphs() { + if (!this.formatted) + this.format(); + return this.glyphs; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + if (!this.formatted) + this.format(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('keysignature', this.getAttribute('id')); + for (let i = 0; i < this.glyphs.length; i++) { + const glyph = this.glyphs[i]; + const x = this.x + this.xPositions[i]; + glyph.setStave(stave); + glyph.setContext(ctx); + glyph.renderToStave(x); + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} +KeySignature.accidentalSpacing = { + '#': { + above: 6, + below: 4, + }, + b: { + above: 4, + below: 7, + }, + n: { + above: 4, + below: 1, + }, + '##': { + above: 6, + below: 4, + }, + bb: { + above: 4, + below: 7, + }, + db: { + above: 4, + below: 7, + }, + d: { + above: 4, + below: 7, + }, + bbs: { + above: 4, + below: 7, + }, + '++': { + above: 6, + below: 4, + }, + '+': { + above: 6, + below: 4, + }, + '+-': { + above: 6, + below: 4, + }, + '++-': { + above: 6, + below: 4, + }, + bs: { + above: 4, + below: 10, + }, + bss: { + above: 4, + below: 10, + }, +}; +export { KeySignature }; diff --git a/build/esm/src/keysignote.js b/build/esm/src/keysignote.js new file mode 100644 index 0000000000..13998c1698 --- /dev/null +++ b/build/esm/src/keysignote.js @@ -0,0 +1,28 @@ +import { KeySignature } from './keysignature.js'; +import { Note } from './note.js'; +export class KeySigNote extends Note { + static get CATEGORY() { + return "KeySigNote"; + } + constructor(keySpec, cancelKeySpec, alterKeySpec) { + super({ duration: 'b' }); + this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec); + this.ignore_ticks = true; + } + addToModifierContext(mc) { + return this; + } + preFormat() { + this.preFormatted = true; + this.keySignature.setStave(this.checkStave()); + this.setWidth(this.keySignature.getWidth()); + return this; + } + draw() { + const ctx = this.checkStave().checkContext(); + this.setRendered(); + this.keySignature.setX(this.getAbsoluteX()); + this.keySignature.setContext(ctx); + this.keySignature.draw(); + } +} diff --git a/build/esm/src/modifier.js b/build/esm/src/modifier.js new file mode 100644 index 0000000000..2da5e569b1 --- /dev/null +++ b/build/esm/src/modifier.js @@ -0,0 +1,128 @@ +import { Element } from './element.js'; +import { defined, RuntimeError } from './util.js'; +export var ModifierPosition; +(function (ModifierPosition) { + ModifierPosition[ModifierPosition["CENTER"] = 0] = "CENTER"; + ModifierPosition[ModifierPosition["LEFT"] = 1] = "LEFT"; + ModifierPosition[ModifierPosition["RIGHT"] = 2] = "RIGHT"; + ModifierPosition[ModifierPosition["ABOVE"] = 3] = "ABOVE"; + ModifierPosition[ModifierPosition["BELOW"] = 4] = "BELOW"; +})(ModifierPosition || (ModifierPosition = {})); +export class Modifier extends Element { + static get CATEGORY() { + return "Modifier"; + } + static get Position() { + return ModifierPosition; + } + static get PositionString() { + return { + center: ModifierPosition.CENTER, + above: ModifierPosition.ABOVE, + below: ModifierPosition.BELOW, + left: ModifierPosition.LEFT, + right: ModifierPosition.RIGHT, + }; + } + constructor() { + super(); + this.width = 0; + this.text_line = 0; + this.position = Modifier.Position.LEFT; + this.x_shift = 0; + this.y_shift = 0; + this.spacingFromNextModifier = 0; + } + reset() { + } + getWidth() { + return this.width; + } + setWidth(width) { + this.width = width; + return this; + } + getNote() { + return defined(this.note, 'NoNote', 'Modifier has no note.'); + } + checkAttachedNote() { + const category = this.getCategory(); + defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`); + return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`); + } + setNote(note) { + this.note = note; + return this; + } + getIndex() { + return this.index; + } + checkIndex() { + return defined(this.index, 'NoIndex', 'Modifier has an invalid index.'); + } + setIndex(index) { + this.index = index; + return this; + } + getModifierContext() { + return this.modifierContext; + } + checkModifierContext() { + return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required'); + } + setModifierContext(c) { + this.modifierContext = c; + return this; + } + getPosition() { + return this.position; + } + setPosition(position) { + this.position = typeof position === 'string' ? Modifier.PositionString[position] : position; + this.reset(); + return this; + } + setTextLine(line) { + this.text_line = line; + return this; + } + setYShift(y) { + this.y_shift = y; + return this; + } + setSpacingFromNextModifier(x) { + this.spacingFromNextModifier = x; + } + getSpacingFromNextModifier() { + return this.spacingFromNextModifier; + } + setXShift(x) { + this.x_shift = 0; + if (this.position === Modifier.Position.LEFT) { + this.x_shift -= x; + } + else { + this.x_shift += x; + } + return this; + } + getXShift() { + return this.x_shift; + } + draw() { + this.checkContext(); + throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.'); + } + alignSubNotesWithNote(subNotes, note) { + const tickContext = note.getTickContext(); + const metrics = tickContext.getMetrics(); + const stave = note.getStave(); + const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier(); + subNotes.forEach((subNote) => { + const subTickContext = subNote.getTickContext(); + if (stave) + subNote.setStave(stave); + subTickContext.setXOffset(subNoteXOffset); + }); + } +} diff --git a/build/esm/src/modifiercontext.js b/build/esm/src/modifiercontext.js new file mode 100644 index 0000000000..e85d41ec7b --- /dev/null +++ b/build/esm/src/modifiercontext.js @@ -0,0 +1,111 @@ +import { Accidental } from './accidental.js'; +import { Annotation } from './annotation.js'; +import { Articulation } from './articulation.js'; +import { Bend } from './bend.js'; +import { ChordSymbol } from './chordsymbol.js'; +import { Dot } from './dot.js'; +import { FretHandFinger } from './frethandfinger.js'; +import { GraceNoteGroup } from './gracenotegroup.js'; +import { NoteSubGroup } from './notesubgroup.js'; +import { Ornament } from './ornament.js'; +import { Parenthesis } from './parenthesis.js'; +import { StaveNote } from './stavenote.js'; +import { StringNumber } from './stringnumber.js'; +import { Stroke } from './strokes.js'; +import { log, RuntimeError } from './util.js'; +import { Vibrato } from './vibrato.js'; +function L(...args) { + if (ModifierContext.DEBUG) + log('Vex.Flow.ModifierContext', args); +} +class ModifierContext { + constructor() { + this.state = { + left_shift: 0, + right_shift: 0, + text_line: 0, + top_text_line: 0, + }; + this.members = {}; + this.preFormatted = false; + this.postFormatted = false; + this.formatted = false; + this.width = 0; + this.spacing = 0; + } + addModifier(member) { + L('addModifier is deprecated, use addMember instead.'); + return this.addMember(member); + } + addMember(member) { + const category = member.getCategory(); + if (!this.members[category]) { + this.members[category] = []; + } + this.members[category].push(member); + member.setModifierContext(this); + this.preFormatted = false; + return this; + } + getModifiers(category) { + L('getModifiers is deprecated, use getMembers instead.'); + return this.getMembers(category); + } + getMembers(category) { + var _a; + return (_a = this.members[category]) !== null && _a !== void 0 ? _a : []; + } + getWidth() { + return this.width; + } + getLeftShift() { + return this.state.left_shift; + } + getRightShift() { + return this.state.right_shift; + } + getState() { + return this.state; + } + getMetrics() { + if (!this.formatted) { + throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.'); + } + return { + width: this.state.left_shift + this.state.right_shift + this.spacing, + spacing: this.spacing, + }; + } + preFormat() { + if (this.preFormatted) + return; + L('Preformatting ModifierContext'); + const state = this.state; + const members = this.members; + StaveNote.format(members["StaveNote"], state); + Parenthesis.format(members["Parenthesis"], state); + Dot.format(members["Dot"], state); + FretHandFinger.format(members["FretHandFinger"], state); + Accidental.format(members["Accidental"], state); + Stroke.format(members["Stroke"], state); + GraceNoteGroup.format(members["GraceNoteGroup"], state); + NoteSubGroup.format(members["NoteSubGroup"], state); + StringNumber.format(members["StringNumber"], state); + Articulation.format(members["Articulation"], state); + Ornament.format(members["Ornament"], state); + Annotation.format(members["Annotation"], state); + ChordSymbol.format(members["ChordSymbol"], state); + Bend.format(members["Bend"], state); + Vibrato.format(members["Vibrato"], state, this); + this.width = state.left_shift + state.right_shift; + this.preFormatted = true; + } + postFormat() { + if (this.postFormatted) + return; + L('Postformatting ModifierContext'); + StaveNote.postFormat(this.getMembers("StaveNote")); + } +} +ModifierContext.DEBUG = false; +export { ModifierContext }; diff --git a/build/esm/src/multimeasurerest.js b/build/esm/src/multimeasurerest.js new file mode 100644 index 0000000000..f5ccc5ecfd --- /dev/null +++ b/build/esm/src/multimeasurerest.js @@ -0,0 +1,174 @@ +import { Element } from './element.js'; +import { Glyph } from './glyph.js'; +import { NoteHead } from './notehead.js'; +import { StaveModifierPosition } from './stavemodifier.js'; +import { Tables } from './tables.js'; +import { TimeSignature } from './timesignature.js'; +import { isBarline } from './typeguard.js'; +import { defined } from './util.js'; +let semibreve_rest; +function get_semibreve_rest() { + if (!semibreve_rest) { + const noteHead = new NoteHead({ duration: 'w', note_type: 'r' }); + semibreve_rest = { + glyph_font_scale: noteHead.render_options.glyph_font_scale, + glyph_code: noteHead.glyph_code, + width: noteHead.getWidth(), + }; + } + return semibreve_rest; +} +export class MultiMeasureRest extends Element { + static get CATEGORY() { + return "MultiMeasureRest"; + } + constructor(number_of_measures, options) { + var _a; + super(); + this.xs = { left: NaN, right: NaN }; + this.hasPaddingLeft = false; + this.hasPaddingRight = false; + this.hasLineThickness = false; + this.hasSymbolSpacing = false; + this.number_of_measures = number_of_measures; + this.hasPaddingLeft = typeof options.padding_left === 'number'; + this.hasPaddingRight = typeof options.padding_right === 'number'; + this.hasLineThickness = typeof options.line_thickness === 'number'; + this.hasSymbolSpacing = typeof options.symbol_spacing === 'number'; + const musicFont = Tables.currentMusicFont(); + this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options); + const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); + this.render_options.number_line += fontLineShift; + } + getXs() { + return this.xs; + } + setStave(stave) { + this.stave = stave; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return defined(this.stave, 'NoStave', 'No stave attached to instance.'); + } + drawLine(stave, ctx, left, right, spacingBetweenLines) { + const options = this.render_options; + const y = stave.getYForLine(options.line); + const padding = (right - left) * 0.1; + left += padding; + right -= padding; + let lineThicknessHalf; + if (this.hasLineThickness) { + lineThicknessHalf = options.line_thickness * 0.5; + } + else { + lineThicknessHalf = spacingBetweenLines * 0.25; + } + const serifThickness = options.serif_thickness; + const top = y - spacingBetweenLines; + const bot = y + spacingBetweenLines; + const leftIndented = left + serifThickness; + const rightIndented = right - serifThickness; + const lineTop = y - lineThicknessHalf; + const lineBottom = y + lineThicknessHalf; + ctx.save(); + ctx.beginPath(); + ctx.moveTo(left, top); + ctx.lineTo(leftIndented, top); + ctx.lineTo(leftIndented, lineTop); + ctx.lineTo(rightIndented, lineTop); + ctx.lineTo(rightIndented, top); + ctx.lineTo(right, top); + ctx.lineTo(right, bot); + ctx.lineTo(rightIndented, bot); + ctx.lineTo(rightIndented, lineBottom); + ctx.lineTo(leftIndented, lineBottom); + ctx.lineTo(leftIndented, bot); + ctx.lineTo(left, bot); + ctx.closePath(); + ctx.fill(); + } + drawSymbols(stave, ctx, left, right, spacingBetweenLines) { + const n4 = Math.floor(this.number_of_measures / 4); + const n = this.number_of_measures % 4; + const n2 = Math.floor(n / 2); + const n1 = n % 2; + const options = this.render_options; + semibreve_rest = undefined; + const rest = get_semibreve_rest(); + const rest_scale = options.semibreve_rest_glyph_scale; + const rest_width = rest.width * (rest_scale / rest.glyph_font_scale); + const glyphs = { + 2: { + width: rest_width * 0.5, + height: spacingBetweenLines, + }, + 1: { + width: rest_width, + }, + }; + const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10; + const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing; + let x = left + (right - left) * 0.5 - width * 0.5; + const line = options.line; + const yTop = stave.getYForLine(line - 1); + const yMiddle = stave.getYForLine(line); + const yBottom = stave.getYForLine(line + 1); + ctx.save(); + ctx.setStrokeStyle('none'); + ctx.setLineWidth(0); + for (let i = 0; i < n4; ++i) { + ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); + ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height); + x += glyphs[2].width + spacing; + } + for (let i = 0; i < n2; ++i) { + ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); + x += glyphs[2].width + spacing; + } + for (let i = 0; i < n1; ++i) { + Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code); + x += glyphs[1].width + spacing; + } + ctx.restore(); + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const stave = this.checkStave(); + let left = stave.getNoteStartX(); + let right = stave.getNoteEndX(); + const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN); + if (begModifiers.length === 1 && isBarline(begModifiers[0])) { + left -= begModifiers[0].getWidth(); + } + const options = this.render_options; + if (this.hasPaddingLeft) { + left = stave.getX() + options.padding_left; + } + if (this.hasPaddingRight) { + right = stave.getX() + stave.getWidth() - options.padding_right; + } + this.xs.left = left; + this.xs.right = right; + const spacingBetweenLines = options.spacing_between_lines_px; + if (options.use_symbols) { + this.drawSymbols(stave, ctx, left, right, spacingBetweenLines); + } + else { + this.drawLine(stave, ctx, left, right, spacingBetweenLines); + } + if (options.show_number) { + const timeSpec = '/' + this.number_of_measures; + const timeSig = new TimeSignature(timeSpec, 0, false); + timeSig.point = options.number_glyph_point; + timeSig.setTimeSig(timeSpec); + timeSig.setStave(stave); + timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5); + timeSig.bottomLine = options.number_line; + timeSig.setContext(ctx).draw(); + } + } +} diff --git a/build/esm/src/music.js b/build/esm/src/music.js new file mode 100644 index 0000000000..d92c3749fe --- /dev/null +++ b/build/esm/src/music.js @@ -0,0 +1,322 @@ +import { RuntimeError } from './util.js'; +export class Music { + static get NUM_TONES() { + return this.canonical_notes.length; + } + static get roots() { + return ['c', 'd', 'e', 'f', 'g', 'a', 'b']; + } + static get root_values() { + return [0, 2, 4, 5, 7, 9, 11]; + } + static get root_indices() { + return { + c: 0, + d: 1, + e: 2, + f: 3, + g: 4, + a: 5, + b: 6, + }; + } + static get canonical_notes() { + return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b']; + } + static get diatonic_intervals() { + return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave']; + } + static get diatonic_accidentals() { + return { + unison: { note: 0, accidental: 0 }, + m2: { note: 1, accidental: -1 }, + M2: { note: 1, accidental: 0 }, + m3: { note: 2, accidental: -1 }, + M3: { note: 2, accidental: 0 }, + p4: { note: 3, accidental: 0 }, + dim5: { note: 4, accidental: -1 }, + p5: { note: 4, accidental: 0 }, + m6: { note: 5, accidental: -1 }, + M6: { note: 5, accidental: 0 }, + b7: { note: 6, accidental: -1 }, + M7: { note: 6, accidental: 0 }, + octave: { note: 7, accidental: 0 }, + }; + } + static get intervals() { + return { + u: 0, + unison: 0, + m2: 1, + b2: 1, + min2: 1, + S: 1, + H: 1, + 2: 2, + M2: 2, + maj2: 2, + T: 2, + W: 2, + m3: 3, + b3: 3, + min3: 3, + M3: 4, + 3: 4, + maj3: 4, + 4: 5, + p4: 5, + '#4': 6, + b5: 6, + aug4: 6, + dim5: 6, + 5: 7, + p5: 7, + '#5': 8, + b6: 8, + aug5: 8, + 6: 9, + M6: 9, + maj6: 9, + b7: 10, + m7: 10, + min7: 10, + dom7: 10, + M7: 11, + maj7: 11, + 8: 12, + octave: 12, + }; + } + static get scales() { + return { + major: [2, 2, 1, 2, 2, 2, 1], + minor: [2, 1, 2, 2, 1, 2, 2], + ionian: [2, 2, 1, 2, 2, 2, 1], + dorian: [2, 1, 2, 2, 2, 1, 2], + phyrgian: [1, 2, 2, 2, 1, 2, 2], + lydian: [2, 2, 2, 1, 2, 2, 1], + mixolydian: [2, 2, 1, 2, 2, 1, 2], + aeolian: [2, 1, 2, 2, 1, 2, 2], + locrian: [1, 2, 2, 1, 2, 2, 2], + }; + } + static get scaleTypes() { + return { + M: Music.scales.major, + m: Music.scales.minor, + }; + } + static get accidentals() { + return ['bb', 'b', 'n', '#', '##']; + } + static get noteValues() { + return { + c: { root_index: 0, int_val: 0 }, + cn: { root_index: 0, int_val: 0 }, + 'c#': { root_index: 0, int_val: 1 }, + 'c##': { root_index: 0, int_val: 2 }, + cb: { root_index: 0, int_val: 11 }, + cbb: { root_index: 0, int_val: 10 }, + d: { root_index: 1, int_val: 2 }, + dn: { root_index: 1, int_val: 2 }, + 'd#': { root_index: 1, int_val: 3 }, + 'd##': { root_index: 1, int_val: 4 }, + db: { root_index: 1, int_val: 1 }, + dbb: { root_index: 1, int_val: 0 }, + e: { root_index: 2, int_val: 4 }, + en: { root_index: 2, int_val: 4 }, + 'e#': { root_index: 2, int_val: 5 }, + 'e##': { root_index: 2, int_val: 6 }, + eb: { root_index: 2, int_val: 3 }, + ebb: { root_index: 2, int_val: 2 }, + f: { root_index: 3, int_val: 5 }, + fn: { root_index: 3, int_val: 5 }, + 'f#': { root_index: 3, int_val: 6 }, + 'f##': { root_index: 3, int_val: 7 }, + fb: { root_index: 3, int_val: 4 }, + fbb: { root_index: 3, int_val: 3 }, + g: { root_index: 4, int_val: 7 }, + gn: { root_index: 4, int_val: 7 }, + 'g#': { root_index: 4, int_val: 8 }, + 'g##': { root_index: 4, int_val: 9 }, + gb: { root_index: 4, int_val: 6 }, + gbb: { root_index: 4, int_val: 5 }, + a: { root_index: 5, int_val: 9 }, + an: { root_index: 5, int_val: 9 }, + 'a#': { root_index: 5, int_val: 10 }, + 'a##': { root_index: 5, int_val: 11 }, + ab: { root_index: 5, int_val: 8 }, + abb: { root_index: 5, int_val: 7 }, + b: { root_index: 6, int_val: 11 }, + bn: { root_index: 6, int_val: 11 }, + 'b#': { root_index: 6, int_val: 0 }, + 'b##': { root_index: 6, int_val: 1 }, + bb: { root_index: 6, int_val: 10 }, + bbb: { root_index: 6, int_val: 9 }, + }; + } + isValidNoteValue(note) { + return note >= 0 && note < Music.canonical_notes.length; + } + isValidIntervalValue(interval) { + return interval >= 0 && interval < Music.diatonic_intervals.length; + } + getNoteParts(noteString) { + if (!noteString || noteString.length < 1) { + throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + if (noteString.length > 3) { + throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + const note = noteString.toLowerCase(); + const regex = /^([cdefgab])(b|bb|n|#|##)?$/; + const match = regex.exec(note); + if (match !== null) { + const root = match[1]; + const accidental = match[2]; + return { + root, + accidental, + }; + } + else { + throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString); + } + } + getKeyParts(keyString) { + if (!keyString || keyString.length < 1) { + throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString); + } + const key = keyString.toLowerCase(); + const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/; + const match = regex.exec(key); + if (match !== null) { + const root = match[1]; + const accidental = match[2]; + let type = match[3]; + if (!type) + type = 'M'; + return { + root, + accidental, + type, + }; + } + else { + throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`); + } + } + getNoteValue(noteString) { + const value = Music.noteValues[noteString]; + if (value === undefined) { + throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`); + } + return value.int_val; + } + getIntervalValue(intervalString) { + const value = Music.intervals[intervalString]; + if (value === undefined) { + throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`); + } + return value; + } + getCanonicalNoteName(noteValue) { + if (!this.isValidNoteValue(noteValue)) { + throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`); + } + return Music.canonical_notes[noteValue]; + } + getCanonicalIntervalName(intervalValue) { + if (!this.isValidIntervalValue(intervalValue)) { + throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`); + } + return Music.diatonic_intervals[intervalValue]; + } + getRelativeNoteValue(noteValue, intervalValue, direction = 1) { + if (direction !== 1 && direction !== -1) { + throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`); + } + let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES; + if (sum < 0) + sum += Music.NUM_TONES; + return sum; + } + getRelativeNoteName(root, noteValue) { + const parts = this.getNoteParts(root); + const rootValue = this.getNoteValue(parts.root); + let interval = noteValue - rootValue; + if (Math.abs(interval) > Music.NUM_TONES - 3) { + let multiplier = 1; + if (interval > 0) + multiplier = -1; + const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier; + if (Math.abs(reverse_interval) > 2) { + throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); + } + else { + interval = reverse_interval; + } + } + if (Math.abs(interval) > 2) { + throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); + } + let relativeNoteName = parts.root; + if (interval > 0) { + for (let i = 1; i <= interval; ++i) { + relativeNoteName += '#'; + } + } + else if (interval < 0) { + for (let i = -1; i >= interval; --i) { + relativeNoteName += 'b'; + } + } + return relativeNoteName; + } + getScaleTones(key, intervals) { + const tones = [key]; + let nextNote = key; + for (let i = 0; i < intervals.length; i++) { + nextNote = this.getRelativeNoteValue(nextNote, intervals[i]); + if (nextNote !== key) + tones.push(nextNote); + } + return tones; + } + getIntervalBetween(note1, note2, direction = 1) { + if (direction !== 1 && direction !== -1) { + throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`); + } + if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) { + throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`); + } + let difference = direction === 1 ? note2 - note1 : note1 - note2; + if (difference < 0) + difference += Music.NUM_TONES; + return difference; + } + createScaleMap(keySignature) { + const keySigParts = this.getKeyParts(keySignature); + if (!keySigParts.type) + throw new RuntimeError('BadArguments', 'Unsupported key type: undefined'); + const scaleName = Music.scaleTypes[keySigParts.type]; + let keySigString = keySigParts.root; + if (keySigParts.accidental) + keySigString += keySigParts.accidental; + if (!scaleName) + throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature); + const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName); + const noteLocation = Music.root_indices[keySigParts.root]; + const scaleMap = {}; + for (let i = 0; i < Music.roots.length; ++i) { + const index = (noteLocation + i) % Music.roots.length; + const rootName = Music.roots[index]; + let noteName = this.getRelativeNoteName(rootName, scale[i]); + if (noteName.length === 1) { + noteName += 'n'; + } + scaleMap[rootName] = noteName; + } + return scaleMap; + } +} diff --git a/build/esm/src/note.js b/build/esm/src/note.js new file mode 100644 index 0000000000..a31bb3134a --- /dev/null +++ b/build/esm/src/note.js @@ -0,0 +1,369 @@ +import { Font } from './font.js'; +import { drawDot } from './rendercontext.js'; +import { Tables } from './tables.js'; +import { Tickable } from './tickable.js'; +import { defined, RuntimeError } from './util.js'; +export class Note extends Tickable { + static get CATEGORY() { + return "Note"; + } + static plotMetrics(ctx, note, yPos) { + const metrics = note.getMetrics(); + const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx; + const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx; + const xAbs = note.getAbsoluteX(); + const xPost1 = note.getAbsoluteX() + metrics.notePx; + const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx; + const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx; + const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0); + const xWidth = xEnd - xStart; + ctx.save(); + ctx.setFont(Font.SANS_SERIF, 8); + ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos); + const y = yPos + 7; + function stroke(x1, x2, color, yy = y) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(3); + ctx.moveTo(x1 + note.getXShift(), yy); + ctx.lineTo(x2 + note.getXShift(), yy); + ctx.stroke(); + } + stroke(xStart, xPre1, 'red'); + stroke(xPre1, xAbs, '#999'); + stroke(xAbs, xPost1, 'green'); + stroke(xPost1, xPost2, '#999'); + stroke(xPost2, xEnd, 'red'); + stroke(xEnd, xFreedomRight, '#DD0'); + stroke(xStart - note.getXShift(), xStart, '#BBB'); + drawDot(ctx, xAbs + note.getXShift(), y, 'blue'); + const formatterMetrics = note.getFormatterMetrics(); + if (formatterMetrics.iterations > 0) { + const spaceDeviation = formatterMetrics.space.deviation; + const prefix = spaceDeviation >= 0 ? '+' : ''; + ctx.setFillStyle('red'); + ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10); + } + ctx.restore(); + } + static parseDuration(durationString) { + if (!durationString) { + return undefined; + } + const regexp = /(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/; + const result = regexp.exec(durationString); + if (!result) { + return undefined; + } + const duration = result[1]; + const dots = result[2].length; + const type = result[3] || 'n'; + return { duration, dots, type }; + } + static parseNoteStruct(noteStruct) { + const durationProps = Note.parseDuration(noteStruct.duration); + if (!durationProps) { + return undefined; + } + let type = noteStruct.type; + if (type && !Tables.validTypes[type]) { + return undefined; + } + const customTypes = []; + if (!type) { + type = durationProps.type || 'n'; + if (noteStruct.keys !== undefined) { + noteStruct.keys.forEach((k, i) => { + const result = k.split('/'); + customTypes[i] = (result && result.length === 3 ? result[2] : type); + }); + } + } + let ticks = Tables.durationToTicks(durationProps.duration); + if (!ticks) { + return undefined; + } + const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots; + if (typeof dots !== 'number') { + return undefined; + } + let currentTicks = ticks; + for (let i = 0; i < dots; i++) { + if (currentTicks <= 1) + return undefined; + currentTicks = currentTicks / 2; + ticks += currentTicks; + } + return { + duration: durationProps.duration, + type, + customTypes, + dots, + ticks, + }; + } + constructor(noteStruct) { + super(); + if (!noteStruct) { + throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.'); + } + const parsedNoteStruct = Note.parseNoteStruct(noteStruct); + if (!parsedNoteStruct) { + throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`); + } + this.keys = noteStruct.keys || []; + this.keyProps = []; + this.duration = parsedNoteStruct.duration; + this.noteType = parsedNoteStruct.type; + this.customTypes = parsedNoteStruct.customTypes; + if (noteStruct.duration_override) { + this.setDuration(noteStruct.duration_override); + } + else { + this.setIntrinsicTicks(parsedNoteStruct.ticks); + } + this.modifiers = []; + this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType); + this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t)); + this.playNote = undefined; + this.ignore_ticks = false; + this.width = 0; + this.leftDisplacedHeadPx = 0; + this.rightDisplacedHeadPx = 0; + this.x_shift = 0; + this.ys = []; + if (noteStruct.align_center) { + this.setCenterAlignment(noteStruct.align_center); + } + this.render_options = { + annotation_spacing: 5, + glyph_font_scale: 1, + stroke_px: 1, + scale: 1, + font: '', + y_shift: 0, + }; + } + getPlayNote() { + return this.playNote; + } + setPlayNote(note) { + this.playNote = note; + return this; + } + isRest() { + return false; + } + addStroke(index, stroke) { + stroke.setNote(this); + stroke.setIndex(index); + this.modifiers.push(stroke); + this.preFormatted = false; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return defined(this.stave, 'NoStave', 'No stave attached to instance.'); + } + setStave(stave) { + this.stave = stave; + this.setYs([stave.getYForLine(0)]); + this.setContext(this.stave.getContext()); + return this; + } + getLeftDisplacedHeadPx() { + return this.leftDisplacedHeadPx; + } + getRightDisplacedHeadPx() { + return this.rightDisplacedHeadPx; + } + setLeftDisplacedHeadPx(x) { + this.leftDisplacedHeadPx = x; + return this; + } + setRightDisplacedHeadPx(x) { + this.rightDisplacedHeadPx = x; + return this; + } + shouldIgnoreTicks() { + return this.ignore_ticks; + } + getLineNumber(isTopNote) { + return 0; + } + getLineForRest() { + return 0; + } + getGlyph() { + return this.glyphProps; + } + getGlyphProps() { + return this.glyphProps; + } + getGlyphWidth() { + return this.glyphProps.getWidth(this.render_options.glyph_font_scale); + } + setYs(ys) { + this.ys = ys; + return this; + } + getYs() { + if (this.ys.length === 0) { + throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.'); + } + return this.ys; + } + getYForTopText(text_line) { + return this.checkStave().getYForTopText(text_line); + } + getVoice() { + if (!this.voice) + throw new RuntimeError('NoVoice', 'Note has no voice.'); + return this.voice; + } + setVoice(voice) { + this.voice = voice; + this.preFormatted = false; + return this; + } + getTickContext() { + return this.checkTickContext(); + } + setTickContext(tc) { + this.tickContext = tc; + this.preFormatted = false; + return this; + } + getDuration() { + return this.duration; + } + isDotted() { + return this.getModifiersByType("Dot").length > 0; + } + hasStem() { + return false; + } + getNoteType() { + return this.noteType; + } + getBeam() { + return this.beam; + } + checkBeam() { + return defined(this.beam, 'NoBeam', 'No beam attached to instance'); + } + hasBeam() { + return this.beam != undefined; + } + setBeam(beam) { + this.beam = beam; + return this; + } + addModifier(modifier, index = 0) { + const signature = 'Note.addModifier(modifier: Modifier, index: number=0)'; + if (typeof index === 'string') { + index = parseInt(index); + console.warn(signature + ' expected a number for `index`, but received a string.'); + } + if (typeof modifier !== 'object' || typeof index !== 'number') { + throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.'); + } + modifier.setNote(this); + modifier.setIndex(index); + super.addModifier(modifier); + return this; + } + getModifiersByType(type) { + return this.modifiers.filter((modifier) => modifier.getCategory() === type); + } + getModifierStartXY(position, index, options) { + if (!this.preFormatted) { + throw new RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + return { + x: this.getAbsoluteX(), + y: this.ys[0], + }; + } + getRightParenthesisPx(index) { + const props = this.getKeyProps()[index]; + return props.displaced ? this.getRightDisplacedHeadPx() : 0; + } + getLeftParenthesisPx(index) { + const props = this.getKeyProps()[index]; + return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift; + } + getFirstDotPx() { + let px = this.getRightDisplacedHeadPx(); + if (this.checkModifierContext().getMembers('Parenthesis').length !== 0) + px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width'); + return px; + } + getMetrics() { + if (!this.preFormatted) { + throw new RuntimeError('UnformattedNote', "Can't call getMetrics on an unformatted note."); + } + const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0; + const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0; + const width = this.getWidth(); + const glyphWidth = this.getGlyphWidth(); + const notePx = width - + modLeftPx - + modRightPx - + this.leftDisplacedHeadPx - + this.rightDisplacedHeadPx; + return { + width, + glyphWidth, + notePx, + modLeftPx, + modRightPx, + leftDisplacedHeadPx: this.leftDisplacedHeadPx, + rightDisplacedHeadPx: this.rightDisplacedHeadPx, + glyphPx: 0, + }; + } + getAbsoluteX() { + const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); + let x = tickContext.getX(); + if (this.stave) { + x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding'); + } + if (this.isCenterAligned()) { + x += this.getCenterXShift(); + } + return x; + } + static getPoint(size) { + return size == 'default' ? Tables.NOTATION_FONT_SCALE : (Tables.NOTATION_FONT_SCALE / 5) * 3; + } + getStemDirection() { + throw new RuntimeError('NoStem', 'No stem attached to this note.'); + } + getStemExtents() { + throw new RuntimeError('NoStem', 'No stem attached to this note.'); + } + getTieRightX() { + let tieStartX = this.getAbsoluteX(); + const note_glyph_width = this.glyphProps.getWidth(); + tieStartX += note_glyph_width / 2; + tieStartX += -this.width / 2 + this.width + 2; + return tieStartX; + } + getTieLeftX() { + let tieEndX = this.getAbsoluteX(); + const note_glyph_width = this.glyphProps.getWidth(); + tieEndX += note_glyph_width / 2; + tieEndX -= this.width / 2 + 2; + return tieEndX; + } + getKeys() { + return this.keys; + } + getKeyProps() { + return this.keyProps; + } +} diff --git a/build/esm/src/notehead.js b/build/esm/src/notehead.js new file mode 100644 index 0000000000..e2a2a9a46c --- /dev/null +++ b/build/esm/src/notehead.js @@ -0,0 +1,169 @@ +import { BoundingBox } from './boundingbox.js'; +import { Glyph } from './glyph.js'; +import { Note } from './note.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { defined, log } from './util.js'; +function L(...args) { + if (NoteHead.DEBUG) + log('Vex.Flow.NoteHead', args); +} +function drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) { + const width = Tables.SLASH_NOTEHEAD_WIDTH; + ctx.save(); + ctx.setLineWidth(Tables.STEM_WIDTH); + let fill = false; + if (Tables.durationToNumber(duration) > 2) { + fill = true; + } + if (!fill) + x -= (Tables.STEM_WIDTH / 2) * stem_direction; + ctx.beginPath(); + ctx.moveTo(x, y + staveSpace); + ctx.lineTo(x, y + 1); + ctx.lineTo(x + width, y - staveSpace); + ctx.lineTo(x + width, y); + ctx.lineTo(x, y + staveSpace); + ctx.closePath(); + if (fill) { + ctx.fill(); + } + else { + ctx.stroke(); + } + if (Tables.durationToFraction(duration).equals(0.5)) { + const breve_lines = [-3, -1, width + 1, width + 3]; + for (let i = 0; i < breve_lines.length; i++) { + ctx.beginPath(); + ctx.moveTo(x + breve_lines[i], y - 10); + ctx.lineTo(x + breve_lines[i], y + 11); + ctx.stroke(); + } + } + ctx.restore(); +} +class NoteHead extends Note { + static get CATEGORY() { + return "NoteHead"; + } + constructor(noteStruct) { + super(noteStruct); + this.custom_glyph = false; + this.stem_up_x_offset = 0; + this.stem_down_x_offset = 0; + this.index = noteStruct.index; + this.x = noteStruct.x || 0; + this.y = noteStruct.y || 0; + if (noteStruct.note_type) + this.noteType = noteStruct.note_type; + this.displaced = noteStruct.displaced || false; + this.stem_direction = noteStruct.stem_direction || Stem.UP; + this.line = noteStruct.line || 0; + this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType); + defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) { + this.glyphProps.code_head = this.glyphProps.ledger_code_head; + } + this.glyph_code = this.glyphProps.code_head; + this.x_shift = noteStruct.x_shift || 0; + if (noteStruct.custom_glyph_code) { + this.custom_glyph = true; + this.glyph_code = noteStruct.custom_glyph_code; + this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0; + this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0; + } + this.setStyle(noteStruct.style); + this.slashed = noteStruct.slashed || false; + this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE }); + this.setWidth(this.custom_glyph && + !this.glyph_code.startsWith('noteheadSlashed') && + !this.glyph_code.startsWith('noteheadCircled') + ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale) + : this.glyphProps.getWidth(this.render_options.glyph_font_scale)); + } + getWidth() { + return this.width; + } + isDisplaced() { + return this.displaced === true; + } + setX(x) { + this.x = x; + return this; + } + getY() { + return this.y; + } + setY(y) { + this.y = y; + return this; + } + getLine() { + return this.line; + } + setLine(line) { + this.line = line; + return this; + } + getAbsoluteX() { + const x = !this.preFormatted ? this.x : super.getAbsoluteX(); + const displacementStemAdjustment = Stem.WIDTH / 2; + const musicFont = Tables.currentMusicFont(); + const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction; + const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction; + return (x + + fontShift + + (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0)); + } + getBoundingBox() { + const spacing = this.checkStave().getSpacingBetweenLines(); + const half_spacing = spacing / 2; + const min_y = this.y - half_spacing; + return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing); + } + setStave(stave) { + const line = this.getLine(); + this.stave = stave; + if (this.stave) { + this.setY(this.stave.getYForNote(line)); + this.setContext(this.stave.getContext()); + } + return this; + } + preFormat() { + if (this.preFormatted) + return this; + const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx; + this.setWidth(width); + this.preFormatted = true; + return this; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let head_x = this.getAbsoluteX(); + if (this.custom_glyph) { + head_x += + this.stem_direction === Stem.UP + ? this.stem_up_x_offset + + (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0) + : this.stem_down_x_offset; + } + const y = this.y; + L("Drawing note head '", this.noteType, this.duration, "' at", head_x, y); + const stem_direction = this.stem_direction; + const glyph_font_scale = this.render_options.glyph_font_scale; + const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`; + if (this.noteType === 's') { + const staveSpace = this.checkStave().getSpacingBetweenLines(); + drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace); + } + else { + Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, { + category: `noteHead.${categorySuffix}`, + }); + } + } +} +NoteHead.DEBUG = false; +export { NoteHead }; diff --git a/build/esm/src/notesubgroup.js b/build/esm/src/notesubgroup.js new file mode 100644 index 0000000000..b91f3d0ada --- /dev/null +++ b/build/esm/src/notesubgroup.js @@ -0,0 +1,59 @@ +import { Formatter } from './formatter.js'; +import { Modifier } from './modifier.js'; +import { Tables } from './tables.js'; +import { Voice } from './voice.js'; +export class NoteSubGroup extends Modifier { + static get CATEGORY() { + return "NoteSubGroup"; + } + static format(groups, state) { + if (!groups || groups.length === 0) + return false; + let width = 0; + for (let i = 0; i < groups.length; ++i) { + const group = groups[i]; + group.preFormat(); + width += group.getWidth(); + } + state.left_shift += width; + return true; + } + constructor(subNotes) { + super(); + this.preFormatted = false; + this.position = Modifier.Position.LEFT; + this.subNotes = subNotes; + this.subNotes.forEach((subNote) => { + subNote.setIgnoreTicks(false); + }); + this.width = 0; + this.formatter = new Formatter(); + this.voice = new Voice({ + num_beats: 4, + beat_value: 4, + resolution: Tables.RESOLUTION, + }).setStrict(false); + this.voice.addTickables(this.subNotes); + } + preFormat() { + if (this.preFormatted) + return; + this.formatter.joinVoices([this.voice]).format([this.voice], 0); + this.setWidth(this.formatter.getMinTotalWidth()); + this.preFormatted = true; + } + setWidth(width) { + this.width = width; + return this; + } + getWidth() { + return this.width; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + this.alignSubNotesWithNote(this.subNotes, note); + this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle()); + } +} diff --git a/build/esm/src/ornament.js b/build/esm/src/ornament.js new file mode 100644 index 0000000000..f7197c6b74 --- /dev/null +++ b/build/esm/src/ornament.js @@ -0,0 +1,215 @@ +import { Glyph } from './glyph.js'; +import { Modifier } from './modifier.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { TickContext } from './tickcontext.js'; +import { isTabNote } from './typeguard.js'; +import { defined, log, RuntimeError } from './util.js'; +function L(...args) { + if (Ornament.DEBUG) + log('Vex.Flow.Ornament', args); +} +class Ornament extends Modifier { + static get CATEGORY() { + return "Ornament"; + } + static get minPadding() { + const musicFont = Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + static format(ornaments, state) { + if (!ornaments || ornaments.length === 0) + return false; + let width = 0; + let right_shift = state.right_shift; + let left_shift = state.left_shift; + let yOffset = 0; + for (let i = 0; i < ornaments.length; ++i) { + const ornament = ornaments[i]; + const increment = 2; + if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) { + ornament.x_shift += right_shift + 2; + } + if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) { + ornament.x_shift -= left_shift + 2; + } + if (ornament.reportedWidth && ornament.x_shift < 0) { + left_shift += ornament.reportedWidth; + } + else if (ornament.reportedWidth && ornament.x_shift >= 0) { + right_shift += ornament.reportedWidth + Ornament.minPadding; + } + else { + width = Math.max(ornament.getWidth(), width); + } + if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) { + const ornamentNote = defined(ornament.note, 'NoAttachedNote'); + if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) { + state.top_text_line += increment; + ornament.y_shift += yOffset; + yOffset -= ornament.glyph.bbox.getH(); + } + else { + state.text_line += increment; + ornament.y_shift += yOffset; + yOffset += ornament.glyph.bbox.getH(); + } + } + else { + if (ornament.getPosition() === Modifier.Position.ABOVE) { + ornament.setTextLine(state.top_text_line); + state.top_text_line += increment; + } + else { + ornament.setTextLine(state.text_line); + state.text_line += increment; + } + } + } + state.left_shift = left_shift + width / 2; + state.right_shift = right_shift + width / 2; + return true; + } + static get ornamentNoteTransition() { + return ['flip', 'jazzTurn', 'smear']; + } + static get ornamentAttack() { + return ['scoop']; + } + static get ornamentAlignWithNoteHead() { + return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop']; + } + static get ornamentRelease() { + return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip']; + } + static get ornamentArticulation() { + return ['bend', 'plungerClosed', 'plungerOpen']; + } + getMetrics() { + const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament; + if (!ornamentMetrics) + throw new RuntimeError('BadMetrics', `ornament missing`); + return ornamentMetrics[this.ornament.code]; + } + constructor(type) { + super(); + this.type = type; + this.delayed = false; + this.render_options = { + font_scale: Tables.NOTATION_FONT_SCALE, + accidentalLowerPadding: 3, + accidentalUpperPadding: 3, + }; + this.ornament = Tables.ornamentCodes(this.type); + const metrics = this.getMetrics(); + this.adjustForStemDirection = false; + this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0; + this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0; + this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0; + if (!this.ornament) { + throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`); + } + this.x_shift = metrics ? metrics.xOffset : 0; + this.y_shift = metrics ? metrics.yOffset : 0; + this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, { + category: `ornament.${this.ornament.code}`, + }); + if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { + this.delayed = true; + } + if (!metrics) { + this.glyph.setOrigin(0.5, 1.0); + } + } + setDelayed(delayed) { + this.delayed = delayed; + return this; + } + setUpperAccidental(accid) { + const scale = this.render_options.font_scale / 1.3; + this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale); + this.accidentalUpper.setOrigin(0.5, 1.0); + return this; + } + setLowerAccidental(accid) { + const scale = this.render_options.font_scale / 1.3; + this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale); + this.accidentalLower.setOrigin(0.5, 1.0); + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stemDir = note.getStemDirection(); + const stave = note.checkStave(); + this.applyStyle(); + ctx.openGroup('ornament', this.getAttribute('id')); + const stemExtents = note.checkStem().getExtents(); + let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY; + if (isTabNote(note)) { + if (note.hasStem()) { + if (stemDir === Stem.DOWN) { + y = stave.getYForTopText(this.text_line); + } + } + else { + y = stave.getYForTopText(this.text_line); + } + } + const isPlacedOnNoteheadSide = stemDir === Stem.DOWN; + const spacing = stave.getSpacingBetweenLines(); + let lineSpacing = 1; + if (!isPlacedOnNoteheadSide && note.hasBeam()) { + lineSpacing += 0.5; + } + const totalSpacing = spacing * (this.text_line + lineSpacing); + const glyphYBetweenLines = y - totalSpacing; + const start = note.getModifierStartXY(this.position, this.index); + let glyphX = start.x; + let glyphY = this.ornamentAlignWithNoteHead + ? start.y + : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines); + glyphY += this.y_shift; + if (this.delayed) { + let delayXShift = 0; + const startX = glyphX - (stave.getX() - 10); + if (this.delayXShift !== undefined) { + delayXShift = this.delayXShift; + } + else { + delayXShift += this.glyph.getMetrics().width / 2; + const nextContext = TickContext.getNextContext(note.getTickContext()); + if (nextContext) { + delayXShift += (nextContext.getX() - startX) * 0.5; + } + else { + delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5; + } + this.delayXShift = delayXShift; + } + glyphX += delayXShift; + } + L('Rendering ornament: ', this.ornament, glyphX, glyphY); + if (this.accidentalLower) { + this.accidentalLower.render(ctx, glyphX, glyphY); + glyphY -= this.accidentalLower.getMetrics().height; + glyphY -= this.render_options.accidentalLowerPadding; + } + if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) { + glyphY += this.stemUpYOffset; + } + if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { + glyphY = note.checkStave().getBoundingBox().getY() + 40; + } + this.glyph.render(ctx, glyphX + this.x_shift, glyphY); + if (this.accidentalUpper) { + glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding; + this.accidentalUpper.render(ctx, glyphX, glyphY); + } + ctx.closeGroup(); + this.restoreStyle(); + } +} +Ornament.DEBUG = false; +export { Ornament }; diff --git a/build/esm/src/parenthesis.js b/build/esm/src/parenthesis.js new file mode 100644 index 0000000000..d2172e99ee --- /dev/null +++ b/build/esm/src/parenthesis.js @@ -0,0 +1,79 @@ +import { Glyph } from './glyph.js'; +import { Modifier, ModifierPosition } from './modifier.js'; +import { Note } from './note.js'; +import { Tables } from './tables.js'; +import { isGraceNote } from './typeguard.js'; +export class Parenthesis extends Modifier { + static get CATEGORY() { + return "Parenthesis"; + } + static buildAndAttach(notes) { + for (const note of notes) { + for (let i = 0; i < note.keys.length; i++) { + note.addModifier(new Parenthesis(ModifierPosition.LEFT), i); + note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i); + } + } + } + static format(parentheses, state) { + if (!parentheses || parentheses.length === 0) + return false; + let x_widthL = 0; + let x_widthR = 0; + for (let i = 0; i < parentheses.length; ++i) { + const parenthesis = parentheses[i]; + const note = parenthesis.getNote(); + const pos = parenthesis.getPosition(); + const index = parenthesis.checkIndex(); + let shift = 0; + if (pos === ModifierPosition.RIGHT) { + shift = note.getRightParenthesisPx(index); + x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width; + } + if (pos === ModifierPosition.LEFT) { + shift = note.getLeftParenthesisPx(index); + x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width; + } + parenthesis.setXShift(shift); + } + state.left_shift += x_widthL; + state.right_shift += x_widthR; + return true; + } + constructor(position) { + var _a; + super(); + this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT; + this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default'); + this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); + } + setNote(note) { + var _a, _b; + this.note = note; + this.point = (_a = Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : Note.getPoint('default'); + this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); + if (isGraceNote(note)) { + this.point = (_b = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : Note.getPoint('gracenote'); + this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width')); + } + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); + const x = start.x + this.x_shift; + const y = start.y + this.y_shift; + if (this.position == Modifier.Position.RIGHT) { + Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', { + category: `noteHead.standard.noteheadParenthesisRight`, + }); + } + else if (this.position == Modifier.Position.LEFT) { + Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', { + category: `noteHead.standard.noteheadParenthesisLeft`, + }); + } + } +} diff --git a/build/esm/src/parser.js b/build/esm/src/parser.js new file mode 100644 index 0000000000..44f0ad05b2 --- /dev/null +++ b/build/esm/src/parser.js @@ -0,0 +1,165 @@ +import { log, RuntimeError } from './util.js'; +function L(...args) { + if (Parser.DEBUG) + log('Vex.Flow.Parser', args); +} +const NO_ERROR_POS = -1; +function flattenMatches(r) { + if ('matchedString' in r) + return r.matchedString; + if ('results' in r) + return flattenMatches(r.results); + const results = r; + if (results.length === 1) + return flattenMatches(results[0]); + if (results.length === 0) + return null; + return results.map(flattenMatches); +} +class Parser { + constructor(grammar) { + this.grammar = grammar; + this.line = ''; + this.pos = 0; + this.errorPos = NO_ERROR_POS; + } + parse(line) { + this.line = line; + this.pos = 0; + this.errorPos = NO_ERROR_POS; + const result = this.expect(this.grammar.begin()); + result.errorPos = this.errorPos; + return result; + } + matchFail(returnPos) { + if (this.errorPos === NO_ERROR_POS) + this.errorPos = this.pos; + this.pos = returnPos; + } + matchSuccess() { + this.errorPos = NO_ERROR_POS; + } + matchToken(token, noSpace = false) { + const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\s*)'); + const workingLine = this.line.slice(this.pos); + const result = workingLine.match(regexp); + if (result !== null) { + return { + success: true, + matchedString: result[2], + incrementPos: result[1].length, + pos: this.pos, + }; + } + else { + return { success: false, pos: this.pos }; + } + } + expectOne(rule, maybe = false) { + const results = []; + const pos = this.pos; + let allMatches = true; + let oneMatch = false; + maybe = maybe === true || rule.maybe === true; + if (rule.expect) { + for (const next of rule.expect) { + const localPos = this.pos; + const result = this.expect(next); + if (result.success) { + results.push(result); + oneMatch = true; + if (rule.or) + break; + } + else { + allMatches = false; + if (!rule.or) { + this.pos = localPos; + break; + } + } + } + } + const gotOne = (rule.or && oneMatch) || allMatches; + const success = gotOne || maybe === true; + const numMatches = gotOne ? 1 : 0; + if (maybe && !gotOne) + this.pos = pos; + if (success) { + this.matchSuccess(); + } + else { + this.matchFail(pos); + } + return { success, results, numMatches }; + } + expectOneOrMore(rule, maybe = false) { + const results = []; + const pos = this.pos; + let numMatches = 0; + let more = true; + do { + const result = this.expectOne(rule); + if (result.success && result.results) { + numMatches++; + results.push(result.results); + } + else { + more = false; + } + } while (more); + const success = numMatches > 0 || maybe === true; + if (maybe && !(numMatches > 0)) + this.pos = pos; + if (success) { + this.matchSuccess(); + } + else { + this.matchFail(pos); + } + return { success, results, numMatches }; + } + expectZeroOrMore(rule) { + return this.expectOneOrMore(rule, true); + } + expect(ruleFunc) { + L('Evaluating rule function:', ruleFunc); + if (!ruleFunc) { + throw new RuntimeError('Invalid rule function'); + } + let result; + const rule = ruleFunc.bind(this.grammar)(); + if (rule.token) { + result = this.matchToken(rule.token, rule.noSpace === true); + if (result.success) { + this.pos += result.incrementPos; + } + } + else if (rule.expect) { + if (rule.oneOrMore) { + result = this.expectOneOrMore(rule); + } + else if (rule.zeroOrMore) { + result = this.expectZeroOrMore(rule); + } + else { + result = this.expectOne(rule); + } + } + else { + L(rule); + throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule); + } + const matches = []; + result.matches = matches; + if (result.results) { + result.results.forEach((r) => matches.push(flattenMatches(r))); + } + if (rule.run && result.success) { + rule.run({ matches }); + } + return result; + } +} +Parser.DEBUG = false; +export { Parser }; diff --git a/build/esm/src/pedalmarking.js b/build/esm/src/pedalmarking.js new file mode 100644 index 0000000000..362e1122f1 --- /dev/null +++ b/build/esm/src/pedalmarking.js @@ -0,0 +1,191 @@ +import { Element } from './element.js'; +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { Tables } from './tables.js'; +import { log, RuntimeError } from './util.js'; +function L(...args) { + if (PedalMarking.DEBUG) + log('Vex.Flow.PedalMarking', args); +} +function drawPedalGlyph(name, context, x, y, point) { + const glyph_data = PedalMarking.GLYPHS[name]; + const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' }); + glyph.render(context, x - (glyph.getMetrics().width - Tables.STAVE_LINE_DISTANCE) / 2, y); +} +class PedalMarking extends Element { + static get CATEGORY() { + return "PedalMarking"; + } + static createSustain(notes) { + const pedal = new PedalMarking(notes); + return pedal; + } + static createSostenuto(notes) { + const pedal = new PedalMarking(notes); + pedal.setType(PedalMarking.type.MIXED); + pedal.setCustomText('Sost. Ped.'); + return pedal; + } + static createUnaCorda(notes) { + const pedal = new PedalMarking(notes); + pedal.setType(PedalMarking.type.TEXT); + pedal.setCustomText('una corda', 'tre corda'); + return pedal; + } + constructor(notes) { + super(); + this.notes = notes; + this.type = PedalMarking.type.TEXT; + this.line = 0; + this.custom_depress_text = ''; + this.custom_release_text = ''; + this.resetFont(); + this.render_options = { + bracket_height: 10, + text_margin_right: 6, + bracket_line_width: 1, + color: 'black', + }; + } + setType(type) { + type = typeof type === 'string' ? PedalMarking.typeString[type] : type; + if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) { + this.type = type; + } + return this; + } + setCustomText(depress, release) { + this.custom_depress_text = depress || ''; + this.custom_release_text = release || ''; + return this; + } + setLine(line) { + this.line = line; + return this; + } + drawBracketed() { + const ctx = this.checkContext(); + let is_pedal_depressed = false; + let prev_x; + let prev_y; + this.notes.forEach((note, index, notes) => { + var _a; + is_pedal_depressed = !is_pedal_depressed; + const x = note.getAbsoluteX(); + const y = note.checkStave().getYForBottomText(this.line + 3); + if (x < prev_x) { + throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions'); + } + const next_is_same = notes[index + 1] === note; + const prev_is_same = notes[index - 1] === note; + let x_shift = 0; + const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE; + if (is_pedal_depressed) { + x_shift = prev_is_same ? 5 : 0; + if (this.type === PedalMarking.type.MIXED && !prev_is_same) { + if (this.custom_depress_text) { + const text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x - text_width / 2, y); + x_shift = text_width / 2 + this.render_options.text_margin_right; + } + else { + drawPedalGlyph('pedal_depress', ctx, x, y, point); + x_shift = 20 + this.render_options.text_margin_right; + } + } + else { + ctx.beginPath(); + ctx.moveTo(x, y - this.render_options.bracket_height); + ctx.lineTo(x + x_shift, y); + ctx.stroke(); + ctx.closePath(); + } + } + else { + x_shift = next_is_same ? -5 : 0; + ctx.beginPath(); + ctx.moveTo(prev_x, prev_y); + ctx.lineTo(x + x_shift, y); + ctx.lineTo(x, y - this.render_options.bracket_height); + ctx.stroke(); + ctx.closePath(); + } + prev_x = x + x_shift; + prev_y = y; + }); + } + drawText() { + const ctx = this.checkContext(); + let is_pedal_depressed = false; + this.notes.forEach((note) => { + var _a; + is_pedal_depressed = !is_pedal_depressed; + const stave = note.checkStave(); + const x = note.getAbsoluteX(); + const y = stave.getYForBottomText(this.line + 3); + const point = (_a = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : Tables.NOTATION_FONT_SCALE; + let text_width = 0; + if (is_pedal_depressed) { + if (this.custom_depress_text) { + text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x - text_width / 2, y); + } + else { + drawPedalGlyph('pedal_depress', ctx, x, y, point); + } + } + else { + if (this.custom_release_text) { + text_width = ctx.measureText(this.custom_release_text).width; + ctx.fillText(this.custom_release_text, x - text_width / 2, y); + } + else { + drawPedalGlyph('pedal_release', ctx, x, y, point); + } + } + }); + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setStrokeStyle(this.render_options.color); + ctx.setFillStyle(this.render_options.color); + ctx.setFont(this.textFont); + L('Rendering Pedal Marking'); + if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) { + ctx.setLineWidth(this.render_options.bracket_line_width); + this.drawBracketed(); + } + else if (this.type === PedalMarking.type.TEXT) { + this.drawText(); + } + ctx.restore(); + } +} +PedalMarking.DEBUG = false; +PedalMarking.TEXT_FONT = { + family: Font.SERIF, + size: 12, + weight: FontWeight.BOLD, + style: FontStyle.ITALIC, +}; +PedalMarking.GLYPHS = { + pedal_depress: { + code: 'keyboardPedalPed', + }, + pedal_release: { + code: 'keyboardPedalUp', + }, +}; +PedalMarking.type = { + TEXT: 1, + BRACKET: 2, + MIXED: 3, +}; +PedalMarking.typeString = { + text: PedalMarking.type.TEXT, + bracket: PedalMarking.type.BRACKET, + mixed: PedalMarking.type.MIXED, +}; +export { PedalMarking }; diff --git a/build/esm/src/registry.js b/build/esm/src/registry.js new file mode 100644 index 0000000000..368096fd04 --- /dev/null +++ b/build/esm/src/registry.js @@ -0,0 +1,81 @@ +import { RuntimeError } from './util.js'; +class Index { + constructor() { + this.id = {}; + this.type = {}; + this.class = {}; + } +} +export class Registry { + static getDefaultRegistry() { + return Registry.defaultRegistry; + } + static enableDefaultRegistry(registry) { + Registry.defaultRegistry = registry; + } + static disableDefaultRegistry() { + Registry.defaultRegistry = undefined; + } + constructor() { + this.index = new Index(); + } + clear() { + this.index = new Index(); + return this; + } + setIndexValue(name, value, id, elem) { + const index = this.index; + if (!index[name][value]) { + index[name][value] = {}; + } + index[name][value][id] = elem; + } + updateIndex({ id, name, value, oldValue }) { + const elem = this.getElementById(id); + if (oldValue !== undefined && this.index[name][oldValue]) { + delete this.index[name][oldValue][id]; + } + if (value && elem) { + this.setIndexValue(name, value, elem.getAttribute('id'), elem); + } + } + register(elem, id) { + id = id || elem.getAttribute('id'); + if (!id) { + throw new RuntimeError("Can't add element without `id` attribute to registry"); + } + elem.setAttribute('id', id); + this.setIndexValue('id', id, id, elem); + this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined }); + elem.onRegister(this); + return this; + } + getElementById(id) { + var _a, _b; + return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; + } + getElementsByAttribute(attribute, value) { + const index_attr = this.index[attribute]; + if (index_attr) { + const index_attr_val = index_attr[value]; + if (index_attr_val) { + const keys = Object.keys(index_attr_val); + return keys.map((k) => index_attr_val[k]); + } + } + return []; + } + getElementsByType(type) { + return this.getElementsByAttribute('type', type); + } + getElementsByClass(className) { + return this.getElementsByAttribute('class', className); + } + onUpdate(info) { + const allowedNames = ['id', 'type', 'class']; + if (allowedNames.includes(info.name)) { + this.updateIndex(info); + } + return this; + } +} diff --git a/build/esm/src/rendercontext.js b/build/esm/src/rendercontext.js new file mode 100644 index 0000000000..ec7a54acc0 --- /dev/null +++ b/build/esm/src/rendercontext.js @@ -0,0 +1,24 @@ +export class RenderContext { + static get CATEGORY() { + return "RenderContext"; + } + set font(f) { + this.setFont(f); + } + get font() { + return this.getFont(); + } + setRawFont(f) { + this.setFont(f); + return this; + } +} +export function drawDot(ctx, x, y, color = '#F55') { + ctx.save(); + ctx.setFillStyle(color); + ctx.beginPath(); + ctx.arc(x, y, 3, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + ctx.restore(); +} diff --git a/build/esm/src/renderer.js b/build/esm/src/renderer.js new file mode 100644 index 0000000000..eb69c168c1 --- /dev/null +++ b/build/esm/src/renderer.js @@ -0,0 +1,113 @@ +import { CanvasContext } from './canvascontext.js'; +import { SVGContext } from './svgcontext.js'; +import { isRenderContext } from './typeguard.js'; +import { RuntimeError } from './util.js'; +import { isHTMLCanvas, isHTMLDiv } from './web.js'; +export var RendererBackends; +(function (RendererBackends) { + RendererBackends[RendererBackends["CANVAS"] = 1] = "CANVAS"; + RendererBackends[RendererBackends["SVG"] = 2] = "SVG"; +})(RendererBackends || (RendererBackends = {})); +export var RendererLineEndType; +(function (RendererLineEndType) { + RendererLineEndType[RendererLineEndType["NONE"] = 1] = "NONE"; + RendererLineEndType[RendererLineEndType["UP"] = 2] = "UP"; + RendererLineEndType[RendererLineEndType["DOWN"] = 3] = "DOWN"; +})(RendererLineEndType || (RendererLineEndType = {})); +class Renderer { + static buildContext(elementId, backend, width, height, background = '#FFF') { + const renderer = new Renderer(elementId, backend); + if (width && height) { + renderer.resize(width, height); + } + const ctx = renderer.getContext(); + ctx.setBackgroundFillStyle(background); + Renderer.lastContext = ctx; + return ctx; + } + static getCanvasContext(elementId, width, height, background) { + return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background); + } + static getSVGContext(elementId, width, height, background) { + return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background); + } + static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) { + context.beginPath(); + const dx = toX - fromX; + const dy = toY - fromY; + const angle = Math.atan2(dy, dx); + let x = fromX; + let y = fromY; + context.moveTo(fromX, fromY); + let idx = 0; + let draw = true; + while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) { + const dashLength = dashPattern[idx++ % dashPattern.length]; + const nx = x + Math.cos(angle) * dashLength; + x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx); + const ny = y + Math.sin(angle) * dashLength; + y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny); + if (draw) { + context.lineTo(x, y); + } + else { + context.moveTo(x, y); + } + draw = !draw; + } + context.closePath(); + context.stroke(); + } + constructor(arg0, arg1) { + if (isRenderContext(arg0)) { + this.ctx = arg0; + } + else { + if (arg1 === undefined) { + throw new RuntimeError('InvalidArgument', 'Missing backend argument'); + } + const backend = arg1; + let element; + if (typeof arg0 == 'string') { + const maybeElement = document.getElementById(arg0); + if (!maybeElement) { + throw new RuntimeError('BadElementId', `Can't find element with ID "${maybeElement}"`); + } + element = maybeElement; + } + else { + element = arg0; + } + if (backend === Renderer.Backends.CANVAS) { + if (!isHTMLCanvas(element)) { + throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.'); + } + const context = element.getContext('2d', { willReadFrequently: true }); + if (!context) { + throw new RuntimeError('BadElement', "Can't get canvas context"); + } + this.ctx = new CanvasContext(context); + } + else if (backend === Renderer.Backends.SVG) { + if (!isHTMLDiv(element)) { + throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.'); + } + this.ctx = new SVGContext(element); + } + else { + throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`); + } + } + } + resize(width, height) { + this.ctx.resize(width, height); + return this; + } + getContext() { + return this.ctx; + } +} +Renderer.Backends = RendererBackends; +Renderer.LineEndType = RendererLineEndType; +Renderer.lastContext = undefined; +export { Renderer }; diff --git a/build/esm/src/repeatnote.js b/build/esm/src/repeatnote.js new file mode 100644 index 0000000000..6d97c8c3a4 --- /dev/null +++ b/build/esm/src/repeatnote.js @@ -0,0 +1,21 @@ +import { Glyph } from './glyph.js'; +import { GlyphNote } from './glyphnote.js'; +import { Tables } from './tables.js'; +const CODES = { + '1': 'repeat1Bar', + '2': 'repeat2Bars', + '4': 'repeat4Bars', + slash: 'repeatBarSlash', +}; +export class RepeatNote extends GlyphNote { + static get CATEGORY() { + return "RepeatNote"; + } + constructor(type, noteStruct, options) { + const glyphCode = CODES[type] || 'repeat1Bar'; + const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), { + category: 'repeatNote', + }); + super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options); + } +} diff --git a/build/esm/src/stave.js b/build/esm/src/stave.js new file mode 100644 index 0000000000..570b77c05c --- /dev/null +++ b/build/esm/src/stave.js @@ -0,0 +1,608 @@ +import { BoundingBox } from './boundingbox.js'; +import { Clef } from './clef.js'; +import { Element } from './element.js'; +import { Font, FontStyle, FontWeight } from './font.js'; +import { KeySignature } from './keysignature.js'; +import { Barline, BarlineType } from './stavebarline.js'; +import { StaveModifierPosition } from './stavemodifier.js'; +import { Repetition } from './staverepetition.js'; +import { StaveSection } from './stavesection.js'; +import { StaveTempo } from './stavetempo.js'; +import { StaveText } from './stavetext.js'; +import { Volta } from './stavevolta.js'; +import { Tables } from './tables.js'; +import { TimeSignature } from './timesignature.js'; +import { isBarline } from './typeguard.js'; +import { RuntimeError } from './util.js'; +const SORT_ORDER_BEG_MODIFIERS = { + [Barline.CATEGORY]: 0, + [Clef.CATEGORY]: 1, + [KeySignature.CATEGORY]: 2, + [TimeSignature.CATEGORY]: 3, +}; +const SORT_ORDER_END_MODIFIERS = { + [TimeSignature.CATEGORY]: 0, + [KeySignature.CATEGORY]: 1, + [Barline.CATEGORY]: 2, + [Clef.CATEGORY]: 3, +}; +class Stave extends Element { + static get CATEGORY() { + return "Stave"; + } + static get defaultPadding() { + const musicFont = Tables.currentMusicFont(); + return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax'); + } + static get rightPadding() { + const musicFont = Tables.currentMusicFont(); + return musicFont.lookupMetric('stave.endPaddingMax'); + } + constructor(x, y, width, options) { + super(); + this.height = 0; + this.x = x; + this.y = y; + this.width = width; + this.formatted = false; + this.start_x = x + 5; + this.end_x = x + width; + this.modifiers = []; + this.measure = 0; + this.clef = 'treble'; + this.endClef = undefined; + this.resetFont(); + this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options); + this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 }; + this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 }; + this.resetLines(); + this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE)); + this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE)); + } + setDefaultLedgerLineStyle(style) { + this.defaultLedgerLineStyle = style; + } + getDefaultLedgerLineStyle() { + return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle); + } + space(spacing) { + return this.options.spacing_between_lines_px * spacing; + } + resetLines() { + this.options.line_config = []; + for (let i = 0; i < this.options.num_lines; i++) { + this.options.line_config.push({ visible: true }); + } + this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px; + this.options.bottom_text_position = this.options.num_lines; + } + setNoteStartX(x) { + if (!this.formatted) + this.format(); + this.start_x = x; + return this; + } + getNoteStartX() { + if (!this.formatted) + this.format(); + return this.start_x; + } + getNoteEndX() { + if (!this.formatted) + this.format(); + return this.end_x; + } + getTieStartX() { + return this.start_x; + } + getTieEndX() { + return this.end_x; + } + getX() { + return this.x; + } + getNumLines() { + return this.options.num_lines; + } + setNumLines(n) { + this.options.num_lines = n; + this.resetLines(); + return this; + } + setY(y) { + this.y = y; + return this; + } + getY() { + return this.y; + } + getTopLineTopY() { + return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2; + } + getBottomLineBottomY() { + return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2; + } + setX(x) { + const shift = x - this.x; + this.formatted = false; + this.x = x; + this.start_x += shift; + this.end_x += shift; + for (let i = 0; i < this.modifiers.length; i++) { + const mod = this.modifiers[i]; + mod.setX(mod.getX() + shift); + } + return this; + } + setWidth(width) { + this.formatted = false; + this.width = width; + this.end_x = this.x + width; + return this; + } + getWidth() { + return this.width; + } + getStyle() { + return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle()); + } + setMeasure(measure) { + this.measure = measure; + return this; + } + getMeasure() { + return this.measure; + } + getModifierXShift(index = 0) { + if (typeof index !== 'number') { + throw new RuntimeError('InvalidIndex', 'Must be of number type'); + } + if (!this.formatted) + this.format(); + if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) { + return 0; + } + if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) { + return 0; + } + let start_x = this.start_x - this.x; + const begBarline = this.modifiers[0]; + if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) { + start_x -= begBarline.getWidth(); + } + return start_x; + } + setRepetitionType(type, yShift = 0) { + this.modifiers.push(new Repetition(type, this.x, yShift)); + return this; + } + setVoltaType(type, number_t, y) { + this.modifiers.push(new Volta(type, number_t, this.x, y)); + return this; + } + setSection(section, y, xOffset = 0, fontSize, drawRect = true) { + const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect); + if (fontSize) + staveSection.setFontSize(fontSize); + this.modifiers.push(staveSection); + return this; + } + setTempo(tempo, y) { + this.modifiers.push(new StaveTempo(tempo, this.x, y)); + return this; + } + setText(text, position, options = {}) { + this.modifiers.push(new StaveText(text, position, options)); + return this; + } + getHeight() { + return this.height; + } + getSpacingBetweenLines() { + return this.options.spacing_between_lines_px; + } + getBoundingBox() { + return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y); + } + getBottomY() { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing; + return score_bottom; + } + getBottomLineY() { + return this.getYForLine(this.options.num_lines); + } + getYForLine(line) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + const y = this.y + line * spacing + headroom * spacing; + return y; + } + getLineForY(y) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + return (y - this.y) / spacing - headroom; + } + getYForTopText(line = 0) { + return this.getYForLine(-line - this.options.top_text_position); + } + getYForBottomText(line = 0) { + return this.getYForLine(this.options.bottom_text_position + line); + } + getYForNote(line) { + const options = this.options; + const spacing = options.spacing_between_lines_px; + const headroom = options.space_above_staff_ln; + return this.y + headroom * spacing + 5 * spacing - line * spacing; + } + getYForGlyphs() { + return this.getYForLine(3); + } + addModifier(modifier, position) { + if (position !== undefined) { + modifier.setPosition(position); + } + modifier.setStave(this); + this.formatted = false; + this.modifiers.push(modifier); + return this; + } + addEndModifier(modifier) { + this.addModifier(modifier, StaveModifierPosition.END); + return this; + } + setBegBarType(type) { + const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType; + if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) { + this.modifiers[0].setType(type); + this.formatted = false; + } + return this; + } + setEndBarType(type) { + if (type !== BarlineType.REPEAT_BEGIN) { + this.modifiers[1].setType(type); + this.formatted = false; + } + return this; + } + setClef(clefSpec, size, annotation, position) { + if (position === undefined) { + position = StaveModifierPosition.BEGIN; + } + if (position === StaveModifierPosition.END) { + this.endClef = clefSpec; + } + else { + this.clef = clefSpec; + } + const clefs = this.getModifiers(position, Clef.CATEGORY); + if (clefs.length === 0) { + this.addClef(clefSpec, size, annotation, position); + } + else { + clefs[0].setType(clefSpec, size, annotation); + } + return this; + } + getClef() { + return this.clef; + } + setEndClef(clefSpec, size, annotation) { + this.setClef(clefSpec, size, annotation, StaveModifierPosition.END); + return this; + } + getEndClef() { + return this.endClef; + } + setKeySignature(keySpec, cancelKeySpec, position) { + if (position === undefined) { + position = StaveModifierPosition.BEGIN; + } + const keySignatures = this.getModifiers(position, KeySignature.CATEGORY); + if (keySignatures.length === 0) { + this.addKeySignature(keySpec, cancelKeySpec, position); + } + else { + keySignatures[0].setKeySig(keySpec, cancelKeySpec); + } + return this; + } + setEndKeySignature(keySpec, cancelKeySpec) { + this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END); + return this; + } + setTimeSignature(timeSpec, customPadding, position) { + if (position === undefined) { + position = StaveModifierPosition.BEGIN; + } + const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY); + if (timeSignatures.length === 0) { + this.addTimeSignature(timeSpec, customPadding, position); + } + else { + timeSignatures[0].setTimeSig(timeSpec); + } + return this; + } + setEndTimeSignature(timeSpec, customPadding) { + this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END); + return this; + } + addKeySignature(keySpec, cancelKeySpec, position) { + if (position === undefined) { + position = StaveModifierPosition.BEGIN; + } + this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position); + return this; + } + addClef(clef, size, annotation, position) { + if (position === undefined || position === StaveModifierPosition.BEGIN) { + this.clef = clef; + } + else if (position === StaveModifierPosition.END) { + this.endClef = clef; + } + this.addModifier(new Clef(clef, size, annotation), position); + return this; + } + addEndClef(clef, size, annotation) { + this.addClef(clef, size, annotation, StaveModifierPosition.END); + return this; + } + addTimeSignature(timeSpec, customPadding, position) { + this.addModifier(new TimeSignature(timeSpec, customPadding), position); + return this; + } + addEndTimeSignature(timeSpec, customPadding) { + this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END); + return this; + } + addTrebleGlyph() { + this.addClef('treble'); + return this; + } + getModifiers(position, category) { + const noPosition = position === undefined; + const noCategory = category === undefined; + if (noPosition && noCategory) { + return this.modifiers; + } + else if (noPosition) { + return this.modifiers.filter((m) => category === m.getCategory()); + } + else if (noCategory) { + return this.modifiers.filter((m) => position === m.getPosition()); + } + else { + return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory()); + } + } + sortByCategory(items, order) { + for (let i = items.length - 1; i >= 0; i--) { + for (let j = 0; j < i; j++) { + if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) { + const temp = items[j]; + items[j] = items[j + 1]; + items[j + 1] = temp; + } + } + } + } + format() { + const begBarline = this.modifiers[0]; + const endBarline = this.modifiers[1]; + const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN); + const endModifiers = this.getModifiers(StaveModifierPosition.END); + this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS); + this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS); + if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) { + begModifiers.push(begModifiers.splice(0, 1)[0]); + begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE)); + } + if (endModifiers.indexOf(endBarline) > 0) { + endModifiers.splice(0, 0, new Barline(BarlineType.NONE)); + } + let width; + let padding; + let modifier; + let offset = 0; + let x = this.x; + for (let i = 0; i < begModifiers.length; i++) { + modifier = begModifiers[i]; + padding = modifier.getPadding(i + offset); + width = modifier.getWidth(); + x += padding; + modifier.setX(x); + x += width; + if (padding + width === 0) + offset--; + } + this.start_x = x; + x = this.x + this.width; + const widths = { + left: 0, + right: 0, + paddingRight: 0, + paddingLeft: 0, + }; + let lastBarlineIdx = 0; + for (let i = 0; i < endModifiers.length; i++) { + modifier = endModifiers[i]; + lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx; + widths.right = 0; + widths.left = 0; + widths.paddingRight = 0; + widths.paddingLeft = 0; + const layoutMetrics = modifier.getLayoutMetrics(); + if (layoutMetrics) { + if (i !== 0) { + widths.right = layoutMetrics.xMax || 0; + widths.paddingRight = layoutMetrics.paddingRight || 0; + } + widths.left = -layoutMetrics.xMin || 0; + widths.paddingLeft = layoutMetrics.paddingLeft || 0; + if (i === endModifiers.length - 1) { + widths.paddingLeft = 0; + } + } + else { + widths.paddingRight = modifier.getPadding(i - lastBarlineIdx); + if (i !== 0) { + widths.right = modifier.getWidth(); + } + if (i === 0) { + widths.left = modifier.getWidth(); + } + } + x -= widths.paddingRight; + x -= widths.right; + modifier.setX(x); + x -= widths.left; + x -= widths.paddingLeft; + } + this.end_x = endModifiers.length === 1 ? this.x + this.width : x; + this.formatted = true; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + this.applyStyle(); + ctx.openGroup('stave', this.getAttribute('id')); + if (!this.formatted) + this.format(); + const num_lines = this.options.num_lines; + const width = this.width; + const x = this.x; + let y; + for (let line = 0; line < num_lines; line++) { + y = this.getYForLine(line); + if (this.options.line_config[line].visible) { + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + width, y); + ctx.stroke(); + } + } + ctx.closeGroup(); + this.restoreStyle(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + if (typeof modifier.draw === 'function') { + modifier.applyStyle(ctx); + modifier.draw(this, this.getModifierXShift(i)); + modifier.restoreStyle(ctx); + } + } + if (this.measure > 0) { + ctx.save(); + ctx.setFont(this.textFont); + const textWidth = ctx.measureText('' + this.measure).width; + y = this.getYForTopText(0) + 3; + ctx.fillText('' + this.measure, this.x - textWidth / 2, y); + ctx.restore(); + } + return this; + } + getVerticalBarWidth() { + return this.options.vertical_bar_width; + } + getConfigForLines() { + return this.options.line_config; + } + setConfigForLine(line_number, line_config) { + if (line_number >= this.options.num_lines || line_number < 0) { + throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.'); + } + if (line_config.visible === undefined) { + throw new RuntimeError('StaveConfigError', "The line configuration object is missing the 'visible' property."); + } + if (typeof line_config.visible !== 'boolean') { + throw new RuntimeError('StaveConfigError', "The line configuration objects 'visible' property must be true or false."); + } + this.options.line_config[line_number] = line_config; + return this; + } + setConfigForLines(lines_configuration) { + if (lines_configuration.length !== this.options.num_lines) { + throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave'); + } + for (const line_config in lines_configuration) { + if (lines_configuration[line_config].visible == undefined) { + lines_configuration[line_config] = this.options.line_config[line_config]; + } + this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]); + } + this.options.line_config = lines_configuration; + return this; + } + static formatBegModifiers(staves) { + const adjustCategoryStartX = (category) => { + let minStartX = 0; + staves.forEach((stave) => { + const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category); + if (modifiers.length > 0 && modifiers[0].getX() > minStartX) + minStartX = modifiers[0].getX(); + }); + let adjustX = 0; + staves.forEach((stave) => { + adjustX = 0; + const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category); + modifiers.forEach((modifier) => { + if (minStartX - modifier.getX() > adjustX) + adjustX = minStartX - modifier.getX(); + }); + const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN); + let bAdjust = false; + allModifiers.forEach((modifier) => { + if (modifier.getCategory() === category) + bAdjust = true; + if (bAdjust && adjustX > 0) + modifier.setX(modifier.getX() + adjustX); + }); + stave.setNoteStartX(stave.getNoteStartX() + adjustX); + }); + }; + staves.forEach((stave) => { + if (!stave.formatted) + stave.format(); + }); + adjustCategoryStartX("Clef"); + adjustCategoryStartX("KeySignature"); + adjustCategoryStartX("TimeSignature"); + let maxX = 0; + staves.forEach((stave) => { + if (stave.getNoteStartX() > maxX) + maxX = stave.getNoteStartX(); + }); + staves.forEach((stave) => { + stave.setNoteStartX(maxX); + }); + maxX = 0; + staves.forEach((stave) => { + const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, "Barline"); + modifiers.forEach((modifier) => { + if (modifier.getType() == BarlineType.REPEAT_BEGIN) + if (modifier.getX() > maxX) + maxX = modifier.getX(); + }); + }); + staves.forEach((stave) => { + const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, "Barline"); + modifiers.forEach((modifier) => { + if (modifier.getType() == BarlineType.REPEAT_BEGIN) + modifier.setX(maxX); + }); + }); + } +} +Stave.TEXT_FONT = { + family: Font.SANS_SERIF, + size: 8, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, +}; +export { Stave }; diff --git a/build/esm/src/stavebarline.js b/build/esm/src/stavebarline.js new file mode 100644 index 0000000000..3e85b4d3c8 --- /dev/null +++ b/build/esm/src/stavebarline.js @@ -0,0 +1,186 @@ +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { Tables } from './tables.js'; +export var BarlineType; +(function (BarlineType) { + BarlineType[BarlineType["SINGLE"] = 1] = "SINGLE"; + BarlineType[BarlineType["DOUBLE"] = 2] = "DOUBLE"; + BarlineType[BarlineType["END"] = 3] = "END"; + BarlineType[BarlineType["REPEAT_BEGIN"] = 4] = "REPEAT_BEGIN"; + BarlineType[BarlineType["REPEAT_END"] = 5] = "REPEAT_END"; + BarlineType[BarlineType["REPEAT_BOTH"] = 6] = "REPEAT_BOTH"; + BarlineType[BarlineType["NONE"] = 7] = "NONE"; +})(BarlineType || (BarlineType = {})); +export class Barline extends StaveModifier { + static get CATEGORY() { + return "Barline"; + } + static get type() { + return BarlineType; + } + static get typeString() { + return { + single: BarlineType.SINGLE, + double: BarlineType.DOUBLE, + end: BarlineType.END, + repeatBegin: BarlineType.REPEAT_BEGIN, + repeatEnd: BarlineType.REPEAT_END, + repeatBoth: BarlineType.REPEAT_BOTH, + none: BarlineType.NONE, + }; + } + constructor(type) { + super(); + this.thickness = Tables.STAVE_LINE_THICKNESS; + const TYPE = BarlineType; + this.widths = {}; + this.widths[TYPE.SINGLE] = 5; + this.widths[TYPE.DOUBLE] = 5; + this.widths[TYPE.END] = 5; + this.widths[TYPE.REPEAT_BEGIN] = 5; + this.widths[TYPE.REPEAT_END] = 5; + this.widths[TYPE.REPEAT_BOTH] = 5; + this.widths[TYPE.NONE] = 5; + this.paddings = {}; + this.paddings[TYPE.SINGLE] = 0; + this.paddings[TYPE.DOUBLE] = 0; + this.paddings[TYPE.END] = 0; + this.paddings[TYPE.REPEAT_BEGIN] = 15; + this.paddings[TYPE.REPEAT_END] = 15; + this.paddings[TYPE.REPEAT_BOTH] = 15; + this.paddings[TYPE.NONE] = 0; + this.layoutMetricsMap = {}; + this.layoutMetricsMap[TYPE.SINGLE] = { + xMin: 0, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.DOUBLE] = { + xMin: -3, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.END] = { + xMin: -5, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_END] = { + xMin: -10, + xMax: 1, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = { + xMin: -2, + xMax: 10, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.REPEAT_BOTH] = { + xMin: -10, + xMax: 10, + paddingLeft: 5, + paddingRight: 5, + }; + this.layoutMetricsMap[TYPE.NONE] = { + xMin: 0, + xMax: 0, + paddingLeft: 5, + paddingRight: 5, + }; + this.setPosition(StaveModifierPosition.BEGIN); + this.setType(type); + } + getType() { + return this.type; + } + setType(type) { + this.type = typeof type === 'string' ? Barline.typeString[type] : type; + this.setWidth(this.widths[this.type]); + this.setPadding(this.paddings[this.type]); + this.setLayoutMetrics(this.layoutMetricsMap[this.type]); + return this; + } + draw(stave) { + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('stavebarline', this.getAttribute('id')); + switch (this.type) { + case BarlineType.SINGLE: + this.drawVerticalBar(stave, this.x, false); + break; + case BarlineType.DOUBLE: + this.drawVerticalBar(stave, this.x, true); + break; + case BarlineType.END: + this.drawVerticalEndBar(stave, this.x); + break; + case BarlineType.REPEAT_BEGIN: + this.drawRepeatBar(stave, this.x, true); + if (stave.getX() !== this.x) { + this.drawVerticalBar(stave, stave.getX()); + } + break; + case BarlineType.REPEAT_END: + this.drawRepeatBar(stave, this.x, false); + break; + case BarlineType.REPEAT_BOTH: + this.drawRepeatBar(stave, this.x, false); + this.drawRepeatBar(stave, this.x, true); + break; + default: + break; + } + ctx.closeGroup(); + this.restoreStyle(ctx); + } + drawVerticalBar(stave, x, double_bar) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + if (double_bar) { + staveCtx.fillRect(x - 3, topY, 1, botY - topY); + } + staveCtx.fillRect(x, topY, 1, botY - topY); + } + drawVerticalEndBar(stave, x) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + staveCtx.fillRect(x - 5, topY, 1, botY - topY); + staveCtx.fillRect(x - 2, topY, 3, botY - topY); + } + drawRepeatBar(stave, x, begin) { + const staveCtx = stave.checkContext(); + const topY = stave.getTopLineTopY(); + const botY = stave.getBottomLineBottomY(); + let x_shift = 3; + if (!begin) { + x_shift = -5; + } + staveCtx.fillRect(x + x_shift, topY, 1, botY - topY); + staveCtx.fillRect(x - 2, topY, 3, botY - topY); + const dot_radius = 2; + if (begin) { + x_shift += 4; + } + else { + x_shift -= 4; + } + const dot_x = x + x_shift + dot_radius / 2; + let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines(); + y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2; + let dot_y = topY + y_offset + dot_radius / 2; + staveCtx.beginPath(); + staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); + staveCtx.fill(); + dot_y += stave.getSpacingBetweenLines(); + staveCtx.beginPath(); + staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); + staveCtx.fill(); + } +} diff --git a/build/esm/src/staveconnector.js b/build/esm/src/staveconnector.js new file mode 100644 index 0000000000..5f62181d16 --- /dev/null +++ b/build/esm/src/staveconnector.js @@ -0,0 +1,200 @@ +import { Element } from './element.js'; +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { Tables } from './tables.js'; +import { RuntimeError } from './util.js'; +function drawBoldDoubleLine(ctx, type, topX, topY, botY) { + if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) { + throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.'); + } + let x_shift = 3; + let variableWidth = 3.5; + const thickLineOffset = 2; + if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) { + x_shift = -5; + variableWidth = 3; + } + ctx.fillRect(topX + x_shift, topY, 1, botY - topY); + ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY); +} +class StaveConnector extends Element { + static get CATEGORY() { + return "StaveConnector"; + } + constructor(top_stave, bottom_stave) { + super(); + this.thickness = Tables.STAVE_LINE_THICKNESS; + this.width = 3; + this.top_stave = top_stave; + this.bottom_stave = bottom_stave; + this.type = StaveConnector.type.DOUBLE; + this.resetFont(); + this.x_shift = 0; + this.texts = []; + } + setType(type) { + const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type; + if (Object.values(StaveConnector.type).includes(newType)) { + this.type = newType; + } + return this; + } + getType() { + return this.type; + } + setText(text, options = {}) { + this.texts.push({ + content: text, + options: Object.assign({ shift_x: 0, shift_y: 0 }, options), + }); + return this; + } + setXShift(x_shift) { + if (typeof x_shift !== 'number') { + throw new RuntimeError('InvalidType', 'x_shift must be a Number'); + } + this.x_shift = x_shift; + return this; + } + getXShift() { + return this.x_shift; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let topY = this.top_stave.getYForLine(0); + let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness; + let width = this.width; + let topX = this.top_stave.getX(); + const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT || + this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT || + this.type === StaveConnector.type.THIN_DOUBLE; + if (isRightSidedConnector) { + topX = this.top_stave.getX() + this.top_stave.getWidth(); + } + let attachment_height = botY - topY; + switch (this.type) { + case StaveConnector.type.SINGLE: + width = 1; + break; + case StaveConnector.type.SINGLE_LEFT: + width = 1; + break; + case StaveConnector.type.SINGLE_RIGHT: + width = 1; + break; + case StaveConnector.type.DOUBLE: + topX -= this.width + 2; + topY -= this.thickness; + attachment_height += 0.5; + break; + case StaveConnector.type.BRACE: { + width = 12; + const x1 = this.top_stave.getX() - 2 + this.x_shift; + const y1 = topY; + const x3 = x1; + const y3 = botY; + const x2 = x1 - width; + const y2 = y1 + attachment_height / 2.0; + const cpx1 = x2 - 0.9 * width; + const cpy1 = y1 + 0.2 * attachment_height; + const cpx2 = x1 + 1.1 * width; + const cpy2 = y2 - 0.135 * attachment_height; + const cpx3 = cpx2; + const cpy3 = y2 + 0.135 * attachment_height; + const cpx4 = cpx1; + const cpy4 = y3 - 0.2 * attachment_height; + const cpx5 = x2 - width; + const cpy5 = cpy4; + const cpx6 = x1 + 0.4 * width; + const cpy6 = y2 + 0.135 * attachment_height; + const cpx7 = cpx6; + const cpy7 = y2 - 0.135 * attachment_height; + const cpx8 = cpx5; + const cpy8 = cpy1; + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2); + ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3); + ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2); + ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1); + ctx.fill(); + ctx.stroke(); + break; + } + case StaveConnector.type.BRACKET: + topY -= 6; + botY += 6; + attachment_height = botY - topY; + Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop'); + Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom'); + topX -= this.width + 2; + break; + case StaveConnector.type.BOLD_DOUBLE_LEFT: + drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness); + break; + case StaveConnector.type.BOLD_DOUBLE_RIGHT: + drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness); + break; + case StaveConnector.type.THIN_DOUBLE: + width = 1; + attachment_height -= this.thickness; + break; + case StaveConnector.type.NONE: + break; + default: + throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`); + } + if (this.type !== StaveConnector.type.BRACE && + this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT && + this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT && + this.type !== StaveConnector.type.NONE) { + ctx.fillRect(topX, topY, width, attachment_height); + } + if (this.type === StaveConnector.type.THIN_DOUBLE) { + ctx.fillRect(topX - 3, topY, width, attachment_height); + } + ctx.save(); + ctx.setLineWidth(2); + ctx.setFont(this.textFont); + for (let i = 0; i < this.texts.length; i++) { + const text = this.texts[i]; + const text_width = ctx.measureText('' + text.content).width; + const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x; + const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y; + ctx.fillText('' + text.content, x, y + 4); + } + ctx.restore(); + } +} +StaveConnector.TEXT_FONT = { + family: Font.SERIF, + size: 16, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, +}; +StaveConnector.type = { + SINGLE_RIGHT: 0, + SINGLE_LEFT: 1, + SINGLE: 1, + DOUBLE: 2, + BRACE: 3, + BRACKET: 4, + BOLD_DOUBLE_LEFT: 5, + BOLD_DOUBLE_RIGHT: 6, + THIN_DOUBLE: 7, + NONE: 8, +}; +StaveConnector.typeString = { + singleRight: StaveConnector.type.SINGLE_RIGHT, + singleLeft: StaveConnector.type.SINGLE_LEFT, + single: StaveConnector.type.SINGLE, + double: StaveConnector.type.DOUBLE, + brace: StaveConnector.type.BRACE, + bracket: StaveConnector.type.BRACKET, + boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT, + boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT, + thinDouble: StaveConnector.type.THIN_DOUBLE, + none: StaveConnector.type.NONE, +}; +export { StaveConnector }; diff --git a/build/esm/src/stavehairpin.js b/build/esm/src/stavehairpin.js new file mode 100644 index 0000000000..b6b1542032 --- /dev/null +++ b/build/esm/src/stavehairpin.js @@ -0,0 +1,121 @@ +import { Element } from './element.js'; +import { Modifier } from './modifier.js'; +import { RuntimeError } from './util.js'; +class StaveHairpin extends Element { + static get CATEGORY() { + return "StaveHairpin"; + } + static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) { + var _a, _b; + const ppt = formatter.pixelsPerTick; + if (ppt == null) { + throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.'); + } + const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0); + const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0); + const hairpin_options = { + height: options.height, + y_shift: options.y_shift, + left_shift_px: l_shift_px, + right_shift_px: r_shift_px, + right_shift_ticks: 0, + left_shift_ticks: 0, + }; + new StaveHairpin({ + first_note: notes.first_note, + last_note: notes.last_note, + }, type) + .setContext(ctx) + .setRenderOptions(hairpin_options) + .setPosition(position) + .draw(); + } + constructor(notes, type) { + super(); + this.setNotes(notes); + this.hairpin = type; + this.position = Modifier.Position.BELOW; + this.render_options = { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, + right_shift_ticks: 0, + left_shift_ticks: 0, + }; + } + setPosition(position) { + if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) { + this.position = position; + } + return this; + } + setRenderOptions(options) { + if (options.height != null && + options.y_shift != null && + options.left_shift_px != null && + options.right_shift_px != null) { + this.render_options = options; + } + return this; + } + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.'); + } + this.notes = notes; + this.first_note = notes.first_note; + this.last_note = notes.last_note; + return this; + } + renderHairpin(params) { + const ctx = this.checkContext(); + let dis = this.render_options.y_shift + 20; + let y_shift = params.first_y; + if (this.position === Modifier.Position.ABOVE) { + dis = -dis + 30; + y_shift = params.first_y - params.staff_height; + } + const l_shift = this.render_options.left_shift_px; + const r_shift = this.render_options.right_shift_px; + ctx.beginPath(); + switch (this.hairpin) { + case StaveHairpin.type.CRESC: + ctx.moveTo(params.last_x + r_shift, y_shift + dis); + ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis); + ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis); + break; + case StaveHairpin.type.DECRESC: + ctx.moveTo(params.first_x + l_shift, y_shift + dis); + ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis); + ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis); + break; + default: + break; + } + ctx.stroke(); + ctx.closePath(); + } + draw() { + this.checkContext(); + this.setRendered(); + const firstNote = this.first_note; + const lastNote = this.last_note; + if (!firstNote || !lastNote) + throw new RuntimeError('NoNote', 'Notes required to draw'); + const start = firstNote.getModifierStartXY(this.position, 0); + const end = lastNote.getModifierStartXY(this.position, 0); + this.renderHairpin({ + first_x: start.x, + last_x: end.x, + first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(), + last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(), + staff_height: firstNote.checkStave().getHeight(), + }); + } +} +StaveHairpin.type = { + CRESC: 1, + DECRESC: 2, +}; +export { StaveHairpin }; diff --git a/build/esm/src/staveline.js b/build/esm/src/staveline.js new file mode 100644 index 0000000000..a3d06bb8db --- /dev/null +++ b/build/esm/src/staveline.js @@ -0,0 +1,216 @@ +import { Element } from './element.js'; +import { Tables } from './tables.js'; +import { TextJustification } from './textnote.js'; +import { RuntimeError } from './util.js'; +function drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) { + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x0, y0); + ctx.closePath(); + ctx.fill(); +} +class StaveLine extends Element { + static get CATEGORY() { + return "StaveLine"; + } + constructor(notes) { + super(); + this.setNotes(notes); + this.text = ''; + this.resetFont(); + this.render_options = { + padding_left: 4, + padding_right: 3, + line_width: 1, + line_dash: undefined, + rounded_end: true, + color: undefined, + draw_start_arrow: false, + draw_end_arrow: false, + arrowhead_length: 10, + arrowhead_angle: Math.PI / 8, + text_position_vertical: StaveLine.TextVerticalPosition.TOP, + text_justification: StaveLine.TextJustification.CENTER, + }; + } + setText(text) { + this.text = text; + return this; + } + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.'); + } + if (!notes.first_indices) + notes.first_indices = [0]; + if (!notes.last_indices) + notes.last_indices = [0]; + if (notes.first_indices.length !== notes.last_indices.length) { + throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.'); + } + this.notes = notes; + this.first_note = notes.first_note; + this.first_indices = notes.first_indices; + this.last_note = notes.last_note; + this.last_indices = notes.last_indices; + return this; + } + applyLineStyle() { + const ctx = this.checkContext(); + const render_options = this.render_options; + if (render_options.line_dash) { + ctx.setLineDash(render_options.line_dash); + } + if (render_options.line_width) { + ctx.setLineWidth(render_options.line_width); + } + if (render_options.rounded_end) { + ctx.setLineCap('round'); + } + else { + ctx.setLineCap('square'); + } + } + applyFontStyle() { + const ctx = this.checkContext(); + ctx.setFont(this.textFont); + const render_options = this.render_options; + const color = render_options.color; + if (color) { + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + } + } + drawArrowLine(ctx, pt1, pt2) { + const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow; + const x1 = pt1.x; + const y1 = pt1.y; + const x2 = pt2.x; + const y2 = pt2.y; + const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + const ratio = (distance - this.render_options.arrowhead_length / 3) / distance; + let end_x; + let end_y; + let start_x; + let start_y; + if (this.render_options.draw_end_arrow || both_arrows) { + end_x = Math.round(x1 + (x2 - x1) * ratio); + end_y = Math.round(y1 + (y2 - y1) * ratio); + } + else { + end_x = x2; + end_y = y2; + } + if (this.render_options.draw_start_arrow || both_arrows) { + start_x = x1 + (x2 - x1) * (1 - ratio); + start_y = y1 + (y2 - y1) * (1 - ratio); + } + else { + start_x = x1; + start_y = y1; + } + if (this.render_options.color) { + ctx.setStrokeStyle(this.render_options.color); + ctx.setFillStyle(this.render_options.color); + } + ctx.beginPath(); + ctx.moveTo(start_x, start_y); + ctx.lineTo(end_x, end_y); + ctx.stroke(); + ctx.closePath(); + const line_angle = Math.atan2(y2 - y1, x2 - x1); + const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle)); + let angle1; + let angle2; + let top_x; + let top_y; + let bottom_x; + let bottom_y; + if (this.render_options.draw_end_arrow || both_arrows) { + angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle; + top_x = x2 + Math.cos(angle1) * h; + top_y = y2 + Math.sin(angle1) * h; + angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle; + bottom_x = x2 + Math.cos(angle2) * h; + bottom_y = y2 + Math.sin(angle2) * h; + drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y); + } + if (this.render_options.draw_start_arrow || both_arrows) { + angle1 = line_angle + this.render_options.arrowhead_angle; + top_x = x1 + Math.cos(angle1) * h; + top_y = y1 + Math.sin(angle1) * h; + angle2 = line_angle - this.render_options.arrowhead_angle; + bottom_x = x1 + Math.cos(angle2) * h; + bottom_y = y1 + Math.sin(angle2) * h; + drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y); + } + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const first_note = this.first_note; + const last_note = this.last_note; + const render_options = this.render_options; + ctx.save(); + this.applyLineStyle(); + let start_position = { x: 0, y: 0 }; + let end_position = { x: 0, y: 0 }; + this.first_indices.forEach((first_index, i) => { + const last_index = this.last_indices[i]; + start_position = first_note.getModifierStartXY(2, first_index); + end_position = last_note.getModifierStartXY(1, last_index); + const upwards_slope = start_position.y > end_position.y; + start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left; + end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right; + const notehead_width = first_note.getGlyphProps().getWidth(); + const first_displaced = first_note.getKeyProps()[first_index].displaced; + if (first_displaced && first_note.getStemDirection() === 1) { + start_position.x += notehead_width + render_options.padding_left; + } + const last_displaced = last_note.getKeyProps()[last_index].displaced; + if (last_displaced && last_note.getStemDirection() === -1) { + end_position.x -= notehead_width + render_options.padding_right; + } + start_position.y += upwards_slope ? -3 : 1; + end_position.y += upwards_slope ? 2 : 0; + this.drawArrowLine(ctx, start_position, end_position); + }); + ctx.restore(); + const text_width = ctx.measureText(this.text).width; + const justification = render_options.text_justification; + let x = 0; + if (justification === StaveLine.TextJustification.LEFT) { + x = start_position.x; + } + else if (justification === StaveLine.TextJustification.CENTER) { + const delta_x = end_position.x - start_position.x; + const center_x = delta_x / 2 + start_position.x; + x = center_x - text_width / 2; + } + else if (justification === StaveLine.TextJustification.RIGHT) { + x = end_position.x - text_width; + } + let y = 0; + const vertical_position = render_options.text_position_vertical; + if (vertical_position === StaveLine.TextVerticalPosition.TOP) { + y = first_note.checkStave().getYForTopText(); + } + else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) { + y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK); + } + ctx.save(); + this.applyFontStyle(); + ctx.fillText(this.text, x, y); + ctx.restore(); + return this; + } +} +StaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); +StaveLine.TextVerticalPosition = { + TOP: 1, + BOTTOM: 2, +}; +StaveLine.TextJustification = TextJustification; +export { StaveLine }; diff --git a/build/esm/src/stavemodifier.js b/build/esm/src/stavemodifier.js new file mode 100644 index 0000000000..ea7e8a6c25 --- /dev/null +++ b/build/esm/src/stavemodifier.js @@ -0,0 +1,77 @@ +import { Element } from './element.js'; +import { defined } from './util.js'; +export var StaveModifierPosition; +(function (StaveModifierPosition) { + StaveModifierPosition[StaveModifierPosition["CENTER"] = 0] = "CENTER"; + StaveModifierPosition[StaveModifierPosition["LEFT"] = 1] = "LEFT"; + StaveModifierPosition[StaveModifierPosition["RIGHT"] = 2] = "RIGHT"; + StaveModifierPosition[StaveModifierPosition["ABOVE"] = 3] = "ABOVE"; + StaveModifierPosition[StaveModifierPosition["BELOW"] = 4] = "BELOW"; + StaveModifierPosition[StaveModifierPosition["BEGIN"] = 5] = "BEGIN"; + StaveModifierPosition[StaveModifierPosition["END"] = 6] = "END"; +})(StaveModifierPosition || (StaveModifierPosition = {})); +export class StaveModifier extends Element { + static get CATEGORY() { + return "StaveModifier"; + } + static get Position() { + return StaveModifierPosition; + } + constructor() { + super(); + this.width = 0; + this.x = 0; + this.padding = 10; + this.position = StaveModifierPosition.ABOVE; + } + getPosition() { + return this.position; + } + setPosition(position) { + this.position = position; + return this; + } + getStave() { + return this.stave; + } + checkStave() { + return defined(this.stave, 'NoStave', 'No stave attached to instance.'); + } + setStave(stave) { + this.stave = stave; + return this; + } + getWidth() { + return this.width; + } + setWidth(width) { + this.width = width; + return this; + } + getX() { + return this.x; + } + setX(x) { + this.x = x; + return this; + } + placeGlyphOnLine(glyph, stave, line, customShift = 0) { + glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift); + } + getPadding(index) { + return index !== undefined && index < 2 ? 0 : this.padding; + } + setPadding(padding) { + this.padding = padding; + return this; + } + setLayoutMetrics(layoutMetrics) { + this.layoutMetrics = layoutMetrics; + return this; + } + getLayoutMetrics() { + return this.layoutMetrics; + } + draw(...args) { + } +} diff --git a/build/esm/src/stavenote.js b/build/esm/src/stavenote.js new file mode 100644 index 0000000000..f102f7e530 --- /dev/null +++ b/build/esm/src/stavenote.js @@ -0,0 +1,874 @@ +import { BoundingBox } from './boundingbox.js'; +import { Modifier } from './modifier.js'; +import { NoteHead } from './notehead.js'; +import { Stem } from './stem.js'; +import { StemmableNote } from './stemmablenote.js'; +import { Tables } from './tables.js'; +import { defined, log, midLine, RuntimeError } from './util.js'; +function showDeprecationWarningForNoteHeads() { + console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.'); +} +function L(...args) { + if (StaveNote.DEBUG) + log('Vex.Flow.StaveNote', args); +} +const isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0); +function shiftRestVertical(rest, note, dir) { + const delta = dir; + rest.line += delta; + rest.maxLine += delta; + rest.minLine += delta; + rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta); +} +function centerRest(rest, noteU, noteL) { + const delta = rest.line - midLine(noteU.minLine, noteL.maxLine); + rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta); + rest.line -= delta; + rest.maxLine -= delta; + rest.minLine -= delta; +} +class StaveNote extends StemmableNote { + static get CATEGORY() { + return "StaveNote"; + } + static get STEM_UP() { + return Stem.UP; + } + static get STEM_DOWN() { + return Stem.DOWN; + } + static get LEDGER_LINE_OFFSET() { + return 3; + } + static get minNoteheadPadding() { + const musicFont = Tables.currentMusicFont(); + return musicFont.lookupMetric('noteHead.minPadding'); + } + static format(notes, state) { + var _a, _b; + if (!notes || notes.length < 2) + return false; + const notesList = []; + for (let i = 0; i < notes.length; i++) { + const props = notes[i].sortedKeyProps; + const line = props[0].keyProps.line; + let minL = props[props.length - 1].keyProps.line; + const stemDirection = notes[i].getStemDirection(); + const stemMax = notes[i].getStemLength() / 10; + const stemMin = notes[i].getStemMinimumLength() / 10; + let maxL; + if (notes[i].isRest()) { + maxL = line + notes[i].glyphProps.line_above; + minL = line - notes[i].glyphProps.line_below; + } + else { + maxL = + stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line; + minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax; + } + notesList.push({ + line: props[0].keyProps.line, + maxLine: maxL, + minLine: minL, + isrest: notes[i].isRest(), + stemDirection: stemDirection, + stemMax, + stemMin, + voice_shift: notes[i].getVoiceShiftWidth(), + is_displaced: notes[i].isDisplaced(), + note: notes[i], + }); + } + let voices = 0; + let noteU = undefined; + let noteM = undefined; + let noteL = undefined; + const draw = [false, false, false]; + for (let i = 0; i < notesList.length; i++) { + draw[i] = notesList[i].note.render_options.draw == false ? false : true; + } + if (draw[0] && draw[1] && draw[2]) { + voices = 3; + noteU = notesList[0]; + noteM = notesList[1]; + noteL = notesList[2]; + } + else if (draw[0] && draw[1]) { + voices = 2; + noteU = notesList[0]; + noteL = notesList[1]; + } + else if (draw[0] && draw[2]) { + voices = 2; + noteU = notesList[0]; + noteL = notesList[2]; + } + else if (draw[1] && draw[2]) { + voices = 2; + noteU = notesList[1]; + noteL = notesList[2]; + } + else { + return true; + } + if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) { + noteU = notesList[1]; + noteL = notesList[0]; + } + const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift); + let xShift = 0; + if (voices === 2) { + const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5; + if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) { + noteL.note.render_options.draw = false; + } + else if (noteU.minLine <= noteL.maxLine + lineSpacing) { + if (noteU.isrest) { + shiftRestVertical(noteU, noteL, 1); + } + else if (noteL.isrest) { + shiftRestVertical(noteL, noteU, -1); + } + else { + const lineDiff = Math.abs(noteU.line - noteL.line); + if (noteU.note.hasStem() && noteL.note.hasStem()) { + const noteUHead = Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration); + const noteLHead = Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration); + if (!Tables.UNISON || + noteUHead !== noteLHead || + noteU.note.getModifiers().filter((item) => item.getCategory() === "Dot" && item.getIndex() === 0) + .length !== + noteL.note.getModifiers().filter((item) => item.getCategory() === "Dot" && item.getIndex() === 0) + .length || + (lineDiff < 1 && lineDiff > 0) || + JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) { + xShift = voiceXShift + 2; + if (noteU.stemDirection === noteL.stemDirection) { + noteU.note.setXShift(xShift); + } + else { + noteL.note.setXShift(xShift); + } + } + else if (noteU.note.voice !== noteL.note.voice) { + if (noteU.stemDirection === noteL.stemDirection) { + if (noteU.line != noteL.line) { + xShift = voiceXShift + 2; + noteU.note.setXShift(xShift); + } + else { + if (noteL.stemDirection === 1) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + } + } + } + } + else if (lineDiff < 1) { + xShift = voiceXShift + 2; + if (noteU.note.duration < noteL.note.duration) { + noteU.note.setXShift(xShift); + } + else { + noteL.note.setXShift(xShift); + } + } + else if (noteU.note.hasStem()) { + noteU.stemDirection = -noteU.note.getStemDirection(); + noteU.note.setStemDirection(noteU.stemDirection); + } + else if (noteL.note.hasStem()) { + noteL.stemDirection = -noteL.note.getStemDirection(); + noteL.note.setStemDirection(noteL.stemDirection); + } + } + } + state.right_shift += xShift; + return true; + } + if (!noteM) + throw new RuntimeError('InvalidState', 'noteM not defined.'); + if (noteM.isrest && !noteU.isrest && !noteL.isrest) { + if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) { + const restHeight = noteM.maxLine - noteM.minLine; + const space = noteU.minLine - noteL.maxLine; + if (restHeight < space) { + centerRest(noteM, noteU, noteL); + } + else { + xShift = voiceXShift + 2; + noteM.note.setXShift(xShift); + if (noteL.note.hasBeam() === false) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { + noteU.stemDirection = 1; + noteU.note.setStemDirection(1); + } + } + state.right_shift += xShift; + return true; + } + } + if (noteU.isrest && noteM.isrest && noteL.isrest) { + noteU.note.render_options.draw = false; + noteL.note.render_options.draw = false; + state.right_shift += xShift; + return true; + } + if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) { + noteM.note.render_options.draw = false; + } + if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) { + noteM.note.render_options.draw = false; + } + if (noteU.isrest && noteU.minLine <= noteM.maxLine) { + shiftRestVertical(noteU, noteM, 1); + } + if (noteL.isrest && noteM.minLine <= noteL.maxLine) { + shiftRestVertical(noteL, noteM, -1); + } + if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) { + xShift = voiceXShift + 2; + noteM.note.setXShift(xShift); + if (noteL.note.hasBeam() === false) { + noteL.stemDirection = -1; + noteL.note.setStemDirection(-1); + } + if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { + noteU.stemDirection = 1; + noteU.note.setStemDirection(1); + } + } + state.right_shift += xShift; + return true; + } + static postFormat(notes) { + if (!notes) + return false; + notes.forEach((note) => note.postFormat()); + return true; + } + constructor(noteStruct) { + var _a, _b, _c; + super(noteStruct); + this.minLine = 0; + this.maxLine = 0; + this.sortedKeyProps = []; + this.ledgerLineStyle = {}; + this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble'; + this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0; + this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType); + defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + this.displaced = false; + this.dot_shiftY = 0; + this.use_default_head_x = false; + this._noteHeads = []; + this.modifiers = []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET }); + this.calculateKeyProps(); + this.buildStem(); + if (noteStruct.auto_stem) { + this.autoStem(); + } + else { + this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP); + } + this.reset(); + this.buildFlag(); + } + reset() { + super.reset(); + const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle()); + this.buildNoteHeads(); + this._noteHeads.forEach((noteHead, index) => { + const noteHeadStyle = noteHeadStyles[index]; + if (noteHeadStyle) + noteHead.setStyle(noteHeadStyle); + }); + const stave = this.stave; + if (stave) { + this.setStave(stave); + } + this.calcNoteDisplacements(); + return this; + } + setBeam(beam) { + this.beam = beam; + this.calcNoteDisplacements(); + if (this.stem) { + this.stem.setExtension(this.getStemExtension()); + } + return this; + } + buildStem() { + this.setStem(new Stem({ hide: !!this.isRest() })); + return this; + } + buildNoteHeads() { + this._noteHeads = []; + const stemDirection = this.getStemDirection(); + const keys = this.getKeys(); + let lastLine = undefined; + let lineDiff = undefined; + let displaced = false; + let start; + let end; + let step; + if (stemDirection === Stem.UP) { + start = 0; + end = keys.length; + step = 1; + } + else { + start = keys.length - 1; + end = -1; + step = -1; + } + for (let i = start; i !== end; i += step) { + const noteProps = this.sortedKeyProps[i].keyProps; + const line = noteProps.line; + if (lastLine === undefined) { + lastLine = line; + } + else { + lineDiff = Math.abs(lastLine - line); + if (lineDiff === 0 || lineDiff === 0.5) { + displaced = !displaced; + } + else { + displaced = false; + this.use_default_head_x = true; + } + } + lastLine = line; + const notehead = new NoteHead({ + duration: this.duration, + note_type: this.noteType, + displaced, + stem_direction: stemDirection, + custom_glyph_code: noteProps.code, + glyph_font_scale: this.render_options.glyph_font_scale, + x_shift: noteProps.shift_right, + stem_up_x_offset: noteProps.stem_up_x_offset, + stem_down_x_offset: noteProps.stem_down_x_offset, + line: noteProps.line, + }); + this.addChildElement(notehead); + this._noteHeads[this.sortedKeyProps[i].index] = notehead; + } + } + autoStem() { + this.setStemDirection(this.calculateOptimalStemDirection()); + } + calculateOptimalStemDirection() { + this.minLine = this.sortedKeyProps[0].keyProps.line; + this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line; + const MIDDLE_LINE = 3; + const decider = (this.minLine + this.maxLine) / 2; + const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN; + return stemDirection; + } + calculateKeyProps() { + let lastLine; + for (let i = 0; i < this.keys.length; ++i) { + const key = this.keys[i]; + if (this.glyphProps.rest) + this.glyphProps.position = key; + const options = { octave_shift: this.octave_shift || 0, duration: this.duration }; + const props = Tables.keyProperties(key, this.clef, options); + if (!props) { + throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`); + } + if (props.key === 'R') { + if (this.duration === '1' || this.duration === 'w') { + props.line = 4; + } + else { + props.line = 3; + } + } + const line = props.line; + if (lastLine == undefined) { + lastLine = line; + } + else { + if (Math.abs(lastLine - line) === 0.5) { + this.displaced = true; + props.displaced = true; + if (this.keyProps.length > 0) { + this.keyProps[i - 1].displaced = true; + } + } + } + lastLine = line; + this.keyProps.push(props); + } + this.keyProps.forEach((keyProps, index) => { + this.sortedKeyProps.push({ keyProps, index }); + }); + this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line); + } + getBoundingBox() { + var _a, _b; + if (!this.preFormatted) { + throw new RuntimeError('UnformattedNote', "Can't call getBoundingBox on an unformatted note."); + } + const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics(); + const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx; + let minY = 0; + let maxY = 0; + const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2; + const lineSpacing = halfLineSpacing * 2; + if (this.isRest()) { + const y = this.ys[0]; + const frac = Tables.durationToFraction(this.duration); + if (frac.equals(1) || frac.equals(2)) { + minY = y - halfLineSpacing; + maxY = y + halfLineSpacing; + } + else { + minY = y - this.glyphProps.line_above * lineSpacing; + maxY = y + this.glyphProps.line_below * lineSpacing; + } + } + else if (this.glyphProps.stem) { + const ys = this.getStemExtents(); + ys.baseY += halfLineSpacing * this.getStemDirection(); + minY = Math.min(ys.topY, ys.baseY); + maxY = Math.max(ys.topY, ys.baseY); + } + else { + minY = 0; + maxY = 0; + for (let i = 0; i < this.ys.length; ++i) { + const yy = this.ys[i]; + if (i === 0) { + minY = yy; + maxY = yy; + } + else { + minY = Math.min(yy, minY); + maxY = Math.max(yy, maxY); + } + } + minY -= halfLineSpacing; + maxY += halfLineSpacing; + } + return new BoundingBox(x, minY, w, maxY - minY); + } + getLineNumber(isTopNote) { + if (!this.keyProps.length) { + throw new RuntimeError('NoKeyProps', "Can't get bottom note line, because note is not initialized properly."); + } + let resultLine = this.keyProps[0].line; + for (let i = 0; i < this.keyProps.length; i++) { + const thisLine = this.keyProps[i].line; + if (isTopNote) { + if (thisLine > resultLine) + resultLine = thisLine; + } + else { + if (thisLine < resultLine) + resultLine = thisLine; + } + } + return resultLine; + } + isRest() { + return this.glyphProps.rest; + } + isChord() { + return !this.isRest() && this.keys.length > 1; + } + hasStem() { + return this.glyphProps.stem; + } + hasFlag() { + return super.hasFlag() && !this.isRest(); + } + getStemX() { + if (this.noteType === 'r') { + return this.getCenterGlyphX(); + } + else { + return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0); + } + } + getYForTopText(textLine) { + const extents = this.getStemExtents(); + return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); + } + getYForBottomText(textLine) { + const extents = this.getStemExtents(); + return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); + } + setStave(stave) { + super.setStave(stave); + const ys = this._noteHeads.map((notehead) => { + notehead.setStave(stave); + return notehead.getY(); + }); + this.setYs(ys); + if (this.stem) { + const { y_top, y_bottom } = this.getNoteHeadBounds(); + this.stem.setYBounds(y_top, y_bottom); + } + return this; + } + isDisplaced() { + return this.displaced; + } + setNoteDisplaced(displaced) { + this.displaced = displaced; + return this; + } + getTieRightX() { + let tieStartX = this.getAbsoluteX(); + tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx; + if (this.modifierContext) + tieStartX += this.modifierContext.getRightShift(); + return tieStartX; + } + getTieLeftX() { + let tieEndX = this.getAbsoluteX(); + tieEndX += this.x_shift - this.leftDisplacedHeadPx; + return tieEndX; + } + getLineForRest() { + let restLine = this.keyProps[0].line; + if (this.keyProps.length > 1) { + const lastLine = this.keyProps[this.keyProps.length - 1].line; + const top = Math.max(restLine, lastLine); + const bot = Math.min(restLine, lastLine); + restLine = midLine(top, bot); + } + return restLine; + } + getModifierStartXY(position, index, options = {}) { + var _a, _b; + if (!this.preFormatted) { + throw new RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + if (this.ys.length === 0) { + throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); + } + const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position; + let x = 0; + if (position === LEFT) { + x = -1 * 2; + } + else if (position === RIGHT) { + x = this.getGlyphWidth() + this.x_shift + 2; + if (this.stem_direction === Stem.UP && + this.hasFlag() && + (options.forceFlagRight || isInnerNoteIndex(this, index))) { + x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0; + } + } + else if (position === BELOW || position === ABOVE) { + x = this.getGlyphWidth() / 2; + } + return { + x: this.getAbsoluteX() + x, + y: this.ys[index], + }; + } + setStyle(style) { + return super.setGroupStyle(style); + } + setStemStyle(style) { + const stem = this.getStem(); + if (stem) + stem.setStyle(style); + return this; + } + getStemStyle() { + var _a; + return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle(); + } + setLedgerLineStyle(style) { + this.ledgerLineStyle = style; + } + getLedgerLineStyle() { + return this.ledgerLineStyle; + } + setFlagStyle(style) { + var _a; + (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style); + } + getFlagStyle() { + var _a; + return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle(); + } + setKeyStyle(index, style) { + this._noteHeads[index].setStyle(style); + return this; + } + setKeyLine(index, line) { + this.keyProps[index].line = line; + this.reset(); + return this; + } + getKeyLine(index) { + return this.keyProps[index].line; + } + getVoiceShiftWidth() { + return this.getGlyphWidth() * (this.displaced ? 2 : 1); + } + calcNoteDisplacements() { + this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0); + this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0); + } + preFormat() { + if (this.preFormatted) + return; + let noteHeadPadding = 0; + if (this.modifierContext) { + this.modifierContext.preFormat(); + if (this.modifierContext.getWidth() === 0) { + noteHeadPadding = StaveNote.minNoteheadPadding; + } + } + let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding; + if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) { + width += this.getGlyphWidth(); + } + this.setWidth(width); + this.preFormatted = true; + } + getNoteHeadBounds() { + let yTop = +Infinity; + let yBottom = -Infinity; + let nonDisplacedX; + let displacedX; + let highestLine = this.checkStave().getNumLines(); + let lowestLine = 1; + let highestDisplacedLine; + let lowestDisplacedLine; + let highestNonDisplacedLine = highestLine; + let lowestNonDisplacedLine = lowestLine; + this._noteHeads.forEach((notehead) => { + const line = notehead.getLine(); + const y = notehead.getY(); + yTop = Math.min(y, yTop); + yBottom = Math.max(y, yBottom); + if (displacedX === undefined && notehead.isDisplaced()) { + displacedX = notehead.getAbsoluteX(); + } + if (nonDisplacedX === undefined && !notehead.isDisplaced()) { + nonDisplacedX = notehead.getAbsoluteX(); + } + highestLine = Math.max(line, highestLine); + lowestLine = Math.min(line, lowestLine); + if (notehead.isDisplaced()) { + highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine); + lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine); + } + else { + highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine); + lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine); + } + }, this); + return { + y_top: yTop, + y_bottom: yBottom, + displaced_x: displacedX, + non_displaced_x: nonDisplacedX, + highest_line: highestLine, + lowest_line: lowestLine, + highest_displaced_line: highestDisplacedLine, + lowest_displaced_line: lowestDisplacedLine, + highest_non_displaced_line: highestNonDisplacedLine, + lowest_non_displaced_line: lowestNonDisplacedLine, + }; + } + getNoteHeadBeginX() { + return this.getAbsoluteX() + this.x_shift; + } + getNoteHeadEndX() { + const xBegin = this.getNoteHeadBeginX(); + return xBegin + this.getGlyphWidth(); + } + get noteHeads() { + return this._noteHeads.slice(); + } + get note_heads() { + showDeprecationWarningForNoteHeads(); + return this.noteHeads; + } + drawLedgerLines() { + const stave = this.checkStave(); + const { glyphProps, render_options: { stroke_px }, } = this; + const ctx = this.checkContext(); + const width = glyphProps.getWidth() + stroke_px * 2; + const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2; + if (this.isRest()) + return; + if (!ctx) { + throw new RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); + } + const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds(); + if (highest_line < 6 && lowest_line > 0) + return; + const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0); + const drawLedgerLine = (y, normal, displaced) => { + let x; + if (displaced && normal) + x = min_x - stroke_px; + else if (normal) + x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px; + else + x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px; + const ledgerWidth = normal && displaced ? doubleWidth : width; + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + ledgerWidth, y); + ctx.stroke(); + }; + const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle()); + this.applyStyle(ctx, style); + for (let line = 6; line <= highest_line; ++line) { + const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line; + const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line; + drawLedgerLine(stave.getYForNote(line), normal, displaced); + } + for (let line = 0; line >= lowest_line; --line) { + const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line; + const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line; + drawLedgerLine(stave.getYForNote(line), normal, displaced); + } + this.restoreStyle(ctx, style); + } + drawModifiers(noteheadParam) { + const ctx = this.checkContext(); + for (let i = 0; i < this.modifiers.length; i++) { + const modifier = this.modifiers[i]; + const index = modifier.checkIndex(); + const notehead = this._noteHeads[index]; + if (notehead == noteheadParam) { + const noteheadStyle = notehead.getStyle(); + notehead.applyStyle(ctx, noteheadStyle); + modifier.setContext(ctx); + modifier.drawWithStyle(); + notehead.restoreStyle(ctx, noteheadStyle); + } + } + } + shouldDrawFlag() { + const hasStem = this.stem !== undefined; + const hasFlag = this.glyphProps.flag == true; + const hasNoBeam = this.beam === undefined; + return hasStem && hasFlag && hasNoBeam; + } + drawFlag() { + var _a, _b, _c, _d, _e; + const ctx = this.checkContext(); + if (!ctx) { + throw new RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); + } + if (this.shouldDrawFlag()) { + const { y_top, y_bottom } = this.getNoteHeadBounds(); + const noteStemHeight = this.stem.getHeight(); + const flagX = this.getStemX(); + const flagY = this.getStemDirection() === Stem.DOWN + ? + y_top - + noteStemHeight + + 2 - + (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() - + ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale()) + : + y_bottom - + noteStemHeight - + 2 + + (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() - + ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale()); + (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY); + } + } + drawNoteHeads() { + const ctx = this.checkContext(); + this._noteHeads.forEach((notehead) => { + notehead.applyStyle(ctx); + ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true }); + notehead.setContext(ctx).draw(); + this.drawModifiers(notehead); + ctx.closeGroup(); + notehead.restoreStyle(ctx); + }); + } + drawStem(stemOptions) { + const ctx = this.checkContext(); + if (stemOptions) { + this.setStem(new Stem(stemOptions)); + } + if (this.shouldDrawFlag() && this.stem) { + this.stem.adjustHeightForFlag(); + } + if (this.stem) { + this.stem.setContext(ctx).draw(); + } + } + getStaveNoteScale() { + return 1.0; + } + getStemExtension() { + const super_stem_extension = super.getStemExtension(); + if (!this.glyphProps.stem) { + return super_stem_extension; + } + const stem_direction = this.getStemDirection(); + if (stem_direction !== this.calculateOptimalStemDirection()) { + return super_stem_extension; + } + let mid_line_distance; + const MIDDLE_LINE = 3; + if (stem_direction === Stem.UP) { + mid_line_distance = MIDDLE_LINE - this.maxLine; + } + else { + mid_line_distance = this.minLine - MIDDLE_LINE; + } + const lines_over_octave_from_mid_line = mid_line_distance - 3.5; + if (lines_over_octave_from_mid_line <= 0) { + return super_stem_extension; + } + const stave = this.getStave(); + let spacing_between_lines = 10; + if (stave != undefined) { + spacing_between_lines = stave.getSpacingBetweenLines(); + } + return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines; + } + draw() { + if (this.render_options.draw === false) + return; + if (this.ys.length === 0) { + throw new RuntimeError('NoYValues', "Can't draw note without Y values."); + } + const ctx = this.checkContext(); + const xBegin = this.getNoteHeadBeginX(); + const shouldRenderStem = this.hasStem() && !this.beam; + this._noteHeads.forEach((notehead) => notehead.setX(xBegin)); + if (this.stem) { + const stemX = this.getStemX(); + this.stem.setNoteHeadXBounds(stemX, stemX); + } + L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys); + this.applyStyle(); + ctx.openGroup('stavenote', this.getAttribute('id')); + this.drawLedgerLines(); + if (shouldRenderStem) + this.drawStem(); + this.drawNoteHeads(); + this.drawFlag(); + ctx.closeGroup(); + this.restoreStyle(); + this.setRendered(); + } +} +StaveNote.DEBUG = false; +export { StaveNote }; diff --git a/build/esm/src/staverepetition.js b/build/esm/src/staverepetition.js new file mode 100644 index 0000000000..e5689075ae --- /dev/null +++ b/build/esm/src/staverepetition.js @@ -0,0 +1,159 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { StaveModifier } from './stavemodifier.js'; +import { Tables } from './tables.js'; +class Repetition extends StaveModifier { + static get CATEGORY() { + return "Repetition"; + } + constructor(type, x, y_shift) { + super(); + this.symbol_type = type; + this.x = x; + this.x_shift = 0; + this.y_shift = y_shift; + this.resetFont(); + } + setShiftX(x) { + this.x_shift = x; + return this; + } + setShiftY(y) { + this.y_shift = y; + return this; + } + draw(stave, x) { + this.setRendered(); + switch (this.symbol_type) { + case Repetition.type.CODA_RIGHT: + this.drawCodaFixed(stave, x + stave.getWidth()); + break; + case Repetition.type.CODA_LEFT: + this.drawSymbolText(stave, x, 'Coda', true); + break; + case Repetition.type.SEGNO_LEFT: + this.drawSignoFixed(stave, x); + break; + case Repetition.type.SEGNO_RIGHT: + this.drawSignoFixed(stave, x + stave.getWidth()); + break; + case Repetition.type.DC: + this.drawSymbolText(stave, x, 'D.C.', false); + break; + case Repetition.type.DC_AL_CODA: + this.drawSymbolText(stave, x, 'D.C. al', true); + break; + case Repetition.type.DC_AL_FINE: + this.drawSymbolText(stave, x, 'D.C. al Fine', false); + break; + case Repetition.type.DS: + this.drawSymbolText(stave, x, 'D.S.', false); + break; + case Repetition.type.DS_AL_CODA: + this.drawSymbolText(stave, x, 'D.S. al', true); + break; + case Repetition.type.DS_AL_FINE: + this.drawSymbolText(stave, x, 'D.S. al Fine', false); + break; + case Repetition.type.FINE: + this.drawSymbolText(stave, x, 'Fine', false); + break; + case Repetition.type.TO_CODA: + this.drawSymbolText(stave, x, 'To', true); + break; + default: + break; + } + return this; + } + drawCodaFixed(stave, x) { + const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' }); + return this; + } + drawSignoFixed(stave, x) { + const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' }); + return this; + } + drawSymbolText(stave, x, text, draw_coda) { + var _a; + const ctx = stave.checkContext(); + ctx.save(); + ctx.setFont(this.textFont); + let text_x = 0; + let symbol_x = 0; + const modifierWidth = stave.getNoteStartX() - this.x; + switch (this.symbol_type) { + case Repetition.type.CODA_LEFT: + text_x = this.x + stave.getVerticalBarWidth(); + symbol_x = + text_x + + ctx.measureText(text).width + + Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + break; + case Repetition.type.DC: + case Repetition.type.DC_AL_FINE: + case Repetition.type.DS: + case Repetition.type.DS_AL_FINE: + case Repetition.type.FINE: + text_x = + this.x + + x + + this.x_shift + + stave.getWidth() - + Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - + modifierWidth - + ctx.measureText(text).width; + break; + default: + text_x = + this.x + + x + + this.x_shift + + stave.getWidth() - + Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - + modifierWidth - + ctx.measureText(text).width - + Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + symbol_x = + text_x + + ctx.measureText(text).width + + Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); + break; + } + const y = stave.getYForTopText(stave.getNumLines()) + + this.y_shift + + Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY'); + if (draw_coda) { + Glyph.renderGlyph(ctx, symbol_x, y, Font.convertSizeToPointValue((_a = this.textFont) === null || _a === void 0 ? void 0 : _a.size) * 2, 'coda', { + category: 'coda', + }); + } + ctx.fillText(text, text_x, y + 5); + ctx.restore(); + return this; + } +} +Repetition.TEXT_FONT = { + family: Font.SERIF, + size: Tables.NOTATION_FONT_SCALE / 3, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, +}; +Repetition.type = { + NONE: 1, + CODA_LEFT: 2, + CODA_RIGHT: 3, + SEGNO_LEFT: 4, + SEGNO_RIGHT: 5, + DC: 6, + DC_AL_CODA: 7, + DC_AL_FINE: 8, + DS: 9, + DS_AL_CODA: 10, + DS_AL_FINE: 11, + FINE: 12, + TO_CODA: 13, +}; +export { Repetition }; diff --git a/build/esm/src/stavesection.js b/build/esm/src/stavesection.js new file mode 100644 index 0000000000..6f79c04c71 --- /dev/null +++ b/build/esm/src/stavesection.js @@ -0,0 +1,63 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { StaveModifier } from './stavemodifier.js'; +import { TextFormatter } from './textformatter.js'; +class StaveSection extends StaveModifier { + static get CATEGORY() { + return "StaveSection"; + } + constructor(section, x, shift_y, drawRect = true) { + super(); + this.setWidth(16); + this.section = section; + this.x = x; + this.shift_x = 0; + this.shift_y = shift_y; + this.drawRect = drawRect; + this.resetFont(); + } + setStaveSection(section) { + this.section = section; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + draw(stave, shift_x) { + const borderWidth = 2; + const padding = 2; + const ctx = stave.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setLineWidth(borderWidth); + ctx.setFont(this.textFont); + const textFormatter = TextFormatter.create(this.textFont); + const textWidth = textFormatter.getWidthForTextInPx(this.section); + const textY = textFormatter.getYForStringInPx(this.section); + const textHeight = textY.height; + const headroom = -1 * textY.yMin; + const width = textWidth + 2 * padding; + const height = textHeight + 2 * padding; + const y = stave.getYForTopText(1.5) + this.shift_y; + const x = this.x + shift_x; + if (this.drawRect) { + ctx.beginPath(); + ctx.rect(x, y - height + headroom, width, height); + ctx.stroke(); + } + ctx.fillText(this.section, x + padding, y - padding); + ctx.restore(); + return this; + } +} +StaveSection.TEXT_FONT = { + family: Font.SANS_SERIF, + size: 10, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, +}; +export { StaveSection }; diff --git a/build/esm/src/stavetempo.js b/build/esm/src/stavetempo.js new file mode 100644 index 0000000000..e54f90f508 --- /dev/null +++ b/build/esm/src/stavetempo.js @@ -0,0 +1,95 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { Tables } from './tables.js'; +import { TextFormatter } from './textformatter.js'; +class StaveTempo extends StaveModifier { + static get CATEGORY() { + return "StaveTempo"; + } + constructor(tempo, x, shift_y) { + super(); + this.render_options = { glyph_font_scale: 30 }; + this.tempo = tempo; + this.position = StaveModifierPosition.ABOVE; + this.x = x; + this.shift_x = 10; + this.shift_y = shift_y; + this.resetFont(); + } + setTempo(tempo) { + this.tempo = tempo; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + draw(stave, shift_x) { + const ctx = stave.checkContext(); + this.setRendered(); + const options = this.render_options; + const scale = options.glyph_font_scale / Tables.NOTATION_FONT_SCALE; + const name = this.tempo.name; + const duration = this.tempo.duration; + const dots = this.tempo.dots || 0; + const bpm = this.tempo.bpm; + let x = this.x + this.shift_x + shift_x; + const y = stave.getYForTopText(1) + this.shift_y; + ctx.save(); + const textFormatter = TextFormatter.create(this.textFont); + if (name) { + ctx.setFont(this.textFont); + ctx.fillText(name, x, y); + x += textFormatter.getWidthForTextInPx(name); + } + if (duration && bpm) { + const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' }); + ctx.setFont(noteTextFont); + const noteTextFormatter = TextFormatter.create(noteTextFont); + if (name) { + x += noteTextFormatter.getWidthForTextInPx('|'); + ctx.fillText('(', x, y); + x += noteTextFormatter.getWidthForTextInPx('('); + } + const glyphProps = Tables.getGlyphProps(duration); + x += 3 * scale; + Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head); + x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale); + if (glyphProps.stem) { + let stem_height = 30; + if (glyphProps.beam_count) + stem_height += 3 * (glyphProps.beam_count - 1); + stem_height *= scale; + const y_top = y - stem_height; + ctx.fillRect(x - scale, y_top, scale, stem_height); + if (glyphProps.code && glyphProps.code_flag_upstem) { + const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, { + category: 'flag.staveTempo', + }); + x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution; + } + } + for (let i = 0; i < dots; i++) { + x += 6 * scale; + ctx.beginPath(); + ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false); + ctx.fill(); + } + ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y); + } + ctx.restore(); + return this; + } +} +StaveTempo.TEXT_FONT = { + family: Font.SERIF, + size: 14, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, +}; +export { StaveTempo }; diff --git a/build/esm/src/stavetext.js b/build/esm/src/stavetext.js new file mode 100644 index 0000000000..218eb4a639 --- /dev/null +++ b/build/esm/src/stavetext.js @@ -0,0 +1,83 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { TextJustification, TextNote } from './textnote.js'; +import { RuntimeError } from './util.js'; +class StaveText extends StaveModifier { + static get CATEGORY() { + return "StaveText"; + } + constructor(text, position, options = {}) { + super(); + this.setWidth(16); + this.text = text; + this.position = position; + this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options); + this.resetFont(); + } + setStaveText(text) { + this.text = text; + return this; + } + setShiftX(x) { + this.shift_x = x; + return this; + } + setShiftY(y) { + this.shift_y = y; + return this; + } + setText(text) { + this.text = text; + return this; + } + draw(stave) { + const ctx = stave.checkContext(); + this.setRendered(); + ctx.save(); + ctx.setLineWidth(2); + ctx.setFont(this.textFont); + const text_width = ctx.measureText('' + this.text).width; + let x; + let y; + switch (this.position) { + case StaveModifierPosition.LEFT: + case StaveModifierPosition.RIGHT: + y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y; + if (this.position === StaveModifierPosition.LEFT) { + x = stave.getX() - text_width - 24 + this.options.shift_x; + } + else { + x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x; + } + break; + case StaveModifierPosition.ABOVE: + case StaveModifierPosition.BELOW: + x = stave.getX() + this.options.shift_x; + if (this.options.justification === TextJustification.CENTER) { + x += stave.getWidth() / 2 - text_width / 2; + } + else if (this.options.justification === TextJustification.RIGHT) { + x += stave.getWidth() - text_width; + } + if (this.position === StaveModifierPosition.ABOVE) { + y = stave.getYForTopText(2) + this.options.shift_y; + } + else { + y = stave.getYForBottomText(2) + this.options.shift_y; + } + break; + default: + throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.'); + } + ctx.fillText('' + this.text, x, y + 4); + ctx.restore(); + return this; + } +} +StaveText.TEXT_FONT = { + family: Font.SERIF, + size: 16, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, +}; +export { StaveText }; diff --git a/build/esm/src/stavetie.js b/build/esm/src/stavetie.js new file mode 100644 index 0000000000..93e5c08029 --- /dev/null +++ b/build/esm/src/stavetie.js @@ -0,0 +1,147 @@ +import { Element } from './element.js'; +import { RuntimeError } from './util.js'; +class StaveTie extends Element { + static get CATEGORY() { + return "StaveTie"; + } + constructor(notes, text) { + super(); + this.setNotes(notes); + this.text = text; + this.render_options = { + cp1: 8, + cp2: 12, + text_shift_x: 0, + first_x_shift: 0, + last_x_shift: 0, + y_shift: 7, + tie_spacing: 0, + }; + this.resetFont(); + } + setDirection(direction) { + this.direction = direction; + return this; + } + setNotes(notes) { + if (!notes.first_note && !notes.last_note) { + throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.'); + } + if (!notes.first_indices) { + notes.first_indices = [0]; + } + if (!notes.last_indices) { + notes.last_indices = [0]; + } + if (notes.first_indices.length !== notes.last_indices.length) { + throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.'); + } + this.notes = notes; + return this; + } + isPartial() { + return !this.notes.first_note || !this.notes.last_note; + } + renderTie(params) { + if (params.first_ys.length === 0 || params.last_ys.length === 0) { + throw new RuntimeError('BadArguments', 'No Y-values to render'); + } + const ctx = this.checkContext(); + let cp1 = this.render_options.cp1; + let cp2 = this.render_options.cp2; + if (Math.abs(params.last_x_px - params.first_x_px) < 10) { + cp1 = 2; + cp2 = 8; + } + const first_x_shift = this.render_options.first_x_shift; + const last_x_shift = this.render_options.last_x_shift; + const y_shift = this.render_options.y_shift * params.direction; + const first_indices = this.notes.first_indices; + const last_indices = this.notes.last_indices; + this.applyStyle(); + ctx.openGroup('stavetie', this.getAttribute('id')); + for (let i = 0; i < first_indices.length; ++i) { + const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2; + const first_y_px = params.first_ys[first_indices[i]] + y_shift; + const last_y_px = params.last_ys[last_indices[i]] + y_shift; + if (isNaN(first_y_px) || isNaN(last_y_px)) { + throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.'); + } + const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction; + const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction; + ctx.beginPath(); + ctx.moveTo(params.first_x_px + first_x_shift, first_y_px); + ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px); + ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px); + ctx.closePath(); + ctx.fill(); + } + ctx.closeGroup(); + this.restoreStyle(); + } + renderText(first_x_px, last_x_px) { + var _a, _b, _c; + if (!this.text) + return; + const ctx = this.checkContext(); + let center_x = (first_x_px + last_x_px) / 2; + center_x -= ctx.measureText(this.text).width / 2; + const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave(); + if (stave) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1); + ctx.restore(); + } + } + getNotes() { + return this.notes; + } + draw() { + this.checkContext(); + this.setRendered(); + const first_note = this.notes.first_note; + const last_note = this.notes.last_note; + let first_x_px = 0; + let last_x_px = 0; + let first_ys = [0]; + let last_ys = [0]; + let stem_direction = 0; + if (first_note) { + first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing; + stem_direction = first_note.getStemDirection(); + first_ys = first_note.getYs(); + } + else if (last_note) { + const stave = last_note.checkStave(); + first_x_px = stave.getTieStartX(); + first_ys = last_note.getYs(); + this.notes.first_indices = this.notes.last_indices; + } + if (last_note) { + last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing; + stem_direction = last_note.getStemDirection(); + last_ys = last_note.getYs(); + } + else if (first_note) { + const stave = first_note.checkStave(); + last_x_px = stave.getTieEndX(); + last_ys = first_note.getYs(); + this.notes.last_indices = this.notes.first_indices; + } + if (this.direction) { + stem_direction = this.direction; + } + this.renderTie({ + first_x_px, + last_x_px, + first_ys, + last_ys, + direction: stem_direction, + }); + this.renderText(first_x_px, last_x_px); + return true; + } +} +StaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); +export { StaveTie }; diff --git a/build/esm/src/stavevolta.js b/build/esm/src/stavevolta.js new file mode 100644 index 0000000000..7fa9d72e5e --- /dev/null +++ b/build/esm/src/stavevolta.js @@ -0,0 +1,68 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { StaveModifier } from './stavemodifier.js'; +export var VoltaType; +(function (VoltaType) { + VoltaType[VoltaType["NONE"] = 1] = "NONE"; + VoltaType[VoltaType["BEGIN"] = 2] = "BEGIN"; + VoltaType[VoltaType["MID"] = 3] = "MID"; + VoltaType[VoltaType["END"] = 4] = "END"; + VoltaType[VoltaType["BEGIN_END"] = 5] = "BEGIN_END"; +})(VoltaType || (VoltaType = {})); +class Volta extends StaveModifier { + static get CATEGORY() { + return "Volta"; + } + static get type() { + return VoltaType; + } + constructor(type, number, x, y_shift) { + super(); + this.volta = type; + this.x = x; + this.y_shift = y_shift; + this.number = number; + this.resetFont(); + } + setShiftY(y) { + this.y_shift = y; + return this; + } + draw(stave, x) { + const ctx = stave.checkContext(); + this.setRendered(); + let width = stave.getWidth() - x; + const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; + const vert_height = 1.5 * stave.getSpacingBetweenLines(); + switch (this.volta) { + case VoltaType.BEGIN: + ctx.fillRect(this.x + x, top_y, 1, vert_height); + break; + case VoltaType.END: + width -= 5; + ctx.fillRect(this.x + x + width, top_y, 1, vert_height); + break; + case VoltaType.BEGIN_END: + width -= 3; + ctx.fillRect(this.x + x, top_y, 1, vert_height); + ctx.fillRect(this.x + x + width, top_y, 1, vert_height); + break; + default: + break; + } + if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText(this.number, this.x + x + 5, top_y + 15); + ctx.restore(); + } + ctx.fillRect(this.x + x, top_y, width, 1); + return this; + } +} +Volta.TEXT_FONT = { + family: Font.SANS_SERIF, + size: 9, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, +}; +export { Volta }; diff --git a/build/esm/src/stem.js b/build/esm/src/stem.js new file mode 100644 index 0000000000..e6cfdbdfcc --- /dev/null +++ b/build/esm/src/stem.js @@ -0,0 +1,134 @@ +import { Element } from './element.js'; +import { Tables } from './tables.js'; +import { log, RuntimeError } from './util.js'; +function L(...args) { + if (Stem.DEBUG) + log('Vex.Flow.Stem', args); +} +class Stem extends Element { + static get CATEGORY() { + return "Stem"; + } + static get UP() { + return 1; + } + static get DOWN() { + return -1; + } + static get WIDTH() { + return Tables.STEM_WIDTH; + } + static get HEIGHT() { + return Tables.STEM_HEIGHT; + } + constructor(options) { + super(); + this.stem_up_y_offset = 0; + this.stem_down_y_offset = 0; + this.stem_up_y_base_offset = 0; + this.stem_down_y_base_offset = 0; + this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0; + this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0; + this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0; + this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0; + this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0; + this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0; + this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false; + this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false; + this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0; + this.renderHeightAdjustment = 0; + this.setOptions(options); + } + setOptions(options) { + this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0; + this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0; + this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0; + this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0; + } + setNoteHeadXBounds(x_begin, x_end) { + this.x_begin = x_begin; + this.x_end = x_end; + return this; + } + setDirection(direction) { + this.stem_direction = direction; + } + setExtension(ext) { + this.stem_extension = ext; + } + getExtension() { + return this.stem_extension; + } + setYBounds(y_top, y_bottom) { + this.y_top = y_top; + this.y_bottom = y_bottom; + } + getHeight() { + const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset; + const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); + return unsigned_height * this.stem_direction; + } + getBoundingBox() { + throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.'); + } + getExtents() { + const isStemUp = this.stem_direction === Stem.UP; + const ys = [this.y_top, this.y_bottom]; + const stemHeight = Stem.HEIGHT + this.stem_extension; + const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys); + const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys); + const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction; + return { topY: stemTipY, baseY: outerMostNoteheadY }; + } + setVisibility(isVisible) { + this.hide = !isVisible; + return this; + } + setStemlet(isStemlet, stemletHeight) { + this.isStemlet = isStemlet; + this.stemletHeight = stemletHeight; + return this; + } + adjustHeightForFlag() { + this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3); + } + adjustHeightForBeam() { + this.renderHeightAdjustment = -Stem.WIDTH / 2; + } + draw() { + this.setRendered(); + if (this.hide) + return; + const ctx = this.checkContext(); + let stem_x; + let stem_y; + const stem_direction = this.stem_direction; + let y_base_offset = 0; + if (stem_direction === Stem.DOWN) { + stem_x = this.x_begin; + stem_y = this.y_top + this.stem_down_y_offset; + y_base_offset = this.stem_down_y_base_offset; + } + else { + stem_x = this.x_end; + stem_y = this.y_bottom - this.stem_up_y_offset; + y_base_offset = this.stem_up_y_base_offset; + } + const stemHeight = this.getHeight(); + L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom); + const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0; + ctx.save(); + this.applyStyle(); + ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true }); + ctx.beginPath(); + ctx.setLineWidth(Stem.WIDTH); + ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset); + ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction); + ctx.stroke(); + ctx.closeGroup(); + this.restoreStyle(); + ctx.restore(); + } +} +Stem.DEBUG = false; +export { Stem }; diff --git a/build/esm/src/stemmablenote.js b/build/esm/src/stemmablenote.js new file mode 100644 index 0000000000..a2b371a185 --- /dev/null +++ b/build/esm/src/stemmablenote.js @@ -0,0 +1,195 @@ +import { Glyph } from './glyph.js'; +import { Note } from './note.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { RuntimeError } from './util.js'; +export class StemmableNote extends Note { + static get CATEGORY() { + return "StemmableNote"; + } + constructor(noteStruct) { + super(noteStruct); + } + getStem() { + return this.stem; + } + checkStem() { + if (!this.stem) { + throw new RuntimeError('NoStem', 'No stem attached to instance'); + } + return this.stem; + } + setStem(stem) { + this.stem = stem; + this.addChildElement(stem); + return this; + } + buildStem() { + const stem = new Stem(); + this.setStem(stem); + return this; + } + buildFlag(category = 'flag') { + const { glyphProps } = this; + if (this.hasFlag()) { + const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem; + if (flagCode) + this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category }); + } + } + getBaseCustomNoteHeadGlyphProps() { + if (this.getStemDirection() === Stem.DOWN) { + return this.customGlyphs[this.customGlyphs.length - 1]; + } + else { + return this.customGlyphs[0]; + } + } + getStemLength() { + return Stem.HEIGHT + this.getStemExtension(); + } + getBeamCount() { + const glyphProps = this.getGlyphProps(); + if (glyphProps) { + return glyphProps.beam_count; + } + else { + return 0; + } + } + getStemMinimumLength() { + const frac = Tables.durationToFraction(this.duration); + let length = frac.value() <= 1 ? 0 : 20; + switch (this.duration) { + case '8': + if (this.beam == undefined) + length = 35; + break; + case '16': + length = this.beam == undefined ? 35 : 25; + break; + case '32': + length = this.beam == undefined ? 45 : 35; + break; + case '64': + length = this.beam == undefined ? 50 : 40; + break; + case '128': + length = this.beam == undefined ? 55 : 45; + break; + default: + break; + } + return length; + } + getStemDirection() { + if (!this.stem_direction) + throw new RuntimeError('NoStem', 'No stem attached to this note.'); + return this.stem_direction; + } + setStemDirection(direction) { + if (!direction) + direction = Stem.UP; + if (direction !== Stem.UP && direction !== Stem.DOWN) { + throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`); + } + this.stem_direction = direction; + this.reset(); + if (this.hasFlag()) { + this.buildFlag(); + } + this.beam = undefined; + if (this.stem) { + this.stem.setDirection(direction); + this.stem.setExtension(this.getStemExtension()); + const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps(); + const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, { + offsetYBaseStemUp: 0, + offsetYTopStemUp: 0, + offsetYBaseStemDown: 0, + offsetYTopStemDown: 0, + }); + this.stem.setOptions({ + stem_up_y_offset: offsets.offsetYTopStemUp, + stem_down_y_offset: offsets.offsetYTopStemDown, + stem_up_y_base_offset: offsets.offsetYBaseStemUp, + stem_down_y_base_offset: offsets.offsetYBaseStemDown, + }); + } + if (this.preFormatted) { + this.preFormat(); + } + return this; + } + getStemX() { + const x_begin = this.getAbsoluteX() + this.x_shift; + const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth(); + const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end; + return stem_x; + } + getCenterGlyphX() { + return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2; + } + getStemExtension() { + const glyphProps = this.getGlyphProps(); + if (this.stem_extension_override != undefined) { + return this.stem_extension_override; + } + if (this.beam) { + return glyphProps.stem_beam_extension; + } + if (glyphProps) { + return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension; + } + return 0; + } + setStemLength(height) { + this.stem_extension_override = height - Stem.HEIGHT; + return this; + } + getStemExtents() { + if (!this.stem) + throw new RuntimeError('NoStem', 'No stem attached to this note.'); + return this.stem.getExtents(); + } + getYForTopText(textLine) { + const stave = this.checkStave(); + if (this.hasStem()) { + const extents = this.getStemExtents(); + if (!extents) + throw new RuntimeError('InvalidState', 'Stem does not have extents.'); + return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); + } + else { + return stave.getYForTopText(textLine); + } + } + getYForBottomText(textLine) { + const stave = this.checkStave(); + if (this.hasStem()) { + const extents = this.getStemExtents(); + if (!extents) + throw new RuntimeError('InvalidState', 'Stem does not have extents.'); + return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); + } + else { + return stave.getYForBottomText(textLine); + } + } + hasFlag() { + return Tables.getGlyphProps(this.duration).flag == true && !this.beam; + } + postFormat() { + var _a; + (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat(); + this.postFormatted = true; + return this; + } + drawStem(stemOptions) { + var _a; + this.checkContext(); + this.setRendered(); + this.setStem(new Stem(stemOptions)); + (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw(); + } +} diff --git a/build/esm/src/stringnumber.js b/build/esm/src/stringnumber.js new file mode 100644 index 0000000000..c1e8fe3ad9 --- /dev/null +++ b/build/esm/src/stringnumber.js @@ -0,0 +1,245 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Modifier, ModifierPosition } from './modifier.js'; +import { Renderer } from './renderer.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { isStaveNote, isStemmableNote } from './typeguard.js'; +import { RuntimeError } from './util.js'; +class StringNumber extends Modifier { + static get CATEGORY() { + return "StringNumber"; + } + static get metrics() { + var _a; + return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : { + verticalPadding: 0, + stemPadding: 0, + leftPadding: 0, + rightPadding: 0, + }); + } + static format(nums, state) { + const left_shift = state.left_shift; + const right_shift = state.right_shift; + const num_spacing = 1; + if (!nums || nums.length === 0) + return false; + const nums_list = []; + let prev_note = null; + let extraXSpaceForDisplacedNotehead = 0; + let shift_right = 0; + const modLines = 0; + for (let i = 0; i < nums.length; ++i) { + const num = nums[i]; + const note = num.getNote(); + const pos = num.getPosition(); + if (!isStaveNote(note)) { + throw new RuntimeError('NoStaveNote'); + } + const index = num.checkIndex(); + const props = note.getKeyProps()[index]; + const mc = note.getModifierContext(); + const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5; + if (mc) { + if (pos === ModifierPosition.ABOVE) { + num.text_line = mc.getState().top_text_line; + state.top_text_line += verticalSpaceNeeded; + } + else if (pos === ModifierPosition.BELOW) { + num.text_line = mc.getState().text_line; + state.text_line += verticalSpaceNeeded; + } + } + if (note !== prev_note) { + for (let n = 0; n < note.keys.length; ++n) { + if (pos === Modifier.Position.LEFT) { + extraXSpaceForDisplacedNotehead = Math.max(note.getLeftDisplacedHeadPx(), extraXSpaceForDisplacedNotehead); + } + if (right_shift === 0) { + shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right); + } + } + prev_note = note; + } + const glyphLine = modLines === 0 ? props.line : modLines; + nums_list.push({ + pos, + note, + num, + line: glyphLine, + shiftL: extraXSpaceForDisplacedNotehead, + shiftR: shift_right, + }); + } + nums_list.sort((a, b) => b.line - a.line); + let num_shiftR = 0; + let x_widthL = 0; + let x_widthR = 0; + let last_line = null; + let last_note = null; + for (let i = 0; i < nums_list.length; ++i) { + const note = nums_list[i].note; + const pos = nums_list[i].pos; + const num = nums_list[i].num; + const line = nums_list[i].line; + const shiftR = nums_list[i].shiftR; + if (line !== last_line || note !== last_note) { + num_shiftR = right_shift + shiftR; + } + const num_width = num.getWidth() + num_spacing; + let num_x_shift = 0; + if (pos === Modifier.Position.LEFT) { + num.setXShift(left_shift + extraXSpaceForDisplacedNotehead); + num_x_shift = num_width; + x_widthL = Math.max(num_x_shift, x_widthL); + } + else if (pos === Modifier.Position.RIGHT) { + num.setXShift(num_shiftR); + num_x_shift += num_width; + x_widthR = num_x_shift > x_widthR ? num_x_shift : x_widthR; + } + last_line = line; + last_note = note; + } + state.left_shift += x_widthL; + state.right_shift += x_widthR; + return true; + } + constructor(number) { + super(); + this.string_number = number; + this.position = Modifier.Position.ABOVE; + this.x_shift = 0; + this.y_shift = 0; + this.text_line = 0; + this.stem_offset = 0; + this.x_offset = 0; + this.y_offset = 0; + this.dashed = true; + this.leg = Renderer.LineEndType.NONE; + this.radius = 8; + this.drawCircle = true; + this.setWidth(this.radius * 2 + 4); + this.resetFont(); + } + setLineEndType(leg) { + if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) { + this.leg = leg; + } + return this; + } + setStringNumber(number) { + this.string_number = number; + return this; + } + setOffsetX(x) { + this.x_offset = x; + return this; + } + setOffsetY(y) { + this.y_offset = y; + return this; + } + setLastNote(note) { + this.last_note = note; + return this; + } + setDashed(dashed) { + this.dashed = dashed; + return this; + } + setDrawCircle(drawCircle) { + this.drawCircle = drawCircle; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP; + let dot_x = start.x + this.x_shift + this.x_offset; + let stem_ext = {}; + if (note.hasStem()) { + stem_ext = note.checkStem().getExtents(); + } + let dot_y = start.y + this.y_shift + this.y_offset; + switch (this.position) { + case Modifier.Position.ABOVE: + { + const ys = note.getYs(); + dot_y = ys.reduce((a, b) => (a < b ? a : b)); + if (note.hasStem() && stemDirection == Stem.UP) { + dot_y = stem_ext.topY + StringNumber.metrics.stemPadding; + } + dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE; + } + break; + case Modifier.Position.BELOW: + { + const ys = note.getYs(); + dot_y = ys.reduce((a, b) => (a > b ? a : b)); + if (note.hasStem() && stemDirection == Stem.DOWN) { + dot_y = stem_ext.topY - StringNumber.metrics.stemPadding; + } + dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE; + } + break; + case Modifier.Position.LEFT: + dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding; + break; + case Modifier.Position.RIGHT: + dot_x += this.radius / 2 + StringNumber.metrics.rightPadding; + break; + default: + throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`); + } + ctx.save(); + if (this.drawCircle) { + ctx.beginPath(); + ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false); + ctx.setLineWidth(1.5); + ctx.stroke(); + } + ctx.setFont(this.textFont); + const x = dot_x - ctx.measureText(this.string_number).width / 2; + ctx.fillText('' + this.string_number, x, dot_y + 4.5); + const lastNote = this.last_note; + if (isStemmableNote(lastNote)) { + const end = lastNote.getStemX() - note.getX() + 5; + ctx.setStrokeStyle('#000000'); + ctx.setLineCap('round'); + ctx.setLineWidth(0.6); + if (this.dashed) { + Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]); + } + else { + Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]); + } + let len; + let pattern; + switch (this.leg) { + case Renderer.LineEndType.UP: + len = -10; + pattern = this.dashed ? [3, 3] : [3, 0]; + Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); + break; + case Renderer.LineEndType.DOWN: + len = 10; + pattern = this.dashed ? [3, 3] : [3, 0]; + Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); + break; + default: + break; + } + } + ctx.restore(); + } +} +StringNumber.TEXT_FONT = { + family: Font.SANS_SERIF, + size: Font.SIZE, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, +}; +export { StringNumber }; diff --git a/build/esm/src/strokes.js b/build/esm/src/strokes.js new file mode 100644 index 0000000000..dfbfd6942e --- /dev/null +++ b/build/esm/src/strokes.js @@ -0,0 +1,202 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { Modifier } from './modifier.js'; +import { Tables } from './tables.js'; +import { isNote, isStaveNote, isTabNote } from './typeguard.js'; +import { RuntimeError } from './util.js'; +class Stroke extends Modifier { + static get CATEGORY() { + return "Stroke"; + } + static format(strokes, state) { + const left_shift = state.left_shift; + const stroke_spacing = 0; + if (!strokes || strokes.length === 0) + return false; + const strokeList = strokes.map((stroke) => { + const note = stroke.getNote(); + const index = stroke.checkIndex(); + if (isStaveNote(note)) { + const { line } = note.getKeyProps()[index]; + const shift = note.getLeftDisplacedHeadPx(); + return { line, shift, stroke }; + } + else if (isTabNote(note)) { + const { str: string } = note.getPositions()[index]; + return { line: string, shift: 0, stroke }; + } + else { + throw new RuntimeError('Internal', 'Unexpected instance.'); + } + }); + const strokeShift = left_shift; + const xShift = strokeList.reduce((xShift, { stroke, shift }) => { + stroke.setXShift(strokeShift + shift); + return Math.max(stroke.getWidth() + stroke_spacing, xShift); + }, 0); + state.left_shift += xShift; + return true; + } + constructor(type, options) { + super(); + this.options = Object.assign({ all_voices: true }, options); + this.all_voices = this.options.all_voices; + this.type = type; + this.position = Modifier.Position.LEFT; + this.render_options = { + font_scale: Tables.NOTATION_FONT_SCALE, + }; + this.resetFont(); + this.setXShift(0); + this.setWidth(10); + } + getPosition() { + return this.position; + } + addEndNote(note) { + this.note_end = note; + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(this.position, this.index); + let ys = note.getYs(); + let topY = start.y; + let botY = start.y; + const x = start.x - 5; + const line_space = note.checkStave().getSpacingBetweenLines(); + const notes = this.checkModifierContext().getMembers(note.getCategory()); + for (let i = 0; i < notes.length; i++) { + const note = notes[i]; + if (isNote(note)) { + ys = note.getYs(); + for (let n = 0; n < ys.length; n++) { + if (this.note === notes[i] || this.all_voices) { + topY = Math.min(topY, ys[n]); + botY = Math.max(botY, ys[n]); + } + } + } + } + let arrow = ''; + let arrow_shift_x = 0; + let arrow_y = 0; + let text_shift_x = 0; + let text_y = 0; + switch (this.type) { + case Stroke.Type.BRUSH_DOWN: + arrow = 'arrowheadBlackUp'; + arrow_shift_x = -3; + arrow_y = topY - line_space / 2 + 10; + botY += line_space / 2; + break; + case Stroke.Type.BRUSH_UP: + arrow = 'arrowheadBlackDown'; + arrow_shift_x = 0.5; + arrow_y = botY + line_space / 2; + topY -= line_space / 2; + break; + case Stroke.Type.ROLL_DOWN: + case Stroke.Type.RASQUEDO_DOWN: + arrow = 'arrowheadBlackUp'; + arrow_shift_x = -3; + text_shift_x = this.x_shift + arrow_shift_x - 2; + if (isStaveNote(note)) { + topY += 1.5 * line_space; + if ((botY - topY) % 2 !== 0) { + botY += 0.5 * line_space; + } + else { + botY += line_space; + } + arrow_y = topY - line_space; + text_y = botY + line_space + 2; + } + else { + topY += 1.5 * line_space; + botY += line_space; + arrow_y = topY - 0.75 * line_space; + text_y = botY + 0.25 * line_space; + } + break; + case Stroke.Type.ROLL_UP: + case Stroke.Type.RASQUEDO_UP: + arrow = 'arrowheadBlackDown'; + arrow_shift_x = -4; + text_shift_x = this.x_shift + arrow_shift_x - 1; + if (isStaveNote(note)) { + arrow_y = line_space / 2; + topY += 0.5 * line_space; + if ((botY - topY) % 2 === 0) { + botY += line_space / 2; + } + arrow_y = botY + 0.5 * line_space; + text_y = topY - 1.25 * line_space; + } + else { + topY += 0.25 * line_space; + botY += 0.5 * line_space; + arrow_y = botY + 0.25 * line_space; + text_y = topY - line_space; + } + break; + case Stroke.Type.ARPEGGIO_DIRECTIONLESS: + topY += 0.5 * line_space; + botY += line_space; + break; + default: + throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`); + } + let strokeLine = 'straight'; + if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) { + ctx.fillRect(x + this.x_shift, topY, 1, botY - topY); + } + else { + strokeLine = 'wiggly'; + if (isStaveNote(note)) { + for (let i = topY; i <= botY; i += line_space) { + Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); + } + } + else { + let i; + for (i = topY; i <= botY; i += 10) { + Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); + } + if (this.type === Stroke.Type.RASQUEDO_DOWN) { + text_y = i + 0.25 * line_space; + } + } + } + if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) { + return; + } + Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, { + category: `stroke_${strokeLine}.${arrow}`, + }); + if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) { + ctx.save(); + ctx.setFont(this.textFont); + ctx.fillText('R', x + text_shift_x, text_y); + ctx.restore(); + } + } +} +Stroke.Type = { + BRUSH_DOWN: 1, + BRUSH_UP: 2, + ROLL_DOWN: 3, + ROLL_UP: 4, + RASQUEDO_DOWN: 5, + RASQUEDO_UP: 6, + ARPEGGIO_DIRECTIONLESS: 7, +}; +Stroke.TEXT_FONT = { + family: Font.SERIF, + size: Font.SIZE, + weight: FontWeight.BOLD, + style: FontStyle.ITALIC, +}; +export { Stroke }; diff --git a/build/esm/src/svgcontext.js b/build/esm/src/svgcontext.js new file mode 100644 index 0000000000..ab5b11f577 --- /dev/null +++ b/build/esm/src/svgcontext.js @@ -0,0 +1,466 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { RenderContext } from './rendercontext.js'; +import { Tables } from './tables.js'; +import { normalizeAngle, prefix, RuntimeError } from './util.js'; +const ATTRIBUTES_TO_IGNORE = { + path: { + x: true, + y: true, + width: true, + height: true, + 'font-family': true, + 'font-weight': true, + 'font-style': true, + 'font-size': true, + }, + rect: { + 'font-family': true, + 'font-weight': true, + 'font-style': true, + 'font-size': true, + }, + text: { + width: true, + height: true, + }, +}; +const SVG_NS = 'http://www.w3.org/2000/svg'; +const TWO_PI = 2 * Math.PI; +class MeasureTextCache { + constructor() { + this.cache = {}; + } + lookup(text, svg, attributes) { + let entries = this.cache[text]; + if (entries === undefined) { + entries = {}; + this.cache[text] = entries; + } + const family = attributes['font-family']; + const size = attributes['font-size']; + const weight = attributes['font-weight']; + const style = attributes['font-style']; + const key = `${family}%${size}%${weight}%${style}`; + let entry = entries[key]; + if (entry === undefined) { + entry = this.measureImpl(text, svg, attributes); + entries[key] = entry; + } + return entry; + } + measureImpl(text, svg, attributes) { + let txt = this.txt; + if (!txt) { + txt = document.createElementNS(SVG_NS, 'text'); + this.txt = txt; + } + txt.textContent = text; + if (attributes['font-family']) + txt.setAttributeNS(null, 'font-family', attributes['font-family']); + if (attributes['font-size']) + txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`); + if (attributes['font-style']) + txt.setAttributeNS(null, 'font-style', attributes['font-style']); + if (attributes['font-weight']) + txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`); + svg.appendChild(txt); + const bbox = txt.getBBox(); + svg.removeChild(txt); + return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }; + } +} +class SVGContext extends RenderContext { + constructor(element) { + super(); + this.width = 0; + this.height = 0; + this.precision = 1; + this.backgroundFillStyle = 'white'; + this.fontCSSString = ''; + this.element = element; + this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES); + const svg = this.create('svg'); + this.element.appendChild(svg); + this.svg = svg; + this.parent = this.svg; + this.groups = [this.svg]; + this.path = ''; + this.pen = { x: NaN, y: NaN }; + this.lineWidth = 1.0; + const defaultFontAttributes = { + 'font-family': Font.SANS_SERIF, + 'font-size': Font.SIZE + 'pt', + 'font-weight': FontWeight.NORMAL, + 'font-style': FontStyle.NORMAL, + }; + this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes); + this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes); + this.groupAttributes = []; + this.applyAttributes(svg, this.attributes); + this.groupAttributes.push(Object.assign({}, this.attributes)); + this.shadow_attributes = { + width: 0, + color: 'black', + }; + this.state_stack = []; + } + round(n) { + return Math.round(n * this.precision) / this.precision; + } + create(svgElementType) { + return document.createElementNS(SVG_NS, svgElementType); + } + openGroup(cls, id, attrs) { + const group = this.create('g'); + this.groups.push(group); + this.parent.appendChild(group); + this.parent = group; + if (cls) + group.setAttribute('class', prefix(cls)); + if (id) + group.setAttribute('id', prefix(id)); + if (attrs && attrs.pointerBBox) { + group.setAttribute('pointer-events', 'bounding-box'); + } + this.applyAttributes(group, this.attributes); + this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes)); + return group; + } + closeGroup() { + this.groups.pop(); + this.groupAttributes.pop(); + this.parent = this.groups[this.groups.length - 1]; + } + add(elem) { + this.parent.appendChild(elem); + } + setFillStyle(style) { + this.attributes.fill = style; + return this; + } + setBackgroundFillStyle(style) { + this.backgroundFillStyle = style; + return this; + } + setStrokeStyle(style) { + this.attributes.stroke = style; + return this; + } + setShadowColor(color) { + this.shadow_attributes.color = color; + return this; + } + setShadowBlur(blur) { + this.shadow_attributes.width = blur; + return this; + } + setLineWidth(width) { + this.attributes['stroke-width'] = width; + this.lineWidth = width; + return this; + } + setLineDash(lineDash) { + if (Object.prototype.toString.call(lineDash) === '[object Array]') { + this.attributes['stroke-dasharray'] = lineDash.join(','); + return this; + } + else { + throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.'); + } + } + setLineCap(capType) { + this.attributes['stroke-linecap'] = capType; + return this; + } + resize(width, height) { + this.width = width; + this.height = height; + this.element.style.width = width.toString(); + this.svg.style.width = width.toString(); + this.svg.style.height = height.toString(); + const attributes = { + width, + height, + }; + this.applyAttributes(this.svg, attributes); + this.scale(this.state.scaleX, this.state.scaleY); + return this; + } + scale(x, y) { + this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x; + this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y; + const visibleWidth = this.width / this.state.scaleX; + const visibleHeight = this.height / this.state.scaleY; + this.setViewBox(0, 0, visibleWidth, visibleHeight); + return this; + } + setViewBox(viewBox_or_minX, minY, width, height) { + if (typeof viewBox_or_minX === 'string') { + this.svg.setAttribute('viewBox', viewBox_or_minX); + } + else { + const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height; + this.svg.setAttribute('viewBox', viewBoxString); + } + } + applyAttributes(element, attributes) { + const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName]; + for (const attrName in attributes) { + if (attrNamesToIgnore && attrNamesToIgnore[attrName]) { + continue; + } + if (attributes[attrName] && + (this.groupAttributes.length == 0 || + attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName])) + element.setAttributeNS(null, attrName, attributes[attrName]); + } + return element; + } + clear() { + while (this.svg.lastChild) { + this.svg.removeChild(this.svg.lastChild); + } + this.scale(this.state.scaleX, this.state.scaleY); + } + rect(x, y, width, height, attributes) { + if (height < 0) { + y += height; + height *= -1; + } + const rectangle = this.create('rect'); + attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' }; + x = this.round(x); + y = this.round(y); + width = this.round(width); + height = this.round(height); + this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes)); + this.add(rectangle); + return this; + } + fillRect(x, y, width, height) { + const attributes = { fill: this.attributes.fill, stroke: 'none' }; + this.rect(x, y, width, height, attributes); + return this; + } + clearRect(x, y, width, height) { + this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' }); + return this; + } + beginPath() { + this.path = ''; + this.pen.x = NaN; + this.pen.y = NaN; + return this; + } + moveTo(x, y) { + x = this.round(x); + y = this.round(y); + this.path += 'M' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + lineTo(x, y) { + x = this.round(x); + y = this.round(y); + this.path += 'L' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + bezierCurveTo(x1, y1, x2, y2, x, y) { + x = this.round(x); + y = this.round(y); + x1 = this.round(x1); + y1 = this.round(y1); + x2 = this.round(x2); + y2 = this.round(y2); + this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + quadraticCurveTo(x1, y1, x, y) { + x = this.round(x); + y = this.round(y); + x1 = this.round(x1); + y1 = this.round(y1); + this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y; + this.pen.x = x; + this.pen.y = y; + return this; + } + arc(x, y, radius, startAngle, endAngle, counterclockwise) { + let x0 = x + radius * Math.cos(startAngle); + let y0 = y + radius * Math.sin(startAngle); + x0 = this.round(x0); + y0 = this.round(y0); + const tmpStartTest = normalizeAngle(startAngle); + const tmpEndTest = normalizeAngle(endAngle); + if ((!counterclockwise && endAngle - startAngle >= TWO_PI) || + (counterclockwise && startAngle - endAngle >= TWO_PI) || + tmpStartTest === tmpEndTest) { + let x1 = x + radius * Math.cos(startAngle + Math.PI); + let y1 = y + radius * Math.sin(startAngle + Math.PI); + x1 = this.round(x1); + y1 = this.round(y1); + radius = this.round(radius); + this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `; + this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`; + this.pen.x = x0; + this.pen.y = y0; + } + else { + let x1 = x + radius * Math.cos(endAngle); + let y1 = y + radius * Math.sin(endAngle); + startAngle = tmpStartTest; + endAngle = tmpEndTest; + let large; + if (Math.abs(endAngle - startAngle) < Math.PI) { + large = counterclockwise; + } + else { + large = !counterclockwise; + } + if (startAngle > endAngle) { + large = !large; + } + const sweep = !counterclockwise; + x1 = this.round(x1); + y1 = this.round(y1); + radius = this.round(radius); + this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`; + this.pen.x = x1; + this.pen.y = y1; + } + return this; + } + closePath() { + this.path += 'Z'; + return this; + } + getShadowStyle() { + const sa = this.shadow_attributes; + return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`; + } + fill(attributes) { + const path = this.create('path'); + if (typeof attributes === 'undefined') { + attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' }); + } + attributes.d = this.path; + if (this.shadow_attributes.width > 0) { + attributes.style = this.getShadowStyle(); + } + this.applyAttributes(path, attributes); + this.add(path); + return this; + } + stroke() { + const path = this.create('path'); + const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path }); + if (this.shadow_attributes.width > 0) { + attributes.style = this.getShadowStyle(); + } + this.applyAttributes(path, attributes); + this.add(path); + return this; + } + measureText(text) { + return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes); + } + fillText(text, x, y) { + if (!text || text.length <= 0) { + return this; + } + x = this.round(x); + y = this.round(y); + const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x, + y }); + const txt = this.create('text'); + txt.textContent = text; + this.applyAttributes(txt, attributes); + this.add(txt); + return this; + } + save() { + this.state_stack.push({ + state: { + 'font-family': this.state['font-family'], + 'font-weight': this.state['font-weight'], + 'font-style': this.state['font-style'], + 'font-size': this.state['font-size'], + scale: this.state.scale, + }, + attributes: { + 'font-family': this.attributes['font-family'], + 'font-weight': this.attributes['font-weight'], + 'font-style': this.attributes['font-style'], + 'font-size': this.attributes['font-size'], + fill: this.attributes.fill, + stroke: this.attributes.stroke, + 'stroke-width': this.attributes['stroke-width'], + 'stroke-dasharray': this.attributes['stroke-dasharray'], + }, + shadow_attributes: { + width: this.shadow_attributes.width, + color: this.shadow_attributes.color, + }, + lineWidth: this.lineWidth, + }); + return this; + } + restore() { + const savedState = this.state_stack.pop(); + if (savedState) { + const state = savedState; + this.state['font-family'] = state.state['font-family']; + this.state['font-weight'] = state.state['font-weight']; + this.state['font-style'] = state.state['font-style']; + this.state['font-size'] = state.state['font-size']; + this.state.scale = state.state.scale; + this.attributes['font-family'] = state.attributes['font-family']; + this.attributes['font-weight'] = state.attributes['font-weight']; + this.attributes['font-style'] = state.attributes['font-style']; + this.attributes['font-size'] = state.attributes['font-size']; + this.attributes.fill = state.attributes.fill; + this.attributes.stroke = state.attributes.stroke; + this.attributes['stroke-width'] = state.attributes['stroke-width']; + this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray']; + this.shadow_attributes.width = state.shadow_attributes.width; + this.shadow_attributes.color = state.shadow_attributes.color; + this.lineWidth = state.lineWidth; + } + return this; + } + set fillStyle(style) { + this.setFillStyle(style); + } + get fillStyle() { + return this.attributes.fill; + } + set strokeStyle(style) { + this.setStrokeStyle(style); + } + get strokeStyle() { + return this.attributes.stroke; + } + setFont(f, size, weight, style) { + const fontInfo = Font.validate(f, size, weight, style); + this.fontCSSString = Font.toCSSString(fontInfo); + const fontAttributes = { + 'font-family': fontInfo.family, + 'font-size': fontInfo.size, + 'font-weight': fontInfo.weight, + 'font-style': fontInfo.style, + }; + this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes); + this.state = Object.assign(Object.assign({}, this.state), fontAttributes); + return this; + } + getFont() { + return this.fontCSSString; + } +} +SVGContext.measureTextCache = new MeasureTextCache(); +export { SVGContext }; diff --git a/build/esm/src/system.js b/build/esm/src/system.js new file mode 100644 index 0000000000..7b0d8f562a --- /dev/null +++ b/build/esm/src/system.js @@ -0,0 +1,161 @@ +import { BoundingBox } from './boundingbox.js'; +import { Element } from './element.js'; +import { Formatter } from './formatter.js'; +import { Note } from './note.js'; +import { Stave } from './stave.js'; +import { RuntimeError } from './util.js'; +export class System extends Element { + static get CATEGORY() { + return "System"; + } + constructor(params = {}) { + super(); + this.setOptions(params); + this.partStaves = []; + this.partStaveInfos = []; + this.partVoices = []; + } + setOptions(options = {}) { + if (!options.factory) { + throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.'); + } + this.factory = options.factory; + this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) }); + if (this.options.noJustification === false && typeof options.width === 'undefined') { + this.options.autoWidth = true; + } + } + getX() { + return this.options.x; + } + setX(x) { + this.options.x = x; + this.partStaves.forEach((s) => { + s.setX(x); + }); + } + getY() { + return this.options.y; + } + setY(y) { + this.options.y = y; + this.partStaves.forEach((s) => { + s.setY(y); + }); + } + getStaves() { + return this.partStaves; + } + getVoices() { + return this.partVoices; + } + setContext(context) { + super.setContext(context); + this.factory.setContext(context); + return this; + } + addConnector(type = 'double') { + this.connector = this.factory.StaveConnector({ + top_stave: this.partStaves[0], + bottom_stave: this.partStaves[this.partStaves.length - 1], + type, + }); + return this.connector; + } + addStave(params) { + var _a; + const staveOptions = Object.assign({ left_bar: false }, params.options); + const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions }); + const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions }); + const ctx = this.getContext(); + p.voices.forEach((voice) => { + voice + .setContext(ctx) + .setStave(stave) + .getTickables() + .forEach((tickable) => tickable.setStave(stave)); + this.partVoices.push(voice); + }); + this.partStaves.push(stave); + this.partStaveInfos.push(p); + return stave; + } + addVoices(voices) { + const ctx = this.getContext(); + voices.forEach((voice) => { + voice.setContext(ctx); + this.partVoices.push(voice); + }); + } + format() { + const options_details = this.options.details; + let justifyWidth = 0; + const formatter = new Formatter(options_details); + this.formatter = formatter; + let y = this.options.y; + let startX = 0; + const debugNoteMetricsYs = []; + this.partStaves.forEach((part, index) => { + y = y + part.space(this.partStaveInfos[index].spaceAbove); + part.setY(y); + y = y + part.space(this.partStaveInfos[index].spaceBelow); + y = y + part.space(this.options.spaceBetweenStaves); + if (this.partStaveInfos[index].debugNoteMetrics) { + debugNoteMetricsYs.push({ y, stave: part }); + y += 15; + } + startX = Math.max(startX, part.getNoteStartX()); + }); + this.partVoices.forEach((voice) => { + voice.getTickables().forEach((tickable) => { + const stave = tickable.getStave(); + if (stave) + tickable.setStave(stave); + }); + }); + formatter.joinVoices(this.partVoices); + this.partStaves.forEach((part) => part.setNoteStartX(startX)); + if (this.options.autoWidth && this.partVoices.length > 0) { + justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices); + this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x); + this.partStaves.forEach((part) => { + part.setWidth(this.options.width); + }); + } + else { + justifyWidth = this.options.noPadding + ? this.options.width - (startX - this.options.x) + : this.options.width - (startX - this.options.x) - Stave.defaultPadding; + } + if (this.partVoices.length > 0) { + formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions); + } + formatter.postFormat(); + for (let i = 0; i < this.options.formatIterations; i++) { + formatter.tune(options_details); + } + this.startX = startX; + this.debugNoteMetricsYs = debugNoteMetricsYs; + this.lastY = y; + this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y); + Stave.formatBegModifiers(this.partStaves); + } + draw() { + const ctx = this.checkContext(); + if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) { + throw new RuntimeError('NoFormatter', 'format() must be called before draw()'); + } + this.setRendered(); + if (this.options.debugFormatter) { + Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY); + } + this.debugNoteMetricsYs.forEach((d) => { + this.partVoices.forEach((voice) => { + voice.getTickables().forEach((tickable) => { + if (tickable.getStave() === d.stave) + Note.plotMetrics(ctx, tickable, d.y); + }); + }); + }); + } +} diff --git a/build/esm/src/tables.js b/build/esm/src/tables.js new file mode 100644 index 0000000000..1aea4a89f2 --- /dev/null +++ b/build/esm/src/tables.js @@ -0,0 +1,1215 @@ +import { Fraction } from './fraction.js'; +import { Glyph } from './glyph.js'; +import { RuntimeError } from './util.js'; +const RESOLUTION = 16384; +const durations = { + '1/2': RESOLUTION * 2, + 1: RESOLUTION / 1, + 2: RESOLUTION / 2, + 4: RESOLUTION / 4, + 8: RESOLUTION / 8, + 16: RESOLUTION / 16, + 32: RESOLUTION / 32, + 64: RESOLUTION / 64, + 128: RESOLUTION / 128, + 256: RESOLUTION / 256, +}; +const durationAliases = { + w: '1', + h: '2', + q: '4', + b: '256', +}; +const keySignatures = { + C: { num: 0 }, + Am: { num: 0 }, + F: { acc: 'b', num: 1 }, + Dm: { acc: 'b', num: 1 }, + Bb: { acc: 'b', num: 2 }, + Gm: { acc: 'b', num: 2 }, + Eb: { acc: 'b', num: 3 }, + Cm: { acc: 'b', num: 3 }, + Ab: { acc: 'b', num: 4 }, + Fm: { acc: 'b', num: 4 }, + Db: { acc: 'b', num: 5 }, + Bbm: { acc: 'b', num: 5 }, + Gb: { acc: 'b', num: 6 }, + Ebm: { acc: 'b', num: 6 }, + Cb: { acc: 'b', num: 7 }, + Abm: { acc: 'b', num: 7 }, + G: { acc: '#', num: 1 }, + Em: { acc: '#', num: 1 }, + D: { acc: '#', num: 2 }, + Bm: { acc: '#', num: 2 }, + A: { acc: '#', num: 3 }, + 'F#m': { acc: '#', num: 3 }, + E: { acc: '#', num: 4 }, + 'C#m': { acc: '#', num: 4 }, + B: { acc: '#', num: 5 }, + 'G#m': { acc: '#', num: 5 }, + 'F#': { acc: '#', num: 6 }, + 'D#m': { acc: '#', num: 6 }, + 'C#': { acc: '#', num: 7 }, + 'A#m': { acc: '#', num: 7 }, +}; +const clefs = { + treble: { line_shift: 0 }, + bass: { line_shift: 6 }, + tenor: { line_shift: 4 }, + alto: { line_shift: 3 }, + soprano: { line_shift: 1 }, + percussion: { line_shift: 0 }, + 'mezzo-soprano': { line_shift: 2 }, + 'baritone-c': { line_shift: 5 }, + 'baritone-f': { line_shift: 5 }, + subbass: { line_shift: 7 }, + french: { line_shift: -1 }, +}; +const notesInfo = { + C: { index: 0, int_val: 0 }, + CN: { index: 0, int_val: 0, accidental: 'n' }, + 'C#': { index: 0, int_val: 1, accidental: '#' }, + 'C##': { index: 0, int_val: 2, accidental: '##' }, + CB: { index: 0, int_val: 11, accidental: 'b' }, + CBB: { index: 0, int_val: 10, accidental: 'bb' }, + D: { index: 1, int_val: 2 }, + DN: { index: 1, int_val: 2, accidental: 'n' }, + 'D#': { index: 1, int_val: 3, accidental: '#' }, + 'D##': { index: 1, int_val: 4, accidental: '##' }, + DB: { index: 1, int_val: 1, accidental: 'b' }, + DBB: { index: 1, int_val: 0, accidental: 'bb' }, + E: { index: 2, int_val: 4 }, + EN: { index: 2, int_val: 4, accidental: 'n' }, + 'E#': { index: 2, int_val: 5, accidental: '#' }, + 'E##': { index: 2, int_val: 6, accidental: '##' }, + EB: { index: 2, int_val: 3, accidental: 'b' }, + EBB: { index: 2, int_val: 2, accidental: 'bb' }, + F: { index: 3, int_val: 5 }, + FN: { index: 3, int_val: 5, accidental: 'n' }, + 'F#': { index: 3, int_val: 6, accidental: '#' }, + 'F##': { index: 3, int_val: 7, accidental: '##' }, + FB: { index: 3, int_val: 4, accidental: 'b' }, + FBB: { index: 3, int_val: 3, accidental: 'bb' }, + G: { index: 4, int_val: 7 }, + GN: { index: 4, int_val: 7, accidental: 'n' }, + 'G#': { index: 4, int_val: 8, accidental: '#' }, + 'G##': { index: 4, int_val: 9, accidental: '##' }, + GB: { index: 4, int_val: 6, accidental: 'b' }, + GBB: { index: 4, int_val: 5, accidental: 'bb' }, + A: { index: 5, int_val: 9 }, + AN: { index: 5, int_val: 9, accidental: 'n' }, + 'A#': { index: 5, int_val: 10, accidental: '#' }, + 'A##': { index: 5, int_val: 11, accidental: '##' }, + AB: { index: 5, int_val: 8, accidental: 'b' }, + ABB: { index: 5, int_val: 7, accidental: 'bb' }, + B: { index: 6, int_val: 11 }, + BN: { index: 6, int_val: 11, accidental: 'n' }, + 'B#': { index: 6, int_val: 12, accidental: '#' }, + 'B##': { index: 6, int_val: 13, accidental: '##' }, + BB: { index: 6, int_val: 10, accidental: 'b' }, + BBB: { index: 6, int_val: 9, accidental: 'bb' }, + R: { index: 6, rest: true }, + X: { + index: 6, + accidental: '', + octave: 4, + code: 'noteheadXBlack', + shift_right: 5.5, + }, +}; +const validNoteTypes = { + n: { name: 'note' }, + r: { name: 'rest' }, + h: { name: 'harmonic' }, + m: { name: 'muted' }, + s: { name: 'slash' }, + g: { name: 'ghost' }, + d: { name: 'diamond' }, + x: { name: 'x' }, + ci: { name: 'circled' }, + cx: { name: 'circle x' }, + sf: { name: 'slashed' }, + sb: { name: 'slashed backward' }, + sq: { name: 'square' }, + tu: { name: 'triangle up' }, + td: { name: 'triangle down' }, +}; +const accidentals = { + '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 }, + '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 }, + b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 }, + bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 }, + n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 }, + '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 }, + '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 }, + db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 }, + d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 }, + '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 }, + '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 }, + '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 }, + bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 }, + bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 }, + o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 }, + k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 }, + bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 }, + '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 }, + ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 }, + afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 }, + accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 }, + accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 }, + accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 }, + accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 }, + accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 }, + accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 }, + accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 }, + accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 }, + accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 }, + accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 }, + accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 }, + accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 }, + accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 }, + accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 }, + accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 }, + accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 }, + accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 }, + accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 }, + accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 }, + accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 }, + accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 }, + accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 }, + accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 }, + accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 }, + accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 }, + accidentalNarrowReversedFlatAndFlat: { + code: 'accidentalNarrowReversedFlatAndFlat', + parenRightPaddingAdjustment: -1, + }, + accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 }, + accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 }, +}; +const accidentalColumns = { + 1: { + a: [1], + b: [1], + }, + 2: { + a: [1, 2], + }, + 3: { + a: [1, 3, 2], + b: [1, 2, 1], + second_on_bottom: [1, 2, 3], + }, + 4: { + a: [1, 3, 4, 2], + b: [1, 2, 3, 1], + spaced_out_tetrachord: [1, 2, 1, 2], + }, + 5: { + a: [1, 3, 5, 4, 2], + b: [1, 2, 4, 3, 1], + spaced_out_pentachord: [1, 2, 3, 2, 1], + very_spaced_out_pentachord: [1, 2, 1, 2, 1], + }, + 6: { + a: [1, 3, 5, 6, 4, 2], + b: [1, 2, 4, 5, 3, 1], + spaced_out_hexachord: [1, 3, 2, 1, 3, 2], + very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2], + }, +}; +const articulations = { + 'a.': { code: 'augmentationDot', between_lines: true }, + av: { + aboveCode: 'articStaccatissimoAbove', + belowCode: 'articStaccatissimoBelow', + between_lines: true, + }, + 'a>': { + aboveCode: 'articAccentAbove', + belowCode: 'articAccentBelow', + between_lines: true, + }, + 'a-': { + aboveCode: 'articTenutoAbove', + belowCode: 'articTenutoBelow', + between_lines: true, + }, + 'a^': { + aboveCode: 'articMarcatoAbove', + belowCode: 'articMarcatoBelow', + between_lines: false, + }, + 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false }, + ao: { + aboveCode: 'pluckedSnapPizzicatoAbove', + belowCode: 'pluckedSnapPizzicatoBelow', + between_lines: false, + }, + ah: { code: 'stringsHarmonic', between_lines: false }, + 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false }, + 'a@a': { code: 'fermataAbove', between_lines: false }, + 'a@u': { code: 'fermataBelow', between_lines: false }, + 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false }, + 'a@as': { code: 'fermataShortAbove', between_lines: false }, + 'a@us': { code: 'fermataShortBelow', between_lines: false }, + 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false }, + 'a@al': { code: 'fermataLongAbove', between_lines: false }, + 'a@ul': { code: 'fermataLongBelow', between_lines: false }, + 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false }, + 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false }, + 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false }, + 'a|': { code: 'stringsUpBow', between_lines: false }, + am: { code: 'stringsDownBow', between_lines: false }, + 'a,': { code: 'pictChokeCymbal', between_lines: false }, +}; +const ornaments = { + mordent: { code: 'ornamentShortTrill' }, + mordent_inverted: { code: 'ornamentMordent' }, + turn: { code: 'ornamentTurn' }, + turn_inverted: { code: 'ornamentTurnSlash' }, + tr: { code: 'ornamentTrill' }, + upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' }, + downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' }, + prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' }, + pralldown: { code: 'ornamentPrecompTrillLowerSuffix' }, + upmordent: { code: 'ornamentPrecompSlideTrillBach' }, + downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' }, + lineprall: { code: 'ornamentPrecompAppoggTrill' }, + prallprall: { code: 'ornamentTremblement' }, + scoop: { code: 'brassScoop' }, + doit: { code: 'brassDoitMedium' }, + fall: { code: 'brassFallLipShort' }, + doitLong: { code: 'brassLiftMedium' }, + fallLong: { code: 'brassFallRoughMedium' }, + bend: { code: 'brassBend' }, + plungerClosed: { code: 'brassMuteClosed' }, + plungerOpen: { code: 'brassMuteOpen' }, + flip: { code: 'brassFlip' }, + jazzTurn: { code: 'brassJazzTurn' }, + smear: { code: 'brassSmear' }, +}; +class Tables { + static currentMusicFont() { + if (Tables.MUSIC_FONT_STACK.length === 0) { + throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).'); + } + else { + return Tables.MUSIC_FONT_STACK[0]; + } + } + static clefProperties(clef) { + if (!clef || !(clef in clefs)) + throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef); + return clefs[clef]; + } + static keyProperties(keyOctaveGlyph, clef = 'treble', params) { + let options = { octave_shift: 0, duration: '4' }; + if (typeof params === 'object') { + options = Object.assign(Object.assign({}, options), params); + } + const duration = Tables.sanitizeDuration(options.duration); + const pieces = keyOctaveGlyph.split('/'); + if (pieces.length < 2) { + throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`); + } + const key = pieces[0].toUpperCase(); + const value = notesInfo[key]; + if (!value) + throw new RuntimeError('BadArguments', 'Invalid key name: ' + key); + if (value.octave) + pieces[1] = value.octave.toString(); + let octave = parseInt(pieces[1], 10); + octave += -1 * options.octave_shift; + const baseIndex = octave * 7 - 4 * 7; + let line = (baseIndex + value.index) / 2; + line += Tables.clefProperties(clef).line_shift; + let stroke = 0; + if (line <= 0 && (line * 2) % 2 === 0) + stroke = 1; + if (line >= 6 && (line * 2) % 2 === 0) + stroke = -1; + const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined; + const code = value.code; + const shift_right = value.shift_right; + let customNoteHeadProps = {}; + if (pieces.length > 2 && pieces[2]) { + const glyphName = pieces[2].toUpperCase(); + customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {}; + } + return Object.assign({ key, + octave, + line, + int_value, accidental: value.accidental, code, + stroke, + shift_right, displaced: false }, customNoteHeadProps); + } + static integerToNote(integer) { + if (typeof integer === 'undefined' || integer < 0 || integer > 11) { + throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`); + } + const table = { + 0: 'C', + 1: 'C#', + 2: 'D', + 3: 'D#', + 4: 'E', + 5: 'F', + 6: 'F#', + 7: 'G', + 8: 'G#', + 9: 'A', + 10: 'A#', + 11: 'B', + }; + const noteValue = table[integer]; + if (!noteValue) { + throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`); + } + return noteValue; + } + static tabToGlyphProps(fret, scale = 1.0) { + let glyph = undefined; + let width = 0; + let shift_y = 0; + if (fret.toUpperCase() === 'X') { + const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics(); + glyph = 'accidentalDoubleSharp'; + if (glyphMetrics.width == undefined || glyphMetrics.height == undefined) + throw new RuntimeError('InvalidMetrics', 'Width and height required'); + width = glyphMetrics.width; + shift_y = -glyphMetrics.height / 2; + } + else { + width = Tables.textWidth(fret); + } + return { + text: fret, + code: glyph, + getWidth: () => width * scale, + shift_y, + }; + } + static textWidth(text) { + return 7 * text.toString().length; + } + static articulationCodes(artic) { + return articulations[artic]; + } + static accidentalCodes(acc) { + return accidentals[acc]; + } + static ornamentCodes(acc) { + return ornaments[acc]; + } + static keySignature(spec) { + const keySpec = keySignatures[spec]; + if (!keySpec) { + throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`); + } + if (!keySpec.acc) { + return []; + } + const accidentalList = { + b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5], + '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2], + }; + const notes = accidentalList[keySpec.acc]; + const acc_list = []; + for (let i = 0; i < keySpec.num; ++i) { + const line = notes[i]; + acc_list.push({ type: keySpec.acc, line }); + } + return acc_list; + } + static getKeySignatures() { + return keySignatures; + } + static hasKeySignature(spec) { + return spec in keySignatures; + } + static sanitizeDuration(duration) { + const durationNumber = durationAliases[duration]; + if (durationNumber !== undefined) { + duration = durationNumber; + } + if (durations[duration] === undefined) { + throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`); + } + return duration; + } + static durationToFraction(duration) { + return new Fraction().parse(Tables.sanitizeDuration(duration)); + } + static durationToNumber(duration) { + return Tables.durationToFraction(duration).value(); + } + static durationToTicks(duration) { + duration = Tables.sanitizeDuration(duration); + const ticks = durations[duration]; + if (ticks === undefined) { + throw new RuntimeError('InvalidDuration'); + } + return ticks; + } + static codeNoteHead(type, duration) { + let code = ''; + switch (type) { + case 'D0': + code = 'noteheadDiamondWhole'; + break; + case 'D1': + code = 'noteheadDiamondHalf'; + break; + case 'D2': + code = 'noteheadDiamondBlack'; + break; + case 'D3': + code = 'noteheadDiamondBlack'; + break; + case 'T0': + code = 'noteheadTriangleUpWhole'; + break; + case 'T1': + code = 'noteheadTriangleUpHalf'; + break; + case 'T2': + code = 'noteheadTriangleUpBlack'; + break; + case 'T3': + code = 'noteheadTriangleUpBlack'; + break; + case 'X0': + code = 'noteheadXWhole'; + break; + case 'X1': + code = 'noteheadXHalf'; + break; + case 'X2': + code = 'noteheadXBlack'; + break; + case 'X3': + code = 'noteheadCircleX'; + break; + case 'S1': + code = 'noteheadSquareWhite'; + break; + case 'S2': + code = 'noteheadSquareBlack'; + break; + case 'R1': + code = 'vexNoteHeadRectWhite'; + break; + case 'R2': + code = 'vexNoteHeadRectBlack'; + break; + case 'DO': + code = 'noteheadTriangleUpBlack'; + break; + case 'RE': + code = 'noteheadMoonBlack'; + break; + case 'MI': + code = 'noteheadDiamondBlack'; + break; + case 'FA': + code = 'noteheadTriangleLeftBlack'; + break; + case 'FAUP': + code = 'noteheadTriangleRightBlack'; + break; + case 'SO': + code = 'noteheadBlack'; + break; + case 'LA': + code = 'noteheadSquareBlack'; + break; + case 'TI': + code = 'noteheadTriangleRoundDownBlack'; + break; + case 'D': + case 'H': + switch (duration) { + case '1/2': + code = 'noteheadDiamondDoubleWhole'; + break; + case '1': + code = 'noteheadDiamondWhole'; + break; + case '2': + code = 'noteheadDiamondHalf'; + break; + default: + code = 'noteheadDiamondBlack'; + break; + } + break; + case 'N': + case 'G': + switch (duration) { + case '1/2': + code = 'noteheadDoubleWhole'; + break; + case '1': + code = 'noteheadWhole'; + break; + case '2': + code = 'noteheadHalf'; + break; + default: + code = 'noteheadBlack'; + break; + } + break; + case 'M': + case 'X': + switch (duration) { + case '1/2': + code = 'noteheadXDoubleWhole'; + break; + case '1': + code = 'noteheadXWhole'; + break; + case '2': + code = 'noteheadXHalf'; + break; + default: + code = 'noteheadXBlack'; + break; + } + break; + case 'CX': + switch (duration) { + case '1/2': + code = 'noteheadCircleXDoubleWhole'; + break; + case '1': + code = 'noteheadCircleXWhole'; + break; + case '2': + code = 'noteheadCircleXHalf'; + break; + default: + code = 'noteheadCircleX'; + break; + } + break; + case 'CI': + switch (duration) { + case '1/2': + code = 'noteheadCircledDoubleWhole'; + break; + case '1': + code = 'noteheadCircledWhole'; + break; + case '2': + code = 'noteheadCircledHalf'; + break; + default: + code = 'noteheadCircledBlack'; + break; + } + break; + case 'SQ': + switch (duration) { + case '1/2': + code = 'noteheadDoubleWholeSquare'; + break; + case '1': + code = 'noteheadSquareWhite'; + break; + case '2': + code = 'noteheadSquareWhite'; + break; + default: + code = 'noteheadSquareBlack'; + break; + } + break; + case 'TU': + switch (duration) { + case '1/2': + code = 'noteheadTriangleUpDoubleWhole'; + break; + case '1': + code = 'noteheadTriangleUpWhole'; + break; + case '2': + code = 'noteheadTriangleUpHalf'; + break; + default: + code = 'noteheadTriangleUpBlack'; + break; + } + break; + case 'TD': + switch (duration) { + case '1/2': + code = 'noteheadTriangleDownDoubleWhole'; + break; + case '1': + code = 'noteheadTriangleDownWhole'; + break; + case '2': + code = 'noteheadTriangleDownHalf'; + break; + default: + code = 'noteheadTriangleDownBlack'; + break; + } + break; + case 'SF': + switch (duration) { + case '1/2': + code = 'noteheadSlashedDoubleWhole1'; + break; + case '1': + code = 'noteheadSlashedWhole1'; + break; + case '2': + code = 'noteheadSlashedHalf1'; + break; + default: + code = 'noteheadSlashedBlack1'; + } + break; + case 'SB': + switch (duration) { + case '1/2': + code = 'noteheadSlashedDoubleWhole2'; + break; + case '1': + code = 'noteheadSlashedWhole2'; + break; + case '2': + code = 'noteheadSlashedHalf2'; + break; + default: + code = 'noteheadSlashedBlack2'; + } + break; + } + return code; + } + static getGlyphProps(duration, type = 'n') { + duration = Tables.sanitizeDuration(duration); + let code = durationCodes[duration]; + if (code === undefined) { + code = durationCodes['4']; + } + let glyphTypeProperties = code[type]; + const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration); + if (codeNoteHead != '') + glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead }); + const code_head = glyphTypeProperties.code_head; + const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale); + return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties); + } +} +Tables.UNISON = true; +Tables.SOFTMAX_FACTOR = 10; +Tables.STEM_WIDTH = 1.5; +Tables.STEM_HEIGHT = 35; +Tables.STAVE_LINE_THICKNESS = 1; +Tables.RENDER_PRECISION_PLACES = 3; +Tables.RESOLUTION = RESOLUTION; +Tables.MUSIC_FONT_STACK = []; +Tables.NOTATION_FONT_SCALE = 39; +Tables.TABLATURE_FONT_SCALE = 39; +Tables.SLASH_NOTEHEAD_WIDTH = 15; +Tables.STAVE_LINE_DISTANCE = 10; +Tables.TEXT_HEIGHT_OFFSET_HACK = 1; +Tables.accidentalMap = accidentals; +Tables.accidentalColumnsTable = accidentalColumns; +Tables.unicode = { + sharp: String.fromCharCode(0x266f), + flat: String.fromCharCode(0x266d), + natural: String.fromCharCode(0x266e), + triangle: String.fromCharCode(0x25b3), + 'o-with-slash': String.fromCharCode(0x00f8), + degrees: String.fromCharCode(0x00b0), + circle: String.fromCharCode(0x25cb), +}; +Tables.validTypes = validNoteTypes; +Tables.TIME4_4 = { + num_beats: 4, + beat_value: 4, + resolution: RESOLUTION, +}; +export { Tables }; +const durationCodes = { + '1/2': { + common: { + code_head: '', + stem: false, + flag: false, + stem_up_extension: -Tables.STEM_HEIGHT, + stem_down_extension: -Tables.STEM_HEIGHT, + tabnote_stem_up_extension: -Tables.STEM_HEIGHT, + tabnote_stem_down_extension: -Tables.STEM_HEIGHT, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'restDoubleWhole', + rest: true, + position: 'B/5', + dot_shiftY: 0.5, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 1: { + common: { + code_head: '', + stem: false, + flag: false, + stem_up_extension: -Tables.STEM_HEIGHT, + stem_down_extension: -Tables.STEM_HEIGHT, + tabnote_stem_up_extension: -Tables.STEM_HEIGHT, + tabnote_stem_down_extension: -Tables.STEM_HEIGHT, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'restWhole', + ledger_code_head: 'restWholeLegerLine', + rest: true, + position: 'D/5', + dot_shiftY: 0.5, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 2: { + common: { + code_head: '', + stem: true, + flag: false, + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'restHalf', + ledger_code_head: 'restHalfLegerLine', + stem: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 4: { + common: { + code_head: '', + stem: true, + flag: false, + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'restQuarter', + stem: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.5, + line_below: 1.5, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 8: { + common: { + code_head: '', + stem: true, + flag: true, + beam_count: 1, + stem_beam_extension: 0, + code_flag_upstem: 'flag8thUp', + code_flag_downstem: 'flag8thDown', + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'rest8th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.0, + line_below: 1.0, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 16: { + common: { + code_head: '', + beam_count: 2, + stem_beam_extension: 0, + stem: true, + flag: true, + code_flag_upstem: 'flag16thUp', + code_flag_downstem: 'flag16thDown', + stem_up_extension: 0, + stem_down_extension: 0, + tabnote_stem_up_extension: 0, + tabnote_stem_down_extension: 0, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'rest16th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -0.5, + line_above: 1.0, + line_below: 2.0, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 32: { + common: { + code_head: '', + beam_count: 3, + stem_beam_extension: 7.5, + stem: true, + flag: true, + code_flag_upstem: 'flag32ndUp', + code_flag_downstem: 'flag32ndDown', + stem_up_extension: 9, + stem_down_extension: 9, + tabnote_stem_up_extension: 9, + tabnote_stem_down_extension: 9, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'rest32nd', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -1.5, + line_above: 2.0, + line_below: 2.0, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 64: { + common: { + code_head: '', + beam_count: 4, + stem_beam_extension: 15, + stem: true, + flag: true, + code_flag_upstem: 'flag64thUp', + code_flag_downstem: 'flag64thDown', + stem_up_extension: 13, + stem_down_extension: 13, + tabnote_stem_up_extension: 13, + tabnote_stem_down_extension: 13, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'rest64th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -1.5, + line_above: 2.0, + line_below: 3.0, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, + 128: { + common: { + code_head: '', + beam_count: 5, + stem_beam_extension: 22.5, + stem: true, + flag: true, + code_flag_upstem: 'flag128thUp', + code_flag_downstem: 'flag128thDown', + stem_up_extension: 22, + stem_down_extension: 22, + tabnote_stem_up_extension: 22, + tabnote_stem_down_extension: 22, + dot_shiftY: 0, + line_above: 0, + line_below: 0, + }, + r: { + code_head: 'rest128th', + stem: false, + flag: false, + rest: true, + position: 'B/4', + dot_shiftY: -2.5, + line_above: 3.0, + line_below: 3.0, + }, + s: { + getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, + position: 'B/4', + }, + }, +}; diff --git a/build/esm/src/tabnote.js b/build/esm/src/tabnote.js new file mode 100644 index 0000000000..f2a4a8359d --- /dev/null +++ b/build/esm/src/tabnote.js @@ -0,0 +1,302 @@ +import { Font } from './font.js'; +import { Glyph } from './glyph.js'; +import { Modifier } from './modifier.js'; +import { Stem } from './stem.js'; +import { StemmableNote } from './stemmablenote.js'; +import { Tables } from './tables.js'; +import { isDot } from './typeguard.js'; +import { defined, RuntimeError } from './util.js'; +function getUnusedStringGroups(num_lines, strings_used) { + const stem_through = []; + let group = []; + for (let string = 1; string <= num_lines; string++) { + const is_used = strings_used.indexOf(string) > -1; + if (!is_used) { + group.push(string); + } + else { + stem_through.push(group); + group = []; + } + } + if (group.length > 0) + stem_through.push(group); + return stem_through; +} +function getPartialStemLines(stem_y, unused_strings, stave, stem_direction) { + const up_stem = stem_direction !== 1; + const down_stem = stem_direction !== -1; + const line_spacing = stave.getSpacingBetweenLines(); + const total_lines = stave.getNumLines(); + const stem_lines = []; + unused_strings.forEach((strings) => { + const containsLastString = strings.indexOf(total_lines) > -1; + const containsFirstString = strings.indexOf(1) > -1; + if ((up_stem && containsFirstString) || (down_stem && containsLastString)) { + return; + } + if (strings.length === 1) { + strings.push(strings[0]); + } + const line_ys = []; + strings.forEach((string, index, strings) => { + const isTopBound = string === 1; + const isBottomBound = string === total_lines; + let y = stave.getYForLine(string - 1); + if (index === 0 && !isTopBound) { + y -= line_spacing / 2 - 1; + } + else if (index === strings.length - 1 && !isBottomBound) { + y += line_spacing / 2 - 1; + } + line_ys.push(y); + if (stem_direction === 1 && isTopBound) { + line_ys.push(stem_y - 2); + } + else if (stem_direction === -1 && isBottomBound) { + line_ys.push(stem_y + 2); + } + }); + stem_lines.push(line_ys.sort((a, b) => a - b)); + }); + return stem_lines; +} +export class TabNote extends StemmableNote { + static get CATEGORY() { + return "TabNote"; + } + constructor(noteStruct, draw_stem = false) { + super(noteStruct); + this.glyphPropsArr = []; + this.greatestString = () => { + return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b)); + }; + this.leastString = () => { + return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b)); + }; + this.ghost = false; + this.positions = noteStruct.positions || []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_scale: Tables.TABLATURE_FONT_SCALE, draw_stem, draw_dots: draw_stem, draw_stem_through_stave: false, y_shift: 0, scale: 1.0, font: `${Font.SIZE}pt ${Font.SANS_SERIF}` }); + this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType); + defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); + this.buildStem(); + if (noteStruct.stem_direction) { + this.setStemDirection(noteStruct.stem_direction); + } + else { + this.setStemDirection(Stem.UP); + } + this.ghost = false; + this.updateWidth(); + } + reset() { + super.reset(); + if (this.stave) + this.setStave(this.stave); + return this; + } + setGhost(ghost) { + this.ghost = ghost; + this.updateWidth(); + return this; + } + hasStem() { + if (this.render_options.draw_stem) + return true; + return false; + } + getStemExtension() { + const glyphProps = this.getGlyphProps(); + if (this.stem_extension_override != null) { + return this.stem_extension_override; + } + if (glyphProps) { + return this.getStemDirection() === Stem.UP + ? glyphProps.tabnote_stem_up_extension + : glyphProps.tabnote_stem_down_extension; + } + return 0; + } + updateWidth() { + this.glyphPropsArr = []; + this.width = 0; + for (let i = 0; i < this.positions.length; ++i) { + let fret = this.positions[i].fret; + if (this.ghost) + fret = '(' + fret + ')'; + const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale); + this.glyphPropsArr.push(glyphProps); + this.width = Math.max(glyphProps.getWidth(), this.width); + } + this.glyphProps.getWidth = () => this.width; + } + setStave(stave) { + super.setStave(stave); + const ctx = stave.getContext(); + this.setContext(ctx); + if (ctx) { + this.width = 0; + for (let i = 0; i < this.glyphPropsArr.length; ++i) { + const glyphProps = this.glyphPropsArr[i]; + const text = '' + glyphProps.text; + if (text.toUpperCase() !== 'X') { + ctx.save(); + ctx.setFont(this.render_options.font); + glyphProps.width = ctx.measureText(text).width; + ctx.restore(); + glyphProps.getWidth = () => glyphProps.width; + } + this.width = Math.max(glyphProps.getWidth(), this.width); + } + this.glyphProps.getWidth = () => this.width; + } + const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1)); + this.setYs(ys); + if (this.stem) { + this.stem.setYBounds(this.getStemY(), this.getStemY()); + } + return this; + } + getPositions() { + return this.positions; + } + getModifierStartXY(position, index) { + if (!this.preFormatted) { + throw new RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); + } + if (this.ys.length === 0) { + throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); + } + let x = 0; + if (position === Modifier.Position.LEFT) { + x = -1 * 2; + } + else if (position === Modifier.Position.RIGHT) { + x = this.width + 2; + } + else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) { + const note_glyph_width = this.glyphProps.getWidth(); + x = note_glyph_width / 2; + } + return { + x: this.getAbsoluteX() + x, + y: this.ys[index], + }; + } + getLineForRest() { + return Number(this.positions[0].str); + } + preFormat() { + if (this.preFormatted) + return; + if (this.modifierContext) + this.modifierContext.preFormat(); + this.preFormatted = true; + } + getStemX() { + return this.getCenterGlyphX(); + } + getStemY() { + const num_lines = this.checkStave().getNumLines(); + const stemUpLine = -0.5; + const stemDownLine = num_lines - 0.5; + const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine; + return this.checkStave().getYForLine(stemStartLine); + } + getStemExtents() { + return this.checkStem().getExtents(); + } + drawFlag() { + var _a; + const { beam, glyphProps, render_options: { draw_stem }, } = this; + const context = this.checkContext(); + const shouldDrawFlag = beam == undefined && draw_stem; + if (glyphProps.flag && shouldDrawFlag) { + const flag_x = this.getStemX(); + const flag_y = this.getStemDirection() === Stem.DOWN + ? + this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0) + : + this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0); + (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y); + } + } + drawModifiers() { + this.modifiers.forEach((modifier) => { + if (isDot(modifier) && !this.render_options.draw_dots) { + return; + } + modifier.setContext(this.getContext()); + modifier.drawWithStyle(); + }); + } + drawStemThrough() { + const stemX = this.getStemX(); + const stemY = this.getStemY(); + const ctx = this.checkContext(); + const drawStem = this.render_options.draw_stem; + const stemThrough = this.render_options.draw_stem_through_stave; + if (drawStem && stemThrough) { + const numLines = this.checkStave().getNumLines(); + const stringsUsed = this.positions.map((position) => Number(position.str)); + const unusedStrings = getUnusedStringGroups(numLines, stringsUsed); + const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection()); + ctx.save(); + ctx.setLineWidth(Stem.WIDTH); + stemLines.forEach((bounds) => { + if (bounds.length === 0) + return; + ctx.beginPath(); + ctx.moveTo(stemX, bounds[0]); + ctx.lineTo(stemX, bounds[bounds.length - 1]); + ctx.stroke(); + ctx.closePath(); + }); + ctx.restore(); + } + } + drawPositions() { + var _a; + const ctx = this.checkContext(); + const x = this.getAbsoluteX(); + const ys = this.ys; + for (let i = 0; i < this.positions.length; ++i) { + const y = ys[i] + this.render_options.y_shift; + const glyphProps = this.glyphPropsArr[i]; + const note_glyph_width = this.glyphProps.getWidth(); + const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2; + ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6); + if (glyphProps.code) { + Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code); + } + else { + ctx.save(); + ctx.setFont(this.render_options.font); + const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : ''; + ctx.fillText(text, tab_x, y + 5 * this.render_options.scale); + ctx.restore(); + } + } + } + draw() { + const ctx = this.checkContext(); + if (this.ys.length === 0) { + throw new RuntimeError('NoYValues', "Can't draw note without Y values."); + } + this.setRendered(); + const render_stem = this.beam == undefined && this.render_options.draw_stem; + this.applyStyle(); + ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true }); + this.drawPositions(); + this.drawStemThrough(); + if (this.stem && render_stem) { + const stem_x = this.getStemX(); + this.stem.setNoteHeadXBounds(stem_x, stem_x); + this.stem.setContext(ctx).draw(); + } + this.drawFlag(); + this.drawModifiers(); + ctx.closeGroup(); + this.restoreStyle(); + } +} diff --git a/build/esm/src/tabslide.js b/build/esm/src/tabslide.js new file mode 100644 index 0000000000..1ad63f0633 --- /dev/null +++ b/build/esm/src/tabslide.js @@ -0,0 +1,77 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { TabTie } from './tabtie.js'; +import { RuntimeError } from './util.js'; +class TabSlide extends TabTie { + static get CATEGORY() { + return "TabSlide"; + } + static get SLIDE_UP() { + return 1; + } + static get SLIDE_DOWN() { + return -1; + } + static createSlideUp(notes) { + return new TabSlide(notes, TabSlide.SLIDE_UP); + } + static createSlideDown(notes) { + return new TabSlide(notes, TabSlide.SLIDE_DOWN); + } + constructor(notes, direction) { + super(notes, 'sl.'); + if (!direction) { + let first_fret = notes.first_note.getPositions()[0].fret; + if (typeof first_fret === 'string') { + first_fret = parseInt(first_fret, 10); + } + let last_fret = notes.last_note.getPositions()[0].fret; + if (typeof last_fret === 'string') { + last_fret = parseInt(last_fret, 10); + } + if (isNaN(first_fret) || isNaN(last_fret)) { + direction = TabSlide.SLIDE_UP; + } + else { + direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP; + } + } + this.direction = direction; + this.render_options.cp1 = 11; + this.render_options.cp2 = 14; + this.render_options.y_shift = 0.5; + this.resetFont(); + } + renderTie(params) { + if (params.first_ys.length === 0 || params.last_ys.length === 0) { + throw new RuntimeError('BadArguments', 'No Y-values to render'); + } + const ctx = this.checkContext(); + const first_x_px = params.first_x_px; + const first_ys = params.first_ys; + const last_x_px = params.last_x_px; + const direction = params.direction; + if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) { + throw new RuntimeError('BadSlide', 'Invalid slide direction'); + } + const first_indices = this.notes.first_indices; + for (let i = 0; i < first_indices.length; ++i) { + const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift; + if (isNaN(slide_y)) { + throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.'); + } + ctx.beginPath(); + ctx.moveTo(first_x_px, slide_y + 3 * direction); + ctx.lineTo(last_x_px, slide_y - 3 * direction); + ctx.closePath(); + ctx.stroke(); + } + this.setRendered(); + } +} +TabSlide.TEXT_FONT = { + family: Font.SERIF, + size: 10, + weight: FontWeight.BOLD, + style: FontStyle.ITALIC, +}; +export { TabSlide }; diff --git a/build/esm/src/tabstave.js b/build/esm/src/tabstave.js new file mode 100644 index 0000000000..e71d724a53 --- /dev/null +++ b/build/esm/src/tabstave.js @@ -0,0 +1,17 @@ +import { Stave } from './stave.js'; +export class TabStave extends Stave { + static get CATEGORY() { + return "TabStave"; + } + constructor(x, y, width, options) { + const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options); + super(x, y, width, tab_options); + } + getYForGlyphs() { + return this.getYForLine(2.5); + } + addTabGlyph() { + this.addClef('tab'); + return this; + } +} diff --git a/build/esm/src/tabtie.js b/build/esm/src/tabtie.js new file mode 100644 index 0000000000..18a303cc73 --- /dev/null +++ b/build/esm/src/tabtie.js @@ -0,0 +1,19 @@ +import { StaveTie } from './stavetie.js'; +export class TabTie extends StaveTie { + static get CATEGORY() { + return "TabTie"; + } + static createHammeron(notes) { + return new TabTie(notes, 'H'); + } + static createPulloff(notes) { + return new TabTie(notes, 'P'); + } + constructor(notes, text) { + super(notes, text); + this.render_options.cp1 = 9; + this.render_options.cp2 = 11; + this.render_options.y_shift = 3; + this.direction = -1; + } +} diff --git a/build/esm/src/textbracket.js b/build/esm/src/textbracket.js new file mode 100644 index 0000000000..7170088e11 --- /dev/null +++ b/build/esm/src/textbracket.js @@ -0,0 +1,145 @@ +import { Element } from './element.js'; +import { Font, FontStyle, FontWeight } from './font.js'; +import { Renderer } from './renderer.js'; +import { Tables } from './tables.js'; +import { log, RuntimeError } from './util.js'; +function L(...args) { + if (TextBracket.DEBUG) + log('Vex.Flow.TextBracket', args); +} +export var TextBracketPosition; +(function (TextBracketPosition) { + TextBracketPosition[TextBracketPosition["TOP"] = 1] = "TOP"; + TextBracketPosition[TextBracketPosition["BOTTOM"] = -1] = "BOTTOM"; +})(TextBracketPosition || (TextBracketPosition = {})); +class TextBracket extends Element { + static get CATEGORY() { + return "TextBracket"; + } + static get Position() { + return TextBracketPosition; + } + static get PositionString() { + return { + top: TextBracketPosition.TOP, + bottom: TextBracketPosition.BOTTOM, + }; + } + static get Positions() { + L('Positions is deprecated, use TextBracketPosition instead.'); + return TextBracketPosition; + } + static get PositionsString() { + L('PositionsString is deprecated, use PositionString instead.'); + return TextBracket.PositionString; + } + constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) { + super(); + this.start = start; + this.stop = stop; + this.text = text; + this.superscript = superscript; + this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position; + this.line = 1; + this.resetFont(); + this.render_options = { + dashed: true, + dash: [5], + color: 'black', + line_width: 1, + show_bracket: true, + bracket_height: 8, + underline_superscript: true, + }; + } + applyStyle(ctx) { + ctx.setFont(this.font); + const options = this.render_options; + ctx.setStrokeStyle(options.color); + ctx.setFillStyle(options.color); + ctx.setLineWidth(options.line_width); + return this; + } + setDashed(dashed, dash) { + this.render_options.dashed = dashed; + if (dash) + this.render_options.dash = dash; + return this; + } + setLine(line) { + this.line = line; + return this; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + let y = 0; + switch (this.position) { + case TextBracketPosition.TOP: + y = this.start.checkStave().getYForTopText(this.line); + break; + case TextBracketPosition.BOTTOM: + y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK); + break; + default: + throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`); + } + const start = { x: this.start.getAbsoluteX(), y }; + const stop = { x: this.stop.getAbsoluteX(), y }; + L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y); + const bracket_height = this.render_options.bracket_height * this.position; + ctx.save(); + this.applyStyle(ctx); + ctx.fillText(this.text, start.x, start.y); + const main_measure = ctx.measureText(this.text); + const main_width = main_measure.width; + const main_height = main_measure.height; + const super_y = start.y - main_height / 2.5; + const { family, size, weight, style } = this.textFont; + const smallerFontSize = Font.scaleSize(size, 0.714286); + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.superscript, start.x + main_width + 1, super_y); + const super_measure = ctx.measureText(this.superscript); + const super_width = super_measure.width; + const super_height = super_measure.height; + let start_x = start.x; + let line_y = super_y; + const end_x = stop.x + this.stop.getGlyphProps().getWidth(); + if (this.position === TextBracketPosition.TOP) { + start_x += main_width + super_width + 5; + line_y -= super_height / 2.7; + } + else if (this.position === TextBracketPosition.BOTTOM) { + line_y += super_height / 2.7; + start_x += main_width + 2; + if (!this.render_options.underline_superscript) { + start_x += super_width; + } + } + if (this.render_options.dashed) { + Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash); + if (this.render_options.show_bracket) { + Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash); + } + } + else { + ctx.beginPath(); + ctx.moveTo(start_x, line_y); + ctx.lineTo(end_x, line_y); + if (this.render_options.show_bracket) { + ctx.lineTo(end_x, line_y + bracket_height); + } + ctx.stroke(); + ctx.closePath(); + } + ctx.restore(); + } +} +TextBracket.DEBUG = false; +TextBracket.TEXT_FONT = { + family: Font.SERIF, + size: 15, + weight: FontWeight.NORMAL, + style: FontStyle.ITALIC, +}; +export { TextBracket }; diff --git a/build/esm/src/textdynamics.js b/build/esm/src/textdynamics.js new file mode 100644 index 0000000000..17be13c50f --- /dev/null +++ b/build/esm/src/textdynamics.js @@ -0,0 +1,83 @@ +import { Glyph } from './glyph.js'; +import { Note } from './note.js'; +import { Tables } from './tables.js'; +import { defined, log, RuntimeError } from './util.js'; +function L(...args) { + if (TextDynamics.DEBUG) + log('Vex.Flow.TextDynamics', args); +} +class TextDynamics extends Note { + static get CATEGORY() { + return "TextDynamics"; + } + static get GLYPHS() { + return { + f: { + code: 'dynamicForte', + width: 12, + }, + p: { + code: 'dynamicPiano', + width: 14, + }, + m: { + code: 'dynamicMezzo', + width: 17, + }, + s: { + code: 'dynamicSforzando', + width: 10, + }, + z: { + code: 'dynamicZ', + width: 12, + }, + r: { + code: 'dynamicRinforzando', + width: 12, + }, + }; + } + constructor(noteStruct) { + super(noteStruct); + this.sequence = (noteStruct.text || '').toLowerCase(); + this.line = noteStruct.line || 0; + this.glyphs = []; + this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: Tables.NOTATION_FONT_SCALE }); + L('New Dynamics Text: ', this.sequence); + } + setLine(line) { + this.line = line; + return this; + } + preFormat() { + let total_width = 0; + this.glyphs = []; + this.sequence.split('').forEach((letter) => { + const glyph_data = TextDynamics.GLYPHS[letter]; + if (!glyph_data) + throw new RuntimeError('Invalid dynamics character: ' + letter); + const size = defined(this.render_options.glyph_font_size); + const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' }); + this.glyphs.push(glyph); + total_width += glyph_data.width; + }); + this.setWidth(total_width); + this.preFormatted = true; + return this; + } + draw() { + this.setRendered(); + const x = this.getAbsoluteX(); + const y = this.checkStave().getYForLine(this.line + -3); + L('Rendering Dynamics: ', this.sequence); + let letter_x = x; + this.glyphs.forEach((glyph, index) => { + const current_letter = this.sequence[index]; + glyph.render(this.checkContext(), letter_x, y); + letter_x += TextDynamics.GLYPHS[current_letter].width; + }); + } +} +TextDynamics.DEBUG = false; +export { TextDynamics }; diff --git a/build/esm/src/textformatter.js b/build/esm/src/textformatter.js new file mode 100644 index 0000000000..2e2939e712 --- /dev/null +++ b/build/esm/src/textformatter.js @@ -0,0 +1,219 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { log } from './util.js'; +function L(...args) { + if (TextFormatter.DEBUG) + log('Vex.Flow.TextFormatter', args); +} +const textWidthCache = {}; +const textHeightCache = {}; +const registry = {}; +class TextFormatter { + static getFontFamilies() { + const registeredFonts = []; + for (const fontFamily in registry) { + const formatterInfo = registry[fontFamily]; + registeredFonts.push(Object.assign({}, formatterInfo)); + } + return registeredFonts; + } + static create(requestedFont = {}) { + L('create: ', requestedFont); + if (!requestedFont.family) { + requestedFont.family = Font.SANS_SERIF; + } + const candidates = []; + const requestedFamilies = requestedFont.family.split(/\s*,\s*/); + for (const requestedFamily of requestedFamilies) { + for (const fontFamily in registry) { + if (fontFamily.startsWith(requestedFamily)) { + candidates.push(registry[fontFamily]); + } + } + if (candidates.length > 0) { + break; + } + } + let formatter; + if (candidates.length === 0) { + formatter = new TextFormatter(Object.values(registry)[0]); + } + else if (candidates.length === 1) { + formatter = new TextFormatter(candidates[0]); + } + else { + const bold = Font.isBold(requestedFont.weight); + const italic = Font.isItalic(requestedFont.style); + const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic); + if (perfectMatch) { + formatter = new TextFormatter(perfectMatch); + } + else { + const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold); + if (partialMatch) { + formatter = new TextFormatter(partialMatch); + } + else { + formatter = new TextFormatter(candidates[0]); + } + } + } + const fontSize = requestedFont.size; + if (typeof fontSize !== 'undefined') { + const fontSizeInPt = Font.convertSizeToPointValue(fontSize); + formatter.setFontSize(fontSizeInPt); + } + return formatter; + } + static getInfo(fontFamily) { + return registry[fontFamily]; + } + static registerInfo(info, overwrite = false) { + L('registerInfo: ', info, overwrite); + const fontFamily = info.family; + const currFontInfo = registry[fontFamily]; + if (currFontInfo === undefined || overwrite) { + registry[fontFamily] = info; + } + } + constructor(formatterInfo) { + this.family = ''; + this.size = 14; + this.resolution = 1000; + this.glyphs = {}; + this.serifs = false; + this.monospaced = false; + this.italic = false; + this.bold = false; + this.superscriptOffset = 0; + this.subscriptOffset = 0; + this.maxSizeGlyph = '@'; + this.cacheKey = ''; + this.updateParams(formatterInfo); + } + get localHeightCache() { + var _a; + if (textHeightCache[this.cacheKey] === undefined) { + textHeightCache[this.cacheKey] = {}; + } + return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {}; + } + updateParams(params) { + if (params.family) + this.family = params.family; + if (params.resolution) + this.resolution = params.resolution; + if (params.glyphs) + this.glyphs = params.glyphs; + if (params.serifs) + this.serifs = params.serifs; + if (params.monospaced) + this.monospaced = params.monospaced; + if (params.italic) + this.italic = params.italic; + if (params.bold) + this.bold = params.bold; + if (params.maxSizeGlyph) + this.maxSizeGlyph = params.maxSizeGlyph; + if (params.superscriptOffset) + this.superscriptOffset = params.superscriptOffset; + if (params.subscriptOffset) + this.subscriptOffset = params.subscriptOffset; + this.updateCacheKey(); + } + updateCacheKey() { + const family = this.family.replace(/\s+/g, '_'); + const size = this.size; + const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL; + const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL; + this.cacheKey = `${family}%${size}%${weight}%${style}`; + } + getGlyphMetrics(character) { + if (this.glyphs[character]) { + return this.glyphs[character]; + } + else { + return this.glyphs[this.maxSizeGlyph]; + } + } + get maxHeight() { + const metrics = this.getGlyphMetrics(this.maxSizeGlyph); + return (metrics.ha / this.resolution) * this.fontSizeInPixels; + } + getWidthForCharacterInEm(c) { + var _a; + const metrics = this.getGlyphMetrics(c); + if (!metrics) { + return 0.65; + } + else { + const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0; + return advanceWidth / this.resolution; + } + } + getYForCharacterInPx(c) { + const metrics = this.getGlyphMetrics(c); + const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; + if (!metrics) { + return rv; + } + else { + if (typeof metrics.y_min === 'number') { + rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels; + } + if (typeof metrics.y_max === 'number') { + rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels; + } + rv.height = rv.yMax - rv.yMin; + return rv; + } + } + getYForStringInPx(str) { + const entry = this.localHeightCache; + const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; + const cache = entry[str]; + if (cache !== undefined) { + return cache; + } + for (let i = 0; i < str.length; ++i) { + const curY = this.getYForCharacterInPx(str[i]); + extent.yMin = Math.min(extent.yMin, curY.yMin); + extent.yMax = Math.max(extent.yMax, curY.yMax); + extent.height = extent.yMax - extent.yMin; + } + entry[str] = extent; + return extent; + } + getWidthForTextInEm(text) { + const key = this.cacheKey; + let cachedWidths = textWidthCache[key]; + if (cachedWidths === undefined) { + cachedWidths = {}; + textWidthCache[key] = cachedWidths; + } + let width = cachedWidths[text]; + if (width === undefined) { + width = 0; + for (let i = 0; i < text.length; ++i) { + width += this.getWidthForCharacterInEm(text[i]); + } + cachedWidths[text] = width; + } + return width; + } + getWidthForTextInPx(text) { + return this.getWidthForTextInEm(text) * this.fontSizeInPixels; + } + setFontSize(size) { + this.size = size; + this.updateCacheKey(); + return this; + } + get fontSizeInPixels() { + return this.size * Font.scaleToPxFrom.pt; + } + getResolution() { + return this.resolution; + } +} +TextFormatter.DEBUG = false; +export { TextFormatter }; diff --git a/build/esm/src/textnote.js b/build/esm/src/textnote.js new file mode 100644 index 0000000000..2c04697525 --- /dev/null +++ b/build/esm/src/textnote.js @@ -0,0 +1,182 @@ +import { Font, FontStyle, FontWeight } from './font.js'; +import { Glyph } from './glyph.js'; +import { Note } from './note.js'; +import { Tables } from './tables.js'; +import { RuntimeError } from './util.js'; +export var TextJustification; +(function (TextJustification) { + TextJustification[TextJustification["LEFT"] = 1] = "LEFT"; + TextJustification[TextJustification["CENTER"] = 2] = "CENTER"; + TextJustification[TextJustification["RIGHT"] = 3] = "RIGHT"; +})(TextJustification || (TextJustification = {})); +class TextNote extends Note { + static get CATEGORY() { + return "TextNote"; + } + static get GLYPHS() { + return { + segno: { + code: 'segno', + }, + tr: { + code: 'ornamentTrill', + }, + mordent: { + code: 'ornamentMordent', + }, + mordent_upper: { + code: 'ornamentShortTrill', + }, + mordent_lower: { + code: 'ornamentMordent', + }, + f: { + code: 'dynamicForte', + }, + p: { + code: 'dynamicPiano', + }, + m: { + code: 'dynamicMezzo', + }, + s: { + code: 'dynamicSforzando', + }, + z: { + code: 'dynamicZ', + }, + coda: { + code: 'coda', + }, + pedal_open: { + code: 'keyboardPedalPed', + }, + pedal_close: { + code: 'keyboardPedalUp', + }, + caesura_straight: { + code: 'caesura', + }, + caesura_curved: { + code: 'caesuraCurved', + }, + breath: { + code: 'breathMarkComma', + }, + tick: { + code: 'breathMarkTick', + }, + turn: { + code: 'ornamentTurn', + }, + turn_inverted: { + code: 'ornamentTurnSlash', + }, + }; + } + constructor(noteStruct) { + super(noteStruct); + this.text = noteStruct.text || ''; + this.superscript = noteStruct.superscript; + this.subscript = noteStruct.subscript; + this.setFont(noteStruct.font); + this.line = noteStruct.line || 0; + this.smooth = noteStruct.smooth || false; + this.ignore_ticks = noteStruct.ignore_ticks || false; + this.justification = TextJustification.LEFT; + if (noteStruct.glyph) { + const struct = TextNote.GLYPHS[noteStruct.glyph]; + if (!struct) + throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph); + this.glyph = new Glyph(struct.code, Tables.NOTATION_FONT_SCALE, { category: 'textNote' }); + this.setWidth(this.glyph.getMetrics().width); + } + else { + this.glyph = undefined; + } + } + setJustification(just) { + this.justification = just; + return this; + } + setLine(line) { + this.line = line; + return this; + } + getLine() { + return this.line; + } + getText() { + return this.text; + } + preFormat() { + if (this.preFormatted) + return; + const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`); + if (this.smooth) { + this.setWidth(0); + } + else { + if (this.glyph) { + } + else { + const ctx = this.checkContext(); + ctx.setFont(this.textFont); + this.setWidth(ctx.measureText(this.text).width); + } + } + if (this.justification === TextJustification.CENTER) { + this.leftDisplacedHeadPx = this.width / 2; + } + else if (this.justification === TextJustification.RIGHT) { + this.leftDisplacedHeadPx = this.width; + } + this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2; + this.preFormatted = true; + } + draw() { + const ctx = this.checkContext(); + const stave = this.checkStave(); + const tickContext = this.checkTickContext(`Can't draw without a TickContext.`); + this.setRendered(); + let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2; + const width = this.getWidth(); + if (this.justification === TextJustification.CENTER) { + x -= width / 2; + } + else if (this.justification === TextJustification.RIGHT) { + x -= width; + } + let y; + if (this.glyph) { + y = stave.getYForLine(this.line + -3); + this.glyph.render(ctx, x, y); + } + else { + y = stave.getYForLine(this.line + -3); + this.applyStyle(ctx); + ctx.setFont(this.textFont); + ctx.fillText(this.text, x, y); + const height = ctx.measureText(this.text).height; + const { family, size, weight, style } = this.textFont; + const smallerFontSize = Font.scaleSize(size, 0.769231); + if (this.superscript) { + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2); + } + if (this.subscript) { + ctx.setFont(family, smallerFontSize, weight, style); + ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1); + } + this.restoreStyle(ctx); + } + } +} +TextNote.TEXT_FONT = { + family: Font.SANS_SERIF, + size: 12, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, +}; +TextNote.Justification = TextJustification; +export { TextNote }; diff --git a/build/esm/src/tickable.js b/build/esm/src/tickable.js new file mode 100644 index 0000000000..48b67427b0 --- /dev/null +++ b/build/esm/src/tickable.js @@ -0,0 +1,214 @@ +import { Element } from './element.js'; +import { Fraction } from './fraction.js'; +import { Tables } from './tables.js'; +import { defined, RuntimeError } from './util.js'; +export class Tickable extends Element { + static get CATEGORY() { + return "Tickable"; + } + constructor() { + super(); + this._preFormatted = false; + this._postFormatted = false; + this.ticks = new Fraction(0, 1); + this.intrinsicTicks = 0; + this.tickMultiplier = new Fraction(1, 1); + this.width = 0; + this.x_shift = 0; + this.modifiers = []; + this.tupletStack = []; + this.align_center = false; + this.center_x_shift = 0; + this.ignore_ticks = false; + this.formatterMetrics = { + freedom: { left: 0, right: 0 }, + duration: '', + iterations: 0, + space: { + used: 0, + mean: 0, + deviation: 0, + }, + }; + } + reset() { + return this; + } + getTicks() { + return this.ticks; + } + shouldIgnoreTicks() { + return this.ignore_ticks; + } + setIgnoreTicks(flag) { + this.ignore_ticks = flag; + return this; + } + setWidth(width) { + this.width = width; + } + getWidth() { + if (!this._preFormatted) { + throw new RuntimeError('UnformattedNote', "Can't call GetWidth on an unformatted note."); + } + return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0); + } + setXShift(x) { + this.x_shift = x; + return this; + } + getXShift() { + return this.x_shift; + } + getX() { + const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`); + return tickContext.getX() + this.x_shift; + } + getFormatterMetrics() { + return this.formatterMetrics; + } + getCenterXShift() { + if (this.isCenterAligned()) { + return this.center_x_shift; + } + return 0; + } + setCenterXShift(centerXShift) { + this.center_x_shift = centerXShift; + return this; + } + isCenterAligned() { + return this.align_center; + } + setCenterAlignment(align_center) { + this.align_center = align_center; + return this; + } + getVoice() { + return defined(this.voice, 'NoVoice', 'Tickable has no voice.'); + } + setVoice(voice) { + this.voice = voice; + } + getTuplet() { + return this.tuplet; + } + getTupletStack() { + return this.tupletStack; + } + resetTuplet(tuplet) { + let noteCount; + let notesOccupied; + if (tuplet) { + const i = this.tupletStack.indexOf(tuplet); + if (i !== -1) { + this.tupletStack.splice(i, 1); + noteCount = tuplet.getNoteCount(); + notesOccupied = tuplet.getNotesOccupied(); + this.applyTickMultiplier(noteCount, notesOccupied); + } + return this; + } + while (this.tupletStack.length) { + tuplet = this.tupletStack.pop(); + noteCount = tuplet.getNoteCount(); + notesOccupied = tuplet.getNotesOccupied(); + this.applyTickMultiplier(noteCount, notesOccupied); + } + return this; + } + setTuplet(tuplet) { + if (tuplet) { + this.tupletStack.push(tuplet); + const noteCount = tuplet.getNoteCount(); + const notesOccupied = tuplet.getNotesOccupied(); + this.applyTickMultiplier(notesOccupied, noteCount); + } + this.tuplet = tuplet; + return this; + } + addToModifierContext(mc) { + this.modifierContext = mc; + for (let i = 0; i < this.modifiers.length; ++i) { + this.modifierContext.addMember(this.modifiers[i]); + } + this.modifierContext.addMember(this); + this._preFormatted = false; + return this; + } + addModifier(modifier, index = 0) { + this.modifiers.push(modifier); + this._preFormatted = false; + return this; + } + getModifiers() { + return this.modifiers; + } + setTickContext(tc) { + this.tickContext = tc; + this._preFormatted = false; + } + checkTickContext(message = 'Tickable has no tick context.') { + return defined(this.tickContext, 'NoTickContext', message); + } + preFormat() { + if (this._preFormatted) + return; + this.width = 0; + if (this.modifierContext) { + this.modifierContext.preFormat(); + this.width += this.modifierContext.getWidth(); + } + } + set preFormatted(value) { + this._preFormatted = value; + } + get preFormatted() { + return this._preFormatted; + } + postFormat() { + if (this._postFormatted) + return this; + this._postFormatted = true; + return this; + } + set postFormatted(value) { + this._postFormatted = value; + } + get postFormatted() { + return this._postFormatted; + } + getIntrinsicTicks() { + return this.intrinsicTicks; + } + setIntrinsicTicks(intrinsicTicks) { + this.intrinsicTicks = intrinsicTicks; + this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); + } + getTickMultiplier() { + return this.tickMultiplier; + } + applyTickMultiplier(numerator, denominator) { + this.tickMultiplier.multiply(numerator, denominator); + this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); + } + setDuration(duration) { + const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator); + this.ticks = this.tickMultiplier.clone().multiply(ticks); + this.intrinsicTicks = this.ticks.value(); + } + getAbsoluteX() { + const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); + return tickContext.getX(); + } + setModifierContext(mc) { + this.modifierContext = mc; + return this; + } + getModifierContext() { + return this.modifierContext; + } + checkModifierContext() { + return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.'); + } +} diff --git a/build/esm/src/tickcontext.js b/build/esm/src/tickcontext.js new file mode 100644 index 0000000000..4e281e369e --- /dev/null +++ b/build/esm/src/tickcontext.js @@ -0,0 +1,170 @@ +import { Fraction } from './fraction.js'; +import { RuntimeError } from './util.js'; +export class TickContext { + static getNextContext(tContext) { + const contexts = tContext.tContexts; + const index = contexts.indexOf(tContext); + if (index + 1 < contexts.length) + return contexts[index + 1]; + } + constructor(options) { + this.preFormatted = false; + this.postFormatted = false; + this.tickID = options && options.tickID ? options.tickID : 0; + this.currentTick = new Fraction(0, 1); + this.maxTicks = new Fraction(0, 1); + this.maxTickable = undefined; + this.minTicks = undefined; + this.minTickable = undefined; + this.padding = 1; + this.x = 0; + this.xBase = 0; + this.xOffset = 0; + this.tickables = []; + this.tickablesByVoice = {}; + this.notePx = 0; + this.glyphPx = 0; + this.leftDisplacedHeadPx = 0; + this.rightDisplacedHeadPx = 0; + this.modLeftPx = 0; + this.modRightPx = 0; + this.totalLeftPx = 0; + this.totalRightPx = 0; + this.tContexts = []; + this.width = 0; + this.formatterMetrics = { + freedom: { left: 0, right: 0 }, + }; + } + getTickID() { + return this.tickID; + } + getX() { + return this.x; + } + setX(x) { + this.x = x; + this.xBase = x; + this.xOffset = 0; + return this; + } + getXBase() { + return this.xBase; + } + setXBase(xBase) { + this.xBase = xBase; + this.x = xBase + this.xOffset; + } + getXOffset() { + return this.xOffset; + } + setXOffset(xOffset) { + this.xOffset = xOffset; + this.x = this.xBase + xOffset; + } + getWidth() { + return this.width + this.padding * 2; + } + setPadding(padding) { + this.padding = padding; + return this; + } + getMaxTicks() { + return this.maxTicks; + } + getMinTicks() { + return this.minTicks; + } + getMaxTickable() { + return this.maxTickable; + } + getMinTickable() { + return this.minTickable; + } + getTickables() { + return this.tickables; + } + getTickableForVoice(voiceIndex) { + return this.tickablesByVoice[voiceIndex]; + } + getTickablesByVoice() { + return this.tickablesByVoice; + } + getCenterAlignedTickables() { + return this.tickables.filter((tickable) => tickable.isCenterAligned()); + } + getMetrics() { + const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this; + return { + width, + glyphPx, + notePx, + leftDisplacedHeadPx, + rightDisplacedHeadPx, + modLeftPx, + modRightPx, + totalLeftPx, + totalRightPx, + }; + } + getCurrentTick() { + return this.currentTick; + } + setCurrentTick(tick) { + this.currentTick = tick; + this.preFormatted = false; + } + addTickable(tickable, voiceIndex) { + if (!tickable) { + throw new RuntimeError('BadArgument', 'Invalid tickable added.'); + } + if (!tickable.shouldIgnoreTicks()) { + const ticks = tickable.getTicks(); + if (ticks.greaterThan(this.maxTicks)) { + this.maxTicks = ticks.clone(); + this.maxTickable = tickable; + } + if (this.minTicks == null) { + this.minTicks = ticks.clone(); + this.minTickable = tickable; + } + else if (ticks.lessThan(this.minTicks)) { + this.minTicks = ticks.clone(); + this.minTickable = tickable; + } + } + tickable.setTickContext(this); + this.tickables.push(tickable); + this.tickablesByVoice[voiceIndex || 0] = tickable; + this.preFormatted = false; + return this; + } + preFormat() { + if (this.preFormatted) + return this; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + tickable.preFormat(); + const metrics = tickable.getMetrics(); + this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx); + this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx); + this.notePx = Math.max(this.notePx, metrics.notePx); + this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0); + this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx); + this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx); + this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx); + this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx); + this.width = this.notePx + this.totalLeftPx + this.totalRightPx; + } + return this; + } + postFormat() { + if (this.postFormatted) + return this; + this.postFormatted = true; + return this; + } + getFormatterMetrics() { + return this.formatterMetrics; + } +} diff --git a/build/esm/src/timesigglyph.js b/build/esm/src/timesigglyph.js new file mode 100644 index 0000000000..0246ad8210 --- /dev/null +++ b/build/esm/src/timesigglyph.js @@ -0,0 +1,89 @@ +import { Glyph } from './glyph.js'; +import { defined } from './util.js'; +export class TimeSignatureGlyph extends Glyph { + constructor(timeSignature, topDigits, botDigits, code, point, options) { + var _a; + super(code, point, options); + this.timeSignature = timeSignature; + this.topGlyphs = []; + this.botGlyphs = []; + let topWidth = 0; + let height = 0; + for (let i = 0; i < topDigits.length; ++i) { + let timeSigType = topDigits[i]; + switch (topDigits[i]) { + case '-': + timeSigType = 'Minus'; + break; + case '+': + timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus'; + break; + case '(': + timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft'; + break; + case ')': + timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight'; + break; + } + const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point); + this.topGlyphs.push(topGlyph); + topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0; + height = Math.max(height, topGlyph.getMetrics().height); + } + let botWidth = 0; + for (let i = 0; i < botDigits.length; ++i) { + let timeSigType = botDigits[i]; + switch (botDigits[i]) { + case '+': + timeSigType = 'PlusSmall'; + break; + case '(': + timeSigType = 'ParensLeftSmall'; + break; + case ')': + timeSigType = 'ParensRightSmall'; + break; + } + const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point); + this.botGlyphs.push(botGlyph); + botWidth += defined(botGlyph.getMetrics().width); + height = Math.max(height, botGlyph.getMetrics().height); + } + this.lineShift = height > 22 ? 1 : 0; + this.width = Math.max(topWidth, botWidth); + this.xMin = this.getMetrics().x_min; + this.topStartX = (this.width - topWidth) / 2.0; + this.botStartX = (this.width - botWidth) / 2.0; + this.reset(); + } + getMetrics() { + return { + x_min: this.xMin, + x_max: this.xMin + this.width, + width: this.width, + }; + } + renderToStave(x) { + const stave = this.checkStave(); + const ctx = this.checkContext(); + let start_x = x + this.topStartX; + let y = 0; + if (this.botGlyphs.length > 0) + y = stave.getYForLine(this.timeSignature.topLine - this.lineShift); + else + y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2; + for (let i = 0; i < this.topGlyphs.length; ++i) { + const glyph = this.topGlyphs[i]; + Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y); + start_x += defined(glyph.getMetrics().width); + } + start_x = x + this.botStartX; + y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift); + for (let i = 0; i < this.botGlyphs.length; ++i) { + const glyph = this.botGlyphs[i]; + this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine()); + Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y); + start_x += defined(glyph.getMetrics().width); + } + } +} diff --git a/build/esm/src/timesignature.js b/build/esm/src/timesignature.js new file mode 100644 index 0000000000..c092bb80b1 --- /dev/null +++ b/build/esm/src/timesignature.js @@ -0,0 +1,119 @@ +import { Glyph } from './glyph.js'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; +import { Tables } from './tables.js'; +import { TimeSignatureGlyph } from './timesigglyph.js'; +import { defined, RuntimeError } from './util.js'; +const assertIsValidTimeSig = (timeSpec) => { + const numbers = timeSpec.split('/'); + if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') { + throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form "/"`); + } + numbers.forEach((number) => { + if (/^[0-9+\-()]+$/.test(number) == false) { + throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`); + } + }); +}; +export class TimeSignature extends StaveModifier { + static get CATEGORY() { + return "TimeSignature"; + } + static get glyphs() { + return { + C: { + code: 'timeSigCommon', + line: 2, + }, + 'C|': { + code: 'timeSigCutCommon', + line: 2, + }, + }; + } + constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) { + super(); + this.timeSpec = '4/4'; + this.line = 0; + this.is_numeric = true; + this.validate_args = validate_args; + const padding = customPadding; + const musicFont = Tables.currentMusicFont(); + this.point = musicFont.lookupMetric('digits.point') || Tables.NOTATION_FONT_SCALE; + const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); + this.topLine = 2 + fontLineShift; + this.bottomLine = 4 + fontLineShift; + this.setPosition(StaveModifierPosition.BEGIN); + this.setTimeSig(timeSpec); + this.setPadding(padding); + } + parseTimeSpec(timeSpec) { + var _a, _b; + if (timeSpec === 'C' || timeSpec === 'C|') { + const { line, code } = TimeSignature.glyphs[timeSpec]; + return { + line, + num: false, + glyph: new Glyph(code, Tables.NOTATION_FONT_SCALE), + }; + } + if (this.validate_args) { + assertIsValidTimeSig(timeSpec); + } + const parts = timeSpec.split('/'); + return { + line: 0, + num: true, + glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''), + }; + } + makeTimeSignatureGlyph(topDigits, botDigits) { + return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point); + } + getInfo() { + const { line, is_numeric, glyph } = this; + return { line, num: is_numeric, glyph }; + } + setTimeSig(timeSpec) { + this.timeSpec = timeSpec; + const info = this.parseTimeSpec(timeSpec); + this.setGlyph(info.glyph); + this.is_numeric = info.num; + this.line = info.line; + return this; + } + getTimeSpec() { + return this.timeSpec; + } + getLine() { + return this.line; + } + setLine(line) { + this.line = line; + } + getGlyph() { + return this.glyph; + } + setGlyph(glyph) { + this.glyph = glyph; + this.setWidth(defined(this.glyph.getMetrics().width)); + } + getIsNumeric() { + return this.is_numeric; + } + setIsNumeric(isNumeric) { + this.is_numeric = isNumeric; + } + draw() { + const stave = this.checkStave(); + const ctx = stave.checkContext(); + this.setRendered(); + this.applyStyle(ctx); + ctx.openGroup('timesignature', this.getAttribute('id')); + this.glyph.setStave(stave); + this.glyph.setContext(ctx); + this.placeGlyphOnLine(this.glyph, stave, this.line); + this.glyph.renderToStave(this.x); + ctx.closeGroup(); + this.restoreStyle(ctx); + } +} diff --git a/build/esm/src/timesignote.js b/build/esm/src/timesignote.js new file mode 100644 index 0000000000..bf55236ec5 --- /dev/null +++ b/build/esm/src/timesignote.js @@ -0,0 +1,32 @@ +import { Note } from './note.js'; +import { TimeSignature } from './timesignature.js'; +export class TimeSigNote extends Note { + static get CATEGORY() { + return "TimeSigNote"; + } + constructor(timeSpec, customPadding) { + super({ duration: 'b' }); + this.timeSig = new TimeSignature(timeSpec, customPadding); + this.setWidth(this.timeSig.getGlyph().getMetrics().width); + this.ignore_ticks = true; + } + addToModifierContext(mc) { + return this; + } + preFormat() { + this.preFormatted = true; + return this; + } + draw() { + const stave = this.checkStave(); + const ctx = this.checkContext(); + this.setRendered(); + const tsGlyph = this.timeSig.getGlyph(); + if (!tsGlyph.getContext()) { + tsGlyph.setContext(ctx); + } + tsGlyph.setStave(stave); + tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs()); + tsGlyph.renderToStave(this.getAbsoluteX()); + } +} diff --git a/build/esm/src/tremolo.js b/build/esm/src/tremolo.js new file mode 100644 index 0000000000..e23897a58b --- /dev/null +++ b/build/esm/src/tremolo.js @@ -0,0 +1,49 @@ +import { Glyph } from './glyph.js'; +import { GraceNote } from './gracenote.js'; +import { Modifier } from './modifier.js'; +import { Note } from './note.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { isGraceNote } from './typeguard.js'; +export class Tremolo extends Modifier { + static get CATEGORY() { + return "Tremolo"; + } + constructor(num) { + super(); + this.num = num; + this.position = Modifier.Position.CENTER; + this.code = 'tremolo1'; + this.y_spacing_scale = 1; + this.extra_stroke_scale = 1; + } + draw() { + var _a; + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const stemDirection = note.getStemDirection(); + const start = note.getModifierStartXY(this.position, this.index); + let x = start.x; + const gn = isGraceNote(note); + const scale = gn ? GraceNote.SCALE : 1; + const category = `tremolo.${gn ? 'grace' : 'default'}`; + const musicFont = Tables.currentMusicFont(); + let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection; + y_spacing *= this.y_spacing_scale; + const height = this.num * y_spacing; + let y = note.getStemExtents().baseY - height; + if (stemDirection < 0) { + y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale; + } + else { + y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale; + } + const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : Note.getPoint(gn ? 'grace' : 'default'); + x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`); + for (let i = 0; i < this.num; ++i) { + Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale }); + y += y_spacing; + } + } +} diff --git a/build/esm/src/tuning.js b/build/esm/src/tuning.js new file mode 100644 index 0000000000..616edd9292 --- /dev/null +++ b/build/esm/src/tuning.js @@ -0,0 +1,55 @@ +import { Tables } from './tables.js'; +import { RuntimeError } from './util.js'; +export class Tuning { + static get names() { + return { + standard: 'E/5,B/4,G/4,D/4,A/3,E/3', + dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3', + dropd: 'E/5,B/4,G/4,D/4,A/3,D/3', + eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3', + standardBanjo: 'D/5,B/4,G/4,D/4,G/5', + }; + } + constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') { + this.tuningValues = []; + this.setTuning(tuningString); + } + noteToInteger(noteString) { + var _a; + return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1; + } + setTuning(tuningString) { + if (Tuning.names[tuningString]) { + tuningString = Tuning.names[tuningString]; + } + this.tuningValues = []; + const keys = tuningString.split(/\s*,\s*/); + if (keys.length === 0) { + throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`); + } + for (let i = 0; i < keys.length; ++i) { + this.tuningValues[i] = this.noteToInteger(keys[i]); + } + } + getValueForString(stringNum) { + const s = Number(stringNum); + if (s < 1 || s > this.tuningValues.length) { + throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`); + } + return this.tuningValues[s - 1]; + } + getValueForFret(fretNum, stringNum) { + const stringValue = this.getValueForString(stringNum); + const f = Number(fretNum); + if (f < 0) { + throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`); + } + return stringValue + f; + } + getNoteForFret(fretNum, stringNum) { + const noteValue = this.getValueForFret(fretNum, stringNum); + const octave = Math.floor(noteValue / 12); + const value = noteValue % 12; + return `${Tables.integerToNote(value)}/${octave}`; + } +} diff --git a/build/esm/src/tuplet.js b/build/esm/src/tuplet.js new file mode 100644 index 0000000000..86890df59e --- /dev/null +++ b/build/esm/src/tuplet.js @@ -0,0 +1,243 @@ +import { Element } from './element.js'; +import { Formatter } from './formatter.js'; +import { Glyph } from './glyph.js'; +import { Stem } from './stem.js'; +import { Tables } from './tables.js'; +import { defined, RuntimeError } from './util.js'; +export class Tuplet extends Element { + static get CATEGORY() { + return "Tuplet"; + } + static get LOCATION_TOP() { + return 1; + } + static get LOCATION_BOTTOM() { + return -1; + } + static get NESTING_OFFSET() { + return 15; + } + static get metrics() { + const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet; + if (!tupletMetrics) + throw new RuntimeError('BadMetrics', `tuplet missing`); + return tupletMetrics; + } + constructor(notes, options = {}) { + super(); + this.numerator_glyphs = []; + this.denom_glyphs = []; + if (!notes || !notes.length) { + throw new RuntimeError('BadArguments', 'No notes provided for tuplet.'); + } + this.options = options; + this.notes = notes; + this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length; + if (this.options.beats_occupied) { + this.beatsOccupiedDeprecationWarning(); + } + this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2; + if (this.options.bracketed != undefined) { + this.bracketed = this.options.bracketed; + } + else { + this.bracketed = notes.some((note) => !note.hasBeam()); + } + this.ratioed = + this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1; + this.point = (Tables.NOTATION_FONT_SCALE * 3) / 5; + this.y_pos = 16; + this.x_pos = 100; + this.width = 200; + this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP); + Formatter.AlignRestsToNotes(notes, true, true); + this.resolveGlyphs(); + this.attach(); + } + attach() { + for (let i = 0; i < this.notes.length; i++) { + const note = this.notes[i]; + note.setTuplet(this); + } + } + detach() { + for (let i = 0; i < this.notes.length; i++) { + const note = this.notes[i]; + note.resetTuplet(this); + } + } + setBracketed(bracketed) { + this.bracketed = !!bracketed; + return this; + } + setRatioed(ratioed) { + this.ratioed = !!ratioed; + return this; + } + setTupletLocation(location) { + if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) { + console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`); + location = Tuplet.LOCATION_TOP; + } + this.location = location; + return this; + } + getNotes() { + return this.notes; + } + getNoteCount() { + return this.num_notes; + } + beatsOccupiedDeprecationWarning() { + console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.'); + } + getBeatsOccupied() { + this.beatsOccupiedDeprecationWarning(); + return this.getNotesOccupied(); + } + setBeatsOccupied(beats) { + this.beatsOccupiedDeprecationWarning(); + return this.setNotesOccupied(beats); + } + getNotesOccupied() { + return this.notes_occupied; + } + setNotesOccupied(notes) { + this.detach(); + this.notes_occupied = notes; + this.resolveGlyphs(); + this.attach(); + } + resolveGlyphs() { + this.numerator_glyphs = []; + let n = this.num_notes; + while (n >= 1) { + this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point)); + n = parseInt((n / 10).toString(), 10); + } + this.denom_glyphs = []; + n = this.notes_occupied; + while (n >= 1) { + this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point)); + n = parseInt((n / 10).toString(), 10); + } + } + getNestedTupletCount() { + const location = this.location; + const first_note = this.notes[0]; + let maxTupletCount = countTuplets(first_note, location); + let minTupletCount = countTuplets(first_note, location); + function countTuplets(note, location) { + return note.getTupletStack().filter((tuplet) => tuplet.location === location).length; + } + this.notes.forEach((note) => { + const tupletCount = countTuplets(note, location); + maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount; + minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount; + }); + return maxTupletCount - minTupletCount; + } + getYPosition() { + const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location; + const y_offset = this.options.y_offset || 0; + const first_note = this.notes[0]; + let y_pos; + if (this.location === Tuplet.LOCATION_TOP) { + y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset; + for (let i = 0; i < this.notes.length; ++i) { + const note = this.notes[i]; + let modLines = 0; + const mc = note.getModifierContext(); + if (mc) { + modLines = Math.max(modLines, mc.getState().top_text_line); + } + const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset; + if (note.hasStem() || note.isRest()) { + const top_y = note.getStemDirection() === Stem.UP + ? note.getStemExtents().topY - Tuplet.metrics.stemOffset + : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset; + y_pos = Math.min(top_y, y_pos); + if (modLines > 0) { + y_pos = Math.min(modY, y_pos); + } + } + } + } + else { + let lineCheck = Tuplet.metrics.bottomLine; + this.notes.forEach((nn) => { + const mc = nn.getModifierContext(); + if (mc) { + lineCheck = Math.max(lineCheck, mc.getState().text_line + 1); + } + }); + y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset; + for (let i = 0; i < this.notes.length; ++i) { + if (this.notes[i].hasStem() || this.notes[i].isRest()) { + const bottom_y = this.notes[i].getStemDirection() === Stem.UP + ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset + : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset; + if (bottom_y > y_pos) { + y_pos = bottom_y; + } + } + } + } + return y_pos + nested_tuplet_y_offset + y_offset; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const first_note = this.notes[0]; + const last_note = this.notes[this.notes.length - 1]; + if (!this.bracketed) { + this.x_pos = first_note.getStemX(); + this.width = last_note.getStemX() - this.x_pos; + } + else { + this.x_pos = first_note.getTieLeftX() - 5; + this.width = last_note.getTieRightX() - this.x_pos + 5; + } + this.y_pos = this.getYPosition(); + const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width); + let width = this.numerator_glyphs.reduce(addGlyphWidth, 0); + if (this.ratioed) { + width = this.denom_glyphs.reduce(addGlyphWidth, width); + width += this.point * 0.32; + } + const notation_center_x = this.x_pos + this.width / 2; + const notation_start_x = notation_center_x - width / 2; + if (this.bracketed) { + const line_width = this.width / 2 - width / 2 - 5; + if (line_width > 0) { + ctx.fillRect(this.x_pos, this.y_pos, line_width, 1); + ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1); + ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); + ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); + } + } + const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0); + let x_offset = 0; + this.numerator_glyphs.forEach((glyph) => { + glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); + x_offset += defined(glyph.getMetrics().width); + }); + if (this.ratioed) { + const colon_x = notation_start_x + x_offset + this.point * 0.16; + const colon_radius = this.point * 0.06; + ctx.beginPath(); + ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + x_offset += this.point * 0.32; + this.denom_glyphs.forEach((glyph) => { + glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); + x_offset += defined(glyph.getMetrics().width); + }); + } + } +} diff --git a/build/esm/src/typeguard.js b/build/esm/src/typeguard.js new file mode 100644 index 0000000000..bc5cfbd703 --- /dev/null +++ b/build/esm/src/typeguard.js @@ -0,0 +1,30 @@ +export function isCategory(obj, category, checkAncestors = true) { + if (typeof obj !== 'object' || obj === null) { + return false; + } + let constructorFcn = obj.constructor; + if (checkAncestors) { + while (obj !== null) { + constructorFcn = obj.constructor; + if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) { + return true; + } + obj = Object.getPrototypeOf(obj); + } + return false; + } + else { + return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category; + } +} +export const isAccidental = (obj) => isCategory(obj, "Accidental"); +export const isAnnotation = (obj) => isCategory(obj, "Annotation"); +export const isBarline = (obj) => isCategory(obj, "Barline"); +export const isDot = (obj) => isCategory(obj, "Dot"); +export const isGraceNote = (obj) => isCategory(obj, "GraceNote"); +export const isGraceNoteGroup = (obj) => isCategory(obj, "GraceNoteGroup"); +export const isNote = (obj) => isCategory(obj, "Note"); +export const isRenderContext = (obj) => isCategory(obj, "RenderContext"); +export const isStaveNote = (obj) => isCategory(obj, "StaveNote"); +export const isStemmableNote = (obj) => isCategory(obj, "StemmableNote"); +export const isTabNote = (obj) => isCategory(obj, "TabNote"); diff --git a/build/esm/src/util.js b/build/esm/src/util.js new file mode 100644 index 0000000000..812b789577 --- /dev/null +++ b/build/esm/src/util.js @@ -0,0 +1,61 @@ +export class RuntimeError extends Error { + constructor(code, message = '') { + super('[RuntimeError] ' + code + ': ' + message); + this.code = code; + } +} +export function globalObject() { + if (typeof globalThis !== 'undefined') { + return globalThis; + } + if (typeof self !== 'undefined') { + return self; + } + if (typeof window !== 'undefined') { + return window; + } + if (typeof global !== 'undefined') { + return global; + } + return Function('return this')(); +} +export function defined(x, code = 'undefined', message = '') { + if (x === undefined) { + throw new RuntimeError(code, message); + } + return x; +} +export function log(block, ...args) { + if (!args) + return; + const line = Array.prototype.slice.call(args).join(' '); + globalObject().console.log(block + ': ' + line); +} +export function warn(...args) { + const line = args.join(' '); + const err = new Error(); + globalObject().console.log('Warning: ', line, err.stack); +} +function roundN(x, n) { + return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n; +} +export function midLine(a, b) { + let mid_line = b + (a - b) / 2; + if (mid_line % 2 > 0) { + mid_line = roundN(mid_line * 10, 5) / 10; + } + return mid_line; +} +export function prefix(text) { + return `vf-${text}`; +} +export function normalizeAngle(a) { + a = a % (2 * Math.PI); + if (a < 0) { + a += 2 * Math.PI; + } + return a; +} +export function sumArray(arr) { + return arr.reduce((a, b) => a + b, 0); +} diff --git a/build/esm/src/version.js b/build/esm/src/version.js new file mode 100644 index 0000000000..ed5d44691a --- /dev/null +++ b/build/esm/src/version.js @@ -0,0 +1,3 @@ +export const VERSION = '4.2.2'; +export const ID = '7ad933bdf12b4137ce04d3f332a838887d08a595'; +export const DATE = '2023-07-03T19:56:22.952Z'; \ No newline at end of file diff --git a/build/esm/src/vex.js b/build/esm/src/vex.js new file mode 100644 index 0000000000..d6f0c5c8d3 --- /dev/null +++ b/build/esm/src/vex.js @@ -0,0 +1,52 @@ +import { Flow } from './flow.js'; +import { log, RuntimeError } from './util.js'; +class Vex { + static sortAndUnique(arr, cmp, eq) { + if (arr.length > 1) { + const newArr = []; + let last; + arr.sort(cmp); + for (let i = 0; i < arr.length; ++i) { + if (i === 0 || !eq(arr[i], last)) { + newArr.push(arr[i]); + } + last = arr[i]; + } + return newArr; + } + else { + return arr; + } + } + static contains(arr, obj) { + let i = arr.length; + while (i--) { + if (arr[i] === obj) { + return true; + } + } + return false; + } + static getCanvasContext(canvasSelector) { + if (!canvasSelector) { + throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector); + } + const canvas = document.getElementById(canvasSelector); + if (!(canvas && canvas.getContext)) { + throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas'); + } + return canvas.getContext('2d'); + } + static benchmark(s, f) { + const start_time = new Date().getTime(); + f(); + const elapsed = new Date().getTime() - start_time; + log(s, elapsed + 'ms'); + } + static stackTrace() { + const err = new Error(); + return err.stack; + } +} +Vex.Flow = Flow; +export { Vex }; diff --git a/build/esm/src/vibrato.js b/build/esm/src/vibrato.js new file mode 100644 index 0000000000..36bbb54258 --- /dev/null +++ b/build/esm/src/vibrato.js @@ -0,0 +1,100 @@ +import { Bend } from './bend.js'; +import { Modifier } from './modifier.js'; +import { Tables } from './tables.js'; +export class Vibrato extends Modifier { + static get CATEGORY() { + return "Vibrato"; + } + static format(vibratos, state, context) { + if (!vibratos || vibratos.length === 0) + return false; + let text_line = state.top_text_line; + let width = 0; + let shift = state.right_shift - 7; + const bends = context.getMembers(Bend.CATEGORY); + if (bends && bends.length > 0) { + const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE; + text_line = text_line - (bendHeight + 1); + } + else { + state.top_text_line += 1; + } + for (let i = 0; i < vibratos.length; ++i) { + const vibrato = vibratos[i]; + vibrato.setXShift(shift); + vibrato.setTextLine(text_line); + width += vibrato.getWidth(); + shift += width; + } + state.right_shift += width; + return true; + } + constructor() { + super(); + this.position = Modifier.Position.RIGHT; + this.render_options = { + harsh: false, + vibrato_width: 20, + wave_height: 6, + wave_width: 4, + wave_girth: 2, + }; + this.setVibratoWidth(this.render_options.vibrato_width); + } + setHarsh(harsh) { + this.render_options.harsh = harsh; + return this; + } + setVibratoWidth(width) { + this.render_options.vibrato_width = width; + this.setWidth(width); + return this; + } + draw() { + const ctx = this.checkContext(); + const note = this.checkAttachedNote(); + this.setRendered(); + const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index); + const vx = start.x + this.x_shift; + const vy = note.getYForTopText(this.text_line) + 2; + Vibrato.renderVibrato(ctx, vx, vy, this.render_options); + } + static renderVibrato(ctx, x, y, opts) { + const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts; + const num_waves = vibrato_width / wave_width; + ctx.beginPath(); + let i; + if (harsh) { + ctx.moveTo(x, y + wave_girth + 1); + for (i = 0; i < num_waves / 2; ++i) { + ctx.lineTo(x + wave_width, y - wave_height / 2); + x += wave_width; + ctx.lineTo(x + wave_width, y + wave_height / 2); + x += wave_width; + } + for (i = 0; i < num_waves / 2; ++i) { + ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1); + x -= wave_width; + ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1); + x -= wave_width; + } + ctx.fill(); + } + else { + ctx.moveTo(x, y + wave_girth); + for (i = 0; i < num_waves / 2; ++i) { + ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y); + x += wave_width; + ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y); + x += wave_width; + } + for (i = 0; i < num_waves / 2; ++i) { + ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); + x -= wave_width; + ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); + x -= wave_width; + } + ctx.fill(); + } + } +} diff --git a/build/esm/src/vibratobracket.js b/build/esm/src/vibratobracket.js new file mode 100644 index 0000000000..01ef3ced0d --- /dev/null +++ b/build/esm/src/vibratobracket.js @@ -0,0 +1,51 @@ +import { Element } from './element.js'; +import { log } from './util.js'; +import { Vibrato } from './vibrato.js'; +function L(...args) { + if (VibratoBracket.DEBUG) + log('Vex.Flow.VibratoBracket', args); +} +class VibratoBracket extends Element { + static get CATEGORY() { + return "VibratoBracket"; + } + constructor(bracket_data) { + super(); + if (bracket_data.start) + this.start = bracket_data.start; + if (bracket_data.stop) + this.stop = bracket_data.stop; + this.line = 1; + this.render_options = { + harsh: false, + wave_height: 6, + wave_width: 4, + wave_girth: 2, + vibrato_width: 0, + }; + } + setLine(line) { + this.line = line; + return this; + } + setHarsh(harsh) { + this.render_options.harsh = harsh; + return this; + } + draw() { + const ctx = this.checkContext(); + this.setRendered(); + const y = (this.start && this.start.checkStave().getYForTopText(this.line)) || + (this.stop && this.stop.checkStave().getYForTopText(this.line)) || + 0; + const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0; + const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) || + (this.start && this.start.checkStave().getTieEndX() - 10) || + 0; + this.render_options.vibrato_width = stop_x - start_x; + L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y); + Vibrato.renderVibrato(ctx, start_x, y, this.render_options); + } +} +VibratoBracket.DEBUG = false; +export { VibratoBracket }; diff --git a/build/esm/src/voice.js b/build/esm/src/voice.js new file mode 100644 index 0000000000..1ca8752608 --- /dev/null +++ b/build/esm/src/voice.js @@ -0,0 +1,191 @@ +import { Element } from './element.js'; +import { Fraction } from './fraction.js'; +import { Tables } from './tables.js'; +import { defined, RuntimeError, sumArray } from './util.js'; +export var VoiceMode; +(function (VoiceMode) { + VoiceMode[VoiceMode["STRICT"] = 1] = "STRICT"; + VoiceMode[VoiceMode["SOFT"] = 2] = "SOFT"; + VoiceMode[VoiceMode["FULL"] = 3] = "FULL"; +})(VoiceMode || (VoiceMode = {})); +export class Voice extends Element { + static get CATEGORY() { + return "Voice"; + } + static get Mode() { + return VoiceMode; + } + constructor(time) { + super(); + this.resolutionMultiplier = 1; + this.mode = VoiceMode.STRICT; + this.preFormatted = false; + this.ticksUsed = new Fraction(0, 1); + this.largestTickWidth = 0; + this.tickables = []; + this.options = { + softmaxFactor: Tables.SOFTMAX_FACTOR, + }; + let voiceTime; + if (typeof time === 'string') { + const match = time.match(/(\d+)\/(\d+)/); + if (match) { + voiceTime = { + num_beats: parseInt(match[1]), + beat_value: parseInt(match[2]), + }; + } + } + else { + voiceTime = time; + } + this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime); + this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1); + this.smallestTickCount = this.totalTicks.clone(); + } + getTotalTicks() { + return this.totalTicks; + } + getTicksUsed() { + return this.ticksUsed; + } + getLargestTickWidth() { + return this.largestTickWidth; + } + getSmallestTickCount() { + return this.smallestTickCount; + } + getTickables() { + return this.tickables; + } + getMode() { + return this.mode; + } + setMode(mode) { + this.mode = mode; + return this; + } + getResolutionMultiplier() { + return this.resolutionMultiplier; + } + getActualResolution() { + return this.resolutionMultiplier * this.time.resolution; + } + setStave(stave) { + this.stave = stave; + this.boundingBox = undefined; + return this; + } + getStave() { + return this.stave; + } + getBoundingBox() { + if (!this.boundingBox) { + const stave = this.checkStave(); + let boundingBox = undefined; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + if (!tickable.getStave()) + tickable.setStave(stave); + const bb = tickable.getBoundingBox(); + if (bb) { + boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; + } + } + this.boundingBox = boundingBox; + } + return this.boundingBox; + } + setStrict(strict) { + this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT; + return this; + } + isComplete() { + if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) { + return this.ticksUsed.equals(this.totalTicks); + } + else { + return true; + } + } + setSoftmaxFactor(factor) { + this.options.softmaxFactor = factor; + this.expTicksUsed = 0; + return this; + } + reCalculateExpTicksUsed() { + const totalTicks = this.ticksUsed.value(); + const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks); + this.expTicksUsed = sumArray(this.tickables.map(exp)); + return this.expTicksUsed; + } + softmax(tickValue) { + if (!this.expTicksUsed) { + this.expTicksUsed = this.reCalculateExpTicksUsed(); + } + const totalTicks = this.ticksUsed.value(); + const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks); + const sm = exp(tickValue) / this.expTicksUsed; + return sm; + } + addTickable(tickable) { + if (!tickable.shouldIgnoreTicks()) { + const ticks = tickable.getTicks(); + this.ticksUsed.add(ticks); + this.expTicksUsed = 0; + if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) && + this.ticksUsed.greaterThan(this.totalTicks)) { + this.ticksUsed.subtract(ticks); + throw new RuntimeError('BadArgument', 'Too many ticks.'); + } + if (ticks.lessThan(this.smallestTickCount)) { + this.smallestTickCount = ticks.clone(); + } + this.resolutionMultiplier = this.ticksUsed.denominator; + this.totalTicks.add(0, this.ticksUsed.denominator); + } + this.tickables.push(tickable); + tickable.setVoice(this); + return this; + } + addTickables(tickables) { + for (let i = 0; i < tickables.length; ++i) { + this.addTickable(tickables[i]); + } + return this; + } + preFormat() { + if (this.preFormatted) + return this; + const stave = this.checkStave(); + this.tickables.forEach((tickable) => { + if (!tickable.getStave()) { + tickable.setStave(stave); + } + }); + this.preFormatted = true; + return this; + } + checkStave() { + return defined(this.stave, 'NoStave', 'No stave attached to instance.'); + } + draw(context = this.checkContext(), stave) { + stave = stave !== null && stave !== void 0 ? stave : this.stave; + this.setRendered(); + let boundingBox = undefined; + for (let i = 0; i < this.tickables.length; ++i) { + const tickable = this.tickables[i]; + if (stave) { + tickable.setStave(stave); + } + defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.'); + const bb = tickable.getBoundingBox(); + if (bb) { + boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; + } + tickable.setContext(context); + tickable.drawWithStyle(); + } + this.boundingBox = boundingBox; + } +} diff --git a/build/esm/src/web.js b/build/esm/src/web.js new file mode 100644 index 0000000000..f27804df9c --- /dev/null +++ b/build/esm/src/web.js @@ -0,0 +1,15 @@ +import { globalObject } from './util.js'; +export function isHTMLCanvas(element) { + if (!element) + return false; + const global = globalObject(); + return ((typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) || + (typeof element.getContext === 'function' && typeof element.toDataURL === 'function')); +} +export function isHTMLDiv(element) { + if (!element) + return false; + const global = globalObject(); + return ((typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) || + (typeof element.appendChild === 'function' && typeof element.style === 'object')); +} diff --git a/build/esm/tests/accidental_tests.js b/build/esm/tests/accidental_tests.js new file mode 100644 index 0000000000..ead93097e5 --- /dev/null +++ b/build/esm/tests/accidental_tests.js @@ -0,0 +1,974 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Beam } from '../src/beam.js'; +import { Dot } from '../src/dot.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { ModifierContext } from '../src/modifiercontext.js'; +import { Note } from '../src/note.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Stem } from '../src/stem.js'; +import { TickContext } from '../src/tickcontext.js'; +import { TimeSigNote } from '../src/timesignote.js'; +import { isAccidental } from '../src/typeguard.js'; +import { Voice } from '../src/voice.js'; +const AccidentalTests = { + Start() { + QUnit.module('Accidental'); + QUnit.test('Automatic Accidentals - Simple Tests', autoAccidentalWorking); + const run = VexFlowTests.runTests; + run('Accidental Padding', formatAccidentalSpaces); + run('Basic', basic); + run('Stem Down', basicStemDown); + run('Cautionary Accidental', cautionary); + run('Accidental Arrangement Special Cases', specialCases); + run('Multi Voice', multiVoice); + run('Microtonal', microtonal); + run('Microtonal (Iranian)', microtonal_iranian); + run('Sagittal', sagittal); + run('Automatic Accidentals', automaticAccidentals0); + run('Automatic Accidentals - C major scale in Ab', automaticAccidentals1); + run('Automatic Accidentals - No Accidentals Necessary', automaticAccidentals2); + run('Automatic Accidentals - No Accidentals Necessary (EasyScore)', automaticAccidentals3); + run('Automatic Accidentals - Multi Voice Inline', automaticAccidentalsMultiVoiceInline); + run('Automatic Accidentals - Multi Voice Offset', automaticAccidentalsMultiVoiceOffset); + run('Automatic Accidentals - Key C, Single Octave', automaticAccidentalsCornerCases1); + run('Automatic Accidentals - Key C, Two Octaves', automaticAccidentalsCornerCases2); + run('Automatic Accidentals - Key C#, Single Octave', automaticAccidentalsCornerCases3); + run('Automatic Accidentals - Key C#, Two Octaves', automaticAccidentalsCornerCases4); + run('Factory API', factoryAPI); + }, +}; +function hasAccidental(note) { + return note.getModifiers().some((modifier) => isAccidental(modifier)); +} +function makeNewAccid(factory) { + return (type) => factory.Accidental({ type }); +} +function autoAccidentalWorking(assert) { + const createStaveNote = (noteStruct) => new StaveNote(noteStruct); + let notes = [ + { keys: ['bb/4'], duration: '4' }, + { keys: ['bb/4'], duration: '4' }, + { keys: ['g#/4'], duration: '4' }, + { keys: ['g/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['a#/4'], duration: '4' }, + { keys: ['g#/4'], duration: '4' }, + ].map(createStaveNote); + let voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + Accidental.applyAccidentals([voice], 'F'); + assert.equal(hasAccidental(notes[0]), false, 'No flat because of key signature'); + assert.equal(hasAccidental(notes[1]), false, 'No flat because of key signature'); + assert.equal(hasAccidental(notes[2]), true, 'Added a sharp'); + assert.equal(hasAccidental(notes[3]), true, 'Back to natural'); + assert.equal(hasAccidental(notes[4]), true, 'Back to natural'); + assert.equal(hasAccidental(notes[5]), false, 'Natural remembered'); + assert.equal(hasAccidental(notes[6]), true, 'Added sharp'); + assert.equal(hasAccidental(notes[7]), true, 'Added sharp'); + notes = [ + { keys: ['e#/4'], duration: '4' }, + { keys: ['cb/4'], duration: '4' }, + { keys: ['fb/4'], duration: '4' }, + { keys: ['b#/4'], duration: '4' }, + { keys: ['b#/4'], duration: '4' }, + { keys: ['cb/5'], duration: '4' }, + { keys: ['fb/5'], duration: '4' }, + { keys: ['e#/4'], duration: '4' }, + ].map(createStaveNote); + voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + Accidental.applyAccidentals([voice], 'A'); + assert.equal(hasAccidental(notes[0]), true, 'Added sharp'); + assert.equal(hasAccidental(notes[1]), true, 'Added flat'); + assert.equal(hasAccidental(notes[2]), true, 'Added flat'); + assert.equal(hasAccidental(notes[3]), true, 'Added sharp'); + assert.equal(hasAccidental(notes[4]), false, 'Sharp remembered'); + assert.equal(hasAccidental(notes[5]), true, 'Added flat(different octave)'); + assert.equal(hasAccidental(notes[6]), true, 'Added flat(different octave)'); + assert.equal(hasAccidental(notes[7]), false, 'sharp remembered'); + notes = [ + { keys: ['c/4'], duration: '4' }, + { keys: ['cb/4'], duration: '4' }, + { keys: ['cb/4'], duration: '4' }, + { keys: ['c#/4'], duration: '4' }, + { keys: ['c#/4'], duration: '4' }, + { keys: ['cbb/4'], duration: '4' }, + { keys: ['cbb/4'], duration: '4' }, + { keys: ['c##/4'], duration: '4' }, + { keys: ['c##/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + ].map(createStaveNote); + voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + Accidental.applyAccidentals([voice], 'C'); + assert.equal(hasAccidental(notes[0]), false, 'No accidental'); + assert.equal(hasAccidental(notes[1]), true, 'Added flat'); + assert.equal(hasAccidental(notes[2]), false, 'Flat remembered'); + assert.equal(hasAccidental(notes[3]), true, 'Sharp added'); + assert.equal(hasAccidental(notes[4]), false, 'Sharp remembered'); + assert.equal(hasAccidental(notes[5]), true, 'Added doubled flat'); + assert.equal(hasAccidental(notes[6]), false, 'Double flat remembered'); + assert.equal(hasAccidental(notes[7]), true, 'Added double sharp'); + assert.equal(hasAccidental(notes[8]), false, 'Double sharp rememberd'); + assert.equal(hasAccidental(notes[9]), true, 'Added natural'); + assert.equal(hasAccidental(notes[10]), false, 'Natural remembered'); +} +function formatAccidentalSpaces(options) { + const f = VexFlowTests.makeFactory(options, 750, 280); + const context = f.getContext(); + const softmaxFactor = 100; + const notes = [ + new StaveNote({ + keys: ['e##/5'], + duration: '8d', + }).addModifier(new Accidental('##'), 0), + new StaveNote({ + keys: ['b/4'], + duration: '16', + }).addModifier(new Accidental('b'), 0), + new StaveNote({ + keys: ['f/3'], + duration: '8', + }), + new StaveNote({ + keys: ['a/3'], + duration: '16', + }), + new StaveNote({ + keys: ['e/4', 'g/4'], + duration: '16', + }) + .addModifier(new Accidental('bb'), 0) + .addModifier(new Accidental('bb'), 1), + new StaveNote({ + keys: ['d/4'], + duration: '16', + }), + new StaveNote({ + keys: ['e/4', 'g/4'], + duration: '16', + }) + .addModifier(new Accidental('#'), 0) + .addModifier(new Accidental('#'), 1), + new StaveNote({ + keys: ['g/4'], + duration: '32', + }), + new StaveNote({ + keys: ['a/4'], + duration: '32', + }), + new StaveNote({ + keys: ['g/4'], + duration: '16', + }), + new StaveNote({ + keys: ['d/4'], + duration: 'q', + }), + ]; + Dot.buildAndAttach([notes[0]], { all: true }); + const beams = Beam.generateBeams(notes); + const voice = new Voice({ + num_beats: 4, + beat_value: 4, + }); + voice.addTickables(notes); + const formatter = new Formatter({ softmaxFactor }).joinVoices([voice]); + const width = formatter.preCalculateMinTotalWidth([voice]); + const stave = new Stave(10, 40, width + 20); + stave.setContext(context).draw(); + formatter.format([voice], width); + voice.draw(context, stave); + beams.forEach((b) => b.setContext(context).draw()); + notes.forEach((note) => Note.plotMetrics(context, note, 30)); + VexFlowTests.plotLegendForNoteWidth(context, 300, 150); + options.assert.ok(true); +} +function basic(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + f.Stave({ x: 10, y: 10, width: 550 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) + .addModifier(accid('b'), 0) + .addModifier(accid('#'), 1), + f + .StaveNote({ keys: ['e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5', 'd/4'], duration: '2' }) + .addModifier(accid('##'), 6) + .addModifier(accid('n'), 0) + .addModifier(accid('bb'), 1) + .addModifier(accid('b'), 2) + .addModifier(accid('#'), 3) + .addModifier(accid('n'), 4) + .addModifier(accid('bb'), 5), + f + .StaveNote({ keys: ['g/5', 'f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5'], duration: '16' }) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .addModifier(accid('#'), 3) + .addModifier(accid('b'), 4) + .addModifier(accid('bb'), 5) + .addModifier(accid('##'), 6) + .addModifier(accid('#'), 0), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('##').setAsCautionary(), 1) + .addModifier(accid('#').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb').setAsCautionary(), 4) + .addModifier(accid('b').setAsCautionary(), 5), + ]; + Formatter.SimpleFormat(notes, 10, { paddingBetween: 45 }); + notes.forEach((note, index) => { + Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); + options.assert.ok(true, 'Full Accidental'); +} +function cautionary(options) { + const staveCount = 12; + const scale = 0.85; + const staveWidth = 840; + let i = 0; + let j = 0; + const f = VexFlowTests.makeFactory(options, staveWidth + 10, 175 * staveCount + 10); + f.getContext().scale(scale, scale); + const accids = Object.keys(Flow.accidentalMap).filter((accid) => accid !== '{' && accid !== '}'); + const mod = Math.round(accids.length / staveCount); + for (i = 0; i < staveCount; ++i) { + const stave = f.Stave({ x: 0, y: 10 + 200 * i, width: staveWidth / scale }); + const score = f.EasyScore(); + const rowMap = []; + for (j = 0; j < mod && j + i * staveCount < accids.length; ++j) { + rowMap.push(accids[j + i * staveCount]); + } + const notes = rowMap.map((accidType) => f + .StaveNote({ keys: ['a/4'], duration: '4', stem_direction: Stem.UP }) + .addModifier(f.Accidental({ type: accidType }), 0)); + const voice = score.voice(notes, { time: rowMap.length + '/4' }); + voice.getTickables().forEach((tickable) => { + tickable + .getModifiers() + .filter((modifier) => modifier.getAttribute('type') === Accidental.CATEGORY) + .forEach((accid) => accid.setAsCautionary()); + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + options.assert.ok(true, 'Must successfully render cautionary accidentals'); +} +function specialCases(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + f.Stave({ x: 10, y: 10, width: 550 }); + const notes = [ + f + .StaveNote({ keys: ['f/4', 'd/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('b'), 1), + f + .StaveNote({ keys: ['c/4', 'g/4'], duration: '2' }) + .addModifier(accid('##'), 0) + .addModifier(accid('##'), 1), + f + .StaveNote({ keys: ['b/3', 'd/4', 'f/4'], duration: '16' }) + .addModifier(accid('#'), 0) + .addModifier(accid('#'), 1) + .addModifier(accid('##'), 2), + f + .StaveNote({ keys: ['g/4', 'a/4', 'c/5', 'e/5'], duration: '16' }) + .addModifier(accid('b'), 0) + .addModifier(accid('b'), 1) + .addModifier(accid('n'), 3), + f + .StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4' }) + .addModifier(accid('b').setAsCautionary(), 0) + .addModifier(accid('b').setAsCautionary(), 1) + .addModifier(accid('bb'), 2) + .addModifier(accid('b'), 3), + f + .StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5', 'g/5'], duration: '8' }) + .addModifier(accid('bb'), 0) + .addModifier(accid('b').setAsCautionary(), 1) + .addModifier(accid('n').setAsCautionary(), 2) + .addModifier(accid('#'), 3) + .addModifier(accid('n').setAsCautionary(), 4), + ]; + Formatter.SimpleFormat(notes, 0, { paddingBetween: 20 }); + notes.forEach((note, index) => { + Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); + options.assert.ok(true, 'Full Accidental'); +} +function basicStemDown(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + f.Stave({ x: 10, y: 10, width: 550 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('#'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2', stem_direction: -1 }) + .addModifier(accid('##'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('bb'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('#'), 4) + .addModifier(accid('n'), 5) + .addModifier(accid('bb'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: -1 }) + .addModifier(accid('n'), 0) + .addModifier(accid('#'), 1) + .addModifier(accid('#'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + ]; + Formatter.SimpleFormat(notes, 0, { paddingBetween: 30 }); + notes.forEach((note, noteIndex) => { + Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + noteIndex + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, accidIndex) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + accidIndex + ' has set width'); + }); + }); + f.draw(); + VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); + options.assert.ok(true, 'Full Accidental'); +} +function multiVoice(options) { + function showNotes(note1, note2, stave, ctx, x) { + const modifierContext = new ModifierContext(); + note1.addToModifierContext(modifierContext); + note2.addToModifierContext(modifierContext); + new TickContext().addTickable(note1).addTickable(note2).preFormat().setX(x); + note1.setContext(ctx).draw(); + note2.setContext(ctx).draw(); + Note.plotMetrics(ctx, note1, 180); + Note.plotMetrics(ctx, note2, 15); + } + const f = VexFlowTests.makeFactory(options, 460, 250); + const accid = makeNewAccid(f); + const stave = f.Stave({ x: 10, y: 45, width: 420 }); + const ctx = f.getContext(); + stave.draw(); + let note1 = f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .setStave(stave); + let note2 = f + .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('bb'), 1) + .addModifier(accid('##'), 2) + .setStave(stave); + showNotes(note1, note2, stave, ctx, 60); + note1 = f + .StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .setStave(stave); + note2 = f + .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }) + .addModifier(accid('b'), 0) + .setStave(stave); + showNotes(note1, note2, stave, ctx, 150); + note1 = f + .StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }) + .addModifier(accid('b'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('#'), 2) + .setStave(stave); + note2 = f + .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }) + .addModifier(accid('b'), 0) + .setStave(stave); + showNotes(note1, note2, stave, ctx, 250); + VexFlowTests.plotLegendForNoteWidth(ctx, 350, 150); + options.assert.ok(true, 'Full Accidental'); +} +function microtonal(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + const ctx = f.getContext(); + f.Stave({ x: 10, y: 10, width: 650 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) + .addModifier(accid('db'), 0) + .addModifier(accid('d'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }) + .addModifier(accid('bbs'), 0) + .addModifier(accid('++'), 1) + .addModifier(accid('+'), 2) + .addModifier(accid('d'), 3) + .addModifier(accid('db'), 4) + .addModifier(accid('+'), 5) + .addModifier(accid('##'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) + .addModifier(accid('++'), 0) + .addModifier(accid('bbs'), 1) + .addModifier(accid('+'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('db'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('db').setAsCautionary(), 1) + .addModifier(accid('bbs').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('++').setAsCautionary(), 4) + .addModifier(accid('d').setAsCautionary(), 5), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'd/5', 'g/5'], duration: '16' }) + .addModifier(accid('++-'), 0) + .addModifier(accid('+-'), 1) + .addModifier(accid('bs'), 2) + .addModifier(accid('bss'), 3) + .addModifier(accid('afhf'), 4) + .addModifier(accid('ashs'), 5), + ]; + Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 }); + notes.forEach((note, index) => { + Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); + options.assert.ok(true, 'Microtonal Accidental'); +} +function microtonal_iranian(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + const ctx = f.getContext(); + f.Stave({ x: 10, y: 10, width: 650 }); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) + .addModifier(accid('k'), 0) + .addModifier(accid('o'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }) + .addModifier(accid('b'), 0) + .addModifier(accid('k'), 1) + .addModifier(accid('n'), 2) + .addModifier(accid('o'), 3) + .addModifier(accid('#'), 4) + .addModifier(accid('bb'), 5) + .addModifier(accid('##'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) + .addModifier(accid('o'), 0) + .addModifier(accid('k'), 1) + .addModifier(accid('n'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) + .addModifier(accid('#'), 0) + .addModifier(accid('o').setAsCautionary(), 1) + .addModifier(accid('n').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('k').setAsCautionary(), 4), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '16' }) + .addModifier(accid('k'), 0) + .addModifier(accid('k'), 1) + .addModifier(accid('k'), 2) + .addModifier(accid('k'), 3), + ]; + Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 }); + notes.forEach((note, index) => { + Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); + options.assert.ok(true, 'Microtonal Accidental (Iranian)'); +} +function sagittal(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + const accid = makeNewAccid(f); + const ctx = f.getContext(); + f.Stave({ x: 10, y: 10, width: 650 }); + const notes = [ + f + .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal11MediumDiesisUp'), 1) + .addModifier(accid('accSagittal5CommaDown'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('accSagittal7CommaDown'), 3), + f + .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal35LargeDiesisDown'), 2), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1), + f + .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' }) + .addModifier(accid('b'), 1) + .addModifier(accid('accSagittal7CommaDown'), 1) + .addModifier(accid('accSagittal11LargeDiesisDown'), 3), + f + .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal11MediumDiesisUp'), 1) + .addModifier(accid('accSagittal5CommaDown'), 2) + .addModifier(accid('accSagittalFlat7CDown'), 3), + f + .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' }) + .addModifier(accid('accSagittal35LargeDiesisDown'), 2), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1), + f + .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' }) + .addModifier(accid('accSagittalFlat7CDown'), 1) + .addModifier(accid('accSagittal11LargeDiesisDown'), 3), + ]; + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + }); + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [3], + last_indices: [3], + options: { + direction: Stem.DOWN, + }, + }); + f.StaveTie({ + from: notes[4], + to: notes[5], + first_indices: [0, 1], + last_indices: [0, 1], + }); + f.StaveTie({ + from: notes[4], + to: notes[5], + first_indices: [3], + last_indices: [3], + options: { + direction: Stem.DOWN, + }, + }); + f.Beam({ notes: notes.slice(2, 4) }); + f.Beam({ notes: notes.slice(6, 8) }); + Formatter.SimpleFormat(notes); + notes.forEach((note, index) => { + Note.plotMetrics(f.getContext(), note, 140); + options.assert.ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); + note.getModifiersByType('Accidental').forEach((accid, index) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); + }); + }); + f.draw(); + VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); + options.assert.ok(true, 'Sagittal'); +} +function automaticAccidentals0(options) { + const f = VexFlowTests.makeFactory(options, 700, 200); + const stave = f.Stave(); + const notes = [ + { keys: ['c/4', 'c/5'], duration: '4' }, + { keys: ['c#/4', 'c#/5'], duration: '4' }, + { keys: ['c#/4', 'c#/5'], duration: '4' }, + { keys: ['c##/4', 'c##/5'], duration: '4' }, + { keys: ['c##/4', 'c##/5'], duration: '4' }, + { keys: ['c/4', 'c/5'], duration: '4' }, + { keys: ['cn/4', 'cn/5'], duration: '4' }, + { keys: ['cbb/4', 'cbb/5'], duration: '4' }, + { keys: ['cbb/4', 'cbb/5'], duration: '4' }, + { keys: ['cb/4', 'cb/5'], duration: '4' }, + { keys: ['cb/4', 'cb/5'], duration: '4' }, + { keys: ['c/4', 'c/5'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const gracenotes = [{ keys: ['d#/4'], duration: '16', slash: true }].map(f.GraceNote.bind(f)); + notes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0); + const voice = f + .Voice() + .setMode(Voice.Mode.SOFT) + .addTickable(new TimeSigNote('12/4').setStave(stave)) + .addTickables(notes); + Accidental.applyAccidentals([voice], 'C'); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentals1(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('Ab'); + const notes = [ + { keys: ['c/4'], duration: '4' }, + { keys: ['d/4'], duration: '4' }, + { keys: ['e/4'], duration: '4' }, + { keys: ['f/4'], duration: '4' }, + { keys: ['g/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['c/5'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + Accidental.applyAccidentals([voice], 'Ab'); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentals2(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('A'); + const notes = [ + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['c#/5'], duration: '4' }, + { keys: ['d/5'], duration: '4' }, + { keys: ['e/5'], duration: '4' }, + { keys: ['f#/5'], duration: '4' }, + { keys: ['g#/5'], duration: '4' }, + { keys: ['a/5'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + Accidental.applyAccidentals([voice], 'A'); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentals3(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('A'); + const score = f.EasyScore(); + score.set({ time: '8/4' }); + const notes = score.notes('A4/q, B4/q, C#5/q, D5/q, E5/q,F#5/q, G#5/q, A5/q', { stem: 'UP' }); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + Accidental.applyAccidentals([voice], 'A'); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsMultiVoiceInline(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('Ab'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['d/4'], duration: '4', stem_direction: -1 }, + { keys: ['e/4'], duration: '4', stem_direction: -1 }, + { keys: ['f/4'], duration: '4', stem_direction: -1 }, + { keys: ['g/4'], duration: '4', stem_direction: -1 }, + { keys: ['a/4'], duration: '4', stem_direction: -1 }, + { keys: ['b/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const notes1 = [ + { keys: ['c/5'], duration: '4' }, + { keys: ['d/5'], duration: '4' }, + { keys: ['e/5'], duration: '4' }, + { keys: ['f/5'], duration: '4' }, + { keys: ['g/5'], duration: '4' }, + { keys: ['a/5'], duration: '4' }, + { keys: ['b/5'], duration: '4' }, + { keys: ['c/6'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); + const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1); + Accidental.applyAccidentals([voice0, voice1], 'Ab'); + options.assert.equal(hasAccidental(notes0[0]), false); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[3]), false); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[7]), false); + options.assert.equal(hasAccidental(notes1[0]), false); + options.assert.equal(hasAccidental(notes1[1]), true); + options.assert.equal(hasAccidental(notes1[2]), true); + options.assert.equal(hasAccidental(notes1[3]), false); + options.assert.equal(hasAccidental(notes1[4]), false); + options.assert.equal(hasAccidental(notes1[5]), true); + options.assert.equal(hasAccidental(notes1[6]), true); + options.assert.equal(hasAccidental(notes1[7]), false); + new Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsMultiVoiceOffset(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('Cb'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['d/4'], duration: '4', stem_direction: -1 }, + { keys: ['e/4'], duration: '4', stem_direction: -1 }, + { keys: ['f/4'], duration: '4', stem_direction: -1 }, + { keys: ['g/4'], duration: '4', stem_direction: -1 }, + { keys: ['a/4'], duration: '4', stem_direction: -1 }, + { keys: ['b/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const notes1 = [ + { keys: ['c/5'], duration: '8' }, + { keys: ['c/5'], duration: '4' }, + { keys: ['d/5'], duration: '4' }, + { keys: ['e/5'], duration: '4' }, + { keys: ['f/5'], duration: '4' }, + { keys: ['g/5'], duration: '4' }, + { keys: ['a/5'], duration: '4' }, + { keys: ['b/5'], duration: '4' }, + { keys: ['c/6'], duration: '4' }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); + const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1); + Accidental.applyAccidentals([voice0, voice1], 'Cb'); + options.assert.equal(hasAccidental(notes0[0]), true); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[4]), true); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[7]), false, 'Natural Remembered'); + options.assert.equal(hasAccidental(notes1[0]), true); + options.assert.equal(hasAccidental(notes1[1]), false); + options.assert.equal(hasAccidental(notes1[2]), true); + options.assert.equal(hasAccidental(notes1[3]), true); + options.assert.equal(hasAccidental(notes1[4]), true); + options.assert.equal(hasAccidental(notes1[5]), true); + options.assert.equal(hasAccidental(notes1[6]), true); + options.assert.equal(hasAccidental(notes1[7]), true); + new Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases1(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); + Accidental.applyAccidentals([voice0], 'C'); + options.assert.equal(hasAccidental(notes0[0]), false); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), false); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + new Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases2(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); + Accidental.applyAccidentals([voice0], 'C'); + options.assert.equal(hasAccidental(notes0[0]), false); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + options.assert.equal(hasAccidental(notes0[10]), true); + options.assert.equal(hasAccidental(notes0[12]), false); + options.assert.equal(hasAccidental(notes0[14]), true); + options.assert.equal(hasAccidental(notes0[16]), false); + options.assert.equal(hasAccidental(notes0[1]), false); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[5]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[9]), false); + options.assert.equal(hasAccidental(notes0[11]), true); + options.assert.equal(hasAccidental(notes0[13]), false); + options.assert.equal(hasAccidental(notes0[15]), true); + options.assert.equal(hasAccidental(notes0[17]), false); + new Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases3(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C#'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); + Accidental.applyAccidentals([voice0], 'C#'); + options.assert.equal(hasAccidental(notes0[0]), true); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[2]), false); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[5]), true); + options.assert.equal(hasAccidental(notes0[6]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + new Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function automaticAccidentalsCornerCases4(options) { + const f = VexFlowTests.makeFactory(options, 700, 150); + const stave = f.Stave().addKeySignature('C#'); + const notes0 = [ + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c#/4'], duration: '4', stem_direction: -1 }, + { keys: ['c#/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['cb/4'], duration: '4', stem_direction: -1 }, + { keys: ['cb/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + { keys: ['c/4'], duration: '4', stem_direction: -1 }, + { keys: ['c/5'], duration: '4', stem_direction: -1 }, + ].map(f.StaveNote.bind(f)); + const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); + Accidental.applyAccidentals([voice0], 'C#'); + options.assert.equal(hasAccidental(notes0[0]), true); + options.assert.equal(hasAccidental(notes0[2]), true); + options.assert.equal(hasAccidental(notes0[4]), false); + options.assert.equal(hasAccidental(notes0[6]), true); + options.assert.equal(hasAccidental(notes0[8]), false); + options.assert.equal(hasAccidental(notes0[10]), true); + options.assert.equal(hasAccidental(notes0[12]), false); + options.assert.equal(hasAccidental(notes0[14]), true); + options.assert.equal(hasAccidental(notes0[16]), false); + options.assert.equal(hasAccidental(notes0[1]), true); + options.assert.equal(hasAccidental(notes0[3]), true); + options.assert.equal(hasAccidental(notes0[5]), false); + options.assert.equal(hasAccidental(notes0[7]), true); + options.assert.equal(hasAccidental(notes0[9]), false); + options.assert.equal(hasAccidental(notes0[11]), true); + options.assert.equal(hasAccidental(notes0[13]), false); + options.assert.equal(hasAccidental(notes0[15]), true); + options.assert.equal(hasAccidental(notes0[17]), false); + new Formatter().joinVoices([voice0]).formatToStave([voice0], stave); + f.draw(); + options.assert.ok(true); +} +function factoryAPI(options) { + const f = VexFlowTests.makeFactory(options, 700, 240); + f.Stave({ x: 10, y: 10, width: 550 }); + const accid = makeNewAccid(f); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }) + .addModifier(accid('b'), 0) + .addModifier(accid('#'), 1), + f + .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: 'h' }) + .addModifier(accid('##'), 0) + .addModifier(accid('n'), 1) + .addModifier(accid('bb'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('#'), 4) + .addModifier(accid('n'), 5) + .addModifier(accid('bb'), 6), + f + .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) + .addModifier(accid('n'), 0) + .addModifier(accid('#'), 1) + .addModifier(accid('#'), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb'), 4) + .addModifier(accid('##'), 5) + .addModifier(accid('#'), 6), + f + .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: 'w' }) + .addModifier(accid('#'), 0) + .addModifier(accid('##').setAsCautionary(), 1) + .addModifier(accid('#').setAsCautionary(), 2) + .addModifier(accid('b'), 3) + .addModifier(accid('bb').setAsCautionary(), 4) + .addModifier(accid('b').setAsCautionary(), 5), + ]; + Formatter.SimpleFormat(notes); + notes.forEach((n, i) => { + options.assert.ok(n.getModifiersByType('Accidental').length > 0, 'Note ' + i + ' has accidentals'); + n.getModifiersByType('Accidental').forEach((accid, i) => { + options.assert.ok(accid.getWidth() > 0, 'Accidental ' + i + ' has set width'); + }); + }); + f.draw(); + options.assert.ok(true, 'Factory API'); +} +VexFlowTests.register(AccidentalTests); +export { AccidentalTests }; diff --git a/build/esm/tests/annotation_tests.js b/build/esm/tests/annotation_tests.js new file mode 100644 index 0000000000..a7d63064ed --- /dev/null +++ b/build/esm/tests/annotation_tests.js @@ -0,0 +1,372 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Annotation, AnnotationVerticalJustify } from '../src/annotation.js'; +import { Articulation } from '../src/articulation.js'; +import { Beam } from '../src/beam.js'; +import { Bend } from '../src/bend.js'; +import { Flow } from '../src/flow.js'; +import { Font, FontStyle, FontWeight } from '../src/font.js'; +import { Formatter } from '../src/formatter.js'; +import { ModifierPosition } from '../src/modifier.js'; +import { Registry } from '../src/registry.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Stem } from '../src/stem.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { Vibrato } from '../src/vibrato.js'; +import { Voice } from '../src/voice.js'; +const AnnotationTests = { + Start() { + QUnit.module('Annotation'); + const run = VexFlowTests.runTests; + run('Placement', placement); + run('Lyrics', lyrics); + run('Simple Annotation', simple); + run('Styled Annotation', styling); + run('Standard Notation Annotation', standard); + run('Harmonics', harmonic); + run('Fingerpicking', picking); + run('Bottom Annotation', bottom); + run('Bottom Annotations with Beams', bottomWithBeam); + run('Test Justification Annotation Stem Up', justificationStemUp); + run('Test Justification Annotation Stem Down', justificationStemDown); + run('TabNote Annotations', tabNotes); + }, +}; +const FONT_SIZE = VexFlowTests.Font.size; +const tabNote = (noteStruct) => new TabNote(noteStruct); +const staveNote = (noteStruct) => new StaveNote(noteStruct); +function lyrics(options) { + let fontSize = FONT_SIZE; + let x = 10; + let width = 170; + let ratio = 1; + const registry = new Registry(); + Registry.enableDefaultRegistry(registry); + const f = VexFlowTests.makeFactory(options, 750, 260); + for (let i = 0; i < 3; ++i) { + const score = f.EasyScore(); + score.set({ time: '3/4' }); + const system = f.System({ width, x }); + system.addStave({ + voices: [ + score.voice(score.notes('(C4 F4)/2[id="n0"]').concat(score.beam(score.notes('(C4 A4)/8[id="n1"], (C4 A4)/8[id="n2"]')))), + ], + }); + ['hand,', 'and', 'me', 'pears', 'lead', 'the'].forEach((text, ix) => { + const verse = Math.floor(ix / 3); + const noteGroupID = 'n' + (ix % 3); + const noteGroup = registry.getElementById(noteGroupID); + const lyricsAnnotation = f.Annotation({ text }).setFont('Roboto Slab', fontSize); + lyricsAnnotation.setPosition(ModifierPosition.BELOW); + noteGroup.addModifier(lyricsAnnotation, verse); + }); + system.addStave({ + voices: [score.voice(score.notes('(F4 D5)/2').concat(score.beam(score.notes('(F4 F5)/8, (F4 F5)/8'))))], + }); + f.draw(); + ratio = (fontSize + 2) / fontSize; + width = width * ratio; + x = x + width; + fontSize = fontSize + 2; + } + options.assert.ok(true); +} +function simple(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial, sans-serif'; + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new Annotation('T'), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new Bend('Full').setTap('T'), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Simple Annotation'); +} +function standard(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new Stave(10, 10, 450).addClef('treble').setContext(ctx).draw(); + const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, 'normal', 'italic'); + const notes = [ + staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet'), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro'), 2), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Standard Notation Annotation'); +} +function styling(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new Stave(10, 10, 450).addClef('treble').setContext(ctx).draw(); + const annotation = (text, style) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, 'normal', 'italic').setStyle(style); + const notes = [ + staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet', { fillStyle: '#0F0' }), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro', { fillStyle: '#00F' }), 2), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Standard Notation Annotation'); +} +function harmonic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 12 }, + { str: 3, fret: 12 }, + ], + duration: 'h', + }).addModifier(new Annotation('Harm.'), 0), + tabNote({ + positions: [{ str: 2, fret: 9 }], + duration: 'h', + }) + .addModifier(new Annotation('(8va)').setFont(Font.SERIF, FONT_SIZE, FontWeight.NORMAL, FontStyle.ITALIC), 0) + .addModifier(new Annotation('A.H.'), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Simple Annotation'); +} +function picking(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.setFont(Font.SANS_SERIF, FONT_SIZE); + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, FontWeight.NORMAL, FontStyle.ITALIC); + const notes = [ + tabNote({ + positions: [ + { str: 1, fret: 0 }, + { str: 2, fret: 1 }, + { str: 3, fret: 2 }, + { str: 4, fret: 2 }, + { str: 5, fret: 0 }, + ], + duration: 'h', + }).addModifier(new Vibrato().setVibratoWidth(40), 0), + tabNote({ + positions: [{ str: 6, fret: 9 }], + duration: '8', + }).addModifier(annotation('p').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), + tabNote({ + positions: [{ str: 3, fret: 9 }], + duration: '8', + }).addModifier(annotation('i').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), + tabNote({ + positions: [{ str: 2, fret: 9 }], + duration: '8', + }).addModifier(annotation('m').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), + tabNote({ + positions: [{ str: 1, fret: 9 }], + duration: '8', + }).addModifier(annotation('a').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Fingerpicking'); +} +function placement(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); + const annotation = (text, fontSize, vj) => new Annotation(text).setFont(Font.SERIF, fontSize).setVerticalJustification(vj); + const notes = [ + staveNote({ keys: ['e/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['c/5'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(annotation('v1', 14, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 14, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('am').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 20, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(annotation('v1', 11, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 11, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(annotation('v1', 11, AnnotationVerticalJustify.TOP), 0) + .addModifier(annotation('v2', 20, AnnotationVerticalJustify.TOP), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(annotation('v1', 12, AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 12, AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(annotation('v1', 11, AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/5'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('am').setPosition(ModifierPosition.BELOW), 0) + .addModifier(annotation('v1', 10, AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(annotation('v1', 10, AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0), + staveNote({ keys: ['f/5'], duration: 'w' }) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) + .addModifier(annotation('v1', 11, AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(annotation('v2', 16, AnnotationVerticalJustify.BOTTOM), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, ' Annotation Placement'); +} +function bottom(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new Stave(10, 10, 300).addClef('treble').setContext(ctx).draw(); + const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE).setVerticalJustification(Annotation.VerticalJustify.BOTTOM); + const notes = [ + staveNote({ keys: ['f/4'], duration: 'w' }).addModifier(annotation('F'), 0), + staveNote({ keys: ['a/4'], duration: 'w' }).addModifier(annotation('A'), 0), + staveNote({ keys: ['c/5'], duration: 'w' }).addModifier(annotation('C'), 0), + staveNote({ keys: ['e/5'], duration: 'w' }).addModifier(annotation('E'), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Bottom Annotation'); +} +function bottomWithBeam(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + const stave = new Stave(10, 10, 300).addClef('treble').setContext(ctx).draw(); + const notes = [ + new StaveNote({ keys: ['a/3'], duration: '8' }).addModifier(new Annotation('good').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)), + new StaveNote({ keys: ['g/3'], duration: '8' }).addModifier(new Annotation('even').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)), + new StaveNote({ keys: ['c/4'], duration: '8' }).addModifier(new Annotation('under').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)), + new StaveNote({ keys: ['d/4'], duration: '8' }).addModifier(new Annotation('beam').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)), + ]; + const beam = new Beam(notes.slice(1)); + Formatter.FormatAndDraw(ctx, stave, notes); + beam.setContext(ctx).draw(); + options.assert.ok(true, 'Bottom Annotation with Beams'); +} +function justificationStemUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 650, 950); + ctx.scale(1.5, 1.5); + const annotation = (text, hJustification, vJustification) => new Annotation(text) + .setFont(Font.SANS_SERIF, FONT_SIZE) + .setJustification(hJustification) + .setVerticalJustification(vJustification); + for (let v = 1; v <= 4; ++v) { + const stave = new Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['c/3'], duration: 'q' }).addModifier(annotation('Text', 1, v), 0), + staveNote({ keys: ['c/4'], duration: 'q' }).addModifier(annotation('Text', 2, v), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q' }).addModifier(annotation('Text', 3, v), 0), + staveNote({ keys: ['c/6'], duration: 'q' }).addModifier(annotation('Text', 4, v), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + } + options.assert.ok(true, 'Test Justification Annotation'); +} +function justificationStemDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 650, 1000); + ctx.scale(1.5, 1.5); + const annotation = (text, hJustification, vJustification) => new Annotation(text) + .setFont(Font.SANS_SERIF, FONT_SIZE) + .setJustification(hJustification) + .setVerticalJustification(vJustification); + for (let v = 1; v <= 4; ++v) { + const stave = new Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['c/3'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 1, v), 0), + staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 2, v), 0), + staveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 3, v), 0), + staveNote({ keys: ['c/6'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 4, v), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + } + options.assert.ok(true, 'Test Justification Annotation'); +} +function tabNotes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial, sans-serif'; + const stave = new TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '8', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + ]; + const notes1 = specs.map((noteSpec) => { + const note = new TabNote(noteSpec); + note.render_options.draw_stem = true; + return note; + }); + const notes2 = specs.map((noteSpec) => { + const note = new TabNote(noteSpec); + note.render_options.draw_stem = true; + note.setStemDirection(-1); + return note; + }); + const notes3 = specs.map((noteSpec) => new TabNote(noteSpec)); + notes1[0].addModifier(new Annotation('Text').setJustification(1).setVerticalJustification(1)); + notes1[1].addModifier(new Annotation('Text').setJustification(2).setVerticalJustification(2)); + notes1[2].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(3)); + notes1[3].addModifier(new Annotation('Text').setJustification(4).setVerticalJustification(4)); + notes2[0].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(1)); + notes2[1].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(2)); + notes2[2].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(3)); + notes2[3].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(4)); + notes3[0].addModifier(new Annotation('Text').setVerticalJustification(1)); + notes3[1].addModifier(new Annotation('Text').setVerticalJustification(2)); + notes3[2].addModifier(new Annotation('Text').setVerticalJustification(3)); + notes3[3].addModifier(new Annotation('Text').setVerticalJustification(4)); + const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.SOFT); + voice.addTickables(notes1); + voice.addTickables(notes2); + voice.addTickables(notes3); + new Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave }); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +VexFlowTests.register(AnnotationTests); +export { AnnotationTests }; diff --git a/build/esm/tests/articulation_tests.js b/build/esm/tests/articulation_tests.js new file mode 100644 index 0000000000..1175fdc0de --- /dev/null +++ b/build/esm/tests/articulation_tests.js @@ -0,0 +1,424 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Articulation } from '../src/articulation.js'; +import { Beam } from '../src/beam.js'; +import { Flow } from '../src/flow.js'; +import { Font } from '../src/font.js'; +import { Formatter } from '../src/formatter.js'; +import { ModifierPosition } from '../src/modifier.js'; +import { Stave } from '../src/stave.js'; +import { Barline } from '../src/stavebarline.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Stem } from '../src/stem.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { Voice } from '../src/voice.js'; +const ArticulationTests = { + Start() { + QUnit.module('Articulation'); + const run = VexFlowTests.runTests; + run('Articulation - Vertical Placement', verticalPlacement); + run('Articulation - Vertical Placement (Glyph codes)', verticalPlacement2); + run('Articulation - Staccato/Staccatissimo', drawArticulations, { sym1: 'a.', sym2: 'av' }); + run('Articulation - Accent/Tenuto', drawArticulations, { sym1: 'a>', sym2: 'a-' }); + run('Articulation - Marcato/L.H. Pizzicato', drawArticulations, { sym1: 'a^', sym2: 'a+' }); + run('Articulation - Snap Pizzicato/Fermata', drawArticulations, { sym1: 'ao', sym2: 'ao' }); + run('Articulation - Up-stroke/Down-Stroke', drawArticulations, { sym1: 'a|', sym2: 'am' }); + run('Articulation - Fermata Above/Below', drawFermata, { sym1: 'a@a', sym2: 'a@u' }); + run('Articulation - Fermata Short Above/Below', drawFermata, { sym1: 'a@as', sym2: 'a@us' }); + run('Articulation - Fermata Long Above/Below', drawFermata, { sym1: 'a@al', sym2: 'a@ul' }); + run('Articulation - Fermata Very Long Above/Below', drawFermata, { sym1: 'a@avl', sym2: 'a@uvl' }); + run('Articulation - Inline/Multiple', drawArticulations2, { sym1: 'a.', sym2: 'a.' }); + run('TabNote Articulation', tabNotes, { sym1: 'a.', sym2: 'a.' }); + }, +}; +function drawArticulations(options) { + const sym1 = options.params.sym1; + const sym2 = options.params.sym2; + const width = 125 - Stave.defaultPadding; + const f = VexFlowTests.makeFactory(options, 675, 195); + const ctx = f.getContext(); + options.assert.expect(0); + let x = 10; + const y = 30; + const score = f.EasyScore(); + const formatAndDrawToWidth = (x, y, width, notes, barline) => { + const voices = [score.voice(notes, { time: '4/4' })]; + const formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width); + formatter.format(voices, nwidth); + const stave = f + .Stave({ x, y, width: nwidth + Stave.defaultPadding }) + .setEndBarType(barline) + .setContext(ctx) + .draw(); + voices.forEach((voice) => voice.draw(ctx, stave)); + return stave.getWidth(); + }; + const notesBar1 = [ + f.StaveNote({ keys: ['a/3'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + ]; + notesBar1[0].addModifier(new Articulation(sym1).setPosition(4), 0); + notesBar1[1].addModifier(new Articulation(sym1).setPosition(4), 0); + notesBar1[2].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar1[3].addModifier(new Articulation(sym1).setPosition(3), 0); + x += formatAndDrawToWidth(x, y, width, notesBar1, Barline.type.NONE); + const notesBar2 = [ + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + notesBar2[0].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar2[1].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar2[2].addModifier(new Articulation(sym1).setPosition(4), 0); + notesBar2[3].addModifier(new Articulation(sym1).setPosition(4), 0); + x += formatAndDrawToWidth(x, y, width, notesBar2, Barline.type.DOUBLE); + const notesBar3 = [ + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + ]; + notesBar3[0].addModifier(new Articulation(sym2).setPosition(4), 0); + notesBar3[1].addModifier(new Articulation(sym2).setPosition(4), 0); + notesBar3[2].addModifier(new Articulation(sym2).setPosition(3), 0); + notesBar3[3].addModifier(new Articulation(sym2).setPosition(3), 0); + x += formatAndDrawToWidth(x, y, width, notesBar3, Barline.type.NONE); + const notesBar4 = [ + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + notesBar4[0].addModifier(new Articulation(sym2).setPosition(3), 0); + notesBar4[1].addModifier(new Articulation(sym2).setPosition(3), 0); + notesBar4[2].addModifier(new Articulation(sym2).setPosition(4), 0); + notesBar4[3].addModifier(new Articulation(sym2).setPosition(4), 0); + formatAndDrawToWidth(x, y, width, notesBar4, Barline.type.END); +} +function drawFermata(options) { + const sym1 = options.params.sym1; + const sym2 = options.params.sym2; + const f = VexFlowTests.makeFactory(options, 400, 195); + const ctx = f.getContext(); + const score = f.EasyScore(); + const width = 150 - Stave.defaultPadding; + let x = 50; + const y = 30; + const formatAndDrawToWidth = (x, y, width, notes, barline) => { + const voices = [score.voice(notes, { time: '4/4' })]; + const formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width); + formatter.format(voices, nwidth); + const stave = f + .Stave({ x, y, width: nwidth + Stave.defaultPadding }) + .setEndBarType(barline) + .setContext(ctx) + .draw(); + voices.forEach((voice) => voice.draw(ctx, stave)); + return stave.getWidth(); + }; + options.assert.expect(0); + const notesBar1 = [ + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }), + ]; + notesBar1[0].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar1[1].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar1[2].addModifier(new Articulation(sym2).setPosition(4), 0); + notesBar1[3].addModifier(new Articulation(sym2).setPosition(4), 0); + x += formatAndDrawToWidth(x, y, width, notesBar1, Barline.type.NONE); + const notesBar2 = [ + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: 1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + notesBar2[0].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar2[1].addModifier(new Articulation(sym1).setPosition(3), 0); + notesBar2[2].addModifier(new Articulation(sym2).setPosition(4), 0); + notesBar2[3].addModifier(new Articulation(sym2).setPosition(4), 0); + formatAndDrawToWidth(x, y, width, notesBar2, Barline.type.DOUBLE); +} +function verticalPlacement(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const staveNote = (noteStruct) => new StaveNote(noteStruct); + const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, ' Annotation Placement'); +} +function verticalPlacement2(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const staveNote = (noteStruct) => new StaveNote(noteStruct); + const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); + const notes = [ + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new Articulation('fermataBelow'), 0) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('articTenutoBelow'), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('fermataShortBelow'), 0) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('articTenutoBelow'), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new Articulation('fermataLongBelow'), 0) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('articTenutoBelow'), 0), + staveNote({ keys: ['f/4'], duration: 'q' }) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('articTenutoBelow'), 0) + .addModifier(new Articulation('fermataVeryShortBelow'), 0), + staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('articTenutoBelow'), 0) + .addModifier(new Articulation('fermataVeryLongBelow'), 0), + staveNote({ keys: ['c/5'], duration: 'q' }) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW).setBetweenLines(), 0) + .addModifier(new Articulation('articTenutoBelow').setBetweenLines(), 0) + .addModifier(new Articulation('fermataBelow'), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('fermataAbove'), 0) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('articTenutoAbove'), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new Articulation('fermataShortAbove'), 0) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('articTenutoAbove'), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('fermataLongAbove'), 0) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('articTenutoAbove'), 0), + staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('articTenutoAbove'), 0) + .addModifier(new Articulation('fermataVeryShortAbove'), 0), + staveNote({ keys: ['f/5'], duration: 'q' }) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('articTenutoAbove'), 0) + .addModifier(new Articulation('fermataVeryLongAbove'), 0), + staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) + .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE).setBetweenLines(), 0) + .addModifier(new Articulation('articTenutoAbove').setBetweenLines(), 0) + .addModifier(new Articulation('fermataAbove'), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, ' Annotation Placement (Glyph codes)'); +} +function drawArticulations2(options) { + options.assert.expect(0); + const scale = 0.8; + const f = VexFlowTests.makeFactory(options, 1500, 195); + const ctx = f.getContext(); + ctx.scale(scale, scale); + const stave1 = new Stave(10, 50, 500).setContext(ctx).draw(); + const notesBar1 = [ + f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['b/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['c/6'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['d/6'], duration: '16', stem_direction: -1 }), + ]; + let i; + for (i = 0; i < 16; i++) { + notesBar1[i].addModifier(new Articulation('a.').setPosition(4), 0); + notesBar1[i].addModifier(new Articulation('a>').setPosition(4), 0); + if (i === 15) { + notesBar1[i].addModifier(new Articulation('a@u').setPosition(4), 0); + } + } + const beam1 = new Beam(notesBar1.slice(0, 8)); + const beam2 = new Beam(notesBar1.slice(8, 16)); + Formatter.FormatAndDraw(ctx, stave1, notesBar1); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + const stave2 = new Stave(510, 50, 500).setContext(ctx).draw(); + const notesBar2 = [ + f.StaveNote({ keys: ['f/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['g/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['a/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['b/3'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }), + f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }), + f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }), + ]; + for (i = 0; i < 16; i++) { + notesBar2[i].addModifier(new Articulation('a-').setPosition(3), 0); + notesBar2[i].addModifier(new Articulation('a^').setPosition(3), 0); + if (i === 15) { + notesBar2[i].addModifier(new Articulation('a@u').setPosition(4), 0); + } + } + const beam3 = new Beam(notesBar2.slice(0, 8)); + const beam4 = new Beam(notesBar2.slice(8, 16)); + Formatter.FormatAndDraw(ctx, stave2, notesBar2); + beam3.setContext(ctx).draw(); + beam4.setContext(ctx).draw(); + const stave3 = new Stave(1010, 50, 100).setContext(ctx).draw(); + const notesBar3 = [f.StaveNote({ keys: ['c/4'], duration: 'w', stem_direction: 1 })]; + notesBar3[0].addModifier(new Articulation('a-').setPosition(3), 0); + notesBar3[0].addModifier(new Articulation('a>').setPosition(3), 0); + notesBar3[0].addModifier(new Articulation('a@a').setPosition(3), 0); + Formatter.FormatAndDraw(ctx, stave3, notesBar3); + const stave4 = new Stave(1110, 50, 250).setContext(ctx).draw(); + const notesBar4 = [ + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), + f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), + ]; + for (i = 0; i < 4; i++) { + let position1 = 3; + if (i > 1) { + position1 = 4; + } + notesBar4[i].addModifier(new Articulation('a-').setPosition(position1), 0); + } + Formatter.FormatAndDraw(ctx, stave4, notesBar4); +} +function tabNotes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt ' + Font.SANS_SERIF; + const stave = new TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '8', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }, + ]; + const notes1 = specs.map((noteSpec) => { + const tabNote = new TabNote(noteSpec); + tabNote.render_options.draw_stem = true; + return tabNote; + }); + const notes2 = specs.map((noteSpec) => { + const tabNote = new TabNote(noteSpec); + tabNote.render_options.draw_stem = true; + tabNote.setStemDirection(-1); + return tabNote; + }); + const notes3 = specs.map((noteSpec) => new TabNote(noteSpec)); + notes1[0].addModifier(new Articulation('a>').setPosition(3), 0); + notes1[1].addModifier(new Articulation('a>').setPosition(4), 0); + notes1[2].addModifier(new Articulation('a.').setPosition(3), 0); + notes1[3].addModifier(new Articulation('a.').setPosition(4), 0); + notes2[0].addModifier(new Articulation('a>').setPosition(3), 0); + notes2[1].addModifier(new Articulation('a>').setPosition(4), 0); + notes2[2].addModifier(new Articulation('a.').setPosition(3), 0); + notes2[3].addModifier(new Articulation('a.').setPosition(4), 0); + notes3[0].addModifier(new Articulation('a>').setPosition(3), 0); + notes3[1].addModifier(new Articulation('a>').setPosition(4), 0); + notes3[2].addModifier(new Articulation('a.').setPosition(3), 0); + notes3[3].addModifier(new Articulation('a.').setPosition(4), 0); + const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.SOFT); + voice.addTickables(notes1); + voice.addTickables(notes2); + voice.addTickables(notes3); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +VexFlowTests.register(ArticulationTests); +export { ArticulationTests }; diff --git a/build/esm/tests/auto_beam_formatting_tests.js b/build/esm/tests/auto_beam_formatting_tests.js new file mode 100644 index 0000000000..2bf452d46b --- /dev/null +++ b/build/esm/tests/auto_beam_formatting_tests.js @@ -0,0 +1,551 @@ +import { concat, VexFlowTests } from './vexflow_test_helpers.js'; +import { Beam } from '../src/beam.js'; +import { Fraction } from '../src/fraction.js'; +import { Stave } from '../src/stave.js'; +import { Stem } from '../src/stem.js'; +const AutoBeamFormattingTests = { + Start() { + QUnit.module('Auto-Beaming'); + const run = VexFlowTests.runTests; + run('Simple Auto Beaming', simpleAuto); + run('Auto Beaming With Overflow Group', simpleAutoWithOverflowGroup); + run('Even Group Stem Directions', evenGroupStemDirections); + run('Odd Group Stem Directions', oddGroupStemDirections); + run('Odd Beam Groups Auto Beaming', oddBeamGroups); + run('More Simple Auto Beaming 0', moreSimple0); + run('More Simple Auto Beaming 1', moreSimple1); + run('Beam Across All Rests', beamAcrossAllRests); + run('Beam Across All Rests with Stemlets', beamAcrossAllRestsWithStemlets); + run('Break Beams on Middle Rests Only', beamAcrossMiddleRests); + run('Break Beams on Rest', breakBeamsOnRests); + run('Maintain Stem Directions', maintainStemDirections); + run('Maintain Stem Directions - Beam Over Rests', maintainStemDirectionsBeamAcrossRests); + run('Beat group with unbeamable note - 2/2', groupWithUnbeamableNote); + run('Offset beat grouping - 6/8 ', groupWithUnbeamableNote1); + run('Odd Time - Guessing Default Beam Groups', autoOddBeamGroups); + run('Custom Beam Groups', customBeamGroups); + run('Simple Tuplet Auto Beaming', simpleTuplets); + run('More Simple Tuplet Auto Beaming', moreSimpleTuplets); + run('More Automatic Beaming', moreBeaming); + run('Automatic Beaming 4/4 with 3, 3, 2 Pattern', beamingWithSeveralGroups1); + run('Automatic Beaming 4/4 with 3, 3, 2 Pattern and Overflow', beamingWithSeveralGroupsOverflow); + run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 2 Overflows', beamingWithSeveralGroupsOverflow2); + run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 3 Overflows', beamingWithSeveralGroupsOverflow3); + run('Duration-Based Secondary Beam Breaks', secondaryBreaks1); + run('Duration-Based Secondary Beam Breaks 2', secondaryBreaks2); + run('Flat Beams Up', flatBeamsUp); + run('Flat Beams Down', flatBeamsDown); + run('Flat Beams Mixed Direction', flatBeamsMixed); + run('Flat Beams Up (uniform)', flatBeamsUpUniform); + run('Flat Beams Down (uniform)', flatBeamsDownUniform); + run('Flat Beams Up Bounds', flatBeamsUpBounds); + run('Flat Beams Down Bounds', flatBeamsDownBounds); + }, +}; +function simpleAuto(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5/8, e5, d5, c5/16, c5, d5/8, e5, f5, f5/32, f5, f5, f5'), { time: '4/4' }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function simpleAutoWithOverflowGroup(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5/4., e5/8, d5/8, d5/16, c5/16, c5/16, c5/16, f5/16, f5/32, f5/32'), { + time: '4/4', + }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function evenGroupStemDirections(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('a4/8, b4, g4, c5, f4, d5, e4, e5, b4, b4, g4, d5'), { time: '6/4' }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.equal(beams[0].getStemDirection(), Stem.UP); + options.assert.equal(beams[1].getStemDirection(), Stem.UP); + options.assert.equal(beams[2].getStemDirection(), Stem.UP); + options.assert.equal(beams[3].getStemDirection(), Stem.UP); + options.assert.equal(beams[4].getStemDirection(), Stem.DOWN); + options.assert.equal(beams[5].getStemDirection(), Stem.DOWN); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function oddGroupStemDirections(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('g4/8, b4, d5, c5, f4, d5, e4, g5, g4, b4, g4, d5, a4, c5, a4'), { + time: '15/8', + }); + const groups = [new Fraction(3, 8)]; + const beams = Beam.applyAndGetBeams(voice, undefined, groups); + options.assert.equal(beams[0].getStemDirection(), Stem.DOWN, 'Notes are equidistant from middle line'); + options.assert.equal(beams[1].getStemDirection(), Stem.DOWN); + options.assert.equal(beams[2].getStemDirection(), Stem.UP); + options.assert.equal(beams[3].getStemDirection(), Stem.DOWN, 'Notes are equidistant from middle line'); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beaming Applicator Test'); +} +function oddBeamGroups(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5, e5, d5, c5, c5, d5, e5, f5, f5, f4, f3, f5/16, f5'), { time: '6/4' }); + const groups = [new Fraction(2, 8), new Fraction(3, 8), new Fraction(1, 8)]; + const beams = Beam.applyAndGetBeams(voice, undefined, groups); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreSimple0(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4, c5, g5, a5, c4, d4, a5'), { time: '4/4' }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreSimple1(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function breakBeamsOnRests(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + beam_rests: false, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamAcrossAllRestsWithStemlets(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + show_stemlets: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamAcrossAllRests(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamAcrossMiddleRests(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + beam_middle_only: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function maintainStemDirections(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'b4/16, b4, b4[stem="down"], b4/r', + 'b4/r, b4[stem="down"], b4, b4', + 'b4[stem="down"], b4[stem="down"], b4, b4/r', + 'b4/32, b4[stem="down"], b4[stem="down"], b4, b4/16/r, b4', + ].join(', '), { stem: 'up' }), { time: '4/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + beam_rests: false, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function maintainStemDirectionsBeamAcrossRests(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'b4/16, b4, b4[stem="down"], b4/r', + 'b4/r, b4[stem="down"], b4, b4', + 'b4[stem="down"], b4[stem="down"], b4, b4/r', + 'b4/32, b4[stem="down"], b4[stem="down"], b4, b4/16/r, b4', + ].join(', '), { stem: 'up' }), { time: '4/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + beam_rests: true, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function groupWithUnbeamableNote(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave().addTimeSignature('2/4'); + const score = f.EasyScore(); + const voice = score.voice(score.notes('b4/16, b4, b4/4, b4/16, b4'), { time: '2/4' }); + const beams = Beam.generateBeams(voice.getTickables(), { + groups: [new Fraction(2, 2)], + beam_rests: false, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function groupWithUnbeamableNote1(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave().addTimeSignature('6/8'); + const score = f.EasyScore(); + const voice = score.voice(score.notes('b4/4, b4/4, b4/8, b4/8'), { time: '6/8' }); + const beams = Beam.generateBeams(voice.getTickables(), { + groups: [new Fraction(3, 8)], + beam_rests: false, + maintain_stem_directions: true, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function autoOddBeamGroups(options) { + const f = VexFlowTests.makeFactory(options, 450, 400); + const score = f.EasyScore(); + const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4'); + const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' }); + const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8'); + const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' }); + const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16'); + const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { + time: '13/16', + }); + const beams = [ + ...Beam.applyAndGetBeams(voice1, undefined, Beam.getDefaultBeamGroups('5/4')), + ...Beam.applyAndGetBeams(voice2, undefined, Beam.getDefaultBeamGroups('5/8')), + ...Beam.applyAndGetBeams(voice3, undefined, Beam.getDefaultBeamGroups('13/16')), + ]; + f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3); + Stave.formatBegModifiers([stave1, stave2, stave3]); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function customBeamGroups(options) { + const f = VexFlowTests.makeFactory(options, 450, 400); + const score = f.EasyScore(); + const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4'); + const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' }); + const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8'); + const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' }); + const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16'); + const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { time: '13/16' }); + const group1 = [new Fraction(5, 8)]; + const group2 = [new Fraction(3, 8), new Fraction(2, 8)]; + const group3 = [new Fraction(7, 16), new Fraction(2, 16), new Fraction(4, 16)]; + const beams = [ + ...Beam.applyAndGetBeams(voice1, undefined, group1), + ...Beam.applyAndGetBeams(voice2, undefined, group2), + ...Beam.applyAndGetBeams(voice3, undefined, group3), + ]; + f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3); + Stave.formatBegModifiers([stave1, stave2, stave3]); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function createShortcuts(score) { + return { + notes: score.notes.bind(score), + tuplet: score.tuplet.bind(score), + }; +} +function simpleTuplets(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + ...tuplet(notes('c4/8, g4, c5')), + ...notes('g5/8, a5'), + ...tuplet(notes('a5/16, (c5 e5), a5, d5, a5'), { ratioed: false, notes_occupied: 4 }), + ], { time: '3/4' }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreSimpleTuplets(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([...tuplet(notes('d4/4, g4, c5')), ...notes('g5/16, a5, a5, (c5 e5)')], { time: '3/4' }); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function moreBeaming(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4/4, c5/8., g5/16, a5/4, a5/16, (c5 e5)/16, a5/8'), { time: '9/8' }); + const beams = Beam.applyAndGetBeams(voice, undefined, Beam.getDefaultBeamGroups('9/8')); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroups1(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4/4, c5/8, g5, a5, a5, f5'), { time: '4/4' }); + const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(3, 8), new Fraction(2, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroupsOverflow(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/8, g4/4., c5/8, g5, a5, a5'), { time: '4/4' }); + const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(3, 8), new Fraction(2, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroupsOverflow2(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/16, g4/2, f4/16, c5/8, a4/16, c4/16, g4/8, b4, c5, g5, f5, e5, c5, a4/4'), { + time: '8/4', + }); + const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(2, 8), new Fraction(3, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function beamingWithSeveralGroupsOverflow3(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c4/16, g4/1, f4/16, c5/8, g5, f5, e5, c5, a4/4'), { time: '8/4' }); + const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(2, 8), new Fraction(3, 8)]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Auto Beam Applicator Test'); +} +function secondaryBreaks1(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'f5/32, f5, f5, f5, f5/16., f5/32', + 'f5/16, f5/8, f5/16', + 'f5/32, f5/16., f5., f5/32', + 'f5/16., f5/32, f5, f5/16.', + ].join(','))); + const beams = Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Duration-Based Secondary Breaks Test'); +} +function secondaryBreaks2(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + tuplet(notes('e5/16, f5, f5')), + tuplet(notes('f5/16, f5, c5')), + notes('a4/16., f4/32'), + tuplet(notes('d4/16, d4, d4')), + tuplet(notes('a5/8, (e5 g5), a5')), + tuplet(notes('f5/16, f5, f5')), + tuplet(notes('f5/16, f5, a4')), + ].reduce(concat)); + const beams = Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Duration-Based Secondary Breaks Test'); +} +function flatBeamsUp(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + tuplet(notes('c4/8, g4, f5')), + notes('d5/8'), + tuplet(notes('c5/16, (c4 e4 g4), f4')), + notes('d5/8, e5, c4, f5/32, f5, f5, f5'), + ].reduce(concat)); + const beams = Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + stem_direction: 1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Up Test'); +} +function flatBeamsDown(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, g5, a6/32, a6, a6, g4/64, g4')); + const beams = Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + stem_direction: -1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Down Test'); +} +function flatBeamsMixed(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/64, d5, e5, c5, f5, c5, a5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, c4, a4/32, a4, a4, g4/64, g4')); + const beams = Beam.generateBeams(voice.getTickables(), { flat_beams: true }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Mixed Direction Test'); +} +function flatBeamsUpUniform(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + ...tuplet(notes('c4/8, g4, g5')), + ...notes('d5/8, c5/16, (c4 e4 g4), d5/8, e5, c4, f5/32, f5, f5, f5'), + ]); + const beams = Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 50, + stem_direction: 1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Up (uniform) Test'); +} +function flatBeamsDownUniform(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (e4 g4 b4)/16, e5, d5/8, e5/8, g5/8, a6/32, a6, a6, g4/64, g4')); + const beams = Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 155, + stem_direction: -1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Down (uniform) Test'); +} +function flatBeamsUpBounds(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const { notes, tuplet } = createShortcuts(score); + const voice = score.voice([ + ...tuplet(notes('c4/8, g4/8, g5/8')), + ...notes('d5/8, c5/16, (c4 e4 g4)/16, d5/8, e5/8, c4/8, f5/32, f5/32, f5/32, f5/32'), + ]); + const beams = Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 60, + stem_direction: 1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Up (uniform) Test'); +} +function flatBeamsDownBounds(options) { + const f = VexFlowTests.makeFactory(options, 450, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'g5/8, a6/32, a6/32, a6/32, g4/64, g4/64', + 'c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, a5/8', + 'g5/8, (e4 g4 b4)/16, e5/16', + 'd5/8, e5/8', + ].join(','), { stem: 'down' })); + const beams = Beam.generateBeams(voice.getTickables(), { + flat_beams: true, + flat_beam_offset: 145, + stem_direction: -1, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'Flat Beams Down (uniform) Test'); +} +VexFlowTests.register(AutoBeamFormattingTests); +export { AutoBeamFormattingTests }; diff --git a/build/esm/tests/bach_tests.js b/build/esm/tests/bach_tests.js new file mode 100644 index 0000000000..9379a49189 --- /dev/null +++ b/build/esm/tests/bach_tests.js @@ -0,0 +1,335 @@ +import { concat, VexFlowTests } from './vexflow_test_helpers.js'; +import { BarlineType, Registry } from '../src/index.js'; +const BachDemoTests = { + Start() { + QUnit.module('Bach Demo'); + VexFlowTests.runTests('Minuet 1', minuet1); + }, +}; +function minuet1(options) { + const registry = new Registry(); + Registry.enableDefaultRegistry(registry); + const id = (id) => registry.getElementById(id); + const f = VexFlowTests.makeFactory(options, 1100, 900); + const score = f.EasyScore({ throwOnError: true }); + const voice = score.voice.bind(score); + const notes = score.notes.bind(score); + const beam = score.beam.bind(score); + let x = 120; + let y = 80; + function appendSystem(width) { + const system = f.System({ x, y, width, spaceBetweenStaves: 10 }); + x += width; + return system; + } + score.set({ time: '3/4' }); + let system = appendSystem(220); + system + .addStave({ + voices: [ + voice([notes('D5/q[id="m1a"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(concat)), + voice([f.TextDynamics({ text: 'p', duration: 'h', dots: 1, line: 9 })]), + ], + }) + .addClef('treble') + .addKeySignature('G') + .addTimeSignature('3/4') + .setTempo({ name: 'Allegretto', duration: 'h', dots: 1, bpm: 66 }, -30); + system + .addStave({ voices: [voice(notes('(G3 B3 D4)/h, A3/q', { clef: 'bass' }))] }) + .addClef('bass') + .addKeySignature('G') + .addTimeSignature('3/4'); + system.addConnector('brace'); + system.addConnector('singleRight'); + system.addConnector('singleLeft'); + id('m1a').addModifier(f.Fingering({ number: '5' }), 0); + system = appendSystem(150); + system.addStave({ voices: [voice(notes('D5/q[id="m2a"], G4[id="m2b"], G4[id="m2c"]'))] }); + system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m2a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m2b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m2c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + f.Curve({ + from: id('m1a'), + to: id('m2a'), + options: { + cps: [ + { x: 0, y: 40 }, + { x: 0, y: 40 }, + ], + }, + }); + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('E5/q[id="m3a"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(concat))], + }); + id('m3a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + system = appendSystem(150); + system.addStave({ voices: [voice(notes('G5/q[id="m4a"], G4[id="m4b"], G4[id="m4c"]'))] }); + system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m4a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m4b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m4c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + f.Curve({ + from: id('m3a'), + to: id('m4a'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + }, + }); + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('C5/q[id="m5a"]'), beam(notes('D5/8, C5, B4, A4', { stem: 'down' }))].reduce(concat))], + }); + id('m5a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + system.addStave({ voices: [voice(notes('A3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('B4/q'), beam(notes('C5/8, B4, A4, G4[id="m6a"]', { stem: 'up' }))].reduce(concat))], + }); + system.addStave({ voices: [voice(notes('G3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + f.Curve({ + from: id('m5a'), + to: id('m6a'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + invert: true, + position_end: 'nearTop', + y_shift: 20, + }, + }); + x = 20; + y += 230; + system = appendSystem(220); + system + .addStave({ + voices: [ + voice([notes('F4/q[id="m7a"]'), beam(notes('G4/8[id="m7b"], A4, B4, G4', { stem: 'up' }))].reduce(concat)), + ], + }) + .addClef('treble') + .addKeySignature('G'); + system + .addStave({ voices: [voice(notes('D4/q, B3[id="m7c"], G3', { clef: 'bass' }))] }) + .addClef('bass') + .addKeySignature('G'); + system.addConnector('brace'); + system.addConnector('singleRight'); + system.addConnector('singleLeft'); + id('m7a').addModifier(f.Fingering({ number: '2', position: 'below' }), 0); + id('m7b').addModifier(f.Fingering({ number: '1' }), 0); + id('m7c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + system = appendSystem(180); + const grace = f.GraceNote({ keys: ['d/3'], clef: 'bass', duration: '4', slash: false }); + system.addStave({ voices: [voice(notes('A4/h.[id="m8c"]'))] }); + system.addStave({ + voices: [ + score + .set({ clef: 'bass' }) + .voice([notes('D4/q[id="m8a"]'), beam(notes('D3/8, C4, B3[id="m8b"], A3', { stem: 'down' }))].reduce(concat)), + ], + }); + system.addConnector('singleRight'); + id('m8b').addModifier(f.Fingering({ number: '1', position: 'above' }), 0); + id('m8c').addModifier(f.GraceNoteGroup({ notes: [grace] }), 0); + f.Curve({ + from: id('m7a'), + to: id('m8c'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + invert: true, + position: 'nearTop', + position_end: 'nearTop', + }, + }); + f.StaveTie({ from: grace, to: id('m8c') }); + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('D5/q[id="m9a"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(concat)), + ], + }); + system.addStave({ voices: [voice(notes('B3/h, A3/q', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m9a').addModifier(f.Fingering({ number: '5' }), 0); + system = appendSystem(170); + system.addStave({ voices: [voice(notes('D5/q[id="m10a"], G4[id="m10b"], G4[id="m10c"]'))] }); + system.addStave({ voices: [voice(notes('G3/q[id="m10d"], B3, G3', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m10a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m10b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m10c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m10d').addModifier(f.Fingering({ number: '4' }), 0); + f.Curve({ + from: id('m9a'), + to: id('m10a'), + options: { + cps: [ + { x: 0, y: 40 }, + { x: 0, y: 40 }, + ], + }, + }); + system = appendSystem(150); + system.addStave({ + voices: [voice([notes('E5/q[id="m11a"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(concat))], + }); + id('m11a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + system = appendSystem(170); + system.addStave({ voices: [voice(notes('G5/q[id="m12a"], G4[id="m12b"], G4[id="m12c"]'))] }); + system.addStave({ + voices: [ + score + .set({ clef: 'bass' }) + .voice([notes('B3/q[id="m12d"]'), beam(notes('C4/8, B3, A3, G3[id="m12e"]', { stem: 'down' }))].reduce(concat)), + ], + }); + system.addConnector('singleRight'); + id('m12a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); + id('m12b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m12c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); + id('m12d').addModifier(f.Fingering({ number: '2', position: 'above' }), 0); + id('m12e').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + f.Curve({ + from: id('m11a'), + to: id('m12a'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 20 }, + ], + }, + }); + x = 20; + y += 230; + system = appendSystem(220); + system + .addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('c5/q[id="m13a"]'), beam(notes('d5/8, c5, b4, a4', { stem: 'down' }))].reduce(concat)), + ], + }) + .addClef('treble') + .addKeySignature('G'); + system + .addStave({ voices: [voice(notes('a3/h[id="m13b"], f3/q[id="m13c"]', { clef: 'bass' }))] }) + .addClef('bass') + .addKeySignature('G'); + system.addConnector('brace'); + system.addConnector('singleRight'); + system.addConnector('singleLeft'); + id('m13a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + id('m13b').addModifier(f.Fingering({ number: '1' }), 0); + id('m13c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('B4/q'), beam(notes('C5/8, b4, a4, g4', { stem: 'up' }))].reduce(concat)), + ], + }); + system.addStave({ voices: [voice(notes('g3/h[id="m14a"], b3/q[id="m14b"]', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m14a').addModifier(f.Fingering({ number: '2' }), 0); + id('m14b').addModifier(f.Fingering({ number: '1' }), 0); + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('a4/q'), beam(notes('b4/8, a4, g4, f4[id="m15a"]', { stem: 'up' }))].reduce(concat)), + ], + }); + system.addStave({ voices: [voice(notes('c4/q[id="m15b"], d4, d3', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m15a').addModifier(f.Fingering({ number: '2' }), 0); + id('m15b').addModifier(f.Fingering({ number: '2' }), 0); + system = appendSystem(130); + system + .addStave({ + voices: [score.set({ clef: 'treble' }).voice([notes('g4/h.[id="m16a"]')].reduce(concat))], + }) + .setEndBarType(BarlineType.REPEAT_END); + system + .addStave({ voices: [voice(notes('g3/h[id="m16b"], g2/q', { clef: 'bass' }))] }) + .setEndBarType(BarlineType.REPEAT_END); + system.addConnector('boldDoubleRight'); + id('m16a').addModifier(f.Fingering({ number: '1' }), 0); + id('m16b').addModifier(f.Fingering({ number: '1' }), 0); + f.Curve({ + from: id('m13a'), + to: id('m16a'), + options: { + cps: [ + { x: 0, y: 50 }, + { x: 0, y: 20 }, + ], + invert: true, + position_end: 'nearTop', + }, + }); + system = appendSystem(180); + system + .addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('b5/q[id="m17a"]'), beam(notes('g5/8, a5, b5, g5', { stem: 'down' }))].reduce(concat)), + voice([f.TextDynamics({ text: 'mf', duration: 'h', dots: 1, line: 10 })]), + ], + }) + .setBegBarType(BarlineType.REPEAT_BEGIN); + system.addStave({ voices: [voice(notes('g3/h.', { clef: 'bass' }))] }).setBegBarType(BarlineType.REPEAT_BEGIN); + system.addConnector('boldDoubleLeft'); + system.addConnector('singleRight'); + id('m17a').addModifier(f.Fingering({ number: '5', position: 'above' }), 0); + system = appendSystem(180); + system.addStave({ + voices: [ + score + .set({ clef: 'treble' }) + .voice([notes('a5/q[id="m18a"]'), beam(notes('d5/8, e5, f5, d5[id="m18b"]', { stem: 'down' }))].reduce(concat)), + ], + }); + system.addStave({ voices: [voice(notes('f3/h.', { clef: 'bass' }))] }); + system.addConnector('singleRight'); + id('m18a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); + f.Curve({ + from: id('m17a'), + to: id('m18b'), + options: { + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 30 }, + ], + }, + }); + f.draw(); + Registry.disableDefaultRegistry(); + options.assert.ok(true, 'Bach Minuet 1'); +} +VexFlowTests.register(BachDemoTests); +export { BachDemoTests }; diff --git a/build/esm/tests/barline_tests.js b/build/esm/tests/barline_tests.js new file mode 100644 index 0000000000..3a0f880365 --- /dev/null +++ b/build/esm/tests/barline_tests.js @@ -0,0 +1,52 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Barline, BarlineType } from '../src/stavebarline.js'; +const BarlineTests = { + Start() { + QUnit.module('Barline'); + QUnit.test('Enums', enums); + const run = VexFlowTests.runTests; + run('Simple BarNotes', simple); + run('Style BarNotes', style); + }, +}; +function enums(assert) { + assert.equal(Barline.type, BarlineType); + const a = BarlineType['DOUBLE']; + const b = BarlineType.DOUBLE; + assert.equal(a, b); +} +function simple(options) { + const f = VexFlowTests.makeFactory(options, 380, 160); + const stave = f.Stave(); + const notes = [ + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }), + f.BarNote({ type: 'single' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]; + const voice = f.Voice().addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Simple Test'); +} +function style(options) { + const f = VexFlowTests.makeFactory(options, 380, 160); + const stave = f.Stave(); + const notes = [ + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }), + f.BarNote({ type: 'single' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]; + notes[1].setStyle({ shadowBlur: 15, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + const voice = f.Voice().addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Style'); +} +VexFlowTests.register(BarlineTests); +export { BarlineTests }; diff --git a/build/esm/tests/beam_tests.js b/build/esm/tests/beam_tests.js new file mode 100644 index 0000000000..fe98072e52 --- /dev/null +++ b/build/esm/tests/beam_tests.js @@ -0,0 +1,651 @@ +import { concat, VexFlowTests } from './vexflow_test_helpers.js'; +import { AnnotationVerticalJustify, Beam, Dot, Font, FontStyle, FontWeight, Stem, Voice, } from '../src/index.js'; +const BeamTests = { + Start() { + QUnit.module('Beam'); + const run = VexFlowTests.runTests; + run('Simple Beam', simple); + run('Multi Beam', multi); + run('Sixteenth Beam', sixteenth); + run('Slopey Beam', slopey); + run('Auto-stemmed Beam', autoStem); + run('Mixed Beam 1', mixed); + run('Mixed Beam 2', mixed2); + run('Dotted Beam', dotted); + run('Partial Beam', partial); + run('Close Trade-offs Beam', tradeoffs); + run('Insane Beam', insane); + run('Lengthy Beam', lenghty); + run('Outlier Beam', outlier); + run('Break Secondary Beams', breakSecondaryBeams); + run('Partial Beam Direction', partialBeamDirection); + run('TabNote Beams Up', tabBeamsUp); + run('TabNote Beams Down', tabBeamsDown); + run('TabNote Auto Create Beams', autoTabBeams); + run('TabNote Beams Auto Stem', tabBeamsAutoStem); + run('Complex Beams with Annotations', complexWithAnnotation); + run('Complex Beams with Articulations', complexWithArticulation); + run('Complex Beams with Articulations two Staves', complexWithArticulation2); + }, +}; +function simple(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voice = score.voice([ + notes('(cb4 e#4 a4)/2'), + beam(notes('(cb4 e#4 a4)/8, (d4 f4 a4), (ebb4 g##4 b4), (f4 a4 c5)', { stem: 'up' })), + ].reduce(concat), { time: '2/2' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Simple Test'); +} +function multi(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([beam(notes('f5/8, e5, d5, c5', { stem: 'up' })), beam(notes('c5, d5, e5, f5', { stem: 'up' }))].reduce(concat)), + voice([beam(notes('f4/8, e4, d4, c4', { stem: 'down' })), beam(notes('c4/8, d4, e4, f4', { stem: 'down' }))].reduce(concat)), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Multi Test'); +} +function sixteenth(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([ + beam(notes('f5/16, f5, d5, c5', { stem: 'up' })), + beam(notes('c5/16, d5, f5, e5', { stem: 'up' })), + notes('f5/2', { stem: 'up' }), + ].reduce(concat)), + voice([ + beam(notes('f4/16, e4/16, d4/16, c4/16', { stem: 'down' })), + beam(notes('c4/16, d4/16, f4/16, e4/16', { stem: 'down' })), + notes('f4/2', { stem: 'down' }), + ].reduce(concat)), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Sixteenth Test'); +} +function breakSecondaryBeams(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([ + beam(notes('f5/16., f5/32, c5/16., d5/32, c5/16., d5/32', { stem: 'up' }), { secondaryBeamBreaks: [1, 3] }), + beam(notes('f5/16, e5, e5, e5, e5, e5', { stem: 'up' }), { secondaryBeamBreaks: [2] }), + ].reduce(concat), { time: '3/4' }), + voice([ + beam(notes('f4/32, d4, e4, c4, d4, c4, f4, d4, e4, c4, c4, d4', { stem: 'down' }), { + secondaryBeamBreaks: [3, 7], + }), + beam(notes('d4/16, f4, d4, e4, e4, e4', { stem: 'down' }), { secondaryBeamBreaks: [3] }), + ].reduce(concat), { time: '3/4' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Breaking Secondary Beams Test'); +} +function partialBeamDirection(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice.bind(score); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voices = [ + voice([ + beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' })), + beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'R' } }), + beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'L' } }), + ].reduce(concat), { time: '9/8' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Partial beam direction test'); +} +function slopey(options) { + const f = VexFlowTests.makeFactory(options, 350, 140); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const beam = score.beam.bind(score); + const notes = score.notes.bind(score); + const voice = score.voice([ + beam(notes('c4/8, f4/8, d5/8, g5/8', { stem: 'up' })), + beam(notes('d6/8, f5/8, d4/8, g3/8', { stem: 'up' })), + ].reduce(concat)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Slopey Test'); +} +function autoStem(options) { + const f = VexFlowTests.makeFactory(options, 350, 140); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('a4/8, b4/8, g4/8, c5/8, f4/8, d5/8, e4/8, e5/8, b4/8, b4/8, g4/8, d5/8'), { + time: '6/4', + }); + const notes = voice.getTickables(); + const beams = [ + f.Beam({ notes: notes.slice(0, 2), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(2, 4), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(4, 6), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(6, 8), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(8, 10), options: { autoStem: true } }), + f.Beam({ notes: notes.slice(10, 12), options: { autoStem: true } }), + ]; + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + const UP = Stem.UP; + const DOWN = Stem.DOWN; + options.assert.equal(beams[0].getStemDirection(), UP); + options.assert.equal(beams[1].getStemDirection(), UP); + options.assert.equal(beams[2].getStemDirection(), UP); + options.assert.equal(beams[3].getStemDirection(), UP); + options.assert.equal(beams[4].getStemDirection(), DOWN); + options.assert.equal(beams[5].getStemDirection(), DOWN); + f.draw(); + options.assert.ok(true, 'AutoStem Beam Test'); +} +function mixed(options) { + const f = VexFlowTests.makeFactory(options, 350, 140); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice1 = score.voice(score.notes('f5/8, d5/16, c5/16, c5/16, d5/16, e5/8, f5/8, d5/16, c5/16, c5/16, d5/16, e5/8', { stem: 'up' })); + const voice2 = score.voice(score.notes('f4/16, e4/8, d4/16, c4/16, d4/8, f4/16, f4/16, e4/8, d4/16, c4/16, d4/8, f4/16', { stem: 'down' })); + [ + [0, 4], + [4, 8], + [8, 12], + ].forEach((range) => f.Beam({ notes: voice1.getTickables().slice(range[0], range[1]) })); + [ + [0, 4], + [4, 8], + [8, 12], + ].forEach((range) => f.Beam({ notes: voice2.getTickables().slice(range[0], range[1]) })); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true, 'Multi Test'); +} +function mixed2(options) { + const f = VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('f5/32, d5/16, c5/32, c5/64, d5/128, e5/8, f5/16, d5/32, c5/64, c5/32, d5/16, e5/128', { + stem: 'up', + }), { time: '31/64' }); + const voice2 = score.voice(score.notes('f4/32, d4/16, c4/32, c4/64, d4/128, e4/8, f4/16, d4/32, c4/64, c4/32, d4/16, e4/128', { + stem: 'down', + }), { time: '31/64' }); + f.Beam({ notes: voice.getTickables().slice(0, 12) }); + f.Beam({ notes: voice2.getTickables().slice(0, 12) }); + f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); + f.draw(); + options.assert.ok(true, 'Multi Test'); +} +function dotted(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('d4/8, b3/8., a3/16, a3/8, b3/8., c4/16, d4/8, b3/8, a3/8., a3/16, b3/8., c4/16', { stem: 'up' }), { time: '6/4' }); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Beam({ notes: notes.slice(8, 12) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Dotted Test'); +} +function partial(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('d4/8, b3/32, c4/16., d4/16., e4/8, c4/64, c4/32, a3/8., b3/32., c4/8, e4/64, b3/16., b3/64, f4/8, e4/8, g4/64, e4/8'), { time: '89/64' }); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 3) }); + f.Beam({ notes: notes.slice(3, 9) }); + f.Beam({ notes: notes.slice(9, 13) }); + f.Beam({ notes: notes.slice(13, 17) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Partial Test'); +} +function tradeoffs(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave(); + const score = f.EasyScore(); + const voice = score.voice(score.notes('a4/8, b4/8, c4/8, d4/8, g4/8, a4/8, b4/8, c4/8', { stem: 'up' })); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Close Trade-offs Test'); +} +function insane(options) { + const f = VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes('g4/8, g5/8, c4/8, b5/8, g4/8[stem="down"], a5[stem="down"], b4[stem="down"], c4/8', { stem: 'up' })); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 7) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Insane Test'); +} +function lenghty(options) { + const f = VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.beam(score.notes('g4/8, g4, g4, a4', { stem: 'up' })), { time: '2/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Lengthy Test'); +} +function outlier(options) { + const f = VexFlowTests.makeFactory(options, 450, 180); + const stave = f.Stave({ y: 20 }); + const score = f.EasyScore(); + const voice = score.voice(score.notes([ + 'g4/8[stem="up"], f4[stem="up"], d5[stem="up"], e4[stem="up"]', + 'd5/8[stem="down"], d5[stem="down"], c5[stem="down"], d5[stem="down"]', + ].join())); + const notes = voice.getTickables(); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); + f.draw(); + options.assert.ok(true, 'Outlier Test'); +} +function tabBeamsUp(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const stave = f.TabStave({ y: 20 }); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + { positions: [{ str: 3, fret: 6 }], duration: '8' }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + return tabNote; + }); + f.Beam({ notes: notes.slice(1, 7) }); + f.Beam({ notes: notes.slice(8, 11) }); + f.Tuplet({ notes: notes.slice(8, 11), options: { ratioed: true } }); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'All objects have been drawn'); +} +function tabBeamsDown(options) { + const f = VexFlowTests.makeFactory(options, 600, 250); + const stave = f.TabStave({ options: { num_lines: 10 } }); + const specs = [ + { + stem_direction: -1, + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + stem_direction: -1, + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8dd', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + stem_direction: -1, + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' }, + { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_dots = true; + return tabNote; + }); + Dot.buildAndAttach([notes[1], notes[1]]); + f.Beam({ notes: notes.slice(1, 7) }); + f.Beam({ notes: notes.slice(8, 11) }); + f.Tuplet({ notes: notes.slice(8, 11), options: { location: -1 } }); + f.Tuplet({ notes: notes.slice(11, 14), options: { location: -1 } }); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'All objects have been drawn'); +} +function autoTabBeams(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const stave = f.TabStave(); + const specs = [ + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { positions: [{ str: 1, fret: 6 }], duration: '32' }, + { positions: [{ str: 1, fret: 6 }], duration: '32' }, + { positions: [{ str: 1, fret: 6 }], duration: '32' }, + { positions: [{ str: 6, fret: 6 }], duration: '32' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + { positions: [{ str: 6, fret: 6 }], duration: '16' }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_dots = true; + return tabNote; + }); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + const beams = Beam.applyAndGetBeams(voice, -1); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + beams.forEach((beam) => beam.setContext(f.getContext()).draw()); + options.assert.ok(true, 'All objects have been drawn'); +} +function tabBeamsAutoStem(options) { + const f = VexFlowTests.makeFactory(options, 600, 300); + const stave = f.TabStave(); + const specs = [ + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + stem_direction: -1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + stem_direction: 1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + stem_direction: -1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + stem_direction: 1, + }, + { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: 1 }, + { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 }, + { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 }, + { positions: [{ str: 6, fret: 6 }], duration: '32', stem_direction: -1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, + { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: -1 }, + ]; + const notes = specs.map((struct) => { + const tabNote = f.TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_dots = true; + return tabNote; + }); + f.Beam({ notes: notes.slice(0, 8), options: { autoStem: true } }); + f.Beam({ notes: notes.slice(8, 12), options: { autoStem: true } }); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'All objects have been drawn'); +} +function complexWithAnnotation(options) { + const factory = VexFlowTests.makeFactory(options, 500, 200); + const stave = factory.Stave({ y: 40 }); + const s1 = [ + { keys: ['e/4'], duration: '128', stem_direction: 1 }, + { keys: ['d/4'], duration: '16', stem_direction: 1 }, + { keys: ['e/4'], duration: '8', stem_direction: 1 }, + { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + ]; + const s2 = [ + { keys: ['e/5'], duration: '128', stem_direction: -1 }, + { keys: ['d/5'], duration: '16', stem_direction: -1 }, + { keys: ['e/5'], duration: '8', stem_direction: -1 }, + { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + ]; + const font = { + family: Font.SERIF, + size: 14, + weight: FontWeight.BOLD, + style: FontStyle.ITALIC, + }; + const notes1 = s1.map((struct) => factory + .StaveNote(struct) + .addModifier(factory.Annotation({ text: '1', vJustify: AnnotationVerticalJustify.TOP, font }), 0)); + const notes2 = s2.map((struct) => factory + .StaveNote(struct) + .addModifier(factory.Annotation({ text: '3', vJustify: AnnotationVerticalJustify.BOTTOM, font }), 0)); + factory.Beam({ notes: notes1 }); + factory.Beam({ notes: notes2 }); + const voice = factory.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); + factory.draw(); + options.assert.ok(true, 'Complex beam annotations'); +} +function complexWithArticulation(options) { + const f = VexFlowTests.makeFactory(options, 500, 200); + const stave = f.Stave({ y: 40 }); + const s1 = [ + { keys: ['e/4'], duration: '128', stem_direction: 1 }, + { keys: ['d/4'], duration: '16', stem_direction: 1 }, + { keys: ['e/4'], duration: '8', stem_direction: 1 }, + { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + ]; + const s2 = [ + { keys: ['e/5'], duration: '128', stem_direction: -1 }, + { keys: ['d/5'], duration: '16', stem_direction: -1 }, + { keys: ['e/5'], duration: '8', stem_direction: -1 }, + { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + ]; + const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); + const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); + f.Beam({ notes: notes1 }); + f.Beam({ notes: notes2 }); + const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); + f.draw(); + options.assert.ok(true, 'Complex beam articulations'); +} +function complexWithArticulation2(options) { + const f = VexFlowTests.makeFactory(options, 500, 300); + const system = f.System(); + const s1 = [ + { keys: ['e/4'], duration: '128', stem_direction: 1 }, + { keys: ['d/4'], duration: '16', stem_direction: 1 }, + { keys: ['e/4'], duration: '8', stem_direction: 1 }, + { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + { keys: ['c/4'], duration: '32', stem_direction: 1 }, + ]; + const s2 = [ + { keys: ['e/5'], duration: '128', stem_direction: -1 }, + { keys: ['d/5'], duration: '16', stem_direction: -1 }, + { keys: ['e/5'], duration: '8', stem_direction: -1 }, + { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + { keys: ['c/5'], duration: '32', stem_direction: -1 }, + ]; + const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); + const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); + const notes3 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); + const notes4 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); + f.Beam({ notes: notes1 }); + f.Beam({ notes: notes2 }); + f.Beam({ notes: notes3 }); + f.Beam({ notes: notes4 }); + const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); + const voice2 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes3).addTickables(notes4); + system.addStave({ voices: [voice1] }); + system.addStave({ voices: [voice2] }); + f.draw(); + options.assert.ok(true, 'Complex beam articulations two staves'); +} +VexFlowTests.register(BeamTests); +export { BeamTests }; diff --git a/build/esm/tests/bend_tests.js b/build/esm/tests/bend_tests.js new file mode 100644 index 0000000000..ca4269d648 --- /dev/null +++ b/build/esm/tests/bend_tests.js @@ -0,0 +1,209 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Bend } from '../src/bend.js'; +import { Font } from '../src/font.js'; +import { Formatter } from '../src/formatter.js'; +import { ModifierContext } from '../src/modifiercontext.js'; +import { Note } from '../src/note.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { TickContext } from '../src/tickcontext.js'; +const BendTests = { + Start() { + QUnit.module('Bend'); + const run = VexFlowTests.runTests; + run('Double Bends', doubleBends); + run('Reverse Bends', reverseBends); + run('Bend Phrase', bendPhrase); + run('Double Bends With Release', doubleBendsWithRelease); + run('Whako Bend', whackoBends); + }, +}; +const note = (noteStruct) => new TabNote(noteStruct); +const bendWithText = (text, release = false) => new Bend(text, release); +const bendWithPhrase = (phrase) => new Bend('', false, phrase); +function doubleBends(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + note({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('Full'), 0) + .addModifier(bendWithText('1/2'), 1), + note({ + positions: [ + { str: 2, fret: 5 }, + { str: 3, fret: 5 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('1/4'), 0) + .addModifier(bendWithText('1/4'), 1), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'h', + }), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + notes.forEach((note) => Note.plotMetrics(ctx, note, 140)); + options.assert.ok(true, 'Double Bends'); +} +function doubleBendsWithRelease(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 550, 240); + ctx.scale(1.0, 1.0); + ctx.setBackgroundFillStyle('#FFF'); + ctx.setFont('Arial', VexFlowTests.Font.size); + const stave = new TabStave(10, 10, 550).addTabGlyph().setContext(ctx).draw(); + const notes = [ + note({ + positions: [ + { str: 1, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('1/2', true), 0) + .addModifier(bendWithText('Full', true), 1), + note({ + positions: [ + { str: 2, fret: 5 }, + { str: 3, fret: 5 }, + { str: 4, fret: 5 }, + ], + duration: 'q', + }) + .addModifier(bendWithText('1/4', true), 0) + .addModifier(bendWithText('Monstrous', true), 1) + .addModifier(bendWithText('1/4', true), 2), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'q', + }), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'q', + }), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + notes.forEach((note) => Note.plotMetrics(ctx, note, 140)); + options.assert.ok(true, 'Bend Release'); +} +function reverseBends(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.setFont('10pt Arial'); + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + note({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'w', + }) + .addModifier(bendWithText('Full'), 1) + .addModifier(bendWithText('1/2'), 0), + note({ + positions: [ + { str: 2, fret: 5 }, + { str: 3, fret: 5 }, + ], + duration: 'w', + }) + .addModifier(bendWithText('1/4'), 1) + .addModifier(bendWithText('1/4'), 0), + note({ + positions: [{ str: 4, fret: 7 }], + duration: 'w', + }), + ]; + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const mc = new ModifierContext(); + note.addToModifierContext(mc); + const tickContext = new TickContext(); + tickContext + .addTickable(note) + .preFormat() + .setX(75 * i); + note.setStave(stave).setContext(ctx).draw(); + Note.plotMetrics(ctx, note, 140); + options.assert.ok(true, 'Bend ' + i); + } +} +function bendPhrase(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = Font.SIZE + 'pt ' + Font.SANS_SERIF; + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const phrase1 = [ + { type: Bend.UP, text: 'Full' }, + { type: Bend.DOWN, text: 'Monstrous' }, + { type: Bend.UP, text: '1/2' }, + { type: Bend.DOWN, text: '' }, + ]; + const bend1 = bendWithPhrase(phrase1).setContext(ctx); + const notes = [ + note({ + positions: [{ str: 2, fret: 10 }], + duration: 'w', + }).addModifier(bend1, 0), + ]; + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.addToModifierContext(new ModifierContext()); + const tickContext = new TickContext(); + tickContext + .addTickable(note) + .preFormat() + .setX(75 * i); + note.setStave(stave).setContext(ctx).draw(); + Note.plotMetrics(ctx, note, 140); + options.assert.ok(true, 'Bend ' + i); + } +} +function whackoBends(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 240); + ctx.scale(1.0, 1.0); + ctx.setBackgroundFillStyle('#FFF'); + ctx.setFont('Arial', VexFlowTests.Font.size); + const stave = new TabStave(10, 10, 350).addTabGlyph().setContext(ctx).draw(); + const phrase1 = [ + { type: Bend.UP, text: 'Full' }, + { type: Bend.DOWN, text: '' }, + { type: Bend.UP, text: '1/2' }, + { type: Bend.DOWN, text: '' }, + ]; + const phrase2 = [ + { type: Bend.UP, text: 'Full' }, + { type: Bend.UP, text: 'Full' }, + { type: Bend.UP, text: '1/2' }, + { type: Bend.DOWN, text: '' }, + { type: Bend.DOWN, text: 'Full' }, + { type: Bend.DOWN, text: 'Full' }, + { type: Bend.UP, text: '1/2' }, + { type: Bend.DOWN, text: '' }, + ]; + const notes = [ + note({ + positions: [ + { str: 2, fret: 10 }, + { str: 3, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(bendWithPhrase(phrase1), 0) + .addModifier(bendWithPhrase(phrase2), 1), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + Note.plotMetrics(ctx, notes[0], 140); + options.assert.ok(true, 'Whacko Bend & Release'); +} +VexFlowTests.register(BendTests); +export { BendTests }; diff --git a/build/esm/tests/boundingbox_tests.js b/build/esm/tests/boundingbox_tests.js new file mode 100644 index 0000000000..30b6dc62e4 --- /dev/null +++ b/build/esm/tests/boundingbox_tests.js @@ -0,0 +1,53 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { BoundingBox } from '../src/index.js'; +const BoundingBoxTests = { + Start() { + QUnit.module('BoundingBox'); + QUnit.test('Initialization Test', initialization); + QUnit.test('Merging Text', merging); + }, +}; +function initialization(assert) { + const bb = new BoundingBox(4, 5, 6, 7); + assert.equal(bb.getX(), 4, 'Bad X'); + assert.equal(bb.getY(), 5, 'Bad Y'); + assert.equal(bb.getW(), 6, 'Bad W'); + assert.equal(bb.getH(), 7, 'Bad H'); + bb.setX(5); + assert.equal(bb.getX(), 5, 'Bad X'); +} +function merging(assert) { + const tests = [ + { + type: 'Intersection', + bb1: new BoundingBox(10, 10, 10, 10), + bb2: new BoundingBox(15, 20, 10, 10), + merged: new BoundingBox(10, 10, 15, 20), + }, + { + type: '1 contains 2', + bb1: new BoundingBox(10, 10, 30, 30), + bb2: new BoundingBox(15, 15, 10, 10), + merged: new BoundingBox(10, 10, 30, 30), + }, + { + type: '2 contains 1', + bb1: new BoundingBox(15, 15, 10, 10), + bb2: new BoundingBox(10, 10, 30, 30), + merged: new BoundingBox(10, 10, 30, 30), + }, + ]; + tests.forEach((test) => { + const type = test.type; + const bb1 = test.bb1; + const bb2 = test.bb2; + const merged = test.merged; + bb1.mergeWith(bb2); + assert.equal(bb1.getX(), merged.getX(), type + ' - Bad X'); + assert.equal(bb1.getY(), merged.getY(), type + ' - Bad Y'); + assert.equal(bb1.getW(), merged.getW(), type + ' - Bad W'); + assert.equal(bb1.getH(), merged.getH(), type + ' - Bad H'); + }); +} +VexFlowTests.register(BoundingBoxTests); +export { BoundingBoxTests }; diff --git a/build/esm/tests/boundingboxcomputation_tests.js b/build/esm/tests/boundingboxcomputation_tests.js new file mode 100644 index 0000000000..f4a07afecc --- /dev/null +++ b/build/esm/tests/boundingboxcomputation_tests.js @@ -0,0 +1,183 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { BoundingBoxComputation, Glyph } from '../src/index.js'; +const BoundingBoxComputationTests = { + Start() { + QUnit.module('BoundingBoxComputation'); + QUnit.test('Point Test', point); + const run = VexFlowTests.runTests; + quadraticParams.forEach((params, index) => { + run(`Quadratic Test ${index}`, quadratic, params); + }); + cubicParams.forEach((params, index) => { + run(`Cubic Test ${index}`, cubic, params); + }); + }, +}; +function point(assert) { + const bboxComp = new BoundingBoxComputation(); + bboxComp.addPoint(2, 3); + assert.equal(bboxComp.getX1(), 2, 'Bad X1'); + assert.equal(bboxComp.getY1(), 3, 'Bad Y1'); + assert.equal(bboxComp.width(), 0, 'Bad width'); + assert.equal(bboxComp.height(), 0, 'Bad height'); + bboxComp.addPoint(-5, 7); + assert.equal(bboxComp.getX1(), -5, 'Bad X1'); + assert.equal(bboxComp.getY1(), 3, 'Bad Y1'); + assert.equal(bboxComp.width(), 7, 'Bad width'); + assert.equal(bboxComp.height(), 4, 'Bad height'); +} +function createContext(options) { + const points = options.params.points; + let w = points[0]; + let h = points[1]; + for (let i = 2; i < points.length; i += 2) { + w = Math.max(w, points[i]); + h = Math.max(h, points[i + 1]); + } + const f = VexFlowTests.makeFactory(options, w + 20, h + 20); + const ctx = f.getContext(); + ctx.setLineCap('square'); + return ctx; +} +function rect(ctx, style, lineWidth, x, y, w, h) { + ctx.strokeStyle = style; + ctx.setLineWidth(lineWidth); + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + w, y); + ctx.lineTo(x + w, y + h); + ctx.lineTo(x, y + h); + ctx.lineTo(x, y); + ctx.stroke(); +} +const quadraticParams = [ + { + points: [10, 10, 100, 20, 110, 110], + box: [10, 10, 100, 100], + }, + { + points: [110, 10, 60, 110, 10, 20], + box: [10, 10, 100, 52.63], + }, + { + points: [10, 10, 30, 20, 50, 30], + box: [10, 10, 40, 20], + }, + { + points: [100, 30, 30, 110, 20, 30], + box: [20, 30, 80, 40], + }, +]; +function quadratic(options) { + const points = options.params.points; + const box = options.params.box; + const ctx = createContext(options); + const [x0, y0, x1, y1, x2, y2] = points; + let [bx, by, bw, bh] = box; + rect(ctx, '#0f0', 5, bx, by, bw, bh); + const bboxComp = new BoundingBoxComputation(); + bboxComp.addQuadraticCurve(x0, y0, x1, y1, x2, y2); + [bx, by, bw, bh] = [bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()]; + rect(ctx, '#00f', 3, bx, by, bw, bh); + const o = [0, x0, -y0, 2, x2, -y2, x1, -y1]; + const bbox = Glyph.getOutlineBoundingBox(o, 1, 0, 0); + rect(ctx, '#fa0', 1, bbox.getX(), bbox.getY(), bbox.getW(), bbox.getH()); + ctx.setLineWidth(1); + ctx.fillStyle = '#000'; + Glyph.renderOutline(ctx, o, 1, 0, 0); + ctx.strokeStyle = '#f00'; + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); + options.assert.ok(Math.abs(bboxComp.getX1() - box[0]) < 0.01, `Bad X1: ${bboxComp.getX1()}`); + options.assert.ok(Math.abs(bboxComp.getY1() - box[1]) < 0.01, `Bad Y1: ${bboxComp.getY1()}`); + options.assert.ok(Math.abs(bboxComp.width() - box[2]) < 0.01, `Bad width: ${bboxComp.width()}`); + options.assert.ok(Math.abs(bboxComp.height() - box[3]) < 0.01, `Bad height: ${bboxComp.height()}`); + options.assert.ok(Math.abs(bbox.getX() - box[0]) < 0.01, `Bad X: ${bbox.getX()}`); + options.assert.ok(Math.abs(bbox.getY() - box[1]) < 0.01, `Bad Y: ${bbox.getY()}`); + options.assert.ok(Math.abs(bbox.getW() - box[2]) < 0.01, `Bad W: ${bbox.getW()}`); + options.assert.ok(Math.abs(bbox.getH() - box[3]) < 0.01, `Bad H: ${bbox.getH()}`); +} +const cubicParams = [ + { + points: [10, 10, 60, 20, 100, 60, 110, 110], + box: [10, 10, 100, 100], + }, + { + points: [10, 10, 35, 110, 85, 110, 110, 10], + box: [10, 10, 100, 75], + }, + { + points: [10, 110, 90, 10, 30, 10, 110, 110], + box: [10, 35, 100, 75], + }, + { + points: [10, 10, 110, 110, 110, 10, 10, 110], + box: [10, 10, 75, 100], + }, + { + points: [10, 10, 130, 110, -10, 110, 110, 10], + box: [10, 10, 100, 75], + }, + { + points: [50, 10, 10, 110, 110, 110, 74, 10], + box: [40.38, 10, 41.59, 75], + }, + { + points: [10, 30, 35, 60, 110, 110, 60, 10], + box: [10, 10, 66.82, 59.37], + }, + { + points: [210, 70, 10, 10, 190, 10, 120, 90], + box: [112.02, 27.23, 97.98, 62.77], + }, + { + points: [20, 10, 210, 90, 10, 90, 100, 38], + box: [20, 10, 85.33, 64.06], + }, + { + points: [60, 14, 10, 14, 90, 14, 70, 14], + box: [43.28, 14, 30.01, 0], + }, + { + points: [10, 60, 20, 100, 100, 20, 110, 60], + box: [10, 48.45, 100, 23.1], + }, +]; +function cubic(options) { + const points = options.params.points; + const box = options.params.box; + const ctx = createContext(options); + const [x0, y0, x1, y1, x2, y2, x3, y3] = points; + let [bx, by, bw, bh] = box; + rect(ctx, '#0f0', 5, bx, by, bw, bh); + const bboxComp = new BoundingBoxComputation(); + bboxComp.addBezierCurve(x0, y0, x1, y1, x2, y2, x3, y3); + [bx, by, bw, bh] = [bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()]; + rect(ctx, '#00f', 3, bx, by, bw, bh); + const o = [0, x0, -y0, 3, x3, -y3, x1, -y1, x2, -y2]; + const bbox = Glyph.getOutlineBoundingBox(o, 1, 0, 0); + rect(ctx, '#fa0', 1, bbox.getX(), bbox.getY(), bbox.getW(), bbox.getH()); + ctx.setLineWidth(1); + ctx.fillStyle = '#000'; + Glyph.renderOutline(ctx, o, 1, 0, 0); + ctx.strokeStyle = '#f00'; + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x3, y3); + ctx.stroke(); + options.assert.ok(Math.abs(bboxComp.getX1() - box[0]) < 0.01, `Bad X1: ${bboxComp.getX1()}`); + options.assert.ok(Math.abs(bboxComp.getY1() - box[1]) < 0.01, `Bad Y1: ${bboxComp.getY1()}`); + options.assert.ok(Math.abs(bboxComp.width() - box[2]) < 0.01, `Bad width: ${bboxComp.width()}`); + options.assert.ok(Math.abs(bboxComp.height() - box[3]) < 0.01, `Bad height: ${bboxComp.height()}`); + options.assert.ok(Math.abs(bbox.getX() - box[0]) < 0.01, `Bad X: ${bbox.getX()}`); + options.assert.ok(Math.abs(bbox.getY() - box[1]) < 0.01, `Bad Y: ${bbox.getY()}`); + options.assert.ok(Math.abs(bbox.getW() - box[2]) < 0.01, `Bad W: ${bbox.getW()}`); + options.assert.ok(Math.abs(bbox.getH() - box[3]) < 0.01, `Bad H: ${bbox.getH()}`); +} +VexFlowTests.register(BoundingBoxComputationTests); +export { BoundingBoxComputationTests }; diff --git a/build/esm/tests/chordsymbol_tests.js b/build/esm/tests/chordsymbol_tests.js new file mode 100644 index 0000000000..3579255d9d --- /dev/null +++ b/build/esm/tests/chordsymbol_tests.js @@ -0,0 +1,387 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { ChordSymbol } from '../src/chordsymbol.js'; +import { Font } from '../src/font.js'; +import { Formatter } from '../src/formatter.js'; +import { Ornament } from '../src/ornament.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Tables } from '../src/tables.js'; +const ChordSymbolTests = { + Start() { + QUnit.module('ChordSymbol'); + const run = VexFlowTests.runTests; + run('Chord Symbol With Modifiers', withModifiers); + run('Chord Symbol Font Size Tests', fontSize); + run('Chord Symbol Kerning Tests', kern); + run('Top Chord Symbols', top); + run('Top Chord Symbols Justified', topJustify); + run('Bottom Chord Symbols', bottom); + run('Bottom Stem Down Chord Symbols', bottomStemDown); + run('Double Bottom Chord Symbols', doubleBottom); + }, +}; +const superscript = { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT }; +const subscript = { symbolModifier: ChordSymbol.symbolModifiers.SUBSCRIPT }; +const note = (factory, keys, duration, chordSymbol) => factory.StaveNote({ keys, duration }).addModifier(chordSymbol, 0); +function getGlyphWidth(glyphName) { + const musicFont = Tables.currentMusicFont(); + const glyph = musicFont.getGlyphs()[glyphName]; + const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution(); + return widthInEm * 38 * Font.scaleToPxFrom.pt; +} +function withModifiers(options) { + const f = VexFlowTests.makeFactory(options, 750, 580); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const notes = [ + note(f, ['c/4'], 'q', chords[0]).addModifier(new Ornament('doit')), + note(f, ['c/4'], 'q', chords[1]), + note(f, ['c/4'], 'q', chords[2]).addModifier(new Ornament('fall')), + note(f, ['c/4'], 'q', chords[3]), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + const formatter = f.Formatter(); + formatter.joinVoices([voice]); + const voiceW = formatter.preCalculateMinTotalWidth([voice]); + const staffW = voiceW + Stave.defaultPadding + getGlyphWidth('gClef'); + formatter.format([voice], voiceW); + const staff = f.Stave({ x: 10, y, width: staffW }).addClef('treble').draw(); + voice.draw(ctx, staff); + } + let chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall')); + chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('b9', superscript).addGlyphOrText('#11', subscript)); + chords.push(f + .ChordSymbol({ fontSize: 14 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('add 3', superscript) + .addGlyphOrText('omit 9', subscript) + .addGlyph('rightParenTall')); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall')); + draw(chords, 40); + chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .setFontSize(10) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .setFontSize(16) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + draw(chords, 140); + chords = [ + f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + ]; + draw(chords, 240); + options.assert.ok(true, 'Font Size Chord Symbol'); +} +function fontSize(options) { + const f = VexFlowTests.makeFactory(options, 750, 580); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble'); + const notes = [ + note(f, ['c/4'], 'q', chords[0]), + note(f, ['c/4'], 'q', chords[1]), + note(f, ['c/4'], 'q', chords[2]), + note(f, ['c/4'], 'q', chords[3]), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + let chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall') + .setReportWidth(false)); + chords.push(f + .ChordSymbol({ fontSize: 12 }) + .addText('F7') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .setReportWidth(false)); + chords.push(f + .ChordSymbol({ fontSize: 14 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('add 3', superscript) + .addGlyphOrText('omit 9', subscript) + .addGlyph('rightParenTall') + .setReportWidth(false)); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .addText('F7') + .addGlyph('leftParenTall') + .addGlyphOrText('b9', superscript) + .addGlyphOrText('#11', subscript) + .addGlyph('rightParenTall') + .setReportWidth(false)); + draw(chords, 40); + chords = []; + chords.push(f + .ChordSymbol({ fontSize: 10 }) + .setFontSize(10) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); + chords.push(f + .ChordSymbol({ fontSize: 16 }) + .setFontSize(16) + .addText('F7') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript)); + draw(chords, 140); + chords = [ + f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), + f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), + ]; + draw(chords, 240); + options.assert.ok(true, 'Font Size Chord Symbol'); +} +function kern(options) { + const f = VexFlowTests.makeFactory(options, 650 * 1.5, 650); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['C/4'], 'q', chords[0]), + note(f, ['C/4'], 'q', chords[1]), + note(f, ['C/4'], 'q', chords[2]), + note(f, ['C/4'], 'q', chords[3]), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + let chords = [ + f.ChordSymbol().addText('A').addGlyphSuperscript('dim').setReportWidth(false), + f.ChordSymbol({ kerning: false, reportWidth: false }).addText('A').addGlyphSuperscript('dim'), + f.ChordSymbol({ hJustify: 'left', reportWidth: false }).addText('C').addGlyph('halfDiminished', superscript), + f.ChordSymbol({ reportWidth: false }).addText('D').addGlyph('halfDiminished', superscript), + ]; + draw(chords, 10); + chords = [ + f.ChordSymbol().addText('A').addGlyphSuperscript('dim'), + f.ChordSymbol({ kerning: false }).addText('A').addGlyphSuperscript('dim'), + f.ChordSymbol().addText('A').addGlyphSuperscript('+').addTextSuperscript('5'), + f.ChordSymbol().addText('G').addGlyphSuperscript('+').addTextSuperscript('5'), + ]; + draw(chords, 110); + chords = [ + f.ChordSymbol().addText('A').addGlyph('-'), + f.ChordSymbol().addText('E').addGlyph('-'), + f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript), + f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript), + ]; + draw(chords, 210); + chords = [ + f.ChordSymbol().addGlyphOrText('F/B').addGlyphOrText('b', superscript), + f.ChordSymbol().addText('E').addGlyphOrText('V/V'), + f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript), + f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript), + ]; + draw(chords, 310); + options.assert.ok(true, 'Chord Symbol Kerning Tests'); +} +function top(options) { + const f = VexFlowTests.makeFactory(options, 650 * 1.5, 650); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + const note = (factory, keys, duration, chordSymbol, direction) => factory.StaveNote({ keys, duration, stem_direction: direction }).addModifier(chordSymbol, 0); + function draw(c1, c2, y) { + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['e/4', 'a/4', 'd/5'], 'h', c1, 1).addModifier(new Accidental('b'), 0), + note(f, ['c/5', 'e/5', 'c/6'], 'h', c2, -1), + ]; + const score = f.EasyScore(); + const voice = score.voice(notes, { time: '4/4' }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + } + let chord1 = f + .ChordSymbol({ reportWidth: false }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('(#11b9)', superscript); + let chord2 = f + .ChordSymbol({ reportWidth: false }) + .addText('C') + .setHorizontal('left') + .addGlyphSuperscript('majorSeventh'); + draw(chord1, chord2, 40); + chord1 = f + .ChordSymbol() + .addText('F7') + .addTextSuperscript('(') + .addGlyphOrText('#11b9', superscript) + .addTextSuperscript(')'); + chord2 = f.ChordSymbol().addText('C').setHorizontal('left').addTextSuperscript('Maj.'); + draw(chord1, chord2, 140); + chord1 = f + .ChordSymbol() + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript); + chord2 = f.ChordSymbol().addText('C').addTextSuperscript('sus4'); + draw(chord1, chord2, 240); + options.assert.ok(true, 'Top Chord Symbol'); +} +function topJustify(options) { + const f = VexFlowTests.makeFactory(options, 500 * 1.5, 680); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chord1, chord2, y) { + const stave = new Stave(10, y, 450).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['e/4', 'a/4', 'd/5'], 'h', chord1).addModifier(new Accidental('b'), 0), + note(f, ['c/4', 'e/4', 'B/4'], 'h', chord2), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + } + let chord1 = f.ChordSymbol().addText('F7').setHorizontal('left').addGlyphOrText('(#11b9)', superscript); + let chord2 = f.ChordSymbol({ hJustify: 'left' }).addText('C').addGlyphSuperscript('majorSeventh'); + draw(chord1, chord2, 40); + chord1 = f + .ChordSymbol({ hJustify: 'center' }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('(#11b9)', superscript); + chord2 = f.ChordSymbol({ hJustify: 'center' }).addText('C').addTextSuperscript('Maj.'); + draw(chord1, chord2, 140); + chord1 = f + .ChordSymbol({ hJustify: 'right' }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript); + chord2 = f.ChordSymbol({ hJustify: 'right' }).addText('C').addTextSuperscript('Maj.'); + draw(chord1, chord2, 240); + chord1 = f + .ChordSymbol({ hJustify: 'left' }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', superscript) + .addGlyphOrText('b9', subscript); + chord2 = f.ChordSymbol({ hJustify: 'centerStem' }).addText('C').addTextSuperscript('Maj.'); + draw(chord1, chord2, 340); + options.assert.ok(true, 'Top Chord Justified'); +} +function bottom(options) { + const f = VexFlowTests.makeFactory(options, 600 * 1.5, 230); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const stave = new Stave(10, y, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[0]), + note(f, ['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new Accidental('b'), 2), + note(f, ['c/4', 'e/4', 'g/4'], 'q', chords[2]), + note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new Accidental('#'), 1), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + } + const chords = [ + f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'), + f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'), + ]; + draw(chords, 10); + options.assert.ok(true, 'Bottom Chord Symbol'); +} +function bottomStemDown(options) { + const f = VexFlowTests.makeFactory(options, 600 * 1.5, 330); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, y) { + const note = (keys, duration, chordSymbol) => new StaveNote({ keys, duration, stem_direction: -1 }).addModifier(chordSymbol, 0); + const stave = new Stave(10, y, 400).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(['c/4', 'f/4', 'a/4'], 'q', chords[0]), + note(['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new Accidental('b'), 2), + note(['c/4', 'e/4', 'g/4'], 'q', chords[2]), + note(['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new Accidental('#'), 1), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + } + const chords = [ + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('F'), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('C7'), + f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), + f.ChordSymbol({ vJustify: 'bottom' }).addText('A').addGlyphSuperscript('dim'), + ]; + draw(chords, 10); + options.assert.ok(true, 'Bottom Stem Down Chord Symbol'); +} +function doubleBottom(options) { + const f = VexFlowTests.makeFactory(options, 600 * 1.5, 260); + const ctx = f.getContext(); + ctx.scale(1.5, 1.5); + function draw(chords, chords2, y) { + const note = (keys, duration, chordSymbol1, chordSymbol2) => new StaveNote({ keys, duration }).addModifier(chordSymbol1, 0).addModifier(chordSymbol2, 0); + const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(['c/4', 'f/4', 'a/4'], 'q', chords[0], chords2[0]), + note(['c/4', 'e/4', 'b/4'], 'q', chords[1], chords2[1]).addModifier(f.Accidental({ type: 'b' }), 2), + note(['c/4', 'e/4', 'g/4'], 'q', chords[2], chords2[2]), + note(['c/4', 'f/4', 'a/4'], 'q', chords[3], chords2[3]).addModifier(f.Accidental({ type: '#' }), 1), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + } + const chords1 = [ + f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'), + f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), + f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'), + ]; + const chords2 = [ + f.ChordSymbol({ vJustify: 'bottom' }).addText('T'), + f.ChordSymbol({ vJustify: 'bottom' }).addText('D'), + f.ChordSymbol({ vJustify: 'bottom' }).addText('D'), + f.ChordSymbol({ vJustify: 'bottom' }).addText('SD'), + ]; + draw(chords1, chords2, 10); + options.assert.ok(true, '2 Bottom Chord Symbol'); +} +VexFlowTests.register(ChordSymbolTests); +export { ChordSymbolTests }; diff --git a/build/esm/tests/clef_tests.js b/build/esm/tests/clef_tests.js new file mode 100644 index 0000000000..1241e4f7a7 --- /dev/null +++ b/build/esm/tests/clef_tests.js @@ -0,0 +1,131 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +const ClefTests = { + Start() { + QUnit.module('Clef'); + const run = VexFlowTests.runTests; + run('Clef Test', draw); + run('Clef End Test', drawEnd); + run('Small Clef Test', drawSmall); + run('Small Clef End Test', drawSmallEnd); + run('Clef Change Test', drawClefChange); + }, +}; +function draw(options) { + const f = VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('treble') + .addClef('treble', 'default', '8va') + .addClef('treble', 'default', '8vb') + .addClef('alto') + .addClef('tenor') + .addClef('soprano') + .addClef('bass') + .addClef('bass', 'default', '8vb') + .addClef('mezzo-soprano') + .addClef('baritone-c') + .addClef('baritone-f') + .addClef('subbass') + .addClef('percussion') + .addClef('french') + .addEndClef('treble'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawEnd(options) { + const f = VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('bass') + .addEndClef('treble') + .addEndClef('treble', 'default', '8va') + .addEndClef('treble', 'default', '8vb') + .addEndClef('alto') + .addEndClef('tenor') + .addEndClef('soprano') + .addEndClef('bass') + .addEndClef('bass', 'default', '8vb') + .addEndClef('mezzo-soprano') + .addEndClef('baritone-c') + .addEndClef('baritone-f') + .addEndClef('subbass') + .addEndClef('percussion') + .addEndClef('french'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawSmall(options) { + const f = VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('treble', 'small') + .addClef('treble', 'small', '8va') + .addClef('treble', 'small', '8vb') + .addClef('alto', 'small') + .addClef('tenor', 'small') + .addClef('soprano', 'small') + .addClef('bass', 'small') + .addClef('bass', 'small', '8vb') + .addClef('mezzo-soprano', 'small') + .addClef('baritone-c', 'small') + .addClef('baritone-f', 'small') + .addClef('subbass', 'small') + .addClef('percussion', 'small') + .addClef('french', 'small') + .addEndClef('treble', 'small'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawSmallEnd(options) { + const f = VexFlowTests.makeFactory(options, 800, 120); + f.Stave() + .addClef('bass', 'small') + .addEndClef('treble', 'small') + .addEndClef('treble', 'small', '8va') + .addEndClef('treble', 'small', '8vb') + .addEndClef('alto', 'small') + .addEndClef('tenor', 'small') + .addEndClef('soprano', 'small') + .addEndClef('bass', 'small') + .addEndClef('bass', 'small', '8vb') + .addEndClef('mezzo-soprano', 'small') + .addEndClef('baritone-c', 'small') + .addEndClef('baritone-f', 'small') + .addEndClef('subbass', 'small') + .addEndClef('percussion', 'small') + .addEndClef('french', 'small'); + f.draw(); + options.assert.ok(true, 'all pass'); +} +function drawClefChange(options) { + const f = VexFlowTests.makeFactory(options, 800, 180); + const stave = f.Stave().addClef('treble'); + const notes = [ + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + f.ClefNote({ type: 'alto', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'alto' }), + f.ClefNote({ type: 'tenor', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'tenor' }), + f.ClefNote({ type: 'soprano', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'soprano' }), + f.ClefNote({ type: 'bass', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'bass' }), + f.ClefNote({ type: 'mezzo-soprano', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'mezzo-soprano' }), + f.ClefNote({ type: 'baritone-c', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-c' }), + f.ClefNote({ type: 'baritone-f', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-f' }), + f.ClefNote({ type: 'subbass', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'subbass' }), + f.ClefNote({ type: 'french', options: { size: 'small' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'french' }), + f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8vb' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: -1 }), + f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8va' } }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: 1 }), + ]; + const voice = f.Voice({ time: '12/4' }).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(ClefTests); +export { ClefTests }; diff --git a/build/esm/tests/crossbeam_tests.js b/build/esm/tests/crossbeam_tests.js new file mode 100644 index 0000000000..18bd75d14a --- /dev/null +++ b/build/esm/tests/crossbeam_tests.js @@ -0,0 +1,306 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Stave } from '../src/stave.js'; +const CrossBeamTests = { + Start() { + QUnit.module('CrossBeam'); + const run = VexFlowTests.runTests; + const crossStaveTests = []; + crossStaveTests.push({ + title: 'Single clef mixed 1', + time: '3/4', + voices: [ + { + notes: [{ notestring: 'g4/16, f4/16, a6/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }], + stavemask: [0, 0, 0, 0, 0, 0, 0], + beammask: [1, 1, -1, -1, 0, -1, 1], + clef: 'treble', + }, + ], + }); + crossStaveTests.push({ + title: 'Single clef mixed 2', + time: '3/4', + voices: [ + { + notes: [{ notestring: 'g4/16, f6/16, a4/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }], + stavemask: [0, 0, 0, 0, 0, 0, 0], + beammask: [1, -1, 1, -1, 0, -1, 1], + clef: 'treble', + }, + ], + }); + crossStaveTests.push({ + title: 'Mixed clef voice middle', + time: '2/4', + voices: [ + { + notes: [{ notestring: 'e#5/4, b4/16/r, b4/16, d5/16., c5/32 ', clef: 'treble' }], + stavemask: [0, 0, 0, 0, 0], + beammask: [0, 0, 1, 1, 1], + clef: 'treble', + }, + { + notes: [ + { notestring: 'C3/16, B3/16, C4/16', clef: 'bass' }, + { notestring: 'E#4/16', clef: 'treble' }, + { notestring: 'C4/4', clef: 'bass' }, + ], + stavemask: [1, 1, 1, 0, 1], + beammask: [1, 1, 1, -1, 0], + clef: 'bass', + }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up1)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up2)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up3)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam up4)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, 1, 1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down1)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down2)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down3)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam down4)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, -1, -1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle1)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle2)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/8, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle3)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.push({ + title: 'Vertical alignment - cross stave (beam middle4)', + time: '4/4', + voices: [ + { + notes: [ + { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, + { notestring: 'C4/16, D4/8', clef: 'bass' }, + ], + beammask: [0, 0, 0, -1, -1, 1, 1], + stavemask: [0, 0, 0, 0, 0, 1, 1], + clef: 'treble', + }, + { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, + ], + }); + crossStaveTests.forEach((cst) => { + run(cst.title, crossClef, cst); + }); + }, +}; +function crossClef(options) { + const f = VexFlowTests.makeFactory(options, 400 + Stave.defaultPadding, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + details: { softmaxFactor: 100 }, + autoWidth: true, + debugFormatter: false, + }); + const testdata = options.params; + const voicedata = testdata.voices; + const stavemap = []; + for (let i = 0; i < voicedata.length; ++i) { + const clef = voicedata[i].clef; + stavemap.push(system.addStave({ voices: [] }).addClef(clef).addTimeSignature(testdata.time)); + } + for (let i = 0; i < voicedata.length; ++i) { + const stavemask = voicedata[i].stavemask; + let scoreNotes = []; + const voicenotes = voicedata[i].notes; + for (let k = 0; k < voicenotes.length; ++k) { + scoreNotes = scoreNotes.concat(score.notes(voicenotes[k].notestring, { clef: voicenotes[k].clef })); + } + const beammask = voicedata[i].beammask; + let curGroup = []; + const beamGroups = []; + for (let j = 0; j < scoreNotes.length; ++j) { + const note = scoreNotes[j]; + note.setStave(stavemap[stavemask[j]]); + if (beammask[j] !== 0) { + note.setStemDirection(beammask[j]); + curGroup.push(note); + } + else { + if (curGroup.length) { + beamGroups.push(curGroup); + curGroup = []; + } + } + } + if (curGroup.length) { + beamGroups.push(curGroup); + } + beamGroups.forEach((bg) => { + score.beam(bg); + }); + if (scoreNotes.length > 0) { + const voice = score.voice(scoreNotes, { time: testdata.time }); + system.addVoices([voice]); + } + } + f.draw(); + options.assert.ok(true); +} +VexFlowTests.register(CrossBeamTests); +export { CrossBeamTests }; diff --git a/build/esm/tests/curve_tests.js b/build/esm/tests/curve_tests.js new file mode 100644 index 0000000000..0986bc95c4 --- /dev/null +++ b/build/esm/tests/curve_tests.js @@ -0,0 +1,118 @@ +import { concat, VexFlowTests } from './vexflow_test_helpers.js'; +import { CurvePosition } from '../src/curve.js'; +const CurveTests = { + Start() { + QUnit.module('Curve'); + const run = VexFlowTests.runTests; + run('Simple Curve', simple); + run('Rounded Curve', rounded); + run('Thick Thin Curves', thickThin); + run('Top Curve', top); + }, +}; +function createTest(noteGroup1, noteGroup2, setupCurves) { + return (options) => { + const factory = VexFlowTests.makeFactory(options, 350, 200); + const stave = factory.Stave({ y: 50 }); + const score = factory.EasyScore(); + const staveNotes = [ + score.beam(score.notes(...noteGroup1)), + score.beam(score.notes(...noteGroup2)), + ].reduce(concat); + setupCurves(factory, staveNotes); + const voices = [score.voice(staveNotes, { time: '4/4' })]; + factory.Formatter().joinVoices(voices).formatToStave(voices, stave); + factory.draw(); + options.assert.ok('Simple Curve'); + }; +} +const simple = createTest(['c4/8, f5, d5, g5', { stem: 'up' }], ['d6/8, f5, d5, g5', { stem: 'down' }], (f, notes) => { + f.Curve({ + from: notes[0], + to: notes[3], + options: { + cps: [ + { x: 0, y: 10 }, + { x: 0, y: 50 }, + ], + }, + }); + f.Curve({ + from: notes[4], + to: notes[7], + options: { + cps: [ + { x: 0, y: 10 }, + { x: 0, y: 20 }, + ], + }, + }); +}); +const rounded = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], ['d5/8, d6, d6, g5', { stem: 'down' }], (f, notes) => { + f.Curve({ + from: notes[0], + to: notes[3], + options: { + x_shift: -10, + y_shift: 30, + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 50 }, + ], + }, + }); + f.Curve({ + from: notes[4], + to: notes[7], + options: { + cps: [ + { x: 0, y: 50 }, + { x: 0, y: 50 }, + ], + }, + }); +}); +const thickThin = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], ['d5/8, d6, d6, g5', { stem: 'down' }], (f, notes) => { + f.Curve({ + from: notes[0], + to: notes[3], + options: { + thickness: 10, + x_shift: -10, + y_shift: 30, + cps: [ + { x: 0, y: 20 }, + { x: 0, y: 50 }, + ], + }, + }); + f.Curve({ + from: notes[4], + to: notes[7], + options: { + thickness: 0, + cps: [ + { x: 0, y: 50 }, + { x: 0, y: 50 }, + ], + }, + }); +}); +const top = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], ['d5/8, d6, d6, g5', { stem: 'down' }], (f, notes) => { + f.Curve({ + from: notes[0], + to: notes[7], + options: { + x_shift: -3, + y_shift: 10, + position: CurvePosition.NEAR_TOP, + position_end: CurvePosition.NEAR_HEAD, + cps: [ + { x: 0, y: 20 }, + { x: 40, y: 80 }, + ], + }, + }); +}); +VexFlowTests.register(CurveTests); +export { CurveTests }; diff --git a/build/esm/tests/dot_tests.js b/build/esm/tests/dot_tests.js new file mode 100644 index 0000000000..56f805ad37 --- /dev/null +++ b/build/esm/tests/dot_tests.js @@ -0,0 +1,119 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Beam } from '../src/beam.js'; +import { Dot } from '../src/dot.js'; +import { Formatter } from '../src/formatter.js'; +import { ModifierContext } from '../src/modifiercontext.js'; +import { Note } from '../src/note.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { TickContext } from '../src/tickcontext.js'; +import { Voice } from '../src/voice.js'; +const DotTests = { + Start() { + QUnit.module('Dot'); + const run = VexFlowTests.runTests; + run('Basic', basic); + run('Multi Voice', multiVoice); + }, +}; +function showOneNote(note1, stave, ctx, x) { + const modifierContext = new ModifierContext(); + note1.setStave(stave).addToModifierContext(modifierContext); + new TickContext().addTickable(note1).preFormat().setX(x); + note1.setContext(ctx).draw(); + Note.plotMetrics(ctx, note1, 140); +} +function basic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 1000, 240); + const stave = new Stave(10, 10, 975); + stave.setContext(ctx); + stave.draw(); + const notes = [ + new StaveNote({ keys: ['c/4', 'e/4', 'a/4', 'b/4'], duration: 'w' }), + new StaveNote({ keys: ['a/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['g/4', 'a/4', 'b/4'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['e/4', 'f/4', 'b/4', 'c/5'], duration: '4' }), + new StaveNote({ + keys: ['g/4', 'a/4', 'd/5', 'e/5', 'g/5'], + duration: '4', + stem_direction: -1, + }), + new StaveNote({ keys: ['g/4', 'b/4', 'd/5', 'e/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }), + new StaveNote({ + keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], + duration: '16', + stem_direction: -1, + }), + new StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: 1 }), + new StaveNote({ + keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'f/5'], + duration: '16', + stem_direction: 1, + }), + new StaveNote({ + keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5'], + duration: '16', + stem_direction: 1, + }), + new StaveNote({ keys: ['e/4', 'a/4', 'b/4', 'c/5'], duration: '16', stem_direction: 1 }), + ]; + Dot.buildAndAttach(notes, { all: true }); + Dot.buildAndAttach([notes[7], notes[8], notes[9]], { all: true }); + Dot.buildAndAttach([notes[8], notes[9]], { all: true }); + const beam = new Beam(notes.slice(notes.length - 2)); + for (let i = 0; i < notes.length; i++) { + showOneNote(notes[i], stave, ctx, 30 + i * 65); + const dots = notes[i].getModifiersByType('Dot'); + options.assert.ok(dots.length > 0, 'Note ' + i + ' has dots'); + for (let j = 0; j < dots.length; ++j) { + options.assert.ok(dots[j].getWidth() > 0, 'Dot ' + j + ' has width set'); + } + } + beam.setContext(ctx).draw(); + VexFlowTests.plotLegendForNoteWidth(ctx, 890, 140); + options.assert.ok(true, 'Full Dot'); +} +function multiVoice(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 750, 300); + const stave = new Stave(30, 45, 700).setContext(ctx).draw(); + const notes1 = [ + new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }), + new StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }), + new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }), + new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }), + new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }), + ]; + Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true }); + Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true }); + Dot.buildAndAttach([notes1[1]], { index: 0 }); + Dot.buildAndAttach([notes1[1]], { index: 0 }); + Dot.buildAndAttach([notes1[1]], { index: 1 }); + Dot.buildAndAttach([notes1[1]], { index: 1 }); + Dot.buildAndAttach([notes1[1]], { index: 2 }); + Dot.buildAndAttach([notes1[1]], { index: 2 }); + Dot.buildAndAttach([notes1[1]], { index: 2 }); + Dot.buildAndAttach([notes1[2], notes1[3], notes1[4]]); + const notes2 = [ + new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }), + new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['d/5', 'g/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }), + new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }), + ]; + Dot.buildAndAttach(notes2, { all: true }); + Dot.buildAndAttach([notes2[1]], { all: true }); + const voice1 = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes1); + const voice2 = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes2); + const formatter = new Formatter().joinVoices([voice1, voice2]); + formatter.format([voice1, voice2], 700); + voice1.draw(ctx, stave); + voice2.draw(ctx, stave); + notes1.forEach((note) => Note.plotMetrics(ctx, note, 190)); + notes2.forEach((note) => Note.plotMetrics(ctx, note, 20)); + VexFlowTests.plotLegendForNoteWidth(ctx, 620, 220); + options.assert.ok(true, 'Full Dot'); +} +VexFlowTests.register(DotTests); +export { DotTests }; diff --git a/build/esm/tests/easyscore_tests.js b/build/esm/tests/easyscore_tests.js new file mode 100644 index 0000000000..2985d702ed --- /dev/null +++ b/build/esm/tests/easyscore_tests.js @@ -0,0 +1,488 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Articulation } from '../src/articulation.js'; +import { EasyScore } from '../src/easyscore.js'; +import { FretHandFinger } from '../src/frethandfinger.js'; +import { Modifier } from '../src/modifier.js'; +import { Parenthesis } from '../src/parenthesis.js'; +import { StaveConnector } from '../src/staveconnector.js'; +import { Stem } from '../src/stem.js'; +import { Tuplet } from '../src/tuplet.js'; +const EasyScoreTests = { + Start() { + QUnit.module('EasyScore'); + QUnit.test('Basic', basic); + QUnit.test('Accidentals', accidentals); + QUnit.test('Durations', durations); + QUnit.test('Chords', chords); + QUnit.test('Dots', dots); + QUnit.test('Types', types); + QUnit.test('Options', options); + const run = VexFlowTests.runTests; + run('Draw Basic', drawBasicTest); + run('Draw Different KeySignature', drawDiffKeysig); + run('Draw Basic Muted', drawBasicMutedTest); + run('Draw Basic Harmonic', drawBasicHarmonicTest); + run('Draw Basic Slash', drawBasicSlashTest); + run('Draw Ghostnote Basic', drawGhostBasicTest); + run('Draw Ghostnote Dotted', drawGhostDottedTest); + run('Draw Parenthesised', drawParenthesisedTest); + run('Draw Accidentals', drawAccidentalsTest); + run('Draw Beams', drawBeamsTest); + run('Draw Tuplets', drawTupletsTest); + run('Draw Dots', drawDotsTest); + run('Draw Options', drawOptionsTest); + run('Draw Fingerings', drawFingeringsTest); + run('Keys', keys); + }, +}; +function createShortcuts(score) { + return { + voice: score.voice.bind(score), + notes: score.notes.bind(score), + beam: score.beam.bind(score), + tuplet: score.tuplet.bind(score), + }; +} +function basic(assert) { + const score = new EasyScore(); + const mustPass = ['c4', 'c#4', 'c4/r', 'c#5', 'c3/m', 'c3//m', 'c3//h', 'c3/s', 'c3//s', 'c3/g', 'c3//g']; + const mustFail = ['', '()', '7', '(c#4 e5 g6']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function accidentals(assert) { + const score = new EasyScore(); + const mustPass = [ + 'c3', + 'c##3, cb3', + 'Cn3', + 'f3//m', + '(c##3 cbb3 cn3), cb3', + 'cbbs7', + 'cbb7', + 'cbss7', + 'cbs7', + 'cb7', + 'cdb7', + 'cd7', + 'c##7', + 'c#7', + 'cn7', + 'c++-7', + 'c++7', + 'c+-7', + 'c+7', + '(cbs3 bbs3 dbs3), ebs3', + '(cd7 cbb3 cn3), cb3', + 'co7', + 'ck7', + ]; + const mustFail = [ + 'ct3', + 'cdbb7', + '(cq cbb3 cn3), cb3', + '(cdd7 cbb3 cn3), cb3', + 'cbbbs7', + 'cbbss7', + 'cbsss7', + 'csbs7', + 'cddb7', + 'cddbb7', + 'cdd7', + 'c##b7', + 'c#bs7', + 'cnb#7', + 'c+#+b-d7', + 'c+--7', + 'c++--7', + 'c+++7', + 'cbk7', + 'cok7', + 'cko7', + 'c#s7', + ]; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function durations(assert) { + const score = new EasyScore(); + const mustPass = ['c3/4', 'c##3/w, cb3', 'c##3/w, cb3/q', 'c##3/q, cb3/32', '(c##3 cbb3 cn3), cb3']; + const mustFail = ['Cn3/]', '/', '(cq cbb3 cn3), cb3', '(cdd7 cbb3 cn3), cb3']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function chords(assert) { + const score = new EasyScore(); + const mustPass = [ + '(c5)', + '(c3 e0 g9)', + '(c##4 cbb4 cn4)/w, (c#5 cb2 a3)/32', + '(d##4 cbb4 cn4)/w/r, (c#5 cb2 a3)', + '(c##4 cbb4 cn4)/4, (c#5 cb2 a3)', + '(c##4 cbb4 cn4)/m, (c#5 cb2 a3)', + ]; + const mustFail = ['(c)']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function dots(assert) { + const score = new EasyScore(); + const mustPass = [ + 'c3/4.', + 'c##3/w.., cb3', + 'f##3/s, cb3/q...', + 'c##3/q, cb3/32', + '(c##3 cbb3 cn3)., cb3', + '(c5).', + '(c##4 cbb4 cn4)/w.., (c#5 cb2 a3)/32', + ]; + const mustFail = ['.', 'c.#', 'c#4./4']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function types(assert) { + const score = new EasyScore(); + const mustPass = ['c3/4/m.', 'c##3//r.., cb3', 'c##3/m.., cb3', 'c##3/r.., cb3', 'd##3/w/s, cb3/q...', 'Fb4']; + const mustFail = ['c4/q/U', '(c##4, cbb4 cn4)/w.., (c#5 cb2 a3)/32', 'z#3']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function options(assert) { + const score = new EasyScore(); + const mustPass = [ + 'c3/4.[foo="bar"]', + 'c##3/w.., cb3[id="blah"]', + 'c##3/q, cb3/32', + '(c##3 cbb3 cn3).[blah="bod4o"], cb3', + '(c5)[fooooo="booo"]', + 'c#5[id="foobar"]', + ]; + const mustFail = ['.[', 'f##3/w[], cb3/q...']; + mustPass.forEach((line) => assert.equal(score.parse(line).success, true, line)); + mustFail.forEach((line) => assert.equal(score.parse(line).success, false, line)); +} +function drawBasicTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), + voice(notes('c#5/h., c5/q', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawDiffKeysig(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), + voice(notes('c5/h., c5/q', { stem: 'up' })), + ], + }) + .addClef('treble') + .addTimeSignature('4/4') + .addKeySignature('D'); + system + .addStave({ + voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))], + }) + .addClef('bass') + .addTimeSignature('4/4'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBasicMutedTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q/m, c4/q/m, c4/q/r, c4/q/m', { stem: 'down' })), + voice(notes('c#5/h/m., c5/q/m', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q/m, cn3/q/m, bb3/q/m, d##3/q/m', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBasicHarmonicTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q/h, c4/q/h, c4/q/r, c4/q/h', { stem: 'down' })), + voice(notes('c#5/h/h., c5/q/h', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q/h, cn3/q/h, bb3/q/h, d##3/q/h', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBasicSlashTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(d4 e4 g4)/q/s, c4/q/s, c4/q/r, c4/q/s', { stem: 'down' })), + voice(notes('c#5/h/s., c5/q/s', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c#3/q/s, cn3/q/s, bb3/q/s, d##3/q/s', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawGhostBasicTest(options) { + const f = VexFlowTests.makeFactory(options, 550); + const score = f.EasyScore(); + const system = f.System(); + system.addStave({ + voices: [ + score.voice([ + ...score.notes('f#5/4, f5, db5, c5', { stem: 'up' }), + ...score.beam(score.notes('c5/8, d5, fn5, e5', { stem: 'up' })), + ...score.beam(score.notes('d5, c5', { stem: 'up' })), + ], { time: '7/4' }), + score.voice(score.notes('c4/h/g, f4/4, c4/4/g, e4/4, c4/8/g, d##4/8, c4/8, c4/8', { stem: 'down' }), { + time: '7/4', + }), + ], + }); + f.draw(); + options.assert.expect(0); +} +function drawGhostDottedTest(options) { + const f = VexFlowTests.makeFactory(options, 550); + const score = f.EasyScore(); + const system = f.System(); + system.addStave({ + voices: [ + score.voice([ + ...score.notes('c4/4/g., fbb5/8, d5/4', { stem: 'up' }), + ...score.beam(score.notes('c5/8, c#5/16, d5/16', { stem: 'up' })), + ...score.notes('c4/2/g.., fn5/8', { stem: 'up' }), + ], { time: '8/4' }), + score.voice([ + ...score.notes('f#4/4', { stem: 'down' }), + ...score.beam(score.notes('e4/8, d4/8', { stem: 'down' })), + ...score.notes('c4/4/g.., cb4/16, c#4/h, d4/4', { stem: 'down' }), + ...score.beam(score.notes('fn4/8, e4/8', { stem: 'down' })), + ], { time: '8/4' }), + ], + }); + f.draw(); + options.assert.expect(0); +} +function drawParenthesisedTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + const notes1 = notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' }); + Parenthesis.buildAndAttach([notes1[0], notes1[3]]); + const notes2 = notes('c#5/h., c5/q', { stem: 'down' }); + Parenthesis.buildAndAttach([notes2[0], notes2[1]]); + system + .addStave({ + voices: [voice(notes1), voice(notes2)], + }) + .addClef('treble'); + const notes3 = notes('c#3/q, cn3/q, bb3/q, d##3/q', { stem: 'down' }); + Parenthesis.buildAndAttach(notes3); + system + .addStave({ + voices: [voice(notes3)], + }) + .addClef('bass'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawAccidentalsTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 350); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(cbbs4 ebb4 gbss4)/q, cbs4/q, cdb4/q/r, cd4/q', { stem: 'down' })), + voice(notes('c++-5/h., c++5/q', { stem: 'up' })), + ], + }) + .addClef('treble'); + system + .addStave({ + voices: [voice(notes('c+-3/q, c+3/q, bb3/q, d##3/q', { clef: 'bass' }))], + }) + .addClef('bass'); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + options.assert.expect(0); +} +function drawBeamsTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes, beam } = createShortcuts(score); + system + .addStave({ + voices: [ + voice(notes('(c4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), + voice([...notes('c#5/h.', { stem: 'up' }), ...beam(notes('c5/8, c5/8', { stem: 'up' }))]), + ], + }) + .addClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawTupletsTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes, tuplet, beam } = createShortcuts(score); + const v1_tuplet = tuplet(notes('(c4 e4 g4)/q, cbb4/q, c4/q', { stem: 'down' }), { + location: Tuplet.LOCATION_BOTTOM, + }); + const v1_halfNote = notes('c4/h', { stem: 'down' }); + const v1 = voice([...v1_tuplet, ...v1_halfNote]); + const v2_halfNote = notes('c#5/h.', { stem: 'up' }); + const v2_tuplet = tuplet(beam(notes('cb5/8, cn5/8, c5/8', { stem: 'up' }))); + const v2 = voice([...v2_halfNote, ...v2_tuplet]); + system.addStave({ voices: [v1, v2] }).addClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawDotsTest(options) { + const f = VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const system = f.System(); + const { voice, notes } = createShortcuts(score); + system + .addStave({ + voices: [voice(notes('(c4 e4 g4)/8., (c4 e4 g4)/8.., (c4 e4 g4)/8..., (c4 e4 g4)/8...., (c4 e4 g4)/16...'))], + }) + .addClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawOptionsTest(options) { + const f = VexFlowTests.makeFactory(options, 500, 200); + const score = f.EasyScore(); + const system = f.System(); + const notes = score.notes('B4/h[id="foobar", class="red,bold", stem="up", articulations="staccato.below,tenuto"], B4/q[articulations="accent.above"], B4/q[stem="down"]'); + system.addStave({ voices: [score.voice(notes)] }); + f.draw(); + const note0 = notes[0]; + const note1 = notes[1]; + const note0_modifier0 = note0.getModifiers()[0]; + const note0_modifier1 = note0.getModifiers()[1]; + const note1_modifier0 = note1.getModifiers()[0]; + options.assert.equal(note0.getAttribute('id'), 'foobar'); + options.assert.ok(note0.hasClass('red')); + options.assert.ok(note0.hasClass('bold')); + options.assert.equal(note0_modifier0.getCategory(), Articulation.CATEGORY); + options.assert.equal(note0_modifier0.type, 'a.'); + options.assert.equal(note0_modifier0.getPosition(), Modifier.Position.BELOW); + options.assert.equal(note0_modifier1.getCategory(), Articulation.CATEGORY); + options.assert.equal(note0_modifier1.type, 'a-'); + options.assert.equal(note0_modifier1.getPosition(), Modifier.Position.ABOVE); + options.assert.equal(note0.getStemDirection(), Stem.UP); + options.assert.equal(note1_modifier0.getCategory(), Articulation.CATEGORY); + options.assert.equal(note1_modifier0.type, 'a>'); + options.assert.equal(note1_modifier0.getPosition(), Modifier.Position.ABOVE); + options.assert.equal(notes[2].getStemDirection(), Stem.DOWN); +} +function drawFingeringsTest(options) { + const f = VexFlowTests.makeFactory(options, 500, 200); + const score = f.EasyScore(); + const system = f.System(); + const notes = score.notes('C4/q[fingerings="1"], E4[fingerings="3.above"], G4[fingerings="5.below"], (C4 E4 G4)[fingerings="1,3,5"]'); + system.addStave({ voices: [score.voice(notes)] }); + f.draw(); + const note0_modifier0 = notes[0].getModifiers()[0]; + options.assert.equal(note0_modifier0.getCategory(), FretHandFinger.CATEGORY); + options.assert.equal(note0_modifier0.getFretHandFinger(), '1'); + options.assert.equal(note0_modifier0.getPosition(), Modifier.Position.LEFT); + const note1_modifier0 = notes[1].getModifiers()[0]; + options.assert.equal(note1_modifier0.getCategory(), FretHandFinger.CATEGORY); + options.assert.equal(note1_modifier0.getFretHandFinger(), '3'); + options.assert.equal(note1_modifier0.getPosition(), Modifier.Position.ABOVE); + const note2_modifier0 = notes[2].getModifiers()[0]; + options.assert.equal(note2_modifier0.getCategory(), FretHandFinger.CATEGORY); + options.assert.equal(note2_modifier0.getFretHandFinger(), '5'); + options.assert.equal(note2_modifier0.getPosition(), Modifier.Position.BELOW); + const note3_modifiers = notes[3].getModifiers(); + const note3_modifier0 = note3_modifiers[0]; + const note3_modifier1 = note3_modifiers[1]; + const note3_modifier2 = note3_modifiers[2]; + options.assert.equal(note3_modifier0.getCategory(), FretHandFinger.CATEGORY); + options.assert.equal(note3_modifier0.getFretHandFinger(), '1'); + options.assert.equal(note3_modifier0.getPosition(), Modifier.Position.LEFT); + options.assert.equal(note3_modifier1.getCategory(), FretHandFinger.CATEGORY); + options.assert.equal(note3_modifier1.getFretHandFinger(), '3'); + options.assert.equal(note3_modifier1.getPosition(), Modifier.Position.LEFT); + options.assert.equal(note3_modifier2.getCategory(), FretHandFinger.CATEGORY); + options.assert.equal(note3_modifier2.getFretHandFinger(), '5'); + options.assert.equal(note3_modifier2.getPosition(), Modifier.Position.LEFT); +} +function keys(options) { + const f = VexFlowTests.makeFactory(options, 700, 200); + const score = f.EasyScore(); + const system = f.System(); + const notes = score.notes('c#3/q, c##3, cb3, cbb3, cn3, c3, cbbs3, cbss3, cbs3, cdb3, cd3, c++-3, c++3, c+-3, c+3, co3, ck3', { clef: 'bass' }); + system.addStave({ voices: [f.Voice().setStrict(false).addTickables(notes)] }).addClef('bass'); + f.draw(); + options.assert.equal(notes[0].keys, 'c#/3'); + options.assert.equal(notes[1].keys, 'c##/3'); + options.assert.equal(notes[2].keys, 'cb/3'); + options.assert.equal(notes[3].keys, 'cbb/3'); + options.assert.equal(notes[4].keys, 'cn/3'); + for (let i = 5; i < notes.length; i++) { + options.assert.equal(notes[i].keys, 'c/3'); + } +} +VexFlowTests.register(EasyScoreTests); +export { EasyScoreTests }; diff --git a/build/esm/tests/factory_tests.js b/build/esm/tests/factory_tests.js new file mode 100644 index 0000000000..58fed29d65 --- /dev/null +++ b/build/esm/tests/factory_tests.js @@ -0,0 +1,44 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Factory } from '../src/factory.js'; +import { Barline } from '../src/stavebarline.js'; +const FactoryTests = { + Start() { + QUnit.module('Factory'); + QUnit.test('Defaults', defaults); + const run = VexFlowTests.runTests; + run('Draw', draw); + run('Draw Tab (repeat barlines must be aligned)', drawTab); + }, +}; +function defaults(assert) { + assert.throws(() => new Factory({ renderer: { elementId: '', width: 700, height: 500 } }), 'Empty string for elementId throws an exception.'); + const factory = new Factory({ + renderer: { elementId: null, width: 700, height: 500 }, + }); + const options = factory.options; + assert.equal(options.renderer.width, 700); + assert.equal(options.renderer.height, 500); + assert.equal(options.renderer.elementId, null); + assert.equal(options.stave.space, 10); +} +function draw(options) { + const f = Factory.newFromElementId(options.elementId); + f.Stave().setClef('treble'); + f.draw(); + options.assert.expect(0); +} +function drawTab(options) { + const factory = VexFlowTests.makeFactory(options, 500, 400); + const system = factory.System({ width: 500 }); + const stave = factory.Stave().setClef('treble').setKeySignature('C#').setBegBarType(Barline.type.REPEAT_BEGIN); + const voices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])]; + system.addStave({ stave, voices }); + const tabStave = factory.TabStave().setClef('tab').setBegBarType(Barline.type.REPEAT_BEGIN); + const tabVoices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])]; + system.addStave({ stave: tabStave, voices: tabVoices }); + factory.draw(); + options.assert.equal(stave.getModifiers()[0].getX(), tabStave.getModifiers()[0].getX()); + options.assert.expect(1); +} +VexFlowTests.register(FactoryTests); +export { FactoryTests }; diff --git a/build/esm/tests/font_tests.js b/build/esm/tests/font_tests.js new file mode 100644 index 0000000000..17f138869c --- /dev/null +++ b/build/esm/tests/font_tests.js @@ -0,0 +1,135 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Bend } from '../src/bend.js'; +import { CanvasContext } from '../src/canvascontext.js'; +import { Element } from '../src/element.js'; +import { Flow } from '../src/flow.js'; +import { Font, FontStyle, FontWeight } from '../src/font.js'; +import { PedalMarking } from '../src/pedalmarking.js'; +import { StaveNote } from '../src/stavenote.js'; +import { TextBracket } from '../src/textbracket.js'; +import { TextNote } from '../src/textnote.js'; +import { Voice } from '../src/voice.js'; +const FontTests = { + Start() { + QUnit.module('Font'); + QUnit.test('setFont', setFont); + QUnit.test('Parsing', fontParsing); + QUnit.test('Sizes', fontSizes); + const run = VexFlowTests.runTests; + run('Set Text Font to Georgia', setTextFontToGeorgia); + run('Set Music Font to Petaluma', setMusicFontToPetaluma); + }, +}; +function setFont(assert) { + const canvas = document.createElement('canvas'); + canvas.width = 800; + canvas.height = 400; + const ctx = new CanvasContext(canvas.getContext('2d')); + ctx.setFont('PetalumaScript', '100px', 'normal', 'italic'); + assert.equal(ctx.font, 'italic 100px PetalumaScript'); + const voice = new Voice(); + assert.propEqual(voice.fontInfo, Element.TEXT_FONT); + voice.setFont('bold 32pt Arial'); + const fontInfo = voice.fontInfo; + assert.equal(fontInfo === null || fontInfo === void 0 ? void 0 : fontInfo.size, '32pt'); + const flat = new Accidental('b'); + assert.equal(flat.textFont, undefined); + flat.setFont(undefined, undefined, undefined, FontStyle.ITALIC); + assert.equal(flat.getFont(), 'italic 10pt Arial, sans-serif'); + flat.setFont(undefined, undefined, FontWeight.BOLD, undefined); + assert.equal(flat.getFont(), 'bold 10pt Arial, sans-serif'); + flat.setFont(undefined, undefined, FontWeight.BOLD, FontStyle.ITALIC); + assert.equal(flat.getFont(), 'italic bold 10pt Arial, sans-serif'); + flat.setFont(undefined, undefined, FontWeight.BOLD, 'oblique'); + assert.equal(flat.getFont(), 'oblique bold 10pt Arial, sans-serif'); + flat.setFont(undefined, undefined, 'normal', ''); + assert.equal(flat.getFont(), '10pt Arial, sans-serif'); +} +function fontParsing(assert) { + const b = new Bend('1/2', true); + const bFont = b.fontInfo; + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.family, Font.SANS_SERIF); + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.size, Font.SIZE); + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.weight, FontWeight.NORMAL); + assert.equal(bFont === null || bFont === void 0 ? void 0 : bFont.style, FontStyle.NORMAL); + const f1 = 'Roboto Slab, serif'; + const t = new TextNote({ duration: '4', font: { family: f1 } }); + assert.equal(f1, t.fontInfo.family); + const n1 = new StaveNote({ keys: ['e/5'], duration: '4' }); + const n2 = new StaveNote({ keys: ['c/5'], duration: '4' }); + const tb = new TextBracket({ start: n1, stop: n2 }); + const f2 = tb.fontInfo; + assert.equal(f2 === null || f2 === void 0 ? void 0 : f2.size, 15); + assert.equal(f2 === null || f2 === void 0 ? void 0 : f2.style, FontStyle.ITALIC); + const f3 = Font.fromCSSString(`bold 1.5em/3 "Lucida Sans Typewriter", "Lucida Console", Consolas, monospace`); + const f3SizeInPx = Font.convertSizeToPixelValue(f3.size); + assert.equal(f3SizeInPx, 24); +} +function fontSizes(assert) { + { + const size = '17px'; + const sizeInEm = Font.convertSizeToPixelValue(size) / Font.scaleToPxFrom.em; + assert.equal(sizeInEm, 1.0625); + } + { + const size = '2em'; + const sizeInPx = Font.convertSizeToPixelValue(size); + assert.equal(sizeInPx, 32); + } + { + const pedal = new PedalMarking([]); + assert.equal(pedal.getFont(), 'italic bold 12pt Times New Roman, serif'); + assert.equal(pedal.fontSizeInPoints, 12); + assert.equal(pedal.fontSizeInPixels, 16); + const doubledSizePx = pedal.fontSizeInPixels * 2; + assert.equal(doubledSizePx, 32); + const doubledSizePt = Font.scaleSize(pedal.fontSizeInPoints, 2); + assert.equal(doubledSizePt, 24); + assert.equal(Font.scaleSize('1.5em', 3), '4.5em'); + } +} +function setTextFontToGeorgia(options) { + const factory = VexFlowTests.makeFactory(options, 400, 200); + const stave = factory.Stave({ y: 40 }); + const score = factory.EasyScore(); + const voice1 = score.voice([ + factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }), + factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }), + factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }), + ]); + const defaultFont = TextNote.TEXT_FONT; + TextNote.TEXT_FONT = { + family: 'Georgia, Courier New, serif', + size: 14, + weight: 'bold', + style: 'italic', + }; + const voice2 = score.voice([ + factory + .TextNote({ text: 'Here are some fun lyrics...', duration: 'w' }) + .setJustification(TextNote.Justification.LEFT), + ]); + const formatter = factory.Formatter(); + formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + factory.draw(); + TextNote.TEXT_FONT = defaultFont; + options.assert.ok(true); +} +function setMusicFontToPetaluma(options) { + Flow.setMusicFont('Petaluma'); + const factory = VexFlowTests.makeFactory(options, 400, 200); + const stave = factory.Stave({ y: 40 }); + const score = factory.EasyScore(); + const voice = score.voice([ + factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }), + factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }), + factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }), + ]); + const formatter = factory.Formatter(); + formatter.joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + options.assert.ok(true); +} +VexFlowTests.register(FontTests); +export { FontTests }; diff --git a/build/esm/tests/formatter/framestack.js b/build/esm/tests/formatter/framestack.js new file mode 100644 index 0000000000..87b85af75b --- /dev/null +++ b/build/esm/tests/formatter/framestack.js @@ -0,0 +1,61 @@ +"use strict"; +class FrameStack { + constructor(parentEl, numFrames, params) { + this.parentEl = parentEl; + this.numFrames = numFrames; + this.options = Object.assign({ prefix: 'vex-frame-', width: 700, height: 800, iterationCallback: null }, params); + this.frames = []; + this.currentFrame = 0; + document.getElementById(this.parentEl).innerHTML = ''; + for (let i = 0; i < this.numFrames; i++) { + const div = document.createElement('div'); + div.id = this.frameID(i); + div.style.position = 'absolute'; + div.style.top = 0; + div.style.left = 0; + div.style.width = `${this.options.width}px`; + div.style.height = `${this.options.height}px`; + div.style.display = 'none'; + this.frames[i] = div; + } + } + frameID(i) { + return `${this.options.prefix}${i}`; + } + install() { + this.show(0); + setTimeout(() => { + const fragment = document.createDocumentFragment(); + for (let i = 0; i < this.numFrames; i++) { + fragment.appendChild(this.frames[i]); + } + const parent = document.getElementById(this.parentEl); + parent.appendChild(fragment); + parent.style.width = `${this.options.width}px`; + parent.style.height = `${this.options.height}px`; + }, 0); + } + get(i) { + return this.frames[i]; + } + show(i) { + this.frames[this.currentFrame].style.display = 'none'; + this.frames[i].style.display = 'block'; + this.currentFrame = i; + } + start(params) { + const options = Object.assign({ start: 0, end: this.numFrames, intervalms: 100 }, params); + this.animationTimer = setInterval(() => { + const frame = this.currentFrame + 1 === this.numFrames ? 0 : this.currentFrame + 1; + this.show(frame); + if (this.options.iterationCallback) + this.options.iterationCallback(frame); + }, options.intervalms); + } + stop() { + clearInterval(this.animationTimer); + } +} +if (typeof module != 'undefined') { + module.exports = { FrameStack }; +} diff --git a/build/esm/tests/formatter/tests.js b/build/esm/tests/formatter/tests.js new file mode 100644 index 0000000000..4140ad78db --- /dev/null +++ b/build/esm/tests/formatter/tests.js @@ -0,0 +1,203 @@ +"use strict"; +const VF = Vex.Flow; +function subgroup(el, iterations, params) { + const options = Object.assign({ systemWidth: 550, debug: true }, params); + const f = new VF.Factory({ + renderer: { + elementId: el, + width: options.width, + height: options.height, + }, + }); + f.StaveNote = f.StaveNote.bind(f); + const stave1 = f.Stave({ x: 15, y: 40, width: options.systemWidth }).setClef('treble'); + const notes1 = [ + { keys: ['f/5'], stem_direction: 1, duration: '4' }, + { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, + ].map(f.StaveNote); + const notes2 = [ + { keys: ['c/4'], stem_direction: -1, duration: '4' }, + { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, + ].map(f.StaveNote); + const stave2 = f.Stave({ x: 15, y: 160, width: options.systemWidth }).setClef('bass'); + const notes3 = [ + { keys: ['e/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['g/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['d/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['f/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['c/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['g/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['d/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['f/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + ].map(f.StaveNote); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'brace' }); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleLeft' }); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleRight' }); + function addAccidental(note, acc) { + return note.addModifier(f.Accidental({ type: acc }), 0); + } + function addSubGroup(note, subNotes) { + return note.addModifier(f.NoteSubGroup({ notes: subNotes }), 0); + } + f.Beam({ notes: notes3.slice(1, 4) }); + f.Beam({ notes: notes3.slice(5) }); + addAccidental(notes1[1], '#'); + addSubGroup(notes1[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } }), f.TimeSigNote({ time: '3/4' })]); + addSubGroup(notes2[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } }), f.TimeSigNote({ time: '9/8' })]); + addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); + addSubGroup(notes3[1], [f.ClefNote({ type: 'treble', options: { size: 'small' } })]); + addSubGroup(notes3[5], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); + addAccidental(notes3[0], '#'); + addAccidental(notes3[3], 'b'); + addAccidental(notes3[5], '#'); + addAccidental(notes1[2], 'b'); + addAccidental(notes2[3], '#'); + const voice = f.Voice().addTickables(notes1); + const voice2 = f.Voice().addTickables(notes2); + const voice3 = f.Voice().addTickables(notes3); + const formatter = f.Formatter(); + formatter.joinVoices([voice, voice2]).joinVoices([voice3]).formatToStave([voice, voice2, voice3], stave1); + for (let i = 0; i < iterations; i++) { + formatter.tune({ alpha: 0.01 }); + } + f.draw(); + if (options.debug) { + VF.Formatter.plotDebugging(f.getContext(), formatter, stave1.getNoteStartX(), 20, 320); + } +} +function tuplets(el, iterations, params) { + const options = Object.assign({ systemWidth: 500, debug: true }, params); + const f = new VF.Factory({ + renderer: { + elementId: el, + width: options.width, + height: options.height, + }, + }); + const system = f.System({ + x: 50, + width: options.systemWidth, + debugFormatter: options.debug, + formatIterations: iterations, + }); + const score = f.EasyScore(); + const newVoice = function (notes) { + return score.voice(notes, { time: '1/4' }); + }; + const newStave = function (voice) { + return system + .addStave({ voices: [voice], debugNoteMetrics: options.debug }) + .addClef('treble') + .addTimeSignature('1/4'); + }; + const voices = [ + score.notes('c5/8, c5'), + score.tuplet(score.notes('a4/8, a4, a4'), { notes_occupied: 2 }), + score.notes('c5/16, c5, c5, c5'), + score.tuplet(score.notes('a4/16, a4, a4, a4, a4'), { notes_occupied: 4 }), + score.tuplet(score.notes('a4/32, a4, a4, a4, a4, a4, a4'), { notes_occupied: 8 }), + ]; + voices.map(newVoice).forEach(newStave); + system.addConnector().setType(VF.StaveConnector.type.BRACKET); + f.draw(); +} +function multistave(el, iterations, params) { + const options = Object.assign({ systemWidth: 550, debug: true, justify: true, alpha: 0.1 }, params); + const f = new VF.Factory({ + renderer: { + elementId: el, + width: options.width, + height: options.height, + }, + }); + const score = f.EasyScore(); + const stave11 = f.Stave({ y: 20, width: 275 }).addTrebleGlyph().addTimeSignature('6/8'); + const notes11 = score.notes('f4/4, d4/8, g4/4, eb4/8'); + const voice11 = score.voice(notes11, { time: '6/8' }); + const stave21 = f.Stave({ y: 130, width: 275 }).addTrebleGlyph().addTimeSignature('6/8'); + const notes21 = score.notes('d4/8, d4, d4, d4, eb4, eb4'); + const voice21 = score.voice(notes21, { time: '6/8' }); + const stave31 = f.Stave({ y: 250, width: 275 }).addClef('bass').addTimeSignature('6/8'); + const notes31 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); + const voice31 = score.voice(notes31, { time: '6/8' }); + f.StaveConnector({ + top_stave: stave21, + bottom_stave: stave31, + type: 'brace', + }); + f.Beam({ notes: notes21.slice(0, 3) }); + f.Beam({ notes: notes21.slice(3, 6) }); + f.Beam({ notes: notes31.slice(0, 3) }); + f.Beam({ notes: notes31.slice(3, 6) }); + let formatter = f.Formatter().joinVoices([voice11]).joinVoices([voice21]).joinVoices([voice31]); + if (options.justify) { + formatter.formatToStave([voice11, voice21, voice31], stave11); + } + else { + formatter.format([voice11, voice21, voice31], 0); + } + for (let i = 0; i < iterations; i++) { + formatter.tune({ alphs: options.alpha }); + } + if (options.debug) { + VF.Formatter.plotDebugging(f.getContext(), formatter, stave11.getNoteStartX(), 20, 320); + } + const stave12 = f.Stave({ + x: stave11.width + stave11.x, + y: stave11.y, + width: stave11.width, + }); + var notes12 = score.notes('ab4/4, bb4/8, (cb5 eb5)/4[stem="down"], d5/8[stem="down"]'); + var voice12 = score.voice(notes12, { time: '6/8' }); + f.Stave({ + x: stave21.width + stave21.x, + y: stave21.y, + width: stave21.width, + }); + var notes22 = score.notes('(eb4 ab4)/4., (c4 eb4 ab4)/4, db5/8', { stem: 'up' }); + var voice22 = score.voice(notes22, { time: '6/8' }); + f.Stave({ + x: stave31.width + stave31.x, + y: stave31.y, + width: stave31.width, + }); + var notes32 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); + var voice32 = score.voice(notes32, { time: '6/8' }); + formatter = f.Formatter().joinVoices([voice12]).joinVoices([voice22]).joinVoices([voice32]); + if (options.justify) { + formatter.formatToStave([voice12, voice22, voice32], stave12); + } + else { + formatter.format([voice12, voice22, voice32], 0); + } + for (var j = 0; j < iterations; j++) { + formatter.tune({ alpha: options.alpha }); + } + f.Beam({ notes: notes32.slice(0, 3) }); + f.Beam({ notes: notes32.slice(3, 6) }); + f.draw(); + if (options.debug) { + VF.Formatter.plotDebugging(f.getContext(), formatter, stave12.getNoteStartX(), 20, 320); + } +} +const Tests = { + tuplets: { + options: { width: 600, height: 750, debug: true }, + fn: tuplets, + }, + subgroup: { + options: { width: 650, height: 350, debug: true }, + fn: subgroup, + }, + multistave: { + options: { width: 650, height: 350, debug: true }, + fn: multistave, + }, +}; +if (typeof module != 'undefined') { + module.exports = Tests; +} diff --git a/build/esm/tests/formatter_tests.js b/build/esm/tests/formatter_tests.js new file mode 100644 index 0000000000..e26d46f5fb --- /dev/null +++ b/build/esm/tests/formatter_tests.js @@ -0,0 +1,721 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Annotation, AnnotationVerticalJustify } from '../src/annotation.js'; +import { Articulation } from '../src/articulation.js'; +import { Beam } from '../src/beam.js'; +import { Bend } from '../src/bend.js'; +import { Dot } from '../src/dot.js'; +import { Flow } from '../src/flow.js'; +import { Font, FontWeight } from '../src/font.js'; +import { Formatter } from '../src/formatter.js'; +import { FretHandFinger } from '../src/frethandfinger.js'; +import { ModifierPosition } from '../src/modifier.js'; +import { Note } from '../src/note.js'; +import { Registry } from '../src/registry.js'; +import { Stave } from '../src/stave.js'; +import { StaveConnector } from '../src/staveconnector.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Stem } from '../src/stem.js'; +import { StringNumber } from '../src/stringnumber.js'; +import { Tables } from '../src/tables.js'; +import { Tuplet } from '../src/tuplet.js'; +import { Voice } from '../src/voice.js'; +import { MockTickable } from './mocks.js'; +const FormatterTests = { + Start() { + QUnit.module('Formatter'); + QUnit.test('TickContext Building', buildTickContexts); + const run = VexFlowTests.runTests; + run('Penultimate Note Padding', penultimateNote); + run('Whitespace and justify', rightJustify); + run('Notehead padding', noteHeadPadding); + run('Justification and alignment with accidentals', accidentalJustification); + run('Long measure taking full space', longMeasureProblems); + run('Vertical alignment - few unaligned beats', unalignedNoteDurations1); + run('Vertical alignment - many unaligned beats', unalignedNoteDurations2, { globalSoftmax: false }); + run('Vertical alignment - many unaligned beats (global softmax)', unalignedNoteDurations2, { globalSoftmax: true }); + run('Vertical alignment - many mixed elements', alignedMixedElements, { globalSoftmax: true }); + run('StaveNote - Justification', justifyStaveNotes); + run('Notes with Tab', notesWithTab); + run('Multiple Staves - Justified', multiStaves, { debug: true }); + run('Softmax', softMax); + run('Mixtime', mixTime); + run('Tight', tightNotes1); + run('Tight 2', tightNotes2); + run('Annotations', annotations); + run('Proportional Formatting - No Tuning', proportional, { debug: true, iterations: 0 }); + run('Proportional Formatting - No Justification', proportional, { justify: false, debug: true, iterations: 0 }); + run('Proportional Formatting (20 iterations)', proportional, { debug: true, iterations: 20, alpha: 0.5 }); + }, +}; +function getGlyphWidth(glyphName) { + const musicFont = Tables.currentMusicFont(); + const glyph = musicFont.getGlyphs()[glyphName]; + const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution(); + return widthInEm * 38 * Font.scaleToPxFrom.pt; +} +function buildTickContexts(assert) { + function createTickable(beat) { + return new MockTickable().setTicks(beat); + } + const BEAT = (1 * Flow.RESOLUTION) / 4; + const tickables1 = [ + createTickable(BEAT).setWidth(10), + createTickable(BEAT * 2).setWidth(20), + createTickable(BEAT).setWidth(30), + ]; + const tickables2 = [ + createTickable(BEAT * 2).setWidth(10), + createTickable(BEAT).setWidth(20), + createTickable(BEAT).setWidth(30), + ]; + const voice1 = new Voice(Flow.TIME4_4); + const voice2 = new Voice(Flow.TIME4_4); + voice1.addTickables(tickables1); + voice2.addTickables(tickables2); + const formatter = new Formatter(); + const tContexts = formatter.createTickContexts([voice1, voice2]); + assert.equal(tContexts.list.length, 4, 'Voices should have four tick contexts'); + assert.throws(() => formatter.getMinTotalWidth(), /NoMinTotalWidth/, 'Expected to throw exception'); + assert.ok(formatter.preCalculateMinTotalWidth([voice1, voice2]), 'Successfully runs preCalculateMinTotalWidth'); + assert.equal(formatter.getMinTotalWidth(), 88, 'Get minimum total width without passing voices'); + formatter.preFormat(); + assert.equal(formatter.getMinTotalWidth(), 88, 'Minimum total width'); + assert.equal(tickables1[0].getX(), tickables2[0].getX(), 'First notes of both voices have the same X'); + assert.equal(tickables1[2].getX(), tickables2[2].getX(), 'Last notes of both voices have the same X'); + assert.ok(tickables1[1].getX() < tickables2[1].getX(), 'Second note of voice 2 is to the right of the second note of voice 1'); +} +function rightJustify(options) { + const f = VexFlowTests.makeFactory(options, 1200, 150); + const getTickables = (time, n, duration, duration2) => { + const tickar = []; + let i = 0; + for (i = 0; i < n; ++i) { + const dd = i === n - 1 ? duration2 : duration; + tickar.push(new StaveNote({ keys: ['f/4'], duration: dd })); + } + return new Voice(time).addTickables(tickar); + }; + const renderTest = (time, n, duration, duration2, x, width) => { + const formatter = f.Formatter(); + const stave = f.Stave({ x, y: 20, width }); + const voice = getTickables(time, n, duration, duration2); + formatter.joinVoices([voice]).formatToStave([voice], stave); + stave.draw(); + voice.draw(f.getContext(), stave); + }; + renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '2', 10, 300); + renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 1, 'w', 'w', 310, 300); + renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '4', 610, 300); + renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 6, '8', '8', 910, 300); + options.assert.ok(true); +} +function penultimateNote(options) { + const f = VexFlowTests.makeFactory(options, 500, 550); + const score = f.EasyScore(); + const staffWidth = 310; + let system = undefined; + let voices = []; + let notes = []; + let note = undefined; + let stave = undefined; + let y = 10; + const draw = (softmax) => { + system = f.System({ + width: staffWidth, + y, + formatOptions: { align_rests: true }, + details: { softmaxFactor: softmax }, + }); + notes = []; + voices = []; + note = score.notes('C4/8/r', { clef: 'bass' })[0]; + notes.push(note); + note = score.notes('A3/8', { stem: 'up', clef: 'bass' })[0]; + notes.push(note); + note = score.notes('C4/4', { stem: 'up', clef: 'bass' })[0]; + notes.push(note); + voices.push(score.voice(notes).setMode(2)); + notes = []; + note = score.notes('( F3 A3 )/4', { stem: 'down', clef: 'bass' })[0]; + notes.push(note); + note = score.notes('B4/4/r', {})[0]; + notes.push(note); + voices.push(score.voice(notes).setMode(2)); + notes = []; + stave = system.addStave({ voices: voices }); + stave.addClef('bass'); + stave.addTimeSignature('2/4'); + voices = []; + f.draw(); + f.getContext().fillText(`softmax: ${softmax.toString()}`, staffWidth + 20, y + 50); + y += 100; + }; + draw(15); + draw(10); + draw(5); + draw(2); + draw(1); + options.assert.ok(true); +} +function noteHeadPadding(options) { + const registry = new Registry(); + Registry.enableDefaultRegistry(registry); + const f = VexFlowTests.makeFactory(options, 600, 300); + const score = f.EasyScore(); + score.set({ time: '9/8' }); + const notes1 = score.notes('(d5 f5)/8,(c5 e5)/8,(d5 f5)/8,(c5 e5)/2.'); + const beams = [new Beam(notes1.slice(0, 3), true)]; + const voice1 = new Voice().setMode(Voice.Mode.SOFT); + const notes2 = score.notes('(g4 an4)/2.,(g4 a4)/4.', { clef: 'treble' }); + const voice2 = new Voice().setMode(Voice.Mode.SOFT); + voice2.addTickables(notes2); + voice1.addTickables(notes1); + const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]); + const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); + formatter.format([voice1, voice2], width); + const staveWidth = width + Stave.defaultPadding; + const stave1 = f.Stave({ y: 50, width: staveWidth }); + const stave2 = f.Stave({ y: 150, width: staveWidth }); + stave1.draw(); + stave2.draw(); + voice1.draw(f.getContext(), stave1); + voice2.draw(f.getContext(), stave2); + beams.forEach((b) => b.setContext(f.getContext()).draw()); + options.assert.ok(true); +} +function longMeasureProblems(options) { + const registry = new Registry(); + Registry.enableDefaultRegistry(registry); + const f = VexFlowTests.makeFactory(options, 1500, 300); + const score = f.EasyScore(); + score.set({ time: '4/4' }); + const notes1 = score.notes('b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/2,b4/8,b4/8'); + const voice1 = new Voice().setMode(Voice.Mode.SOFT); + const notes2 = score.notes('d3/4,(ab3 f4)/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d4/4,d4/2,d4/4', { clef: 'bass' }); + const voice2 = new Voice().setMode(Voice.Mode.SOFT); + voice2.addTickables(notes2); + voice1.addTickables(notes1); + const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]); + const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); + formatter.format([voice1, voice2], width); + const stave1 = f.Stave({ y: 50, width: width + Stave.defaultPadding }); + const stave2 = f.Stave({ y: 200, width: width + Stave.defaultPadding }); + stave1.draw(); + stave2.draw(); + voice1.draw(f.getContext(), stave1); + voice2.draw(f.getContext(), stave2); + options.assert.ok(true); +} +function accidentalJustification(options) { + const f = VexFlowTests.makeFactory(options, 600, 300); + const score = f.EasyScore(); + const notes11 = score.notes('a4/2, a4/4, a4/8, ab4/16, an4/16'); + const voice11 = score.voice(notes11, { time: '4/4' }); + const notes21 = score.notes('c4/2, d4/8, d4/8, e4/8, e4/8'); + const voice21 = score.voice(notes21, { time: '4/4' }); + let beams = Beam.generateBeams(notes11.slice(2)); + beams = beams.concat(beams, Beam.generateBeams(notes21.slice(1, 3))); + beams = beams.concat(Beam.generateBeams(notes21.slice(3))); + const formatter = f.Formatter({}).joinVoices([voice11]).joinVoices([voice21]); + const width = formatter.preCalculateMinTotalWidth([voice11, voice21]); + const stave11 = f.Stave({ y: 20, width: width + Stave.defaultPadding }); + const stave21 = f.Stave({ y: 130, width: width + Stave.defaultPadding }); + formatter.format([voice11, voice21], width); + const ctx = f.getContext(); + stave11.setContext(ctx).draw(); + stave21.setContext(ctx).draw(); + voice11.draw(ctx, stave11); + voice21.draw(ctx, stave21); + beams.forEach((b) => b.setContext(ctx).draw()); + options.assert.ok(true); +} +function unalignedNoteDurations1(options) { + const f = VexFlowTests.makeFactory(options, 600, 250); + const score = f.EasyScore(); + const notes11 = [ + new StaveNote({ keys: ['a/4'], duration: '8' }), + new StaveNote({ keys: ['b/4'], duration: '4' }), + new StaveNote({ keys: ['b/4'], duration: '8' }), + ]; + const notes21 = [ + new StaveNote({ keys: ['a/4'], duration: '16' }), + new StaveNote({ keys: ['b/4.'], duration: '4' }), + new StaveNote({ keys: ['a/4'], duration: '8d' }), + ]; + Dot.buildAndAttach([notes21[2]], { all: true }); + const ctx = f.getContext(); + const voice11 = score.voice(notes11, { time: '2/4' }).setMode(Voice.Mode.SOFT); + const voice21 = score.voice(notes21, { time: '2/4' }).setMode(Voice.Mode.SOFT); + const beams21 = Beam.generateBeams(notes21); + const beams11 = Beam.generateBeams(notes11); + const formatter = new Formatter(); + formatter.joinVoices([voice11]); + formatter.joinVoices([voice21]); + const width = formatter.preCalculateMinTotalWidth([voice11, voice21]); + const stave11 = f.Stave({ y: 20, width: width + Stave.defaultPadding }); + const stave21 = f.Stave({ y: 130, width: width + Stave.defaultPadding }); + formatter.format([voice11, voice21], width); + stave11.setContext(ctx).draw(); + stave21.setContext(ctx).draw(); + voice11.draw(ctx, stave11); + voice21.draw(ctx, stave21); + beams21.forEach((b) => b.setContext(ctx).draw()); + beams11.forEach((b) => b.setContext(ctx).draw()); + options.assert.ok(voice11.getTickables()[1].getX() > voice21.getTickables()[1].getX()); +} +function unalignedNoteDurations2(options) { + const notes1 = [ + new StaveNote({ keys: ['b/4'], duration: '8r' }), + new StaveNote({ keys: ['g/4'], duration: '16' }), + new StaveNote({ keys: ['c/5'], duration: '16' }), + new StaveNote({ keys: ['e/5'], duration: '16' }), + new StaveNote({ keys: ['g/4'], duration: '16' }), + new StaveNote({ keys: ['c/5'], duration: '16' }), + new StaveNote({ keys: ['e/5'], duration: '16' }), + new StaveNote({ keys: ['b/4'], duration: '8r' }), + new StaveNote({ keys: ['g/4'], duration: '16' }), + new StaveNote({ keys: ['c/5'], duration: '16' }), + new StaveNote({ keys: ['e/5'], duration: '16' }), + new StaveNote({ keys: ['g/4'], duration: '16' }), + new StaveNote({ keys: ['c/5'], duration: '16' }), + new StaveNote({ keys: ['e/5'], duration: '16' }), + ]; + const notes2 = [ + new StaveNote({ keys: ['a/4'], duration: '16r' }), + new StaveNote({ keys: ['e/4.'], duration: '8d' }), + new StaveNote({ keys: ['e/4'], duration: '4' }), + new StaveNote({ keys: ['a/4'], duration: '16r' }), + new StaveNote({ keys: ['e/4.'], duration: '8d' }), + new StaveNote({ keys: ['e/4'], duration: '4' }), + ]; + const f = VexFlowTests.makeFactory(options, 750, 280); + const context = f.getContext(); + const voice1 = new Voice({ num_beats: 4, beat_value: 4 }); + voice1.addTickables(notes1); + const voice2 = new Voice({ num_beats: 4, beat_value: 4 }); + voice2.addTickables(notes2); + const formatter = new Formatter({ globalSoftmax: options.params.globalSoftmax }); + formatter.joinVoices([voice1]); + formatter.joinVoices([voice2]); + const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); + formatter.format([voice1, voice2], width); + const stave1 = new Stave(10, 40, width + Stave.defaultPadding); + const stave2 = new Stave(10, 100, width + Stave.defaultPadding); + stave1.setContext(context).draw(); + stave2.setContext(context).draw(); + voice1.draw(context, stave1); + voice2.draw(context, stave2); + options.assert.ok(voice1.getTickables()[1].getX() > voice2.getTickables()[1].getX()); +} +function alignedMixedElements(options) { + const f = VexFlowTests.makeFactory(options, 800, 500); + const context = f.getContext(); + const stave = new Stave(10, 200, 400); + const stave2 = new Stave(410, 200, 400); + const notes = [ + new StaveNote({ keys: ['c/5'], duration: '8' }) + .addModifier(new Accidental('##'), 0) + .addModifier(new FretHandFinger('4').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new StringNumber('3').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a>').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a^').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('am').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.BOTTOM), 0) + .addModifier(new Annotation('xxxx').setVerticalJustification(AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0) + .addModifier(new Annotation('ttt').setVerticalJustification(AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0), + new StaveNote({ keys: ['c/5'], duration: '8', stem_direction: Stem.DOWN }) + .addModifier(new StringNumber('3').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) + .addModifier(new Articulation('a>').setPosition(ModifierPosition.BELOW), 0), + new StaveNote({ keys: ['c/5'], duration: '8' }), + ]; + const notes2 = [ + new StaveNote({ keys: ['c/5'], duration: '8' }) + .addModifier(new StringNumber('3').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), + new StaveNote({ keys: ['c/5'], duration: '8', stem_direction: Stem.DOWN }) + .addModifier(new FretHandFinger('4').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new StringNumber('3').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a>').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a^').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('am').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Articulation('a@u').setPosition(ModifierPosition.ABOVE), 0) + .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.TOP), 0) + .addModifier(new Annotation('xxxx').setVerticalJustification(AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0) + .addModifier(new Annotation('ttt').setVerticalJustification(AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0), + new StaveNote({ keys: ['c/5'], duration: '8' }), + ]; + const tuplet = new Tuplet(notes).setTupletLocation(-1); + const tuplet2 = new Tuplet(notes2).setTupletLocation(1); + Formatter.FormatAndDraw(context, stave, notes); + Formatter.FormatAndDraw(context, stave2, notes2); + stave.setContext(context).draw(); + stave2.setContext(context).draw(); + tuplet.setContext(context).draw(); + tuplet2.setContext(context).draw(); + options.assert.ok(true); +} +function justifyStaveNotes(options) { + const f = VexFlowTests.makeFactory(options, 520, 280); + const ctx = f.getContext(); + const score = f.EasyScore(); + let y = 30; + function justifyToWidth(width) { + f.Stave({ y: y }).addClef('treble'); + const voices = [ + score.voice(score.notes('(cbb4 en4 a4)/2, (d4 e4 f4)/8, (d4 f4 a4)/8, (cn4 f#4 a4)/4', { stem: 'down' })), + score.voice(score.notes('(bb4 e#5 a5)/4, (d5 e5 f5)/2, (c##5 fb5 a5)/4', { stem: 'up' })), + ]; + f.Formatter() + .joinVoices(voices) + .format(voices, width - (Stave.defaultPadding + getGlyphWidth('gClef'))); + voices[0].getTickables().forEach((note) => Note.plotMetrics(ctx, note, y + 140)); + voices[1].getTickables().forEach((note) => Note.plotMetrics(ctx, note, y - 20)); + y += 210; + } + justifyToWidth(520); + f.draw(); + options.assert.ok(true); +} +function notesWithTab(options) { + const f = VexFlowTests.makeFactory(options, 420, 580); + const score = f.EasyScore(); + let y = 10; + function justifyToWidth(width) { + const stave = f.Stave({ y: y }).addClef('treble'); + const voice = score.voice(score.notes('d#4/2, (c4 d4)/8, d4/8, (c#4 e4 a4)/4', { stem: 'up' })); + y += 100; + f.TabStave({ y: y }).addTabGlyph().setNoteStartX(stave.getNoteStartX()); + const tabVoice = score.voice([ + f.TabNote({ positions: [{ str: 3, fret: 6 }], duration: '2' }).addModifier(new Bend('Full'), 0), + f + .TabNote({ + positions: [ + { str: 2, fret: 3 }, + { str: 3, fret: 5 }, + ], + duration: '8', + }) + .addModifier(new Bend('Unison'), 1), + f.TabNote({ positions: [{ str: 3, fret: 7 }], duration: '8' }), + f.TabNote({ + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 7 }, + { str: 2, fret: 5 }, + ], + duration: '4', + }), + ]); + f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).format([voice, tabVoice], width); + y += 150; + } + justifyToWidth(0); + justifyToWidth(300); + f.draw(); + options.assert.ok(true); +} +function multiStaves(options) { + const f = VexFlowTests.makeFactory(options, 600, 400); + const ctx = f.getContext(); + const score = f.EasyScore(); + const notes11 = score.notes('f4/4, d4/8, g4/4, eb4/8'); + const notes21 = score.notes('d4/8, d4, d4, d4, e4, eb4'); + const notes31 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); + let voices = [ + score.voice(notes11, { time: '6/8' }), + score.voice(notes21, { time: '6/8' }), + score.voice(notes31, { time: '6/8' }), + ]; + let formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + let width = formatter.preCalculateMinTotalWidth(voices); + formatter.format(voices, width); + let beams = [ + new Beam(notes21.slice(0, 3), true), + new Beam(notes21.slice(3, 6), true), + new Beam(notes31.slice(0, 3), true), + new Beam(notes31.slice(3, 6), true), + ]; + const staveYs = [20, 130, 250]; + let staveWidth = width + getGlyphWidth('gClef') + getGlyphWidth('timeSig8') + Stave.defaultPadding; + let staves = [ + f.Stave({ y: staveYs[0], width: staveWidth }).addClef('treble').addTimeSignature('6/8'), + f.Stave({ y: staveYs[1], width: staveWidth }).addClef('treble').addTimeSignature('6/8'), + f.Stave({ y: staveYs[2], width: staveWidth }).addClef('bass').addTimeSignature('6/8'), + ]; + f.StaveConnector({ + top_stave: staves[1], + bottom_stave: staves[2], + type: 'brace', + }); + for (let i = 0; i < staves.length; ++i) { + staves[i].setContext(ctx).draw(); + voices[i].draw(ctx, staves[i]); + } + beams.forEach((beam) => beam.setContext(ctx).draw()); + const notes12 = score.notes('ab4/4, bb4/8, (cb5 eb5)/4[stem="down"], d5/8[stem="down"]'); + const notes22 = score.notes('(eb4 ab4)/4., (c4 eb4 ab4)/4, db5/8', { stem: 'up' }); + const notes32 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); + voices = [ + score.voice(notes12, { time: '6/8' }), + score.voice(notes22, { time: '6/8' }), + score.voice(notes32, { time: '6/8' }), + ]; + formatter = f.Formatter(); + voices.forEach((v) => formatter.joinVoices([v])); + width = formatter.preCalculateMinTotalWidth(voices); + const staveX = staves[0].getX() + staves[0].getWidth(); + staveWidth = width + Stave.defaultPadding; + staves = [ + f.Stave({ x: staveX, y: staveYs[0], width: staveWidth }), + f.Stave({ x: staveX, y: staveYs[1], width: staveWidth }), + f.Stave({ x: staveX, y: staveYs[2], width: staveWidth }), + ]; + formatter.format(voices, width); + beams = [ + new Beam(notes32.slice(0, 3), true), + new Beam(notes32.slice(3, 6), true), + ]; + for (let i = 0; i < staves.length; ++i) { + staves[i].setContext(ctx).draw(); + voices[i].draw(ctx, staves[i]); + voices[i].getTickables().forEach((note) => Note.plotMetrics(ctx, note, staveYs[i] - 20)); + } + beams.forEach((beam) => beam.setContext(ctx).draw()); + options.assert.ok(true); +} +function proportional(options) { + const debug = options.params.debug; + Registry.enableDefaultRegistry(new Registry()); + const f = VexFlowTests.makeFactory(options, 775, 750); + const system = f.System({ + x: 50, + autoWidth: true, + debugFormatter: debug, + noJustification: !(options.params.justify === undefined && true), + formatIterations: options.params.iterations, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const voices = [ + score.notes('c5/8, c5'), + score.tuplet(score.notes('a4/8, a4, a4'), { notes_occupied: 2 }), + score.notes('c5/16, c5, c5, c5'), + score.tuplet(score.notes('a4/16, a4, a4, a4, a4'), { notes_occupied: 4 }), + score.tuplet(score.notes('a4/32, a4, a4, a4, a4, a4, a4'), { notes_occupied: 8 }), + ]; + const createVoice = (notes) => score.voice(notes, { time: '1/4' }); + const createStave = (voice) => system + .addStave({ voices: [voice], debugNoteMetrics: debug }) + .addClef('treble') + .addTimeSignature('1/4'); + voices.map(createVoice).forEach(createStave); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +function softMax(options) { + const f = VexFlowTests.makeFactory(options, 550, 500); + const textX = 450 / 0.8; + f.getContext().scale(0.8, 0.8); + function draw(y, factor) { + const score = f.EasyScore(); + const system = f.System({ + x: 100, + y, + details: { softmaxFactor: factor }, + autoWidth: true, + }); + system + .addStave({ + voices: [ + score.voice(score + .notes('C#5/h, a4/q') + .concat(score.beam(score.notes('Abb4/8, A4/8'))) + .concat(score.beam(score.notes('A4/16, A#4, A4, Ab4/32, A4'))), { time: '5/4' }), + ], + }) + .addClef('treble') + .addTimeSignature('5/4'); + f.draw(); + f.getContext().fillText(`softmax: ${factor.toString()}`, textX, y + 50); + options.assert.ok(true); + } + draw(50, 1); + draw(150, 2); + draw(250, 5); + draw(350, 10); + draw(450, 15); +} +function mixTime(options) { + const f = VexFlowTests.makeFactory(options, 400 + Stave.defaultPadding, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + details: {}, + autoWidth: true, + debugFormatter: true, + }); + system + .addStave({ + voices: [score.voice(score.notes('C#5/q, B4').concat(score.beam(score.notes('A4/8, E4, C4, D4'))))], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system + .addStave({ + voices: [score.voice(score.notes('C#5/q, B4, B4').concat(score.tuplet(score.beam(score.notes('A4/8, E4, C4')))))], + }) + .addClef('treble') + .addTimeSignature('4/4'); + f.draw(); + options.assert.ok(true); +} +function tightNotes1(options) { + const f = VexFlowTests.makeFactory(options, 440, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + autoWidth: true, + debugFormatter: true, + details: { maxIterations: 10 }, + }); + system + .addStave({ + voices: [ + score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system + .addStave({ + voices: [ + score.voice(score.notes('B4/q, B4').concat(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')))), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + f.draw(); + options.assert.ok(true); +} +function tightNotes2(options) { + const f = VexFlowTests.makeFactory(options, 440, 250); + f.getContext().scale(0.8, 0.8); + const score = f.EasyScore(); + const system = f.System({ + autoWidth: true, + debugFormatter: true, + }); + system + .addStave({ + voices: [ + score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system + .addStave({ + voices: [score.voice(score.notes('B4/w'))], + }) + .addClef('treble') + .addTimeSignature('4/4'); + f.draw(); + options.assert.ok(true); +} +function annotations(options) { + const pageWidth = 916; + const pageHeight = 600; + const f = VexFlowTests.makeFactory(options, pageWidth, pageHeight); + const context = f.getContext(); + const lyrics1 = ['ipso', 'ipso-', 'ipso', 'ipso', 'ipsoz', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso']; + const lyrics2 = ['ipso', 'ipso-', 'ipsoz', 'ipso', 'ipso', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso']; + const smar = [ + { + sm: 5, + width: 550, + lyrics: lyrics1, + title: '550px,softMax:5', + }, + { + sm: 5, + width: 550, + lyrics: lyrics2, + title: '550px,softmax:5,different word order', + }, + { + sm: 10, + width: 550, + lyrics: lyrics2, + title: '550px,softmax:10', + }, + { + sm: 15, + width: 550, + lyrics: lyrics2, + title: '550px,softmax:15', + }, + ]; + const rowSize = 140; + const beats = 12; + const beatsPer = 8; + const beamGroup = 3; + const durations = ['8d', '16', '8', '8d', '16', '8', '8d', '16', '8', '4', '8']; + const beams = []; + let y = 40; + smar.forEach((sm) => { + const stave = new Stave(10, y, sm.width); + const notes = []; + let iii = 0; + context.fillText(sm.title, 100, y); + y += rowSize; + durations.forEach((dd) => { + const note = new StaveNote({ keys: ['b/4'], duration: dd }); + if (dd.indexOf('d') >= 0) { + Dot.buildAndAttach([note], { all: true }); + } + if (sm.lyrics.length > iii) { + note.addModifier(new Annotation(sm.lyrics[iii]) + .setVerticalJustification(Annotation.VerticalJustify.BOTTOM) + .setFont(Font.SERIF, 12, FontWeight.NORMAL)); + } + notes.push(note); + iii += 1; + }); + notes.forEach((note) => { + if (note.getDuration().indexOf('d') >= 0) { + Dot.buildAndAttach([note], { all: true }); + } + }); + let notesToBeam = []; + notes.forEach((note) => { + if (note.getIntrinsicTicks() < 4096) { + notesToBeam.push(note); + if (notesToBeam.length >= beamGroup) { + beams.push(new Beam(notesToBeam)); + notesToBeam = []; + } + } + else { + notesToBeam = []; + } + }); + const voice1 = new Voice({ num_beats: beats, beat_value: beatsPer }).setMode(Voice.Mode.SOFT).addTickables(notes); + const fmt = new Formatter({ softmaxFactor: sm.sm, maxIterations: 2 }).joinVoices([voice1]); + fmt.format([voice1], sm.width - 11); + stave.setContext(context).draw(); + voice1.draw(context, stave); + beams.forEach((b) => b.setContext(context).draw()); + }); + options.assert.ok(true); +} +VexFlowTests.register(FormatterTests); +export { FormatterTests }; diff --git a/build/esm/tests/fraction_tests.js b/build/esm/tests/fraction_tests.js new file mode 100644 index 0000000000..2dec3ee0e9 --- /dev/null +++ b/build/esm/tests/fraction_tests.js @@ -0,0 +1,72 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Fraction } from '../src/fraction.js'; +const FractionTests = { + Start() { + QUnit.module('Fraction'); + QUnit.test('Basic', basic); + QUnit.test('With Other Fractions', withOtherFractions); + }, +}; +function basic(assert) { + const f_1_2 = new Fraction(1, 2); + assert.ok(f_1_2.equals(0.5), 'Fraction: 1/2 equals 0.5'); + assert.ok(f_1_2.equals(new Fraction(1, 2)), 'Fraction: 1/2 equals 1/2'); + assert.ok(f_1_2.equals(new Fraction(2, 4)), 'Fraction: 1/2 equals 2/4'); + assert.notOk(f_1_2.greaterThan(1), 'Fraction: ! 1/2 > 1'); + assert.ok(f_1_2.greaterThan(0.2), 'Fraction: 1/2 > 0.2'); + assert.ok(f_1_2.greaterThanEquals(0.2), 'Fraction: 1/2 >= 0.2'); + assert.ok(f_1_2.greaterThanEquals(0.5), 'Fraction: 1/2 >= 0.5'); + assert.notOk(f_1_2.greaterThanEquals(1), 'Fraction: ! 1/2 >= 1'); + assert.notOk(f_1_2.lessThan(0.5), 'Fraction: ! 1/2 < 0.5'); + assert.ok(f_1_2.lessThan(1), 'Fraction: 1/2 < 1'); + assert.ok(f_1_2.lessThanEquals(0.6), 'Fraction: 1/2 <= 0.6'); + assert.ok(f_1_2.lessThanEquals(0.5), 'Fraction: 1/2 <= 0.5'); + assert.notOk(f_1_2.lessThanEquals(0.4), 'Fraction: ! 1/2 <= 0.4'); + const f_05 = f_1_2.copy(0.5); + assert.strictEqual(f_05, f_1_2, 'Fraction: f_05 === f_1_2'); + assert.strictEqual(f_05.toString(), '0.5/1', 'Fraction: f_05.toString() === "0.5/1"'); + assert.strictEqual(f_05.toSimplifiedString(), '1/2', 'Fraction: f_05.toSimplifiedString() === "1/2"'); + const tF_n = f_05.clone(); + assert.notStrictEqual(tF_n, f_05, 'Fraction: tF_n !== f_05'); + assert.notEqual(tF_n, f_05, 'Fraction: tF_n != f_05'); + assert.deepEqual(tF_n, f_05, 'tF_n deepEqual f_05'); + assert.notDeepEqual(tF_n, {}, 'tF_n notDeepEqual {}'); + tF_n.subtract(-0.5); + assert.ok(tF_n.equals(1), 'Fraction: 0.5 -(-0.5) equals 1'); + tF_n.add(1); + assert.ok(tF_n.equals(2), 'Fraction: 1 + 1 equals 2'); + tF_n.multiply(2); + assert.ok(tF_n.equals(4), 'Fraction: 2 * 2 equals 4'); + tF_n.divide(2); + assert.ok(tF_n.equals(2), 'Fraction: 4 / 2 equals 2'); + assert.equal(Fraction.LCMM([]), 0); + assert.equal(Fraction.LCMM([17]), 17); + assert.equal(Fraction.LCMM([2, 5]), 10); + assert.equal(Fraction.LCMM([15, 3, 5]), 15); + assert.equal(Fraction.LCMM([2, 4, 6]), 12); + assert.equal(Fraction.LCMM([2, 3, 4, 5]), 60); + assert.equal(Fraction.LCMM([12, 15, 10, 75]), 300); + assert.equal(Fraction.GCD(0, 0), 0); + assert.equal(Fraction.GCD(0, 99), 99); + assert.equal(Fraction.GCD(77, 0), 77); + assert.equal(Fraction.GCD(42, 14), 14); + assert.equal(Fraction.GCD(15, 10), 5); +} +function withOtherFractions(assert) { + const f_1_2 = new Fraction(1, 2); + const f_1_4 = new Fraction(1, 4); + const f_1_8 = new Fraction(1, 8); + const f_2 = new Fraction(2, 1); + const a = f_1_2.clone().multiply(f_1_2); + assert.ok(a.equals(f_1_4), '1/2 x 1/2 == 1/4'); + const b = f_1_2.clone().divide(f_1_4); + assert.ok(b.equals(f_2), '1/2 / 1/4 == 2'); + const c = f_2.clone().subtract(f_1_2).subtract(f_1_2).subtract(f_1_4); + const d = f_1_8.clone().add(f_1_8).add(f_1_8).multiply(f_2); + assert.ok(c.equals(d), '2-1/2-1/2-1/4 == (1/8+1/8+1/8)*(2/1)'); + assert.equal(c.value(), 0.75, '3/4 == 0.75'); + const e = f_1_8.clone().add(f_1_4).add(f_1_8); + assert.ok(e.equals(f_1_2), '1/8 + 1/4 + 1/8 == 1/2'); +} +VexFlowTests.register(FractionTests); +export { FractionTests }; diff --git a/build/esm/tests/ghostnote_tests.js b/build/esm/tests/ghostnote_tests.js new file mode 100644 index 0000000000..ac38601788 --- /dev/null +++ b/build/esm/tests/ghostnote_tests.js @@ -0,0 +1,77 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +const GhostNoteTests = { + Start() { + QUnit.module('GhostNote'); + const run = VexFlowTests.runTests; + run('GhostNote Basic', basic); + run('GhostNote Dotted', dotted); + }, +}; +function createTest(addItems) { + return (options) => { + const factory = VexFlowTests.makeFactory(options, 550); + const stave = factory.Stave(); + const score = factory.EasyScore(); + addItems(factory, score); + const voices = factory.getVoices(); + factory.Formatter().joinVoices(voices).formatToStave(voices, stave); + factory.draw(); + options.assert.ok(true, 'all pass'); + }; +} +const basic = createTest((f, score) => { + const voiceTop = score.voice(score.notes('f#5/4, f5, db5, c5, c5/8, d5, fn5, e5, d5, c5', { stem: 'up' }), { + time: '7/4', + }); + const notesTop = voiceTop.getTickables(); + f.Beam({ notes: notesTop.slice(4, 8) }); + f.Beam({ notes: notesTop.slice(8, 10) }); + score.voice([ + f.GhostNote({ duration: '2' }), + f.StaveNote({ keys: ['f/4'], stem_direction: -1, duration: '4' }), + f.GhostNote({ duration: '4' }), + f.StaveNote({ keys: ['e/4'], stem_direction: -1, duration: '4' }), + f.GhostNote({ duration: '8' }), + f.StaveNote({ keys: ['d/4'], stem_direction: -1, duration: '8' }).addModifier(f.Accidental({ type: '##' }), 0), + f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }), + ], { time: '7/4' }); +}); +const dotted = createTest((f, score) => { + const voice1 = score.voice([ + f.GhostNote({ duration: '4d' }), + f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }), + f.StaveNote({ duration: '4', keys: ['d/5'], stem_direction: 1 }), + f.StaveNote({ duration: '8', keys: ['c/5'], stem_direction: 1 }), + f.StaveNote({ duration: '16', keys: ['c/5'], stem_direction: 1 }), + f.StaveNote({ duration: '16', keys: ['d/5'], stem_direction: 1 }), + f.GhostNote({ duration: '2dd' }), + f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }), + ], { time: '8/4' }); + const voice2 = score.voice([ + f.StaveNote({ duration: '4', keys: ['f/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['d/4'], stem_direction: -1 }), + f.GhostNote({ duration: '4dd' }), + f.StaveNote({ duration: '16', keys: ['c/4'], stem_direction: -1 }), + f.StaveNote({ duration: '2', keys: ['c/4'], stem_direction: -1 }), + f.StaveNote({ duration: '4', keys: ['d/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['f/4'], stem_direction: -1 }), + f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }), + ], { time: '8/4' }); + const notes1 = voice1.getTickables(); + const notes2 = voice2.getTickables(); + const addAccidental = (note, type) => note.addModifier(f.Accidental({ type }), 0); + addAccidental(notes1[1], 'bb'); + addAccidental(notes1[4], '#'); + addAccidental(notes1[7], 'n'); + addAccidental(notes2[0], '#'); + addAccidental(notes2[4], 'b'); + addAccidental(notes2[5], '#'); + addAccidental(notes2[7], 'n'); + f.Beam({ notes: notes1.slice(3, 6) }); + f.Beam({ notes: notes2.slice(1, 3) }); + f.Beam({ notes: notes2.slice(7, 9) }); +}); +VexFlowTests.register(GhostNoteTests); +export { GhostNoteTests }; diff --git a/build/esm/tests/glyphnote_tests.js b/build/esm/tests/glyphnote_tests.js new file mode 100644 index 0000000000..d3f8d20ca2 --- /dev/null +++ b/build/esm/tests/glyphnote_tests.js @@ -0,0 +1,113 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { ChordSymbol } from '../src/chordsymbol.js'; +import { Glyph } from '../src/glyph.js'; +import { Registry } from '../src/registry.js'; +import { StaveConnector } from '../src/staveconnector.js'; +const GlyphNoteTests = { + Start() { + QUnit.module('GlyphNote'); + const run = VexFlowTests.runTests; + run('GlyphNote with ChordSymbols', chordChanges, { debug: false, noPadding: false }); + run('GlyphNote Positioning', basic, { debug: false, noPadding: false }); + run('GlyphNote No Stave Padding', basic, { debug: true, noPadding: true }); + run('GlyphNote RepeatNote', repeatNote, { debug: false, noPadding: true }); + }, +}; +function chordChanges(options) { + Registry.enableDefaultRegistry(new Registry()); + const f = VexFlowTests.makeFactory(options, 300, 200); + const system = f.System({ + x: 50, + width: 250, + debugFormatter: options.params.debug, + noPadding: options.params.noPadding, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const notes = [ + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }), + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }), + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }), + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }), + ]; + const chord1 = f + .ChordSymbol({ reportWidth: false }) + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('(#11b9)', { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT }); + const chord2 = f + .ChordSymbol() + .addText('F7') + .setHorizontal('left') + .addGlyphOrText('#11', { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT }) + .addGlyphOrText('b9', { symbolModifier: ChordSymbol.symbolModifiers.SUBSCRIPT }); + notes[0].addModifier(chord1, 0); + notes[2].addModifier(chord2, 0); + const voice = score.voice(notes); + system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +function basic(options) { + Registry.enableDefaultRegistry(new Registry()); + const f = VexFlowTests.makeFactory(options, 300, 400); + const system = f.System({ + x: 50, + width: 250, + debugFormatter: options.params.debug, + noPadding: options.params.noPadding, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const newVoice = (notes) => score.voice(notes, { time: '1/4' }); + const newStave = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); + const voices = [ + [f.GlyphNote(new Glyph('repeat1Bar', 40), { duration: 'q' }, { line: 4 })], + [f.GlyphNote(new Glyph('repeat2Bars', 40), { duration: 'q', align_center: true })], + [ + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }), + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }), + f.GlyphNote(new Glyph('repeat4Bars', 40), { duration: '16' }), + f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }), + ], + ]; + voices.map(newVoice).forEach(newStave); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +function repeatNote(options) { + Registry.enableDefaultRegistry(new Registry()); + const f = VexFlowTests.makeFactory(options, 300, 500); + const system = f.System({ + x: 50, + width: 250, + debugFormatter: options.params.debug, + noPadding: options.params.noPadding, + details: { alpha: options.params.alpha }, + }); + const score = f.EasyScore(); + const createVoice = (notes) => score.voice(notes, { time: '1/4' }); + const addStaveWithVoice = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); + const voices = [ + [f.RepeatNote('1')], + [f.RepeatNote('2')], + [f.RepeatNote('4')], + [ + f.RepeatNote('slash', { duration: '16' }), + f.RepeatNote('slash', { duration: '16' }), + f.RepeatNote('slash', { duration: '16' }), + f.RepeatNote('slash', { duration: '16' }), + ], + ]; + voices.map(createVoice).forEach(addStaveWithVoice); + system.addConnector().setType(StaveConnector.type.BRACKET); + f.draw(); + Registry.disableDefaultRegistry(); + options.assert.ok(true); +} +VexFlowTests.register(GlyphNoteTests); +export { GlyphNoteTests }; diff --git a/build/esm/tests/gracenote_tests.js b/build/esm/tests/gracenote_tests.js new file mode 100644 index 0000000000..7e31c96e75 --- /dev/null +++ b/build/esm/tests/gracenote_tests.js @@ -0,0 +1,413 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Annotation } from '../src/annotation.js'; +import { Articulation } from '../src/articulation.js'; +import { Dot } from '../src/dot.js'; +import { Formatter } from '../src/formatter.js'; +const GraceNoteTests = { + Start() { + QUnit.module('Grace Notes'); + const run = VexFlowTests.runTests; + run('Grace Note Basic', basic); + run('With Articulation and Annotation on Parent Note', graceNoteModifiers); + run('Grace Note Basic with Slurs', basicSlurred); + run('Grace Note Stem', stem); + run('Grace Note Stem with Beams 1', stemWithBeamed, { + keys1: ['g/4'], + stemDirection1: 1, + keys2: ['d/5'], + stemDirection2: -1, + }); + run('Grace Note Stem with Beams 2', stemWithBeamed, { + keys1: ['a/3'], + stemDirection1: 1, + keys2: ['a/5'], + stemDirection2: -1, + }); + run('Grace Note Stem with Beams 3', stemWithBeamed, { + keys1: ['c/4'], + stemDirection1: 1, + keys2: ['c/6'], + stemDirection2: -1, + }); + run('Grace Note Slash', slash); + run('Grace Note Slash with Beams', slashWithBeams); + run('Grace Notes Multiple Voices', multipleVoices); + run('Grace Notes Multiple Voices Multiple Draws', multipleVoicesMultipleDraws); + }, +}; +function basic(options) { + const f = VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + const gracenotes = [ + { keys: ['e/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['a/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['e/4'], duration: '8' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4', 'g/4'], duration: '8' }, + { keys: ['a/4'], duration: '32' }, + { keys: ['b/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['g/4'], duration: '8' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + ].map(f.GraceNote.bind(f)); + gracenotes[1].addModifier(f.Accidental({ type: '##' }), 0); + gracenotes3[3].addModifier(f.Accidental({ type: 'bb' }), 0); + Dot.buildAndAttach([gracenotes4[0]], { all: true }); + const notes = [ + f + .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.GraceNoteGroup({ notes: gracenotes1 }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0), + ]; + const voice = f.Voice().setStrict(false).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteBasic'); +} +function graceNoteModifiers(options) { + const f = VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + const gracenotes = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); + const notes = [ + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new Articulation('a-').setPosition(3), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new Articulation('a-').setPosition(3), 0) + .addModifier(new Accidental('#')), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new Articulation('a-').setPosition(3), 0) + .addModifier(new Annotation('words')), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new Articulation('a-').setPosition(3), 0) + .addModifier(new Articulation('a>').setPosition(3), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) + .addModifier(new Articulation('a-').setPosition(3), 0) + .addModifier(new Articulation('a>').setPosition(3), 0) + .addModifier(new Articulation('a@a').setPosition(3), 0), + ]; + const voice = f.Voice().setStrict(false).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteModifiers'); +} +function basicSlurred(options) { + const f = VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + const gracenotes0 = [ + { keys: ['e/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['a/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['e/4'], duration: '8' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4', 'g/4'], duration: '8' }, + { keys: ['a/4'], duration: '32' }, + { keys: ['b/4'], duration: '32' }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['a/4'], duration: '8' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + ].map(f.GraceNote.bind(f)); + gracenotes0[1].addModifier(f.Accidental({ type: '#' }), 0); + gracenotes3[3].addModifier(f.Accidental({ type: 'b' }), 0); + gracenotes3[2].addModifier(f.Accidental({ type: 'n' }), 0); + Dot.buildAndAttach([gracenotes4[0]], { all: true }); + const notes = [ + f + .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes0, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.GraceNoteGroup({ notes: gracenotes1, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes2, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes3, slur: true }).beamNotes(), 0), + f + .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) + .addModifier(f.GraceNoteGroup({ notes: gracenotes4, slur: true }).beamNotes(), 0), + f.StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }), + ]; + const voice = f.Voice().setStrict(false).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteBasic'); +} +const createNoteForStemTest = (duration, noteBuilder, keys, stem_direction, slash = false) => { + const struct = { duration, slash }; + struct.stem_direction = stem_direction; + struct.keys = keys; + return noteBuilder(struct); +}; +const durationsForStemTest = ['8', '16', '32', '64', '128']; +function stem(options) { + const f = VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + function createNotes(noteBuilder, keys, stem_direction) { + return durationsForStemTest.map((duration) => createNoteForStemTest(duration, noteBuilder, keys, stem_direction)); + } + function createNoteBlock(keys, stem_direction) { + const staveNotes = createNotes(f.StaveNote.bind(f), keys, stem_direction); + const gracenotes = createNotes(f.GraceNote.bind(f), keys, stem_direction); + staveNotes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0); + return staveNotes; + } + const voice = f.Voice().setStrict(false); + voice.addTickables(createNoteBlock(['g/4'], 1)); + voice.addTickables(createNoteBlock(['d/5'], -1)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteStem'); +} +function stemWithBeamed(options) { + const f = VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + function createBeamedNotes(noteBuilder, keys, stem_direction, beams, isGrace = false, notesToBeam) { + const ret = []; + durationsForStemTest.map((duration) => { + const n0 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction); + const n1 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction); + ret.push(n0); + ret.push(n1); + if (notesToBeam) { + notesToBeam.push([n0, n1]); + } + if (!isGrace) { + beams.push(f.Beam({ notes: [n0, n1] })); + } + }); + return ret; + } + function createBeamedNoteBlock(keys, stem_direction, beams) { + const bnotes = createBeamedNotes(f.StaveNote.bind(f), keys, stem_direction, beams); + const notesToBeam = []; + const gracenotes = createBeamedNotes(f.GraceNote.bind(f), keys, stem_direction, beams, true, notesToBeam); + const graceNoteGroup = f.GraceNoteGroup({ notes: gracenotes }); + notesToBeam.map(graceNoteGroup.beamNotes.bind(graceNoteGroup)); + bnotes[0].addModifier(graceNoteGroup, 0); + return bnotes; + } + const beams = []; + const voice = f.Voice().setStrict(false); + voice.addTickables(createBeamedNoteBlock(options.params.keys1, options.params.stemDirection1, beams)); + voice.addTickables(createBeamedNoteBlock(options.params.keys2, options.params.stemDirection2, beams)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteStem'); +} +function slash(options) { + const f = VexFlowTests.makeFactory(options, 700, 130); + const stave = f.Stave({ x: 10, y: 10, width: 650 }); + function createNotes(noteT, keys, stem_direction, slash) { + return durationsForStemTest.map((d) => createNoteForStemTest(d, noteT, keys, stem_direction, slash)); + } + function createNoteBlock(keys, stem_direction) { + const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })]; + let graceNotes = createNotes(f.GraceNote.bind(f), keys, stem_direction, true); + const duration = '8'; + const gns = [ + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + ].map(f.GraceNote.bind(f)); + const notesToBeam = []; + notesToBeam.push([gns[0], gns[1], gns[2]]); + notesToBeam.push([gns[3], gns[4], gns[5]]); + notesToBeam.push([gns[6], gns[7], gns[8]]); + graceNotes = graceNotes.concat(gns); + const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes }); + notesToBeam.forEach((notes) => graceNoteGroup.beamNotes(notes)); + notes[0].addModifier(graceNoteGroup, 0); + return notes; + } + const voice = f.Voice().setStrict(false); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1)); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteSlash'); +} +function slashWithBeams(options) { + const f = VexFlowTests.makeFactory(options, 800, 130); + const stave = f.Stave({ x: 10, y: 10, width: 750 }); + function createNoteBlock(keys, stem_direction) { + const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })]; + let allGraceNotes = []; + const graceNotesToBeam = []; + ['8', '16', '32', '64'].forEach(function (duration) { + const graceNotes = [ + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['d/4', 'a/4'], stem_direction, duration, slash: false }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: false }, + { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, + { keys: ['e/4', 'a/4'], stem_direction, duration, slash: false }, + ].map(f.GraceNote.bind(f)); + graceNotesToBeam.push([graceNotes[0], graceNotes[1]]); + graceNotesToBeam.push([graceNotes[2], graceNotes[3]]); + graceNotesToBeam.push([graceNotes[4], graceNotes[5]]); + allGraceNotes = allGraceNotes.concat(graceNotes); + }); + const graceNoteGroup = f.GraceNoteGroup({ notes: allGraceNotes }); + graceNotesToBeam.forEach((g) => graceNoteGroup.beamNotes(g)); + notes[0].addModifier(graceNoteGroup, 0); + return notes; + } + const voice = f.Voice().setStrict(false); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1)); + voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1)); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'GraceNoteSlashWithBeams'); +} +function multipleVoices(options) { + const f = VexFlowTests.makeFactory(options, 450, 140); + const stave = f.Stave({ x: 10, y: 10, width: 450 }); + const notes = [ + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['e/5'], stem_direction: 1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const notes2 = [ + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['f/4'], duration: '32', stem_direction: -1 }, + { keys: ['e/4'], duration: '32', stem_direction: -1 }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['f/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '8', stem_direction: 1 }, + ].map(f.GraceNote.bind(f)); + gracenotes2[0].setStemDirection(-1); + gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0); + notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0); + notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0); + notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0); + notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0); + const voice = f.Voice().setStrict(false).addTickables(notes); + const voice2 = f.Voice().setStrict(false).addTickables(notes2); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); + f.draw(); + options.assert.ok(true, 'Sixteenth Test'); +} +function multipleVoicesMultipleDraws(options) { + const f = VexFlowTests.makeFactory(options, 450, 140); + const stave = f.Stave({ x: 10, y: 10, width: 450 }); + const notes = [ + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['c/5'], stem_direction: 1, duration: '16' }, + { keys: ['d/5'], stem_direction: 1, duration: '16' }, + { keys: ['f/5'], stem_direction: 1, duration: '16' }, + { keys: ['e/5'], stem_direction: 1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const notes2 = [ + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['c/4'], stem_direction: -1, duration: '16' }, + { keys: ['d/4'], stem_direction: -1, duration: '16' }, + { keys: ['f/4'], stem_direction: -1, duration: '16' }, + { keys: ['e/4'], stem_direction: -1, duration: '16' }, + ].map(f.StaveNote.bind(f)); + const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); + const gracenotes3 = [ + { keys: ['f/4'], duration: '32', stem_direction: -1 }, + { keys: ['e/4'], duration: '32', stem_direction: -1 }, + ].map(f.GraceNote.bind(f)); + const gracenotes4 = [ + { keys: ['f/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '32', stem_direction: 1 }, + { keys: ['e/5'], duration: '8', stem_direction: 1 }, + ].map(f.GraceNote.bind(f)); + gracenotes2[0].setStemDirection(-1); + gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0); + notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0); + notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0); + notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0); + notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0); + const voice = f.Voice().setStrict(false).addTickables(notes); + const voice2 = f.Voice().setStrict(false).addTickables(notes2); + f.Beam({ notes: notes.slice(0, 4) }); + f.Beam({ notes: notes.slice(4, 8) }); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); + f.draw(); + f.draw(); + options.assert.ok(true, 'Seventeenth Test'); +} +VexFlowTests.register(GraceNoteTests); +export { GraceNoteTests }; diff --git a/build/esm/tests/gracetabnote_tests.js b/build/esm/tests/gracetabnote_tests.js new file mode 100644 index 0000000000..39bd780d78 --- /dev/null +++ b/build/esm/tests/gracetabnote_tests.js @@ -0,0 +1,79 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { GraceNoteGroup } from '../src/gracenotegroup.js'; +import { GraceTabNote } from '../src/gracetabnote.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { Voice } from '../src/voice.js'; +const GraceTabNoteTests = { + Start() { + QUnit.module('Grace Tab Notes'); + const run = VexFlowTests.runTests; + run('Grace Tab Note Simple', simple); + run('Grace Tab Note Slurred', slurred); + }, +}; +const tabNote = (noteStruct) => new TabNote(noteStruct); +const graceTabNote = (noteStruct) => new GraceTabNote(noteStruct); +function setupContext(opts, ctxBuilder) { + const context = ctxBuilder(opts.elementId, 350, 140); + const stave = new TabStave(10, 10, 350).addTabGlyph().setContext(context).draw(); + return { context, stave }; +} +function simple(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder); + const note0 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: '4' }); + const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: '4' }); + const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' }); + const note3 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' }); + const gracenote_group0 = [{ positions: [{ str: 4, fret: 'x' }], duration: '8' }]; + const gracenote_group1 = [ + { positions: [{ str: 4, fret: 9 }], duration: '16' }, + { positions: [{ str: 4, fret: 10 }], duration: '16' }, + ]; + const gracenote_group2 = [{ positions: [{ str: 4, fret: 9 }], duration: '8' }]; + const gracenote_group3 = [ + { positions: [{ str: 5, fret: 10 }], duration: '8' }, + { positions: [{ str: 4, fret: 9 }], duration: '8' }, + ]; + const gracenotes0 = gracenote_group0.map(graceTabNote); + const gracenotes1 = gracenote_group1.map(graceTabNote); + const gracenotes2 = gracenote_group2.map(graceTabNote); + gracenotes2[0].setGhost(true); + const gracenotes3 = gracenote_group3.map(graceTabNote); + note0.addModifier(new GraceNoteGroup(gracenotes0), 0); + note1.addModifier(new GraceNoteGroup(gracenotes1), 0); + note2.addModifier(new GraceNoteGroup(gracenotes2), 0); + note3.addModifier(new GraceNoteGroup(gracenotes3), 0); + const voice = new Voice(Flow.TIME4_4); + voice.addTickables([note0, note1, note2, note3]); + new Formatter().joinVoices([voice]).format([voice], 250); + voice.draw(context, stave); + options.assert.ok(true, 'Simple Test'); +} +function slurred(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder); + const note0 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }); + const note1 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' }); + const gracenote_group0 = [ + { positions: [{ str: 4, fret: 9 }], duration: '8' }, + { positions: [{ str: 4, fret: 10 }], duration: '8' }, + ]; + const gracenote_group1 = [ + { positions: [{ str: 4, fret: 7 }], duration: '16' }, + { positions: [{ str: 4, fret: 8 }], duration: '16' }, + { positions: [{ str: 4, fret: 9 }], duration: '16' }, + ]; + const gracenotes0 = gracenote_group0.map(graceTabNote); + const gracenotes1 = gracenote_group1.map(graceTabNote); + note0.addModifier(new GraceNoteGroup(gracenotes0, true), 0); + note1.addModifier(new GraceNoteGroup(gracenotes1, true), 0); + const voice = new Voice(Flow.TIME4_4); + voice.addTickables([note0, note1]); + new Formatter().joinVoices([voice]).format([voice], 200); + voice.draw(context, stave); + options.assert.ok(true, 'Slurred Test'); +} +VexFlowTests.register(GraceTabNoteTests); +export { GraceTabNoteTests }; diff --git a/build/esm/tests/index.js b/build/esm/tests/index.js new file mode 100644 index 0000000000..60d6917b7a --- /dev/null +++ b/build/esm/tests/index.js @@ -0,0 +1,69 @@ +export * from './accidental_tests.js'; +export * from './annotation_tests.js'; +export * from './articulation_tests.js'; +export * from './auto_beam_formatting_tests.js'; +export * from './bach_tests.js'; +export * from './barline_tests.js'; +export * from './beam_tests.js'; +export * from './bend_tests.js'; +export * from './boundingbox_tests.js'; +export * from './chordsymbol_tests.js'; +export * from './clef_tests.js'; +export * from './crossbeam_tests.js'; +export * from './curve_tests.js'; +export * from './dot_tests.js'; +export * from './easyscore_tests.js'; +export * from './factory_tests.js'; +export * from './font_tests.js'; +export * from './formatter_tests.js'; +export * from './fraction_tests.js'; +export * from './ghostnote_tests.js'; +export * from './glyphnote_tests.js'; +export * from './gracenote_tests.js'; +export * from './gracetabnote_tests.js'; +export * from './key_clef_tests.js'; +export * from './keymanager_tests.js'; +export * from './keysignature_tests.js'; +export * from './modifier_tests.js'; +export * from './multimeasurerest_tests.js'; +export * from './music_tests.js'; +export * from './notehead_tests.js'; +export * from './notesubgroup_tests.js'; +export * from './offscreencanvas_tests.js'; +export * from './ornament_tests.js'; +export * from './parser_tests.js'; +export * from './pedalmarking_tests.js'; +export * from './percussion_tests.js'; +export * from './registry_tests.js'; +export * from './renderer_tests.js'; +export * from './rests_tests.js'; +export * from './rhythm_tests.js'; +export * from './stave_tests.js'; +export * from './staveconnector_tests.js'; +export * from './stavehairpin_tests.js'; +export * from './staveline_tests.js'; +export * from './stavemodifier_tests.js'; +export * from './stavenote_tests.js'; +export * from './stavetie_tests.js'; +export * from './stringnumber_tests.js'; +export * from './strokes_tests.js'; +export * from './style_tests.js'; +export * from './tabnote_tests.js'; +export * from './tabslide_tests.js'; +export * from './tabstave_tests.js'; +export * from './tabtie_tests.js'; +export * from './textbracket_tests.js'; +export * from './textformatter_tests.js'; +export * from './textnote_tests.js'; +export * from './threevoice_tests.js'; +export * from './tickcontext_tests.js'; +export * from './timesignature_tests.js'; +export * from './tremolo_tests.js'; +export * from './tuning_tests.js'; +export * from './tuplet_tests.js'; +export * from './typeguard_tests.js'; +export * from './unison_tests.js'; +export * from './vf_prefix_tests.js'; +export * from './vibrato_tests.js'; +export * from './vibratobracket_tests.js'; +export * from './voice_tests.js'; diff --git a/build/esm/tests/key_clef_tests.js b/build/esm/tests/key_clef_tests.js new file mode 100644 index 0000000000..97bfdf8546 --- /dev/null +++ b/build/esm/tests/key_clef_tests.js @@ -0,0 +1,106 @@ +import { MAJOR_KEYS, MINOR_KEYS, VexFlowTests } from './vexflow_test_helpers.js'; +import { Glyph } from '../src/glyph.js'; +import { KeySignature } from '../src/keysignature.js'; +import { Stave } from '../src/stave.js'; +const ClefKeySignatureTests = { + Start() { + QUnit.module('Clef Keys'); + const run = VexFlowTests.runTests; + run('Major Key Clef Test', keys, { majorKeys: true }); + run('Minor Key Clef Test', keys, { majorKeys: false }); + run('Stave Helper', staveHelper); + }, +}; +const fontWidths = () => { + const glyphScale = 39; + const sharpWidth = Glyph.getWidth('accidentalSharp', glyphScale) + 1; + const flatWidth = Glyph.getWidth('accidentalFlat', glyphScale) + 1; + const ksPadding = 10; + const naturalWidth = Glyph.getWidth('accidentalNatural', glyphScale) + 2; + const clefWidth = Glyph.getWidth('gClef', glyphScale); + return { sharpWidth, flatWidth, naturalWidth, clefWidth, ksPadding }; +}; +function keys(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; + const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + Stave.defaultPadding + 6 * w.ksPadding; + const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + Stave.defaultPadding + 6 * w.ksPadding; + const clefs = [ + 'treble', + 'soprano', + 'mezzo-soprano', + 'alto', + 'tenor', + 'baritone-f', + 'baritone-c', + 'bass', + 'french', + 'subbass', + 'percussion', + ]; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 20 + 80 * 2 * clefs.length); + const staves = []; + const keys = options.params.majorKeys ? MAJOR_KEYS : MINOR_KEYS; + let i; + let flat; + let sharp; + let keySig; + const yOffsetForFlatStaves = 10 + 80 * clefs.length; + for (i = 0; i < clefs.length; i++) { + staves[i] = new Stave(10, 10 + 80 * i, flatTestWidth); + staves[i].addClef(clefs[i]); + staves[i + clefs.length] = new Stave(10, yOffsetForFlatStaves + 10 + 80 * i, sharpTestWidth); + staves[i + clefs.length].addClef(clefs[i]); + for (flat = 0; flat < 8; flat++) { + keySig = new KeySignature(keys[flat]); + keySig.addToStave(staves[i]); + } + for (sharp = 8; sharp < keys.length; sharp++) { + keySig = new KeySignature(keys[sharp]); + keySig.addToStave(staves[i + clefs.length]); + } + } + Stave.formatBegModifiers(staves); + for (i = 0; i < clefs.length; i++) { + staves[i].setContext(ctx); + staves[i].draw(); + staves[i + clefs.length].setContext(ctx); + staves[i + clefs.length].draw(); + } + options.assert.ok(true, 'all pass'); +} +function staveHelper(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; + const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + Stave.defaultPadding + 7 * w.ksPadding; + const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + Stave.defaultPadding + 7 * w.ksPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 400); + const stave1 = new Stave(10, 10, flatTestWidth); + const stave2 = new Stave(10, 90, flatTestWidth); + const stave3 = new Stave(10, 170, sharpTestWidth); + const stave4 = new Stave(10, 260, sharpTestWidth); + const keys = MAJOR_KEYS; + stave1.addClef('treble'); + stave2.addClef('bass'); + stave3.addClef('alto'); + stave4.addClef('tenor'); + for (let n = 0; n < 8; ++n) { + stave1.addKeySignature(keys[n]); + stave2.addKeySignature(keys[n]); + } + for (let i = 8; i < keys.length; ++i) { + stave3.addKeySignature(keys[i]); + stave4.addKeySignature(keys[i]); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + stave3.setContext(ctx); + stave3.draw(); + stave4.setContext(ctx); + stave4.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(ClefKeySignatureTests); +export { ClefKeySignatureTests }; diff --git a/build/esm/tests/keymanager_tests.js b/build/esm/tests/keymanager_tests.js new file mode 100644 index 0000000000..a2b5e55f6d --- /dev/null +++ b/build/esm/tests/keymanager_tests.js @@ -0,0 +1,68 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { KeyManager } from '../src/index.js'; +const KeyManagerTests = { + Start() { + QUnit.module('KeyManager'); + QUnit.test('Valid Notes', works); + QUnit.test('Select Notes', selectNotes); + }, +}; +function works(assert) { + const manager = new KeyManager('g'); + assert.equal(manager.getAccidental('f').accidental, '#'); + manager.setKey('a'); + assert.equal(manager.getAccidental('c').accidental, '#'); + assert.equal(manager.getAccidental('a').accidental, null); + assert.equal(manager.getAccidental('f').accidental, '#'); + manager.setKey('A'); + assert.equal(manager.getAccidental('c').accidental, '#'); + assert.equal(manager.getAccidental('a').accidental, null); + assert.equal(manager.getAccidental('f').accidental, '#'); +} +function selectNotes(assert) { + const manager = new KeyManager('f'); + assert.equal(manager.selectNote('bb').note, 'bb'); + assert.equal(manager.selectNote('bb').accidental, 'b'); + assert.equal(manager.selectNote('g').note, 'g'); + assert.equal(manager.selectNote('g').accidental, null); + assert.equal(manager.selectNote('b').note, 'b'); + assert.equal(manager.selectNote('b').accidental, null); + assert.equal(manager.selectNote('a#').note, 'bb'); + assert.equal(manager.selectNote('g#').note, 'g#'); + assert.equal(manager.selectNote('g#').note, 'g#'); + assert.equal(manager.selectNote('bb').note, 'bb'); + assert.equal(manager.selectNote('bb').accidental, 'b'); + assert.equal(manager.selectNote('g').note, 'g'); + assert.equal(manager.selectNote('g').accidental, null); + assert.equal(manager.selectNote('b').note, 'b'); + assert.equal(manager.selectNote('b').accidental, null); + assert.equal(manager.selectNote('a#').note, 'bb'); + assert.equal(manager.selectNote('g#').note, 'g#'); + manager.reset(); + assert.equal(manager.selectNote('g#').change, true); + assert.equal(manager.selectNote('g#').change, false); + assert.equal(manager.selectNote('g').change, true); + assert.equal(manager.selectNote('g').change, false); + assert.equal(manager.selectNote('g#').change, true); + manager.reset(); + let note = manager.selectNote('bb'); + assert.equal(note.change, false); + assert.equal(note.accidental, 'b'); + note = manager.selectNote('g'); + assert.equal(note.change, false); + assert.equal(note.accidental, null); + note = manager.selectNote('g#'); + assert.equal(note.change, true); + assert.equal(note.accidental, '#'); + note = manager.selectNote('g'); + assert.equal(note.change, true); + assert.equal(note.accidental, null); + note = manager.selectNote('g'); + assert.equal(note.change, false); + assert.equal(note.accidental, null); + note = manager.selectNote('g#'); + assert.equal(note.change, true); + assert.equal(note.accidental, '#'); +} +VexFlowTests.register(KeyManagerTests); +export { KeyManagerTests }; diff --git a/build/esm/tests/keysignature_tests.js b/build/esm/tests/keysignature_tests.js new file mode 100644 index 0000000000..4f4e63ade5 --- /dev/null +++ b/build/esm/tests/keysignature_tests.js @@ -0,0 +1,308 @@ +import { MAJOR_KEYS, MINOR_KEYS, VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Glyph } from '../src/glyph.js'; +import { KeySignature } from '../src/keysignature.js'; +import { Stave } from '../src/stave.js'; +import { BarlineType } from '../src/stavebarline.js'; +const KeySignatureTests = { + Start() { + QUnit.module('KeySignature'); + QUnit.test('Key Parser Test', parser); + const run = VexFlowTests.runTests; + run('Major Key Test', majorKeys); + run('Minor Key Test', minorKeys); + run('Stave Helper', staveHelper); + run('Cancelled key test', majorKeysCanceled); + run('Cancelled key (for each clef) test', keysCanceledForEachClef); + run('Altered key test', majorKeysAltered); + run('End key with clef test', endKeyWithClef); + run('Key Signature Change test', changeKey); + }, +}; +const fontWidths = () => { + const glyphScale = 39; + const sharpWidth = Glyph.getWidth('accidentalSharp', glyphScale) + 1; + const flatWidth = Glyph.getWidth('accidentalFlat', glyphScale) + 1; + const naturalWidth = Glyph.getWidth('accidentalNatural', glyphScale) + 2; + const clefWidth = Glyph.getWidth('gClef', glyphScale) * 2; + return { sharpWidth, flatWidth, naturalWidth, clefWidth }; +}; +function parser(assert) { + assert.expect(11); + function catchError(spec) { + assert.throws(() => Flow.keySignature(spec), /BadKeySignature/); + } + catchError('asdf'); + catchError('D!'); + catchError('E#'); + catchError('D#'); + catchError('#'); + catchError('b'); + catchError('Kb'); + catchError('Fb'); + catchError('Dbm'); + catchError('B#m'); + Flow.keySignature('B'); + Flow.keySignature('C'); + Flow.keySignature('Fm'); + Flow.keySignature('Ab'); + Flow.keySignature('Abm'); + Flow.keySignature('F#'); + Flow.keySignature('G#m'); + assert.ok(true, 'all pass'); +} +function majorKeys(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; + const casePadding = 10; + const testCases = 7; + const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding; + const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); + const stave1 = new Stave(10, 10, flatTestWidth); + const stave2 = new Stave(10, 90, sharpTestWidth); + const keys = MAJOR_KEYS; + let keySig = null; + for (let i = 0; i < 8; ++i) { + keySig = new KeySignature(keys[i]); + keySig.addToStave(stave1); + } + for (let n = 8; n < keys.length; ++n) { + keySig = new KeySignature(keys[n]); + keySig.addToStave(stave2); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + options.assert.ok(true, 'all pass'); +} +function majorKeysCanceled(options, contextBuilder) { + const scale = 0.9; + const w = fontWidths(); + const flatPadding = 18; + const sharpPadding = 20; + const flatTestCases = 8; + const sharpTestCases = 7; + const sharpTestWidth = 28 * w.sharpWidth + 21 * w.naturalWidth + sharpPadding * sharpTestCases + Stave.defaultPadding + w.clefWidth; + const flatTestWidth = 28 * w.flatWidth + 28 * w.naturalWidth + flatPadding * flatTestCases + Stave.defaultPadding + w.clefWidth; + const eFlatTestWidth = 28 * w.flatWidth + 32 * w.naturalWidth + flatPadding * flatTestCases + Stave.defaultPadding + w.clefWidth; + const eSharpTestWidth = 28 * w.sharpWidth + 28 * w.naturalWidth + sharpPadding * sharpTestCases + Stave.defaultPadding + w.clefWidth; + const maxWidth = Math.max(Math.max(sharpTestWidth, flatTestWidth, Math.max(eSharpTestWidth, eFlatTestWidth))); + const ctx = contextBuilder(options.elementId, maxWidth + 100, 500); + ctx.scale(scale, scale); + const stave1 = new Stave(10, 10, flatTestWidth).addClef('treble'); + const stave2 = new Stave(10, 90, sharpTestWidth).addClef('treble'); + const stave3 = new Stave(10, 170, eFlatTestWidth).addClef('treble'); + const stave4 = new Stave(10, 250, eSharpTestWidth).addClef('treble'); + const keys = MAJOR_KEYS; + let keySig = null; + let i; + let n; + for (i = 0; i < 8; ++i) { + keySig = new KeySignature(keys[i]); + keySig.cancelKey('Cb'); + keySig.setPadding(flatPadding); + keySig.addToStave(stave1); + } + for (n = 8; n < keys.length; ++n) { + keySig = new KeySignature(keys[n]); + keySig.cancelKey('C#'); + keySig.setPadding(sharpPadding); + keySig.addToStave(stave2); + } + for (i = 0; i < 8; ++i) { + keySig = new KeySignature(keys[i]); + keySig.cancelKey('E'); + keySig.setPadding(flatPadding); + keySig.addToStave(stave3); + } + for (n = 8; n < keys.length; ++n) { + keySig = new KeySignature(keys[n]); + keySig.cancelKey('Ab'); + keySig.setPadding(sharpPadding); + keySig.addToStave(stave4); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + stave3.setContext(ctx); + stave3.draw(); + stave4.setContext(ctx); + stave4.draw(); + options.assert.ok(true, 'all pass'); +} +function keysCanceledForEachClef(options, contextBuilder) { + const scale = 0.8; + const w = fontWidths(); + const keyPadding = 10; + const keys = ['C#', 'Cb']; + const flatsKey = [7, 14]; + const sharpsKey = [14, 7]; + const natsKey = [7, 7]; + const max = 21 * Math.max(w.sharpWidth, w.flatWidth) * 2 + keyPadding * 6 + Stave.defaultPadding + w.clefWidth; + const ctx = contextBuilder(options.elementId, max + 100, 380); + ctx.scale(scale, scale); + const x = 20; + let y = 20; + let tx = x; + ['bass', 'tenor', 'soprano', 'mezzo-soprano', 'baritone-f'].forEach(function (clef) { + keys.forEach((key, keyIx) => { + const cancelKey = keys[(keyIx + 1) % 2]; + const width = flatsKey[keyIx] * w.flatWidth + + natsKey[keyIx] * w.naturalWidth + + sharpsKey[keyIx] * w.sharpWidth + + keyPadding * 3 + + w.clefWidth + + Stave.defaultPadding; + const stave = new Stave(tx, y, width); + stave.setClef(clef); + stave.addKeySignature(cancelKey); + stave.addKeySignature(key, cancelKey); + stave.addKeySignature(key); + stave.setContext(ctx).draw(); + tx += width; + }); + tx = x; + y += 80; + }); + options.assert.ok(true, 'all pass'); +} +function majorKeysAltered(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 780, 500); + ctx.scale(0.9, 0.9); + const stave1 = new Stave(10, 10, 750).addClef('treble'); + const stave2 = new Stave(10, 90, 750).addClef('treble'); + const stave3 = new Stave(10, 170, 750).addClef('treble'); + const stave4 = new Stave(10, 250, 750).addClef('treble'); + const keys = MAJOR_KEYS; + let keySig = null; + let i; + let n; + for (i = 0; i < 8; ++i) { + keySig = new KeySignature(keys[i]); + keySig.alterKey(['bs', 'bs']); + keySig.setPadding(18); + keySig.addToStave(stave1); + } + for (n = 8; n < keys.length; ++n) { + keySig = new KeySignature(keys[n]); + keySig.alterKey(['+', '+', '+']); + keySig.setPadding(20); + keySig.addToStave(stave2); + } + for (i = 0; i < 8; ++i) { + keySig = new KeySignature(keys[i]); + keySig.alterKey(['n', 'bs', 'bb']); + keySig.setPadding(18); + keySig.addToStave(stave3); + } + for (n = 8; n < keys.length; ++n) { + keySig = new KeySignature(keys[n]); + keySig.alterKey(['++', '+', 'n', '+']); + keySig.setPadding(20); + keySig.addToStave(stave4); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + stave3.setContext(ctx); + stave3.draw(); + stave4.setContext(ctx); + stave4.draw(); + options.assert.ok(true, 'all pass'); +} +function minorKeys(options, contextBuilder) { + const accidentalCount = 28; + const w = fontWidths(); + const casePadding = 10; + const testCases = 7; + const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding; + const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); + const stave1 = new Stave(10, 10, flatTestWidth); + const stave2 = new Stave(10, 90, sharpTestWidth); + const keys = MINOR_KEYS; + let keySig = null; + for (let i = 0; i < 8; ++i) { + keySig = new KeySignature(keys[i]); + keySig.addToStave(stave1); + } + for (let n = 8; n < keys.length; ++n) { + keySig = new KeySignature(keys[n]); + keySig.addToStave(stave2); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + options.assert.ok(true, 'all pass'); +} +function endKeyWithClef(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 200); + ctx.scale(0.9, 0.9); + const stave1 = new Stave(10, 10, 350); + stave1 + .setKeySignature('G') + .setBegBarType(BarlineType.REPEAT_BEGIN) + .setEndBarType(BarlineType.REPEAT_END) + .setClef('treble') + .addTimeSignature('4/4') + .setEndClef('bass') + .setEndKeySignature('Cb'); + const stave2 = new Stave(10, 90, 350); + stave2.setKeySignature('Cb').setClef('bass').setEndClef('treble').setEndKeySignature('G'); + stave1.setContext(ctx).draw(); + stave2.setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function staveHelper(options, contextBuilder) { + const w = fontWidths(); + const accidentalCount = 28; + const casePadding = 10; + const testCases = 7; + const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding; + const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding; + const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); + const stave1 = new Stave(10, 10, flatTestWidth); + const stave2 = new Stave(10, 90, sharpTestWidth); + const keys = MAJOR_KEYS; + for (let i = 0; i < 8; ++i) { + stave1.addKeySignature(keys[i]); + } + for (let n = 8; n < keys.length; ++n) { + stave2.addKeySignature(keys[n]); + } + stave1.setContext(ctx); + stave1.draw(); + stave2.setContext(ctx); + stave2.draw(); + options.assert.ok(true, 'all pass'); +} +function changeKey(options) { + const f = VexFlowTests.makeFactory(options, 900); + const stave = f.Stave({ x: 10, y: 10, width: 800 }).addClef('treble').addTimeSignature('C|'); + const voice = f + .Voice() + .setStrict(false) + .addTickables([ + f.KeySigNote({ key: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + f.BarNote(), + f.KeySigNote({ key: 'D', cancelKey: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + f.BarNote(), + f.KeySigNote({ key: 'Bb' }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + f.BarNote(), + f.KeySigNote({ key: 'D', alterKey: ['b', 'n'] }), + f.StaveNote({ keys: ['c/4'], duration: '1' }), + ]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(KeySignatureTests); +export { KeySignatureTests }; diff --git a/build/esm/tests/mocks.js b/build/esm/tests/mocks.js new file mode 100644 index 0000000000..64d6a6f680 --- /dev/null +++ b/build/esm/tests/mocks.js @@ -0,0 +1,71 @@ +import { Fraction } from '../src/fraction.js'; +import { Tickable } from '../src/tickable.js'; +class MockTickable extends Tickable { + constructor() { + super(...arguments); + this.ticks = new Fraction(1, 1); + this.width = 0; + this.ignore_ticks = false; + } + init() { + } + getX() { + return this.tickContext.getX(); + } + getIntrinsicTicks() { + return this.ticks.value(); + } + getTicks() { + return this.ticks; + } + setTicks(t) { + this.ticks = new Fraction(t, 1); + return this; + } + getMetrics() { + return { + width: 0, + glyphWidth: 0, + notePx: this.width, + modLeftPx: 0, + modRightPx: 0, + leftDisplacedHeadPx: 0, + rightDisplacedHeadPx: 0, + glyphPx: 0, + }; + } + getWidth() { + return this.width; + } + setWidth(w) { + this.width = w; + return this; + } + setVoice(v) { + this.voice = v; + return this; + } + setStave(stave) { + this.stave = stave; + return this; + } + getStave() { + return this.stave; + } + setTickContext(tc) { + this.tickContext = tc; + return this; + } + setIgnoreTicks(flag) { + this.ignore_ticks = flag; + return this; + } + shouldIgnoreTicks() { + return this.ignore_ticks; + } + preFormat() { + } + draw(...args) { + } +} +export { MockTickable }; diff --git a/build/esm/tests/modifier_tests.js b/build/esm/tests/modifier_tests.js new file mode 100644 index 0000000000..70c78a3ce8 --- /dev/null +++ b/build/esm/tests/modifier_tests.js @@ -0,0 +1,24 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Modifier, ModifierContext } from '../src/index.js'; +const ModifierContextTests = { + Start() { + QUnit.module('ModifierContext'); + QUnit.test('Modifier Width Test', width); + QUnit.test('Modifier Management', management); + }, +}; +function width(assert) { + const mc = new ModifierContext(); + assert.equal(mc.getWidth(), 0, 'New modifier context has no width'); +} +function management(assert) { + const mc = new ModifierContext(); + const modifier1 = new Modifier(); + const modifier2 = new Modifier(); + mc.addMember(modifier1); + mc.addMember(modifier2); + const modifiers = mc.getMembers(Modifier.CATEGORY); + assert.equal(modifiers.length, 2, 'Added two modifiers'); +} +VexFlowTests.register(ModifierContextTests); +export { ModifierContextTests }; diff --git a/build/esm/tests/multimeasurerest_tests.js b/build/esm/tests/multimeasurerest_tests.js new file mode 100644 index 0000000000..3965181f94 --- /dev/null +++ b/build/esm/tests/multimeasurerest_tests.js @@ -0,0 +1,141 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Font } from '../src/font.js'; +const MultiMeasureRestTests = { + Start() { + QUnit.module('MultiMeasureRest'); + const run = VexFlowTests.runTests; + run('Simple Test', simple); + run('Stave with modifiers Test', staveWithModifiers); + }, +}; +function simple(options) { + const width = 910; + const f = VexFlowTests.makeFactory(options, width, 300); + const line_spacing_15px = { options: { spacing_between_lines_px: 15 } }; + const params = [ + [{}, { number_of_measures: 2, show_number: false }], + [{}, { number_of_measures: 2 }], + [{}, { number_of_measures: 2, line_thickness: 8, serif_thickness: 3 }], + [{}, { number_of_measures: 1, use_symbols: true }], + [{}, { number_of_measures: 2, use_symbols: true }], + [{}, { number_of_measures: 3, use_symbols: true }], + [{}, { number_of_measures: 4, use_symbols: true }], + [{}, { number_of_measures: 5, use_symbols: true }], + [{}, { number_of_measures: 6, use_symbols: true }], + [{}, { number_of_measures: 7, use_symbols: true }], + [{}, { number_of_measures: 8, use_symbols: true }], + [{}, { number_of_measures: 9, use_symbols: true }], + [{}, { number_of_measures: 10, use_symbols: true }], + [{}, { number_of_measures: 11, use_symbols: true }], + [{}, { number_of_measures: 11, use_symbols: false, padding_left: 20, padding_right: 20 }], + [{}, { number_of_measures: 11, use_symbols: true, symbol_spacing: 5 }], + [{}, { number_of_measures: 11, use_symbols: false, line: 3, number_line: 2 }], + [{}, { number_of_measures: 11, use_symbols: true, line: 3, number_line: 2 }], + [line_spacing_15px, { number_of_measures: 12 }], + [line_spacing_15px, { number_of_measures: 9, use_symbols: true }], + [line_spacing_15px, { number_of_measures: 12, spacing_between_lines_px: 15, number_glyph_point: 40 * 1.5 }], + [ + line_spacing_15px, + { + number_of_measures: 9, + spacing_between_lines_px: 15, + use_symbols: true, + number_glyph_point: 40 * 1.5, + }, + ], + [ + line_spacing_15px, + { + number_of_measures: 9, + spacing_between_lines_px: 15, + use_symbols: true, + number_glyph_point: 40 * 1.5, + semibreve_rest_glyph_scale: Flow.NOTATION_FONT_SCALE * 1.5, + }, + ], + ]; + const staveWidth = 100; + let x = 0; + let y = 0; + const mmRests = params.map((param) => { + if (x + staveWidth * 2 > width) { + x = 0; + y += 80; + } + const staveParams = param[0]; + const mmRestParams = param[1]; + staveParams.x = x; + staveParams.y = y; + staveParams.width = staveWidth; + x += staveWidth; + const stave = f.Stave(staveParams); + return f.MultiMeasureRest(mmRestParams).setStave(stave); + }); + f.draw(); + const xs = mmRests[0].getXs(); + const strY = mmRests[0].getStave().getYForLine(-0.5); + const str = 'TACET'; + const context = f.getContext(); + context.save(); + context.setFont(Font.SERIF, 16, 'bold'); + const metrics = context.measureText(str); + context.fillText(str, xs.left + (xs.right - xs.left) * 0.5 - metrics.width * 0.5, strY); + context.restore(); + options.assert.ok(true, 'Simple Test'); +} +function staveWithModifiers(options) { + const width = 910; + const f = VexFlowTests.makeFactory(options, width, 200); + let x = 0; + let y = 0; + const params = [ + [{ clef: 'treble', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', timeSig: '4/4', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endClef: 'bass', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endKeySig: 'F', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }], + [{ clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }], + [ + { clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, + { number_of_measures: 5, use_symbols: true }, + ], + ]; + params.forEach((param) => { + const staveOptions = param[0]; + const staveParams = staveOptions.params; + const mmrestParams = param[1]; + if (x + staveParams.width > width) { + x = 0; + y += 80; + } + staveParams.x = x; + x += staveParams.width; + staveParams.y = y; + const stave = f.Stave(staveParams); + if (staveOptions.clef) { + stave.addClef(staveOptions.clef); + } + if (staveOptions.timeSig) { + stave.addTimeSignature(staveOptions.timeSig); + } + if (staveOptions.keySig) { + stave.addKeySignature(staveOptions.keySig); + } + if (staveOptions.endClef) { + stave.addEndClef(staveOptions.endClef); + } + if (staveOptions.endKeySig) { + stave.setEndKeySignature(staveOptions.endKeySig); + } + if (staveOptions.endTimeSig) { + stave.setEndTimeSignature(staveOptions.endTimeSig); + } + return f.MultiMeasureRest(mmrestParams).setStave(stave); + }); + f.draw(); + options.assert.ok(true, 'Stave with modifiers Test'); +} +VexFlowTests.register(MultiMeasureRestTests); +export { MultiMeasureRestTests }; diff --git a/build/esm/tests/music_tests.js b/build/esm/tests/music_tests.js new file mode 100644 index 0000000000..a11ce6901e --- /dev/null +++ b/build/esm/tests/music_tests.js @@ -0,0 +1,161 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { KeyManager } from '../src/keymanager.js'; +import { Music } from '../src/music.js'; +const MusicTests = { + Start() { + QUnit.module('MusicTests'); + QUnit.test('Valid Notes', validNotes); + QUnit.test('Valid Keys', validKeys); + QUnit.test('Note Values', noteValue); + QUnit.test('Interval Values', intervalValue); + QUnit.test('Relative Notes', relativeNotes); + QUnit.test('Relative Note Names', relativeNoteNames); + QUnit.test('Canonical Notes', canonicalNotes); + QUnit.test('Canonical Intervals', canonicalIntervals); + QUnit.test('Scale Tones', scaleTones); + QUnit.test('Scale Intervals', scaleIntervals); + }, +}; +function validNotes(assert) { + assert.expect(10); + const music = new Music(); + let parts = music.getNoteParts('c'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, null); + parts = music.getNoteParts('C'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, null); + parts = music.getNoteParts('c#'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, '#'); + parts = music.getNoteParts('c##'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, '##'); + assert.throws(() => music.getNoteParts('r'), /BadArguments/, 'Invalid note: r'); + assert.throws(() => music.getNoteParts(''), /BadArguments/, "Invalid note: ''"); +} +function validKeys(assert) { + assert.expect(18); + const music = new Music(); + let parts = music.getKeyParts('c'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, null); + assert.equal(parts.type, 'M'); + parts = music.getKeyParts('d#'); + assert.equal(parts.root, 'd'); + assert.equal(parts.accidental, '#'); + assert.equal(parts.type, 'M'); + parts = music.getKeyParts('fbm'); + assert.equal(parts.root, 'f'); + assert.equal(parts.accidental, 'b'); + assert.equal(parts.type, 'm'); + parts = music.getKeyParts('c#mel'); + assert.equal(parts.root, 'c'); + assert.equal(parts.accidental, '#'); + assert.equal(parts.type, 'mel'); + parts = music.getKeyParts('g#harm'); + assert.equal(parts.root, 'g'); + assert.equal(parts.accidental, '#'); + assert.equal(parts.type, 'harm'); + assert.throws(() => music.getKeyParts('r'), /BadArguments/, 'Invalid key: r'); + assert.throws(() => music.getKeyParts(''), /BadArguments/, `Invalid key: ''`); + assert.throws(() => music.getKeyParts('#m'), /BadArguments/, 'Invalid key: #m'); +} +function noteValue(assert) { + assert.expect(3); + const music = new Music(); + let note = music.getNoteValue('c'); + assert.equal(note, 0); + assert.throws(() => music.getNoteValue('r'), /BadArguments/, 'Invalid note name'); + note = music.getNoteValue('f#'); + assert.equal(note, 6); +} +function intervalValue(assert) { + assert.expect(2); + const music = new Music(); + const value = music.getIntervalValue('b2'); + assert.equal(value, 1); + assert.throws(() => music.getIntervalValue('7'), /BadArguments/, 'Invalid interval name'); +} +function relativeNotes(assert) { + assert.expect(8); + const music = new Music(); + let value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b5')); + assert.equal(value, 6); + assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('bc'), music.getIntervalValue('b2')), /BadArguments/, 'Invalid note'); + assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p3')), /BadArguments/, 'Invalid interval'); + value = music.getRelativeNoteValue(music.getNoteValue('d'), music.getIntervalValue('2'), -1); + assert.equal(value, 0); + assert.throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p4'), 0), /BadArguments/, 'Invalid direction: 0'); + value = music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('b5')); + assert.equal(value, 5); + value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b2'), -1); + assert.equal(value, 11); + value = music.getRelativeNoteValue(music.getNoteValue('g'), music.getIntervalValue('p5')); + assert.equal(value, 2); +} +function relativeNoteNames(assert) { + assert.expect(9); + const music = new Music(); + assert.equal(music.getRelativeNoteName('b', music.getNoteValue('c#')), 'b##'); + assert.equal(music.getRelativeNoteName('c', music.getNoteValue('c')), 'c'); + assert.equal(music.getRelativeNoteName('c', music.getNoteValue('db')), 'c#'); + assert.equal(music.getRelativeNoteName('c', music.getNoteValue('b')), 'cb'); + assert.equal(music.getRelativeNoteName('c#', music.getNoteValue('db')), 'c#'); + assert.equal(music.getRelativeNoteName('e', music.getNoteValue('f#')), 'e##'); + assert.equal(music.getRelativeNoteName('e', music.getNoteValue('d#')), 'eb'); + assert.equal(music.getRelativeNoteName('e', music.getNoteValue('fb')), 'e'); + assert.throws(() => music.getRelativeNoteName('e', music.getNoteValue('g#')), /BadArguments/, 'Too far away. Notes not related.'); +} +function canonicalNotes(assert) { + assert.expect(3); + const music = new Music(); + assert.equal(music.getCanonicalNoteName(0), 'c'); + assert.equal(music.getCanonicalNoteName(2), 'd'); + assert.throws(() => music.getCanonicalNoteName(-1), /BadArguments/, 'Invalid note value'); +} +function canonicalIntervals(assert) { + assert.expect(3); + const music = new Music(); + assert.equal(music.getCanonicalIntervalName(0), 'unison'); + assert.equal(music.getCanonicalIntervalName(2), 'M2'); + assert.throws(() => music.getCanonicalIntervalName(-1), /BadArguments/, 'Invalid interval value'); +} +function scaleTones(assert) { + assert.expect(24); + const music = new Music(); + const manager = new KeyManager('CM'); + const c_major = music.getScaleTones(music.getNoteValue('c'), Music.scales.major); + let values = ['c', 'd', 'e', 'f', 'g', 'a', 'b']; + assert.equal(c_major.length, 7); + for (let i = 0; i < c_major.length; ++i) { + assert.equal(music.getCanonicalNoteName(c_major[i]), values[i]); + } + const c_dorian = music.getScaleTones(music.getNoteValue('c'), Music.scales.dorian); + values = ['c', 'd', 'eb', 'f', 'g', 'a', 'bb']; + let note = null; + assert.equal(c_dorian.length, 7); + for (let i = 0; i < c_dorian.length; ++i) { + note = music.getCanonicalNoteName(c_dorian[i]); + assert.equal(manager.selectNote(note).note, values[i]); + } + const c_mixolydian = music.getScaleTones(music.getNoteValue('c'), Music.scales.mixolydian); + values = ['c', 'd', 'e', 'f', 'g', 'a', 'bb']; + assert.equal(c_mixolydian.length, 7); + for (let i = 0; i < c_mixolydian.length; ++i) { + note = music.getCanonicalNoteName(c_mixolydian[i]); + assert.equal(manager.selectNote(note).note, values[i]); + } +} +function scaleIntervals(assert) { + assert.expect(6); + const m = new Music(); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('d'))), 'M2'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('g'), m.getNoteValue('c'))), 'p4'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('c'))), 'unison'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('f'), m.getNoteValue('cb'))), 'dim5'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), 1)), 'b7'); + assert.equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), -1)), 'M2'); +} +VexFlowTests.register(MusicTests); +export { MusicTests }; diff --git a/build/esm/tests/notehead_tests.js b/build/esm/tests/notehead_tests.js new file mode 100644 index 0000000000..3ccac28c56 --- /dev/null +++ b/build/esm/tests/notehead_tests.js @@ -0,0 +1,221 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { NoteHead } from '../src/notehead.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { TickContext } from '../src/tickcontext.js'; +import { Voice } from '../src/voice.js'; +const NoteHeadTests = { + Start() { + QUnit.module('NoteHead'); + const run = VexFlowTests.runTests; + run('Basic', basic); + run('Various Note Heads 1', variousNoteHeads); + run('Various Note Heads 2', variousNoteHeads2); + run('Various Heads', variousHeads); + run('Drum Chord Heads', drumChordHeads); + run('Bounding Boxes', basicBoundingBoxes); + }, +}; +function setContextStyle(ctx) { + ctx.scale(0.9, 0.9); + ctx.scale(2.0, 2.0); + ctx.font = '10pt Arial'; +} +function basic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 450, 250); + setContextStyle(ctx); + const stave = new Stave(10, 0, 250).addClef('treble'); + stave.setContext(ctx).draw(); + const formatter = new Formatter(); + const voice = new Voice(Flow.TIME4_4).setStrict(false); + const note_head1 = new NoteHead({ duration: '4', line: 3 }); + const note_head2 = new NoteHead({ duration: '1', line: 2.5 }); + const note_head3 = new NoteHead({ duration: '2', line: 0 }); + voice.addTickables([note_head1, note_head2, note_head3]); + formatter.joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok('Basic NoteHead test'); +} +function showNote(noteStruct, stave, ctx, x) { + const note = new StaveNote(noteStruct).setStave(stave); + new TickContext().addTickable(note).preFormat().setX(x); + note.setContext(ctx).draw(); + return note; +} +function variousHeads(options, contextBuilder) { + const notes = [ + { keys: ['g/5/d0'], duration: '4' }, + { keys: ['g/5/d1'], duration: '4' }, + { keys: ['g/5/d2'], duration: '4' }, + { keys: ['g/5/d3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/t0'], duration: '1' }, + { keys: ['g/5/t1'], duration: '4' }, + { keys: ['g/5/t2'], duration: '4' }, + { keys: ['g/5/t3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/x0'], duration: '1' }, + { keys: ['g/5/x1'], duration: '4' }, + { keys: ['g/5/x2'], duration: '4' }, + { keys: ['g/5/x3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/s1'], duration: '4' }, + { keys: ['g/5/s2'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/r1'], duration: '4' }, + { keys: ['g/5/r2'], duration: '4' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + for (let staveNum = 0; staveNum < 2; ++staveNum) { + const stave = new Stave(10, 10 + staveNum * 120, notes.length * 25 + 75) + .addClef('percussion') + .setContext(ctx) + .draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = staveNum === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function variousNoteHeads(options, contextBuilder) { + const notes = [ + { keys: ['g/5/d'], duration: '1/2' }, + { keys: ['g/5/d'], duration: '1' }, + { keys: ['g/5/d'], duration: '2' }, + { keys: ['g/5/d'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/x'], duration: '1/2' }, + { keys: ['g/5/x'], duration: '1' }, + { keys: ['g/5/x'], duration: '2' }, + { keys: ['g/5/x'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/cx'], duration: '1/2' }, + { keys: ['g/5/cx'], duration: '1' }, + { keys: ['g/5/cx'], duration: '2' }, + { keys: ['g/5/cx'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/tu'], duration: '1/2' }, + { keys: ['g/5/tu'], duration: '1' }, + { keys: ['g/5/tu'], duration: '2' }, + { keys: ['g/5/tu'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/td'], duration: '1/2' }, + { keys: ['g/5/td'], duration: '1' }, + { keys: ['g/5/td'], duration: '2' }, + { keys: ['g/5/td'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/sf'], duration: '1/2' }, + { keys: ['g/5/sf'], duration: '1' }, + { keys: ['g/5/sf'], duration: '2' }, + { keys: ['g/5/sf'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/sb'], duration: '1/2' }, + { keys: ['g/5/sb'], duration: '1' }, + { keys: ['g/5/sb'], duration: '2' }, + { keys: ['g/5/sb'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/ci'], duration: '1/2' }, + { keys: ['g/5/ci'], duration: '1' }, + { keys: ['g/5/ci'], duration: '2' }, + { keys: ['g/5/ci'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/sq'], duration: '1/2' }, + { keys: ['g/5/sq'], duration: '1' }, + { keys: ['g/5/sq'], duration: '2' }, + { keys: ['g/5/sq'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + for (let staveNum = 0; staveNum < 2; ++staveNum) { + const stave = new Stave(10, 10 + staveNum * 120, notes.length * 25 + 75) + .addClef('percussion') + .setContext(ctx) + .draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = staveNum === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function variousNoteHeads2(options, contextBuilder) { + const notes = [ + { keys: ['g/5/do'], duration: '4', auto_stem: true }, + { keys: ['g/5/re'], duration: '4', auto_stem: true }, + { keys: ['g/5/mi'], duration: '4', auto_stem: true }, + { keys: ['g/5/fa'], duration: '4', auto_stem: true }, + { keys: ['e/4/faup'], duration: '4', auto_stem: true }, + { keys: ['g/5/so'], duration: '4', auto_stem: true }, + { keys: ['g/5/la'], duration: '4', auto_stem: true }, + { keys: ['g/5/ti'], duration: '4', auto_stem: true }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + const stave = new Stave(10, 10, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drumChordHeads(options, contextBuilder) { + const notes = [ + { keys: ['a/4/d0', 'g/5/x3'], duration: '4' }, + { keys: ['a/4/x3', 'g/5/d0'], duration: '4' }, + { keys: ['a/4/d1', 'g/5/x2'], duration: '4' }, + { keys: ['a/4/x2', 'g/5/d1'], duration: '4' }, + { keys: ['a/4/d2', 'g/5/x1'], duration: '4' }, + { keys: ['a/4/x1', 'g/5/d2'], duration: '4' }, + { keys: ['a/4/d3', 'g/5/x0'], duration: '4' }, + { keys: ['a/4/x0', 'g/5/d3'], duration: '4' }, + { keys: ['a/4', 'g/5/d0'], duration: '4' }, + { keys: ['a/4/x3', 'g/5'], duration: '4' }, + { keys: ['a/4/t0', 'g/5/s1'], duration: '4' }, + { keys: ['a/4/s1', 'g/5/t0'], duration: '4' }, + { keys: ['a/4/t1', 'g/5/s2'], duration: '4' }, + { keys: ['a/4/s2', 'g/5/t1'], duration: '4' }, + { keys: ['a/4/t2', 'g/5/r1'], duration: '4' }, + { keys: ['a/4/r1', 'g/5/t2'], duration: '4' }, + { keys: ['a/4/t3', 'g/5/r2'], duration: '4' }, + { keys: ['a/4/r2', 'g/5/t3'], duration: '4' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + for (let h = 0; h < 2; ++h) { + const stave = new Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = h === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function basicBoundingBoxes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 450, 250); + setContextStyle(ctx); + const stave = new Stave(10, 0, 250).addClef('treble'); + stave.setContext(ctx).draw(); + const formatter = new Formatter(); + const voice = new Voice(Flow.TIME4_4).setStrict(false); + const nh1 = new StaveNote({ keys: ['b/4'], duration: '4' }); + const nh2 = new StaveNote({ keys: ['a/4'], duration: '2' }); + const nh3 = new NoteHead({ duration: '1', line: 0 }); + voice.addTickables([nh1, nh2, nh3]); + formatter.joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + for (const bb of [nh1.noteHeads[0].getBoundingBox(), nh2.noteHeads[0].getBoundingBox(), nh3.getBoundingBox()]) { + ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); + } + ctx.stroke(); + options.assert.ok('NoteHead Bounding Boxes'); +} +VexFlowTests.register(NoteHeadTests); +export { NoteHeadTests }; diff --git a/build/esm/tests/notesubgroup_tests.js b/build/esm/tests/notesubgroup_tests.js new file mode 100644 index 0000000000..a7d3fc47d6 --- /dev/null +++ b/build/esm/tests/notesubgroup_tests.js @@ -0,0 +1,149 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { BarNote } from '../src/barnote.js'; +import { Note } from '../src/note.js'; +import { BarlineType } from '../src/stavebarline.js'; +const NoteSubGroupTests = { + Start() { + QUnit.module('NoteSubGroup'); + const run = VexFlowTests.runTests; + run('Basic - ClefNote, TimeSigNote and BarNote', basic); + run('Multi Voice', multiVoiceSingleDraw); + run('Multi Voice Multiple Draws', multiVoiceDoubleDraw); + run('Multi Staff', multiStaff); + }, +}; +function createShortcuts(f) { + return { + createStaveNote: (noteStruct) => f.StaveNote(noteStruct), + addAccidental: (note, accid) => note.addModifier(f.Accidental({ type: accid }), 0), + addSubGroup: (note, subNotes) => note.addModifier(f.NoteSubGroup({ notes: subNotes }), 0), + }; +} +function basic(options) { + const f = VexFlowTests.makeFactory(options, 750, 200); + const ctx = f.getContext(); + const stave = f.Stave({ width: 600 }).addClef('treble'); + const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); + const notes = [ + { keys: ['f/5'], stem_direction: -1, duration: '4' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['g/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['a/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['c/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, + { keys: ['c/3'], stem_direction: +1, duration: '4', clef: 'tenor' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, + ].map(createStaveNote); + addAccidental(notes[1], '#'); + addAccidental(notes[2], 'n'); + addSubGroup(notes[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); + addSubGroup(notes[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } })]); + addSubGroup(notes[4], [f.ClefNote({ type: 'tenor', options: { size: 'small' } }), new BarNote()]); + addSubGroup(notes[5], [f.TimeSigNote({ time: '6/8' })]); + addSubGroup(notes[6], [new BarNote(BarlineType.REPEAT_BEGIN)]); + addAccidental(notes[4], 'b'); + addAccidental(notes[6], 'bb'); + const voice = f.Voice().setStrict(false).addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + notes.forEach((note) => Note.plotMetrics(ctx, note, 150)); + VexFlowTests.plotLegendForNoteWidth(ctx, 620, 120); + options.assert.ok(true, 'all pass'); +} +function multiVoiceSingleDraw(options) { + multiVoiceHelper(options, 1); +} +function multiVoiceDoubleDraw(options) { + multiVoiceHelper(options, 2); +} +function multiVoiceHelper(options, numDraws) { + const f = VexFlowTests.makeFactory(options, 550, 200); + const ctx = f.getContext(); + const stave = f.Stave().addClef('treble'); + const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); + const notes1 = [ + { keys: ['f/5'], stem_direction: 1, duration: '4' }, + { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + const notes2 = [ + { keys: ['c/4'], stem_direction: -1, duration: '4' }, + { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + addAccidental(notes1[1], '#'); + addSubGroup(notes1[1], [ + f.ClefNote({ type: 'bass', options: { size: 'small' } }), + new BarNote(BarlineType.REPEAT_BEGIN), + f.TimeSigNote({ time: '3/4' }), + ]); + addSubGroup(notes2[2], [ + f.ClefNote({ type: 'alto', options: { size: 'small' } }), + f.TimeSigNote({ time: '9/8' }), + new BarNote(BarlineType.DOUBLE), + ]); + addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); + addAccidental(notes1[2], 'b'); + addAccidental(notes2[3], '#'); + const voices = [f.Voice().addTickables(notes1), f.Voice().addTickables(notes2)]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + for (let i = 0; i < numDraws; i++) { + f.draw(); + } + notes1.forEach((note) => Note.plotMetrics(ctx, note, 150)); + options.assert.ok(true, 'all pass'); +} +function multiStaff(options) { + const f = VexFlowTests.makeFactory(options, 550, 400); + const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); + const stave1 = f.Stave({ x: 15, y: 30, width: 500 }).setClef('treble'); + const notes1 = [ + { keys: ['f/5'], stem_direction: 1, duration: '4' }, + { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, + { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + const notes2 = [ + { keys: ['c/4'], stem_direction: -1, duration: '4' }, + { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, + { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, + { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, + ].map(createStaveNote); + const stave2 = f.Stave({ x: 15, y: 150, width: 500 }).setClef('bass'); + const notes3 = [ + { keys: ['e/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['g/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['d/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['f/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['c/4'], duration: '8', stem_direction: 1, clef: 'treble' }, + { keys: ['g/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['d/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + { keys: ['f/3'], duration: '8', stem_direction: -1, clef: 'bass' }, + ].map(createStaveNote); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'brace' }); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleLeft' }); + f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleRight' }); + f.Beam({ notes: notes3.slice(1, 4) }); + f.Beam({ notes: notes3.slice(5) }); + addAccidental(notes1[1], '#'); + addSubGroup(notes1[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } }), f.TimeSigNote({ time: '3/4' })]); + addSubGroup(notes2[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } }), f.TimeSigNote({ time: '9/8' })]); + addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); + addSubGroup(notes3[1], [f.ClefNote({ type: 'treble', options: { size: 'small' } })]); + addSubGroup(notes3[5], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); + addAccidental(notes3[0], '#'); + addAccidental(notes3[3], 'b'); + addAccidental(notes3[5], '#'); + addAccidental(notes1[2], 'b'); + addAccidental(notes2[3], '#'); + const voice1 = f.Voice().addTickables(notes1); + const voice2 = f.Voice().addTickables(notes2); + const voice3 = f.Voice().addTickables(notes3); + f.Formatter().joinVoices([voice1, voice2]).joinVoices([voice3]).formatToStave([voice1, voice2, voice3], stave1); + f.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(NoteSubGroupTests); +export { NoteSubGroupTests }; diff --git a/build/esm/tests/offscreencanvas_tests.js b/build/esm/tests/offscreencanvas_tests.js new file mode 100644 index 0000000000..a16b29f97f --- /dev/null +++ b/build/esm/tests/offscreencanvas_tests.js @@ -0,0 +1,47 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { CanvasContext } from '../src/canvascontext.js'; +import { Formatter } from '../src/formatter.js'; +import { Stave } from '../src/stave.js'; +import { BarlineType } from '../src/stavebarline.js'; +import { StaveNote } from '../src/stavenote.js'; +import { globalObject } from '../src/util.js'; +const OffscreenCanvasTests = { + Start() { + if (globalObject().OffscreenCanvas === undefined) { + return; + } + QUnit.module('OffscreenCanvas'); + QUnit.test('Simple Test', simpleTest); + }, +}; +function simpleTest(assert) { + const offscreenCanvas = new OffscreenCanvas(550, 200); + const offscreenCtx = offscreenCanvas.getContext('2d'); + if (offscreenCtx == null) { + throw new Error("Couldn't create offscreen context"); + } + const ctx = new CanvasContext(offscreenCtx); + const stave = new Stave(10, 50, 200); + stave.setEndBarType(BarlineType.END); + stave.addClef('treble').setContext(ctx).draw(); + const notes = [ + new StaveNote({ keys: ['c/4'], duration: 'q' }), + new StaveNote({ keys: ['d/4'], duration: 'q' }), + new StaveNote({ keys: ['b/4'], duration: 'qr' }), + new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + const imgBmp = offscreenCanvas.transferToImageBitmap(); + const canvas = document.createElement('canvas'); + canvas.width = offscreenCanvas.width; + canvas.height = offscreenCanvas.height; + const canvasCtx = canvas.getContext('2d'); + if (canvasCtx == null) { + throw new Error("Couldn't create canvas context"); + } + canvasCtx.drawImage(imgBmp, 0, 0); + document.body.appendChild(canvas); + assert.ok(true, 'all pass'); +} +VexFlowTests.register(OffscreenCanvasTests); +export { OffscreenCanvasTests }; diff --git a/build/esm/tests/ornament_tests.js b/build/esm/tests/ornament_tests.js new file mode 100644 index 0000000000..de36995b5e --- /dev/null +++ b/build/esm/tests/ornament_tests.js @@ -0,0 +1,300 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Beam } from '../src/beam.js'; +import { Dot } from '../src/dot.js'; +import { Formatter } from '../src/formatter.js'; +import { Glyph } from '../src/glyph.js'; +import { Ornament } from '../src/ornament.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Voice, VoiceMode } from '../src/voice.js'; +const OrnamentTests = { + Start() { + QUnit.module('Ornament'); + const run = VexFlowTests.runTests; + run('Ornaments', drawOrnaments); + run('Ornaments Vertically Shifted', drawOrnamentsDisplaced); + run('Ornaments - Delayed turns', drawOrnamentsDelayed); + run('Ornaments - Delayed turns, Multiple Draws', drawOrnamentsDelayedMultipleDraws); + run('Stacked', drawOrnamentsStacked); + run('With Upper/Lower Accidentals', drawOrnamentsWithAccidentals); + run('Jazz Ornaments', jazzOrnaments); + }, +}; +function drawOrnaments(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 750, 195); + const stave = new Stave(10, 30, 700); + stave.setContext(ctx).draw(); + const notes = [ + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(new Ornament('mordent'), 0); + notes[1].addModifier(new Ornament('mordent_inverted'), 0); + notes[2].addModifier(new Ornament('turn'), 0); + notes[3].addModifier(new Ornament('turn_inverted'), 0); + notes[4].addModifier(new Ornament('tr'), 0); + notes[5].addModifier(new Ornament('upprall'), 0); + notes[6].addModifier(new Ornament('downprall'), 0); + notes[7].addModifier(new Ornament('prallup'), 0); + notes[8].addModifier(new Ornament('pralldown'), 0); + notes[9].addModifier(new Ornament('upmordent'), 0); + notes[10].addModifier(new Ornament('downmordent'), 0); + notes[11].addModifier(new Ornament('lineprall'), 0); + notes[12].addModifier(new Ornament('prallprall'), 0); + Formatter.FormatAndDraw(ctx, stave, notes); +} +function drawOrnamentsDisplaced(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 750, 195); + const stave = new Stave(10, 30, 700); + stave.setContext(ctx).draw(); + const notes = [ + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(new Ornament('mordent'), 0); + notes[1].addModifier(new Ornament('mordent_inverted'), 0); + notes[1].addModifier(new Ornament('mordent_inverted'), 0); + notes[2].addModifier(new Ornament('turn'), 0); + notes[3].addModifier(new Ornament('turn_inverted'), 0); + notes[4].addModifier(new Ornament('tr'), 0); + notes[5].addModifier(new Ornament('upprall'), 0); + notes[6].addModifier(new Ornament('downprall'), 0); + notes[7].addModifier(new Ornament('prallup'), 0); + notes[8].addModifier(new Ornament('pralldown'), 0); + notes[9].addModifier(new Ornament('upmordent'), 0); + notes[10].addModifier(new Ornament('downmordent'), 0); + notes[11].addModifier(new Ornament('lineprall'), 0); + notes[12].addModifier(new Ornament('prallprall'), 0); + Formatter.FormatAndDraw(ctx, stave, notes); +} +const addDelayedTurns = (f) => { + const context = f.getContext(); + const stave = f.Stave({ x: 10, y: 30, width: 500 }); + stave.setContext(context).draw(); + const notes = [ + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(f.Ornament('turn', { delayed: true }), 0); + notes[1].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0); + notes[2].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0); + notes[3].addModifier(f.Ornament('turn', { delayed: true }), 0); + return { context, stave, notes }; +}; +function drawOrnamentsDelayed(options) { + options.assert.expect(0); + const f = VexFlowTests.makeFactory(options, 550, 195); + const { context, stave, notes } = addDelayedTurns(f); + Formatter.FormatAndDraw(context, stave, notes); +} +function drawOrnamentsDelayedMultipleDraws(options) { + options.assert.expect(0); + const f = VexFlowTests.makeFactory(options, 550, 195); + const { context, stave, notes } = addDelayedTurns(f); + Formatter.FormatAndDraw(context, stave, notes); + Formatter.FormatAndDraw(context, stave, notes); +} +function drawOrnamentsStacked(options) { + options.assert.expect(0); + const f = VexFlowTests.makeFactory(options, 550, 195); + const ctx = f.getContext(); + const stave = f.Stave({ x: 10, y: 30, width: 500 }); + stave.setContext(ctx).draw(); + const notes = [ + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(f.Ornament('mordent'), 0); + notes[1].addModifier(f.Ornament('turn_inverted'), 0); + notes[2].addModifier(f.Ornament('turn'), 0); + notes[3].addModifier(f.Ornament('turn_inverted'), 0); + notes[0].addModifier(f.Ornament('turn'), 0); + notes[1].addModifier(f.Ornament('prallup'), 0); + notes[2].addModifier(f.Ornament('upmordent'), 0); + notes[3].addModifier(f.Ornament('lineprall'), 0); + Formatter.FormatAndDraw(ctx, stave, notes); +} +function drawOrnamentsWithAccidentals(options) { + options.assert.expect(0); + const f = VexFlowTests.makeFactory(options, 650, 250); + const ctx = f.getContext(); + const stave = f.Stave({ x: 10, y: 60, width: 600 }); + stave.setContext(ctx).draw(); + const notes = [ + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), + ]; + notes[0].addModifier(f.Ornament('mordent', { lowerAccidental: '#', upperAccidental: '#' }), 0); + notes[1].addModifier(f.Ornament('turn_inverted', { lowerAccidental: 'b', upperAccidental: 'b' }), 0); + notes[2].addModifier(f.Ornament('turn', { upperAccidental: '##', lowerAccidental: '##' }), 0); + notes[3].addModifier(f.Ornament('mordent_inverted', { lowerAccidental: 'db', upperAccidental: 'db' }), 0); + notes[4].addModifier(f.Ornament('turn_inverted', { upperAccidental: '++', lowerAccidental: '++' }), 0); + notes[5].addModifier(f.Ornament('tr', { upperAccidental: 'n', lowerAccidental: 'n' }), 0); + notes[6].addModifier(f.Ornament('prallup', { upperAccidental: 'd', lowerAccidental: 'd' }), 0); + notes[7].addModifier(f.Ornament('lineprall', { upperAccidental: 'db', lowerAccidental: 'db' }), 0); + notes[8].addModifier(f.Ornament('upmordent', { upperAccidental: 'bbs', lowerAccidental: 'bbs' }), 0); + notes[9].addModifier(f.Ornament('prallprall', { upperAccidental: 'bb', lowerAccidental: 'bb' }), 0); + notes[10].addModifier(f.Ornament('turn_inverted', { upperAccidental: '+', lowerAccidental: '+' }), 0); + Formatter.FormatAndDraw(ctx, stave, notes); +} +function jazzOrnaments(options) { + const clefWidth = Glyph.getWidth('gClef', 38); + function draw(modifiers, keys, x, width, y, stemDirection) { + const note = (keys, duration, modifier, stemDirection) => { + const n = new StaveNote({ keys, duration, stem_direction: stemDirection }) + .addModifier(modifier, 0) + .addModifier(new Accidental('b'), 0); + const dot = duration.indexOf('d') >= 0; + if (dot) { + Dot.buildAndAttach([n], { all: true }); + } + return n; + }; + const stave = new Stave(x, y, width).addClef('treble').setContext(ctx).draw(); + const notes = [ + note(keys, '4d', modifiers[0], stemDirection), + note(keys, '8', modifiers[1], stemDirection), + note(keys, '4d', modifiers[2], stemDirection), + note(keys, '8', modifiers[3], stemDirection), + ]; + if (modifiers.length > 4) { + notes[3].addModifier(modifiers[4], 0); + } + Beam.generateBeams(notes); + const voice = new Voice({ + num_beats: 4, + beat_value: 4, + }).setMode(VoiceMode.SOFT); + voice.addTickables(notes); + const formatter = new Formatter().joinVoices([voice]); + formatter.format([voice], width - Stave.defaultPadding - clefWidth); + stave.setContext(ctx).draw(); + voice.draw(ctx, stave); + } + options.assert.expect(0); + const f = VexFlowTests.makeFactory(options, 950, 400); + const ctx = f.getContext(); + ctx.scale(1, 1); + const xStart = 10; + const width = 300; + const yStart = 50; + const staffHeight = 70; + let curX = xStart; + let curY = yStart; + let mods = [ + f.Ornament('scoop'), + f.Ornament('doit'), + f.Ornament('fall'), + f.Ornament('doitLong'), + ]; + draw(mods, ['a/5'], curX, width, curY, -1); + curX += width; + mods = [ + f.Ornament('fallLong'), + f.Ornament('bend'), + f.Ornament('plungerClosed'), + f.Ornament('plungerOpen'), + f.Ornament('bend'), + ]; + draw(mods, ['a/5'], curX, width, curY, -1); + curX += width; + mods = [ + f.Ornament('flip'), + f.Ornament('jazzTurn'), + f.Ornament('smear'), + f.Ornament('doit'), + ]; + draw(mods, ['a/5'], curX, width, curY, 1); + curX = xStart; + curY += staffHeight; + mods = [ + f.Ornament('scoop'), + f.Ornament('doit'), + f.Ornament('fall'), + f.Ornament('doitLong'), + ]; + draw(mods, ['e/5'], curX, width, curY); + curX += width; + mods = [ + f.Ornament('fallLong'), + f.Ornament('bend'), + f.Ornament('plungerClosed'), + f.Ornament('plungerOpen'), + f.Ornament('bend'), + ]; + draw(mods, ['e/5'], curX, width, curY); + curX += width; + mods = [ + f.Ornament('flip'), + f.Ornament('jazzTurn'), + f.Ornament('smear'), + f.Ornament('doit'), + ]; + draw(mods, ['e/5'], curX, width, curY); + curX = xStart; + curY += staffHeight; + mods = [ + f.Ornament('scoop'), + f.Ornament('doit'), + f.Ornament('fall'), + f.Ornament('doitLong'), + ]; + draw(mods, ['e/4'], curX, width, curY); + curX += width; + mods = [ + f.Ornament('fallLong'), + f.Ornament('bend'), + f.Ornament('plungerClosed'), + f.Ornament('plungerOpen'), + f.Ornament('bend'), + ]; + draw(mods, ['e/4'], curX, width, curY); + curX += width; + mods = [ + f.Ornament('flip'), + f.Ornament('jazzTurn'), + f.Ornament('smear'), + f.Ornament('doit'), + ]; + draw(mods, ['e/4'], curX, width, curY); +} +VexFlowTests.register(OrnamentTests); +export { OrnamentTests }; diff --git a/build/esm/tests/parser_tests.js b/build/esm/tests/parser_tests.js new file mode 100644 index 0000000000..218dd42b13 --- /dev/null +++ b/build/esm/tests/parser_tests.js @@ -0,0 +1,122 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Parser } from '../src/parser.js'; +const ParserTests = { + Start() { + QUnit.module('Parser'); + QUnit.test('Basic', basic); + QUnit.test('Advanced', advanced); + QUnit.test('Mixed', mixed); + QUnit.test('Micro Score', microscore); + }, +}; +class TestGrammar { + begin() { + return () => ({ expect: this.expect }); + } + BIGORLITTLE() { + return { expect: [this.BIGLINE, this.LITTLELINE], or: true }; + } + BIGLINE() { + return { expect: [this.LBRACE, this.WORD, this.WORDS, this.MAYBEEXCLAIM, this.RBRACE] }; + } + LITTLELINE() { + return { expect: [this.WORD, this.WORDS] }; + } + WORDS() { + return { expect: [this.COMMA, this.WORD], zeroOrMore: true }; + } + MAYBEEXCLAIM() { + return { expect: [this.EXCLAIM], maybe: true }; + } + LBRACE() { + return { token: '[{]' }; + } + RBRACE() { + return { token: '[}]' }; + } + WORD() { + return { token: '[a-zA-Z]+' }; + } + COMMA() { + return { token: '[,]' }; + } + EXCLAIM() { + return { token: '[!]' }; + } + EOL() { + return { token: '$' }; + } +} +class MicroScoreGrammar { + constructor() { + this.ITEM = () => ({ expect: [this.PIANO_KEY_NUMBER, this.CHORD], or: true }); + this.MAYBE_MORE_ITEMS = () => ({ expect: [this.ITEM], zeroOrMore: true }); + this.PIANO_KEY_NUMBER = () => ({ expect: [this.NUM], oneOrMore: true }); + this.CHORD = () => ({ expect: [this.LEFT_BRACKET, this.PIANO_KEY_NUMBER, this.MORE_CHORD_PARTS, this.RIGHT_BRACKET] }); + this.MORE_CHORD_PARTS = () => ({ expect: [this.PERIOD, this.PIANO_KEY_NUMBER], oneOrMore: true }); + this.NUM = () => ({ token: '\\d+' }); + this.WHITESPACE = () => ({ token: '\\s+' }); + this.PERIOD = () => ({ token: '\\.' }); + this.LEFT_BRACKET = () => ({ token: '\\[' }); + this.RIGHT_BRACKET = () => ({ token: '\\]' }); + this.EOL = () => ({ token: '$' }); + } + begin() { + return () => ({ expect: [this.ITEM, this.MAYBE_MORE_ITEMS, this.EOL] }); + } +} +function fails(assert, result, expectedErrorPos, msg) { + assert.notOk(result.success, msg); + assert.equal(result.errorPos, expectedErrorPos, msg); +} +function basic(assert) { + const grammar = new TestGrammar(); + grammar.expect = [grammar.LITTLELINE, grammar.EOL]; + const parser = new Parser(grammar); + const mustPass = ['first, second', 'first,second', 'first', 'first,second, third']; + mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line)); + fails(assert, parser.parse(''), 0); + fails(assert, parser.parse('first second'), 6); + fails(assert, parser.parse('first,,'), 5); + fails(assert, parser.parse('first,'), 5); + fails(assert, parser.parse(',,'), 0); +} +function advanced(assert) { + const grammar = new TestGrammar(); + grammar.expect = [grammar.BIGLINE, grammar.EOL]; + const parser = new Parser(grammar); + const mustPass = ['{first}', '{first!}', '{first,second}', '{first,second!}', '{first,second,third!}']; + mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line)); + fails(assert, parser.parse('{first,second,third,}'), 19); + fails(assert, parser.parse('first,second,third'), 0); + fails(assert, parser.parse('{first,second,third'), 19); + fails(assert, parser.parse('{!}'), 1); +} +function mixed(assert) { + const grammar = new TestGrammar(); + grammar.expect = [grammar.BIGORLITTLE, grammar.EOL]; + const parser = new Parser(grammar); + const mustPass = ['{first,second,third!}', 'first, second']; + mustPass.forEach((line) => assert.equal(parser.parse(line).success, true, line)); + fails(assert, parser.parse('first second'), 6); +} +function microscore(assert) { + const grammar = new MicroScoreGrammar(); + const parser = new Parser(grammar); + const mustPass = [ + '40 42 44 45 47 49 51 52', + '[40.44.47] [45.49.52] [47.51.54] [49.52.56]', + '40 [40.44.47] 45 47 [44.47.51]', + ]; + mustPass.forEach((line) => { + var _a; + const result = parser.parse(line); + assert.equal(result.success, true, line); + assert.equal((_a = result.matches) === null || _a === void 0 ? void 0 : _a.length, 3, line); + }); + fails(assert, parser.parse('40 42 44 45 47 49 5A 52'), 19); + fails(assert, parser.parse('40.44.47] [45.49.52] [47.51.54] [49.52.56]'), 2); + fails(assert, parser.parse('40 [40] 45 47 [44.47.51]'), 3); +} +VexFlowTests.register(ParserTests); +export { ParserTests }; diff --git a/build/esm/tests/pedalmarking_tests.js b/build/esm/tests/pedalmarking_tests.js new file mode 100644 index 0000000000..34396cfc46 --- /dev/null +++ b/build/esm/tests/pedalmarking_tests.js @@ -0,0 +1,64 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +const PedalMarkingTests = { + Start() { + QUnit.module('PedalMarking'); + const run = VexFlowTests.runTests; + run('Simple Pedal 1', simple1); + run('Simple Pedal 2', simple2); + run('Simple Pedal 3', simple3); + run('Release and Depress on Same Note 1', releaseDepress1); + run('Release and Depress on Same Note 2', releaseDepress2); + run('Custom Text 1', customTest1); + run('Custom Text 2', customTest2); + }, +}; +function createTest(makePedal) { + return (options) => { + const f = VexFlowTests.makeFactory(options, 550, 200); + const score = f.EasyScore(); + const stave0 = f.Stave({ width: 250 }).addClef('treble'); + const voice0 = score.voice(score.notes('b4/4, b4, b4, b4[stem="down"]', { stem: 'up' })); + f.Formatter().joinVoices([voice0]).formatToStave([voice0], stave0); + const stave1 = f.Stave({ width: 260, x: 250 }); + const voice1 = score.voice(score.notes('c4/4, c4, c4, c4', { stem: 'up' })); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + makePedal(f, voice0.getTickables(), voice1.getTickables()); + f.draw(); + options.assert.ok(true, 'Must render'); + }; +} +function withSimplePedal(style) { + return (factory, notes0, notes1) => factory.PedalMarking({ + notes: [notes0[0], notes0[2], notes0[3], notes1[3]], + options: { style }, + }); +} +function withReleaseAndDepressedPedal(style) { + return (factory, notes0, notes1) => factory.PedalMarking({ + notes: [notes0[0], notes0[3], notes0[3], notes1[1], notes1[1], notes1[3]], + options: { style }, + }); +} +const simple1 = createTest(withSimplePedal('text')); +const simple2 = createTest(withSimplePedal('bracket')); +const simple3 = createTest(withSimplePedal('mixed')); +const releaseDepress1 = createTest(withReleaseAndDepressedPedal('bracket')); +const releaseDepress2 = createTest(withReleaseAndDepressedPedal('mixed')); +const customTest1 = createTest((factory, notes0, notes1) => { + const pedal = factory.PedalMarking({ + notes: [notes0[0], notes1[3]], + options: { style: 'text' }, + }); + pedal.setCustomText('una corda', 'tre corda'); + return pedal; +}); +const customTest2 = createTest((factory, notes0, notes1) => { + const pedal = factory.PedalMarking({ + notes: [notes0[0], notes1[3]], + options: { style: 'mixed' }, + }); + pedal.setCustomText('Sost. Ped.'); + return pedal; +}); +VexFlowTests.register(PedalMarkingTests); +export { PedalMarkingTests }; diff --git a/build/esm/tests/percussion_tests.js b/build/esm/tests/percussion_tests.js new file mode 100644 index 0000000000..deaadfdf5e --- /dev/null +++ b/build/esm/tests/percussion_tests.js @@ -0,0 +1,180 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Dot, Font, FontStyle, FontWeight, Stave, StaveNote, TickContext, Tremolo, } from '../src/index.js'; +const PercussionTests = { + Start() { + QUnit.module('Percussion'); + const run = VexFlowTests.runTests; + run('Percussion Clef', draw); + run('Percussion Notes', drawNotes); + run('Percussion Basic0', basic0); + run('Percussion Basic1', basic1); + run('Percussion Basic2', basic2); + run('Percussion Snare0', snare0); + run('Percussion Snare1', snare1); + run('Percussion Snare2', snare2); + run('Percussion Snare3', snare3); + }, +}; +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300).addClef('percussion').setContext(ctx).draw(); + options.assert.ok(true); +} +function showNote(struct, stave, ctx, x) { + const staveNote = new StaveNote(struct).setStave(stave); + new TickContext().addTickable(staveNote).preFormat().setX(x); + staveNote.setContext(ctx).draw(); + return staveNote; +} +function drawNotes(options, contextBuilder) { + const notes = [ + { keys: ['g/5/d0'], duration: '4' }, + { keys: ['g/5/d1'], duration: '4' }, + { keys: ['g/5/d2'], duration: '4' }, + { keys: ['g/5/d3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/t0'], duration: '1' }, + { keys: ['g/5/t1'], duration: '4' }, + { keys: ['g/5/t2'], duration: '4' }, + { keys: ['g/5/t3'], duration: '4' }, + { keys: ['x/'], duration: '1' }, + { keys: ['g/5/x0'], duration: '1' }, + { keys: ['g/5/x1'], duration: '4' }, + { keys: ['g/5/x2'], duration: '4' }, + { keys: ['g/5/x3'], duration: '4' }, + ]; + const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); + for (let h = 0; h < 2; ++h) { + const stave = new Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.stem_direction = h === 0 ? -1 : 1; + const staveNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } + } +} +function createSingleMeasureTest(setup) { + return (options) => { + const f = VexFlowTests.makeFactory(options, 500); + const stave = f.Stave().addClef('percussion').setTimeSignature('4/4'); + setup(f); + f.Formatter().joinVoices(f.getVoices()).formatToStave(f.getVoices(), stave); + f.draw(); + options.assert.ok(true); + }; +} +const basic0 = createSingleMeasureTest((f) => { + const voice0 = f + .Voice() + .addTickables([ + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + ]); + const voice1 = f + .Voice() + .addTickables([ + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + ]); + f.Beam({ notes: voice0.getTickables() }); + f.Beam({ notes: voice1.getTickables().slice(0, 2) }); + f.Beam({ notes: voice1.getTickables().slice(3, 5) }); +}); +const basic1 = createSingleMeasureTest((f) => { + f.Voice().addTickables([ + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), + ]); + f.Voice().addTickables([ + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + ]); +}); +const basic2 = createSingleMeasureTest((f) => { + const voice0 = f + .Voice() + .addTickables([ + f.StaveNote({ keys: ['a/5/x3'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5'], duration: '8' }), + f.StaveNote({ keys: ['g/4/n', 'g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), + ]); + f.Beam({ notes: voice0.getTickables().slice(1, 8) }); + const notes1 = [ + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '8d', stem_direction: -1 }), + f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }), + ]; + Dot.buildAndAttach([notes1[4]], { all: true }); + const voice1 = f.Voice().addTickables(notes1); + f.Beam({ notes: voice1.getTickables().slice(0, 2) }); + f.Beam({ notes: voice1.getTickables().slice(4, 6) }); +}); +const snare0 = createSingleMeasureTest((f) => { + const font = { + family: Font.SERIF, + size: 14, + weight: FontWeight.BOLD, + style: FontStyle.ITALIC, + }; + f.Voice().addTickables([ + f + .StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }) + .addModifier(f.Articulation({ type: 'a>' }), 0) + .addModifier(f.Annotation({ text: 'L', font }), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'R', font }), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0), + ]); +}); +const snare1 = createSingleMeasureTest((f) => { + f.Voice().addTickables([ + f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0), + f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }), + f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0), + f.StaveNote({ keys: ['a/5/x3'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'a,' }), 0), + ]); +}); +const snare2 = createSingleMeasureTest((f) => { + f.Voice().addTickables([ + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(1), 0), + f.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(1), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(3), 0), + f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(4), 0), + ]); +}); +const snare3 = createSingleMeasureTest((factory) => { + factory + .Voice() + .addTickables([ + factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(2), 0), + factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(2), 0), + factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(3), 0), + factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(4), 0), + ]); +}); +VexFlowTests.register(PercussionTests); +export { PercussionTests }; diff --git a/build/esm/tests/qunit/qunit.js b/build/esm/tests/qunit/qunit.js new file mode 100644 index 0000000000..0d456d769a --- /dev/null +++ b/build/esm/tests/qunit/qunit.js @@ -0,0 +1,5643 @@ +"use strict"; +(function () { + 'use strict'; + function _typeof(obj) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); + } + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) + descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) + _defineProperties(Constructor.prototype, protoProps); + if (staticProps) + _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); + } + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) + return _arrayLikeToArray(arr); + } + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) + return arr; + } + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) + return Array.from(iter); + } + function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + if (_i == null) + return; + var _arr = []; + var _n = true; + var _d = false; + var _s, _e; + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + if (i && _arr.length === i) + break; + } + } + catch (err) { + _d = true; + _e = err; + } + finally { + try { + if (!_n && _i["return"] != null) + _i["return"](); + } + finally { + if (_d) + throw _e; + } + } + return _arr; + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) + return; + if (typeof o === "string") + return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) + n = o.constructor.name; + if (n === "Map" || n === "Set") + return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) + arr2[i] = arr[i]; + return arr2; + } + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) + o = it; + var i = 0; + var F = function () { }; + return { + s: F, + n: function () { + if (i >= o.length) + return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }, + e: function (e) { + throw e; + }, + f: F + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, didErr = false, err; + return { + s: function () { + it = it.call(o); + }, + n: function () { + var step = it.next(); + normalCompletion = step.done; + return step; + }, + e: function (e) { + didErr = true; + err = e; + }, + f: function () { + try { + if (!normalCompletion && it.return != null) + it.return(); + } + finally { + if (didErr) + throw err; + } + } + }; + } + function getGlobalThis() { + if (typeof globalThis !== 'undefined') { + return globalThis; + } + if (typeof self !== 'undefined') { + return self; + } + if (typeof window$1 !== 'undefined') { + return window$1; + } + if (typeof global !== 'undefined') { + return global; + } + throw new Error('Unable to locate global object'); + } + var g = getGlobalThis(); + var window$1 = g.window; + var console$1 = g.console; + var setTimeout$1 = g.setTimeout; + var clearTimeout = g.clearTimeout; + var document = window$1 && window$1.document; + var navigator = window$1 && window$1.navigator; + var localSessionStorage = function () { + var x = 'qunit-test-string'; + try { + g.sessionStorage.setItem(x, x); + g.sessionStorage.removeItem(x); + return g.sessionStorage; + } + catch (e) { + return undefined; + } + }(); + var StringMap = typeof g.Map === 'function' && typeof g.Map.prototype.keys === 'function' && typeof g.Symbol === 'function' && _typeof(g.Symbol.iterator) === 'symbol' ? g.Map : function StringMap(input) { + var _this = this; + var store = Object.create(null); + var hasOwn = Object.prototype.hasOwnProperty; + this.has = function (strKey) { + return hasOwn.call(store, strKey); + }; + this.get = function (strKey) { + return store[strKey]; + }; + this.set = function (strKey, val) { + if (!hasOwn.call(store, strKey)) { + this.size++; + } + store[strKey] = val; + return this; + }; + this.delete = function (strKey) { + if (hasOwn.call(store, strKey)) { + delete store[strKey]; + this.size--; + } + }; + this.forEach = function (callback) { + for (var strKey in store) { + callback(store[strKey], strKey); + } + }; + this.keys = function () { + return Object.keys(store); + }; + this.clear = function () { + store = Object.create(null); + this.size = 0; + }; + this.size = 0; + if (input) { + input.forEach(function (val, strKey) { + _this.set(strKey, val); + }); + } + }; + var StringSet = typeof g.Set === 'function' && typeof g.Set.prototype.values === 'function' ? g.Set : function (input) { + var set = Object.create(null); + if (Array.isArray(input)) { + input.forEach(function (item) { + set[item] = true; + }); + } + return { + add: function add(value) { + set[value] = true; + }, + has: function has(value) { + return value in set; + }, + get size() { + return Object.keys(set).length; + } + }; + }; + var Logger = { + warn: console$1 ? Function.prototype.bind.call(console$1.warn || console$1.log, console$1) : function () { } + }; + var toString = Object.prototype.toString; + var hasOwn$1 = Object.prototype.hasOwnProperty; + var nativePerf = getNativePerf(); + function getNativePerf() { + if (window$1 && typeof window$1.performance !== 'undefined' && typeof window$1.performance.mark === 'function' && typeof window$1.performance.measure === 'function') { + return window$1.performance; + } + else { + return undefined; + } + } + var performance = { + now: nativePerf ? nativePerf.now.bind(nativePerf) : Date.now, + measure: nativePerf ? function (comment, startMark, endMark) { + try { + nativePerf.measure(comment, startMark, endMark); + } + catch (ex) { + Logger.warn('performance.measure could not be executed because of ', ex.message); + } + } : function () { }, + mark: nativePerf ? nativePerf.mark.bind(nativePerf) : function () { } + }; + function diff(a, b) { + return a.filter(function (a) { + return b.indexOf(a) === -1; + }); + } + function inArray(elem, array) { + return array.indexOf(elem) !== -1; + } + function objectValues(obj) { + var allowArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var vals = allowArray && is('array', obj) ? [] : {}; + for (var key in obj) { + if (hasOwn$1.call(obj, key)) { + var val = obj[key]; + vals[key] = val === Object(val) ? objectValues(val, allowArray) : val; + } + } + return vals; + } + function objectValuesSubset(obj, model) { + if (obj !== Object(obj)) { + return obj; + } + var subset = {}; + for (var key in model) { + if (hasOwn$1.call(model, key) && hasOwn$1.call(obj, key)) { + subset[key] = objectValuesSubset(obj[key], model[key]); + } + } + return subset; + } + function extend(a, b, undefOnly) { + for (var prop in b) { + if (hasOwn$1.call(b, prop)) { + if (b[prop] === undefined) { + delete a[prop]; + } + else if (!(undefOnly && typeof a[prop] !== 'undefined')) { + a[prop] = b[prop]; + } + } + } + return a; + } + function objectType(obj) { + if (typeof obj === 'undefined') { + return 'undefined'; + } + if (obj === null) { + return 'null'; + } + var match = toString.call(obj).match(/^\[object\s(.*)\]$/); + var type = match && match[1]; + switch (type) { + case 'Number': + if (isNaN(obj)) { + return 'nan'; + } + return 'number'; + case 'String': + case 'Boolean': + case 'Array': + case 'Set': + case 'Map': + case 'Date': + case 'RegExp': + case 'Function': + case 'Symbol': + return type.toLowerCase(); + default: + return _typeof(obj); + } + } + function is(type, obj) { + return objectType(obj) === type; + } + function generateHash(module, testName) { + var str = module + '\x1C' + testName; + var hash = 0; + for (var i = 0; i < str.length; i++) { + hash = (hash << 5) - hash + str.charCodeAt(i); + hash |= 0; + } + var hex = (0x100000000 + hash).toString(16); + if (hex.length < 8) { + hex = '0000000' + hex; + } + return hex.slice(-8); + } + function errorString(error) { + var resultErrorString = String(error); + if (resultErrorString.slice(0, 7) === '[object') { + return (error.name || 'Error') + (error.message ? ": ".concat(error.message) : ''); + } + else { + return resultErrorString; + } + } + var BOXABLE_TYPES = new StringSet(['boolean', 'number', 'string']); + var memory = []; + function useStrictEquality(a, b) { + return a === b; + } + function useObjectValueEquality(a, b) { + return a === b || a.valueOf() === b.valueOf(); + } + function compareConstructors(a, b) { + return getConstructor(a) === getConstructor(b); + } + function getConstructor(obj) { + var proto = Object.getPrototypeOf(obj); + return !proto || proto.constructor === null ? Object : obj.constructor; + } + function getRegExpFlags(regexp) { + return 'flags' in regexp ? regexp.flags : regexp.toString().match(/[gimuy]*$/)[0]; + } + var objTypeCallbacks = { + undefined: useStrictEquality, + null: useStrictEquality, + boolean: useObjectValueEquality, + number: function number(a, b) { + return a === b || a.valueOf() === b.valueOf() || isNaN(a.valueOf()) && isNaN(b.valueOf()); + }, + string: useObjectValueEquality, + symbol: useStrictEquality, + date: useObjectValueEquality, + nan: function nan() { + return true; + }, + regexp: function regexp(a, b) { + return a.source === b.source && + getRegExpFlags(a) === getRegExpFlags(b); + }, + function: useStrictEquality, + array: function array(a, b) { + if (a.length !== b.length) { + return false; + } + for (var i = 0; i < a.length; i++) { + if (!typeEquiv(a[i], b[i])) { + return false; + } + } + return true; + }, + set: function set(a, b) { + if (a.size !== b.size) { + return false; + } + var outerEq = true; + a.forEach(function (aVal) { + if (!outerEq) { + return; + } + var innerEq = false; + b.forEach(function (bVal) { + if (innerEq) { + return; + } + var originalMemory = memory; + memory = []; + if (typeEquiv(bVal, aVal)) { + innerEq = true; + } + memory = originalMemory; + }); + if (!innerEq) { + outerEq = false; + } + }); + return outerEq; + }, + map: function map(a, b) { + if (a.size !== b.size) { + return false; + } + var outerEq = true; + a.forEach(function (aVal, aKey) { + if (!outerEq) { + return; + } + var innerEq = false; + b.forEach(function (bVal, bKey) { + if (innerEq) { + return; + } + var originalMemory = memory; + memory = []; + if (objTypeCallbacks.array([bVal, bKey], [aVal, aKey])) { + innerEq = true; + } + memory = originalMemory; + }); + if (!innerEq) { + outerEq = false; + } + }); + return outerEq; + } + }; + var entryTypeCallbacks = { + undefined: useStrictEquality, + null: useStrictEquality, + boolean: useStrictEquality, + number: function number(a, b) { + return a === b || isNaN(a) && isNaN(b); + }, + string: useStrictEquality, + symbol: useStrictEquality, + function: useStrictEquality, + object: function object(a, b) { + if (memory.some(function (pair) { + return pair.a === a && pair.b === b; + })) { + return true; + } + memory.push({ + a: a, + b: b + }); + var aObjType = objectType(a); + var bObjType = objectType(b); + if (aObjType !== 'object' || bObjType !== 'object') { + return aObjType === bObjType && objTypeCallbacks[aObjType](a, b); + } + if (compareConstructors(a, b) === false) { + return false; + } + var aProperties = []; + var bProperties = []; + for (var i in a) { + aProperties.push(i); + if (a.constructor !== Object && typeof a.constructor !== 'undefined' && typeof a[i] === 'function' && typeof b[i] === 'function' && a[i].toString() === b[i].toString()) { + continue; + } + if (!typeEquiv(a[i], b[i])) { + return false; + } + } + for (var _i in b) { + bProperties.push(_i); + } + return objTypeCallbacks.array(aProperties.sort(), bProperties.sort()); + } + }; + function typeEquiv(a, b) { + if (a === b) { + return true; + } + var aType = _typeof(a); + var bType = _typeof(b); + if (aType !== bType) { + return (aType === 'object' && BOXABLE_TYPES.has(objectType(a)) ? a.valueOf() : a) === (bType === 'object' && BOXABLE_TYPES.has(objectType(b)) ? b.valueOf() : b); + } + return entryTypeCallbacks[aType](a, b); + } + function innerEquiv(a, b) { + var res = typeEquiv(a, b); + memory = []; + return res; + } + function equiv(a, b) { + if (arguments.length === 2) { + return a === b || innerEquiv(a, b); + } + var i = arguments.length - 1; + while (i > 0) { + if (!innerEquiv(arguments[i - 1], arguments[i])) { + return false; + } + i--; + } + return true; + } + var config = { + altertitle: true, + collapse: true, + failOnZeroTests: true, + filter: undefined, + maxDepth: 5, + module: undefined, + moduleId: undefined, + reorder: true, + requireExpects: false, + scrolltop: true, + storage: localSessionStorage, + testId: undefined, + urlConfig: [], + currentModule: { + name: '', + tests: [], + childModules: [], + testsRun: 0, + testsIgnored: 0, + hooks: { + before: [], + beforeEach: [], + afterEach: [], + after: [] + } + }, + globalHooks: {}, + blocking: true, + callbacks: {}, + modules: [], + queue: [], + stats: { + all: 0, + bad: 0, + testCount: 0 + } + }; + var preConfig = g && g.QUnit && !g.QUnit.version && g.QUnit.config; + if (preConfig) { + extend(config, preConfig); + } + config.modules.push(config.currentModule); + var dump = (function () { + function quote(str) { + return '"' + str.toString().replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"'; + } + function literal(o) { + return o + ''; + } + function join(pre, arr, post) { + var s = dump.separator(); + var inner = dump.indent(1); + if (arr.join) { + arr = arr.join(',' + s + inner); + } + if (!arr) { + return pre + post; + } + var base = dump.indent(); + return [pre, inner + arr, base + post].join(s); + } + function array(arr, stack) { + if (dump.maxDepth && dump.depth > dump.maxDepth) { + return '[object Array]'; + } + this.up(); + var i = arr.length; + var ret = new Array(i); + while (i--) { + ret[i] = this.parse(arr[i], undefined, stack); + } + this.down(); + return join('[', ret, ']'); + } + function isArray(obj) { + return (toString.call(obj) === '[object Array]' || + typeof obj.length === 'number' && obj.item !== undefined && (obj.length ? obj.item(0) === obj[0] : obj.item(0) === null && obj[0] === undefined)); + } + var reName = /^function (\w+)/; + var dump = { + parse: function parse(obj, objType, stack) { + stack = stack || []; + var objIndex = stack.indexOf(obj); + if (objIndex !== -1) { + return "recursion(".concat(objIndex - stack.length, ")"); + } + objType = objType || this.typeOf(obj); + var parser = this.parsers[objType]; + var parserType = _typeof(parser); + if (parserType === 'function') { + stack.push(obj); + var res = parser.call(this, obj, stack); + stack.pop(); + return res; + } + if (parserType === 'string') { + return parser; + } + return '[ERROR: Missing QUnit.dump formatter for type ' + objType + ']'; + }, + typeOf: function typeOf(obj) { + var type; + if (obj === null) { + type = 'null'; + } + else if (typeof obj === 'undefined') { + type = 'undefined'; + } + else if (is('regexp', obj)) { + type = 'regexp'; + } + else if (is('date', obj)) { + type = 'date'; + } + else if (is('function', obj)) { + type = 'function'; + } + else if (obj.setInterval !== undefined && obj.document !== undefined && obj.nodeType === undefined) { + type = 'window'; + } + else if (obj.nodeType === 9) { + type = 'document'; + } + else if (obj.nodeType) { + type = 'node'; + } + else if (isArray(obj)) { + type = 'array'; + } + else if (obj.constructor === Error.prototype.constructor) { + type = 'error'; + } + else { + type = _typeof(obj); + } + return type; + }, + separator: function separator() { + if (this.multiline) { + return this.HTML ? '
' : '\n'; + } + else { + return this.HTML ? ' ' : ' '; + } + }, + indent: function indent(extra) { + if (!this.multiline) { + return ''; + } + var chr = this.indentChar; + if (this.HTML) { + chr = chr.replace(/\t/g, ' ').replace(/ /g, ' '); + } + return new Array(this.depth + (extra || 0)).join(chr); + }, + up: function up(a) { + this.depth += a || 1; + }, + down: function down(a) { + this.depth -= a || 1; + }, + setParser: function setParser(name, parser) { + this.parsers[name] = parser; + }, + quote: quote, + literal: literal, + join: join, + depth: 1, + maxDepth: config.maxDepth, + parsers: { + window: '[Window]', + document: '[Document]', + error: function error(_error) { + return 'Error("' + _error.message + '")'; + }, + unknown: '[Unknown]', + null: 'null', + undefined: 'undefined', + function: function _function(fn) { + var ret = 'function'; + var name = 'name' in fn ? fn.name : (reName.exec(fn) || [])[1]; + if (name) { + ret += ' ' + name; + } + ret += '('; + ret = [ret, dump.parse(fn, 'functionArgs'), '){'].join(''); + return join(ret, dump.parse(fn, 'functionCode'), '}'); + }, + array: array, + nodelist: array, + arguments: array, + object: function object(map, stack) { + var ret = []; + if (dump.maxDepth && dump.depth > dump.maxDepth) { + return '[object Object]'; + } + dump.up(); + var keys = []; + for (var key in map) { + keys.push(key); + } + var nonEnumerableProperties = ['message', 'name']; + for (var i in nonEnumerableProperties) { + var _key = nonEnumerableProperties[i]; + if (_key in map && !inArray(_key, keys)) { + keys.push(_key); + } + } + keys.sort(); + for (var _i = 0; _i < keys.length; _i++) { + var _key2 = keys[_i]; + var val = map[_key2]; + ret.push(dump.parse(_key2, 'key') + ': ' + dump.parse(val, undefined, stack)); + } + dump.down(); + return join('{', ret, '}'); + }, + node: function node(_node) { + var open = dump.HTML ? '<' : '<'; + var close = dump.HTML ? '>' : '>'; + var tag = _node.nodeName.toLowerCase(); + var ret = open + tag; + var attrs = _node.attributes; + if (attrs) { + for (var i = 0; i < attrs.length; i++) { + var val = attrs[i].nodeValue; + if (val && val !== 'inherit') { + ret += ' ' + attrs[i].nodeName + '=' + dump.parse(val, 'attribute'); + } + } + } + ret += close; + if (_node.nodeType === 3 || _node.nodeType === 4) { + ret += _node.nodeValue; + } + return ret + open + '/' + tag + close; + }, + functionArgs: function functionArgs(fn) { + var l = fn.length; + if (!l) { + return ''; + } + var args = new Array(l); + while (l--) { + args[l] = String.fromCharCode(97 + l); + } + return ' ' + args.join(', ') + ' '; + }, + key: quote, + functionCode: '[code]', + attribute: quote, + string: quote, + date: quote, + regexp: literal, + number: literal, + boolean: literal, + symbol: function symbol(sym) { + return sym.toString(); + } + }, + HTML: false, + indentChar: ' ', + multiline: true + }; + return dump; + })(); + var SuiteReport = function () { + function SuiteReport(name, parentSuite) { + _classCallCheck(this, SuiteReport); + this.name = name; + this.fullName = parentSuite ? parentSuite.fullName.concat(name) : []; + this.globalFailureCount = 0; + this.tests = []; + this.childSuites = []; + if (parentSuite) { + parentSuite.pushChildSuite(this); + } + } + _createClass(SuiteReport, [{ + key: "start", + value: function start(recordTime) { + if (recordTime) { + this._startTime = performance.now(); + var suiteLevel = this.fullName.length; + performance.mark("qunit_suite_".concat(suiteLevel, "_start")); + } + return { + name: this.name, + fullName: this.fullName.slice(), + tests: this.tests.map(function (test) { + return test.start(); + }), + childSuites: this.childSuites.map(function (suite) { + return suite.start(); + }), + testCounts: { + total: this.getTestCounts().total + } + }; + } + }, { + key: "end", + value: function end(recordTime) { + if (recordTime) { + this._endTime = performance.now(); + var suiteLevel = this.fullName.length; + var suiteName = this.fullName.join(' – '); + performance.mark("qunit_suite_".concat(suiteLevel, "_end")); + performance.measure(suiteLevel === 0 ? 'QUnit Test Run' : "QUnit Test Suite: ".concat(suiteName), "qunit_suite_".concat(suiteLevel, "_start"), "qunit_suite_".concat(suiteLevel, "_end")); + } + return { + name: this.name, + fullName: this.fullName.slice(), + tests: this.tests.map(function (test) { + return test.end(); + }), + childSuites: this.childSuites.map(function (suite) { + return suite.end(); + }), + testCounts: this.getTestCounts(), + runtime: this.getRuntime(), + status: this.getStatus() + }; + } + }, { + key: "pushChildSuite", + value: function pushChildSuite(suite) { + this.childSuites.push(suite); + } + }, { + key: "pushTest", + value: function pushTest(test) { + this.tests.push(test); + } + }, { + key: "getRuntime", + value: function getRuntime() { + return Math.round(this._endTime - this._startTime); + } + }, { + key: "getTestCounts", + value: function getTestCounts() { + var counts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { + passed: 0, + failed: 0, + skipped: 0, + todo: 0, + total: 0 + }; + counts.failed += this.globalFailureCount; + counts.total += this.globalFailureCount; + counts = this.tests.reduce(function (counts, test) { + if (test.valid) { + counts[test.getStatus()]++; + counts.total++; + } + return counts; + }, counts); + return this.childSuites.reduce(function (counts, suite) { + return suite.getTestCounts(counts); + }, counts); + } + }, { + key: "getStatus", + value: function getStatus() { + var _this$getTestCounts = this.getTestCounts(), total = _this$getTestCounts.total, failed = _this$getTestCounts.failed, skipped = _this$getTestCounts.skipped, todo = _this$getTestCounts.todo; + if (failed) { + return 'failed'; + } + else { + if (skipped === total) { + return 'skipped'; + } + else if (todo === total) { + return 'todo'; + } + else { + return 'passed'; + } + } + } + }]); + return SuiteReport; + }(); + var moduleStack = []; + var runSuite = new SuiteReport(); + function isParentModuleInQueue() { + var modulesInQueue = config.modules.filter(function (module) { + return !module.ignored; + }).map(function (module) { + return module.moduleId; + }); + return moduleStack.some(function (module) { + return modulesInQueue.includes(module.moduleId); + }); + } + function createModule(name, testEnvironment, modifiers) { + var parentModule = moduleStack.length ? moduleStack.slice(-1)[0] : null; + var moduleName = parentModule !== null ? [parentModule.name, name].join(' > ') : name; + var parentSuite = parentModule ? parentModule.suiteReport : runSuite; + var skip = parentModule !== null && parentModule.skip || modifiers.skip; + var todo = parentModule !== null && parentModule.todo || modifiers.todo; + var env = {}; + if (parentModule) { + extend(env, parentModule.testEnvironment); + } + extend(env, testEnvironment); + var module = { + name: moduleName, + parentModule: parentModule, + hooks: { + before: [], + beforeEach: [], + afterEach: [], + after: [] + }, + testEnvironment: env, + tests: [], + moduleId: generateHash(moduleName), + testsRun: 0, + testsIgnored: 0, + childModules: [], + suiteReport: new SuiteReport(name, parentSuite), + stats: null, + skip: skip, + todo: skip ? false : todo, + ignored: modifiers.ignored || false + }; + if (parentModule) { + parentModule.childModules.push(module); + } + config.modules.push(module); + return module; + } + function setHookFromEnvironment(hooks, environment, name) { + var potentialHook = environment[name]; + if (typeof potentialHook === 'function') { + hooks[name].push(potentialHook); + } + delete environment[name]; + } + function makeSetHook(module, hookName) { + return function setHook(callback) { + if (config.currentModule !== module) { + Logger.warn('The `' + hookName + '` hook was called inside the wrong module (`' + config.currentModule.name + '`). ' + 'Instead, use hooks provided by the callback to the containing module (`' + module.name + '`). ' + 'This will become an error in QUnit 3.0.'); + } + module.hooks[hookName].push(callback); + }; + } + function processModule(name, options, executeNow) { + var modifiers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + if (typeof options === 'function') { + executeNow = options; + options = undefined; + } + var module = createModule(name, options, modifiers); + var testEnvironment = module.testEnvironment; + var hooks = module.hooks; + setHookFromEnvironment(hooks, testEnvironment, 'before'); + setHookFromEnvironment(hooks, testEnvironment, 'beforeEach'); + setHookFromEnvironment(hooks, testEnvironment, 'afterEach'); + setHookFromEnvironment(hooks, testEnvironment, 'after'); + var moduleFns = { + before: makeSetHook(module, 'before'), + beforeEach: makeSetHook(module, 'beforeEach'), + afterEach: makeSetHook(module, 'afterEach'), + after: makeSetHook(module, 'after') + }; + var prevModule = config.currentModule; + config.currentModule = module; + if (typeof executeNow === 'function') { + moduleStack.push(module); + try { + var cbReturnValue = executeNow.call(module.testEnvironment, moduleFns); + if (cbReturnValue && typeof cbReturnValue.then === 'function') { + Logger.warn('Returning a promise from a module callback is not supported. ' + 'Instead, use hooks for async behavior. ' + 'This will become an error in QUnit 3.0.'); + } + } + finally { + moduleStack.pop(); + config.currentModule = module.parentModule || prevModule; + } + } + } + var focused$1 = false; + function module$1(name, options, executeNow) { + var ignored = focused$1 && !isParentModuleInQueue(); + processModule(name, options, executeNow, { + ignored: ignored + }); + } + module$1.only = function () { + if (!focused$1) { + config.modules.length = 0; + config.queue.length = 0; + config.currentModule.ignored = true; + } + focused$1 = true; + processModule.apply(void 0, arguments); + }; + module$1.skip = function (name, options, executeNow) { + if (focused$1) { + return; + } + processModule(name, options, executeNow, { + skip: true + }); + }; + module$1.todo = function (name, options, executeNow) { + if (focused$1) { + return; + } + processModule(name, options, executeNow, { + todo: true + }); + }; + var fileName = (sourceFromStacktrace(0) || '').replace(/(:\d+)+\)?/, '') + .replace(/.+[/\\]/, ''); + function extractStacktrace(e, offset) { + offset = offset === undefined ? 4 : offset; + if (e && e.stack) { + var stack = e.stack.split('\n'); + if (/^error$/i.test(stack[0])) { + stack.shift(); + } + if (fileName) { + var include = []; + for (var i = offset; i < stack.length; i++) { + if (stack[i].indexOf(fileName) !== -1) { + break; + } + include.push(stack[i]); + } + if (include.length) { + return include.join('\n'); + } + } + return stack[offset]; + } + } + function sourceFromStacktrace(offset) { + var error = new Error(); + if (!error.stack) { + try { + throw error; + } + catch (err) { + error = err; + } + } + return extractStacktrace(error, offset); + } + var Assert = function () { + function Assert(testContext) { + _classCallCheck(this, Assert); + this.test = testContext; + } + _createClass(Assert, [{ + key: "timeout", + value: function timeout(duration) { + if (typeof duration !== 'number') { + throw new Error('You must pass a number as the duration to assert.timeout'); + } + this.test.timeout = duration; + if (config.timeout) { + clearTimeout(config.timeout); + config.timeout = null; + if (config.timeoutHandler && this.test.timeout > 0) { + this.test.internalResetTimeout(this.test.timeout); + } + } + } + }, { + key: "step", + value: function step(message) { + var assertionMessage = message; + var result = !!message; + this.test.steps.push(message); + if (typeof message === 'undefined' || message === '') { + assertionMessage = 'You must provide a message to assert.step'; + } + else if (typeof message !== 'string') { + assertionMessage = 'You must provide a string value to assert.step'; + result = false; + } + this.pushResult({ + result: result, + message: assertionMessage + }); + } + }, { + key: "verifySteps", + value: function verifySteps(steps, message) { + var actualStepsClone = this.test.steps.slice(); + this.deepEqual(actualStepsClone, steps, message); + this.test.steps.length = 0; + } + }, { + key: "expect", + value: function expect(asserts) { + if (arguments.length === 1) { + this.test.expected = asserts; + } + else { + return this.test.expected; + } + } + }, { + key: "async", + value: function async(count) { + var requiredCalls = count === undefined ? 1 : count; + return this.test.internalStop(requiredCalls); + } + }, { + key: "push", + value: function push(result, actual, expected, message, negative) { + Logger.warn('assert.push is deprecated and will be removed in QUnit 3.0.' + ' Please use assert.pushResult instead (https://api.qunitjs.com/assert/pushResult).'); + var currentAssert = this instanceof Assert ? this : config.current.assert; + return currentAssert.pushResult({ + result: result, + actual: actual, + expected: expected, + message: message, + negative: negative + }); + } + }, { + key: "pushResult", + value: function pushResult(resultInfo) { + var assert = this; + var currentTest = assert instanceof Assert && assert.test || config.current; + if (!currentTest) { + throw new Error('assertion outside test context, in ' + sourceFromStacktrace(2)); + } + if (!(assert instanceof Assert)) { + assert = currentTest.assert; + } + return assert.test.pushResult(resultInfo); + } + }, { + key: "ok", + value: function ok(result, message) { + if (!message) { + message = result ? 'okay' : "failed, expected argument to be truthy, was: ".concat(dump.parse(result)); + } + this.pushResult({ + result: !!result, + actual: result, + expected: true, + message: message + }); + } + }, { + key: "notOk", + value: function notOk(result, message) { + if (!message) { + message = !result ? 'okay' : "failed, expected argument to be falsy, was: ".concat(dump.parse(result)); + } + this.pushResult({ + result: !result, + actual: result, + expected: false, + message: message + }); + } + }, { + key: "true", + value: function _true(result, message) { + this.pushResult({ + result: result === true, + actual: result, + expected: true, + message: message + }); + } + }, { + key: "false", + value: function _false(result, message) { + this.pushResult({ + result: result === false, + actual: result, + expected: false, + message: message + }); + } + }, { + key: "equal", + value: function equal(actual, expected, message) { + this.pushResult({ + result: expected == actual, + actual: actual, + expected: expected, + message: message + }); + } + }, { + key: "notEqual", + value: function notEqual(actual, expected, message) { + this.pushResult({ + result: expected != actual, + actual: actual, + expected: expected, + message: message, + negative: true + }); + } + }, { + key: "propEqual", + value: function propEqual(actual, expected, message) { + actual = objectValues(actual); + expected = objectValues(expected); + this.pushResult({ + result: equiv(actual, expected), + actual: actual, + expected: expected, + message: message + }); + } + }, { + key: "notPropEqual", + value: function notPropEqual(actual, expected, message) { + actual = objectValues(actual); + expected = objectValues(expected); + this.pushResult({ + result: !equiv(actual, expected), + actual: actual, + expected: expected, + message: message, + negative: true + }); + } + }, { + key: "propContains", + value: function propContains(actual, expected, message) { + actual = objectValuesSubset(actual, expected); + expected = objectValues(expected, false); + this.pushResult({ + result: equiv(actual, expected), + actual: actual, + expected: expected, + message: message + }); + } + }, { + key: "notPropContains", + value: function notPropContains(actual, expected, message) { + actual = objectValuesSubset(actual, expected); + expected = objectValues(expected); + this.pushResult({ + result: !equiv(actual, expected), + actual: actual, + expected: expected, + message: message, + negative: true + }); + } + }, { + key: "deepEqual", + value: function deepEqual(actual, expected, message) { + this.pushResult({ + result: equiv(actual, expected), + actual: actual, + expected: expected, + message: message + }); + } + }, { + key: "notDeepEqual", + value: function notDeepEqual(actual, expected, message) { + this.pushResult({ + result: !equiv(actual, expected), + actual: actual, + expected: expected, + message: message, + negative: true + }); + } + }, { + key: "strictEqual", + value: function strictEqual(actual, expected, message) { + this.pushResult({ + result: expected === actual, + actual: actual, + expected: expected, + message: message + }); + } + }, { + key: "notStrictEqual", + value: function notStrictEqual(actual, expected, message) { + this.pushResult({ + result: expected !== actual, + actual: actual, + expected: expected, + message: message, + negative: true + }); + } + }, { + key: 'throws', + value: function throws(block, expected, message) { + var _validateExpectedExce = validateExpectedExceptionArgs(expected, message, 'throws'); + var _validateExpectedExce2 = _slicedToArray(_validateExpectedExce, 2); + expected = _validateExpectedExce2[0]; + message = _validateExpectedExce2[1]; + var currentTest = this instanceof Assert && this.test || config.current; + if (typeof block !== 'function') { + currentTest.assert.pushResult({ + result: false, + actual: block, + message: 'The value provided to `assert.throws` in ' + '"' + currentTest.testName + '" was not a function.' + }); + return; + } + var actual; + var result = false; + currentTest.ignoreGlobalErrors = true; + try { + block.call(currentTest.testEnvironment); + } + catch (e) { + actual = e; + } + currentTest.ignoreGlobalErrors = false; + if (actual) { + var _validateException = validateException(actual, expected, message); + var _validateException2 = _slicedToArray(_validateException, 3); + result = _validateException2[0]; + expected = _validateException2[1]; + message = _validateException2[2]; + } + currentTest.assert.pushResult({ + result: result, + actual: actual && errorString(actual), + expected: expected, + message: message + }); + } + }, { + key: "rejects", + value: function rejects(promise, expected, message) { + var _validateExpectedExce3 = validateExpectedExceptionArgs(expected, message, 'rejects'); + var _validateExpectedExce4 = _slicedToArray(_validateExpectedExce3, 2); + expected = _validateExpectedExce4[0]; + message = _validateExpectedExce4[1]; + var currentTest = this instanceof Assert && this.test || config.current; + var then = promise && promise.then; + if (typeof then !== 'function') { + currentTest.assert.pushResult({ + result: false, + message: 'The value provided to `assert.rejects` in ' + '"' + currentTest.testName + '" was not a promise.', + actual: promise + }); + return; + } + var done = this.async(); + return then.call(promise, function handleFulfillment() { + currentTest.assert.pushResult({ + result: false, + message: 'The promise returned by the `assert.rejects` callback in ' + '"' + currentTest.testName + '" did not reject.', + actual: promise + }); + done(); + }, function handleRejection(actual) { + var result; + var _validateException3 = validateException(actual, expected, message); + var _validateException4 = _slicedToArray(_validateException3, 3); + result = _validateException4[0]; + expected = _validateException4[1]; + message = _validateException4[2]; + currentTest.assert.pushResult({ + result: result, + actual: actual && errorString(actual), + expected: expected, + message: message + }); + done(); + }); + } + }]); + return Assert; + }(); + function validateExpectedExceptionArgs(expected, message, assertionMethod) { + var expectedType = objectType(expected); + if (expectedType === 'string') { + if (message === undefined) { + message = expected; + expected = undefined; + return [expected, message]; + } + else { + throw new Error('assert.' + assertionMethod + ' does not accept a string value for the expected argument.\n' + 'Use a non-string object value (e.g. RegExp or validator function) ' + 'instead if necessary.'); + } + } + var valid = !expected || + expectedType === 'regexp' || expectedType === 'function' || expectedType === 'object'; + if (!valid) { + throw new Error('Invalid expected value type (' + expectedType + ') ' + 'provided to assert.' + assertionMethod + '.'); + } + return [expected, message]; + } + function validateException(actual, expected, message) { + var result = false; + var expectedType = objectType(expected); + if (!expected) { + result = true; + } + else if (expectedType === 'regexp') { + result = expected.test(errorString(actual)); + expected = String(expected); + } + else if (expectedType === 'function' && expected.prototype !== undefined && actual instanceof expected) { + result = true; + } + else if (expectedType === 'object') { + result = actual instanceof expected.constructor && actual.name === expected.name && actual.message === expected.message; + expected = errorString(expected); + } + else if (expectedType === 'function') { + try { + result = expected.call({}, actual) === true; + expected = null; + } + catch (e) { + expected = errorString(e); + } + } + return [result, expected, message]; + } + Assert.prototype.raises = Assert.prototype['throws']; + var LISTENERS = Object.create(null); + var SUPPORTED_EVENTS = ['error', 'runStart', 'suiteStart', 'testStart', 'assertion', 'testEnd', 'suiteEnd', 'runEnd']; + function emit(eventName, data) { + if (typeof eventName !== 'string') { + throw new TypeError('eventName must be a string when emitting an event'); + } + var originalCallbacks = LISTENERS[eventName]; + var callbacks = originalCallbacks ? _toConsumableArray(originalCallbacks) : []; + for (var i = 0; i < callbacks.length; i++) { + callbacks[i](data); + } + } + function on(eventName, callback) { + if (typeof eventName !== 'string') { + throw new TypeError('eventName must be a string when registering a listener'); + } + else if (!inArray(eventName, SUPPORTED_EVENTS)) { + var events = SUPPORTED_EVENTS.join(', '); + throw new Error("\"".concat(eventName, "\" is not a valid event; must be one of: ").concat(events, ".")); + } + else if (typeof callback !== 'function') { + throw new TypeError('callback must be a function when registering a listener'); + } + if (!LISTENERS[eventName]) { + LISTENERS[eventName] = []; + } + if (!inArray(callback, LISTENERS[eventName])) { + LISTENERS[eventName].push(callback); + } + } + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + function commonjsRequire(path) { + throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); + } + var promisePolyfill = { exports: {} }; + (function () { + var globalNS = function () { + if (typeof globalThis !== 'undefined') { + return globalThis; + } + if (typeof self !== 'undefined') { + return self; + } + if (typeof window !== 'undefined') { + return window; + } + if (typeof commonjsGlobal !== 'undefined') { + return commonjsGlobal; + } + throw new Error('unable to locate global object'); + }(); + if (typeof globalNS['Promise'] === 'function') { + promisePolyfill.exports = globalNS['Promise']; + return; + } + function finallyConstructor(callback) { + var constructor = this.constructor; + return this.then(function (value) { + return constructor.resolve(callback()).then(function () { + return value; + }); + }, function (reason) { + return constructor.resolve(callback()).then(function () { + return constructor.reject(reason); + }); + }); + } + function allSettled(arr) { + var P = this; + return new P(function (resolve, reject) { + if (!(arr && typeof arr.length !== 'undefined')) { + return reject(new TypeError(_typeof(arr) + ' ' + arr + ' is not iterable(cannot read property Symbol(Symbol.iterator))')); + } + var args = Array.prototype.slice.call(arr); + if (args.length === 0) + return resolve([]); + var remaining = args.length; + function res(i, val) { + if (val && (_typeof(val) === 'object' || typeof val === 'function')) { + var then = val.then; + if (typeof then === 'function') { + then.call(val, function (val) { + res(i, val); + }, function (e) { + args[i] = { + status: 'rejected', + reason: e + }; + if (--remaining === 0) { + resolve(args); + } + }); + return; + } + } + args[i] = { + status: 'fulfilled', + value: val + }; + if (--remaining === 0) { + resolve(args); + } + } + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); + } + var setTimeoutFunc = setTimeout; + function isArray(x) { + return Boolean(x && typeof x.length !== 'undefined'); + } + function noop() { } + function bind(fn, thisArg) { + return function () { + fn.apply(thisArg, arguments); + }; + } + function Promise(fn) { + if (!(this instanceof Promise)) + throw new TypeError('Promises must be constructed via new'); + if (typeof fn !== 'function') + throw new TypeError('not a function'); + this._state = 0; + this._handled = false; + this._value = undefined; + this._deferreds = []; + doResolve(fn, this); + } + function handle(self, deferred) { + while (self._state === 3) { + self = self._value; + } + if (self._state === 0) { + self._deferreds.push(deferred); + return; + } + self._handled = true; + Promise._immediateFn(function () { + var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + (self._state === 1 ? resolve : reject)(deferred.promise, self._value); + return; + } + var ret; + try { + ret = cb(self._value); + } + catch (e) { + reject(deferred.promise, e); + return; + } + resolve(deferred.promise, ret); + }); + } + function resolve(self, newValue) { + try { + if (newValue === self) + throw new TypeError('A promise cannot be resolved with itself.'); + if (newValue && (_typeof(newValue) === 'object' || typeof newValue === 'function')) { + var then = newValue.then; + if (newValue instanceof Promise) { + self._state = 3; + self._value = newValue; + finale(self); + return; + } + else if (typeof then === 'function') { + doResolve(bind(then, newValue), self); + return; + } + } + self._state = 1; + self._value = newValue; + finale(self); + } + catch (e) { + reject(self, e); + } + } + function reject(self, newValue) { + self._state = 2; + self._value = newValue; + finale(self); + } + function finale(self) { + if (self._state === 2 && self._deferreds.length === 0) { + Promise._immediateFn(function () { + if (!self._handled) { + Promise._unhandledRejectionFn(self._value); + } + }); + } + for (var i = 0, len = self._deferreds.length; i < len; i++) { + handle(self, self._deferreds[i]); + } + self._deferreds = null; + } + function Handler(onFulfilled, onRejected, promise) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.promise = promise; + } + function doResolve(fn, self) { + var done = false; + try { + fn(function (value) { + if (done) + return; + done = true; + resolve(self, value); + }, function (reason) { + if (done) + return; + done = true; + reject(self, reason); + }); + } + catch (ex) { + if (done) + return; + done = true; + reject(self, ex); + } + } + Promise.prototype['catch'] = function (onRejected) { + return this.then(null, onRejected); + }; + Promise.prototype.then = function (onFulfilled, onRejected) { + var prom = new this.constructor(noop); + handle(this, new Handler(onFulfilled, onRejected, prom)); + return prom; + }; + Promise.prototype['finally'] = finallyConstructor; + Promise.all = function (arr) { + return new Promise(function (resolve, reject) { + if (!isArray(arr)) { + return reject(new TypeError('Promise.all accepts an array')); + } + var args = Array.prototype.slice.call(arr); + if (args.length === 0) + return resolve([]); + var remaining = args.length; + function res(i, val) { + try { + if (val && (_typeof(val) === 'object' || typeof val === 'function')) { + var then = val.then; + if (typeof then === 'function') { + then.call(val, function (val) { + res(i, val); + }, reject); + return; + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } + catch (ex) { + reject(ex); + } + } + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); + }; + Promise.allSettled = allSettled; + Promise.resolve = function (value) { + if (value && _typeof(value) === 'object' && value.constructor === Promise) { + return value; + } + return new Promise(function (resolve) { + resolve(value); + }); + }; + Promise.reject = function (value) { + return new Promise(function (resolve, reject) { + reject(value); + }); + }; + Promise.race = function (arr) { + return new Promise(function (resolve, reject) { + if (!isArray(arr)) { + return reject(new TypeError('Promise.race accepts an array')); + } + for (var i = 0, len = arr.length; i < len; i++) { + Promise.resolve(arr[i]).then(resolve, reject); + } + }); + }; + Promise._immediateFn = + typeof setImmediate === 'function' && function (fn) { + setImmediate(fn); + } || function (fn) { + setTimeoutFunc(fn, 0); + }; + Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) { + if (typeof console !== 'undefined' && console) { + console.warn('Possible Unhandled Promise Rejection:', err); + } + }; + promisePolyfill.exports = Promise; + })(); + var _Promise = promisePolyfill.exports; + function registerLoggingCallbacks(obj) { + var callbackNames = ['begin', 'done', 'log', 'testStart', 'testDone', 'moduleStart', 'moduleDone']; + function registerLoggingCallback(key) { + return function loggingCallback(callback) { + if (typeof callback !== 'function') { + throw new Error('Callback parameter must be a function'); + } + config.callbacks[key].push(callback); + }; + } + for (var i = 0; i < callbackNames.length; i++) { + var key = callbackNames[i]; + if (typeof config.callbacks[key] === 'undefined') { + config.callbacks[key] = []; + } + obj[key] = registerLoggingCallback(key); + } + } + function runLoggingCallbacks(key, args) { + var callbacks = config.callbacks[key]; + if (key === 'log') { + callbacks.map(function (callback) { + return callback(args); + }); + return; + } + var promiseChain = _Promise.resolve(); + callbacks.forEach(function (callback) { + promiseChain = promiseChain.then(function () { + return _Promise.resolve(callback(args)); + }); + }); + return promiseChain; + } + var priorityCount = 0; + var unitSampler; + var taskQueue = []; + function advance() { + advanceTaskQueue(); + if (!taskQueue.length && !config.blocking && !config.current) { + advanceTestQueue(); + } + } + function advanceTaskQueue() { + var start = performance.now(); + config.depth = (config.depth || 0) + 1; + processTaskQueue(start); + config.depth--; + } + function processTaskQueue(start) { + if (taskQueue.length && !config.blocking) { + var elapsedTime = performance.now() - start; + if (!setTimeout$1 || config.updateRate <= 0 || elapsedTime < config.updateRate) { + var task = taskQueue.shift(); + _Promise.resolve(task()).then(function () { + if (!taskQueue.length) { + advance(); + } + else { + processTaskQueue(start); + } + }); + } + else { + setTimeout$1(advance); + } + } + } + function advanceTestQueue() { + if (!config.blocking && !config.queue.length && config.depth === 0) { + done(); + return; + } + var testTasks = config.queue.shift(); + addToTaskQueue(testTasks()); + if (priorityCount > 0) { + priorityCount--; + } + advance(); + } + function addToTaskQueue(tasksArray) { + taskQueue.push.apply(taskQueue, _toConsumableArray(tasksArray)); + } + function taskQueueLength() { + return taskQueue.length; + } + function addToTestQueue(testTasksFunc, prioritize, seed) { + if (prioritize) { + config.queue.splice(priorityCount++, 0, testTasksFunc); + } + else if (seed) { + if (!unitSampler) { + unitSampler = unitSamplerGenerator(seed); + } + var index = Math.floor(unitSampler() * (config.queue.length - priorityCount + 1)); + config.queue.splice(priorityCount + index, 0, testTasksFunc); + } + else { + config.queue.push(testTasksFunc); + } + } + function unitSamplerGenerator(seed) { + var sample = parseInt(generateHash(seed), 16) || -1; + return function () { + sample ^= sample << 13; + sample ^= sample >>> 17; + sample ^= sample << 5; + if (sample < 0) { + sample += 0x100000000; + } + return sample / 0x100000000; + }; + } + function done() { + if (config.stats.testCount === 0 && config.failOnZeroTests === true) { + var error; + if (config.filter && config.filter.length) { + error = new Error("No tests matched the filter \"".concat(config.filter, "\".")); + } + else if (config.module && config.module.length) { + error = new Error("No tests matched the module \"".concat(config.module, "\".")); + } + else if (config.moduleId && config.moduleId.length) { + error = new Error("No tests matched the moduleId \"".concat(config.moduleId, "\".")); + } + else if (config.testId && config.testId.length) { + error = new Error("No tests matched the testId \"".concat(config.testId, "\".")); + } + else { + error = new Error('No tests were run.'); + } + test('global failure', extend(function (assert) { + assert.pushResult({ + result: false, + message: error.message, + source: error.stack + }); + }, { + validTest: true + })); + advance(); + return; + } + var storage = config.storage; + var runtime = Math.round(performance.now() - config.started); + var passed = config.stats.all - config.stats.bad; + ProcessingQueue.finished = true; + emit('runEnd', runSuite.end(true)); + runLoggingCallbacks('done', { + passed: passed, + failed: config.stats.bad, + total: config.stats.all, + runtime: runtime + }).then(function () { + if (storage && config.stats.bad === 0) { + for (var i = storage.length - 1; i >= 0; i--) { + var key = storage.key(i); + if (key.indexOf('qunit-test-') === 0) { + storage.removeItem(key); + } + } + } + }); + } + var ProcessingQueue = { + finished: false, + add: addToTestQueue, + advance: advance, + taskCount: taskQueueLength + }; + var TestReport = function () { + function TestReport(name, suite, options) { + _classCallCheck(this, TestReport); + this.name = name; + this.suiteName = suite.name; + this.fullName = suite.fullName.concat(name); + this.runtime = 0; + this.assertions = []; + this.skipped = !!options.skip; + this.todo = !!options.todo; + this.valid = options.valid; + this._startTime = 0; + this._endTime = 0; + suite.pushTest(this); + } + _createClass(TestReport, [{ + key: "start", + value: function start(recordTime) { + if (recordTime) { + this._startTime = performance.now(); + performance.mark('qunit_test_start'); + } + return { + name: this.name, + suiteName: this.suiteName, + fullName: this.fullName.slice() + }; + } + }, { + key: "end", + value: function end(recordTime) { + if (recordTime) { + this._endTime = performance.now(); + if (performance) { + performance.mark('qunit_test_end'); + var testName = this.fullName.join(' – '); + performance.measure("QUnit Test: ".concat(testName), 'qunit_test_start', 'qunit_test_end'); + } + } + return extend(this.start(), { + runtime: this.getRuntime(), + status: this.getStatus(), + errors: this.getFailedAssertions(), + assertions: this.getAssertions() + }); + } + }, { + key: "pushAssertion", + value: function pushAssertion(assertion) { + this.assertions.push(assertion); + } + }, { + key: "getRuntime", + value: function getRuntime() { + return Math.round(this._endTime - this._startTime); + } + }, { + key: "getStatus", + value: function getStatus() { + if (this.skipped) { + return 'skipped'; + } + var testPassed = this.getFailedAssertions().length > 0 ? this.todo : !this.todo; + if (!testPassed) { + return 'failed'; + } + else if (this.todo) { + return 'todo'; + } + else { + return 'passed'; + } + } + }, { + key: "getFailedAssertions", + value: function getFailedAssertions() { + return this.assertions.filter(function (assertion) { + return !assertion.passed; + }); + } + }, { + key: "getAssertions", + value: function getAssertions() { + return this.assertions.slice(); + } + }, { + key: "slimAssertions", + value: function slimAssertions() { + this.assertions = this.assertions.map(function (assertion) { + delete assertion.actual; + delete assertion.expected; + return assertion; + }); + } + }]); + return TestReport; + }(); + function Test(settings) { + this.expected = null; + this.assertions = []; + this.module = config.currentModule; + this.steps = []; + this.timeout = undefined; + this.data = undefined; + this.withData = false; + this.pauses = new StringMap(); + this.nextPauseId = 1; + this.stackOffset = 3; + extend(this, settings); + if (this.module.skip) { + this.skip = true; + this.todo = false; + } + else if (this.module.todo && !this.skip) { + this.todo = true; + } + if (ProcessingQueue.finished) { + Logger.warn('Unexpected test after runEnd. This is unstable and will fail in QUnit 3.0.'); + return; + } + if (!this.skip && typeof this.callback !== 'function') { + var method = this.todo ? 'QUnit.todo' : 'QUnit.test'; + throw new TypeError("You must provide a callback to ".concat(method, "(\"").concat(this.testName, "\")")); + } + for (var i = 0, l = this.module.tests; i < l.length; i++) { + if (this.module.tests[i].name === this.testName) { + this.testName += ' '; + } + } + this.testId = generateHash(this.module.name, this.testName); + ++Test.count; + this.errorForStack = new Error(); + if (this.callback && this.callback.validTest) { + this.errorForStack.stack = undefined; + } + this.testReport = new TestReport(this.testName, this.module.suiteReport, { + todo: this.todo, + skip: this.skip, + valid: this.valid() + }); + this.module.tests.push({ + name: this.testName, + testId: this.testId, + skip: !!this.skip + }); + if (this.skip) { + this.callback = function () { }; + this.async = false; + this.expected = 0; + } + else { + this.assert = new Assert(this); + } + } + Test.count = 0; + function getNotStartedModules(startModule) { + var module = startModule; + var modules = []; + while (module && module.testsRun === 0) { + modules.push(module); + module = module.parentModule; + } + return modules.reverse(); + } + Test.prototype = { + get stack() { + return extractStacktrace(this.errorForStack, this.stackOffset); + }, + before: function before() { + var _this = this; + var module = this.module; + var notStartedModules = getNotStartedModules(module); + var moduleStartChain = _Promise.resolve(); + notStartedModules.forEach(function (startModule) { + moduleStartChain = moduleStartChain.then(function () { + startModule.stats = { + all: 0, + bad: 0, + started: performance.now() + }; + emit('suiteStart', startModule.suiteReport.start(true)); + return runLoggingCallbacks('moduleStart', { + name: startModule.name, + tests: startModule.tests + }); + }); + }); + return moduleStartChain.then(function () { + config.current = _this; + _this.testEnvironment = extend({}, module.testEnvironment); + _this.started = performance.now(); + emit('testStart', _this.testReport.start(true)); + return runLoggingCallbacks('testStart', { + name: _this.testName, + module: module.name, + testId: _this.testId, + previousFailure: _this.previousFailure + }).then(function () { + if (!config.pollution) { + saveGlobal(); + } + }); + }); + }, + run: function run() { + config.current = this; + if (config.notrycatch) { + runTest(this); + return; + } + try { + runTest(this); + } + catch (e) { + this.pushFailure('Died on test #' + (this.assertions.length + 1) + ': ' + (e.message || e) + '\n' + this.stack, extractStacktrace(e, 0)); + saveGlobal(); + if (config.blocking) { + internalRecover(this); + } + } + function runTest(test) { + var promise; + if (test.withData) { + promise = test.callback.call(test.testEnvironment, test.assert, test.data); + } + else { + promise = test.callback.call(test.testEnvironment, test.assert); + } + test.resolvePromise(promise); + if (test.timeout === 0 && test.pauses.size > 0) { + pushFailure('Test did not finish synchronously even though assert.timeout( 0 ) was used.', sourceFromStacktrace(2)); + } + } + }, + after: function after() { + checkPollution(); + }, + queueGlobalHook: function queueGlobalHook(hook, hookName) { + var _this2 = this; + var runHook = function runHook() { + config.current = _this2; + var promise; + if (config.notrycatch) { + promise = hook.call(_this2.testEnvironment, _this2.assert); + } + else { + try { + promise = hook.call(_this2.testEnvironment, _this2.assert); + } + catch (error) { + _this2.pushFailure('Global ' + hookName + ' failed on ' + _this2.testName + ': ' + errorString(error), extractStacktrace(error, 0)); + return; + } + } + _this2.resolvePromise(promise, hookName); + }; + return runHook; + }, + queueHook: function queueHook(hook, hookName, hookOwner) { + var _this3 = this; + var callHook = function callHook() { + var promise = hook.call(_this3.testEnvironment, _this3.assert); + _this3.resolvePromise(promise, hookName); + }; + var runHook = function runHook() { + if (hookName === 'before') { + if (hookOwner.testsRun !== 0) { + return; + } + _this3.preserveEnvironment = true; + } + if (hookName === 'after' && !lastTestWithinModuleExecuted(hookOwner) && (config.queue.length > 0 || ProcessingQueue.taskCount() > 2)) { + return; + } + config.current = _this3; + if (config.notrycatch) { + callHook(); + return; + } + try { + callHook(); + } + catch (error) { + _this3.pushFailure(hookName + ' failed on ' + _this3.testName + ': ' + (error.message || error), extractStacktrace(error, 0)); + } + }; + return runHook; + }, + hooks: function hooks(handler) { + var hooks = []; + function processGlobalhooks(test) { + if ((handler === 'beforeEach' || handler === 'afterEach') && config.globalHooks[handler]) { + for (var i = 0; i < config.globalHooks[handler].length; i++) { + hooks.push(test.queueGlobalHook(config.globalHooks[handler][i], handler)); + } + } + } + function processHooks(test, module) { + if (module.parentModule) { + processHooks(test, module.parentModule); + } + if (module.hooks[handler].length) { + for (var i = 0; i < module.hooks[handler].length; i++) { + hooks.push(test.queueHook(module.hooks[handler][i], handler, module)); + } + } + } + if (!this.skip) { + processGlobalhooks(this); + processHooks(this, this.module); + } + return hooks; + }, + finish: function finish() { + config.current = this; + if (setTimeout$1) { + clearTimeout(this.timeout); + config.timeoutHandler = null; + } + this.callback = undefined; + if (this.steps.length) { + var stepsList = this.steps.join(', '); + this.pushFailure('Expected assert.verifySteps() to be called before end of test ' + "after using assert.step(). Unverified steps: ".concat(stepsList), this.stack); + } + if (config.requireExpects && this.expected === null) { + this.pushFailure('Expected number of assertions to be defined, but expect() was ' + 'not called.', this.stack); + } + else if (this.expected !== null && this.expected !== this.assertions.length) { + this.pushFailure('Expected ' + this.expected + ' assertions, but ' + this.assertions.length + ' were run', this.stack); + } + else if (this.expected === null && !this.assertions.length) { + this.pushFailure('Expected at least one assertion, but none were run - call ' + 'expect(0) to accept zero assertions.', this.stack); + } + var module = this.module; + var moduleName = module.name; + var testName = this.testName; + var skipped = !!this.skip; + var todo = !!this.todo; + var bad = 0; + var storage = config.storage; + this.runtime = Math.round(performance.now() - this.started); + config.stats.all += this.assertions.length; + config.stats.testCount += 1; + module.stats.all += this.assertions.length; + for (var i = 0; i < this.assertions.length; i++) { + if (!this.assertions[i].result) { + bad++; + config.stats.bad++; + module.stats.bad++; + } + } + if (skipped) { + incrementTestsIgnored(module); + } + else { + incrementTestsRun(module); + } + if (storage) { + if (bad) { + storage.setItem('qunit-test-' + moduleName + '-' + testName, bad); + } + else { + storage.removeItem('qunit-test-' + moduleName + '-' + testName); + } + } + emit('testEnd', this.testReport.end(true)); + this.testReport.slimAssertions(); + var test = this; + return runLoggingCallbacks('testDone', { + name: testName, + module: moduleName, + skipped: skipped, + todo: todo, + failed: bad, + passed: this.assertions.length - bad, + total: this.assertions.length, + runtime: skipped ? 0 : this.runtime, + assertions: this.assertions, + testId: this.testId, + get source() { + return test.stack; + } + }).then(function () { + if (allTestsExecuted(module)) { + var completedModules = [module]; + var parent = module.parentModule; + while (parent && allTestsExecuted(parent)) { + completedModules.push(parent); + parent = parent.parentModule; + } + var moduleDoneChain = _Promise.resolve(); + completedModules.forEach(function (completedModule) { + moduleDoneChain = moduleDoneChain.then(function () { + return logSuiteEnd(completedModule); + }); + }); + return moduleDoneChain; + } + }).then(function () { + config.current = undefined; + }); + function logSuiteEnd(module) { + var modules = [module]; + while (modules.length) { + var nextModule = modules.shift(); + nextModule.hooks = {}; + modules.push.apply(modules, _toConsumableArray(nextModule.childModules)); + } + emit('suiteEnd', module.suiteReport.end(true)); + return runLoggingCallbacks('moduleDone', { + name: module.name, + tests: module.tests, + failed: module.stats.bad, + passed: module.stats.all - module.stats.bad, + total: module.stats.all, + runtime: Math.round(performance.now() - module.stats.started) + }); + } + }, + preserveTestEnvironment: function preserveTestEnvironment() { + if (this.preserveEnvironment) { + this.module.testEnvironment = this.testEnvironment; + this.testEnvironment = extend({}, this.module.testEnvironment); + } + }, + queue: function queue() { + var test = this; + if (!this.valid()) { + incrementTestsIgnored(this.module); + return; + } + function runTest() { + return [function () { + return test.before(); + }].concat(_toConsumableArray(test.hooks('before')), [function () { + test.preserveTestEnvironment(); + }], _toConsumableArray(test.hooks('beforeEach')), [function () { + test.run(); + }], _toConsumableArray(test.hooks('afterEach').reverse()), _toConsumableArray(test.hooks('after').reverse()), [function () { + test.after(); + }, function () { + return test.finish(); + }]); + } + var previousFailCount = config.storage && +config.storage.getItem('qunit-test-' + this.module.name + '-' + this.testName); + var prioritize = config.reorder && !!previousFailCount; + this.previousFailure = !!previousFailCount; + ProcessingQueue.add(runTest, prioritize, config.seed); + }, + pushResult: function pushResult(resultInfo) { + if (this !== config.current) { + var message = resultInfo && resultInfo.message || ''; + var testName = this && this.testName || ''; + var error = 'Assertion occurred after test finished.\n' + '> Test: ' + testName + '\n' + '> Message: ' + message + '\n'; + throw new Error(error); + } + var details = { + module: this.module.name, + name: this.testName, + result: resultInfo.result, + message: resultInfo.message, + actual: resultInfo.actual, + testId: this.testId, + negative: resultInfo.negative || false, + runtime: Math.round(performance.now() - this.started), + todo: !!this.todo + }; + if (hasOwn$1.call(resultInfo, 'expected')) { + details.expected = resultInfo.expected; + } + if (!resultInfo.result) { + var source = resultInfo.source || sourceFromStacktrace(); + if (source) { + details.source = source; + } + } + this.logAssertion(details); + this.assertions.push({ + result: !!resultInfo.result, + message: resultInfo.message + }); + }, + pushFailure: function pushFailure(message, source, actual) { + if (!(this instanceof Test)) { + throw new Error('pushFailure() assertion outside test context, was ' + sourceFromStacktrace(2)); + } + this.pushResult({ + result: false, + message: message || 'error', + actual: actual || null, + source: source + }); + }, + logAssertion: function logAssertion(details) { + runLoggingCallbacks('log', details); + var assertion = { + passed: details.result, + actual: details.actual, + expected: details.expected, + message: details.message, + stack: details.source, + todo: details.todo + }; + this.testReport.pushAssertion(assertion); + emit('assertion', assertion); + }, + internalResetTimeout: function internalResetTimeout(timeoutDuration) { + clearTimeout(config.timeout); + config.timeout = setTimeout$1(config.timeoutHandler(timeoutDuration), timeoutDuration); + }, + internalStop: function internalStop() { + var requiredCalls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; + config.blocking = true; + var test = this; + var pauseId = this.nextPauseId++; + var pause = { + cancelled: false, + remaining: requiredCalls + }; + test.pauses.set(pauseId, pause); + function release() { + if (pause.cancelled) { + return; + } + if (config.current === undefined) { + throw new Error('Unexpected release of async pause after tests finished.\n' + "> Test: ".concat(test.testName, " [async #").concat(pauseId, "]")); + } + if (config.current !== test) { + throw new Error('Unexpected release of async pause during a different test.\n' + "> Test: ".concat(test.testName, " [async #").concat(pauseId, "]")); + } + if (pause.remaining <= 0) { + throw new Error('Tried to release async pause that was already released.\n' + "> Test: ".concat(test.testName, " [async #").concat(pauseId, "]")); + } + pause.remaining--; + if (pause.remaining === 0) { + test.pauses.delete(pauseId); + } + internalStart(test); + } + if (setTimeout$1) { + var timeoutDuration; + if (typeof test.timeout === 'number') { + timeoutDuration = test.timeout; + } + else if (typeof config.testTimeout === 'number') { + timeoutDuration = config.testTimeout; + } + if (typeof timeoutDuration === 'number' && timeoutDuration > 0) { + config.timeoutHandler = function (timeout) { + return function () { + config.timeout = null; + pause.cancelled = true; + test.pauses.delete(pauseId); + test.pushFailure("Test took longer than ".concat(timeout, "ms; test timed out."), sourceFromStacktrace(2)); + internalStart(test); + }; + }; + clearTimeout(config.timeout); + config.timeout = setTimeout$1(config.timeoutHandler(timeoutDuration), timeoutDuration); + } + } + return release; + }, + resolvePromise: function resolvePromise(promise, phase) { + if (promise != null) { + var _test = this; + var then = promise.then; + if (typeof then === 'function') { + var resume = _test.internalStop(); + var resolve = function resolve() { + resume(); + }; + if (config.notrycatch) { + then.call(promise, resolve); + } + else { + var reject = function reject(error) { + var message = 'Promise rejected ' + (!phase ? 'during' : phase.replace(/Each$/, '')) + ' "' + _test.testName + '": ' + (error && error.message || error); + _test.pushFailure(message, extractStacktrace(error, 0)); + saveGlobal(); + internalRecover(_test); + }; + then.call(promise, resolve, reject); + } + } + } + }, + valid: function valid() { + if (this.callback && this.callback.validTest) { + return true; + } + function moduleChainIdMatch(testModule, selectedId) { + return (!selectedId || !selectedId.length || inArray(testModule.moduleId, selectedId) || testModule.parentModule && moduleChainIdMatch(testModule.parentModule, selectedId)); + } + if (!moduleChainIdMatch(this.module, config.moduleId)) { + return false; + } + if (config.testId && config.testId.length && !inArray(this.testId, config.testId)) { + return false; + } + function moduleChainNameMatch(testModule, selectedModule) { + if (!selectedModule) { + return true; + } + var testModuleName = testModule.name ? testModule.name.toLowerCase() : null; + if (testModuleName === selectedModule) { + return true; + } + else if (testModule.parentModule) { + return moduleChainNameMatch(testModule.parentModule, selectedModule); + } + else { + return false; + } + } + var selectedModule = config.module && config.module.toLowerCase(); + if (!moduleChainNameMatch(this.module, selectedModule)) { + return false; + } + var filter = config.filter; + if (!filter) { + return true; + } + var regexFilter = /^(!?)\/([\w\W]*)\/(i?$)/.exec(filter); + var fullName = this.module.name + ': ' + this.testName; + return regexFilter ? this.regexFilter(!!regexFilter[1], regexFilter[2], regexFilter[3], fullName) : this.stringFilter(filter, fullName); + }, + regexFilter: function regexFilter(exclude, pattern, flags, fullName) { + var regex = new RegExp(pattern, flags); + var match = regex.test(fullName); + return match !== exclude; + }, + stringFilter: function stringFilter(filter, fullName) { + filter = filter.toLowerCase(); + fullName = fullName.toLowerCase(); + var include = filter.charAt(0) !== '!'; + if (!include) { + filter = filter.slice(1); + } + if (fullName.indexOf(filter) !== -1) { + return include; + } + return !include; + } + }; + function pushFailure() { + if (!config.current) { + throw new Error('pushFailure() assertion outside test context, in ' + sourceFromStacktrace(2)); + } + var currentTest = config.current; + return currentTest.pushFailure.apply(currentTest, arguments); + } + function saveGlobal() { + config.pollution = []; + if (config.noglobals) { + for (var key in g) { + if (hasOwn$1.call(g, key)) { + if (/^qunit-test-output/.test(key)) { + continue; + } + config.pollution.push(key); + } + } + } + } + function checkPollution() { + var old = config.pollution; + saveGlobal(); + var newGlobals = diff(config.pollution, old); + if (newGlobals.length > 0) { + pushFailure('Introduced global variable(s): ' + newGlobals.join(', ')); + } + var deletedGlobals = diff(old, config.pollution); + if (deletedGlobals.length > 0) { + pushFailure('Deleted global variable(s): ' + deletedGlobals.join(', ')); + } + } + var focused = false; + function addTest(settings) { + if (focused || config.currentModule.ignored) { + return; + } + var newTest = new Test(settings); + newTest.queue(); + } + function addOnlyTest(settings) { + if (config.currentModule.ignored) { + return; + } + if (!focused) { + config.queue.length = 0; + focused = true; + } + var newTest = new Test(settings); + newTest.queue(); + } + function test(testName, callback) { + addTest({ + testName: testName, + callback: callback + }); + } + function makeEachTestName(testName, argument) { + return "".concat(testName, " [").concat(argument, "]"); + } + function runEach(data, eachFn) { + if (Array.isArray(data)) { + for (var i = 0; i < data.length; i++) { + eachFn(data[i], i); + } + } + else if (_typeof(data) === 'object' && data !== null) { + for (var key in data) { + eachFn(data[key], key); + } + } + else { + throw new Error("test.each() expects an array or object as input, but\nfound ".concat(_typeof(data), " instead.")); + } + } + extend(test, { + todo: function todo(testName, callback) { + addTest({ + testName: testName, + callback: callback, + todo: true + }); + }, + skip: function skip(testName) { + addTest({ + testName: testName, + skip: true + }); + }, + only: function only(testName, callback) { + addOnlyTest({ + testName: testName, + callback: callback + }); + }, + each: function each(testName, dataset, callback) { + runEach(dataset, function (data, testKey) { + addTest({ + testName: makeEachTestName(testName, testKey), + callback: callback, + withData: true, + stackOffset: 5, + data: data + }); + }); + } + }); + test.todo.each = function (testName, dataset, callback) { + runEach(dataset, function (data, testKey) { + addTest({ + testName: makeEachTestName(testName, testKey), + callback: callback, + todo: true, + withData: true, + stackOffset: 5, + data: data + }); + }); + }; + test.skip.each = function (testName, dataset) { + runEach(dataset, function (_, testKey) { + addTest({ + testName: makeEachTestName(testName, testKey), + stackOffset: 5, + skip: true + }); + }); + }; + test.only.each = function (testName, dataset, callback) { + runEach(dataset, function (data, testKey) { + addOnlyTest({ + testName: makeEachTestName(testName, testKey), + callback: callback, + withData: true, + stackOffset: 5, + data: data + }); + }); + }; + function internalRecover(test) { + test.pauses.forEach(function (pause) { + pause.cancelled = true; + }); + test.pauses.clear(); + internalStart(test); + } + function internalStart(test) { + if (test.pauses.size > 0) { + return; + } + if (setTimeout$1) { + clearTimeout(config.timeout); + config.timeout = setTimeout$1(function () { + if (test.pauses.size > 0) { + return; + } + clearTimeout(config.timeout); + config.timeout = null; + config.blocking = false; + ProcessingQueue.advance(); + }); + } + else { + config.blocking = false; + ProcessingQueue.advance(); + } + } + function collectTests(module) { + var tests = [].concat(module.tests); + var modules = _toConsumableArray(module.childModules); + while (modules.length) { + var nextModule = modules.shift(); + tests.push.apply(tests, nextModule.tests); + modules.push.apply(modules, _toConsumableArray(nextModule.childModules)); + } + return tests; + } + function allTestsExecuted(module) { + return module.testsRun + module.testsIgnored === collectTests(module).length; + } + function lastTestWithinModuleExecuted(module) { + return module.testsRun === collectTests(module).filter(function (test) { + return !test.skip; + }).length - 1; + } + function incrementTestsRun(module) { + module.testsRun++; + while (module = module.parentModule) { + module.testsRun++; + } + } + function incrementTestsIgnored(module) { + module.testsIgnored++; + while (module = module.parentModule) { + module.testsIgnored++; + } + } + function exportQUnit(QUnit) { + var exportedModule = false; + if (window$1 && document) { + if (window$1.QUnit && window$1.QUnit.version) { + throw new Error('QUnit has already been defined.'); + } + window$1.QUnit = QUnit; + exportedModule = true; + } + if (typeof module !== 'undefined' && module && module.exports) { + module.exports = QUnit; + module.exports.QUnit = QUnit; + exportedModule = true; + } + if (typeof exports !== 'undefined' && exports) { + exports.QUnit = QUnit; + exportedModule = true; + } + if (typeof define === 'function' && define.amd) { + define(function () { + return QUnit; + }); + QUnit.config.autostart = false; + exportedModule = true; + } + if (!exportedModule) { + g.QUnit = QUnit; + } + } + var ConsoleReporter = function () { + function ConsoleReporter(runner) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + _classCallCheck(this, ConsoleReporter); + this.log = options.log || Function.prototype.bind.call(console$1.log, console$1); + runner.on('error', this.onError.bind(this)); + runner.on('runStart', this.onRunStart.bind(this)); + runner.on('testStart', this.onTestStart.bind(this)); + runner.on('testEnd', this.onTestEnd.bind(this)); + runner.on('runEnd', this.onRunEnd.bind(this)); + } + _createClass(ConsoleReporter, [{ + key: "onError", + value: function onError(error) { + this.log('error', error); + } + }, { + key: "onRunStart", + value: function onRunStart(runStart) { + this.log('runStart', runStart); + } + }, { + key: "onTestStart", + value: function onTestStart(test) { + this.log('testStart', test); + } + }, { + key: "onTestEnd", + value: function onTestEnd(test) { + this.log('testEnd', test); + } + }, { + key: "onRunEnd", + value: function onRunEnd(runEnd) { + this.log('runEnd', runEnd); + } + }], [{ + key: "init", + value: function init(runner, options) { + return new ConsoleReporter(runner, options); + } + }]); + return ConsoleReporter; + }(); + var FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY = true; + if (typeof process !== 'undefined') { + var _ref = process.env || {}; + FORCE_COLOR = _ref.FORCE_COLOR; + NODE_DISABLE_COLORS = _ref.NODE_DISABLE_COLORS; + NO_COLOR = _ref.NO_COLOR; + TERM = _ref.TERM; + isTTY = process.stdout && process.stdout.isTTY; + } + var $ = { + enabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (FORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY), + reset: init(0, 0), + bold: init(1, 22), + dim: init(2, 22), + italic: init(3, 23), + underline: init(4, 24), + inverse: init(7, 27), + hidden: init(8, 28), + strikethrough: init(9, 29), + black: init(30, 39), + red: init(31, 39), + green: init(32, 39), + yellow: init(33, 39), + blue: init(34, 39), + magenta: init(35, 39), + cyan: init(36, 39), + white: init(37, 39), + gray: init(90, 39), + grey: init(90, 39), + bgBlack: init(40, 49), + bgRed: init(41, 49), + bgGreen: init(42, 49), + bgYellow: init(43, 49), + bgBlue: init(44, 49), + bgMagenta: init(45, 49), + bgCyan: init(46, 49), + bgWhite: init(47, 49) + }; + function run(arr, str) { + var i = 0, tmp, beg = '', end = ''; + for (; i < arr.length; i++) { + tmp = arr[i]; + beg += tmp.open; + end += tmp.close; + if (!!~str.indexOf(tmp.close)) { + str = str.replace(tmp.rgx, tmp.close + tmp.open); + } + } + return beg + str + end; + } + function chain(has, keys) { + var ctx = { + has: has, + keys: keys + }; + ctx.reset = $.reset.bind(ctx); + ctx.bold = $.bold.bind(ctx); + ctx.dim = $.dim.bind(ctx); + ctx.italic = $.italic.bind(ctx); + ctx.underline = $.underline.bind(ctx); + ctx.inverse = $.inverse.bind(ctx); + ctx.hidden = $.hidden.bind(ctx); + ctx.strikethrough = $.strikethrough.bind(ctx); + ctx.black = $.black.bind(ctx); + ctx.red = $.red.bind(ctx); + ctx.green = $.green.bind(ctx); + ctx.yellow = $.yellow.bind(ctx); + ctx.blue = $.blue.bind(ctx); + ctx.magenta = $.magenta.bind(ctx); + ctx.cyan = $.cyan.bind(ctx); + ctx.white = $.white.bind(ctx); + ctx.gray = $.gray.bind(ctx); + ctx.grey = $.grey.bind(ctx); + ctx.bgBlack = $.bgBlack.bind(ctx); + ctx.bgRed = $.bgRed.bind(ctx); + ctx.bgGreen = $.bgGreen.bind(ctx); + ctx.bgYellow = $.bgYellow.bind(ctx); + ctx.bgBlue = $.bgBlue.bind(ctx); + ctx.bgMagenta = $.bgMagenta.bind(ctx); + ctx.bgCyan = $.bgCyan.bind(ctx); + ctx.bgWhite = $.bgWhite.bind(ctx); + return ctx; + } + function init(open, close) { + var blk = { + open: "\x1B[".concat(open, "m"), + close: "\x1B[".concat(close, "m"), + rgx: new RegExp("\\x1b\\[".concat(close, "m"), 'g') + }; + return function (txt) { + if (this !== void 0 && this.has !== void 0) { + !!~this.has.indexOf(open) || (this.has.push(open), this.keys.push(blk)); + return txt === void 0 ? this : $.enabled ? run(this.keys, txt + '') : txt + ''; + } + return txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt + '') : txt + ''; + }; + } + var hasOwn = Object.prototype.hasOwnProperty; + function prettyYamlValue(value) { + var indent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4; + if (value === undefined) { + value = String(value); + } + if (typeof value === 'number' && !isFinite(value)) { + value = String(value); + } + if (typeof value === 'number') { + return JSON.stringify(value); + } + if (typeof value === 'string') { + var rSpecialJson = /['"\\/[{}\]\r\n]/; + var rSpecialYaml = /[-?:,[\]{}#&*!|=>'"%@`]/; + var rUntrimmed = /(^\s|\s$)/; + var rNumerical = /^[\d._-]+$/; + var rBool = /^(true|false|y|n|yes|no|on|off)$/i; + if (value === '' || rSpecialJson.test(value) || rSpecialYaml.test(value[0]) || rUntrimmed.test(value) || rNumerical.test(value) || rBool.test(value)) { + if (!/\n/.test(value)) { + return JSON.stringify(value); + } + var prefix = new Array(indent + 1).join(' '); + var trailingLinebreakMatch = value.match(/\n+$/); + var trailingLinebreaks = trailingLinebreakMatch ? trailingLinebreakMatch[0].length : 0; + if (trailingLinebreaks === 1) { + var lines = value + .replace(/\n$/, '').split('\n').map(function (line) { + return prefix + line; + }); + return '|\n' + lines.join('\n'); + } + else { + var _lines = value.split('\n').map(function (line) { + return prefix + line; + }); + return '|+\n' + _lines.join('\n'); + } + } + else { + return value; + } + } + return JSON.stringify(decycledShallowClone(value), null, 2); + } + function decycledShallowClone(object) { + var ancestors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + if (ancestors.indexOf(object) !== -1) { + return '[Circular]'; + } + var type = Object.prototype.toString.call(object).replace(/^\[.+\s(.+?)]$/, '$1').toLowerCase(); + var clone; + switch (type) { + case 'array': + ancestors.push(object); + clone = object.map(function (element) { + return decycledShallowClone(element, ancestors); + }); + ancestors.pop(); + break; + case 'object': + ancestors.push(object); + clone = {}; + Object.keys(object).forEach(function (key) { + clone[key] = decycledShallowClone(object[key], ancestors); + }); + ancestors.pop(); + break; + default: + clone = object; + } + return clone; + } + var TapReporter = function () { + function TapReporter(runner) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + _classCallCheck(this, TapReporter); + this.log = options.log || Function.prototype.bind.call(console$1.log, console$1); + this.testCount = 0; + this.ended = false; + this.bailed = false; + runner.on('error', this.onError.bind(this)); + runner.on('runStart', this.onRunStart.bind(this)); + runner.on('testEnd', this.onTestEnd.bind(this)); + runner.on('runEnd', this.onRunEnd.bind(this)); + } + _createClass(TapReporter, [{ + key: "onRunStart", + value: function onRunStart(_runSuite) { + this.log('TAP version 13'); + } + }, { + key: "onError", + value: function onError(error) { + if (this.bailed) { + return; + } + this.bailed = true; + if (!this.ended) { + this.testCount = this.testCount + 1; + this.log($.red("not ok ".concat(this.testCount, " global failure"))); + this.logError(error); + } + this.log('Bail out! ' + errorString(error).split('\n')[0]); + if (this.ended) { + this.logError(error); + } + } + }, { + key: "onTestEnd", + value: function onTestEnd(test) { + var _this = this; + this.testCount = this.testCount + 1; + if (test.status === 'passed') { + this.log("ok ".concat(this.testCount, " ").concat(test.fullName.join(' > '))); + } + else if (test.status === 'skipped') { + this.log($.yellow("ok ".concat(this.testCount, " # SKIP ").concat(test.fullName.join(' > ')))); + } + else if (test.status === 'todo') { + this.log($.cyan("not ok ".concat(this.testCount, " # TODO ").concat(test.fullName.join(' > ')))); + test.errors.forEach(function (error) { + return _this.logAssertion(error, 'todo'); + }); + } + else { + this.log($.red("not ok ".concat(this.testCount, " ").concat(test.fullName.join(' > ')))); + test.errors.forEach(function (error) { + return _this.logAssertion(error); + }); + } + } + }, { + key: "onRunEnd", + value: function onRunEnd(runSuite) { + this.ended = true; + this.log("1..".concat(runSuite.testCounts.total)); + this.log("# pass ".concat(runSuite.testCounts.passed)); + this.log($.yellow("# skip ".concat(runSuite.testCounts.skipped))); + this.log($.cyan("# todo ".concat(runSuite.testCounts.todo))); + this.log($.red("# fail ".concat(runSuite.testCounts.failed))); + } + }, { + key: "logAssertion", + value: function logAssertion(error, severity) { + var out = ' ---'; + out += "\n message: ".concat(prettyYamlValue(error.message || 'failed')); + out += "\n severity: ".concat(prettyYamlValue(severity || 'failed')); + if (hasOwn.call(error, 'actual')) { + out += "\n actual : ".concat(prettyYamlValue(error.actual)); + } + if (hasOwn.call(error, 'expected')) { + out += "\n expected: ".concat(prettyYamlValue(error.expected)); + } + if (error.stack) { + out += "\n stack: ".concat(prettyYamlValue(error.stack + '\n')); + } + out += '\n ...'; + this.log(out); + } + }, { + key: "logError", + value: function logError(error) { + var out = ' ---'; + out += "\n message: ".concat(prettyYamlValue(errorString(error))); + out += "\n severity: ".concat(prettyYamlValue('failed')); + if (error && error.stack) { + out += "\n stack: ".concat(prettyYamlValue(error.stack + '\n')); + } + out += '\n ...'; + this.log(out); + } + }], [{ + key: "init", + value: function init(runner, options) { + return new TapReporter(runner, options); + } + }]); + return TapReporter; + }(); + var reporters = { + console: ConsoleReporter, + tap: TapReporter + }; + function makeAddGlobalHook(hookName) { + return function addGlobalHook(callback) { + if (!config.globalHooks[hookName]) { + config.globalHooks[hookName] = []; + } + config.globalHooks[hookName].push(callback); + }; + } + var hooks = { + beforeEach: makeAddGlobalHook('beforeEach'), + afterEach: makeAddGlobalHook('afterEach') + }; + function onUncaughtException(error) { + if (config.current) { + config.current.assert.pushResult({ + result: false, + message: "global failure: ".concat(errorString(error)), + source: error && error.stack || sourceFromStacktrace(2) + }); + } + else { + runSuite.globalFailureCount++; + config.stats.bad++; + config.stats.all++; + emit('error', error); + } + } + function onWindowError(details) { + Logger.warn('QUnit.onError is deprecated and will be removed in QUnit 3.0.' + ' Please use QUnit.onUncaughtException instead.'); + if (config.current && config.current.ignoreGlobalErrors) { + return true; + } + var err = new Error(details.message); + err.stack = details.stacktrace || details.fileName + ':' + details.lineNumber; + onUncaughtException(err); + return false; + } + var QUnit = {}; + config.currentModule.suiteReport = runSuite; + var globalStartCalled = false; + var runStarted = false; + QUnit.isLocal = window$1 && window$1.location && window$1.location.protocol === 'file:'; + QUnit.version = '2.19.4'; + extend(QUnit, { + config: config, + dump: dump, + equiv: equiv, + reporters: reporters, + hooks: hooks, + is: is, + objectType: objectType, + on: on, + onError: onWindowError, + onUncaughtException: onUncaughtException, + pushFailure: pushFailure, + assert: Assert.prototype, + module: module$1, + test: test, + todo: test.todo, + skip: test.skip, + only: test.only, + start: function start(count) { + if (config.current) { + throw new Error('QUnit.start cannot be called inside a test context.'); + } + var globalStartAlreadyCalled = globalStartCalled; + globalStartCalled = true; + if (runStarted) { + throw new Error('Called start() while test already started running'); + } + if (globalStartAlreadyCalled || count > 1) { + throw new Error('Called start() outside of a test context too many times'); + } + if (config.autostart) { + throw new Error('Called start() outside of a test context when ' + 'QUnit.config.autostart was true'); + } + if (!config.pageLoaded) { + config.autostart = true; + if (!document) { + QUnit.load(); + } + return; + } + scheduleBegin(); + }, + onUnhandledRejection: function onUnhandledRejection(reason) { + Logger.warn('QUnit.onUnhandledRejection is deprecated and will be removed in QUnit 3.0.' + ' Please use QUnit.onUncaughtException instead.'); + onUncaughtException(reason); + }, + extend: function extend$1() { + Logger.warn('QUnit.extend is deprecated and will be removed in QUnit 3.0.' + ' Please use Object.assign instead.'); + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return extend.apply(this, args); + }, + load: function load() { + config.pageLoaded = true; + extend(config, { + started: 0, + updateRate: 1000, + autostart: true, + filter: '' + }, true); + if (!runStarted) { + config.blocking = false; + if (config.autostart) { + scheduleBegin(); + } + } + }, + stack: function stack(offset) { + offset = (offset || 0) + 2; + return sourceFromStacktrace(offset); + } + }); + registerLoggingCallbacks(QUnit); + function scheduleBegin() { + runStarted = true; + if (setTimeout$1) { + setTimeout$1(function () { + begin(); + }); + } + else { + begin(); + } + } + function unblockAndAdvanceQueue() { + config.blocking = false; + ProcessingQueue.advance(); + } + function begin() { + if (config.started) { + unblockAndAdvanceQueue(); + return; + } + config.started = performance.now(); + if (config.modules[0].name === '' && config.modules[0].tests.length === 0) { + config.modules.shift(); + } + var modulesLog = []; + for (var i = 0; i < config.modules.length; i++) { + if (config.modules[i].name !== '') { + modulesLog.push({ + name: config.modules[i].name, + moduleId: config.modules[i].moduleId, + tests: config.modules[i].tests + }); + } + } + emit('runStart', runSuite.start(true)); + runLoggingCallbacks('begin', { + totalTests: Test.count, + modules: modulesLog + }).then(unblockAndAdvanceQueue); + } + exportQUnit(QUnit); + (function () { + if (!window$1 || !document) { + return; + } + var config = QUnit.config; + var hasOwn = Object.prototype.hasOwnProperty; + function storeFixture() { + if (hasOwn.call(config, 'fixture')) { + return; + } + var fixture = document.getElementById('qunit-fixture'); + if (fixture) { + config.fixture = fixture.cloneNode(true); + } + } + QUnit.begin(storeFixture); + function resetFixture() { + if (config.fixture == null) { + return; + } + var fixture = document.getElementById('qunit-fixture'); + var resetFixtureType = _typeof(config.fixture); + if (resetFixtureType === 'string') { + var newFixture = document.createElement('div'); + newFixture.setAttribute('id', 'qunit-fixture'); + newFixture.innerHTML = config.fixture; + fixture.parentNode.replaceChild(newFixture, fixture); + } + else { + var clonedFixture = config.fixture.cloneNode(true); + fixture.parentNode.replaceChild(clonedFixture, fixture); + } + } + QUnit.testStart(resetFixture); + })(); + (function () { + var location = typeof window$1 !== 'undefined' && window$1.location; + if (!location) { + return; + } + var urlParams = getUrlParams(); + QUnit.urlParams = urlParams; + QUnit.config.filter = urlParams.filter; + QUnit.config.module = urlParams.module; + QUnit.config.moduleId = [].concat(urlParams.moduleId || []); + QUnit.config.testId = [].concat(urlParams.testId || []); + if (urlParams.seed === true) { + QUnit.config.seed = Math.random().toString(36).slice(2); + } + else if (urlParams.seed) { + QUnit.config.seed = urlParams.seed; + } + QUnit.config.urlConfig.push({ + id: 'hidepassed', + label: 'Hide passed tests', + tooltip: 'Only show tests and assertions that fail. Stored as query-strings.' + }, { + id: 'noglobals', + label: 'Check for Globals', + tooltip: 'Enabling this will test if any test introduces new properties on the ' + 'global object (`window` in Browsers). Stored as query-strings.' + }, { + id: 'notrycatch', + label: 'No try-catch', + tooltip: 'Enabling this will run tests outside of a try-catch block. Makes debugging ' + 'exceptions in IE reasonable. Stored as query-strings.' + }); + QUnit.begin(function () { + var urlConfig = QUnit.config.urlConfig; + for (var i = 0; i < urlConfig.length; i++) { + var option = QUnit.config.urlConfig[i]; + if (typeof option !== 'string') { + option = option.id; + } + if (QUnit.config[option] === undefined) { + QUnit.config[option] = urlParams[option]; + } + } + }); + function getUrlParams() { + var urlParams = Object.create(null); + var params = location.search.slice(1).split('&'); + var length = params.length; + for (var i = 0; i < length; i++) { + if (params[i]) { + var param = params[i].split('='); + var name = decodeQueryParam(param[0]); + var value = param.length === 1 || decodeQueryParam(param.slice(1).join('=')); + if (name in urlParams) { + urlParams[name] = [].concat(urlParams[name], value); + } + else { + urlParams[name] = value; + } + } + } + return urlParams; + } + function decodeQueryParam(param) { + return decodeURIComponent(param.replace(/\+/g, '%20')); + } + })(); + var fuzzysort$1 = { exports: {} }; + (function (module) { + (function (root, UMD) { + if (module.exports) + module.exports = UMD(); + else + root.fuzzysort = UMD(); + })(commonjsGlobal, function UMD() { + function fuzzysortNew(instanceOptions) { + var fuzzysort = { + single: function single(search, target, options) { + if (search == 'farzher') + return { + target: "farzher was here (^-^*)/", + score: 0, + indexes: [0, 1, 2, 3, 4, 5, 6] + }; + if (!search) + return null; + if (!isObj(search)) + search = fuzzysort.getPreparedSearch(search); + if (!target) + return null; + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + var allowTypo = options && options.allowTypo !== undefined ? options.allowTypo : instanceOptions && instanceOptions.allowTypo !== undefined ? instanceOptions.allowTypo : true; + var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo; + return algorithm(search, target, search[0]); + }, + go: function go(search, targets, options) { + if (search == 'farzher') + return [{ + target: "farzher was here (^-^*)/", + score: 0, + indexes: [0, 1, 2, 3, 4, 5, 6], + obj: targets ? targets[0] : null + }]; + if (!search) + return noResults; + search = fuzzysort.prepareSearch(search); + var searchLowerCode = search[0]; + var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991; + var limit = options && options.limit || instanceOptions && instanceOptions.limit || 9007199254740991; + var allowTypo = options && options.allowTypo !== undefined ? options.allowTypo : instanceOptions && instanceOptions.allowTypo !== undefined ? instanceOptions.allowTypo : true; + var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo; + var resultsLen = 0; + var limitedCount = 0; + var targetsLen = targets.length; + if (options && options.keys) { + var scoreFn = options.scoreFn || defaultScoreFn; + var keys = options.keys; + var keysLen = keys.length; + for (var i = targetsLen - 1; i >= 0; --i) { + var obj = targets[i]; + var objResults = new Array(keysLen); + for (var keyI = keysLen - 1; keyI >= 0; --keyI) { + var key = keys[keyI]; + var target = getValue(obj, key); + if (!target) { + objResults[keyI] = null; + continue; + } + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + objResults[keyI] = algorithm(search, target, searchLowerCode); + } + objResults.obj = obj; + var score = scoreFn(objResults); + if (score === null) + continue; + if (score < threshold) + continue; + objResults.score = score; + if (resultsLen < limit) { + q.add(objResults); + ++resultsLen; + } + else { + ++limitedCount; + if (score > q.peek().score) + q.replaceTop(objResults); + } + } + } + else if (options && options.key) { + var key = options.key; + for (var i = targetsLen - 1; i >= 0; --i) { + var obj = targets[i]; + var target = getValue(obj, key); + if (!target) + continue; + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + var result = algorithm(search, target, searchLowerCode); + if (result === null) + continue; + if (result.score < threshold) + continue; + result = { + target: result.target, + _targetLowerCodes: null, + _nextBeginningIndexes: null, + score: result.score, + indexes: result.indexes, + obj: obj + }; + if (resultsLen < limit) { + q.add(result); + ++resultsLen; + } + else { + ++limitedCount; + if (result.score > q.peek().score) + q.replaceTop(result); + } + } + } + else { + for (var i = targetsLen - 1; i >= 0; --i) { + var target = targets[i]; + if (!target) + continue; + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + var result = algorithm(search, target, searchLowerCode); + if (result === null) + continue; + if (result.score < threshold) + continue; + if (resultsLen < limit) { + q.add(result); + ++resultsLen; + } + else { + ++limitedCount; + if (result.score > q.peek().score) + q.replaceTop(result); + } + } + } + if (resultsLen === 0) + return noResults; + var results = new Array(resultsLen); + for (var i = resultsLen - 1; i >= 0; --i) { + results[i] = q.poll(); + } + results.total = resultsLen + limitedCount; + return results; + }, + goAsync: function goAsync(search, targets, options) { + var canceled = false; + var p = new Promise(function (resolve, reject) { + if (search == 'farzher') + return resolve([{ + target: "farzher was here (^-^*)/", + score: 0, + indexes: [0, 1, 2, 3, 4, 5, 6], + obj: targets ? targets[0] : null + }]); + if (!search) + return resolve(noResults); + search = fuzzysort.prepareSearch(search); + var searchLowerCode = search[0]; + var q = fastpriorityqueue(); + var iCurrent = targets.length - 1; + var threshold = options && options.threshold || instanceOptions && instanceOptions.threshold || -9007199254740991; + var limit = options && options.limit || instanceOptions && instanceOptions.limit || 9007199254740991; + var allowTypo = options && options.allowTypo !== undefined ? options.allowTypo : instanceOptions && instanceOptions.allowTypo !== undefined ? instanceOptions.allowTypo : true; + var algorithm = allowTypo ? fuzzysort.algorithm : fuzzysort.algorithmNoTypo; + var resultsLen = 0; + var limitedCount = 0; + function step() { + if (canceled) + return reject('canceled'); + var startMs = Date.now(); + if (options && options.keys) { + var scoreFn = options.scoreFn || defaultScoreFn; + var keys = options.keys; + var keysLen = keys.length; + for (; iCurrent >= 0; --iCurrent) { + if (iCurrent % 1000 === 0) { + if (Date.now() - startMs >= 10) { + isNode ? setImmediate(step) : setTimeout(step); + return; + } + } + var obj = targets[iCurrent]; + var objResults = new Array(keysLen); + for (var keyI = keysLen - 1; keyI >= 0; --keyI) { + var key = keys[keyI]; + var target = getValue(obj, key); + if (!target) { + objResults[keyI] = null; + continue; + } + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + objResults[keyI] = algorithm(search, target, searchLowerCode); + } + objResults.obj = obj; + var score = scoreFn(objResults); + if (score === null) + continue; + if (score < threshold) + continue; + objResults.score = score; + if (resultsLen < limit) { + q.add(objResults); + ++resultsLen; + } + else { + ++limitedCount; + if (score > q.peek().score) + q.replaceTop(objResults); + } + } + } + else if (options && options.key) { + var key = options.key; + for (; iCurrent >= 0; --iCurrent) { + if (iCurrent % 1000 === 0) { + if (Date.now() - startMs >= 10) { + isNode ? setImmediate(step) : setTimeout(step); + return; + } + } + var obj = targets[iCurrent]; + var target = getValue(obj, key); + if (!target) + continue; + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + var result = algorithm(search, target, searchLowerCode); + if (result === null) + continue; + if (result.score < threshold) + continue; + result = { + target: result.target, + _targetLowerCodes: null, + _nextBeginningIndexes: null, + score: result.score, + indexes: result.indexes, + obj: obj + }; + if (resultsLen < limit) { + q.add(result); + ++resultsLen; + } + else { + ++limitedCount; + if (result.score > q.peek().score) + q.replaceTop(result); + } + } + } + else { + for (; iCurrent >= 0; --iCurrent) { + if (iCurrent % 1000 === 0) { + if (Date.now() - startMs >= 10) { + isNode ? setImmediate(step) : setTimeout(step); + return; + } + } + var target = targets[iCurrent]; + if (!target) + continue; + if (!isObj(target)) + target = fuzzysort.getPrepared(target); + var result = algorithm(search, target, searchLowerCode); + if (result === null) + continue; + if (result.score < threshold) + continue; + if (resultsLen < limit) { + q.add(result); + ++resultsLen; + } + else { + ++limitedCount; + if (result.score > q.peek().score) + q.replaceTop(result); + } + } + } + if (resultsLen === 0) + return resolve(noResults); + var results = new Array(resultsLen); + for (var i = resultsLen - 1; i >= 0; --i) { + results[i] = q.poll(); + } + results.total = resultsLen + limitedCount; + resolve(results); + } + isNode ? setImmediate(step) : step(); + }); + p.cancel = function () { + canceled = true; + }; + return p; + }, + highlight: function highlight(result, hOpen, hClose) { + if (typeof hOpen == 'function') + return fuzzysort.highlightCallback(result, hOpen); + if (result === null) + return null; + if (hOpen === undefined) + hOpen = ''; + if (hClose === undefined) + hClose = ''; + var highlighted = ''; + var matchesIndex = 0; + var opened = false; + var target = result.target; + var targetLen = target.length; + var matchesBest = result.indexes; + for (var i = 0; i < targetLen; ++i) { + var char = target[i]; + if (matchesBest[matchesIndex] === i) { + ++matchesIndex; + if (!opened) { + opened = true; + highlighted += hOpen; + } + if (matchesIndex === matchesBest.length) { + highlighted += char + hClose + target.substr(i + 1); + break; + } + } + else { + if (opened) { + opened = false; + highlighted += hClose; + } + } + highlighted += char; + } + return highlighted; + }, + highlightCallback: function highlightCallback(result, cb) { + if (result === null) + return null; + var target = result.target; + var targetLen = target.length; + var indexes = result.indexes; + var highlighted = ''; + var matchI = 0; + var indexesI = 0; + var opened = false; + var result = []; + for (var i = 0; i < targetLen; ++i) { + var char = target[i]; + if (indexes[indexesI] === i) { + ++indexesI; + if (!opened) { + opened = true; + result.push(highlighted); + highlighted = ''; + } + if (indexesI === indexes.length) { + highlighted += char; + result.push(cb(highlighted, matchI++)); + highlighted = ''; + result.push(target.substr(i + 1)); + break; + } + } + else { + if (opened) { + opened = false; + result.push(cb(highlighted, matchI++)); + highlighted = ''; + } + } + highlighted += char; + } + return result; + }, + prepare: function prepare(target) { + if (!target) + return { + target: '', + _targetLowerCodes: [0], + _nextBeginningIndexes: null, + score: null, + indexes: null, + obj: null + }; + return { + target: target, + _targetLowerCodes: fuzzysort.prepareLowerCodes(target), + _nextBeginningIndexes: null, + score: null, + indexes: null, + obj: null + }; + }, + prepareSlow: function prepareSlow(target) { + if (!target) + return { + target: '', + _targetLowerCodes: [0], + _nextBeginningIndexes: null, + score: null, + indexes: null, + obj: null + }; + return { + target: target, + _targetLowerCodes: fuzzysort.prepareLowerCodes(target), + _nextBeginningIndexes: fuzzysort.prepareNextBeginningIndexes(target), + score: null, + indexes: null, + obj: null + }; + }, + prepareSearch: function prepareSearch(search) { + if (!search) + search = ''; + return fuzzysort.prepareLowerCodes(search); + }, + getPrepared: function getPrepared(target) { + if (target.length > 999) + return fuzzysort.prepare(target); + var targetPrepared = preparedCache.get(target); + if (targetPrepared !== undefined) + return targetPrepared; + targetPrepared = fuzzysort.prepare(target); + preparedCache.set(target, targetPrepared); + return targetPrepared; + }, + getPreparedSearch: function getPreparedSearch(search) { + if (search.length > 999) + return fuzzysort.prepareSearch(search); + var searchPrepared = preparedSearchCache.get(search); + if (searchPrepared !== undefined) + return searchPrepared; + searchPrepared = fuzzysort.prepareSearch(search); + preparedSearchCache.set(search, searchPrepared); + return searchPrepared; + }, + algorithm: function algorithm(searchLowerCodes, prepared, searchLowerCode) { + var targetLowerCodes = prepared._targetLowerCodes; + var searchLen = searchLowerCodes.length; + var targetLen = targetLowerCodes.length; + var searchI = 0; + var targetI = 0; + var typoSimpleI = 0; + var matchesSimpleLen = 0; + for (;;) { + var isMatch = searchLowerCode === targetLowerCodes[targetI]; + if (isMatch) { + matchesSimple[matchesSimpleLen++] = targetI; + ++searchI; + if (searchI === searchLen) + break; + searchLowerCode = searchLowerCodes[typoSimpleI === 0 ? searchI : typoSimpleI === searchI ? searchI + 1 : typoSimpleI === searchI - 1 ? searchI - 1 : searchI]; + } + ++targetI; + if (targetI >= targetLen) { + for (;;) { + if (searchI <= 1) + return null; + if (typoSimpleI === 0) { + --searchI; + var searchLowerCodeNew = searchLowerCodes[searchI]; + if (searchLowerCode === searchLowerCodeNew) + continue; + typoSimpleI = searchI; + } + else { + if (typoSimpleI === 1) + return null; + --typoSimpleI; + searchI = typoSimpleI; + searchLowerCode = searchLowerCodes[searchI + 1]; + var searchLowerCodeNew = searchLowerCodes[searchI]; + if (searchLowerCode === searchLowerCodeNew) + continue; + } + matchesSimpleLen = searchI; + targetI = matchesSimple[matchesSimpleLen - 1] + 1; + break; + } + } + } + var searchI = 0; + var typoStrictI = 0; + var successStrict = false; + var matchesStrictLen = 0; + var nextBeginningIndexes = prepared._nextBeginningIndexes; + if (nextBeginningIndexes === null) + nextBeginningIndexes = prepared._nextBeginningIndexes = fuzzysort.prepareNextBeginningIndexes(prepared.target); + var firstPossibleI = targetI = matchesSimple[0] === 0 ? 0 : nextBeginningIndexes[matchesSimple[0] - 1]; + if (targetI !== targetLen) + for (;;) { + if (targetI >= targetLen) { + if (searchI <= 0) { + ++typoStrictI; + if (typoStrictI > searchLen - 2) + break; + if (searchLowerCodes[typoStrictI] === searchLowerCodes[typoStrictI + 1]) + continue; + targetI = firstPossibleI; + continue; + } + --searchI; + var lastMatch = matchesStrict[--matchesStrictLen]; + targetI = nextBeginningIndexes[lastMatch]; + } + else { + var isMatch = searchLowerCodes[typoStrictI === 0 ? searchI : typoStrictI === searchI ? searchI + 1 : typoStrictI === searchI - 1 ? searchI - 1 : searchI] === targetLowerCodes[targetI]; + if (isMatch) { + matchesStrict[matchesStrictLen++] = targetI; + ++searchI; + if (searchI === searchLen) { + successStrict = true; + break; + } + ++targetI; + } + else { + targetI = nextBeginningIndexes[targetI]; + } + } + } + { + if (successStrict) { + var matchesBest = matchesStrict; + var matchesBestLen = matchesStrictLen; + } + else { + var matchesBest = matchesSimple; + var matchesBestLen = matchesSimpleLen; + } + var score = 0; + var lastTargetI = -1; + for (var i = 0; i < searchLen; ++i) { + var targetI = matchesBest[i]; + if (lastTargetI !== targetI - 1) + score -= targetI; + lastTargetI = targetI; + } + if (!successStrict) { + score *= 1000; + if (typoSimpleI !== 0) + score += -20; + } + else { + if (typoStrictI !== 0) + score += -20; + } + score -= targetLen - searchLen; + prepared.score = score; + prepared.indexes = new Array(matchesBestLen); + for (var i = matchesBestLen - 1; i >= 0; --i) { + prepared.indexes[i] = matchesBest[i]; + } + return prepared; + } + }, + algorithmNoTypo: function algorithmNoTypo(searchLowerCodes, prepared, searchLowerCode) { + var targetLowerCodes = prepared._targetLowerCodes; + var searchLen = searchLowerCodes.length; + var targetLen = targetLowerCodes.length; + var searchI = 0; + var targetI = 0; + var matchesSimpleLen = 0; + for (;;) { + var isMatch = searchLowerCode === targetLowerCodes[targetI]; + if (isMatch) { + matchesSimple[matchesSimpleLen++] = targetI; + ++searchI; + if (searchI === searchLen) + break; + searchLowerCode = searchLowerCodes[searchI]; + } + ++targetI; + if (targetI >= targetLen) + return null; + } + var searchI = 0; + var successStrict = false; + var matchesStrictLen = 0; + var nextBeginningIndexes = prepared._nextBeginningIndexes; + if (nextBeginningIndexes === null) + nextBeginningIndexes = prepared._nextBeginningIndexes = fuzzysort.prepareNextBeginningIndexes(prepared.target); + targetI = matchesSimple[0] === 0 ? 0 : nextBeginningIndexes[matchesSimple[0] - 1]; + if (targetI !== targetLen) + for (;;) { + if (targetI >= targetLen) { + if (searchI <= 0) + break; + --searchI; + var lastMatch = matchesStrict[--matchesStrictLen]; + targetI = nextBeginningIndexes[lastMatch]; + } + else { + var isMatch = searchLowerCodes[searchI] === targetLowerCodes[targetI]; + if (isMatch) { + matchesStrict[matchesStrictLen++] = targetI; + ++searchI; + if (searchI === searchLen) { + successStrict = true; + break; + } + ++targetI; + } + else { + targetI = nextBeginningIndexes[targetI]; + } + } + } + { + if (successStrict) { + var matchesBest = matchesStrict; + var matchesBestLen = matchesStrictLen; + } + else { + var matchesBest = matchesSimple; + var matchesBestLen = matchesSimpleLen; + } + var score = 0; + var lastTargetI = -1; + for (var i = 0; i < searchLen; ++i) { + var targetI = matchesBest[i]; + if (lastTargetI !== targetI - 1) + score -= targetI; + lastTargetI = targetI; + } + if (!successStrict) + score *= 1000; + score -= targetLen - searchLen; + prepared.score = score; + prepared.indexes = new Array(matchesBestLen); + for (var i = matchesBestLen - 1; i >= 0; --i) { + prepared.indexes[i] = matchesBest[i]; + } + return prepared; + } + }, + prepareLowerCodes: function prepareLowerCodes(str) { + var strLen = str.length; + var lowerCodes = []; + var lower = str.toLowerCase(); + for (var i = 0; i < strLen; ++i) { + lowerCodes[i] = lower.charCodeAt(i); + } + return lowerCodes; + }, + prepareBeginningIndexes: function prepareBeginningIndexes(target) { + var targetLen = target.length; + var beginningIndexes = []; + var beginningIndexesLen = 0; + var wasUpper = false; + var wasAlphanum = false; + for (var i = 0; i < targetLen; ++i) { + var targetCode = target.charCodeAt(i); + var isUpper = targetCode >= 65 && targetCode <= 90; + var isAlphanum = isUpper || targetCode >= 97 && targetCode <= 122 || targetCode >= 48 && targetCode <= 57; + var isBeginning = isUpper && !wasUpper || !wasAlphanum || !isAlphanum; + wasUpper = isUpper; + wasAlphanum = isAlphanum; + if (isBeginning) + beginningIndexes[beginningIndexesLen++] = i; + } + return beginningIndexes; + }, + prepareNextBeginningIndexes: function prepareNextBeginningIndexes(target) { + var targetLen = target.length; + var beginningIndexes = fuzzysort.prepareBeginningIndexes(target); + var nextBeginningIndexes = []; + var lastIsBeginning = beginningIndexes[0]; + var lastIsBeginningI = 0; + for (var i = 0; i < targetLen; ++i) { + if (lastIsBeginning > i) { + nextBeginningIndexes[i] = lastIsBeginning; + } + else { + lastIsBeginning = beginningIndexes[++lastIsBeginningI]; + nextBeginningIndexes[i] = lastIsBeginning === undefined ? targetLen : lastIsBeginning; + } + } + return nextBeginningIndexes; + }, + cleanup: cleanup, + new: fuzzysortNew + }; + return fuzzysort; + } + var isNode = typeof commonjsRequire !== 'undefined' && typeof window === 'undefined'; + var MyMap = typeof Map === 'function' ? Map : function () { + var s = Object.create(null); + this.get = function (k) { + return s[k]; + }; + this.set = function (k, val) { + s[k] = val; + return this; + }; + this.clear = function () { + s = Object.create(null); + }; + }; + var preparedCache = new MyMap(); + var preparedSearchCache = new MyMap(); + var noResults = []; + noResults.total = 0; + var matchesSimple = []; + var matchesStrict = []; + function cleanup() { + preparedCache.clear(); + preparedSearchCache.clear(); + matchesSimple = []; + matchesStrict = []; + } + function defaultScoreFn(a) { + var max = -9007199254740991; + for (var i = a.length - 1; i >= 0; --i) { + var result = a[i]; + if (result === null) + continue; + var score = result.score; + if (score > max) + max = score; + } + if (max === -9007199254740991) + return null; + return max; + } + function getValue(obj, prop) { + var tmp = obj[prop]; + if (tmp !== undefined) + return tmp; + var segs = prop; + if (!Array.isArray(prop)) + segs = prop.split('.'); + var len = segs.length; + var i = -1; + while (obj && ++i < len) { + obj = obj[segs[i]]; + } + return obj; + } + function isObj(x) { + return _typeof(x) === 'object'; + } + var fastpriorityqueue = function fastpriorityqueue() { + var r = [], o = 0, e = {}; + function n() { + for (var e = 0, n = r[e], c = 1; c < o;) { + var f = c + 1; + e = c, f < o && r[f].score < r[c].score && (e = f), r[e - 1 >> 1] = r[e], c = 1 + (e << 1); + } + for (var a = e - 1 >> 1; e > 0 && n.score < r[a].score; a = (e = a) - 1 >> 1) { + r[e] = r[a]; + } + r[e] = n; + } + return e.add = function (e) { + var n = o; + r[o++] = e; + for (var c = n - 1 >> 1; n > 0 && e.score < r[c].score; c = (n = c) - 1 >> 1) { + r[n] = r[c]; + } + r[n] = e; + }, e.poll = function () { + if (0 !== o) { + var e = r[0]; + return r[0] = r[--o], n(), e; + } + }, e.peek = function (e) { + if (0 !== o) + return r[0]; + }, e.replaceTop = function (o) { + r[0] = o, n(); + }, e; + }; + var q = fastpriorityqueue(); + return fuzzysortNew(); + }); + })(fuzzysort$1); + var fuzzysort = fuzzysort$1.exports; + var stats = { + failedTests: [], + defined: 0, + completed: 0 + }; + function escapeText(str) { + if (!str) { + return ''; + } + return ('' + str).replace(/['"<>&]/g, function (s) { + switch (s) { + case "'": + return '''; + case '"': + return '"'; + case '<': + return '<'; + case '>': + return '>'; + case '&': + return '&'; + } + }); + } + (function () { + if (!window$1 || !document) { + return; + } + var config = QUnit.config; + var hiddenTests = []; + var collapseNext = false; + var hasOwn = Object.prototype.hasOwnProperty; + var unfilteredUrl = setUrl({ + filter: undefined, + module: undefined, + moduleId: undefined, + testId: undefined + }); + var dropdownData = null; + function trim(string) { + if (typeof string.trim === 'function') { + return string.trim(); + } + else { + return string.replace(/^\s+|\s+$/g, ''); + } + } + function addEvent(elem, type, fn) { + elem.addEventListener(type, fn, false); + } + function removeEvent(elem, type, fn) { + elem.removeEventListener(type, fn, false); + } + function addEvents(elems, type, fn) { + var i = elems.length; + while (i--) { + addEvent(elems[i], type, fn); + } + } + function hasClass(elem, name) { + return (' ' + elem.className + ' ').indexOf(' ' + name + ' ') >= 0; + } + function addClass(elem, name) { + if (!hasClass(elem, name)) { + elem.className += (elem.className ? ' ' : '') + name; + } + } + function toggleClass(elem, name, force) { + if (force || typeof force === 'undefined' && !hasClass(elem, name)) { + addClass(elem, name); + } + else { + removeClass(elem, name); + } + } + function removeClass(elem, name) { + var set = ' ' + elem.className + ' '; + while (set.indexOf(' ' + name + ' ') >= 0) { + set = set.replace(' ' + name + ' ', ' '); + } + elem.className = trim(set); + } + function id(name) { + return document.getElementById && document.getElementById(name); + } + function abortTests() { + var abortButton = id('qunit-abort-tests-button'); + if (abortButton) { + abortButton.disabled = true; + abortButton.innerHTML = 'Aborting...'; + } + QUnit.config.queue.length = 0; + return false; + } + function interceptNavigation(ev) { + var filterInputElem = id('qunit-filter-input'); + filterInputElem.value = trim(filterInputElem.value); + applyUrlParams(); + if (ev && ev.preventDefault) { + ev.preventDefault(); + } + return false; + } + function getUrlConfigHtml() { + var selection = false; + var urlConfig = config.urlConfig; + var urlConfigHtml = ''; + for (var i = 0; i < urlConfig.length; i++) { + var val = config.urlConfig[i]; + if (typeof val === 'string') { + val = { + id: val, + label: val + }; + } + var escaped = escapeText(val.id); + var escapedTooltip = escapeText(val.tooltip); + if (!val.value || typeof val.value === 'string') { + urlConfigHtml += "'; + } + else { + urlConfigHtml += "'; + } + } + return urlConfigHtml; + } + function toolbarChanged() { + var field = this; + var params = {}; + var value; + if ('selectedIndex' in field) { + value = field.options[field.selectedIndex].value || undefined; + } + else { + value = field.checked ? field.defaultValue || true : undefined; + } + params[field.name] = value; + var updatedUrl = setUrl(params); + if (field.name === 'hidepassed' && 'replaceState' in window$1.history) { + QUnit.urlParams[field.name] = value; + config[field.name] = value || false; + var tests = id('qunit-tests'); + if (tests) { + var length = tests.children.length; + var children = tests.children; + if (field.checked) { + for (var i = 0; i < length; i++) { + var test = children[i]; + var className = test ? test.className : ''; + var classNameHasPass = className.indexOf('pass') > -1; + var classNameHasSkipped = className.indexOf('skipped') > -1; + if (classNameHasPass || classNameHasSkipped) { + hiddenTests.push(test); + } + } + var _iterator = _createForOfIteratorHelper(hiddenTests), _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var hiddenTest = _step.value; + tests.removeChild(hiddenTest); + } + } + catch (err) { + _iterator.e(err); + } + finally { + _iterator.f(); + } + } + else { + var _test; + while ((_test = hiddenTests.pop()) != null) { + tests.appendChild(_test); + } + } + } + window$1.history.replaceState(null, '', updatedUrl); + } + else { + window$1.location = updatedUrl; + } + } + function setUrl(params) { + var querystring = '?'; + var location = window$1.location; + params = extend(extend({}, QUnit.urlParams), params); + for (var key in params) { + if (hasOwn.call(params, key) && params[key] !== undefined) { + var arrValue = [].concat(params[key]); + for (var i = 0; i < arrValue.length; i++) { + querystring += encodeURIComponent(key); + if (arrValue[i] !== true) { + querystring += '=' + encodeURIComponent(arrValue[i]); + } + querystring += '&'; + } + } + } + return location.protocol + '//' + location.host + location.pathname + querystring.slice(0, -1); + } + function applyUrlParams() { + var filter = id('qunit-filter-input').value; + window$1.location = setUrl({ + filter: filter === '' ? undefined : filter, + moduleId: _toConsumableArray(dropdownData.selectedMap.keys()), + module: undefined, + testId: undefined + }); + } + function toolbarUrlConfigContainer() { + var urlConfigContainer = document.createElement('span'); + urlConfigContainer.innerHTML = getUrlConfigHtml(); + addClass(urlConfigContainer, 'qunit-url-config'); + addEvents(urlConfigContainer.getElementsByTagName('input'), 'change', toolbarChanged); + addEvents(urlConfigContainer.getElementsByTagName('select'), 'change', toolbarChanged); + return urlConfigContainer; + } + function abortTestsButton() { + var button = document.createElement('button'); + button.id = 'qunit-abort-tests-button'; + button.innerHTML = 'Abort'; + addEvent(button, 'click', abortTests); + return button; + } + function toolbarLooseFilter() { + var filter = document.createElement('form'); + var label = document.createElement('label'); + var input = document.createElement('input'); + var button = document.createElement('button'); + addClass(filter, 'qunit-filter'); + label.innerHTML = 'Filter: '; + input.type = 'text'; + input.value = config.filter || ''; + input.name = 'filter'; + input.id = 'qunit-filter-input'; + button.innerHTML = 'Go'; + label.appendChild(input); + filter.appendChild(label); + filter.appendChild(document.createTextNode(' ')); + filter.appendChild(button); + addEvent(filter, 'submit', interceptNavigation); + return filter; + } + function createModuleListItem(moduleId, name, checked) { + return '
  • '; + } + function moduleListHtml(results) { + var html = ''; + dropdownData.selectedMap.forEach(function (name, moduleId) { + html += createModuleListItem(moduleId, name, true); + }); + for (var i = 0; i < results.length; i++) { + var mod = results[i].obj; + if (!dropdownData.selectedMap.has(mod.moduleId)) { + html += createModuleListItem(mod.moduleId, mod.name, false); + } + } + return html; + } + function toolbarModuleFilter(beginDetails) { + var initialSelected = null; + dropdownData = { + options: beginDetails.modules.slice(), + selectedMap: new StringMap(), + isDirty: function isDirty() { + return _toConsumableArray(dropdownData.selectedMap.keys()).sort().join(',') !== _toConsumableArray(initialSelected.keys()).sort().join(','); + } + }; + if (config.moduleId.length) { + for (var i = 0; i < beginDetails.modules.length; i++) { + var mod = beginDetails.modules[i]; + if (config.moduleId.indexOf(mod.moduleId) !== -1) { + dropdownData.selectedMap.set(mod.moduleId, mod.name); + } + } + } + initialSelected = new StringMap(dropdownData.selectedMap); + var moduleSearch = document.createElement('input'); + moduleSearch.id = 'qunit-modulefilter-search'; + moduleSearch.autocomplete = 'off'; + addEvent(moduleSearch, 'input', searchInput); + addEvent(moduleSearch, 'input', searchFocus); + addEvent(moduleSearch, 'focus', searchFocus); + addEvent(moduleSearch, 'click', searchFocus); + var label = document.createElement('label'); + label.htmlFor = 'qunit-modulefilter-search'; + label.textContent = 'Module:'; + var searchContainer = document.createElement('span'); + searchContainer.id = 'qunit-modulefilter-search-container'; + searchContainer.appendChild(moduleSearch); + var applyButton = document.createElement('button'); + applyButton.textContent = 'Apply'; + applyButton.title = 'Re-run the selected test modules'; + addEvent(applyButton, 'click', applyUrlParams); + var resetButton = document.createElement('button'); + resetButton.textContent = 'Reset'; + resetButton.type = 'reset'; + resetButton.title = 'Restore the previous module selection'; + var clearButton = document.createElement('button'); + clearButton.textContent = 'Select none'; + clearButton.type = 'button'; + clearButton.title = 'Clear the current module selection'; + addEvent(clearButton, 'click', function () { + dropdownData.selectedMap.clear(); + selectionChange(); + searchInput(); + }); + var actions = document.createElement('span'); + actions.id = 'qunit-modulefilter-actions'; + actions.appendChild(applyButton); + actions.appendChild(resetButton); + if (initialSelected.size) { + actions.appendChild(clearButton); + } + var dropDownList = document.createElement('ul'); + dropDownList.id = 'qunit-modulefilter-dropdown-list'; + var dropDown = document.createElement('div'); + dropDown.id = 'qunit-modulefilter-dropdown'; + dropDown.style.display = 'none'; + dropDown.appendChild(actions); + dropDown.appendChild(dropDownList); + addEvent(dropDown, 'change', selectionChange); + searchContainer.appendChild(dropDown); + selectionChange(); + var moduleFilter = document.createElement('form'); + moduleFilter.id = 'qunit-modulefilter'; + moduleFilter.appendChild(label); + moduleFilter.appendChild(document.createTextNode(' ')); + moduleFilter.appendChild(searchContainer); + addEvent(moduleFilter, 'submit', interceptNavigation); + addEvent(moduleFilter, 'reset', function () { + dropdownData.selectedMap = new StringMap(initialSelected); + selectionChange(); + searchInput(); + }); + function searchFocus() { + if (dropDown.style.display !== 'none') { + return; + } + searchInput(); + dropDown.style.display = 'block'; + addEvent(document, 'click', hideHandler); + addEvent(document, 'keydown', hideHandler); + function hideHandler(e) { + var inContainer = moduleFilter.contains(e.target); + if (e.keyCode === 27 || !inContainer) { + if (e.keyCode === 27 && inContainer) { + moduleSearch.focus(); + } + dropDown.style.display = 'none'; + removeEvent(document, 'click', hideHandler); + removeEvent(document, 'keydown', hideHandler); + moduleSearch.value = ''; + searchInput(); + } + } + } + function filterModules(searchText) { + var results; + if (searchText === '') { + results = dropdownData.options.map(function (obj) { + return { + obj: obj + }; + }); + } + else { + results = fuzzysort.go(searchText, dropdownData.options, { + limit: 1000, + key: 'name', + allowTypo: true + }); + } + return moduleListHtml(results); + } + var searchInputTimeout; + function searchInput() { + window$1.clearTimeout(searchInputTimeout); + searchInputTimeout = window$1.setTimeout(function () { + dropDownList.innerHTML = filterModules(moduleSearch.value); + }); + } + function selectionChange(evt) { + var checkbox = evt && evt.target || null; + if (checkbox) { + if (checkbox.checked) { + dropdownData.selectedMap.set(checkbox.value, checkbox.parentNode.textContent); + } + else { + dropdownData.selectedMap.delete(checkbox.value); + } + toggleClass(checkbox.parentNode, 'checked', checkbox.checked); + } + var textForm = dropdownData.selectedMap.size ? dropdownData.selectedMap.size + ' ' + (dropdownData.selectedMap.size === 1 ? 'module' : 'modules') : 'All modules'; + moduleSearch.placeholder = textForm; + moduleSearch.title = 'Type to search through and reduce the list.'; + resetButton.disabled = !dropdownData.isDirty(); + clearButton.style.display = dropdownData.selectedMap.size ? '' : 'none'; + } + return moduleFilter; + } + function appendToolbar(beginDetails) { + var toolbar = id('qunit-testrunner-toolbar'); + if (toolbar) { + toolbar.appendChild(toolbarUrlConfigContainer()); + var toolbarFilters = document.createElement('span'); + toolbarFilters.id = 'qunit-toolbar-filters'; + toolbarFilters.appendChild(toolbarLooseFilter()); + toolbarFilters.appendChild(toolbarModuleFilter(beginDetails)); + var clearfix = document.createElement('div'); + clearfix.className = 'clearfix'; + toolbar.appendChild(toolbarFilters); + toolbar.appendChild(clearfix); + } + } + function appendHeader() { + var header = id('qunit-header'); + if (header) { + header.innerHTML = "" + header.innerHTML + ' '; + } + } + function appendBanner() { + var banner = id('qunit-banner'); + if (banner) { + banner.className = ''; + } + } + function appendTestResults() { + var tests = id('qunit-tests'); + var result = id('qunit-testresult'); + var controls; + if (result) { + result.parentNode.removeChild(result); + } + if (tests) { + tests.innerHTML = ''; + result = document.createElement('p'); + result.id = 'qunit-testresult'; + result.className = 'result'; + tests.parentNode.insertBefore(result, tests); + result.innerHTML = '
    Running...
     
    ' + '
    ' + '
    '; + controls = id('qunit-testresult-controls'); + } + if (controls) { + controls.appendChild(abortTestsButton()); + } + } + function appendFilteredTest() { + var testId = QUnit.config.testId; + if (!testId || testId.length <= 0) { + return ''; + } + return "
    Rerunning selected tests: " + escapeText(testId.join(', ')) + " Run all tests
    "; + } + function appendUserAgent() { + var userAgent = id('qunit-userAgent'); + if (userAgent) { + userAgent.innerHTML = ''; + userAgent.appendChild(document.createTextNode('QUnit ' + QUnit.version + '; ' + navigator.userAgent)); + } + } + function appendInterface(beginDetails) { + var qunit = id('qunit'); + if (qunit) { + qunit.setAttribute('role', 'main'); + qunit.innerHTML = "

    " + escapeText(document.title) + '

    ' + "

    " + "" + appendFilteredTest() + "

    " + "
      "; + } + appendHeader(); + appendBanner(); + appendTestResults(); + appendUserAgent(); + appendToolbar(beginDetails); + } + function appendTest(name, testId, moduleName) { + var tests = id('qunit-tests'); + if (!tests) { + return; + } + var title = document.createElement('strong'); + title.innerHTML = getNameHtml(name, moduleName); + var testBlock = document.createElement('li'); + testBlock.appendChild(title); + if (testId !== undefined) { + var rerunTrigger = document.createElement('a'); + rerunTrigger.innerHTML = 'Rerun'; + rerunTrigger.href = setUrl({ + testId: testId + }); + testBlock.id = 'qunit-test-output-' + testId; + testBlock.appendChild(rerunTrigger); + } + var assertList = document.createElement('ol'); + assertList.className = 'qunit-assert-list'; + testBlock.appendChild(assertList); + tests.appendChild(testBlock); + return testBlock; + } + QUnit.on('runStart', function (runStart) { + stats.defined = runStart.testCounts.total; + }); + QUnit.begin(function (beginDetails) { + appendInterface(beginDetails); + }); + function getRerunFailedHtml(failedTests) { + if (failedTests.length === 0) { + return ''; + } + var href = setUrl({ + testId: failedTests + }); + return ["
      ", failedTests.length === 1 ? 'Rerun 1 failed test' : 'Rerun ' + failedTests.length + ' failed tests', ''].join(''); + } + QUnit.on('runEnd', function (runEnd) { + var banner = id('qunit-banner'); + var tests = id('qunit-tests'); + var abortButton = id('qunit-abort-tests-button'); + var assertPassed = config.stats.all - config.stats.bad; + var html = [runEnd.testCounts.total, ' tests completed in ', runEnd.runtime, ' milliseconds, with ', runEnd.testCounts.failed, ' failed, ', runEnd.testCounts.skipped, ' skipped, and ', runEnd.testCounts.todo, ' todo.
      ', "", assertPassed, " assertions of ", config.stats.all, " passed, ", config.stats.bad, ' failed.', getRerunFailedHtml(stats.failedTests)].join(''); + var test; + var assertLi; + var assertList; + if (abortButton && abortButton.disabled) { + html = 'Tests aborted after ' + runEnd.runtime + ' milliseconds.'; + for (var i = 0; i < tests.children.length; i++) { + test = tests.children[i]; + if (test.className === '' || test.className === 'running') { + test.className = 'aborted'; + assertList = test.getElementsByTagName('ol')[0]; + assertLi = document.createElement('li'); + assertLi.className = 'fail'; + assertLi.innerHTML = 'Test aborted.'; + assertList.appendChild(assertLi); + } + } + } + if (banner && (!abortButton || abortButton.disabled === false)) { + banner.className = runEnd.status === 'failed' ? 'qunit-fail' : 'qunit-pass'; + } + if (abortButton) { + abortButton.parentNode.removeChild(abortButton); + } + if (tests) { + id('qunit-testresult-display').innerHTML = html; + } + if (config.altertitle && document.title) { + document.title = [runEnd.status === 'failed' ? "\u2716" : "\u2714", document.title.replace(/^[\u2714\u2716] /i, '')].join(' '); + } + if (config.scrolltop && window$1.scrollTo) { + window$1.scrollTo(0, 0); + } + }); + function getNameHtml(name, module) { + var nameHtml = ''; + if (module) { + nameHtml = "" + escapeText(module) + ': '; + } + nameHtml += "" + escapeText(name) + ''; + return nameHtml; + } + function getProgressHtml(stats) { + return [stats.completed, ' / ', stats.defined, ' tests completed.
      '].join(''); + } + QUnit.testStart(function (details) { + var running, bad; + appendTest(details.name, details.testId, details.module); + running = id('qunit-testresult-display'); + if (running) { + addClass(running, 'running'); + bad = QUnit.config.reorder && details.previousFailure; + running.innerHTML = [getProgressHtml(stats), bad ? 'Rerunning previously failed test:
      ' : 'Running: ', getNameHtml(details.name, details.module), getRerunFailedHtml(stats.failedTests)].join(''); + } + }); + function stripHtml(string) { + return string.replace(/<\/?[^>]+(>|$)/g, '').replace(/"/g, '').replace(/\s+/g, ''); + } + QUnit.log(function (details) { + var testItem = id('qunit-test-output-' + details.testId); + if (!testItem) { + return; + } + var message = escapeText(details.message) || (details.result ? 'okay' : 'failed'); + message = "" + message + ''; + message += "@ " + details.runtime + ' ms'; + var expected; + var actual; + var diff; + var showDiff = false; + if (!details.result && hasOwn.call(details, 'expected')) { + if (details.negative) { + expected = 'NOT ' + QUnit.dump.parse(details.expected); + } + else { + expected = QUnit.dump.parse(details.expected); + } + actual = QUnit.dump.parse(details.actual); + message += "'; + if (actual !== expected) { + message += "'; + if (typeof details.actual === 'number' && typeof details.expected === 'number') { + if (!isNaN(details.actual) && !isNaN(details.expected)) { + showDiff = true; + diff = details.actual - details.expected; + diff = (diff > 0 ? '+' : '') + diff; + } + } + else if (typeof details.actual !== 'boolean' && typeof details.expected !== 'boolean') { + diff = QUnit.diff(expected, actual); + showDiff = stripHtml(diff).length !== stripHtml(expected).length + stripHtml(actual).length; + } + if (showDiff) { + message += "'; + } + } + else if (expected.indexOf('[object Array]') !== -1 || expected.indexOf('[object Object]') !== -1) { + message += "'; + } + else { + message += "'; + } + if (details.source) { + message += "'; + } + message += '
      Expected:
      " + escapeText(expected) + '
      Result:
      " + escapeText(actual) + '
      Diff:
      " + diff + '
      Message: " + 'Diff suppressed as the depth of object is more than current max depth (' + QUnit.config.maxDepth + ').

      Hint: Use QUnit.dump.maxDepth to ' + " run with a higher max depth or " + 'Rerun without max depth.

      Message: " + 'Diff suppressed as the expected and actual results have an equivalent' + ' serialization
      Source:
      " + escapeText(details.source) + '
      '; + } + else if (!details.result && details.source) { + message += '' + "' + '
      Source:
      " + escapeText(details.source) + '
      '; + } + var assertList = testItem.getElementsByTagName('ol')[0]; + var assertLi = document.createElement('li'); + assertLi.className = details.result ? 'pass' : 'fail'; + assertLi.innerHTML = message; + assertList.appendChild(assertLi); + }); + QUnit.testDone(function (details) { + var tests = id('qunit-tests'); + var testItem = id('qunit-test-output-' + details.testId); + if (!tests || !testItem) { + return; + } + removeClass(testItem, 'running'); + var status; + if (details.failed > 0) { + status = 'failed'; + } + else if (details.todo) { + status = 'todo'; + } + else { + status = details.skipped ? 'skipped' : 'passed'; + } + var assertList = testItem.getElementsByTagName('ol')[0]; + var good = details.passed; + var bad = details.failed; + var testPassed = details.failed > 0 ? details.todo : !details.todo; + if (testPassed) { + addClass(assertList, 'qunit-collapsed'); + } + else { + stats.failedTests.push(details.testId); + if (config.collapse) { + if (!collapseNext) { + collapseNext = true; + } + else { + addClass(assertList, 'qunit-collapsed'); + } + } + } + var testTitle = testItem.firstChild; + var testCounts = bad ? "" + bad + ', ' + "" + good + ', ' : ''; + testTitle.innerHTML += " (" + testCounts + details.assertions.length + ')'; + stats.completed++; + if (details.skipped) { + testItem.className = 'skipped'; + var skipped = document.createElement('em'); + skipped.className = 'qunit-skipped-label'; + skipped.innerHTML = 'skipped'; + testItem.insertBefore(skipped, testTitle); + } + else { + addEvent(testTitle, 'click', function () { + toggleClass(assertList, 'qunit-collapsed'); + }); + testItem.className = testPassed ? 'pass' : 'fail'; + if (details.todo) { + var todoLabel = document.createElement('em'); + todoLabel.className = 'qunit-todo-label'; + todoLabel.innerHTML = 'todo'; + testItem.className += ' todo'; + testItem.insertBefore(todoLabel, testTitle); + } + var time = document.createElement('span'); + time.className = 'runtime'; + time.innerHTML = details.runtime + ' ms'; + testItem.insertBefore(time, assertList); + } + if (details.source) { + var sourceName = document.createElement('p'); + sourceName.innerHTML = 'Source: ' + escapeText(details.source); + addClass(sourceName, 'qunit-source'); + if (testPassed) { + addClass(sourceName, 'qunit-collapsed'); + } + addEvent(testTitle, 'click', function () { + toggleClass(sourceName, 'qunit-collapsed'); + }); + testItem.appendChild(sourceName); + } + if (config.hidepassed && (status === 'passed' || details.skipped)) { + hiddenTests.push(testItem); + tests.removeChild(testItem); + } + }); + QUnit.on('error', function (error) { + var testItem = appendTest('global failure'); + if (!testItem) { + return; + } + var message = escapeText(errorString(error)); + message = "" + message + ''; + if (error && error.stack) { + message += '' + "' + '
      Source:
      " + escapeText(error.stack) + '
      '; + } + var assertList = testItem.getElementsByTagName('ol')[0]; + var assertLi = document.createElement('li'); + assertLi.className = 'fail'; + assertLi.innerHTML = message; + assertList.appendChild(assertLi); + testItem.className = 'fail'; + }); + var usingPhantom = function (p) { + return p && p.version && p.version.major > 0; + }(window$1.phantom); + if (usingPhantom) { + console$1.warn('Support for PhantomJS is deprecated and will be removed in QUnit 3.0.'); + } + if (!usingPhantom && document.readyState === 'complete') { + QUnit.load(); + } + else { + addEvent(window$1, 'load', QUnit.load); + } + var originalWindowOnError = window$1.onerror; + window$1.onerror = function (message, fileName, lineNumber, columnNumber, errorObj) { + var ret = false; + if (originalWindowOnError) { + for (var _len = arguments.length, args = new Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++) { + args[_key - 5] = arguments[_key]; + } + ret = originalWindowOnError.call.apply(originalWindowOnError, [this, message, fileName, lineNumber, columnNumber, errorObj].concat(args)); + } + if (ret !== true) { + if (config.current && config.current.ignoreGlobalErrors) { + return true; + } + var error = errorObj || new Error(message); + if (!error.stack && fileName && lineNumber) { + error.stack = "".concat(fileName, ":").concat(lineNumber); + } + QUnit.onUncaughtException(error); + } + return ret; + }; + window$1.addEventListener('unhandledrejection', function (event) { + QUnit.onUncaughtException(event.reason); + }); + })(); + QUnit.diff = function () { + function DiffMatchPatch() { } + var DIFF_DELETE = -1; + var DIFF_INSERT = 1; + var DIFF_EQUAL = 0; + var hasOwn = Object.prototype.hasOwnProperty; + DiffMatchPatch.prototype.DiffMain = function (text1, text2, optChecklines) { + var deadline = Date.now() + 1000; + if (text1 === null || text2 === null) { + throw new Error('Cannot diff null input.'); + } + if (text1 === text2) { + if (text1) { + return [[DIFF_EQUAL, text1]]; + } + return []; + } + if (typeof optChecklines === 'undefined') { + optChecklines = true; + } + var commonlength = this.diffCommonPrefix(text1, text2); + var commonprefix = text1.substring(0, commonlength); + text1 = text1.substring(commonlength); + text2 = text2.substring(commonlength); + commonlength = this.diffCommonSuffix(text1, text2); + var commonsuffix = text1.substring(text1.length - commonlength); + text1 = text1.substring(0, text1.length - commonlength); + text2 = text2.substring(0, text2.length - commonlength); + var diffs = this.diffCompute(text1, text2, optChecklines, deadline); + if (commonprefix) { + diffs.unshift([DIFF_EQUAL, commonprefix]); + } + if (commonsuffix) { + diffs.push([DIFF_EQUAL, commonsuffix]); + } + this.diffCleanupMerge(diffs); + return diffs; + }; + DiffMatchPatch.prototype.diffCleanupEfficiency = function (diffs) { + var changes, equalities, equalitiesLength, lastequality, pointer, preIns, preDel, postIns, postDel; + changes = false; + equalities = []; + equalitiesLength = 0; + lastequality = null; + pointer = 0; + preIns = false; + preDel = false; + postIns = false; + postDel = false; + while (pointer < diffs.length) { + if (diffs[pointer][0] === DIFF_EQUAL) { + if (diffs[pointer][1].length < 4 && (postIns || postDel)) { + equalities[equalitiesLength++] = pointer; + preIns = postIns; + preDel = postDel; + lastequality = diffs[pointer][1]; + } + else { + equalitiesLength = 0; + lastequality = null; + } + postIns = postDel = false; + } + else { + if (diffs[pointer][0] === DIFF_DELETE) { + postDel = true; + } + else { + postIns = true; + } + if (lastequality && (preIns && preDel && postIns && postDel || lastequality.length < 2 && preIns + preDel + postIns + postDel === 3)) { + diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]); + diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; + equalitiesLength--; + lastequality = null; + if (preIns && preDel) { + postIns = postDel = true; + equalitiesLength = 0; + } + else { + equalitiesLength--; + pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; + postIns = postDel = false; + } + changes = true; + } + } + pointer++; + } + if (changes) { + this.diffCleanupMerge(diffs); + } + }; + DiffMatchPatch.prototype.diffPrettyHtml = function (diffs) { + var html = []; + for (var x = 0; x < diffs.length; x++) { + var op = diffs[x][0]; + var data = diffs[x][1]; + switch (op) { + case DIFF_INSERT: + html[x] = '' + escapeText(data) + ''; + break; + case DIFF_DELETE: + html[x] = '' + escapeText(data) + ''; + break; + case DIFF_EQUAL: + html[x] = '' + escapeText(data) + ''; + break; + } + } + return html.join(''); + }; + DiffMatchPatch.prototype.diffCommonPrefix = function (text1, text2) { + var pointermid, pointermax, pointermin, pointerstart; + if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) { + return 0; + } + pointermin = 0; + pointermax = Math.min(text1.length, text2.length); + pointermid = pointermax; + pointerstart = 0; + while (pointermin < pointermid) { + if (text1.substring(pointerstart, pointermid) === text2.substring(pointerstart, pointermid)) { + pointermin = pointermid; + pointerstart = pointermin; + } + else { + pointermax = pointermid; + } + pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); + } + return pointermid; + }; + DiffMatchPatch.prototype.diffCommonSuffix = function (text1, text2) { + var pointermid, pointermax, pointermin, pointerend; + if (!text1 || !text2 || text1.charAt(text1.length - 1) !== text2.charAt(text2.length - 1)) { + return 0; + } + pointermin = 0; + pointermax = Math.min(text1.length, text2.length); + pointermid = pointermax; + pointerend = 0; + while (pointermin < pointermid) { + if (text1.substring(text1.length - pointermid, text1.length - pointerend) === text2.substring(text2.length - pointermid, text2.length - pointerend)) { + pointermin = pointermid; + pointerend = pointermin; + } + else { + pointermax = pointermid; + } + pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); + } + return pointermid; + }; + DiffMatchPatch.prototype.diffCompute = function (text1, text2, checklines, deadline) { + var diffs, longtext, shorttext, i, hm, text1A, text2A, text1B, text2B, midCommon, diffsA, diffsB; + if (!text1) { + return [[DIFF_INSERT, text2]]; + } + if (!text2) { + return [[DIFF_DELETE, text1]]; + } + longtext = text1.length > text2.length ? text1 : text2; + shorttext = text1.length > text2.length ? text2 : text1; + i = longtext.indexOf(shorttext); + if (i !== -1) { + diffs = [[DIFF_INSERT, longtext.substring(0, i)], [DIFF_EQUAL, shorttext], [DIFF_INSERT, longtext.substring(i + shorttext.length)]]; + if (text1.length > text2.length) { + diffs[0][0] = diffs[2][0] = DIFF_DELETE; + } + return diffs; + } + if (shorttext.length === 1) { + return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]]; + } + hm = this.diffHalfMatch(text1, text2); + if (hm) { + text1A = hm[0]; + text1B = hm[1]; + text2A = hm[2]; + text2B = hm[3]; + midCommon = hm[4]; + diffsA = this.DiffMain(text1A, text2A, checklines, deadline); + diffsB = this.DiffMain(text1B, text2B, checklines, deadline); + return diffsA.concat([[DIFF_EQUAL, midCommon]], diffsB); + } + if (checklines && text1.length > 100 && text2.length > 100) { + return this.diffLineMode(text1, text2, deadline); + } + return this.diffBisect(text1, text2, deadline); + }; + DiffMatchPatch.prototype.diffHalfMatch = function (text1, text2) { + var longtext, shorttext, dmp, text1A, text2B, text2A, text1B, midCommon, hm1, hm2, hm; + longtext = text1.length > text2.length ? text1 : text2; + shorttext = text1.length > text2.length ? text2 : text1; + if (longtext.length < 4 || shorttext.length * 2 < longtext.length) { + return null; + } + dmp = this; + function diffHalfMatchI(longtext, shorttext, i) { + var seed, j, bestCommon, prefixLength, suffixLength, bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB; + seed = longtext.substring(i, i + Math.floor(longtext.length / 4)); + j = -1; + bestCommon = ''; + while ((j = shorttext.indexOf(seed, j + 1)) !== -1) { + prefixLength = dmp.diffCommonPrefix(longtext.substring(i), shorttext.substring(j)); + suffixLength = dmp.diffCommonSuffix(longtext.substring(0, i), shorttext.substring(0, j)); + if (bestCommon.length < suffixLength + prefixLength) { + bestCommon = shorttext.substring(j - suffixLength, j) + shorttext.substring(j, j + prefixLength); + bestLongtextA = longtext.substring(0, i - suffixLength); + bestLongtextB = longtext.substring(i + prefixLength); + bestShorttextA = shorttext.substring(0, j - suffixLength); + bestShorttextB = shorttext.substring(j + prefixLength); + } + } + if (bestCommon.length * 2 >= longtext.length) { + return [bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB, bestCommon]; + } + else { + return null; + } + } + hm1 = diffHalfMatchI(longtext, shorttext, Math.ceil(longtext.length / 4)); + hm2 = diffHalfMatchI(longtext, shorttext, Math.ceil(longtext.length / 2)); + if (!hm1 && !hm2) { + return null; + } + else if (!hm2) { + hm = hm1; + } + else if (!hm1) { + hm = hm2; + } + else { + hm = hm1[4].length > hm2[4].length ? hm1 : hm2; + } + if (text1.length > text2.length) { + text1A = hm[0]; + text1B = hm[1]; + text2A = hm[2]; + text2B = hm[3]; + } + else { + text2A = hm[0]; + text2B = hm[1]; + text1A = hm[2]; + text1B = hm[3]; + } + midCommon = hm[4]; + return [text1A, text1B, text2A, text2B, midCommon]; + }; + DiffMatchPatch.prototype.diffLineMode = function (text1, text2, deadline) { + var a, diffs, linearray, pointer, countInsert, countDelete, textInsert, textDelete, j; + a = this.diffLinesToChars(text1, text2); + text1 = a.chars1; + text2 = a.chars2; + linearray = a.lineArray; + diffs = this.DiffMain(text1, text2, false, deadline); + this.diffCharsToLines(diffs, linearray); + this.diffCleanupSemantic(diffs); + diffs.push([DIFF_EQUAL, '']); + pointer = 0; + countDelete = 0; + countInsert = 0; + textDelete = ''; + textInsert = ''; + while (pointer < diffs.length) { + switch (diffs[pointer][0]) { + case DIFF_INSERT: + countInsert++; + textInsert += diffs[pointer][1]; + break; + case DIFF_DELETE: + countDelete++; + textDelete += diffs[pointer][1]; + break; + case DIFF_EQUAL: + if (countDelete >= 1 && countInsert >= 1) { + diffs.splice(pointer - countDelete - countInsert, countDelete + countInsert); + pointer = pointer - countDelete - countInsert; + a = this.DiffMain(textDelete, textInsert, false, deadline); + for (j = a.length - 1; j >= 0; j--) { + diffs.splice(pointer, 0, a[j]); + } + pointer = pointer + a.length; + } + countInsert = 0; + countDelete = 0; + textDelete = ''; + textInsert = ''; + break; + } + pointer++; + } + diffs.pop(); + return diffs; + }; + DiffMatchPatch.prototype.diffBisect = function (text1, text2, deadline) { + var text1Length, text2Length, maxD, vOffset, vLength, v1, v2, x, delta, front, k1start, k1end, k2start, k2end, k2Offset, k1Offset, x1, x2, y1, y2, d, k1, k2; + text1Length = text1.length; + text2Length = text2.length; + maxD = Math.ceil((text1Length + text2Length) / 2); + vOffset = maxD; + vLength = 2 * maxD; + v1 = new Array(vLength); + v2 = new Array(vLength); + for (x = 0; x < vLength; x++) { + v1[x] = -1; + v2[x] = -1; + } + v1[vOffset + 1] = 0; + v2[vOffset + 1] = 0; + delta = text1Length - text2Length; + front = delta % 2 !== 0; + k1start = 0; + k1end = 0; + k2start = 0; + k2end = 0; + for (d = 0; d < maxD; d++) { + if (Date.now() > deadline) { + break; + } + for (k1 = -d + k1start; k1 <= d - k1end; k1 += 2) { + k1Offset = vOffset + k1; + if (k1 === -d || k1 !== d && v1[k1Offset - 1] < v1[k1Offset + 1]) { + x1 = v1[k1Offset + 1]; + } + else { + x1 = v1[k1Offset - 1] + 1; + } + y1 = x1 - k1; + while (x1 < text1Length && y1 < text2Length && text1.charAt(x1) === text2.charAt(y1)) { + x1++; + y1++; + } + v1[k1Offset] = x1; + if (x1 > text1Length) { + k1end += 2; + } + else if (y1 > text2Length) { + k1start += 2; + } + else if (front) { + k2Offset = vOffset + delta - k1; + if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] !== -1) { + x2 = text1Length - v2[k2Offset]; + if (x1 >= x2) { + return this.diffBisectSplit(text1, text2, x1, y1, deadline); + } + } + } + } + for (k2 = -d + k2start; k2 <= d - k2end; k2 += 2) { + k2Offset = vOffset + k2; + if (k2 === -d || k2 !== d && v2[k2Offset - 1] < v2[k2Offset + 1]) { + x2 = v2[k2Offset + 1]; + } + else { + x2 = v2[k2Offset - 1] + 1; + } + y2 = x2 - k2; + while (x2 < text1Length && y2 < text2Length && text1.charAt(text1Length - x2 - 1) === text2.charAt(text2Length - y2 - 1)) { + x2++; + y2++; + } + v2[k2Offset] = x2; + if (x2 > text1Length) { + k2end += 2; + } + else if (y2 > text2Length) { + k2start += 2; + } + else if (!front) { + k1Offset = vOffset + delta - k2; + if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] !== -1) { + x1 = v1[k1Offset]; + y1 = vOffset + x1 - k1Offset; + x2 = text1Length - x2; + if (x1 >= x2) { + return this.diffBisectSplit(text1, text2, x1, y1, deadline); + } + } + } + } + } + return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]]; + }; + DiffMatchPatch.prototype.diffBisectSplit = function (text1, text2, x, y, deadline) { + var text1a, text1b, text2a, text2b, diffs, diffsb; + text1a = text1.substring(0, x); + text2a = text2.substring(0, y); + text1b = text1.substring(x); + text2b = text2.substring(y); + diffs = this.DiffMain(text1a, text2a, false, deadline); + diffsb = this.DiffMain(text1b, text2b, false, deadline); + return diffs.concat(diffsb); + }; + DiffMatchPatch.prototype.diffCleanupSemantic = function (diffs) { + var changes = false; + var equalities = []; + var equalitiesLength = 0; + var lastequality = null; + var pointer = 0; + var lengthInsertions1 = 0; + var lengthDeletions1 = 0; + var lengthInsertions2 = 0; + var lengthDeletions2 = 0; + while (pointer < diffs.length) { + if (diffs[pointer][0] === DIFF_EQUAL) { + equalities[equalitiesLength++] = pointer; + lengthInsertions1 = lengthInsertions2; + lengthDeletions1 = lengthDeletions2; + lengthInsertions2 = 0; + lengthDeletions2 = 0; + lastequality = diffs[pointer][1]; + } + else { + if (diffs[pointer][0] === DIFF_INSERT) { + lengthInsertions2 += diffs[pointer][1].length; + } + else { + lengthDeletions2 += diffs[pointer][1].length; + } + if (lastequality && lastequality.length <= Math.max(lengthInsertions1, lengthDeletions1) && lastequality.length <= Math.max(lengthInsertions2, lengthDeletions2)) { + diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]); + diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; + equalitiesLength--; + equalitiesLength--; + pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; + lengthInsertions1 = 0; + lengthDeletions1 = 0; + lengthInsertions2 = 0; + lengthDeletions2 = 0; + lastequality = null; + changes = true; + } + } + pointer++; + } + if (changes) { + this.diffCleanupMerge(diffs); + } + var deletion, insertion, overlapLength1, overlapLength2; + pointer = 1; + while (pointer < diffs.length) { + if (diffs[pointer - 1][0] === DIFF_DELETE && diffs[pointer][0] === DIFF_INSERT) { + deletion = diffs[pointer - 1][1]; + insertion = diffs[pointer][1]; + overlapLength1 = this.diffCommonOverlap(deletion, insertion); + overlapLength2 = this.diffCommonOverlap(insertion, deletion); + if (overlapLength1 >= overlapLength2) { + if (overlapLength1 >= deletion.length / 2 || overlapLength1 >= insertion.length / 2) { + diffs.splice(pointer, 0, [DIFF_EQUAL, insertion.substring(0, overlapLength1)]); + diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlapLength1); + diffs[pointer + 1][1] = insertion.substring(overlapLength1); + pointer++; + } + } + else { + if (overlapLength2 >= deletion.length / 2 || overlapLength2 >= insertion.length / 2) { + diffs.splice(pointer, 0, [DIFF_EQUAL, deletion.substring(0, overlapLength2)]); + diffs[pointer - 1][0] = DIFF_INSERT; + diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlapLength2); + diffs[pointer + 1][0] = DIFF_DELETE; + diffs[pointer + 1][1] = deletion.substring(overlapLength2); + pointer++; + } + } + pointer++; + } + pointer++; + } + }; + DiffMatchPatch.prototype.diffCommonOverlap = function (text1, text2) { + var text1Length = text1.length; + var text2Length = text2.length; + if (text1Length === 0 || text2Length === 0) { + return 0; + } + if (text1Length > text2Length) { + text1 = text1.substring(text1Length - text2Length); + } + else if (text1Length < text2Length) { + text2 = text2.substring(0, text1Length); + } + var textLength = Math.min(text1Length, text2Length); + if (text1 === text2) { + return textLength; + } + var best = 0; + var length = 1; + while (true) { + var pattern = text1.substring(textLength - length); + var found = text2.indexOf(pattern); + if (found === -1) { + return best; + } + length += found; + if (found === 0 || text1.substring(textLength - length) === text2.substring(0, length)) { + best = length; + length++; + } + } + }; + DiffMatchPatch.prototype.diffLinesToChars = function (text1, text2) { + var lineArray = []; + var lineHash = {}; + lineArray[0] = ''; + function diffLinesToCharsMunge(text) { + var chars = ''; + var lineStart = 0; + var lineEnd = -1; + var lineArrayLength = lineArray.length; + while (lineEnd < text.length - 1) { + lineEnd = text.indexOf('\n', lineStart); + if (lineEnd === -1) { + lineEnd = text.length - 1; + } + var line = text.substring(lineStart, lineEnd + 1); + lineStart = lineEnd + 1; + if (hasOwn.call(lineHash, line)) { + chars += String.fromCharCode(lineHash[line]); + } + else { + chars += String.fromCharCode(lineArrayLength); + lineHash[line] = lineArrayLength; + lineArray[lineArrayLength++] = line; + } + } + return chars; + } + var chars1 = diffLinesToCharsMunge(text1); + var chars2 = diffLinesToCharsMunge(text2); + return { + chars1: chars1, + chars2: chars2, + lineArray: lineArray + }; + }; + DiffMatchPatch.prototype.diffCharsToLines = function (diffs, lineArray) { + for (var x = 0; x < diffs.length; x++) { + var chars = diffs[x][1]; + var text = []; + for (var y = 0; y < chars.length; y++) { + text[y] = lineArray[chars.charCodeAt(y)]; + } + diffs[x][1] = text.join(''); + } + }; + DiffMatchPatch.prototype.diffCleanupMerge = function (diffs) { + diffs.push([DIFF_EQUAL, '']); + var pointer = 0; + var countDelete = 0; + var countInsert = 0; + var textDelete = ''; + var textInsert = ''; + while (pointer < diffs.length) { + switch (diffs[pointer][0]) { + case DIFF_INSERT: + countInsert++; + textInsert += diffs[pointer][1]; + pointer++; + break; + case DIFF_DELETE: + countDelete++; + textDelete += diffs[pointer][1]; + pointer++; + break; + case DIFF_EQUAL: + if (countDelete + countInsert > 1) { + if (countDelete !== 0 && countInsert !== 0) { + var commonlength = this.diffCommonPrefix(textInsert, textDelete); + if (commonlength !== 0) { + if (pointer - countDelete - countInsert > 0 && diffs[pointer - countDelete - countInsert - 1][0] === DIFF_EQUAL) { + diffs[pointer - countDelete - countInsert - 1][1] += textInsert.substring(0, commonlength); + } + else { + diffs.splice(0, 0, [DIFF_EQUAL, textInsert.substring(0, commonlength)]); + pointer++; + } + textInsert = textInsert.substring(commonlength); + textDelete = textDelete.substring(commonlength); + } + commonlength = this.diffCommonSuffix(textInsert, textDelete); + if (commonlength !== 0) { + diffs[pointer][1] = textInsert.substring(textInsert.length - commonlength) + diffs[pointer][1]; + textInsert = textInsert.substring(0, textInsert.length - commonlength); + textDelete = textDelete.substring(0, textDelete.length - commonlength); + } + } + if (countDelete === 0) { + diffs.splice(pointer - countInsert, countDelete + countInsert, [DIFF_INSERT, textInsert]); + } + else if (countInsert === 0) { + diffs.splice(pointer - countDelete, countDelete + countInsert, [DIFF_DELETE, textDelete]); + } + else { + diffs.splice(pointer - countDelete - countInsert, countDelete + countInsert, [DIFF_DELETE, textDelete], [DIFF_INSERT, textInsert]); + } + pointer = pointer - countDelete - countInsert + (countDelete ? 1 : 0) + (countInsert ? 1 : 0) + 1; + } + else if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) { + diffs[pointer - 1][1] += diffs[pointer][1]; + diffs.splice(pointer, 1); + } + else { + pointer++; + } + countInsert = 0; + countDelete = 0; + textDelete = ''; + textInsert = ''; + break; + } + } + if (diffs[diffs.length - 1][1] === '') { + diffs.pop(); + } + var changes = false; + pointer = 1; + while (pointer < diffs.length - 1) { + if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) { + var diffPointer = diffs[pointer][1]; + var position = diffPointer.substring(diffPointer.length - diffs[pointer - 1][1].length); + if (position === diffs[pointer - 1][1]) { + diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length); + diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1]; + diffs.splice(pointer - 1, 1); + changes = true; + } + else if (diffPointer.substring(0, diffs[pointer + 1][1].length) === diffs[pointer + 1][1]) { + diffs[pointer - 1][1] += diffs[pointer + 1][1]; + diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1]; + diffs.splice(pointer + 1, 1); + changes = true; + } + } + pointer++; + } + if (changes) { + this.diffCleanupMerge(diffs); + } + }; + return function (o, n) { + var diff, output, text; + diff = new DiffMatchPatch(); + output = diff.DiffMain(o, n); + diff.diffCleanupEfficiency(output); + text = diff.diffPrettyHtml(output); + return text; + }; + }(); +})(); diff --git a/build/esm/tests/registry_tests.js b/build/esm/tests/registry_tests.js new file mode 100644 index 0000000000..2901cc30b0 --- /dev/null +++ b/build/esm/tests/registry_tests.js @@ -0,0 +1,64 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { EasyScore, Factory, Registry, StaveNote } from '../src/index.js'; +const RegistryTests = { + Start() { + QUnit.module('Registry'); + QUnit.test('Register and Clear', registerAndClear); + QUnit.test('Default Registry', defaultRegistry); + QUnit.test('Multiple Classes', classes); + }, +}; +function registerAndClear(assert) { + const registry = new Registry(); + const score = new EasyScore({ factory: Factory.newFromElementId(null) }); + registry.register(score.notes('C4')[0], 'foobar'); + const foobar = registry.getElementById('foobar'); + assert.ok(foobar); + assert.equal(foobar.getAttribute('id'), 'foobar'); + registry.clear(); + assert.notOk(registry.getElementById('foobar')); + assert.throws(() => registry.register(score.notes('C4'))); + registry.clear(); + assert.ok(registry.register(score.notes('C4[id="boobar"]')[0]).getElementById('boobar')); +} +function defaultRegistry(assert) { + const registry = new Registry(); + const score = new EasyScore({ factory: Factory.newFromElementId(null) }); + Registry.enableDefaultRegistry(registry); + score.notes('C4[id="foobar"]'); + const note = registry.getElementById('foobar'); + assert.ok(note); + note.setAttribute('id', 'boobar'); + assert.ok(registry.getElementById('boobar')); + assert.notOk(registry.getElementById('foobar')); + registry.clear(); + assert.equal(registry.getElementsByType(StaveNote.CATEGORY).length, 0); + score.notes('C5'); + const elements = registry.getElementsByType(StaveNote.CATEGORY); + assert.equal(elements.length, 1); +} +function classes(assert) { + const registry = new Registry(); + const score = new EasyScore({ factory: Factory.newFromElementId(null) }); + Registry.enableDefaultRegistry(registry); + score.notes('C4[id="foobar"]'); + const note = registry.getElementById('foobar'); + note.addClass('foo'); + assert.ok(note.hasClass('foo')); + assert.notOk(note.hasClass('boo')); + assert.equal(registry.getElementsByClass('foo').length, 1); + assert.equal(registry.getElementsByClass('boo').length, 0); + note.addClass('boo'); + assert.ok(note.hasClass('foo')); + assert.ok(note.hasClass('boo')); + assert.equal(registry.getElementsByClass('foo').length, 1); + assert.equal(registry.getElementsByClass('boo').length, 1); + note.removeClass('boo'); + note.removeClass('foo'); + assert.notOk(note.hasClass('foo')); + assert.notOk(note.hasClass('boo')); + assert.equal(registry.getElementsByClass('foo').length, 0); + assert.equal(registry.getElementsByClass('boo').length, 0); +} +VexFlowTests.register(RegistryTests); +export { RegistryTests }; diff --git a/build/esm/tests/renderer_tests.js b/build/esm/tests/renderer_tests.js new file mode 100644 index 0000000000..fecc2d444c --- /dev/null +++ b/build/esm/tests/renderer_tests.js @@ -0,0 +1,113 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { CanvasContext, Factory, Formatter, isHTMLCanvas, Renderer, RuntimeError, Stave, StaveNote, SVGContext, } from '../src/index.js'; +const STAVE_WIDTH = 700; +const STAVE_HEIGHT = 100; +const STAVE_RIGHT_MARGIN = 10; +const USE_RENDERER = { useRendererAPI: true }; +const USE_FACTORY = { useRendererAPI: false }; +const RendererTests = { + Start() { + QUnit.module('Renderer'); + const run = VexFlowTests.runTests; + run('Random', random); + run('Renderer API with element ID string', stringElementId, USE_RENDERER); + run('Renderer API with canvas or div', canvasOrDivElement, USE_RENDERER); + run('Renderer API with context', passRenderContext); + run('Factory API with element ID string', stringElementId, USE_FACTORY); + run('Factory API with canvas or div', canvasOrDivElement, USE_FACTORY); + }, +}; +function drawStave(stave, context) { + stave.addClef('bass').addTimeSignature('3/4').draw(); + Formatter.FormatAndDraw(context, stave, [ + new StaveNote({ keys: ['C/4'], duration: '4' }), + new StaveNote({ keys: ['E/4'], duration: '4' }), + new StaveNote({ keys: ['G/4'], duration: '4' }), + ]); +} +function random(options) { + const useElementIDString = Math.random() > 0.5; + const useRendererAPI = Math.random() > 0.5; + options.params = { useRendererAPI }; + if (useElementIDString) { + stringElementId(options); + } + else { + canvasOrDivElement(options); + } + const element = document.getElementById(options.elementId); + const colorForElementType = useElementIDString ? '#CCCCCC' : '#0074d9'; + const lineStyleForWhichAPI = useRendererAPI ? 'solid' : 'dashed'; + const borderStyle = `3px ${lineStyleForWhichAPI} ${colorForElementType}`; + let elementType; + if (options.backend === Renderer.Backends.CANVAS) { + element.style.border = borderStyle; + elementType = '<canvas> element object'; + } + else { + element.children[0].style.border = borderStyle; + elementType = '<svg> element object'; + } + if (useElementIDString) { + elementType = 'elementID string'; + } + const whichAPI = useRendererAPI ? 'Renderer API' : 'Factory API'; + element.parentElement.insertAdjacentHTML('beforeend', `
      ` + + `${whichAPI}` + + ` with ` + + `${elementType}` + + `

      `); +} +function useRendererAPI(e, backend) { + const renderer = new Renderer(e, backend); + renderer.resize(STAVE_WIDTH, STAVE_HEIGHT); + const context = renderer.getContext(); + drawStave(new Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context); +} +function useFactoryAPI(e, backend) { + const opts = { + renderer: { elementId: e, width: STAVE_WIDTH, height: STAVE_HEIGHT, backend }, + }; + const factory = new Factory(opts); + drawStave(factory.Stave(), factory.getContext()); +} +function stringElementId(options) { + const elementId = options.elementId; + if (options.params.useRendererAPI) { + useRendererAPI(elementId, options.backend); + } + else { + useFactoryAPI(elementId, options.backend); + } + options.assert.ok(true); +} +function canvasOrDivElement(options) { + const element = document.getElementById(options.elementId); + if (options.params.useRendererAPI) { + useRendererAPI(element, options.backend); + } + else { + useFactoryAPI(element, options.backend); + } + options.assert.ok(true); +} +function passRenderContext(options) { + let context; + const element = document.getElementById(options.elementId); + if (isHTMLCanvas(element)) { + const ctx = element.getContext('2d'); + if (!ctx) { + throw new RuntimeError(`Couldn't get context from element "${options.elementId}"`); + } + context = new CanvasContext(ctx); + } + else { + context = new SVGContext(element); + } + const renderer = new Renderer(context); + renderer.resize(STAVE_WIDTH, STAVE_HEIGHT); + drawStave(new Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context); + options.assert.ok(true); +} +VexFlowTests.register(RendererTests); +export { RendererTests }; diff --git a/build/esm/tests/rests_tests.js b/build/esm/tests/rests_tests.js new file mode 100644 index 0000000000..ba4cd1c16c --- /dev/null +++ b/build/esm/tests/rests_tests.js @@ -0,0 +1,260 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Beam } from '../src/beam.js'; +import { Dot } from '../src/dot.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Tuplet } from '../src/tuplet.js'; +import { Voice } from '../src/voice.js'; +const RestsTests = { + Start() { + QUnit.module('Rests'); + const run = VexFlowTests.runTests; + run('Outside Stave', ledgerRest); + run('Dotted', basic); + run('Auto Align - Beamed Notes Stems Up', beamsUp); + run('Auto Align - Beamed Notes Stems Down', beamsDown); + run('Auto Align - Tuplets Stems Up', tupletsUp); + run('Auto Align - Tuplets Stems Down', tupletsDown); + run('Auto Align - Single Voice (Default)', singleVoiceDefaultAlignment); + run('Auto Align - Single Voice (Align All)', singleVoiceAlignAll); + run('Auto Align - Multi Voice', multiVoice); + }, +}; +function setupContext(options, contextBuilder, width = 350, height = 150) { + const context = contextBuilder(options.elementId, width, height); + context.scale(0.9, 0.9); + context.font = '10pt Arial'; + const stave = new Stave(10, 30, width).addClef('treble').addTimeSignature('4/4').setContext(context).draw(); + return { context, stave }; +} +function basic(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 700); + const notes = [ + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '16r' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '32r' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '64r' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '128r' }), + ]; + Dot.buildAndAttach(notes, { all: true }); + Formatter.FormatAndDraw(context, stave, notes); + options.assert.ok(true, 'Dotted Rest Test'); +} +function ledgerRest(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 700); + const notes = [ + new StaveNote({ keys: ['a/5'], stem_direction: 1, duration: 'wr' }), + new StaveNote({ keys: ['c/6'], stem_direction: 1, duration: 'hr' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }), + new StaveNote({ keys: ['a/3'], stem_direction: 1, duration: 'wr' }), + new StaveNote({ keys: ['f/3'], stem_direction: 1, duration: 'hr' }), + new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }), + ]; + Formatter.FormatAndDraw(context, stave, notes); + options.assert.ok(true, 'Leger/Ledger Rest Test'); +} +const note = (noteStruct) => new StaveNote(noteStruct); +function beamsUp(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['e/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['c/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['c/4'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), + note({ keys: ['c/4'], stem_direction: 1, duration: '8' }), + ]; + const beam1 = new Beam(notes.slice(0, 4)); + const beam2 = new Beam(notes.slice(4, 8)); + const beam3 = new Beam(notes.slice(8, 12)); + Formatter.FormatAndDraw(context, stave, notes); + beam1.setContext(context).draw(); + beam2.setContext(context).draw(); + beam3.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Beams Up Test'); +} +function beamsDown(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['c/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['e/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['e/4'], stem_direction: -1, duration: '8' }), + ]; + const beam1 = new Beam(notes.slice(0, 4)); + const beam2 = new Beam(notes.slice(4, 8)); + const beam3 = new Beam(notes.slice(8, 12)); + Formatter.FormatAndDraw(context, stave, notes); + beam1.setContext(context).draw(); + beam2.setContext(context).draw(); + beam3.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Beams Down Test'); +} +function tupletsUp(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + ]; + const tuplet1 = new Tuplet(notes.slice(0, 3)).setTupletLocation(Tuplet.LOCATION_TOP); + const tuplet2 = new Tuplet(notes.slice(3, 6)).setTupletLocation(Tuplet.LOCATION_TOP); + const tuplet3 = new Tuplet(notes.slice(6, 9)).setTupletLocation(Tuplet.LOCATION_TOP); + const tuplet4 = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP); + Formatter.FormatAndDraw(context, stave, notes); + tuplet1.setContext(context).draw(); + tuplet2.setContext(context).draw(); + tuplet3.setContext(context).draw(); + tuplet4.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Tuplets Stem Up Test'); +} +function tupletsDown(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + ]; + const beam1 = new Beam(notes.slice(0, 3)); + const beam2 = new Beam(notes.slice(3, 6)); + const beam3 = new Beam(notes.slice(6, 9)); + const beam4 = new Beam(notes.slice(9, 12)); + const tuplet1 = new Tuplet(notes.slice(0, 3)).setTupletLocation(Tuplet.LOCATION_BOTTOM); + const tuplet2 = new Tuplet(notes.slice(3, 6)).setTupletLocation(Tuplet.LOCATION_BOTTOM); + const tuplet3 = new Tuplet(notes.slice(6, 9)).setTupletLocation(Tuplet.LOCATION_BOTTOM); + const tuplet4 = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_BOTTOM); + Formatter.FormatAndDraw(context, stave, notes); + tuplet1.setContext(context).draw(); + tuplet2.setContext(context).draw(); + tuplet3.setContext(context).draw(); + tuplet4.setContext(context).draw(); + beam1.setContext(context).draw(); + beam2.setContext(context).draw(); + beam3.setContext(context).draw(); + beam4.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Tuplets Stem Down Test'); +} +function singleVoiceDefaultAlignment(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['f/4'], stem_direction: -1, duration: '4' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['d/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + ]; + const beam = new Beam(notes.slice(5, 9)); + const tuplet = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP); + Formatter.FormatAndDraw(context, stave, notes); + tuplet.setContext(context).draw(); + beam.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Default Test'); +} +function singleVoiceAlignAll(options, contextBuilder) { + const { context, stave } = setupContext(options, contextBuilder, 600, 160); + const notes = [ + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['f/4'], stem_direction: -1, duration: '4' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), + note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), + note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), + note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), + note({ keys: ['d/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['g/5'], stem_direction: -1, duration: '4' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), + ]; + const beam = new Beam(notes.slice(5, 9)); + const tuplet = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP); + Formatter.FormatAndDraw(context, stave, notes, { align_rests: true }); + tuplet.setContext(context).draw(); + beam.setContext(context).draw(); + options.assert.ok(true, 'Auto Align Rests - Align All Test'); +} +function multiVoice(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + const stave = new Stave(50, 10, 500).addClef('treble').setContext(ctx).addTimeSignature('4/4').draw(); + const noteOnStave = (noteStruct) => new StaveNote(noteStruct).setStave(stave); + const notes1 = [ + noteOnStave({ keys: ['c/4', 'e/4', 'g/4'], duration: '4' }), + noteOnStave({ keys: ['b/4'], duration: '4r' }), + noteOnStave({ keys: ['c/4', 'd/4', 'a/4'], duration: '4' }), + noteOnStave({ keys: ['b/4'], duration: '4r' }), + ]; + const notes2 = [ + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), + ]; + const voice1 = new Voice(Flow.TIME4_4).addTickables(notes1); + const voice2 = new Voice(Flow.TIME4_4).addTickables(notes2); + new Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave, { align_rests: true }); + const beam2_1 = new Beam(notes2.slice(0, 4)); + const beam2_2 = new Beam(notes2.slice(4, 8)); + voice2.draw(ctx); + voice1.draw(ctx); + beam2_1.setContext(ctx).draw(); + beam2_2.setContext(ctx).draw(); + options.assert.ok(true, 'Strokes Test Multi Voice'); +} +VexFlowTests.register(RestsTests); +export { RestsTests }; diff --git a/build/esm/tests/rhythm_tests.js b/build/esm/tests/rhythm_tests.js new file mode 100644 index 0000000000..5330f5f3e4 --- /dev/null +++ b/build/esm/tests/rhythm_tests.js @@ -0,0 +1,357 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Annotation } from '../src/annotation.js'; +import { Beam } from '../src/beam.js'; +import { Formatter } from '../src/formatter.js'; +import { Stave } from '../src/stave.js'; +import { BarlineType } from '../src/stavebarline.js'; +import { StaveNote } from '../src/stavenote.js'; +const RhythmTests = { + Start() { + QUnit.module('Rhythm'); + const run = VexFlowTests.runTests; + run('Rhythm Draw - slash notes', drawBasic); + run('Rhythm Draw - beamed slash notes', drawBeamedSlashNotes); + run('Rhythm Draw - beamed slash notes, some rests', drawSlashAndBeamAndRests); + run('Rhythm Draw - 16th note rhythm with scratches', drawSixtenthWithScratches); + run('Rhythm Draw - 32nd note rhythm with scratches', drawThirtySecondWithScratches); + }, +}; +function drawBasic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + const staveBar1 = new Stave(10, 30, 150); + staveBar1.setBegBarType(BarlineType.DOUBLE); + staveBar1.setEndBarType(BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('C'); + staveBar1.setContext(ctx).draw(); + const notesBar1 = [new StaveNote({ keys: ['b/4'], duration: '1s', stem_direction: -1 })]; + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 120); + staveBar2.setBegBarType(BarlineType.SINGLE); + staveBar2.setEndBarType(BarlineType.SINGLE); + staveBar2.setContext(ctx).draw(); + const notesBar2 = [ + new StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }), + new StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }), + ]; + Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + const staveBar3 = new Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 170); + staveBar3.setContext(ctx).draw(); + const notesBar3 = [ + new StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '4s', + stem_direction: -1, + }), + ]; + Formatter.FormatAndDraw(ctx, staveBar3, notesBar3); + const staveBar4 = new Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 200); + staveBar4.setContext(ctx).draw(); + const notesBar4 = [ + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + Formatter.FormatAndDraw(ctx, staveBar4, notesBar4); + options.assert.expect(0); +} +function drawBeamedSlashNotes(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + const staveBar1 = new Stave(10, 30, 300); + staveBar1.setBegBarType(BarlineType.DOUBLE); + staveBar1.setEndBarType(BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('C'); + staveBar1.setContext(ctx).draw(); + const notesBar1_part1 = [ + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + const notesBar1_part2 = [ + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + const beam1 = new Beam(notesBar1_part1); + const beam2 = new Beam(notesBar1_part2); + const notesBar1 = notesBar1_part1.concat(notesBar1_part2); + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + options.assert.expect(0); +} +function drawSlashAndBeamAndRests(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + const staveBar1 = new Stave(10, 30, 300); + staveBar1.setBegBarType(BarlineType.DOUBLE); + staveBar1.setEndBarType(BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('F'); + staveBar1.setContext(ctx).draw(); + const notesBar1_part1 = [ + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ keys: ['b/4'], duration: '8s', stem_direction: -1 }), + ]; + notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 2), 0); + const notesBar1_part2 = [ + new StaveNote({ + keys: ['b/4'], + duration: '8r', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8r', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8r', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '8s', + stem_direction: -1, + }), + ]; + const beam1 = new Beam(notesBar1_part1); + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2)); + beam1.setContext(ctx).draw(); + const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 220); + staveBar2.setContext(ctx).draw(); + const notesBar2 = [ + new StaveNote({ + keys: ['b/4'], + duration: '1s', + stem_direction: -1, + }), + ]; + notesBar2[0].addModifier(new Annotation('F').setFont('Times', VexFlowTests.Font.size + 2), 0); + Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + options.assert.expect(0); +} +function drawSixtenthWithScratches(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + const staveBar1 = new Stave(10, 30, 300); + staveBar1.setBegBarType(BarlineType.DOUBLE); + staveBar1.setEndBarType(BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('F'); + staveBar1.setContext(ctx).draw(); + const notesBar1_part1 = [ + new StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '16m', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + ]; + const notesBar1_part2 = [ + new StaveNote({ + keys: ['b/4'], + duration: '16m', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '16r', + stem_direction: -1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '16s', + stem_direction: -1, + }), + ]; + notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 3), 0); + const beam1 = new Beam(notesBar1_part1); + const beam2 = new Beam(notesBar1_part2); + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2)); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + options.assert.expect(0); +} +function drawThirtySecondWithScratches(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + const staveBar1 = new Stave(10, 30, 300); + staveBar1.setBegBarType(BarlineType.DOUBLE); + staveBar1.setEndBarType(BarlineType.SINGLE); + staveBar1.addClef('treble'); + staveBar1.addTimeSignature('4/4'); + staveBar1.addKeySignature('F'); + staveBar1.setContext(ctx).draw(); + const notesBar1_part1 = [ + new StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32m', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32m', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32r', + stem_direction: 1, + }), + new StaveNote({ + keys: ['b/4'], + duration: '32s', + stem_direction: 1, + }), + ]; + notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 3), 0); + const beam1 = new Beam(notesBar1_part1); + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1); + beam1.setContext(ctx).draw(); + options.assert.expect(0); +} +VexFlowTests.register(RhythmTests); +export { RhythmTests }; diff --git a/build/esm/tests/stave_tests.js b/build/esm/tests/stave_tests.js new file mode 100644 index 0000000000..7c731a91db --- /dev/null +++ b/build/esm/tests/stave_tests.js @@ -0,0 +1,560 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Beam } from '../src/beam.js'; +import { Clef } from '../src/clef.js'; +import { Formatter } from '../src/formatter.js'; +import { KeySignature } from '../src/keysignature.js'; +import { Modifier } from '../src/modifier.js'; +import { Stave } from '../src/stave.js'; +import { Barline, BarlineType } from '../src/stavebarline.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Repetition } from '../src/staverepetition.js'; +import { VoltaType } from '../src/stavevolta.js'; +import { TextJustification } from '../src/textnote.js'; +import { TimeSignature } from '../src/timesignature.js'; +const StaveTests = { + Start() { + QUnit.module('Stave'); + QUnit.test('StaveModifiers SortByCategory', sortByCategory); + const run = VexFlowTests.runTests; + run('Stave Draw Test', draw); + run('Open Stave Draw Test', drawOpenStave); + run('Multiple Stave Barline Test', drawMultipleMeasures); + run('Multiple Stave Barline Test (14pt Section)', drawMultipleMeasures, { fontSize: 14 }); + run('Multiple Stave Repeats Test', drawRepeats); + run('Stave End Modifiers Test', drawEndModifiers); + run('Stave Repetition (CODA) Positioning', drawStaveRepetition, { yShift: 0 }); + run('Stave Repetition (CODA) Positioning (-20)', drawStaveRepetition, { yShift: -20 }); + run('Stave Repetition (CODA) Positioning (+10)', drawStaveRepetition, { yShift: +10 }); + run('Multiple Staves Volta Test', drawVolta); + run('Volta + Modifier Measure Test', drawVoltaModifier); + run('Tempo Test', drawTempo); + run('Single Line Configuration Test', configureSingleLine); + run('Batch Line Configuration Test', configureAllLines); + run('Stave Text Test', drawStaveText); + run('Multiple Line Stave Text Test', drawStaveTextMultiLine); + run('Factory API', factoryAPI); + }, +}; +function sortByCategory(assert) { + const stave = new Stave(0, 0, 300); + const clef0 = new Clef('treble'); + const clef1 = new Clef('alto'); + const clef2 = new Clef('bass'); + const time0 = new TimeSignature('C'); + const time1 = new TimeSignature('C|'); + const time2 = new TimeSignature('9/8'); + const key0 = new KeySignature('G'); + const key1 = new KeySignature('F'); + const key2 = new KeySignature('D'); + const bar0 = new Barline(BarlineType.SINGLE); + const bar1 = new Barline(BarlineType.DOUBLE); + const bar2 = new Barline(BarlineType.NONE); + const order0 = { Barline: 0, Clef: 1, KeySignature: 2, TimeSignature: 3 }; + const order1 = { TimeSignature: 0, KeySignature: 1, Barline: 2, Clef: 3 }; + const sortAndCompare = (title, a, b, order) => { + stave.sortByCategory(a, order); + let isSame = true; + if (a.length !== b.length) + isSame = false; + for (let i = 0; i < a.length; ++i) { + if (a[i] !== b[i]) + isSame = false; + } + assert.ok(isSame, title); + }; + sortAndCompare('Keep the original order 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [bar0, bar1, clef0, clef1, key0, key1, time0, time1], order0); + sortAndCompare('Keep the original order 2', [time0, time1, key0, key1, bar0, bar1, clef0, clef1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1); + sortAndCompare('Sort and keep 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1); + sortAndCompare('Sort and keep 2', [bar0, clef0, key0, time0, key1, time1, clef1, bar1, time2, clef2, bar2, key2], [bar0, bar1, bar2, clef0, clef1, clef2, key0, key1, key2, time0, time1, time2], order0); + sortAndCompare('Sort and keep 3', [bar2, clef2, key2, time0, key0, time2, clef1, bar1, time1, clef0, bar0, key1], [time0, time2, time1, key2, key0, key1, bar2, bar1, bar0, clef2, clef1, clef0], order1); +} +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 150); + const stave = new Stave(10, 10, 300); + stave.setContext(ctx); + stave.draw(); + options.assert.equal(stave.getYForNote(0), 100, 'getYForNote(0)'); + options.assert.equal(stave.getYForLine(5), 100, 'getYForLine(5)'); + options.assert.equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line'); + options.assert.equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line'); + options.assert.ok(true, 'all pass'); +} +function drawOpenStave(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 350); + let stave = new Stave(10, 10, 300, { left_bar: false }); + stave.setContext(ctx); + stave.draw(); + stave = new Stave(10, 150, 300, { right_bar: false }); + stave.setContext(ctx); + stave.draw(); + options.assert.ok(true, 'all pass'); +} +function drawMultipleMeasures(options, contextBuilder) { + var _a, _b; + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 550, 200); + const staveBar1 = new Stave(10, 50, 200); + staveBar1.setBegBarType(BarlineType.REPEAT_BEGIN); + staveBar1.setEndBarType(BarlineType.DOUBLE); + staveBar1.setSection('A', 0, 0, (_a = options.params) === null || _a === void 0 ? void 0 : _a.fontSize, false); + staveBar1.addClef('treble').setContext(ctx).draw(); + const notesBar1 = [ + new StaveNote({ keys: ['c/4'], duration: 'q' }), + new StaveNote({ keys: ['d/4'], duration: 'q' }), + new StaveNote({ keys: ['b/4'], duration: 'qr' }), + new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 300); + staveBar2.setSection('B', 0, 0, (_b = options.params) === null || _b === void 0 ? void 0 : _b.fontSize); + staveBar2.setEndBarType(BarlineType.END); + staveBar2.setContext(ctx).draw(); + const notesBar2_part1 = [ + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + const notesBar2_part2 = [ + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + const beam1 = new Beam(notesBar2_part1); + const beam2 = new Beam(notesBar2_part2); + const notesBar2 = notesBar2_part1.concat(notesBar2_part2); + Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); +} +function drawRepeats(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 750, 120); + const staveBar1 = new Stave(10, 0, 250); + staveBar1.setBegBarType(BarlineType.REPEAT_BEGIN); + staveBar1.setEndBarType(BarlineType.REPEAT_END); + staveBar1.addClef('treble'); + staveBar1.addKeySignature('A'); + staveBar1.setContext(ctx).draw(); + const notesBar1 = [ + new StaveNote({ keys: ['c/4'], duration: 'q' }), + new StaveNote({ keys: ['d/4'], duration: 'q' }), + new StaveNote({ keys: ['b/4'], duration: 'qr' }), + new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); + const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 250); + staveBar2.setBegBarType(BarlineType.REPEAT_BEGIN); + staveBar2.setEndBarType(BarlineType.REPEAT_END); + staveBar2.setContext(ctx).draw(); + const notesBar2_part1 = [ + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + const notesBar2_part2 = [ + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + ]; + notesBar2_part2[0].addModifier(new Accidental('#'), 0); + notesBar2_part2[1].addModifier(new Accidental('#'), 0); + notesBar2_part2[3].addModifier(new Accidental('b'), 0); + const beam1 = new Beam(notesBar2_part1); + const beam2 = new Beam(notesBar2_part2); + const notesBar2 = notesBar2_part1.concat(notesBar2_part2); + Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + const staveBar3 = new Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 50); + staveBar3.setContext(ctx).draw(); + const notesBar3 = [new StaveNote({ keys: ['d/5'], duration: 'wr' })]; + Formatter.FormatAndDraw(ctx, staveBar3, notesBar3); + const staveBar4 = new Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 250 - staveBar1.getModifierXShift()); + staveBar4.setBegBarType(BarlineType.REPEAT_BEGIN); + staveBar4.setEndBarType(BarlineType.REPEAT_END); + staveBar4.setContext(ctx).draw(); + const notesBar4 = [ + new StaveNote({ keys: ['c/4'], duration: 'q' }), + new StaveNote({ keys: ['d/4'], duration: 'q' }), + new StaveNote({ keys: ['b/4'], duration: 'qr' }), + new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, staveBar4, notesBar4); +} +function drawEndModifiers(options, contextBuilder) { + options.assert.expect(0); + const staveWidth = 230; + const blockHeight = 80; + let x = 10; + let y = 0; + const ctx = contextBuilder(options.elementId, 800, 700); + function drawStavesInTwoLines(endBarLine) { + function drawStave(x, y, width, begMods, endMods) { + const staveBar = new Stave(x, y, width - 10); + if (begMods) { + if (begMods.barLine !== undefined) { + staveBar.setBegBarType(begMods.barLine); + } + if (begMods.clef !== undefined) { + staveBar.addClef(begMods.clef); + } + if (begMods.keySig !== undefined) { + staveBar.addKeySignature(begMods.keySig); + } + if (begMods.timeSig !== undefined) { + staveBar.setTimeSignature(begMods.timeSig); + } + } + if (endMods) { + if (endMods.barLine !== undefined) { + staveBar.setEndBarType(endMods.barLine); + } + if (endMods.clef !== undefined) { + staveBar.addEndClef(endMods.clef); + } + if (endMods.keySig !== undefined) { + staveBar.setEndKeySignature(endMods.keySig); + } + if (endMods.timeSig !== undefined) { + staveBar.setEndTimeSignature(endMods.timeSig); + } + } + staveBar.setContext(ctx).draw(); + const notesBar = [ + new StaveNote({ keys: ['c/4'], duration: 'q' }), + new StaveNote({ keys: ['d/4'], duration: 'q' }), + new StaveNote({ keys: ['b/4'], duration: 'qr' }), + new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, staveBar, notesBar); + } + drawStave(x, y, staveWidth + 50, { barLine: BarlineType.REPEAT_BEGIN, clef: 'treble', keySig: 'A' }, { barLine: endBarLine, clef: 'bass' }); + x += staveWidth + 50; + drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, keySig: 'E' }); + x += staveWidth; + drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, timeSig: '2/4' }); + x += staveWidth; + x = 10; + y += blockHeight; + drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', timeSig: '2/4' }); + x += staveWidth; + drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'treble', keySig: 'Ab' }); + x += staveWidth; + drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', keySig: 'Ab', timeSig: '2/4' }); + x += staveWidth; + } + y = 0; + x = 10; + drawStavesInTwoLines(BarlineType.SINGLE); + y += blockHeight + 10; + x = 10; + drawStavesInTwoLines(BarlineType.DOUBLE); + y += blockHeight + 10; + x = 10; + drawStavesInTwoLines(BarlineType.REPEAT_END); + y += blockHeight + 10; + x = 10; + drawStavesInTwoLines(BarlineType.REPEAT_BOTH); +} +function drawStaveRepetition(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 725, 200); + const mm1 = new Stave(10, 50, 150); + mm1.addClef('treble'); + mm1.setRepetitionType(Repetition.type.DS_AL_FINE, options.params.yShift); + mm1.setMeasure(1); + mm1.setContext(ctx).draw(); + const notesmm1 = [ + new StaveNote({ keys: ['a/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, mm1, notesmm1); + const mm2 = new Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 150); + mm2.setRepetitionType(Repetition.type.TO_CODA, options.params.yShift); + mm2.setMeasure(2); + mm2.setContext(ctx).draw(); + const notesmm2 = [ + new StaveNote({ keys: ['a/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, mm2, notesmm2); + const mm3 = new Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 150); + mm3.setRepetitionType(Repetition.type.DS_AL_CODA, options.params.yShift); + mm3.setMeasure(3); + mm3.setContext(ctx).draw(); + const notesmm3 = [ + new StaveNote({ keys: ['a/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, mm3, notesmm3); + const mm4 = new Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 150); + mm4.setRepetitionType(Repetition.type.CODA_LEFT, options.params.yShift); + mm4.setMeasure(4); + mm4.setContext(ctx).draw(); + const notesmm4 = [ + new StaveNote({ keys: ['a/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['f/4'], duration: 'q' }), + new StaveNote({ keys: ['a/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, mm4, notesmm4); +} +function drawVolta(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 725, 200); + const mm1 = new Stave(10, 50, 125); + mm1.setBegBarType(BarlineType.REPEAT_BEGIN); + mm1.setRepetitionType(Repetition.type.SEGNO_LEFT); + mm1.addClef('treble'); + mm1.addKeySignature('A'); + mm1.setMeasure(1); + mm1.setSection('A', 0); + mm1.setContext(ctx).draw(); + const notesmm1 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm1, notesmm1); + const mm2 = new Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 60); + mm2.setRepetitionType(Repetition.type.CODA_RIGHT); + mm2.setMeasure(2); + mm2.setContext(ctx).draw(); + const notesmm2 = [new StaveNote({ keys: ['d/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm2, notesmm2); + const mm3 = new Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 60); + mm3.setVoltaType(VoltaType.BEGIN, '1.', -5); + mm3.setMeasure(3); + mm3.setContext(ctx).draw(); + const notesmm3 = [new StaveNote({ keys: ['e/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm3, notesmm3); + const mm4 = new Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 60); + mm4.setVoltaType(VoltaType.MID, '', -5); + mm4.setMeasure(4); + mm4.setContext(ctx).draw(); + const notesmm4 = [new StaveNote({ keys: ['f/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm4, notesmm4); + const mm5 = new Stave(mm4.getWidth() + mm4.getX(), mm1.getY(), 60); + mm5.setEndBarType(BarlineType.REPEAT_END); + mm5.setVoltaType(VoltaType.END, '', -5); + mm5.setMeasure(5); + mm5.setContext(ctx).draw(); + const notesmm5 = [new StaveNote({ keys: ['g/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm5, notesmm5); + const mm6 = new Stave(mm5.getWidth() + mm5.getX(), mm1.getY(), 60); + mm6.setVoltaType(VoltaType.BEGIN_END, '2.', -5); + mm6.setEndBarType(BarlineType.DOUBLE); + mm6.setMeasure(6); + mm6.setContext(ctx).draw(); + const notesmm6 = [new StaveNote({ keys: ['a/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm6, notesmm6); + const mm7 = new Stave(mm6.getWidth() + mm6.getX(), mm1.getY(), 60); + mm7.setMeasure(7); + mm7.setSection('B', 0); + mm7.setContext(ctx).draw(); + const notesmm7 = [new StaveNote({ keys: ['b/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm7, notesmm7); + const mm8 = new Stave(mm7.getWidth() + mm7.getX(), mm1.getY(), 60); + mm8.setEndBarType(BarlineType.DOUBLE); + mm8.setRepetitionType(Repetition.type.DS_AL_CODA); + mm8.setMeasure(8); + mm8.setContext(ctx).draw(); + const notesmm8 = [new StaveNote({ keys: ['c/5'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm8, notesmm8); + const mm9 = new Stave(mm8.getWidth() + mm8.getX() + 20, mm1.getY(), 125); + mm9.setEndBarType(BarlineType.END); + mm9.setRepetitionType(Repetition.type.CODA_LEFT); + mm9.addClef('treble'); + mm9.addKeySignature('A'); + mm9.setMeasure(9); + mm9.setContext(ctx).draw(); + const notesmm9 = [new StaveNote({ keys: ['d/5'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm9, notesmm9); +} +function drawVoltaModifier(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 1100, 200); + const mm1 = new Stave(10, 50, 175); + mm1.setBegBarType(BarlineType.REPEAT_BEGIN); + mm1.setVoltaType(VoltaType.BEGIN_END, '1.', -5); + mm1.addClef('treble'); + mm1.addKeySignature('A'); + mm1.setMeasure(1); + mm1.setSection('A', 0); + mm1.setContext(ctx).draw(); + const notesmm1 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm1, notesmm1); + const mm2 = new Stave(mm1.getX() + mm1.getWidth(), mm1.getY(), 175); + mm2.setBegBarType(BarlineType.REPEAT_BEGIN); + mm2.setRepetitionType(Repetition.type.DS); + mm2.setVoltaType(VoltaType.BEGIN, '2.', -5); + mm2.addClef('treble'); + mm2.addKeySignature('A'); + mm2.setMeasure(2); + mm2.setContext(ctx).draw(); + const notesmm2 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm2, notesmm2); + const mm3 = new Stave(mm2.getX() + mm2.getWidth(), mm2.getY(), 175); + mm3.setVoltaType(VoltaType.MID, '', -5); + mm3.setRepetitionType(Repetition.type.DS); + mm3.addClef('treble'); + mm3.addKeySignature('B'); + mm3.setMeasure(3); + mm3.setSection('B', 0); + mm3.setContext(ctx).draw(); + const notesmm3 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm3, notesmm3); + const mm4 = new Stave(mm3.getX() + mm3.getWidth(), mm3.getY(), 175); + mm4.setVoltaType(VoltaType.END, '1.', -5); + mm4.setRepetitionType(Repetition.type.DS); + mm4.addClef('treble'); + mm4.addKeySignature('A'); + mm4.setMeasure(4); + mm4.setSection('C', 0); + mm4.setContext(ctx).draw(); + const notesmm4 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm4, notesmm4); + const mm5 = new Stave(mm4.getX() + mm4.getWidth(), mm4.getY(), 175); + mm5.setEndBarType(BarlineType.DOUBLE); + mm5.setRepetitionType(Repetition.type.DS); + mm5.addClef('treble'); + mm5.addKeySignature('A'); + mm5.setMeasure(5); + mm5.setSection('D', 0); + mm5.setContext(ctx).draw(); + const notesmm5 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm5, notesmm5); + const mm6 = new Stave(mm5.getX() + mm5.getWidth(), mm5.getY(), 175); + mm6.setRepetitionType(Repetition.type.DS); + mm6.setMeasure(6); + mm6.setSection('E', 0); + mm6.setContext(ctx).draw(); + const notesmm6 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; + Formatter.FormatAndDraw(ctx, mm6, notesmm6); +} +function drawTempo(options, contextBuilder) { + options.assert.expect(0); + const ctx = contextBuilder(options.elementId, 725, 350); + const padding = 10; + let x = 0; + let y = 50; + function drawTempoStaveBar(width, tempo, tempo_y, notes) { + const staveBar = new Stave(padding + x, y, width); + if (x === 0) + staveBar.addClef('treble'); + staveBar.setTempo(tempo, tempo_y); + staveBar.setContext(ctx).draw(); + const notesBar = notes || [ + new StaveNote({ keys: ['c/4'], duration: 'q' }), + new StaveNote({ keys: ['d/4'], duration: 'q' }), + new StaveNote({ keys: ['b/4'], duration: 'q' }), + new StaveNote({ keys: ['c/4'], duration: 'q' }), + ]; + Formatter.FormatAndDraw(ctx, staveBar, notesBar); + x += width; + } + drawTempoStaveBar(120, { duration: 'q', dots: 1, bpm: 80 }, 0); + drawTempoStaveBar(100, { duration: '8', dots: 2, bpm: 90 }, 0); + drawTempoStaveBar(100, { duration: '16', dots: 1, bpm: 96 }, 0); + drawTempoStaveBar(100, { duration: '32', bpm: 70 }, 0); + drawTempoStaveBar(250, { name: 'Andante', bpm: 120 }, -20, [ + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/5'], duration: '8' }), + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + ]); + x = 0; + y += 150; + drawTempoStaveBar(120, { duration: 'w', bpm: 80 }, 0); + drawTempoStaveBar(100, { duration: 'h', bpm: 90 }, 0); + drawTempoStaveBar(100, { duration: 'q', bpm: 96 }, 0); + drawTempoStaveBar(100, { duration: '8', bpm: 70 }, 0); + drawTempoStaveBar(250, { name: 'Andante grazioso' }, 0, [ + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + new StaveNote({ keys: ['c/4'], duration: '8' }), + new StaveNote({ keys: ['d/4'], duration: '8' }), + new StaveNote({ keys: ['g/4'], duration: '8' }), + new StaveNote({ keys: ['e/4'], duration: '8' }), + ]); +} +function configureSingleLine(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + const stave = new Stave(10, 10, 300); + stave + .setConfigForLine(0, { visible: true }) + .setConfigForLine(1, { visible: false }) + .setConfigForLine(2, { visible: true }) + .setConfigForLine(3, { visible: false }) + .setConfigForLine(4, { visible: true }); + stave.setContext(ctx).draw(); + const config = stave.getConfigForLines(); + options.assert.equal(config[0].visible, true, 'getLinesConfiguration() - Line 0'); + options.assert.equal(config[1].visible, false, 'getLinesConfiguration() - Line 1'); + options.assert.equal(config[2].visible, true, 'getLinesConfiguration() - Line 2'); + options.assert.equal(config[3].visible, false, 'getLinesConfiguration() - Line 3'); + options.assert.equal(config[4].visible, true, 'getLinesConfiguration() - Line 4'); + options.assert.ok(true, 'all pass'); +} +function configureAllLines(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + const stave = new Stave(10, 10, 300); + stave + .setConfigForLines([{ visible: false }, {}, { visible: false }, { visible: true }, { visible: false }]) + .setContext(ctx) + .draw(); + const config = stave.getConfigForLines(); + options.assert.equal(config[0].visible, false, 'getLinesConfiguration() - Line 0'); + options.assert.equal(config[1].visible, true, 'getLinesConfiguration() - Line 1'); + options.assert.equal(config[2].visible, false, 'getLinesConfiguration() - Line 2'); + options.assert.equal(config[3].visible, true, 'getLinesConfiguration() - Line 3'); + options.assert.equal(config[4].visible, false, 'getLinesConfiguration() - Line 4'); + options.assert.ok(true, 'all pass'); +} +function drawStaveText(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 900, 140); + const stave = new Stave(300, 10, 300); + stave.setText('Violin', Modifier.Position.LEFT); + stave.setText('Right Text', Modifier.Position.RIGHT); + stave.setText('Above Text', Modifier.Position.ABOVE); + stave.setText('Below Text', Modifier.Position.BELOW); + stave.setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function drawStaveTextMultiLine(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 900, 200); + const stave = new Stave(300, 40, 300); + stave.setText('Violin', Modifier.Position.LEFT, { shift_y: -10 }); + stave.setText('2nd line', Modifier.Position.LEFT, { shift_y: 10 }); + stave.setText('Right Text', Modifier.Position.RIGHT, { shift_y: -10 }); + stave.setText('2nd line', Modifier.Position.RIGHT, { shift_y: 10 }); + stave.setText('Above Text', Modifier.Position.ABOVE, { shift_y: -10 }); + stave.setText('2nd line', Modifier.Position.ABOVE, { shift_y: 10 }); + stave.setText('Left Below Text', Modifier.Position.BELOW, { shift_y: -10, justification: TextJustification.LEFT }); + stave.setText('Right Below Text', Modifier.Position.BELOW, { shift_y: 10, justification: TextJustification.RIGHT }); + stave.setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function factoryAPI(options) { + const f = VexFlowTests.makeFactory(options, 900, 200); + const stave = f.Stave({ x: 300, y: 40, width: 300 }); + stave.setText('Violin', Modifier.Position.LEFT, { shift_y: -10 }); + stave.setText('2nd line', Modifier.Position.LEFT, { shift_y: 10 }); + f.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(StaveTests); +export { StaveTests }; diff --git a/build/esm/tests/staveconnector_tests.js b/build/esm/tests/staveconnector_tests.js new file mode 100644 index 0000000000..a22d123894 --- /dev/null +++ b/build/esm/tests/staveconnector_tests.js @@ -0,0 +1,402 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Modifier } from '../src/modifier.js'; +import { Stave } from '../src/stave.js'; +import { BarlineType } from '../src/stavebarline.js'; +import { StaveConnector } from '../src/staveconnector.js'; +const StaveConnectorTests = { + Start() { + QUnit.module('StaveConnector'); + const run = VexFlowTests.runTests; + run('Single Draw Test', drawSingle); + run('Single Draw Test, 4px Stave Line Thickness', drawSingle4pxStaveLines); + run('Single Both Sides Test', drawSingleBoth); + run('Double Draw Test', drawDouble); + run('Bold Double Line Left Draw Test', drawRepeatBegin); + run('Bold Double Line Right Draw Test', drawRepeatEnd); + run('Thin Double Line Right Draw Test', drawThinDouble); + run('Bold Double Lines Overlapping Draw Test', drawRepeatAdjacent); + run('Bold Double Lines Offset Draw Test', drawRepeatOffset); + run('Bold Double Lines Offset Draw Test 2', drawRepeatOffset2); + run('Brace Draw Test', drawBrace); + run('Brace Wide Draw Test', drawBraceWide); + run('Bracket Draw Test', drawBracket); + run('Combined Draw Test', drawCombined); + }, +}; +function drawSingle(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new StaveConnector(stave1, stave2); + connector.setType(StaveConnector.type.SINGLE); + connector.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + options.assert.ok(true, 'all pass'); +} +function drawSingle4pxStaveLines(options, contextBuilder) { + const oldThickness = Flow.STAVE_LINE_THICKNESS; + Flow.STAVE_LINE_THICKNESS = 4; + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new StaveConnector(stave1, stave2); + connector.setType(StaveConnector.type.SINGLE); + connector.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + Flow.STAVE_LINE_THICKNESS = oldThickness; + options.assert.ok(true, 'all pass'); +} +function drawSingleBoth(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector1 = new StaveConnector(stave1, stave2); + connector1.setType(StaveConnector.type.SINGLE_LEFT); + connector1.setContext(ctx); + const connector2 = new StaveConnector(stave1, stave2); + connector2.setType(StaveConnector.type.SINGLE_RIGHT); + connector2.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector1.draw(); + connector2.draw(); + options.assert.ok(true, 'all pass'); +} +function drawDouble(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new StaveConnector(stave1, stave2); + const line = new StaveConnector(stave1, stave2); + connector.setType(StaveConnector.type.DOUBLE); + connector.setContext(ctx); + line.setType(StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawBrace(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 450, 300); + const stave1 = new Stave(100, 10, 300); + const stave2 = new Stave(100, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new StaveConnector(stave1, stave2); + const line = new StaveConnector(stave1, stave2); + connector.setType(StaveConnector.type.BRACE); + connector.setContext(ctx); + connector.setText('Piano'); + line.setType(StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawBraceWide(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, -20, 300); + const stave2 = new Stave(25, 200, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new StaveConnector(stave1, stave2); + const line = new StaveConnector(stave1, stave2); + connector.setType(StaveConnector.type.BRACE); + connector.setContext(ctx); + line.setType(StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawBracket(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + const connector = new StaveConnector(stave1, stave2); + const line = new StaveConnector(stave1, stave2); + connector.setType(StaveConnector.type.BRACKET); + connector.setContext(ctx); + line.setType(StaveConnector.type.SINGLE); + connector.setContext(ctx); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + connector.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatBegin(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave1.setBegBarType(BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(BarlineType.REPEAT_BEGIN); + const line = new StaveConnector(stave1, stave2); + line.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatEnd(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave1.setEndBarType(BarlineType.REPEAT_END); + stave2.setEndBarType(BarlineType.REPEAT_END); + const line = new StaveConnector(stave1, stave2); + line.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawThinDouble(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 300); + const stave2 = new Stave(25, 120, 300); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave1.setEndBarType(BarlineType.DOUBLE); + stave2.setEndBarType(BarlineType.DOUBLE); + const line = new StaveConnector(stave1, stave2); + line.setType(StaveConnector.type.THIN_DOUBLE); + line.setContext(ctx); + stave1.draw(); + stave2.draw(); + line.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatAdjacent(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 150); + const stave2 = new Stave(25, 120, 150); + const stave3 = new Stave(175, 10, 150); + const stave4 = new Stave(175, 120, 150); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave1.setEndBarType(BarlineType.REPEAT_END); + stave2.setEndBarType(BarlineType.REPEAT_END); + stave3.setEndBarType(BarlineType.END); + stave4.setEndBarType(BarlineType.END); + stave1.setBegBarType(BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(BarlineType.REPEAT_BEGIN); + stave3.setBegBarType(BarlineType.REPEAT_BEGIN); + stave4.setBegBarType(BarlineType.REPEAT_BEGIN); + const connector1 = new StaveConnector(stave1, stave2); + const connector2 = new StaveConnector(stave1, stave2); + const connector3 = new StaveConnector(stave3, stave4); + const connector4 = new StaveConnector(stave3, stave4); + connector1.setContext(ctx); + connector2.setContext(ctx); + connector3.setContext(ctx); + connector4.setContext(ctx); + connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + connector1.draw(); + connector2.draw(); + connector3.draw(); + connector4.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatOffset2(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 150); + const stave2 = new Stave(25, 120, 150); + const stave3 = new Stave(175, 10, 150); + const stave4 = new Stave(175, 120, 150); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave1.addClef('treble'); + stave2.addClef('bass'); + stave3.addClef('alto'); + stave4.addClef('treble'); + stave1.addTimeSignature('4/4'); + stave2.addTimeSignature('4/4'); + stave3.addTimeSignature('6/8'); + stave4.addTimeSignature('6/8'); + stave1.setEndBarType(BarlineType.REPEAT_END); + stave2.setEndBarType(BarlineType.REPEAT_END); + stave3.setEndBarType(BarlineType.END); + stave4.setEndBarType(BarlineType.END); + stave1.setBegBarType(BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(BarlineType.REPEAT_BEGIN); + stave3.setBegBarType(BarlineType.REPEAT_BEGIN); + stave4.setBegBarType(BarlineType.REPEAT_BEGIN); + const connector1 = new StaveConnector(stave1, stave2); + const connector2 = new StaveConnector(stave1, stave2); + const connector3 = new StaveConnector(stave3, stave4); + const connector4 = new StaveConnector(stave3, stave4); + const connector5 = new StaveConnector(stave3, stave4); + connector1.setContext(ctx); + connector2.setContext(ctx); + connector3.setContext(ctx); + connector4.setContext(ctx); + connector5.setContext(ctx); + connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector5.setType(StaveConnector.type.SINGLE_LEFT); + connector1.setXShift(stave1.getModifierXShift()); + connector3.setXShift(stave3.getModifierXShift()); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + connector1.draw(); + connector2.draw(); + connector3.draw(); + connector4.draw(); + connector5.draw(); + options.assert.ok(true, 'all pass'); +} +function drawRepeatOffset(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 300); + const stave1 = new Stave(25, 10, 150); + const stave2 = new Stave(25, 120, 150); + const stave3 = new Stave(185, 10, 150); + const stave4 = new Stave(185, 120, 150); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave1.addClef('bass'); + stave2.addClef('alto'); + stave3.addClef('treble'); + stave4.addClef('tenor'); + stave3.addKeySignature('Ab'); + stave4.addKeySignature('Ab'); + stave1.addTimeSignature('4/4'); + stave2.addTimeSignature('4/4'); + stave3.addTimeSignature('6/8'); + stave4.addTimeSignature('6/8'); + stave1.setEndBarType(BarlineType.REPEAT_END); + stave2.setEndBarType(BarlineType.REPEAT_END); + stave3.setEndBarType(BarlineType.END); + stave4.setEndBarType(BarlineType.END); + stave1.setBegBarType(BarlineType.REPEAT_BEGIN); + stave2.setBegBarType(BarlineType.REPEAT_BEGIN); + stave3.setBegBarType(BarlineType.REPEAT_BEGIN); + stave4.setBegBarType(BarlineType.REPEAT_BEGIN); + const connector1 = new StaveConnector(stave1, stave2); + const connector2 = new StaveConnector(stave1, stave2); + const connector3 = new StaveConnector(stave3, stave4); + const connector4 = new StaveConnector(stave3, stave4); + const connector5 = new StaveConnector(stave3, stave4); + connector1.setContext(ctx); + connector2.setContext(ctx); + connector3.setContext(ctx); + connector4.setContext(ctx); + connector5.setContext(ctx); + connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); + connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); + connector5.setType(StaveConnector.type.SINGLE_LEFT); + connector1.setXShift(stave1.getModifierXShift()); + connector3.setXShift(stave3.getModifierXShift()); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + connector1.draw(); + connector2.draw(); + connector3.draw(); + connector4.draw(); + connector5.draw(); + options.assert.ok(true, 'all pass'); +} +function drawCombined(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 550, 700); + const stave1 = new Stave(150, 10, 300); + const stave2 = new Stave(150, 100, 300); + const stave3 = new Stave(150, 190, 300); + const stave4 = new Stave(150, 280, 300); + const stave5 = new Stave(150, 370, 300); + const stave6 = new Stave(150, 460, 300); + const stave7 = new Stave(150, 560, 300); + stave1.setText('Violin', Modifier.Position.LEFT); + stave1.setContext(ctx); + stave2.setContext(ctx); + stave3.setContext(ctx); + stave4.setContext(ctx); + stave5.setContext(ctx); + stave6.setContext(ctx); + stave7.setContext(ctx); + const conn_single = new StaveConnector(stave1, stave7); + const conn_double = new StaveConnector(stave2, stave3); + const conn_bracket = new StaveConnector(stave4, stave7); + const conn_none = new StaveConnector(stave4, stave5); + const conn_brace = new StaveConnector(stave6, stave7); + conn_single.setType(StaveConnector.type.SINGLE); + conn_double.setType(StaveConnector.type.DOUBLE); + conn_bracket.setType(StaveConnector.type.BRACKET); + conn_brace.setType(StaveConnector.type.BRACE); + conn_brace.setXShift(-5); + conn_double.setText('Piano'); + conn_none.setText('Multiple', { shift_y: -15 }); + conn_none.setText('Line Text', { shift_y: 15 }); + conn_brace.setText('Harpsichord'); + conn_single.setContext(ctx); + conn_double.setContext(ctx); + conn_bracket.setContext(ctx); + conn_none.setContext(ctx); + conn_brace.setContext(ctx); + stave1.draw(); + stave2.draw(); + stave3.draw(); + stave4.draw(); + stave5.draw(); + stave6.draw(); + stave7.draw(); + conn_single.draw(); + conn_double.draw(); + conn_bracket.draw(); + conn_none.draw(); + conn_brace.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(StaveConnectorTests); +export { StaveConnectorTests }; diff --git a/build/esm/tests/stavehairpin_tests.js b/build/esm/tests/stavehairpin_tests.js new file mode 100644 index 0000000000..8da96e5f8a --- /dev/null +++ b/build/esm/tests/stavehairpin_tests.js @@ -0,0 +1,90 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { StaveHairpin } from '../src/stavehairpin.js'; +const StaveHairpinTests = { + Start() { + QUnit.module('StaveHairpin'); + const run = VexFlowTests.runTests; + run('Simple StaveHairpin', simple); + run('Horizontal Offset StaveHairpin', horizontal); + run('Vertical Offset StaveHairpin', vertical); + run('Height StaveHairpin', height); + }, +}; +function drawHairpin(first_note, last_note, ctx, type, position, options) { + const hairpin = new StaveHairpin({ first_note, last_note }, type); + hairpin.setContext(ctx); + hairpin.setPosition(position); + if (options) { + hairpin.setRenderOptions(options); + } + hairpin.draw(); +} +function createTest(drawTwoHairpins) { + return (options) => { + const factory = VexFlowTests.makeFactory(options); + const ctx = factory.getContext(); + const stave = factory.Stave(); + const notes = [ + factory + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) + .addModifier(factory.Accidental({ type: 'b' }), 0) + .addModifier(factory.Accidental({ type: '#' }), 1), + factory.StaveNote({ keys: ['d/4'], stem_direction: 1, duration: '4' }), + factory.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }), + factory.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '4' }), + ]; + const voice = factory.Voice().addTickables(notes); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + drawTwoHairpins(ctx, notes); + options.assert.ok(true, 'Simple Test'); + }; +} +const simple = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 4); + drawHairpin(notes[1], notes[3], ctx, 2, 3); +}); +const horizontal = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 3, { + height: 10, + vo: 20, + left_ho: 20, + right_ho: -20, + }); + drawHairpin(notes[3], notes[3], ctx, 2, 4, { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 120, + }); +}); +const vertical = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 4, { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, + }); + drawHairpin(notes[2], notes[3], ctx, 2, 4, { + height: 10, + y_shift: -15, + left_shift_px: 2, + right_shift_px: 0, + }); +}); +const height = createTest((ctx, notes) => { + drawHairpin(notes[0], notes[2], ctx, 1, 4, { + height: 10, + y_shift: 0, + left_shift_px: 0, + right_shift_px: 0, + }); + drawHairpin(notes[2], notes[3], ctx, 2, 4, { + height: 15, + y_shift: 0, + left_shift_px: 2, + right_shift_px: 0, + }); +}); +VexFlowTests.register(StaveHairpinTests); +export { StaveHairpinTests }; diff --git a/build/esm/tests/staveline_tests.js b/build/esm/tests/staveline_tests.js new file mode 100644 index 0000000000..b8169d62a2 --- /dev/null +++ b/build/esm/tests/staveline_tests.js @@ -0,0 +1,122 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Dot } from '../src/dot.js'; +import { Font, FontStyle } from '../src/font.js'; +const StaveLineTests = { + Start() { + QUnit.module('StaveLine'); + const run = VexFlowTests.runTests; + run('Simple StaveLine', simple0); + run('StaveLine Arrow Options', simple1); + }, +}; +function simple0(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave().addClef('treble'); + const notes = [ + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + f.StaveNote({ keys: ['c/5'], duration: '4', clef: 'treble' }), + f.StaveNote({ keys: ['c/4', 'g/4', 'b/4'], duration: '4', clef: 'treble' }), + f.StaveNote({ keys: ['f/4', 'a/4', 'f/5'], duration: '4', clef: 'treble' }), + ]; + const voice = f.Voice().addTickables(notes); + f.StaveLine({ + from: notes[0], + to: notes[1], + first_indices: [0], + last_indices: [0], + options: { + font: { family: Font.SERIF, size: 12, style: FontStyle.ITALIC }, + text: 'gliss.', + }, + }); + const staveLine2 = f.StaveLine({ + from: notes[2], + to: notes[3], + first_indices: [2, 1, 0], + last_indices: [0, 1, 2], + }); + staveLine2.render_options.line_dash = [10, 10]; + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function simple1(options) { + const f = VexFlowTests.makeFactory(options, 770); + const stave = f.Stave().addClef('treble'); + const notes = [ + f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', clef: 'treble' }), + f + .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' }) + .addModifier(f.Accidental({ type: '#' }), 2), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0), + f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }), + f.StaveNote({ keys: ['c/4', 'd/4', 'g/4'], duration: '4', clef: 'treble' }), + f + .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' }) + .addModifier(f.Accidental({ type: '#' }), 2), + ]; + Dot.buildAndAttach([notes[0]], { all: true }); + const voice = f.Voice().setStrict(false).addTickables(notes); + const staveLine0 = f.StaveLine({ + from: notes[0], + to: notes[1], + first_indices: [0], + last_indices: [0], + options: { text: 'Left' }, + }); + const staveLine4 = f.StaveLine({ + from: notes[2], + to: notes[3], + first_indices: [1], + last_indices: [1], + options: { text: 'Right' }, + }); + const staveLine1 = f.StaveLine({ + from: notes[4], + to: notes[5], + first_indices: [0], + last_indices: [0], + options: { text: 'Center' }, + }); + const staveLine2 = f.StaveLine({ + from: notes[6], + to: notes[7], + first_indices: [1], + last_indices: [0], + }); + const staveLine3 = f.StaveLine({ + from: notes[6], + to: notes[7], + first_indices: [2], + last_indices: [2], + options: { text: 'Top' }, + }); + staveLine0.render_options.draw_end_arrow = true; + staveLine0.render_options.text_justification = 1; + staveLine0.render_options.text_position_vertical = 2; + staveLine1.render_options.draw_end_arrow = true; + staveLine1.render_options.arrowhead_length = 30; + staveLine1.render_options.line_width = 5; + staveLine1.render_options.text_justification = 2; + staveLine1.render_options.text_position_vertical = 2; + staveLine4.render_options.line_width = 2; + staveLine4.render_options.draw_end_arrow = true; + staveLine4.render_options.draw_start_arrow = true; + staveLine4.render_options.arrowhead_angle = 0.5; + staveLine4.render_options.arrowhead_length = 20; + staveLine4.render_options.text_justification = 3; + staveLine4.render_options.text_position_vertical = 2; + staveLine2.render_options.draw_start_arrow = true; + staveLine2.render_options.line_dash = [5, 4]; + staveLine3.render_options.draw_end_arrow = true; + staveLine3.render_options.draw_start_arrow = true; + staveLine3.render_options.color = 'red'; + staveLine3.render_options.text_position_vertical = 1; + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +VexFlowTests.register(StaveLineTests); +export { StaveLineTests }; diff --git a/build/esm/tests/stavemodifier_tests.js b/build/esm/tests/stavemodifier_tests.js new file mode 100644 index 0000000000..c551f136ab --- /dev/null +++ b/build/esm/tests/stavemodifier_tests.js @@ -0,0 +1,51 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Stave } from '../src/stave.js'; +import { BarlineType } from '../src/stavebarline.js'; +import { StaveModifierPosition } from '../src/stavemodifier.js'; +const StaveModifierTests = { + Start() { + QUnit.module('StaveModifier'); + const run = VexFlowTests.runTests; + run('Stave Draw Test', draw); + run('Begin & End StaveModifier Test', drawBeginAndEnd); + }, +}; +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + const stave = new Stave(10, 10, 300); + stave.setContext(ctx); + stave.draw(); + options.assert.equal(stave.getYForNote(0), 100, 'getYForNote(0)'); + options.assert.equal(stave.getYForLine(5), 100, 'getYForLine(5)'); + options.assert.equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line'); + options.assert.equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line'); + options.assert.ok(true, 'all pass'); +} +function drawBeginAndEnd(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + const stave = new Stave(10, 10, 400); + stave.setContext(ctx); + stave.setTimeSignature('C|'); + stave.setKeySignature('Db'); + stave.setClef('treble'); + stave.setBegBarType(BarlineType.REPEAT_BEGIN); + stave.setEndClef('alto'); + stave.setEndTimeSignature('9/8'); + stave.setEndKeySignature('G', 'C#'); + stave.setEndBarType(BarlineType.DOUBLE); + stave.draw(); + const END = StaveModifierPosition.END; + stave.setY(100); + stave.setTimeSignature('3/4'); + stave.setKeySignature('G', 'C#'); + stave.setClef('bass'); + stave.setBegBarType(BarlineType.SINGLE); + stave.setClef('treble', undefined, undefined, END); + stave.setTimeSignature('C', undefined, END); + stave.setKeySignature('F', undefined, END); + stave.setEndBarType(BarlineType.SINGLE); + stave.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(StaveModifierTests); +export { StaveModifierTests }; diff --git a/build/esm/tests/stavenote_tests.js b/build/esm/tests/stavenote_tests.js new file mode 100644 index 0000000000..b9ec479136 --- /dev/null +++ b/build/esm/tests/stavenote_tests.js @@ -0,0 +1,928 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental } from '../src/accidental.js'; +import { Annotation, AnnotationVerticalJustify } from '../src/annotation.js'; +import { Articulation } from '../src/articulation.js'; +import { Beam } from '../src/beam.js'; +import { Dot } from '../src/dot.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { Fraction } from '../src/fraction.js'; +import { FretHandFinger } from '../src/frethandfinger.js'; +import { Modifier } from '../src/modifier.js'; +import { ModifierContext } from '../src/modifiercontext.js'; +import { Stave } from '../src/stave.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Stem } from '../src/stem.js'; +import { StringNumber } from '../src/stringnumber.js'; +import { Stroke } from '../src/strokes.js'; +import { TickContext } from '../src/tickcontext.js'; +const StaveNoteTests = { + Start() { + QUnit.module('StaveNote'); + QUnit.test('Tick', ticks); + QUnit.test('Tick - New API', ticksNewAPI); + QUnit.test('Stem', stem); + QUnit.test('Automatic Stem Direction', autoStem); + QUnit.test('Stem Extension Pitch', stemExtensionPitch); + QUnit.test('Displacement after calling setStemDirection', setStemDirectionDisplacement); + QUnit.test('StaveLine', staveLine); + QUnit.test('Width', width); + QUnit.test('TickContext', tickContext); + const run = VexFlowTests.runTests; + run('StaveNote Draw - Treble', drawBasic, { clef: 'treble', octaveShift: 0, restKey: 'r/4' }); + run('StaveNote BoundingBoxes - Treble', drawBoundingBoxes, { clef: 'treble', octaveShift: 0, restKey: 'r/4' }); + run('StaveNote Draw - Alto', drawBasic, { clef: 'alto', octaveShift: -1, restKey: 'r/4' }); + run('StaveNote Draw - Tenor', drawBasic, { clef: 'tenor', octaveShift: -1, restKey: 'r/3' }); + run('StaveNote Draw - Bass', drawBasic, { clef: 'bass', octaveShift: -2, restKey: 'r/3' }); + run('StaveNote Draw - Harmonic And Muted', drawHarmonicAndMuted); + run('StaveNote Draw - Slash', drawSlash); + run('Displacements', displacements); + run('StaveNote Draw - Bass 2', drawBass); + run('StaveNote Draw - Key Styles', drawKeyStyles); + run('StaveNote Draw - StaveNote Stem Styles', drawNoteStemStyles); + run('StaveNote Draw - StaveNote Stem Lengths', drawNoteStemLengths); + run('StaveNote Draw - StaveNote Flag Styles', drawNoteStylesWithFlag); + run('StaveNote Draw - StaveNote Styles', drawNoteStyles); + run('Stave, Ledger Line, Beam, Stem and Flag Styles', drawBeamStyles); + run('Flag and Dot Placement - Stem Up', dotsAndFlagsStemUp); + run('Flag and Dots Placement - Stem Down', dotsAndFlagsStemDown); + run('Beam and Dot Placement - Stem Up', dotsAndBeamsUp); + run('Beam and Dot Placement - Stem Down', dotsAndBeamsDown); + run('No Padding', noPadding); + run('Note Heads Placement - Simple', noteHeadsSimple); + run('Note Heads Placement - Hidden Notes', noteHeadsHidden); + run('Center Aligned Note', centerAlignedRest); + run('Center Aligned Note with Articulation', centerAlignedRestFermata); + run('Center Aligned Note with Annotation', centerAlignedRestAnnotation); + run('Center Aligned Note - Multi Voice', centerAlignedMultiVoice); + run('Center Aligned Note with Multiple Modifiers', centerAlignedNoteMultiModifiers); + VexFlowTests.runSVGTest('Interactive Mouseover StaveNote', drawBasic, { + clef: 'treble', + octaveShift: 0, + restKey: 'r/4', + ui: true, + }); + }, +}; +const staveNote = (struct) => new StaveNote(struct); +function draw(note, stave, context, x, drawBoundingBox = false, addModifierContext = true) { + note.setStave(stave); + if (addModifierContext) { + note.addToModifierContext(new ModifierContext()); + } + new TickContext().addTickable(note).preFormat().setX(x); + note.setContext(context).draw(); + if (drawBoundingBox) { + const bb = note.getBoundingBox(); + context.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); + context.stroke(); + } + return note; +} +function ticks(assert) { + const BEAT = (1 * Flow.RESOLUTION) / 4; + const tickTests = { + 'Breve note': ['1/2', 8.0, 'n'], + 'Whole note': ['w', 4.0, 'n'], + 'Quarter note': ['q', 1.0, 'n'], + 'Dotted half note': ['hd', 3.0, 'n'], + 'Doubled-dotted half note': ['hdd', 3.5, 'n'], + 'Triple-dotted half note': ['hddd', 3.75, 'n'], + 'Dotted half rest': ['hdr', 3.0, 'r'], + 'Double-dotted half rest': ['hddr', 3.5, 'r'], + 'Triple-dotted half rest': ['hdddr', 3.75, 'r'], + 'Dotted harmonic quarter note': ['qdh', 1.5, 'h'], + 'Double-dotted harmonic quarter note': ['qddh', 1.75, 'h'], + 'Triple-dotted harmonic quarter note': ['qdddh', 1.875, 'h'], + 'Dotted muted 8th note': ['8dm', 0.75, 'm'], + 'Double-dotted muted 8th note': ['8ddm', 0.875, 'm'], + 'Triple-dotted muted 8th note': ['8dddm', 0.9375, 'm'], + }; + Object.keys(tickTests).forEach((testName) => { + const testData = tickTests[testName]; + const durationString = testData[0]; + const expectedBeats = testData[1]; + const expectedNoteType = testData[2]; + const note = new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: durationString }); + assert.equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats'); + assert.equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType); + }); + assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, "Invalid note duration '8.7' throws BadArguments exception"); + assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); + assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); +} +function ticksNewAPI(assert) { + const BEAT = (1 * Flow.RESOLUTION) / 4; + const tickTests = { + 'Breve note': [{ duration: '1/2' }, 8.0, 'n'], + 'Whole note': [{ duration: 'w' }, 4.0, 'n'], + 'Quarter note': [{ duration: 'q' }, 1.0, 'n'], + 'Dotted half note': [{ duration: 'h', dots: 1 }, 3.0, 'n'], + 'Doubled-dotted half note': [{ duration: 'h', dots: 2 }, 3.5, 'n'], + 'Triple-dotted half note': [{ duration: 'h', dots: 3 }, 3.75, 'n'], + 'Dotted half rest': [{ duration: 'h', dots: 1, type: 'r' }, 3.0, 'r'], + 'Double-dotted half rest': [{ duration: 'h', dots: 2, type: 'r' }, 3.5, 'r'], + 'Triple-dotted half rest': [{ duration: 'h', dots: 3, type: 'r' }, 3.75, 'r'], + 'Dotted harmonic quarter note': [{ duration: 'q', dots: 1, type: 'h' }, 1.5, 'h'], + 'Double-dotted harmonic quarter note': [{ duration: 'q', dots: 2, type: 'h' }, 1.75, 'h'], + 'Triple-dotted harmonic quarter note': [{ duration: 'q', dots: 3, type: 'h' }, 1.875, 'h'], + 'Dotted muted 8th note': [{ duration: '8', dots: 1, type: 'm' }, 0.75, 'm'], + 'Double-dotted muted 8th note': [{ duration: '8', dots: 2, type: 'm' }, 0.875, 'm'], + 'Triple-dotted muted 8th note': [{ duration: '8', dots: 3, type: 'm' }, 0.9375, 'm'], + }; + Object.keys(tickTests).forEach(function (testName) { + const testData = tickTests[testName]; + const noteData = testData[0]; + const expectedBeats = testData[1]; + const expectedNoteType = testData[2]; + noteData.keys = ['c/4', 'e/4', 'g/4']; + const note = new StaveNote(noteData); + assert.equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats'); + assert.equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType); + }); + assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, "Invalid note duration '8.7' throws BadArguments exception"); + assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); + assert.throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); +} +function stem(assert) { + const note = new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'w' }); + assert.equal(note.getStemDirection(), Stem.UP, 'Default note has UP stem'); +} +function autoStem(assert) { + const testData = [ + [['c/5', 'e/5', 'g/5'], Stem.DOWN], + [['e/4', 'g/4', 'c/5'], Stem.UP], + [['c/5'], Stem.DOWN], + [['a/4', 'e/5', 'g/5'], Stem.DOWN], + [['b/4'], Stem.DOWN], + ]; + testData.forEach((td) => { + const keys = td[0]; + const expectedStemDirection = td[1]; + const note = new StaveNote({ keys: keys, auto_stem: true, duration: '8' }); + assert.equal(note.getStemDirection(), expectedStemDirection, 'Stem must be ' + (expectedStemDirection === Stem.UP ? 'up' : 'down')); + }); +} +function stemExtensionPitch(assert) { + const testData = [ + [['c/5', 'e/5', 'g/5'], 0, 0], + [['e/4', 'g/4', 'c/5'], 0, 0], + [['c/5'], 0, 0], + [['f/3'], 15, 0], + [['f/3'], 15, Stem.UP], + [['f/3'], 0, Stem.DOWN], + [['f/3', 'e/5'], 0, 0], + [['g/6'], 25, 0], + [['g/6'], 25, Stem.DOWN], + [['g/6'], 0, Stem.UP], + ]; + testData.forEach((td) => { + const keys = td[0]; + const expectedStemExtension = td[1]; + const overrideStemDirection = td[2]; + let note; + if (overrideStemDirection === 0) { + note = new StaveNote({ keys: keys, auto_stem: true, duration: '4' }); + } + else { + note = new StaveNote({ keys: keys, duration: '4', stem_direction: overrideStemDirection }); + } + assert.equal(note.getStemExtension(), expectedStemExtension, 'For ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension); + const stave = new Stave(10, 10, 300, { spacing_between_lines_px: 20 }); + note.setStave(stave); + assert.equal(note.getStemExtension(), expectedStemExtension * 2, 'For wide staff ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension * 2); + }); +} +function setStemDirectionDisplacement(assert) { + function getDisplacements(note) { + return note.noteHeads.map((noteHead) => noteHead.isDisplaced()); + } + const stemUpDisplacements = [false, true, false]; + const stemDownDisplacements = [true, false, false]; + const note = new StaveNote({ keys: ['c/5', 'd/5', 'g/5'], stem_direction: Stem.UP, duration: '4' }); + assert.deepEqual(getDisplacements(note), stemUpDisplacements); + note.setStemDirection(Stem.DOWN); + assert.deepEqual(getDisplacements(note), stemDownDisplacements); + note.setStemDirection(Stem.UP); + assert.deepEqual(getDisplacements(note), stemUpDisplacements); +} +function staveLine(assert) { + const stave = new Stave(10, 10, 300); + const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }); + note.setStave(stave); + const props = note.getKeyProps(); + assert.equal(props[0].line, 0, 'C/4 on line 0'); + assert.equal(props[1].line, 1, 'E/4 on line 1'); + assert.equal(props[2].line, 2.5, 'A/4 on line 2.5'); + const ys = note.getYs(); + assert.equal(ys.length, 3, 'Chord should be rendered on three lines'); + assert.equal(ys[0], 100, 'Line for C/4'); + assert.equal(ys[1], 90, 'Line for E/4'); + assert.equal(ys[2], 75, 'Line for A/4'); +} +function width(assert) { + const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }); + assert.throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width'); +} +function tickContext(assert) { + const stave = new Stave(10, 10, 400); + const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }).setStave(stave); + new TickContext().addTickable(note).preFormat().setX(10).setPadding(0); + assert.expect(0); +} +function drawBasic(options, contextBuilder) { + const clef = options.params.clef; + const octaveShift = options.params.octaveShift; + const restKey = options.params.restKey; + const ctx = contextBuilder(options.elementId, 700, 180); + const stave = new Stave(10, 30, 750); + stave.setContext(ctx); + stave.addClef(clef); + stave.draw(); + const lowerKeys = ['c/', 'e/', 'a/']; + const higherKeys = ['c/', 'e/', 'a/']; + for (let k = 0; k < lowerKeys.length; k++) { + lowerKeys[k] = lowerKeys[k] + (4 + octaveShift); + higherKeys[k] = higherKeys[k] + (5 + octaveShift); + } + const restKeys = [restKey]; + const noteStructs = [ + { clef: clef, keys: higherKeys, duration: '1/2' }, + { clef: clef, keys: lowerKeys, duration: 'w' }, + { clef: clef, keys: higherKeys, duration: 'h' }, + { clef: clef, keys: lowerKeys, duration: 'q' }, + { clef: clef, keys: higherKeys, duration: '8' }, + { clef: clef, keys: lowerKeys, duration: '16' }, + { clef: clef, keys: higherKeys, duration: '32' }, + { clef: clef, keys: higherKeys, duration: '64' }, + { clef: clef, keys: higherKeys, duration: '128' }, + { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '8', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '16', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '32', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '64', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '128', stem_direction: Stem.DOWN }, + { clef: clef, keys: restKeys, duration: '1/2r' }, + { clef: clef, keys: restKeys, duration: 'wr' }, + { clef: clef, keys: restKeys, duration: 'hr' }, + { clef: clef, keys: restKeys, duration: 'qr' }, + { clef: clef, keys: restKeys, duration: '8r' }, + { clef: clef, keys: restKeys, duration: '16r' }, + { clef: clef, keys: restKeys, duration: '32r' }, + { clef: clef, keys: restKeys, duration: '64r' }, + { clef: clef, keys: restKeys, duration: '128r' }, + { keys: ['x/4'], duration: 'h' }, + ]; + options.assert.expect(noteStructs.length * 2); + const colorDescendants = (parentItem, color) => () => parentItem.querySelectorAll('*').forEach((child) => { + child.setAttribute('fill', color); + child.setAttribute('stroke', color); + }); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25); + if (options.params.ui) { + const item = note.getSVGElement(); + if (item) { + item.addEventListener('mouseover', colorDescendants(item, 'green'), false); + item.addEventListener('mouseout', colorDescendants(item, 'black'), false); + } + } + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawBoundingBoxes(options, contextBuilder) { + const clef = options.params.clef; + const octaveShift = options.params.octaveShift; + const restKey = options.params.restKey; + const ctx = contextBuilder(options.elementId, 700, 180); + const stave = new Stave(10, 30, 750); + stave.setContext(ctx); + stave.addClef(clef); + stave.draw(); + const lowerKeys = ['c/', 'e/', 'a/']; + const higherKeys = ['c/', 'e/', 'a/']; + for (let k = 0; k < lowerKeys.length; k++) { + lowerKeys[k] = lowerKeys[k] + (4 + octaveShift); + higherKeys[k] = higherKeys[k] + (5 + octaveShift); + } + const restKeys = [restKey]; + const noteStructs = [ + { clef: clef, keys: higherKeys, duration: '1/2' }, + { clef: clef, keys: lowerKeys, duration: 'w' }, + { clef: clef, keys: higherKeys, duration: 'h' }, + { clef: clef, keys: lowerKeys, duration: 'q' }, + { clef: clef, keys: higherKeys, duration: '8' }, + { clef: clef, keys: lowerKeys, duration: '16' }, + { clef: clef, keys: higherKeys, duration: '32' }, + { clef: clef, keys: higherKeys, duration: '64' }, + { clef: clef, keys: higherKeys, duration: '128' }, + { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '8', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '16', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '32', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '64', stem_direction: Stem.DOWN }, + { clef: clef, keys: lowerKeys, duration: '128' }, + { clef: clef, keys: restKeys, duration: '1/2r' }, + { clef: clef, keys: restKeys, duration: 'wr' }, + { clef: clef, keys: restKeys, duration: 'hr' }, + { clef: clef, keys: restKeys, duration: 'qr' }, + { clef: clef, keys: restKeys, duration: '8r' }, + { clef: clef, keys: restKeys, duration: '16r' }, + { clef: clef, keys: restKeys, duration: '32r' }, + { clef: clef, keys: restKeys, duration: '64r' }, + { clef: clef, keys: restKeys, duration: '128r' }, + { keys: ['x/4'], duration: 'h' }, + ]; + options.assert.expect(noteStructs.length * 2); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25, true, false); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawBass(options, contextBuilder) { + options.assert.expect(40); + const ctx = contextBuilder(options.elementId, 600, 280); + const stave = new Stave(10, 10, 650); + stave.setContext(ctx); + stave.addClef('bass'); + stave.draw(); + const noteStructs = [ + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '1/2' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'w' }, + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: 'h' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q' }, + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '8' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16' }, + { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '32' }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'h', stem_direction: Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q', stem_direction: Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '8', stem_direction: Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16', stem_direction: Stem.DOWN }, + { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '32', stem_direction: Stem.DOWN }, + { keys: ['r/4'], duration: '1/2r' }, + { keys: ['r/4'], duration: 'wr' }, + { keys: ['r/4'], duration: 'hr' }, + { keys: ['r/4'], duration: 'qr' }, + { keys: ['r/4'], duration: '8r' }, + { keys: ['r/4'], duration: '16r' }, + { keys: ['r/4'], duration: '32r' }, + { keys: ['x/4'], duration: 'h' }, + ]; + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function displacements(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 700, 155); + ctx.scale(0.9, 0.9); + const stave = new Stave(10, 10, 675); + stave.setContext(ctx); + stave.draw(); + const noteStructs = [ + { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: '1/2' }, + { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: 'w' }, + { keys: ['d/4', 'e/4', 'f/4'], duration: 'h' }, + { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: 'q' }, + { keys: ['e/3', 'b/3', 'c/4', 'e/4', 'f/4', 'g/5', 'a/5'], duration: '8' }, + { keys: ['a/3', 'c/4', 'e/4', 'g/4', 'a/4', 'b/4'], duration: '16' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32' }, + { keys: ['c/4', 'e/4', 'a/4', 'a/4'], duration: '64' }, + { keys: ['g/3', 'c/4', 'd/4', 'e/4'], duration: 'h', stem_direction: Stem.DOWN }, + { keys: ['d/4', 'e/4', 'f/4'], duration: 'q', stem_direction: Stem.DOWN }, + { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'd/4', 'e/4', 'f/4', 'g/4', 'a/4'], duration: '16', stem_direction: Stem.DOWN }, + { keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6'], duration: '32', stem_direction: Stem.DOWN }, + { + keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6', 'e/6'], + duration: '64', + stem_direction: Stem.DOWN, + }, + ]; + options.assert.expect(noteStructs.length * 2); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 45); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawHarmonicAndMuted(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 1000, 180); + const stave = new Stave(10, 10, 950); + stave.setContext(ctx); + stave.draw(); + const noteStructs = [ + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128h' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8h', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16h', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32h', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64h', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128h', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128m' }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '8m', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '16m', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '32m', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '64m', stem_direction: Stem.DOWN }, + { keys: ['c/4', 'e/4', 'a/4'], duration: '128m', stem_direction: Stem.DOWN }, + ]; + options.assert.expect(noteStructs.length * 2); + for (let i = 0; i < noteStructs.length; ++i) { + const note = draw(staveNote(noteStructs[i]), stave, ctx, i * 25 + 5); + options.assert.ok(note.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawSlash(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 700, 180); + const stave = new Stave(10, 10, 650); + stave.setContext(ctx); + stave.draw(); + const notes = [ + { keys: ['b/4'], duration: '1/2s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: 'ws', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: 'hs', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: 'qs', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '16s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '32s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '64s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '128s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '1/2s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: 'ws', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: 'hs', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: 'qs', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '16s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '32s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '64s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '128s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP }, + ]; + const stave_notes = notes.map((struct) => new StaveNote(struct)); + const beam1 = new Beam([stave_notes[16], stave_notes[17]]); + const beam2 = new Beam([stave_notes[18], stave_notes[19]]); + Formatter.FormatAndDraw(ctx, stave, stave_notes, false); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + options.assert.ok('Slash Note Heads'); +} +function drawKeyStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + ctx.scale(3, 3); + const stave = new Stave(10, 0, 100); + const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' }) + .setStave(stave) + .addModifier(new Accidental('b'), 1) + .setKeyStyle(1, { shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue' }); + new TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok(note.getX() > 0, 'Note has X value'); + options.assert.ok(note.getYs().length > 0, 'Note has Y values'); +} +function drawNoteStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + const stave = new Stave(10, 0, 100); + ctx.scale(3, 3); + const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' }) + .setStave(stave) + .addModifier(new Accidental('b'), 1); + note.setStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + new TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok(note.getX() > 0, 'Note has X value'); + options.assert.ok(note.getYs().length > 0, 'Note has Y values'); +} +function drawNoteStemStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + const stave = new Stave(10, 0, 100); + ctx.scale(3, 3); + const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' }) + .setStave(stave) + .addModifier(new Accidental('b'), 1); + note.setStemStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + new TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok('Note Stem Style'); +} +function drawNoteStemLengths(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 975, 150); + const stave = new Stave(10, 10, 975); + stave.setContext(ctx).draw(); + const keys = [ + 'e/3', + 'f/3', + 'g/3', + 'a/3', + 'b/3', + 'c/4', + 'd/4', + 'e/4', + 'f/4', + 'g/4', + 'f/5', + 'g/5', + 'a/5', + 'b/5', + 'c/6', + 'd/6', + 'e/6', + 'f/6', + 'g/6', + 'a/6', + ]; + const notes = []; + let note; + let i; + for (i = 0; i < keys.length; i++) { + let duration = 'q'; + if (i % 2 === 1) { + duration = '8'; + } + note = new StaveNote({ keys: [keys[i]], duration, auto_stem: true }).setStave(stave); + new TickContext().addTickable(note); + note.setContext(ctx); + notes.push(note); + } + const whole_keys = ['e/3', 'a/3', 'f/5', 'a/5', 'd/6', 'a/6']; + for (i = 0; i < whole_keys.length; i++) { + note = new StaveNote({ keys: [whole_keys[i]], duration: 'w' }).setStave(stave); + new TickContext().addTickable(note); + note.setContext(ctx); + notes.push(note); + } + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok('Note Stem Length'); +} +function drawNoteStylesWithFlag(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 300, 280); + const stave = new Stave(10, 0, 100); + ctx.scale(3, 3); + const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' }) + .setStave(stave) + .addModifier(new Accidental('b'), 1); + note.setFlagStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); + new TickContext().addTickable(note).preFormat().setX(25); + stave.setContext(ctx).draw(); + note.setContext(ctx).draw(); + options.assert.ok(note.getX() > 0, 'Note has X value'); + options.assert.ok(note.getYs().length > 0, 'Note has Y values'); +} +function drawBeamStyles(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 160); + const stave = new Stave(10, 10, 380); + stave.setStyle({ strokeStyle: '#EEAAEE', lineWidth: 3 }); + stave.setContext(ctx); + stave.draw(); + const notes = [ + { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['b/4'], duration: '8', stem_direction: Stem.UP }, + { keys: ['b/4'], duration: '8', stem_direction: Stem.UP }, + { keys: ['d/6'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['c/6', 'd/6'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['d/6', 'e/6'], duration: '8', stem_direction: Stem.DOWN }, + { keys: ['e/6', 'f/6'], duration: '8', stem_direction: Stem.DOWN }, + ]; + const staveNotes = notes.map((note) => new StaveNote(note)); + const beam1 = new Beam(staveNotes.slice(0, 2)); + const beam2 = new Beam(staveNotes.slice(3, 5)); + const beam3 = new Beam(staveNotes.slice(5, 7)); + const beam4 = new Beam(staveNotes.slice(7, 9)); + beam1.setStyle({ fillStyle: 'blue', strokeStyle: 'blue' }); + staveNotes[0].setKeyStyle(0, { fillStyle: 'purple' }); + staveNotes[0].setStemStyle({ strokeStyle: 'green' }); + staveNotes[1].setStemStyle({ strokeStyle: 'orange' }); + staveNotes[1].setKeyStyle(0, { fillStyle: 'darkturquoise' }); + staveNotes[5].setStyle({ fillStyle: 'tomato', strokeStyle: 'tomato' }); + beam3.setStyle({ shadowBlur: 4, shadowColor: 'blue' }); + staveNotes[9].setLedgerLineStyle({ fillStyle: 'lawngreen', strokeStyle: 'lawngreen', lineWidth: 1 }); + staveNotes[9].setFlagStyle({ fillStyle: 'orange', strokeStyle: 'orange' }); + Formatter.FormatAndDraw(ctx, stave, staveNotes, false); + beam1.setContext(ctx).draw(); + beam2.setContext(ctx).draw(); + beam3.setContext(ctx).draw(); + beam4.setContext(ctx).draw(); + options.assert.ok('draw beam styles'); +} +function dotsAndFlagsStemUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + ctx.scale(1.0, 1.0); + const stave = new Stave(10, 10, 975); + const notes = [ + staveNote({ keys: ['f/4'], duration: '4', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '8', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '16', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '32', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '64', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '128', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '4', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '8', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '16', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '32' }), + staveNote({ keys: ['g/4'], duration: '64', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '128', stem_direction: Stem.UP }), + ]; + Dot.buildAndAttach(notes, { all: true }); + Dot.buildAndAttach([notes[5], notes[11]], { all: true }); + stave.setContext(ctx).draw(); + for (let i = 0; i < notes.length; ++i) { + draw(notes[i], stave, ctx, i * 65); + } + options.assert.ok(true, 'Full Dot'); +} +function dotsAndFlagsStemDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 160); + ctx.scale(1.0, 1.0); + const stave = new Stave(10, 10, 975); + const staveNotes = [ + staveNote({ keys: ['e/5'], duration: '4', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '8', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '16', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '32', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '64', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '128', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '4', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '8', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '16', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '32', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '64', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '128', stem_direction: Stem.DOWN }), + ]; + Dot.buildAndAttach(staveNotes, { all: true }); + stave.setContext(ctx).draw(); + for (let i = 0; i < staveNotes.length; ++i) { + draw(staveNotes[i], stave, ctx, i * 65); + } + options.assert.ok(true, 'Full Dot'); +} +function dotsAndBeamsUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 150); + ctx.scale(1.0, 1.0); + const stave = new Stave(10, 10, 975); + const staveNotes = [ + staveNote({ keys: ['f/4'], duration: '8', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '16', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '32', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '64', stem_direction: Stem.UP }), + staveNote({ keys: ['f/4'], duration: '128', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '8', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '16', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '32' }), + staveNote({ keys: ['g/4'], duration: '64', stem_direction: Stem.UP }), + staveNote({ keys: ['g/4'], duration: '128', stem_direction: Stem.UP }), + ]; + Dot.buildAndAttach(staveNotes, { all: true }); + Dot.buildAndAttach([staveNotes[4], staveNotes[9]], { all: true }); + const beam = new Beam(staveNotes); + stave.setContext(ctx).draw(); + for (let i = 0; i < staveNotes.length; ++i) { + draw(staveNotes[i], stave, ctx, i * 65); + } + beam.setContext(ctx).draw(); + options.assert.ok(true, 'Full Dot'); +} +function dotsAndBeamsDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 800, 160); + ctx.scale(1.0, 1.0); + const stave = new Stave(10, 10, 975); + const staveNotes = [ + staveNote({ keys: ['e/5'], duration: '8', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '16', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '32', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '64', stem_direction: Stem.DOWN }), + staveNote({ keys: ['e/5'], duration: '128', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '8', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '16', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '32', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '64', stem_direction: Stem.DOWN }), + staveNote({ keys: ['d/5'], duration: '128', stem_direction: Stem.DOWN }), + ]; + Dot.buildAndAttach(staveNotes, { all: true }); + const beam = new Beam(staveNotes); + stave.setContext(ctx).draw(); + for (let i = 0; i < staveNotes.length; ++i) { + draw(staveNotes[i], stave, ctx, i * 65); + } + beam.setContext(ctx).draw(); + options.assert.ok(true, 'Full Dot'); +} +function noteHeadsSimple(options) { + const vf = VexFlowTests.makeFactory(options, 800, 250); + const score = vf.EasyScore(); + const system1 = vf.System({ y: 100, x: 50, width: 200 }); + system1 + .addStave({ + voices: [ + score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]), + score.voice(score.notes('g4/w')), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + const system2 = vf.System({ y: 100, x: 250, width: 150 }); + system2.addStave({ + voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(score.notes('b4/w'))], + }); + const system3 = vf.System({ y: 100, x: 400, width: 150 }); + system3.addStave({ + voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))], + }); + const system4 = vf.System({ y: 100, x: 550, width: 150 }); + system4.addStave({ + voices: [ + score.voice(score.notes('e4/q, e4/q/r, e4/h/r')), + score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r')), + ], + }); + vf.draw(); + options.assert.expect(0); +} +function noPadding(options) { + const vf = VexFlowTests.makeFactory(options, 800, 500); + const score = vf.EasyScore(); + function newStave(y, noPadding) { + let system = vf.System({ y, x: 50, width: 200, noPadding }); + system + .addStave({ + voices: [ + score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q, a4/h')]), + score.voice(score.notes('g4/w')), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + system = vf.System({ y, x: 250, width: 150, noPadding }); + system.addStave({ + voices: [score.voice(score.notes('b4/h, b4/h')), score.voice(score.notes('b4/w'))], + }); + system = vf.System({ y, x: 400, width: 150, noPadding }); + system.addStave({ + voices: [score.voice(score.notes('d5/h, d5/h')), score.voice(score.notes('e4/w'))], + }); + system = vf.System({ y, x: 550, width: 150, noPadding }); + system.addStave({ + voices: [score.voice(score.notes('e4/q, e4/q, e4/h')), score.voice(score.notes('e4/8, e4/8, e4/q, e4/h'))], + }); + } + newStave(100, true); + newStave(200, false); + vf.draw(); + options.assert.expect(0); +} +function noteHeadsHidden(options) { + const vf = VexFlowTests.makeFactory(options, 800, 250); + const score = vf.EasyScore(); + const system1 = vf.System({ y: 100, x: 50, width: 200 }); + const notes1 = score.notes('g4/w'); + notes1[0].render_options.draw = false; + system1 + .addStave({ + voices: [ + score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]), + score.voice(notes1), + ], + }) + .addClef('treble') + .addTimeSignature('4/4'); + const system2 = vf.System({ y: 100, x: 250, width: 150 }); + const notes2 = score.notes('b4/w'); + notes2[0].render_options.draw = false; + system2.addStave({ + voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(notes2)], + }); + const system3 = vf.System({ y: 100, x: 400, width: 150 }); + system3.addStave({ + voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))], + }); + const system4 = vf.System({ y: 100, x: 550, width: 150 }); + const notes4 = score.notes('e4/q, e4/q/r, e4/h/r'); + notes4[0].render_options.draw = false; + notes4[2].render_options.draw = false; + system4.addStave({ + voices: [score.voice(notes4), score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r'))], + }); + vf.draw(); + options.assert.expect(0); +} +function centerAlignedRest(options) { + const f = VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + const note = f.StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedRestFermata(options) { + const f = VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + const note = f + .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }) + .addModifier(new Articulation('a@a').setPosition(3), 0); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedRestAnnotation(options) { + const f = VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + const note = f + .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }) + .addModifier(new Annotation('Whole measure rest').setVerticalJustification(AnnotationVerticalJustify.TOP), 0); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedNoteMultiModifiers(options) { + const f = VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); + function newFinger(num, pos) { + return new FretHandFinger(num).setPosition(pos); + } + const note = f + .StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', align_center: true }) + .addModifier(new Annotation('Test').setPosition(3), 0) + .addStroke(0, new Stroke(2)) + .addModifier(new Accidental('#'), 1) + .addModifier(newFinger('3', Modifier.Position.LEFT), 0) + .addModifier(newFinger('2', Modifier.Position.LEFT), 2) + .addModifier(newFinger('1', Modifier.Position.RIGHT), 1) + .addModifier(new StringNumber('4').setPosition(Modifier.Position.BELOW), 2); + Dot.buildAndAttach([note], { all: true }); + const voice = f.Voice().setStrict(false).addTickables([note]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function centerAlignedMultiVoice(options) { + const f = VexFlowTests.makeFactory(options, 400, 160); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('3/8'); + const custom_duration = new Fraction(3, 8); + const notes0 = [ + f.StaveNote({ + keys: ['c/4'], + duration: '1r', + align_center: true, + duration_override: custom_duration, + }), + ]; + const createStaveNote = (struct) => f.StaveNote(struct); + const notes1 = [ + { keys: ['b/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + ].map(createStaveNote); + notes1[1].addModifier(f.Accidental({ type: '#' }), 0); + f.Beam({ notes: notes1 }); + const voice0 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes0); + const voice1 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes1); + f.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); + f.draw(); + options.assert.ok(true); +} +VexFlowTests.register(StaveNoteTests); +export { StaveNoteTests }; diff --git a/build/esm/tests/stavetie_tests.js b/build/esm/tests/stavetie_tests.js new file mode 100644 index 0000000000..ff9194fbb5 --- /dev/null +++ b/build/esm/tests/stavetie_tests.js @@ -0,0 +1,108 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Stem } from '../src/stem.js'; +const StaveTieTests = { + Start() { + QUnit.module('StaveTie'); + const run = VexFlowTests.runTests; + run('Simple StaveTie', simple); + run('Chord StaveTie', chord); + run('Stem Up StaveTie', stemUp); + run('No End Note With Clef', noEndNote1); + run('No End Note', noEndNote2); + run('No Start Note With Clef', noStartNote1); + run('No Start Note', noStartNote2); + run('Set Direction Down', setDirectionDown); + run('Set Direction Up', setDirectionUp); + }, +}; +function createTest(notesData, setupTies) { + return (options) => { + const factory = VexFlowTests.makeFactory(options, 300); + const stave = factory.Stave(); + const score = factory.EasyScore(); + const notes = score.notes(notesData[0], notesData[1]); + const voice = score.voice(notes); + setupTies(factory, notes, stave); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + options.assert.ok(true); + }; +} +const simple = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + }); +}); +const chord = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1, 2], + last_indices: [0, 1, 2], + }); +}); +const stemUp = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'up' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1, 2], + last_indices: [0, 1, 2], + }); +}); +const noEndNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => { + stave.addEndClef('treble'); + f.StaveTie({ + from: notes[1], + first_indices: [2], + last_indices: [2], + text: 'slow.', + }); +}); +const noEndNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[1], + first_indices: [2], + last_indices: [2], + text: 'slow.', + }); +}); +const noStartNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => { + stave.addClef('treble'); + f.StaveTie({ + to: notes[0], + first_indices: [2], + last_indices: [2], + text: 'H', + }); +}); +const noStartNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + to: notes[0], + first_indices: [2], + last_indices: [2], + text: 'H', + }); +}); +const setDirectionDown = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + options: { direction: Stem.DOWN }, + }); +}); +const setDirectionUp = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { + f.StaveTie({ + from: notes[0], + to: notes[1], + first_indices: [0, 1], + last_indices: [0, 1], + options: { direction: Stem.UP }, + }); +}); +VexFlowTests.register(StaveTieTests); +export { StaveTieTests }; diff --git a/build/esm/tests/stringnumber_tests.js b/build/esm/tests/stringnumber_tests.js new file mode 100644 index 0000000000..63ab45f459 --- /dev/null +++ b/build/esm/tests/stringnumber_tests.js @@ -0,0 +1,283 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Glyph } from '../src/glyph.js'; +import { Renderer } from '../src/renderer.js'; +import { Stave } from '../src/stave.js'; +import { BarlineType } from '../src/stavebarline.js'; +import { Stroke } from '../src/strokes.js'; +const StringNumberTests = { + Start() { + QUnit.module('StringNumber'); + const run = VexFlowTests.runTests; + run('String Number In Notation', drawMultipleMeasures); + run('String Number In Notation - no circle', drawMultipleMeasures, { drawCircle: false }); + run('Fret Hand Finger In Notation', drawFretHandFingers); + run('Multi Voice With Strokes, String & Finger Numbers', multi); + run('Complex Measure With String & Finger Numbers', drawAccidentals); + run('Shifted Notehead, Multiple Modifiers', shiftedNoteheadMultipleModifiers); + }, +}; +function drawMultipleMeasures(options) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y; + const f = VexFlowTests.makeFactory(options, 775, 200); + const score = f.EasyScore(); + const stave1 = f.Stave({ width: 300 }).setEndBarType(BarlineType.DOUBLE).addClef('treble'); + const notes1 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/4, (c4 f4 g4)/4', { stem: 'down' }); + notes1[0] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_a = options.params) === null || _a === void 0 ? void 0 : _a.drawCircle), 0) + .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_b = options.params) === null || _b === void 0 ? void 0 : _b.drawCircle), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_c = options.params) === null || _c === void 0 ? void 0 : _c.drawCircle), 2); + notes1[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_d = options.params) === null || _d === void 0 ? void 0 : _d.drawCircle), 0) + .addModifier(f.Accidental({ type: '#' }).setAsCautionary(), 1) + .addModifier(f + .StringNumber({ number: '3', position: 'above' }, (_e = options.params) === null || _e === void 0 ? void 0 : _e.drawCircle) + .setLastNote(notes1[3]) + .setLineEndType(Renderer.LineEndType.DOWN), 2); + notes1[2] + .addModifier(f.StringNumber({ number: '5', position: 'left' }, (_f = options.params) === null || _f === void 0 ? void 0 : _f.drawCircle), 0) + .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_g = options.params) === null || _g === void 0 ? void 0 : _g.drawCircle), 2) + .addModifier(f.Accidental({ type: '#' }), 1); + notes1[3] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_h = options.params) === null || _h === void 0 ? void 0 : _h.drawCircle).setOffsetY(7), 0) + .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_j = options.params) === null || _j === void 0 ? void 0 : _j.drawCircle).setOffsetY(6), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_k = options.params) === null || _k === void 0 ? void 0 : _k.drawCircle).setOffsetY(-6), 2); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(BarlineType.DOUBLE); + const notes2 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'up' }); + notes2[0] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_l = options.params) === null || _l === void 0 ? void 0 : _l.drawCircle), 0) + .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_m = options.params) === null || _m === void 0 ? void 0 : _m.drawCircle), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_o = options.params) === null || _o === void 0 ? void 0 : _o.drawCircle), 2); + notes2[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_p = options.params) === null || _p === void 0 ? void 0 : _p.drawCircle), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f + .StringNumber({ number: '3', position: 'above' }, (_q = options.params) === null || _q === void 0 ? void 0 : _q.drawCircle) + .setLastNote(notes2[3]) + .setDashed(false), 2); + notes2[2] + .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_r = options.params) === null || _r === void 0 ? void 0 : _r.drawCircle), 2) + .addModifier(f.Accidental({ type: '#' }), 1); + notes2[3] + .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_s = options.params) === null || _s === void 0 ? void 0 : _s.drawCircle).setOffsetY(7), 0) + .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_t = options.params) === null || _t === void 0 ? void 0 : _t.drawCircle).setOffsetY(6), 1) + .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_u = options.params) === null || _u === void 0 ? void 0 : _u.drawCircle).setOffsetY(-6), 2); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + const stave3 = f + .Stave({ x: stave2.getWidth() + stave2.getX(), y: stave2.getY(), width: 150 }) + .setEndBarType(BarlineType.END); + const notesBar3 = score.notes('(c4 e4 g4 a4)/1.'); + notesBar3[0] + .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_v = options.params) === null || _v === void 0 ? void 0 : _v.drawCircle), 0) + .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_w = options.params) === null || _w === void 0 ? void 0 : _w.drawCircle), 1) + .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_x = options.params) === null || _x === void 0 ? void 0 : _x.drawCircle), 2) + .addModifier(f.StringNumber({ number: '2', position: 'above' }, (_y = options.params) === null || _y === void 0 ? void 0 : _y.drawCircle), 3); + const voice3 = score.voice(notesBar3, { time: '6/4' }); + f.Formatter().joinVoices([voice3]).formatToStave([voice3], stave3); + f.draw(); + options.assert.ok(true, 'String Number'); +} +function drawFretHandFingers(options) { + const f = VexFlowTests.makeFactory(options, 725, 200); + const score = f.EasyScore(); + const stave1 = f.Stave({ width: 350 }).setEndBarType(BarlineType.DOUBLE).addClef('treble'); + const notes1 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'down' }); + notes1[0] + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); + notes1[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); + notes1[2] + .addModifier(f.Fingering({ number: '3', position: 'below' }), 0) + .addModifier(f.Fingering({ number: '4', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'above' }), 2) + .addModifier(f.Accidental({ type: '#' }), 1); + notes1[3] + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0) + .addModifier(f.Fingering({ number: '4', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1) + .addModifier(f.Fingering({ number: '0', position: 'right' }).setOffsetY(-5), 2) + .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 350 }) + .setEndBarType(BarlineType.END); + const notes2 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/8, (c4 f4 g4)/4.[stem="down"]', { + stem: 'up', + }); + notes2[0] + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'above' }), 2); + notes2[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); + notes2[2] + .addModifier(f.Fingering({ number: '3', position: 'below' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '1', position: 'right' }), 2) + .addModifier(f.Accidental({ type: '#' }), 2); + notes2[3] + .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) + .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0) + .addModifier(f.Fingering({ number: '4', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1) + .addModifier(f.Fingering({ number: '1', position: 'right' }).setOffsetY(-6), 2) + .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'String Number'); +} +function multi(options) { + const f = VexFlowTests.makeFactory(options, 700, 200); + const score = f.EasyScore(); + const stave = f.Stave(); + const notes1 = score.notes('(c4 e4 g4)/4, (a3 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' }); + notes1[0] + .addStroke(0, new Stroke(5)) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) + .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2); + notes1[1] + .addStroke(0, new Stroke(6)) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2); + notes1[2] + .addStroke(0, new Stroke(2)) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '0', position: 'right' }), 1) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) + .addModifier(f.Fingering({ number: '1', position: 'left' }), 2) + .addModifier(f.StringNumber({ number: '3', position: 'right' }), 2); + notes1[3] + .addStroke(0, new Stroke(1)) + .addModifier(f.StringNumber({ number: '3', position: 'left' }), 2) + .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1); + const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' }); + notes2[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.StringNumber({ number: '6', position: 'below' }), 0); + notes2[2].addModifier(f.Accidental({ type: '#' }), 0); + notes2[4].addModifier(f.Fingering({ number: '0', position: 'left' }), 0); + notes2[4].addModifier(f.StringNumber({ number: '6', position: 'left' }).setOffsetX(15).setOffsetY(18), 0); + const voices = [score.voice(notes2), score.voice(notes1)]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + f.draw(); + options.assert.ok(true, 'Strokes Test Multi Voice'); +} +function drawAccidentals(options) { + const f = VexFlowTests.makeFactory(options, 750); + const glyphScale = 39; + const clefWidth = Glyph.getWidth('gClef', glyphScale); + const notes = [ + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }), + f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }), + ]; + notes[0] + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 3) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Fingering({ number: '2', position: 'right' }), 4) + .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 5) + .addModifier(f.Accidental({ type: '#' }), 5); + notes[1] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Accidental({ type: '#' }), 5); + notes[2] + .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) + .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Fingering({ number: '3', position: 'left' }), 3) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Fingering({ number: '2', position: 'right' }), 4) + .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 5) + .addModifier(f.Accidental({ type: '#' }), 5); + notes[3] + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Accidental({ type: '#' }), 4) + .addModifier(f.Accidental({ type: '#' }), 5); + const voice = f.Voice().addTickables(notes); + const ctx = f.getContext(); + const formatter = f.Formatter().joinVoices([voice]); + const stavePadding = clefWidth + Stave.defaultPadding + 10; + const nwidth = Math.max(formatter.preCalculateMinTotalWidth([voice]), 490 - stavePadding); + formatter.format([voice], nwidth); + const stave = f + .Stave({ x: 0, y: 0, width: nwidth + stavePadding }) + .setContext(ctx) + .setEndBarType(BarlineType.DOUBLE) + .addClef('treble') + .draw(); + voice.draw(ctx, stave); + options.assert.ok(true, 'String Number'); +} +function shiftedNoteheadMultipleModifiers(options) { + const f = VexFlowTests.makeFactory(options, 900, 150); + const score = f.EasyScore(); + score.set({ time: '6/4' }); + const stave = f.Stave({ width: 900 }).setEndBarType(BarlineType.END).addClef('treble'); + const notes = ['A4 B4', 'B4 C5', 'A4 B#4', 'B4 C#5', 'A#4 B#4', 'B#4 C#5'] + .map((keys) => score.notes(`(${keys})/q`)) + .flat(); + notes.forEach((note) => { + note + .addModifier(f.StringNumber({ number: '2', position: 'left' }, true), 1) + .addModifier(f.StringNumber({ number: '2', position: 'right' }, true), 1); + }); + const voice = score.voice(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'String Number'); +} +VexFlowTests.register(StringNumberTests); +export { StringNumberTests }; diff --git a/build/esm/tests/strokes_tests.js b/build/esm/tests/strokes_tests.js new file mode 100644 index 0000000000..13671c5443 --- /dev/null +++ b/build/esm/tests/strokes_tests.js @@ -0,0 +1,275 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Barline, Beam, Bend, Stroke } from '../src/index.js'; +const StrokesTests = { + Start() { + QUnit.module('Strokes'); + const run = VexFlowTests.runTests; + run('Strokes - Brush/Roll/Rasquedo', brushRollRasquedo); + run('Strokes - Arpeggio directionless (without arrows)', arpeggioDirectionless); + run('Strokes - Multi Voice', multiVoice); + run('Strokes - Notation and Tab', notesWithTab); + run('Strokes - Multi-Voice Notation and Tab', multiNotationAndTab); + }, +}; +function brushRollRasquedo(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const score = f.EasyScore(); + const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE); + const notes1 = score.notes('(a3 e4 a4)/4, (c4 e4 g4), (c4 e4 g4), (c4 e4 g4)', { stem: 'up' }); + notes1[0].addStroke(0, new Stroke(1)); + notes1[1] + .addStroke(0, new Stroke(2)) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 0); + notes1[2].addStroke(0, new Stroke(1)); + notes1[3].addStroke(0, new Stroke(2)); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(Barline.type.DOUBLE); + const notes2 = score.notes('(c4 d4 g4)/4, (c4 d4 g4), (c4 d4 g4), (c4 d4 a4)', { stem: 'up' }); + notes2[0].addStroke(0, new Stroke(3)); + notes2[1].addStroke(0, new Stroke(4)); + notes2[2].addStroke(0, new Stroke(5)); + notes2[3] + .addStroke(0, new Stroke(6)) + .addModifier(f.Accidental({ type: 'bb' }), 0) + .addModifier(f.Accidental({ type: 'bb' }), 1) + .addModifier(f.Accidental({ type: 'bb' }), 2); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'Brush/Roll/Rasquedo'); +} +function arpeggioDirectionless(options) { + const f = VexFlowTests.makeFactory(options, 700, 200); + const score = f.EasyScore(); + const stave1 = f.Stave({ x: 100, width: 500 }).setEndBarType(Barline.type.DOUBLE); + const notes1 = score.notes('(g4 b4 d5)/4, (g4 b4 d5 g5), (g4 b4 d5 g5), (g4 b4 d5)', { stem: 'up' }); + const graceNoteStructs = [ + { keys: ['e/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + ]; + const graceNotes = graceNoteStructs.map((graceNoteStruct) => f.GraceNote(graceNoteStruct)); + const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes, slur: false }); + graceNoteGroup.beamNotes(); + notes1[0].addStroke(0, new Stroke(7)); + notes1[1] + .addStroke(0, new Stroke(7)) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1) + .addModifier(f.Accidental({ type: '#' }), 2) + .addModifier(f.Accidental({ type: '#' }), 3); + notes1[2] + .addStroke(0, new Stroke(7)) + .addModifier(f.Accidental({ type: 'b' }), 1) + .addModifier(graceNoteGroup, 0); + notes1[3].addStroke(0, new Stroke(7)).addModifier(f.NoteSubGroup({ + notes: [f.ClefNote({ type: 'treble', options: { size: 'default', annotation: '8va' } })], + }), 0); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + f.draw(); + options.assert.ok(true, 'Arpeggio directionless (without arrows)'); +} +function multiVoice(options) { + const f = VexFlowTests.makeFactory(options, 500, 200); + const score = f.EasyScore(); + const stave = f.Stave(); + const notes1 = score.notes('(c4 e4 g4)/4, (c4 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' }); + notes1[0].addStroke(0, new Stroke(5)); + notes1[1] + .addStroke(0, new Stroke(6)) + .addModifier(f.Accidental({ type: '#' }), 0) + .addModifier(f.Accidental({ type: '#' }), 2); + notes1[2].addStroke(0, new Stroke(2)); + notes1[3].addStroke(0, new Stroke(1)); + const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' }); + f.Beam({ notes: notes2.slice(0, 4) }); + f.Beam({ notes: notes2.slice(4, 8) }); + const voices = [notes1, notes2].map((notes) => score.voice(notes)); + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Strokes Test Multi Voice'); +} +function multiNotationAndTab(options) { + const f = VexFlowTests.makeFactory(options, 400, 275); + const score = f.EasyScore(); + const stave = f.Stave().addClef('treble'); + const notes1 = score.notes('(g4 b4 e5)/4, (g4 b4 e5), (g4 b4 e5), (g4 b4 e5)', { stem: 'up' }); + notes1[0].addStroke(0, new Stroke(3, { all_voices: false })); + notes1[1].addStroke(0, new Stroke(6)); + notes1[2].addStroke(0, new Stroke(2, { all_voices: false })); + notes1[3].addStroke(0, new Stroke(1)); + const notes2 = score.notes('g3/4, g3, g3, g3', { stem: 'down' }); + f.TabStave({ y: 100 }).addClef('tab').setNoteStartX(stave.getNoteStartX()); + const tabNotes1 = [ + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 0 }, + { str: 2, fret: 0 }, + { str: 1, fret: 1 }, + ], + duration: '4', + }), + ]; + tabNotes1[0].addStroke(0, new Stroke(3, { all_voices: false })); + tabNotes1[1].addStroke(0, new Stroke(6)); + tabNotes1[2].addStroke(0, new Stroke(2, { all_voices: false })); + tabNotes1[3].addStroke(0, new Stroke(1)); + const tabNotes2 = [ + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), + ]; + const voices = [notes1, notes2, tabNotes1, tabNotes2].map((notes) => score.voice(notes)); + f.Formatter().joinVoices(voices).formatToStave(voices, stave); + f.draw(); + options.assert.ok(true, 'Strokes Test Notation & Tab Multi Voice'); +} +function notesWithTab(options) { + const f = VexFlowTests.makeFactory(options, 500, 300); + const stave = f.Stave({ x: 15, y: 40, width: 450 }).addClef('treble'); + const notes = [ + f + .StaveNote({ keys: ['b/4', 'd/5', 'g/5'], stem_direction: -1, duration: '4' }) + .addModifier(f.Accidental({ type: 'b' }), 1) + .addModifier(f.Accidental({ type: 'b' }), 0), + f.StaveNote({ keys: ['c/5', 'd/5'], stem_direction: -1, duration: '4' }), + f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }), + f + .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'e/5', 'a/5'], stem_direction: 1, duration: '8' }) + .addModifier(f.Accidental({ type: '#' }), 3), + f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }), + f + .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'f/5', 'a/5'], stem_direction: 1, duration: '8' }) + .addModifier(f.Accidental({ type: '#' }), 3) + .addModifier(f.Accidental({ type: '#' }), 4), + ]; + const tabstave = f + .TabStave({ x: stave.getX(), y: 140, width: 450 }) + .addClef('tab') + .setNoteStartX(stave.getNoteStartX()); + const tabNotes = [ + f + .TabNote({ + positions: [ + { str: 1, fret: 3 }, + { str: 2, fret: 2 }, + { str: 3, fret: 3 }, + ], + duration: '4', + }) + .addModifier(new Bend('Full'), 0), + f + .TabNote({ + positions: [ + { str: 2, fret: 3 }, + { str: 3, fret: 5 }, + ], + duration: '4', + }) + .addModifier(new Bend('Unison'), 1), + f.TabNote({ + positions: [ + { str: 3, fret: 7 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 7 }, + ], + duration: '8', + }), + f.TabNote({ + positions: [ + { str: 1, fret: 5 }, + { str: 2, fret: 5 }, + { str: 3, fret: 6 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 5 }, + ], + duration: '8', + }), + f.TabNote({ + positions: [ + { str: 3, fret: 7 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 7 }, + ], + duration: '8', + }), + f.TabNote({ + positions: [ + { str: 1, fret: 5 }, + { str: 2, fret: 5 }, + { str: 3, fret: 6 }, + { str: 4, fret: 7 }, + { str: 5, fret: 7 }, + { str: 6, fret: 5 }, + ], + duration: '8', + }), + ]; + notes[0].addStroke(0, new Stroke(1)); + notes[1].addStroke(0, new Stroke(2)); + notes[2].addStroke(0, new Stroke(3)); + notes[3].addStroke(0, new Stroke(4)); + notes[4].addStroke(0, new Stroke(5)); + notes[5].addStroke(0, new Stroke(6)); + tabNotes[0].addStroke(0, new Stroke(1)); + tabNotes[1].addStroke(0, new Stroke(2)); + tabNotes[2].addStroke(0, new Stroke(3)); + tabNotes[3].addStroke(0, new Stroke(4)); + tabNotes[4].addStroke(0, new Stroke(5)); + tabNotes[5].addStroke(0, new Stroke(6)); + f.StaveConnector({ + top_stave: stave, + bottom_stave: tabstave, + type: 'bracket', + }); + f.StaveConnector({ + top_stave: stave, + bottom_stave: tabstave, + type: 'single', + }); + const voice = f.Voice().addTickables(notes); + const tabVoice = f.Voice().addTickables(tabNotes); + const beams = Beam.applyAndGetBeams(voice); + f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).formatToStave([voice, tabVoice], stave); + f.draw(); + beams.forEach(function (beam) { + beam.setContext(f.getContext()).draw(); + }); + options.assert.ok(true); +} +VexFlowTests.register(StrokesTests); +export { StrokesTests }; diff --git a/build/esm/tests/style_tests.js b/build/esm/tests/style_tests.js new file mode 100644 index 0000000000..633c820f94 --- /dev/null +++ b/build/esm/tests/style_tests.js @@ -0,0 +1,96 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Annotation } from '../src/annotation.js'; +import { Articulation } from '../src/articulation.js'; +import { Bend } from '../src/bend.js'; +import { Formatter } from '../src/formatter.js'; +import { KeySignature } from '../src/keysignature.js'; +import { NoteSubGroup } from '../src/notesubgroup.js'; +import { Ornament } from '../src/ornament.js'; +import { StaveModifierPosition } from '../src/stavemodifier.js'; +import { Stroke } from '../src/strokes.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { TimeSignature } from '../src/timesignature.js'; +const StyleTests = { + Start() { + QUnit.module('Style'); + const run = VexFlowTests.runTests; + run('Basic Style', stave); + run('TabNote modifiers Style', tab); + }, +}; +function FS(fillStyle, strokeStyle) { + const ret = { fillStyle }; + if (strokeStyle) { + ret.strokeStyle = strokeStyle; + } + return ret; +} +function stave(options) { + const f = VexFlowTests.makeFactory(options, 600, 150); + const stave = f.Stave({ x: 25, y: 20, width: 500 }); + const keySig = new KeySignature('D'); + keySig.addToStave(stave); + keySig.setStyle(FS('blue')); + stave.addTimeSignature('4/4'); + const timeSig = stave.getModifiers(StaveModifierPosition.BEGIN, TimeSignature.CATEGORY); + timeSig[0].setStyle(FS('brown')); + const notes = [ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }), + f.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '8' }), + f.TextDynamics({ text: 'sfz', duration: '16' }).setStyle(FS('blue')), + f.GhostNote({ duration: '16' }).addModifier(new Annotation('GhostNote green text').setStyle(FS('green')), 0), + ]; + const notes0 = notes[0]; + const notes1 = notes[1]; + notes0.setKeyStyle(0, FS('red')); + notes1.setKeyStyle(0, FS('red')); + const mods1 = notes1.getModifiers(); + mods1[0].setStyle(FS('green')); + notes0.addModifier(new Articulation('a.').setPosition(4).setStyle(FS('green')), 0); + notes0.addModifier(new Ornament('mordent').setStyle(FS('lightgreen')), 0); + notes1.addModifier(new Annotation('blue').setStyle(FS('blue')), 0); + notes1.addModifier(new NoteSubGroup([f.ClefNote({ options: { size: 'small' } }).setStyle(FS('blue'))]), 0); + const voice = f.Voice().addTickables(notes); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Basic Style'); +} +function tab(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 140); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 450).addTabGlyph(); + stave.getModifiers()[2].setStyle(FS('blue')); + stave.setContext(ctx).draw(); + const tabNote = (noteStruct) => new TabNote(noteStruct); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new Annotation('green text').setStyle(FS('green')), 0), + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }) + .addModifier(new Bend('Full').setStyle(FS('brown')), 0) + .addStroke(0, new Stroke(1, { all_voices: false }).setStyle(FS('blue'))), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'TabNote Modifiers Style'); +} +VexFlowTests.register(StyleTests); +export { StyleTests }; diff --git a/build/esm/tests/tabnote_tests.js b/build/esm/tests/tabnote_tests.js new file mode 100644 index 0000000000..d7fd2cd0f5 --- /dev/null +++ b/build/esm/tests/tabnote_tests.js @@ -0,0 +1,474 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Dot } from '../src/dot.js'; +import { Flow } from '../src/flow.js'; +import { Font, FontWeight } from '../src/font.js'; +import { Formatter } from '../src/formatter.js'; +import { Stave } from '../src/stave.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { TickContext } from '../src/tickcontext.js'; +import { Voice, VoiceMode } from '../src/voice.js'; +const TabNoteTests = { + Start() { + QUnit.module('TabNote'); + QUnit.test('Tick', ticks); + QUnit.test('TabStave Line', tabStaveLine); + QUnit.test('Width', width); + QUnit.test('TickContext', tickContext); + const run = VexFlowTests.runTests; + run('TabNote Draw', draw); + run('TabNote Stems Up', drawStemsUp); + run('TabNote Stems Down', drawStemsDown); + run('TabNote Stems Up Through Stave', drawStemsUpThrough); + run('TabNote Stems Down Through Stave', drawStemsDownThrough); + run('TabNote Stems with Dots', drawStemsDotted); + }, +}; +function ticks(assert) { + const BEAT = (1 * Flow.RESOLUTION) / 4; + let note = new TabNote({ positions: [{ str: 6, fret: 6 }], duration: '1' }); + assert.equal(note.getTicks().value(), BEAT * 4, 'Whole note has 4 beats'); + note = new TabNote({ positions: [{ str: 3, fret: 4 }], duration: '4' }); + assert.equal(note.getTicks().value(), BEAT, 'Quarter note has 1 beat'); +} +function tabStaveLine(assert) { + const note = new TabNote({ + positions: [ + { str: 6, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '1', + }); + const positions = note.getPositions(); + assert.equal(positions[0].str, 6, 'String 6, Fret 6'); + assert.equal(positions[0].fret, 6, 'String 6, Fret 6'); + assert.equal(positions[1].str, 4, 'String 4, Fret 5'); + assert.equal(positions[1].fret, 5, 'String 4, Fret 5'); + const stave = new Stave(10, 10, 300); + note.setStave(stave); + const ys = note.getYs(); + assert.equal(ys.length, 2, 'Chord should be rendered on two lines'); + assert.equal(ys[0], 100, 'Line for String 6, Fret 6'); + assert.equal(ys[1], 80, 'Line for String 4, Fret 5'); +} +function width(assert) { + assert.expect(1); + const note = new TabNote({ + positions: [ + { str: 6, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '1', + }); + assert.throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width'); +} +function tickContext(assert) { + const note = new TabNote({ + positions: [ + { str: 6, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '1', + }); + const tickContext = new TickContext().addTickable(note).preFormat().setX(10).setPadding(0); + assert.equal(tickContext.getWidth(), 7); +} +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 140); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const notes = [ + { positions: [{ str: 6, fret: 6 }], duration: '4' }, + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 'x' }, + { str: 5, fret: 15 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 'x' }, + { str: 5, fret: 5 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '4', + }, + { + positions: [ + { str: 6, fret: 0 }, + { str: 5, fret: 5 }, + { str: 4, fret: 5 }, + { str: 3, fret: 4 }, + { str: 2, fret: 3 }, + { str: 1, fret: 0 }, + ], + duration: '4', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '4', + }, + ]; + function showNote(noteStruct, stave, ctx, x) { + const tabNote = new TabNote(noteStruct); + const tickContext = new TickContext(); + tickContext.addTickable(tabNote).preFormat().setX(x); + tabNote.setContext(ctx).setStave(stave); + tabNote.draw(); + return tabNote; + } + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + const tabNote = showNote(note, stave, ctx, (i + 1) * 25); + options.assert.ok(tabNote.getX() > 0, 'Note ' + i + ' has X value'); + options.assert.ok(tabNote.getYs().length > 0, 'Note ' + i + ' has Y values'); + } +} +function drawStemsUp(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 30, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new TabNote(struct); + tabNote.render_options.draw_stem = true; + return tabNote; + }); + const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +function drawStemsDown(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.setStemDirection(-1); + return tabNote; + }); + const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'All objects have been drawn'); +} +function drawStemsUpThrough(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 30, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_stem_through_stave = true; + return tabNote; + }); + ctx.setFont(Font.SANS_SERIF, 10, FontWeight.BOLD); + const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +function drawStemsDownThrough(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 250); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 550, { num_lines: 8 }); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + { str: 6, fret: 10 }, + ], + duration: '32', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '64', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 3, fret: 5 }, + { str: 5, fret: 5 }, + { str: 7, fret: 5 }, + ], + duration: '128', + }, + ]; + const notes = specs.map((struct) => { + const tabNote = new TabNote(struct); + tabNote.render_options.draw_stem = true; + tabNote.render_options.draw_stem_through_stave = true; + tabNote.setStemDirection(-1); + return tabNote; + }); + ctx.setFont('Arial', 10, 'bold'); + const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'All objects have been drawn'); +} +function drawStemsDotted(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 200); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 550); + stave.setContext(ctx); + stave.draw(); + const specs = [ + { + positions: [ + { str: 3, fret: 6 }, + { str: 4, fret: 25 }, + ], + duration: '4d', + }, + { + positions: [ + { str: 2, fret: 10 }, + { str: 5, fret: 12 }, + ], + duration: '8', + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '4dd', + stem_direction: -1, + }, + { + positions: [ + { str: 1, fret: 6 }, + { str: 4, fret: 5 }, + ], + duration: '16', + stem_direction: -1, + }, + ]; + const notes = specs.map((struct) => new TabNote(struct, true)); + Dot.buildAndAttach([notes[0], notes[2], notes[2]]); + const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + voice.draw(ctx, stave); + options.assert.ok(true, 'TabNotes successfully drawn'); +} +VexFlowTests.register(TabNoteTests); +export { TabNoteTests }; diff --git a/build/esm/tests/tabslide_tests.js b/build/esm/tests/tabslide_tests.js new file mode 100644 index 0000000000..2e698f1bfb --- /dev/null +++ b/build/esm/tests/tabslide_tests.js @@ -0,0 +1,133 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabSlide } from '../src/tabslide.js'; +import { TabStave } from '../src/tabstave.js'; +import { Voice } from '../src/voice.js'; +const TabSlideTests = { + Start() { + QUnit.module('TabSlide'); + const run = VexFlowTests.runTests; + run('Simple TabSlide', simple); + run('Slide Up', slideUp); + run('Slide Down', slideDown); + }, +}; +function tieNotes(notes, indices, stave, ctx) { + const voice = new Voice(Flow.TIME4_4); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).format([voice], 100); + voice.draw(ctx, stave); + const tie = new TabSlide({ + first_note: notes[0], + last_note: notes[1], + first_indices: indices, + last_indices: indices, + }, TabSlide.SLIDE_UP); + tie.setContext(ctx); + tie.draw(); +} +function setupContext(options, width) { + const context = options.contextBuilder(options.elementId, 350, 140); + context.scale(0.9, 0.9); + context.font = '10pt Arial'; + const stave = new TabStave(10, 10, width || 350).addTabGlyph().setContext(context).draw(); + return { context, stave }; +} +const tabNote = (noteStruct) => new TabNote(noteStruct); +function simple(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { stave, context } = setupContext(options); + tieNotes([ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }), + tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }), + ], [0], stave, context); + options.assert.ok(true, 'Simple Test'); +} +function multiTest(options, buildTabSlide) { + const { context, stave } = setupContext(options, 440); + const notes = [ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ + positions: [ + { str: 4, fret: 4 }, + { str: 5, fret: 4 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 4, fret: 6 }, + { str: 5, fret: 6 }, + ], + duration: '8', + }), + tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }), + tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }), + tabNote({ + positions: [ + { str: 2, fret: 14 }, + { str: 3, fret: 14 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 2, fret: 16 }, + { str: 3, fret: 16 }, + ], + duration: '8', + }), + ]; + const voice = new Voice(Flow.TIME4_4).addTickables(notes); + new Formatter().joinVoices([voice]).format([voice], 300); + voice.draw(context, stave); + buildTabSlide({ + first_note: notes[0], + last_note: notes[1], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note'); + buildTabSlide({ + first_note: notes[2], + last_note: notes[3], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord'); + buildTabSlide({ + first_note: notes[4], + last_note: notes[5], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note high-fret'); + buildTabSlide({ + first_note: notes[6], + last_note: notes[7], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord high-fret'); +} +function slideUp(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, TabSlide.createSlideUp); +} +function slideDown(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, TabSlide.createSlideDown); +} +VexFlowTests.register(TabSlideTests); +export { TabSlideTests }; diff --git a/build/esm/tests/tabstave_tests.js b/build/esm/tests/tabstave_tests.js new file mode 100644 index 0000000000..e021266be0 --- /dev/null +++ b/build/esm/tests/tabstave_tests.js @@ -0,0 +1,23 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { TabStave } from '../src/tabstave.js'; +const TabStaveTests = { + Start() { + QUnit.module('TabStave'); + const run = VexFlowTests.runTests; + run('TabStave Draw Test', draw); + }, +}; +function draw(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 160); + const stave = new TabStave(10, 10, 300); + stave.setNumLines(6); + stave.setContext(ctx); + stave.draw(); + options.assert.equal(stave.getYForNote(0), 127, 'getYForNote(0)'); + options.assert.equal(stave.getYForLine(5), 127, 'getYForLine(5)'); + options.assert.equal(stave.getYForLine(0), 62, 'getYForLine(0) - Top Line'); + options.assert.equal(stave.getYForLine(4), 114, 'getYForLine(4) - Bottom Line'); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(TabStaveTests); +export { TabStaveTests }; diff --git a/build/esm/tests/tabtie_tests.js b/build/esm/tests/tabtie_tests.js new file mode 100644 index 0000000000..1d4bedc20a --- /dev/null +++ b/build/esm/tests/tabtie_tests.js @@ -0,0 +1,171 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Annotation } from '../src/annotation.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { TabNote } from '../src/tabnote.js'; +import { TabStave } from '../src/tabstave.js'; +import { TabTie } from '../src/tabtie.js'; +import { Voice } from '../src/voice.js'; +const TabTieTests = { + Start() { + QUnit.module('TabTie'); + const run = VexFlowTests.runTests; + run('Simple TabTie', simple); + run('Hammerons', simpleHammerOn); + run('Pulloffs', simplePullOff); + run('Tapping', tap); + run('Continuous', continuous); + }, +}; +const tabNote = (noteStruct) => new TabNote(noteStruct); +function setupContext(options, w = 0, h = 0) { + const context = options.contextBuilder(options.elementId, w || 350, h || 160); + context.setFont('Arial', VexFlowTests.Font.size); + const stave = new TabStave(10, 10, w || 350).addTabGlyph().setContext(context).draw(); + return { context, stave }; +} +function tieNotes(notes, indices, stave, ctx, text) { + const voice = new Voice(Flow.TIME4_4); + voice.addTickables(notes); + new Formatter().joinVoices([voice]).format([voice], 100); + voice.draw(ctx, stave); + const tie = new TabTie({ + first_note: notes[0], + last_note: notes[1], + first_indices: indices, + last_indices: indices, + }, text !== null && text !== void 0 ? text : 'Annotation'); + tie.setContext(ctx); + tie.draw(); +} +function simple(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { context, stave } = setupContext(options); + const note1 = tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }); + const note2 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }); + tieNotes([note1, note2], [0], stave, context); + options.assert.ok(true, 'Simple Test'); +} +function simpleHammerOn(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, TabTie.createHammeron); +} +function simplePullOff(options, contextBuilder) { + options.contextBuilder = contextBuilder; + multiTest(options, TabTie.createPulloff); +} +function multiTest(options, createTabTie) { + const { context, stave } = setupContext(options, 440, 140); + const notes = [ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), + tabNote({ + positions: [ + { str: 4, fret: 4 }, + { str: 5, fret: 4 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 4, fret: 6 }, + { str: 5, fret: 6 }, + ], + duration: '8', + }), + tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }), + tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }), + tabNote({ + positions: [ + { str: 2, fret: 14 }, + { str: 3, fret: 14 }, + ], + duration: '8', + }), + tabNote({ + positions: [ + { str: 2, fret: 16 }, + { str: 3, fret: 16 }, + ], + duration: '8', + }), + ]; + const voice = new Voice(Flow.TIME4_4).addTickables(notes); + new Formatter().joinVoices([voice]).format([voice], 300); + voice.draw(context, stave); + createTabTie({ + first_note: notes[0], + last_note: notes[1], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note'); + createTabTie({ + first_note: notes[2], + last_note: notes[3], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord'); + createTabTie({ + first_note: notes[4], + last_note: notes[5], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Single note high-fret'); + createTabTie({ + first_note: notes[6], + last_note: notes[7], + first_indices: [0, 1], + last_indices: [0, 1], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Chord high-fret'); +} +function tap(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { context, stave } = setupContext(options); + const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }).addModifier(new Annotation('T'), 0); + const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' }); + tieNotes([note1, note2], [0], stave, context, 'P'); + options.assert.ok(true, 'Tapping Test'); +} +function continuous(options, contextBuilder) { + options.contextBuilder = contextBuilder; + const { context, stave } = setupContext(options, 440, 140); + const notes = [ + tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'q' }), + tabNote({ positions: [{ str: 4, fret: 5 }], duration: 'q' }), + tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }), + ]; + const voice = new Voice(Flow.TIME4_4).addTickables(notes); + new Formatter().joinVoices([voice]).format([voice], 300); + voice.draw(context, stave); + TabTie.createHammeron({ + first_note: notes[0], + last_note: notes[1], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + TabTie.createPulloff({ + first_note: notes[1], + last_note: notes[2], + first_indices: [0], + last_indices: [0], + }) + .setContext(context) + .draw(); + options.assert.ok(true, 'Continuous Hammeron'); +} +VexFlowTests.register(TabTieTests); +export { TabTieTests }; diff --git a/build/esm/tests/textbracket_tests.js b/build/esm/tests/textbracket_tests.js new file mode 100644 index 0000000000..8f8a22d923 --- /dev/null +++ b/build/esm/tests/textbracket_tests.js @@ -0,0 +1,100 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +const TextBracketTests = { + Start() { + QUnit.module('TextBracket'); + const run = VexFlowTests.runTests; + run('Simple TextBracket', simple0); + run('TextBracket Styles', simple1); + }, +}; +function simple0(options) { + const f = VexFlowTests.makeFactory(options, 550); + const stave = f.Stave(); + const score = f.EasyScore(); + const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' }); + const voice = score.voice(notes, { time: '5/4' }); + f.TextBracket({ + from: notes[0], + to: notes[4], + text: '15', + options: { + superscript: 'va', + position: 'top', + }, + }); + f.TextBracket({ + from: notes[0], + to: notes[4], + text: '8', + options: { + superscript: 'vb', + position: 'bottom', + line: 3, + }, + }); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function simple1(options) { + const f = VexFlowTests.makeFactory(options, 550); + const stave = f.Stave(); + const score = f.EasyScore(); + const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' }); + const voice = score.voice(notes, { time: '5/4' }); + const topOctaves = [ + f.TextBracket({ + from: notes[0], + to: notes[1], + text: 'Cool notes', + options: { + superscript: '', + position: 'top', + }, + }), + f.TextBracket({ + from: notes[2], + to: notes[4], + text: 'Testing', + options: { + position: 'top', + superscript: 'superscript', + font: { family: 'Arial', size: 15, weight: 'normal', style: 'normal' }, + }, + }), + ]; + const bottomOctaves = [ + f.TextBracket({ + from: notes[0], + to: notes[1], + text: '8', + options: { + superscript: 'vb', + position: 'bottom', + line: 3, + font: { size: 30 }, + }, + }), + f.TextBracket({ + from: notes[2], + to: notes[4], + text: 'Not cool notes', + options: { + superscript: ' super uncool', + position: 'bottom', + line: 4, + }, + }), + ]; + topOctaves[1].render_options.line_width = 2; + topOctaves[1].render_options.show_bracket = false; + bottomOctaves[0].render_options.underline_superscript = false; + bottomOctaves[0].setDashed(false); + bottomOctaves[1].render_options.bracket_height = 40; + bottomOctaves[1].setDashed(true, [2, 2]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +VexFlowTests.register(TextBracketTests); +export { TextBracketTests }; diff --git a/build/esm/tests/textformatter_tests.js b/build/esm/tests/textformatter_tests.js new file mode 100644 index 0000000000..511229300c --- /dev/null +++ b/build/esm/tests/textformatter_tests.js @@ -0,0 +1,134 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Font, FontStyle, FontWeight } from '../src/font.js'; +import { TextFormatter } from '../src/textformatter.js'; +const TextFormatterTests = { + Start() { + QUnit.module('TextFormatter'); + QUnit.test('Basic', basic); + const run = VexFlowTests.runTextTests; + run('Accuracy', accuracy); + run('Box Text', textBoxAccuracy); + }, +}; +function basic(assert) { + var _a; + const registeredFamilies = TextFormatter.getFontFamilies(); + assert.equal(registeredFamilies.length, 5, `There are five registered font families: 'Roboto Slab' & 'PetalumaScript' and default 'Serif', 'Serif-Bold' and 'Sans'`); + const petalumaFormatterInfo = TextFormatter.getInfo('PetalumaScript'); + assert.equal((_a = petalumaFormatterInfo === null || petalumaFormatterInfo === void 0 ? void 0 : petalumaFormatterInfo.glyphs) === null || _a === void 0 ? void 0 : _a.C.advanceWidth, 623, 'PetalumaScript advanceWidth of C character is 623.'); + const formatterForPetalumaScript = TextFormatter.create({ family: 'PetalumaScript', size: '100px' }); + const metricsPetalumaScriptH = formatterForPetalumaScript.getGlyphMetrics('H'); + assert.equal(metricsPetalumaScriptH.leftSideBearing, 37); + const formatterForRobotoSlab = TextFormatter.create({ family: 'Roboto Slab', size: '100px', style: 'italic' }); + const metricsRobotoSlabH = formatterForRobotoSlab.getGlyphMetrics('H'); + assert.equal(metricsRobotoSlabH.advanceWidth, 1578); + assert.equal(formatterForRobotoSlab.cacheKey, 'Roboto_Slab%75%normal%normal'); +} +function accuracy(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 500); + const lineHeight = 30; + const startX = 50; + const fonts = [ + { + family: Font.SERIF, + size: 14, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, + }, + { + family: 'Roboto Slab', + size: 14, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, + }, + { + family: Font.SANS_SERIF, + size: 14, + weight: FontWeight.BOLD, + style: FontStyle.NORMAL, + }, + ]; + let startY = 20; + for (let j = 0; j < fonts.length; ++j) { + const font = fonts[j]; + const textFormatter = TextFormatter.create(font); + ctx.setFont(font); + const texts = ['AVo(i)a', 'bghjIVex1/2', '@@@@@@@@', 'a very long String with Mixed Case Text,(0123456789)']; + for (let i = 0; i < texts.length; i++) { + ctx.setFillStyle('black'); + ctx.fillText(texts[i], startX, startY); + startY += 5; + ctx.setFillStyle('#3a2'); + ctx.fillRect(startX, startY, textFormatter.getWidthForTextInPx(texts[i]), 2); + ctx.setFillStyle('#32a'); + startY += 5; + ctx.fillRect(startX, startY, ctx.measureText(texts[i]).width, 2); + startY += lineHeight; + } + } + options.assert.ok(true, 'all pass'); +} +function textBoxAccuracy(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 800); + let startY = 35; + const boxBorder = 2; + const boxPadding = 3; + const startX = 50; + const fonts = [ + { + family: Font.SERIF, + size: 14, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, + }, + { + family: 'Roboto Slab', + size: 14, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, + }, + { + family: Font.SANS_SERIF, + size: 14, + weight: FontWeight.NORMAL, + style: FontStyle.NORMAL, + }, + ]; + const texts = ['AVID', 'bghjIVex1/2', '@@@@@@@@']; + for (let j = 0; j < fonts.length; ++j) { + const font = fonts[j]; + const textFormatter = TextFormatter.create(font); + ctx.save(); + ctx.setFont(font); + for (let i = 0; i < texts.length; i++) { + const textY = textFormatter.getYForStringInPx(texts[i]); + const height = textY.height + 2 * boxPadding; + const headroom = -1 * textY.yMin; + const width = textFormatter.getWidthForTextInPx(texts[i]) + 2 * boxPadding; + ctx.setFillStyle('black'); + ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding); + ctx.setLineWidth(boxBorder); + ctx.setStrokeStyle('#3a2'); + ctx.setFillStyle('#3a2'); + ctx.beginPath(); + ctx.rect(startX, startY - height + headroom, width, height); + ctx.stroke(); + startY += height * 1.5 + boxBorder * 3; + const measureBox = ctx.measureText(texts[i]); + const mwidth = measureBox.width + boxBorder * 2; + const mheight = measureBox.height + boxBorder * 2; + ctx.setFillStyle('black'); + ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding); + ctx.setStrokeStyle('#32a'); + ctx.setFillStyle('#32a'); + ctx.beginPath(); + ctx.rect(startX, startY - mheight, mwidth, mheight); + ctx.stroke(); + startY += mheight * 1.5 + boxBorder * 3; + } + ctx.restore(); + } + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(TextFormatterTests); +export { TextFormatterTests }; diff --git a/build/esm/tests/textnote_tests.js b/build/esm/tests/textnote_tests.js new file mode 100644 index 0000000000..3a32b6bbc4 --- /dev/null +++ b/build/esm/tests/textnote_tests.js @@ -0,0 +1,217 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Crescendo } from '../src/crescendo.js'; +import { Flow } from '../src/flow.js'; +import { Font } from '../src/font.js'; +import { Note } from '../src/note.js'; +import { Stave } from '../src/stave.js'; +import { TextNote } from '../src/textnote.js'; +const TextNoteTests = { + Start() { + QUnit.module('TextNote'); + const run = VexFlowTests.runTests; + run('TextNote Formatting', formatTextNotes); + run('TextNote Formatting 2', formatTextNotes2); + run('TextNote Superscript and Subscript', superscriptAndSubscript); + run('TextNote Formatting With Glyphs 0', formatTextGlyphs0); + run('TextNote Formatting With Glyphs 1', formatTextGlyphs1); + run('Crescendo', crescendo); + run('Text Dynamics', textDynamics); + }, +}; +function formatTextNotes(options) { + const f = VexFlowTests.makeFactory(options, 400, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: 'q' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]); + const voice2 = score.voice([ + f.TextNote({ text: 'Center Justification', duration: 'h' }).setJustification(TextNote.Justification.CENTER), + f.TextNote({ text: 'Left Line 1', duration: 'q' }).setLine(1), + f.TextNote({ text: 'Right', duration: 'q' }).setJustification(TextNote.Justification.RIGHT), + ]); + const formatter = f.Formatter(); + formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function formatTextNotes2(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), + f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: 'q' }), + ]); + const voice2 = score.voice([ + f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT), + f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT), + f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT), + f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER), + f.TextNote({ text: 'L', duration: '16' }), + f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT), + f.TextNote({ text: 'R', duration: 'q' }).setJustification(TextNote.Justification.RIGHT), + ]); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + voice2.getTickables().forEach((note) => Note.plotMetrics(f.getContext(), note, 170)); + f.draw(); + options.assert.ok(true); +} +function superscriptAndSubscript(options) { + const f = VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: 1, duration: 'q' }), + f + .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: 1, duration: 'q' }) + .addModifier(f.Accidental({ type: 'n' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + ]); + const notes2 = [ + f.TextNote({ text: Flow.unicode.flat + 'I', superscript: '+5', duration: '8' }), + f.TextNote({ text: 'D' + Flow.unicode.sharp + '/F', duration: '4d', superscript: 'sus2' }), + f.TextNote({ text: 'ii', superscript: '6', subscript: '4', duration: '8' }), + f.TextNote({ text: 'C', superscript: Flow.unicode.triangle + '7', subscript: '', duration: '8' }), + f.TextNote({ text: 'vii', superscript: Flow.unicode['o-with-slash'] + '7', duration: '8' }), + f.TextNote({ text: 'V', superscript: '7', duration: '8' }), + ]; + options.assert.equal(notes2[0].getText(), Flow.unicode.flat + 'I', 'TextNote.getText() return .text'); + const voice2 = score.voice(notes2); + voice2.getTickables().forEach((note) => { + const textNote = note; + textNote.setFont({ family: Font.SERIF, size: 15 }); + textNote.setLine(13); + textNote.setJustification(TextNote.Justification.LEFT); + }); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function formatTextGlyphs0(options) { + const f = VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + ]); + const voice2 = score.voice([ + f.TextNote({ text: 'Center', duration: '8' }).setJustification(TextNote.Justification.CENTER), + f.TextNote({ glyph: 'f', duration: '8' }), + f.TextNote({ glyph: 'p', duration: '8' }), + f.TextNote({ glyph: 'm', duration: '8' }), + f.TextNote({ glyph: 'z', duration: '8' }), + f.TextNote({ glyph: 'mordent_upper', duration: '16' }), + f.TextNote({ glyph: 'mordent_lower', duration: '16' }), + f.TextNote({ glyph: 'segno', duration: '8' }), + f.TextNote({ glyph: 'coda', duration: '8' }), + ]); + voice2.getTickables().forEach((n) => n.setJustification(TextNote.Justification.CENTER)); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function formatTextGlyphs1(options) { + const f = VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice1 = score.voice([ + f + .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) + .addModifier(f.Accidental({ type: 'b' }), 0) + .addModifier(f.Accidental({ type: '#' }), 1), + f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), + ]); + const voice2 = score.voice([ + f.TextNote({ glyph: 'turn', duration: '16' }), + f.TextNote({ glyph: 'turn_inverted', duration: '16' }), + f.TextNote({ glyph: 'pedal_open', duration: '8' }).setLine(10), + f.TextNote({ glyph: 'pedal_close', duration: '8' }).setLine(10), + f.TextNote({ glyph: 'caesura_curved', duration: '8' }).setLine(3), + f.TextNote({ glyph: 'caesura_straight', duration: '8' }).setLine(3), + f.TextNote({ glyph: 'breath', duration: '8' }).setLine(2), + f.TextNote({ glyph: 'tick', duration: '8' }).setLine(3), + f.TextNote({ glyph: 'tr', duration: '8', smooth: true }).setJustification(TextNote.Justification.CENTER), + ]); + voice2.getTickables().forEach((n) => n.setJustification(TextNote.Justification.CENTER)); + f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true); +} +function crescendo(options) { + const f = VexFlowTests.makeFactory(options, 600, 230); + const stave = f.Stave({ y: 40 }); + const score = f.EasyScore(); + const voice = score.voice([ + f.TextNote({ glyph: 'p', duration: '16' }), + new Crescendo({ duration: '4d' }).setLine(0).setHeight(25).setStave(stave), + f.TextNote({ glyph: 'f', duration: '16' }), + new Crescendo({ duration: '4' }).setLine(5).setStave(stave), + new Crescendo({ duration: '4' }).setLine(10).setDecrescendo(true).setHeight(5).setStave(stave), + ]); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true); +} +function textDynamics(options) { + const f = VexFlowTests.makeFactory(options, 600, 230); + const score = f.EasyScore(); + const voice = score.voice([ + f.TextDynamics({ text: 'sfz', duration: '4' }), + f.TextDynamics({ text: 'rfz', duration: '4' }), + f.TextDynamics({ text: 'mp', duration: '4' }), + f.TextDynamics({ text: 'ppp', duration: '4' }), + f.TextDynamics({ text: 'fff', duration: '4' }), + f.TextDynamics({ text: 'mf', duration: '4' }), + f.TextDynamics({ text: 'sff', duration: '4' }), + ], { time: '7/4' }); + const formatter = f.Formatter(); + formatter.joinVoices([voice]); + const width = formatter.preCalculateMinTotalWidth([voice]); + formatter.format([voice]); + const stave = f.Stave({ y: 40, width: width + Stave.defaultPadding }); + stave.draw(); + voice.draw(f.getContext(), stave); + options.assert.ok(true); +} +VexFlowTests.register(TextNoteTests); +export { TextNoteTests }; diff --git a/build/esm/tests/threevoice_tests.js b/build/esm/tests/threevoice_tests.js new file mode 100644 index 0000000000..786f84b557 --- /dev/null +++ b/build/esm/tests/threevoice_tests.js @@ -0,0 +1,132 @@ +import { concat, VexFlowTests } from './vexflow_test_helpers.js'; +import { Beam } from '../src/beam.js'; +const ThreeVoicesTests = { + Start() { + QUnit.module('Three Voice Rests'); + const run = VexFlowTests.runTests; + run('Three Voices - #1', threeVoices1); + run('Three Voices - #2 Complex', threeVoices2); + run('Three Voices - #3', threeVoices3); + run('Auto Adjust Rest Positions - Two Voices', autoRestTwoVoices); + run('Auto Adjust Rest Positions - Three Voices #1', autoRestThreeVoices1); + run('Auto Adjust Rest Positions - Three Voices #2', autoRestThreeVoices2); + }, +}; +function createThreeVoicesTest(noteGroup1, noteGroup2, noteGroup3, setup) { + return (options) => { + const factory = VexFlowTests.makeFactory(options, 600, 200); + const stave = factory.Stave().addClef('treble').addTimeSignature('4/4'); + const score = factory.EasyScore(); + const noteGroups = [noteGroup1, noteGroup2, noteGroup3].map((args) => score.notes(...args)); + const voices = noteGroups.map((notes) => score.voice(notes)); + setup(factory, voices); + const beams = [ + Beam.applyAndGetBeams(voices[0], +1), + Beam.applyAndGetBeams(voices[1], -1), + Beam.applyAndGetBeams(voices[2], -1), + ].reduce(concat); + factory.Formatter().joinVoices(voices).formatToStave(voices, stave); + factory.draw(); + for (let i = 0; i < beams.length; i++) { + beams[i].setContext(factory.getContext()).draw(); + } + options.assert.ok(true); + }; +} +const threeVoices1 = createThreeVoicesTest(['e5/2, e5', { stem: 'up' }], ['(d4 a4 d#5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/4, e3, f3, a3', { stem: 'down' }], (f, voices) => { + voices[0].getTickables()[0].addModifier(f.Fingering({ number: '0', position: 'left' }), 0); + voices[1] + .getTickables()[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '4', position: 'left' }), 1); +}); +const threeVoices2 = createThreeVoicesTest(['(a4 e5)/16, e5, e5, e5, e5/8, e5, e5/2', { stem: 'up' }], ['(d4 d#5)/16, (b4 c5), d5, e5, (d4 a4 c5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/8, b3, e3/4, f3, a3', { stem: 'down' }], (f, voices) => { + voices[0] + .getTickables()[0] + .addModifier(f.Fingering({ number: '2', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '0', position: 'above' }), 1); + voices[1] + .getTickables()[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '4', position: 'left' }), 1); +}); +const threeVoices3 = createThreeVoicesTest(['(g4 e5)/4, e5, (g4 e5)/2', { stem: 'up' }], ['c#5/4, b4/8, b4/8/r, a4/4., g4/8', { stem: 'down' }], ['c4/4, b3, a3, g3', { stem: 'down' }], (f, voices) => { + voices[0] + .getTickables()[0] + .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) + .addModifier(f.Fingering({ number: '0', position: 'left' }), 1); + voices[1].getTickables()[0].addModifier(f.Fingering({ number: '1', position: 'left' }), 0); + voices[2].getTickables()[0].addModifier(f.Fingering({ number: '3', position: 'left' }), 0); +}); +function autoRestTwoVoices(options) { + const f = VexFlowTests.makeFactory(options, 900, 200); + const score = f.EasyScore(); + let x = 10; + let beams = []; + function createMeasure(measureTitle, width, align_rests) { + const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); + x += width; + const noteArrays = [ + score.notes('b4/8/r, e5/16, b4/r, b4/8/r, e5/16, b4/r, b4/8/r, d5/16, b4/r, e5/4', { stem: 'up' }), + score.notes('c5/16, c4, b4/r, d4, e4, f4, b4/r, g4, g4[stem="up"], a4[stem="up"], b4/r, b4[stem="up"], e4/4', { + stem: 'down', + }), + [f.TextNote({ text: measureTitle, line: -1, duration: '1', smooth: true })], + ]; + const voices = noteArrays.map((notes) => score.voice(notes)); + beams = beams.concat(Beam.applyAndGetBeams(voices[0], 1)).concat(Beam.applyAndGetBeams(voices[1], -1)); + f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); + } + createMeasure('Default Rest Positions', 400, false); + createMeasure('Rests Repositioned To Avoid Collisions', 400, true); + f.draw(); + for (let i = 0; i < beams.length; i++) { + beams[i].setContext(f.getContext()).draw(); + } + options.assert.ok(true, 'Auto Adjust Rests - Two Voices'); +} +function autoRestThreeVoices1(options) { + const f = VexFlowTests.makeFactory(options, 850, 200); + const score = f.EasyScore(); + let x = 10; + function createMeasure(measureTitle, width, align_rests) { + const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); + const voices = [ + score.voice(score.notes('b4/4/r, e5, e5/r, e5/r, e5, e5, e5, e5/r', { stem: 'up' }), { time: '8/4' }), + score.voice(score.notes('b4/4/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4', { stem: 'down' }), { time: '8/4' }), + score.voice(score.notes('e4/4/r, e4/r, f4, b4/r, g4, c4, e4/r, c4', { stem: 'down' }), { time: '8/4' }), + score.voice([ + f.TextNote({ text: measureTitle, duration: '1', line: -1, smooth: true }), + f.TextNote({ text: '', duration: '1', line: -1, smooth: true }), + ], { time: '8/4' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); + x += width; + } + createMeasure('Default Rest Positions', 400, false); + createMeasure('Rests Repositioned To Avoid Collisions', 400, true); + f.draw(); + options.assert.ok(true); +} +function autoRestThreeVoices2(options) { + const f = VexFlowTests.makeFactory(options, 850, 200); + const score = f.EasyScore(); + let x = 10; + function createMeasure(measureTitle, width, align_rests) { + const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); + const voices = [ + score.voice(score.notes('b4/16/r, e5, e5/r, e5/r, e5, e5, e5, e5/r'), { time: '2/4' }), + score.voice(score.notes('b4/16/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4'), { time: '2/4' }), + score.voice(score.notes('e4/16/r, e4/r, f4, b4/r, g4, c4, e4/r, c4'), { time: '2/4' }), + score.voice([f.TextNote({ text: measureTitle, duration: 'h', line: -1, smooth: true })], { time: '2/4' }), + ]; + f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); + x += width; + } + createMeasure('Default Rest Positions', 400, false); + createMeasure('Rests Repositioned To Avoid Collisions', 400, true); + f.draw(); + options.assert.ok(true); +} +VexFlowTests.register(ThreeVoicesTests); +export { ThreeVoicesTests }; diff --git a/build/esm/tests/tickcontext_tests.js b/build/esm/tests/tickcontext_tests.js new file mode 100644 index 0000000000..ade56ac212 --- /dev/null +++ b/build/esm/tests/tickcontext_tests.js @@ -0,0 +1,36 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { TickContext } from '../src/tickcontext.js'; +import { MockTickable } from './mocks.js'; +const TickContextTests = { + Start() { + QUnit.module('TickContext'); + QUnit.test('Current Tick Test', currentTick); + QUnit.test('Tracking Test', tracking); + }, +}; +function currentTick(assert) { + const tc = new TickContext(); + assert.equal(tc.getCurrentTick().value(), 0, 'New tick context has no ticks'); +} +function tracking(assert) { + const BEAT = (1 * Flow.RESOLUTION) / 4; + const tickables = [ + new MockTickable().setTicks(BEAT).setWidth(10), + new MockTickable().setTicks(BEAT * 2).setWidth(20), + new MockTickable().setTicks(BEAT).setWidth(30), + ]; + const tc = new TickContext(); + tc.setPadding(0); + tc.addTickable(tickables[0]); + assert.equal(tc.getMaxTicks().value(), BEAT); + tc.addTickable(tickables[1]); + assert.equal(tc.getMaxTicks().value(), BEAT * 2); + tc.addTickable(tickables[2]); + assert.equal(tc.getMaxTicks().value(), BEAT * 2); + assert.equal(tc.getWidth(), 0); + tc.preFormat(); + assert.equal(tc.getWidth(), 30); +} +VexFlowTests.register(TickContextTests); +export { TickContextTests }; diff --git a/build/esm/tests/timesignature_tests.js b/build/esm/tests/timesignature_tests.js new file mode 100644 index 0000000000..fe76f56519 --- /dev/null +++ b/build/esm/tests/timesignature_tests.js @@ -0,0 +1,143 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Stave } from '../src/stave.js'; +import { StaveConnector } from '../src/staveconnector.js'; +import { TimeSignature } from '../src/timesignature.js'; +const TimeSignatureTests = { + Start() { + QUnit.module('TimeSignature'); + QUnit.test('Time Signature Parser', parser); + const run = VexFlowTests.runTests; + run('Basic Time Signatures', basic); + run('Big Signature Test', big); + run('Additive Signature Test', additive); + run('Alternating Signature Test', alternating); + run('Interchangeable Signature Test', interchangeable); + run('Aggregate Signature Test', agregate); + run('Complex Signature Test', complex); + run('Time Signature multiple staves alignment test', multiple); + run('Time Signature Change Test', change); + }, +}; +function parser(assert) { + const timeSig = new TimeSignature(); + assert.equal(timeSig.getTimeSpec(), '4/4', 'default time signature is 4/4'); + const mustFail = ['asdf', '123/', '/10', '/', '4567', 'C+', '1+', '+1', '(3+', '+3)', '()', '(+)']; + mustFail.forEach((invalidString) => { + assert.throws(() => timeSig.parseTimeSpec(invalidString), /BadTimeSignature/); + }); + const mustPass = ['4/4', '10/12', '1/8', '1234567890/1234567890', 'C', 'C|', '+']; + mustPass.forEach((validString) => timeSig.parseTimeSpec(validString)); + timeSig.setTimeSig('4/4'); + assert.equal(timeSig.getIsNumeric(), true, '4/4 is numeric'); + assert.equal(timeSig.getLine(), 0, 'digits are on line 0'); + timeSig.setTimeSig('C|'); + assert.equal(timeSig.getTimeSpec(), 'C|', 'timeSpec changed to C|'); + assert.equal(timeSig.getIsNumeric(), false, 'cut time is not numeric'); + assert.equal(timeSig.getLine(), 2, 'cut/common are on line 2'); + assert.ok(true, 'all pass'); +} +function basic(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 600, 120); + new Stave(10, 10, 500) + .addTimeSignature('2/2') + .addTimeSignature('3/4') + .addTimeSignature('4/4') + .addTimeSignature('6/8') + .addTimeSignature('C') + .addTimeSignature('C|') + .addEndTimeSignature('2/2') + .addEndTimeSignature('3/4') + .addEndTimeSignature('4/4') + .addEndClef('treble') + .addEndTimeSignature('6/8') + .addEndTimeSignature('C') + .addEndTimeSignature('C|') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function big(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300) + .addTimeSignature('12/8') + .addTimeSignature('7/16') + .addTimeSignature('1234567/890') + .addTimeSignature('987/654321') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function additive(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300).addTimeSignature('2+3+2/8').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function alternating(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300).addTimeSignature('6/8').addTimeSignature('+').addTimeSignature('3/4').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function interchangeable(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300).addTimeSignature('3/4').addTimeSignature('-').addTimeSignature('2/4').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function agregate(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300) + .addTimeSignature('2/4') + .addTimeSignature('+') + .addTimeSignature('3/8') + .addTimeSignature('+') + .addTimeSignature('5/4') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function complex(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 120); + new Stave(10, 10, 300) + .addTimeSignature('(2+3)/16') + .addTimeSignature('+') + .addTimeSignature('3/8') + .setContext(ctx) + .draw(); + options.assert.ok(true, 'all pass'); +} +function multiple(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 400, 350); + const stave1LineConfig = [false, false, true, false, false].map((visible) => ({ visible })); + const stave1 = new Stave(15, 0, 300) + .setConfigForLines(stave1LineConfig) + .addClef('percussion') + .addTimeSignature('4/4', 25) + .setContext(ctx) + .draw(); + const stave2 = new Stave(15, 110, 300).addClef('treble').addTimeSignature('4/4').setContext(ctx).draw(); + const stave3 = new Stave(15, 220, 300).addClef('bass').addTimeSignature('4/4').setContext(ctx).draw(); + Stave.formatBegModifiers([stave1, stave2, stave3]); + new StaveConnector(stave1, stave2).setType('single').setContext(ctx).draw(); + new StaveConnector(stave2, stave3).setType('single').setContext(ctx).draw(); + new StaveConnector(stave2, stave3).setType('brace').setContext(ctx).draw(); + options.assert.ok(true, 'all pass'); +} +function change(options) { + const f = VexFlowTests.makeFactory(options, 900); + const stave = f.Stave({ x: 0, y: 0 }).addClef('treble').addTimeSignature('C|'); + const tickables = [ + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + f.TimeSigNote({ time: '3/4' }), + f.StaveNote({ keys: ['d/4'], duration: '4', clef: 'alto' }), + f.StaveNote({ keys: ['b/3'], duration: '4r', clef: 'alto' }), + f.TimeSigNote({ time: 'C' }), + f.StaveNote({ keys: ['c/3', 'e/3', 'g/3'], duration: '4', clef: 'bass' }), + f.TimeSigNote({ time: '9/8' }), + f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), + ]; + const voice = f.Voice().setStrict(false).addTickables(tickables); + f.Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'all pass'); +} +VexFlowTests.register(TimeSignatureTests); +export { TimeSignatureTests }; diff --git a/build/esm/tests/tremolo_tests.js b/build/esm/tests/tremolo_tests.js new file mode 100644 index 0000000000..17ae3da75f --- /dev/null +++ b/build/esm/tests/tremolo_tests.js @@ -0,0 +1,75 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Barline } from '../src/stavebarline.js'; +import { Tremolo } from '../src/tremolo.js'; +const TremoloTests = { + Start() { + QUnit.module('Tremolo'); + const run = VexFlowTests.runTests; + run('Tremolo - Basic', tremoloBasic); + run('Tremolo - Big', tremoloBig); + }, +}; +function tremoloBasic(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const score = f.EasyScore(); + const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE); + const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' }); + notes1[0].addModifier(new Tremolo(3), 0); + notes1[1].addModifier(new Tremolo(2), 0); + notes1[2].addModifier(new Tremolo(1), 0); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(Barline.type.DOUBLE); + const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' }); + notes2[1].addModifier(new Tremolo(1), 0); + notes2[2].addModifier(new Tremolo(2), 0); + notes2[3].addModifier(new Tremolo(3), 0); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'Tremolo - Basic'); +} +function tremoloBig(options) { + const f = VexFlowTests.makeFactory(options, 600, 200); + const score = f.EasyScore(); + const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE); + const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' }); + const tremolo1 = new Tremolo(3); + tremolo1.extra_stroke_scale = 1.7; + tremolo1.y_spacing_scale = 1.5; + const tremolo2 = new Tremolo(2); + tremolo2.extra_stroke_scale = 1.7; + tremolo2.y_spacing_scale = 1.5; + const tremolo3 = new Tremolo(1); + tremolo3.extra_stroke_scale = 1.7; + tremolo3.y_spacing_scale = 1.5; + notes1[0].addModifier(tremolo1, 0); + notes1[1].addModifier(tremolo2, 0); + notes1[2].addModifier(tremolo3, 0); + const voice1 = score.voice(notes1); + f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); + const stave2 = f + .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) + .setEndBarType(Barline.type.DOUBLE); + const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' }); + const tremolo4 = new Tremolo(1); + tremolo4.extra_stroke_scale = 1.7; + tremolo4.y_spacing_scale = 1.5; + const tremolo5 = new Tremolo(2); + tremolo5.extra_stroke_scale = 1.7; + tremolo5.y_spacing_scale = 1.5; + const tremolo6 = new Tremolo(3); + tremolo6.extra_stroke_scale = 1.7; + tremolo6.y_spacing_scale = 1.5; + notes2[1].addModifier(tremolo4, 0); + notes2[2].addModifier(tremolo5, 0); + notes2[3].addModifier(tremolo6, 0); + const voice2 = score.voice(notes2); + f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); + f.draw(); + options.assert.ok(true, 'Tremolo - Big'); +} +VexFlowTests.register(TremoloTests); +export { TremoloTests }; diff --git a/build/esm/tests/tuning_tests.js b/build/esm/tests/tuning_tests.js new file mode 100644 index 0000000000..fda1442ca2 --- /dev/null +++ b/build/esm/tests/tuning_tests.js @@ -0,0 +1,56 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Tuning } from '../src/tuning.js'; +const TuningTests = { + Start() { + QUnit.module('Tuning'); + QUnit.test('Standard Tuning', standard); + QUnit.test('Standard Banjo Tuning', banjo); + QUnit.test('Return note for fret', noteForFret); + }, +}; +function checkStandard(assert, tuning) { + assert.throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0'); + assert.throws(() => tuning.getValueForString(9), /BadArguments/, 'String 9'); + assert.equal(tuning.getValueForString(6), 40, 'Low E string'); + assert.equal(tuning.getValueForString(5), 45, 'A string'); + assert.equal(tuning.getValueForString(4), 50, 'D string'); + assert.equal(tuning.getValueForString(3), 55, 'G string'); + assert.equal(tuning.getValueForString(2), 59, 'B string'); + assert.equal(tuning.getValueForString(1), 64, 'High E string'); +} +function checkStandardBanjo(assert, tuning) { + assert.throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0'); + assert.throws(() => tuning.getValueForString(6), /BadArguments/, 'String 6'); + assert.equal(tuning.getValueForString(5), 67, 'High G string'); + assert.equal(tuning.getValueForString(4), 50, 'D string'); + assert.equal(tuning.getValueForString(3), 55, 'G string'); + assert.equal(tuning.getValueForString(2), 59, 'B string'); + assert.equal(tuning.getValueForString(1), 62, 'High D string'); +} +function standard(assert) { + assert.expect(16); + const tuning = new Tuning(); + checkStandard(assert, tuning); + tuning.setTuning('standard'); + checkStandard(assert, tuning); +} +function banjo(assert) { + assert.expect(7); + const tuning = new Tuning(); + tuning.setTuning('standardBanjo'); + checkStandardBanjo(assert, tuning); +} +function noteForFret(assert) { + assert.expect(8); + const tuning = new Tuning('E/5,B/4,G/4,D/4,A/3,E/3'); + assert.throws(() => tuning.getNoteForFret(-1, 1), /BadArguments/, 'Fret = -1'); + assert.throws(() => tuning.getNoteForFret(1, -1), /BadArguments/, 'String = -1'); + assert.equal(tuning.getNoteForFret(0, 1), 'E/5', 'High E string'); + assert.equal(tuning.getNoteForFret(5, 1), 'A/5', 'High E string, fret 5'); + assert.equal(tuning.getNoteForFret(0, 2), 'B/4', 'B string'); + assert.equal(tuning.getNoteForFret(0, 3), 'G/4', 'G string'); + assert.equal(tuning.getNoteForFret(12, 2), 'B/5', 'B string, fret 12'); + assert.equal(tuning.getNoteForFret(0, 6), 'E/3', 'Low E string'); +} +VexFlowTests.register(TuningTests); +export { TuningTests }; diff --git a/build/esm/tests/tuplet_tests.js b/build/esm/tests/tuplet_tests.js new file mode 100644 index 0000000000..2c35a14694 --- /dev/null +++ b/build/esm/tests/tuplet_tests.js @@ -0,0 +1,450 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Dot } from '../src/dot.js'; +import { Formatter } from '../src/formatter.js'; +import { Stem } from '../src/stem.js'; +import { Tuplet } from '../src/tuplet.js'; +const TupletTests = { + Start() { + QUnit.module('Tuplet'); + const run = VexFlowTests.runTests; + run('Simple Tuplet', simple); + run('Beamed Tuplet', beamed); + run('Ratioed Tuplet', ratio); + run('Bottom Tuplet', bottom); + run('Bottom Ratioed Tuplet', bottomRatio); + run('Awkward Tuplet', awkward); + run('Complex Tuplet', complex); + run('Mixed Stem Direction Tuplet', mixedTop); + run('Mixed Stem Direction Bottom Tuplet', mixedBottom); + run('Nested Tuplets', nested); + run('Single Tuplets', single); + }, +}; +const set = (key) => (value) => (object) => { + object[key] = value; + return object; +}; +const setStemDirection = set('stem_direction'); +const setStemUp = setStemDirection(Stem.UP); +const setStemDown = setStemDirection(Stem.DOWN); +const setDurationToQuarterNote = set('duration')('4'); +function simple(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/4'); + const notes = [ + { keys: ['g/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Tuplet({ notes: notes.slice(0, 3) }); + f.Tuplet({ notes: notes.slice(3, 6) }); + const voice = f + .Voice({ time: { num_beats: 3, beat_value: 4 } }) + .setStrict(true) + .addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Simple Test'); +} +function beamed(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/8'); + const notes = [ + { keys: ['b/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ notes: notes.slice(0, 3) }); + f.Beam({ notes: notes.slice(3, 10) }); + f.Tuplet({ notes: notes.slice(0, 3) }); + f.Tuplet({ notes: notes.slice(3, 10) }); + const voice = f + .Voice({ time: { num_beats: 3, beat_value: 8 } }) + .setStrict(true) + .addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Beamed Test'); +} +function ratio(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('4/4'); + const notes = [ + { keys: ['f/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['b/4'], duration: '4' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['e/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(3, 6), + }); + f.Tuplet({ + notes: notes.slice(0, 3), + options: { + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(3, 6), + options: { + ratioed: true, + notes_occupied: 4, + }, + }); + const voice = f.Voice().setStrict(true).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Ratioed Test'); +} +function bottom(options) { + const f = VexFlowTests.makeFactory(options, 350, 160); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('3/4'); + const notes = [ + { keys: ['f/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + { keys: ['g/4'], duration: '4' }, + { keys: ['d/5'], duration: '8' }, + { keys: ['g/3'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + ] + .map(setStemDown) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(3, 6), + }); + f.Tuplet({ + notes: notes.slice(0, 3), + options: { location: Tuplet.LOCATION_BOTTOM }, + }); + f.Tuplet({ + notes: notes.slice(3, 6), + options: { location: Tuplet.LOCATION_BOTTOM }, + }); + const voice = f + .Voice({ time: { num_beats: 3, beat_value: 4 } }) + .setStrict(true) + .addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Bottom Test'); +} +function bottomRatio(options) { + const f = VexFlowTests.makeFactory(options, 350, 160); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('5/8'); + const notes = [ + { keys: ['f/4'], duration: '4' }, + { keys: ['c/4'], duration: '4' }, + { keys: ['d/4'], duration: '4' }, + { keys: ['d/5'], duration: '8' }, + { keys: ['g/5'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + ] + .map(setStemDown) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(3, 6), + }); + f.Tuplet({ + notes: notes.slice(0, 3), + options: { + location: Tuplet.LOCATION_BOTTOM, + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(3, 6), + options: { + location: Tuplet.LOCATION_BOTTOM, + notes_occupied: 1, + }, + }); + const voice = f + .Voice({ time: { num_beats: 5, beat_value: 8 } }) + .setStrict(true) + .addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Bottom Ratioed Test'); +} +function awkward(options) { + const f = VexFlowTests.makeFactory(options, 370, 160); + const stave = f.Stave({ x: 10, y: 10 }); + const notes = [ + { keys: ['g/4'], duration: '16' }, + { keys: ['b/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4'], duration: '16' }, + { keys: ['c/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['e/4'], duration: '16' }, + { keys: ['c/4'], duration: '8' }, + { keys: ['d/4'], duration: '8' }, + { keys: ['e/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ notes: notes.slice(0, 12) }); + f.Tuplet({ + notes: notes.slice(0, 12), + options: { + notes_occupied: 142, + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(12, 15), + options: { + ratioed: true, + }, + }).setBracketed(true); + const voice = f.Voice().setStrict(false).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Awkward Test'); +} +function complex(options) { + const f = VexFlowTests.makeFactory(options, 600); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); + const notes1 = [ + { keys: ['b/4'], duration: '8d' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['b/4'], duration: '16r' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['g/4'], duration: '32' }, + { keys: ['f/4'], duration: '32' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['b/4'], duration: '8' }, + { keys: ['a/4'], duration: '8' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + Dot.buildAndAttach([notes1[0]], { all: true }); + const notes2 = [{ keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }] + .map(setDurationToQuarterNote) + .map(setStemDown) + .map(f.StaveNote.bind(f)); + f.Beam({ notes: notes1.slice(0, 3) }); + f.Beam({ notes: notes1.slice(5, 9) }); + f.Beam({ notes: notes1.slice(11, 16) }); + f.Tuplet({ + notes: notes1.slice(0, 3), + }); + f.Tuplet({ + notes: notes1.slice(3, 11), + options: { + num_notes: 7, + notes_occupied: 4, + ratioed: false, + }, + }); + f.Tuplet({ + notes: notes1.slice(11, 16), + options: { + notes_occupied: 4, + }, + }); + const voice1 = f.Voice().setStrict(true).addTickables(notes1); + const voice2 = f.Voice().setStrict(true).addTickables(notes2); + new Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); + f.draw(); + options.assert.ok(true, 'Complex Test'); +} +function mixedTop(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }); + const notes = [ + { keys: ['a/4'], stem_direction: 1 }, + { keys: ['c/6'], stem_direction: -1 }, + { keys: ['a/4'], stem_direction: 1 }, + { keys: ['f/5'], stem_direction: 1 }, + { keys: ['a/4'], stem_direction: -1 }, + { keys: ['c/6'], stem_direction: -1 }, + ] + .map(setDurationToQuarterNote) + .map(f.StaveNote.bind(f)); + f.Tuplet({ + notes: notes.slice(0, 2), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(2, 4), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(4, 6), + options: { + notes_occupied: 3, + }, + }); + const voice = f.Voice().setStrict(false).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Mixed Stem Direction Tuplet'); +} +function mixedBottom(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }); + const notes = [ + { keys: ['f/3'], stem_direction: 1 }, + { keys: ['a/5'], stem_direction: -1 }, + { keys: ['a/4'], stem_direction: 1 }, + { keys: ['f/3'], stem_direction: 1 }, + { keys: ['a/4'], stem_direction: -1 }, + { keys: ['c/4'], stem_direction: -1 }, + ] + .map(setDurationToQuarterNote) + .map(f.StaveNote.bind(f)); + f.Tuplet({ + notes: notes.slice(0, 2), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(2, 4), + options: { + notes_occupied: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(4, 6), + options: { + notes_occupied: 3, + }, + }); + const voice = f.Voice().setStrict(false).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Mixed Stem Direction Bottom Tuplet'); +} +function nested(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); + const notes = [ + { keys: ['b/4'], duration: '4' }, + { keys: ['a/4'], duration: '4' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['f/4'], duration: '16' }, + { keys: ['a/4'], duration: '16' }, + { keys: ['g/4'], duration: '16' }, + { keys: ['b/4'], duration: '2' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(2, 7), + }); + f.Tuplet({ + notes: notes.slice(0, 7), + options: { + notes_occupied: 2, + num_notes: 3, + }, + }); + f.Tuplet({ + notes: notes.slice(2, 7), + options: { + notes_occupied: 4, + num_notes: 5, + }, + }); + const voice = f.Voice().setStrict(true).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Nested Tuplets'); +} +function single(options) { + const f = VexFlowTests.makeFactory(options); + const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); + const notes = [ + { keys: ['c/4'], duration: '4' }, + { keys: ['d/4'], duration: '8' }, + { keys: ['e/4'], duration: '8' }, + { keys: ['f/4'], duration: '8' }, + { keys: ['g/4'], duration: '8' }, + { keys: ['a/4'], duration: '2' }, + { keys: ['b/4'], duration: '4' }, + ] + .map(setStemUp) + .map(f.StaveNote.bind(f)); + f.Beam({ + notes: notes.slice(1, 4), + }); + f.Tuplet({ + notes: notes.slice(0, -1), + options: { + num_notes: 4, + notes_occupied: 3, + ratioed: true, + bracketed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(0, 1), + options: { + num_notes: 3, + notes_occupied: 2, + ratioed: true, + }, + }); + f.Tuplet({ + notes: notes.slice(1, 4), + options: { + num_notes: 3, + notes_occupied: 2, + }, + }); + f.Tuplet({ + notes: notes.slice(4, 5), + options: { + num_notes: 3, + notes_occupied: 2, + ratioed: true, + bracketed: true, + }, + }); + const voice = f + .Voice({ time: { num_beats: 4, beat_value: 4 } }) + .setStrict(true) + .addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + f.draw(); + options.assert.ok(true, 'Nested Tuplets'); +} +VexFlowTests.register(TupletTests); +export { TupletTests }; diff --git a/build/esm/tests/typeguard_tests.js b/build/esm/tests/typeguard_tests.js new file mode 100644 index 0000000000..ffe0a3cdde --- /dev/null +++ b/build/esm/tests/typeguard_tests.js @@ -0,0 +1,82 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { CanvasContext } from '../src/canvascontext.js'; +import { StaveNote } from '../src/stavenote.js'; +import { StemmableNote } from '../src/stemmablenote.js'; +import { TabNote } from '../src/tabnote.js'; +import { isCategory, isNote, isRenderContext, isStaveNote, isStemmableNote, isTabNote } from '../src/typeguard.js'; +const TypeGuardTests = { + Start() { + QUnit.module('TypeGuard'); + QUnit.test('Real VexFlow Types', real); + QUnit.test('Fake VexFlow Types in ES5', fakeES5); + QUnit.test('Fake VexFlow Types in ES6', fakeES6); + QUnit.test('Edge Case ES5/ES6', edgeCaseES5vsES6); + }, +}; +function real(assert) { + const s = new StaveNote({ keys: ['c/4'], duration: 'w' }); + assert.ok(isStaveNote(s), 'isStaveNote helper function'); + assert.ok(isCategory(s, 'StaveNote'), 'Use isCategory(s, "StaveNote") directly'); + assert.notOk(isTabNote(s), 'isTabNote helper function. s is NOT a TabNote.'); + const t = new TabNote({ positions: [{ str: 2, fret: 1 }], duration: '1' }); + assert.ok(isTabNote(t), 'isTabNote helper function'); + assert.notOk(isStaveNote(t), 't is NOT a StaveNote'); + assert.ok(isNote(s), 'StaveNote extends StemmableNote which extends Note, so s is a Note'); + assert.ok(isStemmableNote(t), 'TabNote extends StemmableNote'); + assert.ok(isNote(t), 'TabNote extends StemmableNote which extends Note, so t is a Note'); + const canvas = document.createElement('canvas'); + canvas.width = 800; + canvas.height = 400; + const ctx = new CanvasContext(canvas.getContext('2d')); + assert.ok(isRenderContext(ctx), 'ctx is a RenderContext'); +} +function checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote) { + assert.ok(isStemmableNote(fakeStemmableNote), 'Fake StemmableNote is a StemmableNote.'); + assert.notOk(isNote(fakeStemmableNote), 'Fake StemmableNote is not a Note (no ancestors with the correct CATEGORY).'); + assert.ok(isCategory(fakeStaveNote, 'StaveNote'), 'Fake StaveNote is a StaveNote.'); + assert.ok(isStaveNote(fakeStaveNote), 'Fake StaveNote is a StaveNote (via helper function).'); + assert.ok(isCategory(fakeStaveNote, 'StemmableNote'), 'Fake StaveNote is also a StemmableNote (via inheritance).'); + assert.notOk(isNote(fakeStaveNote), 'Fake StaveNote is not a Note. CATEGORY does not match.'); +} +function fakeES5(assert) { + function FakeStemmableNote() { + this.isFake = true; + } + FakeStemmableNote.CATEGORY = StemmableNote.CATEGORY; + function FakeStaveNote() { + FakeStemmableNote.call(this); + } + FakeStaveNote.CATEGORY = StaveNote.CATEGORY; + FakeStaveNote.prototype = Object.create(FakeStemmableNote.prototype); + FakeStaveNote.prototype.constructor = FakeStaveNote; + const fakeStemmableNote = new FakeStemmableNote(); + const fakeStaveNote = new FakeStaveNote(); + checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote); +} +function fakeES6(assert) { + class FakeStemmableNote { + } + FakeStemmableNote.CATEGORY = StemmableNote.CATEGORY; + class FakeStaveNote extends FakeStemmableNote { + } + FakeStaveNote.CATEGORY = StaveNote.CATEGORY; + const fakeStemmableNote = new FakeStemmableNote(); + const fakeStaveNote = new FakeStaveNote(); + checkFakeObjects(assert, fakeStemmableNote, fakeStaveNote); +} +function edgeCaseES5vsES6(assert) { + class Z extends Object { + } + class Y extends Z { + } + class X extends Y { + } + const zInstance = new Z(); + const xInstance = new X(); + assert.ok(xInstance instanceof Object, 'es5 & es6: x IS an instanceof Object'); + assert.ok(zInstance instanceof Z, 'es6: z IS an instanceof Z'); + assert.ok(xInstance instanceof Y, 'es6: x IS an instanceof Y'); + assert.ok(xInstance instanceof Z, 'es6: x IS an instanceof Z'); +} +VexFlowTests.register(TypeGuardTests); +export { TypeGuardTests }; diff --git a/build/esm/tests/unison_tests.js b/build/esm/tests/unison_tests.js new file mode 100644 index 0000000000..3e398a37f8 --- /dev/null +++ b/build/esm/tests/unison_tests.js @@ -0,0 +1,74 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Tables } from '../src/tables.js'; +const UnisonTests = { + Start() { + QUnit.module('Unison'); + const run = VexFlowTests.runTests; + run('Simple(true)', simple, { unison: true, voice1: 'e4/q, e4/q, e4/h', voice2: 'e4/8, e4/8, e4/q, e4/h' }); + run('Simple(false)', simple, { unison: false, voice1: 'e4/q, e4/q, e4/h', voice2: 'e4/8, e4/8, e4/q, e4/h' }); + run('Accidentals(true)', simple, { + unison: true, + voice1: 'e4/q, e#4/q, e#4/h', + voice2: 'e4/8, e4/8, eb4/q, eb4/h', + }); + run('Accidentals(false)', simple, { + unison: false, + voice1: 'e4/q, e#4/q, e#4/h', + voice2: 'e4/8, e4/8, eb4/q, eb4/h', + }); + run('Dots(true)', simple, { unison: true, voice1: 'e4/q.., e4/16, e4/h', voice2: '(a4 e4)/q., e4/8, e4/h' }); + run('Dots(false)', simple, { unison: false, voice1: 'e4/q.., e4/16, e4/h', voice2: '(a4 e4)/q., e4/8, e4/h' }); + run('Breve(true)', breve, { unison: true }); + run('Breve(false)', breve, { unison: false }); + run('Style(true)', style, { unison: true }); + run('Style(false)', style, { unison: false }); + }, +}; +function simple(options) { + Tables.UNISON = options.params.unison; + const vf = VexFlowTests.makeFactory(options, 500, 200); + const score = vf.EasyScore(); + const system = vf.System({ y: 40, x: 10, width: 400 }); + system.addStave({ + voices: [score.voice(score.notes(options.params.voice1)), score.voice(score.notes(options.params.voice2))], + }); + system.getStaves()[0].setClef('treble'); + system.getStaves()[0].setTimeSignature('4/4'); + vf.draw(); + options.assert.expect(0); +} +function style(options) { + Tables.UNISON = options.params.unison; + const vf = VexFlowTests.makeFactory(options, 500, 200); + const score = vf.EasyScore(); + const system = vf.System({ y: 40, x: 10, width: 400 }); + const notes1 = score.notes('e4/q, e4/q, e4/h'); + const notes2 = score.notes('e4/8, e4/8, e4/q, e4/h'); + notes1[2].setStyle({ fillStyle: 'blue', strokeStyle: 'blue' }); + notes2[3].setStyle({ fillStyle: 'green', strokeStyle: 'green' }); + system.addStave({ + voices: [score.voice(notes1), score.voice(notes2)], + }); + system.getStaves()[0].setClef('treble'); + system.getStaves()[0].setTimeSignature('4/4'); + vf.draw(); + options.assert.expect(0); +} +function breve(options) { + Tables.UNISON = options.params.unison; + const vf = VexFlowTests.makeFactory(options, 500, 200); + const score = vf.EasyScore(); + const system = vf.System({ y: 40, x: 10, width: 400 }); + system.addStave({ + voices: [ + score.voice([vf.StaveNote({ keys: ['e/4'], duration: '1/2' })], { time: '8/4' }), + score.voice(score.notes('e4/1, e4/1'), { time: '8/4' }), + ], + }); + system.getStaves()[0].setClef('treble'); + system.getStaves()[0].setTimeSignature('8/4'); + vf.draw(); + options.assert.expect(0); +} +VexFlowTests.register(UnisonTests); +export { UnisonTests }; diff --git a/build/esm/tests/vexflow_test_helpers.js b/build/esm/tests/vexflow_test_helpers.js new file mode 100644 index 0000000000..fb57202bf4 --- /dev/null +++ b/build/esm/tests/vexflow_test_helpers.js @@ -0,0 +1,296 @@ +import { Factory, Flow, Font, Renderer } from '../src/index.js'; +import { globalObject } from '../src/util.js'; +const global = globalObject(); +let originalFontNames; +function useTempFontStack(fontName) { + originalFontNames = Flow.getMusicFont(); + Flow.setMusicFont(...VexFlowTests.FONT_STACKS[fontName]); +} +function restoreOriginalFontStack() { + Flow.setMusicFont(...originalFontNames); +} +if (!global.$) { + global.$ = (param) => { + let element; + if (typeof param !== 'string') { + element = param; + } + else if (param.startsWith('<')) { + const tagName = param.match(/[A-Za-z]+/g)[0]; + element = document.createElement(tagName); + } + else { + element = document.querySelector(param); + } + const $element = { + get(index) { + return element; + }, + addClass(c) { + element.classList.add(c); + return $element; + }, + text(t) { + element.textContent = t; + return $element; + }, + html(h) { + if (!h) { + return element.innerHTML; + } + else { + element.innerHTML = h; + return $element; + } + }, + append(...elementsToAppend) { + elementsToAppend.forEach((e) => { + element.appendChild(e); + }); + return $element; + }, + attr(attrName, val) { + element.setAttribute(attrName, val); + return $element; + }, + }; + return $element; + }; +} +function sanitizeName(name) { + return name.replace(/[^a-zA-Z0-9]/g, '_'); +} +const CANVAS_TEST_CONFIG = { + backend: Renderer.Backends.CANVAS, + tagName: 'canvas', + testType: 'Canvas', + fontStacks: ['Bravura'], +}; +const CANVAS_TEXT_CONFIG = { + backend: Renderer.Backends.CANVAS, + tagName: 'canvas', + testType: 'Canvas', + fontStacks: ['Bravura'], +}; +const SVG_TEST_CONFIG = { + backend: Renderer.Backends.SVG, + tagName: 'div', + testType: 'SVG', + fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'], +}; +const SVG_TEXT_CONFIG = { + backend: Renderer.Backends.SVG, + tagName: 'div', + testType: 'SVG', + fontStacks: ['Bravura'], +}; +const NODE_TEST_CONFIG = { + backend: Renderer.Backends.CANVAS, + tagName: 'canvas', + testType: 'NodeCanvas', + fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'], +}; +class VexFlowTests { + static register(test) { + VexFlowTests.tests.push(test); + } + static parseJobOptions(runOptions) { + let { jobs, job } = runOptions || { jobs: 1, job: 0 }; + if (window) { + const { location } = window; + if (location) { + const sps = new URLSearchParams(location.search); + const jobsParam = sps.get('jobs'); + const jobParam = sps.get('job'); + if (jobsParam) { + jobs = parseInt(jobsParam, 10); + } + if (jobParam) { + job = parseInt(jobParam, 10); + } + } + } + return { + jobs, + job, + }; + } + static run(runOptions) { + const { jobs, job } = VexFlowTests.parseJobOptions(runOptions); + VexFlowTests.tests.forEach((test, idx) => { + if (jobs === 1 || idx % jobs === job) { + test.Start(); + } + }); + } + static set NODE_FONT_STACKS(fontStacks) { + NODE_TEST_CONFIG.fontStacks = fontStacks; + } + static generateTestID(prefix) { + return prefix + '_' + VexFlowTests.NEXT_TEST_ID++; + } + static runTests(name, testFunc, params) { + VexFlowTests.runCanvasTest(name, testFunc, params); + VexFlowTests.runSVGTest(name, testFunc, params); + VexFlowTests.runNodeTest(name, testFunc, params); + } + static runTextTests(name, testFunc, params) { + VexFlowTests.runCanvasText(name, testFunc, params); + VexFlowTests.runSVGText(name, testFunc, params); + } + static createTest(elementId, testTitle, tagName, titleId = '') { + const anchorTestTitle = `${testTitle}`; + const title = $('
      ').addClass('name').attr('id', titleId).html(anchorTestTitle).get(0); + const vexOutput = $(`<${tagName}/>`).addClass('vex-tabdiv').attr('id', elementId).get(0); + const container = $('
      ').addClass('testcanvas').append(title, vexOutput).get(0); + $('#qunit-tests').append(container); + return vexOutput; + } + static makeFactory(options, width = 450, height = 140) { + const { elementId, backend } = options; + return new Factory({ renderer: { elementId, backend, width, height } }); + } + static runCanvasTest(name, testFunc, params) { + if (VexFlowTests.RUN_CANVAS_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEST_CONFIG), { name, testFunc, params, helper })); + } + } + static runCanvasText(name, testFunc, params) { + if (VexFlowTests.RUN_CANVAS_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEXT_CONFIG), { name, testFunc, params, helper })); + } + } + static runSVGTest(name, testFunc, params) { + if (VexFlowTests.RUN_SVG_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEST_CONFIG), { name, testFunc, params, helper })); + } + } + static runSVGText(name, testFunc, params) { + if (VexFlowTests.RUN_SVG_TESTS) { + const helper = null; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEXT_CONFIG), { name, testFunc, params, helper })); + } + } + static runNodeTest(name, testFunc, params) { + if (VexFlowTests.RUN_NODE_TESTS) { + const helper = VexFlowTests.runNodeTestHelper; + VexFlowTests.runWithParams(Object.assign(Object.assign({}, NODE_TEST_CONFIG), { name, testFunc, params, helper })); + } + } + static runNodeTestHelper(fontName, element) { + if (Renderer.lastContext !== undefined) { + const moduleName = sanitizeName(QUnit.module.name); + const testName = sanitizeName(QUnit.test.name); + const onlyBravura = NODE_TEST_CONFIG.fontStacks.length === 1 && fontName === 'Bravura'; + const fontInfo = onlyBravura ? '' : `.${fontName}`; + const fileName = `${VexFlowTests.NODE_IMAGEDIR}/${moduleName}.${testName}${fontInfo}.png`; + const imageData = element.toDataURL().split(';base64,').pop(); + const imageBuffer = Buffer.from(imageData, 'base64'); + VexFlowTests.shims.fs.writeFileSync(fileName, imageBuffer, { encoding: 'base64' }); + } + } + static runWithParams({ fontStacks, testFunc, name, params, backend, tagName, testType, helper }) { + if (name === undefined) { + throw new Error('Test name is undefined.'); + } + const testTypeLowerCase = testType.toLowerCase(); + fontStacks.forEach((fontStackName) => { + QUnit.test(name, (assert) => { + useTempFontStack(fontStackName); + const elementId = VexFlowTests.generateTestID(`${testTypeLowerCase}_` + fontStackName); + const moduleName = assert.test.module.name; + const title = moduleName + ' › ' + name + ` › ${testType} + ${fontStackName}`; + let prefix = ''; + if (testTypeLowerCase === 'canvas') { + prefix = testTypeLowerCase + '_'; + } + else { + } + const titleId = `${prefix}${sanitizeName(moduleName)}.${sanitizeName(name)}.${fontStackName}`; + const element = VexFlowTests.createTest(elementId, title, tagName, titleId); + const options = { elementId, params, assert, backend }; + const isSVG = backend === Renderer.Backends.SVG; + const contextBuilder = isSVG ? Renderer.getSVGContext : Renderer.getCanvasContext; + testFunc(options, contextBuilder); + restoreOriginalFontStack(); + if (helper) + helper(fontStackName, element); + }); + }); + } + static plotLegendForNoteWidth(ctx, x, y) { + ctx.save(); + ctx.setFont(Font.SANS_SERIF, 8); + const spacing = 12; + let lastY = y; + function legend(color, text) { + ctx.beginPath(); + ctx.setStrokeStyle(color); + ctx.setFillStyle(color); + ctx.setLineWidth(10); + ctx.moveTo(x, lastY - 4); + ctx.lineTo(x + 10, lastY - 4); + ctx.stroke(); + ctx.setFillStyle('black'); + ctx.fillText(text, x + 15, lastY); + lastY += spacing; + } + legend('green', 'Note + Flag'); + legend('red', 'Modifiers'); + legend('#999', 'Displaced Head'); + legend('#DDD', 'Formatter Shift'); + ctx.restore(); + } +} +VexFlowTests.tests = []; +VexFlowTests.RUN_CANVAS_TESTS = true; +VexFlowTests.RUN_SVG_TESTS = true; +VexFlowTests.RUN_NODE_TESTS = false; +VexFlowTests.Font = { size: 10 }; +VexFlowTests.FONT_STACKS = { + Bravura: ['Bravura', 'Custom'], + Gonville: ['Gonville', 'Bravura', 'Custom'], + Petaluma: ['Petaluma', 'Gonville', 'Bravura', 'Custom'], + Leland: ['Leland', 'Bravura', 'Custom'], +}; +VexFlowTests.NEXT_TEST_ID = 0; +export { VexFlowTests }; +export const concat = (a, b) => a.concat(b); +export const MAJOR_KEYS = [ + 'C', + 'F', + 'Bb', + 'Eb', + 'Ab', + 'Db', + 'Gb', + 'Cb', + 'G', + 'D', + 'A', + 'E', + 'B', + 'F#', + 'C#', +]; +export const MINOR_KEYS = [ + 'Am', + 'Dm', + 'Gm', + 'Cm', + 'Fm', + 'Bbm', + 'Ebm', + 'Abm', + 'Em', + 'Bm', + 'F#m', + 'C#m', + 'G#m', + 'D#m', + 'A#m', +]; +Flow.Test = VexFlowTests; diff --git a/build/esm/tests/vf_prefix_tests.js b/build/esm/tests/vf_prefix_tests.js new file mode 100644 index 0000000000..bae6b9c6e4 --- /dev/null +++ b/build/esm/tests/vf_prefix_tests.js @@ -0,0 +1,115 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Accidental, Annotation, Articulation, Barline, BarNote, Beam, Bend, BoundingBox, BoundingBoxComputation, ChordSymbol, Clef, ClefNote, Crescendo, Curve, Dot, EasyScore, Element, Factory, Flow, Font, Formatter, Fraction, FretHandFinger, GhostNote, Glyph, GlyphNote, GraceNote, GraceNoteGroup, GraceTabNote, KeyManager, KeySignature, KeySigNote, Modifier, ModifierContext, MultiMeasureRest, Music, Note, NoteHead, NoteSubGroup, Ornament, Parser, PedalMarking, Registry, Renderer, RepeatNote, Repetition, Stave, StaveConnector, StaveHairpin, StaveLine, StaveModifier, StaveNote, StaveTempo, StaveText, StaveTie, Stem, StringNumber, Stroke, System, TabNote, TabSlide, TabStave, TabTie, TextBracket, TextDynamics, TextFormatter, TextNote, TickContext, TimeSignature, TimeSigNote, Tremolo, Tuning, Tuplet, Vibrato, VibratoBracket, Voice, Volta, } from '../src/index.js'; +const VFPrefixTests = { + Start() { + QUnit.module('VF.* API'); + QUnit.test('VF.* API', VF_Prefix); + QUnit.test('VF Alias', VF_Alias); + }, +}; +function VF_Prefix(assert) { + const VF = Vex.Flow; + assert.equal(Accidental, VF.Accidental); + assert.equal(Annotation, VF.Annotation); + assert.equal(Articulation, VF.Articulation); + assert.equal(Barline, VF.Barline); + assert.equal(BarNote, VF.BarNote); + assert.equal(Beam, VF.Beam); + assert.equal(Bend, VF.Bend); + assert.equal(BoundingBox, VF.BoundingBox); + assert.equal(BoundingBoxComputation, VF.BoundingBoxComputation); + assert.equal(ChordSymbol, VF.ChordSymbol); + assert.equal(Clef, VF.Clef); + assert.equal(ClefNote, VF.ClefNote); + assert.equal(Crescendo, VF.Crescendo); + assert.equal(Curve, VF.Curve); + assert.equal(Dot, VF.Dot); + assert.equal(EasyScore, VF.EasyScore); + assert.equal(Element, VF.Element); + assert.equal(Factory, VF.Factory); + assert.equal(Flow.RESOLUTION, VF.RESOLUTION); + assert.equal(Font, VF.Font); + assert.equal(Formatter, VF.Formatter); + assert.propEqual(new Formatter(), new VF.Formatter(), 'new Formatter()'); + assert.equal(Fraction, VF.Fraction); + assert.equal(FretHandFinger, VF.FretHandFinger); + assert.equal(GhostNote, VF.GhostNote); + assert.equal(Glyph, VF.Glyph); + assert.equal(GlyphNote, VF.GlyphNote); + assert.equal(GraceNote, VF.GraceNote); + assert.equal(GraceNoteGroup, VF.GraceNoteGroup); + assert.equal(GraceTabNote, VF.GraceTabNote); + assert.equal(KeyManager, VF.KeyManager); + assert.equal(KeySignature, VF.KeySignature); + assert.equal(KeySigNote, VF.KeySigNote); + assert.equal(Modifier, VF.Modifier); + assert.equal(ModifierContext, VF.ModifierContext); + assert.equal(MultiMeasureRest, VF.MultiMeasureRest); + assert.equal(Music, VF.Music); + assert.equal(Note, VF.Note); + assert.equal(NoteHead, VF.NoteHead); + assert.equal(NoteSubGroup, VF.NoteSubGroup); + assert.equal(Ornament, VF.Ornament); + assert.equal(Parser, VF.Parser); + assert.equal(PedalMarking, VF.PedalMarking); + assert.equal(Registry, VF.Registry); + assert.equal(Renderer, VF.Renderer); + assert.equal(RepeatNote, VF.RepeatNote); + assert.equal(Repetition, VF.Repetition); + assert.equal(Stave, VF.Stave); + assert.notEqual(Stave, VF.StaveNote); + assert.equal(StaveConnector, VF.StaveConnector); + assert.equal(StaveHairpin, VF.StaveHairpin); + assert.equal(StaveLine, VF.StaveLine); + assert.equal(StaveModifier, VF.StaveModifier); + assert.equal(StaveNote, VF.StaveNote); + assert.equal(StaveTempo, VF.StaveTempo); + assert.equal(StaveText, VF.StaveText); + assert.equal(StaveTie, VF.StaveTie); + assert.equal(Stem, VF.Stem); + assert.equal(StringNumber, VF.StringNumber); + assert.equal(Stroke, VF.Stroke); + assert.equal(System, VF.System); + assert.equal(TabNote, VF.TabNote); + assert.equal(TabSlide, VF.TabSlide); + assert.equal(TabStave, VF.TabStave); + assert.equal(TabTie, VF.TabTie); + assert.equal(TextBracket, VF.TextBracket); + assert.equal(TextDynamics, VF.TextDynamics); + assert.equal(TextFormatter, VF.TextFormatter); + assert.equal(TextNote, VF.TextNote); + assert.equal(TickContext, VF.TickContext); + assert.equal(TimeSignature, VF.TimeSignature); + assert.equal(TimeSigNote, VF.TimeSigNote); + assert.equal(Tremolo, VF.Tremolo); + assert.equal(Tuning, VF.Tuning); + assert.equal(Tuplet, VF.Tuplet); + assert.equal(Vibrato, VF.Vibrato); + assert.equal(VibratoBracket, VF.VibratoBracket); + assert.equal(Voice, VF.Voice); + assert.equal(Volta, VF.Volta); +} +function VF_Alias(assert) { + const Flow = Vex.Flow; + const VFAliases = { + get VFAccidental() { + return Flow.Accidental; + }, + get VFAnnotation() { + return Flow.Annotation; + }, + get VFVibrato() { + return Flow.Vibrato; + }, + }; + const { VFVibrato, VFAccidental, VFAnnotation } = VFAliases; + assert.equal(Accidental, VFAccidental); + assert.equal(Annotation, VFAnnotation); + const vibrato = new VFVibrato(); + assert.ok(vibrato); + const acc1 = new VFAccidental('##'); + const acc2 = new Accidental('##'); + assert.equal(acc1.type, acc2.type); +} +VexFlowTests.register(VFPrefixTests); +export { VFPrefixTests }; diff --git a/build/esm/tests/vibrato_tests.js b/build/esm/tests/vibrato_tests.js new file mode 100644 index 0000000000..3d194870f2 --- /dev/null +++ b/build/esm/tests/vibrato_tests.js @@ -0,0 +1,86 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Bend, Font, Formatter, TabNote, TabStave, Vibrato } from '../src/index.js'; +const VibratoTests = { + Start() { + QUnit.module('Vibrato'); + const run = VexFlowTests.runTests; + run('Simple Vibrato', simple); + run('Harsh Vibrato', harsh); + run('Vibrato with Bend', withBend); + }, +}; +const tabNote = (noteStruct) => new TabNote(noteStruct); +function simple(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new Vibrato(), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new Vibrato(), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Simple Vibrato'); +} +function harsh(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.5, 1.5); + ctx.font = '10pt Arial'; + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 10 }, + { str: 4, fret: 9 }, + ], + duration: 'h', + }).addModifier(new Vibrato().setHarsh(true), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new Vibrato().setHarsh(true), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Harsh Vibrato'); +} +function withBend(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 500, 240); + ctx.scale(1.3, 1.3); + ctx.setFont(Font.SANS_SERIF, VexFlowTests.Font.size); + const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); + const notes = [ + tabNote({ + positions: [ + { str: 2, fret: 9 }, + { str: 3, fret: 9 }, + ], + duration: 'q', + }) + .addModifier(new Bend('1/2', true), 0) + .addModifier(new Bend('1/2', true), 1) + .addModifier(new Vibrato(), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'q', + }) + .addModifier(new Bend('Full', false), 0) + .addModifier(new Vibrato().setVibratoWidth(60), 0), + tabNote({ + positions: [{ str: 2, fret: 10 }], + duration: 'h', + }).addModifier(new Vibrato().setVibratoWidth(120).setHarsh(true), 0), + ]; + Formatter.FormatAndDraw(ctx, stave, notes); + options.assert.ok(true, 'Vibrato with Bend'); +} +VexFlowTests.register(VibratoTests); +export { VibratoTests }; diff --git a/build/esm/tests/vibratobracket_tests.js b/build/esm/tests/vibratobracket_tests.js new file mode 100644 index 0000000000..d4e7abfb17 --- /dev/null +++ b/build/esm/tests/vibratobracket_tests.js @@ -0,0 +1,45 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +const VibratoBracketTests = { + Start() { + QUnit.module('VibratoBracket'); + const run = VexFlowTests.runTests; + run('Simple VibratoBracket', simple); + run('Harsh VibratoBracket Without End Note', withoutEndNote); + run('Harsh VibratoBracket Without Start Note', withoutStartNote); + }, +}; +function createTest(noteGroup, setupVibratoBracket) { + return (options) => { + const factory = VexFlowTests.makeFactory(options, 650, 200); + const stave = factory.Stave(); + const score = factory.EasyScore(); + const voice = score.voice(score.notes(noteGroup)); + setupVibratoBracket(factory, voice.getTickables()); + factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); + factory.draw(); + options.assert.ok(true); + }; +} +const simple = createTest('c4/4, c4, c4, c4', (factory, notes) => { + factory.VibratoBracket({ + from: notes[0], + to: notes[3], + options: { line: 2 }, + }); +}); +const withoutEndNote = createTest('c4/4, c4, c4, c4', (factory, notes) => { + factory.VibratoBracket({ + from: notes[2], + to: null, + options: { line: 2, harsh: true }, + }); +}); +const withoutStartNote = createTest('c4/4, c4, c4, c4', (factory, notes) => { + factory.VibratoBracket({ + from: null, + to: notes[2], + options: { line: 2, harsh: true }, + }); +}); +VexFlowTests.register(VibratoBracketTests); +export { VibratoBracketTests }; diff --git a/build/esm/tests/voice_tests.js b/build/esm/tests/voice_tests.js new file mode 100644 index 0000000000..f45fdd22c1 --- /dev/null +++ b/build/esm/tests/voice_tests.js @@ -0,0 +1,69 @@ +import { VexFlowTests } from './vexflow_test_helpers.js'; +import { Flow } from '../src/flow.js'; +import { Formatter } from '../src/formatter.js'; +import { Stave } from '../src/stave.js'; +import { Barline } from '../src/stavebarline.js'; +import { StaveNote } from '../src/stavenote.js'; +import { Voice } from '../src/voice.js'; +import { MockTickable } from './mocks.js'; +const VoiceTests = { + Start() { + QUnit.module('Voice'); + QUnit.test('Strict Test', strict); + QUnit.test('Ignore Test', ignore); + VexFlowTests.runTests('Full Voice Mode Test', full); + }, +}; +const BEAT = (1 * Flow.RESOLUTION) / 4; +const createTickable = () => new MockTickable().setTicks(BEAT); +function strict(assert) { + assert.expect(8); + const tickables = [createTickable(), createTickable(), createTickable()]; + const voice = new Voice(Flow.TIME4_4); + assert.equal(voice.getTotalTicks().value(), BEAT * 4, '4/4 Voice has 4 beats'); + assert.equal(voice.getTicksUsed().value(), BEAT * 0, 'No beats in voice'); + voice.addTickables(tickables); + assert.equal(voice.getTicksUsed().value(), BEAT * 3, 'Three beats in voice'); + voice.addTickable(createTickable()); + assert.equal(voice.getTicksUsed().value(), BEAT * 4, 'Four beats in voice'); + assert.equal(voice.isComplete(), true, 'Voice is complete'); + const numeratorBeforeException = voice.getTicksUsed().numerator; + assert.throws(() => voice.addTickable(createTickable()), /BadArgument/, '"Too many ticks" exception'); + assert.equal(voice.getTicksUsed().numerator, numeratorBeforeException, 'Revert `ticksUsed` after a "Too many ticks" exception'); + assert.equal(voice.getSmallestTickCount().value(), BEAT, 'Smallest tick count is BEAT'); +} +function ignore(assert) { + const tickables = [ + createTickable(), + createTickable(), + createTickable().setIgnoreTicks(true), + createTickable(), + createTickable().setIgnoreTicks(true), + createTickable(), + ]; + const voice = new Voice(Flow.TIME4_4); + voice.addTickables(tickables); + assert.ok(true, 'all pass'); +} +function full(options, contextBuilder) { + const ctx = contextBuilder(options.elementId, 550, 200); + const stave = new Stave(10, 50, 500).addClef('treble').addTimeSignature('4/4').setEndBarType(Barline.type.END); + const notes = [ + new StaveNote({ keys: ['c/4'], duration: '4' }), + new StaveNote({ keys: ['d/4'], duration: '4' }), + new StaveNote({ keys: ['r/4'], duration: '4r' }), + ]; + notes.forEach((note) => note.setStave(stave)); + const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.FULL).addTickables(notes); + new Formatter().joinVoices([voice]).formatToStave([voice], stave); + stave.setContext(ctx).draw(); + voice.draw(ctx); + const bb = voice.getBoundingBox(); + if (bb) { + ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); + } + ctx.stroke(); + options.assert.throws(() => voice.addTickable(new StaveNote({ keys: ['c/4'], duration: '2' })), /BadArgument/, 'Voice cannot exceed full amount of ticks'); +} +VexFlowTests.register(VoiceTests); +export { VoiceTests }; diff --git a/build/types/entry/vexflow-bravura.d.ts b/build/types/entry/vexflow-bravura.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow-bravura.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-core.d.ts b/build/types/entry/vexflow-core.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow-core.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-debug.d.ts b/build/types/entry/vexflow-debug.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow-debug.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-font-bravura.d.ts b/build/types/entry/vexflow-font-bravura.d.ts new file mode 100644 index 0000000000..e49fb945ac --- /dev/null +++ b/build/types/entry/vexflow-font-bravura.d.ts @@ -0,0 +1,3930 @@ +export declare const Font: { + data: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + barlineTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlusSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRightSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeftSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWholeSquare: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareWhite: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesis: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadMoonBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleLeftBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRightBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRoundDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKomaSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKoron: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSori: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkUpbow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassScoop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassDoitMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallLipShort: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassLiftMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallRoughMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassBend: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteClosed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteOpen: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFlip: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassJazzTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassSmear: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedLeftHandPizzicato: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pictChokeCymbal: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat1Bar: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat2Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat4Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeatBarSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymHalfDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymAugmented: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMajorSeventh: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMinor: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiagonalArrangementSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v7KleismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v7KleismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal25SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal25SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp25SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat25SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v7kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v7kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v7kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v7kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp25SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat25SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp35MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat35MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp35LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat35LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp25SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat25SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v7kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v7kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11KleismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11KleismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal55CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal55CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v11SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v11SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v11SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v11SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp55CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat55CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp55CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat55CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v11SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v11SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v11SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v11SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7v11CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7v11CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp55CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat55CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp17CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat17CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7v11kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7v11kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v19CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v19CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v23SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v23SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp23CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat23CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19SchismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19SchismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17KleismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17KleismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal143CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal143CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v49CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v49CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v19CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v19CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v49MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v49MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v49CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v49CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp143CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat143CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19sDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19sUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19sUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19sDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp143CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat143CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v49CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v49CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v13MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v13MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v19MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v19MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v49MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v49MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v19LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v19LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v13LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v13LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp49SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat49SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp11v49CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat11v49CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp143CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat143CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp17kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat17kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp19sDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat19sUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalShaftUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalShaftDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalAcute: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalGrave: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1MinaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1MinaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2MinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2MinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1TinaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1TinaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal3TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal3TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal4TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal4TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal6TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal6TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal8TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal8TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal9TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal9TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFractionalTinaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFractionalTinaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlatAndFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; + }; + metrics: { + smufl: boolean; + stave: { + padding: number; + endPaddingMax: number; + endPaddingMin: number; + unalignedNotePadding: number; + }; + accidental: { + noteheadAccidentalPadding: number; + leftPadding: number; + accidentalSpacing: number; + }; + chordSymbol: { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: { + csymDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymHalfDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymAugmented: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymDiagonalArrangementSlash: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMinor: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMajorSeventh: { + leftSideBearing: number; + yOffset: number; + advanceWidth: number; + }; + accidentalSharp: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + accidentalFlat: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + }; + }; + clef_default: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + clef_small: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + ornament: { + brassScoop: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassDoitMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallLipShort: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassLiftMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallRoughMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassBend: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteClosed: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteOpen: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFlip: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassJazzTurn: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassSmear: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + }; + parenthesis: { + default: { + width: number; + }; + gracenote: { + width: number; + }; + }; + pedalMarking: {}; + digits: { + shiftLine: number; + shiftY: number; + }; + articulation: { + articStaccatissimoAbove: { + padding: number; + }; + articStaccatissimoBelow: { + padding: number; + }; + }; + tremolo: { + default: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + grace: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + }; + staveRepetition: { + symbolText: { + offsetX: number; + offsetY: number; + spacing: number; + }; + coda: { + offsetY: number; + }; + segno: { + offsetY: number; + }; + }; + noteHead: { + minPadding: number; + }; + stem: { + heightAdjustmentForFlag: number; + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadSquareWhite: { + offsetYBaseStemDown: number; + offsetYBaseStemUp: number; + }; + }; + }; + stringNumber: { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; + }; + tuplet: { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; + }; + glyphs: { + coda: { + shiftX: number; + shiftY: number; + }; + segno: { + shiftX: number; + }; + flag: { + shiftX: number; + staveTempo: { + shiftX: number; + }; + }; + clef_default: {}; + clef_small: { + gClef: { + shiftY: number; + }; + }; + clefNote_default: {}; + clefNote_small: {}; + stroke_straight: { + arrowheadBlackDown: { + shiftX: number; + }; + arrowheadBlackUp: { + shiftX: number; + }; + }; + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: number; + shiftY: number; + }; + arrowheadBlackUp: { + shiftX: number; + shiftY: number; + }; + }; + textNote: { + breathMarkTick: { + shiftY: number; + }; + breathMarkComma: {}; + segno: { + shiftX: number; + shiftY: number; + }; + coda: { + shiftX: number; + shiftY: number; + }; + ornamentTrill: { + shiftX: number; + shiftY: number; + }; + ornamentTurn: {}; + ornamentTurnSlash: {}; + ornamentMordent: { + shiftX: number; + }; + ornamentShortTrill: { + shiftX: number; + }; + }; + noteHead: {}; + chordSymbol: { + scale: number; + }; + }; + }; +}; +export default Font; diff --git a/build/types/entry/vexflow-font-custom.d.ts b/build/types/entry/vexflow-font-custom.d.ts new file mode 100644 index 0000000000..91caa916bd --- /dev/null +++ b/build/types/entry/vexflow-font-custom.d.ts @@ -0,0 +1,429 @@ +export declare const Font: { + data: { + resolution: number; + fontFamily: string; + glyphs: { + vexAccidentalMicrotonal1: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexAccidentalMicrotonal3: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexAccidentalMicrotonal4: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexNoteHeadRectBlack: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexNoteHeadRectWhite: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexWiggleArpeggioUp: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + }; + }; + metrics: { + smufl: boolean; + stave: { + padding: number; + endPaddingMax: number; + endPaddingMin: number; + unalignedNotePadding: number; + }; + accidental: { + noteheadAccidentalPadding: number; + leftPadding: number; + accidentalSpacing: number; + }; + chordSymbol: { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: { + csymDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymHalfDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymAugmented: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymDiagonalArrangementSlash: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMinor: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMajorSeventh: { + leftSideBearing: number; + yOffset: number; + advanceWidth: number; + }; + accidentalSharp: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + accidentalFlat: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + }; + }; + clef_default: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + clef_small: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + ornament: { + brassScoop: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassDoitMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallLipShort: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassLiftMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallRoughMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassBend: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteClosed: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteOpen: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFlip: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassJazzTurn: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassSmear: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + }; + parenthesis: { + default: { + width: number; + }; + gracenote: { + width: number; + }; + }; + pedalMarking: {}; + digits: { + shiftLine: number; + shiftY: number; + }; + articulation: { + articStaccatissimoAbove: { + padding: number; + }; + articStaccatissimoBelow: { + padding: number; + }; + }; + tremolo: { + default: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + grace: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + }; + staveRepetition: { + symbolText: { + offsetX: number; + offsetY: number; + spacing: number; + }; + coda: { + offsetY: number; + }; + segno: { + offsetY: number; + }; + }; + noteHead: { + minPadding: number; + }; + stem: { + heightAdjustmentForFlag: number; + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadSquareWhite: { + offsetYBaseStemDown: number; + offsetYBaseStemUp: number; + }; + }; + }; + stringNumber: { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; + }; + tuplet: { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; + }; + glyphs: { + coda: { + shiftX: number; + shiftY: number; + }; + segno: { + shiftX: number; + }; + flag: { + shiftX: number; + staveTempo: { + shiftX: number; + }; + }; + clef_default: {}; + clef_small: { + gClef: { + shiftY: number; + }; + }; + clefNote_default: {}; + clefNote_small: {}; + stroke_straight: { + arrowheadBlackDown: { + shiftX: number; + }; + arrowheadBlackUp: { + shiftX: number; + }; + }; + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: number; + shiftY: number; + }; + arrowheadBlackUp: { + shiftX: number; + shiftY: number; + }; + }; + textNote: { + breathMarkTick: { + shiftY: number; + }; + breathMarkComma: {}; + segno: { + shiftX: number; + shiftY: number; + }; + coda: { + shiftX: number; + shiftY: number; + }; + ornamentTrill: { + shiftX: number; + shiftY: number; + }; + ornamentTurn: {}; + ornamentTurnSlash: {}; + ornamentMordent: { + shiftX: number; + }; + ornamentShortTrill: { + shiftX: number; + }; + }; + noteHead: {}; + chordSymbol: { + scale: number; + }; + }; + }; +}; +export default Font; diff --git a/build/types/entry/vexflow-font-gonville.d.ts b/build/types/entry/vexflow-font-gonville.d.ts new file mode 100644 index 0000000000..176b896adc --- /dev/null +++ b/build/types/entry/vexflow-font-gonville.d.ts @@ -0,0 +1,1506 @@ +export declare const Font: { + data: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + barlineTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlusSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRightSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeftSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKomaSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkUpbow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedLeftHandPizzicato: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pictChokeCymbal: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; + }; + metrics: { + smufl: boolean; + stave: { + padding: number; + endPaddingMax: number; + endPaddingMin: number; + unalignedNotePadding: number; + }; + accidental: { + noteheadAccidentalPadding: number; + leftPadding: number; + accidentalSpacing: number; + }; + chordSymbol: { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: { + csymDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymHalfDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymAugmented: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymDiagonalArrangementSlash: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMinor: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMajorSeventh: { + leftSideBearing: number; + yOffset: number; + advanceWidth: number; + }; + accidentalSharp: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + accidentalFlat: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + }; + }; + clef_default: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + clef_small: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + ornament: { + brassScoop: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassDoitMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallLipShort: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassLiftMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallRoughMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassBend: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteClosed: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteOpen: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFlip: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassJazzTurn: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassSmear: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + }; + parenthesis: { + default: { + width: number; + }; + gracenote: { + width: number; + }; + }; + pedalMarking: {}; + digits: { + shiftLine: number; + shiftY: number; + }; + articulation: { + articStaccatissimoAbove: { + padding: number; + }; + articStaccatissimoBelow: { + padding: number; + }; + }; + tremolo: { + default: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + grace: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + }; + staveRepetition: { + symbolText: { + offsetX: number; + offsetY: number; + spacing: number; + }; + coda: { + offsetY: number; + }; + segno: { + offsetY: number; + }; + }; + noteHead: { + minPadding: number; + }; + stem: { + heightAdjustmentForFlag: number; + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadSquareWhite: { + offsetYBaseStemDown: number; + offsetYBaseStemUp: number; + }; + }; + }; + stringNumber: { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; + }; + tuplet: { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; + }; + glyphs: { + coda: { + shiftX: number; + shiftY: number; + }; + segno: { + shiftX: number; + }; + flag: { + shiftX: number; + staveTempo: { + shiftX: number; + }; + }; + clef_default: {}; + clef_small: { + gClef: { + shiftY: number; + }; + }; + clefNote_default: {}; + clefNote_small: {}; + stroke_straight: { + arrowheadBlackDown: { + shiftX: number; + }; + arrowheadBlackUp: { + shiftX: number; + }; + }; + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: number; + shiftY: number; + }; + arrowheadBlackUp: { + shiftX: number; + shiftY: number; + }; + }; + textNote: { + breathMarkTick: { + shiftY: number; + }; + breathMarkComma: {}; + segno: { + shiftX: number; + shiftY: number; + }; + coda: { + shiftX: number; + shiftY: number; + }; + ornamentTrill: { + shiftX: number; + shiftY: number; + }; + ornamentTurn: {}; + ornamentTurnSlash: {}; + ornamentMordent: { + shiftX: number; + }; + ornamentShortTrill: { + shiftX: number; + }; + }; + noteHead: {}; + chordSymbol: { + scale: number; + }; + }; + }; +}; +export default Font; diff --git a/build/types/entry/vexflow-font-leland.d.ts b/build/types/entry/vexflow-font-leland.d.ts new file mode 100644 index 0000000000..4dd58cfb3d --- /dev/null +++ b/build/types/entry/vexflow-font-leland.d.ts @@ -0,0 +1,1578 @@ +export declare const Font: { + data: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWholeSquare: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareWhite: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadMoonBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleLeftBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRightBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRoundDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteClosed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteOpen: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat1Bar: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat2Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat4Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeatBarSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymHalfDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymAugmented: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMajorSeventh: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlatAndFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; + }; + metrics: { + smufl: boolean; + stave: { + padding: number; + endPaddingMax: number; + endPaddingMin: number; + unalignedNotePadding: number; + }; + accidental: { + noteheadAccidentalPadding: number; + leftPadding: number; + accidentalSpacing: number; + }; + chordSymbol: { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: { + csymDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymHalfDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymAugmented: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymDiagonalArrangementSlash: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMinor: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMajorSeventh: { + leftSideBearing: number; + yOffset: number; + advanceWidth: number; + }; + accidentalSharp: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + accidentalFlat: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + }; + }; + clef_default: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + clef_small: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + ornament: { + brassScoop: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassDoitMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallLipShort: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassLiftMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallRoughMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassBend: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteClosed: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteOpen: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFlip: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassJazzTurn: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassSmear: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + }; + parenthesis: { + default: { + width: number; + }; + gracenote: { + width: number; + }; + }; + pedalMarking: {}; + digits: { + shiftLine: number; + shiftY: number; + }; + articulation: { + articStaccatissimoAbove: { + padding: number; + }; + articStaccatissimoBelow: { + padding: number; + }; + }; + tremolo: { + default: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + grace: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + }; + staveRepetition: { + symbolText: { + offsetX: number; + offsetY: number; + spacing: number; + }; + coda: { + offsetY: number; + }; + segno: { + offsetY: number; + }; + }; + noteHead: { + minPadding: number; + }; + stem: { + heightAdjustmentForFlag: number; + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadSquareWhite: { + offsetYBaseStemDown: number; + offsetYBaseStemUp: number; + }; + }; + }; + stringNumber: { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; + }; + tuplet: { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; + }; + glyphs: { + coda: { + shiftX: number; + shiftY: number; + }; + segno: { + shiftX: number; + }; + flag: { + shiftX: number; + staveTempo: { + shiftX: number; + }; + }; + clef_default: {}; + clef_small: { + gClef: { + shiftY: number; + }; + }; + clefNote_default: {}; + clefNote_small: {}; + stroke_straight: { + arrowheadBlackDown: { + shiftX: number; + }; + arrowheadBlackUp: { + shiftX: number; + }; + }; + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: number; + shiftY: number; + }; + arrowheadBlackUp: { + shiftX: number; + shiftY: number; + }; + }; + textNote: { + breathMarkTick: { + shiftY: number; + }; + breathMarkComma: {}; + segno: { + shiftX: number; + shiftY: number; + }; + coda: { + shiftX: number; + shiftY: number; + }; + ornamentTrill: { + shiftX: number; + shiftY: number; + }; + ornamentTurn: {}; + ornamentTurnSlash: {}; + ornamentMordent: { + shiftX: number; + }; + ornamentShortTrill: { + shiftX: number; + }; + }; + noteHead: {}; + chordSymbol: { + scale: number; + }; + }; + }; +}; +export default Font; diff --git a/build/types/entry/vexflow-font-petaluma.d.ts b/build/types/entry/vexflow-font-petaluma.d.ts new file mode 100644 index 0000000000..c402c8449d --- /dev/null +++ b/build/types/entry/vexflow-font-petaluma.d.ts @@ -0,0 +1,2026 @@ +export declare const Font: { + data: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + barlineTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlusSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRightSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeftSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWholeSquare: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareWhite: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesis: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadMoonBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleLeftBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRightBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRoundDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKomaSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKoron: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSori: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkUpbow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassScoop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassDoitMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallLipShort: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassLiftMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallRoughMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassBend: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteClosed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteOpen: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFlip: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassJazzTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassSmear: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedLeftHandPizzicato: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pictChokeCymbal: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat1Bar: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat2Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat4Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeatBarSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymHalfDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymAugmented: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMajorSeventh: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMinor: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiagonalArrangementSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlatAndFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; + }; + metrics: { + smufl: boolean; + stave: { + padding: number; + endPaddingMax: number; + endPaddingMin: number; + unalignedNotePadding: number; + }; + accidental: { + noteheadAccidentalPadding: number; + leftPadding: number; + accidentalSpacing: number; + }; + chordSymbol: { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: { + csymDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymHalfDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymAugmented: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymDiagonalArrangementSlash: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMinor: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMajorSeventh: { + leftSideBearing: number; + yOffset: number; + advanceWidth: number; + }; + accidentalSharp: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + accidentalFlat: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + }; + }; + clef_default: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + clef_small: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + ornament: { + brassScoop: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassDoitMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallLipShort: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassLiftMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallRoughMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassBend: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteClosed: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteOpen: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFlip: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassJazzTurn: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassSmear: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + }; + parenthesis: { + default: { + width: number; + }; + gracenote: { + width: number; + }; + }; + pedalMarking: {}; + digits: { + shiftLine: number; + shiftY: number; + }; + articulation: { + articStaccatissimoAbove: { + padding: number; + }; + articStaccatissimoBelow: { + padding: number; + }; + }; + tremolo: { + default: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + grace: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + }; + staveRepetition: { + symbolText: { + offsetX: number; + offsetY: number; + spacing: number; + }; + coda: { + offsetY: number; + }; + segno: { + offsetY: number; + }; + }; + noteHead: { + minPadding: number; + }; + stem: { + heightAdjustmentForFlag: number; + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadSquareWhite: { + offsetYBaseStemDown: number; + offsetYBaseStemUp: number; + }; + }; + }; + stringNumber: { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; + }; + tuplet: { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; + }; + glyphs: { + coda: { + shiftX: number; + shiftY: number; + }; + segno: { + shiftX: number; + }; + flag: { + shiftX: number; + staveTempo: { + shiftX: number; + }; + }; + clef_default: {}; + clef_small: { + gClef: { + shiftY: number; + }; + }; + clefNote_default: {}; + clefNote_small: {}; + stroke_straight: { + arrowheadBlackDown: { + shiftX: number; + }; + arrowheadBlackUp: { + shiftX: number; + }; + }; + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: number; + shiftY: number; + }; + arrowheadBlackUp: { + shiftX: number; + shiftY: number; + }; + }; + textNote: { + breathMarkTick: { + shiftY: number; + }; + breathMarkComma: {}; + segno: { + shiftX: number; + shiftY: number; + }; + coda: { + shiftX: number; + shiftY: number; + }; + ornamentTrill: { + shiftX: number; + shiftY: number; + }; + ornamentTurn: {}; + ornamentTurnSlash: {}; + ornamentMordent: { + shiftX: number; + }; + ornamentShortTrill: { + shiftX: number; + }; + }; + noteHead: {}; + chordSymbol: { + scale: number; + }; + }; + }; +}; +export default Font; diff --git a/build/types/entry/vexflow-gonville.d.ts b/build/types/entry/vexflow-gonville.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow-gonville.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-leland.d.ts b/build/types/entry/vexflow-leland.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow-leland.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-petaluma.d.ts b/build/types/entry/vexflow-petaluma.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow-petaluma.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/entry/vexflow.d.ts b/build/types/entry/vexflow.d.ts new file mode 100644 index 0000000000..a5193666d7 --- /dev/null +++ b/build/types/entry/vexflow.d.ts @@ -0,0 +1,2 @@ +export * from '../src/index'; +export * as default from '../src/index'; diff --git a/build/types/src/accidental.d.ts b/build/types/src/accidental.d.ts new file mode 100644 index 0000000000..708736e913 --- /dev/null +++ b/build/types/src/accidental.d.ts @@ -0,0 +1,75 @@ +import { Glyph } from './glyph'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +import { Voice } from './voice'; +type StaveLineAccidentalLayoutMetrics = { + column: number; + line: number; + /** + * A flat line needs more clearance above than below. This is + * set to true if the accidental is either a flat or double flat. + */ + flatLine: boolean; + /** + * Double sharps need less clearance above and below than other + * accidentals. + */ + dblSharpLine: boolean; + numAcc: number; + width: number; +}; +/** + * An `Accidental` inherits from `Modifier`, and is formatted within a + * `ModifierContext`. Accidentals are modifiers that can be attached to + * notes. Support is included for both western and microtonal accidentals. + * + * See `tests/accidental_tests.ts` for usage examples. + */ +export declare class Accidental extends Modifier { + /** Accidental code provided to the constructor. */ + readonly type: string; + /** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */ + static DEBUG: boolean; + protected accidental: { + code: string; + parenRightPaddingAdjustment: number; + }; + render_options: { + parenLeftPadding: number; + font_scale: number; + parenRightPadding: number; + }; + protected cautionary: boolean; + protected glyph: Glyph; + protected parenRight?: Glyph; + protected parenLeft?: Glyph; + /** Accidentals category string. */ + static get CATEGORY(): string; + /** Arrange accidentals inside a ModifierContext. */ + static format(accidentals: Accidental[], state: ModifierContextState): void; + /** Helper function to determine whether two lines of accidentals collide vertically */ + static checkCollision(line1: StaveLineAccidentalLayoutMetrics, line2: StaveLineAccidentalLayoutMetrics): boolean; + /** + * Use this method to automatically apply accidentals to a set of `voices`. + * The accidentals will be remembered between all the voices provided. + * Optionally, you can also provide an initial `keySignature`. + */ + static applyAccidentals(voices: Voice[], keySignature: string): void; + /** + * Create accidental. + * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`. + * For example: `#`, `##`, `b`, `n`, etc. + */ + constructor(type: string); + protected reset(): void; + /** Get width in pixels. */ + getWidth(): number; + /** Attach this accidental to `note`, which must be a `StaveNote`. */ + setNote(note: Note): this; + /** If called, draws parenthesis around accidental. */ + setAsCautionary(): this; + /** Render accidental onto canvas. */ + draw(): void; +} +export {}; diff --git a/build/types/src/annotation.d.ts b/build/types/src/annotation.d.ts new file mode 100644 index 0000000000..f94eb8d63b --- /dev/null +++ b/build/types/src/annotation.d.ts @@ -0,0 +1,61 @@ +import { FontInfo } from './font'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +export declare enum AnnotationHorizontalJustify { + LEFT = 1, + CENTER = 2, + RIGHT = 3, + CENTER_STEM = 4 +} +export declare enum AnnotationVerticalJustify { + TOP = 1, + CENTER = 2, + BOTTOM = 3, + CENTER_STEM = 4 +} +/** + * Annotations are modifiers that can be attached to + * notes. + * + * See `tests/annotation_tests.ts` for usage examples. + */ +export declare class Annotation extends Modifier { + /** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */ + static DEBUG: boolean; + /** Annotations category string. */ + static get CATEGORY(): string; + static TEXT_FONT: Required; + /** Text annotations can be positioned and justified relative to the note. */ + static HorizontalJustify: typeof AnnotationHorizontalJustify; + static HorizontalJustifyString: Record; + static VerticalJustify: typeof AnnotationVerticalJustify; + static VerticalJustifyString: Record; + static get minAnnotationPadding(): number; + /** Arrange annotations within a `ModifierContext` */ + static format(annotations: Annotation[], state: ModifierContextState): boolean; + protected horizontalJustification: AnnotationHorizontalJustify; + protected verticalJustification: AnnotationVerticalJustify; + protected text: string; + /** + * Annotations inherit from `Modifier` and is positioned correctly when + * in a `ModifierContext`. + * Create a new `Annotation` with the string `text`. + */ + constructor(text: string); + /** + * Set vertical position of text (above or below stave). + * @param just value in `AnnotationVerticalJustify`. + */ + setVerticalJustification(just: string | AnnotationVerticalJustify): this; + /** + * Get horizontal justification. + */ + getJustification(): AnnotationHorizontalJustify; + /** + * Set horizontal justification. + * @param justification value in `Annotation.Justify`. + */ + setJustification(just: string | AnnotationHorizontalJustify): this; + /** Render text beside the note. */ + draw(): void; +} diff --git a/build/types/src/articulation.d.ts b/build/types/src/articulation.d.ts new file mode 100644 index 0000000000..f9c7de7593 --- /dev/null +++ b/build/types/src/articulation.d.ts @@ -0,0 +1,68 @@ +import { Builder } from './easyscore'; +import { Glyph } from './glyph'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { StemmableNote } from './stemmablenote'; +export interface ArticulationStruct { + code?: string; + aboveCode?: string; + belowCode?: string; + between_lines: boolean; +} +/** + * Articulations and Accents are modifiers that can be + * attached to notes. The complete list of articulations is available in + * `tables.ts` under `Vex.Flow.articulationCodes`. + * + * See `tests/articulation_tests.ts` for usage examples. + */ +export declare class Articulation extends Modifier { + /** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */ + static DEBUG: boolean; + /** Articulations category string. */ + static get CATEGORY(): string; + protected static readonly INITIAL_OFFSET: number; + /** Articulation code provided to the constructor. */ + readonly type: string; + render_options: { + font_scale: number; + }; + protected articulation: ArticulationStruct; + protected glyph: Glyph; + /** + * FIXME: + * Most of the complex formatting logic (ie: snapping to space) is + * actually done in .render(). But that logic belongs in this method. + * + * Unfortunately, this isn't possible because, by this point, stem lengths + * have not yet been finalized. Finalized stem lengths are required to determine the + * initial position of any stem-side articulation. + * + * This indicates that all objects should have their stave set before being + * formatted. It can't be an optional if you want accurate vertical positioning. + * Consistently positioned articulations that play nice with other modifiers + * won't be possible until we stop relying on render-time formatting. + * + * Ideally, when this function has completed, the vertical articulation positions + * should be ready to render without further adjustment. But the current state + * is far from this ideal. + */ + static format(articulations: Articulation[], state: ModifierContextState): boolean; + static easyScoreHook({ articulations }: { + articulations: string; + }, note: StemmableNote, builder: Builder): void; + /** + * Create a new articulation. + * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code. + * + * Notes (by default): + * - Glyph codes ending with 'Above' will be positioned ABOVE + * - Glyph codes ending with 'Below' will be positioned BELOW + */ + constructor(type: string); + protected reset(): void; + /** Set if articulation should be rendered between lines. */ + setBetweenLines(betweenLines?: boolean): this; + /** Render articulation in position next to note. */ + draw(): void; +} diff --git a/build/types/src/barnote.d.ts b/build/types/src/barnote.d.ts new file mode 100644 index 0000000000..b3175ff022 --- /dev/null +++ b/build/types/src/barnote.d.ts @@ -0,0 +1,29 @@ +import { ModifierContext } from './modifiercontext'; +import { Note } from './note'; +import { BarlineType } from './stavebarline'; +/** + * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can + * be added to a voice and rendered in the middle of a stave. Since it has no + * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter. + * + * See `tests/barnote_tests.ts` for usage examples. + */ +export declare class BarNote extends Note { + /** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + protected metrics: { + widths: Record; + }; + protected type: BarlineType; + constructor(type?: string | BarlineType); + /** Get the type of bar note.*/ + getType(): BarlineType; + /** Set the type of bar note. */ + setType(type: string | BarlineType): this; + addToModifierContext(mc: ModifierContext): this; + /** Overridden to ignore. */ + preFormat(): this; + /** Render note to stave. */ + draw(): void; +} diff --git a/build/types/src/beam.d.ts b/build/types/src/beam.d.ts new file mode 100644 index 0000000000..3ea8b54da6 --- /dev/null +++ b/build/types/src/beam.d.ts @@ -0,0 +1,153 @@ +import { Element } from './element'; +import { Fraction } from './fraction'; +import { RenderContext } from './rendercontext'; +import { StemmableNote } from './stemmablenote'; +import { Voice } from './voice'; +export declare const BEAM_LEFT = "L"; +export declare const BEAM_RIGHT = "R"; +export declare const BEAM_BOTH = "B"; +export type PartialBeamDirection = typeof BEAM_LEFT | typeof BEAM_RIGHT | typeof BEAM_BOTH; +/** `Beams` span over a set of `StemmableNotes`. */ +export declare class Beam extends Element { + static get CATEGORY(): string; + render_options: { + flat_beam_offset?: number; + flat_beams: boolean; + secondary_break_ticks?: number; + show_stemlets: boolean; + beam_width: number; + max_slope: number; + min_slope: number; + slope_iterations: number; + slope_cost: number; + stemlet_extension: number; + partial_beam_length: number; + min_flat_beam_offset: number; + }; + notes: StemmableNote[]; + postFormatted: boolean; + slope: number; + private readonly stem_direction; + private readonly ticks; + private y_shift; + private break_on_indices; + private beam_count; + private unbeamable?; + /** + * Overrides to default beam directions for secondary-level beams that do not + * connect to any other note. See further explanation at + * `setPartialBeamSideAt` + */ + private forcedPartialDirections; + /** Get the direction of the beam */ + getStemDirection(): number; + /** + * Get the default beam groups for a provided time signature. + * Attempt to guess if the time signature is not found in table. + * Currently this is fairly naive. + */ + static getDefaultBeamGroups(time_sig: string): Fraction[]; + /** + * A helper function to automatically build basic beams for a voice. For more + * complex auto-beaming use `Beam.generateBeams()`. + * @param voice the voice to generate the beams for + * @param stem_direction a stem direction to apply to the entire voice + * @param groups an array of `Fraction` representing beat groupings for the beam + */ + static applyAndGetBeams(voice: Voice, stem_direction?: number, groups?: Fraction[]): Beam[]; + /** + * A helper function to autimatically build beams for a voice with + * configuration options. + * + * Example configuration object: + * + * ``` + * config = { + * groups: [new Vex.Flow.Fraction(2, 8)], + * stem_direction: -1, + * beam_rests: true, + * beam_middle_only: true, + * show_stemlets: false + * }; + * ``` + * @param notes an array of notes to create the beams for + * @param config the configuration object + * @param config.stem_direction set to apply the same direction to all notes + * @param config.beam_rests set to `true` to include rests in the beams + * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat + * @param config.show_stemlets set to `true` to draw stemlets for rests + * @param config.maintain_stem_directions set to `true` to not apply new stem directions + * @param config.groups array of `Fractions` that represent the beat structure to beam the notes + * + */ + static generateBeams(notes: StemmableNote[], config?: { + flat_beam_offset?: number; + flat_beams?: boolean; + secondary_breaks?: string; + show_stemlets?: boolean; + maintain_stem_directions?: boolean; + beam_middle_only?: boolean; + beam_rests?: boolean; + groups?: Fraction[]; + stem_direction?: number; + }): Beam[]; + constructor(notes: StemmableNote[], auto_stem?: boolean); + /** Get the notes in this beam. */ + getNotes(): StemmableNote[]; + /** Get the max number of beams in the set of notes. */ + getBeamCount(): number; + /** Set which note `indices` to break the secondary beam at. */ + breakSecondaryAt(indices: number[]): this; + /** + * Forces the direction of a partial beam (a secondary-level beam that exists + * on one note only of the beam group). This is useful in rhythms such as 6/8 + * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the + * first sixteenth note can help imply whether the rhythm is to be felt as + * three groups of eighth notes (typical) or as two groups of three-sixteenths + * (less common): + * ``` + * ┌───┬──┬──┐ ┌──┬──┬──┐ + * │ ├─ │ ─┤ vs │ ─┤ │ ─┤ + * │ │ │ │ │ │ │ │ + * ``` + */ + setPartialBeamSideAt(noteIndex: number, side: PartialBeamDirection): this; + /** + * Restore the default direction of a partial beam (a secondary-level beam + * that does not connect to any other notes). + */ + unsetPartialBeamSideAt(noteIndex: number): this; + /** Return the y coordinate for linear function. */ + getSlopeY(x: number, first_x_px: number, first_y_px: number, slope: number): number; + /** Calculate the best possible slope for the provided notes. */ + calculateSlope(): void; + /** Calculate a slope and y-shift for flat beams. */ + calculateFlatSlope(): void; + /** Return the Beam y offset. */ + getBeamYToDraw(): number; + /** + * Create new stems for the notes in the beam, so that each stem + * extends into the beams. + */ + applyStemExtensions(): void; + /** Return upper level beam direction. */ + lookupBeamDirection(duration: string, prev_tick: number, tick: number, next_tick: number, noteIndex: number): PartialBeamDirection; + /** Get the x coordinates for the beam lines of specific `duration`. */ + getBeamLines(duration: string): { + start: number; + end?: number; + }[]; + /** Render the stems for each note. */ + protected drawStems(ctx: RenderContext): void; + protected drawBeamLines(ctx: RenderContext): void; + /** Pre-format the beam. */ + preFormat(): this; + /** + * Post-format the beam. This can only be called after + * the notes in the beam have both `x` and `y` values. ie: they've + * been formatted and have staves. + */ + postFormat(): void; + /** Render the beam to the canvas context */ + draw(): void; +} diff --git a/build/types/src/bend.d.ts b/build/types/src/bend.d.ts new file mode 100644 index 0000000000..a9a98cd821 --- /dev/null +++ b/build/types/src/bend.d.ts @@ -0,0 +1,73 @@ +import { FontInfo } from './font'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +export interface BendPhrase { + x?: number; + type: number; + text: string; + width?: number; + draw_width?: number; +} +/** Bend implements tablature bends. */ +export declare class Bend extends Modifier { + static get CATEGORY(): string; + static get UP(): number; + static get DOWN(): number; + /** Default text font. */ + static TEXT_FONT: Required; + static format(bends: Bend[], state: ModifierContextState): boolean; + protected text: string; + protected tap: string; + protected release: boolean; + protected phrase: BendPhrase[]; + render_options: { + line_width: number; + release_width: number; + bend_width: number; + line_style: string; + }; + /** + * Example of a phrase: + * ``` + * [{ + * type: UP, + * text: "whole" + * width: 8; + * }, + * { + * type: DOWN, + * text: "whole" + * width: 8; + * }, + * { + * type: UP, + * text: "half" + * width: 8; + * }, + * { + * type: UP, + * text: "whole" + * width: 8; + * }, + * { + * type: DOWN, + * text: "1 1/2" + * width: 8; + * }] + * ``` + * @param text text for bend ("Full", "Half", etc.) (DEPRECATED) + * @param release if true, render a release. (DEPRECATED) + * @param phrase if set, ignore "text" and "release", and use the more sophisticated phrase specified + */ + constructor(text: string, release?: boolean, phrase?: BendPhrase[]); + /** Set horizontal shift in pixels. */ + setXShift(value: number): this; + setTap(value: string): this; + /** Get text provided in the constructor. */ + getText(): string; + getTextHeight(): number; + /** Recalculate width. */ + protected updateWidth(): this; + /** Draw the bend on the rendering context. */ + draw(): void; +} diff --git a/build/types/src/boundingbox.d.ts b/build/types/src/boundingbox.d.ts new file mode 100644 index 0000000000..dfe3b3bce0 --- /dev/null +++ b/build/types/src/boundingbox.d.ts @@ -0,0 +1,42 @@ +export interface Bounds { + x: number; + y: number; + w: number; + h: number; +} +export declare class BoundingBox implements Bounds { + x: number; + y: number; + w: number; + h: number; + /** + * Create a new copy. + */ + static copy(that: BoundingBox): BoundingBox; + constructor(x: number, y: number, w: number, h: number); + /** Get x position. */ + getX(): number; + /** Get y position. */ + getY(): number; + /** Get width. */ + getW(): number; + /** Get height. */ + getH(): number; + /** Set x position. */ + setX(x: number): this; + /** Set y position. */ + setY(y: number): this; + /** Set width. */ + setW(w: number): this; + /** Set height. */ + setH(h: number): this; + /** Move to position. */ + move(x: number, y: number): this; + /** Clone. */ + clone(): BoundingBox; + /** + * Merge my box with given box. Creates a bigger bounding box unless + * the given box is contained in this one. + */ + mergeWith(boundingBox: BoundingBox): this; +} diff --git a/build/types/src/boundingboxcomputation.d.ts b/build/types/src/boundingboxcomputation.d.ts new file mode 100644 index 0000000000..3ad9086536 --- /dev/null +++ b/build/types/src/boundingboxcomputation.d.ts @@ -0,0 +1,33 @@ +/** + * BoundingBoxComputation computes metrics for a bounding box by continuously + * taking canvas path commands. + * + * Warning: This class is merely a crutch to get bounding box information without + * explicit metadata. This is likely to get deprecated following SMuFL support. + * + * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License) + */ +export declare class BoundingBoxComputation { + protected x1: number; + protected y1: number; + protected x2: number; + protected y2: number; + /** Get calculated X1. */ + getX1(): number; + /** Get calculated Y1. */ + getY1(): number; + /** Get calculated width. */ + width(): number; + /** Get calculated height. */ + height(): number; + /** Add point to BoundingBox. */ + addPoint(x: number, y: number): void; + /** Add X to BoundingBox. */ + addX(x: number): void; + /** Add Y to BoundingBox. */ + addY(y: number): void; + /** Add quadratic curve to BoundingBox. */ + addQuadraticCurve(p0x: number, p0y: number, p1x: number, p1y: number, p2x: number, p2y: number): void; + /** Add bezier curve to BoundingBox. */ + addBezierCurve(p0x: number, p0y: number, p1x: number, p1y: number, p2x: number, p2y: number, p3x: number, p3y: number): void; +} diff --git a/build/types/src/canvascontext.d.ts b/build/types/src/canvascontext.d.ts new file mode 100644 index 0000000000..62bae708e4 --- /dev/null +++ b/build/types/src/canvascontext.d.ts @@ -0,0 +1,89 @@ +import { FontInfo } from './font'; +import { GroupAttributes, RenderContext, TextMeasure } from './rendercontext'; +interface OffscreenCanvas extends EventTarget { + width: number; + height: number; +} +interface OffscreenCanvasRenderingContext2D extends CanvasState, CanvasTransform, CanvasCompositing, CanvasImageSmoothing, CanvasFillStrokeStyles, CanvasShadowStyles, CanvasFilters, CanvasRect, CanvasDrawPath, CanvasText, CanvasDrawImage, CanvasImageData, CanvasPathDrawingStyles, CanvasTextDrawingStyles, CanvasPath { + readonly canvas: OffscreenCanvas; +} +/** + * A rendering context for the Canvas backend. This class serves as a proxy for the + * underlying CanvasRenderingContext2D object, part of the browser's API. + */ +export declare class CanvasContext extends RenderContext { + /** The 2D rendering context from the Canvas API. Forward method calls to this object. */ + context2D: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D; + /** + * The HTMLCanvasElement or OffscreenCanvas that is associated with the above context. + * If there was no associated `` element, just store the default WIDTH / HEIGHT. + */ + canvas: HTMLCanvasElement | OffscreenCanvas | { + width: number; + height: number; + }; + /** Height of one line of text (in pixels). */ + textHeight: number; + static get WIDTH(): number; + static get HEIGHT(): number; + static get CANVAS_BROWSER_SIZE_LIMIT(): number; + /** + * Ensure that width and height do not exceed the browser limit. + * @returns array of [width, height] clamped to the browser limit. + */ + static sanitizeCanvasDims(width: number, height: number): [number, number]; + constructor(context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D); + /** + * Set all pixels to transparent black rgba(0,0,0,0). + */ + clear(): void; + openGroup(cls?: string, id?: string, attrs?: GroupAttributes): any; + closeGroup(): void; + add(child: any): void; + setFillStyle(style: string): this; + /** CanvasContext ignores `setBackgroundFillStyle()`. */ + setBackgroundFillStyle(style: string): this; + setStrokeStyle(style: string): this; + setShadowColor(color: string): this; + setShadowBlur(blur: number): this; + setLineWidth(width: number): this; + setLineCap(capType: CanvasLineCap): this; + setLineDash(dash: number[]): this; + scale(x: number, y: number): this; + resize(width: number, height: number, devicePixelRatio?: number): this; + rect(x: number, y: number, width: number, height: number): this; + fillRect(x: number, y: number, width: number, height: number): this; + /** + * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0). + */ + clearRect(x: number, y: number, width: number, height: number): this; + beginPath(): this; + moveTo(x: number, y: number): this; + lineTo(x: number, y: number): this; + bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this; + quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this; + arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean): this; + fill(): this; + stroke(): this; + closePath(): this; + measureText(text: string): TextMeasure; + fillText(text: string, x: number, y: number): this; + save(): this; + restore(): this; + set fillStyle(style: string | CanvasGradient | CanvasPattern); + get fillStyle(): string | CanvasGradient | CanvasPattern; + set strokeStyle(style: string | CanvasGradient | CanvasPattern); + get strokeStyle(): string | CanvasGradient | CanvasPattern; + /** + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + */ + setFont(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; + /** Return a string of the form `'italic bold 15pt Arial'` */ + getFont(): string; +} +export {}; diff --git a/build/types/src/chordsymbol.d.ts b/build/types/src/chordsymbol.d.ts new file mode 100644 index 0000000000..b79a87991d --- /dev/null +++ b/build/types/src/chordsymbol.d.ts @@ -0,0 +1,167 @@ +import { FontInfo } from './font'; +import { Glyph } from './glyph'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { TextFormatter } from './textformatter'; +export interface ChordSymbolBlock { + text: string; + symbolType: SymbolTypes; + symbolModifier: SymbolModifiers; + xShift: number; + yShift: number; + vAlign: boolean; + width: number; + glyph?: Glyph; +} +export interface ChordSymbolGlyphMetrics { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; +} +export interface ChordSymbolMetrics { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: Record; +} +export declare enum ChordSymbolHorizontalJustify { + LEFT = 1, + CENTER = 2, + RIGHT = 3, + CENTER_STEM = 4 +} +export declare enum ChordSymbolVerticalJustify { + TOP = 1, + BOTTOM = 2 +} +export declare enum SymbolTypes { + GLYPH = 1, + TEXT = 2, + LINE = 3 +} +export declare enum SymbolModifiers { + NONE = 1, + SUBSCRIPT = 2, + SUPERSCRIPT = 3 +} +/** + * ChordSymbol is a modifier that creates a chord symbol above/below a chord. + * As a modifier, it is attached to an existing note. + */ +export declare class ChordSymbol extends Modifier { + static DEBUG: boolean; + static get CATEGORY(): string; + static readonly HorizontalJustify: typeof ChordSymbolHorizontalJustify; + static readonly HorizontalJustifyString: Record; + static readonly VerticalJustify: typeof ChordSymbolVerticalJustify; + static readonly VerticalJustifyString: Record; + static get superSubRatio(): number; + /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */ + static set NO_TEXT_FORMAT(val: boolean); + static get NO_TEXT_FORMAT(): boolean; + static getMetricForGlyph(glyphCode: string): ChordSymbolGlyphMetrics | undefined; + static get engravingFontResolution(): number; + static get spacingBetweenBlocks(): number; + static getWidthForGlyph(glyph: Glyph): number; + static getYShiftForGlyph(glyph: Glyph): number; + static getXShiftForGlyph(glyph: Glyph): number; + static get superscriptOffset(): number; + static get subscriptOffset(): number; + static get kerningOffset(): number; + static readonly glyphs: Record; + static readonly symbolTypes: typeof SymbolTypes; + static readonly symbolModifiers: typeof SymbolModifiers; + static get metrics(): ChordSymbolMetrics; + static get lowerKerningText(): string[]; + static get upperKerningText(): string[]; + static isSuperscript(block: ChordSymbolBlock): boolean; + static isSubscript(block: ChordSymbolBlock): boolean; + static get minPadding(): number; + /** + * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks. + * Estimate how many lines above/below the staff we need. + */ + static format(symbols: ChordSymbol[], state: ModifierContextState): boolean; + /** Currently unused. */ + protected static noFormat: boolean; + protected symbolBlocks: ChordSymbolBlock[]; + protected horizontal: number; + protected vertical: number; + protected useKerning: boolean; + protected reportWidth: boolean; + protected textFormatter: TextFormatter; + constructor(); + /** + * Default text font. + * Choose a font family that works well with the current music engraving font. + * @override `Element.TEXT_FONT`. + */ + static get TEXT_FONT(): Required; + /** + * The offset is specified in `em`. Scale this value by the font size in pixels. + */ + get superscriptOffset(): number; + get subscriptOffset(): number; + setReportWidth(value: boolean): this; + getReportWidth(): boolean; + updateOverBarAdjustments(): void; + updateKerningAdjustments(): void; + /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */ + getKerningAdjustment(j: number): number; + /** + * ChordSymbol allows multiple blocks so we can mix glyphs and font text. + * Each block can have its own vertical orientation. + */ + getSymbolBlock(params?: any): ChordSymbolBlock; + /** Add a symbol to this chord, could be text, glyph or line. */ + addSymbolBlock(parameters: any): this; + /** Add a text block. */ + addText(text: string, parameters?: any): this; + /** Add a text block with superscript modifier. */ + addTextSuperscript(text: string): this; + /** Add a text block with subscript modifier. */ + addTextSubscript(text: string): this; + /** Add a glyph block with superscript modifier. */ + addGlyphSuperscript(glyph: string): this; + /** Add a glyph block. */ + addGlyph(glyph: string, params?: any): this; + /** + * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font. + * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else. + */ + addGlyphOrText(text: string, params?: any): this; + /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */ + addLine(width: number, params?: any): this; + /** + * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`). + * + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + * + * @override See: Element. + */ + setFont(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; + setEnableKerning(val: boolean): this; + /** Set vertical position of text (above or below stave). */ + setVertical(vj: ChordSymbolVerticalJustify | string | number): this; + getVertical(): number; + /** Set horizontal justification. */ + setHorizontal(hj: ChordSymbolHorizontalJustify | string | number): this; + getHorizontal(): number; + getWidth(): number; + getYOffsetForText(text: string): number; + /** Render text and glyphs above/below the note. */ + draw(): void; +} diff --git a/build/types/src/clef.d.ts b/build/types/src/clef.d.ts new file mode 100644 index 0000000000..8819c1ef34 --- /dev/null +++ b/build/types/src/clef.d.ts @@ -0,0 +1,59 @@ +import { Glyph } from './glyph'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export interface ClefType { + code: string; + line: number; +} +export interface ClefAnnotatiomType extends ClefType { + x_shift: number; + point: number; +} +export interface ClefMetrics { + width: number; + annotations: { + [key: string]: { + [type: string]: { + line?: number; + shiftX?: number; + } | number; + }; + }; +} +/** + * Clef implements various types of clefs that can be rendered on a stave. + * + * See `tests/clef_tests.ts` for usage examples. + */ +export declare class Clef extends StaveModifier { + /** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + annotation?: ClefAnnotatiomType; + /** + * The attribute `clef` must be a key from + * `Clef.types` + */ + clef: ClefType; + protected attachment?: Glyph; + protected size?: string; + protected type?: string; + /** + * Every clef name is associated with a glyph code from the font file + * and a default stave line number. + */ + static get types(): Record; + static get annotationSmufl(): Record; + /** Create a new clef. */ + constructor(type: string, size?: string, annotation?: string); + /** Set clef type, size and annotation. */ + setType(type: string, size?: string, annotation?: string): this; + /** Get clef width. */ + getWidth(): number; + /** Get point for clefs. */ + static getPoint(size?: string): number; + /** Set associated stave. */ + setStave(stave: Stave): this; + /** Render clef. */ + draw(): void; +} diff --git a/build/types/src/clefnote.d.ts b/build/types/src/clefnote.d.ts new file mode 100644 index 0000000000..76340ba8eb --- /dev/null +++ b/build/types/src/clefnote.d.ts @@ -0,0 +1,18 @@ +import { ClefAnnotatiomType, ClefType } from './clef'; +import { Note } from './note'; +/** ClefNote implements clef annotations in measures. */ +export declare class ClefNote extends Note { + static get CATEGORY(): string; + protected clef: ClefType; + protected annotation?: ClefAnnotatiomType; + protected type: string; + protected size: string; + constructor(type: string, size?: string, annotation?: string); + /** Set clef type, size and annotation. */ + setType(type: string, size: string, annotation: string): this; + /** Get associated clef. */ + getClef(): ClefType; + preFormat(): this; + /** Render clef note. */ + draw(): void; +} diff --git a/build/types/src/crescendo.d.ts b/build/types/src/crescendo.d.ts new file mode 100644 index 0000000000..af5069b5f4 --- /dev/null +++ b/build/types/src/crescendo.d.ts @@ -0,0 +1,27 @@ +import { Note, NoteStruct } from './note'; +export interface CrescendoParams { + reverse: boolean; + height: number; + y: number; + end_x: number; + begin_x: number; +} +export declare class Crescendo extends Note { + static DEBUG: boolean; + /** Crescendo category string. */ + static get CATEGORY(): string; + protected decrescendo: boolean; + protected height: number; + protected line: number; + protected options: { + extend_left: number; + extend_right: number; + y_shift: number; + }; + constructor(noteStruct: NoteStruct); + setLine(line: number): this; + setHeight(height: number): this; + setDecrescendo(decresc: boolean): this; + preFormat(): this; + draw(): void; +} diff --git a/build/types/src/curve.d.ts b/build/types/src/curve.d.ts new file mode 100644 index 0000000000..2742f3d30e --- /dev/null +++ b/build/types/src/curve.d.ts @@ -0,0 +1,41 @@ +import { Element } from './element'; +import { Note } from './note'; +export interface CurveOptions { + /** Two control points for the bezier curves. */ + cps?: { + x: number; + y: number; + }[]; + thickness?: number; + x_shift?: number; + y_shift?: number; + position?: string | number; + position_end?: string | number; + invert?: boolean; +} +export declare enum CurvePosition { + NEAR_HEAD = 1, + NEAR_TOP = 2 +} +export declare class Curve extends Element { + static get CATEGORY(): string; + render_options: Required; + protected from: Note; + protected to: Note; + static get Position(): typeof CurvePosition; + static get PositionString(): Record; + constructor(from: Note, to: Note, options: CurveOptions); + setNotes(from: Note, to: Note): this; + /** + * @return {boolean} Returns true if this is a partial bar. + */ + isPartial(): boolean; + renderCurve(params: { + last_y: number; + last_x: number; + first_y: number; + first_x: number; + direction: number; + }): void; + draw(): boolean; +} diff --git a/build/types/src/dot.d.ts b/build/types/src/dot.d.ts new file mode 100644 index 0000000000..7cfff84e6f --- /dev/null +++ b/build/types/src/dot.d.ts @@ -0,0 +1,20 @@ +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +export declare class Dot extends Modifier { + static get CATEGORY(): string; + protected radius: number; + protected dot_shiftY: number; + /** Returns the dots associated to a Note. */ + static getDots(note: Note): Dot[]; + /** Add a dot on the specified keys to the notes. */ + static buildAndAttach(notes: Note[], options?: { + index?: number; + all?: boolean; + }): void; + static format(dots: Dot[], state: ModifierContextState): boolean; + constructor(); + setNote(note: Note): this; + setDotShiftY(y: number): this; + draw(): void; +} diff --git a/build/types/src/easyscore.d.ts b/build/types/src/easyscore.d.ts new file mode 100644 index 0000000000..7627c33d6d --- /dev/null +++ b/build/types/src/easyscore.d.ts @@ -0,0 +1,152 @@ +import { Accidental } from './accidental'; +import { PartialBeamDirection } from './beam'; +import { Factory } from './factory'; +import { Note } from './note'; +import { Grammar, Match, Parser, Result, Rule, RuleFunction } from './parser'; +import { RenderContext } from './rendercontext'; +import { StemmableNote } from './stemmablenote'; +import { TupletOptions } from './tuplet'; +import { Voice } from './voice'; +export type CommitHook = (obj: any, note: StemmableNote, builder: Builder) => void; +export declare class EasyScoreGrammar implements Grammar { + builder: Builder; + constructor(builder: Builder); + begin(): RuleFunction; + LINE(): Rule; + PIECE(): Rule; + PIECES(): Rule; + PARAMS(): Rule; + CHORDORNOTE(): Rule; + CHORD(): Rule; + NOTES(): Rule; + NOTE(): Rule; + SINGLENOTE(): Rule; + ACCIDENTAL(): Rule; + DOTS(): Rule; + TYPE(): Rule; + DURATION(): Rule; + OPTS(): Rule; + KEYVALS(): Rule; + KEYVAL(): Rule; + VAL(): Rule; + KEY(): Rule; + DVAL(): Rule; + SVAL(): Rule; + NOTENAME(): Rule; + OCTAVE(): Rule; + ACCIDENTALS(): Rule; + MICROTONES(): Rule; + DURATIONS(): Rule; + TYPES(): Rule; + LPAREN(): Rule; + RPAREN(): Rule; + COMMA(): Rule; + DOT(): Rule; + SLASH(): Rule; + MAYBESLASH(): Rule; + EQUALS(): Rule; + LBRACKET(): Rule; + RBRACKET(): Rule; + EOL(): Rule; +} +export interface NotePiece { + key: string; + accid?: string | null; + octave?: string; +} +export declare class Piece { + chord: NotePiece[]; + duration: string; + dots: number; + type?: string; + options: { + [x: string]: string; + }; + constructor(duration: string); +} +export interface BuilderElements { + notes: StemmableNote[]; + accidentals: (Accidental | undefined)[][]; +} +export interface BuilderOptions extends Record { + stem?: string; + clef?: string; +} +export declare class Builder { + factory: Factory; + elements: BuilderElements; + options: BuilderOptions; + piece: Piece; + commitHooks: CommitHook[]; + rollingDuration: string; + constructor(factory: Factory); + reset(options?: BuilderOptions): void; + getFactory(): Factory; + getElements(): BuilderElements; + addCommitHook(commitHook: CommitHook): void; + resetPiece(): void; + setNoteDots(dots: Match[]): void; + setNoteDuration(duration?: string): void; + setNoteType(type?: string): void; + addNoteOption(key: string, value: string): void; + addNote(key?: string, accid?: string | null, octave?: string): void; + addSingleNote(key: string, accid?: string | null, octave?: string): void; + addChord(notes: Match[]): void; + commitPiece(): void; +} +export interface EasyScoreOptions { + factory?: Factory; + builder?: Builder; + commitHooks?: CommitHook[]; + throwOnError?: boolean; +} +export interface EasyScoreDefaults extends Record { + clef?: string; + time?: string; + stem?: string; +} +/** + * EasyScore implements a parser for a simple language to generate VexFlow objects. + */ +export declare class EasyScore { + static DEBUG: boolean; + defaults: EasyScoreDefaults; + options: EasyScoreOptions; + factory: Factory; + builder: Builder; + grammar: EasyScoreGrammar; + parser: Parser; + constructor(options?: EasyScoreOptions); + /** + * Set the score defaults. + * clef must be set appropriately to avoid errors when adding Staves. + * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types} + * @param defaults.time default time signature ( 4/4 | 9/8 ...) + * @param defaults.stem default stem arrangement (auto | up | down) + * @returns this + */ + set(defaults: EasyScoreDefaults): this; + /** + * @param options.factory is required. + * @returns this + */ + setOptions(options: EasyScoreOptions): this; + setContext(context: RenderContext): this; + parse(line: string, options?: BuilderOptions): Result; + beam(notes: StemmableNote[], options?: { + autoStem?: boolean; + secondaryBeamBreaks?: number[]; + partialBeamDirections?: { + [noteIndex: number]: PartialBeamDirection; + }; + }): StemmableNote[]; + tuplet(notes: StemmableNote[], options?: TupletOptions): StemmableNote[]; + notes(line: string, options?: BuilderOptions): StemmableNote[]; + voice(notes: Note[], options?: { + time?: string; + options?: { + softmaxFactor: number; + }; + }): Voice; + addCommitHook(commitHook: CommitHook): void; +} diff --git a/build/types/src/element.d.ts b/build/types/src/element.d.ts new file mode 100644 index 0000000000..168bb42fcc --- /dev/null +++ b/build/types/src/element.d.ts @@ -0,0 +1,229 @@ +import { BoundingBox } from './boundingbox'; +import { FontInfo } from './font'; +import { Registry } from './registry'; +import { RenderContext } from './rendercontext'; +/** Element attributes. */ +export interface ElementAttributes { + [name: string]: string | undefined; + id: string; + type: string; + class: string; +} +/** Element style */ +export interface ElementStyle { + /** + * CSS color used for the shadow. + * + * Examples: 'red', '#ff0000', '#ff000010', 'rgb(255,0,0)' + * + * See [CSS Legal Color Values](https://www.w3schools.com/cssref/css_colors_legal.asp) + */ + shadowColor?: string; + /** + * Level of blur applied to shadows. + * + * Values that are not finite numbers greater than or equal to zero are ignored. + */ + shadowBlur?: number; + /** + * CSS color used with context fill command. + * + * Examples: 'red', '#ff0000', '#ff000010', 'rgb(255,0,0)' + * + * See [CSS Legal Color Values](https://www.w3schools.com/cssref/css_colors_legal.asp) + */ + fillStyle?: string; + /** + * CSS color used with context stroke command. + * + * Examples: 'red', '#ff0000', '#ff000010', 'rgb(255,0,0)' + * + * See [CSS Legal Color Values](https://www.w3schools.com/cssref/css_colors_legal.asp) + */ + strokeStyle?: string; + /** + * Line width, 1.0 by default. + */ + lineWidth?: number; +} +/** + * Element implements a generic base class for VexFlow, with implementations + * of general functions and properties that can be inherited by all VexFlow elements. + * + * The Element is an abstract class that needs to be subclassed to work. It handles + * style and text-font properties for the Element and any child elements, along with + * working with the Registry to create unique ids, but does not have any tools for + * formatting x or y positions or connections to a Stave. + */ +export declare abstract class Element { + static get CATEGORY(): string; + protected children: Element[]; + protected static ID: number; + protected static newID(): string; + /** + * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)` + * to customize the font for musical symbols placed on the score. + */ + static TEXT_FONT: Required; + private context?; + protected rendered: boolean; + protected style?: ElementStyle; + private attrs; + protected boundingBox?: BoundingBox; + protected registry?: Registry; + /** + * Some elements include text. + * The `textFont` property contains information required to style the text (i.e., font family, size, weight, and style). + * It is undefined by default, and can be set using `setFont(...)` or `resetFont()`. + */ + protected textFont?: Required; + constructor(); + /** + * Adds a child Element to the Element, which lets it inherit the + * same style as the parent when setGroupStyle() is called. + * + * Examples of children are noteheads and stems. Modifiers such + * as Accidentals are generally not set as children. + * + * Note that StaveNote calls setGroupStyle() when setStyle() is called. + */ + addChildElement(child: Element): this; + getCategory(): string; + /** + * Set the element style used to render. + * + * Example: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.draw(); + * ``` + * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave), + * the style can be applied to all of them by means of the context: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.getContext().setFillStyle('red'); + * element.getContext().setStrokeStyle('red'); + * element.draw(); + * ``` + * or using drawWithStyle: + * ```typescript + * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); + * element.drawWithStyle(); + * ``` + */ + setStyle(style: ElementStyle | undefined): this; + /** Set the element & associated children style used for rendering. */ + setGroupStyle(style: ElementStyle): this; + /** Get the element style used for rendering. */ + getStyle(): ElementStyle | undefined; + /** Apply the element style to `context`. */ + applyStyle(context?: RenderContext | undefined, style?: ElementStyle | undefined): this; + /** Restore the style of `context`. */ + restoreStyle(context?: RenderContext | undefined, style?: ElementStyle | undefined): this; + /** + * Draw the element and all its sub-elements (ie.: Modifiers in a Stave) + * with the element's style (see `getStyle()` and `setStyle()`) + */ + drawWithStyle(): void; + /** Draw an element. */ + abstract draw(...args: any[]): void; + /** Check if it has a class label (An element can have multiple class labels). */ + hasClass(className: string): boolean; + /** Add a class label (An element can have multiple class labels). */ + addClass(className: string): this; + /** Remove a class label (An element can have multiple class labels). */ + removeClass(className: string): this; + /** Call back from registry after the element is registered. */ + onRegister(registry: Registry): this; + /** Return the rendered status. */ + isRendered(): boolean; + /** Set the rendered status. */ + setRendered(rendered?: boolean): this; + /** Return the element attributes. */ + getAttributes(): ElementAttributes; + /** Return an attribute, such as 'id', 'type' or 'class'. */ + getAttribute(name: string): any; + /** Return associated SVGElement. */ + getSVGElement(suffix?: string): SVGElement | undefined; + /** Set an attribute such as 'id', 'class', or 'type'. */ + setAttribute(name: string, value: string | undefined): this; + /** Get the boundingBox. */ + getBoundingBox(): BoundingBox | undefined; + /** Return the context, such as an SVGContext or CanvasContext object. */ + getContext(): RenderContext | undefined; + /** Set the context to an SVGContext or CanvasContext object */ + setContext(context?: RenderContext): this; + /** Validate and return the rendering context. */ + checkContext(): RenderContext; + /** + * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied + * to text (not glyphs). + */ + set font(f: string); + /** Returns the CSS compatible font string for the text font. */ + get font(): string; + /** + * Set the element's text font family, size, weight, style + * (e.g., `Arial`, `10pt`, `bold`, `italic`). + * + * This attribute does not determine the font used for musical Glyphs like treble clefs. + * + * @param font is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). + * @param style is a string (e.g., 'italic', 'normal'). + * If no arguments are provided, then the font is set to the default font. + * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property. + */ + setFont(font?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; + /** + * Get the css string describing this Element's text font. e.g., + * 'bold 10pt Arial'. + */ + getFont(): string; + /** + * Reset the text font to the style indicated by the static `TEXT_FONT` property. + * Subclasses can call this to initialize `textFont` for the first time. + */ + resetFont(): void; + /** Return a copy of the current FontInfo object. */ + get fontInfo(): Required; + set fontInfo(fontInfo: FontInfo); + /** Change the font size, while keeping everything else the same. */ + setFontSize(size?: string | number): this; + /** + * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). + * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes. + */ + getFontSize(): string; + /** + * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property. + * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt'). + */ + set fontSize(size: string | number); + /** + * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). + */ + get fontSize(): string; + /** + * @returns the font size in `pt`. + */ + get fontSizeInPoints(): number; + /** + * @returns the font size in `px`. + */ + get fontSizeInPixels(): number; + /** + * @returns a CSS font-style string (e.g., 'italic'). + */ + get fontStyle(): string; + set fontStyle(style: string); + /** + * @returns a CSS font-weight string (e.g., 'bold'). + * As in CSS, font-weight is always returned as a string, even if it was set as a number. + */ + get fontWeight(): string; + set fontWeight(weight: string | number); +} diff --git a/build/types/src/factory.d.ts b/build/types/src/factory.d.ts new file mode 100644 index 0000000000..981dabeebf --- /dev/null +++ b/build/types/src/factory.d.ts @@ -0,0 +1,279 @@ +import { Accidental } from './accidental'; +import { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation'; +import { Articulation } from './articulation'; +import { BarNote } from './barnote'; +import { Beam, PartialBeamDirection } from './beam'; +import { ChordSymbol } from './chordsymbol'; +import { ClefNote } from './clefnote'; +import { Curve, CurveOptions } from './curve'; +import { EasyScore, EasyScoreOptions } from './easyscore'; +import { Element } from './element'; +import { FontInfo } from './font'; +import { Formatter, FormatterOptions } from './formatter'; +import { FretHandFinger } from './frethandfinger'; +import { GhostNote } from './ghostnote'; +import { Glyph } from './glyph'; +import { GlyphNote, GlyphNoteOptions } from './glyphnote'; +import { GraceNote, GraceNoteStruct } from './gracenote'; +import { GraceNoteGroup } from './gracenotegroup'; +import { KeySigNote } from './keysignote'; +import { ModifierContext } from './modifiercontext'; +import { MultiMeasureRest, MultimeasureRestRenderOptions } from './multimeasurerest'; +import { Note, NoteStruct } from './note'; +import { NoteSubGroup } from './notesubgroup'; +import { Ornament } from './ornament'; +import { PedalMarking } from './pedalmarking'; +import { RenderContext } from './rendercontext'; +import { RepeatNote } from './repeatnote'; +import { Stave, StaveOptions } from './stave'; +import { BarlineType } from './stavebarline'; +import { StaveConnector, StaveConnectorType } from './staveconnector'; +import { StaveLine } from './staveline'; +import { StaveNote, StaveNoteStruct } from './stavenote'; +import { StaveTie } from './stavetie'; +import { StemmableNote } from './stemmablenote'; +import { StringNumber } from './stringnumber'; +import { System, SystemOptions } from './system'; +import { TabNote, TabNoteStruct } from './tabnote'; +import { TabStave } from './tabstave'; +import { TextBracket } from './textbracket'; +import { TextDynamics } from './textdynamics'; +import { TextNote, TextNoteStruct } from './textnote'; +import { TickContext } from './tickcontext'; +import { TimeSigNote } from './timesignote'; +import { Tuplet, TupletOptions } from './tuplet'; +import { VibratoBracket } from './vibratobracket'; +import { Voice, VoiceTime } from './voice'; +export interface FactoryOptions { + stave?: { + space: number; + }; + renderer?: { + elementId: string | null; + backend?: number; + width: number; + height: number; + background?: string; + }; + font?: FontInfo; +} +/** + * Factory implements a high level API around VexFlow. + */ +export declare class Factory { + /** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */ + static DEBUG: boolean; + /** Default text font. */ + static TEXT_FONT: Required; + /** + * Static simplified function to access constructor without providing FactoryOptions + * + * Example: + * + * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 + * + * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );` + */ + static newFromElementId(elementId: string | null, width?: number, height?: number): Factory; + protected options: Required; + protected stave?: Stave; + protected context: RenderContext; + protected staves: Stave[]; + protected voices: Voice[]; + protected renderQ: Element[]; + protected systems: System[]; + /** + * Example: + * + * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 + * + * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});` + */ + constructor(options?: FactoryOptions); + reset(): void; + setOptions(options?: FactoryOptions): void; + initRenderer(): void; + getContext(): RenderContext; + setContext(context: RenderContext): this; + getStave(): Stave | undefined; + getVoices(): Voice[]; + /** Return pixels from current stave spacing. */ + Stave(params?: { + x?: number; + y?: number; + width?: number; + options?: StaveOptions; + }): Stave; + TabStave(params?: { + x?: number; + y?: number; + width?: number; + options?: StaveOptions; + }): TabStave; + StaveNote(noteStruct: StaveNoteStruct): StaveNote; + GlyphNote(glyph: Glyph, noteStruct: NoteStruct, options?: GlyphNoteOptions): GlyphNote; + RepeatNote(type: string, noteStruct?: NoteStruct, options?: GlyphNoteOptions): RepeatNote; + GhostNote(noteStruct: string | NoteStruct): GhostNote; + TextNote(noteStruct: TextNoteStruct): TextNote; + BarNote(params?: { + type?: BarlineType | string; + }): BarNote; + ClefNote(params?: { + type?: string; + options?: { + size?: string; + annotation?: string; + }; + }): ClefNote; + TimeSigNote(params?: { + time?: string; + }): TimeSigNote; + KeySigNote(params: { + key: string; + cancelKey?: string; + alterKey?: string[]; + }): KeySigNote; + TabNote(noteStruct: TabNoteStruct): TabNote; + GraceNote(noteStruct: GraceNoteStruct): GraceNote; + GraceNoteGroup(params: { + notes: StemmableNote[]; + slur?: boolean; + }): GraceNoteGroup; + Accidental(params: { + type: string; + }): Accidental; + Annotation(params?: { + text?: string; + hJustify?: string | AnnotationHorizontalJustify; + vJustify?: string | AnnotationVerticalJustify; + font?: FontInfo; + }): Annotation; + ChordSymbol(params?: { + vJustify?: string; + hJustify?: string; + kerning?: boolean; + reportWidth?: boolean; + fontFamily?: string; + fontSize?: number; + fontWeight?: string; + }): ChordSymbol; + Articulation(params?: { + betweenLines?: boolean; + type?: string; + position?: string | number; + }): Articulation; + Ornament(type: string, params?: { + position?: string | number; + upperAccidental?: string; + lowerAccidental?: string; + delayed?: boolean; + }): Ornament; + TextDynamics(params?: { + text?: string; + duration?: string; + dots?: number; + line?: number; + }): TextDynamics; + Fingering(params: { + number?: string; + position?: string; + }): FretHandFinger; + StringNumber(params: { + number: string; + position: string; + }, drawCircle?: boolean): StringNumber; + TickContext(): TickContext; + ModifierContext(): ModifierContext; + MultiMeasureRest(params: MultimeasureRestRenderOptions): MultiMeasureRest; + Voice(params?: { + time?: VoiceTime | string; + }): Voice; + StaveConnector(params: { + top_stave: Stave; + bottom_stave: Stave; + type: StaveConnectorType; + }): StaveConnector; + Formatter(options?: FormatterOptions): Formatter; + Tuplet(params?: { + notes?: Note[]; + options?: TupletOptions; + }): Tuplet; + Beam(params: { + notes: StemmableNote[]; + options?: { + autoStem?: boolean; + secondaryBeamBreaks?: number[]; + partialBeamDirections?: { + [noteIndex: number]: PartialBeamDirection; + }; + }; + }): Beam; + Curve(params: { + from: Note; + to: Note; + options: CurveOptions; + }): Curve; + StaveTie(params: { + from?: Note | null; + to?: Note | null; + first_indices?: number[]; + last_indices?: number[]; + text?: string; + options?: { + direction?: number; + }; + }): StaveTie; + StaveLine(params: { + from: StaveNote; + to: StaveNote; + first_indices: number[]; + last_indices: number[]; + options?: { + text?: string; + font?: FontInfo; + }; + }): StaveLine; + VibratoBracket(params: { + from: Note | null; + to: Note | null; + options: { + harsh?: boolean; + line?: number; + }; + }): VibratoBracket; + TextBracket(params: { + from: Note; + to: Note; + text: string; + options: { + superscript: string; + position: string; + line?: number; + font?: FontInfo; + }; + }): TextBracket; + System(params?: SystemOptions): System; + /** + * Creates EasyScore. Normally the first step after constructing a Factory. For example: + * ``` + * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }}); + * const score: EasyScore = vf.EasyScore(); + * ``` + * @param options.factory optional instance of Factory + * @param options.builder instance of Builder + * @param options.commitHooks function to call after a note element is created + * @param options.throwOnError throw error in case of parsing error + */ + EasyScore(options?: EasyScoreOptions): EasyScore; + PedalMarking(params?: { + notes?: StaveNote[]; + options?: { + style: string; + }; + }): PedalMarking; + NoteSubGroup(params?: { + notes?: Note[]; + }): NoteSubGroup; + /** Render the score. */ + draw(): void; +} diff --git a/build/types/src/flow.d.ts b/build/types/src/flow.d.ts new file mode 100644 index 0000000000..a7cca426ed --- /dev/null +++ b/build/types/src/flow.d.ts @@ -0,0 +1,265 @@ +import { Accidental } from './accidental'; +import { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation'; +import { Articulation } from './articulation'; +import { BarNote } from './barnote'; +import { Beam } from './beam'; +import { Bend } from './bend'; +import { BoundingBox } from './boundingbox'; +import { BoundingBoxComputation } from './boundingboxcomputation'; +import { CanvasContext } from './canvascontext'; +import { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes } from './chordsymbol'; +import { Clef } from './clef'; +import { ClefNote } from './clefnote'; +import { Crescendo } from './crescendo'; +import { Curve, CurvePosition } from './curve'; +import { Dot } from './dot'; +import { EasyScore } from './easyscore'; +import { Element } from './element'; +import { Factory } from './factory'; +import { Font, FontModule, FontStyle, FontWeight } from './font'; +import { Formatter } from './formatter'; +import { Fraction } from './fraction'; +import { FretHandFinger } from './frethandfinger'; +import { GhostNote } from './ghostnote'; +import { Glyph } from './glyph'; +import { GlyphNote } from './glyphnote'; +import { GraceNote } from './gracenote'; +import { GraceNoteGroup } from './gracenotegroup'; +import { GraceTabNote } from './gracetabnote'; +import { KeyManager } from './keymanager'; +import { KeySignature } from './keysignature'; +import { KeySigNote } from './keysignote'; +import { Modifier, ModifierPosition } from './modifier'; +import { ModifierContext } from './modifiercontext'; +import { MultiMeasureRest } from './multimeasurerest'; +import { Music } from './music'; +import { Note } from './note'; +import { NoteHead } from './notehead'; +import { NoteSubGroup } from './notesubgroup'; +import { Ornament } from './ornament'; +import { Parenthesis } from './parenthesis'; +import { Parser } from './parser'; +import { PedalMarking } from './pedalmarking'; +import { Registry } from './registry'; +import { RenderContext } from './rendercontext'; +import { Renderer, RendererBackends, RendererLineEndType } from './renderer'; +import { RepeatNote } from './repeatnote'; +import { Stave } from './stave'; +import { Barline, BarlineType } from './stavebarline'; +import { StaveConnector } from './staveconnector'; +import { StaveHairpin } from './stavehairpin'; +import { StaveLine } from './staveline'; +import { StaveModifier, StaveModifierPosition } from './stavemodifier'; +import { StaveNote } from './stavenote'; +import { Repetition } from './staverepetition'; +import { StaveTempo } from './stavetempo'; +import { StaveText } from './stavetext'; +import { StaveTie } from './stavetie'; +import { Volta, VoltaType } from './stavevolta'; +import { Stem } from './stem'; +import { StringNumber } from './stringnumber'; +import { Stroke } from './strokes'; +import { SVGContext } from './svgcontext'; +import { System } from './system'; +import { TabNote } from './tabnote'; +import { TabSlide } from './tabslide'; +import { TabStave } from './tabstave'; +import { TabTie } from './tabtie'; +import { TextBracket, TextBracketPosition } from './textbracket'; +import { TextDynamics } from './textdynamics'; +import { TextFormatter } from './textformatter'; +import { TextJustification, TextNote } from './textnote'; +import { TickContext } from './tickcontext'; +import { TimeSignature } from './timesignature'; +import { TimeSigNote } from './timesignote'; +import { Tremolo } from './tremolo'; +import { Tuning } from './tuning'; +import { Tuplet } from './tuplet'; +import { Vibrato } from './vibrato'; +import { VibratoBracket } from './vibratobracket'; +import { Voice, VoiceMode } from './voice'; +export declare class Flow { + static get BUILD(): { + /** version number. */ + VERSION: string; + /** git commit ID that this library was built from. */ + ID: string; + /** The date when this library was compiled. */ + DATE: string; + }; + static Accidental: typeof Accidental; + static Annotation: typeof Annotation; + static Articulation: typeof Articulation; + static Barline: typeof Barline; + static BarNote: typeof BarNote; + static Beam: typeof Beam; + static Bend: typeof Bend; + static BoundingBox: typeof BoundingBox; + static BoundingBoxComputation: typeof BoundingBoxComputation; + static CanvasContext: typeof CanvasContext; + static ChordSymbol: typeof ChordSymbol; + static Clef: typeof Clef; + static ClefNote: typeof ClefNote; + static Crescendo: typeof Crescendo; + static Curve: typeof Curve; + static Dot: typeof Dot; + static EasyScore: typeof EasyScore; + static Element: typeof Element; + static Factory: typeof Factory; + static Font: typeof Font; + static Formatter: typeof Formatter; + static Fraction: typeof Fraction; + static FretHandFinger: typeof FretHandFinger; + static GhostNote: typeof GhostNote; + static Glyph: typeof Glyph; + static GlyphNote: typeof GlyphNote; + static GraceNote: typeof GraceNote; + static GraceNoteGroup: typeof GraceNoteGroup; + static GraceTabNote: typeof GraceTabNote; + static KeyManager: typeof KeyManager; + static KeySignature: typeof KeySignature; + static KeySigNote: typeof KeySigNote; + static Modifier: typeof Modifier; + static ModifierContext: typeof ModifierContext; + static MultiMeasureRest: typeof MultiMeasureRest; + static Music: typeof Music; + static Note: typeof Note; + static NoteHead: typeof NoteHead; + static NoteSubGroup: typeof NoteSubGroup; + static Ornament: typeof Ornament; + static Parenthesis: typeof Parenthesis; + static Parser: typeof Parser; + static PedalMarking: typeof PedalMarking; + static Registry: typeof Registry; + static RenderContext: typeof RenderContext; + static Renderer: typeof Renderer; + static RepeatNote: typeof RepeatNote; + static Repetition: typeof Repetition; + static Stave: typeof Stave; + static StaveConnector: typeof StaveConnector; + static StaveHairpin: typeof StaveHairpin; + static StaveLine: typeof StaveLine; + static StaveModifier: typeof StaveModifier; + static StaveNote: typeof StaveNote; + static StaveTempo: typeof StaveTempo; + static StaveText: typeof StaveText; + static StaveTie: typeof StaveTie; + static Stem: typeof Stem; + static StringNumber: typeof StringNumber; + static Stroke: typeof Stroke; + static SVGContext: typeof SVGContext; + static System: typeof System; + static TabNote: typeof TabNote; + static TabSlide: typeof TabSlide; + static TabStave: typeof TabStave; + static TabTie: typeof TabTie; + static TextBracket: typeof TextBracket; + static TextDynamics: typeof TextDynamics; + static TextFormatter: typeof TextFormatter; + static TextNote: typeof TextNote; + static TickContext: typeof TickContext; + static TimeSignature: typeof TimeSignature; + static TimeSigNote: typeof TimeSigNote; + static Tremolo: typeof Tremolo; + static Tuning: typeof Tuning; + static Tuplet: typeof Tuplet; + static Vibrato: typeof Vibrato; + static VibratoBracket: typeof VibratoBracket; + static Voice: typeof Voice; + static Volta: typeof Volta; + static AnnotationHorizontalJustify: typeof AnnotationHorizontalJustify; + static AnnotationVerticalJustify: typeof AnnotationVerticalJustify; + static ChordSymbolHorizontalJustify: typeof ChordSymbolHorizontalJustify; + static ChordSymbolVerticalJustify: typeof ChordSymbolVerticalJustify; + static SymbolTypes: typeof SymbolTypes; + static SymbolModifiers: typeof SymbolModifiers; + static CurvePosition: typeof CurvePosition; + static FontWeight: typeof FontWeight; + static FontStyle: typeof FontStyle; + static ModifierPosition: typeof ModifierPosition; + static RendererBackends: typeof RendererBackends; + static RendererLineEndType: typeof RendererLineEndType; + static BarlineType: typeof BarlineType; + static StaveModifierPosition: typeof StaveModifierPosition; + static VoltaType: typeof VoltaType; + static TextBracketPosition: typeof TextBracketPosition; + static TextJustification: typeof TextJustification; + static VoiceMode: typeof VoiceMode; + /** + * Examples: + * ``` + * Vex.Flow.setMusicFont('Petaluma'); + * Vex.Flow.setMusicFont('Bravura', 'Gonville'); + * ``` + * + * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom). + * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of: + * 'Bravura', 'Gonville', 'Custom'. + * + * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`, + * which includes a single music font. Calling this method is unnecessary. + * + * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts. + * In this case, the default music font stack is empty. + * Example: + * ``` + * await Vex.Flow.fetchMusicFont('Petaluma'); + * Vex.Flow.setMusicFont('Petaluma'); + * ... (do VexFlow stuff) ... + * ``` + * See `demos/fonts/` for more examples. + * + * @returns an array of Font objects corresponding to the provided `fontNames`. + */ + static setMusicFont(...fontNames: string[]): Font[]; + /** + * Used with vexflow-core which supports dynamic font loading. + */ + static fetchMusicFont(fontName: string, fontModuleOrPath?: string | FontModule): Promise; + static getMusicFont(): string[]; + static getMusicFontStack(): Font[]; + static get RENDER_PRECISION_PLACES(): number; + static set RENDER_PRECISION_PLACES(precision: number); + static get SOFTMAX_FACTOR(): number; + static set SOFTMAX_FACTOR(factor: number); + static get NOTATION_FONT_SCALE(): number; + static set NOTATION_FONT_SCALE(value: number); + static get TABLATURE_FONT_SCALE(): number; + static set TABLATURE_FONT_SCALE(value: number); + static get RESOLUTION(): number; + static set RESOLUTION(value: number); + static get SLASH_NOTEHEAD_WIDTH(): number; + static set SLASH_NOTEHEAD_WIDTH(value: number); + static get STAVE_LINE_DISTANCE(): number; + static set STAVE_LINE_DISTANCE(value: number); + static get STAVE_LINE_THICKNESS(): number; + static set STAVE_LINE_THICKNESS(value: number); + static get STEM_HEIGHT(): number; + static set STEM_HEIGHT(value: number); + static get STEM_WIDTH(): number; + static set STEM_WIDTH(value: number); + static get TIME4_4(): { + num_beats: number; + beat_value: number; + resolution: number; + }; + static get accidentalMap(): Record; + static get unicode(): Record; + static keySignature(spec: string): { + type: string; + line: number; + }[]; + static hasKeySignature(spec: string): boolean; + static getKeySignatures(): Record; + static clefProperties(clef: string): { + line_shift: number; + }; + static keyProperties(key: string, clef?: string, params?: any): any; + static durationToTicks(duration: string): number; +} diff --git a/build/types/src/font.d.ts b/build/types/src/font.d.ts new file mode 100644 index 0000000000..6de2151817 --- /dev/null +++ b/build/types/src/font.d.ts @@ -0,0 +1,201 @@ +import { ChordSymbolMetrics } from './chordsymbol'; +import { ClefMetrics } from './clef'; +import { NoteHeadMetrics } from './notehead'; +import { OrnamentMetrics } from './ornament'; +import { StringNumberMetrics } from './stringnumber'; +import { TupletMetrics } from './tuplet'; +export interface FontInfo { + /** CSS font-family, e.g., 'Arial', 'Helvetica Neue, Arial, sans-serif', 'Times, serif' */ + family?: string; + /** + * CSS font-size (e.g., '10pt', '12px'). + * For backwards compatibility with 3.0.9, plain numbers are assumed to be specified in 'pt'. + */ + size?: number | string; + /** `bold` or a number (e.g., 900) as inspired by CSS font-weight. */ + weight?: string | number; + /** `italic` as inspired by CSS font-style. */ + style?: string; +} +export type FontModule = { + data: FontData; + metrics: FontMetrics; +}; +export interface FontData { + glyphs: Record; + fontFamily?: string; + resolution: number; + generatedOn?: string; +} +/** Specified in the `xxx_metrics.ts` files. */ +export interface FontMetrics extends Record { + smufl: boolean; + stave?: Record; + accidental?: Record; + clef_default?: ClefMetrics; + clef_small?: ClefMetrics; + pedalMarking?: Record>; + digits?: Record; + articulation?: Record>; + tremolo?: Record>; + chordSymbol?: ChordSymbolMetrics; + ornament?: Record; + noteHead?: NoteHeadMetrics; + stringNumber?: StringNumberMetrics; + tuplet?: TupletMetrics; + glyphs: Record; +} +export interface FontGlyph { + x_min: number; + x_max: number; + y_min?: number; + y_max?: number; + ha: number; + leftSideBearing?: number; + advanceWidth?: number; + o?: string; + cached_outline?: number[]; +} +export declare enum FontWeight { + NORMAL = "normal", + BOLD = "bold" +} +export declare enum FontStyle { + NORMAL = "normal", + ITALIC = "italic" +} +export declare class Font { + /** Default sans-serif font family. */ + static SANS_SERIF: string; + /** Default serif font family. */ + static SERIF: string; + /** Default font size in `pt`. */ + static SIZE: number; + /** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */ + static scaleToPxFrom: Record; + /** + * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') + * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported + * units (e.g., pt, em, %). + * @returns the number of pixels that is equivalent to `fontSize` + */ + static convertSizeToPixelValue(fontSize?: string | number): number; + /** + * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') + * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported + * units (e.g., pt, em, %). + * @returns the number of points that is equivalent to `fontSize` + */ + static convertSizeToPointValue(fontSize?: string | number): number; + /** + * @param f + * @param size + * @param weight + * @param style + * @returns the `size` field will include the units (e.g., '12pt', '16px'). + */ + static validate(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): Required; + /** + * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial'). + */ + static fromCSSString(cssFontShorthand: string): Required; + /** + * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`. + */ + static toCSSString(fontInfo?: FontInfo): string; + /** + * @param fontSize a number representing a font size, or a string font size with units. + * @param scaleFactor multiply the size by this factor. + * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48). + * If the fontSize argument was a number, the return value will be a number. + * If the fontSize argument was a string, the return value will be a string. + */ + static scaleSize(fontSize: T, scaleFactor: number): T; + /** + * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec). + * @returns true if the font weight indicates bold. + */ + static isBold(weight?: string | number): boolean; + /** + * @param style + * @returns true if the font style indicates 'italic'. + */ + static isItalic(style?: string): boolean; + /** + * Customize this field to specify a different CDN for delivering web fonts. + * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/ + * Or you can use your own host. + */ + static WEB_FONT_HOST: string; + /** + * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when + * `await Font.loadWebFonts()` is called. Customize this field to specify a different + * set of fonts to load. See: `Font.loadWebFonts()`. + */ + static WEB_FONT_FILES: Record; + /** + * @param fontName + * @param woffURL The absolute or relative URL to the woff file. + * @param includeWoff2 If true, we assume that a woff2 file is in + * the same folder as the woff file, and will append a `2` to the url. + */ + static loadWebFont(fontName: string, woffURL: string, includeWoff2?: boolean): Promise; + /** + * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls: + * `await Vex.Flow.Font.loadWebFonts();` + * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts), + * and a @font-face { font-family: ... } rule in your CSS. + * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial, + * depending on the current music engraving font. + * + * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts + * for your app. + */ + static loadWebFonts(): Promise; + /** + * @param fontName + * @param data optionally set the Font object's `.data` property. + * This is usually done when setting up a font for the first time. + * @param metrics optionally set the Font object's `.metrics` property. + * This is usually done when setting up a font for the first time. + * @returns a Font object with the given `fontName`. + * Reuse an existing Font object if a matching one is found. + */ + static load(fontName: string, data?: FontData, metrics?: FontMetrics): Font; + protected name: string; + protected data?: FontData; + protected metrics?: FontMetrics; + /** + * Use `Font.load(fontName)` to get a Font object. + * Do not call this constructor directly. + */ + private constructor(); + getName(): string; + getData(): FontData; + getMetrics(): FontMetrics; + setData(data: FontData): void; + setMetrics(metrics: FontMetrics): void; + hasData(): boolean; + getResolution(): number; + getGlyphs(): Record; + /** + * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts). + * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY). + * @param defaultValue is returned if the lookup fails. + * @returns the retrieved value (or `defaultValue` if the lookup fails). + */ + lookupMetric(key: string, defaultValue?: Record | number): any; + /** For debugging. */ + toString(): string; +} diff --git a/build/types/src/fonts/bravura_glyphs.d.ts b/build/types/src/fonts/bravura_glyphs.d.ts new file mode 100644 index 0000000000..cedea92b8b --- /dev/null +++ b/build/types/src/fonts/bravura_glyphs.d.ts @@ -0,0 +1,3543 @@ +export declare const BravuraFont: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + barlineTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlusSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRightSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeftSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWholeSquare: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareWhite: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesis: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadMoonBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleLeftBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRightBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRoundDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKomaSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKoron: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSori: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkUpbow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassScoop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassDoitMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallLipShort: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassLiftMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallRoughMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassBend: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteClosed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteOpen: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFlip: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassJazzTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassSmear: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedLeftHandPizzicato: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pictChokeCymbal: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat1Bar: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat2Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat4Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeatBarSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymHalfDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymAugmented: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMajorSeventh: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMinor: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiagonalArrangementSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v7KleismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v7KleismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal25SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal25SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal35LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp25SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat25SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v7kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v7kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v7kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v7kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp25SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat25SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp35MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat35MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp35LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat35LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp25SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat25SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v7kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v7kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11KleismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11KleismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal55CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal55CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v11CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v11SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v11SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v11SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v11SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp55CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat55CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp55CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat55CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v11CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v11CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v11SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v11SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v11SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v11SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7v11CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7v11CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp55CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat55CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp17CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat17CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7v11kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7v11kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v19CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v19CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v23SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v23SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp5v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat5v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp23CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat23CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19SchismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19SchismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17KleismaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal17KleismaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal143CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal143CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v49CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v49CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal19CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v19CommaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7v19CommaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23SmallDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal23SmallDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v49MediumDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v49MediumDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal49LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal11v19LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13LargeDiesisUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5v13LargeDiesisDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v49CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v49CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp143CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat143CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19sDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19sUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19sUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19sDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp17kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat17kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp143CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat143CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v49CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v49CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp7v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat7v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v13MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v13MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v19MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v19MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v49MUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v49MDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp49LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat49LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp11v19LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat11v19LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalSharp5v13LUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFlat5v13LDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp23SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat23SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp49SDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat49SUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp7v19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat7v19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp19CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat19CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp11v49CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat11v49CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp143CDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat143CUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp17kDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat17kUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleSharp19sDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalDoubleFlat19sUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalShaftUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalShaftDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalAcute: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalGrave: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1MinaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1MinaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2MinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2MinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1TinaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal1TinaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal2TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal3TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal3TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal4TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal4TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal5TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal6TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal6TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal7TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal8TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal8TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal9TinasUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittal9TinasDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFractionalTinaUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accSagittalFractionalTinaDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlatAndFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/common_metrics.d.ts b/build/types/src/fonts/common_metrics.d.ts new file mode 100644 index 0000000000..dfd064a4ef --- /dev/null +++ b/build/types/src/fonts/common_metrics.d.ts @@ -0,0 +1,384 @@ +export declare const CommonMetrics: { + smufl: boolean; + stave: { + padding: number; + endPaddingMax: number; + endPaddingMin: number; + unalignedNotePadding: number; + }; + accidental: { + noteheadAccidentalPadding: number; + leftPadding: number; + accidentalSpacing: number; + }; + chordSymbol: { + global: { + superscriptOffset: number; + subscriptOffset: number; + kerningOffset: number; + lowerKerningText: string[]; + upperKerningText: string[]; + spacing: number; + superSubRatio: number; + }; + glyphs: { + csymDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymHalfDiminished: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymAugmented: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketLeftTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymBracketRightTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensLeftVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymParensRightVeryTall: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymDiagonalArrangementSlash: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMinor: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + csymMajorSeventh: { + leftSideBearing: number; + yOffset: number; + advanceWidth: number; + }; + accidentalSharp: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + accidentalFlat: { + leftSideBearing: number; + advanceWidth: number; + yOffset: number; + }; + }; + }; + clef_default: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + clef_small: { + width: number; + annotations: { + '8va': { + treble: { + line: number; + shiftX: number; + }; + }; + '8vb': { + treble: { + line: number; + shiftX: number; + }; + bass: { + line: number; + shiftX: number; + }; + }; + }; + }; + ornament: { + brassScoop: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassDoitMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallLipShort: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassLiftMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFallRoughMedium: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassBend: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteClosed: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassMuteOpen: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassFlip: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassJazzTurn: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + brassSmear: { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; + }; + }; + parenthesis: { + default: { + width: number; + }; + gracenote: { + width: number; + }; + }; + pedalMarking: {}; + digits: { + shiftLine: number; + shiftY: number; + }; + articulation: { + articStaccatissimoAbove: { + padding: number; + }; + articStaccatissimoBelow: { + padding: number; + }; + }; + tremolo: { + default: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + grace: { + spacing: number; + offsetYStemUp: number; + offsetYStemDown: number; + offsetXStemUp: number; + offsetXStemDown: number; + }; + }; + staveRepetition: { + symbolText: { + offsetX: number; + offsetY: number; + spacing: number; + }; + coda: { + offsetY: number; + }; + segno: { + offsetY: number; + }; + }; + noteHead: { + minPadding: number; + }; + stem: { + heightAdjustmentForFlag: number; + noteHead: { + noteheadTriangleUpHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadTriangleUpWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadXWhole: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadHalf: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadBlack: { + offsetYBaseStemUp: number; + offsetYBaseStemDown: number; + }; + noteheadSquareWhite: { + offsetYBaseStemDown: number; + offsetYBaseStemUp: number; + }; + }; + }; + stringNumber: { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; + }; + tuplet: { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; + }; + glyphs: { + coda: { + shiftX: number; + shiftY: number; + }; + segno: { + shiftX: number; + }; + flag: { + shiftX: number; + staveTempo: { + shiftX: number; + }; + }; + clef_default: {}; + clef_small: { + gClef: { + shiftY: number; + }; + }; + clefNote_default: {}; + clefNote_small: {}; + stroke_straight: { + arrowheadBlackDown: { + shiftX: number; + }; + arrowheadBlackUp: { + shiftX: number; + }; + }; + stroke_wiggly: { + arrowheadBlackDown: { + shiftX: number; + shiftY: number; + }; + arrowheadBlackUp: { + shiftX: number; + shiftY: number; + }; + }; + textNote: { + breathMarkTick: { + shiftY: number; + }; + breathMarkComma: {}; + segno: { + shiftX: number; + shiftY: number; + }; + coda: { + shiftX: number; + shiftY: number; + }; + ornamentTrill: { + shiftX: number; + shiftY: number; + }; + ornamentTurn: {}; + ornamentTurnSlash: {}; + ornamentMordent: { + shiftX: number; + }; + ornamentShortTrill: { + shiftX: number; + }; + }; + noteHead: {}; + chordSymbol: { + scale: number; + }; + }; +}; diff --git a/build/types/src/fonts/custom_glyphs.d.ts b/build/types/src/fonts/custom_glyphs.d.ts new file mode 100644 index 0000000000..6da20639d2 --- /dev/null +++ b/build/types/src/fonts/custom_glyphs.d.ts @@ -0,0 +1,42 @@ +export declare const CustomFont: { + resolution: number; + fontFamily: string; + glyphs: { + vexAccidentalMicrotonal1: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexAccidentalMicrotonal3: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexAccidentalMicrotonal4: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexNoteHeadRectBlack: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexNoteHeadRectWhite: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + vexWiggleArpeggioUp: { + x_min: number; + x_max: number; + ha: number; + o: string; + }; + }; +}; diff --git a/build/types/src/fonts/gonville_glyphs.d.ts b/build/types/src/fonts/gonville_glyphs.d.ts new file mode 100644 index 0000000000..ec2e48b8c9 --- /dev/null +++ b/build/types/src/fonts/gonville_glyphs.d.ts @@ -0,0 +1,1119 @@ +export declare const GonvilleSmuflFont: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + barlineTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlusSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRightSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeftSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKomaSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkUpbow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedLeftHandPizzicato: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pictChokeCymbal: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arrowheadBlackDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/leland_glyphs.d.ts b/build/types/src/fonts/leland_glyphs.d.ts new file mode 100644 index 0000000000..37fb4902e6 --- /dev/null +++ b/build/types/src/fonts/leland_glyphs.d.ts @@ -0,0 +1,1191 @@ +export declare const LelandFont: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWholeSquare: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareWhite: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadMoonBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleLeftBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRightBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRoundDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteClosed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteOpen: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat1Bar: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat2Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat4Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeatBarSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymHalfDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymAugmented: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMajorSeventh: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlatAndFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/load_all.d.ts b/build/types/src/fonts/load_all.d.ts new file mode 100644 index 0000000000..c8159357a9 --- /dev/null +++ b/build/types/src/fonts/load_all.d.ts @@ -0,0 +1 @@ +export declare function loadAllMusicFonts(): void; diff --git a/build/types/src/fonts/load_bravura.d.ts b/build/types/src/fonts/load_bravura.d.ts new file mode 100644 index 0000000000..368afa2244 --- /dev/null +++ b/build/types/src/fonts/load_bravura.d.ts @@ -0,0 +1 @@ +export declare function loadBravura(): void; diff --git a/build/types/src/fonts/load_custom.d.ts b/build/types/src/fonts/load_custom.d.ts new file mode 100644 index 0000000000..2b3b5207a7 --- /dev/null +++ b/build/types/src/fonts/load_custom.d.ts @@ -0,0 +1 @@ +export declare function loadCustom(): void; diff --git a/build/types/src/fonts/load_gonville.d.ts b/build/types/src/fonts/load_gonville.d.ts new file mode 100644 index 0000000000..1dad266116 --- /dev/null +++ b/build/types/src/fonts/load_gonville.d.ts @@ -0,0 +1 @@ +export declare function loadGonville(): void; diff --git a/build/types/src/fonts/load_leland.d.ts b/build/types/src/fonts/load_leland.d.ts new file mode 100644 index 0000000000..cd62e01095 --- /dev/null +++ b/build/types/src/fonts/load_leland.d.ts @@ -0,0 +1 @@ +export declare function loadLeland(): void; diff --git a/build/types/src/fonts/load_petaluma.d.ts b/build/types/src/fonts/load_petaluma.d.ts new file mode 100644 index 0000000000..db8a66540a --- /dev/null +++ b/build/types/src/fonts/load_petaluma.d.ts @@ -0,0 +1 @@ +export declare function loadPetaluma(): void; diff --git a/build/types/src/fonts/petaluma_glyphs.d.ts b/build/types/src/fonts/petaluma_glyphs.d.ts new file mode 100644 index 0000000000..4b8ea71551 --- /dev/null +++ b/build/types/src/fonts/petaluma_glyphs.d.ts @@ -0,0 +1,1639 @@ +export declare const PetalumaFont: { + glyphs: { + bracketTop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + bracketBottom: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + barlineTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkTick: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + segno: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + coda: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + gClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + cClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fClef: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + unpitchedPercussionClef1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + '6stringTabClef': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig0: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig3: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig4: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig5: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig6: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig7: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig8: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSig9: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigCutCommon: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigPlusSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensRightSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + timeSigParensLeftSmall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadXBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleXHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircleX: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadCircledBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDoubleWholeSquare: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareWhite: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSquareBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleUpBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedDoubleWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedWhole2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedHalf2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadSlashedBlack2: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadDiamondBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesis: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadParenthesisLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadMoonBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleLeftBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRightBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + noteheadTriangleRoundDownBlack: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + augmentationDot: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + tremolo1: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag8thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag16thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag32ndDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag64thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + flag128thDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNatural: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalDoubleFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensLeft: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalParensRight: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneFlatStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesFlatZimmermann: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalQuarterToneSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalThreeQuarterTonesSharpStein: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBuyukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalBakiyeFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKomaSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKucukMucennebSharp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalKoron: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalSori: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articAccentBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articTenutoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articStaccatissimoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + articMarcatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryLongBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataVeryShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + fermataShortBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkComma: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + breathMarkUpbow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesura: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + caesuraCurved: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restMaxima: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restDoubleWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWhole: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restWholeLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalf: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restHalfLegerLine: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + restQuarter: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest8th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest16th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest32nd: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest64th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + rest128th: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicPiano: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicMezzo: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicForte: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicRinforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicSforzando: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + dynamicZ: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTurnSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentMordent: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentShortTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentTremblement: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompAppoggTrill: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillDAnglebert: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompSlideTrillBach: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillSuffixDandrieu: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompDoubleCadenceUpperPrefixTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + ornamentPrecompTrillLowerSuffix: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassScoop: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassDoitMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallLipShort: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassLiftMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFallRoughMedium: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassBend: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteClosed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassMuteOpen: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassFlip: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassJazzTurn: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + brassSmear: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsDownBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsUpBow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + stringsHarmonic: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoAbove: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedSnapPizzicatoBelow: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pluckedLeftHandPizzicato: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalPed: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + keyboardPedalUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + pictChokeCymbal: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + wiggleArpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoUp: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + arpeggiatoDown: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat1Bar: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat2Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeat4Bars: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + repeatBarSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymHalfDiminished: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymAugmented: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMajorSeventh: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymMinor: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketLeftTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymBracketRightTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensLeftVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymParensRightVeryTall: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + csymDiagonalArrangementSlash: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalNarrowReversedFlatAndFlat: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonPlus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + accidentalWilsonMinus: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + o: string; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/petalumascript_glyphs.d.ts b/build/types/src/fonts/petalumascript_glyphs.d.ts new file mode 100644 index 0000000000..82295a6a3a --- /dev/null +++ b/build/types/src/fonts/petalumascript_glyphs.d.ts @@ -0,0 +1,863 @@ +export declare const PetalumaScriptFont: { + spacing: number; + glyphs: { + ' ': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '0': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '1': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '2': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '3': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '4': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '5': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '6': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '7': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '8': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '9': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '!': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '"': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '#': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + $: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '%': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '&': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + "'": { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '(': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ')': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '*': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '+': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ',': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '-': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '.': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '/': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ':': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ';': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '<': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '=': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '>': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '?': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '@': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + A: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + B: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + C: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + D: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + E: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + F: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + G: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + H: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + I: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + J: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + K: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + L: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + M: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + N: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + O: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + P: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + R: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + S: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + T: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + U: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + V: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + W: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + X: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '[': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '\\': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ']': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '^': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + _: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '`': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + a: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + b: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + c: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + d: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + e: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + f: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + g: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + h: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + i: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + j: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + k: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + l: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + m: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + n: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + o: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + p: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + r: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + s: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + t: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + u: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + v: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + w: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + x: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '{': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '|': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '}': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '~': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/robotoslab_glyphs.d.ts b/build/types/src/fonts/robotoslab_glyphs.d.ts new file mode 100644 index 0000000000..3bfa79f006 --- /dev/null +++ b/build/types/src/fonts/robotoslab_glyphs.d.ts @@ -0,0 +1,863 @@ +export declare const RobotoSlabFont: { + spacing: number; + glyphs: { + ' ': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '0': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '1': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '2': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '3': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '4': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '5': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '6': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '7': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '8': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '9': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '!': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '"': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '#': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + $: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '%': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '&': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + "'": { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '(': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ')': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '*': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '+': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ',': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '-': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '.': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '/': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ':': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ';': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '<': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '=': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '>': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '?': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '@': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + A: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + B: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + C: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + D: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + E: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + F: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + G: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + H: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + I: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + J: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + K: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + L: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + M: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + N: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + O: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + P: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + R: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + S: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + T: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + U: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + V: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + W: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + X: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '[': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '\\': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ']': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '^': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + _: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '`': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + a: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + b: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + c: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + d: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + e: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + f: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + g: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + h: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + i: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + j: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + k: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + l: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + m: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + n: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + o: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + p: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + r: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + s: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + t: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + u: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + v: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + w: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + x: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '{': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '|': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '}': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '~': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/sans_bold_text_metrics.d.ts b/build/types/src/fonts/sans_bold_text_metrics.d.ts new file mode 100644 index 0000000000..b33f6cdf66 --- /dev/null +++ b/build/types/src/fonts/sans_bold_text_metrics.d.ts @@ -0,0 +1,862 @@ +export declare const SansFontBold: { + glyphs: { + '0': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '1': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '2': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '3': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '4': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '5': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '6': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '7': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '8': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '9': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ' ': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '!': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '"': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '#': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + $: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '%': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '&': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + "'": { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '(': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ')': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '*': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '+': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ',': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '-': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '.': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '/': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ':': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ';': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '<': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '=': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '>': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '?': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '@': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + A: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + B: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + C: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + D: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + E: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + F: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + G: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + H: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + I: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + J: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + K: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + L: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + M: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + N: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + O: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + P: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + R: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + S: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + T: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + U: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + V: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + W: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + X: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '[': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '\\': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ']': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '^': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + _: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '`': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + a: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + b: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + c: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + d: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + e: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + f: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + g: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + h: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + i: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + j: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + k: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + l: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + m: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + n: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + o: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + p: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + r: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + s: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + t: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + u: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + v: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + w: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + x: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '{': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '|': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '}': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '~': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/sans_text_metrics.d.ts b/build/types/src/fonts/sans_text_metrics.d.ts new file mode 100644 index 0000000000..1d0036b8a5 --- /dev/null +++ b/build/types/src/fonts/sans_text_metrics.d.ts @@ -0,0 +1,870 @@ +export declare const SansFont: { + smufl: boolean; + name: string; + spacing: number; + Description: string; + bold: boolean; + italic: boolean; + monospaced: boolean; + serifs: boolean; + glyphs: { + '0': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '1': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '2': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '3': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '4': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '5': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '6': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '7': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '8': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '9': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ' ': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '!': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '"': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '#': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + $: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '%': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '&': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + "'": { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '(': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ')': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '*': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '+': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ',': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '-': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '.': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '/': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ':': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ';': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '<': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '=': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '>': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '?': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '@': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + A: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + B: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + C: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + D: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + E: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + F: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + G: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + H: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + I: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + J: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + K: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + L: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + M: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + N: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + O: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + P: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + R: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + S: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + T: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + U: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + V: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + W: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + X: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '[': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '\\': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ']': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '^': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + _: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '`': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + a: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + b: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + c: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + d: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + e: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + f: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + g: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + h: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + i: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + j: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + k: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + l: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + m: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + n: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + o: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + p: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + r: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + s: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + t: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + u: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + v: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + w: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + x: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '{': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '|': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '}': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '~': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/serif_text_metrics.d.ts b/build/types/src/fonts/serif_text_metrics.d.ts new file mode 100644 index 0000000000..3202b0e5a7 --- /dev/null +++ b/build/types/src/fonts/serif_text_metrics.d.ts @@ -0,0 +1,870 @@ +export declare const SerifFont: { + smufl: boolean; + name: string; + spacing: number; + Description: string; + bold: boolean; + italic: boolean; + monospaced: boolean; + serifs: boolean; + glyphs: { + '0': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '1': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '2': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '3': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '4': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '5': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '6': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '7': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '8': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '9': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ' ': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '!': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '"': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '#': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + $: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '%': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '&': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + "'": { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '(': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ')': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '*': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '+': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ',': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '-': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '.': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '/': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ':': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ';': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '<': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '=': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '>': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '?': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '@': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + A: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + B: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + C: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + D: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + E: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + F: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + G: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + H: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + I: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + J: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + K: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + L: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + M: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + N: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + O: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + P: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + R: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + S: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + T: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + U: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + V: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + W: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + X: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + Z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '[': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '\\': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + ']': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '^': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + _: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '`': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + a: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + b: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + c: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + d: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + e: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + f: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + g: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + h: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + i: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + j: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + k: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + l: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + m: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + n: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + o: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + p: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + q: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + r: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + s: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + t: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + u: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + v: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + w: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + x: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + y: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + z: { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '{': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '|': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '}': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + '~': { + x_min: number; + x_max: number; + y_min: number; + y_max: number; + ha: number; + leftSideBearing: number; + advanceWidth: number; + }; + }; + fontFamily: string; + resolution: number; + generatedOn: string; +}; diff --git a/build/types/src/fonts/textfonts.d.ts b/build/types/src/fonts/textfonts.d.ts new file mode 100644 index 0000000000..a9a1721cd3 --- /dev/null +++ b/build/types/src/fonts/textfonts.d.ts @@ -0,0 +1 @@ +export declare function loadTextFonts(): void; diff --git a/build/types/src/formatter.d.ts b/build/types/src/formatter.d.ts new file mode 100644 index 0000000000..28a915d788 --- /dev/null +++ b/build/types/src/formatter.d.ts @@ -0,0 +1,215 @@ +import { BoundingBox } from './boundingbox'; +import { ModifierContext } from './modifiercontext'; +import { RenderContext } from './rendercontext'; +import { Stave } from './stave'; +import { StemmableNote } from './stemmablenote'; +import { TabNote } from './tabnote'; +import { TabStave } from './tabstave'; +import { Tickable } from './tickable'; +import { TickContext } from './tickcontext'; +import { Voice } from './voice'; +export interface FormatterOptions { + /** Defaults to Tables.SOFTMAX_FACTOR. */ + softmaxFactor?: number; + /** Defaults to `false`. */ + globalSoftmax?: boolean; + /** Defaults to 5. */ + maxIterations?: number; +} +export interface FormatParams { + align_rests?: boolean; + stave?: Stave; + context?: RenderContext; + auto_beam?: boolean; +} +export interface AlignmentContexts { + list: number[]; + map: Record; + array: T[]; + resolutionMultiplier: number; +} +export interface AlignmentModifierContexts { + map: Map>; + array: ModifierContext[]; + resolutionMultiplier: number; +} +/** + * Format implements the formatting and layout algorithms that are used + * to position notes in a voice. The algorithm can align multiple voices both + * within a stave, and across multiple staves. + * + * To do this, the formatter breaks up voices into a grid of rational-valued + * `ticks`, to which each note is assigned. Then, minimum widths are assigned + * to each tick based on the widths of the notes and modifiers in that tick. This + * establishes the smallest amount of space required for each tick. + * + * Finally, the formatter distributes the left over space proportionally to + * all the ticks, setting the `x` values of the notes in each tick. + * + * See `tests/formatter_tests.ts` for usage examples. The helper functions included + * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples. + */ +export declare class Formatter { + static DEBUG: boolean; + protected hasMinTotalWidth: boolean; + protected minTotalWidth: number; + protected contextGaps: { + total: number; + gaps: { + x1: number; + x2: number; + }[]; + }; + protected justifyWidth: number; + protected totalCost: number; + protected totalShift: number; + protected tickContexts: AlignmentContexts; + protected formatterOptions: Required; + protected modifierContexts: AlignmentModifierContexts[]; + protected voices: Voice[]; + protected lossHistory: number[]; + protected durationStats: Record; + /** + * Helper function to layout "notes" one after the other without + * regard for proportions. Useful for tests and debugging. + */ + static SimpleFormat(notes: Tickable[], x?: number, { paddingBetween }?: { + paddingBetween?: number | undefined; + }): void; + /** Helper function to plot formatter debug info. */ + static plotDebugging(ctx: RenderContext, formatter: Formatter, xPos: number, y1: number, y2: number, options?: { + stavePadding: number; + }): void; + /** + * Helper function to format and draw a single voice. Returns a bounding + * box for the notation. + * @param ctx the rendering context + * @param stave the stave to which to draw (`Stave` or `TabStave`) + * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.) + * @param params one of below: + * * Setting `autobeam` only `(context, stave, notes, true)` or + * `(ctx, stave, notes, {autobeam: true})` + * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})` + * * Setting both a struct is needed `(context, stave, notes, { + * autobeam: true, align_rests: true})` + * * `autobeam` automatically generates beams for the notes. + * * `align_rests` aligns rests with nearby notes. + */ + static FormatAndDraw(ctx: RenderContext, stave: Stave, notes: StemmableNote[], params?: FormatParams | boolean): BoundingBox | undefined; + /** + * Helper function to format and draw aligned tab and stave notes in two + * separate staves. + * @param ctx the rendering context + * @param tabstave a `TabStave` instance on which to render `TabNote`s. + * @param stave a `Stave` instance on which to render `Note`s. + * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.) + * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.) + * @param autobeam automatically generate beams. + * @param params a configuration object: + * * `autobeam` automatically generates beams for the notes. + * * `align_rests` aligns rests with nearby notes. + */ + static FormatAndDrawTab(ctx: RenderContext, tabstave: TabStave, stave: Stave, tabnotes: TabNote[], notes: Tickable[], autobeam: boolean, params: FormatParams): void; + /** + * Automatically set the vertical position of rests based on previous/next note positions. + * @param tickables an array of Tickables. + * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes. + * @param alignTuplets If `false`, ignores tuplets. + */ + static AlignRestsToNotes(tickables: Tickable[], alignAllNotes: boolean, alignTuplets?: boolean): void; + constructor(options?: FormatterOptions); + /** + * Find all the rests in each of the `voices` and align them to neighboring notes. + * + * @param voices + * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests. + */ + alignRests(voices: Voice[], alignAllNotes: boolean): void; + /** + * Estimate the width required to render 'voices'. This is done by: + * 1. Sum the widths of all the tick contexts + * 2. Estimate the padding. + * The latter is done by calculating the padding 3 different ways, and taking the + * greatest value: + * 1. the padding required for unaligned notes in different voices + * 2. the padding based on the stddev of the tickable widths + * 3. the padding based on the stddev of the tickable durations. + * + * The last 2 quantities estimate a 'width entropy', where notes might need more + * room than the proportional formatting gives them. A measure of all same duration + * and width will need no extra padding, and all these quantities will be + * zero in that case. + * + * Note: joinVoices has to be called before calling preCalculateMinTotalWidth. + * + * @param voices the voices that contain the notes + * @returns the estimated width in pixels + */ + preCalculateMinTotalWidth(voices: Voice[]): number; + /** + * Get minimum width required to render all voices. Either `format` or + * `preCalculateMinTotalWidth` must be called before this method. + */ + getMinTotalWidth(): number; + /** Calculate the resolution multiplier for `voices`. */ + static getResolutionMultiplier(voices: Voice[]): number; + /** Create a `ModifierContext` for each tick in `voices`. */ + createModifierContexts(voices: Voice[]): void; + /** + * Create a `TickContext` for each tick in `voices`. Also calculate the + * total number of ticks in voices. + */ + createTickContexts(voices: Voice[]): AlignmentContexts; + /** + * Get the AlignmentContexts of TickContexts that were created by createTickContexts. + * Returns undefined if createTickContexts has not yet been run. + */ + getTickContexts(): AlignmentContexts | undefined; + /** + * This is the core formatter logic. Format voices and justify them + * to `justifyWidth` pixels. `renderingContext` is required to justify elements + * that can't retrieve widths without a canvas. This method sets the `x` positions + * of all the tickables/notes in the formatter. + */ + preFormat(justifyWidth?: number, renderingContext?: RenderContext, voicesParam?: Voice[], stave?: Stave): number; + /** Calculate the total cost of this formatting decision. */ + evaluate(): number; + /** + * Run a single iteration of rejustification. At a high level, this method calculates + * the overall "loss" (or cost) of this layout, and repositions tickcontexts in an + * attempt to reduce the cost. You can call this method multiple times until it finds + * and oscillates around a global minimum. + * @param options[alpha] the "learning rate" for the formatter. It determines how much of a shift + * the formatter should make based on its cost function. + */ + tune(options?: { + alpha?: number; + }): number; + /** + * This is the top-level call for all formatting logic completed + * after `x` *and* `y` values have been computed for the notes + * in the voices. + */ + postFormat(): this; + /** + * Take all `voices` and create `ModifierContext`s out of them. This tells + * the formatters that the voices belong on a single stave. + */ + joinVoices(voices: Voice[]): this; + /** + * Align rests in voices, justify the contexts, and position the notes + * so voices are aligned and ready to render onto the stave. This method + * mutates the `x` positions of all tickables in `voices`. + * + * Voices are full justified to fit in `justifyWidth` pixels. + * + * Set `options.context` to the rendering context. Set `options.align_rests` + * to true to enable rest alignment. + */ + format(voices: Voice[], justifyWidth?: number, options?: FormatParams): this; + formatToStave(voices: Voice[], stave: Stave, optionsParam?: FormatParams): this; + getTickContext(tick: number): TickContext | undefined; +} diff --git a/build/types/src/fraction.d.ts b/build/types/src/fraction.d.ts new file mode 100644 index 0000000000..41aad5c956 --- /dev/null +++ b/build/types/src/fraction.d.ts @@ -0,0 +1,62 @@ +/** Fraction represents a rational number. */ +export declare class Fraction { + static get CATEGORY(): string; + private static __staticFractionA; + private static __staticFractionB; + private static __staticFractionTmp; + /** + * GCD: Greatest common divisor using the Euclidean algorithm. + * Note: GCD(0, 0) => 0 and GCD(0, n) => n. + */ + static GCD(a: number, b: number): number; + /** LCM: Lowest common multiple. */ + static LCM(a: number, b: number): number; + /** Lowest common multiple for more than two numbers. */ + static LCMM(args: number[]): number; + numerator: number; + denominator: number; + /** Set the numerator and denominator. */ + constructor(numerator?: number, denominator?: number); + /** Set the numerator and denominator. */ + set(numerator?: number, denominator?: number): this; + /** Return the value of the fraction. */ + value(): number; + /** Simplify numerator and denominator using GCD. */ + simplify(): this; + /** Add value of another fraction. */ + add(param1?: Fraction | number, param2?: number): this; + /** Substract value of another fraction. */ + subtract(param1?: Fraction | number, param2?: number): this; + /** Multiply by value of another fraction. */ + multiply(param1?: Fraction | number, param2?: number): this; + /** Divide by value of another Fraction. */ + divide(param1?: Fraction | number, param2?: number): this; + /** Simplify both sides and check if they are equal. */ + equals(compare: Fraction | number): boolean; + /** Greater than operator. */ + greaterThan(compare: Fraction | number): boolean; + /** Greater than or equals operator. */ + greaterThanEquals(compare: Fraction | number): boolean; + /** Less than operator. */ + lessThan(compare: Fraction | number): boolean; + /** Less than or equals operator. */ + lessThanEquals(compare: Fraction | number): boolean; + /** Return a new copy with current values. */ + clone(): Fraction; + /** Copy value of another fraction. */ + copy(other: Fraction | number): this; + /** Return the integer component (eg. 5/2 => 2). */ + quotient(): number; + /** Return the remainder component (eg. 5/2 => 1). */ + remainder(): number; + /** Calculate absolute value. */ + makeAbs(): this; + /** Return a raw string representation (eg. "5/2"). */ + toString(): string; + /** Return a simplified string respresentation. */ + toSimplifiedString(): string; + /** Return string representation in mixed form. */ + toMixedString(): string; + /** Parse a fraction string. */ + parse(str: string): this; +} diff --git a/build/types/src/frethandfinger.d.ts b/build/types/src/frethandfinger.d.ts new file mode 100644 index 0000000000..d7946ce0b6 --- /dev/null +++ b/build/types/src/frethandfinger.d.ts @@ -0,0 +1,22 @@ +import { Builder } from './easyscore'; +import { FontInfo } from './font'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { StemmableNote } from './stemmablenote'; +export declare class FretHandFinger extends Modifier { + static get CATEGORY(): string; + static TEXT_FONT: Required; + static format(nums: FretHandFinger[], state: ModifierContextState): boolean; + static easyScoreHook({ fingerings }: { + fingerings?: string | undefined; + } | undefined, note: StemmableNote, builder: Builder): void; + protected finger: string; + protected x_offset: number; + protected y_offset: number; + constructor(finger: string); + setFretHandFinger(finger: string): this; + getFretHandFinger(): string; + setOffsetX(x: number): this; + setOffsetY(y: number): this; + draw(): void; +} diff --git a/build/types/src/ghostnote.d.ts b/build/types/src/ghostnote.d.ts new file mode 100644 index 0000000000..ba30a4337b --- /dev/null +++ b/build/types/src/ghostnote.d.ts @@ -0,0 +1,16 @@ +import { ModifierContext } from './modifiercontext'; +import { NoteStruct } from './note'; +import { Stave } from './stave'; +import { StemmableNote } from './stemmablenote'; +export declare class GhostNote extends StemmableNote { + static get CATEGORY(): string; + constructor(parameter: string | NoteStruct); + /** + * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. + */ + isRest(): boolean; + setStave(stave: Stave): this; + addToModifierContext(mc: ModifierContext): this; + preFormat(): this; + draw(): void; +} diff --git a/build/types/src/glyph.d.ts b/build/types/src/glyph.d.ts new file mode 100644 index 0000000000..6bed039ec4 --- /dev/null +++ b/build/types/src/glyph.d.ts @@ -0,0 +1,140 @@ +import { BoundingBox } from './boundingbox'; +import { Element } from './element'; +import { Font, FontGlyph } from './font'; +import { RenderContext } from './rendercontext'; +import { Stave } from './stave'; +export interface GlyphProps { + code_head: string; + ledger_code_head?: string; + dot_shiftY: number; + position: string; + rest: boolean; + line_below: number; + line_above: number; + stem_beam_extension: number; + stem_up_extension: number; + stem_down_extension: number; + stem: boolean; + code?: string; + code_flag_upstem?: string; + code_flag_downstem?: string; + flag?: boolean; + width?: number; + text?: string; + tabnote_stem_down_extension: number; + tabnote_stem_up_extension: number; + beam_count: number; + shift_y?: number; + getWidth(a?: number): number; +} +export interface GlyphOptions { + category?: string; +} +export interface GlyphMetrics { + width: number; + height: number; + x_min: number; + x_max: number; + x_shift: number; + y_shift: number; + scale: number; + ha: number; + outline: number[]; + font: Font; +} +export declare const enum OutlineCode { + MOVE = 0, + LINE = 1, + QUADRATIC = 2, + BEZIER = 3 +} +declare class GlyphCacheEntry { + metrics: GlyphMetrics; + bbox: BoundingBox; + point: number; + constructor(fontStack: Font[], code: string, category?: string); +} +declare class GlyphCache { + protected cache: Map>; + lookup(code: string, category?: string): GlyphCacheEntry; +} +export declare class Glyph extends Element { + static get CATEGORY(): string; + protected static cache: GlyphCache; + static CURRENT_CACHE_KEY: string; + static MUSIC_FONT_STACK: Font[]; + /** + * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails, + * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue. + * + * @param font + * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc. + * @param code + * @param key + * @param defaultValue + */ + static lookupFontMetric(font: Font, category: string, code: string, key: string, defaultValue: number): number; + static lookupGlyph(fontStack: Font[], code: string): { + font: Font; + glyph: FontGlyph; + }; + static loadMetrics(fontStack: Font[], code: string, category?: string): GlyphMetrics; + /** + * Renders glyphs from the default font stack. + * + * @param ctx Canvas or SVG context + * @param x_pos x coordinate + * @param y_pos y coordinate + * @param point the point size of the font + * @param code the glyph code in font.getGlyphs() + * @param options + * @returns + */ + static renderGlyph(ctx: RenderContext, x_pos: number, y_pos: number, point: number, code: string, options?: { + category?: string; + scale?: number; + }): GlyphMetrics; + static renderOutline(ctx: RenderContext, outline: number[], scale: number, x_pos: number, y_pos: number): void; + static getOutlineBoundingBox(outline: number[], scale: number, x_pos: number, y_pos: number): BoundingBox; + static getWidth(code: string, point: number, category?: string): number; + bbox: BoundingBox; + code: string; + metrics: GlyphMetrics; + topGlyphs: Glyph[]; + botGlyphs: Glyph[]; + protected options: GlyphOptions; + protected originShift: { + x: number; + y: number; + }; + protected x_shift: number; + protected y_shift: number; + scale: number; + protected point: number; + protected stave?: Stave; + /** + * @param code + * @param point + * @param options + */ + constructor(code: string, point: number, options?: GlyphOptions); + draw(...args: any[]): void; + getCode(): string; + setOptions(options: any): void; + setPoint(point: number): this; + setStave(stave: Stave): this; + getXShift(): number; + setXShift(x_shift: number): this; + getYshift(): number; + setYShift(y_shift: number): this; + reset(): void; + checkMetrics(): GlyphMetrics; + getMetrics(): GlyphMetrics; + setOriginX(x: number): void; + setOriginY(y: number): void; + setOrigin(x: number, y: number): void; + render(ctx: RenderContext, x: number, y: number): void; + checkStave(): Stave; + renderToStave(x: number): void; +} +export {}; diff --git a/build/types/src/glyphnote.d.ts b/build/types/src/glyphnote.d.ts new file mode 100644 index 0000000000..b507cdf478 --- /dev/null +++ b/build/types/src/glyphnote.d.ts @@ -0,0 +1,20 @@ +import { BoundingBox } from './boundingbox'; +import { Glyph } from './glyph'; +import { Note, NoteStruct } from './note'; +export interface GlyphNoteOptions { + ignoreTicks?: boolean; + line?: number; +} +export declare class GlyphNote extends Note { + static get CATEGORY(): string; + protected options: Required; + protected glyph: Glyph; + constructor(glyph: Glyph, noteStruct: NoteStruct, options?: GlyphNoteOptions); + setGlyph(glyph: Glyph): this; + getBoundingBox(): BoundingBox | undefined; + preFormat(): this; + drawModifiers(): void; + /** Get the glyph width. */ + getGlyphWidth(): number; + draw(): void; +} diff --git a/build/types/src/gracenote.d.ts b/build/types/src/gracenote.d.ts new file mode 100644 index 0000000000..55c1f26593 --- /dev/null +++ b/build/types/src/gracenote.d.ts @@ -0,0 +1,19 @@ +import { StaveNote, StaveNoteStruct } from './stavenote'; +export interface GraceNoteStruct extends StaveNoteStruct { + slash?: boolean; +} +export declare class GraceNote extends StaveNote { + static get CATEGORY(): string; + static get LEDGER_LINE_OFFSET(): number; + static get SCALE(): number; + protected slash: boolean; + protected slur: boolean; + constructor(noteStruct: GraceNoteStruct); + getStemExtension(): number; + getStaveNoteScale(): number; + draw(): void; + calcBeamedNotesSlashBBox(slashStemOffset: number, slashBeamOffset: number, protrusions: { + beam: number; + stem: number; + }): Record; +} diff --git a/build/types/src/gracenotegroup.d.ts b/build/types/src/gracenotegroup.d.ts new file mode 100644 index 0000000000..9b807374d1 --- /dev/null +++ b/build/types/src/gracenotegroup.d.ts @@ -0,0 +1,33 @@ +import { Beam } from './beam'; +import { Formatter } from './formatter'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +import { StaveTie } from './stavetie'; +import { StemmableNote } from './stemmablenote'; +import { TabTie } from './tabtie'; +import { Voice } from './voice'; +/** GraceNoteGroup is used to format and render grace notes. */ +export declare class GraceNoteGroup extends Modifier { + static DEBUG: boolean; + static get CATEGORY(): string; + protected readonly voice: Voice; + protected readonly grace_notes: StemmableNote[]; + protected readonly show_slur?: boolean; + protected preFormatted: boolean; + protected formatter?: Formatter; + render_options: { + slur_y_shift: number; + }; + protected slur?: StaveTie | TabTie; + protected beams: Beam[]; + /** Arranges groups inside a `ModifierContext`. */ + static format(gracenote_groups: GraceNoteGroup[], state: ModifierContextState): boolean; + constructor(grace_notes: StemmableNote[], show_slur?: boolean); + preFormat(): void; + beamNotes(grace_notes?: StemmableNote[]): this; + setWidth(width: number): this; + getWidth(): number; + getGraceNotes(): Note[]; + draw(): void; +} diff --git a/build/types/src/gracetabnote.d.ts b/build/types/src/gracetabnote.d.ts new file mode 100644 index 0000000000..fe6bcf3819 --- /dev/null +++ b/build/types/src/gracetabnote.d.ts @@ -0,0 +1,5 @@ +import { TabNote, TabNoteStruct } from './tabnote'; +export declare class GraceTabNote extends TabNote { + static get CATEGORY(): string; + constructor(noteStruct: TabNoteStruct); +} diff --git a/build/types/src/index.d.ts b/build/types/src/index.d.ts new file mode 100644 index 0000000000..dfefbc7915 --- /dev/null +++ b/build/types/src/index.d.ts @@ -0,0 +1,89 @@ +export * from './accidental'; +export * from './annotation'; +export * from './articulation'; +export * from './barnote'; +export * from './beam'; +export * from './bend'; +export * from './boundingbox'; +export * from './boundingboxcomputation'; +export * from './canvascontext'; +export * from './chordsymbol'; +export * from './clef'; +export * from './clefnote'; +export * from './crescendo'; +export * from './curve'; +export * from './dot'; +export * from './easyscore'; +export * from './element'; +export * from './factory'; +export * from './flow'; +export * from './font'; +export * from './formatter'; +export * from './fraction'; +export * from './frethandfinger'; +export * from './ghostnote'; +export * from './glyph'; +export * from './glyphnote'; +export * from './gracenote'; +export * from './gracenotegroup'; +export * from './gracetabnote'; +export * from './keymanager'; +export * from './keysignature'; +export * from './keysignote'; +export * from './modifier'; +export * from './modifiercontext'; +export * from './multimeasurerest'; +export * from './music'; +export * from './note'; +export * from './notehead'; +export * from './notesubgroup'; +export * from './ornament'; +export * from './parenthesis'; +export * from './parser'; +export * from './pedalmarking'; +export * from './registry'; +export * from './rendercontext'; +export * from './renderer'; +export * from './repeatnote'; +export * from './stave'; +export * from './stavebarline'; +export * from './staveconnector'; +export * from './stavehairpin'; +export * from './staveline'; +export * from './stavemodifier'; +export * from './stavenote'; +export * from './staverepetition'; +export * from './stavesection'; +export * from './stavetempo'; +export * from './stavetext'; +export * from './stavetie'; +export * from './stavevolta'; +export * from './stem'; +export * from './stemmablenote'; +export * from './stringnumber'; +export * from './strokes'; +export * from './svgcontext'; +export * from './system'; +export * from './tabnote'; +export * from './tabslide'; +export * from './tabstave'; +export * from './tabtie'; +export * from './textbracket'; +export * from './textdynamics'; +export * from './textformatter'; +export * from './textnote'; +export * from './tickable'; +export * from './tickcontext'; +export * from './timesigglyph'; +export * from './timesignature'; +export * from './timesignote'; +export * from './tremolo'; +export * from './tuning'; +export * from './tuplet'; +export * from './typeguard'; +export * from './util'; +export * from './vex'; +export * from './vibrato'; +export * from './vibratobracket'; +export * from './voice'; +export * from './web'; diff --git a/build/types/src/keymanager.d.ts b/build/types/src/keymanager.d.ts new file mode 100644 index 0000000000..dfa97e269f --- /dev/null +++ b/build/types/src/keymanager.d.ts @@ -0,0 +1,25 @@ +import { KeyParts, Music } from './music'; +export declare class KeyManager { + protected music: Music; + protected keyParts: KeyParts; + protected keyString: string; + protected key: string; + protected scale: number[]; + protected scaleMap: Record; + protected scaleMapByValue: Record; + protected originalScaleMapByValue: Record; + constructor(key: string); + setKey(key: string): this; + getKey(): string; + reset(): this; + getAccidental(key: string): { + note: string; + accidental?: string; + change?: boolean; + }; + selectNote(note: string): { + note: string; + accidental?: string; + change: boolean; + }; +} diff --git a/build/types/src/keysignature.d.ts b/build/types/src/keysignature.d.ts new file mode 100644 index 0000000000..fe68d97320 --- /dev/null +++ b/build/types/src/keysignature.d.ts @@ -0,0 +1,54 @@ +import { Glyph } from './glyph'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export declare class KeySignature extends StaveModifier { + static get CATEGORY(): string; + protected glyphFontScale: number; + protected glyphs: Glyph[]; + protected xPositions: number[]; + protected paddingForced: boolean; + protected formatted?: boolean; + protected cancelKeySpec?: string; + protected accList: { + type: string; + line: number; + }[]; + protected keySpec?: string; + protected alterKeySpec?: string[]; + static accidentalSpacing: Record; + constructor(keySpec: string, cancelKeySpec?: string, alterKeySpec?: string[]); + convertToGlyph(acc: { + type: string; + line: number; + }, nextAcc: { + type: string; + line: number; + }): void; + cancelKey(spec: string): this; + convertToCancelAccList(spec: string): { + type: string; + accList: { + type: string; + line: number; + }[]; + } | undefined; + addToStave(stave: Stave): this; + convertAccLines(clef: string, type?: string, accList?: { + type: string; + line: number; + }[]): void; + getPadding(index: number): number; + getWidth(): number; + setKeySig(keySpec: string, cancelKeySpec?: string, alterKeySpec?: string[]): this; + alterKey(alterKeySpec: string[]): this; + convertToAlterAccList(alterKeySpec: string[]): void; + format(): void; + /** + * Return the Glyph objects making up this KeySignature. + */ + getGlyphs(): Glyph[]; + draw(): void; +} diff --git a/build/types/src/keysignote.d.ts b/build/types/src/keysignote.d.ts new file mode 100644 index 0000000000..56032e4c37 --- /dev/null +++ b/build/types/src/keysignote.d.ts @@ -0,0 +1,11 @@ +import { KeySignature } from './keysignature'; +import { ModifierContext } from './modifiercontext'; +import { Note } from './note'; +export declare class KeySigNote extends Note { + static get CATEGORY(): string; + protected keySignature: KeySignature; + constructor(keySpec: string, cancelKeySpec?: string, alterKeySpec?: string[]); + addToModifierContext(mc: ModifierContext): this; + preFormat(): this; + draw(): void; +} diff --git a/build/types/src/modifier.d.ts b/build/types/src/modifier.d.ts new file mode 100644 index 0000000000..73758e277a --- /dev/null +++ b/build/types/src/modifier.d.ts @@ -0,0 +1,97 @@ +import { Element } from './element'; +import { ModifierContext } from './modifiercontext'; +import { Note } from './note'; +export declare enum ModifierPosition { + CENTER = 0, + LEFT = 1, + RIGHT = 2, + ABOVE = 3, + BELOW = 4 +} +/** + * `Modifier` is an abstract interface for notational elements that modify + * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc. + * + * For a `Modifier` instance to be positioned correctly, it must be part of + * a `ModifierContext`. All modifiers in the same context are rendered relative to + * one another. + * + * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also, + * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same + * `ModifierContext`. This ensures that multiple voices don't trample all over each other. + */ +export declare class Modifier extends Element { + /** + * Modifiers category string. Every modifier has a different category. + * The `ModifierContext` uses this to determine the type and order of the modifiers. + */ + static get CATEGORY(): string; + /** Modifiers can be positioned almost anywhere, relative to a note. */ + static get Position(): typeof ModifierPosition; + static get PositionString(): Record; + protected note?: Note; + protected index?: number; + protected width: number; + protected text_line: number; + protected position: ModifierPosition; + protected y_shift: number; + protected x_shift: number; + private spacingFromNextModifier; + private modifierContext?; + constructor(); + /** Called when position changes. */ + protected reset(): void; + /** Get modifier widths. */ + getWidth(): number; + /** Set modifier widths. */ + setWidth(width: number): this; + /** Get attached note (`StaveNote`, `TabNote`, etc.) */ + getNote(): Note; + /** + * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.). + * Also verifies that the index is valid. + */ + checkAttachedNote(): Note; + /** + * Set attached note. + * @param note (`StaveNote`, `TabNote`, etc.) + */ + setNote(note: Note): this; + /** Get note index, which is a specific note in a chord. */ + getIndex(): number | undefined; + /** Check and get note index, which is a specific note in a chord. */ + checkIndex(): number; + /** Set note index, which is a specific note in a chord. */ + setIndex(index: number): this; + /** Get `ModifierContext`. */ + getModifierContext(): ModifierContext | undefined; + /** Check and get `ModifierContext`. */ + checkModifierContext(): ModifierContext; + /** Every modifier must be part of a `ModifierContext`. */ + setModifierContext(c: ModifierContext): this; + /** Get position. */ + getPosition(): number; + /** + * Set position. + * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW + */ + setPosition(position: string | number): this; + /** Set the `text_line` for the modifier. */ + setTextLine(line: number): this; + /** Shift modifier down `y` pixels. Negative values shift up. */ + setYShift(y: number): this; + /** Set spacing from next modifier. */ + setSpacingFromNextModifier(x: number): void; + /** Get spacing from next modifier. */ + getSpacingFromNextModifier(): number; + /** + * Shift modifier `x` pixels in the direction of the modifier. Negative values + * shift reverse. + */ + setXShift(x: number): this; + /** Get shift modifier `x` */ + getXShift(): number; + /** Render the modifier onto the canvas. */ + draw(): void; + alignSubNotesWithNote(subNotes: Note[], note: Note): void; +} diff --git a/build/types/src/modifiercontext.d.ts b/build/types/src/modifiercontext.d.ts new file mode 100644 index 0000000000..9456dbdf05 --- /dev/null +++ b/build/types/src/modifiercontext.d.ts @@ -0,0 +1,48 @@ +import { Modifier } from './modifier'; +import { StaveNote } from './stavenote'; +import { TabNote } from './tabnote'; +import { Tickable } from './tickable'; +export interface ModifierContextState { + right_shift: number; + left_shift: number; + text_line: number; + top_text_line: number; +} +export interface ModifierContextMetrics { + width: number; + spacing: number; +} +export type ModifierContextMember = Tickable | Modifier | StaveNote | TabNote; +export declare class ModifierContext { + static DEBUG: boolean; + protected state: ModifierContextState; + protected members: Record; + protected preFormatted: boolean; + protected postFormatted: boolean; + protected formatted: boolean; + protected width: number; + protected spacing: number; + addModifier(member: ModifierContextMember): this; + /** + * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote. + * Here we add a new member to this.members, and create a new array if needed. + * @param member + * @returns this + */ + addMember(member: ModifierContextMember): this; + /** + * @deprecated + */ + getModifiers(category: string): ModifierContextMember[]; + getMembers(category: string): ModifierContextMember[]; + /** + * Get the width of the entire + */ + getWidth(): number; + getLeftShift(): number; + getRightShift(): number; + getState(): ModifierContextState; + getMetrics(): ModifierContextMetrics; + preFormat(): void; + postFormat(): void; +} diff --git a/build/types/src/multimeasurerest.d.ts b/build/types/src/multimeasurerest.d.ts new file mode 100644 index 0000000000..f63dee846d --- /dev/null +++ b/build/types/src/multimeasurerest.d.ts @@ -0,0 +1,61 @@ +import { Element } from './element'; +import { RenderContext } from './rendercontext'; +import { Stave } from './stave'; +export interface MultimeasureRestRenderOptions { + /** Extracted by Factory.MultiMeasureRest() and passed to the MultiMeasureRest constructor. */ + number_of_measures: number; + /** Use rest symbols. Defaults to `false`, which renders a thick horizontal line with serifs at both ends. */ + use_symbols?: boolean; + /** Horizontal spacing between rest symbol glyphs (if `use_symbols` is `true`).*/ + symbol_spacing?: number; + /** Show the number of measures at the top. Defaults to `true`. */ + show_number?: boolean; + /** Vertical position of the "number of measures" text (measured in stave lines). Defaults to -0.5, which is above the stave. 6.5 is below the stave. */ + number_line?: number; + /** Font size of the "number of measures" text. */ + number_glyph_point?: number; + /** Left padding from `stave.getX()`. */ + padding_left?: number; + /** Right padding from `stave.getX() + stave.getWidth()` */ + padding_right?: number; + /** Vertical position of the rest line or symbols, expressed as stave lines. Default: 2. The top stave line is 1, and the bottom stave line is 5. */ + line?: number; + /** Defaults to the number of vertical pixels between stave lines. Used for serif height or 2-bar / 4-bar symbol height. */ + spacing_between_lines_px?: number; + /** Size of the semibreve (1-bar) rest symbol. Other symbols are scaled accordingly. */ + semibreve_rest_glyph_scale?: number; + /** Thickness of the rest line. Used when `use_symbols` is false. Defaults to half the space between stave lines. */ + line_thickness?: number; + /** Thickness of the rest line's serif. Used when `use_symbols` is false. */ + serif_thickness?: number; +} +export declare class MultiMeasureRest extends Element { + static get CATEGORY(): string; + render_options: Required; + protected xs: { + left: number; + right: number; + }; + protected number_of_measures: number; + protected stave?: Stave; + private hasPaddingLeft; + private hasPaddingRight; + private hasLineThickness; + private hasSymbolSpacing; + /** + * + * @param number_of_measures Number of measures. + * @param options The options object. + */ + constructor(number_of_measures: number, options: MultimeasureRestRenderOptions); + getXs(): { + left: number; + right: number; + }; + setStave(stave: Stave): this; + getStave(): Stave | undefined; + checkStave(): Stave; + drawLine(stave: Stave, ctx: RenderContext, left: number, right: number, spacingBetweenLines: number): void; + drawSymbols(stave: Stave, ctx: RenderContext, left: number, right: number, spacingBetweenLines: number): void; + draw(): void; +} diff --git a/build/types/src/music.d.ts b/build/types/src/music.d.ts new file mode 100644 index 0000000000..a927c39ee6 --- /dev/null +++ b/build/types/src/music.d.ts @@ -0,0 +1,91 @@ +export interface NoteAccidental { + note: number; + accidental: AccidentalValue; +} +export interface NoteParts { + root: string; + accidental: string; +} +export interface KeyParts { + root: string; + accidental: string; + type: string; +} +export type KeyValue = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11; +export type RootValue = 0 | 1 | 2 | 3 | 4 | 5 | 6; +export type AccidentalValue = -2 | -1 | 0 | 1 | 2; +export interface Key { + root_index: RootValue; + int_val: KeyValue; +} +/** Music implements some standard music theory routines. */ +export declare class Music { + /** Number of an canonical notes (12). */ + static get NUM_TONES(): number; + /** Names of root notes ('c', 'd',...) */ + static get roots(): string[]; + /** Values of the root notes.*/ + static get root_values(): KeyValue[]; + /** Indices of the root notes.*/ + static get root_indices(): Record; + /** Names of canonical notes ('c', 'c#', 'd',...). */ + static get canonical_notes(): string[]; + /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */ + static get diatonic_intervals(): string[]; + /** NoteAccidental associated to diatonic intervals. */ + static get diatonic_accidentals(): Record; + /** Semitones shift associated to intervals .*/ + static get intervals(): Record; + /** Semitones shifts associated with scales. */ + static get scales(): Record; + /** Scales associated with m (minor) and M (major). */ + static get scaleTypes(): Record; + /** Accidentals abbreviations. */ + static get accidentals(): string[]; + /** Note values. */ + static get noteValues(): Record; + protected isValidNoteValue(note: number): boolean; + protected isValidIntervalValue(interval: number): boolean; + /** Return root and accidental associated to a note. */ + getNoteParts(noteString: string): NoteParts; + /** Return root, accidental and type associated to a key. */ + getKeyParts(keyString: string): KeyParts; + /** Note value associated to a note name. */ + getNoteValue(noteString: string): number; + /** Interval value associated to an interval name. */ + getIntervalValue(intervalString: string): number; + /** Canonical note name associated to a value. */ + getCanonicalNoteName(noteValue: number): string; + /** Interval name associated to a value. */ + getCanonicalIntervalName(intervalValue: number): string; + /** + * Given a note, interval, and interval direction, produce the relative note. + */ + getRelativeNoteValue(noteValue: number, intervalValue: number, direction?: number): number; + /** + * Given a root and note value, produce the relative note name. + */ + getRelativeNoteName(root: string, noteValue: number): string; + /** + * Return scale tones, given intervals. Each successive interval is + * relative to the previous one, e.g., Major Scale: + * + * TTSTTTS = [2,2,1,2,2,2,1] + * + * When used with key = 0, returns C scale (which is isomorphic to + * interval list). + */ + getScaleTones(key: number, intervals: number[]): number[]; + /** + * Return the interval of a note, given a diatonic scale. + * e.g., given the scale C, and the note E, returns M3. + */ + getIntervalBetween(note1: number, note2: number, direction?: number): number; + /** + * Create a scale map that represents the pitch state for a + * `keySignature`. For example, passing a `G` to `keySignature` would + * return a scale map with every note naturalized except for `F` which + * has an `F#` state. + */ + createScaleMap(keySignature: string): Record; +} diff --git a/build/types/src/note.d.ts b/build/types/src/note.d.ts new file mode 100644 index 0000000000..bd2483b21c --- /dev/null +++ b/build/types/src/note.d.ts @@ -0,0 +1,238 @@ +import { Beam } from './beam'; +import { Fraction } from './fraction'; +import { GlyphProps } from './glyph'; +import { Modifier } from './modifier'; +import { RenderContext } from './rendercontext'; +import { Stave } from './stave'; +import { Stroke } from './strokes'; +import { Tickable } from './tickable'; +import { TickContext } from './tickcontext'; +import { Voice } from './voice'; +export interface KeyProps { + stem_down_x_offset?: number; + stem_up_x_offset?: number; + key: string; + octave: number; + line: number; + int_value?: number; + accidental?: string; + code?: string; + stroke: number; + shift_right?: number; + displaced: boolean; +} +export interface NoteMetrics { + /** The total width of the note (including modifiers). */ + width: number; + glyphWidth?: number; + /** The width of the note head only. */ + notePx: number; + /** Start `X` for left modifiers. */ + modLeftPx: number; + /** Start `X` for right modifiers. */ + modRightPx: number; + /** Extra space on left of note. */ + leftDisplacedHeadPx: number; + glyphPx: number; + /** Extra space on right of note. */ + rightDisplacedHeadPx: number; +} +export interface NoteDuration { + duration: string; + dots: number; + type: string; +} +export interface ParsedNote { + duration: string; + type: string; + customTypes: string[]; + dots: number; + ticks: number; +} +export interface NoteStruct { + /** Array of pitches, e.g: `['c/4', 'e/4', 'g/4']` */ + keys?: string[]; + /** The time length (e.g., `q` for quarter, `h` for half, `8` for eighth etc.). */ + duration: string; + line?: number; + /** The number of dots, which affects the duration. */ + dots?: number; + /** The note type (e.g., `r` for rest, `s` for slash notes, etc.). */ + type?: string; + align_center?: boolean; + duration_override?: Fraction; +} +/** + * Note implements an abstract interface for notes and chords that + * are rendered on a stave. Notes have some common properties: All of them + * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.) + * + * Some notes have stems, heads, dots, etc. Most notational elements that + * surround a note are called *modifiers*, and every note has an associated + * array of them. All notes also have a rendering context and belong to a stave. + */ +export declare abstract class Note extends Tickable { + static get CATEGORY(): string; + /** Debug helper. Displays various note metrics for the given note. */ + static plotMetrics(ctx: RenderContext, note: Tickable, yPos: number): void; + protected static parseDuration(durationString?: string): NoteDuration | undefined; + protected static parseNoteStruct(noteStruct: NoteStruct): ParsedNote | undefined; + glyphProps: GlyphProps; + keys: string[]; + keyProps: KeyProps[]; + protected stave?: Stave; + render_options: { + draw_stem_through_stave?: boolean; + draw?: boolean; + draw_dots?: boolean; + draw_stem?: boolean; + y_shift: number; + extend_left?: number; + extend_right?: number; + glyph_font_scale: number; + annotation_spacing: number; + glyph_font_size?: number; + scale: number; + font: string; + stroke_px: number; + }; + protected duration: string; + protected leftDisplacedHeadPx: number; + protected rightDisplacedHeadPx: number; + protected noteType: string; + protected customGlyphs: GlyphProps[]; + protected ys: number[]; + protected customTypes: string[]; + protected playNote?: Note; + protected beam?: Beam; + /** + * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for + * positioning and layout. + * + * @param noteStruct To create a new note you need to provide a `noteStruct`. + */ + constructor(noteStruct: NoteStruct); + /** + * Get the play note, which is arbitrary data that can be used by an + * audio player. + */ + getPlayNote(): Note | undefined; + /** + * Set the play note, which is arbitrary data that can be used by an + * audio player. + */ + setPlayNote(note: Note): this; + /** + * @returns true if this note is a type of rest. + * + * Rests don't have pitches, but take up space in the score. + * Subclasses should override this default implementation. + */ + isRest(): boolean; + /** Add stroke. */ + addStroke(index: number, stroke: Stroke): this; + /** Get the target stave. */ + getStave(): Stave | undefined; + /** Check and get the target stave. */ + checkStave(): Stave; + /** Set the target stave. */ + setStave(stave: Stave): this; + /** Get spacing to the left of the notes. */ + getLeftDisplacedHeadPx(): number; + /** Get spacing to the right of the notes. */ + getRightDisplacedHeadPx(): number; + /** Set spacing to the left of the notes. */ + setLeftDisplacedHeadPx(x: number): this; + /** Set spacing to the right of the notes. */ + setRightDisplacedHeadPx(x: number): this; + /** True if this note has no duration (e.g., bar notes, spacers, etc.). */ + shouldIgnoreTicks(): boolean; + /** Get the stave line number for the note. */ + getLineNumber(isTopNote?: boolean): number; + /** Get the stave line number for rest. */ + getLineForRest(): number; + /** + * @deprecated Use `getGlyphProps()` instead. + */ + getGlyph(): any; + /** Get the glyph associated with this note. */ + getGlyphProps(): GlyphProps; + /** Get the glyph width. */ + getGlyphWidth(): number; + /** + * Set Y positions for this note. Each Y value is associated with + * an individual pitch/key within the note/chord. + */ + setYs(ys: number[]): this; + /** + * Get Y positions for this note. Each Y value is associated with + * an individual pitch/key within the note/chord. + */ + getYs(): number[]; + /** + * Get the Y position of the space above the stave onto which text can + * be rendered. + */ + getYForTopText(text_line: number): number; + /** Return the voice that this note belongs in. */ + getVoice(): Voice; + /** Attach this note to `voice`. */ + setVoice(voice: Voice): this; + /** Get the `TickContext` for this note. */ + getTickContext(): TickContext; + /** Set the `TickContext` for this note. */ + setTickContext(tc: TickContext): this; + /** Accessor to duration. */ + getDuration(): string; + /** Accessor to isDotted. */ + isDotted(): boolean; + /** Accessor to hasStem. */ + hasStem(): boolean; + /** Accessor to note type. */ + getNoteType(): string; + /** Get the beam. */ + getBeam(): Beam | undefined; + /** Check and get the beam. */ + checkBeam(): Beam; + /** Check it has a beam. */ + hasBeam(): boolean; + /** Set the beam. */ + setBeam(beam: Beam): this; + /** + * Attach a modifier to this note. + * @param modifier the Modifier to add. + * @param index of the key to modify. + * @returns this + */ + addModifier(modifier: Modifier, index?: number): this; + /** Get all modifiers of a specific type in `this.modifiers`. */ + getModifiersByType(type: string): Modifier[]; + /** Get the coordinates for where modifiers begin. */ + getModifierStartXY(position?: number, index?: number, options?: any): { + x: number; + y: number; + }; + getRightParenthesisPx(index: number): number; + getLeftParenthesisPx(index: number): number; + getFirstDotPx(): number; + /** Get the metrics for this note. */ + getMetrics(): NoteMetrics; + /** + * Get the absolute `X` position of this note's tick context. This + * excludes x_shift, so you'll need to factor it in if you're + * looking for the post-formatted x-position. + */ + getAbsoluteX(): number; + /** Get point for notes. */ + static getPoint(size?: string): number; + /** Get the direction of the stem. */ + getStemDirection(): number; + /** Get the top and bottom `y` values of the stem. */ + getStemExtents(): Record; + /** Get the `x` coordinate to the right of the note. */ + getTieRightX(): number; + /** Get the `x` coordinate to the left of the note. */ + getTieLeftX(): number; + getKeys(): string[]; + getKeyProps(): KeyProps[]; +} diff --git a/build/types/src/notehead.d.ts b/build/types/src/notehead.d.ts new file mode 100644 index 0000000000..ca85202677 --- /dev/null +++ b/build/types/src/notehead.d.ts @@ -0,0 +1,71 @@ +import { BoundingBox } from './boundingbox'; +import { ElementStyle } from './element'; +import { Note, NoteStruct } from './note'; +import { Stave } from './stave'; +export interface NoteHeadMetrics { + minPadding?: number; + displacedShiftX?: number; +} +export interface NoteHeadStruct extends NoteStruct { + line?: number; + glyph_font_scale?: number; + slashed?: boolean; + style?: ElementStyle; + stem_down_x_offset?: number; + stem_up_x_offset?: number; + custom_glyph_code?: string; + x_shift?: number; + stem_direction?: number; + displaced?: boolean; + note_type?: string; + x?: number; + y?: number; + index?: number; +} +/** + * `NoteHeads` are typically not manipulated + * directly, but used internally in `StaveNote`. + * + * See `tests/notehead_tests.ts` for usage examples. + */ +export declare class NoteHead extends Note { + /** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + glyph_code: string; + protected custom_glyph: boolean; + protected stem_up_x_offset: number; + protected stem_down_x_offset: number; + protected displaced: boolean; + protected stem_direction: number; + protected x: number; + protected y: number; + protected line: number; + protected index?: number; + protected slashed: boolean; + constructor(noteStruct: NoteHeadStruct); + /** Get the width of the notehead. */ + getWidth(): number; + /** Determine if the notehead is displaced. */ + isDisplaced(): boolean; + /** Set the X coordinate. */ + setX(x: number): this; + /** Get the Y coordinate. */ + getY(): number; + /** Set the Y coordinate. */ + setY(y: number): this; + /** Get the stave line the notehead is placed on. */ + getLine(): number; + /** Set the stave line the notehead is placed on. */ + setLine(line: number): this; + /** Get the canvas `x` coordinate position of the notehead. */ + getAbsoluteX(): number; + /** Get the `BoundingBox` for the `NoteHead`. */ + getBoundingBox(): BoundingBox; + /** Set notehead to a provided `stave`. */ + setStave(stave: Stave): this; + /** Pre-render formatting. */ + preFormat(): this; + /** Draw the notehead. */ + draw(): void; +} diff --git a/build/types/src/notesubgroup.d.ts b/build/types/src/notesubgroup.d.ts new file mode 100644 index 0000000000..4bc695ed2f --- /dev/null +++ b/build/types/src/notesubgroup.d.ts @@ -0,0 +1,18 @@ +import { Formatter } from './formatter'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +import { Voice } from './voice'; +export declare class NoteSubGroup extends Modifier { + static get CATEGORY(): string; + static format(groups: NoteSubGroup[], state: ModifierContextState): boolean; + protected subNotes: Note[]; + protected preFormatted: boolean; + protected formatter: Formatter; + protected voice: Voice; + constructor(subNotes: Note[]); + preFormat(): void; + setWidth(width: number): this; + getWidth(): number; + draw(): void; +} diff --git a/build/types/src/ornament.d.ts b/build/types/src/ornament.d.ts new file mode 100644 index 0000000000..cf7d7b3301 --- /dev/null +++ b/build/types/src/ornament.d.ts @@ -0,0 +1,83 @@ +import { Glyph } from './glyph'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +export interface OrnamentMetrics { + xOffset: number; + yOffset: number; + stemUpYOffset: number; + reportedWidth: number; +} +/** + * Ornament implements ornaments as modifiers that can be + * attached to notes. The complete list of ornaments is available in + * `tables.ts` under `Vex.Flow.ornamentCodes`. + * + * See `tests/ornament_tests.ts` for usage examples. + */ +export declare class Ornament extends Modifier { + /** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */ + static DEBUG: boolean; + /** Ornaments category string. */ + static get CATEGORY(): string; + static get minPadding(): number; + protected ornament: { + code: string; + }; + protected stemUpYOffset: number; + protected ornamentAlignWithNoteHead: string[] | boolean; + protected type: string; + protected delayed: boolean; + protected reportedWidth: number; + protected adjustForStemDirection: boolean; + render_options: { + accidentalUpperPadding: number; + accidentalLowerPadding: number; + font_scale: number; + }; + protected glyph: Glyph; + protected accidentalUpper?: Glyph; + protected accidentalLower?: Glyph; + protected delayXShift?: number; + /** Arrange ornaments inside `ModifierContext` */ + static format(ornaments: Ornament[], state: ModifierContextState): boolean; + /** + * ornamentNoteTransition means the jazz ornament represents an effect from one note to another, + * these are generally on the top of the staff. + */ + static get ornamentNoteTransition(): string[]; + /** + * ornamentAttack indicates something that happens in the attach, placed before the note and + * any accidentals + */ + static get ornamentAttack(): string[]; + /** + * The ornament is aligned based on the note head, but without regard to whether the + * stem goes up or down. + */ + static get ornamentAlignWithNoteHead(): string[]; + /** + * An ornament that happens on the release of the note, generally placed after the + * note and overlapping the next beat/measure.. + */ + static get ornamentRelease(): string[]; + /** ornamentArticulation goes above/below the note based on space availablity */ + static get ornamentArticulation(): string[]; + /** + * Legacy ornaments have hard-coded metrics. If additional ornament types are + * added, get their metrics here. + */ + getMetrics(): OrnamentMetrics; + /** + * Create a new ornament of type `type`, which is an entry in + * `Vex.Flow.ornamentCodes` in `tables.ts`. + */ + constructor(type: string); + /** Set whether the ornament is to be delayed. */ + setDelayed(delayed: boolean): this; + /** Set the upper accidental for the ornament. */ + setUpperAccidental(accid: string): this; + /** Set the lower accidental for the ornament. */ + setLowerAccidental(accid: string): this; + /** Render ornament in position next to note. */ + draw(): void; +} diff --git a/build/types/src/parenthesis.d.ts b/build/types/src/parenthesis.d.ts new file mode 100644 index 0000000000..5189a3edda --- /dev/null +++ b/build/types/src/parenthesis.d.ts @@ -0,0 +1,22 @@ +import { Modifier, ModifierPosition } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +/** Parenthesis implements parenthesis modifiers for notes. */ +export declare class Parenthesis extends Modifier { + static get CATEGORY(): string; + protected point: number; + /** Add parentheses to the notes. */ + static buildAndAttach(notes: Note[]): void; + /** Arrange parentheses inside a ModifierContext. */ + static format(parentheses: Parenthesis[], state: ModifierContextState): boolean; + /** + * Constructor + * + * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT + */ + constructor(position: ModifierPosition); + /** Set the associated note. */ + setNote(note: Note): this; + /** Render the parenthesis. */ + draw(): void; +} diff --git a/build/types/src/parser.d.ts b/build/types/src/parser.d.ts new file mode 100644 index 0000000000..bdf609f878 --- /dev/null +++ b/build/types/src/parser.d.ts @@ -0,0 +1,45 @@ +export type Match = string | Match[] | null; +export type RuleFunction = () => Rule; +export type TriggerFunction = (state?: { + matches: Match[]; +}) => void; +export interface Rule { + token?: string; + noSpace?: boolean; + expect?: RuleFunction[]; + zeroOrMore?: boolean; + oneOrMore?: boolean; + maybe?: boolean; + or?: boolean; + run?: TriggerFunction; +} +export interface Result { + success: boolean; + pos?: number; + incrementPos?: number; + matchedString?: string; + matches?: Match[]; + numMatches?: number; + results?: GroupedResults; + errorPos?: number; +} +export type GroupedResults = (Result | Result[])[]; +export interface Grammar { + begin(): RuleFunction; +} +export declare class Parser { + static DEBUG: boolean; + protected grammar: Grammar; + protected line: string; + protected pos: number; + protected errorPos: number; + constructor(grammar: Grammar); + parse(line: string): Result; + matchFail(returnPos: number): void; + matchSuccess(): void; + matchToken(token: string, noSpace?: boolean): Result; + expectOne(rule: Rule, maybe?: boolean): Result; + expectOneOrMore(rule: Rule, maybe?: boolean): Result; + expectZeroOrMore(rule: Rule): Result; + expect(ruleFunc: RuleFunction): Result; +} diff --git a/build/types/src/pedalmarking.d.ts b/build/types/src/pedalmarking.d.ts new file mode 100644 index 0000000000..a9f60173f3 --- /dev/null +++ b/build/types/src/pedalmarking.d.ts @@ -0,0 +1,67 @@ +import { Element } from './element'; +import { FontInfo } from './font'; +import { StaveNote } from './stavenote'; +/** + * PedalMarking implements different types of pedal markings. These notation + * elements indicate to the performer when to depress and release the a pedal. + * + * In order to create "Sostenuto", and "una corda" markings, you must set + * custom text for the release/depress pedal markings. + */ +export declare class PedalMarking extends Element { + /** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + static TEXT_FONT: Required; + protected line: number; + protected type: number; + protected custom_depress_text: string; + protected custom_release_text: string; + render_options: { + color: string; + bracket_height: number; + text_margin_right: number; + bracket_line_width: number; + }; + protected notes: StaveNote[]; + /** Glyph data */ + static readonly GLYPHS: Record; + /** Pedal type as number. */ + static readonly type: { + TEXT: number; + BRACKET: number; + MIXED: number; + }; + /** Pedal type as string. */ + static readonly typeString: Record; + /** + * Create a sustain pedal marking. Returns the defaults PedalMarking. + * Which uses the traditional "Ped" and "*"" markings. + */ + static createSustain(notes: StaveNote[]): PedalMarking; + /** Create a sostenuto pedal marking */ + static createSostenuto(notes: StaveNote[]): PedalMarking; + /** Create an una corda pedal marking */ + static createUnaCorda(notes: StaveNote[]): PedalMarking; + constructor(notes: StaveNote[]); + /** Set pedal type. */ + setType(type: string | number): this; + /** + * Set custom text for the `depress`/`release` pedal markings. No text is + * set if the parameter is falsy. + */ + setCustomText(depress: string, release?: string): this; + /** Set the staff line to render the markings on. */ + setLine(line: number): this; + /** Draw the bracket based pedal markings. */ + drawBracketed(): void; + /** + * Draw the text based pedal markings. This defaults to the traditional + * "Ped" and "*"" symbols if no custom text has been provided. + */ + drawText(): void; + /** Render the pedal marking in position on the rendering context. */ + draw(): void; +} diff --git a/build/types/src/registry.d.ts b/build/types/src/registry.d.ts new file mode 100644 index 0000000000..6959b79f28 --- /dev/null +++ b/build/types/src/registry.d.ts @@ -0,0 +1,40 @@ +import { Element } from './element'; +declare class Index { + [key: string]: { + [key: string]: { + [key: string]: Element; + }; + }; + constructor(); +} +export interface RegistryUpdate { + id: string; + name: string; + value: string | undefined; + oldValue: string | undefined; +} +export declare class Registry { + private static defaultRegistry?; + static getDefaultRegistry(): Registry | undefined; + static enableDefaultRegistry(registry: Registry): void; + static disableDefaultRegistry(): void; + protected index: Index; + constructor(); + clear(): this; + setIndexValue(name: string, value: string, id: string, elem: Element): void; + updateIndex({ id, name, value, oldValue }: RegistryUpdate): void; + /** + * Register element `elem` with this registry. + * This adds the element to its index and watches it for attribute changes. + * @param elem + * @param id + * @returns this + */ + register(elem: Element, id?: string): this; + getElementById(id: string): Element | undefined; + getElementsByAttribute(attribute: string, value: string): Element[]; + getElementsByType(type: string): Element[]; + getElementsByClass(className: string): Element[]; + onUpdate(info: RegistryUpdate): this; +} +export {}; diff --git a/build/types/src/rendercontext.d.ts b/build/types/src/rendercontext.d.ts new file mode 100644 index 0000000000..e4bb0882ae --- /dev/null +++ b/build/types/src/rendercontext.d.ts @@ -0,0 +1,64 @@ +import { FontInfo } from './font'; +export interface TextMeasure { + x: number; + y: number; + width: number; + height: number; +} +export interface GroupAttributes { + pointerBBox: boolean; +} +export declare abstract class RenderContext { + static get CATEGORY(): string; + abstract clear(): void; + abstract setFillStyle(style: string): this; + abstract setBackgroundFillStyle(style: string): this; + abstract setStrokeStyle(style: string): this; + abstract setShadowColor(color: string): this; + abstract setShadowBlur(blur: number): this; + abstract setLineWidth(width: number): this; + abstract setLineCap(capType: CanvasLineCap): this; + abstract setLineDash(dashPattern: number[]): this; + abstract scale(x: number, y: number): this; + abstract rect(x: number, y: number, width: number, height: number): this; + abstract resize(width: number, height: number): this; + abstract fillRect(x: number, y: number, width: number, height: number): this; + abstract clearRect(x: number, y: number, width: number, height: number): this; + abstract beginPath(): this; + abstract moveTo(x: number, y: number): this; + abstract lineTo(x: number, y: number): this; + abstract bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this; + abstract quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this; + abstract arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean): this; + abstract fill(attributes?: any): this; + abstract stroke(): this; + abstract closePath(): this; + abstract fillText(text: string, x: number, y: number): this; + abstract save(): this; + abstract restore(): this; + abstract openGroup(cls?: string, id?: string, attrs?: GroupAttributes): any; + abstract closeGroup(): void; + abstract add(child: any): void; + abstract measureText(text: string): TextMeasure; + abstract set fillStyle(style: string | CanvasGradient | CanvasPattern); + abstract get fillStyle(): string | CanvasGradient | CanvasPattern; + abstract set strokeStyle(style: string | CanvasGradient | CanvasPattern); + abstract get strokeStyle(): string | CanvasGradient | CanvasPattern; + abstract setFont(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; + abstract getFont(): string; + set font(f: string); + get font(): string; + /** + * This is kept for backwards compatibility with 3.0.9. + * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand. + */ + setRawFont(f: string): this; +} +/** + * Draw a tiny dot marker on the specified context. A great debugging aid. + * @param ctx context + * @param x dot x coordinate + * @param y dot y coordinate + * @param color + */ +export declare function drawDot(ctx: RenderContext, x: number, y: number, color?: string): void; diff --git a/build/types/src/renderer.d.ts b/build/types/src/renderer.d.ts new file mode 100644 index 0000000000..de85d12e99 --- /dev/null +++ b/build/types/src/renderer.d.ts @@ -0,0 +1,35 @@ +import { RenderContext } from './rendercontext'; +export type ContextBuilder = typeof Renderer.getSVGContext | typeof Renderer.getCanvasContext; +export declare enum RendererBackends { + CANVAS = 1, + SVG = 2 +} +export declare enum RendererLineEndType { + NONE = 1, + UP = 2, + DOWN = 3 +} +/** + * Support Canvas & SVG rendering contexts. + */ +export declare class Renderer { + static Backends: typeof RendererBackends; + static LineEndType: typeof RendererLineEndType; + static lastContext?: RenderContext; + static buildContext(elementId: string | HTMLCanvasElement | HTMLDivElement, backend: number, width: number, height: number, background?: string): RenderContext; + static getCanvasContext(elementId: string, width: number, height: number, background?: string): RenderContext; + static getSVGContext(elementId: string, width: number, height: number, background?: string): RenderContext; + static drawDashedLine(context: RenderContext, fromX: number, fromY: number, toX: number, toY: number, dashPattern: number[]): void; + protected ctx: RenderContext; + /** + * @param canvasId can be: + * - a string element ID (of a canvas or div element) + * - a canvas element + * - a div element, which will contain the SVG output + * @param backend Renderer.Backends.CANVAS or Renderer.Backends.SVG + */ + constructor(context: RenderContext); + constructor(canvas: string | HTMLCanvasElement | HTMLDivElement, backend: number); + resize(width: number, height: number): this; + getContext(): RenderContext; +} diff --git a/build/types/src/repeatnote.d.ts b/build/types/src/repeatnote.d.ts new file mode 100644 index 0000000000..f3df63ab8c --- /dev/null +++ b/build/types/src/repeatnote.d.ts @@ -0,0 +1,6 @@ +import { GlyphNote, GlyphNoteOptions } from './glyphnote'; +import { NoteStruct } from './note'; +export declare class RepeatNote extends GlyphNote { + static get CATEGORY(): string; + constructor(type: string, noteStruct?: NoteStruct, options?: GlyphNoteOptions); +} diff --git a/build/types/src/stave.d.ts b/build/types/src/stave.d.ts new file mode 100644 index 0000000000..c4f0b477fb --- /dev/null +++ b/build/types/src/stave.d.ts @@ -0,0 +1,194 @@ +import { BoundingBox, Bounds } from './boundingbox'; +import { Element, ElementStyle } from './element'; +import { FontInfo } from './font'; +import { BarlineType } from './stavebarline'; +import { StaveModifier } from './stavemodifier'; +import { StaveTempoOptions } from './stavetempo'; +export interface StaveLineConfig { + visible?: boolean; +} +export interface StaveOptions { + bottom_text_position?: number; + line_config?: StaveLineConfig[]; + space_below_staff_ln?: number; + space_above_staff_ln?: number; + vertical_bar_width?: number; + fill_style?: string; + left_bar?: boolean; + right_bar?: boolean; + spacing_between_lines_px?: number; + top_text_position?: number; + num_lines?: number; +} +export declare class Stave extends Element { + static get CATEGORY(): string; + static TEXT_FONT: Required; + readonly options: Required; + protected start_x: number; + protected clef: string; + protected endClef?: string; + protected x: number; + protected y: number; + protected width: number; + protected height: number; + protected formatted: boolean; + protected end_x: number; + protected measure: number; + protected bounds: Bounds; + protected readonly modifiers: StaveModifier[]; + protected defaultLedgerLineStyle: ElementStyle; + static get defaultPadding(): number; + static get rightPadding(): number; + constructor(x: number, y: number, width: number, options?: StaveOptions); + /** Set default style for ledger lines. */ + setDefaultLedgerLineStyle(style: ElementStyle): void; + /** Get default style for ledger lines. */ + getDefaultLedgerLineStyle(): ElementStyle; + space(spacing: number): number; + resetLines(): void; + setNoteStartX(x: number): this; + getNoteStartX(): number; + getNoteEndX(): number; + getTieStartX(): number; + getTieEndX(): number; + getX(): number; + getNumLines(): number; + setNumLines(n: number): this; + setY(y: number): this; + getY(): number; + getTopLineTopY(): number; + getBottomLineBottomY(): number; + setX(x: number): this; + setWidth(width: number): this; + getWidth(): number; + getStyle(): ElementStyle; + /** + * Set the measure number of this Stave. + */ + setMeasure(measure: number): this; + /** + * Return the measure number of this Stave. + */ + getMeasure(): number; + /** + * Gets the pixels to shift from the beginning of the stave + * following the modifier at the provided index + * @param {Number} index The index from which to determine the shift + * @return {Number} The amount of pixels shifted + */ + getModifierXShift(index?: number): number; + /** Coda & Segno Symbol functions */ + setRepetitionType(type: number, yShift?: number): this; + setVoltaType(type: number, number_t: string, y: number): this; + setSection(section: string, y: number, xOffset?: number, fontSize?: number, drawRect?: boolean): this; + setTempo(tempo: StaveTempoOptions, y: number): this; + setText(text: string, position: number, options?: { + shift_x?: number; + shift_y?: number; + justification?: number; + }): this; + getHeight(): number; + getSpacingBetweenLines(): number; + getBoundingBox(): BoundingBox; + getBottomY(): number; + getBottomLineY(): number; + /** @returns the y for the *center* of a staff line */ + getYForLine(line: number): number; + getLineForY(y: number): number; + getYForTopText(line?: number): number; + getYForBottomText(line?: number): number; + getYForNote(line: number): number; + getYForGlyphs(): number; + addModifier(modifier: StaveModifier, position?: number): this; + addEndModifier(modifier: StaveModifier): this; + setBegBarType(type: number | BarlineType): this; + setEndBarType(type: number | BarlineType): this; + setClef(clefSpec: string, size?: string, annotation?: string, position?: number): this; + getClef(): string; + setEndClef(clefSpec: string, size?: string, annotation?: string): this; + getEndClef(): string | undefined; + setKeySignature(keySpec: string, cancelKeySpec?: string, position?: number): this; + setEndKeySignature(keySpec: string, cancelKeySpec?: string): this; + setTimeSignature(timeSpec: string, customPadding?: number, position?: number): this; + setEndTimeSignature(timeSpec: string, customPadding?: number): this; + /** + * Add a key signature to the stave. + * + * Example: + * `stave.addKeySignature('Db');` + * @param keySpec new key specification `[A-G][b|#]?` + * @param cancelKeySpec + * @param position + * @returns + */ + addKeySignature(keySpec: string, cancelKeySpec?: string, position?: number): this; + /** + * Add a clef to the stave. + * + * Example: + * + * stave.addClef('treble') + * @param clef clef (treble|bass|...) see {@link Clef.types} + * @param size + * @param annotation + * @param position + * @returns + */ + addClef(clef: string, size?: string, annotation?: string, position?: number): this; + addEndClef(clef: string, size?: string, annotation?: string): this; + /** + * Add a time signature to the stave + * + * Example: + * + * `stave.addTimeSignature('4/4');` + * @param timeSpec time signature specification `(C\||C|\d\/\d)` + * @param customPadding + * @param position + * @returns + */ + addTimeSignature(timeSpec: string, customPadding?: number, position?: number): this; + addEndTimeSignature(timeSpec: string, customPadding?: number): this; + addTrebleGlyph(): this; + /** + * @param position + * @param category + * @returns array of StaveModifiers that match the provided position and category. + */ + getModifiers(position?: number, category?: string): StaveModifier[]; + /** + * Use the modifier's `getCategory()` as a key for the `order` array. + * The retrieved value is used to sort modifiers from left to right (0 to to 3). + */ + sortByCategory(items: StaveModifier[], order: Record): void; + format(): void; + /** + * All drawing functions below need the context to be set. + */ + draw(): this; + getVerticalBarWidth(): number; + /** + * Get the current configuration for the Stave. + * @return {Array} An array of configuration objects. + */ + getConfigForLines(): StaveLineConfig[]; + /** + * Configure properties of the lines in the Stave + * @param line_number The index of the line to configure. + * @param line_config An configuration object for the specified line. + * @throws RuntimeError "StaveConfigError" When the specified line number is out of + * range of the number of lines specified in the constructor. + */ + setConfigForLine(line_number: number, line_config: StaveLineConfig): this; + /** + * Set the staff line configuration array for all of the lines at once. + * @param lines_configuration An array of line configuration objects. These objects + * are of the same format as the single one passed in to setLineConfiguration(). + * The caller can set null for any line config entry if it is desired that the default be used + * @throws RuntimeError "StaveConfigError" When the lines_configuration array does not have + * exactly the same number of elements as the num_lines configuration object set in + * the constructor. + */ + setConfigForLines(lines_configuration: StaveLineConfig[]): this; + static formatBegModifiers(staves: Stave[]): void; +} diff --git a/build/types/src/stavebarline.d.ts b/build/types/src/stavebarline.d.ts new file mode 100644 index 0000000000..67b51bb437 --- /dev/null +++ b/build/types/src/stavebarline.d.ts @@ -0,0 +1,28 @@ +import { Stave } from './stave'; +import { LayoutMetrics, StaveModifier } from './stavemodifier'; +export declare enum BarlineType { + SINGLE = 1, + DOUBLE = 2, + END = 3, + REPEAT_BEGIN = 4, + REPEAT_END = 5, + REPEAT_BOTH = 6, + NONE = 7 +} +export declare class Barline extends StaveModifier { + static get CATEGORY(): string; + protected widths: Record; + protected paddings: Record; + protected layoutMetricsMap: Record; + protected thickness: number; + protected type: BarlineType; + static get type(): typeof BarlineType; + static get typeString(): Record; + constructor(type: BarlineType | string); + getType(): number; + setType(type: string | number): this; + draw(stave: Stave): void; + drawVerticalBar(stave: Stave, x: number, double_bar?: boolean): void; + drawVerticalEndBar(stave: Stave, x: number): void; + drawRepeatBar(stave: Stave, x: number, begin: boolean): void; +} diff --git a/build/types/src/staveconnector.d.ts b/build/types/src/staveconnector.d.ts new file mode 100644 index 0000000000..883549a35e --- /dev/null +++ b/build/types/src/staveconnector.d.ts @@ -0,0 +1,65 @@ +import { Element } from './element'; +import { FontInfo } from './font'; +import { Stave } from './stave'; +/** + * see {@link StaveConnector.type} & {@link StaveConnector.typeString} + */ +export type StaveConnectorType = 'singleRight' | 'singleLeft' | 'single' | 'double' | 'brace' | 'bracket' | 'boldDoubleLeft' | 'boldDoubleRight' | 'thinDouble' | 'none' | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; +/** StaveConnector implements the connector lines between staves of a system. */ +export declare class StaveConnector extends Element { + static get CATEGORY(): string; + static TEXT_FONT: Required; + /** + * SINGLE_LEFT and SINGLE are the same value for compatibility + * with older versions of vexflow which didn't have right sided + * stave connectors. + */ + static readonly type: Record>; + /** + * Connector type: + * * "singleRight" + * * "singleLeft" + * * "single" + * * "double" + * * "brace" + * * "bracket" + * * "boldDoubleLeft" + * * "boldDoubleRight" + * * "thinDouble" + * * "none" + */ + static readonly typeString: Record, Exclude>; + protected width: number; + protected texts: { + content: string; + options: { + shift_x: number; + shift_y: number; + }; + }[]; + protected type: typeof StaveConnector['type'][keyof typeof StaveConnector['type']]; + readonly top_stave: Stave; + readonly bottom_stave: Stave; + readonly thickness: number; + protected x_shift: number; + constructor(top_stave: Stave, bottom_stave: Stave); + /** + * Set type. + * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString} + */ + setType(type: StaveConnectorType): this; + /** + * Get type. + * @returns number {@link StaveConnector.type} + */ + getType(): number; + /** Set optional associated Text. */ + setText(text: string, options?: { + shift_x?: number; + shift_y?: number; + }): this; + setXShift(x_shift: number): this; + getXShift(): number; + /** Render connector and associated text. */ + draw(): void; +} diff --git a/build/types/src/stavehairpin.d.ts b/build/types/src/stavehairpin.d.ts new file mode 100644 index 0000000000..ef02eb2563 --- /dev/null +++ b/build/types/src/stavehairpin.d.ts @@ -0,0 +1,56 @@ +import { Element } from './element'; +import { Note } from './note'; +import { RenderContext } from './rendercontext'; +export interface StaveHairpinRenderOptions { + right_shift_ticks?: number; + left_shift_ticks?: number; + left_shift_px: number; + right_shift_px: number; + height: number; + y_shift: number; +} +export declare class StaveHairpin extends Element { + static get CATEGORY(): string; + protected hairpin: number; + protected position: number; + render_options: StaveHairpinRenderOptions; + protected notes: Record; + protected first_note?: Note; + protected last_note?: Note; + static readonly type: { + CRESC: number; + DECRESC: number; + }; + static FormatByTicksAndDraw(ctx: RenderContext, formatter: { + pixelsPerTick: number; + }, notes: Record, type: number, position: number, options: StaveHairpinRenderOptions): void; + /** + * Create a new hairpin from the specified notes. + * + * @param {!Object} notes The notes to tie up. + * Notes is a struct that has: + * + * { + * first_note: Note, + * last_note: Note, + * } + * @param {!Object} type The type of hairpin + */ + constructor(notes: Record, type: number); + setPosition(position: number): this; + setRenderOptions(options: StaveHairpinRenderOptions): this; + /** + * Set the notes to attach this hairpin to. + * + * @param {!Object} notes The start and end notes. + */ + setNotes(notes: Record): this; + renderHairpin(params: { + first_x: number; + last_x: number; + first_y: number; + last_y: number; + staff_height: number; + }): void; + draw(): void; +} diff --git a/build/types/src/staveline.d.ts b/build/types/src/staveline.d.ts new file mode 100644 index 0000000000..16f0679234 --- /dev/null +++ b/build/types/src/staveline.d.ts @@ -0,0 +1,54 @@ +import { Element } from './element'; +import { FontInfo } from './font'; +import { RenderContext } from './rendercontext'; +import { StaveNote } from './stavenote'; +import { TextJustification } from './textnote'; +export interface StaveLineNotes { + first_note: StaveNote; + first_indices: number[]; + last_note: StaveNote; + last_indices: number[]; +} +export declare class StaveLine extends Element { + static get CATEGORY(): string; + /** Default text font. */ + static TEXT_FONT: Required; + static readonly TextVerticalPosition: { + TOP: number; + BOTTOM: number; + }; + static readonly TextJustification: typeof TextJustification; + render_options: { + padding_left: number; + padding_right: number; + line_width: number; + line_dash?: number[]; + rounded_end: boolean; + color?: string; + draw_start_arrow: boolean; + draw_end_arrow: boolean; + arrowhead_length: number; + arrowhead_angle: number; + text_position_vertical: number; + text_justification: number; + }; + protected text: string; + protected notes: StaveLineNotes; + protected first_note: StaveNote; + protected first_indices: number[]; + protected last_note: StaveNote; + protected last_indices: number[]; + constructor(notes: StaveLineNotes); + setText(text: string): this; + setNotes(notes: StaveLineNotes): this; + applyLineStyle(): void; + applyFontStyle(): void; + protected drawArrowLine(ctx: RenderContext, pt1: { + x: number; + y: number; + }, pt2: { + x: number; + y: number; + }): void; + draw(): this; +} diff --git a/build/types/src/stavemodifier.d.ts b/build/types/src/stavemodifier.d.ts new file mode 100644 index 0000000000..e8b105f4b4 --- /dev/null +++ b/build/types/src/stavemodifier.d.ts @@ -0,0 +1,53 @@ +import { Element } from './element'; +import { Glyph } from './glyph'; +import { Stave } from './stave'; +export interface LayoutMetrics { + xMin: number; + xMax: number; + paddingLeft: number; + paddingRight: number; +} +export declare enum StaveModifierPosition { + CENTER = 0, + LEFT = 1, + RIGHT = 2, + ABOVE = 3, + BELOW = 4, + BEGIN = 5, + END = 6 +} +export declare class StaveModifier extends Element { + static get CATEGORY(): string; + static get Position(): typeof StaveModifierPosition; + protected width: number; + protected x: number; + protected padding: number; + protected position: StaveModifierPosition; + protected stave?: Stave; + protected layoutMetrics?: LayoutMetrics; + constructor(); + getPosition(): number; + setPosition(position: number): this; + getStave(): Stave | undefined; + checkStave(): Stave; + setStave(stave: Stave): this; + getWidth(): number; + setWidth(width: number): this; + getX(): number; + setX(x: number): this; + /** + * Runs setYShift() for the Glyph object so that it matches the position of line for + * the Stave provided. A `customShift` can also be given (measured in the same units + * as `setYShift` not in lines) and this will be added after all other positions are + * calculated from the Stave. + * + * Note that this routine only sets the yShift; it does not actually "place" (meaning + * draw) the Glyph on the Stave. Call .draw() afterwards to do that. + */ + placeGlyphOnLine(glyph: Glyph, stave: Stave, line?: number, customShift?: number): void; + getPadding(index: number): number; + setPadding(padding: number): this; + setLayoutMetrics(layoutMetrics: LayoutMetrics): this; + getLayoutMetrics(): LayoutMetrics | undefined; + draw(...args: any[]): void; +} diff --git a/build/types/src/stavenote.d.ts b/build/types/src/stavenote.d.ts new file mode 100644 index 0000000000..1284baea8d --- /dev/null +++ b/build/types/src/stavenote.d.ts @@ -0,0 +1,154 @@ +import { Beam } from './beam'; +import { BoundingBox } from './boundingbox'; +import { ElementStyle } from './element'; +import { ModifierContextState } from './modifiercontext'; +import { Note, NoteStruct } from './note'; +import { NoteHead } from './notehead'; +import { Stave } from './stave'; +import { StemOptions } from './stem'; +import { StemmableNote } from './stemmablenote'; +export interface StaveNoteHeadBounds { + y_top: number; + y_bottom: number; + displaced_x?: number; + non_displaced_x?: number; + highest_line: number; + lowest_line: number; + highest_displaced_line?: number; + lowest_displaced_line?: number; + highest_non_displaced_line: number; + lowest_non_displaced_line: number; +} +export interface StaveNoteFormatSettings { + line: number; + maxLine: number; + minLine: number; + isrest: boolean; + stemDirection?: number; + stemMax: number; + stemMin: number; + voice_shift: number; + is_displaced: boolean; + note: StaveNote; +} +export interface StaveNoteStruct extends NoteStruct { + /** `Stem.UP` or `Stem.DOWN`. */ + stem_direction?: number; + auto_stem?: boolean; + stem_down_x_offset?: number; + stem_up_x_offset?: number; + stroke_px?: number; + glyph_font_scale?: number; + octave_shift?: number; + clef?: string; +} +export declare class StaveNote extends StemmableNote { + static DEBUG: boolean; + static get CATEGORY(): string; + /** + * @deprecated Use Stem.UP. + */ + static get STEM_UP(): number; + /** + * @deprecated Use Stem.DOWN. + */ + static get STEM_DOWN(): number; + static get LEDGER_LINE_OFFSET(): number; + static get minNoteheadPadding(): number; + /** Format notes inside a ModifierContext. */ + static format(notes: StaveNote[], state: ModifierContextState): boolean; + static postFormat(notes: Note[]): boolean; + minLine: number; + maxLine: number; + protected readonly clef: string; + protected readonly octave_shift?: number; + protected displaced: boolean; + protected dot_shiftY: number; + protected use_default_head_x: boolean; + protected ledgerLineStyle: ElementStyle; + private _noteHeads; + private sortedKeyProps; + constructor(noteStruct: StaveNoteStruct); + reset(): this; + setBeam(beam: Beam): this; + buildStem(): this; + buildNoteHeads(): void; + autoStem(): void; + calculateOptimalStemDirection(): number; + calculateKeyProps(): void; + getBoundingBox(): BoundingBox; + getLineNumber(isTopNote?: boolean): number; + /** + * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. + */ + isRest(): boolean; + isChord(): boolean; + hasStem(): boolean; + hasFlag(): boolean; + getStemX(): number; + getYForTopText(textLine: number): number; + getYForBottomText(textLine: number): number; + setStave(stave: Stave): this; + isDisplaced(): boolean; + setNoteDisplaced(displaced: boolean): this; + getTieRightX(): number; + getTieLeftX(): number; + getLineForRest(): number; + getModifierStartXY(position: number, index: number, options?: { + forceFlagRight?: boolean; + }): { + x: number; + y: number; + }; + setStyle(style: ElementStyle): this; + setStemStyle(style: ElementStyle): this; + getStemStyle(): ElementStyle | undefined; + setLedgerLineStyle(style: ElementStyle): void; + getLedgerLineStyle(): ElementStyle; + setFlagStyle(style: ElementStyle): void; + getFlagStyle(): ElementStyle | undefined; + setKeyStyle(index: number, style: ElementStyle): this; + setKeyLine(index: number, line: number): this; + getKeyLine(index: number): number; + getVoiceShiftWidth(): number; + calcNoteDisplacements(): void; + preFormat(): void; + /** + * @typedef {Object} noteHeadBounds + * @property {number} y_top the highest notehead bound + * @property {number} y_bottom the lowest notehead bound + * @property {number|Null} displaced_x the starting x for displaced noteheads + * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads + * @property {number} highest_line the highest notehead line in traditional music line + * numbering (bottom line = 1, top line = 5) + * @property {number} lowest_line the lowest notehead line + * @property {number|false} highest_displaced_line the highest staff line number + * for a displaced notehead + * @property {number|false} lowest_displaced_line + * @property {number} highest_non_displaced_line + * @property {number} lowest_non_displaced_line + */ + /** + * Get the staff line and y value for the highest & lowest noteheads + * @returns {noteHeadBounds} + */ + getNoteHeadBounds(): StaveNoteHeadBounds; + getNoteHeadBeginX(): number; + getNoteHeadEndX(): number; + get noteHeads(): NoteHead[]; + /** @deprecated use StaveNote.noteHeads instead. */ + get note_heads(): NoteHead[]; + drawLedgerLines(): void; + drawModifiers(noteheadParam: NoteHead): void; + shouldDrawFlag(): boolean; + drawFlag(): void; + drawNoteHeads(): void; + drawStem(stemOptions?: StemOptions): void; + /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */ + getStaveNoteScale(): number; + /** + * Override stemmablenote stem extension to adjust for distance from middle line. + */ + getStemExtension(): number; + draw(): void; +} diff --git a/build/types/src/staverepetition.d.ts b/build/types/src/staverepetition.d.ts new file mode 100644 index 0000000000..afa3bf95c0 --- /dev/null +++ b/build/types/src/staverepetition.d.ts @@ -0,0 +1,32 @@ +import { FontInfo } from './font'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export declare class Repetition extends StaveModifier { + static get CATEGORY(): string; + static TEXT_FONT: Required; + static readonly type: { + NONE: number; + CODA_LEFT: number; + CODA_RIGHT: number; + SEGNO_LEFT: number; + SEGNO_RIGHT: number; + DC: number; + DC_AL_CODA: number; + DC_AL_FINE: number; + DS: number; + DS_AL_CODA: number; + DS_AL_FINE: number; + FINE: number; + TO_CODA: number; + }; + protected symbol_type: number; + protected x_shift: number; + protected y_shift: number; + constructor(type: number, x: number, y_shift: number); + setShiftX(x: number): this; + setShiftY(y: number): this; + draw(stave: Stave, x: number): this; + drawCodaFixed(stave: Stave, x: number): this; + drawSignoFixed(stave: Stave, x: number): this; + drawSymbolText(stave: Stave, x: number, text: string, draw_coda: boolean): this; +} diff --git a/build/types/src/stavesection.d.ts b/build/types/src/stavesection.d.ts new file mode 100644 index 0000000000..b918b6e764 --- /dev/null +++ b/build/types/src/stavesection.d.ts @@ -0,0 +1,16 @@ +import { FontInfo } from './font'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export declare class StaveSection extends StaveModifier { + static get CATEGORY(): string; + static TEXT_FONT: Required; + protected section: string; + protected shift_x: number; + protected shift_y: number; + protected drawRect: boolean; + constructor(section: string, x: number, shift_y: number, drawRect?: boolean); + setStaveSection(section: string): this; + setShiftX(x: number): this; + setShiftY(y: number): this; + draw(stave: Stave, shift_x: number): this; +} diff --git a/build/types/src/stavetempo.d.ts b/build/types/src/stavetempo.d.ts new file mode 100644 index 0000000000..6fe3003fd7 --- /dev/null +++ b/build/types/src/stavetempo.d.ts @@ -0,0 +1,25 @@ +import { FontInfo } from './font'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export interface StaveTempoOptions { + bpm?: number; + duration?: string; + dots?: number; + name?: string; +} +export declare class StaveTempo extends StaveModifier { + static get CATEGORY(): string; + static TEXT_FONT: Required; + protected tempo: StaveTempoOptions; + protected shift_x: number; + protected shift_y: number; + /** Font size for note. */ + render_options: { + glyph_font_scale: number; + }; + constructor(tempo: StaveTempoOptions, x: number, shift_y: number); + setTempo(tempo: StaveTempoOptions): this; + setShiftX(x: number): this; + setShiftY(y: number): this; + draw(stave: Stave, shift_x: number): this; +} diff --git a/build/types/src/stavetext.d.ts b/build/types/src/stavetext.d.ts new file mode 100644 index 0000000000..23a01dd860 --- /dev/null +++ b/build/types/src/stavetext.d.ts @@ -0,0 +1,25 @@ +import { FontInfo } from './font'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export declare class StaveText extends StaveModifier { + static get CATEGORY(): string; + static TEXT_FONT: Required; + protected options: { + shift_x: number; + shift_y: number; + justification: number; + }; + protected text: string; + protected shift_x?: number; + protected shift_y?: number; + constructor(text: string, position: number, options?: { + shift_x?: number; + shift_y?: number; + justification?: number; + }); + setStaveText(text: string): this; + setShiftX(x: number): this; + setShiftY(y: number): this; + setText(text: string): this; + draw(stave: Stave): this; +} diff --git a/build/types/src/stavetie.d.ts b/build/types/src/stavetie.d.ts new file mode 100644 index 0000000000..22a3a4541e --- /dev/null +++ b/build/types/src/stavetie.d.ts @@ -0,0 +1,63 @@ +import { Element } from './element'; +import { FontInfo } from './font'; +import { Note } from './note'; +export interface TieNotes { + first_note?: Note | null; + last_note?: Note | null; + first_indices?: number[]; + last_indices?: number[]; +} +export declare class StaveTie extends Element { + static get CATEGORY(): string; + /** Default text font. */ + static TEXT_FONT: Required; + render_options: { + cp2: number; + last_x_shift: number; + tie_spacing: number; + cp1: number; + first_x_shift: number; + text_shift_x: number; + y_shift: number; + }; + protected text?: string; + protected notes: TieNotes; + protected direction?: number; + /** + * @param notes is a struct that has: + * + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * + * @param text + */ + constructor(notes: TieNotes, text?: string); + setDirection(direction: number): this; + /** + * Set the notes to attach this tie to. + * + * @param {!Object} notes The notes to tie up. + */ + setNotes(notes: TieNotes): this; + /** + * @return {boolean} Returns true if this is a partial bar. + */ + isPartial(): boolean; + renderTie(params: { + direction: number; + first_x_px: number; + last_x_px: number; + last_ys: number[]; + first_ys: number[]; + }): void; + renderText(first_x_px: number, last_x_px: number): void; + /** + * Returns the TieNotes structure of the first and last note this tie connects. + */ + getNotes(): TieNotes; + draw(): boolean; +} diff --git a/build/types/src/stavevolta.d.ts b/build/types/src/stavevolta.d.ts new file mode 100644 index 0000000000..d23dddce6c --- /dev/null +++ b/build/types/src/stavevolta.d.ts @@ -0,0 +1,21 @@ +import { FontInfo } from './font'; +import { Stave } from './stave'; +import { StaveModifier } from './stavemodifier'; +export declare enum VoltaType { + NONE = 1, + BEGIN = 2, + MID = 3, + END = 4, + BEGIN_END = 5 +} +export declare class Volta extends StaveModifier { + static get CATEGORY(): string; + static get type(): typeof VoltaType; + static TEXT_FONT: Required; + protected volta: number; + protected number: string; + protected y_shift: number; + constructor(type: number, number: string, x: number, y_shift: number); + setShiftY(y: number): this; + draw(stave: Stave, x: number): this; +} diff --git a/build/types/src/stem.d.ts b/build/types/src/stem.d.ts new file mode 100644 index 0000000000..727332e7bc --- /dev/null +++ b/build/types/src/stem.d.ts @@ -0,0 +1,58 @@ +import { BoundingBox } from './boundingbox'; +import { Element } from './element'; +export interface StemOptions { + stem_down_y_base_offset?: number; + stem_up_y_base_offset?: number; + stem_down_y_offset?: number; + stem_up_y_offset?: number; + stemletHeight?: number; + isStemlet?: boolean; + hide?: boolean; + stem_direction?: number; + stem_extension?: number; + y_bottom?: number; + y_top?: number; + x_end?: number; + x_begin?: number; +} +export declare class Stem extends Element { + /** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + static get UP(): number; + static get DOWN(): number; + static get WIDTH(): number; + static get HEIGHT(): number; + protected hide: boolean; + protected isStemlet: boolean; + protected stemletHeight: number; + protected x_begin: number; + protected x_end: number; + protected y_top: number; + protected stem_up_y_offset: number; + protected y_bottom: number; + protected stem_down_y_offset: number; + protected stem_up_y_base_offset: number; + protected stem_down_y_base_offset: number; + protected stem_direction: number; + protected stem_extension: number; + protected renderHeightAdjustment: number; + constructor(options?: StemOptions); + setOptions(options?: StemOptions): void; + setNoteHeadXBounds(x_begin: number, x_end: number): this; + setDirection(direction: number): void; + setExtension(ext: number): void; + getExtension(): number; + setYBounds(y_top: number, y_bottom: number): void; + getHeight(): number; + getBoundingBox(): BoundingBox; + getExtents(): { + topY: number; + baseY: number; + }; + setVisibility(isVisible: boolean): this; + setStemlet(isStemlet: boolean, stemletHeight: number): this; + adjustHeightForFlag(): void; + adjustHeightForBeam(): void; + draw(): void; +} diff --git a/build/types/src/stemmablenote.d.ts b/build/types/src/stemmablenote.d.ts new file mode 100644 index 0000000000..988d9c677e --- /dev/null +++ b/build/types/src/stemmablenote.d.ts @@ -0,0 +1,39 @@ +import { Glyph, GlyphProps } from './glyph'; +import { Note, NoteStruct } from './note'; +import { Stem, StemOptions } from './stem'; +export declare abstract class StemmableNote extends Note { + static get CATEGORY(): string; + stem_direction?: number; + stem?: Stem; + protected flag?: Glyph; + protected stem_extension_override?: number; + constructor(noteStruct: NoteStruct); + getStem(): Stem | undefined; + checkStem(): Stem; + setStem(stem: Stem): this; + buildStem(): this; + buildFlag(category?: string): void; + getBaseCustomNoteHeadGlyphProps(): GlyphProps; + getStemLength(): number; + getBeamCount(): number; + getStemMinimumLength(): number; + getStemDirection(): number; + setStemDirection(direction?: number): this; + getStemX(): number; + getCenterGlyphX(): number; + getStemExtension(): number; + setStemLength(height: number): this; + getStemExtents(): { + topY: number; + baseY: number; + }; + /** Gets the `y` value for the top modifiers at a specific `textLine`. */ + getYForTopText(textLine: number): number; + /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */ + getYForBottomText(textLine: number): number; + hasFlag(): boolean; + /** Post formats the note. */ + postFormat(): this; + /** Renders the stem onto the canvas. */ + drawStem(stemOptions: StemOptions): void; +} diff --git a/build/types/src/stringnumber.d.ts b/build/types/src/stringnumber.d.ts new file mode 100644 index 0000000000..0b509fc012 --- /dev/null +++ b/build/types/src/stringnumber.d.ts @@ -0,0 +1,35 @@ +import { FontInfo } from './font'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +export interface StringNumberMetrics { + verticalPadding: number; + stemPadding: number; + leftPadding: number; + rightPadding: number; +} +export declare class StringNumber extends Modifier { + static get CATEGORY(): string; + static TEXT_FONT: Required; + static get metrics(): StringNumberMetrics; + static format(nums: StringNumber[], state: ModifierContextState): boolean; + protected radius: number; + protected drawCircle: boolean; + protected last_note?: Note; + protected string_number: string; + protected x_offset: number; + protected y_offset: number; + protected text_line: number; + protected stem_offset: number; + protected dashed: boolean; + protected leg: number; + constructor(number: string); + setLineEndType(leg: number): this; + setStringNumber(number: string): this; + setOffsetX(x: number): this; + setOffsetY(y: number): this; + setLastNote(note: Note): this; + setDashed(dashed: boolean): this; + setDrawCircle(drawCircle: boolean): this; + draw(): void; +} diff --git a/build/types/src/strokes.d.ts b/build/types/src/strokes.d.ts new file mode 100644 index 0000000000..8e6329489c --- /dev/null +++ b/build/types/src/strokes.d.ts @@ -0,0 +1,33 @@ +import { FontInfo } from './font'; +import { Modifier } from './modifier'; +import { ModifierContextState } from './modifiercontext'; +import { Note } from './note'; +export declare class Stroke extends Modifier { + static get CATEGORY(): string; + static readonly Type: { + BRUSH_DOWN: number; + BRUSH_UP: number; + ROLL_DOWN: number; + ROLL_UP: number; + RASQUEDO_DOWN: number; + RASQUEDO_UP: number; + ARPEGGIO_DIRECTIONLESS: number; + }; + static TEXT_FONT: Required; + static format(strokes: Stroke[], state: ModifierContextState): boolean; + protected options: { + all_voices: boolean; + }; + protected all_voices: boolean; + protected type: number; + protected note_end?: Note; + render_options: { + font_scale: number; + }; + constructor(type: number, options?: { + all_voices: boolean; + }); + getPosition(): number; + addEndNote(note: Note): this; + draw(): void; +} diff --git a/build/types/src/svgcontext.d.ts b/build/types/src/svgcontext.d.ts new file mode 100644 index 0000000000..ef282fad1a --- /dev/null +++ b/build/types/src/svgcontext.d.ts @@ -0,0 +1,142 @@ +import { FontInfo } from './font'; +import { GroupAttributes, RenderContext, TextMeasure } from './rendercontext'; +export type Attributes = { + [name: string]: string | number | undefined; + 'font-family'?: string; + 'font-size'?: string | number; + 'font-style'?: string; + 'font-weight'?: string | number; + scaleX?: number; + scaleY?: number; +}; +export interface State { + state: Attributes; + attributes: Attributes; + shadow_attributes: Attributes; + lineWidth: number; +} +declare class MeasureTextCache { + protected txt?: SVGTextElement; + protected cache: Record>; + lookup(text: string, svg: SVGSVGElement, attributes: Attributes): TextMeasure; + measureImpl(text: string, svg: SVGSVGElement, attributes: Attributes): TextMeasure; +} +/** + * SVG rendering context with an API similar to CanvasRenderingContext2D. + */ +export declare class SVGContext extends RenderContext { + protected static measureTextCache: MeasureTextCache; + element: HTMLElement; + svg: SVGSVGElement; + width: number; + height: number; + path: string; + pen: { + x: number; + y: number; + }; + lineWidth: number; + attributes: Attributes; + shadow_attributes: Attributes; + state: Attributes; + state_stack: State[]; + parent: SVGGElement; + groups: SVGGElement[]; + protected groupAttributes: Attributes[]; + protected precision: number; + backgroundFillStyle: string; + /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */ + protected fontCSSString: string; + constructor(element: HTMLElement); + protected round(n: number): number; + /** + * Use one of the overload signatures to create an SVG element of a specific type. + * The last overload accepts an arbitrary string, and is identical to the + * implementation signature. + * Feel free to add new overloads for other SVG element types as required. + */ + create(svgElementType: 'g'): SVGGElement; + create(svgElementType: 'path'): SVGPathElement; + create(svgElementType: 'rect'): SVGRectElement; + create(svgElementType: 'svg'): SVGSVGElement; + create(svgElementType: 'text'): SVGTextElement; + create(svgElementType: string): SVGElement; + openGroup(cls?: string, id?: string, attrs?: GroupAttributes): SVGGElement; + closeGroup(): void; + add(elem: SVGElement): void; + setFillStyle(style: string): this; + /** + * Used to set the fill color for `clearRect()`. This allows us to simulate + * cutting a "hole" into the SVG drawing. + */ + setBackgroundFillStyle(style: string): this; + setStrokeStyle(style: string): this; + setShadowColor(color: string): this; + /** + * @param blur A non-negative float specifying the level of shadow blur, where 0 + * represents no blur and larger numbers represent increasingly more blur. + * @returns this + */ + setShadowBlur(blur: number): this; + /** + * @param width + * @returns this + */ + setLineWidth(width: number): this; + /** + * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...] + * @returns this + * + * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray) + */ + setLineDash(lineDash: number[]): this; + /** + * @param capType + * @returns this + */ + setLineCap(capType: CanvasLineCap): this; + resize(width: number, height: number): this; + scale(x: number, y: number): this; + /** + * 1 arg: string in the "x y w h" format + * 4 args: x:number, y:number, w:number, h:number + */ + setViewBox(viewBox_or_minX: string | number, minY?: number, width?: number, height?: number): void; + applyAttributes(element: SVGElement, attributes: Attributes): SVGElement; + clear(): void; + rect(x: number, y: number, width: number, height: number, attributes?: Attributes): this; + fillRect(x: number, y: number, width: number, height: number): this; + clearRect(x: number, y: number, width: number, height: number): this; + beginPath(): this; + moveTo(x: number, y: number): this; + lineTo(x: number, y: number): this; + bezierCurveTo(x1: number, y1: number, x2: number, y2: number, x: number, y: number): this; + quadraticCurveTo(x1: number, y1: number, x: number, y: number): this; + arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean): this; + closePath(): this; + private getShadowStyle; + fill(attributes?: Attributes): this; + stroke(): this; + measureText(text: string): TextMeasure; + fillText(text: string, x: number, y: number): this; + save(): this; + restore(): this; + set fillStyle(style: string | CanvasGradient | CanvasPattern); + get fillStyle(): string | CanvasGradient | CanvasPattern; + set strokeStyle(style: string | CanvasGradient | CanvasPattern); + get strokeStyle(): string | CanvasGradient | CanvasPattern; + /** + * @param f is 1) a `FontInfo` object or + * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or + * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). + * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). + * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted + * into the font-weight attribute (e.g., font-weight="bold") + * @param style is a string (e.g., 'italic', 'normal') that is inserted into the + * font-style attribute (e.g., font-style="italic") + */ + setFont(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; + /** Return a string of the form `'italic bold 15pt Arial'` */ + getFont(): string; +} +export {}; diff --git a/build/types/src/system.d.ts b/build/types/src/system.d.ts new file mode 100644 index 0000000000..59c4b0cfdf --- /dev/null +++ b/build/types/src/system.d.ts @@ -0,0 +1,118 @@ +import { Element } from './element'; +import { Factory } from './factory'; +import { FormatParams, Formatter, FormatterOptions } from './formatter'; +import { RenderContext } from './rendercontext'; +import { Stave, StaveOptions } from './stave'; +import { StaveConnector, StaveConnectorType } from './staveconnector'; +import { Voice } from './voice'; +export interface SystemFormatterOptions extends FormatterOptions { + alpha?: number; +} +export interface SystemStave { + voices: Voice[]; + stave?: Stave; + noJustification?: boolean; + options?: StaveOptions; + spaceAbove?: number; + spaceBelow?: number; + debugNoteMetrics?: boolean; +} +interface StaveInfo { + noJustification: boolean; + options: StaveOptions; + spaceAbove: number; + spaceBelow: number; + debugNoteMetrics: boolean; +} +/** + * Formatting for systems created/drawn from factory: + * + * If width is provided, the system will use the specified width. + * + * If noJustification flag is 'true', there is no justification between voices + * Otherwise, autoWidth defaults to true. + * + * If autowidth is true, the system uses format.preCalculateMinWidth + * for the width of all voices, and default stave padding + */ +export interface SystemOptions { + factory?: Factory; + noPadding?: boolean; + debugFormatter?: boolean; + spaceBetweenStaves?: number; + formatIterations?: number; + autoWidth?: boolean; + x?: number; + width?: number; + y?: number; + details?: SystemFormatterOptions; + formatOptions?: FormatParams; + noJustification?: boolean; +} +/** + * System implements a musical system, which is a collection of staves, + * each which can have one or more voices. All voices across all staves in + * the system are formatted together. + */ +export declare class System extends Element { + static get CATEGORY(): string; + protected options: Required; + protected factory: Factory; + protected formatter?: Formatter; + protected startX?: number; + protected lastY?: number; + protected partStaves: Stave[]; + protected partStaveInfos: StaveInfo[]; + protected partVoices: Voice[]; + protected connector?: StaveConnector; + protected debugNoteMetricsYs?: { + y: number; + stave: Stave; + }[]; + constructor(params?: SystemOptions); + /** Set formatting options. */ + setOptions(options?: SystemOptions): void; + /** Get origin X. */ + getX(): number; + /** Set origin X. */ + setX(x: number): void; + /** Get origin y. */ + getY(): number; + /** Set origin y. */ + setY(y: number): void; + /** Get associated staves. */ + getStaves(): Stave[]; + /** Get associated voices. */ + getVoices(): Voice[]; + /** Set associated context. */ + setContext(context: RenderContext): this; + /** + * Add connector between staves. + * @param type see {@link StaveConnector.typeString} + */ + addConnector(type?: StaveConnectorType): StaveConnector; + /** + * Add a stave to the system. + * + * Example (one voice): + * + * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});` + * + * Example (two voices): + * + * `system.addStave({voices: [` + * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),` + * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))` + * `]});` + */ + addStave(params: SystemStave): Stave; + /** + * Add voices to the system with stave already assigned. + */ + addVoices(voices: Voice[]): void; + /** Format the system. */ + format(): void; + /** Render the system. */ + draw(): void; +} +export {}; diff --git a/build/types/src/tables.d.ts b/build/types/src/tables.d.ts new file mode 100644 index 0000000000..3fbf26fc7f --- /dev/null +++ b/build/types/src/tables.d.ts @@ -0,0 +1,97 @@ +import { ArticulationStruct } from './articulation'; +import { Font } from './font'; +import { Fraction } from './fraction'; +import { GlyphProps } from './glyph'; +import { KeyProps } from './note'; +export declare class Tables { + static UNISON: boolean; + static SOFTMAX_FACTOR: number; + static STEM_WIDTH: number; + static STEM_HEIGHT: number; + static STAVE_LINE_THICKNESS: number; + static RENDER_PRECISION_PLACES: number; + static RESOLUTION: number; + /** + * Customize this by calling Flow.setMusicFont(...fontNames); + */ + static MUSIC_FONT_STACK: Font[]; + /** + * @returns the `Font` object at the head of the music font stack. + */ + static currentMusicFont(): Font; + static NOTATION_FONT_SCALE: number; + static TABLATURE_FONT_SCALE: number; + static SLASH_NOTEHEAD_WIDTH: number; + static STAVE_LINE_DISTANCE: number; + static TEXT_HEIGHT_OFFSET_HACK: number; + static clefProperties(clef: string): { + line_shift: number; + }; + /** + * @param keyOctaveGlyph a string in the format "key/octave" (e.g., "c/5") or "key/octave/custom-note-head-code" (e.g., "g/5/t3"). + * @param clef + * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.). + * @returns properties for the specified note. + */ + static keyProperties(keyOctaveGlyph: string, clef?: string, params?: { + octave_shift?: number; + }): KeyProps; + static integerToNote(integer?: number): string; + static tabToGlyphProps(fret: string, scale?: number): GlyphProps; + static textWidth(text: string): number; + static articulationCodes(artic: string): ArticulationStruct; + static accidentalMap: Record; + static accidentalCodes(acc: string): { + code: string; + parenRightPaddingAdjustment: number; + }; + static accidentalColumnsTable: Record; + static ornamentCodes(acc: string): { + code: string; + }; + static keySignature(spec: string): { + type: string; + line: number; + }[]; + static getKeySignatures(): Record; + static hasKeySignature(spec: string): boolean; + static unicode: { + sharp: string; + flat: string; + natural: string; + triangle: string; + 'o-with-slash': string; + degrees: string; + circle: string; + }; + /** + * Convert duration aliases to the number based duration. + * If the input isn't an alias, simply return the input. + * @param duration + * @returns Example: 'q' -> '4', '8' -> '8' + */ + static sanitizeDuration(duration: string): string; + /** Convert the `duration` to a fraction. */ + static durationToFraction(duration: string): Fraction; + /** Convert the `duration` to a number. */ + static durationToNumber(duration: string): number; + static durationToTicks(duration: string): number; + static codeNoteHead(type: string, duration: string): string; + static getGlyphProps(duration: string, type?: string): GlyphProps; + static validTypes: Record; + static TIME4_4: { + num_beats: number; + beat_value: number; + resolution: number; + }; +} diff --git a/build/types/src/tabnote.d.ts b/build/types/src/tabnote.d.ts new file mode 100644 index 0000000000..8d88a546bf --- /dev/null +++ b/build/types/src/tabnote.d.ts @@ -0,0 +1,44 @@ +import { GlyphProps } from './glyph'; +import { Stave } from './stave'; +import { StaveNoteStruct } from './stavenote'; +import { StemmableNote } from './stemmablenote'; +export interface TabNotePosition { + str: number; + fret: number | string; +} +export interface TabNoteStruct extends StaveNoteStruct { + positions: TabNotePosition[]; +} +export declare class TabNote extends StemmableNote { + static get CATEGORY(): string; + protected ghost: boolean; + protected glyphPropsArr: GlyphProps[]; + protected positions: TabNotePosition[]; + constructor(noteStruct: TabNoteStruct, draw_stem?: boolean); + greatestString: () => number; + leastString: () => number; + reset(): this; + setGhost(ghost: boolean): this; + hasStem(): boolean; + getStemExtension(): number; + updateWidth(): void; + setStave(stave: Stave): this; + getPositions(): TabNotePosition[]; + getModifierStartXY(position: number, index: number): { + x: number; + y: number; + }; + getLineForRest(): number; + preFormat(): void; + getStemX(): number; + getStemY(): number; + getStemExtents(): { + topY: number; + baseY: number; + }; + drawFlag(): void; + drawModifiers(): void; + drawStemThrough(): void; + drawPositions(): void; + draw(): void; +} diff --git a/build/types/src/tabslide.d.ts b/build/types/src/tabslide.d.ts new file mode 100644 index 0000000000..553e52f321 --- /dev/null +++ b/build/types/src/tabslide.d.ts @@ -0,0 +1,34 @@ +import { FontInfo } from './font'; +import { TieNotes } from './stavetie'; +import { TabTie } from './tabtie'; +export declare class TabSlide extends TabTie { + static get CATEGORY(): string; + static TEXT_FONT: Required; + static get SLIDE_UP(): number; + static get SLIDE_DOWN(): number; + static createSlideUp(notes: TieNotes): TabSlide; + static createSlideDown(notes: TieNotes): TabSlide; + /** + * @param notes is a struct of the form: + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * @param notes.first_note the starting note of the slide + * @param notes.last_note the ending note of the slide + * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed. + * @param notes.last_indices currently unused. we assume it's the same as first_indices. + * + * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN + */ + constructor(notes: TieNotes, direction?: number); + renderTie(params: { + direction: number; + first_x_px: number; + last_x_px: number; + last_ys: number[]; + first_ys: number[]; + }): void; +} diff --git a/build/types/src/tabstave.d.ts b/build/types/src/tabstave.d.ts new file mode 100644 index 0000000000..ac87718cd2 --- /dev/null +++ b/build/types/src/tabstave.d.ts @@ -0,0 +1,7 @@ +import { Stave, StaveOptions } from './stave'; +export declare class TabStave extends Stave { + static get CATEGORY(): string; + constructor(x: number, y: number, width: number, options?: StaveOptions); + getYForGlyphs(): number; + addTabGlyph(): this; +} diff --git a/build/types/src/tabtie.d.ts b/build/types/src/tabtie.d.ts new file mode 100644 index 0000000000..bfc26fa027 --- /dev/null +++ b/build/types/src/tabtie.d.ts @@ -0,0 +1,18 @@ +import { StaveTie, TieNotes } from './stavetie'; +export declare class TabTie extends StaveTie { + static get CATEGORY(): string; + static createHammeron(notes: TieNotes): TabTie; + static createPulloff(notes: TieNotes): TabTie; + /** + * @param notes is a struct that has: + * { + * first_note: Note, + * last_note: Note, + * first_indices: [n1, n2, n3], + * last_indices: [n1, n2, n3] + * } + * + * @param text + */ + constructor(notes: TieNotes, text?: string); +} diff --git a/build/types/src/textbracket.d.ts b/build/types/src/textbracket.d.ts new file mode 100644 index 0000000000..201f9d49fb --- /dev/null +++ b/build/types/src/textbracket.d.ts @@ -0,0 +1,55 @@ +import { Element } from './element'; +import { FontInfo } from './font'; +import { Note } from './note'; +import { RenderContext } from './rendercontext'; +export interface TextBracketParams { + start: Note; + stop: Note; + text?: string; + superscript?: string; + position?: number | string; +} +export declare enum TextBracketPosition { + TOP = 1, + BOTTOM = -1 +} +export declare class TextBracket extends Element { + static DEBUG: boolean; + static get CATEGORY(): string; + static TEXT_FONT: Required; + render_options: { + dashed: boolean; + color: string; + line_width: number; + underline_superscript: boolean; + show_bracket: boolean; + dash: number[]; + bracket_height: number; + }; + protected readonly text: string; + protected readonly superscript: string; + protected line: number; + readonly position: TextBracketPosition; + readonly start: Note; + readonly stop: Note; + static get Position(): typeof TextBracketPosition; + static get PositionString(): Record; + /** + * @deprecated Use `TextBracket.Position` instead. + */ + static get Positions(): typeof TextBracketPosition; + /** + * @deprecated Use `TextBracket.PositionString` instead. + */ + static get PositionsString(): Record; + constructor({ start, stop, text, superscript, position }: TextBracketParams); + /** + * Apply the text backet styling to the provided context. + * @param ctx + * @returns this + */ + applyStyle(ctx: RenderContext): this; + setDashed(dashed: boolean, dash?: number[]): this; + setLine(line: number): this; + draw(): void; +} diff --git a/build/types/src/textdynamics.d.ts b/build/types/src/textdynamics.d.ts new file mode 100644 index 0000000000..fa07c00a82 --- /dev/null +++ b/build/types/src/textdynamics.d.ts @@ -0,0 +1,39 @@ +import { Glyph } from './glyph'; +import { Note } from './note'; +import { TextNoteStruct } from './textnote'; +/** + * `TextDynamics` renders traditional + * text dynamics markings, **ie: p, f, sfz, rfz, ppp** + * + * You can render any dynamics string that contains a combination of + * the following letters: P, M, F, Z, R, S + */ +export declare class TextDynamics extends Note { + /** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + protected sequence: string; + protected line: number; + protected glyphs: Glyph[]; + /** The glyph data for each dynamics letter. */ + static get GLYPHS(): Record; + /** + * Create the dynamics marking. + * + * A `TextDynamics` object inherits from `Note` so that it can be formatted + * within a `Voice`. + * + * @param noteStruct an object that contains a `duration` property and a + * `sequence` of letters that represents the letters to render. + */ + constructor(noteStruct: TextNoteStruct); + /** Set the Stave line on which the note should be placed. */ + setLine(line: number): this; + /** Preformat the dynamics text. */ + preFormat(): this; + /** Draw the dynamics text on the rendering context. */ + draw(): void; +} diff --git a/build/types/src/textformatter.d.ts b/build/types/src/textformatter.d.ts new file mode 100644 index 0000000000..0ec73b1408 --- /dev/null +++ b/build/types/src/textformatter.d.ts @@ -0,0 +1,123 @@ +import { FontGlyph, FontInfo } from './font'; +export interface TextFormatterInfo extends Record { + family: string; + resolution?: number; + glyphs?: Record; + serifs: boolean; + monospaced: boolean; + italic: boolean; + bold: boolean; + maxSizeGlyph?: string; + superscriptOffset?: number; + subscriptOffset?: number; + description: string; +} +/** + * Y information, 0 is baseline, yMin is lowest point. + */ +export interface yExtent { + yMin: number; + yMax: number; + height: number; +} +export declare class TextFormatter { + /** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */ + static DEBUG: boolean; + /** + * Return all registered font families. + */ + static getFontFamilies(): TextFormatterInfo[]; + /** + * Call `TextFormatter.registerInfo(info)` to register font information before using this method. + * + * This method creates a formatter for the font that most closely matches the requested font. + * We compare font family, bold, and italic attributes. + * This method will return a fallback formatter if there are no matches. + */ + static create(requestedFont?: FontInfo): TextFormatter; + /** + * @param fontFamily used as a key to the font registry. + * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)` + */ + static getInfo(fontFamily: string): TextFormatterInfo | undefined; + /** + * Apps may register their own fonts and metrics, and those metrics + * will be available to the app for formatting. + * + * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory. + * @param info + * @param overwrite + */ + static registerInfo(info: TextFormatterInfo, overwrite?: boolean): void; + /** Font family. */ + protected family: string; + /** Specified in `pt` units. */ + protected size: number; + /** Font metrics are extracted at 1000 upem (units per em). */ + protected resolution: number; + /** + * For text formatting, we do not require glyph outlines, but instead rely on glyph + * bounding box metrics such as: + * ``` + * { + * x_min: 48, + * x_max: 235, + * y_min: -17, + * y_max: 734, + * ha: 751, + * leftSideBearing: 48, + * advanceWidth: 286, + * } + * ``` + */ + protected glyphs: Record; + protected description?: string; + protected serifs: boolean; + protected monospaced: boolean; + protected italic: boolean; + protected bold: boolean; + protected superscriptOffset: number; + protected subscriptOffset: number; + protected maxSizeGlyph: string; + protected cacheKey: string; + /** + * Use `TextFormatter.create(...)` to build an instance from information previously + * registered via `TextFormatter.registerInfo(info)`. + */ + private constructor(); + get localHeightCache(): Record; + updateParams(params: TextFormatterInfo): void; + /** Create a hash with the current font data, so we can cache computed widths. */ + updateCacheKey(): void; + /** + * The glyphs table is indexed by the character (e.g., 'C', '@'). + * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts. + */ + getGlyphMetrics(character: string): FontGlyph; + get maxHeight(): number; + /** + * Retrieve the character's advanceWidth as a fraction of an `em` unit. + * For the space character ' ' as defined in the: + * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25. + * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485. + */ + getWidthForCharacterInEm(c: string): number; + /** + * Retrieve the character's y bounds (ymin, ymax) and height. + */ + getYForCharacterInPx(c: string): yExtent; + getYForStringInPx(str: string): yExtent; + /** + * Retrieve the total width of `text` in `em` units. + */ + getWidthForTextInEm(text: string): number; + /** The width of the text (in `em`) is scaled by the font size (in `px`). */ + getWidthForTextInPx(text: string): number; + /** + * @param size in pt. + */ + setFontSize(size: number): this; + /** `this.size` is specified in points. Convert to pixels. */ + get fontSizeInPixels(): number; + getResolution(): number; +} diff --git a/build/types/src/textnote.d.ts b/build/types/src/textnote.d.ts new file mode 100644 index 0000000000..e3eea99ae9 --- /dev/null +++ b/build/types/src/textnote.d.ts @@ -0,0 +1,55 @@ +import { FontInfo } from './font'; +import { Glyph } from './glyph'; +import { Note, NoteStruct } from './note'; +export declare enum TextJustification { + LEFT = 1, + CENTER = 2, + RIGHT = 3 +} +export interface TextNoteStruct extends NoteStruct { + text?: string; + glyph?: string; + ignore_ticks?: boolean; + smooth?: boolean; + font?: FontInfo; + subscript?: string; + superscript?: string; +} +/** + * `TextNote` is a notation element that is positioned in time. Generally + * meant for objects that sit above/below the staff and inline with each other. + * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. + * Examples of this would be such as dynamics, lyrics, chord changes, etc. + */ +export declare class TextNote extends Note { + static get CATEGORY(): string; + static TEXT_FONT: Required; + static readonly Justification: typeof TextJustification; + /** Glyph data. */ + static get GLYPHS(): Record; + protected text: string; + protected glyph?: Glyph; + protected superscript?: string; + protected subscript?: string; + protected smooth: boolean; + protected justification: TextJustification; + protected line: number; + constructor(noteStruct: TextNoteStruct); + /** Set the horizontal justification of the TextNote. */ + setJustification(just: TextJustification): this; + /** Set the Stave line on which the note should be placed. */ + setLine(line: number): this; + /** Return the Stave line on which the TextNote is placed. */ + getLine(): number; + /** Return the unformatted text of this TextNote. */ + getText(): string; + /** Pre-render formatting. */ + preFormat(): void; + /** + * Renders the TextNote. + * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. + */ + draw(): void; +} diff --git a/build/types/src/tickable.d.ts b/build/types/src/tickable.d.ts new file mode 100644 index 0000000000..5730ab27b2 --- /dev/null +++ b/build/types/src/tickable.d.ts @@ -0,0 +1,140 @@ +import { Element } from './element'; +import { Fraction } from './fraction'; +import { Modifier } from './modifier'; +import { ModifierContext } from './modifiercontext'; +import { Stave } from './stave'; +import { TickContext } from './tickcontext'; +import { Tuplet } from './tuplet'; +import { Voice } from './voice'; +/** Formatter metrics interface */ +export interface FormatterMetrics { + duration: string; + freedom: { + left: number; + right: number; + }; + iterations: number; + space: { + used: number; + mean: number; + deviation: number; + }; +} +/** + * Tickable represents a element that sit on a score and + * has a duration, i.e., Tickables occupy space in the musical rendering dimension. + */ +export declare abstract class Tickable extends Element { + static get CATEGORY(): string; + protected ignore_ticks: boolean; + protected tupletStack: Tuplet[]; + protected tuplet?: Tuplet; + protected ticks: Fraction; + protected center_x_shift: number; + protected voice?: Voice; + protected width: number; + protected x_shift: number; + protected modifierContext?: ModifierContext; + protected tickContext?: TickContext; + protected modifiers: Modifier[]; + protected tickMultiplier: Fraction; + protected formatterMetrics: FormatterMetrics; + protected intrinsicTicks: number; + protected align_center: boolean; + private _preFormatted; + private _postFormatted; + constructor(); + /** Reset the Tickable, this function will be overloaded. */ + reset(): this; + /** Return the ticks. */ + getTicks(): Fraction; + /** Check if it ignores the ticks. */ + shouldIgnoreTicks(): boolean; + /** Ignore the ticks. */ + setIgnoreTicks(flag: boolean): this; + /** Set width of note. Used by the formatter for positioning. */ + setWidth(width: number): void; + /** Get width of note. Used by the formatter for positioning. */ + getWidth(): number; + /** Displace note by `x` pixels. Used by the formatter. */ + setXShift(x: number): this; + /** Get the `x` displaced pixels of the note. */ + getXShift(): number; + /** Get `x` position of this tick context. */ + getX(): number; + /** Return the formatterMetrics. */ + getFormatterMetrics(): FormatterMetrics; + /** Return the center `x` shift. */ + getCenterXShift(): number; + /** Set the center `x` shift. */ + setCenterXShift(centerXShift: number): this; + isCenterAligned(): boolean; + setCenterAlignment(align_center: boolean): this; + /** + * Return the associated voice. Every tickable must be associated with a voice. + * This allows formatters and preFormatter to associate them with the right modifierContexts. + */ + getVoice(): Voice; + /** Set the associated voice. */ + setVoice(voice: Voice): void; + /** Get the tuplet. */ + getTuplet(): Tuplet | undefined; + /** Return a list of Tuplets. */ + getTupletStack(): Tuplet[]; + /** + * Reset the specific Tuplet (if this is not provided, all tuplets are reset). + * Remove any prior tuplets from the tick calculation and + * reset the intrinsic tick value. + */ + resetTuplet(tuplet?: Tuplet): this; + /** Attach to new tuplet. */ + setTuplet(tuplet: Tuplet): this; + /** + * Add self to the provided ModifierContext `mc`. + * If this tickable has modifiers, set modifierContext. + * @returns this + */ + addToModifierContext(mc: ModifierContext): this; + /** + * Optional, if tickable has modifiers, associate a Modifier. + * @param mod the modifier + */ + addModifier(modifier: Modifier, index?: number): this; + /** Get the list of associated modifiers. */ + getModifiers(): Modifier[]; + /** Set the Tick Context. */ + setTickContext(tc: TickContext): void; + checkTickContext(message?: string): TickContext; + /** Preformat the Tickable. */ + preFormat(): void; + /** Set preformatted status. */ + set preFormatted(value: boolean); + get preFormatted(): boolean; + /** Postformat the Tickable. */ + postFormat(): this; + /** Set postformatted status. */ + set postFormatted(value: boolean); + get postFormatted(): boolean; + /** Return the intrinsic ticks. */ + getIntrinsicTicks(): number; + /** Set the intrinsic ticks. */ + setIntrinsicTicks(intrinsicTicks: number): void; + /** Get the tick multiplier. */ + getTickMultiplier(): Fraction; + /** Apply a tick multiplier. */ + applyTickMultiplier(numerator: number, denominator: number): void; + /** Set the duration. */ + setDuration(duration: Fraction): void; + getAbsoluteX(): number; + /** Attach this note to a modifier context. */ + setModifierContext(mc?: ModifierContext): this; + /** Get `ModifierContext`. */ + getModifierContext(): ModifierContext | undefined; + /** Check and get `ModifierContext`. */ + checkModifierContext(): ModifierContext; + /** Get the target stave. */ + abstract getStave(): Stave | undefined; + /** Set the target stave. */ + abstract setStave(stave: Stave): this; + abstract getMetrics(): any; +} diff --git a/build/types/src/tickcontext.d.ts b/build/types/src/tickcontext.d.ts new file mode 100644 index 0000000000..20e5a92957 --- /dev/null +++ b/build/types/src/tickcontext.d.ts @@ -0,0 +1,82 @@ +import { Fraction } from './fraction'; +import { NoteMetrics } from './note'; +import { Tickable } from './tickable'; +export interface TickContextMetrics extends NoteMetrics { + totalLeftPx: number; + totalRightPx: number; +} +export interface TickContextOptions { + tickID: number; +} +/** + * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc. + */ +export declare class TickContext { + protected readonly tickID: number; + protected readonly tickables: Tickable[]; + protected readonly tickablesByVoice: Record; + protected currentTick: Fraction; + protected maxTicks: Fraction; + protected padding: number; + protected xBase: number; + protected x: number; + protected xOffset: number; + protected notePx: number; + protected glyphPx: number; + protected leftDisplacedHeadPx: number; + protected rightDisplacedHeadPx: number; + protected modLeftPx: number; + protected modRightPx: number; + protected totalLeftPx: number; + protected totalRightPx: number; + protected maxTickable?: Tickable; + protected minTicks?: Fraction; + protected minTickable?: Tickable; + tContexts: TickContext[]; + protected preFormatted: boolean; + protected postFormatted: boolean; + protected width: number; + protected formatterMetrics: { + freedom: { + left: number; + right: number; + }; + }; + static getNextContext(tContext: TickContext): TickContext | undefined; + constructor(options?: TickContextOptions); + getTickID(): number; + getX(): number; + setX(x: number): this; + getXBase(): number; + setXBase(xBase: number): void; + getXOffset(): number; + setXOffset(xOffset: number): void; + getWidth(): number; + setPadding(padding: number): this; + getMaxTicks(): Fraction; + getMinTicks(): Fraction | undefined; + getMaxTickable(): Tickable | undefined; + getMinTickable(): Tickable | undefined; + getTickables(): Tickable[]; + /** + * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex). + * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63 + * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable. + */ + getTickableForVoice(voiceIndex: number): Tickable; + getTickablesByVoice(): Record; + getCenterAlignedTickables(): Tickable[]; + /** Gets widths context, note and left/right modifiers for formatting. */ + getMetrics(): TickContextMetrics; + getCurrentTick(): Fraction; + setCurrentTick(tick: Fraction): void; + addTickable(tickable: Tickable, voiceIndex?: number): this; + preFormat(): this; + postFormat(): this; + getFormatterMetrics(): { + freedom: { + left: number; + right: number; + }; + }; +} diff --git a/build/types/src/timesigglyph.d.ts b/build/types/src/timesigglyph.d.ts new file mode 100644 index 0000000000..014de35321 --- /dev/null +++ b/build/types/src/timesigglyph.d.ts @@ -0,0 +1,15 @@ +import { Glyph, GlyphMetrics } from './glyph'; +import { TimeSignature } from './timesignature'; +export declare class TimeSignatureGlyph extends Glyph { + timeSignature: TimeSignature; + topStartX: number; + botStartX: number; + width: number; + lineShift: number; + xMin: number; + constructor(timeSignature: TimeSignature, topDigits: string, botDigits: string, code: string, point: number, options?: { + category: string; + }); + getMetrics(): GlyphMetrics; + renderToStave(x: number): void; +} diff --git a/build/types/src/timesignature.d.ts b/build/types/src/timesignature.d.ts new file mode 100644 index 0000000000..5eec9b365c --- /dev/null +++ b/build/types/src/timesignature.d.ts @@ -0,0 +1,90 @@ +import { Glyph } from './glyph'; +import { StaveModifier } from './stavemodifier'; +import { TimeSignatureGlyph } from './timesigglyph'; +export interface TimeSignatureInfo { + glyph: Glyph; + line: number; + num: boolean; +} +/** + * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from + * a provided "timeSpec" such as "4/4", "C|" (cut time), or even something more advanced + * such as "3/4(6/8)" or "2/4+5/8". + */ +export declare class TimeSignature extends StaveModifier { + static get CATEGORY(): string; + static get glyphs(): Record; + point: number; + bottomLine: number; + topLine: number; + protected timeSpec: string; + protected line: number; + protected glyph: Glyph; + protected is_numeric: boolean; + protected validate_args: boolean; + constructor(timeSpec?: string, customPadding?: number, validate_args?: boolean); + /** + * Return TimeSignatureInfo given a string, consisting of line (number), + * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or + * TimeSignatureGlyph object). + */ + parseTimeSpec(timeSpec: string): TimeSignatureInfo; + /** + * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both + * top and bottom digits along with plus signs etc.) + */ + makeTimeSignatureGlyph(topDigits: string, botDigits: string): TimeSignatureGlyph; + /** + * Returns {line, num (=getIsNumeric), glyph} -- + * but these can also be accessed directly w/ getters and setters. + */ + getInfo(): TimeSignatureInfo; + /** + * Set a new time signature specification without changing customPadding, etc. + * + * The getter for this is `getTimeSpec` not `getTimeSig`. + */ + setTimeSig(timeSpec: string): this; + /** + * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature + */ + getTimeSpec(): string; + /** + * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/ + * denominator time signatures such as 3/4 and 2 for cut/common. + */ + getLine(): number; + /** + * Set the line number that the TimeSignature sits on. Half-values are acceptable + * for spaces, etc. Can be altered, for instance, for signatures that sit above the + * staff in large orchestral scores. + */ + setLine(line: number): void; + /** + * Get the Glyph object used to create the time signature. Numeric time signatures + * such as 3/8 have a composite Glyph stored as a single Glyph object. + */ + getGlyph(): Glyph; + /** + * Set the Glyph object used to draw the time signature, and update the width of the + * TimeSignature to match. The Glyph must define width in its metrics. + */ + setGlyph(glyph: Glyph): void; + /** + * Return a boolean on whether this TimeSignature is drawn with one or more numbers + * (such as 4/4) or not (as in cut time). + */ + getIsNumeric(): boolean; + /** + * Set whether this TimeSignature is drawn with one or more numbers. + */ + setIsNumeric(isNumeric: boolean): void; + /** + * Draw the time signature on a Stave using its RenderContext. Both setStave + * and setContext must already be run. + */ + draw(): void; +} diff --git a/build/types/src/timesignote.d.ts b/build/types/src/timesignote.d.ts new file mode 100644 index 0000000000..56bdf2faeb --- /dev/null +++ b/build/types/src/timesignote.d.ts @@ -0,0 +1,11 @@ +import { ModifierContext } from './modifiercontext'; +import { Note } from './note'; +import { TimeSignature } from './timesignature'; +export declare class TimeSigNote extends Note { + static get CATEGORY(): string; + protected timeSig: TimeSignature; + constructor(timeSpec: string, customPadding?: number); + addToModifierContext(mc: ModifierContext): this; + preFormat(): this; + draw(): void; +} diff --git a/build/types/src/tremolo.d.ts b/build/types/src/tremolo.d.ts new file mode 100644 index 0000000000..8a5f3db4f1 --- /dev/null +++ b/build/types/src/tremolo.d.ts @@ -0,0 +1,17 @@ +import { Modifier } from './modifier'; +/** Tremolo implements tremolo notation. */ +export declare class Tremolo extends Modifier { + static get CATEGORY(): string; + protected readonly code: string; + protected readonly num: number; + /** Extra spacing required for big strokes. */ + y_spacing_scale: number; + /** Font scaling for big strokes. */ + extra_stroke_scale: number; + /** + * @param num number of bars + */ + constructor(num: number); + /** Draw the tremolo on the rendering context. */ + draw(): void; +} diff --git a/build/types/src/tuning.d.ts b/build/types/src/tuning.d.ts new file mode 100644 index 0000000000..c0195742e2 --- /dev/null +++ b/build/types/src/tuning.d.ts @@ -0,0 +1,23 @@ +/** `Tuning` implements varies types of tunings for tablature. */ +export declare class Tuning { + protected tuningValues: number[]; + static get names(): Record; + /** + * Constructor. + * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings + */ + constructor(tuningString?: string); + /** Return the note number associated to the note string. */ + noteToInteger(noteString: string): number; + /** + * Set tuning identified by tuning name (eg. 'dagdad') + * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings + */ + setTuning(tuningString: string): void; + /** Return the note number associated with a tablature string. */ + getValueForString(stringNum: string | number): number; + /** Return the note number associated with a tablature string and fret. */ + getValueForFret(fretNum: string | number, stringNum: string | number): number; + /** Return the note string associated with tablature string and fret. */ + getNoteForFret(fretNum: string | number, stringNum: string | number): string; +} diff --git a/build/types/src/tuplet.d.ts b/build/types/src/tuplet.d.ts new file mode 100644 index 0000000000..912c91f04e --- /dev/null +++ b/build/types/src/tuplet.d.ts @@ -0,0 +1,111 @@ +/** + * ## Description + * + * Create a new tuplet from the specified notes. The notes must + * be part of the same voice. If they are of different rhythmic + * values, then options.num_notes must be set. + * + * @constructor + * @param {Array.} A set of notes: staveNotes, + * notes, etc... any class that inherits stemmableNote at some + * point in its prototype chain. + * @param options: object { + * + * num_notes: fit this many notes into... + * notes_occupied: ...the space of this many notes + * + * Together, these two properties make up the tuplet ratio + * in the form of num_notes : notes_occupied. + * num_notes defaults to the number of notes passed in, so + * it is important that if you omit this property, all of + * the notes passed should be of the same note value. + * notes_occupied defaults to 2 -- so you should almost + * certainly pass this parameter for anything other than + * a basic triplet. + * + * location: + * default 1, which is above the notes: ┌─── 3 ───┐ + * -1 is below the notes └─── 3 ───┘ + * + * bracketed: boolean, draw a bracket around the tuplet number + * when true: ┌─── 3 ───┐ when false: 3 + * defaults to true if notes are not beamed, false otherwise + * + * ratioed: boolean + * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐ + * defaults to true if the difference between num_notes and + * notes_occupied is greater than 1. + * + * y_offset: int, default 0 + * manually offset a tuplet, for instance to avoid collisions + * with articulations, etc... + * } + */ +import { Element } from './element'; +import { Glyph } from './glyph'; +import { Note } from './note'; +export interface TupletOptions { + beats_occupied?: number; + bracketed?: boolean; + location?: number; + notes_occupied?: number; + num_notes?: number; + ratioed?: boolean; + y_offset?: number; +} +export interface TupletMetrics { + noteHeadOffset: number; + stemOffset: number; + bottomLine: number; + topModifierOffset: number; +} +export declare const enum TupletLocation { + BOTTOM = -1, + TOP = 1 +} +export declare class Tuplet extends Element { + static get CATEGORY(): string; + notes: Note[]; + protected options: TupletOptions; + protected num_notes: number; + protected point: number; + protected bracketed: boolean; + protected y_pos: number; + protected x_pos: number; + protected width: number; + protected location: number; + protected notes_occupied: number; + protected ratioed: boolean; + protected numerator_glyphs: Glyph[]; + protected denom_glyphs: Glyph[]; + static get LOCATION_TOP(): number; + static get LOCATION_BOTTOM(): number; + static get NESTING_OFFSET(): number; + static get metrics(): TupletMetrics; + constructor(notes: Note[], options?: TupletOptions); + attach(): void; + detach(): void; + /** + * Set whether or not the bracket is drawn. + */ + setBracketed(bracketed: boolean): this; + /** + * Set whether or not the ratio is shown. + */ + setRatioed(ratioed: boolean): this; + /** + * Set the tuplet indicator to be displayed either on the top or bottom of the stave. + */ + setTupletLocation(location: number): this; + getNotes(): Note[]; + getNoteCount(): number; + beatsOccupiedDeprecationWarning(): void; + getBeatsOccupied(): number; + setBeatsOccupied(beats: number): void; + getNotesOccupied(): number; + setNotesOccupied(notes: number): void; + resolveGlyphs(): void; + getNestedTupletCount(): number; + getYPosition(): number; + draw(): void; +} diff --git a/build/types/src/typeguard.d.ts b/build/types/src/typeguard.d.ts new file mode 100644 index 0000000000..e1399a8862 --- /dev/null +++ b/build/types/src/typeguard.d.ts @@ -0,0 +1,99 @@ +import { Accidental } from './accidental'; +import { Annotation } from './annotation'; +import { Dot } from './dot'; +import { GraceNote } from './gracenote'; +import { GraceNoteGroup } from './gracenotegroup'; +import { Note } from './note'; +import { RenderContext } from './rendercontext.js'; +import { Barline } from './stavebarline'; +import { StaveNote } from './stavenote'; +import { StemmableNote } from './stemmablenote'; +import { TabNote } from './tabnote'; +/** + * Use instead of `instanceof` as a more flexible type guard. + * @param obj check if this object's CATEGORY matches the provided category. + * @param category a string representing a category of VexFlow objects. + * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`. + * If `false`, we do not check the superclass or other ancestors. + * @returns true if `obj` has a static `CATEGORY` property that matches `category`. + */ +export declare function isCategory(obj: any, category: string, checkAncestors?: boolean): obj is T; +export declare const isAccidental: (obj: unknown) => obj is Accidental; +export declare const isAnnotation: (obj: unknown) => obj is Annotation; +export declare const isBarline: (obj: unknown) => obj is Barline; +export declare const isDot: (obj: unknown) => obj is Dot; +export declare const isGraceNote: (obj: unknown) => obj is GraceNote; +export declare const isGraceNoteGroup: (obj: unknown) => obj is GraceNoteGroup; +export declare const isNote: (obj: unknown) => obj is Note; +export declare const isRenderContext: (obj: unknown) => obj is RenderContext; +export declare const isStaveNote: (obj: unknown) => obj is StaveNote; +export declare const isStemmableNote: (obj: unknown) => obj is StemmableNote; +export declare const isTabNote: (obj: unknown) => obj is TabNote; +export declare const enum Category { + Accidental = "Accidental", + Annotation = "Annotation", + Articulation = "Articulation", + Barline = "Barline", + BarNote = "BarNote", + Beam = "Beam", + Bend = "Bend", + ChordSymbol = "ChordSymbol", + Clef = "Clef", + ClefNote = "ClefNote", + Crescendo = "Crescendo", + Curve = "Curve", + Dot = "Dot", + Element = "Element", + Fraction = "Fraction", + FretHandFinger = "FretHandFinger", + GhostNote = "GhostNote", + Glyph = "Glyph", + GlyphNote = "GlyphNote", + GraceNote = "GraceNote", + GraceNoteGroup = "GraceNoteGroup", + GraceTabNote = "GraceTabNote", + KeySignature = "KeySignature", + KeySigNote = "KeySigNote", + Modifier = "Modifier", + MultiMeasureRest = "MultiMeasureRest", + Note = "Note", + NoteHead = "NoteHead", + NoteSubGroup = "NoteSubGroup", + Ornament = "Ornament", + Parenthesis = "Parenthesis", + PedalMarking = "PedalMarking", + RenderContext = "RenderContext", + RepeatNote = "RepeatNote", + Repetition = "Repetition", + Stave = "Stave", + StaveConnector = "StaveConnector", + StaveHairpin = "StaveHairpin", + StaveLine = "StaveLine", + StaveModifier = "StaveModifier", + StaveNote = "StaveNote", + StaveSection = "StaveSection", + StaveTempo = "StaveTempo", + StaveText = "StaveText", + StaveTie = "StaveTie", + Stem = "Stem", + StemmableNote = "StemmableNote", + StringNumber = "StringNumber", + Stroke = "Stroke", + System = "System", + TabNote = "TabNote", + TabSlide = "TabSlide", + TabStave = "TabStave", + TabTie = "TabTie", + TextBracket = "TextBracket", + TextDynamics = "TextDynamics", + TextNote = "TextNote", + Tickable = "Tickable", + TimeSignature = "TimeSignature", + TimeSigNote = "TimeSigNote", + Tremolo = "Tremolo", + Tuplet = "Tuplet", + Vibrato = "Vibrato", + VibratoBracket = "VibratoBracket", + Voice = "Voice", + Volta = "Volta" +} diff --git a/build/types/src/util.d.ts b/build/types/src/util.d.ts new file mode 100644 index 0000000000..7a04e0e6d6 --- /dev/null +++ b/build/types/src/util.d.ts @@ -0,0 +1,31 @@ +/** `RuntimeError` will be thrown by VexFlow classes in case of error. */ +export declare class RuntimeError extends Error { + code: string; + constructor(code: string, message?: string); +} +/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */ +export declare function globalObject(): typeof globalThis & any; +/** + * Check that `x` is of type `T` and not `undefined`. + * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message. + */ +export declare function defined(x?: T, code?: string, message?: string): T; +/** Default log function sends all arguments to console. */ +export declare function log(block: string, ...args: any[]): void; +/** Dump warning to console. */ +export declare function warn(...args: any[]): void; +/** Locate the mid point between stave lines. Returns a fractional line if a space. */ +export declare function midLine(a: number, b: number): number; +/** + * Used by various classes (e.g., SVGContext) to provide a + * unique prefix to element names (or other keys in shared namespaces). + */ +export declare function prefix(text: string): string; +/** + * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi). + */ +export declare function normalizeAngle(a: number): number; +/** + * Return the sum of an array of numbers. + */ +export declare function sumArray(arr: number[]): number; diff --git a/build/types/src/version.d.ts b/build/types/src/version.d.ts new file mode 100644 index 0000000000..e5292457ed --- /dev/null +++ b/build/types/src/version.d.ts @@ -0,0 +1,3 @@ +export declare const VERSION: string; +export declare const ID: string; +export declare const DATE: string; diff --git a/build/types/src/vex.d.ts b/build/types/src/vex.d.ts new file mode 100644 index 0000000000..d05bfe36fe --- /dev/null +++ b/build/types/src/vex.d.ts @@ -0,0 +1,18 @@ +import { Flow } from './flow'; +import { RuntimeError } from './util'; +export declare class Vex { + static Flow: typeof Flow; + /** + * Take `arr` and return a new list consisting of the sorted, unique, + * contents of arr. Does not modify `arr`. + */ + static sortAndUnique(arr: any[], cmp: any, eq: any): any[]; + /** Check if array `arr` contains `obj`. */ + static contains(arr: any[], obj: any): boolean; + static getCanvasContext(canvasSelector: string): RenderingContext; + /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */ + static benchmark(s: any, f: any): void; + static stackTrace(): string | undefined; + static RERR: RuntimeError; + static RuntimeError: RuntimeError; +} diff --git a/build/types/src/vibrato.d.ts b/build/types/src/vibrato.d.ts new file mode 100644 index 0000000000..adfa194c07 --- /dev/null +++ b/build/types/src/vibrato.d.ts @@ -0,0 +1,29 @@ +import { Modifier } from './modifier'; +import { ModifierContext, ModifierContextState } from './modifiercontext'; +import { RenderContext } from './rendercontext'; +export interface VibratoRenderOptions { + wave_height: number; + wave_girth: number; + vibrato_width: number; + harsh: boolean; + wave_width: number; +} +/** `Vibrato` implements diverse vibratos. */ +export declare class Vibrato extends Modifier { + static get CATEGORY(): string; + render_options: VibratoRenderOptions; + /** Arrange vibratos inside a `ModifierContext`. */ + static format(vibratos: Vibrato[], state: ModifierContextState, context: ModifierContext): boolean; + constructor(); + /** Set harsh vibrato. */ + setHarsh(harsh: boolean): this; + /** Set vibrato width in pixels. */ + setVibratoWidth(width: number): this; + /** Draw the vibrato on the rendering context. */ + draw(): void; + /** + * Static rendering method that can be called from + * other classes (e.g. VibratoBracket). + */ + static renderVibrato(ctx: RenderContext, x: number, y: number, opts: VibratoRenderOptions): void; +} diff --git a/build/types/src/vibratobracket.d.ts b/build/types/src/vibratobracket.d.ts new file mode 100644 index 0000000000..3d823d14e1 --- /dev/null +++ b/build/types/src/vibratobracket.d.ts @@ -0,0 +1,33 @@ +import { Element } from './element'; +import { Note } from './note'; +/** `VibratoBracket` renders vibrato effect between two notes. */ +export declare class VibratoBracket extends Element { + /** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */ + static DEBUG: boolean; + static get CATEGORY(): string; + protected line: number; + protected start?: Note; + protected stop?: Note; + render_options: { + vibrato_width: number; + wave_height: number; + wave_girth: number; + harsh: boolean; + wave_width: number; + }; + /** + * Either the stop or start note must be set, or both of them. + * An undefined value for the start or stop note indicates that the vibrato + * is drawn from the beginning or until the end of the stave accordingly. + */ + constructor(bracket_data: { + stop?: Note | null; + start?: Note | null; + }); + /** Set line position of the vibrato bracket. */ + setLine(line: number): this; + /** Set harsh vibrato bracket. */ + setHarsh(harsh: boolean): this; + /** Draw the vibrato bracket on the rendering context. */ + draw(): void; +} diff --git a/build/types/src/voice.d.ts b/build/types/src/voice.d.ts new file mode 100644 index 0000000000..6d3046d081 --- /dev/null +++ b/build/types/src/voice.d.ts @@ -0,0 +1,109 @@ +import { BoundingBox } from './boundingbox'; +import { Element } from './element'; +import { Fraction } from './fraction'; +import { RenderContext } from './rendercontext'; +import { Stave } from './stave'; +import { Tickable } from './tickable'; +export interface VoiceTime { + num_beats: number; + beat_value: number; + /** Defaults to `Flow.RESOLUTION` if not provided. */ + resolution?: number; +} +export declare enum VoiceMode { + STRICT = 1, + SOFT = 2, + FULL = 3 +} +/** + * `Voice` is mainly a container object to group `Tickables` for formatting. + */ +export declare class Voice extends Element { + static get CATEGORY(): string; + /** + * Modes allow the addition of ticks in three different ways: + * - STRICT: This is the default. Ticks must fill the voice. + * - SOFT: Ticks can be added without restrictions. + * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length. + */ + static get Mode(): typeof VoiceMode; + protected resolutionMultiplier: number; + protected smallestTickCount: Fraction; + protected stave?: Stave; + protected mode: VoiceMode; + protected expTicksUsed?: number; + protected preFormatted: boolean; + protected options: { + softmaxFactor: number; + }; + protected readonly totalTicks: Fraction; + protected readonly ticksUsed: Fraction; + protected readonly largestTickWidth: number; + protected readonly tickables: Tickable[]; + protected readonly time: Required; + constructor(time?: VoiceTime | string); + /** Get the total ticks in the voice. */ + getTotalTicks(): Fraction; + /** Get the total ticks used in the voice by all the tickables. */ + getTicksUsed(): Fraction; + /** Get the largest width of all the tickables. */ + getLargestTickWidth(): number; + /** Get the tick count for the shortest tickable */ + getSmallestTickCount(): Fraction; + /** Get the tickables in the voice. */ + getTickables(): Tickable[]; + /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */ + getMode(): number; + /** + * Set the voice mode. + * @param mode value from `VoiceMode` or Voice.Mode + */ + setMode(mode: number): this; + /** Get the resolution multiplier for the voice. */ + getResolutionMultiplier(): number; + /** Get the actual tick resolution for the voice. */ + getActualResolution(): number; + /** Set the voice's stave. */ + setStave(stave: Stave): this; + getStave(): Stave | undefined; + /** Get the bounding box for the voice. */ + getBoundingBox(): BoundingBox | undefined; + /** Set the voice mode to strict or soft. */ + setStrict(strict: boolean): this; + /** Determine if the voice is complete according to the voice mode. */ + isComplete(): boolean; + /** + * We use softmax to layout the tickables proportional to the exponent of + * their duration. The softmax factor is used to determine the 'linearness' of + * the layout. + * + * The softmax of all the tickables in this voice should sum to 1. + */ + setSoftmaxFactor(factor: number): this; + /** + * Calculate the sum of the exponents of all the ticks in this voice to use + * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables) + * + * Note that the "exp" of "expTicksUsed" stands for "expontential" ticks used, + * not "expected" ticks used. + */ + protected reCalculateExpTicksUsed(): number; + /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */ + softmax(tickValue: number): number; + /** Add a tickable to the voice. */ + addTickable(tickable: Tickable): this; + /** Add an array of tickables to the voice. */ + addTickables(tickables: Tickable[]): this; + /** Preformat the voice by applying the voice's stave to each note. */ + preFormat(): this; + checkStave(): Stave; + /** + * Render the voice onto the canvas `context` and an optional `stave`. + * If `stave` is omitted, it is expected that the notes have staves + * already set. + * + * This method also calculates the voice's boundingBox while drawing + * the notes. Note the similarities with this.getBoundingBox(). + */ + draw(context?: RenderContext, stave?: Stave): void; +} diff --git a/build/types/src/web.d.ts b/build/types/src/web.d.ts new file mode 100644 index 0000000000..e5bd19628f --- /dev/null +++ b/build/types/src/web.d.ts @@ -0,0 +1,2 @@ +export declare function isHTMLCanvas(element: any): element is HTMLCanvasElement; +export declare function isHTMLDiv(element: any): element is HTMLDivElement; diff --git a/docs/api/assets/search.js b/docs/api/assets/search.js index 06e0623d36..f466e42bd8 100644 --- a/docs/api/assets/search.js +++ b/docs/api/assets/search.js @@ -1 +1 @@ -window.searchData = JSON.parse("{\"rows\":[{\"kind\":4194304,\"name\":\"Line\",\"url\":\"types/Line.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/Line.html#__type\",\"classes\":\"\",\"parent\":\"Line\"},{\"kind\":1024,\"name\":\"column\",\"url\":\"types/Line.html#__type.column\",\"classes\":\"\",\"parent\":\"Line.__type\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"types/Line.html#__type.line\",\"classes\":\"\",\"parent\":\"Line.__type\"},{\"kind\":1024,\"name\":\"flatLine\",\"url\":\"types/Line.html#__type.flatLine\",\"classes\":\"\",\"parent\":\"Line.__type\"},{\"kind\":1024,\"name\":\"dblSharpLine\",\"url\":\"types/Line.html#__type.dblSharpLine\",\"classes\":\"\",\"parent\":\"Line.__type\"},{\"kind\":1024,\"name\":\"numAcc\",\"url\":\"types/Line.html#__type.numAcc\",\"classes\":\"\",\"parent\":\"Line.__type\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"types/Line.html#__type.width\",\"classes\":\"\",\"parent\":\"Line.__type\"},{\"kind\":128,\"name\":\"Accidental\",\"url\":\"classes/Accidental.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Accidental.html#DEBUG\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Accidental.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Accidental.html#format\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"checkCollision\",\"url\":\"classes/Accidental.html#checkCollision\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"applyAccidentals\",\"url\":\"classes/Accidental.html#applyAccidentals\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Accidental.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Accidental.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Accidental.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Accidental.html#constructor\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/Accidental.html#type\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Accidental.html#render_options\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Accidental.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Accidental.render_options\"},{\"kind\":1024,\"name\":\"parenLeftPadding\",\"url\":\"classes/Accidental.html#render_options.__type.parenLeftPadding\",\"classes\":\"\",\"parent\":\"Accidental.render_options.__type\"},{\"kind\":1024,\"name\":\"font_scale\",\"url\":\"classes/Accidental.html#render_options.__type.font_scale\",\"classes\":\"\",\"parent\":\"Accidental.render_options.__type\"},{\"kind\":1024,\"name\":\"parenRightPadding\",\"url\":\"classes/Accidental.html#render_options.__type.parenRightPadding\",\"classes\":\"\",\"parent\":\"Accidental.render_options.__type\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Accidental.html#getWidth\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Accidental.html#setNote\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setAsCautionary\",\"url\":\"classes/Accidental.html#setAsCautionary\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Accidental.html#draw\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Accidental.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Accidental.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Accidental.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Accidental.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Accidental.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Accidental.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Accidental.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Accidental.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Accidental.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Accidental.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Accidental.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Accidental.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Accidental.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Accidental.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Accidental.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Accidental.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Accidental.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Accidental.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Accidental.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Accidental.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Accidental.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Accidental.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Accidental.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Accidental.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Accidental.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Accidental.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Accidental.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Accidental.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Accidental.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Accidental.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Accidental.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Accidental.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Accidental.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Accidental.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Accidental.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Accidental.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Accidental.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Accidental.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Accidental.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Accidental.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Accidental.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Accidental.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Accidental.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Accidental.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Accidental.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Accidental.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Accidental.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Accidental.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Accidental.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Accidental.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Accidental.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Accidental.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":8,\"name\":\"AnnotationHorizontalJustify\",\"url\":\"enums/AnnotationHorizontalJustify.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"LEFT\",\"url\":\"enums/AnnotationHorizontalJustify.html#LEFT\",\"classes\":\"\",\"parent\":\"AnnotationHorizontalJustify\"},{\"kind\":16,\"name\":\"CENTER\",\"url\":\"enums/AnnotationHorizontalJustify.html#CENTER\",\"classes\":\"\",\"parent\":\"AnnotationHorizontalJustify\"},{\"kind\":16,\"name\":\"RIGHT\",\"url\":\"enums/AnnotationHorizontalJustify.html#RIGHT\",\"classes\":\"\",\"parent\":\"AnnotationHorizontalJustify\"},{\"kind\":16,\"name\":\"CENTER_STEM\",\"url\":\"enums/AnnotationHorizontalJustify.html#CENTER_STEM\",\"classes\":\"\",\"parent\":\"AnnotationHorizontalJustify\"},{\"kind\":8,\"name\":\"AnnotationVerticalJustify\",\"url\":\"enums/AnnotationVerticalJustify.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"TOP\",\"url\":\"enums/AnnotationVerticalJustify.html#TOP\",\"classes\":\"\",\"parent\":\"AnnotationVerticalJustify\"},{\"kind\":16,\"name\":\"CENTER\",\"url\":\"enums/AnnotationVerticalJustify.html#CENTER\",\"classes\":\"\",\"parent\":\"AnnotationVerticalJustify\"},{\"kind\":16,\"name\":\"BOTTOM\",\"url\":\"enums/AnnotationVerticalJustify.html#BOTTOM\",\"classes\":\"\",\"parent\":\"AnnotationVerticalJustify\"},{\"kind\":16,\"name\":\"CENTER_STEM\",\"url\":\"enums/AnnotationVerticalJustify.html#CENTER_STEM\",\"classes\":\"\",\"parent\":\"AnnotationVerticalJustify\"},{\"kind\":128,\"name\":\"Annotation\",\"url\":\"classes/Annotation.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Annotation.html#DEBUG\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Annotation.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Annotation.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":1024,\"name\":\"HorizontalJustify\",\"url\":\"classes/Annotation.html#HorizontalJustify\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":1024,\"name\":\"HorizontalJustifyString\",\"url\":\"classes/Annotation.html#HorizontalJustifyString\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":1024,\"name\":\"VerticalJustify\",\"url\":\"classes/Annotation.html#VerticalJustify\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":1024,\"name\":\"VerticalJustifyString\",\"url\":\"classes/Annotation.html#VerticalJustifyString\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"minAnnotationPadding\",\"url\":\"classes/Annotation.html#minAnnotationPadding\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Annotation.html#format\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Annotation.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Annotation.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Annotation.html#constructor\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setVerticalJustification\",\"url\":\"classes/Annotation.html#setVerticalJustification\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getJustification\",\"url\":\"classes/Annotation.html#getJustification\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setJustification\",\"url\":\"classes/Annotation.html#setJustification\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Annotation.html#draw\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Annotation.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Annotation.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Annotation.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Annotation.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Annotation.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Annotation.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Annotation.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Annotation.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Annotation.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Annotation.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Annotation.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Annotation.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Annotation.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Annotation.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Annotation.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Annotation.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Annotation.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Annotation.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Annotation.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Annotation.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Annotation.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Annotation.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Annotation.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Annotation.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Annotation.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Annotation.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Annotation.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Annotation.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Annotation.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Annotation.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Annotation.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Annotation.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Annotation.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Annotation.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Annotation.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Annotation.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Annotation.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Annotation.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Annotation.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Annotation.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Annotation.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Annotation.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Annotation.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Annotation.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Annotation.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Annotation.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Annotation.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Annotation.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Annotation.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Annotation.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Annotation.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Annotation.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Annotation.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Annotation.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":256,\"name\":\"ArticulationStruct\",\"url\":\"interfaces/ArticulationStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"interfaces/ArticulationStruct.html#code\",\"classes\":\"\",\"parent\":\"ArticulationStruct\"},{\"kind\":1024,\"name\":\"aboveCode\",\"url\":\"interfaces/ArticulationStruct.html#aboveCode\",\"classes\":\"\",\"parent\":\"ArticulationStruct\"},{\"kind\":1024,\"name\":\"belowCode\",\"url\":\"interfaces/ArticulationStruct.html#belowCode\",\"classes\":\"\",\"parent\":\"ArticulationStruct\"},{\"kind\":1024,\"name\":\"between_lines\",\"url\":\"interfaces/ArticulationStruct.html#between_lines\",\"classes\":\"\",\"parent\":\"ArticulationStruct\"},{\"kind\":128,\"name\":\"Articulation\",\"url\":\"classes/Articulation.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Articulation.html#DEBUG\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Articulation.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Articulation.html#format\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"easyScoreHook\",\"url\":\"classes/Articulation.html#easyScoreHook\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Articulation.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Articulation.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Articulation.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Articulation.html#constructor\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/Articulation.html#type\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Articulation.html#render_options\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Articulation.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Articulation.render_options\"},{\"kind\":1024,\"name\":\"font_scale\",\"url\":\"classes/Articulation.html#render_options.__type.font_scale\",\"classes\":\"\",\"parent\":\"Articulation.render_options.__type\"},{\"kind\":2048,\"name\":\"setBetweenLines\",\"url\":\"classes/Articulation.html#setBetweenLines\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Articulation.html#draw\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Articulation.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Articulation.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Articulation.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Articulation.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Articulation.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Articulation.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Articulation.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Articulation.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Articulation.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Articulation.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Articulation.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Articulation.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Articulation.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Articulation.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Articulation.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Articulation.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Articulation.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Articulation.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Articulation.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Articulation.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Articulation.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Articulation.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Articulation.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Articulation.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Articulation.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Articulation.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Articulation.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Articulation.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Articulation.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Articulation.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Articulation.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Articulation.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Articulation.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Articulation.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Articulation.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Articulation.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Articulation.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Articulation.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Articulation.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Articulation.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Articulation.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Articulation.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Articulation.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Articulation.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Articulation.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Articulation.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Articulation.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Articulation.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Articulation.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Articulation.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Articulation.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Articulation.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Articulation.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Articulation.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":128,\"name\":\"BarNote\",\"url\":\"classes/BarNote.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/BarNote.html#DEBUG\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/BarNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/BarNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/BarNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/BarNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/BarNote.html#constructor\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getType\",\"url\":\"classes/BarNote.html#getType\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setType\",\"url\":\"classes/BarNote.html#setType\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/BarNote.html#addToModifierContext\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/BarNote.html#preFormat\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/BarNote.html#draw-1\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/BarNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/BarNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/BarNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/BarNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/BarNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"BarNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/BarNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/BarNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/BarNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/BarNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/BarNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/BarNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/BarNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/BarNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/BarNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/BarNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/BarNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/BarNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/BarNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/BarNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/BarNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/BarNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/BarNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/BarNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/BarNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/BarNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/BarNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/BarNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/BarNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/BarNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/BarNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/BarNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/BarNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/BarNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/BarNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/BarNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/BarNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/BarNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/BarNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/BarNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/BarNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/BarNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/BarNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/BarNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/BarNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/BarNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/BarNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/BarNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/BarNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/BarNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/BarNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/BarNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/BarNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/BarNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/BarNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"BarNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/BarNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"BarNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/BarNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"BarNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/BarNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/BarNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/BarNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/BarNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/BarNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/BarNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/BarNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/BarNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/BarNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/BarNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/BarNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/BarNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/BarNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/BarNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/BarNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/BarNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/BarNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/BarNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/BarNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/BarNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/BarNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/BarNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/BarNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/BarNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/BarNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/BarNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/BarNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/BarNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/BarNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/BarNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/BarNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/BarNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/BarNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/BarNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/BarNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/BarNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/BarNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/BarNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/BarNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/BarNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/BarNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/BarNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/BarNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/BarNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/BarNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/BarNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/BarNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/BarNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/BarNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/BarNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/BarNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/BarNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/BarNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/BarNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/BarNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/BarNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/BarNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/BarNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/BarNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/BarNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/BarNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/BarNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/BarNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/BarNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/BarNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/BarNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/BarNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/BarNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/BarNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/BarNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/BarNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/BarNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/BarNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/BarNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/BarNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":32,\"name\":\"BEAM_LEFT\",\"url\":\"variables/BEAM_LEFT.html\",\"classes\":\"\"},{\"kind\":32,\"name\":\"BEAM_RIGHT\",\"url\":\"variables/BEAM_RIGHT.html\",\"classes\":\"\"},{\"kind\":32,\"name\":\"BEAM_BOTH\",\"url\":\"variables/BEAM_BOTH.html\",\"classes\":\"\"},{\"kind\":4194304,\"name\":\"PartialBeamDirection\",\"url\":\"types/PartialBeamDirection.html\",\"classes\":\"\"},{\"kind\":128,\"name\":\"Beam\",\"url\":\"classes/Beam.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Beam.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getDefaultBeamGroups\",\"url\":\"classes/Beam.html#getDefaultBeamGroups\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"applyAndGetBeams\",\"url\":\"classes/Beam.html#applyAndGetBeams\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"generateBeams\",\"url\":\"classes/Beam.html#generateBeams\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Beam.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Beam.html#constructor\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Beam.html#render_options\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Beam.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Beam.render_options\"},{\"kind\":1024,\"name\":\"flat_beam_offset\",\"url\":\"classes/Beam.html#render_options.__type.flat_beam_offset\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"flat_beams\",\"url\":\"classes/Beam.html#render_options.__type.flat_beams\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"secondary_break_ticks\",\"url\":\"classes/Beam.html#render_options.__type.secondary_break_ticks\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"show_stemlets\",\"url\":\"classes/Beam.html#render_options.__type.show_stemlets\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"beam_width\",\"url\":\"classes/Beam.html#render_options.__type.beam_width\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"max_slope\",\"url\":\"classes/Beam.html#render_options.__type.max_slope\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"min_slope\",\"url\":\"classes/Beam.html#render_options.__type.min_slope\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"slope_iterations\",\"url\":\"classes/Beam.html#render_options.__type.slope_iterations\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"slope_cost\",\"url\":\"classes/Beam.html#render_options.__type.slope_cost\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"stemlet_extension\",\"url\":\"classes/Beam.html#render_options.__type.stemlet_extension\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"partial_beam_length\",\"url\":\"classes/Beam.html#render_options.__type.partial_beam_length\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"min_flat_beam_offset\",\"url\":\"classes/Beam.html#render_options.__type.min_flat_beam_offset\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"notes\",\"url\":\"classes/Beam.html#notes\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":1024,\"name\":\"postFormatted\",\"url\":\"classes/Beam.html#postFormatted\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":1024,\"name\":\"slope\",\"url\":\"classes/Beam.html#slope\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/Beam.html#getStemDirection\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getNotes\",\"url\":\"classes/Beam.html#getNotes\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/Beam.html#getBeamCount\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"breakSecondaryAt\",\"url\":\"classes/Beam.html#breakSecondaryAt\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setPartialBeamSideAt\",\"url\":\"classes/Beam.html#setPartialBeamSideAt\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"unsetPartialBeamSideAt\",\"url\":\"classes/Beam.html#unsetPartialBeamSideAt\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getSlopeY\",\"url\":\"classes/Beam.html#getSlopeY\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"calculateSlope\",\"url\":\"classes/Beam.html#calculateSlope\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"calculateFlatSlope\",\"url\":\"classes/Beam.html#calculateFlatSlope\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getBeamYToDraw\",\"url\":\"classes/Beam.html#getBeamYToDraw\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"applyStemExtensions\",\"url\":\"classes/Beam.html#applyStemExtensions\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"lookupBeamDirection\",\"url\":\"classes/Beam.html#lookupBeamDirection\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getBeamLines\",\"url\":\"classes/Beam.html#getBeamLines\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/Beam.html#preFormat\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/Beam.html#postFormat\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Beam.html#draw\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Beam.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Beam.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Beam.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Beam.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Beam.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Beam.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Beam.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Beam.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Beam.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Beam.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Beam.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Beam.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Beam.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Beam.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Beam.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Beam.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Beam.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Beam.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Beam.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Beam.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Beam.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Beam.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Beam.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Beam.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Beam.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Beam.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Beam.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Beam.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Beam.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Beam.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Beam.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Beam.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Beam.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Beam.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":256,\"name\":\"BendPhrase\",\"url\":\"interfaces/BendPhrase.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"interfaces/BendPhrase.html#x\",\"classes\":\"\",\"parent\":\"BendPhrase\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/BendPhrase.html#type\",\"classes\":\"\",\"parent\":\"BendPhrase\"},{\"kind\":1024,\"name\":\"text\",\"url\":\"interfaces/BendPhrase.html#text\",\"classes\":\"\",\"parent\":\"BendPhrase\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/BendPhrase.html#width\",\"classes\":\"\",\"parent\":\"BendPhrase\"},{\"kind\":1024,\"name\":\"draw_width\",\"url\":\"interfaces/BendPhrase.html#draw_width\",\"classes\":\"\",\"parent\":\"BendPhrase\"},{\"kind\":128,\"name\":\"Bend\",\"url\":\"classes/Bend.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Bend.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"UP\",\"url\":\"classes/Bend.html#UP\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"DOWN\",\"url\":\"classes/Bend.html#DOWN\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Bend.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Bend.html#format\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Bend.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Bend.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Bend.html#constructor\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Bend.html#render_options\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Bend.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Bend.render_options\"},{\"kind\":1024,\"name\":\"line_width\",\"url\":\"classes/Bend.html#render_options.__type.line_width\",\"classes\":\"\",\"parent\":\"Bend.render_options.__type\"},{\"kind\":1024,\"name\":\"release_width\",\"url\":\"classes/Bend.html#render_options.__type.release_width\",\"classes\":\"\",\"parent\":\"Bend.render_options.__type\"},{\"kind\":1024,\"name\":\"bend_width\",\"url\":\"classes/Bend.html#render_options.__type.bend_width\",\"classes\":\"\",\"parent\":\"Bend.render_options.__type\"},{\"kind\":1024,\"name\":\"line_style\",\"url\":\"classes/Bend.html#render_options.__type.line_style\",\"classes\":\"\",\"parent\":\"Bend.render_options.__type\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Bend.html#setXShift\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setTap\",\"url\":\"classes/Bend.html#setTap\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getText\",\"url\":\"classes/Bend.html#getText\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getTextHeight\",\"url\":\"classes/Bend.html#getTextHeight\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Bend.html#draw\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Bend.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Bend.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Bend.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Bend.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Bend.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Bend.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Bend.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Bend.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Bend.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Bend.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Bend.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Bend.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Bend.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Bend.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Bend.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Bend.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Bend.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Bend.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Bend.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Bend.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Bend.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Bend.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Bend.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Bend.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Bend.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Bend.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Bend.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Bend.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Bend.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Bend.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Bend.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Bend.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Bend.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Bend.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Bend.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Bend.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Bend.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Bend.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Bend.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Bend.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Bend.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Bend.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Bend.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Bend.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Bend.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Bend.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Bend.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Bend.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Bend.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Bend.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Bend.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Bend.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Bend.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":256,\"name\":\"Bounds\",\"url\":\"interfaces/Bounds.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"interfaces/Bounds.html#x\",\"classes\":\"\",\"parent\":\"Bounds\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"interfaces/Bounds.html#y\",\"classes\":\"\",\"parent\":\"Bounds\"},{\"kind\":1024,\"name\":\"w\",\"url\":\"interfaces/Bounds.html#w\",\"classes\":\"\",\"parent\":\"Bounds\"},{\"kind\":1024,\"name\":\"h\",\"url\":\"interfaces/Bounds.html#h\",\"classes\":\"\",\"parent\":\"Bounds\"},{\"kind\":128,\"name\":\"BoundingBox\",\"url\":\"classes/BoundingBox.html\",\"classes\":\"\"},{\"kind\":2048,\"name\":\"copy\",\"url\":\"classes/BoundingBox.html#copy\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/BoundingBox.html#constructor\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/BoundingBox.html#x\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/BoundingBox.html#y\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":1024,\"name\":\"w\",\"url\":\"classes/BoundingBox.html#w\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":1024,\"name\":\"h\",\"url\":\"classes/BoundingBox.html#h\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/BoundingBox.html#getX\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"getY\",\"url\":\"classes/BoundingBox.html#getY\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"getW\",\"url\":\"classes/BoundingBox.html#getW\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"getH\",\"url\":\"classes/BoundingBox.html#getH\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/BoundingBox.html#setX\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"setY\",\"url\":\"classes/BoundingBox.html#setY\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"setW\",\"url\":\"classes/BoundingBox.html#setW\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"setH\",\"url\":\"classes/BoundingBox.html#setH\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"move\",\"url\":\"classes/BoundingBox.html#move\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"clone\",\"url\":\"classes/BoundingBox.html#clone\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"mergeWith\",\"url\":\"classes/BoundingBox.html#mergeWith\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":128,\"name\":\"BoundingBoxComputation\",\"url\":\"classes/BoundingBoxComputation.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/BoundingBoxComputation.html#constructor\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"getX1\",\"url\":\"classes/BoundingBoxComputation.html#getX1\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"getY1\",\"url\":\"classes/BoundingBoxComputation.html#getY1\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"width\",\"url\":\"classes/BoundingBoxComputation.html#width\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"height\",\"url\":\"classes/BoundingBoxComputation.html#height\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"addPoint\",\"url\":\"classes/BoundingBoxComputation.html#addPoint\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"addX\",\"url\":\"classes/BoundingBoxComputation.html#addX\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"addY\",\"url\":\"classes/BoundingBoxComputation.html#addY\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"addQuadraticCurve\",\"url\":\"classes/BoundingBoxComputation.html#addQuadraticCurve\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"addBezierCurve\",\"url\":\"classes/BoundingBoxComputation.html#addBezierCurve\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":128,\"name\":\"CanvasContext\",\"url\":\"classes/CanvasContext.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"WIDTH\",\"url\":\"classes/CanvasContext.html#WIDTH\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":262144,\"name\":\"HEIGHT\",\"url\":\"classes/CanvasContext.html#HEIGHT\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":262144,\"name\":\"CANVAS_BROWSER_SIZE_LIMIT\",\"url\":\"classes/CanvasContext.html#CANVAS_BROWSER_SIZE_LIMIT\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"sanitizeCanvasDims\",\"url\":\"classes/CanvasContext.html#sanitizeCanvasDims\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/CanvasContext.html#CATEGORY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CanvasContext\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/CanvasContext.html#constructor\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":1024,\"name\":\"context2D\",\"url\":\"classes/CanvasContext.html#context2D\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":1024,\"name\":\"canvas\",\"url\":\"classes/CanvasContext.html#canvas\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":1024,\"name\":\"textHeight\",\"url\":\"classes/CanvasContext.html#textHeight\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"clear\",\"url\":\"classes/CanvasContext.html#clear\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"openGroup\",\"url\":\"classes/CanvasContext.html#openGroup\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"closeGroup\",\"url\":\"classes/CanvasContext.html#closeGroup\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"add\",\"url\":\"classes/CanvasContext.html#add\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setFillStyle\",\"url\":\"classes/CanvasContext.html#setFillStyle\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setBackgroundFillStyle\",\"url\":\"classes/CanvasContext.html#setBackgroundFillStyle\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setStrokeStyle\",\"url\":\"classes/CanvasContext.html#setStrokeStyle\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setShadowColor\",\"url\":\"classes/CanvasContext.html#setShadowColor\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setShadowBlur\",\"url\":\"classes/CanvasContext.html#setShadowBlur\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setLineWidth\",\"url\":\"classes/CanvasContext.html#setLineWidth\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setLineCap\",\"url\":\"classes/CanvasContext.html#setLineCap\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setLineDash\",\"url\":\"classes/CanvasContext.html#setLineDash\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"scale\",\"url\":\"classes/CanvasContext.html#scale\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"resize\",\"url\":\"classes/CanvasContext.html#resize\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"rect\",\"url\":\"classes/CanvasContext.html#rect\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"fillRect\",\"url\":\"classes/CanvasContext.html#fillRect\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"clearRect\",\"url\":\"classes/CanvasContext.html#clearRect\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"beginPath\",\"url\":\"classes/CanvasContext.html#beginPath\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"moveTo\",\"url\":\"classes/CanvasContext.html#moveTo\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"lineTo\",\"url\":\"classes/CanvasContext.html#lineTo\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"bezierCurveTo\",\"url\":\"classes/CanvasContext.html#bezierCurveTo\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"quadraticCurveTo\",\"url\":\"classes/CanvasContext.html#quadraticCurveTo\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"arc\",\"url\":\"classes/CanvasContext.html#arc\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"fill\",\"url\":\"classes/CanvasContext.html#fill\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"stroke\",\"url\":\"classes/CanvasContext.html#stroke\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"closePath\",\"url\":\"classes/CanvasContext.html#closePath\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"measureText\",\"url\":\"classes/CanvasContext.html#measureText\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"fillText\",\"url\":\"classes/CanvasContext.html#fillText\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"save\",\"url\":\"classes/CanvasContext.html#save\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"restore\",\"url\":\"classes/CanvasContext.html#restore\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":262144,\"name\":\"fillStyle\",\"url\":\"classes/CanvasContext.html#fillStyle\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":262144,\"name\":\"strokeStyle\",\"url\":\"classes/CanvasContext.html#strokeStyle\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/CanvasContext.html#setFont\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/CanvasContext.html#getFont\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/CanvasContext.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setRawFont\",\"url\":\"classes/CanvasContext.html#setRawFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CanvasContext\"},{\"kind\":256,\"name\":\"ChordSymbolBlock\",\"url\":\"interfaces/ChordSymbolBlock.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"text\",\"url\":\"interfaces/ChordSymbolBlock.html#text\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"symbolType\",\"url\":\"interfaces/ChordSymbolBlock.html#symbolType\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"symbolModifier\",\"url\":\"interfaces/ChordSymbolBlock.html#symbolModifier\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"xShift\",\"url\":\"interfaces/ChordSymbolBlock.html#xShift\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"yShift\",\"url\":\"interfaces/ChordSymbolBlock.html#yShift\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"vAlign\",\"url\":\"interfaces/ChordSymbolBlock.html#vAlign\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/ChordSymbolBlock.html#width\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"glyph\",\"url\":\"interfaces/ChordSymbolBlock.html#glyph\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":256,\"name\":\"ChordSymbolGlyphMetrics\",\"url\":\"interfaces/ChordSymbolGlyphMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"leftSideBearing\",\"url\":\"interfaces/ChordSymbolGlyphMetrics.html#leftSideBearing\",\"classes\":\"\",\"parent\":\"ChordSymbolGlyphMetrics\"},{\"kind\":1024,\"name\":\"advanceWidth\",\"url\":\"interfaces/ChordSymbolGlyphMetrics.html#advanceWidth\",\"classes\":\"\",\"parent\":\"ChordSymbolGlyphMetrics\"},{\"kind\":1024,\"name\":\"yOffset\",\"url\":\"interfaces/ChordSymbolGlyphMetrics.html#yOffset\",\"classes\":\"\",\"parent\":\"ChordSymbolGlyphMetrics\"},{\"kind\":256,\"name\":\"ChordSymbolMetrics\",\"url\":\"interfaces/ChordSymbolMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"global\",\"url\":\"interfaces/ChordSymbolMetrics.html#global\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global\"},{\"kind\":1024,\"name\":\"superscriptOffset\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.superscriptOffset\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"subscriptOffset\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.subscriptOffset\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"kerningOffset\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.kerningOffset\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"lowerKerningText\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.lowerKerningText\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"upperKerningText\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.upperKerningText\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"spacing\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.spacing\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"superSubRatio\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.superSubRatio\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"glyphs\",\"url\":\"interfaces/ChordSymbolMetrics.html#glyphs\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics\"},{\"kind\":8,\"name\":\"ChordSymbolHorizontalJustify\",\"url\":\"enums/ChordSymbolHorizontalJustify.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"LEFT\",\"url\":\"enums/ChordSymbolHorizontalJustify.html#LEFT\",\"classes\":\"\",\"parent\":\"ChordSymbolHorizontalJustify\"},{\"kind\":16,\"name\":\"CENTER\",\"url\":\"enums/ChordSymbolHorizontalJustify.html#CENTER\",\"classes\":\"\",\"parent\":\"ChordSymbolHorizontalJustify\"},{\"kind\":16,\"name\":\"RIGHT\",\"url\":\"enums/ChordSymbolHorizontalJustify.html#RIGHT\",\"classes\":\"\",\"parent\":\"ChordSymbolHorizontalJustify\"},{\"kind\":16,\"name\":\"CENTER_STEM\",\"url\":\"enums/ChordSymbolHorizontalJustify.html#CENTER_STEM\",\"classes\":\"\",\"parent\":\"ChordSymbolHorizontalJustify\"},{\"kind\":8,\"name\":\"ChordSymbolVerticalJustify\",\"url\":\"enums/ChordSymbolVerticalJustify.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"TOP\",\"url\":\"enums/ChordSymbolVerticalJustify.html#TOP\",\"classes\":\"\",\"parent\":\"ChordSymbolVerticalJustify\"},{\"kind\":16,\"name\":\"BOTTOM\",\"url\":\"enums/ChordSymbolVerticalJustify.html#BOTTOM\",\"classes\":\"\",\"parent\":\"ChordSymbolVerticalJustify\"},{\"kind\":8,\"name\":\"SymbolTypes\",\"url\":\"enums/SymbolTypes.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"GLYPH\",\"url\":\"enums/SymbolTypes.html#GLYPH\",\"classes\":\"\",\"parent\":\"SymbolTypes\"},{\"kind\":16,\"name\":\"TEXT\",\"url\":\"enums/SymbolTypes.html#TEXT\",\"classes\":\"\",\"parent\":\"SymbolTypes\"},{\"kind\":16,\"name\":\"LINE\",\"url\":\"enums/SymbolTypes.html#LINE\",\"classes\":\"\",\"parent\":\"SymbolTypes\"},{\"kind\":8,\"name\":\"SymbolModifiers\",\"url\":\"enums/SymbolModifiers.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"NONE\",\"url\":\"enums/SymbolModifiers.html#NONE\",\"classes\":\"\",\"parent\":\"SymbolModifiers\"},{\"kind\":16,\"name\":\"SUBSCRIPT\",\"url\":\"enums/SymbolModifiers.html#SUBSCRIPT\",\"classes\":\"\",\"parent\":\"SymbolModifiers\"},{\"kind\":16,\"name\":\"SUPERSCRIPT\",\"url\":\"enums/SymbolModifiers.html#SUPERSCRIPT\",\"classes\":\"\",\"parent\":\"SymbolModifiers\"},{\"kind\":128,\"name\":\"ChordSymbol\",\"url\":\"classes/ChordSymbol.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/ChordSymbol.html#DEBUG\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/ChordSymbol.html#CATEGORY\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"HorizontalJustify\",\"url\":\"classes/ChordSymbol.html#HorizontalJustify\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"HorizontalJustifyString\",\"url\":\"classes/ChordSymbol.html#HorizontalJustifyString\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"VerticalJustify\",\"url\":\"classes/ChordSymbol.html#VerticalJustify\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"VerticalJustifyString\",\"url\":\"classes/ChordSymbol.html#VerticalJustifyString\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"superSubRatio\",\"url\":\"classes/ChordSymbol.html#superSubRatio\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"NO_TEXT_FORMAT\",\"url\":\"classes/ChordSymbol.html#NO_TEXT_FORMAT\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getMetricForGlyph\",\"url\":\"classes/ChordSymbol.html#getMetricForGlyph\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"engravingFontResolution\",\"url\":\"classes/ChordSymbol.html#engravingFontResolution\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"spacingBetweenBlocks\",\"url\":\"classes/ChordSymbol.html#spacingBetweenBlocks\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getWidthForGlyph\",\"url\":\"classes/ChordSymbol.html#getWidthForGlyph\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getYShiftForGlyph\",\"url\":\"classes/ChordSymbol.html#getYShiftForGlyph\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getXShiftForGlyph\",\"url\":\"classes/ChordSymbol.html#getXShiftForGlyph\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"superscriptOffset\",\"url\":\"classes/ChordSymbol.html#superscriptOffset-2\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"subscriptOffset\",\"url\":\"classes/ChordSymbol.html#subscriptOffset-2\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"kerningOffset\",\"url\":\"classes/ChordSymbol.html#kerningOffset\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"glyphs\",\"url\":\"classes/ChordSymbol.html#glyphs\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"symbolTypes\",\"url\":\"classes/ChordSymbol.html#symbolTypes\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"symbolModifiers\",\"url\":\"classes/ChordSymbol.html#symbolModifiers\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"metrics\",\"url\":\"classes/ChordSymbol.html#metrics\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"lowerKerningText\",\"url\":\"classes/ChordSymbol.html#lowerKerningText\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"upperKerningText\",\"url\":\"classes/ChordSymbol.html#upperKerningText\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"isSuperscript\",\"url\":\"classes/ChordSymbol.html#isSuperscript\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"isSubscript\",\"url\":\"classes/ChordSymbol.html#isSubscript\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"minPadding\",\"url\":\"classes/ChordSymbol.html#minPadding\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/ChordSymbol.html#format\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"TEXT_FONT\",\"url\":\"classes/ChordSymbol.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/ChordSymbol.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/ChordSymbol.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ChordSymbol.html#constructor\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"superscriptOffset\",\"url\":\"classes/ChordSymbol.html#superscriptOffset\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"subscriptOffset\",\"url\":\"classes/ChordSymbol.html#subscriptOffset\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setReportWidth\",\"url\":\"classes/ChordSymbol.html#setReportWidth\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getReportWidth\",\"url\":\"classes/ChordSymbol.html#getReportWidth\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"updateOverBarAdjustments\",\"url\":\"classes/ChordSymbol.html#updateOverBarAdjustments\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"updateKerningAdjustments\",\"url\":\"classes/ChordSymbol.html#updateKerningAdjustments\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getKerningAdjustment\",\"url\":\"classes/ChordSymbol.html#getKerningAdjustment\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getSymbolBlock\",\"url\":\"classes/ChordSymbol.html#getSymbolBlock\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addSymbolBlock\",\"url\":\"classes/ChordSymbol.html#addSymbolBlock\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addText\",\"url\":\"classes/ChordSymbol.html#addText\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addTextSuperscript\",\"url\":\"classes/ChordSymbol.html#addTextSuperscript\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addTextSubscript\",\"url\":\"classes/ChordSymbol.html#addTextSubscript\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addGlyphSuperscript\",\"url\":\"classes/ChordSymbol.html#addGlyphSuperscript\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addGlyph\",\"url\":\"classes/ChordSymbol.html#addGlyph\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addGlyphOrText\",\"url\":\"classes/ChordSymbol.html#addGlyphOrText\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addLine\",\"url\":\"classes/ChordSymbol.html#addLine\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/ChordSymbol.html#setFont\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setEnableKerning\",\"url\":\"classes/ChordSymbol.html#setEnableKerning\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setVertical\",\"url\":\"classes/ChordSymbol.html#setVertical\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getVertical\",\"url\":\"classes/ChordSymbol.html#getVertical\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setHorizontal\",\"url\":\"classes/ChordSymbol.html#setHorizontal\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getHorizontal\",\"url\":\"classes/ChordSymbol.html#getHorizontal\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/ChordSymbol.html#getWidth\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getYOffsetForText\",\"url\":\"classes/ChordSymbol.html#getYOffsetForText\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/ChordSymbol.html#draw\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/ChordSymbol.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/ChordSymbol.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/ChordSymbol.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/ChordSymbol.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/ChordSymbol.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/ChordSymbol.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/ChordSymbol.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/ChordSymbol.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/ChordSymbol.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/ChordSymbol.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/ChordSymbol.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/ChordSymbol.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/ChordSymbol.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/ChordSymbol.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/ChordSymbol.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/ChordSymbol.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/ChordSymbol.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/ChordSymbol.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/ChordSymbol.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/ChordSymbol.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/ChordSymbol.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/ChordSymbol.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/ChordSymbol.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/ChordSymbol.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/ChordSymbol.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/ChordSymbol.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/ChordSymbol.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/ChordSymbol.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/ChordSymbol.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/ChordSymbol.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/ChordSymbol.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/ChordSymbol.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/ChordSymbol.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/ChordSymbol.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/ChordSymbol.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/ChordSymbol.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/ChordSymbol.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/ChordSymbol.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/ChordSymbol.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/ChordSymbol.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/ChordSymbol.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/ChordSymbol.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/ChordSymbol.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/ChordSymbol.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/ChordSymbol.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/ChordSymbol.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/ChordSymbol.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/ChordSymbol.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/ChordSymbol.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/ChordSymbol.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/ChordSymbol.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/ChordSymbol.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":256,\"name\":\"ClefType\",\"url\":\"interfaces/ClefType.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"interfaces/ClefType.html#code\",\"classes\":\"\",\"parent\":\"ClefType\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/ClefType.html#line\",\"classes\":\"\",\"parent\":\"ClefType\"},{\"kind\":256,\"name\":\"ClefAnnotatiomType\",\"url\":\"interfaces/ClefAnnotatiomType.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"x_shift\",\"url\":\"interfaces/ClefAnnotatiomType.html#x_shift\",\"classes\":\"\",\"parent\":\"ClefAnnotatiomType\"},{\"kind\":1024,\"name\":\"point\",\"url\":\"interfaces/ClefAnnotatiomType.html#point\",\"classes\":\"\",\"parent\":\"ClefAnnotatiomType\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"interfaces/ClefAnnotatiomType.html#code\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefAnnotatiomType\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/ClefAnnotatiomType.html#line\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefAnnotatiomType\"},{\"kind\":256,\"name\":\"ClefMetrics\",\"url\":\"interfaces/ClefMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/ClefMetrics.html#width\",\"classes\":\"\",\"parent\":\"ClefMetrics\"},{\"kind\":1024,\"name\":\"annotations\",\"url\":\"interfaces/ClefMetrics.html#annotations\",\"classes\":\"\",\"parent\":\"ClefMetrics\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ClefMetrics.html#annotations.__type\",\"classes\":\"\",\"parent\":\"ClefMetrics.annotations\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ClefMetrics.html#annotations.__type.__index.__type-1\",\"classes\":\"\",\"parent\":\"ClefMetrics.annotations.__type.__index\"},{\"kind\":128,\"name\":\"Clef\",\"url\":\"classes/Clef.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Clef.html#DEBUG\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Clef.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"types\",\"url\":\"classes/Clef.html#types\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"annotationSmufl\",\"url\":\"classes/Clef.html#annotationSmufl\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/Clef.html#getPoint\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Clef.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Clef.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Clef.html#constructor\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":1024,\"name\":\"annotation\",\"url\":\"classes/Clef.html#annotation\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":1024,\"name\":\"clef\",\"url\":\"classes/Clef.html#clef\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setType\",\"url\":\"classes/Clef.html#setType\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Clef.html#getWidth\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Clef.html#setStave\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Clef.html#draw\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Clef.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Clef.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Clef.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Clef.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Clef.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Clef.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/Clef.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/Clef.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/Clef.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/Clef.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/Clef.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/Clef.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Clef.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Clef.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Clef.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Clef.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Clef.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Clef.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Clef.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Clef.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Clef.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Clef.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Clef.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Clef.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Clef.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Clef.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Clef.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Clef.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Clef.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Clef.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Clef.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Clef.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Clef.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Clef.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Clef.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Clef.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Clef.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Clef.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Clef.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Clef.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Clef.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Clef.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Clef.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Clef.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Clef.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Clef.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":128,\"name\":\"ClefNote\",\"url\":\"classes/ClefNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/ClefNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/ClefNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/ClefNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/ClefNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ClefNote.html#constructor\",\"classes\":\"\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setType\",\"url\":\"classes/ClefNote.html#setType\",\"classes\":\"\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getClef\",\"url\":\"classes/ClefNote.html#getClef\",\"classes\":\"\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/ClefNote.html#preFormat\",\"classes\":\"\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/ClefNote.html#draw-1\",\"classes\":\"\",\"parent\":\"ClefNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/ClefNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/ClefNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/ClefNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/ClefNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/ClefNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"ClefNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/ClefNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/ClefNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/ClefNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/ClefNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/ClefNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/ClefNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/ClefNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/ClefNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/ClefNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/ClefNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/ClefNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/ClefNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/ClefNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/ClefNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/ClefNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/ClefNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/ClefNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/ClefNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/ClefNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/ClefNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/ClefNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/ClefNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/ClefNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/ClefNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/ClefNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/ClefNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/ClefNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/ClefNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/ClefNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/ClefNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/ClefNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/ClefNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/ClefNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/ClefNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/ClefNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/ClefNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/ClefNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/ClefNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/ClefNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/ClefNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/ClefNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/ClefNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/ClefNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/ClefNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/ClefNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/ClefNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/ClefNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/ClefNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/ClefNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"ClefNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/ClefNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"ClefNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/ClefNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"ClefNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/ClefNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/ClefNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/ClefNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/ClefNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/ClefNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/ClefNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/ClefNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/ClefNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/ClefNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/ClefNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/ClefNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/ClefNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/ClefNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/ClefNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/ClefNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/ClefNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/ClefNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/ClefNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/ClefNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/ClefNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/ClefNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/ClefNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/ClefNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/ClefNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/ClefNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/ClefNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/ClefNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/ClefNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/ClefNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/ClefNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/ClefNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/ClefNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/ClefNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/ClefNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/ClefNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/ClefNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/ClefNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/ClefNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/ClefNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/ClefNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/ClefNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/ClefNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/ClefNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/ClefNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/ClefNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/ClefNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/ClefNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/ClefNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/ClefNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/ClefNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/ClefNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/ClefNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/ClefNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/ClefNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/ClefNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/ClefNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/ClefNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/ClefNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/ClefNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/ClefNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/ClefNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/ClefNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/ClefNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/ClefNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/ClefNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/ClefNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/ClefNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/ClefNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/ClefNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/ClefNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/ClefNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/ClefNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/ClefNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/ClefNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/ClefNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/ClefNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":256,\"name\":\"CrescendoParams\",\"url\":\"interfaces/CrescendoParams.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"reverse\",\"url\":\"interfaces/CrescendoParams.html#reverse\",\"classes\":\"\",\"parent\":\"CrescendoParams\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/CrescendoParams.html#height\",\"classes\":\"\",\"parent\":\"CrescendoParams\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"interfaces/CrescendoParams.html#y\",\"classes\":\"\",\"parent\":\"CrescendoParams\"},{\"kind\":1024,\"name\":\"end_x\",\"url\":\"interfaces/CrescendoParams.html#end_x\",\"classes\":\"\",\"parent\":\"CrescendoParams\"},{\"kind\":1024,\"name\":\"begin_x\",\"url\":\"interfaces/CrescendoParams.html#begin_x\",\"classes\":\"\",\"parent\":\"CrescendoParams\"},{\"kind\":128,\"name\":\"Crescendo\",\"url\":\"classes/Crescendo.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Crescendo.html#DEBUG\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Crescendo.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/Crescendo.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/Crescendo.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Crescendo.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Crescendo.html#constructor\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/Crescendo.html#setLine\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setHeight\",\"url\":\"classes/Crescendo.html#setHeight\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setDecrescendo\",\"url\":\"classes/Crescendo.html#setDecrescendo\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/Crescendo.html#preFormat\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Crescendo.html#draw-1\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/Crescendo.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/Crescendo.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/Crescendo.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Crescendo.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Crescendo.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Crescendo.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/Crescendo.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/Crescendo.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/Crescendo.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/Crescendo.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/Crescendo.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/Crescendo.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/Crescendo.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/Crescendo.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/Crescendo.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/Crescendo.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/Crescendo.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/Crescendo.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/Crescendo.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/Crescendo.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/Crescendo.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/Crescendo.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/Crescendo.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Crescendo.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Crescendo.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Crescendo.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/Crescendo.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/Crescendo.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/Crescendo.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/Crescendo.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/Crescendo.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/Crescendo.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/Crescendo.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/Crescendo.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/Crescendo.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/Crescendo.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/Crescendo.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/Crescendo.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/Crescendo.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/Crescendo.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/Crescendo.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/Crescendo.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/Crescendo.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/Crescendo.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/Crescendo.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/Crescendo.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/Crescendo.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/Crescendo.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/Crescendo.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/Crescendo.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/Crescendo.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/Crescendo.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/Crescendo.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/Crescendo.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Crescendo.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"Crescendo.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/Crescendo.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"Crescendo.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/Crescendo.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"Crescendo.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/Crescendo.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/Crescendo.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/Crescendo.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/Crescendo.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/Crescendo.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/Crescendo.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/Crescendo.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/Crescendo.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/Crescendo.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/Crescendo.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/Crescendo.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Crescendo.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/Crescendo.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/Crescendo.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Crescendo.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Crescendo.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Crescendo.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Crescendo.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Crescendo.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/Crescendo.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/Crescendo.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/Crescendo.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/Crescendo.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/Crescendo.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/Crescendo.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/Crescendo.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/Crescendo.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/Crescendo.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/Crescendo.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/Crescendo.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/Crescendo.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/Crescendo.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/Crescendo.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/Crescendo.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/Crescendo.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/Crescendo.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/Crescendo.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/Crescendo.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/Crescendo.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Crescendo.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Crescendo.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Crescendo.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Crescendo.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Crescendo.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Crescendo.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Crescendo.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Crescendo.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Crescendo.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Crescendo.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Crescendo.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Crescendo.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Crescendo.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Crescendo.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Crescendo.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Crescendo.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Crescendo.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Crescendo.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Crescendo.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Crescendo.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Crescendo.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Crescendo.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Crescendo.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Crescendo.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Crescendo.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Crescendo.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Crescendo.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Crescendo.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Crescendo.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Crescendo.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Crescendo.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Crescendo.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Crescendo.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Crescendo.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Crescendo.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Crescendo.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Crescendo.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":256,\"name\":\"CurveOptions\",\"url\":\"interfaces/CurveOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"cps\",\"url\":\"interfaces/CurveOptions.html#cps\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":1024,\"name\":\"thickness\",\"url\":\"interfaces/CurveOptions.html#thickness\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":1024,\"name\":\"x_shift\",\"url\":\"interfaces/CurveOptions.html#x_shift\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"interfaces/CurveOptions.html#y_shift\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":1024,\"name\":\"position\",\"url\":\"interfaces/CurveOptions.html#position\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":1024,\"name\":\"position_end\",\"url\":\"interfaces/CurveOptions.html#position_end\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":1024,\"name\":\"invert\",\"url\":\"interfaces/CurveOptions.html#invert\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":8,\"name\":\"CurvePosition\",\"url\":\"enums/CurvePosition.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"NEAR_HEAD\",\"url\":\"enums/CurvePosition.html#NEAR_HEAD\",\"classes\":\"\",\"parent\":\"CurvePosition\"},{\"kind\":16,\"name\":\"NEAR_TOP\",\"url\":\"enums/CurvePosition.html#NEAR_TOP\",\"classes\":\"\",\"parent\":\"CurvePosition\"},{\"kind\":128,\"name\":\"Curve\",\"url\":\"classes/Curve.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Curve.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Curve.html#Position\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Curve.html#PositionString\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Curve.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Curve.html#constructor\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Curve.html#render_options\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setNotes\",\"url\":\"classes/Curve.html#setNotes\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"isPartial\",\"url\":\"classes/Curve.html#isPartial\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"renderCurve\",\"url\":\"classes/Curve.html#renderCurve\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Curve.html#draw\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Curve.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Curve.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Curve.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Curve.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Curve.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Curve.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Curve.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Curve.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Curve.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Curve.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Curve.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Curve.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Curve.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Curve.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Curve.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Curve.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Curve.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Curve.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Curve.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Curve.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Curve.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Curve.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Curve.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Curve.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Curve.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Curve.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Curve.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Curve.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Curve.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Curve.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Curve.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Curve.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Curve.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Curve.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":128,\"name\":\"Dot\",\"url\":\"classes/Dot.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Dot.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getDots\",\"url\":\"classes/Dot.html#getDots\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"buildAndAttach\",\"url\":\"classes/Dot.html#buildAndAttach\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Dot.html#format\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Dot.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Dot.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Dot.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Dot.html#constructor\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Dot.html#setNote\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setDotShiftY\",\"url\":\"classes/Dot.html#setDotShiftY\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Dot.html#draw\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Dot.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Dot.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Dot.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Dot.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Dot.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Dot.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Dot.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Dot.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Dot.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Dot.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Dot.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Dot.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Dot.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Dot.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Dot.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Dot.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Dot.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Dot.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Dot.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Dot.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Dot.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Dot.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Dot.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Dot.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Dot.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Dot.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Dot.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Dot.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Dot.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Dot.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Dot.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Dot.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Dot.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Dot.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Dot.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Dot.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Dot.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Dot.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Dot.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Dot.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Dot.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Dot.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Dot.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Dot.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Dot.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Dot.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Dot.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Dot.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Dot.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Dot.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Dot.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Dot.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Dot.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":4194304,\"name\":\"CommitHook\",\"url\":\"types/CommitHook.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/CommitHook.html#__type\",\"classes\":\"\",\"parent\":\"CommitHook\"},{\"kind\":128,\"name\":\"EasyScoreGrammar\",\"url\":\"classes/EasyScoreGrammar.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/EasyScoreGrammar.html#constructor\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":1024,\"name\":\"builder\",\"url\":\"classes/EasyScoreGrammar.html#builder\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"begin\",\"url\":\"classes/EasyScoreGrammar.html#begin\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"LINE\",\"url\":\"classes/EasyScoreGrammar.html#LINE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"PIECE\",\"url\":\"classes/EasyScoreGrammar.html#PIECE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"PIECES\",\"url\":\"classes/EasyScoreGrammar.html#PIECES\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"PARAMS\",\"url\":\"classes/EasyScoreGrammar.html#PARAMS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"CHORDORNOTE\",\"url\":\"classes/EasyScoreGrammar.html#CHORDORNOTE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"CHORD\",\"url\":\"classes/EasyScoreGrammar.html#CHORD\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"NOTES\",\"url\":\"classes/EasyScoreGrammar.html#NOTES\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"NOTE\",\"url\":\"classes/EasyScoreGrammar.html#NOTE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"SINGLENOTE\",\"url\":\"classes/EasyScoreGrammar.html#SINGLENOTE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"ACCIDENTAL\",\"url\":\"classes/EasyScoreGrammar.html#ACCIDENTAL\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"DOTS\",\"url\":\"classes/EasyScoreGrammar.html#DOTS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"TYPE\",\"url\":\"classes/EasyScoreGrammar.html#TYPE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"DURATION\",\"url\":\"classes/EasyScoreGrammar.html#DURATION\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"OPTS\",\"url\":\"classes/EasyScoreGrammar.html#OPTS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"KEYVALS\",\"url\":\"classes/EasyScoreGrammar.html#KEYVALS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"KEYVAL\",\"url\":\"classes/EasyScoreGrammar.html#KEYVAL\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"VAL\",\"url\":\"classes/EasyScoreGrammar.html#VAL\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"KEY\",\"url\":\"classes/EasyScoreGrammar.html#KEY\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"DVAL\",\"url\":\"classes/EasyScoreGrammar.html#DVAL\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"SVAL\",\"url\":\"classes/EasyScoreGrammar.html#SVAL\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"NOTENAME\",\"url\":\"classes/EasyScoreGrammar.html#NOTENAME\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"OCTAVE\",\"url\":\"classes/EasyScoreGrammar.html#OCTAVE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"ACCIDENTALS\",\"url\":\"classes/EasyScoreGrammar.html#ACCIDENTALS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"MICROTONES\",\"url\":\"classes/EasyScoreGrammar.html#MICROTONES\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"DURATIONS\",\"url\":\"classes/EasyScoreGrammar.html#DURATIONS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"TYPES\",\"url\":\"classes/EasyScoreGrammar.html#TYPES\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"LPAREN\",\"url\":\"classes/EasyScoreGrammar.html#LPAREN\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"RPAREN\",\"url\":\"classes/EasyScoreGrammar.html#RPAREN\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"COMMA\",\"url\":\"classes/EasyScoreGrammar.html#COMMA\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"DOT\",\"url\":\"classes/EasyScoreGrammar.html#DOT\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"SLASH\",\"url\":\"classes/EasyScoreGrammar.html#SLASH\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"MAYBESLASH\",\"url\":\"classes/EasyScoreGrammar.html#MAYBESLASH\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"EQUALS\",\"url\":\"classes/EasyScoreGrammar.html#EQUALS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"LBRACKET\",\"url\":\"classes/EasyScoreGrammar.html#LBRACKET\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"RBRACKET\",\"url\":\"classes/EasyScoreGrammar.html#RBRACKET\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"EOL\",\"url\":\"classes/EasyScoreGrammar.html#EOL\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":256,\"name\":\"NotePiece\",\"url\":\"interfaces/NotePiece.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"key\",\"url\":\"interfaces/NotePiece.html#key\",\"classes\":\"\",\"parent\":\"NotePiece\"},{\"kind\":1024,\"name\":\"accid\",\"url\":\"interfaces/NotePiece.html#accid\",\"classes\":\"\",\"parent\":\"NotePiece\"},{\"kind\":1024,\"name\":\"octave\",\"url\":\"interfaces/NotePiece.html#octave\",\"classes\":\"\",\"parent\":\"NotePiece\"},{\"kind\":128,\"name\":\"Piece\",\"url\":\"classes/Piece.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Piece.html#constructor\",\"classes\":\"\",\"parent\":\"Piece\"},{\"kind\":1024,\"name\":\"chord\",\"url\":\"classes/Piece.html#chord\",\"classes\":\"\",\"parent\":\"Piece\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"classes/Piece.html#duration\",\"classes\":\"\",\"parent\":\"Piece\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"classes/Piece.html#dots\",\"classes\":\"\",\"parent\":\"Piece\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/Piece.html#type\",\"classes\":\"\",\"parent\":\"Piece\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"classes/Piece.html#options\",\"classes\":\"\",\"parent\":\"Piece\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Piece.html#options.__type\",\"classes\":\"\",\"parent\":\"Piece.options\"},{\"kind\":256,\"name\":\"BuilderElements\",\"url\":\"interfaces/BuilderElements.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"notes\",\"url\":\"interfaces/BuilderElements.html#notes\",\"classes\":\"\",\"parent\":\"BuilderElements\"},{\"kind\":1024,\"name\":\"accidentals\",\"url\":\"interfaces/BuilderElements.html#accidentals\",\"classes\":\"\",\"parent\":\"BuilderElements\"},{\"kind\":256,\"name\":\"BuilderOptions\",\"url\":\"interfaces/BuilderOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"interfaces/BuilderOptions.html#stem\",\"classes\":\"\",\"parent\":\"BuilderOptions\"},{\"kind\":1024,\"name\":\"clef\",\"url\":\"interfaces/BuilderOptions.html#clef\",\"classes\":\"\",\"parent\":\"BuilderOptions\"},{\"kind\":128,\"name\":\"Builder\",\"url\":\"classes/Builder.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Builder.html#constructor\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":1024,\"name\":\"factory\",\"url\":\"classes/Builder.html#factory\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":1024,\"name\":\"elements\",\"url\":\"classes/Builder.html#elements\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"classes/Builder.html#options\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":1024,\"name\":\"piece\",\"url\":\"classes/Builder.html#piece\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":1024,\"name\":\"commitHooks\",\"url\":\"classes/Builder.html#commitHooks\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":1024,\"name\":\"rollingDuration\",\"url\":\"classes/Builder.html#rollingDuration\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Builder.html#reset\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"getFactory\",\"url\":\"classes/Builder.html#getFactory\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"getElements\",\"url\":\"classes/Builder.html#getElements\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"addCommitHook\",\"url\":\"classes/Builder.html#addCommitHook\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"resetPiece\",\"url\":\"classes/Builder.html#resetPiece\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"setNoteDots\",\"url\":\"classes/Builder.html#setNoteDots\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"setNoteDuration\",\"url\":\"classes/Builder.html#setNoteDuration\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"setNoteType\",\"url\":\"classes/Builder.html#setNoteType\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"addNoteOption\",\"url\":\"classes/Builder.html#addNoteOption\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"addNote\",\"url\":\"classes/Builder.html#addNote\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"addSingleNote\",\"url\":\"classes/Builder.html#addSingleNote\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"addChord\",\"url\":\"classes/Builder.html#addChord\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"commitPiece\",\"url\":\"classes/Builder.html#commitPiece\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":256,\"name\":\"EasyScoreOptions\",\"url\":\"interfaces/EasyScoreOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"factory\",\"url\":\"interfaces/EasyScoreOptions.html#factory\",\"classes\":\"\",\"parent\":\"EasyScoreOptions\"},{\"kind\":1024,\"name\":\"builder\",\"url\":\"interfaces/EasyScoreOptions.html#builder\",\"classes\":\"\",\"parent\":\"EasyScoreOptions\"},{\"kind\":1024,\"name\":\"commitHooks\",\"url\":\"interfaces/EasyScoreOptions.html#commitHooks\",\"classes\":\"\",\"parent\":\"EasyScoreOptions\"},{\"kind\":1024,\"name\":\"throwOnError\",\"url\":\"interfaces/EasyScoreOptions.html#throwOnError\",\"classes\":\"\",\"parent\":\"EasyScoreOptions\"},{\"kind\":256,\"name\":\"EasyScoreDefaults\",\"url\":\"interfaces/EasyScoreDefaults.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"clef\",\"url\":\"interfaces/EasyScoreDefaults.html#clef\",\"classes\":\"\",\"parent\":\"EasyScoreDefaults\"},{\"kind\":1024,\"name\":\"time\",\"url\":\"interfaces/EasyScoreDefaults.html#time\",\"classes\":\"\",\"parent\":\"EasyScoreDefaults\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"interfaces/EasyScoreDefaults.html#stem\",\"classes\":\"\",\"parent\":\"EasyScoreDefaults\"},{\"kind\":128,\"name\":\"EasyScore\",\"url\":\"classes/EasyScore.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/EasyScore.html#DEBUG\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/EasyScore.html#constructor\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":1024,\"name\":\"defaults\",\"url\":\"classes/EasyScore.html#defaults\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"classes/EasyScore.html#options\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":1024,\"name\":\"factory\",\"url\":\"classes/EasyScore.html#factory\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":1024,\"name\":\"builder\",\"url\":\"classes/EasyScore.html#builder\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":1024,\"name\":\"grammar\",\"url\":\"classes/EasyScore.html#grammar\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":1024,\"name\":\"parser\",\"url\":\"classes/EasyScore.html#parser\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"set\",\"url\":\"classes/EasyScore.html#set\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"setOptions\",\"url\":\"classes/EasyScore.html#setOptions\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/EasyScore.html#setContext\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"parse\",\"url\":\"classes/EasyScore.html#parse\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"beam\",\"url\":\"classes/EasyScore.html#beam\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"tuplet\",\"url\":\"classes/EasyScore.html#tuplet\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"notes\",\"url\":\"classes/EasyScore.html#notes\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"voice\",\"url\":\"classes/EasyScore.html#voice\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"addCommitHook\",\"url\":\"classes/EasyScore.html#addCommitHook\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":256,\"name\":\"ElementAttributes\",\"url\":\"interfaces/ElementAttributes.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ElementAttributes.html#id\",\"classes\":\"\",\"parent\":\"ElementAttributes\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/ElementAttributes.html#type\",\"classes\":\"\",\"parent\":\"ElementAttributes\"},{\"kind\":1024,\"name\":\"class\",\"url\":\"interfaces/ElementAttributes.html#class\",\"classes\":\"\",\"parent\":\"ElementAttributes\"},{\"kind\":256,\"name\":\"ElementStyle\",\"url\":\"interfaces/ElementStyle.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"shadowColor\",\"url\":\"interfaces/ElementStyle.html#shadowColor\",\"classes\":\"\",\"parent\":\"ElementStyle\"},{\"kind\":1024,\"name\":\"shadowBlur\",\"url\":\"interfaces/ElementStyle.html#shadowBlur\",\"classes\":\"\",\"parent\":\"ElementStyle\"},{\"kind\":1024,\"name\":\"fillStyle\",\"url\":\"interfaces/ElementStyle.html#fillStyle\",\"classes\":\"\",\"parent\":\"ElementStyle\"},{\"kind\":1024,\"name\":\"strokeStyle\",\"url\":\"interfaces/ElementStyle.html#strokeStyle\",\"classes\":\"\",\"parent\":\"ElementStyle\"},{\"kind\":1024,\"name\":\"lineWidth\",\"url\":\"interfaces/ElementStyle.html#lineWidth\",\"classes\":\"\",\"parent\":\"ElementStyle\"},{\"kind\":128,\"name\":\"Element\",\"url\":\"classes/Element.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Element.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Element.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Element.html#constructor\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Element.html#addChildElement\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Element.html#getCategory\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Element.html#setStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Element.html#setGroupStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Element.html#getStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Element.html#applyStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Element.html#restoreStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Element.html#drawWithStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Element.html#draw\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Element.html#hasClass\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Element.html#addClass\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Element.html#removeClass\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Element.html#onRegister\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Element.html#isRendered\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Element.html#setRendered\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Element.html#getAttributes\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Element.html#getAttribute\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Element.html#getSVGElement\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Element.html#setAttribute\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Element.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Element.html#getContext\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Element.html#setContext\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Element.html#checkContext\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Element.html#font\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Element.html#setFont\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Element.html#getFont\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Element.html#resetFont\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Element.html#fontInfo\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Element.html#setFontSize\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Element.html#getFontSize\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Element.html#fontSize\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Element.html#fontSizeInPoints\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Element.html#fontSizeInPixels\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Element.html#fontStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Element.html#fontWeight\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":256,\"name\":\"FactoryOptions\",\"url\":\"interfaces/FactoryOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"stave\",\"url\":\"interfaces/FactoryOptions.html#stave\",\"classes\":\"\",\"parent\":\"FactoryOptions\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FactoryOptions.html#stave.__type-1\",\"classes\":\"\",\"parent\":\"FactoryOptions.stave\"},{\"kind\":1024,\"name\":\"space\",\"url\":\"interfaces/FactoryOptions.html#stave.__type-1.space\",\"classes\":\"\",\"parent\":\"FactoryOptions.stave.__type\"},{\"kind\":1024,\"name\":\"renderer\",\"url\":\"interfaces/FactoryOptions.html#renderer\",\"classes\":\"\",\"parent\":\"FactoryOptions\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FactoryOptions.html#renderer.__type\",\"classes\":\"\",\"parent\":\"FactoryOptions.renderer\"},{\"kind\":1024,\"name\":\"elementId\",\"url\":\"interfaces/FactoryOptions.html#renderer.__type.elementId\",\"classes\":\"\",\"parent\":\"FactoryOptions.renderer.__type\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"interfaces/FactoryOptions.html#renderer.__type.backend\",\"classes\":\"\",\"parent\":\"FactoryOptions.renderer.__type\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/FactoryOptions.html#renderer.__type.width\",\"classes\":\"\",\"parent\":\"FactoryOptions.renderer.__type\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/FactoryOptions.html#renderer.__type.height\",\"classes\":\"\",\"parent\":\"FactoryOptions.renderer.__type\"},{\"kind\":1024,\"name\":\"background\",\"url\":\"interfaces/FactoryOptions.html#renderer.__type.background\",\"classes\":\"\",\"parent\":\"FactoryOptions.renderer.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"interfaces/FactoryOptions.html#font\",\"classes\":\"\",\"parent\":\"FactoryOptions\"},{\"kind\":128,\"name\":\"Factory\",\"url\":\"classes/Factory.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Factory.html#DEBUG\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Factory.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"newFromElementId\",\"url\":\"classes/Factory.html#newFromElementId\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Factory.html#constructor\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Factory.html#reset\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"setOptions\",\"url\":\"classes/Factory.html#setOptions\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"initRenderer\",\"url\":\"classes/Factory.html#initRenderer\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Factory.html#getContext\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Factory.html#setContext\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Factory.html#getStave\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"getVoices\",\"url\":\"classes/Factory.html#getVoices\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Stave\",\"url\":\"classes/Factory.html#Stave\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TabStave\",\"url\":\"classes/Factory.html#TabStave\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"StaveNote\",\"url\":\"classes/Factory.html#StaveNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"GlyphNote\",\"url\":\"classes/Factory.html#GlyphNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"RepeatNote\",\"url\":\"classes/Factory.html#RepeatNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"GhostNote\",\"url\":\"classes/Factory.html#GhostNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TextNote\",\"url\":\"classes/Factory.html#TextNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"BarNote\",\"url\":\"classes/Factory.html#BarNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"ClefNote\",\"url\":\"classes/Factory.html#ClefNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TimeSigNote\",\"url\":\"classes/Factory.html#TimeSigNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"KeySigNote\",\"url\":\"classes/Factory.html#KeySigNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TabNote\",\"url\":\"classes/Factory.html#TabNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"GraceNote\",\"url\":\"classes/Factory.html#GraceNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"GraceNoteGroup\",\"url\":\"classes/Factory.html#GraceNoteGroup\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Accidental\",\"url\":\"classes/Factory.html#Accidental\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Annotation\",\"url\":\"classes/Factory.html#Annotation\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"ChordSymbol\",\"url\":\"classes/Factory.html#ChordSymbol\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Articulation\",\"url\":\"classes/Factory.html#Articulation\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Ornament\",\"url\":\"classes/Factory.html#Ornament\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TextDynamics\",\"url\":\"classes/Factory.html#TextDynamics\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Fingering\",\"url\":\"classes/Factory.html#Fingering\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"StringNumber\",\"url\":\"classes/Factory.html#StringNumber\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TickContext\",\"url\":\"classes/Factory.html#TickContext\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"ModifierContext\",\"url\":\"classes/Factory.html#ModifierContext\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"MultiMeasureRest\",\"url\":\"classes/Factory.html#MultiMeasureRest\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Voice\",\"url\":\"classes/Factory.html#Voice\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"StaveConnector\",\"url\":\"classes/Factory.html#StaveConnector\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Formatter\",\"url\":\"classes/Factory.html#Formatter\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Tuplet\",\"url\":\"classes/Factory.html#Tuplet\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Beam\",\"url\":\"classes/Factory.html#Beam\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Curve\",\"url\":\"classes/Factory.html#Curve\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"StaveTie\",\"url\":\"classes/Factory.html#StaveTie\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"StaveLine\",\"url\":\"classes/Factory.html#StaveLine\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"VibratoBracket\",\"url\":\"classes/Factory.html#VibratoBracket\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TextBracket\",\"url\":\"classes/Factory.html#TextBracket\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"System\",\"url\":\"classes/Factory.html#System\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"EasyScore\",\"url\":\"classes/Factory.html#EasyScore\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"PedalMarking\",\"url\":\"classes/Factory.html#PedalMarking\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"NoteSubGroup\",\"url\":\"classes/Factory.html#NoteSubGroup\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Factory.html#draw\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":128,\"name\":\"Flow\",\"url\":\"classes/Flow.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"BUILD\",\"url\":\"classes/Flow.html#BUILD\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Flow.html#BUILD.BUILD-1.__type\",\"classes\":\"\",\"parent\":\"Flow.BUILD.BUILD\"},{\"kind\":1024,\"name\":\"VERSION\",\"url\":\"classes/Flow.html#BUILD.BUILD-1.__type.VERSION\",\"classes\":\"\",\"parent\":\"Flow.BUILD.BUILD.__type\"},{\"kind\":1024,\"name\":\"ID\",\"url\":\"classes/Flow.html#BUILD.BUILD-1.__type.ID\",\"classes\":\"\",\"parent\":\"Flow.BUILD.BUILD.__type\"},{\"kind\":1024,\"name\":\"DATE\",\"url\":\"classes/Flow.html#BUILD.BUILD-1.__type.DATE\",\"classes\":\"\",\"parent\":\"Flow.BUILD.BUILD.__type\"},{\"kind\":1024,\"name\":\"Accidental\",\"url\":\"classes/Flow.html#Accidental\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Annotation\",\"url\":\"classes/Flow.html#Annotation\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Articulation\",\"url\":\"classes/Flow.html#Articulation\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Barline\",\"url\":\"classes/Flow.html#Barline\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"BarNote\",\"url\":\"classes/Flow.html#BarNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Beam\",\"url\":\"classes/Flow.html#Beam\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Bend\",\"url\":\"classes/Flow.html#Bend\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"BoundingBox\",\"url\":\"classes/Flow.html#BoundingBox\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"BoundingBoxComputation\",\"url\":\"classes/Flow.html#BoundingBoxComputation\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"CanvasContext\",\"url\":\"classes/Flow.html#CanvasContext\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"ChordSymbol\",\"url\":\"classes/Flow.html#ChordSymbol\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Clef\",\"url\":\"classes/Flow.html#Clef\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"ClefNote\",\"url\":\"classes/Flow.html#ClefNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Crescendo\",\"url\":\"classes/Flow.html#Crescendo\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Curve\",\"url\":\"classes/Flow.html#Curve\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Dot\",\"url\":\"classes/Flow.html#Dot\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"EasyScore\",\"url\":\"classes/Flow.html#EasyScore\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Element\",\"url\":\"classes/Flow.html#Element\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Factory\",\"url\":\"classes/Flow.html#Factory\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Font\",\"url\":\"classes/Flow.html#Font\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Formatter\",\"url\":\"classes/Flow.html#Formatter\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Fraction\",\"url\":\"classes/Flow.html#Fraction\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"FretHandFinger\",\"url\":\"classes/Flow.html#FretHandFinger\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"GhostNote\",\"url\":\"classes/Flow.html#GhostNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Glyph\",\"url\":\"classes/Flow.html#Glyph\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"GlyphNote\",\"url\":\"classes/Flow.html#GlyphNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"GraceNote\",\"url\":\"classes/Flow.html#GraceNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"GraceNoteGroup\",\"url\":\"classes/Flow.html#GraceNoteGroup\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"GraceTabNote\",\"url\":\"classes/Flow.html#GraceTabNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"KeyManager\",\"url\":\"classes/Flow.html#KeyManager\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"KeySignature\",\"url\":\"classes/Flow.html#KeySignature\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"KeySigNote\",\"url\":\"classes/Flow.html#KeySigNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Modifier\",\"url\":\"classes/Flow.html#Modifier\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"ModifierContext\",\"url\":\"classes/Flow.html#ModifierContext\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"MultiMeasureRest\",\"url\":\"classes/Flow.html#MultiMeasureRest\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Music\",\"url\":\"classes/Flow.html#Music\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Note\",\"url\":\"classes/Flow.html#Note\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"NoteHead\",\"url\":\"classes/Flow.html#NoteHead\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"NoteSubGroup\",\"url\":\"classes/Flow.html#NoteSubGroup\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Ornament\",\"url\":\"classes/Flow.html#Ornament\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Parenthesis\",\"url\":\"classes/Flow.html#Parenthesis\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Parser\",\"url\":\"classes/Flow.html#Parser\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"PedalMarking\",\"url\":\"classes/Flow.html#PedalMarking\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Registry\",\"url\":\"classes/Flow.html#Registry\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"RenderContext\",\"url\":\"classes/Flow.html#RenderContext\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Renderer\",\"url\":\"classes/Flow.html#Renderer\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"RepeatNote\",\"url\":\"classes/Flow.html#RepeatNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Repetition\",\"url\":\"classes/Flow.html#Repetition\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Stave\",\"url\":\"classes/Flow.html#Stave\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveConnector\",\"url\":\"classes/Flow.html#StaveConnector\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveHairpin\",\"url\":\"classes/Flow.html#StaveHairpin\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveLine\",\"url\":\"classes/Flow.html#StaveLine\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveModifier\",\"url\":\"classes/Flow.html#StaveModifier\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveNote\",\"url\":\"classes/Flow.html#StaveNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveTempo\",\"url\":\"classes/Flow.html#StaveTempo\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveText\",\"url\":\"classes/Flow.html#StaveText\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveTie\",\"url\":\"classes/Flow.html#StaveTie\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Stem\",\"url\":\"classes/Flow.html#Stem\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StringNumber\",\"url\":\"classes/Flow.html#StringNumber\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Stroke\",\"url\":\"classes/Flow.html#Stroke\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"SVGContext\",\"url\":\"classes/Flow.html#SVGContext\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"System\",\"url\":\"classes/Flow.html#System\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TabNote\",\"url\":\"classes/Flow.html#TabNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TabSlide\",\"url\":\"classes/Flow.html#TabSlide\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TabStave\",\"url\":\"classes/Flow.html#TabStave\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TabTie\",\"url\":\"classes/Flow.html#TabTie\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TextBracket\",\"url\":\"classes/Flow.html#TextBracket\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TextDynamics\",\"url\":\"classes/Flow.html#TextDynamics\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TextFormatter\",\"url\":\"classes/Flow.html#TextFormatter\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TextNote\",\"url\":\"classes/Flow.html#TextNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TickContext\",\"url\":\"classes/Flow.html#TickContext\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TimeSignature\",\"url\":\"classes/Flow.html#TimeSignature\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TimeSigNote\",\"url\":\"classes/Flow.html#TimeSigNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Tremolo\",\"url\":\"classes/Flow.html#Tremolo\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Tuning\",\"url\":\"classes/Flow.html#Tuning\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Tuplet\",\"url\":\"classes/Flow.html#Tuplet\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Vibrato\",\"url\":\"classes/Flow.html#Vibrato\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"VibratoBracket\",\"url\":\"classes/Flow.html#VibratoBracket\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Voice\",\"url\":\"classes/Flow.html#Voice\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Volta\",\"url\":\"classes/Flow.html#Volta\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"AnnotationHorizontalJustify\",\"url\":\"classes/Flow.html#AnnotationHorizontalJustify\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"AnnotationVerticalJustify\",\"url\":\"classes/Flow.html#AnnotationVerticalJustify\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"ChordSymbolHorizontalJustify\",\"url\":\"classes/Flow.html#ChordSymbolHorizontalJustify\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"ChordSymbolVerticalJustify\",\"url\":\"classes/Flow.html#ChordSymbolVerticalJustify\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"SymbolTypes\",\"url\":\"classes/Flow.html#SymbolTypes\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"SymbolModifiers\",\"url\":\"classes/Flow.html#SymbolModifiers\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"CurvePosition\",\"url\":\"classes/Flow.html#CurvePosition\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"FontWeight\",\"url\":\"classes/Flow.html#FontWeight\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"FontStyle\",\"url\":\"classes/Flow.html#FontStyle\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"ModifierPosition\",\"url\":\"classes/Flow.html#ModifierPosition\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"RendererBackends\",\"url\":\"classes/Flow.html#RendererBackends\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"RendererLineEndType\",\"url\":\"classes/Flow.html#RendererLineEndType\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"BarlineType\",\"url\":\"classes/Flow.html#BarlineType\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveModifierPosition\",\"url\":\"classes/Flow.html#StaveModifierPosition\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"VoltaType\",\"url\":\"classes/Flow.html#VoltaType\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TextBracketPosition\",\"url\":\"classes/Flow.html#TextBracketPosition\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TextJustification\",\"url\":\"classes/Flow.html#TextJustification\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"VoiceMode\",\"url\":\"classes/Flow.html#VoiceMode\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"setMusicFont\",\"url\":\"classes/Flow.html#setMusicFont\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"fetchMusicFont\",\"url\":\"classes/Flow.html#fetchMusicFont\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"getMusicFont\",\"url\":\"classes/Flow.html#getMusicFont\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"getMusicFontStack\",\"url\":\"classes/Flow.html#getMusicFontStack\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"RENDER_PRECISION_PLACES\",\"url\":\"classes/Flow.html#RENDER_PRECISION_PLACES\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"SOFTMAX_FACTOR\",\"url\":\"classes/Flow.html#SOFTMAX_FACTOR\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"NOTATION_FONT_SCALE\",\"url\":\"classes/Flow.html#NOTATION_FONT_SCALE\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"TABLATURE_FONT_SCALE\",\"url\":\"classes/Flow.html#TABLATURE_FONT_SCALE\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"RESOLUTION\",\"url\":\"classes/Flow.html#RESOLUTION\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"SLASH_NOTEHEAD_WIDTH\",\"url\":\"classes/Flow.html#SLASH_NOTEHEAD_WIDTH\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"STAVE_LINE_DISTANCE\",\"url\":\"classes/Flow.html#STAVE_LINE_DISTANCE\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"STAVE_LINE_THICKNESS\",\"url\":\"classes/Flow.html#STAVE_LINE_THICKNESS\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"STEM_HEIGHT\",\"url\":\"classes/Flow.html#STEM_HEIGHT\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"STEM_WIDTH\",\"url\":\"classes/Flow.html#STEM_WIDTH\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"TIME4_4\",\"url\":\"classes/Flow.html#TIME4_4\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Flow.html#TIME4_4.TIME4_4-1.__type-1\",\"classes\":\"\",\"parent\":\"Flow.TIME4_4.TIME4_4\"},{\"kind\":1024,\"name\":\"num_beats\",\"url\":\"classes/Flow.html#TIME4_4.TIME4_4-1.__type-1.num_beats\",\"classes\":\"\",\"parent\":\"Flow.TIME4_4.TIME4_4.__type\"},{\"kind\":1024,\"name\":\"beat_value\",\"url\":\"classes/Flow.html#TIME4_4.TIME4_4-1.__type-1.beat_value\",\"classes\":\"\",\"parent\":\"Flow.TIME4_4.TIME4_4.__type\"},{\"kind\":1024,\"name\":\"resolution\",\"url\":\"classes/Flow.html#TIME4_4.TIME4_4-1.__type-1.resolution-3\",\"classes\":\"\",\"parent\":\"Flow.TIME4_4.TIME4_4.__type\"},{\"kind\":262144,\"name\":\"accidentalMap\",\"url\":\"classes/Flow.html#accidentalMap\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"unicode\",\"url\":\"classes/Flow.html#unicode\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"keySignature\",\"url\":\"classes/Flow.html#keySignature-1\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"hasKeySignature\",\"url\":\"classes/Flow.html#hasKeySignature\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"getKeySignatures\",\"url\":\"classes/Flow.html#getKeySignatures\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"clefProperties\",\"url\":\"classes/Flow.html#clefProperties\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Flow.html#clefProperties.clefProperties-1.__type-2\",\"classes\":\"\",\"parent\":\"Flow.clefProperties.clefProperties\"},{\"kind\":1024,\"name\":\"line_shift\",\"url\":\"classes/Flow.html#clefProperties.clefProperties-1.__type-2.line_shift\",\"classes\":\"\",\"parent\":\"Flow.clefProperties.clefProperties.__type\"},{\"kind\":2048,\"name\":\"keyProperties\",\"url\":\"classes/Flow.html#keyProperties\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"durationToTicks\",\"url\":\"classes/Flow.html#durationToTicks\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Flow.html#constructor\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":256,\"name\":\"FontInfo\",\"url\":\"interfaces/FontInfo.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"family\",\"url\":\"interfaces/FontInfo.html#family\",\"classes\":\"\",\"parent\":\"FontInfo\"},{\"kind\":1024,\"name\":\"size\",\"url\":\"interfaces/FontInfo.html#size\",\"classes\":\"\",\"parent\":\"FontInfo\"},{\"kind\":1024,\"name\":\"weight\",\"url\":\"interfaces/FontInfo.html#weight\",\"classes\":\"\",\"parent\":\"FontInfo\"},{\"kind\":1024,\"name\":\"style\",\"url\":\"interfaces/FontInfo.html#style\",\"classes\":\"\",\"parent\":\"FontInfo\"},{\"kind\":4194304,\"name\":\"FontModule\",\"url\":\"types/FontModule.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/FontModule.html#__type\",\"classes\":\"\",\"parent\":\"FontModule\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"types/FontModule.html#__type.data\",\"classes\":\"\",\"parent\":\"FontModule.__type\"},{\"kind\":1024,\"name\":\"metrics\",\"url\":\"types/FontModule.html#__type.metrics\",\"classes\":\"\",\"parent\":\"FontModule.__type\"},{\"kind\":256,\"name\":\"FontData\",\"url\":\"interfaces/FontData.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"glyphs\",\"url\":\"interfaces/FontData.html#glyphs\",\"classes\":\"\",\"parent\":\"FontData\"},{\"kind\":1024,\"name\":\"fontFamily\",\"url\":\"interfaces/FontData.html#fontFamily\",\"classes\":\"\",\"parent\":\"FontData\"},{\"kind\":1024,\"name\":\"resolution\",\"url\":\"interfaces/FontData.html#resolution\",\"classes\":\"\",\"parent\":\"FontData\"},{\"kind\":1024,\"name\":\"generatedOn\",\"url\":\"interfaces/FontData.html#generatedOn\",\"classes\":\"\",\"parent\":\"FontData\"},{\"kind\":256,\"name\":\"FontMetrics\",\"url\":\"interfaces/FontMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"smufl\",\"url\":\"interfaces/FontMetrics.html#smufl\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"stave\",\"url\":\"interfaces/FontMetrics.html#stave\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"interfaces/FontMetrics.html#accidental\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"clef_default\",\"url\":\"interfaces/FontMetrics.html#clef_default\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"clef_small\",\"url\":\"interfaces/FontMetrics.html#clef_small\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"pedalMarking\",\"url\":\"interfaces/FontMetrics.html#pedalMarking\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"digits\",\"url\":\"interfaces/FontMetrics.html#digits\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"articulation\",\"url\":\"interfaces/FontMetrics.html#articulation\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"tremolo\",\"url\":\"interfaces/FontMetrics.html#tremolo\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"chordSymbol\",\"url\":\"interfaces/FontMetrics.html#chordSymbol\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"ornament\",\"url\":\"interfaces/FontMetrics.html#ornament\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"noteHead\",\"url\":\"interfaces/FontMetrics.html#noteHead\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"stringNumber\",\"url\":\"interfaces/FontMetrics.html#stringNumber\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"tuplet\",\"url\":\"interfaces/FontMetrics.html#tuplet\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"glyphs\",\"url\":\"interfaces/FontMetrics.html#glyphs\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":256,\"name\":\"FontGlyph\",\"url\":\"interfaces/FontGlyph.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"x_min\",\"url\":\"interfaces/FontGlyph.html#x_min\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"x_max\",\"url\":\"interfaces/FontGlyph.html#x_max\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"y_min\",\"url\":\"interfaces/FontGlyph.html#y_min\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"y_max\",\"url\":\"interfaces/FontGlyph.html#y_max\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"ha\",\"url\":\"interfaces/FontGlyph.html#ha\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"leftSideBearing\",\"url\":\"interfaces/FontGlyph.html#leftSideBearing\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"advanceWidth\",\"url\":\"interfaces/FontGlyph.html#advanceWidth\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"o\",\"url\":\"interfaces/FontGlyph.html#o\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"cached_outline\",\"url\":\"interfaces/FontGlyph.html#cached_outline\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":8,\"name\":\"FontWeight\",\"url\":\"enums/FontWeight.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"NORMAL\",\"url\":\"enums/FontWeight.html#NORMAL\",\"classes\":\"\",\"parent\":\"FontWeight\"},{\"kind\":16,\"name\":\"BOLD\",\"url\":\"enums/FontWeight.html#BOLD\",\"classes\":\"\",\"parent\":\"FontWeight\"},{\"kind\":8,\"name\":\"FontStyle\",\"url\":\"enums/FontStyle.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"NORMAL\",\"url\":\"enums/FontStyle.html#NORMAL\",\"classes\":\"\",\"parent\":\"FontStyle\"},{\"kind\":16,\"name\":\"ITALIC\",\"url\":\"enums/FontStyle.html#ITALIC\",\"classes\":\"\",\"parent\":\"FontStyle\"},{\"kind\":128,\"name\":\"Font\",\"url\":\"classes/Font.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"SANS_SERIF\",\"url\":\"classes/Font.html#SANS_SERIF\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":1024,\"name\":\"SERIF\",\"url\":\"classes/Font.html#SERIF\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":1024,\"name\":\"SIZE\",\"url\":\"classes/Font.html#SIZE\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":1024,\"name\":\"scaleToPxFrom\",\"url\":\"classes/Font.html#scaleToPxFrom\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"convertSizeToPixelValue\",\"url\":\"classes/Font.html#convertSizeToPixelValue\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"convertSizeToPointValue\",\"url\":\"classes/Font.html#convertSizeToPointValue\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"validate\",\"url\":\"classes/Font.html#validate\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"fromCSSString\",\"url\":\"classes/Font.html#fromCSSString\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"toCSSString\",\"url\":\"classes/Font.html#toCSSString\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"scaleSize\",\"url\":\"classes/Font.html#scaleSize\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"isBold\",\"url\":\"classes/Font.html#isBold\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"isItalic\",\"url\":\"classes/Font.html#isItalic\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":1024,\"name\":\"WEB_FONT_HOST\",\"url\":\"classes/Font.html#WEB_FONT_HOST\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":1024,\"name\":\"WEB_FONT_FILES\",\"url\":\"classes/Font.html#WEB_FONT_FILES\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"loadWebFont\",\"url\":\"classes/Font.html#loadWebFont\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"loadWebFonts\",\"url\":\"classes/Font.html#loadWebFonts\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"load\",\"url\":\"classes/Font.html#load\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/Font.html#getName\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"getData\",\"url\":\"classes/Font.html#getData\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/Font.html#getMetrics\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"setData\",\"url\":\"classes/Font.html#setData\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"setMetrics\",\"url\":\"classes/Font.html#setMetrics\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"hasData\",\"url\":\"classes/Font.html#hasData\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"getResolution\",\"url\":\"classes/Font.html#getResolution\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"getGlyphs\",\"url\":\"classes/Font.html#getGlyphs\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"lookupMetric\",\"url\":\"classes/Font.html#lookupMetric\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/Font.html#toString\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":256,\"name\":\"FormatterOptions\",\"url\":\"interfaces/FormatterOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"softmaxFactor\",\"url\":\"interfaces/FormatterOptions.html#softmaxFactor\",\"classes\":\"\",\"parent\":\"FormatterOptions\"},{\"kind\":1024,\"name\":\"globalSoftmax\",\"url\":\"interfaces/FormatterOptions.html#globalSoftmax\",\"classes\":\"\",\"parent\":\"FormatterOptions\"},{\"kind\":1024,\"name\":\"maxIterations\",\"url\":\"interfaces/FormatterOptions.html#maxIterations\",\"classes\":\"\",\"parent\":\"FormatterOptions\"},{\"kind\":256,\"name\":\"FormatParams\",\"url\":\"interfaces/FormatParams.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"align_rests\",\"url\":\"interfaces/FormatParams.html#align_rests\",\"classes\":\"\",\"parent\":\"FormatParams\"},{\"kind\":1024,\"name\":\"stave\",\"url\":\"interfaces/FormatParams.html#stave\",\"classes\":\"\",\"parent\":\"FormatParams\"},{\"kind\":1024,\"name\":\"context\",\"url\":\"interfaces/FormatParams.html#context\",\"classes\":\"\",\"parent\":\"FormatParams\"},{\"kind\":1024,\"name\":\"auto_beam\",\"url\":\"interfaces/FormatParams.html#auto_beam\",\"classes\":\"\",\"parent\":\"FormatParams\"},{\"kind\":256,\"name\":\"AlignmentContexts\",\"url\":\"interfaces/AlignmentContexts.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"list\",\"url\":\"interfaces/AlignmentContexts.html#list\",\"classes\":\"\",\"parent\":\"AlignmentContexts\"},{\"kind\":1024,\"name\":\"map\",\"url\":\"interfaces/AlignmentContexts.html#map\",\"classes\":\"\",\"parent\":\"AlignmentContexts\"},{\"kind\":1024,\"name\":\"array\",\"url\":\"interfaces/AlignmentContexts.html#array\",\"classes\":\"\",\"parent\":\"AlignmentContexts\"},{\"kind\":1024,\"name\":\"resolutionMultiplier\",\"url\":\"interfaces/AlignmentContexts.html#resolutionMultiplier\",\"classes\":\"\",\"parent\":\"AlignmentContexts\"},{\"kind\":256,\"name\":\"AlignmentModifierContexts\",\"url\":\"interfaces/AlignmentModifierContexts.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"map\",\"url\":\"interfaces/AlignmentModifierContexts.html#map\",\"classes\":\"\",\"parent\":\"AlignmentModifierContexts\"},{\"kind\":1024,\"name\":\"array\",\"url\":\"interfaces/AlignmentModifierContexts.html#array\",\"classes\":\"\",\"parent\":\"AlignmentModifierContexts\"},{\"kind\":1024,\"name\":\"resolutionMultiplier\",\"url\":\"interfaces/AlignmentModifierContexts.html#resolutionMultiplier\",\"classes\":\"\",\"parent\":\"AlignmentModifierContexts\"},{\"kind\":128,\"name\":\"Formatter\",\"url\":\"classes/Formatter.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Formatter.html#DEBUG\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"SimpleFormat\",\"url\":\"classes/Formatter.html#SimpleFormat\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"plotDebugging\",\"url\":\"classes/Formatter.html#plotDebugging\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"FormatAndDraw\",\"url\":\"classes/Formatter.html#FormatAndDraw\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"FormatAndDrawTab\",\"url\":\"classes/Formatter.html#FormatAndDrawTab\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"AlignRestsToNotes\",\"url\":\"classes/Formatter.html#AlignRestsToNotes\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"getResolutionMultiplier\",\"url\":\"classes/Formatter.html#getResolutionMultiplier\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Formatter.html#constructor\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"alignRests\",\"url\":\"classes/Formatter.html#alignRests\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"preCalculateMinTotalWidth\",\"url\":\"classes/Formatter.html#preCalculateMinTotalWidth\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"getMinTotalWidth\",\"url\":\"classes/Formatter.html#getMinTotalWidth\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"createModifierContexts\",\"url\":\"classes/Formatter.html#createModifierContexts\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"createTickContexts\",\"url\":\"classes/Formatter.html#createTickContexts\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"getTickContexts\",\"url\":\"classes/Formatter.html#getTickContexts\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/Formatter.html#preFormat\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"evaluate\",\"url\":\"classes/Formatter.html#evaluate\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"tune\",\"url\":\"classes/Formatter.html#tune\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/Formatter.html#postFormat\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"joinVoices\",\"url\":\"classes/Formatter.html#joinVoices\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Formatter.html#format\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"formatToStave\",\"url\":\"classes/Formatter.html#formatToStave\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/Formatter.html#getTickContext\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":128,\"name\":\"Fraction\",\"url\":\"classes/Fraction.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Fraction.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"GCD\",\"url\":\"classes/Fraction.html#GCD\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"LCM\",\"url\":\"classes/Fraction.html#LCM\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"LCMM\",\"url\":\"classes/Fraction.html#LCMM\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Fraction.html#constructor\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":1024,\"name\":\"numerator\",\"url\":\"classes/Fraction.html#numerator\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":1024,\"name\":\"denominator\",\"url\":\"classes/Fraction.html#denominator\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"set\",\"url\":\"classes/Fraction.html#set\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"value\",\"url\":\"classes/Fraction.html#value\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"simplify\",\"url\":\"classes/Fraction.html#simplify\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"add\",\"url\":\"classes/Fraction.html#add\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"subtract\",\"url\":\"classes/Fraction.html#subtract\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"multiply\",\"url\":\"classes/Fraction.html#multiply\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"divide\",\"url\":\"classes/Fraction.html#divide\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"equals\",\"url\":\"classes/Fraction.html#equals\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"greaterThan\",\"url\":\"classes/Fraction.html#greaterThan\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"greaterThanEquals\",\"url\":\"classes/Fraction.html#greaterThanEquals\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"lessThan\",\"url\":\"classes/Fraction.html#lessThan\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"lessThanEquals\",\"url\":\"classes/Fraction.html#lessThanEquals\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"clone\",\"url\":\"classes/Fraction.html#clone\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"copy\",\"url\":\"classes/Fraction.html#copy\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"quotient\",\"url\":\"classes/Fraction.html#quotient\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"remainder\",\"url\":\"classes/Fraction.html#remainder\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"makeAbs\",\"url\":\"classes/Fraction.html#makeAbs\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/Fraction.html#toString\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"toSimplifiedString\",\"url\":\"classes/Fraction.html#toSimplifiedString\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"toMixedString\",\"url\":\"classes/Fraction.html#toMixedString\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"parse\",\"url\":\"classes/Fraction.html#parse\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":128,\"name\":\"FretHandFinger\",\"url\":\"classes/FretHandFinger.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/FretHandFinger.html#CATEGORY\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/FretHandFinger.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/FretHandFinger.html#format\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"easyScoreHook\",\"url\":\"classes/FretHandFinger.html#easyScoreHook\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/FretHandFinger.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/FretHandFinger.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/FretHandFinger.html#constructor\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setFretHandFinger\",\"url\":\"classes/FretHandFinger.html#setFretHandFinger\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getFretHandFinger\",\"url\":\"classes/FretHandFinger.html#getFretHandFinger\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setOffsetX\",\"url\":\"classes/FretHandFinger.html#setOffsetX\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setOffsetY\",\"url\":\"classes/FretHandFinger.html#setOffsetY\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/FretHandFinger.html#draw\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/FretHandFinger.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/FretHandFinger.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/FretHandFinger.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/FretHandFinger.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/FretHandFinger.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/FretHandFinger.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/FretHandFinger.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/FretHandFinger.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/FretHandFinger.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/FretHandFinger.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/FretHandFinger.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/FretHandFinger.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/FretHandFinger.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/FretHandFinger.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/FretHandFinger.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/FretHandFinger.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/FretHandFinger.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/FretHandFinger.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/FretHandFinger.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/FretHandFinger.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/FretHandFinger.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/FretHandFinger.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/FretHandFinger.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/FretHandFinger.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/FretHandFinger.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/FretHandFinger.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/FretHandFinger.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/FretHandFinger.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/FretHandFinger.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/FretHandFinger.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/FretHandFinger.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/FretHandFinger.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/FretHandFinger.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/FretHandFinger.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/FretHandFinger.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/FretHandFinger.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/FretHandFinger.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/FretHandFinger.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/FretHandFinger.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/FretHandFinger.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/FretHandFinger.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/FretHandFinger.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/FretHandFinger.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/FretHandFinger.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/FretHandFinger.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/FretHandFinger.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/FretHandFinger.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/FretHandFinger.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/FretHandFinger.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/FretHandFinger.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/FretHandFinger.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/FretHandFinger.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/FretHandFinger.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/FretHandFinger.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":128,\"name\":\"GhostNote\",\"url\":\"classes/GhostNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/GhostNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/GhostNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/GhostNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/GhostNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GhostNote.html#constructor\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/GhostNote.html#isRest\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/GhostNote.html#setStave\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/GhostNote.html#addToModifierContext\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/GhostNote.html#preFormat\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/GhostNote.html#draw-1\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"classes/GhostNote.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"classes/GhostNote.html#stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStem\",\"url\":\"classes/GhostNote.html#getStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"checkStem\",\"url\":\"classes/GhostNote.html#checkStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setStem\",\"url\":\"classes/GhostNote.html#setStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"buildStem\",\"url\":\"classes/GhostNote.html#buildStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"buildFlag\",\"url\":\"classes/GhostNote.html#buildFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getBaseCustomNoteHeadGlyphProps\",\"url\":\"classes/GhostNote.html#getBaseCustomNoteHeadGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStemLength\",\"url\":\"classes/GhostNote.html#getStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/GhostNote.html#getBeamCount\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStemMinimumLength\",\"url\":\"classes/GhostNote.html#getStemMinimumLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/GhostNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setStemDirection\",\"url\":\"classes/GhostNote.html#setStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStemX\",\"url\":\"classes/GhostNote.html#getStemX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getCenterGlyphX\",\"url\":\"classes/GhostNote.html#getCenterGlyphX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStemExtension\",\"url\":\"classes/GhostNote.html#getStemExtension\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setStemLength\",\"url\":\"classes/GhostNote.html#setStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/GhostNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GhostNote.html#getStemExtents.getStemExtents-1.__type-2\",\"classes\":\"\",\"parent\":\"GhostNote.getStemExtents.getStemExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/GhostNote.html#getStemExtents.getStemExtents-1.__type-2.topY\",\"classes\":\"\",\"parent\":\"GhostNote.getStemExtents.getStemExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/GhostNote.html#getStemExtents.getStemExtents-1.__type-2.baseY\",\"classes\":\"\",\"parent\":\"GhostNote.getStemExtents.getStemExtents.__type\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/GhostNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/GhostNote.html#getYForBottomText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"hasFlag\",\"url\":\"classes/GhostNote.html#hasFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/GhostNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"drawStem\",\"url\":\"classes/GhostNote.html#drawStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/GhostNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/GhostNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/GhostNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/GhostNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GhostNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"GhostNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/GhostNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/GhostNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/GhostNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/GhostNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/GhostNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/GhostNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/GhostNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/GhostNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/GhostNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/GhostNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/GhostNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/GhostNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/GhostNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/GhostNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/GhostNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/GhostNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/GhostNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/GhostNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/GhostNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/GhostNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/GhostNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/GhostNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/GhostNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/GhostNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/GhostNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/GhostNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/GhostNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/GhostNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/GhostNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/GhostNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/GhostNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/GhostNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/GhostNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/GhostNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/GhostNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/GhostNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/GhostNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/GhostNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/GhostNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/GhostNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/GhostNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/GhostNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/GhostNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/GhostNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/GhostNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GhostNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"GhostNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/GhostNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"GhostNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/GhostNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"GhostNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/GhostNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/GhostNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/GhostNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/GhostNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/GhostNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/GhostNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/GhostNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/GhostNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/GhostNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/GhostNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/GhostNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/GhostNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/GhostNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/GhostNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/GhostNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/GhostNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/GhostNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/GhostNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/GhostNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/GhostNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/GhostNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/GhostNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/GhostNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/GhostNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/GhostNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/GhostNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/GhostNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/GhostNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/GhostNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/GhostNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/GhostNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/GhostNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/GhostNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/GhostNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/GhostNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/GhostNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/GhostNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/GhostNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/GhostNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/GhostNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/GhostNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/GhostNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/GhostNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/GhostNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/GhostNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/GhostNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/GhostNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/GhostNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/GhostNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/GhostNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/GhostNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/GhostNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/GhostNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/GhostNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/GhostNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/GhostNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/GhostNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/GhostNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/GhostNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/GhostNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/GhostNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/GhostNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/GhostNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/GhostNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/GhostNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/GhostNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/GhostNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/GhostNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/GhostNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/GhostNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/GhostNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/GhostNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":256,\"name\":\"GlyphProps\",\"url\":\"interfaces/GlyphProps.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"code_head\",\"url\":\"interfaces/GlyphProps.html#code_head\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"ledger_code_head\",\"url\":\"interfaces/GlyphProps.html#ledger_code_head\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"dot_shiftY\",\"url\":\"interfaces/GlyphProps.html#dot_shiftY\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"position\",\"url\":\"interfaces/GlyphProps.html#position\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"rest\",\"url\":\"interfaces/GlyphProps.html#rest\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"line_below\",\"url\":\"interfaces/GlyphProps.html#line_below\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"line_above\",\"url\":\"interfaces/GlyphProps.html#line_above\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"stem_beam_extension\",\"url\":\"interfaces/GlyphProps.html#stem_beam_extension\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"stem_up_extension\",\"url\":\"interfaces/GlyphProps.html#stem_up_extension\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"stem_down_extension\",\"url\":\"interfaces/GlyphProps.html#stem_down_extension\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"interfaces/GlyphProps.html#stem\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"interfaces/GlyphProps.html#code\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"code_flag_upstem\",\"url\":\"interfaces/GlyphProps.html#code_flag_upstem\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"code_flag_downstem\",\"url\":\"interfaces/GlyphProps.html#code_flag_downstem\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"flag\",\"url\":\"interfaces/GlyphProps.html#flag\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/GlyphProps.html#width\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"text\",\"url\":\"interfaces/GlyphProps.html#text\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"tabnote_stem_down_extension\",\"url\":\"interfaces/GlyphProps.html#tabnote_stem_down_extension\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"tabnote_stem_up_extension\",\"url\":\"interfaces/GlyphProps.html#tabnote_stem_up_extension\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"beam_count\",\"url\":\"interfaces/GlyphProps.html#beam_count\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"shift_y\",\"url\":\"interfaces/GlyphProps.html#shift_y\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"interfaces/GlyphProps.html#getWidth\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":256,\"name\":\"GlyphOptions\",\"url\":\"interfaces/GlyphOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"category\",\"url\":\"interfaces/GlyphOptions.html#category\",\"classes\":\"\",\"parent\":\"GlyphOptions\"},{\"kind\":256,\"name\":\"GlyphMetrics\",\"url\":\"interfaces/GlyphMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/GlyphMetrics.html#width\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/GlyphMetrics.html#height\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"x_min\",\"url\":\"interfaces/GlyphMetrics.html#x_min\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"x_max\",\"url\":\"interfaces/GlyphMetrics.html#x_max\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"x_shift\",\"url\":\"interfaces/GlyphMetrics.html#x_shift\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"interfaces/GlyphMetrics.html#y_shift\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"interfaces/GlyphMetrics.html#scale\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"ha\",\"url\":\"interfaces/GlyphMetrics.html#ha\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"outline\",\"url\":\"interfaces/GlyphMetrics.html#outline\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"interfaces/GlyphMetrics.html#font\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":8,\"name\":\"OutlineCode\",\"url\":\"enums/OutlineCode.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"MOVE\",\"url\":\"enums/OutlineCode.html#MOVE\",\"classes\":\"\",\"parent\":\"OutlineCode\"},{\"kind\":16,\"name\":\"LINE\",\"url\":\"enums/OutlineCode.html#LINE\",\"classes\":\"\",\"parent\":\"OutlineCode\"},{\"kind\":16,\"name\":\"QUADRATIC\",\"url\":\"enums/OutlineCode.html#QUADRATIC\",\"classes\":\"\",\"parent\":\"OutlineCode\"},{\"kind\":16,\"name\":\"BEZIER\",\"url\":\"enums/OutlineCode.html#BEZIER\",\"classes\":\"\",\"parent\":\"OutlineCode\"},{\"kind\":128,\"name\":\"Glyph\",\"url\":\"classes/Glyph.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Glyph.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"CURRENT_CACHE_KEY\",\"url\":\"classes/Glyph.html#CURRENT_CACHE_KEY\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"MUSIC_FONT_STACK\",\"url\":\"classes/Glyph.html#MUSIC_FONT_STACK\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"lookupFontMetric\",\"url\":\"classes/Glyph.html#lookupFontMetric\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"lookupGlyph\",\"url\":\"classes/Glyph.html#lookupGlyph\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Glyph.html#lookupGlyph.lookupGlyph-1.__type\",\"classes\":\"\",\"parent\":\"Glyph.lookupGlyph.lookupGlyph\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/Glyph.html#lookupGlyph.lookupGlyph-1.__type.font-3\",\"classes\":\"\",\"parent\":\"Glyph.lookupGlyph.lookupGlyph.__type\"},{\"kind\":1024,\"name\":\"glyph\",\"url\":\"classes/Glyph.html#lookupGlyph.lookupGlyph-1.__type.glyph\",\"classes\":\"\",\"parent\":\"Glyph.lookupGlyph.lookupGlyph.__type\"},{\"kind\":2048,\"name\":\"loadMetrics\",\"url\":\"classes/Glyph.html#loadMetrics\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"renderGlyph\",\"url\":\"classes/Glyph.html#renderGlyph\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"renderOutline\",\"url\":\"classes/Glyph.html#renderOutline\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getOutlineBoundingBox\",\"url\":\"classes/Glyph.html#getOutlineBoundingBox\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Glyph.html#getWidth\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Glyph.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Glyph.html#constructor\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"bbox\",\"url\":\"classes/Glyph.html#bbox\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/Glyph.html#code\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"metrics\",\"url\":\"classes/Glyph.html#metrics\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"topGlyphs\",\"url\":\"classes/Glyph.html#topGlyphs\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"botGlyphs\",\"url\":\"classes/Glyph.html#botGlyphs\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/Glyph.html#scale\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Glyph.html#draw\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getCode\",\"url\":\"classes/Glyph.html#getCode\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setOptions\",\"url\":\"classes/Glyph.html#setOptions\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setPoint\",\"url\":\"classes/Glyph.html#setPoint\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Glyph.html#setStave\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Glyph.html#getXShift\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Glyph.html#setXShift\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getYshift\",\"url\":\"classes/Glyph.html#getYshift\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Glyph.html#setYShift\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Glyph.html#reset\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"checkMetrics\",\"url\":\"classes/Glyph.html#checkMetrics\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/Glyph.html#getMetrics\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setOriginX\",\"url\":\"classes/Glyph.html#setOriginX\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setOriginY\",\"url\":\"classes/Glyph.html#setOriginY\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setOrigin\",\"url\":\"classes/Glyph.html#setOrigin\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/Glyph.html#render\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Glyph.html#checkStave\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"renderToStave\",\"url\":\"classes/Glyph.html#renderToStave\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Glyph.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Glyph.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Glyph.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Glyph.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Glyph.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Glyph.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Glyph.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Glyph.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Glyph.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Glyph.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Glyph.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Glyph.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Glyph.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Glyph.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Glyph.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Glyph.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Glyph.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Glyph.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Glyph.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Glyph.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Glyph.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Glyph.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Glyph.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Glyph.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Glyph.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Glyph.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Glyph.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Glyph.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Glyph.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Glyph.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Glyph.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Glyph.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Glyph.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Glyph.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":256,\"name\":\"GlyphNoteOptions\",\"url\":\"interfaces/GlyphNoteOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"ignoreTicks\",\"url\":\"interfaces/GlyphNoteOptions.html#ignoreTicks\",\"classes\":\"\",\"parent\":\"GlyphNoteOptions\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/GlyphNoteOptions.html#line\",\"classes\":\"\",\"parent\":\"GlyphNoteOptions\"},{\"kind\":128,\"name\":\"GlyphNote\",\"url\":\"classes/GlyphNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/GlyphNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/GlyphNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/GlyphNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/GlyphNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GlyphNote.html#constructor\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setGlyph\",\"url\":\"classes/GlyphNote.html#setGlyph\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/GlyphNote.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/GlyphNote.html#preFormat\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"drawModifiers\",\"url\":\"classes/GlyphNote.html#drawModifiers\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/GlyphNote.html#getGlyphWidth\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/GlyphNote.html#draw-1\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/GlyphNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/GlyphNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/GlyphNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/GlyphNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GlyphNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/GlyphNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/GlyphNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/GlyphNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/GlyphNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/GlyphNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/GlyphNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/GlyphNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/GlyphNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/GlyphNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/GlyphNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/GlyphNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/GlyphNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/GlyphNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/GlyphNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/GlyphNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/GlyphNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/GlyphNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/GlyphNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/GlyphNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/GlyphNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/GlyphNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/GlyphNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/GlyphNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/GlyphNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/GlyphNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/GlyphNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/GlyphNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/GlyphNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/GlyphNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/GlyphNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/GlyphNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/GlyphNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/GlyphNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/GlyphNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/GlyphNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/GlyphNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/GlyphNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/GlyphNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/GlyphNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/GlyphNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/GlyphNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/GlyphNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/GlyphNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/GlyphNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/GlyphNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/GlyphNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/GlyphNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GlyphNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"GlyphNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/GlyphNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"GlyphNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/GlyphNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"GlyphNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/GlyphNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/GlyphNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/GlyphNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/GlyphNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/GlyphNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/GlyphNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/GlyphNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/GlyphNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/GlyphNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/GlyphNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/GlyphNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/GlyphNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/GlyphNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/GlyphNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/GlyphNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/GlyphNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/GlyphNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/GlyphNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/GlyphNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/GlyphNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/GlyphNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/GlyphNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/GlyphNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/GlyphNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/GlyphNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/GlyphNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/GlyphNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/GlyphNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/GlyphNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/GlyphNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/GlyphNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/GlyphNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/GlyphNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/GlyphNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/GlyphNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/GlyphNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/GlyphNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/GlyphNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/GlyphNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/GlyphNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/GlyphNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/GlyphNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/GlyphNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/GlyphNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/GlyphNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/GlyphNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/GlyphNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/GlyphNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/GlyphNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/GlyphNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/GlyphNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/GlyphNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/GlyphNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/GlyphNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/GlyphNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/GlyphNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/GlyphNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/GlyphNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/GlyphNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/GlyphNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/GlyphNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/GlyphNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/GlyphNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/GlyphNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/GlyphNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/GlyphNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/GlyphNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/GlyphNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/GlyphNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/GlyphNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/GlyphNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/GlyphNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/GlyphNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/GlyphNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/GlyphNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":256,\"name\":\"GraceNoteStruct\",\"url\":\"interfaces/GraceNoteStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"slash\",\"url\":\"interfaces/GraceNoteStruct.html#slash\",\"classes\":\"\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"interfaces/GraceNoteStruct.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"auto_stem\",\"url\":\"interfaces/GraceNoteStruct.html#auto_stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"stem_down_x_offset\",\"url\":\"interfaces/GraceNoteStruct.html#stem_down_x_offset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"stem_up_x_offset\",\"url\":\"interfaces/GraceNoteStruct.html#stem_up_x_offset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"interfaces/GraceNoteStruct.html#stroke_px\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"interfaces/GraceNoteStruct.html#glyph_font_scale\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"octave_shift\",\"url\":\"interfaces/GraceNoteStruct.html#octave_shift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"clef\",\"url\":\"interfaces/GraceNoteStruct.html#clef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"interfaces/GraceNoteStruct.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/GraceNoteStruct.html#duration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/GraceNoteStruct.html#line\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/GraceNoteStruct.html#dots\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/GraceNoteStruct.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"align_center\",\"url\":\"interfaces/GraceNoteStruct.html#align_center\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"duration_override\",\"url\":\"interfaces/GraceNoteStruct.html#duration_override\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":128,\"name\":\"GraceNote\",\"url\":\"classes/GraceNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/GraceNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"LEDGER_LINE_OFFSET\",\"url\":\"classes/GraceNote.html#LEDGER_LINE_OFFSET\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"SCALE\",\"url\":\"classes/GraceNote.html#SCALE-1\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/GraceNote.html#DEBUG\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"STEM_UP\",\"url\":\"classes/GraceNote.html#STEM_UP\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"STEM_DOWN\",\"url\":\"classes/GraceNote.html#STEM_DOWN\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"minNoteheadPadding\",\"url\":\"classes/GraceNote.html#minNoteheadPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/GraceNote.html#format\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/GraceNote.html#postFormat-2\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/GraceNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/GraceNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/GraceNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GraceNote.html#constructor\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemExtension\",\"url\":\"classes/GraceNote.html#getStemExtension\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStaveNoteScale\",\"url\":\"classes/GraceNote.html#getStaveNoteScale\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/GraceNote.html#draw-1\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"calcBeamedNotesSlashBBox\",\"url\":\"classes/GraceNote.html#calcBeamedNotesSlashBBox\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"minLine\",\"url\":\"classes/GraceNote.html#minLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"maxLine\",\"url\":\"classes/GraceNote.html#maxLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/GraceNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/GraceNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"buildStem\",\"url\":\"classes/GraceNote.html#buildStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"buildNoteHeads\",\"url\":\"classes/GraceNote.html#buildNoteHeads\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"autoStem\",\"url\":\"classes/GraceNote.html#autoStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"calculateOptimalStemDirection\",\"url\":\"classes/GraceNote.html#calculateOptimalStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"calculateKeyProps\",\"url\":\"classes/GraceNote.html#calculateKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/GraceNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/GraceNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/GraceNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"isChord\",\"url\":\"classes/GraceNote.html#isChord\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/GraceNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"hasFlag\",\"url\":\"classes/GraceNote.html#hasFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemX\",\"url\":\"classes/GraceNote.html#getStemX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/GraceNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/GraceNote.html#getYForBottomText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/GraceNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"isDisplaced\",\"url\":\"classes/GraceNote.html#isDisplaced\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setNoteDisplaced\",\"url\":\"classes/GraceNote.html#setNoteDisplaced\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/GraceNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/GraceNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/GraceNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/GraceNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"GraceNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/GraceNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"GraceNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/GraceNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"GraceNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/GraceNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setStemStyle\",\"url\":\"classes/GraceNote.html#setStemStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemStyle\",\"url\":\"classes/GraceNote.html#getStemStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setLedgerLineStyle\",\"url\":\"classes/GraceNote.html#setLedgerLineStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getLedgerLineStyle\",\"url\":\"classes/GraceNote.html#getLedgerLineStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setFlagStyle\",\"url\":\"classes/GraceNote.html#setFlagStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getFlagStyle\",\"url\":\"classes/GraceNote.html#getFlagStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setKeyStyle\",\"url\":\"classes/GraceNote.html#setKeyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setKeyLine\",\"url\":\"classes/GraceNote.html#setKeyLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getKeyLine\",\"url\":\"classes/GraceNote.html#getKeyLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getVoiceShiftWidth\",\"url\":\"classes/GraceNote.html#getVoiceShiftWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"calcNoteDisplacements\",\"url\":\"classes/GraceNote.html#calcNoteDisplacements\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/GraceNote.html#preFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getNoteHeadBounds\",\"url\":\"classes/GraceNote.html#getNoteHeadBounds\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getNoteHeadBeginX\",\"url\":\"classes/GraceNote.html#getNoteHeadBeginX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getNoteHeadEndX\",\"url\":\"classes/GraceNote.html#getNoteHeadEndX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"noteHeads\",\"url\":\"classes/GraceNote.html#noteHeads\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"note_heads\",\"url\":\"classes/GraceNote.html#note_heads\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"drawLedgerLines\",\"url\":\"classes/GraceNote.html#drawLedgerLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"drawModifiers\",\"url\":\"classes/GraceNote.html#drawModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"shouldDrawFlag\",\"url\":\"classes/GraceNote.html#shouldDrawFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"drawFlag\",\"url\":\"classes/GraceNote.html#drawFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"drawNoteHeads\",\"url\":\"classes/GraceNote.html#drawNoteHeads\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"drawStem\",\"url\":\"classes/GraceNote.html#drawStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"classes/GraceNote.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"classes/GraceNote.html#stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStem\",\"url\":\"classes/GraceNote.html#getStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"checkStem\",\"url\":\"classes/GraceNote.html#checkStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setStem\",\"url\":\"classes/GraceNote.html#setStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"buildFlag\",\"url\":\"classes/GraceNote.html#buildFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getBaseCustomNoteHeadGlyphProps\",\"url\":\"classes/GraceNote.html#getBaseCustomNoteHeadGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemLength\",\"url\":\"classes/GraceNote.html#getStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/GraceNote.html#getBeamCount\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemMinimumLength\",\"url\":\"classes/GraceNote.html#getStemMinimumLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/GraceNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setStemDirection\",\"url\":\"classes/GraceNote.html#setStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getCenterGlyphX\",\"url\":\"classes/GraceNote.html#getCenterGlyphX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setStemLength\",\"url\":\"classes/GraceNote.html#setStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/GraceNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceNote.html#getStemExtents.getStemExtents-1.__type-2\",\"classes\":\"\",\"parent\":\"GraceNote.getStemExtents.getStemExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/GraceNote.html#getStemExtents.getStemExtents-1.__type-2.topY\",\"classes\":\"\",\"parent\":\"GraceNote.getStemExtents.getStemExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/GraceNote.html#getStemExtents.getStemExtents-1.__type-2.baseY\",\"classes\":\"\",\"parent\":\"GraceNote.getStemExtents.getStemExtents.__type\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/GraceNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/GraceNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/GraceNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/GraceNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/GraceNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"GraceNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/GraceNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/GraceNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/GraceNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/GraceNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/GraceNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/GraceNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/GraceNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/GraceNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/GraceNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/GraceNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/GraceNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/GraceNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/GraceNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/GraceNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/GraceNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/GraceNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/GraceNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/GraceNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/GraceNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/GraceNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/GraceNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/GraceNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/GraceNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/GraceNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/GraceNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/GraceNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/GraceNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/GraceNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/GraceNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/GraceNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/GraceNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/GraceNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/GraceNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/GraceNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/GraceNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/GraceNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/GraceNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/GraceNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/GraceNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/GraceNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/GraceNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/GraceNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/GraceNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/GraceNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/GraceNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/GraceNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/GraceNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/GraceNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/GraceNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/GraceNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/GraceNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/GraceNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/GraceNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/GraceNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/GraceNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/GraceNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/GraceNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/GraceNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/GraceNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/GraceNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/GraceNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/GraceNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/GraceNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/GraceNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/GraceNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/GraceNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/GraceNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/GraceNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/GraceNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/GraceNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/GraceNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/GraceNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/GraceNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/GraceNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/GraceNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/GraceNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/GraceNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/GraceNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/GraceNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/GraceNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/GraceNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/GraceNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/GraceNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/GraceNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/GraceNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/GraceNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/GraceNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/GraceNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/GraceNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/GraceNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/GraceNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/GraceNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/GraceNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/GraceNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/GraceNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/GraceNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/GraceNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/GraceNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/GraceNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/GraceNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/GraceNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/GraceNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/GraceNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/GraceNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/GraceNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/GraceNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/GraceNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/GraceNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":128,\"name\":\"GraceNoteGroup\",\"url\":\"classes/GraceNoteGroup.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/GraceNoteGroup.html#DEBUG\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/GraceNoteGroup.html#CATEGORY\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/GraceNoteGroup.html#format\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/GraceNoteGroup.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/GraceNoteGroup.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/GraceNoteGroup.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GraceNoteGroup.html#constructor\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/GraceNoteGroup.html#render_options\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceNoteGroup.html#render_options.__type\",\"classes\":\"\",\"parent\":\"GraceNoteGroup.render_options\"},{\"kind\":1024,\"name\":\"slur_y_shift\",\"url\":\"classes/GraceNoteGroup.html#render_options.__type.slur_y_shift\",\"classes\":\"\",\"parent\":\"GraceNoteGroup.render_options.__type\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/GraceNoteGroup.html#preFormat\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"beamNotes\",\"url\":\"classes/GraceNoteGroup.html#beamNotes\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/GraceNoteGroup.html#setWidth\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/GraceNoteGroup.html#getWidth\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getGraceNotes\",\"url\":\"classes/GraceNoteGroup.html#getGraceNotes\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/GraceNoteGroup.html#draw\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/GraceNoteGroup.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/GraceNoteGroup.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/GraceNoteGroup.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/GraceNoteGroup.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/GraceNoteGroup.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/GraceNoteGroup.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/GraceNoteGroup.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/GraceNoteGroup.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/GraceNoteGroup.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/GraceNoteGroup.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/GraceNoteGroup.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/GraceNoteGroup.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/GraceNoteGroup.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/GraceNoteGroup.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/GraceNoteGroup.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/GraceNoteGroup.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/GraceNoteGroup.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/GraceNoteGroup.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/GraceNoteGroup.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/GraceNoteGroup.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/GraceNoteGroup.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/GraceNoteGroup.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/GraceNoteGroup.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/GraceNoteGroup.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/GraceNoteGroup.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/GraceNoteGroup.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/GraceNoteGroup.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/GraceNoteGroup.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/GraceNoteGroup.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/GraceNoteGroup.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/GraceNoteGroup.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/GraceNoteGroup.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/GraceNoteGroup.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/GraceNoteGroup.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/GraceNoteGroup.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/GraceNoteGroup.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/GraceNoteGroup.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/GraceNoteGroup.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/GraceNoteGroup.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/GraceNoteGroup.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/GraceNoteGroup.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/GraceNoteGroup.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/GraceNoteGroup.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/GraceNoteGroup.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/GraceNoteGroup.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/GraceNoteGroup.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/GraceNoteGroup.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/GraceNoteGroup.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/GraceNoteGroup.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/GraceNoteGroup.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/GraceNoteGroup.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/GraceNoteGroup.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":128,\"name\":\"GraceTabNote\",\"url\":\"classes/GraceTabNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/GraceTabNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/GraceTabNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/GraceTabNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/GraceTabNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GraceTabNote.html#constructor\",\"classes\":\"\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"greatestString\",\"url\":\"classes/GraceTabNote.html#greatestString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"leastString\",\"url\":\"classes/GraceTabNote.html#leastString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/GraceTabNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setGhost\",\"url\":\"classes/GraceTabNote.html#setGhost\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/GraceTabNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemExtension\",\"url\":\"classes/GraceTabNote.html#getStemExtension\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"updateWidth\",\"url\":\"classes/GraceTabNote.html#updateWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/GraceTabNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getPositions\",\"url\":\"classes/GraceTabNote.html#getPositions\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/GraceTabNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceTabNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"GraceTabNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/GraceTabNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"GraceTabNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/GraceTabNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"GraceTabNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/GraceTabNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/GraceTabNote.html#preFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemX\",\"url\":\"classes/GraceTabNote.html#getStemX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemY\",\"url\":\"classes/GraceTabNote.html#getStemY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/GraceTabNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceTabNote.html#getStemExtents.getStemExtents-1.__type-2\",\"classes\":\"\",\"parent\":\"GraceTabNote.getStemExtents.getStemExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/GraceTabNote.html#getStemExtents.getStemExtents-1.__type-2.topY\",\"classes\":\"\",\"parent\":\"GraceTabNote.getStemExtents.getStemExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/GraceTabNote.html#getStemExtents.getStemExtents-1.__type-2.baseY\",\"classes\":\"\",\"parent\":\"GraceTabNote.getStemExtents.getStemExtents.__type\"},{\"kind\":2048,\"name\":\"drawFlag\",\"url\":\"classes/GraceTabNote.html#drawFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"drawModifiers\",\"url\":\"classes/GraceTabNote.html#drawModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"drawStemThrough\",\"url\":\"classes/GraceTabNote.html#drawStemThrough\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"drawPositions\",\"url\":\"classes/GraceTabNote.html#drawPositions\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/GraceTabNote.html#draw-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"classes/GraceTabNote.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"classes/GraceTabNote.html#stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStem\",\"url\":\"classes/GraceTabNote.html#getStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"checkStem\",\"url\":\"classes/GraceTabNote.html#checkStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setStem\",\"url\":\"classes/GraceTabNote.html#setStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"buildStem\",\"url\":\"classes/GraceTabNote.html#buildStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"buildFlag\",\"url\":\"classes/GraceTabNote.html#buildFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getBaseCustomNoteHeadGlyphProps\",\"url\":\"classes/GraceTabNote.html#getBaseCustomNoteHeadGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemLength\",\"url\":\"classes/GraceTabNote.html#getStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/GraceTabNote.html#getBeamCount\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemMinimumLength\",\"url\":\"classes/GraceTabNote.html#getStemMinimumLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/GraceTabNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setStemDirection\",\"url\":\"classes/GraceTabNote.html#setStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getCenterGlyphX\",\"url\":\"classes/GraceTabNote.html#getCenterGlyphX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setStemLength\",\"url\":\"classes/GraceTabNote.html#setStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/GraceTabNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/GraceTabNote.html#getYForBottomText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"hasFlag\",\"url\":\"classes/GraceTabNote.html#hasFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/GraceTabNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"drawStem\",\"url\":\"classes/GraceTabNote.html#drawStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/GraceTabNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/GraceTabNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/GraceTabNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/GraceTabNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceTabNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/GraceTabNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/GraceTabNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/GraceTabNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/GraceTabNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/GraceTabNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/GraceTabNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/GraceTabNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/GraceTabNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/GraceTabNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/GraceTabNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/GraceTabNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/GraceTabNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/GraceTabNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/GraceTabNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/GraceTabNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/GraceTabNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/GraceTabNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/GraceTabNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/GraceTabNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/GraceTabNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/GraceTabNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/GraceTabNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/GraceTabNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/GraceTabNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/GraceTabNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/GraceTabNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/GraceTabNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/GraceTabNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/GraceTabNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/GraceTabNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/GraceTabNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/GraceTabNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/GraceTabNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/GraceTabNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/GraceTabNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/GraceTabNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/GraceTabNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/GraceTabNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/GraceTabNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/GraceTabNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/GraceTabNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/GraceTabNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/GraceTabNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/GraceTabNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/GraceTabNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/GraceTabNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/GraceTabNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/GraceTabNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/GraceTabNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/GraceTabNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/GraceTabNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/GraceTabNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/GraceTabNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/GraceTabNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/GraceTabNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/GraceTabNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/GraceTabNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/GraceTabNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/GraceTabNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/GraceTabNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/GraceTabNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/GraceTabNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/GraceTabNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/GraceTabNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/GraceTabNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/GraceTabNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/GraceTabNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/GraceTabNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/GraceTabNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/GraceTabNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/GraceTabNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/GraceTabNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/GraceTabNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/GraceTabNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/GraceTabNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/GraceTabNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/GraceTabNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/GraceTabNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/GraceTabNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/GraceTabNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/GraceTabNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/GraceTabNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/GraceTabNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/GraceTabNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/GraceTabNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/GraceTabNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/GraceTabNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/GraceTabNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/GraceTabNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/GraceTabNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/GraceTabNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/GraceTabNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/GraceTabNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/GraceTabNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/GraceTabNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/GraceTabNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/GraceTabNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/GraceTabNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/GraceTabNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/GraceTabNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/GraceTabNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/GraceTabNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/GraceTabNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/GraceTabNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/GraceTabNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/GraceTabNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/GraceTabNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/GraceTabNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/GraceTabNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/GraceTabNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/GraceTabNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/GraceTabNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/GraceTabNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/GraceTabNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/GraceTabNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":128,\"name\":\"KeyManager\",\"url\":\"classes/KeyManager.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/KeyManager.html#constructor\",\"classes\":\"\",\"parent\":\"KeyManager\"},{\"kind\":2048,\"name\":\"setKey\",\"url\":\"classes/KeyManager.html#setKey\",\"classes\":\"\",\"parent\":\"KeyManager\"},{\"kind\":2048,\"name\":\"getKey\",\"url\":\"classes/KeyManager.html#getKey\",\"classes\":\"\",\"parent\":\"KeyManager\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/KeyManager.html#reset\",\"classes\":\"\",\"parent\":\"KeyManager\"},{\"kind\":2048,\"name\":\"getAccidental\",\"url\":\"classes/KeyManager.html#getAccidental\",\"classes\":\"\",\"parent\":\"KeyManager\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/KeyManager.html#getAccidental.getAccidental-1.__type\",\"classes\":\"\",\"parent\":\"KeyManager.getAccidental.getAccidental\"},{\"kind\":1024,\"name\":\"note\",\"url\":\"classes/KeyManager.html#getAccidental.getAccidental-1.__type.note\",\"classes\":\"\",\"parent\":\"KeyManager.getAccidental.getAccidental.__type\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"classes/KeyManager.html#getAccidental.getAccidental-1.__type.accidental\",\"classes\":\"\",\"parent\":\"KeyManager.getAccidental.getAccidental.__type\"},{\"kind\":1024,\"name\":\"change\",\"url\":\"classes/KeyManager.html#getAccidental.getAccidental-1.__type.change\",\"classes\":\"\",\"parent\":\"KeyManager.getAccidental.getAccidental.__type\"},{\"kind\":2048,\"name\":\"selectNote\",\"url\":\"classes/KeyManager.html#selectNote\",\"classes\":\"\",\"parent\":\"KeyManager\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/KeyManager.html#selectNote.selectNote-1.__type-1\",\"classes\":\"\",\"parent\":\"KeyManager.selectNote.selectNote\"},{\"kind\":1024,\"name\":\"note\",\"url\":\"classes/KeyManager.html#selectNote.selectNote-1.__type-1.note-1\",\"classes\":\"\",\"parent\":\"KeyManager.selectNote.selectNote.__type\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"classes/KeyManager.html#selectNote.selectNote-1.__type-1.accidental-1\",\"classes\":\"\",\"parent\":\"KeyManager.selectNote.selectNote.__type\"},{\"kind\":1024,\"name\":\"change\",\"url\":\"classes/KeyManager.html#selectNote.selectNote-1.__type-1.change-1\",\"classes\":\"\",\"parent\":\"KeyManager.selectNote.selectNote.__type\"},{\"kind\":128,\"name\":\"KeySignature\",\"url\":\"classes/KeySignature.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/KeySignature.html#CATEGORY\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":1024,\"name\":\"accidentalSpacing\",\"url\":\"classes/KeySignature.html#accidentalSpacing\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/KeySignature.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/KeySignature.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/KeySignature.html#constructor\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"convertToGlyph\",\"url\":\"classes/KeySignature.html#convertToGlyph\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"cancelKey\",\"url\":\"classes/KeySignature.html#cancelKey\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"convertToCancelAccList\",\"url\":\"classes/KeySignature.html#convertToCancelAccList\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"addToStave\",\"url\":\"classes/KeySignature.html#addToStave\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"convertAccLines\",\"url\":\"classes/KeySignature.html#convertAccLines\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/KeySignature.html#getPadding\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/KeySignature.html#getWidth\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setKeySig\",\"url\":\"classes/KeySignature.html#setKeySig\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"alterKey\",\"url\":\"classes/KeySignature.html#alterKey\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"convertToAlterAccList\",\"url\":\"classes/KeySignature.html#convertToAlterAccList\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/KeySignature.html#format\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getGlyphs\",\"url\":\"classes/KeySignature.html#getGlyphs\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/KeySignature.html#draw\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/KeySignature.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/KeySignature.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/KeySignature.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/KeySignature.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/KeySignature.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/KeySignature.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/KeySignature.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/KeySignature.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/KeySignature.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/KeySignature.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/KeySignature.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/KeySignature.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/KeySignature.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/KeySignature.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/KeySignature.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/KeySignature.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/KeySignature.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/KeySignature.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/KeySignature.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/KeySignature.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/KeySignature.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/KeySignature.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/KeySignature.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/KeySignature.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/KeySignature.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/KeySignature.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/KeySignature.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/KeySignature.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/KeySignature.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/KeySignature.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/KeySignature.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/KeySignature.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/KeySignature.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/KeySignature.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/KeySignature.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/KeySignature.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/KeySignature.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/KeySignature.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/KeySignature.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/KeySignature.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/KeySignature.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/KeySignature.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/KeySignature.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/KeySignature.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/KeySignature.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/KeySignature.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":128,\"name\":\"KeySigNote\",\"url\":\"classes/KeySigNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/KeySigNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/KeySigNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/KeySigNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/KeySigNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/KeySigNote.html#constructor\",\"classes\":\"\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/KeySigNote.html#addToModifierContext\",\"classes\":\"\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/KeySigNote.html#preFormat\",\"classes\":\"\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/KeySigNote.html#draw-1\",\"classes\":\"\",\"parent\":\"KeySigNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/KeySigNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/KeySigNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/KeySigNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/KeySigNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/KeySigNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/KeySigNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/KeySigNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/KeySigNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/KeySigNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/KeySigNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/KeySigNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/KeySigNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/KeySigNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/KeySigNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/KeySigNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/KeySigNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/KeySigNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/KeySigNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/KeySigNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/KeySigNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/KeySigNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/KeySigNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/KeySigNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/KeySigNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/KeySigNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/KeySigNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/KeySigNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/KeySigNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/KeySigNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/KeySigNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/KeySigNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/KeySigNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/KeySigNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/KeySigNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/KeySigNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/KeySigNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/KeySigNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/KeySigNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/KeySigNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/KeySigNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/KeySigNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/KeySigNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/KeySigNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/KeySigNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/KeySigNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/KeySigNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/KeySigNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/KeySigNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/KeySigNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/KeySigNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/KeySigNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/KeySigNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/KeySigNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/KeySigNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"KeySigNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/KeySigNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"KeySigNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/KeySigNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"KeySigNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/KeySigNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/KeySigNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/KeySigNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/KeySigNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/KeySigNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/KeySigNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/KeySigNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/KeySigNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/KeySigNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/KeySigNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/KeySigNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/KeySigNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/KeySigNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/KeySigNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/KeySigNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/KeySigNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/KeySigNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/KeySigNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/KeySigNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/KeySigNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/KeySigNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/KeySigNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/KeySigNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/KeySigNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/KeySigNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/KeySigNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/KeySigNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/KeySigNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/KeySigNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/KeySigNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/KeySigNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/KeySigNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/KeySigNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/KeySigNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/KeySigNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/KeySigNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/KeySigNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/KeySigNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/KeySigNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/KeySigNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/KeySigNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/KeySigNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/KeySigNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/KeySigNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/KeySigNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/KeySigNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/KeySigNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/KeySigNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/KeySigNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/KeySigNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/KeySigNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/KeySigNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/KeySigNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/KeySigNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/KeySigNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/KeySigNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/KeySigNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/KeySigNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/KeySigNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/KeySigNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/KeySigNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/KeySigNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/KeySigNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/KeySigNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/KeySigNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/KeySigNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/KeySigNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/KeySigNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/KeySigNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/KeySigNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/KeySigNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/KeySigNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/KeySigNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/KeySigNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/KeySigNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":8,\"name\":\"ModifierPosition\",\"url\":\"enums/ModifierPosition.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"CENTER\",\"url\":\"enums/ModifierPosition.html#CENTER\",\"classes\":\"\",\"parent\":\"ModifierPosition\"},{\"kind\":16,\"name\":\"LEFT\",\"url\":\"enums/ModifierPosition.html#LEFT\",\"classes\":\"\",\"parent\":\"ModifierPosition\"},{\"kind\":16,\"name\":\"RIGHT\",\"url\":\"enums/ModifierPosition.html#RIGHT\",\"classes\":\"\",\"parent\":\"ModifierPosition\"},{\"kind\":16,\"name\":\"ABOVE\",\"url\":\"enums/ModifierPosition.html#ABOVE\",\"classes\":\"\",\"parent\":\"ModifierPosition\"},{\"kind\":16,\"name\":\"BELOW\",\"url\":\"enums/ModifierPosition.html#BELOW\",\"classes\":\"\",\"parent\":\"ModifierPosition\"},{\"kind\":128,\"name\":\"Modifier\",\"url\":\"classes/Modifier.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Modifier.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Modifier.html#Position\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Modifier.html#PositionString\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Modifier.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Modifier.html#constructor\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Modifier.html#getWidth\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Modifier.html#setWidth\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Modifier.html#getNote\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Modifier.html#checkAttachedNote\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Modifier.html#setNote\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Modifier.html#getIndex\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Modifier.html#checkIndex\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Modifier.html#setIndex\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Modifier.html#getModifierContext\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Modifier.html#checkModifierContext\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Modifier.html#setModifierContext\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Modifier.html#getPosition\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Modifier.html#setPosition\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Modifier.html#setTextLine\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Modifier.html#setYShift\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Modifier.html#setSpacingFromNextModifier\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Modifier.html#getSpacingFromNextModifier\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Modifier.html#setXShift\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Modifier.html#getXShift\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Modifier.html#draw\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Modifier.html#alignSubNotesWithNote\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Modifier.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Modifier.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Modifier.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Modifier.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Modifier.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Modifier.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Modifier.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Modifier.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Modifier.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Modifier.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Modifier.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Modifier.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Modifier.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Modifier.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Modifier.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Modifier.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Modifier.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Modifier.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Modifier.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Modifier.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Modifier.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Modifier.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Modifier.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Modifier.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Modifier.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Modifier.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Modifier.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Modifier.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Modifier.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Modifier.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Modifier.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Modifier.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Modifier.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Modifier.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":256,\"name\":\"ModifierContextState\",\"url\":\"interfaces/ModifierContextState.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"right_shift\",\"url\":\"interfaces/ModifierContextState.html#right_shift\",\"classes\":\"\",\"parent\":\"ModifierContextState\"},{\"kind\":1024,\"name\":\"left_shift\",\"url\":\"interfaces/ModifierContextState.html#left_shift\",\"classes\":\"\",\"parent\":\"ModifierContextState\"},{\"kind\":1024,\"name\":\"text_line\",\"url\":\"interfaces/ModifierContextState.html#text_line\",\"classes\":\"\",\"parent\":\"ModifierContextState\"},{\"kind\":1024,\"name\":\"top_text_line\",\"url\":\"interfaces/ModifierContextState.html#top_text_line\",\"classes\":\"\",\"parent\":\"ModifierContextState\"},{\"kind\":256,\"name\":\"ModifierContextMetrics\",\"url\":\"interfaces/ModifierContextMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/ModifierContextMetrics.html#width\",\"classes\":\"\",\"parent\":\"ModifierContextMetrics\"},{\"kind\":1024,\"name\":\"spacing\",\"url\":\"interfaces/ModifierContextMetrics.html#spacing\",\"classes\":\"\",\"parent\":\"ModifierContextMetrics\"},{\"kind\":4194304,\"name\":\"ModifierContextMember\",\"url\":\"types/ModifierContextMember.html\",\"classes\":\"\"},{\"kind\":128,\"name\":\"ModifierContext\",\"url\":\"classes/ModifierContext.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/ModifierContext.html#DEBUG\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ModifierContext.html#constructor\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/ModifierContext.html#addModifier\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"addMember\",\"url\":\"classes/ModifierContext.html#addMember\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/ModifierContext.html#getModifiers\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getMembers\",\"url\":\"classes/ModifierContext.html#getMembers\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/ModifierContext.html#getWidth\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getLeftShift\",\"url\":\"classes/ModifierContext.html#getLeftShift\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getRightShift\",\"url\":\"classes/ModifierContext.html#getRightShift\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getState\",\"url\":\"classes/ModifierContext.html#getState\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/ModifierContext.html#getMetrics\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/ModifierContext.html#preFormat\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/ModifierContext.html#postFormat\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":256,\"name\":\"MultimeasureRestRenderOptions\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"number_of_measures\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#number_of_measures\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"use_symbols\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#use_symbols\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"symbol_spacing\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#symbol_spacing\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"show_number\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#show_number\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"number_line\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#number_line\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"number_glyph_point\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#number_glyph_point\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"padding_left\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#padding_left\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"padding_right\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#padding_right\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#line\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"spacing_between_lines_px\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#spacing_between_lines_px\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"semibreve_rest_glyph_scale\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#semibreve_rest_glyph_scale\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"line_thickness\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#line_thickness\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"serif_thickness\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#serif_thickness\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":128,\"name\":\"MultiMeasureRest\",\"url\":\"classes/MultiMeasureRest.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/MultiMeasureRest.html#CATEGORY\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/MultiMeasureRest.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/MultiMeasureRest.html#constructor\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/MultiMeasureRest.html#render_options\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getXs\",\"url\":\"classes/MultiMeasureRest.html#getXs\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/MultiMeasureRest.html#getXs.getXs-1.__type\",\"classes\":\"\",\"parent\":\"MultiMeasureRest.getXs.getXs\"},{\"kind\":1024,\"name\":\"left\",\"url\":\"classes/MultiMeasureRest.html#getXs.getXs-1.__type.left\",\"classes\":\"\",\"parent\":\"MultiMeasureRest.getXs.getXs.__type\"},{\"kind\":1024,\"name\":\"right\",\"url\":\"classes/MultiMeasureRest.html#getXs.getXs-1.__type.right\",\"classes\":\"\",\"parent\":\"MultiMeasureRest.getXs.getXs.__type\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/MultiMeasureRest.html#setStave\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/MultiMeasureRest.html#getStave\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/MultiMeasureRest.html#checkStave\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"drawLine\",\"url\":\"classes/MultiMeasureRest.html#drawLine\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"drawSymbols\",\"url\":\"classes/MultiMeasureRest.html#drawSymbols\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/MultiMeasureRest.html#draw\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/MultiMeasureRest.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/MultiMeasureRest.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/MultiMeasureRest.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/MultiMeasureRest.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/MultiMeasureRest.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/MultiMeasureRest.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/MultiMeasureRest.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/MultiMeasureRest.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/MultiMeasureRest.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/MultiMeasureRest.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/MultiMeasureRest.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/MultiMeasureRest.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/MultiMeasureRest.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/MultiMeasureRest.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/MultiMeasureRest.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/MultiMeasureRest.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/MultiMeasureRest.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/MultiMeasureRest.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/MultiMeasureRest.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/MultiMeasureRest.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/MultiMeasureRest.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/MultiMeasureRest.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/MultiMeasureRest.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/MultiMeasureRest.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/MultiMeasureRest.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/MultiMeasureRest.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/MultiMeasureRest.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/MultiMeasureRest.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/MultiMeasureRest.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/MultiMeasureRest.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/MultiMeasureRest.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/MultiMeasureRest.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/MultiMeasureRest.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/MultiMeasureRest.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":256,\"name\":\"NoteAccidental\",\"url\":\"interfaces/NoteAccidental.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"note\",\"url\":\"interfaces/NoteAccidental.html#note\",\"classes\":\"\",\"parent\":\"NoteAccidental\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"interfaces/NoteAccidental.html#accidental\",\"classes\":\"\",\"parent\":\"NoteAccidental\"},{\"kind\":256,\"name\":\"NoteParts\",\"url\":\"interfaces/NoteParts.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"root\",\"url\":\"interfaces/NoteParts.html#root\",\"classes\":\"\",\"parent\":\"NoteParts\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"interfaces/NoteParts.html#accidental\",\"classes\":\"\",\"parent\":\"NoteParts\"},{\"kind\":256,\"name\":\"KeyParts\",\"url\":\"interfaces/KeyParts.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"root\",\"url\":\"interfaces/KeyParts.html#root\",\"classes\":\"\",\"parent\":\"KeyParts\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"interfaces/KeyParts.html#accidental\",\"classes\":\"\",\"parent\":\"KeyParts\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/KeyParts.html#type\",\"classes\":\"\",\"parent\":\"KeyParts\"},{\"kind\":4194304,\"name\":\"KeyValue\",\"url\":\"types/KeyValue.html\",\"classes\":\"\"},{\"kind\":4194304,\"name\":\"RootValue\",\"url\":\"types/RootValue.html\",\"classes\":\"\"},{\"kind\":4194304,\"name\":\"AccidentalValue\",\"url\":\"types/AccidentalValue.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"Key\",\"url\":\"interfaces/Key.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"root_index\",\"url\":\"interfaces/Key.html#root_index\",\"classes\":\"\",\"parent\":\"Key\"},{\"kind\":1024,\"name\":\"int_val\",\"url\":\"interfaces/Key.html#int_val\",\"classes\":\"\",\"parent\":\"Key\"},{\"kind\":128,\"name\":\"Music\",\"url\":\"classes/Music.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"NUM_TONES\",\"url\":\"classes/Music.html#NUM_TONES\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"roots\",\"url\":\"classes/Music.html#roots\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"root_values\",\"url\":\"classes/Music.html#root_values\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"root_indices\",\"url\":\"classes/Music.html#root_indices\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"canonical_notes\",\"url\":\"classes/Music.html#canonical_notes\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"diatonic_intervals\",\"url\":\"classes/Music.html#diatonic_intervals\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"diatonic_accidentals\",\"url\":\"classes/Music.html#diatonic_accidentals\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"intervals\",\"url\":\"classes/Music.html#intervals\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"scales\",\"url\":\"classes/Music.html#scales\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"scaleTypes\",\"url\":\"classes/Music.html#scaleTypes\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"accidentals\",\"url\":\"classes/Music.html#accidentals\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"noteValues\",\"url\":\"classes/Music.html#noteValues\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Music.html#constructor\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getNoteParts\",\"url\":\"classes/Music.html#getNoteParts\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getKeyParts\",\"url\":\"classes/Music.html#getKeyParts\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getNoteValue\",\"url\":\"classes/Music.html#getNoteValue\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getIntervalValue\",\"url\":\"classes/Music.html#getIntervalValue\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getCanonicalNoteName\",\"url\":\"classes/Music.html#getCanonicalNoteName\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getCanonicalIntervalName\",\"url\":\"classes/Music.html#getCanonicalIntervalName\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getRelativeNoteValue\",\"url\":\"classes/Music.html#getRelativeNoteValue\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getRelativeNoteName\",\"url\":\"classes/Music.html#getRelativeNoteName\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getScaleTones\",\"url\":\"classes/Music.html#getScaleTones\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getIntervalBetween\",\"url\":\"classes/Music.html#getIntervalBetween\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"createScaleMap\",\"url\":\"classes/Music.html#createScaleMap\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":256,\"name\":\"KeyProps\",\"url\":\"interfaces/KeyProps.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"stem_down_x_offset\",\"url\":\"interfaces/KeyProps.html#stem_down_x_offset\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"stem_up_x_offset\",\"url\":\"interfaces/KeyProps.html#stem_up_x_offset\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"key\",\"url\":\"interfaces/KeyProps.html#key\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"octave\",\"url\":\"interfaces/KeyProps.html#octave\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/KeyProps.html#line\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"int_value\",\"url\":\"interfaces/KeyProps.html#int_value\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"interfaces/KeyProps.html#accidental\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"interfaces/KeyProps.html#code\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"stroke\",\"url\":\"interfaces/KeyProps.html#stroke\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"shift_right\",\"url\":\"interfaces/KeyProps.html#shift_right\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"displaced\",\"url\":\"interfaces/KeyProps.html#displaced\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":256,\"name\":\"NoteMetrics\",\"url\":\"interfaces/NoteMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/NoteMetrics.html#width\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"glyphWidth\",\"url\":\"interfaces/NoteMetrics.html#glyphWidth\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"notePx\",\"url\":\"interfaces/NoteMetrics.html#notePx\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"modLeftPx\",\"url\":\"interfaces/NoteMetrics.html#modLeftPx\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"modRightPx\",\"url\":\"interfaces/NoteMetrics.html#modRightPx\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"leftDisplacedHeadPx\",\"url\":\"interfaces/NoteMetrics.html#leftDisplacedHeadPx\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"glyphPx\",\"url\":\"interfaces/NoteMetrics.html#glyphPx\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"rightDisplacedHeadPx\",\"url\":\"interfaces/NoteMetrics.html#rightDisplacedHeadPx\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":256,\"name\":\"NoteDuration\",\"url\":\"interfaces/NoteDuration.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/NoteDuration.html#duration\",\"classes\":\"\",\"parent\":\"NoteDuration\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/NoteDuration.html#dots\",\"classes\":\"\",\"parent\":\"NoteDuration\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/NoteDuration.html#type\",\"classes\":\"\",\"parent\":\"NoteDuration\"},{\"kind\":256,\"name\":\"ParsedNote\",\"url\":\"interfaces/ParsedNote.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/ParsedNote.html#duration\",\"classes\":\"\",\"parent\":\"ParsedNote\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/ParsedNote.html#type\",\"classes\":\"\",\"parent\":\"ParsedNote\"},{\"kind\":1024,\"name\":\"customTypes\",\"url\":\"interfaces/ParsedNote.html#customTypes\",\"classes\":\"\",\"parent\":\"ParsedNote\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/ParsedNote.html#dots\",\"classes\":\"\",\"parent\":\"ParsedNote\"},{\"kind\":1024,\"name\":\"ticks\",\"url\":\"interfaces/ParsedNote.html#ticks\",\"classes\":\"\",\"parent\":\"ParsedNote\"},{\"kind\":256,\"name\":\"NoteStruct\",\"url\":\"interfaces/NoteStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"interfaces/NoteStruct.html#keys\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/NoteStruct.html#duration\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/NoteStruct.html#line\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/NoteStruct.html#dots\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/NoteStruct.html#type\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":1024,\"name\":\"align_center\",\"url\":\"interfaces/NoteStruct.html#align_center\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":1024,\"name\":\"duration_override\",\"url\":\"interfaces/NoteStruct.html#duration_override\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":128,\"name\":\"Note\",\"url\":\"classes/Note.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Note.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/Note.html#plotMetrics\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/Note.html#getPoint\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Note.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Note.html#constructor\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/Note.html#glyphProps\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/Note.html#keys\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/Note.html#keyProps\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Note.html#render_options\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Note.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Note.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/Note.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/Note.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/Note.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/Note.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/Note.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/Note.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/Note.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/Note.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/Note.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/Note.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/Note.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/Note.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/Note.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/Note.html#getPlayNote\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/Note.html#setPlayNote\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/Note.html#isRest\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/Note.html#addStroke\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Note.html#getStave\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Note.html#checkStave\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Note.html#setStave\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/Note.html#getLeftDisplacedHeadPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/Note.html#getRightDisplacedHeadPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/Note.html#setLeftDisplacedHeadPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/Note.html#setRightDisplacedHeadPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/Note.html#shouldIgnoreTicks\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/Note.html#getLineNumber\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/Note.html#getLineForRest\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/Note.html#getGlyph\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/Note.html#getGlyphProps\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/Note.html#getGlyphWidth\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/Note.html#setYs\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/Note.html#getYs\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/Note.html#getYForTopText\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/Note.html#getVoice\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/Note.html#setVoice\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/Note.html#getTickContext\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/Note.html#setTickContext\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/Note.html#getDuration\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/Note.html#isDotted\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/Note.html#hasStem\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/Note.html#getNoteType\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/Note.html#getBeam\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/Note.html#checkBeam\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/Note.html#hasBeam\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/Note.html#setBeam\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/Note.html#addModifier\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/Note.html#getModifiersByType\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/Note.html#getModifierStartXY\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Note.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"Note.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/Note.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"Note.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/Note.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"Note.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/Note.html#getRightParenthesisPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/Note.html#getLeftParenthesisPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/Note.html#getFirstDotPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/Note.html#getMetrics\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/Note.html#getAbsoluteX\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/Note.html#getStemDirection\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/Note.html#getStemExtents\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/Note.html#getTieRightX\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/Note.html#getTieLeftX\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/Note.html#getKeys\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/Note.html#getKeyProps\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Note.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/Note.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/Note.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Note.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Note.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Note.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Note.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Note.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/Note.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/Note.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/Note.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/Note.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/Note.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/Note.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/Note.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/Note.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/Note.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/Note.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/Note.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/Note.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/Note.html#preFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/Note.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/Note.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/Note.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/Note.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/Note.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/Note.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/Note.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/Note.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Note.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Note.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Note.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Note.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Note.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Note.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Note.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Note.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Note.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Note.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Note.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Note.html#draw-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Note.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Note.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Note.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Note.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Note.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Note.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Note.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Note.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Note.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Note.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Note.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Note.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Note.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Note.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Note.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Note.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Note.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Note.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Note.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Note.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Note.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Note.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Note.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Note.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Note.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Note.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":256,\"name\":\"NoteHeadMetrics\",\"url\":\"interfaces/NoteHeadMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"minPadding\",\"url\":\"interfaces/NoteHeadMetrics.html#minPadding\",\"classes\":\"\",\"parent\":\"NoteHeadMetrics\"},{\"kind\":1024,\"name\":\"displacedShiftX\",\"url\":\"interfaces/NoteHeadMetrics.html#displacedShiftX\",\"classes\":\"\",\"parent\":\"NoteHeadMetrics\"},{\"kind\":256,\"name\":\"NoteHeadStruct\",\"url\":\"interfaces/NoteHeadStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/NoteHeadStruct.html#line\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"interfaces/NoteHeadStruct.html#glyph_font_scale\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"slashed\",\"url\":\"interfaces/NoteHeadStruct.html#slashed\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"style\",\"url\":\"interfaces/NoteHeadStruct.html#style\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"stem_down_x_offset\",\"url\":\"interfaces/NoteHeadStruct.html#stem_down_x_offset\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"stem_up_x_offset\",\"url\":\"interfaces/NoteHeadStruct.html#stem_up_x_offset\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"custom_glyph_code\",\"url\":\"interfaces/NoteHeadStruct.html#custom_glyph_code\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"x_shift\",\"url\":\"interfaces/NoteHeadStruct.html#x_shift\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"interfaces/NoteHeadStruct.html#stem_direction\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"displaced\",\"url\":\"interfaces/NoteHeadStruct.html#displaced\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"note_type\",\"url\":\"interfaces/NoteHeadStruct.html#note_type\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"interfaces/NoteHeadStruct.html#x\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"interfaces/NoteHeadStruct.html#y\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/NoteHeadStruct.html#index\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"interfaces/NoteHeadStruct.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/NoteHeadStruct.html#duration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/NoteHeadStruct.html#dots\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/NoteHeadStruct.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"align_center\",\"url\":\"interfaces/NoteHeadStruct.html#align_center\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"duration_override\",\"url\":\"interfaces/NoteHeadStruct.html#duration_override\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHeadStruct\"},{\"kind\":128,\"name\":\"NoteHead\",\"url\":\"classes/NoteHead.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/NoteHead.html#DEBUG\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/NoteHead.html#CATEGORY\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/NoteHead.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/NoteHead.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/NoteHead.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/NoteHead.html#constructor\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":1024,\"name\":\"glyph_code\",\"url\":\"classes/NoteHead.html#glyph_code\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/NoteHead.html#getWidth\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"isDisplaced\",\"url\":\"classes/NoteHead.html#isDisplaced\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/NoteHead.html#setX\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getY\",\"url\":\"classes/NoteHead.html#getY\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setY\",\"url\":\"classes/NoteHead.html#setY\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getLine\",\"url\":\"classes/NoteHead.html#getLine\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/NoteHead.html#setLine\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/NoteHead.html#getAbsoluteX\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/NoteHead.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/NoteHead.html#setStave\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/NoteHead.html#preFormat\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/NoteHead.html#draw-1\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/NoteHead.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/NoteHead.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/NoteHead.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/NoteHead.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/NoteHead.html#render_options.__type\",\"classes\":\"\",\"parent\":\"NoteHead.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/NoteHead.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/NoteHead.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/NoteHead.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/NoteHead.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/NoteHead.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/NoteHead.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/NoteHead.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/NoteHead.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/NoteHead.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/NoteHead.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/NoteHead.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/NoteHead.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/NoteHead.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/NoteHead.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/NoteHead.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/NoteHead.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/NoteHead.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/NoteHead.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/NoteHead.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/NoteHead.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/NoteHead.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/NoteHead.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/NoteHead.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/NoteHead.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/NoteHead.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/NoteHead.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/NoteHead.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/NoteHead.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/NoteHead.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/NoteHead.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/NoteHead.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/NoteHead.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/NoteHead.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/NoteHead.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/NoteHead.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/NoteHead.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/NoteHead.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/NoteHead.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/NoteHead.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/NoteHead.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/NoteHead.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/NoteHead.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/NoteHead.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/NoteHead.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/NoteHead.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/NoteHead.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/NoteHead.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/NoteHead.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"NoteHead.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/NoteHead.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"NoteHead.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/NoteHead.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"NoteHead.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/NoteHead.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/NoteHead.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/NoteHead.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/NoteHead.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/NoteHead.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/NoteHead.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/NoteHead.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/NoteHead.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/NoteHead.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/NoteHead.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/NoteHead.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/NoteHead.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/NoteHead.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/NoteHead.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/NoteHead.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/NoteHead.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/NoteHead.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/NoteHead.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/NoteHead.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/NoteHead.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/NoteHead.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/NoteHead.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/NoteHead.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/NoteHead.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/NoteHead.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/NoteHead.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/NoteHead.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/NoteHead.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/NoteHead.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/NoteHead.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/NoteHead.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/NoteHead.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/NoteHead.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/NoteHead.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/NoteHead.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/NoteHead.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/NoteHead.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/NoteHead.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/NoteHead.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/NoteHead.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/NoteHead.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/NoteHead.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/NoteHead.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/NoteHead.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/NoteHead.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/NoteHead.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/NoteHead.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/NoteHead.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/NoteHead.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/NoteHead.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/NoteHead.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/NoteHead.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/NoteHead.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/NoteHead.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/NoteHead.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/NoteHead.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/NoteHead.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/NoteHead.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/NoteHead.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/NoteHead.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/NoteHead.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/NoteHead.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/NoteHead.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/NoteHead.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/NoteHead.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/NoteHead.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/NoteHead.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/NoteHead.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/NoteHead.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/NoteHead.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/NoteHead.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/NoteHead.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/NoteHead.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":128,\"name\":\"NoteSubGroup\",\"url\":\"classes/NoteSubGroup.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/NoteSubGroup.html#CATEGORY\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/NoteSubGroup.html#format\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/NoteSubGroup.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/NoteSubGroup.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/NoteSubGroup.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/NoteSubGroup.html#constructor\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/NoteSubGroup.html#preFormat\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/NoteSubGroup.html#setWidth\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/NoteSubGroup.html#getWidth\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/NoteSubGroup.html#draw\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/NoteSubGroup.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/NoteSubGroup.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/NoteSubGroup.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/NoteSubGroup.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/NoteSubGroup.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/NoteSubGroup.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/NoteSubGroup.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/NoteSubGroup.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/NoteSubGroup.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/NoteSubGroup.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/NoteSubGroup.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/NoteSubGroup.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/NoteSubGroup.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/NoteSubGroup.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/NoteSubGroup.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/NoteSubGroup.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/NoteSubGroup.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/NoteSubGroup.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/NoteSubGroup.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/NoteSubGroup.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/NoteSubGroup.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/NoteSubGroup.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/NoteSubGroup.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/NoteSubGroup.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/NoteSubGroup.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/NoteSubGroup.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/NoteSubGroup.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/NoteSubGroup.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/NoteSubGroup.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/NoteSubGroup.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/NoteSubGroup.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/NoteSubGroup.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/NoteSubGroup.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/NoteSubGroup.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/NoteSubGroup.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/NoteSubGroup.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/NoteSubGroup.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/NoteSubGroup.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/NoteSubGroup.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/NoteSubGroup.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/NoteSubGroup.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/NoteSubGroup.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/NoteSubGroup.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/NoteSubGroup.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/NoteSubGroup.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/NoteSubGroup.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/NoteSubGroup.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/NoteSubGroup.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/NoteSubGroup.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/NoteSubGroup.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/NoteSubGroup.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/NoteSubGroup.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":256,\"name\":\"OrnamentMetrics\",\"url\":\"interfaces/OrnamentMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"xOffset\",\"url\":\"interfaces/OrnamentMetrics.html#xOffset\",\"classes\":\"\",\"parent\":\"OrnamentMetrics\"},{\"kind\":1024,\"name\":\"yOffset\",\"url\":\"interfaces/OrnamentMetrics.html#yOffset\",\"classes\":\"\",\"parent\":\"OrnamentMetrics\"},{\"kind\":1024,\"name\":\"stemUpYOffset\",\"url\":\"interfaces/OrnamentMetrics.html#stemUpYOffset\",\"classes\":\"\",\"parent\":\"OrnamentMetrics\"},{\"kind\":1024,\"name\":\"reportedWidth\",\"url\":\"interfaces/OrnamentMetrics.html#reportedWidth\",\"classes\":\"\",\"parent\":\"OrnamentMetrics\"},{\"kind\":128,\"name\":\"Ornament\",\"url\":\"classes/Ornament.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Ornament.html#DEBUG\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Ornament.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"minPadding\",\"url\":\"classes/Ornament.html#minPadding\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Ornament.html#format\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"ornamentNoteTransition\",\"url\":\"classes/Ornament.html#ornamentNoteTransition\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"ornamentAttack\",\"url\":\"classes/Ornament.html#ornamentAttack\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"ornamentAlignWithNoteHead\",\"url\":\"classes/Ornament.html#ornamentAlignWithNoteHead\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"ornamentRelease\",\"url\":\"classes/Ornament.html#ornamentRelease\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"ornamentArticulation\",\"url\":\"classes/Ornament.html#ornamentArticulation\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Ornament.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Ornament.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Ornament.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Ornament.html#constructor\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Ornament.html#render_options\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Ornament.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Ornament.render_options\"},{\"kind\":1024,\"name\":\"accidentalUpperPadding\",\"url\":\"classes/Ornament.html#render_options.__type.accidentalUpperPadding\",\"classes\":\"\",\"parent\":\"Ornament.render_options.__type\"},{\"kind\":1024,\"name\":\"accidentalLowerPadding\",\"url\":\"classes/Ornament.html#render_options.__type.accidentalLowerPadding\",\"classes\":\"\",\"parent\":\"Ornament.render_options.__type\"},{\"kind\":1024,\"name\":\"font_scale\",\"url\":\"classes/Ornament.html#render_options.__type.font_scale\",\"classes\":\"\",\"parent\":\"Ornament.render_options.__type\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/Ornament.html#getMetrics\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setDelayed\",\"url\":\"classes/Ornament.html#setDelayed\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setUpperAccidental\",\"url\":\"classes/Ornament.html#setUpperAccidental\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setLowerAccidental\",\"url\":\"classes/Ornament.html#setLowerAccidental\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Ornament.html#draw\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Ornament.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Ornament.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Ornament.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Ornament.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Ornament.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Ornament.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Ornament.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Ornament.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Ornament.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Ornament.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Ornament.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Ornament.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Ornament.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Ornament.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Ornament.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Ornament.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Ornament.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Ornament.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Ornament.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Ornament.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Ornament.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Ornament.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Ornament.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Ornament.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Ornament.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Ornament.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Ornament.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Ornament.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Ornament.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Ornament.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Ornament.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Ornament.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Ornament.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Ornament.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Ornament.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Ornament.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Ornament.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Ornament.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Ornament.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Ornament.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Ornament.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Ornament.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Ornament.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Ornament.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Ornament.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Ornament.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Ornament.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Ornament.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Ornament.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Ornament.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Ornament.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Ornament.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Ornament.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Ornament.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":128,\"name\":\"Parenthesis\",\"url\":\"classes/Parenthesis.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Parenthesis.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"buildAndAttach\",\"url\":\"classes/Parenthesis.html#buildAndAttach\",\"classes\":\"\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Parenthesis.html#format\",\"classes\":\"\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Parenthesis.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Parenthesis.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Parenthesis.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Parenthesis.html#constructor\",\"classes\":\"\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Parenthesis.html#setNote\",\"classes\":\"\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Parenthesis.html#draw\",\"classes\":\"\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Parenthesis.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Parenthesis.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Parenthesis.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Parenthesis.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Parenthesis.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Parenthesis.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Parenthesis.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Parenthesis.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Parenthesis.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Parenthesis.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Parenthesis.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Parenthesis.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Parenthesis.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Parenthesis.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Parenthesis.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Parenthesis.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Parenthesis.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Parenthesis.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Parenthesis.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Parenthesis.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Parenthesis.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Parenthesis.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Parenthesis.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Parenthesis.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Parenthesis.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Parenthesis.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Parenthesis.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Parenthesis.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Parenthesis.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Parenthesis.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Parenthesis.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Parenthesis.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Parenthesis.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Parenthesis.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Parenthesis.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Parenthesis.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Parenthesis.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Parenthesis.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Parenthesis.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Parenthesis.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Parenthesis.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Parenthesis.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Parenthesis.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Parenthesis.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Parenthesis.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Parenthesis.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Parenthesis.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Parenthesis.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Parenthesis.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Parenthesis.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Parenthesis.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Parenthesis.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Parenthesis.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":4194304,\"name\":\"Match\",\"url\":\"types/Match.html\",\"classes\":\"\"},{\"kind\":4194304,\"name\":\"RuleFunction\",\"url\":\"types/RuleFunction.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/RuleFunction.html#__type\",\"classes\":\"\",\"parent\":\"RuleFunction\"},{\"kind\":4194304,\"name\":\"TriggerFunction\",\"url\":\"types/TriggerFunction.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/TriggerFunction.html#__type\",\"classes\":\"\",\"parent\":\"TriggerFunction\"},{\"kind\":256,\"name\":\"Rule\",\"url\":\"interfaces/Rule.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"interfaces/Rule.html#token\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"noSpace\",\"url\":\"interfaces/Rule.html#noSpace\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"expect\",\"url\":\"interfaces/Rule.html#expect\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"zeroOrMore\",\"url\":\"interfaces/Rule.html#zeroOrMore\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"oneOrMore\",\"url\":\"interfaces/Rule.html#oneOrMore\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"maybe\",\"url\":\"interfaces/Rule.html#maybe\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"or\",\"url\":\"interfaces/Rule.html#or\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"run\",\"url\":\"interfaces/Rule.html#run\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":256,\"name\":\"Result\",\"url\":\"interfaces/Result.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"success\",\"url\":\"interfaces/Result.html#success\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"pos\",\"url\":\"interfaces/Result.html#pos\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"incrementPos\",\"url\":\"interfaces/Result.html#incrementPos\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"matchedString\",\"url\":\"interfaces/Result.html#matchedString\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"matches\",\"url\":\"interfaces/Result.html#matches\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"numMatches\",\"url\":\"interfaces/Result.html#numMatches\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"results\",\"url\":\"interfaces/Result.html#results\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"errorPos\",\"url\":\"interfaces/Result.html#errorPos\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":4194304,\"name\":\"GroupedResults\",\"url\":\"types/GroupedResults.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"Grammar\",\"url\":\"interfaces/Grammar.html\",\"classes\":\"\"},{\"kind\":2048,\"name\":\"begin\",\"url\":\"interfaces/Grammar.html#begin\",\"classes\":\"\",\"parent\":\"Grammar\"},{\"kind\":128,\"name\":\"Parser\",\"url\":\"classes/Parser.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Parser.html#DEBUG\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Parser.html#constructor\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"parse\",\"url\":\"classes/Parser.html#parse\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"matchFail\",\"url\":\"classes/Parser.html#matchFail\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"matchSuccess\",\"url\":\"classes/Parser.html#matchSuccess\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"matchToken\",\"url\":\"classes/Parser.html#matchToken\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"expectOne\",\"url\":\"classes/Parser.html#expectOne\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"expectOneOrMore\",\"url\":\"classes/Parser.html#expectOneOrMore\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"expectZeroOrMore\",\"url\":\"classes/Parser.html#expectZeroOrMore\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"expect\",\"url\":\"classes/Parser.html#expect\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":128,\"name\":\"PedalMarking\",\"url\":\"classes/PedalMarking.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/PedalMarking.html#DEBUG\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/PedalMarking.html#CATEGORY\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/PedalMarking.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":1024,\"name\":\"GLYPHS\",\"url\":\"classes/PedalMarking.html#GLYPHS\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/PedalMarking.html#type\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/PedalMarking.html#type.__type-1\",\"classes\":\"\",\"parent\":\"PedalMarking.type\"},{\"kind\":1024,\"name\":\"TEXT\",\"url\":\"classes/PedalMarking.html#type.__type-1.TEXT\",\"classes\":\"\",\"parent\":\"PedalMarking.type.__type\"},{\"kind\":1024,\"name\":\"BRACKET\",\"url\":\"classes/PedalMarking.html#type.__type-1.BRACKET\",\"classes\":\"\",\"parent\":\"PedalMarking.type.__type\"},{\"kind\":1024,\"name\":\"MIXED\",\"url\":\"classes/PedalMarking.html#type.__type-1.MIXED\",\"classes\":\"\",\"parent\":\"PedalMarking.type.__type\"},{\"kind\":1024,\"name\":\"typeString\",\"url\":\"classes/PedalMarking.html#typeString\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"createSustain\",\"url\":\"classes/PedalMarking.html#createSustain\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"createSostenuto\",\"url\":\"classes/PedalMarking.html#createSostenuto\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"createUnaCorda\",\"url\":\"classes/PedalMarking.html#createUnaCorda\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/PedalMarking.html#constructor\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/PedalMarking.html#render_options\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/PedalMarking.html#render_options.__type\",\"classes\":\"\",\"parent\":\"PedalMarking.render_options\"},{\"kind\":1024,\"name\":\"color\",\"url\":\"classes/PedalMarking.html#render_options.__type.color\",\"classes\":\"\",\"parent\":\"PedalMarking.render_options.__type\"},{\"kind\":1024,\"name\":\"bracket_height\",\"url\":\"classes/PedalMarking.html#render_options.__type.bracket_height\",\"classes\":\"\",\"parent\":\"PedalMarking.render_options.__type\"},{\"kind\":1024,\"name\":\"text_margin_right\",\"url\":\"classes/PedalMarking.html#render_options.__type.text_margin_right\",\"classes\":\"\",\"parent\":\"PedalMarking.render_options.__type\"},{\"kind\":1024,\"name\":\"bracket_line_width\",\"url\":\"classes/PedalMarking.html#render_options.__type.bracket_line_width\",\"classes\":\"\",\"parent\":\"PedalMarking.render_options.__type\"},{\"kind\":2048,\"name\":\"setType\",\"url\":\"classes/PedalMarking.html#setType\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setCustomText\",\"url\":\"classes/PedalMarking.html#setCustomText\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/PedalMarking.html#setLine\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"drawBracketed\",\"url\":\"classes/PedalMarking.html#drawBracketed\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"drawText\",\"url\":\"classes/PedalMarking.html#drawText\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/PedalMarking.html#draw\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/PedalMarking.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/PedalMarking.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/PedalMarking.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/PedalMarking.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/PedalMarking.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/PedalMarking.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/PedalMarking.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/PedalMarking.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/PedalMarking.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/PedalMarking.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/PedalMarking.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/PedalMarking.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/PedalMarking.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/PedalMarking.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/PedalMarking.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/PedalMarking.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/PedalMarking.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/PedalMarking.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/PedalMarking.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/PedalMarking.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/PedalMarking.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/PedalMarking.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/PedalMarking.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/PedalMarking.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/PedalMarking.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/PedalMarking.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/PedalMarking.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/PedalMarking.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/PedalMarking.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/PedalMarking.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/PedalMarking.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/PedalMarking.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/PedalMarking.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/PedalMarking.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":256,\"name\":\"RegistryUpdate\",\"url\":\"interfaces/RegistryUpdate.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/RegistryUpdate.html#id\",\"classes\":\"\",\"parent\":\"RegistryUpdate\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"interfaces/RegistryUpdate.html#name\",\"classes\":\"\",\"parent\":\"RegistryUpdate\"},{\"kind\":1024,\"name\":\"value\",\"url\":\"interfaces/RegistryUpdate.html#value\",\"classes\":\"\",\"parent\":\"RegistryUpdate\"},{\"kind\":1024,\"name\":\"oldValue\",\"url\":\"interfaces/RegistryUpdate.html#oldValue\",\"classes\":\"\",\"parent\":\"RegistryUpdate\"},{\"kind\":128,\"name\":\"Registry\",\"url\":\"classes/Registry.html\",\"classes\":\"\"},{\"kind\":2048,\"name\":\"getDefaultRegistry\",\"url\":\"classes/Registry.html#getDefaultRegistry\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"enableDefaultRegistry\",\"url\":\"classes/Registry.html#enableDefaultRegistry\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"disableDefaultRegistry\",\"url\":\"classes/Registry.html#disableDefaultRegistry\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Registry.html#constructor\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"clear\",\"url\":\"classes/Registry.html#clear\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"setIndexValue\",\"url\":\"classes/Registry.html#setIndexValue\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"updateIndex\",\"url\":\"classes/Registry.html#updateIndex\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"register\",\"url\":\"classes/Registry.html#register\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"getElementById\",\"url\":\"classes/Registry.html#getElementById\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"getElementsByAttribute\",\"url\":\"classes/Registry.html#getElementsByAttribute\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"getElementsByType\",\"url\":\"classes/Registry.html#getElementsByType\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"getElementsByClass\",\"url\":\"classes/Registry.html#getElementsByClass\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"onUpdate\",\"url\":\"classes/Registry.html#onUpdate\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":64,\"name\":\"drawDot\",\"url\":\"functions/drawDot.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"TextMeasure\",\"url\":\"interfaces/TextMeasure.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"interfaces/TextMeasure.html#x\",\"classes\":\"\",\"parent\":\"TextMeasure\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"interfaces/TextMeasure.html#y\",\"classes\":\"\",\"parent\":\"TextMeasure\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/TextMeasure.html#width\",\"classes\":\"\",\"parent\":\"TextMeasure\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/TextMeasure.html#height\",\"classes\":\"\",\"parent\":\"TextMeasure\"},{\"kind\":256,\"name\":\"GroupAttributes\",\"url\":\"interfaces/GroupAttributes.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"pointerBBox\",\"url\":\"interfaces/GroupAttributes.html#pointerBBox\",\"classes\":\"\",\"parent\":\"GroupAttributes\"},{\"kind\":128,\"name\":\"RenderContext\",\"url\":\"classes/RenderContext.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/RenderContext.html#CATEGORY\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RenderContext.html#constructor\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"clear\",\"url\":\"classes/RenderContext.html#clear\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setFillStyle\",\"url\":\"classes/RenderContext.html#setFillStyle\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setBackgroundFillStyle\",\"url\":\"classes/RenderContext.html#setBackgroundFillStyle\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setStrokeStyle\",\"url\":\"classes/RenderContext.html#setStrokeStyle\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setShadowColor\",\"url\":\"classes/RenderContext.html#setShadowColor\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setShadowBlur\",\"url\":\"classes/RenderContext.html#setShadowBlur\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setLineWidth\",\"url\":\"classes/RenderContext.html#setLineWidth\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setLineCap\",\"url\":\"classes/RenderContext.html#setLineCap\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setLineDash\",\"url\":\"classes/RenderContext.html#setLineDash\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"scale\",\"url\":\"classes/RenderContext.html#scale\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"rect\",\"url\":\"classes/RenderContext.html#rect\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"resize\",\"url\":\"classes/RenderContext.html#resize\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"fillRect\",\"url\":\"classes/RenderContext.html#fillRect\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"clearRect\",\"url\":\"classes/RenderContext.html#clearRect\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"beginPath\",\"url\":\"classes/RenderContext.html#beginPath\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"moveTo\",\"url\":\"classes/RenderContext.html#moveTo\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"lineTo\",\"url\":\"classes/RenderContext.html#lineTo\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"bezierCurveTo\",\"url\":\"classes/RenderContext.html#bezierCurveTo\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"quadraticCurveTo\",\"url\":\"classes/RenderContext.html#quadraticCurveTo\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"arc\",\"url\":\"classes/RenderContext.html#arc\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"fill\",\"url\":\"classes/RenderContext.html#fill\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"stroke\",\"url\":\"classes/RenderContext.html#stroke\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"closePath\",\"url\":\"classes/RenderContext.html#closePath\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"fillText\",\"url\":\"classes/RenderContext.html#fillText\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"save\",\"url\":\"classes/RenderContext.html#save\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"restore\",\"url\":\"classes/RenderContext.html#restore\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"openGroup\",\"url\":\"classes/RenderContext.html#openGroup\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"closeGroup\",\"url\":\"classes/RenderContext.html#closeGroup\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"add\",\"url\":\"classes/RenderContext.html#add\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"measureText\",\"url\":\"classes/RenderContext.html#measureText\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":262144,\"name\":\"fillStyle\",\"url\":\"classes/RenderContext.html#fillStyle\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":262144,\"name\":\"strokeStyle\",\"url\":\"classes/RenderContext.html#strokeStyle\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/RenderContext.html#setFont\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/RenderContext.html#getFont\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/RenderContext.html#font\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setRawFont\",\"url\":\"classes/RenderContext.html#setRawFont\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":4194304,\"name\":\"ContextBuilder\",\"url\":\"types/ContextBuilder.html\",\"classes\":\"\"},{\"kind\":8,\"name\":\"RendererBackends\",\"url\":\"enums/RendererBackends.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"CANVAS\",\"url\":\"enums/RendererBackends.html#CANVAS\",\"classes\":\"\",\"parent\":\"RendererBackends\"},{\"kind\":16,\"name\":\"SVG\",\"url\":\"enums/RendererBackends.html#SVG\",\"classes\":\"\",\"parent\":\"RendererBackends\"},{\"kind\":8,\"name\":\"RendererLineEndType\",\"url\":\"enums/RendererLineEndType.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"NONE\",\"url\":\"enums/RendererLineEndType.html#NONE\",\"classes\":\"\",\"parent\":\"RendererLineEndType\"},{\"kind\":16,\"name\":\"UP\",\"url\":\"enums/RendererLineEndType.html#UP\",\"classes\":\"\",\"parent\":\"RendererLineEndType\"},{\"kind\":16,\"name\":\"DOWN\",\"url\":\"enums/RendererLineEndType.html#DOWN\",\"classes\":\"\",\"parent\":\"RendererLineEndType\"},{\"kind\":128,\"name\":\"Renderer\",\"url\":\"classes/Renderer.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"Backends\",\"url\":\"classes/Renderer.html#Backends\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":1024,\"name\":\"LineEndType\",\"url\":\"classes/Renderer.html#LineEndType\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":1024,\"name\":\"lastContext\",\"url\":\"classes/Renderer.html#lastContext\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":2048,\"name\":\"buildContext\",\"url\":\"classes/Renderer.html#buildContext\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":2048,\"name\":\"getCanvasContext\",\"url\":\"classes/Renderer.html#getCanvasContext\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":2048,\"name\":\"getSVGContext\",\"url\":\"classes/Renderer.html#getSVGContext\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":2048,\"name\":\"drawDashedLine\",\"url\":\"classes/Renderer.html#drawDashedLine\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Renderer.html#constructor\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":2048,\"name\":\"resize\",\"url\":\"classes/Renderer.html#resize\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Renderer.html#getContext\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":128,\"name\":\"RepeatNote\",\"url\":\"classes/RepeatNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/RepeatNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/RepeatNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/RepeatNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/RepeatNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RepeatNote.html#constructor\",\"classes\":\"\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setGlyph\",\"url\":\"classes/RepeatNote.html#setGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/RepeatNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/RepeatNote.html#preFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"drawModifiers\",\"url\":\"classes/RepeatNote.html#drawModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/RepeatNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/RepeatNote.html#draw-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/RepeatNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/RepeatNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/RepeatNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/RepeatNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RepeatNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/RepeatNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/RepeatNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/RepeatNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/RepeatNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/RepeatNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/RepeatNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/RepeatNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/RepeatNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/RepeatNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/RepeatNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/RepeatNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/RepeatNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/RepeatNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/RepeatNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/RepeatNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/RepeatNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/RepeatNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/RepeatNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/RepeatNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/RepeatNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/RepeatNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/RepeatNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/RepeatNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/RepeatNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/RepeatNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/RepeatNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/RepeatNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/RepeatNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/RepeatNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/RepeatNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/RepeatNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/RepeatNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/RepeatNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/RepeatNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/RepeatNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/RepeatNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/RepeatNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/RepeatNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/RepeatNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/RepeatNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/RepeatNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/RepeatNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/RepeatNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/RepeatNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/RepeatNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/RepeatNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/RepeatNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RepeatNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"RepeatNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/RepeatNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"RepeatNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/RepeatNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"RepeatNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/RepeatNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/RepeatNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/RepeatNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/RepeatNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/RepeatNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/RepeatNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/RepeatNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/RepeatNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/RepeatNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/RepeatNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/RepeatNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/RepeatNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/RepeatNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/RepeatNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/RepeatNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/RepeatNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/RepeatNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/RepeatNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/RepeatNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/RepeatNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/RepeatNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/RepeatNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/RepeatNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/RepeatNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/RepeatNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/RepeatNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/RepeatNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/RepeatNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/RepeatNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/RepeatNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/RepeatNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/RepeatNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/RepeatNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/RepeatNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/RepeatNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/RepeatNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/RepeatNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/RepeatNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/RepeatNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/RepeatNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/RepeatNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/RepeatNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/RepeatNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/RepeatNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/RepeatNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/RepeatNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/RepeatNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/RepeatNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/RepeatNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/RepeatNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/RepeatNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/RepeatNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/RepeatNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/RepeatNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/RepeatNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/RepeatNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/RepeatNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/RepeatNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/RepeatNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/RepeatNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/RepeatNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/RepeatNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/RepeatNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/RepeatNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/RepeatNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/RepeatNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/RepeatNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/RepeatNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/RepeatNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/RepeatNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/RepeatNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/RepeatNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/RepeatNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/RepeatNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/RepeatNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":256,\"name\":\"StaveLineConfig\",\"url\":\"interfaces/StaveLineConfig.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"visible\",\"url\":\"interfaces/StaveLineConfig.html#visible\",\"classes\":\"\",\"parent\":\"StaveLineConfig\"},{\"kind\":256,\"name\":\"StaveOptions\",\"url\":\"interfaces/StaveOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"bottom_text_position\",\"url\":\"interfaces/StaveOptions.html#bottom_text_position\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"line_config\",\"url\":\"interfaces/StaveOptions.html#line_config\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"space_below_staff_ln\",\"url\":\"interfaces/StaveOptions.html#space_below_staff_ln\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"space_above_staff_ln\",\"url\":\"interfaces/StaveOptions.html#space_above_staff_ln\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"vertical_bar_width\",\"url\":\"interfaces/StaveOptions.html#vertical_bar_width\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"fill_style\",\"url\":\"interfaces/StaveOptions.html#fill_style\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"left_bar\",\"url\":\"interfaces/StaveOptions.html#left_bar\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"right_bar\",\"url\":\"interfaces/StaveOptions.html#right_bar\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"spacing_between_lines_px\",\"url\":\"interfaces/StaveOptions.html#spacing_between_lines_px\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"top_text_position\",\"url\":\"interfaces/StaveOptions.html#top_text_position\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"num_lines\",\"url\":\"interfaces/StaveOptions.html#num_lines\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":128,\"name\":\"Stave\",\"url\":\"classes/Stave.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Stave.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Stave.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"defaultPadding\",\"url\":\"classes/Stave.html#defaultPadding\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"rightPadding\",\"url\":\"classes/Stave.html#rightPadding\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"formatBegModifiers\",\"url\":\"classes/Stave.html#formatBegModifiers\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Stave.html#constructor\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"classes/Stave.html#options\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setDefaultLedgerLineStyle\",\"url\":\"classes/Stave.html#setDefaultLedgerLineStyle\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getDefaultLedgerLineStyle\",\"url\":\"classes/Stave.html#getDefaultLedgerLineStyle\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"space\",\"url\":\"classes/Stave.html#space\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"resetLines\",\"url\":\"classes/Stave.html#resetLines\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setNoteStartX\",\"url\":\"classes/Stave.html#setNoteStartX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getNoteStartX\",\"url\":\"classes/Stave.html#getNoteStartX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getNoteEndX\",\"url\":\"classes/Stave.html#getNoteEndX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getTieStartX\",\"url\":\"classes/Stave.html#getTieStartX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getTieEndX\",\"url\":\"classes/Stave.html#getTieEndX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Stave.html#getX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getNumLines\",\"url\":\"classes/Stave.html#getNumLines\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setNumLines\",\"url\":\"classes/Stave.html#setNumLines\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setY\",\"url\":\"classes/Stave.html#setY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getY\",\"url\":\"classes/Stave.html#getY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getTopLineTopY\",\"url\":\"classes/Stave.html#getTopLineTopY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getBottomLineBottomY\",\"url\":\"classes/Stave.html#getBottomLineBottomY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/Stave.html#setX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Stave.html#setWidth\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Stave.html#getWidth\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Stave.html#getStyle\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setMeasure\",\"url\":\"classes/Stave.html#setMeasure\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getMeasure\",\"url\":\"classes/Stave.html#getMeasure\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getModifierXShift\",\"url\":\"classes/Stave.html#getModifierXShift\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setRepetitionType\",\"url\":\"classes/Stave.html#setRepetitionType\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setVoltaType\",\"url\":\"classes/Stave.html#setVoltaType\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setSection\",\"url\":\"classes/Stave.html#setSection\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setTempo\",\"url\":\"classes/Stave.html#setTempo\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setText\",\"url\":\"classes/Stave.html#setText\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getHeight\",\"url\":\"classes/Stave.html#getHeight\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getSpacingBetweenLines\",\"url\":\"classes/Stave.html#getSpacingBetweenLines\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Stave.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getBottomY\",\"url\":\"classes/Stave.html#getBottomY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getBottomLineY\",\"url\":\"classes/Stave.html#getBottomLineY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getYForLine\",\"url\":\"classes/Stave.html#getYForLine\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getLineForY\",\"url\":\"classes/Stave.html#getLineForY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/Stave.html#getYForTopText\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/Stave.html#getYForBottomText\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getYForNote\",\"url\":\"classes/Stave.html#getYForNote\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getYForGlyphs\",\"url\":\"classes/Stave.html#getYForGlyphs\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/Stave.html#addModifier\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addEndModifier\",\"url\":\"classes/Stave.html#addEndModifier\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setBegBarType\",\"url\":\"classes/Stave.html#setBegBarType\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setEndBarType\",\"url\":\"classes/Stave.html#setEndBarType\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setClef\",\"url\":\"classes/Stave.html#setClef\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getClef\",\"url\":\"classes/Stave.html#getClef\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setEndClef\",\"url\":\"classes/Stave.html#setEndClef\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getEndClef\",\"url\":\"classes/Stave.html#getEndClef\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setKeySignature\",\"url\":\"classes/Stave.html#setKeySignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setEndKeySignature\",\"url\":\"classes/Stave.html#setEndKeySignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setTimeSignature\",\"url\":\"classes/Stave.html#setTimeSignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setEndTimeSignature\",\"url\":\"classes/Stave.html#setEndTimeSignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addKeySignature\",\"url\":\"classes/Stave.html#addKeySignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addClef\",\"url\":\"classes/Stave.html#addClef\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addEndClef\",\"url\":\"classes/Stave.html#addEndClef\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addTimeSignature\",\"url\":\"classes/Stave.html#addTimeSignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addEndTimeSignature\",\"url\":\"classes/Stave.html#addEndTimeSignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addTrebleGlyph\",\"url\":\"classes/Stave.html#addTrebleGlyph\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/Stave.html#getModifiers\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"sortByCategory\",\"url\":\"classes/Stave.html#sortByCategory\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Stave.html#format\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Stave.html#draw\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getVerticalBarWidth\",\"url\":\"classes/Stave.html#getVerticalBarWidth\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getConfigForLines\",\"url\":\"classes/Stave.html#getConfigForLines\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setConfigForLine\",\"url\":\"classes/Stave.html#setConfigForLine\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setConfigForLines\",\"url\":\"classes/Stave.html#setConfigForLines\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Stave.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Stave.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Stave.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Stave.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Stave.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Stave.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Stave.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Stave.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Stave.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Stave.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Stave.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Stave.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Stave.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Stave.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Stave.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Stave.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Stave.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Stave.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Stave.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Stave.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Stave.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Stave.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Stave.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Stave.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Stave.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Stave.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Stave.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Stave.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Stave.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Stave.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Stave.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Stave.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":8,\"name\":\"BarlineType\",\"url\":\"enums/BarlineType.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"SINGLE\",\"url\":\"enums/BarlineType.html#SINGLE\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":16,\"name\":\"DOUBLE\",\"url\":\"enums/BarlineType.html#DOUBLE\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":16,\"name\":\"END\",\"url\":\"enums/BarlineType.html#END\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":16,\"name\":\"REPEAT_BEGIN\",\"url\":\"enums/BarlineType.html#REPEAT_BEGIN\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":16,\"name\":\"REPEAT_END\",\"url\":\"enums/BarlineType.html#REPEAT_END\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":16,\"name\":\"REPEAT_BOTH\",\"url\":\"enums/BarlineType.html#REPEAT_BOTH\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":16,\"name\":\"NONE\",\"url\":\"enums/BarlineType.html#NONE\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":128,\"name\":\"Barline\",\"url\":\"classes/Barline.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Barline.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"type\",\"url\":\"classes/Barline.html#type\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"typeString\",\"url\":\"classes/Barline.html#typeString\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Barline.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Barline.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Barline.html#constructor\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getType\",\"url\":\"classes/Barline.html#getType\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setType\",\"url\":\"classes/Barline.html#setType\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Barline.html#draw\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"drawVerticalBar\",\"url\":\"classes/Barline.html#drawVerticalBar\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"drawVerticalEndBar\",\"url\":\"classes/Barline.html#drawVerticalEndBar\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"drawRepeatBar\",\"url\":\"classes/Barline.html#drawRepeatBar\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Barline.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Barline.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Barline.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Barline.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Barline.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Barline.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Barline.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Barline.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/Barline.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/Barline.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/Barline.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/Barline.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/Barline.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/Barline.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Barline.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Barline.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Barline.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Barline.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Barline.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Barline.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Barline.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Barline.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Barline.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Barline.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Barline.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Barline.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Barline.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Barline.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Barline.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Barline.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Barline.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Barline.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Barline.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Barline.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Barline.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Barline.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Barline.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Barline.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Barline.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Barline.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Barline.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Barline.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Barline.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Barline.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Barline.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Barline.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Barline.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Barline.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":4194304,\"name\":\"StaveConnectorType\",\"url\":\"types/StaveConnectorType.html\",\"classes\":\"\"},{\"kind\":128,\"name\":\"StaveConnector\",\"url\":\"classes/StaveConnector.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveConnector.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveConnector.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/StaveConnector.html#type\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":1024,\"name\":\"typeString\",\"url\":\"classes/StaveConnector.html#typeString\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveConnector.html#constructor\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":1024,\"name\":\"top_stave\",\"url\":\"classes/StaveConnector.html#top_stave\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":1024,\"name\":\"bottom_stave\",\"url\":\"classes/StaveConnector.html#bottom_stave\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":1024,\"name\":\"thickness\",\"url\":\"classes/StaveConnector.html#thickness\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setType\",\"url\":\"classes/StaveConnector.html#setType\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getType\",\"url\":\"classes/StaveConnector.html#getType\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setText\",\"url\":\"classes/StaveConnector.html#setText\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/StaveConnector.html#setXShift\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/StaveConnector.html#getXShift\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveConnector.html#draw\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveConnector.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveConnector.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveConnector.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveConnector.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveConnector.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveConnector.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveConnector.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveConnector.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveConnector.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveConnector.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveConnector.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveConnector.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveConnector.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveConnector.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveConnector.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveConnector.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveConnector.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveConnector.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveConnector.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveConnector.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveConnector.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveConnector.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveConnector.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveConnector.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveConnector.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveConnector.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveConnector.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveConnector.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveConnector.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveConnector.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveConnector.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveConnector.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveConnector.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveConnector.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":256,\"name\":\"StaveHairpinRenderOptions\",\"url\":\"interfaces/StaveHairpinRenderOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"right_shift_ticks\",\"url\":\"interfaces/StaveHairpinRenderOptions.html#right_shift_ticks\",\"classes\":\"\",\"parent\":\"StaveHairpinRenderOptions\"},{\"kind\":1024,\"name\":\"left_shift_ticks\",\"url\":\"interfaces/StaveHairpinRenderOptions.html#left_shift_ticks\",\"classes\":\"\",\"parent\":\"StaveHairpinRenderOptions\"},{\"kind\":1024,\"name\":\"left_shift_px\",\"url\":\"interfaces/StaveHairpinRenderOptions.html#left_shift_px\",\"classes\":\"\",\"parent\":\"StaveHairpinRenderOptions\"},{\"kind\":1024,\"name\":\"right_shift_px\",\"url\":\"interfaces/StaveHairpinRenderOptions.html#right_shift_px\",\"classes\":\"\",\"parent\":\"StaveHairpinRenderOptions\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/StaveHairpinRenderOptions.html#height\",\"classes\":\"\",\"parent\":\"StaveHairpinRenderOptions\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"interfaces/StaveHairpinRenderOptions.html#y_shift\",\"classes\":\"\",\"parent\":\"StaveHairpinRenderOptions\"},{\"kind\":128,\"name\":\"StaveHairpin\",\"url\":\"classes/StaveHairpin.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveHairpin.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/StaveHairpin.html#type\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveHairpin.html#type.__type\",\"classes\":\"\",\"parent\":\"StaveHairpin.type\"},{\"kind\":1024,\"name\":\"CRESC\",\"url\":\"classes/StaveHairpin.html#type.__type.CRESC\",\"classes\":\"\",\"parent\":\"StaveHairpin.type.__type\"},{\"kind\":1024,\"name\":\"DECRESC\",\"url\":\"classes/StaveHairpin.html#type.__type.DECRESC\",\"classes\":\"\",\"parent\":\"StaveHairpin.type.__type\"},{\"kind\":2048,\"name\":\"FormatByTicksAndDraw\",\"url\":\"classes/StaveHairpin.html#FormatByTicksAndDraw\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveHairpin.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveHairpin.html#constructor\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/StaveHairpin.html#render_options\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/StaveHairpin.html#setPosition\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setRenderOptions\",\"url\":\"classes/StaveHairpin.html#setRenderOptions\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setNotes\",\"url\":\"classes/StaveHairpin.html#setNotes\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"renderHairpin\",\"url\":\"classes/StaveHairpin.html#renderHairpin\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveHairpin.html#draw\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveHairpin.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveHairpin.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveHairpin.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveHairpin.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveHairpin.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveHairpin.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveHairpin.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveHairpin.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveHairpin.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveHairpin.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveHairpin.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveHairpin.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveHairpin.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveHairpin.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveHairpin.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveHairpin.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveHairpin.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveHairpin.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveHairpin.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveHairpin.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveHairpin.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveHairpin.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveHairpin.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveHairpin.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveHairpin.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveHairpin.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveHairpin.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveHairpin.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveHairpin.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveHairpin.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveHairpin.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveHairpin.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveHairpin.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveHairpin.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":256,\"name\":\"StaveLineNotes\",\"url\":\"interfaces/StaveLineNotes.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"first_note\",\"url\":\"interfaces/StaveLineNotes.html#first_note\",\"classes\":\"\",\"parent\":\"StaveLineNotes\"},{\"kind\":1024,\"name\":\"first_indices\",\"url\":\"interfaces/StaveLineNotes.html#first_indices\",\"classes\":\"\",\"parent\":\"StaveLineNotes\"},{\"kind\":1024,\"name\":\"last_note\",\"url\":\"interfaces/StaveLineNotes.html#last_note\",\"classes\":\"\",\"parent\":\"StaveLineNotes\"},{\"kind\":1024,\"name\":\"last_indices\",\"url\":\"interfaces/StaveLineNotes.html#last_indices\",\"classes\":\"\",\"parent\":\"StaveLineNotes\"},{\"kind\":128,\"name\":\"StaveLine\",\"url\":\"classes/StaveLine.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveLine.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveLine.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":1024,\"name\":\"TextVerticalPosition\",\"url\":\"classes/StaveLine.html#TextVerticalPosition\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveLine.html#TextVerticalPosition.__type-1\",\"classes\":\"\",\"parent\":\"StaveLine.TextVerticalPosition\"},{\"kind\":1024,\"name\":\"TOP\",\"url\":\"classes/StaveLine.html#TextVerticalPosition.__type-1.TOP\",\"classes\":\"\",\"parent\":\"StaveLine.TextVerticalPosition.__type\"},{\"kind\":1024,\"name\":\"BOTTOM\",\"url\":\"classes/StaveLine.html#TextVerticalPosition.__type-1.BOTTOM\",\"classes\":\"\",\"parent\":\"StaveLine.TextVerticalPosition.__type\"},{\"kind\":1024,\"name\":\"TextJustification\",\"url\":\"classes/StaveLine.html#TextJustification\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveLine.html#constructor\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/StaveLine.html#render_options\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveLine.html#render_options.__type\",\"classes\":\"\",\"parent\":\"StaveLine.render_options\"},{\"kind\":1024,\"name\":\"padding_left\",\"url\":\"classes/StaveLine.html#render_options.__type.padding_left\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"padding_right\",\"url\":\"classes/StaveLine.html#render_options.__type.padding_right\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"line_width\",\"url\":\"classes/StaveLine.html#render_options.__type.line_width\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"line_dash\",\"url\":\"classes/StaveLine.html#render_options.__type.line_dash\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"rounded_end\",\"url\":\"classes/StaveLine.html#render_options.__type.rounded_end\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"color\",\"url\":\"classes/StaveLine.html#render_options.__type.color\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_start_arrow\",\"url\":\"classes/StaveLine.html#render_options.__type.draw_start_arrow\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_end_arrow\",\"url\":\"classes/StaveLine.html#render_options.__type.draw_end_arrow\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"arrowhead_length\",\"url\":\"classes/StaveLine.html#render_options.__type.arrowhead_length\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"arrowhead_angle\",\"url\":\"classes/StaveLine.html#render_options.__type.arrowhead_angle\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"text_position_vertical\",\"url\":\"classes/StaveLine.html#render_options.__type.text_position_vertical\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"text_justification\",\"url\":\"classes/StaveLine.html#render_options.__type.text_justification\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":2048,\"name\":\"setText\",\"url\":\"classes/StaveLine.html#setText\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setNotes\",\"url\":\"classes/StaveLine.html#setNotes\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"applyLineStyle\",\"url\":\"classes/StaveLine.html#applyLineStyle\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"applyFontStyle\",\"url\":\"classes/StaveLine.html#applyFontStyle\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveLine.html#draw\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveLine.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveLine.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveLine.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveLine.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveLine.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveLine.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveLine.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveLine.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveLine.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveLine.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveLine.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveLine.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveLine.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveLine.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveLine.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveLine.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveLine.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveLine.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveLine.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveLine.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveLine.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveLine.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveLine.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveLine.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveLine.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveLine.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveLine.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveLine.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveLine.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveLine.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveLine.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveLine.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveLine.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveLine.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":256,\"name\":\"LayoutMetrics\",\"url\":\"interfaces/LayoutMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"xMin\",\"url\":\"interfaces/LayoutMetrics.html#xMin\",\"classes\":\"\",\"parent\":\"LayoutMetrics\"},{\"kind\":1024,\"name\":\"xMax\",\"url\":\"interfaces/LayoutMetrics.html#xMax\",\"classes\":\"\",\"parent\":\"LayoutMetrics\"},{\"kind\":1024,\"name\":\"paddingLeft\",\"url\":\"interfaces/LayoutMetrics.html#paddingLeft\",\"classes\":\"\",\"parent\":\"LayoutMetrics\"},{\"kind\":1024,\"name\":\"paddingRight\",\"url\":\"interfaces/LayoutMetrics.html#paddingRight\",\"classes\":\"\",\"parent\":\"LayoutMetrics\"},{\"kind\":8,\"name\":\"StaveModifierPosition\",\"url\":\"enums/StaveModifierPosition.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"CENTER\",\"url\":\"enums/StaveModifierPosition.html#CENTER\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":16,\"name\":\"LEFT\",\"url\":\"enums/StaveModifierPosition.html#LEFT\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":16,\"name\":\"RIGHT\",\"url\":\"enums/StaveModifierPosition.html#RIGHT\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":16,\"name\":\"ABOVE\",\"url\":\"enums/StaveModifierPosition.html#ABOVE\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":16,\"name\":\"BELOW\",\"url\":\"enums/StaveModifierPosition.html#BELOW\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":16,\"name\":\"BEGIN\",\"url\":\"enums/StaveModifierPosition.html#BEGIN\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":16,\"name\":\"END\",\"url\":\"enums/StaveModifierPosition.html#END\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":128,\"name\":\"StaveModifier\",\"url\":\"classes/StaveModifier.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveModifier.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/StaveModifier.html#Position\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveModifier.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveModifier.html#constructor\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/StaveModifier.html#getPosition\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/StaveModifier.html#setPosition\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/StaveModifier.html#getStave\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/StaveModifier.html#checkStave\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/StaveModifier.html#setStave\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StaveModifier.html#getWidth\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StaveModifier.html#setWidth\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/StaveModifier.html#getX\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/StaveModifier.html#setX\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/StaveModifier.html#placeGlyphOnLine\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/StaveModifier.html#getPadding\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/StaveModifier.html#setPadding\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/StaveModifier.html#setLayoutMetrics\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/StaveModifier.html#getLayoutMetrics\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveModifier.html#draw\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveModifier.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveModifier.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveModifier.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveModifier.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveModifier.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveModifier.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveModifier.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveModifier.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveModifier.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveModifier.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveModifier.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveModifier.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveModifier.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveModifier.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveModifier.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveModifier.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveModifier.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveModifier.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveModifier.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveModifier.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveModifier.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveModifier.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveModifier.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveModifier.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveModifier.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveModifier.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveModifier.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveModifier.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveModifier.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveModifier.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveModifier.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveModifier.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveModifier.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveModifier.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":256,\"name\":\"StaveNoteHeadBounds\",\"url\":\"interfaces/StaveNoteHeadBounds.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"y_top\",\"url\":\"interfaces/StaveNoteHeadBounds.html#y_top\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"y_bottom\",\"url\":\"interfaces/StaveNoteHeadBounds.html#y_bottom\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"displaced_x\",\"url\":\"interfaces/StaveNoteHeadBounds.html#displaced_x\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"non_displaced_x\",\"url\":\"interfaces/StaveNoteHeadBounds.html#non_displaced_x\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"highest_line\",\"url\":\"interfaces/StaveNoteHeadBounds.html#highest_line\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"lowest_line\",\"url\":\"interfaces/StaveNoteHeadBounds.html#lowest_line\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"highest_displaced_line\",\"url\":\"interfaces/StaveNoteHeadBounds.html#highest_displaced_line\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"lowest_displaced_line\",\"url\":\"interfaces/StaveNoteHeadBounds.html#lowest_displaced_line\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"highest_non_displaced_line\",\"url\":\"interfaces/StaveNoteHeadBounds.html#highest_non_displaced_line\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"lowest_non_displaced_line\",\"url\":\"interfaces/StaveNoteHeadBounds.html#lowest_non_displaced_line\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":256,\"name\":\"StaveNoteFormatSettings\",\"url\":\"interfaces/StaveNoteFormatSettings.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/StaveNoteFormatSettings.html#line\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"maxLine\",\"url\":\"interfaces/StaveNoteFormatSettings.html#maxLine\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"minLine\",\"url\":\"interfaces/StaveNoteFormatSettings.html#minLine\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"isrest\",\"url\":\"interfaces/StaveNoteFormatSettings.html#isrest\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"stemDirection\",\"url\":\"interfaces/StaveNoteFormatSettings.html#stemDirection\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"stemMax\",\"url\":\"interfaces/StaveNoteFormatSettings.html#stemMax\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"stemMin\",\"url\":\"interfaces/StaveNoteFormatSettings.html#stemMin\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"voice_shift\",\"url\":\"interfaces/StaveNoteFormatSettings.html#voice_shift\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"is_displaced\",\"url\":\"interfaces/StaveNoteFormatSettings.html#is_displaced\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"note\",\"url\":\"interfaces/StaveNoteFormatSettings.html#note\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":256,\"name\":\"StaveNoteStruct\",\"url\":\"interfaces/StaveNoteStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"interfaces/StaveNoteStruct.html#stem_direction\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"auto_stem\",\"url\":\"interfaces/StaveNoteStruct.html#auto_stem\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"stem_down_x_offset\",\"url\":\"interfaces/StaveNoteStruct.html#stem_down_x_offset\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"stem_up_x_offset\",\"url\":\"interfaces/StaveNoteStruct.html#stem_up_x_offset\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"interfaces/StaveNoteStruct.html#stroke_px\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"interfaces/StaveNoteStruct.html#glyph_font_scale\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"octave_shift\",\"url\":\"interfaces/StaveNoteStruct.html#octave_shift\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"clef\",\"url\":\"interfaces/StaveNoteStruct.html#clef\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"interfaces/StaveNoteStruct.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/StaveNoteStruct.html#duration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/StaveNoteStruct.html#line\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/StaveNoteStruct.html#dots\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/StaveNoteStruct.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"align_center\",\"url\":\"interfaces/StaveNoteStruct.html#align_center\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"duration_override\",\"url\":\"interfaces/StaveNoteStruct.html#duration_override\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":128,\"name\":\"StaveNote\",\"url\":\"classes/StaveNote.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/StaveNote.html#DEBUG\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"STEM_UP\",\"url\":\"classes/StaveNote.html#STEM_UP\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"STEM_DOWN\",\"url\":\"classes/StaveNote.html#STEM_DOWN\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"LEDGER_LINE_OFFSET\",\"url\":\"classes/StaveNote.html#LEDGER_LINE_OFFSET\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"minNoteheadPadding\",\"url\":\"classes/StaveNote.html#minNoteheadPadding\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/StaveNote.html#format\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/StaveNote.html#postFormat-2\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/StaveNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/StaveNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveNote.html#constructor\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"minLine\",\"url\":\"classes/StaveNote.html#minLine\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"maxLine\",\"url\":\"classes/StaveNote.html#maxLine\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/StaveNote.html#reset\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/StaveNote.html#setBeam\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"buildStem\",\"url\":\"classes/StaveNote.html#buildStem\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"buildNoteHeads\",\"url\":\"classes/StaveNote.html#buildNoteHeads\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"autoStem\",\"url\":\"classes/StaveNote.html#autoStem\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"calculateOptimalStemDirection\",\"url\":\"classes/StaveNote.html#calculateOptimalStemDirection\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"calculateKeyProps\",\"url\":\"classes/StaveNote.html#calculateKeyProps\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveNote.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/StaveNote.html#getLineNumber\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/StaveNote.html#isRest\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"isChord\",\"url\":\"classes/StaveNote.html#isChord\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/StaveNote.html#hasStem\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"hasFlag\",\"url\":\"classes/StaveNote.html#hasFlag\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemX\",\"url\":\"classes/StaveNote.html#getStemX\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/StaveNote.html#getYForTopText\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/StaveNote.html#getYForBottomText\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/StaveNote.html#setStave\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"isDisplaced\",\"url\":\"classes/StaveNote.html#isDisplaced\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setNoteDisplaced\",\"url\":\"classes/StaveNote.html#setNoteDisplaced\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/StaveNote.html#getTieRightX\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/StaveNote.html#getTieLeftX\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/StaveNote.html#getLineForRest\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/StaveNote.html#getModifierStartXY\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"StaveNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/StaveNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"StaveNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/StaveNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"StaveNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveNote.html#setStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setStemStyle\",\"url\":\"classes/StaveNote.html#setStemStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemStyle\",\"url\":\"classes/StaveNote.html#getStemStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setLedgerLineStyle\",\"url\":\"classes/StaveNote.html#setLedgerLineStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getLedgerLineStyle\",\"url\":\"classes/StaveNote.html#getLedgerLineStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setFlagStyle\",\"url\":\"classes/StaveNote.html#setFlagStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getFlagStyle\",\"url\":\"classes/StaveNote.html#getFlagStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setKeyStyle\",\"url\":\"classes/StaveNote.html#setKeyStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setKeyLine\",\"url\":\"classes/StaveNote.html#setKeyLine\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getKeyLine\",\"url\":\"classes/StaveNote.html#getKeyLine\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getVoiceShiftWidth\",\"url\":\"classes/StaveNote.html#getVoiceShiftWidth\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"calcNoteDisplacements\",\"url\":\"classes/StaveNote.html#calcNoteDisplacements\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/StaveNote.html#preFormat\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getNoteHeadBounds\",\"url\":\"classes/StaveNote.html#getNoteHeadBounds\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getNoteHeadBeginX\",\"url\":\"classes/StaveNote.html#getNoteHeadBeginX\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getNoteHeadEndX\",\"url\":\"classes/StaveNote.html#getNoteHeadEndX\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"noteHeads\",\"url\":\"classes/StaveNote.html#noteHeads\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"note_heads\",\"url\":\"classes/StaveNote.html#note_heads\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"drawLedgerLines\",\"url\":\"classes/StaveNote.html#drawLedgerLines\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"drawModifiers\",\"url\":\"classes/StaveNote.html#drawModifiers\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"shouldDrawFlag\",\"url\":\"classes/StaveNote.html#shouldDrawFlag\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"drawFlag\",\"url\":\"classes/StaveNote.html#drawFlag\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"drawNoteHeads\",\"url\":\"classes/StaveNote.html#drawNoteHeads\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"drawStem\",\"url\":\"classes/StaveNote.html#drawStem\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStaveNoteScale\",\"url\":\"classes/StaveNote.html#getStaveNoteScale\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemExtension\",\"url\":\"classes/StaveNote.html#getStemExtension\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveNote.html#draw-1\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"classes/StaveNote.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"classes/StaveNote.html#stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStem\",\"url\":\"classes/StaveNote.html#getStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"checkStem\",\"url\":\"classes/StaveNote.html#checkStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setStem\",\"url\":\"classes/StaveNote.html#setStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"buildFlag\",\"url\":\"classes/StaveNote.html#buildFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getBaseCustomNoteHeadGlyphProps\",\"url\":\"classes/StaveNote.html#getBaseCustomNoteHeadGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemLength\",\"url\":\"classes/StaveNote.html#getStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/StaveNote.html#getBeamCount\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemMinimumLength\",\"url\":\"classes/StaveNote.html#getStemMinimumLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/StaveNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setStemDirection\",\"url\":\"classes/StaveNote.html#setStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getCenterGlyphX\",\"url\":\"classes/StaveNote.html#getCenterGlyphX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setStemLength\",\"url\":\"classes/StaveNote.html#setStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/StaveNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveNote.html#getStemExtents.getStemExtents-1.__type-2\",\"classes\":\"\",\"parent\":\"StaveNote.getStemExtents.getStemExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/StaveNote.html#getStemExtents.getStemExtents-1.__type-2.topY\",\"classes\":\"\",\"parent\":\"StaveNote.getStemExtents.getStemExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/StaveNote.html#getStemExtents.getStemExtents-1.__type-2.baseY\",\"classes\":\"\",\"parent\":\"StaveNote.getStemExtents.getStemExtents.__type\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/StaveNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/StaveNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/StaveNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/StaveNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/StaveNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"StaveNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/StaveNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/StaveNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/StaveNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/StaveNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/StaveNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/StaveNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/StaveNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/StaveNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/StaveNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/StaveNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/StaveNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/StaveNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/StaveNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/StaveNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/StaveNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/StaveNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/StaveNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/StaveNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/StaveNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/StaveNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/StaveNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/StaveNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/StaveNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/StaveNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/StaveNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/StaveNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/StaveNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/StaveNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/StaveNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/StaveNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/StaveNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/StaveNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/StaveNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/StaveNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/StaveNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/StaveNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/StaveNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/StaveNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/StaveNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/StaveNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/StaveNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/StaveNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/StaveNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/StaveNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/StaveNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/StaveNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/StaveNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/StaveNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/StaveNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StaveNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StaveNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/StaveNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/StaveNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/StaveNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/StaveNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/StaveNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/StaveNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/StaveNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/StaveNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/StaveNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/StaveNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/StaveNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/StaveNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/StaveNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/StaveNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/StaveNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/StaveNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/StaveNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/StaveNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/StaveNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/StaveNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/StaveNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/StaveNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/StaveNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/StaveNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/StaveNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":128,\"name\":\"Repetition\",\"url\":\"classes/Repetition.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Repetition.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Repetition.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/Repetition.html#type\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Repetition.html#type.__type\",\"classes\":\"\",\"parent\":\"Repetition.type\"},{\"kind\":1024,\"name\":\"NONE\",\"url\":\"classes/Repetition.html#type.__type.NONE\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"CODA_LEFT\",\"url\":\"classes/Repetition.html#type.__type.CODA_LEFT\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"CODA_RIGHT\",\"url\":\"classes/Repetition.html#type.__type.CODA_RIGHT\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"SEGNO_LEFT\",\"url\":\"classes/Repetition.html#type.__type.SEGNO_LEFT\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"SEGNO_RIGHT\",\"url\":\"classes/Repetition.html#type.__type.SEGNO_RIGHT\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"DC\",\"url\":\"classes/Repetition.html#type.__type.DC\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"DC_AL_CODA\",\"url\":\"classes/Repetition.html#type.__type.DC_AL_CODA\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"DC_AL_FINE\",\"url\":\"classes/Repetition.html#type.__type.DC_AL_FINE\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"DS\",\"url\":\"classes/Repetition.html#type.__type.DS\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"DS_AL_CODA\",\"url\":\"classes/Repetition.html#type.__type.DS_AL_CODA\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"DS_AL_FINE\",\"url\":\"classes/Repetition.html#type.__type.DS_AL_FINE\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"FINE\",\"url\":\"classes/Repetition.html#type.__type.FINE\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"TO_CODA\",\"url\":\"classes/Repetition.html#type.__type.TO_CODA\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Repetition.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Repetition.html#constructor\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setShiftX\",\"url\":\"classes/Repetition.html#setShiftX\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setShiftY\",\"url\":\"classes/Repetition.html#setShiftY\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Repetition.html#draw\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"drawCodaFixed\",\"url\":\"classes/Repetition.html#drawCodaFixed\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"drawSignoFixed\",\"url\":\"classes/Repetition.html#drawSignoFixed\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"drawSymbolText\",\"url\":\"classes/Repetition.html#drawSymbolText\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Repetition.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Repetition.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Repetition.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Repetition.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Repetition.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Repetition.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Repetition.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Repetition.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/Repetition.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/Repetition.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/Repetition.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/Repetition.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/Repetition.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/Repetition.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Repetition.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Repetition.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Repetition.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Repetition.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Repetition.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Repetition.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Repetition.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Repetition.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Repetition.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Repetition.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Repetition.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Repetition.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Repetition.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Repetition.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Repetition.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Repetition.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Repetition.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Repetition.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Repetition.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Repetition.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Repetition.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Repetition.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Repetition.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Repetition.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Repetition.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Repetition.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Repetition.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Repetition.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Repetition.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Repetition.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Repetition.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Repetition.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Repetition.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Repetition.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":128,\"name\":\"StaveSection\",\"url\":\"classes/StaveSection.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveSection.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveSection.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/StaveSection.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveSection.html#constructor\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setStaveSection\",\"url\":\"classes/StaveSection.html#setStaveSection\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setShiftX\",\"url\":\"classes/StaveSection.html#setShiftX\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setShiftY\",\"url\":\"classes/StaveSection.html#setShiftY\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveSection.html#draw\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/StaveSection.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/StaveSection.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/StaveSection.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/StaveSection.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/StaveSection.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StaveSection.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StaveSection.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/StaveSection.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/StaveSection.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/StaveSection.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/StaveSection.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/StaveSection.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/StaveSection.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/StaveSection.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveSection.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveSection.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveSection.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveSection.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveSection.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveSection.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveSection.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveSection.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveSection.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveSection.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveSection.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveSection.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveSection.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveSection.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveSection.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveSection.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveSection.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveSection.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveSection.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveSection.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveSection.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveSection.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveSection.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveSection.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveSection.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveSection.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveSection.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveSection.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveSection.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveSection.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveSection.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveSection.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveSection.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveSection.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":256,\"name\":\"StaveTempoOptions\",\"url\":\"interfaces/StaveTempoOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"bpm\",\"url\":\"interfaces/StaveTempoOptions.html#bpm\",\"classes\":\"\",\"parent\":\"StaveTempoOptions\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/StaveTempoOptions.html#duration\",\"classes\":\"\",\"parent\":\"StaveTempoOptions\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/StaveTempoOptions.html#dots\",\"classes\":\"\",\"parent\":\"StaveTempoOptions\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"interfaces/StaveTempoOptions.html#name\",\"classes\":\"\",\"parent\":\"StaveTempoOptions\"},{\"kind\":128,\"name\":\"StaveTempo\",\"url\":\"classes/StaveTempo.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveTempo.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveTempo.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/StaveTempo.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveTempo.html#constructor\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/StaveTempo.html#render_options\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveTempo.html#render_options.__type\",\"classes\":\"\",\"parent\":\"StaveTempo.render_options\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/StaveTempo.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"StaveTempo.render_options.__type\"},{\"kind\":2048,\"name\":\"setTempo\",\"url\":\"classes/StaveTempo.html#setTempo\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setShiftX\",\"url\":\"classes/StaveTempo.html#setShiftX\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setShiftY\",\"url\":\"classes/StaveTempo.html#setShiftY\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveTempo.html#draw\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/StaveTempo.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/StaveTempo.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/StaveTempo.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/StaveTempo.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/StaveTempo.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StaveTempo.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StaveTempo.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/StaveTempo.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/StaveTempo.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/StaveTempo.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/StaveTempo.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/StaveTempo.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/StaveTempo.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/StaveTempo.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveTempo.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveTempo.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveTempo.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveTempo.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveTempo.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveTempo.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveTempo.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveTempo.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveTempo.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveTempo.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveTempo.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveTempo.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveTempo.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveTempo.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveTempo.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveTempo.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveTempo.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveTempo.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveTempo.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveTempo.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveTempo.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveTempo.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveTempo.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveTempo.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveTempo.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveTempo.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveTempo.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveTempo.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveTempo.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveTempo.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveTempo.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveTempo.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveTempo.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveTempo.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":128,\"name\":\"StaveText\",\"url\":\"classes/StaveText.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveText.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveText.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/StaveText.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveText.html#constructor\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setStaveText\",\"url\":\"classes/StaveText.html#setStaveText\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setShiftX\",\"url\":\"classes/StaveText.html#setShiftX\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setShiftY\",\"url\":\"classes/StaveText.html#setShiftY\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setText\",\"url\":\"classes/StaveText.html#setText\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveText.html#draw\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/StaveText.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/StaveText.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/StaveText.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/StaveText.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/StaveText.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StaveText.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StaveText.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/StaveText.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/StaveText.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/StaveText.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/StaveText.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/StaveText.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/StaveText.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/StaveText.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveText.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveText.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveText.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveText.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveText.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveText.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveText.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveText.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveText.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveText.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveText.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveText.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveText.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveText.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveText.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveText.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveText.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveText.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveText.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveText.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveText.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveText.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveText.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveText.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveText.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveText.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveText.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveText.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveText.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveText.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveText.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveText.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveText.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveText.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":256,\"name\":\"TieNotes\",\"url\":\"interfaces/TieNotes.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"first_note\",\"url\":\"interfaces/TieNotes.html#first_note\",\"classes\":\"\",\"parent\":\"TieNotes\"},{\"kind\":1024,\"name\":\"last_note\",\"url\":\"interfaces/TieNotes.html#last_note\",\"classes\":\"\",\"parent\":\"TieNotes\"},{\"kind\":1024,\"name\":\"first_indices\",\"url\":\"interfaces/TieNotes.html#first_indices\",\"classes\":\"\",\"parent\":\"TieNotes\"},{\"kind\":1024,\"name\":\"last_indices\",\"url\":\"interfaces/TieNotes.html#last_indices\",\"classes\":\"\",\"parent\":\"TieNotes\"},{\"kind\":128,\"name\":\"StaveTie\",\"url\":\"classes/StaveTie.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveTie.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveTie.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveTie.html#constructor\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/StaveTie.html#render_options\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveTie.html#render_options.__type\",\"classes\":\"\",\"parent\":\"StaveTie.render_options\"},{\"kind\":1024,\"name\":\"cp2\",\"url\":\"classes/StaveTie.html#render_options.__type.cp2\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":1024,\"name\":\"last_x_shift\",\"url\":\"classes/StaveTie.html#render_options.__type.last_x_shift\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":1024,\"name\":\"tie_spacing\",\"url\":\"classes/StaveTie.html#render_options.__type.tie_spacing\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":1024,\"name\":\"cp1\",\"url\":\"classes/StaveTie.html#render_options.__type.cp1\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":1024,\"name\":\"first_x_shift\",\"url\":\"classes/StaveTie.html#render_options.__type.first_x_shift\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":1024,\"name\":\"text_shift_x\",\"url\":\"classes/StaveTie.html#render_options.__type.text_shift_x\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/StaveTie.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":2048,\"name\":\"setDirection\",\"url\":\"classes/StaveTie.html#setDirection\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setNotes\",\"url\":\"classes/StaveTie.html#setNotes\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"isPartial\",\"url\":\"classes/StaveTie.html#isPartial\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"renderTie\",\"url\":\"classes/StaveTie.html#renderTie\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"renderText\",\"url\":\"classes/StaveTie.html#renderText\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getNotes\",\"url\":\"classes/StaveTie.html#getNotes\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveTie.html#draw\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveTie.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveTie.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveTie.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveTie.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveTie.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveTie.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveTie.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveTie.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveTie.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveTie.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveTie.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveTie.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveTie.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveTie.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveTie.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveTie.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveTie.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveTie.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveTie.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveTie.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveTie.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveTie.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveTie.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveTie.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveTie.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveTie.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveTie.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveTie.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveTie.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveTie.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveTie.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveTie.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveTie.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveTie.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":8,\"name\":\"VoltaType\",\"url\":\"enums/VoltaType.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"NONE\",\"url\":\"enums/VoltaType.html#NONE\",\"classes\":\"\",\"parent\":\"VoltaType\"},{\"kind\":16,\"name\":\"BEGIN\",\"url\":\"enums/VoltaType.html#BEGIN\",\"classes\":\"\",\"parent\":\"VoltaType\"},{\"kind\":16,\"name\":\"MID\",\"url\":\"enums/VoltaType.html#MID\",\"classes\":\"\",\"parent\":\"VoltaType\"},{\"kind\":16,\"name\":\"END\",\"url\":\"enums/VoltaType.html#END\",\"classes\":\"\",\"parent\":\"VoltaType\"},{\"kind\":16,\"name\":\"BEGIN_END\",\"url\":\"enums/VoltaType.html#BEGIN_END\",\"classes\":\"\",\"parent\":\"VoltaType\"},{\"kind\":128,\"name\":\"Volta\",\"url\":\"classes/Volta.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Volta.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"type\",\"url\":\"classes/Volta.html#type\",\"classes\":\"\",\"parent\":\"Volta\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Volta.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Volta.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Volta.html#constructor\",\"classes\":\"\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setShiftY\",\"url\":\"classes/Volta.html#setShiftY\",\"classes\":\"\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Volta.html#draw\",\"classes\":\"\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Volta.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Volta.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Volta.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Volta.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Volta.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Volta.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Volta.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Volta.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/Volta.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/Volta.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/Volta.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/Volta.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/Volta.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/Volta.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Volta.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Volta.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Volta.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Volta.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Volta.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Volta.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Volta.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Volta.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Volta.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Volta.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Volta.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Volta.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Volta.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Volta.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Volta.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Volta.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Volta.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Volta.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Volta.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Volta.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Volta.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Volta.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Volta.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Volta.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Volta.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Volta.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Volta.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Volta.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Volta.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Volta.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Volta.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Volta.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Volta.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Volta.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":256,\"name\":\"StemOptions\",\"url\":\"interfaces/StemOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"stem_down_y_base_offset\",\"url\":\"interfaces/StemOptions.html#stem_down_y_base_offset\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"stem_up_y_base_offset\",\"url\":\"interfaces/StemOptions.html#stem_up_y_base_offset\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"stem_down_y_offset\",\"url\":\"interfaces/StemOptions.html#stem_down_y_offset\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"stem_up_y_offset\",\"url\":\"interfaces/StemOptions.html#stem_up_y_offset\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"stemletHeight\",\"url\":\"interfaces/StemOptions.html#stemletHeight\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"isStemlet\",\"url\":\"interfaces/StemOptions.html#isStemlet\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"hide\",\"url\":\"interfaces/StemOptions.html#hide\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"interfaces/StemOptions.html#stem_direction\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"stem_extension\",\"url\":\"interfaces/StemOptions.html#stem_extension\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"y_bottom\",\"url\":\"interfaces/StemOptions.html#y_bottom\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"y_top\",\"url\":\"interfaces/StemOptions.html#y_top\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"x_end\",\"url\":\"interfaces/StemOptions.html#x_end\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"x_begin\",\"url\":\"interfaces/StemOptions.html#x_begin\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":128,\"name\":\"Stem\",\"url\":\"classes/Stem.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Stem.html#DEBUG\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Stem.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"UP\",\"url\":\"classes/Stem.html#UP\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"DOWN\",\"url\":\"classes/Stem.html#DOWN\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"WIDTH\",\"url\":\"classes/Stem.html#WIDTH\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"HEIGHT\",\"url\":\"classes/Stem.html#HEIGHT\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Stem.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Stem.html#constructor\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setOptions\",\"url\":\"classes/Stem.html#setOptions\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setNoteHeadXBounds\",\"url\":\"classes/Stem.html#setNoteHeadXBounds\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setDirection\",\"url\":\"classes/Stem.html#setDirection\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setExtension\",\"url\":\"classes/Stem.html#setExtension\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getExtension\",\"url\":\"classes/Stem.html#getExtension\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setYBounds\",\"url\":\"classes/Stem.html#setYBounds\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getHeight\",\"url\":\"classes/Stem.html#getHeight\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Stem.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getExtents\",\"url\":\"classes/Stem.html#getExtents\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Stem.html#getExtents.getExtents-1.__type\",\"classes\":\"\",\"parent\":\"Stem.getExtents.getExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/Stem.html#getExtents.getExtents-1.__type.topY\",\"classes\":\"\",\"parent\":\"Stem.getExtents.getExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/Stem.html#getExtents.getExtents-1.__type.baseY\",\"classes\":\"\",\"parent\":\"Stem.getExtents.getExtents.__type\"},{\"kind\":2048,\"name\":\"setVisibility\",\"url\":\"classes/Stem.html#setVisibility\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setStemlet\",\"url\":\"classes/Stem.html#setStemlet\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"adjustHeightForFlag\",\"url\":\"classes/Stem.html#adjustHeightForFlag\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"adjustHeightForBeam\",\"url\":\"classes/Stem.html#adjustHeightForBeam\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Stem.html#draw\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Stem.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Stem.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Stem.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Stem.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Stem.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Stem.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Stem.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Stem.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Stem.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Stem.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Stem.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Stem.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Stem.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Stem.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Stem.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Stem.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Stem.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Stem.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Stem.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Stem.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Stem.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Stem.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Stem.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Stem.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Stem.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Stem.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Stem.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Stem.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Stem.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Stem.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Stem.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Stem.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Stem.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":128,\"name\":\"StemmableNote\",\"url\":\"classes/StemmableNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StemmableNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/StemmableNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/StemmableNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StemmableNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StemmableNote.html#constructor\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"classes/StemmableNote.html#stem_direction\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"classes/StemmableNote.html#stem\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStem\",\"url\":\"classes/StemmableNote.html#getStem\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"checkStem\",\"url\":\"classes/StemmableNote.html#checkStem\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setStem\",\"url\":\"classes/StemmableNote.html#setStem\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"buildStem\",\"url\":\"classes/StemmableNote.html#buildStem\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"buildFlag\",\"url\":\"classes/StemmableNote.html#buildFlag\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getBaseCustomNoteHeadGlyphProps\",\"url\":\"classes/StemmableNote.html#getBaseCustomNoteHeadGlyphProps\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStemLength\",\"url\":\"classes/StemmableNote.html#getStemLength\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/StemmableNote.html#getBeamCount\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStemMinimumLength\",\"url\":\"classes/StemmableNote.html#getStemMinimumLength\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/StemmableNote.html#getStemDirection\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setStemDirection\",\"url\":\"classes/StemmableNote.html#setStemDirection\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStemX\",\"url\":\"classes/StemmableNote.html#getStemX\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getCenterGlyphX\",\"url\":\"classes/StemmableNote.html#getCenterGlyphX\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStemExtension\",\"url\":\"classes/StemmableNote.html#getStemExtension\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setStemLength\",\"url\":\"classes/StemmableNote.html#setStemLength\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/StemmableNote.html#getStemExtents\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StemmableNote.html#getStemExtents.getStemExtents-1.__type-2\",\"classes\":\"\",\"parent\":\"StemmableNote.getStemExtents.getStemExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/StemmableNote.html#getStemExtents.getStemExtents-1.__type-2.topY\",\"classes\":\"\",\"parent\":\"StemmableNote.getStemExtents.getStemExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/StemmableNote.html#getStemExtents.getStemExtents-1.__type-2.baseY\",\"classes\":\"\",\"parent\":\"StemmableNote.getStemExtents.getStemExtents.__type\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/StemmableNote.html#getYForTopText\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/StemmableNote.html#getYForBottomText\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"hasFlag\",\"url\":\"classes/StemmableNote.html#hasFlag\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/StemmableNote.html#postFormat\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"drawStem\",\"url\":\"classes/StemmableNote.html#drawStem\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/StemmableNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/StemmableNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/StemmableNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/StemmableNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StemmableNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/StemmableNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/StemmableNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/StemmableNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/StemmableNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/StemmableNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/StemmableNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/StemmableNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/StemmableNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/StemmableNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/StemmableNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/StemmableNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/StemmableNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/StemmableNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/StemmableNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/StemmableNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/StemmableNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/StemmableNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/StemmableNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/StemmableNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/StemmableNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/StemmableNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/StemmableNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/StemmableNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/StemmableNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/StemmableNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/StemmableNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/StemmableNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/StemmableNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/StemmableNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/StemmableNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/StemmableNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/StemmableNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/StemmableNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/StemmableNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/StemmableNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/StemmableNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/StemmableNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/StemmableNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/StemmableNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/StemmableNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/StemmableNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/StemmableNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/StemmableNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/StemmableNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/StemmableNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/StemmableNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/StemmableNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StemmableNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"StemmableNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/StemmableNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"StemmableNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/StemmableNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"StemmableNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/StemmableNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/StemmableNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/StemmableNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/StemmableNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/StemmableNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/StemmableNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/StemmableNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/StemmableNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/StemmableNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/StemmableNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/StemmableNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/StemmableNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StemmableNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StemmableNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/StemmableNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/StemmableNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/StemmableNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/StemmableNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/StemmableNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/StemmableNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/StemmableNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/StemmableNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/StemmableNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/StemmableNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/StemmableNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/StemmableNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/StemmableNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/StemmableNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/StemmableNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/StemmableNote.html#preFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/StemmableNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/StemmableNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/StemmableNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/StemmableNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/StemmableNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/StemmableNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/StemmableNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/StemmableNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/StemmableNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/StemmableNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StemmableNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StemmableNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StemmableNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StemmableNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StemmableNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StemmableNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StemmableNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StemmableNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StemmableNote.html#draw-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StemmableNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StemmableNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StemmableNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StemmableNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StemmableNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StemmableNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StemmableNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StemmableNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StemmableNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StemmableNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StemmableNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StemmableNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StemmableNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StemmableNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StemmableNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StemmableNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StemmableNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StemmableNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StemmableNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StemmableNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StemmableNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StemmableNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StemmableNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StemmableNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StemmableNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StemmableNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":256,\"name\":\"StringNumberMetrics\",\"url\":\"interfaces/StringNumberMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"verticalPadding\",\"url\":\"interfaces/StringNumberMetrics.html#verticalPadding\",\"classes\":\"\",\"parent\":\"StringNumberMetrics\"},{\"kind\":1024,\"name\":\"stemPadding\",\"url\":\"interfaces/StringNumberMetrics.html#stemPadding\",\"classes\":\"\",\"parent\":\"StringNumberMetrics\"},{\"kind\":1024,\"name\":\"leftPadding\",\"url\":\"interfaces/StringNumberMetrics.html#leftPadding\",\"classes\":\"\",\"parent\":\"StringNumberMetrics\"},{\"kind\":1024,\"name\":\"rightPadding\",\"url\":\"interfaces/StringNumberMetrics.html#rightPadding\",\"classes\":\"\",\"parent\":\"StringNumberMetrics\"},{\"kind\":128,\"name\":\"StringNumber\",\"url\":\"classes/StringNumber.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StringNumber.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StringNumber.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"metrics\",\"url\":\"classes/StringNumber.html#metrics\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/StringNumber.html#format\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/StringNumber.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/StringNumber.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StringNumber.html#constructor\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setLineEndType\",\"url\":\"classes/StringNumber.html#setLineEndType\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setStringNumber\",\"url\":\"classes/StringNumber.html#setStringNumber\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setOffsetX\",\"url\":\"classes/StringNumber.html#setOffsetX\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setOffsetY\",\"url\":\"classes/StringNumber.html#setOffsetY\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setLastNote\",\"url\":\"classes/StringNumber.html#setLastNote\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setDashed\",\"url\":\"classes/StringNumber.html#setDashed\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setDrawCircle\",\"url\":\"classes/StringNumber.html#setDrawCircle\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StringNumber.html#draw\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StringNumber.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StringNumber.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/StringNumber.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/StringNumber.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/StringNumber.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/StringNumber.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/StringNumber.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/StringNumber.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/StringNumber.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/StringNumber.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/StringNumber.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/StringNumber.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/StringNumber.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/StringNumber.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/StringNumber.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/StringNumber.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/StringNumber.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/StringNumber.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/StringNumber.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/StringNumber.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StringNumber.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StringNumber.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StringNumber.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StringNumber.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StringNumber.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StringNumber.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StringNumber.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StringNumber.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StringNumber.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StringNumber.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StringNumber.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StringNumber.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StringNumber.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StringNumber.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StringNumber.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StringNumber.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StringNumber.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StringNumber.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StringNumber.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StringNumber.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StringNumber.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StringNumber.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StringNumber.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StringNumber.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StringNumber.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StringNumber.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StringNumber.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StringNumber.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StringNumber.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StringNumber.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StringNumber.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StringNumber.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StringNumber.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StringNumber.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":128,\"name\":\"Stroke\",\"url\":\"classes/Stroke.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Stroke.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":1024,\"name\":\"Type\",\"url\":\"classes/Stroke.html#Type\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Stroke.html#Type.__type-1\",\"classes\":\"\",\"parent\":\"Stroke.Type\"},{\"kind\":1024,\"name\":\"BRUSH_DOWN\",\"url\":\"classes/Stroke.html#Type.__type-1.BRUSH_DOWN\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"BRUSH_UP\",\"url\":\"classes/Stroke.html#Type.__type-1.BRUSH_UP\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"ROLL_DOWN\",\"url\":\"classes/Stroke.html#Type.__type-1.ROLL_DOWN\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"ROLL_UP\",\"url\":\"classes/Stroke.html#Type.__type-1.ROLL_UP\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"RASQUEDO_DOWN\",\"url\":\"classes/Stroke.html#Type.__type-1.RASQUEDO_DOWN\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"RASQUEDO_UP\",\"url\":\"classes/Stroke.html#Type.__type-1.RASQUEDO_UP\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"ARPEGGIO_DIRECTIONLESS\",\"url\":\"classes/Stroke.html#Type.__type-1.ARPEGGIO_DIRECTIONLESS\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Stroke.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Stroke.html#format\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Stroke.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Stroke.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Stroke.html#constructor\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Stroke.html#render_options\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Stroke.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Stroke.render_options\"},{\"kind\":1024,\"name\":\"font_scale\",\"url\":\"classes/Stroke.html#render_options.__type.font_scale\",\"classes\":\"\",\"parent\":\"Stroke.render_options.__type\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Stroke.html#getPosition\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"addEndNote\",\"url\":\"classes/Stroke.html#addEndNote\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Stroke.html#draw\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Stroke.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Stroke.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Stroke.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Stroke.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Stroke.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Stroke.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Stroke.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Stroke.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Stroke.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Stroke.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Stroke.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Stroke.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Stroke.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Stroke.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Stroke.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Stroke.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Stroke.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Stroke.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Stroke.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Stroke.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Stroke.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Stroke.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Stroke.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Stroke.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Stroke.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Stroke.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Stroke.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Stroke.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Stroke.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Stroke.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Stroke.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Stroke.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Stroke.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Stroke.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Stroke.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Stroke.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Stroke.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Stroke.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Stroke.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Stroke.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Stroke.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Stroke.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Stroke.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Stroke.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Stroke.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Stroke.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Stroke.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Stroke.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Stroke.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Stroke.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Stroke.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Stroke.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Stroke.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":4194304,\"name\":\"Attributes\",\"url\":\"types/Attributes.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/Attributes.html#__type\",\"classes\":\"\",\"parent\":\"Attributes\"},{\"kind\":1024,\"name\":\"font-family\",\"url\":\"types/Attributes.html#__type.font_family\",\"classes\":\"\",\"parent\":\"Attributes.__type\"},{\"kind\":1024,\"name\":\"font-size\",\"url\":\"types/Attributes.html#__type.font_size\",\"classes\":\"\",\"parent\":\"Attributes.__type\"},{\"kind\":1024,\"name\":\"font-style\",\"url\":\"types/Attributes.html#__type.font_style\",\"classes\":\"\",\"parent\":\"Attributes.__type\"},{\"kind\":1024,\"name\":\"font-weight\",\"url\":\"types/Attributes.html#__type.font_weight\",\"classes\":\"\",\"parent\":\"Attributes.__type\"},{\"kind\":1024,\"name\":\"scaleX\",\"url\":\"types/Attributes.html#__type.scaleX\",\"classes\":\"\",\"parent\":\"Attributes.__type\"},{\"kind\":1024,\"name\":\"scaleY\",\"url\":\"types/Attributes.html#__type.scaleY\",\"classes\":\"\",\"parent\":\"Attributes.__type\"},{\"kind\":256,\"name\":\"State\",\"url\":\"interfaces/State.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"state\",\"url\":\"interfaces/State.html#state\",\"classes\":\"\",\"parent\":\"State\"},{\"kind\":1024,\"name\":\"attributes\",\"url\":\"interfaces/State.html#attributes\",\"classes\":\"\",\"parent\":\"State\"},{\"kind\":1024,\"name\":\"shadow_attributes\",\"url\":\"interfaces/State.html#shadow_attributes\",\"classes\":\"\",\"parent\":\"State\"},{\"kind\":1024,\"name\":\"lineWidth\",\"url\":\"interfaces/State.html#lineWidth\",\"classes\":\"\",\"parent\":\"State\"},{\"kind\":128,\"name\":\"SVGContext\",\"url\":\"classes/SVGContext.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/SVGContext.html#CATEGORY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SVGContext\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/SVGContext.html#constructor\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"element\",\"url\":\"classes/SVGContext.html#element\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"svg\",\"url\":\"classes/SVGContext.html#svg\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"classes/SVGContext.html#width\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"classes/SVGContext.html#height\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"path\",\"url\":\"classes/SVGContext.html#path\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"pen\",\"url\":\"classes/SVGContext.html#pen\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/SVGContext.html#pen.__type\",\"classes\":\"\",\"parent\":\"SVGContext.pen\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/SVGContext.html#pen.__type.x\",\"classes\":\"\",\"parent\":\"SVGContext.pen.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/SVGContext.html#pen.__type.y\",\"classes\":\"\",\"parent\":\"SVGContext.pen.__type\"},{\"kind\":1024,\"name\":\"lineWidth\",\"url\":\"classes/SVGContext.html#lineWidth\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"attributes\",\"url\":\"classes/SVGContext.html#attributes\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"shadow_attributes\",\"url\":\"classes/SVGContext.html#shadow_attributes\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"state\",\"url\":\"classes/SVGContext.html#state\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"state_stack\",\"url\":\"classes/SVGContext.html#state_stack\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"parent\",\"url\":\"classes/SVGContext.html#parent\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"groups\",\"url\":\"classes/SVGContext.html#groups\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"backgroundFillStyle\",\"url\":\"classes/SVGContext.html#backgroundFillStyle\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"create\",\"url\":\"classes/SVGContext.html#create\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"openGroup\",\"url\":\"classes/SVGContext.html#openGroup\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"closeGroup\",\"url\":\"classes/SVGContext.html#closeGroup\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"add\",\"url\":\"classes/SVGContext.html#add\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setFillStyle\",\"url\":\"classes/SVGContext.html#setFillStyle\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setBackgroundFillStyle\",\"url\":\"classes/SVGContext.html#setBackgroundFillStyle\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setStrokeStyle\",\"url\":\"classes/SVGContext.html#setStrokeStyle\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setShadowColor\",\"url\":\"classes/SVGContext.html#setShadowColor\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setShadowBlur\",\"url\":\"classes/SVGContext.html#setShadowBlur\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setLineWidth\",\"url\":\"classes/SVGContext.html#setLineWidth\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setLineDash\",\"url\":\"classes/SVGContext.html#setLineDash\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setLineCap\",\"url\":\"classes/SVGContext.html#setLineCap\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"resize\",\"url\":\"classes/SVGContext.html#resize\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"scale\",\"url\":\"classes/SVGContext.html#scale\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setViewBox\",\"url\":\"classes/SVGContext.html#setViewBox\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"applyAttributes\",\"url\":\"classes/SVGContext.html#applyAttributes\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"clear\",\"url\":\"classes/SVGContext.html#clear\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"rect\",\"url\":\"classes/SVGContext.html#rect\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"fillRect\",\"url\":\"classes/SVGContext.html#fillRect\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"clearRect\",\"url\":\"classes/SVGContext.html#clearRect\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"beginPath\",\"url\":\"classes/SVGContext.html#beginPath\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"moveTo\",\"url\":\"classes/SVGContext.html#moveTo\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"lineTo\",\"url\":\"classes/SVGContext.html#lineTo\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"bezierCurveTo\",\"url\":\"classes/SVGContext.html#bezierCurveTo\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"quadraticCurveTo\",\"url\":\"classes/SVGContext.html#quadraticCurveTo\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"arc\",\"url\":\"classes/SVGContext.html#arc\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"closePath\",\"url\":\"classes/SVGContext.html#closePath\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"fill\",\"url\":\"classes/SVGContext.html#fill\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"stroke\",\"url\":\"classes/SVGContext.html#stroke\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"measureText\",\"url\":\"classes/SVGContext.html#measureText\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"fillText\",\"url\":\"classes/SVGContext.html#fillText\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"save\",\"url\":\"classes/SVGContext.html#save\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"restore\",\"url\":\"classes/SVGContext.html#restore\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":262144,\"name\":\"fillStyle\",\"url\":\"classes/SVGContext.html#fillStyle\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":262144,\"name\":\"strokeStyle\",\"url\":\"classes/SVGContext.html#strokeStyle\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/SVGContext.html#setFont\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/SVGContext.html#getFont\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/SVGContext.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setRawFont\",\"url\":\"classes/SVGContext.html#setRawFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SVGContext\"},{\"kind\":256,\"name\":\"SystemFormatterOptions\",\"url\":\"interfaces/SystemFormatterOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"alpha\",\"url\":\"interfaces/SystemFormatterOptions.html#alpha\",\"classes\":\"\",\"parent\":\"SystemFormatterOptions\"},{\"kind\":1024,\"name\":\"softmaxFactor\",\"url\":\"interfaces/SystemFormatterOptions.html#softmaxFactor\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SystemFormatterOptions\"},{\"kind\":1024,\"name\":\"globalSoftmax\",\"url\":\"interfaces/SystemFormatterOptions.html#globalSoftmax\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SystemFormatterOptions\"},{\"kind\":1024,\"name\":\"maxIterations\",\"url\":\"interfaces/SystemFormatterOptions.html#maxIterations\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SystemFormatterOptions\"},{\"kind\":256,\"name\":\"SystemStave\",\"url\":\"interfaces/SystemStave.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"voices\",\"url\":\"interfaces/SystemStave.html#voices\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":1024,\"name\":\"stave\",\"url\":\"interfaces/SystemStave.html#stave\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":1024,\"name\":\"noJustification\",\"url\":\"interfaces/SystemStave.html#noJustification\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"interfaces/SystemStave.html#options\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":1024,\"name\":\"spaceAbove\",\"url\":\"interfaces/SystemStave.html#spaceAbove\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":1024,\"name\":\"spaceBelow\",\"url\":\"interfaces/SystemStave.html#spaceBelow\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":1024,\"name\":\"debugNoteMetrics\",\"url\":\"interfaces/SystemStave.html#debugNoteMetrics\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":256,\"name\":\"SystemOptions\",\"url\":\"interfaces/SystemOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"factory\",\"url\":\"interfaces/SystemOptions.html#factory\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"noPadding\",\"url\":\"interfaces/SystemOptions.html#noPadding\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"debugFormatter\",\"url\":\"interfaces/SystemOptions.html#debugFormatter\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"spaceBetweenStaves\",\"url\":\"interfaces/SystemOptions.html#spaceBetweenStaves\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"formatIterations\",\"url\":\"interfaces/SystemOptions.html#formatIterations\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"autoWidth\",\"url\":\"interfaces/SystemOptions.html#autoWidth\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"interfaces/SystemOptions.html#x\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/SystemOptions.html#width\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"interfaces/SystemOptions.html#y\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"details\",\"url\":\"interfaces/SystemOptions.html#details\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"formatOptions\",\"url\":\"interfaces/SystemOptions.html#formatOptions\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"noJustification\",\"url\":\"interfaces/SystemOptions.html#noJustification\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":128,\"name\":\"System\",\"url\":\"classes/System.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/System.html#CATEGORY\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/System.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/System.html#constructor\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setOptions\",\"url\":\"classes/System.html#setOptions\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/System.html#getX\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/System.html#setX\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getY\",\"url\":\"classes/System.html#getY\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setY\",\"url\":\"classes/System.html#setY\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getStaves\",\"url\":\"classes/System.html#getStaves\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getVoices\",\"url\":\"classes/System.html#getVoices\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/System.html#setContext\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"addConnector\",\"url\":\"classes/System.html#addConnector\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"addStave\",\"url\":\"classes/System.html#addStave\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"addVoices\",\"url\":\"classes/System.html#addVoices\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/System.html#format\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/System.html#draw\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/System.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/System.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/System.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/System.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/System.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/System.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/System.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/System.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/System.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/System.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/System.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/System.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/System.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/System.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/System.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/System.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/System.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/System.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/System.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/System.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/System.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/System.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/System.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/System.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/System.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/System.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/System.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/System.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/System.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/System.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/System.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/System.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/System.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":256,\"name\":\"TabNotePosition\",\"url\":\"interfaces/TabNotePosition.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"str\",\"url\":\"interfaces/TabNotePosition.html#str\",\"classes\":\"\",\"parent\":\"TabNotePosition\"},{\"kind\":1024,\"name\":\"fret\",\"url\":\"interfaces/TabNotePosition.html#fret\",\"classes\":\"\",\"parent\":\"TabNotePosition\"},{\"kind\":256,\"name\":\"TabNoteStruct\",\"url\":\"interfaces/TabNoteStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"positions\",\"url\":\"interfaces/TabNoteStruct.html#positions\",\"classes\":\"\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"interfaces/TabNoteStruct.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"auto_stem\",\"url\":\"interfaces/TabNoteStruct.html#auto_stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"stem_down_x_offset\",\"url\":\"interfaces/TabNoteStruct.html#stem_down_x_offset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"stem_up_x_offset\",\"url\":\"interfaces/TabNoteStruct.html#stem_up_x_offset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"interfaces/TabNoteStruct.html#stroke_px\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"interfaces/TabNoteStruct.html#glyph_font_scale\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"octave_shift\",\"url\":\"interfaces/TabNoteStruct.html#octave_shift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"clef\",\"url\":\"interfaces/TabNoteStruct.html#clef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"interfaces/TabNoteStruct.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/TabNoteStruct.html#duration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/TabNoteStruct.html#line\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/TabNoteStruct.html#dots\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/TabNoteStruct.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"align_center\",\"url\":\"interfaces/TabNoteStruct.html#align_center\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"duration_override\",\"url\":\"interfaces/TabNoteStruct.html#duration_override\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":128,\"name\":\"TabNote\",\"url\":\"classes/TabNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TabNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/TabNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/TabNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TabNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TabNote.html#constructor\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"greatestString\",\"url\":\"classes/TabNote.html#greatestString\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"leastString\",\"url\":\"classes/TabNote.html#leastString\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/TabNote.html#reset\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setGhost\",\"url\":\"classes/TabNote.html#setGhost\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/TabNote.html#hasStem\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemExtension\",\"url\":\"classes/TabNote.html#getStemExtension\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"updateWidth\",\"url\":\"classes/TabNote.html#updateWidth\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/TabNote.html#setStave\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getPositions\",\"url\":\"classes/TabNote.html#getPositions\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/TabNote.html#getModifierStartXY\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TabNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"TabNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/TabNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"TabNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/TabNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"TabNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/TabNote.html#getLineForRest\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/TabNote.html#preFormat\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemX\",\"url\":\"classes/TabNote.html#getStemX\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemY\",\"url\":\"classes/TabNote.html#getStemY\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/TabNote.html#getStemExtents\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TabNote.html#getStemExtents.getStemExtents-1.__type-2\",\"classes\":\"\",\"parent\":\"TabNote.getStemExtents.getStemExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/TabNote.html#getStemExtents.getStemExtents-1.__type-2.topY\",\"classes\":\"\",\"parent\":\"TabNote.getStemExtents.getStemExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/TabNote.html#getStemExtents.getStemExtents-1.__type-2.baseY\",\"classes\":\"\",\"parent\":\"TabNote.getStemExtents.getStemExtents.__type\"},{\"kind\":2048,\"name\":\"drawFlag\",\"url\":\"classes/TabNote.html#drawFlag\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"drawModifiers\",\"url\":\"classes/TabNote.html#drawModifiers\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"drawStemThrough\",\"url\":\"classes/TabNote.html#drawStemThrough\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"drawPositions\",\"url\":\"classes/TabNote.html#drawPositions\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TabNote.html#draw-1\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"classes/TabNote.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"classes/TabNote.html#stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStem\",\"url\":\"classes/TabNote.html#getStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"checkStem\",\"url\":\"classes/TabNote.html#checkStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setStem\",\"url\":\"classes/TabNote.html#setStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"buildStem\",\"url\":\"classes/TabNote.html#buildStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"buildFlag\",\"url\":\"classes/TabNote.html#buildFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getBaseCustomNoteHeadGlyphProps\",\"url\":\"classes/TabNote.html#getBaseCustomNoteHeadGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemLength\",\"url\":\"classes/TabNote.html#getStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/TabNote.html#getBeamCount\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemMinimumLength\",\"url\":\"classes/TabNote.html#getStemMinimumLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/TabNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setStemDirection\",\"url\":\"classes/TabNote.html#setStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getCenterGlyphX\",\"url\":\"classes/TabNote.html#getCenterGlyphX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setStemLength\",\"url\":\"classes/TabNote.html#setStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/TabNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/TabNote.html#getYForBottomText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"hasFlag\",\"url\":\"classes/TabNote.html#hasFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/TabNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"drawStem\",\"url\":\"classes/TabNote.html#drawStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/TabNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/TabNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/TabNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TabNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TabNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TabNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/TabNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/TabNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/TabNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/TabNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/TabNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/TabNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/TabNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/TabNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/TabNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/TabNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/TabNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/TabNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/TabNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/TabNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/TabNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/TabNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/TabNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/TabNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/TabNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/TabNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/TabNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/TabNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/TabNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/TabNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/TabNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/TabNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/TabNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/TabNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/TabNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/TabNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/TabNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/TabNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/TabNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/TabNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/TabNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/TabNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/TabNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/TabNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/TabNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/TabNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/TabNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/TabNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/TabNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/TabNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/TabNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/TabNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/TabNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/TabNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/TabNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/TabNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/TabNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/TabNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/TabNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/TabNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/TabNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TabNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/TabNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/TabNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TabNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/TabNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/TabNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/TabNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/TabNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/TabNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/TabNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/TabNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/TabNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/TabNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/TabNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/TabNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/TabNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/TabNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/TabNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/TabNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/TabNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/TabNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/TabNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/TabNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/TabNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/TabNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/TabNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TabNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TabNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TabNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TabNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TabNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TabNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TabNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TabNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TabNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TabNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TabNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TabNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TabNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TabNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TabNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TabNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TabNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TabNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TabNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TabNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TabNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TabNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TabNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TabNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TabNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TabNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TabNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TabNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TabNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TabNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TabNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TabNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TabNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TabNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":128,\"name\":\"TabSlide\",\"url\":\"classes/TabSlide.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TabSlide.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TabSlide.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"SLIDE_UP\",\"url\":\"classes/TabSlide.html#SLIDE_UP\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"SLIDE_DOWN\",\"url\":\"classes/TabSlide.html#SLIDE_DOWN\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"createSlideUp\",\"url\":\"classes/TabSlide.html#createSlideUp\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"createSlideDown\",\"url\":\"classes/TabSlide.html#createSlideDown\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"createHammeron\",\"url\":\"classes/TabSlide.html#createHammeron\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"createPulloff\",\"url\":\"classes/TabSlide.html#createPulloff\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TabSlide.html#constructor\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"renderTie\",\"url\":\"classes/TabSlide.html#renderTie\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TabSlide.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TabSlide.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TabSlide.render_options\"},{\"kind\":1024,\"name\":\"cp2\",\"url\":\"classes/TabSlide.html#render_options.__type.cp2\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":1024,\"name\":\"last_x_shift\",\"url\":\"classes/TabSlide.html#render_options.__type.last_x_shift\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":1024,\"name\":\"tie_spacing\",\"url\":\"classes/TabSlide.html#render_options.__type.tie_spacing\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":1024,\"name\":\"cp1\",\"url\":\"classes/TabSlide.html#render_options.__type.cp1\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":1024,\"name\":\"first_x_shift\",\"url\":\"classes/TabSlide.html#render_options.__type.first_x_shift\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":1024,\"name\":\"text_shift_x\",\"url\":\"classes/TabSlide.html#render_options.__type.text_shift_x\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/TabSlide.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":2048,\"name\":\"setDirection\",\"url\":\"classes/TabSlide.html#setDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setNotes\",\"url\":\"classes/TabSlide.html#setNotes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"isPartial\",\"url\":\"classes/TabSlide.html#isPartial\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"renderText\",\"url\":\"classes/TabSlide.html#renderText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getNotes\",\"url\":\"classes/TabSlide.html#getNotes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TabSlide.html#draw\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TabSlide.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TabSlide.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TabSlide.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TabSlide.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TabSlide.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TabSlide.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TabSlide.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TabSlide.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TabSlide.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TabSlide.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TabSlide.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TabSlide.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TabSlide.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TabSlide.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TabSlide.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TabSlide.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TabSlide.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TabSlide.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TabSlide.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TabSlide.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TabSlide.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TabSlide.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TabSlide.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TabSlide.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TabSlide.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TabSlide.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TabSlide.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TabSlide.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TabSlide.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TabSlide.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TabSlide.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TabSlide.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TabSlide.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TabSlide.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":128,\"name\":\"TabStave\",\"url\":\"classes/TabStave.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TabStave.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TabStave\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TabStave.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"defaultPadding\",\"url\":\"classes/TabStave.html#defaultPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"rightPadding\",\"url\":\"classes/TabStave.html#rightPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"formatBegModifiers\",\"url\":\"classes/TabStave.html#formatBegModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TabStave.html#constructor\",\"classes\":\"\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getYForGlyphs\",\"url\":\"classes/TabStave.html#getYForGlyphs\",\"classes\":\"\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addTabGlyph\",\"url\":\"classes/TabStave.html#addTabGlyph\",\"classes\":\"\",\"parent\":\"TabStave\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"classes/TabStave.html#options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setDefaultLedgerLineStyle\",\"url\":\"classes/TabStave.html#setDefaultLedgerLineStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getDefaultLedgerLineStyle\",\"url\":\"classes/TabStave.html#getDefaultLedgerLineStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"space\",\"url\":\"classes/TabStave.html#space\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"resetLines\",\"url\":\"classes/TabStave.html#resetLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setNoteStartX\",\"url\":\"classes/TabStave.html#setNoteStartX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getNoteStartX\",\"url\":\"classes/TabStave.html#getNoteStartX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getNoteEndX\",\"url\":\"classes/TabStave.html#getNoteEndX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getTieStartX\",\"url\":\"classes/TabStave.html#getTieStartX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getTieEndX\",\"url\":\"classes/TabStave.html#getTieEndX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TabStave.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getNumLines\",\"url\":\"classes/TabStave.html#getNumLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setNumLines\",\"url\":\"classes/TabStave.html#setNumLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setY\",\"url\":\"classes/TabStave.html#setY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getY\",\"url\":\"classes/TabStave.html#getY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getTopLineTopY\",\"url\":\"classes/TabStave.html#getTopLineTopY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getBottomLineBottomY\",\"url\":\"classes/TabStave.html#getBottomLineBottomY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/TabStave.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/TabStave.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TabStave.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TabStave.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setMeasure\",\"url\":\"classes/TabStave.html#setMeasure\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getMeasure\",\"url\":\"classes/TabStave.html#getMeasure\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getModifierXShift\",\"url\":\"classes/TabStave.html#getModifierXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setRepetitionType\",\"url\":\"classes/TabStave.html#setRepetitionType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setVoltaType\",\"url\":\"classes/TabStave.html#setVoltaType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setSection\",\"url\":\"classes/TabStave.html#setSection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setTempo\",\"url\":\"classes/TabStave.html#setTempo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setText\",\"url\":\"classes/TabStave.html#setText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getHeight\",\"url\":\"classes/TabStave.html#getHeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getSpacingBetweenLines\",\"url\":\"classes/TabStave.html#getSpacingBetweenLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TabStave.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getBottomY\",\"url\":\"classes/TabStave.html#getBottomY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getBottomLineY\",\"url\":\"classes/TabStave.html#getBottomLineY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getYForLine\",\"url\":\"classes/TabStave.html#getYForLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getLineForY\",\"url\":\"classes/TabStave.html#getLineForY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/TabStave.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/TabStave.html#getYForBottomText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getYForNote\",\"url\":\"classes/TabStave.html#getYForNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/TabStave.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addEndModifier\",\"url\":\"classes/TabStave.html#addEndModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setBegBarType\",\"url\":\"classes/TabStave.html#setBegBarType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setEndBarType\",\"url\":\"classes/TabStave.html#setEndBarType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setClef\",\"url\":\"classes/TabStave.html#setClef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getClef\",\"url\":\"classes/TabStave.html#getClef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setEndClef\",\"url\":\"classes/TabStave.html#setEndClef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getEndClef\",\"url\":\"classes/TabStave.html#getEndClef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setKeySignature\",\"url\":\"classes/TabStave.html#setKeySignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setEndKeySignature\",\"url\":\"classes/TabStave.html#setEndKeySignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setTimeSignature\",\"url\":\"classes/TabStave.html#setTimeSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setEndTimeSignature\",\"url\":\"classes/TabStave.html#setEndTimeSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addKeySignature\",\"url\":\"classes/TabStave.html#addKeySignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addClef\",\"url\":\"classes/TabStave.html#addClef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addEndClef\",\"url\":\"classes/TabStave.html#addEndClef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addTimeSignature\",\"url\":\"classes/TabStave.html#addTimeSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addEndTimeSignature\",\"url\":\"classes/TabStave.html#addEndTimeSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addTrebleGlyph\",\"url\":\"classes/TabStave.html#addTrebleGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/TabStave.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"sortByCategory\",\"url\":\"classes/TabStave.html#sortByCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/TabStave.html#format\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TabStave.html#draw\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getVerticalBarWidth\",\"url\":\"classes/TabStave.html#getVerticalBarWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getConfigForLines\",\"url\":\"classes/TabStave.html#getConfigForLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setConfigForLine\",\"url\":\"classes/TabStave.html#setConfigForLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setConfigForLines\",\"url\":\"classes/TabStave.html#setConfigForLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TabStave.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TabStave.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TabStave.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TabStave.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TabStave.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TabStave.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TabStave.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TabStave.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TabStave.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TabStave.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TabStave.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TabStave.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TabStave.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TabStave.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TabStave.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TabStave.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TabStave.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TabStave.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TabStave.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TabStave.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TabStave.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TabStave.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TabStave.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TabStave.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TabStave.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TabStave.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TabStave.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TabStave.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TabStave.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TabStave.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TabStave.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TabStave.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":128,\"name\":\"TabTie\",\"url\":\"classes/TabTie.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TabTie.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"createHammeron\",\"url\":\"classes/TabTie.html#createHammeron\",\"classes\":\"\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"createPulloff\",\"url\":\"classes/TabTie.html#createPulloff\",\"classes\":\"\",\"parent\":\"TabTie\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TabTie.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TabTie.html#constructor\",\"classes\":\"\",\"parent\":\"TabTie\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TabTie.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TabTie.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TabTie.render_options\"},{\"kind\":1024,\"name\":\"cp2\",\"url\":\"classes/TabTie.html#render_options.__type.cp2\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":1024,\"name\":\"last_x_shift\",\"url\":\"classes/TabTie.html#render_options.__type.last_x_shift\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":1024,\"name\":\"tie_spacing\",\"url\":\"classes/TabTie.html#render_options.__type.tie_spacing\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":1024,\"name\":\"cp1\",\"url\":\"classes/TabTie.html#render_options.__type.cp1\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":1024,\"name\":\"first_x_shift\",\"url\":\"classes/TabTie.html#render_options.__type.first_x_shift\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":1024,\"name\":\"text_shift_x\",\"url\":\"classes/TabTie.html#render_options.__type.text_shift_x\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/TabTie.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":2048,\"name\":\"setDirection\",\"url\":\"classes/TabTie.html#setDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setNotes\",\"url\":\"classes/TabTie.html#setNotes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"isPartial\",\"url\":\"classes/TabTie.html#isPartial\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"renderTie\",\"url\":\"classes/TabTie.html#renderTie\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"renderText\",\"url\":\"classes/TabTie.html#renderText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getNotes\",\"url\":\"classes/TabTie.html#getNotes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TabTie.html#draw\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TabTie.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TabTie.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TabTie.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TabTie.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TabTie.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TabTie.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TabTie.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TabTie.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TabTie.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TabTie.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TabTie.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TabTie.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TabTie.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TabTie.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TabTie.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TabTie.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TabTie.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TabTie.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TabTie.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TabTie.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TabTie.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TabTie.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TabTie.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TabTie.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TabTie.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TabTie.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TabTie.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TabTie.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TabTie.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TabTie.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TabTie.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TabTie.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TabTie.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TabTie.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":256,\"name\":\"TextBracketParams\",\"url\":\"interfaces/TextBracketParams.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"start\",\"url\":\"interfaces/TextBracketParams.html#start\",\"classes\":\"\",\"parent\":\"TextBracketParams\"},{\"kind\":1024,\"name\":\"stop\",\"url\":\"interfaces/TextBracketParams.html#stop\",\"classes\":\"\",\"parent\":\"TextBracketParams\"},{\"kind\":1024,\"name\":\"text\",\"url\":\"interfaces/TextBracketParams.html#text\",\"classes\":\"\",\"parent\":\"TextBracketParams\"},{\"kind\":1024,\"name\":\"superscript\",\"url\":\"interfaces/TextBracketParams.html#superscript\",\"classes\":\"\",\"parent\":\"TextBracketParams\"},{\"kind\":1024,\"name\":\"position\",\"url\":\"interfaces/TextBracketParams.html#position\",\"classes\":\"\",\"parent\":\"TextBracketParams\"},{\"kind\":8,\"name\":\"TextBracketPosition\",\"url\":\"enums/TextBracketPosition.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"TOP\",\"url\":\"enums/TextBracketPosition.html#TOP\",\"classes\":\"\",\"parent\":\"TextBracketPosition\"},{\"kind\":16,\"name\":\"BOTTOM\",\"url\":\"enums/TextBracketPosition.html#BOTTOM\",\"classes\":\"\",\"parent\":\"TextBracketPosition\"},{\"kind\":128,\"name\":\"TextBracket\",\"url\":\"classes/TextBracket.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/TextBracket.html#DEBUG\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TextBracket.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TextBracket.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/TextBracket.html#Position-1\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/TextBracket.html#PositionString\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"Positions\",\"url\":\"classes/TextBracket.html#Positions\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"PositionsString\",\"url\":\"classes/TextBracket.html#PositionsString\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TextBracket.html#constructor\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TextBracket.html#render_options\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TextBracket.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TextBracket.render_options\"},{\"kind\":1024,\"name\":\"dashed\",\"url\":\"classes/TextBracket.html#render_options.__type.dashed\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"color\",\"url\":\"classes/TextBracket.html#render_options.__type.color\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"line_width\",\"url\":\"classes/TextBracket.html#render_options.__type.line_width\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"underline_superscript\",\"url\":\"classes/TextBracket.html#render_options.__type.underline_superscript\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"show_bracket\",\"url\":\"classes/TextBracket.html#render_options.__type.show_bracket\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"dash\",\"url\":\"classes/TextBracket.html#render_options.__type.dash\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"bracket_height\",\"url\":\"classes/TextBracket.html#render_options.__type.bracket_height\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"position\",\"url\":\"classes/TextBracket.html#position\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":1024,\"name\":\"start\",\"url\":\"classes/TextBracket.html#start\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":1024,\"name\":\"stop\",\"url\":\"classes/TextBracket.html#stop\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TextBracket.html#applyStyle\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setDashed\",\"url\":\"classes/TextBracket.html#setDashed\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/TextBracket.html#setLine\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TextBracket.html#draw\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TextBracket.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TextBracket.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TextBracket.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TextBracket.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TextBracket.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TextBracket.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TextBracket.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TextBracket.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TextBracket.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TextBracket.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TextBracket.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TextBracket.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TextBracket.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TextBracket.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TextBracket.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TextBracket.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TextBracket.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TextBracket.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TextBracket.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TextBracket.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TextBracket.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TextBracket.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TextBracket.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TextBracket.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TextBracket.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TextBracket.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TextBracket.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TextBracket.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TextBracket.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TextBracket.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TextBracket.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TextBracket.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TextBracket.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":128,\"name\":\"TextDynamics\",\"url\":\"classes/TextDynamics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/TextDynamics.html#DEBUG\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TextDynamics.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"GLYPHS\",\"url\":\"classes/TextDynamics.html#GLYPHS\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/TextDynamics.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/TextDynamics.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TextDynamics.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TextDynamics.html#constructor\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/TextDynamics.html#setLine\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/TextDynamics.html#preFormat\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TextDynamics.html#draw-1\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/TextDynamics.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/TextDynamics.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/TextDynamics.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TextDynamics.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TextDynamics.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/TextDynamics.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/TextDynamics.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/TextDynamics.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/TextDynamics.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/TextDynamics.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/TextDynamics.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/TextDynamics.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/TextDynamics.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/TextDynamics.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/TextDynamics.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/TextDynamics.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/TextDynamics.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/TextDynamics.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/TextDynamics.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/TextDynamics.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/TextDynamics.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/TextDynamics.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/TextDynamics.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/TextDynamics.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/TextDynamics.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/TextDynamics.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/TextDynamics.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/TextDynamics.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/TextDynamics.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/TextDynamics.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/TextDynamics.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/TextDynamics.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/TextDynamics.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/TextDynamics.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/TextDynamics.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/TextDynamics.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/TextDynamics.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/TextDynamics.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/TextDynamics.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/TextDynamics.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/TextDynamics.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/TextDynamics.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/TextDynamics.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/TextDynamics.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/TextDynamics.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/TextDynamics.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/TextDynamics.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/TextDynamics.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/TextDynamics.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/TextDynamics.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/TextDynamics.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/TextDynamics.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/TextDynamics.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TextDynamics.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"TextDynamics.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/TextDynamics.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"TextDynamics.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/TextDynamics.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"TextDynamics.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/TextDynamics.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/TextDynamics.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/TextDynamics.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/TextDynamics.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/TextDynamics.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/TextDynamics.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/TextDynamics.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/TextDynamics.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/TextDynamics.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/TextDynamics.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/TextDynamics.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/TextDynamics.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/TextDynamics.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/TextDynamics.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/TextDynamics.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TextDynamics.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/TextDynamics.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/TextDynamics.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TextDynamics.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/TextDynamics.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/TextDynamics.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/TextDynamics.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/TextDynamics.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/TextDynamics.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/TextDynamics.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/TextDynamics.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/TextDynamics.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/TextDynamics.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/TextDynamics.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/TextDynamics.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/TextDynamics.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/TextDynamics.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/TextDynamics.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/TextDynamics.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/TextDynamics.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/TextDynamics.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/TextDynamics.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/TextDynamics.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/TextDynamics.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/TextDynamics.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/TextDynamics.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/TextDynamics.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TextDynamics.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TextDynamics.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TextDynamics.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TextDynamics.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TextDynamics.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TextDynamics.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TextDynamics.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TextDynamics.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TextDynamics.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TextDynamics.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TextDynamics.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TextDynamics.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TextDynamics.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TextDynamics.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TextDynamics.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TextDynamics.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TextDynamics.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TextDynamics.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TextDynamics.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TextDynamics.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TextDynamics.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TextDynamics.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TextDynamics.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TextDynamics.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TextDynamics.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TextDynamics.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TextDynamics.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TextDynamics.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TextDynamics.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TextDynamics.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TextDynamics.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TextDynamics.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TextDynamics.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TextDynamics.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":256,\"name\":\"TextFormatterInfo\",\"url\":\"interfaces/TextFormatterInfo.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"family\",\"url\":\"interfaces/TextFormatterInfo.html#family\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"resolution\",\"url\":\"interfaces/TextFormatterInfo.html#resolution\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"glyphs\",\"url\":\"interfaces/TextFormatterInfo.html#glyphs\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"serifs\",\"url\":\"interfaces/TextFormatterInfo.html#serifs\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"monospaced\",\"url\":\"interfaces/TextFormatterInfo.html#monospaced\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"italic\",\"url\":\"interfaces/TextFormatterInfo.html#italic\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"bold\",\"url\":\"interfaces/TextFormatterInfo.html#bold\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"maxSizeGlyph\",\"url\":\"interfaces/TextFormatterInfo.html#maxSizeGlyph\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"superscriptOffset\",\"url\":\"interfaces/TextFormatterInfo.html#superscriptOffset\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"subscriptOffset\",\"url\":\"interfaces/TextFormatterInfo.html#subscriptOffset\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"interfaces/TextFormatterInfo.html#description\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":256,\"name\":\"yExtent\",\"url\":\"interfaces/yExtent.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"yMin\",\"url\":\"interfaces/yExtent.html#yMin\",\"classes\":\"\",\"parent\":\"yExtent\"},{\"kind\":1024,\"name\":\"yMax\",\"url\":\"interfaces/yExtent.html#yMax\",\"classes\":\"\",\"parent\":\"yExtent\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/yExtent.html#height\",\"classes\":\"\",\"parent\":\"yExtent\"},{\"kind\":128,\"name\":\"TextFormatter\",\"url\":\"classes/TextFormatter.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/TextFormatter.html#DEBUG\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getFontFamilies\",\"url\":\"classes/TextFormatter.html#getFontFamilies\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"create\",\"url\":\"classes/TextFormatter.html#create\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getInfo\",\"url\":\"classes/TextFormatter.html#getInfo\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"registerInfo\",\"url\":\"classes/TextFormatter.html#registerInfo\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":262144,\"name\":\"localHeightCache\",\"url\":\"classes/TextFormatter.html#localHeightCache\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"updateParams\",\"url\":\"classes/TextFormatter.html#updateParams\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"updateCacheKey\",\"url\":\"classes/TextFormatter.html#updateCacheKey\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getGlyphMetrics\",\"url\":\"classes/TextFormatter.html#getGlyphMetrics\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":262144,\"name\":\"maxHeight\",\"url\":\"classes/TextFormatter.html#maxHeight\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getWidthForCharacterInEm\",\"url\":\"classes/TextFormatter.html#getWidthForCharacterInEm\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getYForCharacterInPx\",\"url\":\"classes/TextFormatter.html#getYForCharacterInPx\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getYForStringInPx\",\"url\":\"classes/TextFormatter.html#getYForStringInPx\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getWidthForTextInEm\",\"url\":\"classes/TextFormatter.html#getWidthForTextInEm\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getWidthForTextInPx\",\"url\":\"classes/TextFormatter.html#getWidthForTextInPx\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TextFormatter.html#setFontSize\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TextFormatter.html#fontSizeInPixels\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getResolution\",\"url\":\"classes/TextFormatter.html#getResolution\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":8,\"name\":\"TextJustification\",\"url\":\"enums/TextJustification.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"LEFT\",\"url\":\"enums/TextJustification.html#LEFT\",\"classes\":\"\",\"parent\":\"TextJustification\"},{\"kind\":16,\"name\":\"CENTER\",\"url\":\"enums/TextJustification.html#CENTER\",\"classes\":\"\",\"parent\":\"TextJustification\"},{\"kind\":16,\"name\":\"RIGHT\",\"url\":\"enums/TextJustification.html#RIGHT\",\"classes\":\"\",\"parent\":\"TextJustification\"},{\"kind\":256,\"name\":\"TextNoteStruct\",\"url\":\"interfaces/TextNoteStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"text\",\"url\":\"interfaces/TextNoteStruct.html#text\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"glyph\",\"url\":\"interfaces/TextNoteStruct.html#glyph\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"ignore_ticks\",\"url\":\"interfaces/TextNoteStruct.html#ignore_ticks\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"smooth\",\"url\":\"interfaces/TextNoteStruct.html#smooth\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"interfaces/TextNoteStruct.html#font\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"subscript\",\"url\":\"interfaces/TextNoteStruct.html#subscript\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"superscript\",\"url\":\"interfaces/TextNoteStruct.html#superscript\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"interfaces/TextNoteStruct.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/TextNoteStruct.html#duration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/TextNoteStruct.html#line\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/TextNoteStruct.html#dots\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/TextNoteStruct.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"align_center\",\"url\":\"interfaces/TextNoteStruct.html#align_center\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"duration_override\",\"url\":\"interfaces/TextNoteStruct.html#duration_override\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":128,\"name\":\"TextNote\",\"url\":\"classes/TextNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TextNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TextNote.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":1024,\"name\":\"Justification\",\"url\":\"classes/TextNote.html#Justification\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"GLYPHS\",\"url\":\"classes/TextNote.html#GLYPHS\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/TextNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/TextNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TextNote.html#constructor\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setJustification\",\"url\":\"classes/TextNote.html#setJustification\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/TextNote.html#setLine\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getLine\",\"url\":\"classes/TextNote.html#getLine\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getText\",\"url\":\"classes/TextNote.html#getText\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/TextNote.html#preFormat\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TextNote.html#draw-1\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/TextNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/TextNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/TextNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TextNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TextNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TextNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/TextNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/TextNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/TextNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/TextNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/TextNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/TextNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/TextNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/TextNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/TextNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/TextNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/TextNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/TextNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/TextNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/TextNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/TextNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/TextNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/TextNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/TextNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/TextNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/TextNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/TextNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/TextNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/TextNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/TextNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/TextNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/TextNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/TextNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/TextNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/TextNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/TextNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/TextNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/TextNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/TextNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/TextNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/TextNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/TextNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/TextNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/TextNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/TextNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/TextNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/TextNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/TextNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/TextNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/TextNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/TextNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/TextNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/TextNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/TextNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TextNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"TextNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/TextNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"TextNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/TextNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"TextNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/TextNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/TextNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/TextNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/TextNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/TextNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/TextNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/TextNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/TextNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/TextNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/TextNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/TextNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/TextNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/TextNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/TextNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/TextNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TextNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/TextNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/TextNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TextNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/TextNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/TextNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/TextNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/TextNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/TextNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/TextNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/TextNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/TextNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/TextNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/TextNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/TextNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/TextNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/TextNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/TextNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/TextNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/TextNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/TextNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/TextNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/TextNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/TextNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/TextNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/TextNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/TextNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TextNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TextNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TextNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TextNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TextNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TextNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TextNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TextNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TextNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TextNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TextNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TextNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TextNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TextNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TextNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TextNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TextNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TextNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TextNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TextNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TextNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TextNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TextNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TextNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TextNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TextNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TextNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TextNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TextNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TextNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TextNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TextNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TextNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TextNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":256,\"name\":\"FormatterMetrics\",\"url\":\"interfaces/FormatterMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/FormatterMetrics.html#duration\",\"classes\":\"\",\"parent\":\"FormatterMetrics\"},{\"kind\":1024,\"name\":\"freedom\",\"url\":\"interfaces/FormatterMetrics.html#freedom\",\"classes\":\"\",\"parent\":\"FormatterMetrics\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FormatterMetrics.html#freedom.__type\",\"classes\":\"\",\"parent\":\"FormatterMetrics.freedom\"},{\"kind\":1024,\"name\":\"left\",\"url\":\"interfaces/FormatterMetrics.html#freedom.__type.left\",\"classes\":\"\",\"parent\":\"FormatterMetrics.freedom.__type\"},{\"kind\":1024,\"name\":\"right\",\"url\":\"interfaces/FormatterMetrics.html#freedom.__type.right\",\"classes\":\"\",\"parent\":\"FormatterMetrics.freedom.__type\"},{\"kind\":1024,\"name\":\"iterations\",\"url\":\"interfaces/FormatterMetrics.html#iterations\",\"classes\":\"\",\"parent\":\"FormatterMetrics\"},{\"kind\":1024,\"name\":\"space\",\"url\":\"interfaces/FormatterMetrics.html#space\",\"classes\":\"\",\"parent\":\"FormatterMetrics\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FormatterMetrics.html#space.__type-1\",\"classes\":\"\",\"parent\":\"FormatterMetrics.space\"},{\"kind\":1024,\"name\":\"used\",\"url\":\"interfaces/FormatterMetrics.html#space.__type-1.used\",\"classes\":\"\",\"parent\":\"FormatterMetrics.space.__type\"},{\"kind\":1024,\"name\":\"mean\",\"url\":\"interfaces/FormatterMetrics.html#space.__type-1.mean\",\"classes\":\"\",\"parent\":\"FormatterMetrics.space.__type\"},{\"kind\":1024,\"name\":\"deviation\",\"url\":\"interfaces/FormatterMetrics.html#space.__type-1.deviation\",\"classes\":\"\",\"parent\":\"FormatterMetrics.space.__type\"},{\"kind\":128,\"name\":\"Tickable\",\"url\":\"classes/Tickable.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Tickable.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Tickable.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tickable.html#constructor\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Tickable.html#reset\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/Tickable.html#getTicks\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/Tickable.html#shouldIgnoreTicks\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/Tickable.html#setIgnoreTicks\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Tickable.html#setWidth\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Tickable.html#getWidth\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Tickable.html#setXShift\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Tickable.html#getXShift\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Tickable.html#getX\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/Tickable.html#getFormatterMetrics\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/Tickable.html#getCenterXShift\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/Tickable.html#setCenterXShift\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/Tickable.html#isCenterAligned\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/Tickable.html#setCenterAlignment\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/Tickable.html#getVoice\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/Tickable.html#setVoice\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/Tickable.html#getTuplet\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/Tickable.html#getTupletStack\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/Tickable.html#resetTuplet\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/Tickable.html#setTuplet\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/Tickable.html#addToModifierContext\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/Tickable.html#addModifier\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/Tickable.html#getModifiers\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/Tickable.html#setTickContext\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/Tickable.html#checkTickContext\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/Tickable.html#preFormat\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/Tickable.html#preFormatted\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/Tickable.html#postFormat\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/Tickable.html#postFormatted\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/Tickable.html#getIntrinsicTicks\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/Tickable.html#setIntrinsicTicks\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/Tickable.html#getTickMultiplier\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/Tickable.html#applyTickMultiplier\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/Tickable.html#setDuration\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/Tickable.html#getAbsoluteX\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Tickable.html#setModifierContext\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Tickable.html#getModifierContext\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Tickable.html#checkModifierContext\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Tickable.html#getStave\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Tickable.html#setStave\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/Tickable.html#getMetrics\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Tickable.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Tickable.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Tickable.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Tickable.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Tickable.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Tickable.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Tickable.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Tickable.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Tickable.html#draw\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Tickable.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Tickable.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Tickable.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Tickable.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Tickable.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Tickable.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Tickable.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Tickable.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Tickable.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Tickable.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Tickable.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Tickable.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Tickable.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Tickable.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Tickable.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Tickable.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Tickable.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Tickable.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Tickable.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Tickable.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Tickable.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Tickable.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Tickable.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Tickable.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Tickable.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Tickable.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":256,\"name\":\"TickContextMetrics\",\"url\":\"interfaces/TickContextMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"totalLeftPx\",\"url\":\"interfaces/TickContextMetrics.html#totalLeftPx\",\"classes\":\"\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"totalRightPx\",\"url\":\"interfaces/TickContextMetrics.html#totalRightPx\",\"classes\":\"\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/TickContextMetrics.html#width\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"glyphWidth\",\"url\":\"interfaces/TickContextMetrics.html#glyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"notePx\",\"url\":\"interfaces/TickContextMetrics.html#notePx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"modLeftPx\",\"url\":\"interfaces/TickContextMetrics.html#modLeftPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"modRightPx\",\"url\":\"interfaces/TickContextMetrics.html#modRightPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"leftDisplacedHeadPx\",\"url\":\"interfaces/TickContextMetrics.html#leftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"glyphPx\",\"url\":\"interfaces/TickContextMetrics.html#glyphPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"rightDisplacedHeadPx\",\"url\":\"interfaces/TickContextMetrics.html#rightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":256,\"name\":\"TickContextOptions\",\"url\":\"interfaces/TickContextOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"tickID\",\"url\":\"interfaces/TickContextOptions.html#tickID\",\"classes\":\"\",\"parent\":\"TickContextOptions\"},{\"kind\":128,\"name\":\"TickContext\",\"url\":\"classes/TickContext.html\",\"classes\":\"\"},{\"kind\":2048,\"name\":\"getNextContext\",\"url\":\"classes/TickContext.html#getNextContext\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TickContext.html#constructor\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":1024,\"name\":\"tContexts\",\"url\":\"classes/TickContext.html#tContexts\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getTickID\",\"url\":\"classes/TickContext.html#getTickID\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TickContext.html#getX\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/TickContext.html#setX\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getXBase\",\"url\":\"classes/TickContext.html#getXBase\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"setXBase\",\"url\":\"classes/TickContext.html#setXBase\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getXOffset\",\"url\":\"classes/TickContext.html#getXOffset\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"setXOffset\",\"url\":\"classes/TickContext.html#setXOffset\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TickContext.html#getWidth\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/TickContext.html#setPadding\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getMaxTicks\",\"url\":\"classes/TickContext.html#getMaxTicks\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getMinTicks\",\"url\":\"classes/TickContext.html#getMinTicks\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getMaxTickable\",\"url\":\"classes/TickContext.html#getMaxTickable\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getMinTickable\",\"url\":\"classes/TickContext.html#getMinTickable\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getTickables\",\"url\":\"classes/TickContext.html#getTickables\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getTickableForVoice\",\"url\":\"classes/TickContext.html#getTickableForVoice\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getTickablesByVoice\",\"url\":\"classes/TickContext.html#getTickablesByVoice\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getCenterAlignedTickables\",\"url\":\"classes/TickContext.html#getCenterAlignedTickables\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/TickContext.html#getMetrics\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getCurrentTick\",\"url\":\"classes/TickContext.html#getCurrentTick\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"setCurrentTick\",\"url\":\"classes/TickContext.html#setCurrentTick\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"addTickable\",\"url\":\"classes/TickContext.html#addTickable\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/TickContext.html#preFormat\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/TickContext.html#postFormat\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/TickContext.html#getFormatterMetrics\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TickContext.html#getFormatterMetrics.getFormatterMetrics-1.__type\",\"classes\":\"\",\"parent\":\"TickContext.getFormatterMetrics.getFormatterMetrics\"},{\"kind\":1024,\"name\":\"freedom\",\"url\":\"classes/TickContext.html#getFormatterMetrics.getFormatterMetrics-1.__type.freedom\",\"classes\":\"\",\"parent\":\"TickContext.getFormatterMetrics.getFormatterMetrics.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TickContext.html#getFormatterMetrics.getFormatterMetrics-1.__type.freedom.__type-1\",\"classes\":\"\",\"parent\":\"TickContext.getFormatterMetrics.getFormatterMetrics.__type.freedom\"},{\"kind\":1024,\"name\":\"left\",\"url\":\"classes/TickContext.html#getFormatterMetrics.getFormatterMetrics-1.__type.freedom.__type-1.left\",\"classes\":\"\",\"parent\":\"TickContext.getFormatterMetrics.getFormatterMetrics.__type.freedom.__type\"},{\"kind\":1024,\"name\":\"right\",\"url\":\"classes/TickContext.html#getFormatterMetrics.getFormatterMetrics-1.__type.freedom.__type-1.right\",\"classes\":\"\",\"parent\":\"TickContext.getFormatterMetrics.getFormatterMetrics.__type.freedom.__type\"},{\"kind\":128,\"name\":\"TimeSignatureGlyph\",\"url\":\"classes/TimeSignatureGlyph.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TimeSignatureGlyph.html#CATEGORY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"CURRENT_CACHE_KEY\",\"url\":\"classes/TimeSignatureGlyph.html#CURRENT_CACHE_KEY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"MUSIC_FONT_STACK\",\"url\":\"classes/TimeSignatureGlyph.html#MUSIC_FONT_STACK\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"lookupFontMetric\",\"url\":\"classes/TimeSignatureGlyph.html#lookupFontMetric\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"lookupGlyph\",\"url\":\"classes/TimeSignatureGlyph.html#lookupGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TimeSignatureGlyph.html#lookupGlyph.lookupGlyph-1.__type\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph.lookupGlyph.lookupGlyph\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/TimeSignatureGlyph.html#lookupGlyph.lookupGlyph-1.__type.font-3\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph.lookupGlyph.lookupGlyph.__type\"},{\"kind\":1024,\"name\":\"glyph\",\"url\":\"classes/TimeSignatureGlyph.html#lookupGlyph.lookupGlyph-1.__type.glyph\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph.lookupGlyph.lookupGlyph.__type\"},{\"kind\":2048,\"name\":\"loadMetrics\",\"url\":\"classes/TimeSignatureGlyph.html#loadMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"renderGlyph\",\"url\":\"classes/TimeSignatureGlyph.html#renderGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"renderOutline\",\"url\":\"classes/TimeSignatureGlyph.html#renderOutline\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getOutlineBoundingBox\",\"url\":\"classes/TimeSignatureGlyph.html#getOutlineBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TimeSignatureGlyph.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TimeSignatureGlyph.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TimeSignatureGlyph.html#constructor\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"timeSignature\",\"url\":\"classes/TimeSignatureGlyph.html#timeSignature\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"topStartX\",\"url\":\"classes/TimeSignatureGlyph.html#topStartX\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"botStartX\",\"url\":\"classes/TimeSignatureGlyph.html#botStartX\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"classes/TimeSignatureGlyph.html#width\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"lineShift\",\"url\":\"classes/TimeSignatureGlyph.html#lineShift\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"xMin\",\"url\":\"classes/TimeSignatureGlyph.html#xMin\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/TimeSignatureGlyph.html#getMetrics\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"renderToStave\",\"url\":\"classes/TimeSignatureGlyph.html#renderToStave\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"bbox\",\"url\":\"classes/TimeSignatureGlyph.html#bbox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/TimeSignatureGlyph.html#code\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"metrics\",\"url\":\"classes/TimeSignatureGlyph.html#metrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"topGlyphs\",\"url\":\"classes/TimeSignatureGlyph.html#topGlyphs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"botGlyphs\",\"url\":\"classes/TimeSignatureGlyph.html#botGlyphs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/TimeSignatureGlyph.html#scale\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TimeSignatureGlyph.html#draw\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getCode\",\"url\":\"classes/TimeSignatureGlyph.html#getCode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setOptions\",\"url\":\"classes/TimeSignatureGlyph.html#setOptions\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setPoint\",\"url\":\"classes/TimeSignatureGlyph.html#setPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/TimeSignatureGlyph.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/TimeSignatureGlyph.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/TimeSignatureGlyph.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getYshift\",\"url\":\"classes/TimeSignatureGlyph.html#getYshift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/TimeSignatureGlyph.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/TimeSignatureGlyph.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"checkMetrics\",\"url\":\"classes/TimeSignatureGlyph.html#checkMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setOriginX\",\"url\":\"classes/TimeSignatureGlyph.html#setOriginX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setOriginY\",\"url\":\"classes/TimeSignatureGlyph.html#setOriginY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setOrigin\",\"url\":\"classes/TimeSignatureGlyph.html#setOrigin\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/TimeSignatureGlyph.html#render\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/TimeSignatureGlyph.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TimeSignatureGlyph.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TimeSignatureGlyph.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TimeSignatureGlyph.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TimeSignatureGlyph.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TimeSignatureGlyph.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TimeSignatureGlyph.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TimeSignatureGlyph.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TimeSignatureGlyph.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TimeSignatureGlyph.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TimeSignatureGlyph.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TimeSignatureGlyph.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TimeSignatureGlyph.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TimeSignatureGlyph.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TimeSignatureGlyph.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TimeSignatureGlyph.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TimeSignatureGlyph.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TimeSignatureGlyph.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TimeSignatureGlyph.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TimeSignatureGlyph.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TimeSignatureGlyph.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TimeSignatureGlyph.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TimeSignatureGlyph.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TimeSignatureGlyph.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TimeSignatureGlyph.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TimeSignatureGlyph.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TimeSignatureGlyph.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TimeSignatureGlyph.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TimeSignatureGlyph.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TimeSignatureGlyph.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TimeSignatureGlyph.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TimeSignatureGlyph.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TimeSignatureGlyph.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TimeSignatureGlyph.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TimeSignatureGlyph.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":256,\"name\":\"TimeSignatureInfo\",\"url\":\"interfaces/TimeSignatureInfo.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"glyph\",\"url\":\"interfaces/TimeSignatureInfo.html#glyph\",\"classes\":\"\",\"parent\":\"TimeSignatureInfo\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/TimeSignatureInfo.html#line\",\"classes\":\"\",\"parent\":\"TimeSignatureInfo\"},{\"kind\":1024,\"name\":\"num\",\"url\":\"interfaces/TimeSignatureInfo.html#num\",\"classes\":\"\",\"parent\":\"TimeSignatureInfo\"},{\"kind\":128,\"name\":\"TimeSignature\",\"url\":\"classes/TimeSignature.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TimeSignature.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"glyphs\",\"url\":\"classes/TimeSignature.html#glyphs\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/TimeSignature.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TimeSignature.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TimeSignature.html#constructor\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":1024,\"name\":\"point\",\"url\":\"classes/TimeSignature.html#point\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":1024,\"name\":\"bottomLine\",\"url\":\"classes/TimeSignature.html#bottomLine\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":1024,\"name\":\"topLine\",\"url\":\"classes/TimeSignature.html#topLine\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"parseTimeSpec\",\"url\":\"classes/TimeSignature.html#parseTimeSpec\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"makeTimeSignatureGlyph\",\"url\":\"classes/TimeSignature.html#makeTimeSignatureGlyph\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getInfo\",\"url\":\"classes/TimeSignature.html#getInfo\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setTimeSig\",\"url\":\"classes/TimeSignature.html#setTimeSig\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getTimeSpec\",\"url\":\"classes/TimeSignature.html#getTimeSpec\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getLine\",\"url\":\"classes/TimeSignature.html#getLine\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/TimeSignature.html#setLine\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/TimeSignature.html#getGlyph\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setGlyph\",\"url\":\"classes/TimeSignature.html#setGlyph\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getIsNumeric\",\"url\":\"classes/TimeSignature.html#getIsNumeric\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setIsNumeric\",\"url\":\"classes/TimeSignature.html#setIsNumeric\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TimeSignature.html#draw\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/TimeSignature.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/TimeSignature.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/TimeSignature.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/TimeSignature.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/TimeSignature.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TimeSignature.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/TimeSignature.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TimeSignature.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/TimeSignature.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/TimeSignature.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/TimeSignature.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/TimeSignature.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/TimeSignature.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/TimeSignature.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TimeSignature.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TimeSignature.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TimeSignature.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TimeSignature.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TimeSignature.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TimeSignature.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TimeSignature.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TimeSignature.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TimeSignature.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TimeSignature.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TimeSignature.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TimeSignature.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TimeSignature.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TimeSignature.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TimeSignature.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TimeSignature.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TimeSignature.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TimeSignature.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TimeSignature.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TimeSignature.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TimeSignature.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TimeSignature.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TimeSignature.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TimeSignature.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TimeSignature.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TimeSignature.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TimeSignature.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TimeSignature.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TimeSignature.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TimeSignature.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TimeSignature.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TimeSignature.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TimeSignature.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TimeSignature.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":128,\"name\":\"TimeSigNote\",\"url\":\"classes/TimeSigNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TimeSigNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/TimeSigNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/TimeSigNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TimeSigNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TimeSigNote.html#constructor\",\"classes\":\"\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/TimeSigNote.html#addToModifierContext\",\"classes\":\"\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/TimeSigNote.html#preFormat\",\"classes\":\"\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TimeSigNote.html#draw-1\",\"classes\":\"\",\"parent\":\"TimeSigNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/TimeSigNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/TimeSigNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/TimeSigNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TimeSigNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TimeSigNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/TimeSigNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/TimeSigNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/TimeSigNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/TimeSigNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/TimeSigNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/TimeSigNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/TimeSigNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/TimeSigNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/TimeSigNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/TimeSigNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/TimeSigNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/TimeSigNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/TimeSigNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/TimeSigNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/TimeSigNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/TimeSigNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/TimeSigNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/TimeSigNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/TimeSigNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/TimeSigNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/TimeSigNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/TimeSigNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/TimeSigNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/TimeSigNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/TimeSigNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/TimeSigNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/TimeSigNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/TimeSigNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/TimeSigNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/TimeSigNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/TimeSigNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/TimeSigNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/TimeSigNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/TimeSigNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/TimeSigNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/TimeSigNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/TimeSigNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/TimeSigNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/TimeSigNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/TimeSigNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/TimeSigNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/TimeSigNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/TimeSigNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/TimeSigNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/TimeSigNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/TimeSigNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/TimeSigNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/TimeSigNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TimeSigNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"TimeSigNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/TimeSigNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"TimeSigNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/TimeSigNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"TimeSigNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/TimeSigNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/TimeSigNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/TimeSigNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/TimeSigNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/TimeSigNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/TimeSigNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/TimeSigNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/TimeSigNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/TimeSigNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/TimeSigNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/TimeSigNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/TimeSigNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/TimeSigNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/TimeSigNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/TimeSigNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TimeSigNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/TimeSigNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/TimeSigNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TimeSigNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/TimeSigNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/TimeSigNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/TimeSigNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/TimeSigNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/TimeSigNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/TimeSigNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/TimeSigNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/TimeSigNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/TimeSigNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/TimeSigNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/TimeSigNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/TimeSigNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/TimeSigNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/TimeSigNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/TimeSigNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/TimeSigNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/TimeSigNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/TimeSigNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/TimeSigNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/TimeSigNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/TimeSigNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/TimeSigNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TimeSigNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TimeSigNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TimeSigNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TimeSigNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TimeSigNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TimeSigNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TimeSigNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TimeSigNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TimeSigNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TimeSigNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TimeSigNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TimeSigNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TimeSigNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TimeSigNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TimeSigNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TimeSigNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TimeSigNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TimeSigNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TimeSigNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TimeSigNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TimeSigNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TimeSigNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TimeSigNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TimeSigNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TimeSigNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TimeSigNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TimeSigNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TimeSigNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TimeSigNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TimeSigNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TimeSigNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TimeSigNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TimeSigNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TimeSigNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":128,\"name\":\"Tremolo\",\"url\":\"classes/Tremolo.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Tremolo.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Tremolo.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Tremolo.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Tremolo.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tremolo.html#constructor\",\"classes\":\"\",\"parent\":\"Tremolo\"},{\"kind\":1024,\"name\":\"y_spacing_scale\",\"url\":\"classes/Tremolo.html#y_spacing_scale\",\"classes\":\"\",\"parent\":\"Tremolo\"},{\"kind\":1024,\"name\":\"extra_stroke_scale\",\"url\":\"classes/Tremolo.html#extra_stroke_scale\",\"classes\":\"\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Tremolo.html#draw\",\"classes\":\"\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Tremolo.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Tremolo.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Tremolo.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Tremolo.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Tremolo.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Tremolo.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Tremolo.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Tremolo.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Tremolo.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Tremolo.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Tremolo.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Tremolo.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Tremolo.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Tremolo.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Tremolo.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Tremolo.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Tremolo.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Tremolo.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Tremolo.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Tremolo.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Tremolo.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Tremolo.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Tremolo.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Tremolo.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Tremolo.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Tremolo.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Tremolo.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Tremolo.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Tremolo.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Tremolo.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Tremolo.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Tremolo.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Tremolo.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Tremolo.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Tremolo.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Tremolo.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Tremolo.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Tremolo.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Tremolo.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Tremolo.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Tremolo.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Tremolo.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Tremolo.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Tremolo.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Tremolo.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Tremolo.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Tremolo.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Tremolo.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Tremolo.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Tremolo.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Tremolo.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Tremolo.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Tremolo.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Tremolo.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":128,\"name\":\"Tuning\",\"url\":\"classes/Tuning.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"names\",\"url\":\"classes/Tuning.html#names\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tuning.html#constructor\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":2048,\"name\":\"noteToInteger\",\"url\":\"classes/Tuning.html#noteToInteger\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":2048,\"name\":\"setTuning\",\"url\":\"classes/Tuning.html#setTuning\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":2048,\"name\":\"getValueForString\",\"url\":\"classes/Tuning.html#getValueForString\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":2048,\"name\":\"getValueForFret\",\"url\":\"classes/Tuning.html#getValueForFret\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":2048,\"name\":\"getNoteForFret\",\"url\":\"classes/Tuning.html#getNoteForFret\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":256,\"name\":\"TupletOptions\",\"url\":\"interfaces/TupletOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"beats_occupied\",\"url\":\"interfaces/TupletOptions.html#beats_occupied\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":1024,\"name\":\"bracketed\",\"url\":\"interfaces/TupletOptions.html#bracketed\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":1024,\"name\":\"location\",\"url\":\"interfaces/TupletOptions.html#location\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":1024,\"name\":\"notes_occupied\",\"url\":\"interfaces/TupletOptions.html#notes_occupied\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":1024,\"name\":\"num_notes\",\"url\":\"interfaces/TupletOptions.html#num_notes\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":1024,\"name\":\"ratioed\",\"url\":\"interfaces/TupletOptions.html#ratioed\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":1024,\"name\":\"y_offset\",\"url\":\"interfaces/TupletOptions.html#y_offset\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":256,\"name\":\"TupletMetrics\",\"url\":\"interfaces/TupletMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"noteHeadOffset\",\"url\":\"interfaces/TupletMetrics.html#noteHeadOffset\",\"classes\":\"\",\"parent\":\"TupletMetrics\"},{\"kind\":1024,\"name\":\"stemOffset\",\"url\":\"interfaces/TupletMetrics.html#stemOffset\",\"classes\":\"\",\"parent\":\"TupletMetrics\"},{\"kind\":1024,\"name\":\"bottomLine\",\"url\":\"interfaces/TupletMetrics.html#bottomLine\",\"classes\":\"\",\"parent\":\"TupletMetrics\"},{\"kind\":1024,\"name\":\"topModifierOffset\",\"url\":\"interfaces/TupletMetrics.html#topModifierOffset\",\"classes\":\"\",\"parent\":\"TupletMetrics\"},{\"kind\":8,\"name\":\"TupletLocation\",\"url\":\"enums/TupletLocation.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"BOTTOM\",\"url\":\"enums/TupletLocation.html#BOTTOM\",\"classes\":\"\",\"parent\":\"TupletLocation\"},{\"kind\":16,\"name\":\"TOP\",\"url\":\"enums/TupletLocation.html#TOP\",\"classes\":\"\",\"parent\":\"TupletLocation\"},{\"kind\":128,\"name\":\"Tuplet\",\"url\":\"classes/Tuplet.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Tuplet.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"LOCATION_TOP\",\"url\":\"classes/Tuplet.html#LOCATION_TOP\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"LOCATION_BOTTOM\",\"url\":\"classes/Tuplet.html#LOCATION_BOTTOM\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"NESTING_OFFSET\",\"url\":\"classes/Tuplet.html#NESTING_OFFSET\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"metrics\",\"url\":\"classes/Tuplet.html#metrics\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Tuplet.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tuplet.html#constructor\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":1024,\"name\":\"notes\",\"url\":\"classes/Tuplet.html#notes\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"attach\",\"url\":\"classes/Tuplet.html#attach\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"detach\",\"url\":\"classes/Tuplet.html#detach\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setBracketed\",\"url\":\"classes/Tuplet.html#setBracketed\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setRatioed\",\"url\":\"classes/Tuplet.html#setRatioed\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setTupletLocation\",\"url\":\"classes/Tuplet.html#setTupletLocation\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getNotes\",\"url\":\"classes/Tuplet.html#getNotes\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getNoteCount\",\"url\":\"classes/Tuplet.html#getNoteCount\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"beatsOccupiedDeprecationWarning\",\"url\":\"classes/Tuplet.html#beatsOccupiedDeprecationWarning\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getBeatsOccupied\",\"url\":\"classes/Tuplet.html#getBeatsOccupied\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setBeatsOccupied\",\"url\":\"classes/Tuplet.html#setBeatsOccupied\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getNotesOccupied\",\"url\":\"classes/Tuplet.html#getNotesOccupied\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setNotesOccupied\",\"url\":\"classes/Tuplet.html#setNotesOccupied\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"resolveGlyphs\",\"url\":\"classes/Tuplet.html#resolveGlyphs\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getNestedTupletCount\",\"url\":\"classes/Tuplet.html#getNestedTupletCount\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getYPosition\",\"url\":\"classes/Tuplet.html#getYPosition\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Tuplet.html#draw\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Tuplet.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Tuplet.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Tuplet.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Tuplet.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Tuplet.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Tuplet.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Tuplet.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Tuplet.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Tuplet.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Tuplet.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Tuplet.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Tuplet.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Tuplet.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Tuplet.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Tuplet.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Tuplet.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Tuplet.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Tuplet.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Tuplet.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Tuplet.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Tuplet.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Tuplet.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Tuplet.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Tuplet.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Tuplet.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Tuplet.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Tuplet.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Tuplet.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Tuplet.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Tuplet.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Tuplet.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Tuplet.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Tuplet.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Tuplet.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":64,\"name\":\"isCategory\",\"url\":\"functions/isCategory.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isAccidental\",\"url\":\"functions/isAccidental.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isAnnotation\",\"url\":\"functions/isAnnotation.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isBarline\",\"url\":\"functions/isBarline.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isDot\",\"url\":\"functions/isDot.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isGraceNote\",\"url\":\"functions/isGraceNote.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isGraceNoteGroup\",\"url\":\"functions/isGraceNoteGroup.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isNote\",\"url\":\"functions/isNote.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isRenderContext\",\"url\":\"functions/isRenderContext.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isStaveNote\",\"url\":\"functions/isStaveNote.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isStemmableNote\",\"url\":\"functions/isStemmableNote.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isTabNote\",\"url\":\"functions/isTabNote.html\",\"classes\":\"\"},{\"kind\":8,\"name\":\"Category\",\"url\":\"enums/Category.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"Accidental\",\"url\":\"enums/Category.html#Accidental\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Annotation\",\"url\":\"enums/Category.html#Annotation\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Articulation\",\"url\":\"enums/Category.html#Articulation\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Barline\",\"url\":\"enums/Category.html#Barline\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"BarNote\",\"url\":\"enums/Category.html#BarNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Beam\",\"url\":\"enums/Category.html#Beam\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Bend\",\"url\":\"enums/Category.html#Bend\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"ChordSymbol\",\"url\":\"enums/Category.html#ChordSymbol\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Clef\",\"url\":\"enums/Category.html#Clef\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"ClefNote\",\"url\":\"enums/Category.html#ClefNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Crescendo\",\"url\":\"enums/Category.html#Crescendo\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Curve\",\"url\":\"enums/Category.html#Curve\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Dot\",\"url\":\"enums/Category.html#Dot\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Element\",\"url\":\"enums/Category.html#Element\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Fraction\",\"url\":\"enums/Category.html#Fraction\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"FretHandFinger\",\"url\":\"enums/Category.html#FretHandFinger\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"GhostNote\",\"url\":\"enums/Category.html#GhostNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Glyph\",\"url\":\"enums/Category.html#Glyph\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"GlyphNote\",\"url\":\"enums/Category.html#GlyphNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"GraceNote\",\"url\":\"enums/Category.html#GraceNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"GraceNoteGroup\",\"url\":\"enums/Category.html#GraceNoteGroup\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"GraceTabNote\",\"url\":\"enums/Category.html#GraceTabNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"KeySignature\",\"url\":\"enums/Category.html#KeySignature\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"KeySigNote\",\"url\":\"enums/Category.html#KeySigNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Modifier\",\"url\":\"enums/Category.html#Modifier\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"MultiMeasureRest\",\"url\":\"enums/Category.html#MultiMeasureRest\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Note\",\"url\":\"enums/Category.html#Note\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"NoteHead\",\"url\":\"enums/Category.html#NoteHead\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"NoteSubGroup\",\"url\":\"enums/Category.html#NoteSubGroup\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Ornament\",\"url\":\"enums/Category.html#Ornament\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Parenthesis\",\"url\":\"enums/Category.html#Parenthesis\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"PedalMarking\",\"url\":\"enums/Category.html#PedalMarking\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"RenderContext\",\"url\":\"enums/Category.html#RenderContext\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"RepeatNote\",\"url\":\"enums/Category.html#RepeatNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Repetition\",\"url\":\"enums/Category.html#Repetition\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Stave\",\"url\":\"enums/Category.html#Stave\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveConnector\",\"url\":\"enums/Category.html#StaveConnector\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveHairpin\",\"url\":\"enums/Category.html#StaveHairpin\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveLine\",\"url\":\"enums/Category.html#StaveLine\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveModifier\",\"url\":\"enums/Category.html#StaveModifier\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveNote\",\"url\":\"enums/Category.html#StaveNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveSection\",\"url\":\"enums/Category.html#StaveSection\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveTempo\",\"url\":\"enums/Category.html#StaveTempo\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveText\",\"url\":\"enums/Category.html#StaveText\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveTie\",\"url\":\"enums/Category.html#StaveTie\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Stem\",\"url\":\"enums/Category.html#Stem\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StemmableNote\",\"url\":\"enums/Category.html#StemmableNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StringNumber\",\"url\":\"enums/Category.html#StringNumber\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Stroke\",\"url\":\"enums/Category.html#Stroke\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"System\",\"url\":\"enums/Category.html#System\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TabNote\",\"url\":\"enums/Category.html#TabNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TabSlide\",\"url\":\"enums/Category.html#TabSlide\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TabStave\",\"url\":\"enums/Category.html#TabStave\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TabTie\",\"url\":\"enums/Category.html#TabTie\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TextBracket\",\"url\":\"enums/Category.html#TextBracket\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TextDynamics\",\"url\":\"enums/Category.html#TextDynamics\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TextNote\",\"url\":\"enums/Category.html#TextNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Tickable\",\"url\":\"enums/Category.html#Tickable\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TimeSignature\",\"url\":\"enums/Category.html#TimeSignature\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TimeSigNote\",\"url\":\"enums/Category.html#TimeSigNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Tremolo\",\"url\":\"enums/Category.html#Tremolo\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Tuplet\",\"url\":\"enums/Category.html#Tuplet\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Vibrato\",\"url\":\"enums/Category.html#Vibrato\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"VibratoBracket\",\"url\":\"enums/Category.html#VibratoBracket\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Voice\",\"url\":\"enums/Category.html#Voice\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Volta\",\"url\":\"enums/Category.html#Volta\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":64,\"name\":\"globalObject\",\"url\":\"functions/globalObject.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"defined\",\"url\":\"functions/defined.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"log\",\"url\":\"functions/log.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"warn\",\"url\":\"functions/warn.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"midLine\",\"url\":\"functions/midLine.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"prefix\",\"url\":\"functions/prefix.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"normalizeAngle\",\"url\":\"functions/normalizeAngle.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"sumArray\",\"url\":\"functions/sumArray.html\",\"classes\":\"\"},{\"kind\":128,\"name\":\"RuntimeError\",\"url\":\"classes/RuntimeError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RuntimeError.html#constructor\",\"classes\":\"\",\"parent\":\"RuntimeError\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/RuntimeError.html#code\",\"classes\":\"\",\"parent\":\"RuntimeError\"},{\"kind\":128,\"name\":\"Vex\",\"url\":\"classes/Vex.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"Flow\",\"url\":\"classes/Vex.html#Flow\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":2048,\"name\":\"sortAndUnique\",\"url\":\"classes/Vex.html#sortAndUnique\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":2048,\"name\":\"contains\",\"url\":\"classes/Vex.html#contains\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":2048,\"name\":\"getCanvasContext\",\"url\":\"classes/Vex.html#getCanvasContext\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":2048,\"name\":\"benchmark\",\"url\":\"classes/Vex.html#benchmark\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":2048,\"name\":\"stackTrace\",\"url\":\"classes/Vex.html#stackTrace\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":1024,\"name\":\"RERR\",\"url\":\"classes/Vex.html#RERR\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":1024,\"name\":\"RuntimeError\",\"url\":\"classes/Vex.html#RuntimeError\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Vex.html#constructor\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":256,\"name\":\"VibratoRenderOptions\",\"url\":\"interfaces/VibratoRenderOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"wave_height\",\"url\":\"interfaces/VibratoRenderOptions.html#wave_height\",\"classes\":\"\",\"parent\":\"VibratoRenderOptions\"},{\"kind\":1024,\"name\":\"wave_girth\",\"url\":\"interfaces/VibratoRenderOptions.html#wave_girth\",\"classes\":\"\",\"parent\":\"VibratoRenderOptions\"},{\"kind\":1024,\"name\":\"vibrato_width\",\"url\":\"interfaces/VibratoRenderOptions.html#vibrato_width\",\"classes\":\"\",\"parent\":\"VibratoRenderOptions\"},{\"kind\":1024,\"name\":\"harsh\",\"url\":\"interfaces/VibratoRenderOptions.html#harsh\",\"classes\":\"\",\"parent\":\"VibratoRenderOptions\"},{\"kind\":1024,\"name\":\"wave_width\",\"url\":\"interfaces/VibratoRenderOptions.html#wave_width\",\"classes\":\"\",\"parent\":\"VibratoRenderOptions\"},{\"kind\":128,\"name\":\"Vibrato\",\"url\":\"classes/Vibrato.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Vibrato.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Vibrato.html#format\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"renderVibrato\",\"url\":\"classes/Vibrato.html#renderVibrato\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Vibrato.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Vibrato.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Vibrato.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Vibrato.html#constructor\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Vibrato.html#render_options\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setHarsh\",\"url\":\"classes/Vibrato.html#setHarsh\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setVibratoWidth\",\"url\":\"classes/Vibrato.html#setVibratoWidth\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Vibrato.html#draw\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Vibrato.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Vibrato.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Vibrato.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Vibrato.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Vibrato.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Vibrato.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Vibrato.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Vibrato.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Vibrato.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Vibrato.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Vibrato.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Vibrato.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Vibrato.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Vibrato.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Vibrato.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Vibrato.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Vibrato.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Vibrato.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Vibrato.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Vibrato.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Vibrato.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Vibrato.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Vibrato.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Vibrato.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Vibrato.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Vibrato.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Vibrato.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Vibrato.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Vibrato.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Vibrato.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Vibrato.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Vibrato.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Vibrato.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Vibrato.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Vibrato.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Vibrato.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Vibrato.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Vibrato.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Vibrato.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Vibrato.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Vibrato.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Vibrato.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Vibrato.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Vibrato.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Vibrato.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Vibrato.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Vibrato.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Vibrato.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Vibrato.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Vibrato.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Vibrato.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Vibrato.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Vibrato.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Vibrato.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":128,\"name\":\"VibratoBracket\",\"url\":\"classes/VibratoBracket.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/VibratoBracket.html#DEBUG\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/VibratoBracket.html#CATEGORY\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/VibratoBracket.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/VibratoBracket.html#constructor\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/VibratoBracket.html#render_options\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/VibratoBracket.html#render_options.__type\",\"classes\":\"\",\"parent\":\"VibratoBracket.render_options\"},{\"kind\":1024,\"name\":\"vibrato_width\",\"url\":\"classes/VibratoBracket.html#render_options.__type.vibrato_width\",\"classes\":\"\",\"parent\":\"VibratoBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"wave_height\",\"url\":\"classes/VibratoBracket.html#render_options.__type.wave_height\",\"classes\":\"\",\"parent\":\"VibratoBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"wave_girth\",\"url\":\"classes/VibratoBracket.html#render_options.__type.wave_girth\",\"classes\":\"\",\"parent\":\"VibratoBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"harsh\",\"url\":\"classes/VibratoBracket.html#render_options.__type.harsh\",\"classes\":\"\",\"parent\":\"VibratoBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"wave_width\",\"url\":\"classes/VibratoBracket.html#render_options.__type.wave_width\",\"classes\":\"\",\"parent\":\"VibratoBracket.render_options.__type\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/VibratoBracket.html#setLine\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setHarsh\",\"url\":\"classes/VibratoBracket.html#setHarsh\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/VibratoBracket.html#draw\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/VibratoBracket.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/VibratoBracket.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/VibratoBracket.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/VibratoBracket.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/VibratoBracket.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/VibratoBracket.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/VibratoBracket.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/VibratoBracket.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/VibratoBracket.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/VibratoBracket.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/VibratoBracket.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/VibratoBracket.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/VibratoBracket.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/VibratoBracket.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/VibratoBracket.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/VibratoBracket.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/VibratoBracket.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/VibratoBracket.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/VibratoBracket.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/VibratoBracket.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/VibratoBracket.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/VibratoBracket.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/VibratoBracket.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/VibratoBracket.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/VibratoBracket.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/VibratoBracket.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/VibratoBracket.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/VibratoBracket.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/VibratoBracket.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/VibratoBracket.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/VibratoBracket.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/VibratoBracket.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/VibratoBracket.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/VibratoBracket.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":256,\"name\":\"VoiceTime\",\"url\":\"interfaces/VoiceTime.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"num_beats\",\"url\":\"interfaces/VoiceTime.html#num_beats\",\"classes\":\"\",\"parent\":\"VoiceTime\"},{\"kind\":1024,\"name\":\"beat_value\",\"url\":\"interfaces/VoiceTime.html#beat_value\",\"classes\":\"\",\"parent\":\"VoiceTime\"},{\"kind\":1024,\"name\":\"resolution\",\"url\":\"interfaces/VoiceTime.html#resolution\",\"classes\":\"\",\"parent\":\"VoiceTime\"},{\"kind\":8,\"name\":\"VoiceMode\",\"url\":\"enums/VoiceMode.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"STRICT\",\"url\":\"enums/VoiceMode.html#STRICT\",\"classes\":\"\",\"parent\":\"VoiceMode\"},{\"kind\":16,\"name\":\"SOFT\",\"url\":\"enums/VoiceMode.html#SOFT\",\"classes\":\"\",\"parent\":\"VoiceMode\"},{\"kind\":16,\"name\":\"FULL\",\"url\":\"enums/VoiceMode.html#FULL\",\"classes\":\"\",\"parent\":\"VoiceMode\"},{\"kind\":128,\"name\":\"Voice\",\"url\":\"classes/Voice.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Voice.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"Mode\",\"url\":\"classes/Voice.html#Mode\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Voice.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Voice.html#constructor\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getTotalTicks\",\"url\":\"classes/Voice.html#getTotalTicks\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getTicksUsed\",\"url\":\"classes/Voice.html#getTicksUsed\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getLargestTickWidth\",\"url\":\"classes/Voice.html#getLargestTickWidth\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getSmallestTickCount\",\"url\":\"classes/Voice.html#getSmallestTickCount\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getTickables\",\"url\":\"classes/Voice.html#getTickables\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getMode\",\"url\":\"classes/Voice.html#getMode\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setMode\",\"url\":\"classes/Voice.html#setMode\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getResolutionMultiplier\",\"url\":\"classes/Voice.html#getResolutionMultiplier\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getActualResolution\",\"url\":\"classes/Voice.html#getActualResolution\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Voice.html#setStave\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Voice.html#getStave\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Voice.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setStrict\",\"url\":\"classes/Voice.html#setStrict\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"isComplete\",\"url\":\"classes/Voice.html#isComplete\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setSoftmaxFactor\",\"url\":\"classes/Voice.html#setSoftmaxFactor\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"softmax\",\"url\":\"classes/Voice.html#softmax\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"addTickable\",\"url\":\"classes/Voice.html#addTickable\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"addTickables\",\"url\":\"classes/Voice.html#addTickables\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/Voice.html#preFormat\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Voice.html#checkStave\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Voice.html#draw\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Voice.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Voice.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Voice.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Voice.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Voice.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Voice.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Voice.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Voice.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Voice.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Voice.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Voice.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Voice.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Voice.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Voice.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Voice.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Voice.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Voice.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Voice.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Voice.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Voice.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Voice.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Voice.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Voice.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Voice.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Voice.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Voice.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Voice.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Voice.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Voice.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Voice.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Voice.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Voice.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Voice.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":64,\"name\":\"isHTMLCanvas\",\"url\":\"functions/isHTMLCanvas.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isHTMLDiv\",\"url\":\"functions/isHTMLDiv.html\",\"classes\":\"\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,59.743]],[\"comment/0\",[]],[\"name/1\",[1,44.315]],[\"comment/1\",[]],[\"name/2\",[2,84.871]],[\"comment/2\",[]],[\"name/3\",[0,59.743]],[\"comment/3\",[]],[\"name/4\",[3,84.871]],[\"comment/4\",[]],[\"name/5\",[4,84.871]],[\"comment/5\",[]],[\"name/6\",[5,84.871]],[\"comment/6\",[]],[\"name/7\",[6,60.298]],[\"comment/7\",[]],[\"name/8\",[7,63.664]],[\"comment/8\",[]],[\"name/9\",[8,57.35]],[\"comment/9\",[]],[\"name/10\",[9,46.22]],[\"comment/10\",[]],[\"name/11\",[10,58.239]],[\"comment/11\",[]],[\"name/12\",[11,84.871]],[\"comment/12\",[]],[\"name/13\",[12,84.871]],[\"comment/13\",[]],[\"name/14\",[13,54.107]],[\"comment/14\",[]],[\"name/15\",[14,59.743]],[\"comment/15\",[]],[\"name/16\",[15,46.945]],[\"comment/16\",[]],[\"name/17\",[16,44.087]],[\"comment/17\",[]],[\"name/18\",[17,57.785]],[\"comment/18\",[]],[\"name/19\",[18,52.946]],[\"comment/19\",[]],[\"name/20\",[1,44.315]],[\"comment/20\",[]],[\"name/21\",[19,84.871]],[\"comment/21\",[]],[\"name/22\",[20,73.883]],[\"comment/22\",[]],[\"name/23\",[21,84.871]],[\"comment/23\",[]],[\"name/24\",[22,49.502]],[\"comment/24\",[]],[\"name/25\",[23,60.887]],[\"comment/25\",[]],[\"name/26\",[24,84.871]],[\"comment/26\",[]],[\"name/27\",[25,44.668]],[\"comment/27\",[]],[\"name/28\",[26,50.524]],[\"comment/28\",[]],[\"name/29\",[27,60.887]],[\"comment/29\",[]],[\"name/30\",[28,60.887]],[\"comment/30\",[]],[\"name/31\",[29,60.887]],[\"comment/31\",[]],[\"name/32\",[30,60.887]],[\"comment/32\",[]],[\"name/33\",[31,60.887]],[\"comment/33\",[]],[\"name/34\",[32,53.509]],[\"comment/34\",[]],[\"name/35\",[33,53.509]],[\"comment/35\",[]],[\"name/36\",[34,53.509]],[\"comment/36\",[]],[\"name/37\",[35,56.148]],[\"comment/37\",[]],[\"name/38\",[36,55.778]],[\"comment/38\",[]],[\"name/39\",[37,60.887]],[\"comment/39\",[]],[\"name/40\",[38,59.743]],[\"comment/40\",[]],[\"name/41\",[39,60.887]],[\"comment/41\",[]],[\"name/42\",[40,60.887]],[\"comment/42\",[]],[\"name/43\",[41,52.675]],[\"comment/43\",[]],[\"name/44\",[42,52.675]],[\"comment/44\",[]],[\"name/45\",[43,60.887]],[\"comment/45\",[]],[\"name/46\",[44,47.097]],[\"comment/46\",[]],[\"name/47\",[45,47.097]],[\"comment/47\",[]],[\"name/48\",[46,47.097]],[\"comment/48\",[]],[\"name/49\",[47,47.097]],[\"comment/49\",[]],[\"name/50\",[48,47.097]],[\"comment/50\",[]],[\"name/51\",[49,47.097]],[\"comment/51\",[]],[\"name/52\",[50,47.097]],[\"comment/52\",[]],[\"name/53\",[51,47.097]],[\"comment/53\",[]],[\"name/54\",[52,47.097]],[\"comment/54\",[]],[\"name/55\",[53,47.097]],[\"comment/55\",[]],[\"name/56\",[54,47.097]],[\"comment/56\",[]],[\"name/57\",[55,47.097]],[\"comment/57\",[]],[\"name/58\",[56,47.097]],[\"comment/58\",[]],[\"name/59\",[57,47.097]],[\"comment/59\",[]],[\"name/60\",[58,47.097]],[\"comment/60\",[]],[\"name/61\",[59,47.097]],[\"comment/61\",[]],[\"name/62\",[60,47.097]],[\"comment/62\",[]],[\"name/63\",[61,47.097]],[\"comment/63\",[]],[\"name/64\",[62,47.097]],[\"comment/64\",[]],[\"name/65\",[63,46.796]],[\"comment/65\",[]],[\"name/66\",[64,46.796]],[\"comment/66\",[]],[\"name/67\",[65,47.097]],[\"comment/67\",[]],[\"name/68\",[66,43.221]],[\"comment/68\",[]],[\"name/69\",[67,46.649]],[\"comment/69\",[]],[\"name/70\",[68,46.649]],[\"comment/70\",[]],[\"name/71\",[69,47.097]],[\"comment/71\",[]],[\"name/72\",[70,46.945]],[\"comment/72\",[]],[\"name/73\",[71,46.945]],[\"comment/73\",[]],[\"name/74\",[72,47.097]],[\"comment/74\",[]],[\"name/75\",[73,47.097]],[\"comment/75\",[]],[\"name/76\",[74,47.097]],[\"comment/76\",[]],[\"name/77\",[75,46.945]],[\"comment/77\",[]],[\"name/78\",[76,46.796]],[\"comment/78\",[]],[\"name/79\",[77,46.796]],[\"comment/79\",[]],[\"name/80\",[78,79.762]],[\"comment/80\",[]],[\"name/81\",[79,67.521]],[\"comment/81\",[]],[\"name/82\",[80,70.205]],[\"comment/82\",[]],[\"name/83\",[81,67.521]],[\"comment/83\",[]],[\"name/84\",[82,76.396]],[\"comment/84\",[]],[\"name/85\",[83,79.762]],[\"comment/85\",[]],[\"name/86\",[84,71.876]],[\"comment/86\",[]],[\"name/87\",[80,70.205]],[\"comment/87\",[]],[\"name/88\",[85,71.876]],[\"comment/88\",[]],[\"name/89\",[82,76.396]],[\"comment/89\",[]],[\"name/90\",[86,71.876]],[\"comment/90\",[]],[\"name/91\",[8,57.35]],[\"comment/91\",[]],[\"name/92\",[9,46.22]],[\"comment/92\",[]],[\"name/93\",[15,46.945]],[\"comment/93\",[]],[\"name/94\",[87,79.762]],[\"comment/94\",[]],[\"name/95\",[88,79.762]],[\"comment/95\",[]],[\"name/96\",[89,79.762]],[\"comment/96\",[]],[\"name/97\",[90,79.762]],[\"comment/97\",[]],[\"name/98\",[91,84.871]],[\"comment/98\",[]],[\"name/99\",[10,58.239]],[\"comment/99\",[]],[\"name/100\",[13,54.107]],[\"comment/100\",[]],[\"name/101\",[14,59.743]],[\"comment/101\",[]],[\"name/102\",[16,44.087]],[\"comment/102\",[]],[\"name/103\",[92,84.871]],[\"comment/103\",[]],[\"name/104\",[93,84.871]],[\"comment/104\",[]],[\"name/105\",[94,79.762]],[\"comment/105\",[]],[\"name/106\",[25,44.668]],[\"comment/106\",[]],[\"name/107\",[22,49.502]],[\"comment/107\",[]],[\"name/108\",[26,50.524]],[\"comment/108\",[]],[\"name/109\",[27,60.887]],[\"comment/109\",[]],[\"name/110\",[28,60.887]],[\"comment/110\",[]],[\"name/111\",[23,60.887]],[\"comment/111\",[]],[\"name/112\",[29,60.887]],[\"comment/112\",[]],[\"name/113\",[30,60.887]],[\"comment/113\",[]],[\"name/114\",[31,60.887]],[\"comment/114\",[]],[\"name/115\",[32,53.509]],[\"comment/115\",[]],[\"name/116\",[33,53.509]],[\"comment/116\",[]],[\"name/117\",[34,53.509]],[\"comment/117\",[]],[\"name/118\",[35,56.148]],[\"comment/118\",[]],[\"name/119\",[36,55.778]],[\"comment/119\",[]],[\"name/120\",[37,60.887]],[\"comment/120\",[]],[\"name/121\",[38,59.743]],[\"comment/121\",[]],[\"name/122\",[39,60.887]],[\"comment/122\",[]],[\"name/123\",[40,60.887]],[\"comment/123\",[]],[\"name/124\",[41,52.675]],[\"comment/124\",[]],[\"name/125\",[42,52.675]],[\"comment/125\",[]],[\"name/126\",[43,60.887]],[\"comment/126\",[]],[\"name/127\",[44,47.097]],[\"comment/127\",[]],[\"name/128\",[45,47.097]],[\"comment/128\",[]],[\"name/129\",[46,47.097]],[\"comment/129\",[]],[\"name/130\",[47,47.097]],[\"comment/130\",[]],[\"name/131\",[48,47.097]],[\"comment/131\",[]],[\"name/132\",[49,47.097]],[\"comment/132\",[]],[\"name/133\",[50,47.097]],[\"comment/133\",[]],[\"name/134\",[51,47.097]],[\"comment/134\",[]],[\"name/135\",[52,47.097]],[\"comment/135\",[]],[\"name/136\",[53,47.097]],[\"comment/136\",[]],[\"name/137\",[54,47.097]],[\"comment/137\",[]],[\"name/138\",[55,47.097]],[\"comment/138\",[]],[\"name/139\",[56,47.097]],[\"comment/139\",[]],[\"name/140\",[57,47.097]],[\"comment/140\",[]],[\"name/141\",[58,47.097]],[\"comment/141\",[]],[\"name/142\",[59,47.097]],[\"comment/142\",[]],[\"name/143\",[60,47.097]],[\"comment/143\",[]],[\"name/144\",[61,47.097]],[\"comment/144\",[]],[\"name/145\",[62,47.097]],[\"comment/145\",[]],[\"name/146\",[63,46.796]],[\"comment/146\",[]],[\"name/147\",[64,46.796]],[\"comment/147\",[]],[\"name/148\",[65,47.097]],[\"comment/148\",[]],[\"name/149\",[66,43.221]],[\"comment/149\",[]],[\"name/150\",[67,46.649]],[\"comment/150\",[]],[\"name/151\",[68,46.649]],[\"comment/151\",[]],[\"name/152\",[69,47.097]],[\"comment/152\",[]],[\"name/153\",[70,46.945]],[\"comment/153\",[]],[\"name/154\",[71,46.945]],[\"comment/154\",[]],[\"name/155\",[72,47.097]],[\"comment/155\",[]],[\"name/156\",[73,47.097]],[\"comment/156\",[]],[\"name/157\",[74,47.097]],[\"comment/157\",[]],[\"name/158\",[75,46.945]],[\"comment/158\",[]],[\"name/159\",[76,46.796]],[\"comment/159\",[]],[\"name/160\",[77,46.796]],[\"comment/160\",[]],[\"name/161\",[95,84.871]],[\"comment/161\",[]],[\"name/162\",[96,67.521]],[\"comment/162\",[]],[\"name/163\",[97,84.871]],[\"comment/163\",[]],[\"name/164\",[98,84.871]],[\"comment/164\",[]],[\"name/165\",[99,84.871]],[\"comment/165\",[]],[\"name/166\",[100,71.876]],[\"comment/166\",[]],[\"name/167\",[8,57.35]],[\"comment/167\",[]],[\"name/168\",[9,46.22]],[\"comment/168\",[]],[\"name/169\",[10,58.239]],[\"comment/169\",[]],[\"name/170\",[101,79.762]],[\"comment/170\",[]],[\"name/171\",[13,54.107]],[\"comment/171\",[]],[\"name/172\",[14,59.743]],[\"comment/172\",[]],[\"name/173\",[15,46.945]],[\"comment/173\",[]],[\"name/174\",[16,44.087]],[\"comment/174\",[]],[\"name/175\",[17,57.785]],[\"comment/175\",[]],[\"name/176\",[18,52.946]],[\"comment/176\",[]],[\"name/177\",[1,44.315]],[\"comment/177\",[]],[\"name/178\",[20,73.883]],[\"comment/178\",[]],[\"name/179\",[102,84.871]],[\"comment/179\",[]],[\"name/180\",[25,44.668]],[\"comment/180\",[]],[\"name/181\",[22,49.502]],[\"comment/181\",[]],[\"name/182\",[26,50.524]],[\"comment/182\",[]],[\"name/183\",[27,60.887]],[\"comment/183\",[]],[\"name/184\",[28,60.887]],[\"comment/184\",[]],[\"name/185\",[23,60.887]],[\"comment/185\",[]],[\"name/186\",[29,60.887]],[\"comment/186\",[]],[\"name/187\",[30,60.887]],[\"comment/187\",[]],[\"name/188\",[31,60.887]],[\"comment/188\",[]],[\"name/189\",[32,53.509]],[\"comment/189\",[]],[\"name/190\",[33,53.509]],[\"comment/190\",[]],[\"name/191\",[34,53.509]],[\"comment/191\",[]],[\"name/192\",[35,56.148]],[\"comment/192\",[]],[\"name/193\",[36,55.778]],[\"comment/193\",[]],[\"name/194\",[37,60.887]],[\"comment/194\",[]],[\"name/195\",[38,59.743]],[\"comment/195\",[]],[\"name/196\",[39,60.887]],[\"comment/196\",[]],[\"name/197\",[40,60.887]],[\"comment/197\",[]],[\"name/198\",[41,52.675]],[\"comment/198\",[]],[\"name/199\",[42,52.675]],[\"comment/199\",[]],[\"name/200\",[43,60.887]],[\"comment/200\",[]],[\"name/201\",[44,47.097]],[\"comment/201\",[]],[\"name/202\",[45,47.097]],[\"comment/202\",[]],[\"name/203\",[46,47.097]],[\"comment/203\",[]],[\"name/204\",[47,47.097]],[\"comment/204\",[]],[\"name/205\",[48,47.097]],[\"comment/205\",[]],[\"name/206\",[49,47.097]],[\"comment/206\",[]],[\"name/207\",[50,47.097]],[\"comment/207\",[]],[\"name/208\",[51,47.097]],[\"comment/208\",[]],[\"name/209\",[52,47.097]],[\"comment/209\",[]],[\"name/210\",[53,47.097]],[\"comment/210\",[]],[\"name/211\",[54,47.097]],[\"comment/211\",[]],[\"name/212\",[55,47.097]],[\"comment/212\",[]],[\"name/213\",[56,47.097]],[\"comment/213\",[]],[\"name/214\",[57,47.097]],[\"comment/214\",[]],[\"name/215\",[58,47.097]],[\"comment/215\",[]],[\"name/216\",[59,47.097]],[\"comment/216\",[]],[\"name/217\",[60,47.097]],[\"comment/217\",[]],[\"name/218\",[61,47.097]],[\"comment/218\",[]],[\"name/219\",[62,47.097]],[\"comment/219\",[]],[\"name/220\",[63,46.796]],[\"comment/220\",[]],[\"name/221\",[64,46.796]],[\"comment/221\",[]],[\"name/222\",[65,47.097]],[\"comment/222\",[]],[\"name/223\",[66,43.221]],[\"comment/223\",[]],[\"name/224\",[67,46.649]],[\"comment/224\",[]],[\"name/225\",[68,46.649]],[\"comment/225\",[]],[\"name/226\",[69,47.097]],[\"comment/226\",[]],[\"name/227\",[70,46.945]],[\"comment/227\",[]],[\"name/228\",[71,46.945]],[\"comment/228\",[]],[\"name/229\",[72,47.097]],[\"comment/229\",[]],[\"name/230\",[73,47.097]],[\"comment/230\",[]],[\"name/231\",[74,47.097]],[\"comment/231\",[]],[\"name/232\",[75,46.945]],[\"comment/232\",[]],[\"name/233\",[76,46.796]],[\"comment/233\",[]],[\"name/234\",[77,46.796]],[\"comment/234\",[]],[\"name/235\",[103,73.883]],[\"comment/235\",[]],[\"name/236\",[8,57.35]],[\"comment/236\",[]],[\"name/237\",[9,46.22]],[\"comment/237\",[]],[\"name/238\",[104,60.298]],[\"comment/238\",[]],[\"name/239\",[105,59.743]],[\"comment/239\",[]],[\"name/240\",[15,46.945]],[\"comment/240\",[]],[\"name/241\",[16,44.087]],[\"comment/241\",[]],[\"name/242\",[106,76.396]],[\"comment/242\",[]],[\"name/243\",[107,70.205]],[\"comment/243\",[]],[\"name/244\",[108,59.743]],[\"comment/244\",[]],[\"name/245\",[109,56.533]],[\"comment/245\",[]],[\"name/246\",[25,44.668]],[\"comment/246\",[]],[\"name/247\",[110,59.743]],[\"comment/247\",[]],[\"name/248\",[111,57.35]],[\"comment/248\",[]],[\"name/249\",[112,59.743]],[\"comment/249\",[]],[\"name/250\",[18,52.946]],[\"comment/250\",[]],[\"name/251\",[1,44.315]],[\"comment/251\",[]],[\"name/252\",[113,60.298]],[\"comment/252\",[]],[\"name/253\",[25,44.668]],[\"comment/253\",[]],[\"name/254\",[114,60.298]],[\"comment/254\",[]],[\"name/255\",[115,60.298]],[\"comment/255\",[]],[\"name/256\",[116,57.35]],[\"comment/256\",[]],[\"name/257\",[117,60.298]],[\"comment/257\",[]],[\"name/258\",[118,60.298]],[\"comment/258\",[]],[\"name/259\",[119,57.785]],[\"comment/259\",[]],[\"name/260\",[120,60.298]],[\"comment/260\",[]],[\"name/261\",[121,60.298]],[\"comment/261\",[]],[\"name/262\",[122,56.933]],[\"comment/262\",[]],[\"name/263\",[66,43.221]],[\"comment/263\",[]],[\"name/264\",[123,58.716]],[\"comment/264\",[]],[\"name/265\",[124,60.298]],[\"comment/265\",[]],[\"name/266\",[125,60.298]],[\"comment/266\",[]],[\"name/267\",[126,59.743]],[\"comment/267\",[]],[\"name/268\",[127,60.298]],[\"comment/268\",[]],[\"name/269\",[128,54.419]],[\"comment/269\",[]],[\"name/270\",[129,54.419]],[\"comment/270\",[]],[\"name/271\",[130,54.107]],[\"comment/271\",[]],[\"name/272\",[131,60.298]],[\"comment/272\",[]],[\"name/273\",[132,60.298]],[\"comment/273\",[]],[\"name/274\",[133,60.298]],[\"comment/274\",[]],[\"name/275\",[134,60.298]],[\"comment/275\",[]],[\"name/276\",[135,59.743]],[\"comment/276\",[]],[\"name/277\",[136,60.298]],[\"comment/277\",[]],[\"name/278\",[137,60.298]],[\"comment/278\",[]],[\"name/279\",[138,59.743]],[\"comment/279\",[]],[\"name/280\",[139,60.298]],[\"comment/280\",[]],[\"name/281\",[140,60.298]],[\"comment/281\",[]],[\"name/282\",[141,60.298]],[\"comment/282\",[]],[\"name/283\",[142,60.298]],[\"comment/283\",[]],[\"name/284\",[143,59.216]],[\"comment/284\",[]],[\"name/285\",[144,59.743]],[\"comment/285\",[]],[\"name/286\",[145,59.743]],[\"comment/286\",[]],[\"name/287\",[146,59.743]],[\"comment/287\",[]],[\"name/288\",[147,59.743]],[\"comment/288\",[]],[\"name/289\",[148,60.298]],[\"comment/289\",[]],[\"name/290\",[149,60.298]],[\"comment/290\",[]],[\"name/291\",[150,60.298]],[\"comment/291\",[]],[\"name/292\",[151,60.298]],[\"comment/292\",[]],[\"name/293\",[152,60.298]],[\"comment/293\",[]],[\"name/294\",[153,60.298]],[\"comment/294\",[]],[\"name/295\",[154,60.298]],[\"comment/295\",[]],[\"name/296\",[155,60.298]],[\"comment/296\",[]],[\"name/297\",[156,58.239]],[\"comment/297\",[]],[\"name/298\",[157,60.298]],[\"comment/298\",[]],[\"name/299\",[158,60.298]],[\"comment/299\",[]],[\"name/300\",[1,44.315]],[\"comment/300\",[]],[\"name/301\",[159,56.933]],[\"comment/301\",[]],[\"name/302\",[160,56.933]],[\"comment/302\",[]],[\"name/303\",[161,60.298]],[\"comment/303\",[]],[\"name/304\",[162,60.298]],[\"comment/304\",[]],[\"name/305\",[163,60.298]],[\"comment/305\",[]],[\"name/306\",[164,56.933]],[\"comment/306\",[]],[\"name/307\",[165,59.743]],[\"comment/307\",[]],[\"name/308\",[166,59.743]],[\"comment/308\",[]],[\"name/309\",[167,60.298]],[\"comment/309\",[]],[\"name/310\",[168,60.298]],[\"comment/310\",[]],[\"name/311\",[169,60.298]],[\"comment/311\",[]],[\"name/312\",[170,60.298]],[\"comment/312\",[]],[\"name/313\",[171,60.298]],[\"comment/313\",[]],[\"name/314\",[172,57.35]],[\"comment/314\",[]],[\"name/315\",[173,59.743]],[\"comment/315\",[]],[\"name/316\",[174,59.743]],[\"comment/316\",[]],[\"name/317\",[26,50.524]],[\"comment/317\",[]],[\"name/318\",[22,49.502]],[\"comment/318\",[]],[\"name/319\",[41,52.675]],[\"comment/319\",[]],[\"name/320\",[42,52.675]],[\"comment/320\",[]],[\"name/321\",[175,53.804]],[\"comment/321\",[]],[\"name/322\",[176,59.216]],[\"comment/322\",[]],[\"name/323\",[177,59.743]],[\"comment/323\",[]],[\"name/324\",[178,59.743]],[\"comment/324\",[]],[\"name/325\",[179,59.743]],[\"comment/325\",[]],[\"name/326\",[180,59.743]],[\"comment/326\",[]],[\"name/327\",[181,59.743]],[\"comment/327\",[]],[\"name/328\",[182,59.743]],[\"comment/328\",[]],[\"name/329\",[183,59.743]],[\"comment/329\",[]],[\"name/330\",[184,59.743]],[\"comment/330\",[]],[\"name/331\",[185,58.239]],[\"comment/331\",[]],[\"name/332\",[186,59.743]],[\"comment/332\",[]],[\"name/333\",[187,59.743]],[\"comment/333\",[]],[\"name/334\",[188,56.933]],[\"comment/334\",[]],[\"name/335\",[189,59.216]],[\"comment/335\",[]],[\"name/336\",[190,59.743]],[\"comment/336\",[]],[\"name/337\",[191,59.743]],[\"comment/337\",[]],[\"name/338\",[192,59.743]],[\"comment/338\",[]],[\"name/339\",[193,59.743]],[\"comment/339\",[]],[\"name/340\",[194,59.743]],[\"comment/340\",[]],[\"name/341\",[34,53.509]],[\"comment/341\",[]],[\"name/342\",[32,53.509]],[\"comment/342\",[]],[\"name/343\",[33,53.509]],[\"comment/343\",[]],[\"name/344\",[44,47.097]],[\"comment/344\",[]],[\"name/345\",[45,47.097]],[\"comment/345\",[]],[\"name/346\",[46,47.097]],[\"comment/346\",[]],[\"name/347\",[47,47.097]],[\"comment/347\",[]],[\"name/348\",[48,47.097]],[\"comment/348\",[]],[\"name/349\",[49,47.097]],[\"comment/349\",[]],[\"name/350\",[50,47.097]],[\"comment/350\",[]],[\"name/351\",[51,47.097]],[\"comment/351\",[]],[\"name/352\",[52,47.097]],[\"comment/352\",[]],[\"name/353\",[53,47.097]],[\"comment/353\",[]],[\"name/354\",[54,47.097]],[\"comment/354\",[]],[\"name/355\",[55,47.097]],[\"comment/355\",[]],[\"name/356\",[56,47.097]],[\"comment/356\",[]],[\"name/357\",[57,47.097]],[\"comment/357\",[]],[\"name/358\",[58,47.097]],[\"comment/358\",[]],[\"name/359\",[59,47.097]],[\"comment/359\",[]],[\"name/360\",[60,47.097]],[\"comment/360\",[]],[\"name/361\",[61,47.097]],[\"comment/361\",[]],[\"name/362\",[62,47.097]],[\"comment/362\",[]],[\"name/363\",[63,46.796]],[\"comment/363\",[]],[\"name/364\",[64,46.796]],[\"comment/364\",[]],[\"name/365\",[65,47.097]],[\"comment/365\",[]],[\"name/366\",[66,43.221]],[\"comment/366\",[]],[\"name/367\",[67,46.649]],[\"comment/367\",[]],[\"name/368\",[68,46.649]],[\"comment/368\",[]],[\"name/369\",[69,47.097]],[\"comment/369\",[]],[\"name/370\",[70,46.945]],[\"comment/370\",[]],[\"name/371\",[71,46.945]],[\"comment/371\",[]],[\"name/372\",[72,47.097]],[\"comment/372\",[]],[\"name/373\",[73,47.097]],[\"comment/373\",[]],[\"name/374\",[74,47.097]],[\"comment/374\",[]],[\"name/375\",[75,46.945]],[\"comment/375\",[]],[\"name/376\",[76,46.796]],[\"comment/376\",[]],[\"name/377\",[77,46.796]],[\"comment/377\",[]],[\"name/378\",[195,84.871]],[\"comment/378\",[]],[\"name/379\",[196,84.871]],[\"comment/379\",[]],[\"name/380\",[197,84.871]],[\"comment/380\",[]],[\"name/381\",[198,84.871]],[\"comment/381\",[]],[\"name/382\",[199,71.876]],[\"comment/382\",[]],[\"name/383\",[9,46.22]],[\"comment/383\",[]],[\"name/384\",[200,84.871]],[\"comment/384\",[]],[\"name/385\",[201,84.871]],[\"comment/385\",[]],[\"name/386\",[202,84.871]],[\"comment/386\",[]],[\"name/387\",[15,46.945]],[\"comment/387\",[]],[\"name/388\",[16,44.087]],[\"comment/388\",[]],[\"name/389\",[18,52.946]],[\"comment/389\",[]],[\"name/390\",[1,44.315]],[\"comment/390\",[]],[\"name/391\",[203,84.871]],[\"comment/391\",[]],[\"name/392\",[204,84.871]],[\"comment/392\",[]],[\"name/393\",[205,84.871]],[\"comment/393\",[]],[\"name/394\",[206,84.871]],[\"comment/394\",[]],[\"name/395\",[207,84.871]],[\"comment/395\",[]],[\"name/396\",[208,84.871]],[\"comment/396\",[]],[\"name/397\",[209,84.871]],[\"comment/397\",[]],[\"name/398\",[210,84.871]],[\"comment/398\",[]],[\"name/399\",[211,84.871]],[\"comment/399\",[]],[\"name/400\",[212,84.871]],[\"comment/400\",[]],[\"name/401\",[213,84.871]],[\"comment/401\",[]],[\"name/402\",[214,84.871]],[\"comment/402\",[]],[\"name/403\",[215,71.876]],[\"comment/403\",[]],[\"name/404\",[189,59.216]],[\"comment/404\",[]],[\"name/405\",[216,84.871]],[\"comment/405\",[]],[\"name/406\",[166,59.743]],[\"comment/406\",[]],[\"name/407\",[217,71.876]],[\"comment/407\",[]],[\"name/408\",[218,68.773]],[\"comment/408\",[]],[\"name/409\",[219,84.871]],[\"comment/409\",[]],[\"name/410\",[220,84.871]],[\"comment/410\",[]],[\"name/411\",[221,84.871]],[\"comment/411\",[]],[\"name/412\",[222,84.871]],[\"comment/412\",[]],[\"name/413\",[223,84.871]],[\"comment/413\",[]],[\"name/414\",[224,84.871]],[\"comment/414\",[]],[\"name/415\",[225,84.871]],[\"comment/415\",[]],[\"name/416\",[226,84.871]],[\"comment/416\",[]],[\"name/417\",[227,84.871]],[\"comment/417\",[]],[\"name/418\",[228,84.871]],[\"comment/418\",[]],[\"name/419\",[109,56.533]],[\"comment/419\",[]],[\"name/420\",[188,56.933]],[\"comment/420\",[]],[\"name/421\",[25,44.668]],[\"comment/421\",[]],[\"name/422\",[44,47.097]],[\"comment/422\",[]],[\"name/423\",[45,47.097]],[\"comment/423\",[]],[\"name/424\",[46,47.097]],[\"comment/424\",[]],[\"name/425\",[47,47.097]],[\"comment/425\",[]],[\"name/426\",[48,47.097]],[\"comment/426\",[]],[\"name/427\",[49,47.097]],[\"comment/427\",[]],[\"name/428\",[50,47.097]],[\"comment/428\",[]],[\"name/429\",[51,47.097]],[\"comment/429\",[]],[\"name/430\",[52,47.097]],[\"comment/430\",[]],[\"name/431\",[53,47.097]],[\"comment/431\",[]],[\"name/432\",[54,47.097]],[\"comment/432\",[]],[\"name/433\",[55,47.097]],[\"comment/433\",[]],[\"name/434\",[56,47.097]],[\"comment/434\",[]],[\"name/435\",[57,47.097]],[\"comment/435\",[]],[\"name/436\",[58,47.097]],[\"comment/436\",[]],[\"name/437\",[59,47.097]],[\"comment/437\",[]],[\"name/438\",[60,47.097]],[\"comment/438\",[]],[\"name/439\",[61,47.097]],[\"comment/439\",[]],[\"name/440\",[62,47.097]],[\"comment/440\",[]],[\"name/441\",[63,46.796]],[\"comment/441\",[]],[\"name/442\",[64,46.796]],[\"comment/442\",[]],[\"name/443\",[65,47.097]],[\"comment/443\",[]],[\"name/444\",[66,43.221]],[\"comment/444\",[]],[\"name/445\",[67,46.649]],[\"comment/445\",[]],[\"name/446\",[68,46.649]],[\"comment/446\",[]],[\"name/447\",[69,47.097]],[\"comment/447\",[]],[\"name/448\",[70,46.945]],[\"comment/448\",[]],[\"name/449\",[71,46.945]],[\"comment/449\",[]],[\"name/450\",[72,47.097]],[\"comment/450\",[]],[\"name/451\",[73,47.097]],[\"comment/451\",[]],[\"name/452\",[74,47.097]],[\"comment/452\",[]],[\"name/453\",[75,46.945]],[\"comment/453\",[]],[\"name/454\",[76,46.796]],[\"comment/454\",[]],[\"name/455\",[77,46.796]],[\"comment/455\",[]],[\"name/456\",[229,84.871]],[\"comment/456\",[]],[\"name/457\",[159,56.933]],[\"comment/457\",[]],[\"name/458\",[17,57.785]],[\"comment/458\",[]],[\"name/459\",[230,68.773]],[\"comment/459\",[]],[\"name/460\",[6,60.298]],[\"comment/460\",[]],[\"name/461\",[231,84.871]],[\"comment/461\",[]],[\"name/462\",[232,76.396]],[\"comment/462\",[]],[\"name/463\",[9,46.22]],[\"comment/463\",[]],[\"name/464\",[233,76.396]],[\"comment/464\",[]],[\"name/465\",[234,76.396]],[\"comment/465\",[]],[\"name/466\",[15,46.945]],[\"comment/466\",[]],[\"name/467\",[10,58.239]],[\"comment/467\",[]],[\"name/468\",[13,54.107]],[\"comment/468\",[]],[\"name/469\",[14,59.743]],[\"comment/469\",[]],[\"name/470\",[16,44.087]],[\"comment/470\",[]],[\"name/471\",[18,52.946]],[\"comment/471\",[]],[\"name/472\",[1,44.315]],[\"comment/472\",[]],[\"name/473\",[235,76.396]],[\"comment/473\",[]],[\"name/474\",[236,84.871]],[\"comment/474\",[]],[\"name/475\",[237,84.871]],[\"comment/475\",[]],[\"name/476\",[238,84.871]],[\"comment/476\",[]],[\"name/477\",[41,52.675]],[\"comment/477\",[]],[\"name/478\",[239,84.871]],[\"comment/478\",[]],[\"name/479\",[240,79.762]],[\"comment/479\",[]],[\"name/480\",[241,84.871]],[\"comment/480\",[]],[\"name/481\",[25,44.668]],[\"comment/481\",[]],[\"name/482\",[22,49.502]],[\"comment/482\",[]],[\"name/483\",[26,50.524]],[\"comment/483\",[]],[\"name/484\",[27,60.887]],[\"comment/484\",[]],[\"name/485\",[28,60.887]],[\"comment/485\",[]],[\"name/486\",[23,60.887]],[\"comment/486\",[]],[\"name/487\",[29,60.887]],[\"comment/487\",[]],[\"name/488\",[30,60.887]],[\"comment/488\",[]],[\"name/489\",[31,60.887]],[\"comment/489\",[]],[\"name/490\",[32,53.509]],[\"comment/490\",[]],[\"name/491\",[33,53.509]],[\"comment/491\",[]],[\"name/492\",[34,53.509]],[\"comment/492\",[]],[\"name/493\",[35,56.148]],[\"comment/493\",[]],[\"name/494\",[36,55.778]],[\"comment/494\",[]],[\"name/495\",[37,60.887]],[\"comment/495\",[]],[\"name/496\",[38,59.743]],[\"comment/496\",[]],[\"name/497\",[39,60.887]],[\"comment/497\",[]],[\"name/498\",[40,60.887]],[\"comment/498\",[]],[\"name/499\",[42,52.675]],[\"comment/499\",[]],[\"name/500\",[43,60.887]],[\"comment/500\",[]],[\"name/501\",[44,47.097]],[\"comment/501\",[]],[\"name/502\",[45,47.097]],[\"comment/502\",[]],[\"name/503\",[46,47.097]],[\"comment/503\",[]],[\"name/504\",[47,47.097]],[\"comment/504\",[]],[\"name/505\",[48,47.097]],[\"comment/505\",[]],[\"name/506\",[49,47.097]],[\"comment/506\",[]],[\"name/507\",[50,47.097]],[\"comment/507\",[]],[\"name/508\",[51,47.097]],[\"comment/508\",[]],[\"name/509\",[52,47.097]],[\"comment/509\",[]],[\"name/510\",[53,47.097]],[\"comment/510\",[]],[\"name/511\",[54,47.097]],[\"comment/511\",[]],[\"name/512\",[55,47.097]],[\"comment/512\",[]],[\"name/513\",[56,47.097]],[\"comment/513\",[]],[\"name/514\",[57,47.097]],[\"comment/514\",[]],[\"name/515\",[58,47.097]],[\"comment/515\",[]],[\"name/516\",[59,47.097]],[\"comment/516\",[]],[\"name/517\",[60,47.097]],[\"comment/517\",[]],[\"name/518\",[61,47.097]],[\"comment/518\",[]],[\"name/519\",[62,47.097]],[\"comment/519\",[]],[\"name/520\",[63,46.796]],[\"comment/520\",[]],[\"name/521\",[64,46.796]],[\"comment/521\",[]],[\"name/522\",[65,47.097]],[\"comment/522\",[]],[\"name/523\",[66,43.221]],[\"comment/523\",[]],[\"name/524\",[67,46.649]],[\"comment/524\",[]],[\"name/525\",[68,46.649]],[\"comment/525\",[]],[\"name/526\",[69,47.097]],[\"comment/526\",[]],[\"name/527\",[70,46.945]],[\"comment/527\",[]],[\"name/528\",[71,46.945]],[\"comment/528\",[]],[\"name/529\",[72,47.097]],[\"comment/529\",[]],[\"name/530\",[73,47.097]],[\"comment/530\",[]],[\"name/531\",[74,47.097]],[\"comment/531\",[]],[\"name/532\",[75,46.945]],[\"comment/532\",[]],[\"name/533\",[76,46.796]],[\"comment/533\",[]],[\"name/534\",[77,46.796]],[\"comment/534\",[]],[\"name/535\",[242,84.871]],[\"comment/535\",[]],[\"name/536\",[159,56.933]],[\"comment/536\",[]],[\"name/537\",[160,56.933]],[\"comment/537\",[]],[\"name/538\",[243,79.762]],[\"comment/538\",[]],[\"name/539\",[244,79.762]],[\"comment/539\",[]],[\"name/540\",[245,79.762]],[\"comment/540\",[]],[\"name/541\",[246,79.762]],[\"comment/541\",[]],[\"name/542\",[16,44.087]],[\"comment/542\",[]],[\"name/543\",[159,56.933]],[\"comment/543\",[]],[\"name/544\",[160,56.933]],[\"comment/544\",[]],[\"name/545\",[243,79.762]],[\"comment/545\",[]],[\"name/546\",[244,79.762]],[\"comment/546\",[]],[\"name/547\",[175,53.804]],[\"comment/547\",[]],[\"name/548\",[247,71.876]],[\"comment/548\",[]],[\"name/549\",[248,84.871]],[\"comment/549\",[]],[\"name/550\",[249,84.871]],[\"comment/550\",[]],[\"name/551\",[250,60.887]],[\"comment/551\",[]],[\"name/552\",[251,71.876]],[\"comment/552\",[]],[\"name/553\",[252,84.871]],[\"comment/553\",[]],[\"name/554\",[253,84.871]],[\"comment/554\",[]],[\"name/555\",[254,79.762]],[\"comment/555\",[]],[\"name/556\",[255,79.762]],[\"comment/556\",[]],[\"name/557\",[256,84.871]],[\"comment/557\",[]],[\"name/558\",[257,79.762]],[\"comment/558\",[]],[\"name/559\",[16,44.087]],[\"comment/559\",[]],[\"name/560\",[258,84.871]],[\"comment/560\",[]],[\"name/561\",[259,84.871]],[\"comment/561\",[]],[\"name/562\",[6,60.298]],[\"comment/562\",[]],[\"name/563\",[260,65.408]],[\"comment/563\",[]],[\"name/564\",[261,84.871]],[\"comment/564\",[]],[\"name/565\",[262,84.871]],[\"comment/565\",[]],[\"name/566\",[263,84.871]],[\"comment/566\",[]],[\"name/567\",[264,84.871]],[\"comment/567\",[]],[\"name/568\",[265,84.871]],[\"comment/568\",[]],[\"name/569\",[266,79.762]],[\"comment/569\",[]],[\"name/570\",[6,60.298]],[\"comment/570\",[]],[\"name/571\",[260,65.408]],[\"comment/571\",[]],[\"name/572\",[267,84.871]],[\"comment/572\",[]],[\"name/573\",[268,84.871]],[\"comment/573\",[]],[\"name/574\",[9,46.22]],[\"comment/574\",[]],[\"name/575\",[16,44.087]],[\"comment/575\",[]],[\"name/576\",[269,84.871]],[\"comment/576\",[]],[\"name/577\",[270,79.762]],[\"comment/577\",[]],[\"name/578\",[271,84.871]],[\"comment/578\",[]],[\"name/579\",[272,73.883]],[\"comment/579\",[]],[\"name/580\",[273,76.396]],[\"comment/580\",[]],[\"name/581\",[274,76.396]],[\"comment/581\",[]],[\"name/582\",[275,73.883]],[\"comment/582\",[]],[\"name/583\",[276,76.396]],[\"comment/583\",[]],[\"name/584\",[277,76.396]],[\"comment/584\",[]],[\"name/585\",[278,76.396]],[\"comment/585\",[]],[\"name/586\",[279,76.396]],[\"comment/586\",[]],[\"name/587\",[280,76.396]],[\"comment/587\",[]],[\"name/588\",[281,76.396]],[\"comment/588\",[]],[\"name/589\",[282,76.396]],[\"comment/589\",[]],[\"name/590\",[283,76.396]],[\"comment/590\",[]],[\"name/591\",[122,56.933]],[\"comment/591\",[]],[\"name/592\",[284,73.883]],[\"comment/592\",[]],[\"name/593\",[285,76.396]],[\"comment/593\",[]],[\"name/594\",[286,76.396]],[\"comment/594\",[]],[\"name/595\",[287,76.396]],[\"comment/595\",[]],[\"name/596\",[288,76.396]],[\"comment/596\",[]],[\"name/597\",[289,76.396]],[\"comment/597\",[]],[\"name/598\",[290,76.396]],[\"comment/598\",[]],[\"name/599\",[291,76.396]],[\"comment/599\",[]],[\"name/600\",[292,76.396]],[\"comment/600\",[]],[\"name/601\",[293,76.396]],[\"comment/601\",[]],[\"name/602\",[294,76.396]],[\"comment/602\",[]],[\"name/603\",[295,68.773]],[\"comment/603\",[]],[\"name/604\",[296,76.396]],[\"comment/604\",[]],[\"name/605\",[297,76.396]],[\"comment/605\",[]],[\"name/606\",[298,76.396]],[\"comment/606\",[]],[\"name/607\",[299,76.396]],[\"comment/607\",[]],[\"name/608\",[300,76.396]],[\"comment/608\",[]],[\"name/609\",[301,73.883]],[\"comment/609\",[]],[\"name/610\",[302,73.883]],[\"comment/610\",[]],[\"name/611\",[67,46.649]],[\"comment/611\",[]],[\"name/612\",[68,46.649]],[\"comment/612\",[]],[\"name/613\",[66,43.221]],[\"comment/613\",[]],[\"name/614\",[303,76.396]],[\"comment/614\",[]],[\"name/615\",[304,84.871]],[\"comment/615\",[]],[\"name/616\",[230,68.773]],[\"comment/616\",[]],[\"name/617\",[305,84.871]],[\"comment/617\",[]],[\"name/618\",[306,84.871]],[\"comment/618\",[]],[\"name/619\",[307,84.871]],[\"comment/619\",[]],[\"name/620\",[308,84.871]],[\"comment/620\",[]],[\"name/621\",[309,84.871]],[\"comment/621\",[]],[\"name/622\",[6,60.298]],[\"comment/622\",[]],[\"name/623\",[310,66.409]],[\"comment/623\",[]],[\"name/624\",[311,84.871]],[\"comment/624\",[]],[\"name/625\",[312,79.762]],[\"comment/625\",[]],[\"name/626\",[313,79.762]],[\"comment/626\",[]],[\"name/627\",[314,79.762]],[\"comment/627\",[]],[\"name/628\",[315,84.871]],[\"comment/628\",[]],[\"name/629\",[316,84.871]],[\"comment/629\",[]],[\"name/630\",[1,44.315]],[\"comment/630\",[]],[\"name/631\",[317,73.883]],[\"comment/631\",[]],[\"name/632\",[318,73.883]],[\"comment/632\",[]],[\"name/633\",[319,79.762]],[\"comment/633\",[]],[\"name/634\",[320,79.762]],[\"comment/634\",[]],[\"name/635\",[321,79.762]],[\"comment/635\",[]],[\"name/636\",[322,79.762]],[\"comment/636\",[]],[\"name/637\",[323,79.762]],[\"comment/637\",[]],[\"name/638\",[324,66.409]],[\"comment/638\",[]],[\"name/639\",[325,79.762]],[\"comment/639\",[]],[\"name/640\",[79,67.521]],[\"comment/640\",[]],[\"name/641\",[80,70.205]],[\"comment/641\",[]],[\"name/642\",[81,67.521]],[\"comment/642\",[]],[\"name/643\",[82,76.396]],[\"comment/643\",[]],[\"name/644\",[326,79.762]],[\"comment/644\",[]],[\"name/645\",[84,71.876]],[\"comment/645\",[]],[\"name/646\",[85,71.876]],[\"comment/646\",[]],[\"name/647\",[327,76.396]],[\"comment/647\",[]],[\"name/648\",[310,66.409]],[\"comment/648\",[]],[\"name/649\",[230,68.773]],[\"comment/649\",[]],[\"name/650\",[0,59.743]],[\"comment/650\",[]],[\"name/651\",[328,76.396]],[\"comment/651\",[]],[\"name/652\",[329,71.876]],[\"comment/652\",[]],[\"name/653\",[330,79.762]],[\"comment/653\",[]],[\"name/654\",[331,76.396]],[\"comment/654\",[]],[\"name/655\",[332,71.876]],[\"comment/655\",[]],[\"name/656\",[8,57.35]],[\"comment/656\",[]],[\"name/657\",[9,46.22]],[\"comment/657\",[]],[\"name/658\",[87,79.762]],[\"comment/658\",[]],[\"name/659\",[88,79.762]],[\"comment/659\",[]],[\"name/660\",[89,79.762]],[\"comment/660\",[]],[\"name/661\",[90,79.762]],[\"comment/661\",[]],[\"name/662\",[323,79.762]],[\"comment/662\",[]],[\"name/663\",[333,84.871]],[\"comment/663\",[]],[\"name/664\",[334,84.871]],[\"comment/664\",[]],[\"name/665\",[335,84.871]],[\"comment/665\",[]],[\"name/666\",[336,84.871]],[\"comment/666\",[]],[\"name/667\",[337,84.871]],[\"comment/667\",[]],[\"name/668\",[338,84.871]],[\"comment/668\",[]],[\"name/669\",[339,84.871]],[\"comment/669\",[]],[\"name/670\",[317,73.883]],[\"comment/670\",[]],[\"name/671\",[318,73.883]],[\"comment/671\",[]],[\"name/672\",[319,79.762]],[\"comment/672\",[]],[\"name/673\",[324,66.409]],[\"comment/673\",[]],[\"name/674\",[327,76.396]],[\"comment/674\",[]],[\"name/675\",[328,76.396]],[\"comment/675\",[]],[\"name/676\",[340,70.205]],[\"comment/676\",[]],[\"name/677\",[320,79.762]],[\"comment/677\",[]],[\"name/678\",[321,79.762]],[\"comment/678\",[]],[\"name/679\",[341,84.871]],[\"comment/679\",[]],[\"name/680\",[342,84.871]],[\"comment/680\",[]],[\"name/681\",[343,76.396]],[\"comment/681\",[]],[\"name/682\",[10,58.239]],[\"comment/682\",[]],[\"name/683\",[15,46.945]],[\"comment/683\",[]],[\"name/684\",[13,54.107]],[\"comment/684\",[]],[\"name/685\",[14,59.743]],[\"comment/685\",[]],[\"name/686\",[16,44.087]],[\"comment/686\",[]],[\"name/687\",[317,73.883]],[\"comment/687\",[]],[\"name/688\",[318,73.883]],[\"comment/688\",[]],[\"name/689\",[344,84.871]],[\"comment/689\",[]],[\"name/690\",[345,84.871]],[\"comment/690\",[]],[\"name/691\",[346,84.871]],[\"comment/691\",[]],[\"name/692\",[347,84.871]],[\"comment/692\",[]],[\"name/693\",[348,84.871]],[\"comment/693\",[]],[\"name/694\",[349,84.871]],[\"comment/694\",[]],[\"name/695\",[350,84.871]],[\"comment/695\",[]],[\"name/696\",[351,84.871]],[\"comment/696\",[]],[\"name/697\",[352,84.871]],[\"comment/697\",[]],[\"name/698\",[353,84.871]],[\"comment/698\",[]],[\"name/699\",[354,84.871]],[\"comment/699\",[]],[\"name/700\",[355,84.871]],[\"comment/700\",[]],[\"name/701\",[356,84.871]],[\"comment/701\",[]],[\"name/702\",[357,84.871]],[\"comment/702\",[]],[\"name/703\",[67,46.649]],[\"comment/703\",[]],[\"name/704\",[358,84.871]],[\"comment/704\",[]],[\"name/705\",[359,84.871]],[\"comment/705\",[]],[\"name/706\",[360,84.871]],[\"comment/706\",[]],[\"name/707\",[361,84.871]],[\"comment/707\",[]],[\"name/708\",[362,84.871]],[\"comment/708\",[]],[\"name/709\",[22,49.502]],[\"comment/709\",[]],[\"name/710\",[363,84.871]],[\"comment/710\",[]],[\"name/711\",[25,44.668]],[\"comment/711\",[]],[\"name/712\",[26,50.524]],[\"comment/712\",[]],[\"name/713\",[27,60.887]],[\"comment/713\",[]],[\"name/714\",[28,60.887]],[\"comment/714\",[]],[\"name/715\",[23,60.887]],[\"comment/715\",[]],[\"name/716\",[29,60.887]],[\"comment/716\",[]],[\"name/717\",[30,60.887]],[\"comment/717\",[]],[\"name/718\",[31,60.887]],[\"comment/718\",[]],[\"name/719\",[32,53.509]],[\"comment/719\",[]],[\"name/720\",[33,53.509]],[\"comment/720\",[]],[\"name/721\",[34,53.509]],[\"comment/721\",[]],[\"name/722\",[35,56.148]],[\"comment/722\",[]],[\"name/723\",[36,55.778]],[\"comment/723\",[]],[\"name/724\",[37,60.887]],[\"comment/724\",[]],[\"name/725\",[38,59.743]],[\"comment/725\",[]],[\"name/726\",[39,60.887]],[\"comment/726\",[]],[\"name/727\",[40,60.887]],[\"comment/727\",[]],[\"name/728\",[41,52.675]],[\"comment/728\",[]],[\"name/729\",[42,52.675]],[\"comment/729\",[]],[\"name/730\",[43,60.887]],[\"comment/730\",[]],[\"name/731\",[44,47.097]],[\"comment/731\",[]],[\"name/732\",[45,47.097]],[\"comment/732\",[]],[\"name/733\",[46,47.097]],[\"comment/733\",[]],[\"name/734\",[47,47.097]],[\"comment/734\",[]],[\"name/735\",[48,47.097]],[\"comment/735\",[]],[\"name/736\",[49,47.097]],[\"comment/736\",[]],[\"name/737\",[50,47.097]],[\"comment/737\",[]],[\"name/738\",[51,47.097]],[\"comment/738\",[]],[\"name/739\",[52,47.097]],[\"comment/739\",[]],[\"name/740\",[53,47.097]],[\"comment/740\",[]],[\"name/741\",[54,47.097]],[\"comment/741\",[]],[\"name/742\",[55,47.097]],[\"comment/742\",[]],[\"name/743\",[56,47.097]],[\"comment/743\",[]],[\"name/744\",[57,47.097]],[\"comment/744\",[]],[\"name/745\",[58,47.097]],[\"comment/745\",[]],[\"name/746\",[59,47.097]],[\"comment/746\",[]],[\"name/747\",[60,47.097]],[\"comment/747\",[]],[\"name/748\",[61,47.097]],[\"comment/748\",[]],[\"name/749\",[62,47.097]],[\"comment/749\",[]],[\"name/750\",[63,46.796]],[\"comment/750\",[]],[\"name/751\",[64,46.796]],[\"comment/751\",[]],[\"name/752\",[65,47.097]],[\"comment/752\",[]],[\"name/753\",[66,43.221]],[\"comment/753\",[]],[\"name/754\",[68,46.649]],[\"comment/754\",[]],[\"name/755\",[69,47.097]],[\"comment/755\",[]],[\"name/756\",[70,46.945]],[\"comment/756\",[]],[\"name/757\",[71,46.945]],[\"comment/757\",[]],[\"name/758\",[72,47.097]],[\"comment/758\",[]],[\"name/759\",[73,47.097]],[\"comment/759\",[]],[\"name/760\",[74,47.097]],[\"comment/760\",[]],[\"name/761\",[75,46.945]],[\"comment/761\",[]],[\"name/762\",[76,46.796]],[\"comment/762\",[]],[\"name/763\",[77,46.796]],[\"comment/763\",[]],[\"name/764\",[364,84.871]],[\"comment/764\",[]],[\"name/765\",[96,67.521]],[\"comment/765\",[]],[\"name/766\",[0,59.743]],[\"comment/766\",[]],[\"name/767\",[365,84.871]],[\"comment/767\",[]],[\"name/768\",[366,73.883]],[\"comment/768\",[]],[\"name/769\",[367,79.762]],[\"comment/769\",[]],[\"name/770\",[96,67.521]],[\"comment/770\",[]],[\"name/771\",[0,59.743]],[\"comment/771\",[]],[\"name/772\",[368,84.871]],[\"comment/772\",[]],[\"name/773\",[6,60.298]],[\"comment/773\",[]],[\"name/774\",[369,84.871]],[\"comment/774\",[]],[\"name/775\",[1,44.315]],[\"comment/775\",[]],[\"name/776\",[1,44.315]],[\"comment/776\",[]],[\"name/777\",[370,66.409]],[\"comment/777\",[]],[\"name/778\",[8,57.35]],[\"comment/778\",[]],[\"name/779\",[9,46.22]],[\"comment/779\",[]],[\"name/780\",[371,79.762]],[\"comment/780\",[]],[\"name/781\",[372,84.871]],[\"comment/781\",[]],[\"name/782\",[105,59.743]],[\"comment/782\",[]],[\"name/783\",[13,54.107]],[\"comment/783\",[]],[\"name/784\",[15,46.945]],[\"comment/784\",[]],[\"name/785\",[16,44.087]],[\"comment/785\",[]],[\"name/786\",[86,71.876]],[\"comment/786\",[]],[\"name/787\",[370,66.409]],[\"comment/787\",[]],[\"name/788\",[107,70.205]],[\"comment/788\",[]],[\"name/789\",[22,49.502]],[\"comment/789\",[]],[\"name/790\",[130,54.107]],[\"comment/790\",[]],[\"name/791\",[25,44.668]],[\"comment/791\",[]],[\"name/792\",[35,56.148]],[\"comment/792\",[]],[\"name/793\",[36,55.778]],[\"comment/793\",[]],[\"name/794\",[128,54.419]],[\"comment/794\",[]],[\"name/795\",[129,54.419]],[\"comment/795\",[]],[\"name/796\",[26,50.524]],[\"comment/796\",[]],[\"name/797\",[175,53.804]],[\"comment/797\",[]],[\"name/798\",[250,60.887]],[\"comment/798\",[]],[\"name/799\",[373,65.408]],[\"comment/799\",[]],[\"name/800\",[374,65.408]],[\"comment/800\",[]],[\"name/801\",[375,64.498]],[\"comment/801\",[]],[\"name/802\",[376,65.408]],[\"comment/802\",[]],[\"name/803\",[377,65.408]],[\"comment/803\",[]],[\"name/804\",[44,47.097]],[\"comment/804\",[]],[\"name/805\",[45,47.097]],[\"comment/805\",[]],[\"name/806\",[46,47.097]],[\"comment/806\",[]],[\"name/807\",[47,47.097]],[\"comment/807\",[]],[\"name/808\",[48,47.097]],[\"comment/808\",[]],[\"name/809\",[49,47.097]],[\"comment/809\",[]],[\"name/810\",[50,47.097]],[\"comment/810\",[]],[\"name/811\",[51,47.097]],[\"comment/811\",[]],[\"name/812\",[52,47.097]],[\"comment/812\",[]],[\"name/813\",[53,47.097]],[\"comment/813\",[]],[\"name/814\",[54,47.097]],[\"comment/814\",[]],[\"name/815\",[55,47.097]],[\"comment/815\",[]],[\"name/816\",[56,47.097]],[\"comment/816\",[]],[\"name/817\",[57,47.097]],[\"comment/817\",[]],[\"name/818\",[58,47.097]],[\"comment/818\",[]],[\"name/819\",[59,47.097]],[\"comment/819\",[]],[\"name/820\",[60,47.097]],[\"comment/820\",[]],[\"name/821\",[61,47.097]],[\"comment/821\",[]],[\"name/822\",[62,47.097]],[\"comment/822\",[]],[\"name/823\",[63,46.796]],[\"comment/823\",[]],[\"name/824\",[64,46.796]],[\"comment/824\",[]],[\"name/825\",[65,47.097]],[\"comment/825\",[]],[\"name/826\",[66,43.221]],[\"comment/826\",[]],[\"name/827\",[67,46.649]],[\"comment/827\",[]],[\"name/828\",[68,46.649]],[\"comment/828\",[]],[\"name/829\",[69,47.097]],[\"comment/829\",[]],[\"name/830\",[70,46.945]],[\"comment/830\",[]],[\"name/831\",[71,46.945]],[\"comment/831\",[]],[\"name/832\",[72,47.097]],[\"comment/832\",[]],[\"name/833\",[73,47.097]],[\"comment/833\",[]],[\"name/834\",[74,47.097]],[\"comment/834\",[]],[\"name/835\",[75,46.945]],[\"comment/835\",[]],[\"name/836\",[76,46.796]],[\"comment/836\",[]],[\"name/837\",[77,46.796]],[\"comment/837\",[]],[\"name/838\",[378,73.883]],[\"comment/838\",[]],[\"name/839\",[9,46.22]],[\"comment/839\",[]],[\"name/840\",[104,60.298]],[\"comment/840\",[]],[\"name/841\",[105,59.743]],[\"comment/841\",[]],[\"name/842\",[15,46.945]],[\"comment/842\",[]],[\"name/843\",[16,44.087]],[\"comment/843\",[]],[\"name/844\",[107,70.205]],[\"comment/844\",[]],[\"name/845\",[379,76.396]],[\"comment/845\",[]],[\"name/846\",[109,56.533]],[\"comment/846\",[]],[\"name/847\",[25,44.668]],[\"comment/847\",[]],[\"name/848\",[110,59.743]],[\"comment/848\",[]],[\"name/849\",[111,57.35]],[\"comment/849\",[]],[\"name/850\",[112,59.743]],[\"comment/850\",[]],[\"name/851\",[18,52.946]],[\"comment/851\",[]],[\"name/852\",[1,44.315]],[\"comment/852\",[]],[\"name/853\",[113,60.298]],[\"comment/853\",[]],[\"name/854\",[25,44.668]],[\"comment/854\",[]],[\"name/855\",[114,60.298]],[\"comment/855\",[]],[\"name/856\",[115,60.298]],[\"comment/856\",[]],[\"name/857\",[116,57.35]],[\"comment/857\",[]],[\"name/858\",[117,60.298]],[\"comment/858\",[]],[\"name/859\",[118,60.298]],[\"comment/859\",[]],[\"name/860\",[119,57.785]],[\"comment/860\",[]],[\"name/861\",[120,60.298]],[\"comment/861\",[]],[\"name/862\",[121,60.298]],[\"comment/862\",[]],[\"name/863\",[122,56.933]],[\"comment/863\",[]],[\"name/864\",[66,43.221]],[\"comment/864\",[]],[\"name/865\",[123,58.716]],[\"comment/865\",[]],[\"name/866\",[124,60.298]],[\"comment/866\",[]],[\"name/867\",[125,60.298]],[\"comment/867\",[]],[\"name/868\",[126,59.743]],[\"comment/868\",[]],[\"name/869\",[127,60.298]],[\"comment/869\",[]],[\"name/870\",[128,54.419]],[\"comment/870\",[]],[\"name/871\",[129,54.419]],[\"comment/871\",[]],[\"name/872\",[130,54.107]],[\"comment/872\",[]],[\"name/873\",[131,60.298]],[\"comment/873\",[]],[\"name/874\",[132,60.298]],[\"comment/874\",[]],[\"name/875\",[133,60.298]],[\"comment/875\",[]],[\"name/876\",[134,60.298]],[\"comment/876\",[]],[\"name/877\",[135,59.743]],[\"comment/877\",[]],[\"name/878\",[136,60.298]],[\"comment/878\",[]],[\"name/879\",[137,60.298]],[\"comment/879\",[]],[\"name/880\",[138,59.743]],[\"comment/880\",[]],[\"name/881\",[139,60.298]],[\"comment/881\",[]],[\"name/882\",[140,60.298]],[\"comment/882\",[]],[\"name/883\",[141,60.298]],[\"comment/883\",[]],[\"name/884\",[142,60.298]],[\"comment/884\",[]],[\"name/885\",[143,59.216]],[\"comment/885\",[]],[\"name/886\",[144,59.743]],[\"comment/886\",[]],[\"name/887\",[145,59.743]],[\"comment/887\",[]],[\"name/888\",[146,59.743]],[\"comment/888\",[]],[\"name/889\",[147,59.743]],[\"comment/889\",[]],[\"name/890\",[148,60.298]],[\"comment/890\",[]],[\"name/891\",[149,60.298]],[\"comment/891\",[]],[\"name/892\",[150,60.298]],[\"comment/892\",[]],[\"name/893\",[151,60.298]],[\"comment/893\",[]],[\"name/894\",[152,60.298]],[\"comment/894\",[]],[\"name/895\",[153,60.298]],[\"comment/895\",[]],[\"name/896\",[154,60.298]],[\"comment/896\",[]],[\"name/897\",[155,60.298]],[\"comment/897\",[]],[\"name/898\",[156,58.239]],[\"comment/898\",[]],[\"name/899\",[157,60.298]],[\"comment/899\",[]],[\"name/900\",[158,60.298]],[\"comment/900\",[]],[\"name/901\",[1,44.315]],[\"comment/901\",[]],[\"name/902\",[159,56.933]],[\"comment/902\",[]],[\"name/903\",[160,56.933]],[\"comment/903\",[]],[\"name/904\",[161,60.298]],[\"comment/904\",[]],[\"name/905\",[162,60.298]],[\"comment/905\",[]],[\"name/906\",[163,60.298]],[\"comment/906\",[]],[\"name/907\",[164,56.933]],[\"comment/907\",[]],[\"name/908\",[165,59.743]],[\"comment/908\",[]],[\"name/909\",[166,59.743]],[\"comment/909\",[]],[\"name/910\",[167,60.298]],[\"comment/910\",[]],[\"name/911\",[168,60.298]],[\"comment/911\",[]],[\"name/912\",[169,60.298]],[\"comment/912\",[]],[\"name/913\",[170,60.298]],[\"comment/913\",[]],[\"name/914\",[171,60.298]],[\"comment/914\",[]],[\"name/915\",[172,57.35]],[\"comment/915\",[]],[\"name/916\",[173,59.743]],[\"comment/916\",[]],[\"name/917\",[174,59.743]],[\"comment/917\",[]],[\"name/918\",[26,50.524]],[\"comment/918\",[]],[\"name/919\",[22,49.502]],[\"comment/919\",[]],[\"name/920\",[41,52.675]],[\"comment/920\",[]],[\"name/921\",[42,52.675]],[\"comment/921\",[]],[\"name/922\",[175,53.804]],[\"comment/922\",[]],[\"name/923\",[176,59.216]],[\"comment/923\",[]],[\"name/924\",[177,59.743]],[\"comment/924\",[]],[\"name/925\",[178,59.743]],[\"comment/925\",[]],[\"name/926\",[179,59.743]],[\"comment/926\",[]],[\"name/927\",[180,59.743]],[\"comment/927\",[]],[\"name/928\",[181,59.743]],[\"comment/928\",[]],[\"name/929\",[182,59.743]],[\"comment/929\",[]],[\"name/930\",[183,59.743]],[\"comment/930\",[]],[\"name/931\",[184,59.743]],[\"comment/931\",[]],[\"name/932\",[108,59.743]],[\"comment/932\",[]],[\"name/933\",[185,58.239]],[\"comment/933\",[]],[\"name/934\",[186,59.743]],[\"comment/934\",[]],[\"name/935\",[187,59.743]],[\"comment/935\",[]],[\"name/936\",[188,56.933]],[\"comment/936\",[]],[\"name/937\",[189,59.216]],[\"comment/937\",[]],[\"name/938\",[190,59.743]],[\"comment/938\",[]],[\"name/939\",[191,59.743]],[\"comment/939\",[]],[\"name/940\",[192,59.743]],[\"comment/940\",[]],[\"name/941\",[193,59.743]],[\"comment/941\",[]],[\"name/942\",[194,59.743]],[\"comment/942\",[]],[\"name/943\",[34,53.509]],[\"comment/943\",[]],[\"name/944\",[32,53.509]],[\"comment/944\",[]],[\"name/945\",[33,53.509]],[\"comment/945\",[]],[\"name/946\",[44,47.097]],[\"comment/946\",[]],[\"name/947\",[45,47.097]],[\"comment/947\",[]],[\"name/948\",[46,47.097]],[\"comment/948\",[]],[\"name/949\",[47,47.097]],[\"comment/949\",[]],[\"name/950\",[48,47.097]],[\"comment/950\",[]],[\"name/951\",[49,47.097]],[\"comment/951\",[]],[\"name/952\",[50,47.097]],[\"comment/952\",[]],[\"name/953\",[51,47.097]],[\"comment/953\",[]],[\"name/954\",[52,47.097]],[\"comment/954\",[]],[\"name/955\",[53,47.097]],[\"comment/955\",[]],[\"name/956\",[54,47.097]],[\"comment/956\",[]],[\"name/957\",[55,47.097]],[\"comment/957\",[]],[\"name/958\",[56,47.097]],[\"comment/958\",[]],[\"name/959\",[57,47.097]],[\"comment/959\",[]],[\"name/960\",[58,47.097]],[\"comment/960\",[]],[\"name/961\",[59,47.097]],[\"comment/961\",[]],[\"name/962\",[60,47.097]],[\"comment/962\",[]],[\"name/963\",[61,47.097]],[\"comment/963\",[]],[\"name/964\",[62,47.097]],[\"comment/964\",[]],[\"name/965\",[63,46.796]],[\"comment/965\",[]],[\"name/966\",[64,46.796]],[\"comment/966\",[]],[\"name/967\",[65,47.097]],[\"comment/967\",[]],[\"name/968\",[66,43.221]],[\"comment/968\",[]],[\"name/969\",[67,46.649]],[\"comment/969\",[]],[\"name/970\",[68,46.649]],[\"comment/970\",[]],[\"name/971\",[69,47.097]],[\"comment/971\",[]],[\"name/972\",[70,46.945]],[\"comment/972\",[]],[\"name/973\",[71,46.945]],[\"comment/973\",[]],[\"name/974\",[72,47.097]],[\"comment/974\",[]],[\"name/975\",[73,47.097]],[\"comment/975\",[]],[\"name/976\",[74,47.097]],[\"comment/976\",[]],[\"name/977\",[75,46.945]],[\"comment/977\",[]],[\"name/978\",[76,46.796]],[\"comment/978\",[]],[\"name/979\",[77,46.796]],[\"comment/979\",[]],[\"name/980\",[380,84.871]],[\"comment/980\",[]],[\"name/981\",[381,84.871]],[\"comment/981\",[]],[\"name/982\",[260,65.408]],[\"comment/982\",[]],[\"name/983\",[160,56.933]],[\"comment/983\",[]],[\"name/984\",[382,84.871]],[\"comment/984\",[]],[\"name/985\",[383,84.871]],[\"comment/985\",[]],[\"name/986\",[384,76.396]],[\"comment/986\",[]],[\"name/987\",[8,57.35]],[\"comment/987\",[]],[\"name/988\",[9,46.22]],[\"comment/988\",[]],[\"name/989\",[104,60.298]],[\"comment/989\",[]],[\"name/990\",[105,59.743]],[\"comment/990\",[]],[\"name/991\",[15,46.945]],[\"comment/991\",[]],[\"name/992\",[16,44.087]],[\"comment/992\",[]],[\"name/993\",[385,67.521]],[\"comment/993\",[]],[\"name/994\",[386,84.871]],[\"comment/994\",[]],[\"name/995\",[387,84.871]],[\"comment/995\",[]],[\"name/996\",[109,56.533]],[\"comment/996\",[]],[\"name/997\",[25,44.668]],[\"comment/997\",[]],[\"name/998\",[110,59.743]],[\"comment/998\",[]],[\"name/999\",[111,57.35]],[\"comment/999\",[]],[\"name/1000\",[112,59.743]],[\"comment/1000\",[]],[\"name/1001\",[18,52.946]],[\"comment/1001\",[]],[\"name/1002\",[1,44.315]],[\"comment/1002\",[]],[\"name/1003\",[113,60.298]],[\"comment/1003\",[]],[\"name/1004\",[25,44.668]],[\"comment/1004\",[]],[\"name/1005\",[114,60.298]],[\"comment/1005\",[]],[\"name/1006\",[115,60.298]],[\"comment/1006\",[]],[\"name/1007\",[116,57.35]],[\"comment/1007\",[]],[\"name/1008\",[117,60.298]],[\"comment/1008\",[]],[\"name/1009\",[118,60.298]],[\"comment/1009\",[]],[\"name/1010\",[119,57.785]],[\"comment/1010\",[]],[\"name/1011\",[120,60.298]],[\"comment/1011\",[]],[\"name/1012\",[121,60.298]],[\"comment/1012\",[]],[\"name/1013\",[122,56.933]],[\"comment/1013\",[]],[\"name/1014\",[66,43.221]],[\"comment/1014\",[]],[\"name/1015\",[123,58.716]],[\"comment/1015\",[]],[\"name/1016\",[124,60.298]],[\"comment/1016\",[]],[\"name/1017\",[125,60.298]],[\"comment/1017\",[]],[\"name/1018\",[126,59.743]],[\"comment/1018\",[]],[\"name/1019\",[127,60.298]],[\"comment/1019\",[]],[\"name/1020\",[128,54.419]],[\"comment/1020\",[]],[\"name/1021\",[129,54.419]],[\"comment/1021\",[]],[\"name/1022\",[130,54.107]],[\"comment/1022\",[]],[\"name/1023\",[131,60.298]],[\"comment/1023\",[]],[\"name/1024\",[132,60.298]],[\"comment/1024\",[]],[\"name/1025\",[133,60.298]],[\"comment/1025\",[]],[\"name/1026\",[134,60.298]],[\"comment/1026\",[]],[\"name/1027\",[135,59.743]],[\"comment/1027\",[]],[\"name/1028\",[136,60.298]],[\"comment/1028\",[]],[\"name/1029\",[137,60.298]],[\"comment/1029\",[]],[\"name/1030\",[138,59.743]],[\"comment/1030\",[]],[\"name/1031\",[139,60.298]],[\"comment/1031\",[]],[\"name/1032\",[140,60.298]],[\"comment/1032\",[]],[\"name/1033\",[141,60.298]],[\"comment/1033\",[]],[\"name/1034\",[142,60.298]],[\"comment/1034\",[]],[\"name/1035\",[143,59.216]],[\"comment/1035\",[]],[\"name/1036\",[144,59.743]],[\"comment/1036\",[]],[\"name/1037\",[145,59.743]],[\"comment/1037\",[]],[\"name/1038\",[146,59.743]],[\"comment/1038\",[]],[\"name/1039\",[147,59.743]],[\"comment/1039\",[]],[\"name/1040\",[148,60.298]],[\"comment/1040\",[]],[\"name/1041\",[149,60.298]],[\"comment/1041\",[]],[\"name/1042\",[150,60.298]],[\"comment/1042\",[]],[\"name/1043\",[151,60.298]],[\"comment/1043\",[]],[\"name/1044\",[152,60.298]],[\"comment/1044\",[]],[\"name/1045\",[153,60.298]],[\"comment/1045\",[]],[\"name/1046\",[154,60.298]],[\"comment/1046\",[]],[\"name/1047\",[155,60.298]],[\"comment/1047\",[]],[\"name/1048\",[156,58.239]],[\"comment/1048\",[]],[\"name/1049\",[157,60.298]],[\"comment/1049\",[]],[\"name/1050\",[158,60.298]],[\"comment/1050\",[]],[\"name/1051\",[1,44.315]],[\"comment/1051\",[]],[\"name/1052\",[159,56.933]],[\"comment/1052\",[]],[\"name/1053\",[160,56.933]],[\"comment/1053\",[]],[\"name/1054\",[161,60.298]],[\"comment/1054\",[]],[\"name/1055\",[162,60.298]],[\"comment/1055\",[]],[\"name/1056\",[163,60.298]],[\"comment/1056\",[]],[\"name/1057\",[164,56.933]],[\"comment/1057\",[]],[\"name/1058\",[165,59.743]],[\"comment/1058\",[]],[\"name/1059\",[166,59.743]],[\"comment/1059\",[]],[\"name/1060\",[167,60.298]],[\"comment/1060\",[]],[\"name/1061\",[168,60.298]],[\"comment/1061\",[]],[\"name/1062\",[169,60.298]],[\"comment/1062\",[]],[\"name/1063\",[170,60.298]],[\"comment/1063\",[]],[\"name/1064\",[171,60.298]],[\"comment/1064\",[]],[\"name/1065\",[172,57.35]],[\"comment/1065\",[]],[\"name/1066\",[173,59.743]],[\"comment/1066\",[]],[\"name/1067\",[174,59.743]],[\"comment/1067\",[]],[\"name/1068\",[26,50.524]],[\"comment/1068\",[]],[\"name/1069\",[22,49.502]],[\"comment/1069\",[]],[\"name/1070\",[41,52.675]],[\"comment/1070\",[]],[\"name/1071\",[42,52.675]],[\"comment/1071\",[]],[\"name/1072\",[175,53.804]],[\"comment/1072\",[]],[\"name/1073\",[176,59.216]],[\"comment/1073\",[]],[\"name/1074\",[177,59.743]],[\"comment/1074\",[]],[\"name/1075\",[178,59.743]],[\"comment/1075\",[]],[\"name/1076\",[179,59.743]],[\"comment/1076\",[]],[\"name/1077\",[180,59.743]],[\"comment/1077\",[]],[\"name/1078\",[181,59.743]],[\"comment/1078\",[]],[\"name/1079\",[182,59.743]],[\"comment/1079\",[]],[\"name/1080\",[183,59.743]],[\"comment/1080\",[]],[\"name/1081\",[184,59.743]],[\"comment/1081\",[]],[\"name/1082\",[108,59.743]],[\"comment/1082\",[]],[\"name/1083\",[185,58.239]],[\"comment/1083\",[]],[\"name/1084\",[186,59.743]],[\"comment/1084\",[]],[\"name/1085\",[187,59.743]],[\"comment/1085\",[]],[\"name/1086\",[188,56.933]],[\"comment/1086\",[]],[\"name/1087\",[189,59.216]],[\"comment/1087\",[]],[\"name/1088\",[190,59.743]],[\"comment/1088\",[]],[\"name/1089\",[191,59.743]],[\"comment/1089\",[]],[\"name/1090\",[192,59.743]],[\"comment/1090\",[]],[\"name/1091\",[193,59.743]],[\"comment/1091\",[]],[\"name/1092\",[194,59.743]],[\"comment/1092\",[]],[\"name/1093\",[34,53.509]],[\"comment/1093\",[]],[\"name/1094\",[32,53.509]],[\"comment/1094\",[]],[\"name/1095\",[33,53.509]],[\"comment/1095\",[]],[\"name/1096\",[44,47.097]],[\"comment/1096\",[]],[\"name/1097\",[45,47.097]],[\"comment/1097\",[]],[\"name/1098\",[46,47.097]],[\"comment/1098\",[]],[\"name/1099\",[47,47.097]],[\"comment/1099\",[]],[\"name/1100\",[48,47.097]],[\"comment/1100\",[]],[\"name/1101\",[49,47.097]],[\"comment/1101\",[]],[\"name/1102\",[50,47.097]],[\"comment/1102\",[]],[\"name/1103\",[51,47.097]],[\"comment/1103\",[]],[\"name/1104\",[52,47.097]],[\"comment/1104\",[]],[\"name/1105\",[53,47.097]],[\"comment/1105\",[]],[\"name/1106\",[54,47.097]],[\"comment/1106\",[]],[\"name/1107\",[55,47.097]],[\"comment/1107\",[]],[\"name/1108\",[56,47.097]],[\"comment/1108\",[]],[\"name/1109\",[57,47.097]],[\"comment/1109\",[]],[\"name/1110\",[58,47.097]],[\"comment/1110\",[]],[\"name/1111\",[59,47.097]],[\"comment/1111\",[]],[\"name/1112\",[60,47.097]],[\"comment/1112\",[]],[\"name/1113\",[61,47.097]],[\"comment/1113\",[]],[\"name/1114\",[62,47.097]],[\"comment/1114\",[]],[\"name/1115\",[63,46.796]],[\"comment/1115\",[]],[\"name/1116\",[64,46.796]],[\"comment/1116\",[]],[\"name/1117\",[65,47.097]],[\"comment/1117\",[]],[\"name/1118\",[66,43.221]],[\"comment/1118\",[]],[\"name/1119\",[67,46.649]],[\"comment/1119\",[]],[\"name/1120\",[68,46.649]],[\"comment/1120\",[]],[\"name/1121\",[69,47.097]],[\"comment/1121\",[]],[\"name/1122\",[70,46.945]],[\"comment/1122\",[]],[\"name/1123\",[71,46.945]],[\"comment/1123\",[]],[\"name/1124\",[72,47.097]],[\"comment/1124\",[]],[\"name/1125\",[73,47.097]],[\"comment/1125\",[]],[\"name/1126\",[74,47.097]],[\"comment/1126\",[]],[\"name/1127\",[75,46.945]],[\"comment/1127\",[]],[\"name/1128\",[76,46.796]],[\"comment/1128\",[]],[\"name/1129\",[77,46.796]],[\"comment/1129\",[]],[\"name/1130\",[388,84.871]],[\"comment/1130\",[]],[\"name/1131\",[389,84.871]],[\"comment/1131\",[]],[\"name/1132\",[390,79.762]],[\"comment/1132\",[]],[\"name/1133\",[366,73.883]],[\"comment/1133\",[]],[\"name/1134\",[116,57.35]],[\"comment/1134\",[]],[\"name/1135\",[13,54.107]],[\"comment/1135\",[]],[\"name/1136\",[391,84.871]],[\"comment/1136\",[]],[\"name/1137\",[392,84.871]],[\"comment/1137\",[]],[\"name/1138\",[393,79.762]],[\"comment/1138\",[]],[\"name/1139\",[394,84.871]],[\"comment/1139\",[]],[\"name/1140\",[395,84.871]],[\"comment/1140\",[]],[\"name/1141\",[396,73.883]],[\"comment/1141\",[]],[\"name/1142\",[9,46.22]],[\"comment/1142\",[]],[\"name/1143\",[13,54.107]],[\"comment/1143\",[]],[\"name/1144\",[14,59.743]],[\"comment/1144\",[]],[\"name/1145\",[15,46.945]],[\"comment/1145\",[]],[\"name/1146\",[16,44.087]],[\"comment/1146\",[]],[\"name/1147\",[18,52.946]],[\"comment/1147\",[]],[\"name/1148\",[397,70.205]],[\"comment/1148\",[]],[\"name/1149\",[398,73.883]],[\"comment/1149\",[]],[\"name/1150\",[399,84.871]],[\"comment/1150\",[]],[\"name/1151\",[25,44.668]],[\"comment/1151\",[]],[\"name/1152\",[44,47.097]],[\"comment/1152\",[]],[\"name/1153\",[45,47.097]],[\"comment/1153\",[]],[\"name/1154\",[46,47.097]],[\"comment/1154\",[]],[\"name/1155\",[47,47.097]],[\"comment/1155\",[]],[\"name/1156\",[48,47.097]],[\"comment/1156\",[]],[\"name/1157\",[49,47.097]],[\"comment/1157\",[]],[\"name/1158\",[50,47.097]],[\"comment/1158\",[]],[\"name/1159\",[51,47.097]],[\"comment/1159\",[]],[\"name/1160\",[52,47.097]],[\"comment/1160\",[]],[\"name/1161\",[53,47.097]],[\"comment/1161\",[]],[\"name/1162\",[54,47.097]],[\"comment/1162\",[]],[\"name/1163\",[55,47.097]],[\"comment/1163\",[]],[\"name/1164\",[56,47.097]],[\"comment/1164\",[]],[\"name/1165\",[57,47.097]],[\"comment/1165\",[]],[\"name/1166\",[58,47.097]],[\"comment/1166\",[]],[\"name/1167\",[59,47.097]],[\"comment/1167\",[]],[\"name/1168\",[60,47.097]],[\"comment/1168\",[]],[\"name/1169\",[61,47.097]],[\"comment/1169\",[]],[\"name/1170\",[62,47.097]],[\"comment/1170\",[]],[\"name/1171\",[63,46.796]],[\"comment/1171\",[]],[\"name/1172\",[64,46.796]],[\"comment/1172\",[]],[\"name/1173\",[65,47.097]],[\"comment/1173\",[]],[\"name/1174\",[66,43.221]],[\"comment/1174\",[]],[\"name/1175\",[67,46.649]],[\"comment/1175\",[]],[\"name/1176\",[68,46.649]],[\"comment/1176\",[]],[\"name/1177\",[69,47.097]],[\"comment/1177\",[]],[\"name/1178\",[70,46.945]],[\"comment/1178\",[]],[\"name/1179\",[71,46.945]],[\"comment/1179\",[]],[\"name/1180\",[72,47.097]],[\"comment/1180\",[]],[\"name/1181\",[73,47.097]],[\"comment/1181\",[]],[\"name/1182\",[74,47.097]],[\"comment/1182\",[]],[\"name/1183\",[75,46.945]],[\"comment/1183\",[]],[\"name/1184\",[76,46.796]],[\"comment/1184\",[]],[\"name/1185\",[77,46.796]],[\"comment/1185\",[]],[\"name/1186\",[400,73.883]],[\"comment/1186\",[]],[\"name/1187\",[9,46.22]],[\"comment/1187\",[]],[\"name/1188\",[401,84.871]],[\"comment/1188\",[]],[\"name/1189\",[402,79.762]],[\"comment/1189\",[]],[\"name/1190\",[10,58.239]],[\"comment/1190\",[]],[\"name/1191\",[13,54.107]],[\"comment/1191\",[]],[\"name/1192\",[14,59.743]],[\"comment/1192\",[]],[\"name/1193\",[15,46.945]],[\"comment/1193\",[]],[\"name/1194\",[16,44.087]],[\"comment/1194\",[]],[\"name/1195\",[23,60.887]],[\"comment/1195\",[]],[\"name/1196\",[403,84.871]],[\"comment/1196\",[]],[\"name/1197\",[25,44.668]],[\"comment/1197\",[]],[\"name/1198\",[22,49.502]],[\"comment/1198\",[]],[\"name/1199\",[26,50.524]],[\"comment/1199\",[]],[\"name/1200\",[27,60.887]],[\"comment/1200\",[]],[\"name/1201\",[28,60.887]],[\"comment/1201\",[]],[\"name/1202\",[29,60.887]],[\"comment/1202\",[]],[\"name/1203\",[30,60.887]],[\"comment/1203\",[]],[\"name/1204\",[31,60.887]],[\"comment/1204\",[]],[\"name/1205\",[32,53.509]],[\"comment/1205\",[]],[\"name/1206\",[33,53.509]],[\"comment/1206\",[]],[\"name/1207\",[34,53.509]],[\"comment/1207\",[]],[\"name/1208\",[35,56.148]],[\"comment/1208\",[]],[\"name/1209\",[36,55.778]],[\"comment/1209\",[]],[\"name/1210\",[37,60.887]],[\"comment/1210\",[]],[\"name/1211\",[38,59.743]],[\"comment/1211\",[]],[\"name/1212\",[39,60.887]],[\"comment/1212\",[]],[\"name/1213\",[40,60.887]],[\"comment/1213\",[]],[\"name/1214\",[41,52.675]],[\"comment/1214\",[]],[\"name/1215\",[42,52.675]],[\"comment/1215\",[]],[\"name/1216\",[43,60.887]],[\"comment/1216\",[]],[\"name/1217\",[44,47.097]],[\"comment/1217\",[]],[\"name/1218\",[45,47.097]],[\"comment/1218\",[]],[\"name/1219\",[46,47.097]],[\"comment/1219\",[]],[\"name/1220\",[47,47.097]],[\"comment/1220\",[]],[\"name/1221\",[48,47.097]],[\"comment/1221\",[]],[\"name/1222\",[49,47.097]],[\"comment/1222\",[]],[\"name/1223\",[50,47.097]],[\"comment/1223\",[]],[\"name/1224\",[51,47.097]],[\"comment/1224\",[]],[\"name/1225\",[52,47.097]],[\"comment/1225\",[]],[\"name/1226\",[53,47.097]],[\"comment/1226\",[]],[\"name/1227\",[54,47.097]],[\"comment/1227\",[]],[\"name/1228\",[55,47.097]],[\"comment/1228\",[]],[\"name/1229\",[56,47.097]],[\"comment/1229\",[]],[\"name/1230\",[57,47.097]],[\"comment/1230\",[]],[\"name/1231\",[58,47.097]],[\"comment/1231\",[]],[\"name/1232\",[59,47.097]],[\"comment/1232\",[]],[\"name/1233\",[60,47.097]],[\"comment/1233\",[]],[\"name/1234\",[61,47.097]],[\"comment/1234\",[]],[\"name/1235\",[62,47.097]],[\"comment/1235\",[]],[\"name/1236\",[63,46.796]],[\"comment/1236\",[]],[\"name/1237\",[64,46.796]],[\"comment/1237\",[]],[\"name/1238\",[65,47.097]],[\"comment/1238\",[]],[\"name/1239\",[66,43.221]],[\"comment/1239\",[]],[\"name/1240\",[67,46.649]],[\"comment/1240\",[]],[\"name/1241\",[68,46.649]],[\"comment/1241\",[]],[\"name/1242\",[69,47.097]],[\"comment/1242\",[]],[\"name/1243\",[70,46.945]],[\"comment/1243\",[]],[\"name/1244\",[71,46.945]],[\"comment/1244\",[]],[\"name/1245\",[72,47.097]],[\"comment/1245\",[]],[\"name/1246\",[73,47.097]],[\"comment/1246\",[]],[\"name/1247\",[74,47.097]],[\"comment/1247\",[]],[\"name/1248\",[75,46.945]],[\"comment/1248\",[]],[\"name/1249\",[76,46.796]],[\"comment/1249\",[]],[\"name/1250\",[77,46.796]],[\"comment/1250\",[]],[\"name/1251\",[404,84.871]],[\"comment/1251\",[]],[\"name/1252\",[1,44.315]],[\"comment/1252\",[]],[\"name/1253\",[405,84.871]],[\"comment/1253\",[]],[\"name/1254\",[16,44.087]],[\"comment/1254\",[]],[\"name/1255\",[406,73.883]],[\"comment/1255\",[]],[\"name/1256\",[407,73.883]],[\"comment/1256\",[]],[\"name/1257\",[0,59.743]],[\"comment/1257\",[]],[\"name/1258\",[408,76.396]],[\"comment/1258\",[]],[\"name/1259\",[409,84.871]],[\"comment/1259\",[]],[\"name/1260\",[410,84.871]],[\"comment/1260\",[]],[\"name/1261\",[411,84.871]],[\"comment/1261\",[]],[\"name/1262\",[412,79.762]],[\"comment/1262\",[]],[\"name/1263\",[215,71.876]],[\"comment/1263\",[]],[\"name/1264\",[413,67.521]],[\"comment/1264\",[]],[\"name/1265\",[414,84.871]],[\"comment/1265\",[]],[\"name/1266\",[7,63.664]],[\"comment/1266\",[]],[\"name/1267\",[415,64.498]],[\"comment/1267\",[]],[\"name/1268\",[17,57.785]],[\"comment/1268\",[]],[\"name/1269\",[416,63.664]],[\"comment/1269\",[]],[\"name/1270\",[417,84.871]],[\"comment/1270\",[]],[\"name/1271\",[418,84.871]],[\"comment/1271\",[]],[\"name/1272\",[419,84.871]],[\"comment/1272\",[]],[\"name/1273\",[420,84.871]],[\"comment/1273\",[]],[\"name/1274\",[421,73.883]],[\"comment/1274\",[]],[\"name/1275\",[422,84.871]],[\"comment/1275\",[]],[\"name/1276\",[423,84.871]],[\"comment/1276\",[]],[\"name/1277\",[424,84.871]],[\"comment/1277\",[]],[\"name/1278\",[425,76.396]],[\"comment/1278\",[]],[\"name/1279\",[426,76.396]],[\"comment/1279\",[]],[\"name/1280\",[427,84.871]],[\"comment/1280\",[]],[\"name/1281\",[428,84.871]],[\"comment/1281\",[]],[\"name/1282\",[371,79.762]],[\"comment/1282\",[]],[\"name/1283\",[429,84.871]],[\"comment/1283\",[]],[\"name/1284\",[430,84.871]],[\"comment/1284\",[]],[\"name/1285\",[431,84.871]],[\"comment/1285\",[]],[\"name/1286\",[400,73.883]],[\"comment/1286\",[]],[\"name/1287\",[432,79.762]],[\"comment/1287\",[]],[\"name/1288\",[433,84.871]],[\"comment/1288\",[]],[\"name/1289\",[434,79.762]],[\"comment/1289\",[]],[\"name/1290\",[435,84.871]],[\"comment/1290\",[]],[\"name/1291\",[436,84.871]],[\"comment/1291\",[]],[\"name/1292\",[437,84.871]],[\"comment/1292\",[]],[\"name/1293\",[438,84.871]],[\"comment/1293\",[]],[\"name/1294\",[421,73.883]],[\"comment/1294\",[]],[\"name/1295\",[439,84.871]],[\"comment/1295\",[]],[\"name/1296\",[425,76.396]],[\"comment/1296\",[]],[\"name/1297\",[408,76.396]],[\"comment/1297\",[]],[\"name/1298\",[16,44.087]],[\"comment/1298\",[]],[\"name/1299\",[412,79.762]],[\"comment/1299\",[]],[\"name/1300\",[416,63.664]],[\"comment/1300\",[]],[\"name/1301\",[415,64.498]],[\"comment/1301\",[]],[\"name/1302\",[17,57.785]],[\"comment/1302\",[]],[\"name/1303\",[440,70.205]],[\"comment/1303\",[]],[\"name/1304\",[1,44.315]],[\"comment/1304\",[]],[\"name/1305\",[441,84.871]],[\"comment/1305\",[]],[\"name/1306\",[215,71.876]],[\"comment/1306\",[]],[\"name/1307\",[426,76.396]],[\"comment/1307\",[]],[\"name/1308\",[442,84.871]],[\"comment/1308\",[]],[\"name/1309\",[443,63.664]],[\"comment/1309\",[]],[\"name/1310\",[370,66.409]],[\"comment/1310\",[]],[\"name/1311\",[406,73.883]],[\"comment/1311\",[]],[\"name/1312\",[16,44.087]],[\"comment/1312\",[]],[\"name/1313\",[444,70.205]],[\"comment/1313\",[]],[\"name/1314\",[445,84.871]],[\"comment/1314\",[]],[\"name/1315\",[440,70.205]],[\"comment/1315\",[]],[\"name/1316\",[408,76.396]],[\"comment/1316\",[]],[\"name/1317\",[446,79.762]],[\"comment/1317\",[]],[\"name/1318\",[447,84.871]],[\"comment/1318\",[]],[\"name/1319\",[172,57.35]],[\"comment/1319\",[]],[\"name/1320\",[448,84.871]],[\"comment/1320\",[]],[\"name/1321\",[449,84.871]],[\"comment/1321\",[]],[\"name/1322\",[450,79.762]],[\"comment/1322\",[]],[\"name/1323\",[451,84.871]],[\"comment/1323\",[]],[\"name/1324\",[452,84.871]],[\"comment/1324\",[]],[\"name/1325\",[453,84.871]],[\"comment/1325\",[]],[\"name/1326\",[454,84.871]],[\"comment/1326\",[]],[\"name/1327\",[455,84.871]],[\"comment/1327\",[]],[\"name/1328\",[456,84.871]],[\"comment/1328\",[]],[\"name/1329\",[457,84.871]],[\"comment/1329\",[]],[\"name/1330\",[458,84.871]],[\"comment/1330\",[]],[\"name/1331\",[459,84.871]],[\"comment/1331\",[]],[\"name/1332\",[460,84.871]],[\"comment/1332\",[]],[\"name/1333\",[444,70.205]],[\"comment/1333\",[]],[\"name/1334\",[406,73.883]],[\"comment/1334\",[]],[\"name/1335\",[446,79.762]],[\"comment/1335\",[]],[\"name/1336\",[461,84.871]],[\"comment/1336\",[]],[\"name/1337\",[462,84.871]],[\"comment/1337\",[]],[\"name/1338\",[370,66.409]],[\"comment/1338\",[]],[\"name/1339\",[463,84.871]],[\"comment/1339\",[]],[\"name/1340\",[443,63.664]],[\"comment/1340\",[]],[\"name/1341\",[464,76.396]],[\"comment/1341\",[]],[\"name/1342\",[8,57.35]],[\"comment/1342\",[]],[\"name/1343\",[16,44.087]],[\"comment/1343\",[]],[\"name/1344\",[465,84.871]],[\"comment/1344\",[]],[\"name/1345\",[440,70.205]],[\"comment/1345\",[]],[\"name/1346\",[444,70.205]],[\"comment/1346\",[]],[\"name/1347\",[406,73.883]],[\"comment/1347\",[]],[\"name/1348\",[466,79.762]],[\"comment/1348\",[]],[\"name/1349\",[467,76.396]],[\"comment/1349\",[]],[\"name/1350\",[468,79.762]],[\"comment/1350\",[]],[\"name/1351\",[469,70.205]],[\"comment/1351\",[]],[\"name/1352\",[64,46.796]],[\"comment/1352\",[]],[\"name/1353\",[470,76.396]],[\"comment/1353\",[]],[\"name/1354\",[199,71.876]],[\"comment/1354\",[]],[\"name/1355\",[471,70.205]],[\"comment/1355\",[]],[\"name/1356\",[215,71.876]],[\"comment/1356\",[]],[\"name/1357\",[472,71.876]],[\"comment/1357\",[]],[\"name/1358\",[450,79.762]],[\"comment/1358\",[]],[\"name/1359\",[473,84.871]],[\"comment/1359\",[]],[\"name/1360\",[474,76.396]],[\"comment/1360\",[]],[\"name/1361\",[17,57.785]],[\"comment/1361\",[]],[\"name/1362\",[475,84.871]],[\"comment/1362\",[]],[\"name/1363\",[476,84.871]],[\"comment/1363\",[]],[\"name/1364\",[477,84.871]],[\"comment/1364\",[]],[\"name/1365\",[478,84.871]],[\"comment/1365\",[]],[\"name/1366\",[301,73.883]],[\"comment/1366\",[]],[\"name/1367\",[302,73.883]],[\"comment/1367\",[]],[\"name/1368\",[479,76.396]],[\"comment/1368\",[]],[\"name/1369\",[480,73.883]],[\"comment/1369\",[]],[\"name/1370\",[9,46.22]],[\"comment/1370\",[]],[\"name/1371\",[15,46.945]],[\"comment/1371\",[]],[\"name/1372\",[16,44.087]],[\"comment/1372\",[]],[\"name/1373\",[44,47.097]],[\"comment/1373\",[]],[\"name/1374\",[45,47.097]],[\"comment/1374\",[]],[\"name/1375\",[46,47.097]],[\"comment/1375\",[]],[\"name/1376\",[47,47.097]],[\"comment/1376\",[]],[\"name/1377\",[48,47.097]],[\"comment/1377\",[]],[\"name/1378\",[49,47.097]],[\"comment/1378\",[]],[\"name/1379\",[50,47.097]],[\"comment/1379\",[]],[\"name/1380\",[51,47.097]],[\"comment/1380\",[]],[\"name/1381\",[25,44.668]],[\"comment/1381\",[]],[\"name/1382\",[52,47.097]],[\"comment/1382\",[]],[\"name/1383\",[53,47.097]],[\"comment/1383\",[]],[\"name/1384\",[54,47.097]],[\"comment/1384\",[]],[\"name/1385\",[55,47.097]],[\"comment/1385\",[]],[\"name/1386\",[56,47.097]],[\"comment/1386\",[]],[\"name/1387\",[57,47.097]],[\"comment/1387\",[]],[\"name/1388\",[58,47.097]],[\"comment/1388\",[]],[\"name/1389\",[59,47.097]],[\"comment/1389\",[]],[\"name/1390\",[60,47.097]],[\"comment/1390\",[]],[\"name/1391\",[61,47.097]],[\"comment/1391\",[]],[\"name/1392\",[62,47.097]],[\"comment/1392\",[]],[\"name/1393\",[63,46.796]],[\"comment/1393\",[]],[\"name/1394\",[64,46.796]],[\"comment/1394\",[]],[\"name/1395\",[65,47.097]],[\"comment/1395\",[]],[\"name/1396\",[66,43.221]],[\"comment/1396\",[]],[\"name/1397\",[67,46.649]],[\"comment/1397\",[]],[\"name/1398\",[68,46.649]],[\"comment/1398\",[]],[\"name/1399\",[69,47.097]],[\"comment/1399\",[]],[\"name/1400\",[70,46.945]],[\"comment/1400\",[]],[\"name/1401\",[71,46.945]],[\"comment/1401\",[]],[\"name/1402\",[72,47.097]],[\"comment/1402\",[]],[\"name/1403\",[73,47.097]],[\"comment/1403\",[]],[\"name/1404\",[74,47.097]],[\"comment/1404\",[]],[\"name/1405\",[75,46.945]],[\"comment/1405\",[]],[\"name/1406\",[76,46.796]],[\"comment/1406\",[]],[\"name/1407\",[77,46.796]],[\"comment/1407\",[]],[\"name/1408\",[481,84.871]],[\"comment/1408\",[]],[\"name/1409\",[482,67.521]],[\"comment/1409\",[]],[\"name/1410\",[1,44.315]],[\"comment/1410\",[]],[\"name/1411\",[483,73.883]],[\"comment/1411\",[]],[\"name/1412\",[484,76.396]],[\"comment/1412\",[]],[\"name/1413\",[1,44.315]],[\"comment/1413\",[]],[\"name/1414\",[485,84.871]],[\"comment/1414\",[]],[\"name/1415\",[486,84.871]],[\"comment/1415\",[]],[\"name/1416\",[6,60.298]],[\"comment/1416\",[]],[\"name/1417\",[260,65.408]],[\"comment/1417\",[]],[\"name/1418\",[487,84.871]],[\"comment/1418\",[]],[\"name/1419\",[66,43.221]],[\"comment/1419\",[]],[\"name/1420\",[444,70.205]],[\"comment/1420\",[]],[\"name/1421\",[8,57.35]],[\"comment/1421\",[]],[\"name/1422\",[15,46.945]],[\"comment/1422\",[]],[\"name/1423\",[488,84.871]],[\"comment/1423\",[]],[\"name/1424\",[16,44.087]],[\"comment/1424\",[]],[\"name/1425\",[172,57.35]],[\"comment/1425\",[]],[\"name/1426\",[469,70.205]],[\"comment/1426\",[]],[\"name/1427\",[489,84.871]],[\"comment/1427\",[]],[\"name/1428\",[63,46.796]],[\"comment/1428\",[]],[\"name/1429\",[64,46.796]],[\"comment/1429\",[]],[\"name/1430\",[128,54.419]],[\"comment/1430\",[]],[\"name/1431\",[490,79.762]],[\"comment/1431\",[]],[\"name/1432\",[482,67.521]],[\"comment/1432\",[]],[\"name/1433\",[491,73.883]],[\"comment/1433\",[]],[\"name/1434\",[492,73.883]],[\"comment/1434\",[]],[\"name/1435\",[493,73.883]],[\"comment/1435\",[]],[\"name/1436\",[494,73.883]],[\"comment/1436\",[]],[\"name/1437\",[495,73.883]],[\"comment/1437\",[]],[\"name/1438\",[496,73.883]],[\"comment/1438\",[]],[\"name/1439\",[103,73.883]],[\"comment/1439\",[]],[\"name/1440\",[378,73.883]],[\"comment/1440\",[]],[\"name/1441\",[497,73.883]],[\"comment/1441\",[]],[\"name/1442\",[498,73.883]],[\"comment/1442\",[]],[\"name/1443\",[499,73.883]],[\"comment/1443\",[]],[\"name/1444\",[500,73.883]],[\"comment/1444\",[]],[\"name/1445\",[501,73.883]],[\"comment/1445\",[]],[\"name/1446\",[7,63.664]],[\"comment/1446\",[]],[\"name/1447\",[86,71.876]],[\"comment/1447\",[]],[\"name/1448\",[332,71.876]],[\"comment/1448\",[]],[\"name/1449\",[100,71.876]],[\"comment/1449\",[]],[\"name/1450\",[502,71.876]],[\"comment/1450\",[]],[\"name/1451\",[503,73.883]],[\"comment/1451\",[]],[\"name/1452\",[504,84.871]],[\"comment/1452\",[]],[\"name/1453\",[505,71.876]],[\"comment/1453\",[]],[\"name/1454\",[506,76.396]],[\"comment/1454\",[]],[\"name/1455\",[507,76.396]],[\"comment/1455\",[]],[\"name/1456\",[508,73.883]],[\"comment/1456\",[]],[\"name/1457\",[472,71.876]],[\"comment/1457\",[]],[\"name/1458\",[509,73.883]],[\"comment/1458\",[]],[\"name/1459\",[510,76.396]],[\"comment/1459\",[]],[\"name/1460\",[471,70.205]],[\"comment/1460\",[]],[\"name/1461\",[199,71.876]],[\"comment/1461\",[]],[\"name/1462\",[396,73.883]],[\"comment/1462\",[]],[\"name/1463\",[511,73.883]],[\"comment/1463\",[]],[\"name/1464\",[512,73.883]],[\"comment/1464\",[]],[\"name/1465\",[513,73.883]],[\"comment/1465\",[]],[\"name/1466\",[514,73.883]],[\"comment/1466\",[]],[\"name/1467\",[515,73.883]],[\"comment/1467\",[]],[\"name/1468\",[464,76.396]],[\"comment/1468\",[]],[\"name/1469\",[516,71.876]],[\"comment/1469\",[]],[\"name/1470\",[517,73.883]],[\"comment/1470\",[]],[\"name/1471\",[25,44.668]],[\"comment/1471\",[]],[\"name/1472\",[518,79.762]],[\"comment/1472\",[]],[\"name/1473\",[519,84.871]],[\"comment/1473\",[]],[\"name/1474\",[1,44.315]],[\"comment/1474\",[]],[\"name/1475\",[520,84.871]],[\"comment/1475\",[]],[\"name/1476\",[474,76.396]],[\"comment/1476\",[]],[\"name/1477\",[521,84.871]],[\"comment/1477\",[]],[\"name/1478\",[7,63.664]],[\"comment/1478\",[]],[\"name/1479\",[86,71.876]],[\"comment/1479\",[]],[\"name/1480\",[100,71.876]],[\"comment/1480\",[]],[\"name/1481\",[522,76.396]],[\"comment/1481\",[]],[\"name/1482\",[103,73.883]],[\"comment/1482\",[]],[\"name/1483\",[199,71.876]],[\"comment/1483\",[]],[\"name/1484\",[232,76.396]],[\"comment/1484\",[]],[\"name/1485\",[245,79.762]],[\"comment/1485\",[]],[\"name/1486\",[257,79.762]],[\"comment/1486\",[]],[\"name/1487\",[266,79.762]],[\"comment/1487\",[]],[\"name/1488\",[332,71.876]],[\"comment/1488\",[]],[\"name/1489\",[370,66.409]],[\"comment/1489\",[]],[\"name/1490\",[378,73.883]],[\"comment/1490\",[]],[\"name/1491\",[384,76.396]],[\"comment/1491\",[]],[\"name/1492\",[396,73.883]],[\"comment/1492\",[]],[\"name/1493\",[400,73.883]],[\"comment/1493\",[]],[\"name/1494\",[464,76.396]],[\"comment/1494\",[]],[\"name/1495\",[480,73.883]],[\"comment/1495\",[]],[\"name/1496\",[444,70.205]],[\"comment/1496\",[]],[\"name/1497\",[66,43.221]],[\"comment/1497\",[]],[\"name/1498\",[510,76.396]],[\"comment/1498\",[]],[\"name/1499\",[523,76.396]],[\"comment/1499\",[]],[\"name/1500\",[524,76.396]],[\"comment/1500\",[]],[\"name/1501\",[495,73.883]],[\"comment/1501\",[]],[\"name/1502\",[310,66.409]],[\"comment/1502\",[]],[\"name/1503\",[493,73.883]],[\"comment/1503\",[]],[\"name/1504\",[500,73.883]],[\"comment/1504\",[]],[\"name/1505\",[501,73.883]],[\"comment/1505\",[]],[\"name/1506\",[525,76.396]],[\"comment/1506\",[]],[\"name/1507\",[526,79.762]],[\"comment/1507\",[]],[\"name/1508\",[527,73.883]],[\"comment/1508\",[]],[\"name/1509\",[498,73.883]],[\"comment/1509\",[]],[\"name/1510\",[528,76.396]],[\"comment/1510\",[]],[\"name/1511\",[507,76.396]],[\"comment/1511\",[]],[\"name/1512\",[508,73.883]],[\"comment/1512\",[]],[\"name/1513\",[529,79.762]],[\"comment/1513\",[]],[\"name/1514\",[413,67.521]],[\"comment/1514\",[]],[\"name/1515\",[530,73.883]],[\"comment/1515\",[]],[\"name/1516\",[517,73.883]],[\"comment/1516\",[]],[\"name/1517\",[502,71.876]],[\"comment/1517\",[]],[\"name/1518\",[531,76.396]],[\"comment/1518\",[]],[\"name/1519\",[467,76.396]],[\"comment/1519\",[]],[\"name/1520\",[516,71.876]],[\"comment/1520\",[]],[\"name/1521\",[532,79.762]],[\"comment/1521\",[]],[\"name/1522\",[533,76.396]],[\"comment/1522\",[]],[\"name/1523\",[484,76.396]],[\"comment/1523\",[]],[\"name/1524\",[494,73.883]],[\"comment/1524\",[]],[\"name/1525\",[534,76.396]],[\"comment/1525\",[]],[\"name/1526\",[482,67.521]],[\"comment/1526\",[]],[\"name/1527\",[509,73.883]],[\"comment/1527\",[]],[\"name/1528\",[535,76.396]],[\"comment/1528\",[]],[\"name/1529\",[512,73.883]],[\"comment/1529\",[]],[\"name/1530\",[536,76.396]],[\"comment/1530\",[]],[\"name/1531\",[492,73.883]],[\"comment/1531\",[]],[\"name/1532\",[537,76.396]],[\"comment/1532\",[]],[\"name/1533\",[538,76.396]],[\"comment/1533\",[]],[\"name/1534\",[511,73.883]],[\"comment/1534\",[]],[\"name/1535\",[443,63.664]],[\"comment/1535\",[]],[\"name/1536\",[505,71.876]],[\"comment/1536\",[]],[\"name/1537\",[295,68.773]],[\"comment/1537\",[]],[\"name/1538\",[539,79.762]],[\"comment/1538\",[]],[\"name/1539\",[515,73.883]],[\"comment/1539\",[]],[\"name/1540\",[499,73.883]],[\"comment/1540\",[]],[\"name/1541\",[540,76.396]],[\"comment/1541\",[]],[\"name/1542\",[491,73.883]],[\"comment/1542\",[]],[\"name/1543\",[541,76.396]],[\"comment/1543\",[]],[\"name/1544\",[514,73.883]],[\"comment/1544\",[]],[\"name/1545\",[503,73.883]],[\"comment/1545\",[]],[\"name/1546\",[542,79.762]],[\"comment/1546\",[]],[\"name/1547\",[496,73.883]],[\"comment/1547\",[]],[\"name/1548\",[506,76.396]],[\"comment/1548\",[]],[\"name/1549\",[543,73.883]],[\"comment/1549\",[]],[\"name/1550\",[497,73.883]],[\"comment/1550\",[]],[\"name/1551\",[544,73.883]],[\"comment/1551\",[]],[\"name/1552\",[545,79.762]],[\"comment/1552\",[]],[\"name/1553\",[471,70.205]],[\"comment/1553\",[]],[\"name/1554\",[546,76.396]],[\"comment/1554\",[]],[\"name/1555\",[513,73.883]],[\"comment/1555\",[]],[\"name/1556\",[472,71.876]],[\"comment/1556\",[]],[\"name/1557\",[547,76.396]],[\"comment/1557\",[]],[\"name/1558\",[78,79.762]],[\"comment/1558\",[]],[\"name/1559\",[83,79.762]],[\"comment/1559\",[]],[\"name/1560\",[325,79.762]],[\"comment/1560\",[]],[\"name/1561\",[326,79.762]],[\"comment/1561\",[]],[\"name/1562\",[327,76.396]],[\"comment/1562\",[]],[\"name/1563\",[328,76.396]],[\"comment/1563\",[]],[\"name/1564\",[393,79.762]],[\"comment/1564\",[]],[\"name/1565\",[77,46.796]],[\"comment/1565\",[]],[\"name/1566\",[76,46.796]],[\"comment/1566\",[]],[\"name/1567\",[548,79.762]],[\"comment/1567\",[]],[\"name/1568\",[549,79.762]],[\"comment/1568\",[]],[\"name/1569\",[550,79.762]],[\"comment/1569\",[]],[\"name/1570\",[551,79.762]],[\"comment/1570\",[]],[\"name/1571\",[552,79.762]],[\"comment/1571\",[]],[\"name/1572\",[553,79.762]],[\"comment/1572\",[]],[\"name/1573\",[554,79.762]],[\"comment/1573\",[]],[\"name/1574\",[555,76.396]],[\"comment/1574\",[]],[\"name/1575\",[556,79.762]],[\"comment/1575\",[]],[\"name/1576\",[557,84.871]],[\"comment/1576\",[]],[\"name/1577\",[558,84.871]],[\"comment/1577\",[]],[\"name/1578\",[559,84.871]],[\"comment/1578\",[]],[\"name/1579\",[560,84.871]],[\"comment/1579\",[]],[\"name/1580\",[561,84.871]],[\"comment/1580\",[]],[\"name/1581\",[562,84.871]],[\"comment/1581\",[]],[\"name/1582\",[563,84.871]],[\"comment/1582\",[]],[\"name/1583\",[564,84.871]],[\"comment/1583\",[]],[\"name/1584\",[565,71.876]],[\"comment/1584\",[]],[\"name/1585\",[566,84.871]],[\"comment/1585\",[]],[\"name/1586\",[567,84.871]],[\"comment/1586\",[]],[\"name/1587\",[568,84.871]],[\"comment/1587\",[]],[\"name/1588\",[569,84.871]],[\"comment/1588\",[]],[\"name/1589\",[570,84.871]],[\"comment/1589\",[]],[\"name/1590\",[571,84.871]],[\"comment/1590\",[]],[\"name/1591\",[1,44.315]],[\"comment/1591\",[]],[\"name/1592\",[572,79.762]],[\"comment/1592\",[]],[\"name/1593\",[573,79.762]],[\"comment/1593\",[]],[\"name/1594\",[565,71.876]],[\"comment/1594\",[]],[\"name/1595\",[574,84.871]],[\"comment/1595\",[]],[\"name/1596\",[575,84.871]],[\"comment/1596\",[]],[\"name/1597\",[527,73.883]],[\"comment/1597\",[]],[\"name/1598\",[576,84.871]],[\"comment/1598\",[]],[\"name/1599\",[577,84.871]],[\"comment/1599\",[]],[\"name/1600\",[578,84.871]],[\"comment/1600\",[]],[\"name/1601\",[1,44.315]],[\"comment/1601\",[]],[\"name/1602\",[579,84.871]],[\"comment/1602\",[]],[\"name/1603\",[580,84.871]],[\"comment/1603\",[]],[\"name/1604\",[581,84.871]],[\"comment/1604\",[]],[\"name/1605\",[16,44.087]],[\"comment/1605\",[]],[\"name/1606\",[70,46.945]],[\"comment/1606\",[]],[\"name/1607\",[582,76.396]],[\"comment/1607\",[]],[\"name/1608\",[583,76.396]],[\"comment/1608\",[]],[\"name/1609\",[584,79.762]],[\"comment/1609\",[]],[\"name/1610\",[585,76.396]],[\"comment/1610\",[]],[\"name/1611\",[586,84.871]],[\"comment/1611\",[]],[\"name/1612\",[1,44.315]],[\"comment/1612\",[]],[\"name/1613\",[587,84.871]],[\"comment/1613\",[]],[\"name/1614\",[340,70.205]],[\"comment/1614\",[]],[\"name/1615\",[588,84.871]],[\"comment/1615\",[]],[\"name/1616\",[324,66.409]],[\"comment/1616\",[]],[\"name/1617\",[589,84.871]],[\"comment/1617\",[]],[\"name/1618\",[565,71.876]],[\"comment/1618\",[]],[\"name/1619\",[590,84.871]],[\"comment/1619\",[]],[\"name/1620\",[591,84.871]],[\"comment/1620\",[]],[\"name/1621\",[592,84.871]],[\"comment/1621\",[]],[\"name/1622\",[482,67.521]],[\"comment/1622\",[]],[\"name/1623\",[7,63.664]],[\"comment/1623\",[]],[\"name/1624\",[593,84.871]],[\"comment/1624\",[]],[\"name/1625\",[594,84.871]],[\"comment/1625\",[]],[\"name/1626\",[516,71.876]],[\"comment/1626\",[]],[\"name/1627\",[595,84.871]],[\"comment/1627\",[]],[\"name/1628\",[100,71.876]],[\"comment/1628\",[]],[\"name/1629\",[544,73.883]],[\"comment/1629\",[]],[\"name/1630\",[332,71.876]],[\"comment/1630\",[]],[\"name/1631\",[502,71.876]],[\"comment/1631\",[]],[\"name/1632\",[530,73.883]],[\"comment/1632\",[]],[\"name/1633\",[505,71.876]],[\"comment/1633\",[]],[\"name/1634\",[471,70.205]],[\"comment/1634\",[]],[\"name/1635\",[324,66.409]],[\"comment/1635\",[]],[\"name/1636\",[596,84.871]],[\"comment/1636\",[]],[\"name/1637\",[597,79.762]],[\"comment/1637\",[]],[\"name/1638\",[598,79.762]],[\"comment/1638\",[]],[\"name/1639\",[599,84.871]],[\"comment/1639\",[]],[\"name/1640\",[600,84.871]],[\"comment/1640\",[]],[\"name/1641\",[601,79.762]],[\"comment/1641\",[]],[\"name/1642\",[312,79.762]],[\"comment/1642\",[]],[\"name/1643\",[313,79.762]],[\"comment/1643\",[]],[\"name/1644\",[602,84.871]],[\"comment/1644\",[]],[\"name/1645\",[603,84.871]],[\"comment/1645\",[]],[\"name/1646\",[77,46.796]],[\"comment/1646\",[]],[\"name/1647\",[604,79.762]],[\"comment/1647\",[]],[\"name/1648\",[605,79.762]],[\"comment/1648\",[]],[\"name/1649\",[76,46.796]],[\"comment/1649\",[]],[\"name/1650\",[604,79.762]],[\"comment/1650\",[]],[\"name/1651\",[606,79.762]],[\"comment/1651\",[]],[\"name/1652\",[66,43.221]],[\"comment/1652\",[]],[\"name/1653\",[607,84.871]],[\"comment/1653\",[]],[\"name/1654\",[608,84.871]],[\"comment/1654\",[]],[\"name/1655\",[583,76.396]],[\"comment/1655\",[]],[\"name/1656\",[609,84.871]],[\"comment/1656\",[]],[\"name/1657\",[610,84.871]],[\"comment/1657\",[]],[\"name/1658\",[611,84.871]],[\"comment/1658\",[]],[\"name/1659\",[612,84.871]],[\"comment/1659\",[]],[\"name/1660\",[613,84.871]],[\"comment/1660\",[]],[\"name/1661\",[614,84.871]],[\"comment/1661\",[]],[\"name/1662\",[615,84.871]],[\"comment/1662\",[]],[\"name/1663\",[616,84.871]],[\"comment/1663\",[]],[\"name/1664\",[617,84.871]],[\"comment/1664\",[]],[\"name/1665\",[618,84.871]],[\"comment/1665\",[]],[\"name/1666\",[619,84.871]],[\"comment/1666\",[]],[\"name/1667\",[620,84.871]],[\"comment/1667\",[]],[\"name/1668\",[621,84.871]],[\"comment/1668\",[]],[\"name/1669\",[622,84.871]],[\"comment/1669\",[]],[\"name/1670\",[623,84.871]],[\"comment/1670\",[]],[\"name/1671\",[624,84.871]],[\"comment/1671\",[]],[\"name/1672\",[164,56.933]],[\"comment/1672\",[]],[\"name/1673\",[625,84.871]],[\"comment/1673\",[]],[\"name/1674\",[626,84.871]],[\"comment/1674\",[]],[\"name/1675\",[627,84.871]],[\"comment/1675\",[]],[\"name/1676\",[628,79.762]],[\"comment/1676\",[]],[\"name/1677\",[629,79.762]],[\"comment/1677\",[]],[\"name/1678\",[630,84.871]],[\"comment/1678\",[]],[\"name/1679\",[631,79.762]],[\"comment/1679\",[]],[\"name/1680\",[632,84.871]],[\"comment/1680\",[]],[\"name/1681\",[633,79.762]],[\"comment/1681\",[]],[\"name/1682\",[634,79.762]],[\"comment/1682\",[]],[\"name/1683\",[635,79.762]],[\"comment/1683\",[]],[\"name/1684\",[636,84.871]],[\"comment/1684\",[]],[\"name/1685\",[637,84.871]],[\"comment/1685\",[]],[\"name/1686\",[482,67.521]],[\"comment/1686\",[]],[\"name/1687\",[638,84.871]],[\"comment/1687\",[]],[\"name/1688\",[639,84.871]],[\"comment/1688\",[]],[\"name/1689\",[640,84.871]],[\"comment/1689\",[]],[\"name/1690\",[641,84.871]],[\"comment/1690\",[]],[\"name/1691\",[642,79.762]],[\"comment/1691\",[]],[\"name/1692\",[643,79.762]],[\"comment/1692\",[]],[\"name/1693\",[644,79.762]],[\"comment/1693\",[]],[\"name/1694\",[645,84.871]],[\"comment/1694\",[]],[\"name/1695\",[642,79.762]],[\"comment/1695\",[]],[\"name/1696\",[643,79.762]],[\"comment/1696\",[]],[\"name/1697\",[644,79.762]],[\"comment/1697\",[]],[\"name/1698\",[510,76.396]],[\"comment/1698\",[]],[\"name/1699\",[8,57.35]],[\"comment/1699\",[]],[\"name/1700\",[646,84.871]],[\"comment/1700\",[]],[\"name/1701\",[647,84.871]],[\"comment/1701\",[]],[\"name/1702\",[648,84.871]],[\"comment/1702\",[]],[\"name/1703\",[649,84.871]],[\"comment/1703\",[]],[\"name/1704\",[650,84.871]],[\"comment/1704\",[]],[\"name/1705\",[651,79.762]],[\"comment/1705\",[]],[\"name/1706\",[16,44.087]],[\"comment/1706\",[]],[\"name/1707\",[652,84.871]],[\"comment/1707\",[]],[\"name/1708\",[653,84.871]],[\"comment/1708\",[]],[\"name/1709\",[654,84.871]],[\"comment/1709\",[]],[\"name/1710\",[655,84.871]],[\"comment/1710\",[]],[\"name/1711\",[656,84.871]],[\"comment/1711\",[]],[\"name/1712\",[657,84.871]],[\"comment/1712\",[]],[\"name/1713\",[109,56.533]],[\"comment/1713\",[]],[\"name/1714\",[658,84.871]],[\"comment/1714\",[]],[\"name/1715\",[659,84.871]],[\"comment/1715\",[]],[\"name/1716\",[188,56.933]],[\"comment/1716\",[]],[\"name/1717\",[660,84.871]],[\"comment/1717\",[]],[\"name/1718\",[10,58.239]],[\"comment/1718\",[]],[\"name/1719\",[661,84.871]],[\"comment/1719\",[]],[\"name/1720\",[146,59.743]],[\"comment/1720\",[]],[\"name/1721\",[523,76.396]],[\"comment/1721\",[]],[\"name/1722\",[9,46.22]],[\"comment/1722\",[]],[\"name/1723\",[662,84.871]],[\"comment/1723\",[]],[\"name/1724\",[663,84.871]],[\"comment/1724\",[]],[\"name/1725\",[664,84.871]],[\"comment/1725\",[]],[\"name/1726\",[16,44.087]],[\"comment/1726\",[]],[\"name/1727\",[665,84.871]],[\"comment/1727\",[]],[\"name/1728\",[666,84.871]],[\"comment/1728\",[]],[\"name/1729\",[468,79.762]],[\"comment/1729\",[]],[\"name/1730\",[667,79.762]],[\"comment/1730\",[]],[\"name/1731\",[668,84.871]],[\"comment/1731\",[]],[\"name/1732\",[275,73.883]],[\"comment/1732\",[]],[\"name/1733\",[669,84.871]],[\"comment/1733\",[]],[\"name/1734\",[670,84.871]],[\"comment/1734\",[]],[\"name/1735\",[671,84.871]],[\"comment/1735\",[]],[\"name/1736\",[434,79.762]],[\"comment/1736\",[]],[\"name/1737\",[672,84.871]],[\"comment/1737\",[]],[\"name/1738\",[673,84.871]],[\"comment/1738\",[]],[\"name/1739\",[674,84.871]],[\"comment/1739\",[]],[\"name/1740\",[675,84.871]],[\"comment/1740\",[]],[\"name/1741\",[255,79.762]],[\"comment/1741\",[]],[\"name/1742\",[246,79.762]],[\"comment/1742\",[]],[\"name/1743\",[676,84.871]],[\"comment/1743\",[]],[\"name/1744\",[677,84.871]],[\"comment/1744\",[]],[\"name/1745\",[678,84.871]],[\"comment/1745\",[]],[\"name/1746\",[631,79.762]],[\"comment/1746\",[]],[\"name/1747\",[679,84.871]],[\"comment/1747\",[]],[\"name/1748\",[680,84.871]],[\"comment/1748\",[]],[\"name/1749\",[470,76.396]],[\"comment/1749\",[]],[\"name/1750\",[524,76.396]],[\"comment/1750\",[]],[\"name/1751\",[9,46.22]],[\"comment/1751\",[]],[\"name/1752\",[15,46.945]],[\"comment/1752\",[]],[\"name/1753\",[10,58.239]],[\"comment/1753\",[]],[\"name/1754\",[101,79.762]],[\"comment/1754\",[]],[\"name/1755\",[13,54.107]],[\"comment/1755\",[]],[\"name/1756\",[14,59.743]],[\"comment/1756\",[]],[\"name/1757\",[16,44.087]],[\"comment/1757\",[]],[\"name/1758\",[681,84.871]],[\"comment/1758\",[]],[\"name/1759\",[682,84.871]],[\"comment/1759\",[]],[\"name/1760\",[683,79.762]],[\"comment/1760\",[]],[\"name/1761\",[684,79.762]],[\"comment/1761\",[]],[\"name/1762\",[25,44.668]],[\"comment/1762\",[]],[\"name/1763\",[22,49.502]],[\"comment/1763\",[]],[\"name/1764\",[26,50.524]],[\"comment/1764\",[]],[\"name/1765\",[27,60.887]],[\"comment/1765\",[]],[\"name/1766\",[28,60.887]],[\"comment/1766\",[]],[\"name/1767\",[23,60.887]],[\"comment/1767\",[]],[\"name/1768\",[29,60.887]],[\"comment/1768\",[]],[\"name/1769\",[30,60.887]],[\"comment/1769\",[]],[\"name/1770\",[31,60.887]],[\"comment/1770\",[]],[\"name/1771\",[32,53.509]],[\"comment/1771\",[]],[\"name/1772\",[33,53.509]],[\"comment/1772\",[]],[\"name/1773\",[34,53.509]],[\"comment/1773\",[]],[\"name/1774\",[35,56.148]],[\"comment/1774\",[]],[\"name/1775\",[36,55.778]],[\"comment/1775\",[]],[\"name/1776\",[37,60.887]],[\"comment/1776\",[]],[\"name/1777\",[38,59.743]],[\"comment/1777\",[]],[\"name/1778\",[39,60.887]],[\"comment/1778\",[]],[\"name/1779\",[40,60.887]],[\"comment/1779\",[]],[\"name/1780\",[41,52.675]],[\"comment/1780\",[]],[\"name/1781\",[42,52.675]],[\"comment/1781\",[]],[\"name/1782\",[43,60.887]],[\"comment/1782\",[]],[\"name/1783\",[44,47.097]],[\"comment/1783\",[]],[\"name/1784\",[45,47.097]],[\"comment/1784\",[]],[\"name/1785\",[46,47.097]],[\"comment/1785\",[]],[\"name/1786\",[47,47.097]],[\"comment/1786\",[]],[\"name/1787\",[48,47.097]],[\"comment/1787\",[]],[\"name/1788\",[49,47.097]],[\"comment/1788\",[]],[\"name/1789\",[50,47.097]],[\"comment/1789\",[]],[\"name/1790\",[51,47.097]],[\"comment/1790\",[]],[\"name/1791\",[52,47.097]],[\"comment/1791\",[]],[\"name/1792\",[53,47.097]],[\"comment/1792\",[]],[\"name/1793\",[54,47.097]],[\"comment/1793\",[]],[\"name/1794\",[55,47.097]],[\"comment/1794\",[]],[\"name/1795\",[56,47.097]],[\"comment/1795\",[]],[\"name/1796\",[57,47.097]],[\"comment/1796\",[]],[\"name/1797\",[58,47.097]],[\"comment/1797\",[]],[\"name/1798\",[59,47.097]],[\"comment/1798\",[]],[\"name/1799\",[60,47.097]],[\"comment/1799\",[]],[\"name/1800\",[61,47.097]],[\"comment/1800\",[]],[\"name/1801\",[62,47.097]],[\"comment/1801\",[]],[\"name/1802\",[63,46.796]],[\"comment/1802\",[]],[\"name/1803\",[64,46.796]],[\"comment/1803\",[]],[\"name/1804\",[65,47.097]],[\"comment/1804\",[]],[\"name/1805\",[66,43.221]],[\"comment/1805\",[]],[\"name/1806\",[67,46.649]],[\"comment/1806\",[]],[\"name/1807\",[68,46.649]],[\"comment/1807\",[]],[\"name/1808\",[69,47.097]],[\"comment/1808\",[]],[\"name/1809\",[70,46.945]],[\"comment/1809\",[]],[\"name/1810\",[71,46.945]],[\"comment/1810\",[]],[\"name/1811\",[72,47.097]],[\"comment/1811\",[]],[\"name/1812\",[73,47.097]],[\"comment/1812\",[]],[\"name/1813\",[74,47.097]],[\"comment/1813\",[]],[\"name/1814\",[75,46.945]],[\"comment/1814\",[]],[\"name/1815\",[76,46.796]],[\"comment/1815\",[]],[\"name/1816\",[77,46.796]],[\"comment/1816\",[]],[\"name/1817\",[495,73.883]],[\"comment/1817\",[]],[\"name/1818\",[9,46.22]],[\"comment/1818\",[]],[\"name/1819\",[104,60.298]],[\"comment/1819\",[]],[\"name/1820\",[105,59.743]],[\"comment/1820\",[]],[\"name/1821\",[15,46.945]],[\"comment/1821\",[]],[\"name/1822\",[16,44.087]],[\"comment/1822\",[]],[\"name/1823\",[126,59.743]],[\"comment/1823\",[]],[\"name/1824\",[130,54.107]],[\"comment/1824\",[]],[\"name/1825\",[108,59.743]],[\"comment/1825\",[]],[\"name/1826\",[109,56.533]],[\"comment/1826\",[]],[\"name/1827\",[25,44.668]],[\"comment/1827\",[]],[\"name/1828\",[685,64.498]],[\"comment/1828\",[]],[\"name/1829\",[443,63.664]],[\"comment/1829\",[]],[\"name/1830\",[686,70.205]],[\"comment/1830\",[]],[\"name/1831\",[687,70.205]],[\"comment/1831\",[]],[\"name/1832\",[688,70.205]],[\"comment/1832\",[]],[\"name/1833\",[689,70.205]],[\"comment/1833\",[]],[\"name/1834\",[690,70.205]],[\"comment/1834\",[]],[\"name/1835\",[691,70.205]],[\"comment/1835\",[]],[\"name/1836\",[692,70.205]],[\"comment/1836\",[]],[\"name/1837\",[218,68.773]],[\"comment/1837\",[]],[\"name/1838\",[693,70.205]],[\"comment/1838\",[]],[\"name/1839\",[166,59.743]],[\"comment/1839\",[]],[\"name/1840\",[694,70.205]],[\"comment/1840\",[]],[\"name/1841\",[695,70.205]],[\"comment/1841\",[]],[\"name/1842\",[696,70.205]],[\"comment/1842\",[]],[\"name/1843\",[697,70.205]],[\"comment/1843\",[]],[\"name/1844\",[698,70.205]],[\"comment/1844\",[]],[\"name/1845\",[167,60.298]],[\"comment/1845\",[]],[\"name/1846\",[1,44.315]],[\"comment/1846\",[]],[\"name/1847\",[699,68.773]],[\"comment/1847\",[]],[\"name/1848\",[700,68.773]],[\"comment/1848\",[]],[\"name/1849\",[143,59.216]],[\"comment/1849\",[]],[\"name/1850\",[701,67.521]],[\"comment/1850\",[]],[\"name/1851\",[702,70.205]],[\"comment/1851\",[]],[\"name/1852\",[188,56.933]],[\"comment/1852\",[]],[\"name/1853\",[703,70.205]],[\"comment/1853\",[]],[\"name/1854\",[110,59.743]],[\"comment/1854\",[]],[\"name/1855\",[111,57.35]],[\"comment/1855\",[]],[\"name/1856\",[112,59.743]],[\"comment/1856\",[]],[\"name/1857\",[18,52.946]],[\"comment/1857\",[]],[\"name/1858\",[1,44.315]],[\"comment/1858\",[]],[\"name/1859\",[113,60.298]],[\"comment/1859\",[]],[\"name/1860\",[25,44.668]],[\"comment/1860\",[]],[\"name/1861\",[114,60.298]],[\"comment/1861\",[]],[\"name/1862\",[115,60.298]],[\"comment/1862\",[]],[\"name/1863\",[116,57.35]],[\"comment/1863\",[]],[\"name/1864\",[117,60.298]],[\"comment/1864\",[]],[\"name/1865\",[118,60.298]],[\"comment/1865\",[]],[\"name/1866\",[119,57.785]],[\"comment/1866\",[]],[\"name/1867\",[120,60.298]],[\"comment/1867\",[]],[\"name/1868\",[121,60.298]],[\"comment/1868\",[]],[\"name/1869\",[122,56.933]],[\"comment/1869\",[]],[\"name/1870\",[66,43.221]],[\"comment/1870\",[]],[\"name/1871\",[123,58.716]],[\"comment/1871\",[]],[\"name/1872\",[124,60.298]],[\"comment/1872\",[]],[\"name/1873\",[125,60.298]],[\"comment/1873\",[]],[\"name/1874\",[127,60.298]],[\"comment/1874\",[]],[\"name/1875\",[128,54.419]],[\"comment/1875\",[]],[\"name/1876\",[129,54.419]],[\"comment/1876\",[]],[\"name/1877\",[131,60.298]],[\"comment/1877\",[]],[\"name/1878\",[132,60.298]],[\"comment/1878\",[]],[\"name/1879\",[133,60.298]],[\"comment/1879\",[]],[\"name/1880\",[134,60.298]],[\"comment/1880\",[]],[\"name/1881\",[135,59.743]],[\"comment/1881\",[]],[\"name/1882\",[136,60.298]],[\"comment/1882\",[]],[\"name/1883\",[137,60.298]],[\"comment/1883\",[]],[\"name/1884\",[138,59.743]],[\"comment/1884\",[]],[\"name/1885\",[139,60.298]],[\"comment/1885\",[]],[\"name/1886\",[140,60.298]],[\"comment/1886\",[]],[\"name/1887\",[141,60.298]],[\"comment/1887\",[]],[\"name/1888\",[142,60.298]],[\"comment/1888\",[]],[\"name/1889\",[144,59.743]],[\"comment/1889\",[]],[\"name/1890\",[145,59.743]],[\"comment/1890\",[]],[\"name/1891\",[146,59.743]],[\"comment/1891\",[]],[\"name/1892\",[147,59.743]],[\"comment/1892\",[]],[\"name/1893\",[148,60.298]],[\"comment/1893\",[]],[\"name/1894\",[149,60.298]],[\"comment/1894\",[]],[\"name/1895\",[150,60.298]],[\"comment/1895\",[]],[\"name/1896\",[151,60.298]],[\"comment/1896\",[]],[\"name/1897\",[152,60.298]],[\"comment/1897\",[]],[\"name/1898\",[153,60.298]],[\"comment/1898\",[]],[\"name/1899\",[154,60.298]],[\"comment/1899\",[]],[\"name/1900\",[155,60.298]],[\"comment/1900\",[]],[\"name/1901\",[156,58.239]],[\"comment/1901\",[]],[\"name/1902\",[157,60.298]],[\"comment/1902\",[]],[\"name/1903\",[158,60.298]],[\"comment/1903\",[]],[\"name/1904\",[1,44.315]],[\"comment/1904\",[]],[\"name/1905\",[159,56.933]],[\"comment/1905\",[]],[\"name/1906\",[160,56.933]],[\"comment/1906\",[]],[\"name/1907\",[161,60.298]],[\"comment/1907\",[]],[\"name/1908\",[162,60.298]],[\"comment/1908\",[]],[\"name/1909\",[163,60.298]],[\"comment/1909\",[]],[\"name/1910\",[164,56.933]],[\"comment/1910\",[]],[\"name/1911\",[165,59.743]],[\"comment/1911\",[]],[\"name/1912\",[168,60.298]],[\"comment/1912\",[]],[\"name/1913\",[169,60.298]],[\"comment/1913\",[]],[\"name/1914\",[170,60.298]],[\"comment/1914\",[]],[\"name/1915\",[171,60.298]],[\"comment/1915\",[]],[\"name/1916\",[172,57.35]],[\"comment/1916\",[]],[\"name/1917\",[173,59.743]],[\"comment/1917\",[]],[\"name/1918\",[174,59.743]],[\"comment/1918\",[]],[\"name/1919\",[26,50.524]],[\"comment/1919\",[]],[\"name/1920\",[22,49.502]],[\"comment/1920\",[]],[\"name/1921\",[41,52.675]],[\"comment/1921\",[]],[\"name/1922\",[42,52.675]],[\"comment/1922\",[]],[\"name/1923\",[175,53.804]],[\"comment/1923\",[]],[\"name/1924\",[176,59.216]],[\"comment/1924\",[]],[\"name/1925\",[177,59.743]],[\"comment/1925\",[]],[\"name/1926\",[178,59.743]],[\"comment/1926\",[]],[\"name/1927\",[179,59.743]],[\"comment/1927\",[]],[\"name/1928\",[180,59.743]],[\"comment/1928\",[]],[\"name/1929\",[181,59.743]],[\"comment/1929\",[]],[\"name/1930\",[182,59.743]],[\"comment/1930\",[]],[\"name/1931\",[183,59.743]],[\"comment/1931\",[]],[\"name/1932\",[184,59.743]],[\"comment/1932\",[]],[\"name/1933\",[185,58.239]],[\"comment/1933\",[]],[\"name/1934\",[186,59.743]],[\"comment/1934\",[]],[\"name/1935\",[187,59.743]],[\"comment/1935\",[]],[\"name/1936\",[189,59.216]],[\"comment/1936\",[]],[\"name/1937\",[190,59.743]],[\"comment/1937\",[]],[\"name/1938\",[191,59.743]],[\"comment/1938\",[]],[\"name/1939\",[192,59.743]],[\"comment/1939\",[]],[\"name/1940\",[193,59.743]],[\"comment/1940\",[]],[\"name/1941\",[194,59.743]],[\"comment/1941\",[]],[\"name/1942\",[34,53.509]],[\"comment/1942\",[]],[\"name/1943\",[32,53.509]],[\"comment/1943\",[]],[\"name/1944\",[33,53.509]],[\"comment/1944\",[]],[\"name/1945\",[44,47.097]],[\"comment/1945\",[]],[\"name/1946\",[45,47.097]],[\"comment/1946\",[]],[\"name/1947\",[46,47.097]],[\"comment/1947\",[]],[\"name/1948\",[47,47.097]],[\"comment/1948\",[]],[\"name/1949\",[48,47.097]],[\"comment/1949\",[]],[\"name/1950\",[49,47.097]],[\"comment/1950\",[]],[\"name/1951\",[50,47.097]],[\"comment/1951\",[]],[\"name/1952\",[51,47.097]],[\"comment/1952\",[]],[\"name/1953\",[52,47.097]],[\"comment/1953\",[]],[\"name/1954\",[53,47.097]],[\"comment/1954\",[]],[\"name/1955\",[54,47.097]],[\"comment/1955\",[]],[\"name/1956\",[55,47.097]],[\"comment/1956\",[]],[\"name/1957\",[56,47.097]],[\"comment/1957\",[]],[\"name/1958\",[57,47.097]],[\"comment/1958\",[]],[\"name/1959\",[58,47.097]],[\"comment/1959\",[]],[\"name/1960\",[59,47.097]],[\"comment/1960\",[]],[\"name/1961\",[60,47.097]],[\"comment/1961\",[]],[\"name/1962\",[61,47.097]],[\"comment/1962\",[]],[\"name/1963\",[62,47.097]],[\"comment/1963\",[]],[\"name/1964\",[63,46.796]],[\"comment/1964\",[]],[\"name/1965\",[64,46.796]],[\"comment/1965\",[]],[\"name/1966\",[65,47.097]],[\"comment/1966\",[]],[\"name/1967\",[66,43.221]],[\"comment/1967\",[]],[\"name/1968\",[67,46.649]],[\"comment/1968\",[]],[\"name/1969\",[68,46.649]],[\"comment/1969\",[]],[\"name/1970\",[69,47.097]],[\"comment/1970\",[]],[\"name/1971\",[70,46.945]],[\"comment/1971\",[]],[\"name/1972\",[71,46.945]],[\"comment/1972\",[]],[\"name/1973\",[72,47.097]],[\"comment/1973\",[]],[\"name/1974\",[73,47.097]],[\"comment/1974\",[]],[\"name/1975\",[74,47.097]],[\"comment/1975\",[]],[\"name/1976\",[75,46.945]],[\"comment/1976\",[]],[\"name/1977\",[76,46.796]],[\"comment/1977\",[]],[\"name/1978\",[77,46.796]],[\"comment/1978\",[]],[\"name/1979\",[110,59.743]],[\"comment/1979\",[]],[\"name/1980\",[704,84.871]],[\"comment/1980\",[]],[\"name/1981\",[705,84.871]],[\"comment/1981\",[]],[\"name/1982\",[706,84.871]],[\"comment/1982\",[]],[\"name/1983\",[13,54.107]],[\"comment/1983\",[]],[\"name/1984\",[707,84.871]],[\"comment/1984\",[]],[\"name/1985\",[708,84.871]],[\"comment/1985\",[]],[\"name/1986\",[709,84.871]],[\"comment/1986\",[]],[\"name/1987\",[710,84.871]],[\"comment/1987\",[]],[\"name/1988\",[711,84.871]],[\"comment/1988\",[]],[\"name/1989\",[712,84.871]],[\"comment/1989\",[]],[\"name/1990\",[443,63.664]],[\"comment/1990\",[]],[\"name/1991\",[96,67.521]],[\"comment/1991\",[]],[\"name/1992\",[713,84.871]],[\"comment/1992\",[]],[\"name/1993\",[714,84.871]],[\"comment/1993\",[]],[\"name/1994\",[715,84.871]],[\"comment/1994\",[]],[\"name/1995\",[6,60.298]],[\"comment/1995\",[]],[\"name/1996\",[230,68.773]],[\"comment/1996\",[]],[\"name/1997\",[716,84.871]],[\"comment/1997\",[]],[\"name/1998\",[717,84.871]],[\"comment/1998\",[]],[\"name/1999\",[718,84.871]],[\"comment/1999\",[]],[\"name/2000\",[719,84.871]],[\"comment/2000\",[]],[\"name/2001\",[22,49.502]],[\"comment/2001\",[]],[\"name/2002\",[720,84.871]],[\"comment/2002\",[]],[\"name/2003\",[9,46.22]],[\"comment/2003\",[]],[\"name/2004\",[721,84.871]],[\"comment/2004\",[]],[\"name/2005\",[6,60.298]],[\"comment/2005\",[]],[\"name/2006\",[260,65.408]],[\"comment/2006\",[]],[\"name/2007\",[597,79.762]],[\"comment/2007\",[]],[\"name/2008\",[598,79.762]],[\"comment/2008\",[]],[\"name/2009\",[366,73.883]],[\"comment/2009\",[]],[\"name/2010\",[116,57.35]],[\"comment/2010\",[]],[\"name/2011\",[122,56.933]],[\"comment/2011\",[]],[\"name/2012\",[601,79.762]],[\"comment/2012\",[]],[\"name/2013\",[722,84.871]],[\"comment/2013\",[]],[\"name/2014\",[66,43.221]],[\"comment/2014\",[]],[\"name/2015\",[723,84.871]],[\"comment/2015\",[]],[\"name/2016\",[254,79.762]],[\"comment/2016\",[]],[\"name/2017\",[0,59.743]],[\"comment/2017\",[]],[\"name/2018\",[724,84.871]],[\"comment/2018\",[]],[\"name/2019\",[725,84.871]],[\"comment/2019\",[]],[\"name/2020\",[310,66.409]],[\"comment/2020\",[]],[\"name/2021\",[9,46.22]],[\"comment/2021\",[]],[\"name/2022\",[726,79.762]],[\"comment/2022\",[]],[\"name/2023\",[727,79.762]],[\"comment/2023\",[]],[\"name/2024\",[728,79.762]],[\"comment/2024\",[]],[\"name/2025\",[729,79.762]],[\"comment/2025\",[]],[\"name/2026\",[1,44.315]],[\"comment/2026\",[]],[\"name/2027\",[66,43.221]],[\"comment/2027\",[]],[\"name/2028\",[310,66.409]],[\"comment/2028\",[]],[\"name/2029\",[730,79.762]],[\"comment/2029\",[]],[\"name/2030\",[731,79.762]],[\"comment/2030\",[]],[\"name/2031\",[732,79.762]],[\"comment/2031\",[]],[\"name/2032\",[733,79.762]],[\"comment/2032\",[]],[\"name/2033\",[22,49.502]],[\"comment/2033\",[]],[\"name/2034\",[15,46.945]],[\"comment/2034\",[]],[\"name/2035\",[16,44.087]],[\"comment/2035\",[]],[\"name/2036\",[734,79.762]],[\"comment/2036\",[]],[\"name/2037\",[96,67.521]],[\"comment/2037\",[]],[\"name/2038\",[340,70.205]],[\"comment/2038\",[]],[\"name/2039\",[735,79.762]],[\"comment/2039\",[]],[\"name/2040\",[736,79.762]],[\"comment/2040\",[]],[\"name/2041\",[122,56.933]],[\"comment/2041\",[]],[\"name/2042\",[25,44.668]],[\"comment/2042\",[]],[\"name/2043\",[737,79.762]],[\"comment/2043\",[]],[\"name/2044\",[469,70.205]],[\"comment/2044\",[]],[\"name/2045\",[738,79.762]],[\"comment/2045\",[]],[\"name/2046\",[130,54.107]],[\"comment/2046\",[]],[\"name/2047\",[42,52.675]],[\"comment/2047\",[]],[\"name/2048\",[41,52.675]],[\"comment/2048\",[]],[\"name/2049\",[739,79.762]],[\"comment/2049\",[]],[\"name/2050\",[38,59.743]],[\"comment/2050\",[]],[\"name/2051\",[172,57.35]],[\"comment/2051\",[]],[\"name/2052\",[740,79.762]],[\"comment/2052\",[]],[\"name/2053\",[164,56.933]],[\"comment/2053\",[]],[\"name/2054\",[741,79.762]],[\"comment/2054\",[]],[\"name/2055\",[742,79.762]],[\"comment/2055\",[]],[\"name/2056\",[743,79.762]],[\"comment/2056\",[]],[\"name/2057\",[744,79.762]],[\"comment/2057\",[]],[\"name/2058\",[129,54.419]],[\"comment/2058\",[]],[\"name/2059\",[745,79.762]],[\"comment/2059\",[]],[\"name/2060\",[44,47.097]],[\"comment/2060\",[]],[\"name/2061\",[45,47.097]],[\"comment/2061\",[]],[\"name/2062\",[46,47.097]],[\"comment/2062\",[]],[\"name/2063\",[47,47.097]],[\"comment/2063\",[]],[\"name/2064\",[48,47.097]],[\"comment/2064\",[]],[\"name/2065\",[49,47.097]],[\"comment/2065\",[]],[\"name/2066\",[50,47.097]],[\"comment/2066\",[]],[\"name/2067\",[51,47.097]],[\"comment/2067\",[]],[\"name/2068\",[52,47.097]],[\"comment/2068\",[]],[\"name/2069\",[53,47.097]],[\"comment/2069\",[]],[\"name/2070\",[54,47.097]],[\"comment/2070\",[]],[\"name/2071\",[55,47.097]],[\"comment/2071\",[]],[\"name/2072\",[56,47.097]],[\"comment/2072\",[]],[\"name/2073\",[57,47.097]],[\"comment/2073\",[]],[\"name/2074\",[58,47.097]],[\"comment/2074\",[]],[\"name/2075\",[59,47.097]],[\"comment/2075\",[]],[\"name/2076\",[60,47.097]],[\"comment/2076\",[]],[\"name/2077\",[61,47.097]],[\"comment/2077\",[]],[\"name/2078\",[62,47.097]],[\"comment/2078\",[]],[\"name/2079\",[63,46.796]],[\"comment/2079\",[]],[\"name/2080\",[64,46.796]],[\"comment/2080\",[]],[\"name/2081\",[65,47.097]],[\"comment/2081\",[]],[\"name/2082\",[66,43.221]],[\"comment/2082\",[]],[\"name/2083\",[67,46.649]],[\"comment/2083\",[]],[\"name/2084\",[68,46.649]],[\"comment/2084\",[]],[\"name/2085\",[69,47.097]],[\"comment/2085\",[]],[\"name/2086\",[70,46.945]],[\"comment/2086\",[]],[\"name/2087\",[71,46.945]],[\"comment/2087\",[]],[\"name/2088\",[72,47.097]],[\"comment/2088\",[]],[\"name/2089\",[73,47.097]],[\"comment/2089\",[]],[\"name/2090\",[74,47.097]],[\"comment/2090\",[]],[\"name/2091\",[75,46.945]],[\"comment/2091\",[]],[\"name/2092\",[76,46.796]],[\"comment/2092\",[]],[\"name/2093\",[77,46.796]],[\"comment/2093\",[]],[\"name/2094\",[746,84.871]],[\"comment/2094\",[]],[\"name/2095\",[747,84.871]],[\"comment/2095\",[]],[\"name/2096\",[0,59.743]],[\"comment/2096\",[]],[\"name/2097\",[493,73.883]],[\"comment/2097\",[]],[\"name/2098\",[9,46.22]],[\"comment/2098\",[]],[\"name/2099\",[104,60.298]],[\"comment/2099\",[]],[\"name/2100\",[105,59.743]],[\"comment/2100\",[]],[\"name/2101\",[15,46.945]],[\"comment/2101\",[]],[\"name/2102\",[16,44.087]],[\"comment/2102\",[]],[\"name/2103\",[748,76.396]],[\"comment/2103\",[]],[\"name/2104\",[62,47.097]],[\"comment/2104\",[]],[\"name/2105\",[109,56.533]],[\"comment/2105\",[]],[\"name/2106\",[749,70.205]],[\"comment/2106\",[]],[\"name/2107\",[140,60.298]],[\"comment/2107\",[]],[\"name/2108\",[25,44.668]],[\"comment/2108\",[]],[\"name/2109\",[110,59.743]],[\"comment/2109\",[]],[\"name/2110\",[111,57.35]],[\"comment/2110\",[]],[\"name/2111\",[112,59.743]],[\"comment/2111\",[]],[\"name/2112\",[18,52.946]],[\"comment/2112\",[]],[\"name/2113\",[1,44.315]],[\"comment/2113\",[]],[\"name/2114\",[113,60.298]],[\"comment/2114\",[]],[\"name/2115\",[25,44.668]],[\"comment/2115\",[]],[\"name/2116\",[114,60.298]],[\"comment/2116\",[]],[\"name/2117\",[115,60.298]],[\"comment/2117\",[]],[\"name/2118\",[116,57.35]],[\"comment/2118\",[]],[\"name/2119\",[117,60.298]],[\"comment/2119\",[]],[\"name/2120\",[118,60.298]],[\"comment/2120\",[]],[\"name/2121\",[119,57.785]],[\"comment/2121\",[]],[\"name/2122\",[120,60.298]],[\"comment/2122\",[]],[\"name/2123\",[121,60.298]],[\"comment/2123\",[]],[\"name/2124\",[122,56.933]],[\"comment/2124\",[]],[\"name/2125\",[66,43.221]],[\"comment/2125\",[]],[\"name/2126\",[123,58.716]],[\"comment/2126\",[]],[\"name/2127\",[124,60.298]],[\"comment/2127\",[]],[\"name/2128\",[125,60.298]],[\"comment/2128\",[]],[\"name/2129\",[126,59.743]],[\"comment/2129\",[]],[\"name/2130\",[127,60.298]],[\"comment/2130\",[]],[\"name/2131\",[128,54.419]],[\"comment/2131\",[]],[\"name/2132\",[129,54.419]],[\"comment/2132\",[]],[\"name/2133\",[130,54.107]],[\"comment/2133\",[]],[\"name/2134\",[131,60.298]],[\"comment/2134\",[]],[\"name/2135\",[132,60.298]],[\"comment/2135\",[]],[\"name/2136\",[133,60.298]],[\"comment/2136\",[]],[\"name/2137\",[134,60.298]],[\"comment/2137\",[]],[\"name/2138\",[135,59.743]],[\"comment/2138\",[]],[\"name/2139\",[136,60.298]],[\"comment/2139\",[]],[\"name/2140\",[137,60.298]],[\"comment/2140\",[]],[\"name/2141\",[138,59.743]],[\"comment/2141\",[]],[\"name/2142\",[139,60.298]],[\"comment/2142\",[]],[\"name/2143\",[141,60.298]],[\"comment/2143\",[]],[\"name/2144\",[142,60.298]],[\"comment/2144\",[]],[\"name/2145\",[143,59.216]],[\"comment/2145\",[]],[\"name/2146\",[144,59.743]],[\"comment/2146\",[]],[\"name/2147\",[145,59.743]],[\"comment/2147\",[]],[\"name/2148\",[146,59.743]],[\"comment/2148\",[]],[\"name/2149\",[147,59.743]],[\"comment/2149\",[]],[\"name/2150\",[148,60.298]],[\"comment/2150\",[]],[\"name/2151\",[149,60.298]],[\"comment/2151\",[]],[\"name/2152\",[150,60.298]],[\"comment/2152\",[]],[\"name/2153\",[151,60.298]],[\"comment/2153\",[]],[\"name/2154\",[152,60.298]],[\"comment/2154\",[]],[\"name/2155\",[153,60.298]],[\"comment/2155\",[]],[\"name/2156\",[154,60.298]],[\"comment/2156\",[]],[\"name/2157\",[155,60.298]],[\"comment/2157\",[]],[\"name/2158\",[156,58.239]],[\"comment/2158\",[]],[\"name/2159\",[157,60.298]],[\"comment/2159\",[]],[\"name/2160\",[158,60.298]],[\"comment/2160\",[]],[\"name/2161\",[1,44.315]],[\"comment/2161\",[]],[\"name/2162\",[159,56.933]],[\"comment/2162\",[]],[\"name/2163\",[160,56.933]],[\"comment/2163\",[]],[\"name/2164\",[161,60.298]],[\"comment/2164\",[]],[\"name/2165\",[162,60.298]],[\"comment/2165\",[]],[\"name/2166\",[163,60.298]],[\"comment/2166\",[]],[\"name/2167\",[164,56.933]],[\"comment/2167\",[]],[\"name/2168\",[165,59.743]],[\"comment/2168\",[]],[\"name/2169\",[166,59.743]],[\"comment/2169\",[]],[\"name/2170\",[167,60.298]],[\"comment/2170\",[]],[\"name/2171\",[168,60.298]],[\"comment/2171\",[]],[\"name/2172\",[169,60.298]],[\"comment/2172\",[]],[\"name/2173\",[170,60.298]],[\"comment/2173\",[]],[\"name/2174\",[171,60.298]],[\"comment/2174\",[]],[\"name/2175\",[172,57.35]],[\"comment/2175\",[]],[\"name/2176\",[173,59.743]],[\"comment/2176\",[]],[\"name/2177\",[174,59.743]],[\"comment/2177\",[]],[\"name/2178\",[26,50.524]],[\"comment/2178\",[]],[\"name/2179\",[22,49.502]],[\"comment/2179\",[]],[\"name/2180\",[41,52.675]],[\"comment/2180\",[]],[\"name/2181\",[42,52.675]],[\"comment/2181\",[]],[\"name/2182\",[175,53.804]],[\"comment/2182\",[]],[\"name/2183\",[176,59.216]],[\"comment/2183\",[]],[\"name/2184\",[177,59.743]],[\"comment/2184\",[]],[\"name/2185\",[178,59.743]],[\"comment/2185\",[]],[\"name/2186\",[179,59.743]],[\"comment/2186\",[]],[\"name/2187\",[180,59.743]],[\"comment/2187\",[]],[\"name/2188\",[181,59.743]],[\"comment/2188\",[]],[\"name/2189\",[182,59.743]],[\"comment/2189\",[]],[\"name/2190\",[183,59.743]],[\"comment/2190\",[]],[\"name/2191\",[184,59.743]],[\"comment/2191\",[]],[\"name/2192\",[108,59.743]],[\"comment/2192\",[]],[\"name/2193\",[185,58.239]],[\"comment/2193\",[]],[\"name/2194\",[186,59.743]],[\"comment/2194\",[]],[\"name/2195\",[187,59.743]],[\"comment/2195\",[]],[\"name/2196\",[188,56.933]],[\"comment/2196\",[]],[\"name/2197\",[189,59.216]],[\"comment/2197\",[]],[\"name/2198\",[190,59.743]],[\"comment/2198\",[]],[\"name/2199\",[191,59.743]],[\"comment/2199\",[]],[\"name/2200\",[192,59.743]],[\"comment/2200\",[]],[\"name/2201\",[193,59.743]],[\"comment/2201\",[]],[\"name/2202\",[194,59.743]],[\"comment/2202\",[]],[\"name/2203\",[34,53.509]],[\"comment/2203\",[]],[\"name/2204\",[32,53.509]],[\"comment/2204\",[]],[\"name/2205\",[33,53.509]],[\"comment/2205\",[]],[\"name/2206\",[44,47.097]],[\"comment/2206\",[]],[\"name/2207\",[45,47.097]],[\"comment/2207\",[]],[\"name/2208\",[46,47.097]],[\"comment/2208\",[]],[\"name/2209\",[47,47.097]],[\"comment/2209\",[]],[\"name/2210\",[48,47.097]],[\"comment/2210\",[]],[\"name/2211\",[49,47.097]],[\"comment/2211\",[]],[\"name/2212\",[50,47.097]],[\"comment/2212\",[]],[\"name/2213\",[51,47.097]],[\"comment/2213\",[]],[\"name/2214\",[52,47.097]],[\"comment/2214\",[]],[\"name/2215\",[53,47.097]],[\"comment/2215\",[]],[\"name/2216\",[54,47.097]],[\"comment/2216\",[]],[\"name/2217\",[55,47.097]],[\"comment/2217\",[]],[\"name/2218\",[56,47.097]],[\"comment/2218\",[]],[\"name/2219\",[57,47.097]],[\"comment/2219\",[]],[\"name/2220\",[58,47.097]],[\"comment/2220\",[]],[\"name/2221\",[59,47.097]],[\"comment/2221\",[]],[\"name/2222\",[60,47.097]],[\"comment/2222\",[]],[\"name/2223\",[61,47.097]],[\"comment/2223\",[]],[\"name/2224\",[63,46.796]],[\"comment/2224\",[]],[\"name/2225\",[64,46.796]],[\"comment/2225\",[]],[\"name/2226\",[65,47.097]],[\"comment/2226\",[]],[\"name/2227\",[66,43.221]],[\"comment/2227\",[]],[\"name/2228\",[67,46.649]],[\"comment/2228\",[]],[\"name/2229\",[68,46.649]],[\"comment/2229\",[]],[\"name/2230\",[69,47.097]],[\"comment/2230\",[]],[\"name/2231\",[70,46.945]],[\"comment/2231\",[]],[\"name/2232\",[71,46.945]],[\"comment/2232\",[]],[\"name/2233\",[72,47.097]],[\"comment/2233\",[]],[\"name/2234\",[73,47.097]],[\"comment/2234\",[]],[\"name/2235\",[74,47.097]],[\"comment/2235\",[]],[\"name/2236\",[75,46.945]],[\"comment/2236\",[]],[\"name/2237\",[76,46.796]],[\"comment/2237\",[]],[\"name/2238\",[77,46.796]],[\"comment/2238\",[]],[\"name/2239\",[750,84.871]],[\"comment/2239\",[]],[\"name/2240\",[432,79.762]],[\"comment/2240\",[]],[\"name/2241\",[685,64.498]],[\"comment/2241\",[]],[\"name/2242\",[751,76.396]],[\"comment/2242\",[]],[\"name/2243\",[752,71.876]],[\"comment/2243\",[]],[\"name/2244\",[753,71.876]],[\"comment/2244\",[]],[\"name/2245\",[123,58.716]],[\"comment/2245\",[]],[\"name/2246\",[119,57.785]],[\"comment/2246\",[]],[\"name/2247\",[754,76.396]],[\"comment/2247\",[]],[\"name/2248\",[370,66.409]],[\"comment/2248\",[]],[\"name/2249\",[111,57.35]],[\"comment/2249\",[]],[\"name/2250\",[416,63.664]],[\"comment/2250\",[]],[\"name/2251\",[0,59.743]],[\"comment/2251\",[]],[\"name/2252\",[415,64.498]],[\"comment/2252\",[]],[\"name/2253\",[17,57.785]],[\"comment/2253\",[]],[\"name/2254\",[755,70.205]],[\"comment/2254\",[]],[\"name/2255\",[756,70.205]],[\"comment/2255\",[]],[\"name/2256\",[500,73.883]],[\"comment/2256\",[]],[\"name/2257\",[9,46.22]],[\"comment/2257\",[]],[\"name/2258\",[757,79.762]],[\"comment/2258\",[]],[\"name/2259\",[122,56.933]],[\"comment/2259\",[]],[\"name/2260\",[8,57.35]],[\"comment/2260\",[]],[\"name/2261\",[758,79.762]],[\"comment/2261\",[]],[\"name/2262\",[759,79.762]],[\"comment/2262\",[]],[\"name/2263\",[760,79.762]],[\"comment/2263\",[]],[\"name/2264\",[10,58.239]],[\"comment/2264\",[]],[\"name/2265\",[188,56.933]],[\"comment/2265\",[]],[\"name/2266\",[104,60.298]],[\"comment/2266\",[]],[\"name/2267\",[105,59.743]],[\"comment/2267\",[]],[\"name/2268\",[15,46.945]],[\"comment/2268\",[]],[\"name/2269\",[16,44.087]],[\"comment/2269\",[]],[\"name/2270\",[697,70.205]],[\"comment/2270\",[]],[\"name/2271\",[761,79.762]],[\"comment/2271\",[]],[\"name/2272\",[25,44.668]],[\"comment/2272\",[]],[\"name/2273\",[762,84.871]],[\"comment/2273\",[]],[\"name/2274\",[763,76.396]],[\"comment/2274\",[]],[\"name/2275\",[764,76.396]],[\"comment/2275\",[]],[\"name/2276\",[172,57.35]],[\"comment/2276\",[]],[\"name/2277\",[155,60.298]],[\"comment/2277\",[]],[\"name/2278\",[689,70.205]],[\"comment/2278\",[]],[\"name/2279\",[765,79.762]],[\"comment/2279\",[]],[\"name/2280\",[766,79.762]],[\"comment/2280\",[]],[\"name/2281\",[767,79.762]],[\"comment/2281\",[]],[\"name/2282\",[768,79.762]],[\"comment/2282\",[]],[\"name/2283\",[62,47.097]],[\"comment/2283\",[]],[\"name/2284\",[136,60.298]],[\"comment/2284\",[]],[\"name/2285\",[126,59.743]],[\"comment/2285\",[]],[\"name/2286\",[769,79.762]],[\"comment/2286\",[]],[\"name/2287\",[150,60.298]],[\"comment/2287\",[]],[\"name/2288\",[702,70.205]],[\"comment/2288\",[]],[\"name/2289\",[695,70.205]],[\"comment/2289\",[]],[\"name/2290\",[143,59.216]],[\"comment/2290\",[]],[\"name/2291\",[701,67.521]],[\"comment/2291\",[]],[\"name/2292\",[130,54.107]],[\"comment/2292\",[]],[\"name/2293\",[770,76.396]],[\"comment/2293\",[]],[\"name/2294\",[771,79.762]],[\"comment/2294\",[]],[\"name/2295\",[168,60.298]],[\"comment/2295\",[]],[\"name/2296\",[169,60.298]],[\"comment/2296\",[]],[\"name/2297\",[137,60.298]],[\"comment/2297\",[]],[\"name/2298\",[158,60.298]],[\"comment/2298\",[]],[\"name/2299\",[1,44.315]],[\"comment/2299\",[]],[\"name/2300\",[159,56.933]],[\"comment/2300\",[]],[\"name/2301\",[160,56.933]],[\"comment/2301\",[]],[\"name/2302\",[46,47.097]],[\"comment/2302\",[]],[\"name/2303\",[772,79.762]],[\"comment/2303\",[]],[\"name/2304\",[773,79.762]],[\"comment/2304\",[]],[\"name/2305\",[774,79.762]],[\"comment/2305\",[]],[\"name/2306\",[775,79.762]],[\"comment/2306\",[]],[\"name/2307\",[776,79.762]],[\"comment/2307\",[]],[\"name/2308\",[777,79.762]],[\"comment/2308\",[]],[\"name/2309\",[778,79.762]],[\"comment/2309\",[]],[\"name/2310\",[779,79.762]],[\"comment/2310\",[]],[\"name/2311\",[780,79.762]],[\"comment/2311\",[]],[\"name/2312\",[781,79.762]],[\"comment/2312\",[]],[\"name/2313\",[782,79.762]],[\"comment/2313\",[]],[\"name/2314\",[109,56.533]],[\"comment/2314\",[]],[\"name/2315\",[783,79.762]],[\"comment/2315\",[]],[\"name/2316\",[784,79.762]],[\"comment/2316\",[]],[\"name/2317\",[785,79.762]],[\"comment/2317\",[]],[\"name/2318\",[786,79.762]],[\"comment/2318\",[]],[\"name/2319\",[787,79.762]],[\"comment/2319\",[]],[\"name/2320\",[788,79.762]],[\"comment/2320\",[]],[\"name/2321\",[749,70.205]],[\"comment/2321\",[]],[\"name/2322\",[789,79.762]],[\"comment/2322\",[]],[\"name/2323\",[790,73.883]],[\"comment/2323\",[]],[\"name/2324\",[791,79.762]],[\"comment/2324\",[]],[\"name/2325\",[703,70.205]],[\"comment/2325\",[]],[\"name/2326\",[685,64.498]],[\"comment/2326\",[]],[\"name/2327\",[443,63.664]],[\"comment/2327\",[]],[\"name/2328\",[686,70.205]],[\"comment/2328\",[]],[\"name/2329\",[687,70.205]],[\"comment/2329\",[]],[\"name/2330\",[688,70.205]],[\"comment/2330\",[]],[\"name/2331\",[690,70.205]],[\"comment/2331\",[]],[\"name/2332\",[691,70.205]],[\"comment/2332\",[]],[\"name/2333\",[692,70.205]],[\"comment/2333\",[]],[\"name/2334\",[218,68.773]],[\"comment/2334\",[]],[\"name/2335\",[693,70.205]],[\"comment/2335\",[]],[\"name/2336\",[166,59.743]],[\"comment/2336\",[]],[\"name/2337\",[694,70.205]],[\"comment/2337\",[]],[\"name/2338\",[696,70.205]],[\"comment/2338\",[]],[\"name/2339\",[698,70.205]],[\"comment/2339\",[]],[\"name/2340\",[167,60.298]],[\"comment/2340\",[]],[\"name/2341\",[1,44.315]],[\"comment/2341\",[]],[\"name/2342\",[699,68.773]],[\"comment/2342\",[]],[\"name/2343\",[700,68.773]],[\"comment/2343\",[]],[\"name/2344\",[188,56.933]],[\"comment/2344\",[]],[\"name/2345\",[110,59.743]],[\"comment/2345\",[]],[\"name/2346\",[111,57.35]],[\"comment/2346\",[]],[\"name/2347\",[112,59.743]],[\"comment/2347\",[]],[\"name/2348\",[18,52.946]],[\"comment/2348\",[]],[\"name/2349\",[1,44.315]],[\"comment/2349\",[]],[\"name/2350\",[113,60.298]],[\"comment/2350\",[]],[\"name/2351\",[25,44.668]],[\"comment/2351\",[]],[\"name/2352\",[114,60.298]],[\"comment/2352\",[]],[\"name/2353\",[115,60.298]],[\"comment/2353\",[]],[\"name/2354\",[116,57.35]],[\"comment/2354\",[]],[\"name/2355\",[117,60.298]],[\"comment/2355\",[]],[\"name/2356\",[118,60.298]],[\"comment/2356\",[]],[\"name/2357\",[119,57.785]],[\"comment/2357\",[]],[\"name/2358\",[120,60.298]],[\"comment/2358\",[]],[\"name/2359\",[121,60.298]],[\"comment/2359\",[]],[\"name/2360\",[122,56.933]],[\"comment/2360\",[]],[\"name/2361\",[66,43.221]],[\"comment/2361\",[]],[\"name/2362\",[123,58.716]],[\"comment/2362\",[]],[\"name/2363\",[124,60.298]],[\"comment/2363\",[]],[\"name/2364\",[125,60.298]],[\"comment/2364\",[]],[\"name/2365\",[127,60.298]],[\"comment/2365\",[]],[\"name/2366\",[128,54.419]],[\"comment/2366\",[]],[\"name/2367\",[129,54.419]],[\"comment/2367\",[]],[\"name/2368\",[131,60.298]],[\"comment/2368\",[]],[\"name/2369\",[132,60.298]],[\"comment/2369\",[]],[\"name/2370\",[133,60.298]],[\"comment/2370\",[]],[\"name/2371\",[134,60.298]],[\"comment/2371\",[]],[\"name/2372\",[135,59.743]],[\"comment/2372\",[]],[\"name/2373\",[138,59.743]],[\"comment/2373\",[]],[\"name/2374\",[139,60.298]],[\"comment/2374\",[]],[\"name/2375\",[140,60.298]],[\"comment/2375\",[]],[\"name/2376\",[141,60.298]],[\"comment/2376\",[]],[\"name/2377\",[142,60.298]],[\"comment/2377\",[]],[\"name/2378\",[144,59.743]],[\"comment/2378\",[]],[\"name/2379\",[145,59.743]],[\"comment/2379\",[]],[\"name/2380\",[146,59.743]],[\"comment/2380\",[]],[\"name/2381\",[147,59.743]],[\"comment/2381\",[]],[\"name/2382\",[148,60.298]],[\"comment/2382\",[]],[\"name/2383\",[149,60.298]],[\"comment/2383\",[]],[\"name/2384\",[151,60.298]],[\"comment/2384\",[]],[\"name/2385\",[152,60.298]],[\"comment/2385\",[]],[\"name/2386\",[153,60.298]],[\"comment/2386\",[]],[\"name/2387\",[154,60.298]],[\"comment/2387\",[]],[\"name/2388\",[156,58.239]],[\"comment/2388\",[]],[\"name/2389\",[157,60.298]],[\"comment/2389\",[]],[\"name/2390\",[161,60.298]],[\"comment/2390\",[]],[\"name/2391\",[162,60.298]],[\"comment/2391\",[]],[\"name/2392\",[163,60.298]],[\"comment/2392\",[]],[\"name/2393\",[164,56.933]],[\"comment/2393\",[]],[\"name/2394\",[165,59.743]],[\"comment/2394\",[]],[\"name/2395\",[170,60.298]],[\"comment/2395\",[]],[\"name/2396\",[171,60.298]],[\"comment/2396\",[]],[\"name/2397\",[173,59.743]],[\"comment/2397\",[]],[\"name/2398\",[174,59.743]],[\"comment/2398\",[]],[\"name/2399\",[26,50.524]],[\"comment/2399\",[]],[\"name/2400\",[22,49.502]],[\"comment/2400\",[]],[\"name/2401\",[41,52.675]],[\"comment/2401\",[]],[\"name/2402\",[42,52.675]],[\"comment/2402\",[]],[\"name/2403\",[175,53.804]],[\"comment/2403\",[]],[\"name/2404\",[176,59.216]],[\"comment/2404\",[]],[\"name/2405\",[177,59.743]],[\"comment/2405\",[]],[\"name/2406\",[178,59.743]],[\"comment/2406\",[]],[\"name/2407\",[179,59.743]],[\"comment/2407\",[]],[\"name/2408\",[180,59.743]],[\"comment/2408\",[]],[\"name/2409\",[181,59.743]],[\"comment/2409\",[]],[\"name/2410\",[182,59.743]],[\"comment/2410\",[]],[\"name/2411\",[183,59.743]],[\"comment/2411\",[]],[\"name/2412\",[184,59.743]],[\"comment/2412\",[]],[\"name/2413\",[108,59.743]],[\"comment/2413\",[]],[\"name/2414\",[185,58.239]],[\"comment/2414\",[]],[\"name/2415\",[186,59.743]],[\"comment/2415\",[]],[\"name/2416\",[187,59.743]],[\"comment/2416\",[]],[\"name/2417\",[189,59.216]],[\"comment/2417\",[]],[\"name/2418\",[190,59.743]],[\"comment/2418\",[]],[\"name/2419\",[191,59.743]],[\"comment/2419\",[]],[\"name/2420\",[192,59.743]],[\"comment/2420\",[]],[\"name/2421\",[193,59.743]],[\"comment/2421\",[]],[\"name/2422\",[194,59.743]],[\"comment/2422\",[]],[\"name/2423\",[34,53.509]],[\"comment/2423\",[]],[\"name/2424\",[32,53.509]],[\"comment/2424\",[]],[\"name/2425\",[33,53.509]],[\"comment/2425\",[]],[\"name/2426\",[44,47.097]],[\"comment/2426\",[]],[\"name/2427\",[45,47.097]],[\"comment/2427\",[]],[\"name/2428\",[47,47.097]],[\"comment/2428\",[]],[\"name/2429\",[48,47.097]],[\"comment/2429\",[]],[\"name/2430\",[49,47.097]],[\"comment/2430\",[]],[\"name/2431\",[50,47.097]],[\"comment/2431\",[]],[\"name/2432\",[51,47.097]],[\"comment/2432\",[]],[\"name/2433\",[52,47.097]],[\"comment/2433\",[]],[\"name/2434\",[53,47.097]],[\"comment/2434\",[]],[\"name/2435\",[54,47.097]],[\"comment/2435\",[]],[\"name/2436\",[55,47.097]],[\"comment/2436\",[]],[\"name/2437\",[56,47.097]],[\"comment/2437\",[]],[\"name/2438\",[57,47.097]],[\"comment/2438\",[]],[\"name/2439\",[58,47.097]],[\"comment/2439\",[]],[\"name/2440\",[59,47.097]],[\"comment/2440\",[]],[\"name/2441\",[60,47.097]],[\"comment/2441\",[]],[\"name/2442\",[61,47.097]],[\"comment/2442\",[]],[\"name/2443\",[63,46.796]],[\"comment/2443\",[]],[\"name/2444\",[64,46.796]],[\"comment/2444\",[]],[\"name/2445\",[65,47.097]],[\"comment/2445\",[]],[\"name/2446\",[66,43.221]],[\"comment/2446\",[]],[\"name/2447\",[67,46.649]],[\"comment/2447\",[]],[\"name/2448\",[68,46.649]],[\"comment/2448\",[]],[\"name/2449\",[69,47.097]],[\"comment/2449\",[]],[\"name/2450\",[70,46.945]],[\"comment/2450\",[]],[\"name/2451\",[71,46.945]],[\"comment/2451\",[]],[\"name/2452\",[72,47.097]],[\"comment/2452\",[]],[\"name/2453\",[73,47.097]],[\"comment/2453\",[]],[\"name/2454\",[74,47.097]],[\"comment/2454\",[]],[\"name/2455\",[75,46.945]],[\"comment/2455\",[]],[\"name/2456\",[76,46.796]],[\"comment/2456\",[]],[\"name/2457\",[77,46.796]],[\"comment/2457\",[]],[\"name/2458\",[501,73.883]],[\"comment/2458\",[]],[\"name/2459\",[8,57.35]],[\"comment/2459\",[]],[\"name/2460\",[9,46.22]],[\"comment/2460\",[]],[\"name/2461\",[10,58.239]],[\"comment/2461\",[]],[\"name/2462\",[13,54.107]],[\"comment/2462\",[]],[\"name/2463\",[14,59.743]],[\"comment/2463\",[]],[\"name/2464\",[15,46.945]],[\"comment/2464\",[]],[\"name/2465\",[16,44.087]],[\"comment/2465\",[]],[\"name/2466\",[18,52.946]],[\"comment/2466\",[]],[\"name/2467\",[1,44.315]],[\"comment/2467\",[]],[\"name/2468\",[792,84.871]],[\"comment/2468\",[]],[\"name/2469\",[109,56.533]],[\"comment/2469\",[]],[\"name/2470\",[793,84.871]],[\"comment/2470\",[]],[\"name/2471\",[26,50.524]],[\"comment/2471\",[]],[\"name/2472\",[22,49.502]],[\"comment/2472\",[]],[\"name/2473\",[794,84.871]],[\"comment/2473\",[]],[\"name/2474\",[25,44.668]],[\"comment/2474\",[]],[\"name/2475\",[27,60.887]],[\"comment/2475\",[]],[\"name/2476\",[28,60.887]],[\"comment/2476\",[]],[\"name/2477\",[23,60.887]],[\"comment/2477\",[]],[\"name/2478\",[29,60.887]],[\"comment/2478\",[]],[\"name/2479\",[30,60.887]],[\"comment/2479\",[]],[\"name/2480\",[31,60.887]],[\"comment/2480\",[]],[\"name/2481\",[32,53.509]],[\"comment/2481\",[]],[\"name/2482\",[33,53.509]],[\"comment/2482\",[]],[\"name/2483\",[34,53.509]],[\"comment/2483\",[]],[\"name/2484\",[35,56.148]],[\"comment/2484\",[]],[\"name/2485\",[36,55.778]],[\"comment/2485\",[]],[\"name/2486\",[37,60.887]],[\"comment/2486\",[]],[\"name/2487\",[38,59.743]],[\"comment/2487\",[]],[\"name/2488\",[39,60.887]],[\"comment/2488\",[]],[\"name/2489\",[40,60.887]],[\"comment/2489\",[]],[\"name/2490\",[41,52.675]],[\"comment/2490\",[]],[\"name/2491\",[42,52.675]],[\"comment/2491\",[]],[\"name/2492\",[43,60.887]],[\"comment/2492\",[]],[\"name/2493\",[44,47.097]],[\"comment/2493\",[]],[\"name/2494\",[45,47.097]],[\"comment/2494\",[]],[\"name/2495\",[46,47.097]],[\"comment/2495\",[]],[\"name/2496\",[47,47.097]],[\"comment/2496\",[]],[\"name/2497\",[48,47.097]],[\"comment/2497\",[]],[\"name/2498\",[49,47.097]],[\"comment/2498\",[]],[\"name/2499\",[50,47.097]],[\"comment/2499\",[]],[\"name/2500\",[51,47.097]],[\"comment/2500\",[]],[\"name/2501\",[52,47.097]],[\"comment/2501\",[]],[\"name/2502\",[53,47.097]],[\"comment/2502\",[]],[\"name/2503\",[54,47.097]],[\"comment/2503\",[]],[\"name/2504\",[55,47.097]],[\"comment/2504\",[]],[\"name/2505\",[56,47.097]],[\"comment/2505\",[]],[\"name/2506\",[57,47.097]],[\"comment/2506\",[]],[\"name/2507\",[58,47.097]],[\"comment/2507\",[]],[\"name/2508\",[59,47.097]],[\"comment/2508\",[]],[\"name/2509\",[60,47.097]],[\"comment/2509\",[]],[\"name/2510\",[61,47.097]],[\"comment/2510\",[]],[\"name/2511\",[62,47.097]],[\"comment/2511\",[]],[\"name/2512\",[63,46.796]],[\"comment/2512\",[]],[\"name/2513\",[64,46.796]],[\"comment/2513\",[]],[\"name/2514\",[65,47.097]],[\"comment/2514\",[]],[\"name/2515\",[66,43.221]],[\"comment/2515\",[]],[\"name/2516\",[67,46.649]],[\"comment/2516\",[]],[\"name/2517\",[68,46.649]],[\"comment/2517\",[]],[\"name/2518\",[69,47.097]],[\"comment/2518\",[]],[\"name/2519\",[70,46.945]],[\"comment/2519\",[]],[\"name/2520\",[71,46.945]],[\"comment/2520\",[]],[\"name/2521\",[72,47.097]],[\"comment/2521\",[]],[\"name/2522\",[73,47.097]],[\"comment/2522\",[]],[\"name/2523\",[74,47.097]],[\"comment/2523\",[]],[\"name/2524\",[75,46.945]],[\"comment/2524\",[]],[\"name/2525\",[76,46.796]],[\"comment/2525\",[]],[\"name/2526\",[77,46.796]],[\"comment/2526\",[]],[\"name/2527\",[525,76.396]],[\"comment/2527\",[]],[\"name/2528\",[9,46.22]],[\"comment/2528\",[]],[\"name/2529\",[104,60.298]],[\"comment/2529\",[]],[\"name/2530\",[105,59.743]],[\"comment/2530\",[]],[\"name/2531\",[15,46.945]],[\"comment/2531\",[]],[\"name/2532\",[16,44.087]],[\"comment/2532\",[]],[\"name/2533\",[795,79.762]],[\"comment/2533\",[]],[\"name/2534\",[796,79.762]],[\"comment/2534\",[]],[\"name/2535\",[172,57.35]],[\"comment/2535\",[]],[\"name/2536\",[797,79.762]],[\"comment/2536\",[]],[\"name/2537\",[150,60.298]],[\"comment/2537\",[]],[\"name/2538\",[697,70.205]],[\"comment/2538\",[]],[\"name/2539\",[798,79.762]],[\"comment/2539\",[]],[\"name/2540\",[130,54.107]],[\"comment/2540\",[]],[\"name/2541\",[799,79.762]],[\"comment/2541\",[]],[\"name/2542\",[158,60.298]],[\"comment/2542\",[]],[\"name/2543\",[1,44.315]],[\"comment/2543\",[]],[\"name/2544\",[159,56.933]],[\"comment/2544\",[]],[\"name/2545\",[160,56.933]],[\"comment/2545\",[]],[\"name/2546\",[137,60.298]],[\"comment/2546\",[]],[\"name/2547\",[109,56.533]],[\"comment/2547\",[]],[\"name/2548\",[695,70.205]],[\"comment/2548\",[]],[\"name/2549\",[800,79.762]],[\"comment/2549\",[]],[\"name/2550\",[167,60.298]],[\"comment/2550\",[]],[\"name/2551\",[1,44.315]],[\"comment/2551\",[]],[\"name/2552\",[699,68.773]],[\"comment/2552\",[]],[\"name/2553\",[700,68.773]],[\"comment/2553\",[]],[\"name/2554\",[790,73.883]],[\"comment/2554\",[]],[\"name/2555\",[749,70.205]],[\"comment/2555\",[]],[\"name/2556\",[801,79.762]],[\"comment/2556\",[]],[\"name/2557\",[802,79.762]],[\"comment/2557\",[]],[\"name/2558\",[25,44.668]],[\"comment/2558\",[]],[\"name/2559\",[685,64.498]],[\"comment/2559\",[]],[\"name/2560\",[443,63.664]],[\"comment/2560\",[]],[\"name/2561\",[686,70.205]],[\"comment/2561\",[]],[\"name/2562\",[687,70.205]],[\"comment/2562\",[]],[\"name/2563\",[688,70.205]],[\"comment/2563\",[]],[\"name/2564\",[689,70.205]],[\"comment/2564\",[]],[\"name/2565\",[690,70.205]],[\"comment/2565\",[]],[\"name/2566\",[691,70.205]],[\"comment/2566\",[]],[\"name/2567\",[692,70.205]],[\"comment/2567\",[]],[\"name/2568\",[218,68.773]],[\"comment/2568\",[]],[\"name/2569\",[693,70.205]],[\"comment/2569\",[]],[\"name/2570\",[166,59.743]],[\"comment/2570\",[]],[\"name/2571\",[694,70.205]],[\"comment/2571\",[]],[\"name/2572\",[696,70.205]],[\"comment/2572\",[]],[\"name/2573\",[698,70.205]],[\"comment/2573\",[]],[\"name/2574\",[143,59.216]],[\"comment/2574\",[]],[\"name/2575\",[701,67.521]],[\"comment/2575\",[]],[\"name/2576\",[702,70.205]],[\"comment/2576\",[]],[\"name/2577\",[188,56.933]],[\"comment/2577\",[]],[\"name/2578\",[703,70.205]],[\"comment/2578\",[]],[\"name/2579\",[110,59.743]],[\"comment/2579\",[]],[\"name/2580\",[111,57.35]],[\"comment/2580\",[]],[\"name/2581\",[112,59.743]],[\"comment/2581\",[]],[\"name/2582\",[18,52.946]],[\"comment/2582\",[]],[\"name/2583\",[1,44.315]],[\"comment/2583\",[]],[\"name/2584\",[113,60.298]],[\"comment/2584\",[]],[\"name/2585\",[25,44.668]],[\"comment/2585\",[]],[\"name/2586\",[114,60.298]],[\"comment/2586\",[]],[\"name/2587\",[115,60.298]],[\"comment/2587\",[]],[\"name/2588\",[116,57.35]],[\"comment/2588\",[]],[\"name/2589\",[117,60.298]],[\"comment/2589\",[]],[\"name/2590\",[118,60.298]],[\"comment/2590\",[]],[\"name/2591\",[119,57.785]],[\"comment/2591\",[]],[\"name/2592\",[120,60.298]],[\"comment/2592\",[]],[\"name/2593\",[121,60.298]],[\"comment/2593\",[]],[\"name/2594\",[122,56.933]],[\"comment/2594\",[]],[\"name/2595\",[66,43.221]],[\"comment/2595\",[]],[\"name/2596\",[123,58.716]],[\"comment/2596\",[]],[\"name/2597\",[124,60.298]],[\"comment/2597\",[]],[\"name/2598\",[125,60.298]],[\"comment/2598\",[]],[\"name/2599\",[126,59.743]],[\"comment/2599\",[]],[\"name/2600\",[127,60.298]],[\"comment/2600\",[]],[\"name/2601\",[128,54.419]],[\"comment/2601\",[]],[\"name/2602\",[129,54.419]],[\"comment/2602\",[]],[\"name/2603\",[131,60.298]],[\"comment/2603\",[]],[\"name/2604\",[132,60.298]],[\"comment/2604\",[]],[\"name/2605\",[133,60.298]],[\"comment/2605\",[]],[\"name/2606\",[134,60.298]],[\"comment/2606\",[]],[\"name/2607\",[135,59.743]],[\"comment/2607\",[]],[\"name/2608\",[136,60.298]],[\"comment/2608\",[]],[\"name/2609\",[138,59.743]],[\"comment/2609\",[]],[\"name/2610\",[139,60.298]],[\"comment/2610\",[]],[\"name/2611\",[140,60.298]],[\"comment/2611\",[]],[\"name/2612\",[141,60.298]],[\"comment/2612\",[]],[\"name/2613\",[142,60.298]],[\"comment/2613\",[]],[\"name/2614\",[144,59.743]],[\"comment/2614\",[]],[\"name/2615\",[145,59.743]],[\"comment/2615\",[]],[\"name/2616\",[146,59.743]],[\"comment/2616\",[]],[\"name/2617\",[147,59.743]],[\"comment/2617\",[]],[\"name/2618\",[148,60.298]],[\"comment/2618\",[]],[\"name/2619\",[149,60.298]],[\"comment/2619\",[]],[\"name/2620\",[151,60.298]],[\"comment/2620\",[]],[\"name/2621\",[152,60.298]],[\"comment/2621\",[]],[\"name/2622\",[153,60.298]],[\"comment/2622\",[]],[\"name/2623\",[154,60.298]],[\"comment/2623\",[]],[\"name/2624\",[155,60.298]],[\"comment/2624\",[]],[\"name/2625\",[156,58.239]],[\"comment/2625\",[]],[\"name/2626\",[157,60.298]],[\"comment/2626\",[]],[\"name/2627\",[161,60.298]],[\"comment/2627\",[]],[\"name/2628\",[162,60.298]],[\"comment/2628\",[]],[\"name/2629\",[163,60.298]],[\"comment/2629\",[]],[\"name/2630\",[164,56.933]],[\"comment/2630\",[]],[\"name/2631\",[165,59.743]],[\"comment/2631\",[]],[\"name/2632\",[168,60.298]],[\"comment/2632\",[]],[\"name/2633\",[169,60.298]],[\"comment/2633\",[]],[\"name/2634\",[170,60.298]],[\"comment/2634\",[]],[\"name/2635\",[171,60.298]],[\"comment/2635\",[]],[\"name/2636\",[173,59.743]],[\"comment/2636\",[]],[\"name/2637\",[174,59.743]],[\"comment/2637\",[]],[\"name/2638\",[26,50.524]],[\"comment/2638\",[]],[\"name/2639\",[22,49.502]],[\"comment/2639\",[]],[\"name/2640\",[41,52.675]],[\"comment/2640\",[]],[\"name/2641\",[42,52.675]],[\"comment/2641\",[]],[\"name/2642\",[175,53.804]],[\"comment/2642\",[]],[\"name/2643\",[176,59.216]],[\"comment/2643\",[]],[\"name/2644\",[177,59.743]],[\"comment/2644\",[]],[\"name/2645\",[178,59.743]],[\"comment/2645\",[]],[\"name/2646\",[179,59.743]],[\"comment/2646\",[]],[\"name/2647\",[180,59.743]],[\"comment/2647\",[]],[\"name/2648\",[181,59.743]],[\"comment/2648\",[]],[\"name/2649\",[182,59.743]],[\"comment/2649\",[]],[\"name/2650\",[183,59.743]],[\"comment/2650\",[]],[\"name/2651\",[184,59.743]],[\"comment/2651\",[]],[\"name/2652\",[108,59.743]],[\"comment/2652\",[]],[\"name/2653\",[185,58.239]],[\"comment/2653\",[]],[\"name/2654\",[186,59.743]],[\"comment/2654\",[]],[\"name/2655\",[187,59.743]],[\"comment/2655\",[]],[\"name/2656\",[189,59.216]],[\"comment/2656\",[]],[\"name/2657\",[190,59.743]],[\"comment/2657\",[]],[\"name/2658\",[191,59.743]],[\"comment/2658\",[]],[\"name/2659\",[192,59.743]],[\"comment/2659\",[]],[\"name/2660\",[193,59.743]],[\"comment/2660\",[]],[\"name/2661\",[194,59.743]],[\"comment/2661\",[]],[\"name/2662\",[34,53.509]],[\"comment/2662\",[]],[\"name/2663\",[32,53.509]],[\"comment/2663\",[]],[\"name/2664\",[33,53.509]],[\"comment/2664\",[]],[\"name/2665\",[44,47.097]],[\"comment/2665\",[]],[\"name/2666\",[45,47.097]],[\"comment/2666\",[]],[\"name/2667\",[46,47.097]],[\"comment/2667\",[]],[\"name/2668\",[47,47.097]],[\"comment/2668\",[]],[\"name/2669\",[48,47.097]],[\"comment/2669\",[]],[\"name/2670\",[49,47.097]],[\"comment/2670\",[]],[\"name/2671\",[50,47.097]],[\"comment/2671\",[]],[\"name/2672\",[51,47.097]],[\"comment/2672\",[]],[\"name/2673\",[52,47.097]],[\"comment/2673\",[]],[\"name/2674\",[53,47.097]],[\"comment/2674\",[]],[\"name/2675\",[54,47.097]],[\"comment/2675\",[]],[\"name/2676\",[55,47.097]],[\"comment/2676\",[]],[\"name/2677\",[56,47.097]],[\"comment/2677\",[]],[\"name/2678\",[57,47.097]],[\"comment/2678\",[]],[\"name/2679\",[58,47.097]],[\"comment/2679\",[]],[\"name/2680\",[59,47.097]],[\"comment/2680\",[]],[\"name/2681\",[60,47.097]],[\"comment/2681\",[]],[\"name/2682\",[61,47.097]],[\"comment/2682\",[]],[\"name/2683\",[62,47.097]],[\"comment/2683\",[]],[\"name/2684\",[63,46.796]],[\"comment/2684\",[]],[\"name/2685\",[64,46.796]],[\"comment/2685\",[]],[\"name/2686\",[65,47.097]],[\"comment/2686\",[]],[\"name/2687\",[66,43.221]],[\"comment/2687\",[]],[\"name/2688\",[67,46.649]],[\"comment/2688\",[]],[\"name/2689\",[68,46.649]],[\"comment/2689\",[]],[\"name/2690\",[69,47.097]],[\"comment/2690\",[]],[\"name/2691\",[70,46.945]],[\"comment/2691\",[]],[\"name/2692\",[71,46.945]],[\"comment/2692\",[]],[\"name/2693\",[72,47.097]],[\"comment/2693\",[]],[\"name/2694\",[73,47.097]],[\"comment/2694\",[]],[\"name/2695\",[74,47.097]],[\"comment/2695\",[]],[\"name/2696\",[75,46.945]],[\"comment/2696\",[]],[\"name/2697\",[76,46.796]],[\"comment/2697\",[]],[\"name/2698\",[77,46.796]],[\"comment/2698\",[]],[\"name/2699\",[526,79.762]],[\"comment/2699\",[]],[\"name/2700\",[16,44.087]],[\"comment/2700\",[]],[\"name/2701\",[803,84.871]],[\"comment/2701\",[]],[\"name/2702\",[804,84.871]],[\"comment/2702\",[]],[\"name/2703\",[172,57.35]],[\"comment/2703\",[]],[\"name/2704\",[805,84.871]],[\"comment/2704\",[]],[\"name/2705\",[1,44.315]],[\"comment/2705\",[]],[\"name/2706\",[413,67.521]],[\"comment/2706\",[]],[\"name/2707\",[7,63.664]],[\"comment/2707\",[]],[\"name/2708\",[806,79.762]],[\"comment/2708\",[]],[\"name/2709\",[807,84.871]],[\"comment/2709\",[]],[\"name/2710\",[1,44.315]],[\"comment/2710\",[]],[\"name/2711\",[413,67.521]],[\"comment/2711\",[]],[\"name/2712\",[7,63.664]],[\"comment/2712\",[]],[\"name/2713\",[806,79.762]],[\"comment/2713\",[]],[\"name/2714\",[527,73.883]],[\"comment/2714\",[]],[\"name/2715\",[9,46.22]],[\"comment/2715\",[]],[\"name/2716\",[808,84.871]],[\"comment/2716\",[]],[\"name/2717\",[13,54.107]],[\"comment/2717\",[]],[\"name/2718\",[15,46.945]],[\"comment/2718\",[]],[\"name/2719\",[16,44.087]],[\"comment/2719\",[]],[\"name/2720\",[809,84.871]],[\"comment/2720\",[]],[\"name/2721\",[810,84.871]],[\"comment/2721\",[]],[\"name/2722\",[811,84.871]],[\"comment/2722\",[]],[\"name/2723\",[812,84.871]],[\"comment/2723\",[]],[\"name/2724\",[813,84.871]],[\"comment/2724\",[]],[\"name/2725\",[374,65.408]],[\"comment/2725\",[]],[\"name/2726\",[22,49.502]],[\"comment/2726\",[]],[\"name/2727\",[814,84.871]],[\"comment/2727\",[]],[\"name/2728\",[815,84.871]],[\"comment/2728\",[]],[\"name/2729\",[816,84.871]],[\"comment/2729\",[]],[\"name/2730\",[10,58.239]],[\"comment/2730\",[]],[\"name/2731\",[629,79.762]],[\"comment/2731\",[]],[\"name/2732\",[25,44.668]],[\"comment/2732\",[]],[\"name/2733\",[35,56.148]],[\"comment/2733\",[]],[\"name/2734\",[36,55.778]],[\"comment/2734\",[]],[\"name/2735\",[128,54.419]],[\"comment/2735\",[]],[\"name/2736\",[129,54.419]],[\"comment/2736\",[]],[\"name/2737\",[130,54.107]],[\"comment/2737\",[]],[\"name/2738\",[26,50.524]],[\"comment/2738\",[]],[\"name/2739\",[175,53.804]],[\"comment/2739\",[]],[\"name/2740\",[250,60.887]],[\"comment/2740\",[]],[\"name/2741\",[373,65.408]],[\"comment/2741\",[]],[\"name/2742\",[375,64.498]],[\"comment/2742\",[]],[\"name/2743\",[376,65.408]],[\"comment/2743\",[]],[\"name/2744\",[377,65.408]],[\"comment/2744\",[]],[\"name/2745\",[44,47.097]],[\"comment/2745\",[]],[\"name/2746\",[45,47.097]],[\"comment/2746\",[]],[\"name/2747\",[46,47.097]],[\"comment/2747\",[]],[\"name/2748\",[47,47.097]],[\"comment/2748\",[]],[\"name/2749\",[48,47.097]],[\"comment/2749\",[]],[\"name/2750\",[49,47.097]],[\"comment/2750\",[]],[\"name/2751\",[50,47.097]],[\"comment/2751\",[]],[\"name/2752\",[51,47.097]],[\"comment/2752\",[]],[\"name/2753\",[52,47.097]],[\"comment/2753\",[]],[\"name/2754\",[53,47.097]],[\"comment/2754\",[]],[\"name/2755\",[54,47.097]],[\"comment/2755\",[]],[\"name/2756\",[55,47.097]],[\"comment/2756\",[]],[\"name/2757\",[56,47.097]],[\"comment/2757\",[]],[\"name/2758\",[57,47.097]],[\"comment/2758\",[]],[\"name/2759\",[58,47.097]],[\"comment/2759\",[]],[\"name/2760\",[59,47.097]],[\"comment/2760\",[]],[\"name/2761\",[60,47.097]],[\"comment/2761\",[]],[\"name/2762\",[61,47.097]],[\"comment/2762\",[]],[\"name/2763\",[62,47.097]],[\"comment/2763\",[]],[\"name/2764\",[63,46.796]],[\"comment/2764\",[]],[\"name/2765\",[64,46.796]],[\"comment/2765\",[]],[\"name/2766\",[65,47.097]],[\"comment/2766\",[]],[\"name/2767\",[66,43.221]],[\"comment/2767\",[]],[\"name/2768\",[67,46.649]],[\"comment/2768\",[]],[\"name/2769\",[68,46.649]],[\"comment/2769\",[]],[\"name/2770\",[69,47.097]],[\"comment/2770\",[]],[\"name/2771\",[70,46.945]],[\"comment/2771\",[]],[\"name/2772\",[71,46.945]],[\"comment/2772\",[]],[\"name/2773\",[72,47.097]],[\"comment/2773\",[]],[\"name/2774\",[73,47.097]],[\"comment/2774\",[]],[\"name/2775\",[74,47.097]],[\"comment/2775\",[]],[\"name/2776\",[75,46.945]],[\"comment/2776\",[]],[\"name/2777\",[76,46.796]],[\"comment/2777\",[]],[\"name/2778\",[77,46.796]],[\"comment/2778\",[]],[\"name/2779\",[498,73.883]],[\"comment/2779\",[]],[\"name/2780\",[9,46.22]],[\"comment/2780\",[]],[\"name/2781\",[104,60.298]],[\"comment/2781\",[]],[\"name/2782\",[105,59.743]],[\"comment/2782\",[]],[\"name/2783\",[15,46.945]],[\"comment/2783\",[]],[\"name/2784\",[16,44.087]],[\"comment/2784\",[]],[\"name/2785\",[108,59.743]],[\"comment/2785\",[]],[\"name/2786\",[109,56.533]],[\"comment/2786\",[]],[\"name/2787\",[25,44.668]],[\"comment/2787\",[]],[\"name/2788\",[110,59.743]],[\"comment/2788\",[]],[\"name/2789\",[111,57.35]],[\"comment/2789\",[]],[\"name/2790\",[112,59.743]],[\"comment/2790\",[]],[\"name/2791\",[18,52.946]],[\"comment/2791\",[]],[\"name/2792\",[1,44.315]],[\"comment/2792\",[]],[\"name/2793\",[113,60.298]],[\"comment/2793\",[]],[\"name/2794\",[25,44.668]],[\"comment/2794\",[]],[\"name/2795\",[114,60.298]],[\"comment/2795\",[]],[\"name/2796\",[115,60.298]],[\"comment/2796\",[]],[\"name/2797\",[116,57.35]],[\"comment/2797\",[]],[\"name/2798\",[117,60.298]],[\"comment/2798\",[]],[\"name/2799\",[118,60.298]],[\"comment/2799\",[]],[\"name/2800\",[119,57.785]],[\"comment/2800\",[]],[\"name/2801\",[120,60.298]],[\"comment/2801\",[]],[\"name/2802\",[121,60.298]],[\"comment/2802\",[]],[\"name/2803\",[122,56.933]],[\"comment/2803\",[]],[\"name/2804\",[66,43.221]],[\"comment/2804\",[]],[\"name/2805\",[123,58.716]],[\"comment/2805\",[]],[\"name/2806\",[124,60.298]],[\"comment/2806\",[]],[\"name/2807\",[125,60.298]],[\"comment/2807\",[]],[\"name/2808\",[126,59.743]],[\"comment/2808\",[]],[\"name/2809\",[127,60.298]],[\"comment/2809\",[]],[\"name/2810\",[128,54.419]],[\"comment/2810\",[]],[\"name/2811\",[129,54.419]],[\"comment/2811\",[]],[\"name/2812\",[130,54.107]],[\"comment/2812\",[]],[\"name/2813\",[131,60.298]],[\"comment/2813\",[]],[\"name/2814\",[132,60.298]],[\"comment/2814\",[]],[\"name/2815\",[133,60.298]],[\"comment/2815\",[]],[\"name/2816\",[134,60.298]],[\"comment/2816\",[]],[\"name/2817\",[135,59.743]],[\"comment/2817\",[]],[\"name/2818\",[136,60.298]],[\"comment/2818\",[]],[\"name/2819\",[137,60.298]],[\"comment/2819\",[]],[\"name/2820\",[138,59.743]],[\"comment/2820\",[]],[\"name/2821\",[139,60.298]],[\"comment/2821\",[]],[\"name/2822\",[140,60.298]],[\"comment/2822\",[]],[\"name/2823\",[141,60.298]],[\"comment/2823\",[]],[\"name/2824\",[142,60.298]],[\"comment/2824\",[]],[\"name/2825\",[143,59.216]],[\"comment/2825\",[]],[\"name/2826\",[144,59.743]],[\"comment/2826\",[]],[\"name/2827\",[145,59.743]],[\"comment/2827\",[]],[\"name/2828\",[146,59.743]],[\"comment/2828\",[]],[\"name/2829\",[147,59.743]],[\"comment/2829\",[]],[\"name/2830\",[148,60.298]],[\"comment/2830\",[]],[\"name/2831\",[149,60.298]],[\"comment/2831\",[]],[\"name/2832\",[150,60.298]],[\"comment/2832\",[]],[\"name/2833\",[151,60.298]],[\"comment/2833\",[]],[\"name/2834\",[152,60.298]],[\"comment/2834\",[]],[\"name/2835\",[153,60.298]],[\"comment/2835\",[]],[\"name/2836\",[154,60.298]],[\"comment/2836\",[]],[\"name/2837\",[155,60.298]],[\"comment/2837\",[]],[\"name/2838\",[156,58.239]],[\"comment/2838\",[]],[\"name/2839\",[157,60.298]],[\"comment/2839\",[]],[\"name/2840\",[158,60.298]],[\"comment/2840\",[]],[\"name/2841\",[1,44.315]],[\"comment/2841\",[]],[\"name/2842\",[159,56.933]],[\"comment/2842\",[]],[\"name/2843\",[160,56.933]],[\"comment/2843\",[]],[\"name/2844\",[161,60.298]],[\"comment/2844\",[]],[\"name/2845\",[162,60.298]],[\"comment/2845\",[]],[\"name/2846\",[163,60.298]],[\"comment/2846\",[]],[\"name/2847\",[164,56.933]],[\"comment/2847\",[]],[\"name/2848\",[165,59.743]],[\"comment/2848\",[]],[\"name/2849\",[166,59.743]],[\"comment/2849\",[]],[\"name/2850\",[167,60.298]],[\"comment/2850\",[]],[\"name/2851\",[168,60.298]],[\"comment/2851\",[]],[\"name/2852\",[169,60.298]],[\"comment/2852\",[]],[\"name/2853\",[170,60.298]],[\"comment/2853\",[]],[\"name/2854\",[171,60.298]],[\"comment/2854\",[]],[\"name/2855\",[172,57.35]],[\"comment/2855\",[]],[\"name/2856\",[173,59.743]],[\"comment/2856\",[]],[\"name/2857\",[174,59.743]],[\"comment/2857\",[]],[\"name/2858\",[26,50.524]],[\"comment/2858\",[]],[\"name/2859\",[22,49.502]],[\"comment/2859\",[]],[\"name/2860\",[41,52.675]],[\"comment/2860\",[]],[\"name/2861\",[42,52.675]],[\"comment/2861\",[]],[\"name/2862\",[175,53.804]],[\"comment/2862\",[]],[\"name/2863\",[176,59.216]],[\"comment/2863\",[]],[\"name/2864\",[177,59.743]],[\"comment/2864\",[]],[\"name/2865\",[178,59.743]],[\"comment/2865\",[]],[\"name/2866\",[179,59.743]],[\"comment/2866\",[]],[\"name/2867\",[180,59.743]],[\"comment/2867\",[]],[\"name/2868\",[181,59.743]],[\"comment/2868\",[]],[\"name/2869\",[182,59.743]],[\"comment/2869\",[]],[\"name/2870\",[183,59.743]],[\"comment/2870\",[]],[\"name/2871\",[184,59.743]],[\"comment/2871\",[]],[\"name/2872\",[185,58.239]],[\"comment/2872\",[]],[\"name/2873\",[186,59.743]],[\"comment/2873\",[]],[\"name/2874\",[187,59.743]],[\"comment/2874\",[]],[\"name/2875\",[188,56.933]],[\"comment/2875\",[]],[\"name/2876\",[189,59.216]],[\"comment/2876\",[]],[\"name/2877\",[190,59.743]],[\"comment/2877\",[]],[\"name/2878\",[191,59.743]],[\"comment/2878\",[]],[\"name/2879\",[192,59.743]],[\"comment/2879\",[]],[\"name/2880\",[193,59.743]],[\"comment/2880\",[]],[\"name/2881\",[194,59.743]],[\"comment/2881\",[]],[\"name/2882\",[34,53.509]],[\"comment/2882\",[]],[\"name/2883\",[32,53.509]],[\"comment/2883\",[]],[\"name/2884\",[33,53.509]],[\"comment/2884\",[]],[\"name/2885\",[44,47.097]],[\"comment/2885\",[]],[\"name/2886\",[45,47.097]],[\"comment/2886\",[]],[\"name/2887\",[46,47.097]],[\"comment/2887\",[]],[\"name/2888\",[47,47.097]],[\"comment/2888\",[]],[\"name/2889\",[48,47.097]],[\"comment/2889\",[]],[\"name/2890\",[49,47.097]],[\"comment/2890\",[]],[\"name/2891\",[50,47.097]],[\"comment/2891\",[]],[\"name/2892\",[51,47.097]],[\"comment/2892\",[]],[\"name/2893\",[52,47.097]],[\"comment/2893\",[]],[\"name/2894\",[53,47.097]],[\"comment/2894\",[]],[\"name/2895\",[54,47.097]],[\"comment/2895\",[]],[\"name/2896\",[55,47.097]],[\"comment/2896\",[]],[\"name/2897\",[56,47.097]],[\"comment/2897\",[]],[\"name/2898\",[57,47.097]],[\"comment/2898\",[]],[\"name/2899\",[58,47.097]],[\"comment/2899\",[]],[\"name/2900\",[59,47.097]],[\"comment/2900\",[]],[\"name/2901\",[60,47.097]],[\"comment/2901\",[]],[\"name/2902\",[61,47.097]],[\"comment/2902\",[]],[\"name/2903\",[62,47.097]],[\"comment/2903\",[]],[\"name/2904\",[63,46.796]],[\"comment/2904\",[]],[\"name/2905\",[64,46.796]],[\"comment/2905\",[]],[\"name/2906\",[65,47.097]],[\"comment/2906\",[]],[\"name/2907\",[66,43.221]],[\"comment/2907\",[]],[\"name/2908\",[67,46.649]],[\"comment/2908\",[]],[\"name/2909\",[68,46.649]],[\"comment/2909\",[]],[\"name/2910\",[69,47.097]],[\"comment/2910\",[]],[\"name/2911\",[70,46.945]],[\"comment/2911\",[]],[\"name/2912\",[71,46.945]],[\"comment/2912\",[]],[\"name/2913\",[72,47.097]],[\"comment/2913\",[]],[\"name/2914\",[73,47.097]],[\"comment/2914\",[]],[\"name/2915\",[74,47.097]],[\"comment/2915\",[]],[\"name/2916\",[75,46.945]],[\"comment/2916\",[]],[\"name/2917\",[76,46.796]],[\"comment/2917\",[]],[\"name/2918\",[77,46.796]],[\"comment/2918\",[]],[\"name/2919\",[548,79.762]],[\"comment/2919\",[]],[\"name/2920\",[80,70.205]],[\"comment/2920\",[]],[\"name/2921\",[79,67.521]],[\"comment/2921\",[]],[\"name/2922\",[81,67.521]],[\"comment/2922\",[]],[\"name/2923\",[817,79.762]],[\"comment/2923\",[]],[\"name/2924\",[818,79.762]],[\"comment/2924\",[]],[\"name/2925\",[528,76.396]],[\"comment/2925\",[]],[\"name/2926\",[9,46.22]],[\"comment/2926\",[]],[\"name/2927\",[13,54.107]],[\"comment/2927\",[]],[\"name/2928\",[14,59.743]],[\"comment/2928\",[]],[\"name/2929\",[15,46.945]],[\"comment/2929\",[]],[\"name/2930\",[16,44.087]],[\"comment/2930\",[]],[\"name/2931\",[22,49.502]],[\"comment/2931\",[]],[\"name/2932\",[26,50.524]],[\"comment/2932\",[]],[\"name/2933\",[27,60.887]],[\"comment/2933\",[]],[\"name/2934\",[28,60.887]],[\"comment/2934\",[]],[\"name/2935\",[23,60.887]],[\"comment/2935\",[]],[\"name/2936\",[29,60.887]],[\"comment/2936\",[]],[\"name/2937\",[30,60.887]],[\"comment/2937\",[]],[\"name/2938\",[31,60.887]],[\"comment/2938\",[]],[\"name/2939\",[32,53.509]],[\"comment/2939\",[]],[\"name/2940\",[33,53.509]],[\"comment/2940\",[]],[\"name/2941\",[34,53.509]],[\"comment/2941\",[]],[\"name/2942\",[35,56.148]],[\"comment/2942\",[]],[\"name/2943\",[36,55.778]],[\"comment/2943\",[]],[\"name/2944\",[37,60.887]],[\"comment/2944\",[]],[\"name/2945\",[38,59.743]],[\"comment/2945\",[]],[\"name/2946\",[39,60.887]],[\"comment/2946\",[]],[\"name/2947\",[40,60.887]],[\"comment/2947\",[]],[\"name/2948\",[41,52.675]],[\"comment/2948\",[]],[\"name/2949\",[42,52.675]],[\"comment/2949\",[]],[\"name/2950\",[25,44.668]],[\"comment/2950\",[]],[\"name/2951\",[43,60.887]],[\"comment/2951\",[]],[\"name/2952\",[44,47.097]],[\"comment/2952\",[]],[\"name/2953\",[45,47.097]],[\"comment/2953\",[]],[\"name/2954\",[46,47.097]],[\"comment/2954\",[]],[\"name/2955\",[47,47.097]],[\"comment/2955\",[]],[\"name/2956\",[48,47.097]],[\"comment/2956\",[]],[\"name/2957\",[49,47.097]],[\"comment/2957\",[]],[\"name/2958\",[50,47.097]],[\"comment/2958\",[]],[\"name/2959\",[51,47.097]],[\"comment/2959\",[]],[\"name/2960\",[52,47.097]],[\"comment/2960\",[]],[\"name/2961\",[53,47.097]],[\"comment/2961\",[]],[\"name/2962\",[54,47.097]],[\"comment/2962\",[]],[\"name/2963\",[55,47.097]],[\"comment/2963\",[]],[\"name/2964\",[56,47.097]],[\"comment/2964\",[]],[\"name/2965\",[57,47.097]],[\"comment/2965\",[]],[\"name/2966\",[58,47.097]],[\"comment/2966\",[]],[\"name/2967\",[59,47.097]],[\"comment/2967\",[]],[\"name/2968\",[60,47.097]],[\"comment/2968\",[]],[\"name/2969\",[61,47.097]],[\"comment/2969\",[]],[\"name/2970\",[62,47.097]],[\"comment/2970\",[]],[\"name/2971\",[63,46.796]],[\"comment/2971\",[]],[\"name/2972\",[64,46.796]],[\"comment/2972\",[]],[\"name/2973\",[65,47.097]],[\"comment/2973\",[]],[\"name/2974\",[66,43.221]],[\"comment/2974\",[]],[\"name/2975\",[67,46.649]],[\"comment/2975\",[]],[\"name/2976\",[68,46.649]],[\"comment/2976\",[]],[\"name/2977\",[69,47.097]],[\"comment/2977\",[]],[\"name/2978\",[70,46.945]],[\"comment/2978\",[]],[\"name/2979\",[71,46.945]],[\"comment/2979\",[]],[\"name/2980\",[72,47.097]],[\"comment/2980\",[]],[\"name/2981\",[73,47.097]],[\"comment/2981\",[]],[\"name/2982\",[74,47.097]],[\"comment/2982\",[]],[\"name/2983\",[75,46.945]],[\"comment/2983\",[]],[\"name/2984\",[76,46.796]],[\"comment/2984\",[]],[\"name/2985\",[77,46.796]],[\"comment/2985\",[]],[\"name/2986\",[819,84.871]],[\"comment/2986\",[]],[\"name/2987\",[820,84.871]],[\"comment/2987\",[]],[\"name/2988\",[821,84.871]],[\"comment/2988\",[]],[\"name/2989\",[822,84.871]],[\"comment/2989\",[]],[\"name/2990\",[823,84.871]],[\"comment/2990\",[]],[\"name/2991\",[824,84.871]],[\"comment/2991\",[]],[\"name/2992\",[6,60.298]],[\"comment/2992\",[]],[\"name/2993\",[322,79.762]],[\"comment/2993\",[]],[\"name/2994\",[825,84.871]],[\"comment/2994\",[]],[\"name/2995\",[507,76.396]],[\"comment/2995\",[]],[\"name/2996\",[8,57.35]],[\"comment/2996\",[]],[\"name/2997\",[16,44.087]],[\"comment/2997\",[]],[\"name/2998\",[156,58.239]],[\"comment/2998\",[]],[\"name/2999\",[826,84.871]],[\"comment/2999\",[]],[\"name/3000\",[185,58.239]],[\"comment/3000\",[]],[\"name/3001\",[827,84.871]],[\"comment/3001\",[]],[\"name/3002\",[22,49.502]],[\"comment/3002\",[]],[\"name/3003\",[828,84.871]],[\"comment/3003\",[]],[\"name/3004\",[829,84.871]],[\"comment/3004\",[]],[\"name/3005\",[830,84.871]],[\"comment/3005\",[]],[\"name/3006\",[164,56.933]],[\"comment/3006\",[]],[\"name/3007\",[109,56.533]],[\"comment/3007\",[]],[\"name/3008\",[188,56.933]],[\"comment/3008\",[]],[\"name/3009\",[831,84.871]],[\"comment/3009\",[]],[\"name/3010\",[832,84.871]],[\"comment/3010\",[]],[\"name/3011\",[833,84.871]],[\"comment/3011\",[]],[\"name/3012\",[834,84.871]],[\"comment/3012\",[]],[\"name/3013\",[835,84.871]],[\"comment/3013\",[]],[\"name/3014\",[836,84.871]],[\"comment/3014\",[]],[\"name/3015\",[837,84.871]],[\"comment/3015\",[]],[\"name/3016\",[838,79.762]],[\"comment/3016\",[]],[\"name/3017\",[839,79.762]],[\"comment/3017\",[]],[\"name/3018\",[0,59.743]],[\"comment/3018\",[]],[\"name/3019\",[840,79.762]],[\"comment/3019\",[]],[\"name/3020\",[841,84.871]],[\"comment/3020\",[]],[\"name/3021\",[842,84.871]],[\"comment/3021\",[]],[\"name/3022\",[843,84.871]],[\"comment/3022\",[]],[\"name/3023\",[508,73.883]],[\"comment/3023\",[]],[\"name/3024\",[9,46.22]],[\"comment/3024\",[]],[\"name/3025\",[15,46.945]],[\"comment/3025\",[]],[\"name/3026\",[16,44.087]],[\"comment/3026\",[]],[\"name/3027\",[18,52.946]],[\"comment/3027\",[]],[\"name/3028\",[844,84.871]],[\"comment/3028\",[]],[\"name/3029\",[1,44.315]],[\"comment/3029\",[]],[\"name/3030\",[79,67.521]],[\"comment/3030\",[]],[\"name/3031\",[81,67.521]],[\"comment/3031\",[]],[\"name/3032\",[130,54.107]],[\"comment/3032\",[]],[\"name/3033\",[128,54.419]],[\"comment/3033\",[]],[\"name/3034\",[129,54.419]],[\"comment/3034\",[]],[\"name/3035\",[845,84.871]],[\"comment/3035\",[]],[\"name/3036\",[846,84.871]],[\"comment/3036\",[]],[\"name/3037\",[25,44.668]],[\"comment/3037\",[]],[\"name/3038\",[44,47.097]],[\"comment/3038\",[]],[\"name/3039\",[45,47.097]],[\"comment/3039\",[]],[\"name/3040\",[46,47.097]],[\"comment/3040\",[]],[\"name/3041\",[47,47.097]],[\"comment/3041\",[]],[\"name/3042\",[48,47.097]],[\"comment/3042\",[]],[\"name/3043\",[49,47.097]],[\"comment/3043\",[]],[\"name/3044\",[50,47.097]],[\"comment/3044\",[]],[\"name/3045\",[51,47.097]],[\"comment/3045\",[]],[\"name/3046\",[52,47.097]],[\"comment/3046\",[]],[\"name/3047\",[53,47.097]],[\"comment/3047\",[]],[\"name/3048\",[54,47.097]],[\"comment/3048\",[]],[\"name/3049\",[55,47.097]],[\"comment/3049\",[]],[\"name/3050\",[56,47.097]],[\"comment/3050\",[]],[\"name/3051\",[57,47.097]],[\"comment/3051\",[]],[\"name/3052\",[58,47.097]],[\"comment/3052\",[]],[\"name/3053\",[59,47.097]],[\"comment/3053\",[]],[\"name/3054\",[60,47.097]],[\"comment/3054\",[]],[\"name/3055\",[61,47.097]],[\"comment/3055\",[]],[\"name/3056\",[62,47.097]],[\"comment/3056\",[]],[\"name/3057\",[63,46.796]],[\"comment/3057\",[]],[\"name/3058\",[64,46.796]],[\"comment/3058\",[]],[\"name/3059\",[65,47.097]],[\"comment/3059\",[]],[\"name/3060\",[66,43.221]],[\"comment/3060\",[]],[\"name/3061\",[67,46.649]],[\"comment/3061\",[]],[\"name/3062\",[68,46.649]],[\"comment/3062\",[]],[\"name/3063\",[69,47.097]],[\"comment/3063\",[]],[\"name/3064\",[70,46.945]],[\"comment/3064\",[]],[\"name/3065\",[71,46.945]],[\"comment/3065\",[]],[\"name/3066\",[72,47.097]],[\"comment/3066\",[]],[\"name/3067\",[73,47.097]],[\"comment/3067\",[]],[\"name/3068\",[74,47.097]],[\"comment/3068\",[]],[\"name/3069\",[75,46.945]],[\"comment/3069\",[]],[\"name/3070\",[76,46.796]],[\"comment/3070\",[]],[\"name/3071\",[77,46.796]],[\"comment/3071\",[]],[\"name/3072\",[847,84.871]],[\"comment/3072\",[]],[\"name/3073\",[413,67.521]],[\"comment/3073\",[]],[\"name/3074\",[7,63.664]],[\"comment/3074\",[]],[\"name/3075\",[848,84.871]],[\"comment/3075\",[]],[\"name/3076\",[849,79.762]],[\"comment/3076\",[]],[\"name/3077\",[7,63.664]],[\"comment/3077\",[]],[\"name/3078\",[850,84.871]],[\"comment/3078\",[]],[\"name/3079\",[849,79.762]],[\"comment/3079\",[]],[\"name/3080\",[7,63.664]],[\"comment/3080\",[]],[\"name/3081\",[17,57.785]],[\"comment/3081\",[]],[\"name/3082\",[851,84.871]],[\"comment/3082\",[]],[\"name/3083\",[852,84.871]],[\"comment/3083\",[]],[\"name/3084\",[853,84.871]],[\"comment/3084\",[]],[\"name/3085\",[421,73.883]],[\"comment/3085\",[]],[\"name/3086\",[854,84.871]],[\"comment/3086\",[]],[\"name/3087\",[855,84.871]],[\"comment/3087\",[]],[\"name/3088\",[529,79.762]],[\"comment/3088\",[]],[\"name/3089\",[856,84.871]],[\"comment/3089\",[]],[\"name/3090\",[857,84.871]],[\"comment/3090\",[]],[\"name/3091\",[858,84.871]],[\"comment/3091\",[]],[\"name/3092\",[859,84.871]],[\"comment/3092\",[]],[\"name/3093\",[860,84.871]],[\"comment/3093\",[]],[\"name/3094\",[861,84.871]],[\"comment/3094\",[]],[\"name/3095\",[862,84.871]],[\"comment/3095\",[]],[\"name/3096\",[863,84.871]],[\"comment/3096\",[]],[\"name/3097\",[864,84.871]],[\"comment/3097\",[]],[\"name/3098\",[865,84.871]],[\"comment/3098\",[]],[\"name/3099\",[426,76.396]],[\"comment/3099\",[]],[\"name/3100\",[866,84.871]],[\"comment/3100\",[]],[\"name/3101\",[16,44.087]],[\"comment/3101\",[]],[\"name/3102\",[867,84.871]],[\"comment/3102\",[]],[\"name/3103\",[868,84.871]],[\"comment/3103\",[]],[\"name/3104\",[869,84.871]],[\"comment/3104\",[]],[\"name/3105\",[870,84.871]],[\"comment/3105\",[]],[\"name/3106\",[871,84.871]],[\"comment/3106\",[]],[\"name/3107\",[872,84.871]],[\"comment/3107\",[]],[\"name/3108\",[873,84.871]],[\"comment/3108\",[]],[\"name/3109\",[874,84.871]],[\"comment/3109\",[]],[\"name/3110\",[875,84.871]],[\"comment/3110\",[]],[\"name/3111\",[876,84.871]],[\"comment/3111\",[]],[\"name/3112\",[877,84.871]],[\"comment/3112\",[]],[\"name/3113\",[112,59.743]],[\"comment/3113\",[]],[\"name/3114\",[752,71.876]],[\"comment/3114\",[]],[\"name/3115\",[753,71.876]],[\"comment/3115\",[]],[\"name/3116\",[421,73.883]],[\"comment/3116\",[]],[\"name/3117\",[425,76.396]],[\"comment/3117\",[]],[\"name/3118\",[0,59.743]],[\"comment/3118\",[]],[\"name/3119\",[878,84.871]],[\"comment/3119\",[]],[\"name/3120\",[7,63.664]],[\"comment/3120\",[]],[\"name/3121\",[96,67.521]],[\"comment/3121\",[]],[\"name/3122\",[295,68.773]],[\"comment/3122\",[]],[\"name/3123\",[879,84.871]],[\"comment/3123\",[]],[\"name/3124\",[880,79.762]],[\"comment/3124\",[]],[\"name/3125\",[881,84.871]],[\"comment/3125\",[]],[\"name/3126\",[6,60.298]],[\"comment/3126\",[]],[\"name/3127\",[882,79.762]],[\"comment/3127\",[]],[\"name/3128\",[883,79.762]],[\"comment/3128\",[]],[\"name/3129\",[884,79.762]],[\"comment/3129\",[]],[\"name/3130\",[885,79.762]],[\"comment/3130\",[]],[\"name/3131\",[886,79.762]],[\"comment/3131\",[]],[\"name/3132\",[887,79.762]],[\"comment/3132\",[]],[\"name/3133\",[888,79.762]],[\"comment/3133\",[]],[\"name/3134\",[889,84.871]],[\"comment/3134\",[]],[\"name/3135\",[416,63.664]],[\"comment/3135\",[]],[\"name/3136\",[415,64.498]],[\"comment/3136\",[]],[\"name/3137\",[17,57.785]],[\"comment/3137\",[]],[\"name/3138\",[890,84.871]],[\"comment/3138\",[]],[\"name/3139\",[416,63.664]],[\"comment/3139\",[]],[\"name/3140\",[17,57.785]],[\"comment/3140\",[]],[\"name/3141\",[891,84.871]],[\"comment/3141\",[]],[\"name/3142\",[415,64.498]],[\"comment/3142\",[]],[\"name/3143\",[892,84.871]],[\"comment/3143\",[]],[\"name/3144\",[893,84.871]],[\"comment/3144\",[]],[\"name/3145\",[111,57.35]],[\"comment/3145\",[]],[\"name/3146\",[416,63.664]],[\"comment/3146\",[]],[\"name/3147\",[0,59.743]],[\"comment/3147\",[]],[\"name/3148\",[415,64.498]],[\"comment/3148\",[]],[\"name/3149\",[17,57.785]],[\"comment/3149\",[]],[\"name/3150\",[755,70.205]],[\"comment/3150\",[]],[\"name/3151\",[756,70.205]],[\"comment/3151\",[]],[\"name/3152\",[413,67.521]],[\"comment/3152\",[]],[\"name/3153\",[9,46.22]],[\"comment/3153\",[]],[\"name/3154\",[104,60.298]],[\"comment/3154\",[]],[\"name/3155\",[105,59.743]],[\"comment/3155\",[]],[\"name/3156\",[15,46.945]],[\"comment/3156\",[]],[\"name/3157\",[16,44.087]],[\"comment/3157\",[]],[\"name/3158\",[110,59.743]],[\"comment/3158\",[]],[\"name/3159\",[111,57.35]],[\"comment/3159\",[]],[\"name/3160\",[112,59.743]],[\"comment/3160\",[]],[\"name/3161\",[18,52.946]],[\"comment/3161\",[]],[\"name/3162\",[1,44.315]],[\"comment/3162\",[]],[\"name/3163\",[113,60.298]],[\"comment/3163\",[]],[\"name/3164\",[25,44.668]],[\"comment/3164\",[]],[\"name/3165\",[114,60.298]],[\"comment/3165\",[]],[\"name/3166\",[115,60.298]],[\"comment/3166\",[]],[\"name/3167\",[116,57.35]],[\"comment/3167\",[]],[\"name/3168\",[117,60.298]],[\"comment/3168\",[]],[\"name/3169\",[118,60.298]],[\"comment/3169\",[]],[\"name/3170\",[119,57.785]],[\"comment/3170\",[]],[\"name/3171\",[120,60.298]],[\"comment/3171\",[]],[\"name/3172\",[121,60.298]],[\"comment/3172\",[]],[\"name/3173\",[122,56.933]],[\"comment/3173\",[]],[\"name/3174\",[66,43.221]],[\"comment/3174\",[]],[\"name/3175\",[123,58.716]],[\"comment/3175\",[]],[\"name/3176\",[124,60.298]],[\"comment/3176\",[]],[\"name/3177\",[125,60.298]],[\"comment/3177\",[]],[\"name/3178\",[126,59.743]],[\"comment/3178\",[]],[\"name/3179\",[127,60.298]],[\"comment/3179\",[]],[\"name/3180\",[128,54.419]],[\"comment/3180\",[]],[\"name/3181\",[129,54.419]],[\"comment/3181\",[]],[\"name/3182\",[130,54.107]],[\"comment/3182\",[]],[\"name/3183\",[131,60.298]],[\"comment/3183\",[]],[\"name/3184\",[132,60.298]],[\"comment/3184\",[]],[\"name/3185\",[133,60.298]],[\"comment/3185\",[]],[\"name/3186\",[134,60.298]],[\"comment/3186\",[]],[\"name/3187\",[135,59.743]],[\"comment/3187\",[]],[\"name/3188\",[136,60.298]],[\"comment/3188\",[]],[\"name/3189\",[137,60.298]],[\"comment/3189\",[]],[\"name/3190\",[138,59.743]],[\"comment/3190\",[]],[\"name/3191\",[139,60.298]],[\"comment/3191\",[]],[\"name/3192\",[140,60.298]],[\"comment/3192\",[]],[\"name/3193\",[141,60.298]],[\"comment/3193\",[]],[\"name/3194\",[142,60.298]],[\"comment/3194\",[]],[\"name/3195\",[143,59.216]],[\"comment/3195\",[]],[\"name/3196\",[144,59.743]],[\"comment/3196\",[]],[\"name/3197\",[145,59.743]],[\"comment/3197\",[]],[\"name/3198\",[146,59.743]],[\"comment/3198\",[]],[\"name/3199\",[147,59.743]],[\"comment/3199\",[]],[\"name/3200\",[148,60.298]],[\"comment/3200\",[]],[\"name/3201\",[149,60.298]],[\"comment/3201\",[]],[\"name/3202\",[150,60.298]],[\"comment/3202\",[]],[\"name/3203\",[151,60.298]],[\"comment/3203\",[]],[\"name/3204\",[152,60.298]],[\"comment/3204\",[]],[\"name/3205\",[153,60.298]],[\"comment/3205\",[]],[\"name/3206\",[154,60.298]],[\"comment/3206\",[]],[\"name/3207\",[155,60.298]],[\"comment/3207\",[]],[\"name/3208\",[156,58.239]],[\"comment/3208\",[]],[\"name/3209\",[157,60.298]],[\"comment/3209\",[]],[\"name/3210\",[158,60.298]],[\"comment/3210\",[]],[\"name/3211\",[1,44.315]],[\"comment/3211\",[]],[\"name/3212\",[159,56.933]],[\"comment/3212\",[]],[\"name/3213\",[160,56.933]],[\"comment/3213\",[]],[\"name/3214\",[161,60.298]],[\"comment/3214\",[]],[\"name/3215\",[162,60.298]],[\"comment/3215\",[]],[\"name/3216\",[163,60.298]],[\"comment/3216\",[]],[\"name/3217\",[164,56.933]],[\"comment/3217\",[]],[\"name/3218\",[165,59.743]],[\"comment/3218\",[]],[\"name/3219\",[166,59.743]],[\"comment/3219\",[]],[\"name/3220\",[167,60.298]],[\"comment/3220\",[]],[\"name/3221\",[168,60.298]],[\"comment/3221\",[]],[\"name/3222\",[169,60.298]],[\"comment/3222\",[]],[\"name/3223\",[170,60.298]],[\"comment/3223\",[]],[\"name/3224\",[171,60.298]],[\"comment/3224\",[]],[\"name/3225\",[172,57.35]],[\"comment/3225\",[]],[\"name/3226\",[173,59.743]],[\"comment/3226\",[]],[\"name/3227\",[174,59.743]],[\"comment/3227\",[]],[\"name/3228\",[26,50.524]],[\"comment/3228\",[]],[\"name/3229\",[22,49.502]],[\"comment/3229\",[]],[\"name/3230\",[41,52.675]],[\"comment/3230\",[]],[\"name/3231\",[42,52.675]],[\"comment/3231\",[]],[\"name/3232\",[175,53.804]],[\"comment/3232\",[]],[\"name/3233\",[176,59.216]],[\"comment/3233\",[]],[\"name/3234\",[177,59.743]],[\"comment/3234\",[]],[\"name/3235\",[178,59.743]],[\"comment/3235\",[]],[\"name/3236\",[179,59.743]],[\"comment/3236\",[]],[\"name/3237\",[180,59.743]],[\"comment/3237\",[]],[\"name/3238\",[181,59.743]],[\"comment/3238\",[]],[\"name/3239\",[182,59.743]],[\"comment/3239\",[]],[\"name/3240\",[183,59.743]],[\"comment/3240\",[]],[\"name/3241\",[184,59.743]],[\"comment/3241\",[]],[\"name/3242\",[108,59.743]],[\"comment/3242\",[]],[\"name/3243\",[185,58.239]],[\"comment/3243\",[]],[\"name/3244\",[186,59.743]],[\"comment/3244\",[]],[\"name/3245\",[109,56.533]],[\"comment/3245\",[]],[\"name/3246\",[187,59.743]],[\"comment/3246\",[]],[\"name/3247\",[188,56.933]],[\"comment/3247\",[]],[\"name/3248\",[189,59.216]],[\"comment/3248\",[]],[\"name/3249\",[190,59.743]],[\"comment/3249\",[]],[\"name/3250\",[191,59.743]],[\"comment/3250\",[]],[\"name/3251\",[192,59.743]],[\"comment/3251\",[]],[\"name/3252\",[193,59.743]],[\"comment/3252\",[]],[\"name/3253\",[194,59.743]],[\"comment/3253\",[]],[\"name/3254\",[34,53.509]],[\"comment/3254\",[]],[\"name/3255\",[32,53.509]],[\"comment/3255\",[]],[\"name/3256\",[33,53.509]],[\"comment/3256\",[]],[\"name/3257\",[44,47.097]],[\"comment/3257\",[]],[\"name/3258\",[45,47.097]],[\"comment/3258\",[]],[\"name/3259\",[46,47.097]],[\"comment/3259\",[]],[\"name/3260\",[47,47.097]],[\"comment/3260\",[]],[\"name/3261\",[48,47.097]],[\"comment/3261\",[]],[\"name/3262\",[49,47.097]],[\"comment/3262\",[]],[\"name/3263\",[50,47.097]],[\"comment/3263\",[]],[\"name/3264\",[51,47.097]],[\"comment/3264\",[]],[\"name/3265\",[25,44.668]],[\"comment/3265\",[]],[\"name/3266\",[52,47.097]],[\"comment/3266\",[]],[\"name/3267\",[53,47.097]],[\"comment/3267\",[]],[\"name/3268\",[54,47.097]],[\"comment/3268\",[]],[\"name/3269\",[55,47.097]],[\"comment/3269\",[]],[\"name/3270\",[56,47.097]],[\"comment/3270\",[]],[\"name/3271\",[57,47.097]],[\"comment/3271\",[]],[\"name/3272\",[58,47.097]],[\"comment/3272\",[]],[\"name/3273\",[59,47.097]],[\"comment/3273\",[]],[\"name/3274\",[60,47.097]],[\"comment/3274\",[]],[\"name/3275\",[61,47.097]],[\"comment/3275\",[]],[\"name/3276\",[62,47.097]],[\"comment/3276\",[]],[\"name/3277\",[63,46.796]],[\"comment/3277\",[]],[\"name/3278\",[64,46.796]],[\"comment/3278\",[]],[\"name/3279\",[65,47.097]],[\"comment/3279\",[]],[\"name/3280\",[66,43.221]],[\"comment/3280\",[]],[\"name/3281\",[67,46.649]],[\"comment/3281\",[]],[\"name/3282\",[68,46.649]],[\"comment/3282\",[]],[\"name/3283\",[69,47.097]],[\"comment/3283\",[]],[\"name/3284\",[70,46.945]],[\"comment/3284\",[]],[\"name/3285\",[71,46.945]],[\"comment/3285\",[]],[\"name/3286\",[72,47.097]],[\"comment/3286\",[]],[\"name/3287\",[73,47.097]],[\"comment/3287\",[]],[\"name/3288\",[74,47.097]],[\"comment/3288\",[]],[\"name/3289\",[75,46.945]],[\"comment/3289\",[]],[\"name/3290\",[76,46.796]],[\"comment/3290\",[]],[\"name/3291\",[77,46.796]],[\"comment/3291\",[]],[\"name/3292\",[894,84.871]],[\"comment/3292\",[]],[\"name/3293\",[343,76.396]],[\"comment/3293\",[]],[\"name/3294\",[895,84.871]],[\"comment/3294\",[]],[\"name/3295\",[896,84.871]],[\"comment/3295\",[]],[\"name/3296\",[0,59.743]],[\"comment/3296\",[]],[\"name/3297\",[119,57.785]],[\"comment/3297\",[]],[\"name/3298\",[897,84.871]],[\"comment/3298\",[]],[\"name/3299\",[585,76.396]],[\"comment/3299\",[]],[\"name/3300\",[752,71.876]],[\"comment/3300\",[]],[\"name/3301\",[753,71.876]],[\"comment/3301\",[]],[\"name/3302\",[898,84.871]],[\"comment/3302\",[]],[\"name/3303\",[366,73.883]],[\"comment/3303\",[]],[\"name/3304\",[685,64.498]],[\"comment/3304\",[]],[\"name/3305\",[880,79.762]],[\"comment/3305\",[]],[\"name/3306\",[899,84.871]],[\"comment/3306\",[]],[\"name/3307\",[159,56.933]],[\"comment/3307\",[]],[\"name/3308\",[160,56.933]],[\"comment/3308\",[]],[\"name/3309\",[900,84.871]],[\"comment/3309\",[]],[\"name/3310\",[111,57.35]],[\"comment/3310\",[]],[\"name/3311\",[416,63.664]],[\"comment/3311\",[]],[\"name/3312\",[415,64.498]],[\"comment/3312\",[]],[\"name/3313\",[17,57.785]],[\"comment/3313\",[]],[\"name/3314\",[755,70.205]],[\"comment/3314\",[]],[\"name/3315\",[756,70.205]],[\"comment/3315\",[]],[\"name/3316\",[530,73.883]],[\"comment/3316\",[]],[\"name/3317\",[8,57.35]],[\"comment/3317\",[]],[\"name/3318\",[9,46.22]],[\"comment/3318\",[]],[\"name/3319\",[104,60.298]],[\"comment/3319\",[]],[\"name/3320\",[105,59.743]],[\"comment/3320\",[]],[\"name/3321\",[15,46.945]],[\"comment/3321\",[]],[\"name/3322\",[16,44.087]],[\"comment/3322\",[]],[\"name/3323\",[901,84.871]],[\"comment/3323\",[]],[\"name/3324\",[22,49.502]],[\"comment/3324\",[]],[\"name/3325\",[770,76.396]],[\"comment/3325\",[]],[\"name/3326\",[250,60.887]],[\"comment/3326\",[]],[\"name/3327\",[247,71.876]],[\"comment/3327\",[]],[\"name/3328\",[251,71.876]],[\"comment/3328\",[]],[\"name/3329\",[902,76.396]],[\"comment/3329\",[]],[\"name/3330\",[385,67.521]],[\"comment/3330\",[]],[\"name/3331\",[165,59.743]],[\"comment/3331\",[]],[\"name/3332\",[62,47.097]],[\"comment/3332\",[]],[\"name/3333\",[130,54.107]],[\"comment/3333\",[]],[\"name/3334\",[109,56.533]],[\"comment/3334\",[]],[\"name/3335\",[25,44.668]],[\"comment/3335\",[]],[\"name/3336\",[110,59.743]],[\"comment/3336\",[]],[\"name/3337\",[111,57.35]],[\"comment/3337\",[]],[\"name/3338\",[112,59.743]],[\"comment/3338\",[]],[\"name/3339\",[18,52.946]],[\"comment/3339\",[]],[\"name/3340\",[1,44.315]],[\"comment/3340\",[]],[\"name/3341\",[113,60.298]],[\"comment/3341\",[]],[\"name/3342\",[25,44.668]],[\"comment/3342\",[]],[\"name/3343\",[114,60.298]],[\"comment/3343\",[]],[\"name/3344\",[115,60.298]],[\"comment/3344\",[]],[\"name/3345\",[116,57.35]],[\"comment/3345\",[]],[\"name/3346\",[117,60.298]],[\"comment/3346\",[]],[\"name/3347\",[118,60.298]],[\"comment/3347\",[]],[\"name/3348\",[119,57.785]],[\"comment/3348\",[]],[\"name/3349\",[120,60.298]],[\"comment/3349\",[]],[\"name/3350\",[121,60.298]],[\"comment/3350\",[]],[\"name/3351\",[122,56.933]],[\"comment/3351\",[]],[\"name/3352\",[66,43.221]],[\"comment/3352\",[]],[\"name/3353\",[123,58.716]],[\"comment/3353\",[]],[\"name/3354\",[124,60.298]],[\"comment/3354\",[]],[\"name/3355\",[125,60.298]],[\"comment/3355\",[]],[\"name/3356\",[126,59.743]],[\"comment/3356\",[]],[\"name/3357\",[127,60.298]],[\"comment/3357\",[]],[\"name/3358\",[128,54.419]],[\"comment/3358\",[]],[\"name/3359\",[129,54.419]],[\"comment/3359\",[]],[\"name/3360\",[131,60.298]],[\"comment/3360\",[]],[\"name/3361\",[132,60.298]],[\"comment/3361\",[]],[\"name/3362\",[133,60.298]],[\"comment/3362\",[]],[\"name/3363\",[134,60.298]],[\"comment/3363\",[]],[\"name/3364\",[135,59.743]],[\"comment/3364\",[]],[\"name/3365\",[136,60.298]],[\"comment/3365\",[]],[\"name/3366\",[137,60.298]],[\"comment/3366\",[]],[\"name/3367\",[138,59.743]],[\"comment/3367\",[]],[\"name/3368\",[139,60.298]],[\"comment/3368\",[]],[\"name/3369\",[140,60.298]],[\"comment/3369\",[]],[\"name/3370\",[141,60.298]],[\"comment/3370\",[]],[\"name/3371\",[142,60.298]],[\"comment/3371\",[]],[\"name/3372\",[143,59.216]],[\"comment/3372\",[]],[\"name/3373\",[144,59.743]],[\"comment/3373\",[]],[\"name/3374\",[145,59.743]],[\"comment/3374\",[]],[\"name/3375\",[146,59.743]],[\"comment/3375\",[]],[\"name/3376\",[147,59.743]],[\"comment/3376\",[]],[\"name/3377\",[148,60.298]],[\"comment/3377\",[]],[\"name/3378\",[149,60.298]],[\"comment/3378\",[]],[\"name/3379\",[150,60.298]],[\"comment/3379\",[]],[\"name/3380\",[151,60.298]],[\"comment/3380\",[]],[\"name/3381\",[152,60.298]],[\"comment/3381\",[]],[\"name/3382\",[153,60.298]],[\"comment/3382\",[]],[\"name/3383\",[154,60.298]],[\"comment/3383\",[]],[\"name/3384\",[155,60.298]],[\"comment/3384\",[]],[\"name/3385\",[156,58.239]],[\"comment/3385\",[]],[\"name/3386\",[157,60.298]],[\"comment/3386\",[]],[\"name/3387\",[158,60.298]],[\"comment/3387\",[]],[\"name/3388\",[1,44.315]],[\"comment/3388\",[]],[\"name/3389\",[159,56.933]],[\"comment/3389\",[]],[\"name/3390\",[160,56.933]],[\"comment/3390\",[]],[\"name/3391\",[161,60.298]],[\"comment/3391\",[]],[\"name/3392\",[162,60.298]],[\"comment/3392\",[]],[\"name/3393\",[163,60.298]],[\"comment/3393\",[]],[\"name/3394\",[164,56.933]],[\"comment/3394\",[]],[\"name/3395\",[166,59.743]],[\"comment/3395\",[]],[\"name/3396\",[167,60.298]],[\"comment/3396\",[]],[\"name/3397\",[168,60.298]],[\"comment/3397\",[]],[\"name/3398\",[169,60.298]],[\"comment/3398\",[]],[\"name/3399\",[170,60.298]],[\"comment/3399\",[]],[\"name/3400\",[171,60.298]],[\"comment/3400\",[]],[\"name/3401\",[172,57.35]],[\"comment/3401\",[]],[\"name/3402\",[173,59.743]],[\"comment/3402\",[]],[\"name/3403\",[174,59.743]],[\"comment/3403\",[]],[\"name/3404\",[26,50.524]],[\"comment/3404\",[]],[\"name/3405\",[41,52.675]],[\"comment/3405\",[]],[\"name/3406\",[42,52.675]],[\"comment/3406\",[]],[\"name/3407\",[175,53.804]],[\"comment/3407\",[]],[\"name/3408\",[176,59.216]],[\"comment/3408\",[]],[\"name/3409\",[177,59.743]],[\"comment/3409\",[]],[\"name/3410\",[178,59.743]],[\"comment/3410\",[]],[\"name/3411\",[179,59.743]],[\"comment/3411\",[]],[\"name/3412\",[180,59.743]],[\"comment/3412\",[]],[\"name/3413\",[181,59.743]],[\"comment/3413\",[]],[\"name/3414\",[182,59.743]],[\"comment/3414\",[]],[\"name/3415\",[183,59.743]],[\"comment/3415\",[]],[\"name/3416\",[184,59.743]],[\"comment/3416\",[]],[\"name/3417\",[108,59.743]],[\"comment/3417\",[]],[\"name/3418\",[185,58.239]],[\"comment/3418\",[]],[\"name/3419\",[186,59.743]],[\"comment/3419\",[]],[\"name/3420\",[187,59.743]],[\"comment/3420\",[]],[\"name/3421\",[188,56.933]],[\"comment/3421\",[]],[\"name/3422\",[189,59.216]],[\"comment/3422\",[]],[\"name/3423\",[190,59.743]],[\"comment/3423\",[]],[\"name/3424\",[191,59.743]],[\"comment/3424\",[]],[\"name/3425\",[192,59.743]],[\"comment/3425\",[]],[\"name/3426\",[193,59.743]],[\"comment/3426\",[]],[\"name/3427\",[194,59.743]],[\"comment/3427\",[]],[\"name/3428\",[34,53.509]],[\"comment/3428\",[]],[\"name/3429\",[32,53.509]],[\"comment/3429\",[]],[\"name/3430\",[33,53.509]],[\"comment/3430\",[]],[\"name/3431\",[44,47.097]],[\"comment/3431\",[]],[\"name/3432\",[45,47.097]],[\"comment/3432\",[]],[\"name/3433\",[46,47.097]],[\"comment/3433\",[]],[\"name/3434\",[47,47.097]],[\"comment/3434\",[]],[\"name/3435\",[48,47.097]],[\"comment/3435\",[]],[\"name/3436\",[49,47.097]],[\"comment/3436\",[]],[\"name/3437\",[50,47.097]],[\"comment/3437\",[]],[\"name/3438\",[51,47.097]],[\"comment/3438\",[]],[\"name/3439\",[52,47.097]],[\"comment/3439\",[]],[\"name/3440\",[53,47.097]],[\"comment/3440\",[]],[\"name/3441\",[54,47.097]],[\"comment/3441\",[]],[\"name/3442\",[55,47.097]],[\"comment/3442\",[]],[\"name/3443\",[56,47.097]],[\"comment/3443\",[]],[\"name/3444\",[57,47.097]],[\"comment/3444\",[]],[\"name/3445\",[58,47.097]],[\"comment/3445\",[]],[\"name/3446\",[59,47.097]],[\"comment/3446\",[]],[\"name/3447\",[60,47.097]],[\"comment/3447\",[]],[\"name/3448\",[61,47.097]],[\"comment/3448\",[]],[\"name/3449\",[63,46.796]],[\"comment/3449\",[]],[\"name/3450\",[64,46.796]],[\"comment/3450\",[]],[\"name/3451\",[65,47.097]],[\"comment/3451\",[]],[\"name/3452\",[66,43.221]],[\"comment/3452\",[]],[\"name/3453\",[67,46.649]],[\"comment/3453\",[]],[\"name/3454\",[68,46.649]],[\"comment/3454\",[]],[\"name/3455\",[69,47.097]],[\"comment/3455\",[]],[\"name/3456\",[70,46.945]],[\"comment/3456\",[]],[\"name/3457\",[71,46.945]],[\"comment/3457\",[]],[\"name/3458\",[72,47.097]],[\"comment/3458\",[]],[\"name/3459\",[73,47.097]],[\"comment/3459\",[]],[\"name/3460\",[74,47.097]],[\"comment/3460\",[]],[\"name/3461\",[75,46.945]],[\"comment/3461\",[]],[\"name/3462\",[76,46.796]],[\"comment/3462\",[]],[\"name/3463\",[77,46.796]],[\"comment/3463\",[]],[\"name/3464\",[517,73.883]],[\"comment/3464\",[]],[\"name/3465\",[9,46.22]],[\"comment/3465\",[]],[\"name/3466\",[10,58.239]],[\"comment/3466\",[]],[\"name/3467\",[13,54.107]],[\"comment/3467\",[]],[\"name/3468\",[14,59.743]],[\"comment/3468\",[]],[\"name/3469\",[15,46.945]],[\"comment/3469\",[]],[\"name/3470\",[16,44.087]],[\"comment/3470\",[]],[\"name/3471\",[109,56.533]],[\"comment/3471\",[]],[\"name/3472\",[26,50.524]],[\"comment/3472\",[]],[\"name/3473\",[22,49.502]],[\"comment/3473\",[]],[\"name/3474\",[25,44.668]],[\"comment/3474\",[]],[\"name/3475\",[27,60.887]],[\"comment/3475\",[]],[\"name/3476\",[28,60.887]],[\"comment/3476\",[]],[\"name/3477\",[23,60.887]],[\"comment/3477\",[]],[\"name/3478\",[29,60.887]],[\"comment/3478\",[]],[\"name/3479\",[30,60.887]],[\"comment/3479\",[]],[\"name/3480\",[31,60.887]],[\"comment/3480\",[]],[\"name/3481\",[32,53.509]],[\"comment/3481\",[]],[\"name/3482\",[33,53.509]],[\"comment/3482\",[]],[\"name/3483\",[34,53.509]],[\"comment/3483\",[]],[\"name/3484\",[35,56.148]],[\"comment/3484\",[]],[\"name/3485\",[36,55.778]],[\"comment/3485\",[]],[\"name/3486\",[37,60.887]],[\"comment/3486\",[]],[\"name/3487\",[38,59.743]],[\"comment/3487\",[]],[\"name/3488\",[39,60.887]],[\"comment/3488\",[]],[\"name/3489\",[40,60.887]],[\"comment/3489\",[]],[\"name/3490\",[41,52.675]],[\"comment/3490\",[]],[\"name/3491\",[42,52.675]],[\"comment/3491\",[]],[\"name/3492\",[43,60.887]],[\"comment/3492\",[]],[\"name/3493\",[44,47.097]],[\"comment/3493\",[]],[\"name/3494\",[45,47.097]],[\"comment/3494\",[]],[\"name/3495\",[46,47.097]],[\"comment/3495\",[]],[\"name/3496\",[47,47.097]],[\"comment/3496\",[]],[\"name/3497\",[48,47.097]],[\"comment/3497\",[]],[\"name/3498\",[49,47.097]],[\"comment/3498\",[]],[\"name/3499\",[50,47.097]],[\"comment/3499\",[]],[\"name/3500\",[51,47.097]],[\"comment/3500\",[]],[\"name/3501\",[52,47.097]],[\"comment/3501\",[]],[\"name/3502\",[53,47.097]],[\"comment/3502\",[]],[\"name/3503\",[54,47.097]],[\"comment/3503\",[]],[\"name/3504\",[55,47.097]],[\"comment/3504\",[]],[\"name/3505\",[56,47.097]],[\"comment/3505\",[]],[\"name/3506\",[57,47.097]],[\"comment/3506\",[]],[\"name/3507\",[58,47.097]],[\"comment/3507\",[]],[\"name/3508\",[59,47.097]],[\"comment/3508\",[]],[\"name/3509\",[60,47.097]],[\"comment/3509\",[]],[\"name/3510\",[61,47.097]],[\"comment/3510\",[]],[\"name/3511\",[62,47.097]],[\"comment/3511\",[]],[\"name/3512\",[63,46.796]],[\"comment/3512\",[]],[\"name/3513\",[64,46.796]],[\"comment/3513\",[]],[\"name/3514\",[65,47.097]],[\"comment/3514\",[]],[\"name/3515\",[66,43.221]],[\"comment/3515\",[]],[\"name/3516\",[67,46.649]],[\"comment/3516\",[]],[\"name/3517\",[68,46.649]],[\"comment/3517\",[]],[\"name/3518\",[69,47.097]],[\"comment/3518\",[]],[\"name/3519\",[70,46.945]],[\"comment/3519\",[]],[\"name/3520\",[71,46.945]],[\"comment/3520\",[]],[\"name/3521\",[72,47.097]],[\"comment/3521\",[]],[\"name/3522\",[73,47.097]],[\"comment/3522\",[]],[\"name/3523\",[74,47.097]],[\"comment/3523\",[]],[\"name/3524\",[75,46.945]],[\"comment/3524\",[]],[\"name/3525\",[76,46.796]],[\"comment/3525\",[]],[\"name/3526\",[77,46.796]],[\"comment/3526\",[]],[\"name/3527\",[903,84.871]],[\"comment/3527\",[]],[\"name/3528\",[904,84.871]],[\"comment/3528\",[]],[\"name/3529\",[314,79.762]],[\"comment/3529\",[]],[\"name/3530\",[905,84.871]],[\"comment/3530\",[]],[\"name/3531\",[906,84.871]],[\"comment/3531\",[]],[\"name/3532\",[502,71.876]],[\"comment/3532\",[]],[\"name/3533\",[8,57.35]],[\"comment/3533\",[]],[\"name/3534\",[9,46.22]],[\"comment/3534\",[]],[\"name/3535\",[343,76.396]],[\"comment/3535\",[]],[\"name/3536\",[10,58.239]],[\"comment/3536\",[]],[\"name/3537\",[907,84.871]],[\"comment/3537\",[]],[\"name/3538\",[908,84.871]],[\"comment/3538\",[]],[\"name/3539\",[909,84.871]],[\"comment/3539\",[]],[\"name/3540\",[910,84.871]],[\"comment/3540\",[]],[\"name/3541\",[911,84.871]],[\"comment/3541\",[]],[\"name/3542\",[13,54.107]],[\"comment/3542\",[]],[\"name/3543\",[14,59.743]],[\"comment/3543\",[]],[\"name/3544\",[15,46.945]],[\"comment/3544\",[]],[\"name/3545\",[16,44.087]],[\"comment/3545\",[]],[\"name/3546\",[18,52.946]],[\"comment/3546\",[]],[\"name/3547\",[1,44.315]],[\"comment/3547\",[]],[\"name/3548\",[912,84.871]],[\"comment/3548\",[]],[\"name/3549\",[913,84.871]],[\"comment/3549\",[]],[\"name/3550\",[20,73.883]],[\"comment/3550\",[]],[\"name/3551\",[164,56.933]],[\"comment/3551\",[]],[\"name/3552\",[914,84.871]],[\"comment/3552\",[]],[\"name/3553\",[915,84.871]],[\"comment/3553\",[]],[\"name/3554\",[916,84.871]],[\"comment/3554\",[]],[\"name/3555\",[25,44.668]],[\"comment/3555\",[]],[\"name/3556\",[22,49.502]],[\"comment/3556\",[]],[\"name/3557\",[26,50.524]],[\"comment/3557\",[]],[\"name/3558\",[27,60.887]],[\"comment/3558\",[]],[\"name/3559\",[28,60.887]],[\"comment/3559\",[]],[\"name/3560\",[23,60.887]],[\"comment/3560\",[]],[\"name/3561\",[29,60.887]],[\"comment/3561\",[]],[\"name/3562\",[30,60.887]],[\"comment/3562\",[]],[\"name/3563\",[31,60.887]],[\"comment/3563\",[]],[\"name/3564\",[32,53.509]],[\"comment/3564\",[]],[\"name/3565\",[33,53.509]],[\"comment/3565\",[]],[\"name/3566\",[34,53.509]],[\"comment/3566\",[]],[\"name/3567\",[35,56.148]],[\"comment/3567\",[]],[\"name/3568\",[36,55.778]],[\"comment/3568\",[]],[\"name/3569\",[37,60.887]],[\"comment/3569\",[]],[\"name/3570\",[38,59.743]],[\"comment/3570\",[]],[\"name/3571\",[39,60.887]],[\"comment/3571\",[]],[\"name/3572\",[40,60.887]],[\"comment/3572\",[]],[\"name/3573\",[41,52.675]],[\"comment/3573\",[]],[\"name/3574\",[42,52.675]],[\"comment/3574\",[]],[\"name/3575\",[43,60.887]],[\"comment/3575\",[]],[\"name/3576\",[44,47.097]],[\"comment/3576\",[]],[\"name/3577\",[45,47.097]],[\"comment/3577\",[]],[\"name/3578\",[46,47.097]],[\"comment/3578\",[]],[\"name/3579\",[47,47.097]],[\"comment/3579\",[]],[\"name/3580\",[48,47.097]],[\"comment/3580\",[]],[\"name/3581\",[49,47.097]],[\"comment/3581\",[]],[\"name/3582\",[50,47.097]],[\"comment/3582\",[]],[\"name/3583\",[51,47.097]],[\"comment/3583\",[]],[\"name/3584\",[52,47.097]],[\"comment/3584\",[]],[\"name/3585\",[53,47.097]],[\"comment/3585\",[]],[\"name/3586\",[54,47.097]],[\"comment/3586\",[]],[\"name/3587\",[55,47.097]],[\"comment/3587\",[]],[\"name/3588\",[56,47.097]],[\"comment/3588\",[]],[\"name/3589\",[57,47.097]],[\"comment/3589\",[]],[\"name/3590\",[58,47.097]],[\"comment/3590\",[]],[\"name/3591\",[59,47.097]],[\"comment/3591\",[]],[\"name/3592\",[60,47.097]],[\"comment/3592\",[]],[\"name/3593\",[61,47.097]],[\"comment/3593\",[]],[\"name/3594\",[62,47.097]],[\"comment/3594\",[]],[\"name/3595\",[63,46.796]],[\"comment/3595\",[]],[\"name/3596\",[64,46.796]],[\"comment/3596\",[]],[\"name/3597\",[65,47.097]],[\"comment/3597\",[]],[\"name/3598\",[66,43.221]],[\"comment/3598\",[]],[\"name/3599\",[67,46.649]],[\"comment/3599\",[]],[\"name/3600\",[68,46.649]],[\"comment/3600\",[]],[\"name/3601\",[69,47.097]],[\"comment/3601\",[]],[\"name/3602\",[70,46.945]],[\"comment/3602\",[]],[\"name/3603\",[71,46.945]],[\"comment/3603\",[]],[\"name/3604\",[72,47.097]],[\"comment/3604\",[]],[\"name/3605\",[73,47.097]],[\"comment/3605\",[]],[\"name/3606\",[74,47.097]],[\"comment/3606\",[]],[\"name/3607\",[75,46.945]],[\"comment/3607\",[]],[\"name/3608\",[76,46.796]],[\"comment/3608\",[]],[\"name/3609\",[77,46.796]],[\"comment/3609\",[]],[\"name/3610\",[531,76.396]],[\"comment/3610\",[]],[\"name/3611\",[9,46.22]],[\"comment/3611\",[]],[\"name/3612\",[402,79.762]],[\"comment/3612\",[]],[\"name/3613\",[10,58.239]],[\"comment/3613\",[]],[\"name/3614\",[13,54.107]],[\"comment/3614\",[]],[\"name/3615\",[14,59.743]],[\"comment/3615\",[]],[\"name/3616\",[15,46.945]],[\"comment/3616\",[]],[\"name/3617\",[16,44.087]],[\"comment/3617\",[]],[\"name/3618\",[23,60.887]],[\"comment/3618\",[]],[\"name/3619\",[25,44.668]],[\"comment/3619\",[]],[\"name/3620\",[22,49.502]],[\"comment/3620\",[]],[\"name/3621\",[26,50.524]],[\"comment/3621\",[]],[\"name/3622\",[27,60.887]],[\"comment/3622\",[]],[\"name/3623\",[28,60.887]],[\"comment/3623\",[]],[\"name/3624\",[29,60.887]],[\"comment/3624\",[]],[\"name/3625\",[30,60.887]],[\"comment/3625\",[]],[\"name/3626\",[31,60.887]],[\"comment/3626\",[]],[\"name/3627\",[32,53.509]],[\"comment/3627\",[]],[\"name/3628\",[33,53.509]],[\"comment/3628\",[]],[\"name/3629\",[34,53.509]],[\"comment/3629\",[]],[\"name/3630\",[35,56.148]],[\"comment/3630\",[]],[\"name/3631\",[36,55.778]],[\"comment/3631\",[]],[\"name/3632\",[37,60.887]],[\"comment/3632\",[]],[\"name/3633\",[38,59.743]],[\"comment/3633\",[]],[\"name/3634\",[39,60.887]],[\"comment/3634\",[]],[\"name/3635\",[40,60.887]],[\"comment/3635\",[]],[\"name/3636\",[41,52.675]],[\"comment/3636\",[]],[\"name/3637\",[42,52.675]],[\"comment/3637\",[]],[\"name/3638\",[43,60.887]],[\"comment/3638\",[]],[\"name/3639\",[44,47.097]],[\"comment/3639\",[]],[\"name/3640\",[45,47.097]],[\"comment/3640\",[]],[\"name/3641\",[46,47.097]],[\"comment/3641\",[]],[\"name/3642\",[47,47.097]],[\"comment/3642\",[]],[\"name/3643\",[48,47.097]],[\"comment/3643\",[]],[\"name/3644\",[49,47.097]],[\"comment/3644\",[]],[\"name/3645\",[50,47.097]],[\"comment/3645\",[]],[\"name/3646\",[51,47.097]],[\"comment/3646\",[]],[\"name/3647\",[52,47.097]],[\"comment/3647\",[]],[\"name/3648\",[53,47.097]],[\"comment/3648\",[]],[\"name/3649\",[54,47.097]],[\"comment/3649\",[]],[\"name/3650\",[55,47.097]],[\"comment/3650\",[]],[\"name/3651\",[56,47.097]],[\"comment/3651\",[]],[\"name/3652\",[57,47.097]],[\"comment/3652\",[]],[\"name/3653\",[58,47.097]],[\"comment/3653\",[]],[\"name/3654\",[59,47.097]],[\"comment/3654\",[]],[\"name/3655\",[60,47.097]],[\"comment/3655\",[]],[\"name/3656\",[61,47.097]],[\"comment/3656\",[]],[\"name/3657\",[62,47.097]],[\"comment/3657\",[]],[\"name/3658\",[63,46.796]],[\"comment/3658\",[]],[\"name/3659\",[64,46.796]],[\"comment/3659\",[]],[\"name/3660\",[65,47.097]],[\"comment/3660\",[]],[\"name/3661\",[66,43.221]],[\"comment/3661\",[]],[\"name/3662\",[67,46.649]],[\"comment/3662\",[]],[\"name/3663\",[68,46.649]],[\"comment/3663\",[]],[\"name/3664\",[69,47.097]],[\"comment/3664\",[]],[\"name/3665\",[70,46.945]],[\"comment/3665\",[]],[\"name/3666\",[71,46.945]],[\"comment/3666\",[]],[\"name/3667\",[72,47.097]],[\"comment/3667\",[]],[\"name/3668\",[73,47.097]],[\"comment/3668\",[]],[\"name/3669\",[74,47.097]],[\"comment/3669\",[]],[\"name/3670\",[75,46.945]],[\"comment/3670\",[]],[\"name/3671\",[76,46.796]],[\"comment/3671\",[]],[\"name/3672\",[77,46.796]],[\"comment/3672\",[]],[\"name/3673\",[917,84.871]],[\"comment/3673\",[]],[\"name/3674\",[918,84.871]],[\"comment/3674\",[]],[\"name/3675\",[1,44.315]],[\"comment/3675\",[]],[\"name/3676\",[919,84.871]],[\"comment/3676\",[]],[\"name/3677\",[1,44.315]],[\"comment/3677\",[]],[\"name/3678\",[920,84.871]],[\"comment/3678\",[]],[\"name/3679\",[921,84.871]],[\"comment/3679\",[]],[\"name/3680\",[922,84.871]],[\"comment/3680\",[]],[\"name/3681\",[923,79.762]],[\"comment/3681\",[]],[\"name/3682\",[924,84.871]],[\"comment/3682\",[]],[\"name/3683\",[925,84.871]],[\"comment/3683\",[]],[\"name/3684\",[926,84.871]],[\"comment/3684\",[]],[\"name/3685\",[927,84.871]],[\"comment/3685\",[]],[\"name/3686\",[928,84.871]],[\"comment/3686\",[]],[\"name/3687\",[929,84.871]],[\"comment/3687\",[]],[\"name/3688\",[930,84.871]],[\"comment/3688\",[]],[\"name/3689\",[931,84.871]],[\"comment/3689\",[]],[\"name/3690\",[932,84.871]],[\"comment/3690\",[]],[\"name/3691\",[933,84.871]],[\"comment/3691\",[]],[\"name/3692\",[934,84.871]],[\"comment/3692\",[]],[\"name/3693\",[935,84.871]],[\"comment/3693\",[]],[\"name/3694\",[936,84.871]],[\"comment/3694\",[]],[\"name/3695\",[937,84.871]],[\"comment/3695\",[]],[\"name/3696\",[938,84.871]],[\"comment/3696\",[]],[\"name/3697\",[466,79.762]],[\"comment/3697\",[]],[\"name/3698\",[407,73.883]],[\"comment/3698\",[]],[\"name/3699\",[467,76.396]],[\"comment/3699\",[]],[\"name/3700\",[8,57.35]],[\"comment/3700\",[]],[\"name/3701\",[16,44.087]],[\"comment/3701\",[]],[\"name/3702\",[470,76.396]],[\"comment/3702\",[]],[\"name/3703\",[939,84.871]],[\"comment/3703\",[]],[\"name/3704\",[940,84.871]],[\"comment/3704\",[]],[\"name/3705\",[941,84.871]],[\"comment/3705\",[]],[\"name/3706\",[942,84.871]],[\"comment/3706\",[]],[\"name/3707\",[943,84.871]],[\"comment/3707\",[]],[\"name/3708\",[944,84.871]],[\"comment/3708\",[]],[\"name/3709\",[923,79.762]],[\"comment/3709\",[]],[\"name/3710\",[516,71.876]],[\"comment/3710\",[]],[\"name/3711\",[8,57.35]],[\"comment/3711\",[]],[\"name/3712\",[9,46.22]],[\"comment/3712\",[]],[\"name/3713\",[15,46.945]],[\"comment/3713\",[]],[\"name/3714\",[324,66.409]],[\"comment/3714\",[]],[\"name/3715\",[17,57.785]],[\"comment/3715\",[]],[\"name/3716\",[1,44.315]],[\"comment/3716\",[]],[\"name/3717\",[230,68.773]],[\"comment/3717\",[]],[\"name/3718\",[945,84.871]],[\"comment/3718\",[]],[\"name/3719\",[946,84.871]],[\"comment/3719\",[]],[\"name/3720\",[947,76.396]],[\"comment/3720\",[]],[\"name/3721\",[948,84.871]],[\"comment/3721\",[]],[\"name/3722\",[949,84.871]],[\"comment/3722\",[]],[\"name/3723\",[950,84.871]],[\"comment/3723\",[]],[\"name/3724\",[16,44.087]],[\"comment/3724\",[]],[\"name/3725\",[18,52.946]],[\"comment/3725\",[]],[\"name/3726\",[1,44.315]],[\"comment/3726\",[]],[\"name/3727\",[951,76.396]],[\"comment/3727\",[]],[\"name/3728\",[952,79.762]],[\"comment/3728\",[]],[\"name/3729\",[953,84.871]],[\"comment/3729\",[]],[\"name/3730\",[954,84.871]],[\"comment/3730\",[]],[\"name/3731\",[107,70.205]],[\"comment/3731\",[]],[\"name/3732\",[955,84.871]],[\"comment/3732\",[]],[\"name/3733\",[385,67.521]],[\"comment/3733\",[]],[\"name/3734\",[956,84.871]],[\"comment/3734\",[]],[\"name/3735\",[957,84.871]],[\"comment/3735\",[]],[\"name/3736\",[25,44.668]],[\"comment/3736\",[]],[\"name/3737\",[44,47.097]],[\"comment/3737\",[]],[\"name/3738\",[45,47.097]],[\"comment/3738\",[]],[\"name/3739\",[46,47.097]],[\"comment/3739\",[]],[\"name/3740\",[47,47.097]],[\"comment/3740\",[]],[\"name/3741\",[48,47.097]],[\"comment/3741\",[]],[\"name/3742\",[49,47.097]],[\"comment/3742\",[]],[\"name/3743\",[50,47.097]],[\"comment/3743\",[]],[\"name/3744\",[51,47.097]],[\"comment/3744\",[]],[\"name/3745\",[52,47.097]],[\"comment/3745\",[]],[\"name/3746\",[53,47.097]],[\"comment/3746\",[]],[\"name/3747\",[54,47.097]],[\"comment/3747\",[]],[\"name/3748\",[55,47.097]],[\"comment/3748\",[]],[\"name/3749\",[56,47.097]],[\"comment/3749\",[]],[\"name/3750\",[57,47.097]],[\"comment/3750\",[]],[\"name/3751\",[58,47.097]],[\"comment/3751\",[]],[\"name/3752\",[59,47.097]],[\"comment/3752\",[]],[\"name/3753\",[60,47.097]],[\"comment/3753\",[]],[\"name/3754\",[61,47.097]],[\"comment/3754\",[]],[\"name/3755\",[62,47.097]],[\"comment/3755\",[]],[\"name/3756\",[63,46.796]],[\"comment/3756\",[]],[\"name/3757\",[64,46.796]],[\"comment/3757\",[]],[\"name/3758\",[65,47.097]],[\"comment/3758\",[]],[\"name/3759\",[66,43.221]],[\"comment/3759\",[]],[\"name/3760\",[67,46.649]],[\"comment/3760\",[]],[\"name/3761\",[68,46.649]],[\"comment/3761\",[]],[\"name/3762\",[69,47.097]],[\"comment/3762\",[]],[\"name/3763\",[70,46.945]],[\"comment/3763\",[]],[\"name/3764\",[71,46.945]],[\"comment/3764\",[]],[\"name/3765\",[72,47.097]],[\"comment/3765\",[]],[\"name/3766\",[73,47.097]],[\"comment/3766\",[]],[\"name/3767\",[74,47.097]],[\"comment/3767\",[]],[\"name/3768\",[75,46.945]],[\"comment/3768\",[]],[\"name/3769\",[76,46.796]],[\"comment/3769\",[]],[\"name/3770\",[77,46.796]],[\"comment/3770\",[]],[\"name/3771\",[958,84.871]],[\"comment/3771\",[]],[\"name/3772\",[474,76.396]],[\"comment/3772\",[]],[\"name/3773\",[959,79.762]],[\"comment/3773\",[]],[\"name/3774\",[667,79.762]],[\"comment/3774\",[]],[\"name/3775\",[960,84.871]],[\"comment/3775\",[]],[\"name/3776\",[532,79.762]],[\"comment/3776\",[]],[\"name/3777\",[961,84.871]],[\"comment/3777\",[]],[\"name/3778\",[962,84.871]],[\"comment/3778\",[]],[\"name/3779\",[963,84.871]],[\"comment/3779\",[]],[\"name/3780\",[16,44.087]],[\"comment/3780\",[]],[\"name/3781\",[272,73.883]],[\"comment/3781\",[]],[\"name/3782\",[964,84.871]],[\"comment/3782\",[]],[\"name/3783\",[965,84.871]],[\"comment/3783\",[]],[\"name/3784\",[966,84.871]],[\"comment/3784\",[]],[\"name/3785\",[967,84.871]],[\"comment/3785\",[]],[\"name/3786\",[968,84.871]],[\"comment/3786\",[]],[\"name/3787\",[969,84.871]],[\"comment/3787\",[]],[\"name/3788\",[970,84.871]],[\"comment/3788\",[]],[\"name/3789\",[971,84.871]],[\"comment/3789\",[]],[\"name/3790\",[972,84.871]],[\"comment/3790\",[]],[\"name/3791\",[973,84.871]],[\"comment/3791\",[]],[\"name/3792\",[159,56.933]],[\"comment/3792\",[]],[\"name/3793\",[160,56.933]],[\"comment/3793\",[]],[\"name/3794\",[6,60.298]],[\"comment/3794\",[]],[\"name/3795\",[260,65.408]],[\"comment/3795\",[]],[\"name/3796\",[974,84.871]],[\"comment/3796\",[]],[\"name/3797\",[975,84.871]],[\"comment/3797\",[]],[\"name/3798\",[533,76.396]],[\"comment/3798\",[]],[\"name/3799\",[9,46.22]],[\"comment/3799\",[]],[\"name/3800\",[16,44.087]],[\"comment/3800\",[]],[\"name/3801\",[272,73.883]],[\"comment/3801\",[]],[\"name/3802\",[276,76.396]],[\"comment/3802\",[]],[\"name/3803\",[277,76.396]],[\"comment/3803\",[]],[\"name/3804\",[278,76.396]],[\"comment/3804\",[]],[\"name/3805\",[279,76.396]],[\"comment/3805\",[]],[\"name/3806\",[280,76.396]],[\"comment/3806\",[]],[\"name/3807\",[281,76.396]],[\"comment/3807\",[]],[\"name/3808\",[282,76.396]],[\"comment/3808\",[]],[\"name/3809\",[283,76.396]],[\"comment/3809\",[]],[\"name/3810\",[122,56.933]],[\"comment/3810\",[]],[\"name/3811\",[285,76.396]],[\"comment/3811\",[]],[\"name/3812\",[284,73.883]],[\"comment/3812\",[]],[\"name/3813\",[286,76.396]],[\"comment/3813\",[]],[\"name/3814\",[287,76.396]],[\"comment/3814\",[]],[\"name/3815\",[288,76.396]],[\"comment/3815\",[]],[\"name/3816\",[289,76.396]],[\"comment/3816\",[]],[\"name/3817\",[290,76.396]],[\"comment/3817\",[]],[\"name/3818\",[291,76.396]],[\"comment/3818\",[]],[\"name/3819\",[292,76.396]],[\"comment/3819\",[]],[\"name/3820\",[293,76.396]],[\"comment/3820\",[]],[\"name/3821\",[294,76.396]],[\"comment/3821\",[]],[\"name/3822\",[295,68.773]],[\"comment/3822\",[]],[\"name/3823\",[296,76.396]],[\"comment/3823\",[]],[\"name/3824\",[298,76.396]],[\"comment/3824\",[]],[\"name/3825\",[299,76.396]],[\"comment/3825\",[]],[\"name/3826\",[300,76.396]],[\"comment/3826\",[]],[\"name/3827\",[273,76.396]],[\"comment/3827\",[]],[\"name/3828\",[274,76.396]],[\"comment/3828\",[]],[\"name/3829\",[275,73.883]],[\"comment/3829\",[]],[\"name/3830\",[297,76.396]],[\"comment/3830\",[]],[\"name/3831\",[301,73.883]],[\"comment/3831\",[]],[\"name/3832\",[302,73.883]],[\"comment/3832\",[]],[\"name/3833\",[67,46.649]],[\"comment/3833\",[]],[\"name/3834\",[68,46.649]],[\"comment/3834\",[]],[\"name/3835\",[66,43.221]],[\"comment/3835\",[]],[\"name/3836\",[303,76.396]],[\"comment/3836\",[]],[\"name/3837\",[976,84.871]],[\"comment/3837\",[]],[\"name/3838\",[549,79.762]],[\"comment/3838\",[]],[\"name/3839\",[270,79.762]],[\"comment/3839\",[]],[\"name/3840\",[977,79.762]],[\"comment/3840\",[]],[\"name/3841\",[550,79.762]],[\"comment/3841\",[]],[\"name/3842\",[329,71.876]],[\"comment/3842\",[]],[\"name/3843\",[233,76.396]],[\"comment/3843\",[]],[\"name/3844\",[234,76.396]],[\"comment/3844\",[]],[\"name/3845\",[484,76.396]],[\"comment/3845\",[]],[\"name/3846\",[978,84.871]],[\"comment/3846\",[]],[\"name/3847\",[979,84.871]],[\"comment/3847\",[]],[\"name/3848\",[980,84.871]],[\"comment/3848\",[]],[\"name/3849\",[981,84.871]],[\"comment/3849\",[]],[\"name/3850\",[982,79.762]],[\"comment/3850\",[]],[\"name/3851\",[983,84.871]],[\"comment/3851\",[]],[\"name/3852\",[984,84.871]],[\"comment/3852\",[]],[\"name/3853\",[16,44.087]],[\"comment/3853\",[]],[\"name/3854\",[284,73.883]],[\"comment/3854\",[]],[\"name/3855\",[63,46.796]],[\"comment/3855\",[]],[\"name/3856\",[494,73.883]],[\"comment/3856\",[]],[\"name/3857\",[9,46.22]],[\"comment/3857\",[]],[\"name/3858\",[104,60.298]],[\"comment/3858\",[]],[\"name/3859\",[105,59.743]],[\"comment/3859\",[]],[\"name/3860\",[15,46.945]],[\"comment/3860\",[]],[\"name/3861\",[16,44.087]],[\"comment/3861\",[]],[\"name/3862\",[748,76.396]],[\"comment/3862\",[]],[\"name/3863\",[62,47.097]],[\"comment/3863\",[]],[\"name/3864\",[109,56.533]],[\"comment/3864\",[]],[\"name/3865\",[749,70.205]],[\"comment/3865\",[]],[\"name/3866\",[140,60.298]],[\"comment/3866\",[]],[\"name/3867\",[25,44.668]],[\"comment/3867\",[]],[\"name/3868\",[110,59.743]],[\"comment/3868\",[]],[\"name/3869\",[111,57.35]],[\"comment/3869\",[]],[\"name/3870\",[112,59.743]],[\"comment/3870\",[]],[\"name/3871\",[18,52.946]],[\"comment/3871\",[]],[\"name/3872\",[1,44.315]],[\"comment/3872\",[]],[\"name/3873\",[113,60.298]],[\"comment/3873\",[]],[\"name/3874\",[25,44.668]],[\"comment/3874\",[]],[\"name/3875\",[114,60.298]],[\"comment/3875\",[]],[\"name/3876\",[115,60.298]],[\"comment/3876\",[]],[\"name/3877\",[116,57.35]],[\"comment/3877\",[]],[\"name/3878\",[117,60.298]],[\"comment/3878\",[]],[\"name/3879\",[118,60.298]],[\"comment/3879\",[]],[\"name/3880\",[119,57.785]],[\"comment/3880\",[]],[\"name/3881\",[120,60.298]],[\"comment/3881\",[]],[\"name/3882\",[121,60.298]],[\"comment/3882\",[]],[\"name/3883\",[122,56.933]],[\"comment/3883\",[]],[\"name/3884\",[66,43.221]],[\"comment/3884\",[]],[\"name/3885\",[123,58.716]],[\"comment/3885\",[]],[\"name/3886\",[124,60.298]],[\"comment/3886\",[]],[\"name/3887\",[125,60.298]],[\"comment/3887\",[]],[\"name/3888\",[126,59.743]],[\"comment/3888\",[]],[\"name/3889\",[127,60.298]],[\"comment/3889\",[]],[\"name/3890\",[128,54.419]],[\"comment/3890\",[]],[\"name/3891\",[129,54.419]],[\"comment/3891\",[]],[\"name/3892\",[130,54.107]],[\"comment/3892\",[]],[\"name/3893\",[131,60.298]],[\"comment/3893\",[]],[\"name/3894\",[132,60.298]],[\"comment/3894\",[]],[\"name/3895\",[133,60.298]],[\"comment/3895\",[]],[\"name/3896\",[134,60.298]],[\"comment/3896\",[]],[\"name/3897\",[135,59.743]],[\"comment/3897\",[]],[\"name/3898\",[136,60.298]],[\"comment/3898\",[]],[\"name/3899\",[137,60.298]],[\"comment/3899\",[]],[\"name/3900\",[138,59.743]],[\"comment/3900\",[]],[\"name/3901\",[139,60.298]],[\"comment/3901\",[]],[\"name/3902\",[141,60.298]],[\"comment/3902\",[]],[\"name/3903\",[142,60.298]],[\"comment/3903\",[]],[\"name/3904\",[143,59.216]],[\"comment/3904\",[]],[\"name/3905\",[144,59.743]],[\"comment/3905\",[]],[\"name/3906\",[145,59.743]],[\"comment/3906\",[]],[\"name/3907\",[146,59.743]],[\"comment/3907\",[]],[\"name/3908\",[147,59.743]],[\"comment/3908\",[]],[\"name/3909\",[148,60.298]],[\"comment/3909\",[]],[\"name/3910\",[149,60.298]],[\"comment/3910\",[]],[\"name/3911\",[150,60.298]],[\"comment/3911\",[]],[\"name/3912\",[151,60.298]],[\"comment/3912\",[]],[\"name/3913\",[152,60.298]],[\"comment/3913\",[]],[\"name/3914\",[153,60.298]],[\"comment/3914\",[]],[\"name/3915\",[154,60.298]],[\"comment/3915\",[]],[\"name/3916\",[155,60.298]],[\"comment/3916\",[]],[\"name/3917\",[156,58.239]],[\"comment/3917\",[]],[\"name/3918\",[157,60.298]],[\"comment/3918\",[]],[\"name/3919\",[158,60.298]],[\"comment/3919\",[]],[\"name/3920\",[1,44.315]],[\"comment/3920\",[]],[\"name/3921\",[159,56.933]],[\"comment/3921\",[]],[\"name/3922\",[160,56.933]],[\"comment/3922\",[]],[\"name/3923\",[161,60.298]],[\"comment/3923\",[]],[\"name/3924\",[162,60.298]],[\"comment/3924\",[]],[\"name/3925\",[163,60.298]],[\"comment/3925\",[]],[\"name/3926\",[164,56.933]],[\"comment/3926\",[]],[\"name/3927\",[165,59.743]],[\"comment/3927\",[]],[\"name/3928\",[166,59.743]],[\"comment/3928\",[]],[\"name/3929\",[167,60.298]],[\"comment/3929\",[]],[\"name/3930\",[168,60.298]],[\"comment/3930\",[]],[\"name/3931\",[169,60.298]],[\"comment/3931\",[]],[\"name/3932\",[170,60.298]],[\"comment/3932\",[]],[\"name/3933\",[171,60.298]],[\"comment/3933\",[]],[\"name/3934\",[172,57.35]],[\"comment/3934\",[]],[\"name/3935\",[173,59.743]],[\"comment/3935\",[]],[\"name/3936\",[174,59.743]],[\"comment/3936\",[]],[\"name/3937\",[26,50.524]],[\"comment/3937\",[]],[\"name/3938\",[22,49.502]],[\"comment/3938\",[]],[\"name/3939\",[41,52.675]],[\"comment/3939\",[]],[\"name/3940\",[42,52.675]],[\"comment/3940\",[]],[\"name/3941\",[175,53.804]],[\"comment/3941\",[]],[\"name/3942\",[176,59.216]],[\"comment/3942\",[]],[\"name/3943\",[177,59.743]],[\"comment/3943\",[]],[\"name/3944\",[178,59.743]],[\"comment/3944\",[]],[\"name/3945\",[179,59.743]],[\"comment/3945\",[]],[\"name/3946\",[180,59.743]],[\"comment/3946\",[]],[\"name/3947\",[181,59.743]],[\"comment/3947\",[]],[\"name/3948\",[182,59.743]],[\"comment/3948\",[]],[\"name/3949\",[183,59.743]],[\"comment/3949\",[]],[\"name/3950\",[184,59.743]],[\"comment/3950\",[]],[\"name/3951\",[108,59.743]],[\"comment/3951\",[]],[\"name/3952\",[185,58.239]],[\"comment/3952\",[]],[\"name/3953\",[186,59.743]],[\"comment/3953\",[]],[\"name/3954\",[187,59.743]],[\"comment/3954\",[]],[\"name/3955\",[188,56.933]],[\"comment/3955\",[]],[\"name/3956\",[189,59.216]],[\"comment/3956\",[]],[\"name/3957\",[190,59.743]],[\"comment/3957\",[]],[\"name/3958\",[191,59.743]],[\"comment/3958\",[]],[\"name/3959\",[192,59.743]],[\"comment/3959\",[]],[\"name/3960\",[193,59.743]],[\"comment/3960\",[]],[\"name/3961\",[194,59.743]],[\"comment/3961\",[]],[\"name/3962\",[34,53.509]],[\"comment/3962\",[]],[\"name/3963\",[32,53.509]],[\"comment/3963\",[]],[\"name/3964\",[33,53.509]],[\"comment/3964\",[]],[\"name/3965\",[44,47.097]],[\"comment/3965\",[]],[\"name/3966\",[45,47.097]],[\"comment/3966\",[]],[\"name/3967\",[46,47.097]],[\"comment/3967\",[]],[\"name/3968\",[47,47.097]],[\"comment/3968\",[]],[\"name/3969\",[48,47.097]],[\"comment/3969\",[]],[\"name/3970\",[49,47.097]],[\"comment/3970\",[]],[\"name/3971\",[50,47.097]],[\"comment/3971\",[]],[\"name/3972\",[51,47.097]],[\"comment/3972\",[]],[\"name/3973\",[52,47.097]],[\"comment/3973\",[]],[\"name/3974\",[53,47.097]],[\"comment/3974\",[]],[\"name/3975\",[54,47.097]],[\"comment/3975\",[]],[\"name/3976\",[55,47.097]],[\"comment/3976\",[]],[\"name/3977\",[56,47.097]],[\"comment/3977\",[]],[\"name/3978\",[57,47.097]],[\"comment/3978\",[]],[\"name/3979\",[58,47.097]],[\"comment/3979\",[]],[\"name/3980\",[59,47.097]],[\"comment/3980\",[]],[\"name/3981\",[60,47.097]],[\"comment/3981\",[]],[\"name/3982\",[61,47.097]],[\"comment/3982\",[]],[\"name/3983\",[63,46.796]],[\"comment/3983\",[]],[\"name/3984\",[64,46.796]],[\"comment/3984\",[]],[\"name/3985\",[65,47.097]],[\"comment/3985\",[]],[\"name/3986\",[66,43.221]],[\"comment/3986\",[]],[\"name/3987\",[67,46.649]],[\"comment/3987\",[]],[\"name/3988\",[68,46.649]],[\"comment/3988\",[]],[\"name/3989\",[69,47.097]],[\"comment/3989\",[]],[\"name/3990\",[70,46.945]],[\"comment/3990\",[]],[\"name/3991\",[71,46.945]],[\"comment/3991\",[]],[\"name/3992\",[72,47.097]],[\"comment/3992\",[]],[\"name/3993\",[73,47.097]],[\"comment/3993\",[]],[\"name/3994\",[74,47.097]],[\"comment/3994\",[]],[\"name/3995\",[75,46.945]],[\"comment/3995\",[]],[\"name/3996\",[76,46.796]],[\"comment/3996\",[]],[\"name/3997\",[77,46.796]],[\"comment/3997\",[]],[\"name/3998\",[985,84.871]],[\"comment/3998\",[]],[\"name/3999\",[986,84.871]],[\"comment/3999\",[]],[\"name/4000\",[987,84.871]],[\"comment/4000\",[]],[\"name/4001\",[988,84.871]],[\"comment/4001\",[]],[\"name/4002\",[989,84.871]],[\"comment/4002\",[]],[\"name/4003\",[990,84.871]],[\"comment/4003\",[]],[\"name/4004\",[991,84.871]],[\"comment/4004\",[]],[\"name/4005\",[992,84.871]],[\"comment/4005\",[]],[\"name/4006\",[993,84.871]],[\"comment/4006\",[]],[\"name/4007\",[994,84.871]],[\"comment/4007\",[]],[\"name/4008\",[995,84.871]],[\"comment/4008\",[]],[\"name/4009\",[840,79.762]],[\"comment/4009\",[]],[\"name/4010\",[996,84.871]],[\"comment/4010\",[]],[\"name/4011\",[997,84.871]],[\"comment/4011\",[]],[\"name/4012\",[482,67.521]],[\"comment/4012\",[]],[\"name/4013\",[9,46.22]],[\"comment/4013\",[]],[\"name/4014\",[15,46.945]],[\"comment/4014\",[]],[\"name/4015\",[998,79.762]],[\"comment/4015\",[]],[\"name/4016\",[999,76.396]],[\"comment/4016\",[]],[\"name/4017\",[1000,79.762]],[\"comment/4017\",[]],[\"name/4018\",[16,44.087]],[\"comment/4018\",[]],[\"name/4019\",[440,70.205]],[\"comment/4019\",[]],[\"name/4020\",[1001,79.762]],[\"comment/4020\",[]],[\"name/4021\",[1002,79.762]],[\"comment/4021\",[]],[\"name/4022\",[483,73.883]],[\"comment/4022\",[]],[\"name/4023\",[1003,79.762]],[\"comment/4023\",[]],[\"name/4024\",[1004,79.762]],[\"comment/4024\",[]],[\"name/4025\",[1005,79.762]],[\"comment/4025\",[]],[\"name/4026\",[1006,79.762]],[\"comment/4026\",[]],[\"name/4027\",[1007,79.762]],[\"comment/4027\",[]],[\"name/4028\",[1008,79.762]],[\"comment/4028\",[]],[\"name/4029\",[175,53.804]],[\"comment/4029\",[]],[\"name/4030\",[1009,79.762]],[\"comment/4030\",[]],[\"name/4031\",[1010,79.762]],[\"comment/4031\",[]],[\"name/4032\",[251,71.876]],[\"comment/4032\",[]],[\"name/4033\",[247,71.876]],[\"comment/4033\",[]],[\"name/4034\",[1011,79.762]],[\"comment/4034\",[]],[\"name/4035\",[1012,79.762]],[\"comment/4035\",[]],[\"name/4036\",[250,60.887]],[\"comment/4036\",[]],[\"name/4037\",[26,50.524]],[\"comment/4037\",[]],[\"name/4038\",[22,49.502]],[\"comment/4038\",[]],[\"name/4039\",[48,47.097]],[\"comment/4039\",[]],[\"name/4040\",[1013,79.762]],[\"comment/4040\",[]],[\"name/4041\",[1014,79.762]],[\"comment/4041\",[]],[\"name/4042\",[1015,79.762]],[\"comment/4042\",[]],[\"name/4043\",[1016,79.762]],[\"comment/4043\",[]],[\"name/4044\",[1017,79.762]],[\"comment/4044\",[]],[\"name/4045\",[1018,79.762]],[\"comment/4045\",[]],[\"name/4046\",[1019,76.396]],[\"comment/4046\",[]],[\"name/4047\",[1020,71.876]],[\"comment/4047\",[]],[\"name/4048\",[1021,76.396]],[\"comment/4048\",[]],[\"name/4049\",[1022,79.762]],[\"comment/4049\",[]],[\"name/4050\",[62,47.097]],[\"comment/4050\",[]],[\"name/4051\",[1023,79.762]],[\"comment/4051\",[]],[\"name/4052\",[1024,79.762]],[\"comment/4052\",[]],[\"name/4053\",[1025,79.762]],[\"comment/4053\",[]],[\"name/4054\",[1026,79.762]],[\"comment/4054\",[]],[\"name/4055\",[143,59.216]],[\"comment/4055\",[]],[\"name/4056\",[701,67.521]],[\"comment/4056\",[]],[\"name/4057\",[1027,79.762]],[\"comment/4057\",[]],[\"name/4058\",[1028,79.762]],[\"comment/4058\",[]],[\"name/4059\",[156,58.239]],[\"comment/4059\",[]],[\"name/4060\",[1029,79.762]],[\"comment/4060\",[]],[\"name/4061\",[1030,79.762]],[\"comment/4061\",[]],[\"name/4062\",[1031,79.762]],[\"comment/4062\",[]],[\"name/4063\",[1032,79.762]],[\"comment/4063\",[]],[\"name/4064\",[379,76.396]],[\"comment/4064\",[]],[\"name/4065\",[1033,79.762]],[\"comment/4065\",[]],[\"name/4066\",[1034,79.762]],[\"comment/4066\",[]],[\"name/4067\",[1035,79.762]],[\"comment/4067\",[]],[\"name/4068\",[1036,79.762]],[\"comment/4068\",[]],[\"name/4069\",[1037,79.762]],[\"comment/4069\",[]],[\"name/4070\",[1038,79.762]],[\"comment/4070\",[]],[\"name/4071\",[1039,79.762]],[\"comment/4071\",[]],[\"name/4072\",[1040,79.762]],[\"comment/4072\",[]],[\"name/4073\",[1041,79.762]],[\"comment/4073\",[]],[\"name/4074\",[1042,79.762]],[\"comment/4074\",[]],[\"name/4075\",[1043,79.762]],[\"comment/4075\",[]],[\"name/4076\",[1044,79.762]],[\"comment/4076\",[]],[\"name/4077\",[185,58.239]],[\"comment/4077\",[]],[\"name/4078\",[1045,79.762]],[\"comment/4078\",[]],[\"name/4079\",[10,58.239]],[\"comment/4079\",[]],[\"name/4080\",[25,44.668]],[\"comment/4080\",[]],[\"name/4081\",[1046,79.762]],[\"comment/4081\",[]],[\"name/4082\",[1047,79.762]],[\"comment/4082\",[]],[\"name/4083\",[1048,79.762]],[\"comment/4083\",[]],[\"name/4084\",[1049,79.762]],[\"comment/4084\",[]],[\"name/4085\",[44,47.097]],[\"comment/4085\",[]],[\"name/4086\",[45,47.097]],[\"comment/4086\",[]],[\"name/4087\",[46,47.097]],[\"comment/4087\",[]],[\"name/4088\",[47,47.097]],[\"comment/4088\",[]],[\"name/4089\",[49,47.097]],[\"comment/4089\",[]],[\"name/4090\",[50,47.097]],[\"comment/4090\",[]],[\"name/4091\",[51,47.097]],[\"comment/4091\",[]],[\"name/4092\",[52,47.097]],[\"comment/4092\",[]],[\"name/4093\",[53,47.097]],[\"comment/4093\",[]],[\"name/4094\",[54,47.097]],[\"comment/4094\",[]],[\"name/4095\",[55,47.097]],[\"comment/4095\",[]],[\"name/4096\",[56,47.097]],[\"comment/4096\",[]],[\"name/4097\",[57,47.097]],[\"comment/4097\",[]],[\"name/4098\",[58,47.097]],[\"comment/4098\",[]],[\"name/4099\",[59,47.097]],[\"comment/4099\",[]],[\"name/4100\",[60,47.097]],[\"comment/4100\",[]],[\"name/4101\",[61,47.097]],[\"comment/4101\",[]],[\"name/4102\",[63,46.796]],[\"comment/4102\",[]],[\"name/4103\",[64,46.796]],[\"comment/4103\",[]],[\"name/4104\",[65,47.097]],[\"comment/4104\",[]],[\"name/4105\",[66,43.221]],[\"comment/4105\",[]],[\"name/4106\",[67,46.649]],[\"comment/4106\",[]],[\"name/4107\",[68,46.649]],[\"comment/4107\",[]],[\"name/4108\",[69,47.097]],[\"comment/4108\",[]],[\"name/4109\",[70,46.945]],[\"comment/4109\",[]],[\"name/4110\",[71,46.945]],[\"comment/4110\",[]],[\"name/4111\",[72,47.097]],[\"comment/4111\",[]],[\"name/4112\",[73,47.097]],[\"comment/4112\",[]],[\"name/4113\",[74,47.097]],[\"comment/4113\",[]],[\"name/4114\",[75,46.945]],[\"comment/4114\",[]],[\"name/4115\",[76,46.796]],[\"comment/4115\",[]],[\"name/4116\",[77,46.796]],[\"comment/4116\",[]],[\"name/4117\",[551,79.762]],[\"comment/4117\",[]],[\"name/4118\",[1050,84.871]],[\"comment/4118\",[]],[\"name/4119\",[1051,84.871]],[\"comment/4119\",[]],[\"name/4120\",[1052,76.396]],[\"comment/4120\",[]],[\"name/4121\",[1053,84.871]],[\"comment/4121\",[]],[\"name/4122\",[1054,84.871]],[\"comment/4122\",[]],[\"name/4123\",[1055,84.871]],[\"comment/4123\",[]],[\"name/4124\",[329,71.876]],[\"comment/4124\",[]],[\"name/4125\",[522,76.396]],[\"comment/4125\",[]],[\"name/4126\",[9,46.22]],[\"comment/4126\",[]],[\"name/4127\",[17,57.785]],[\"comment/4127\",[]],[\"name/4128\",[947,76.396]],[\"comment/4128\",[]],[\"name/4129\",[13,54.107]],[\"comment/4129\",[]],[\"name/4130\",[15,46.945]],[\"comment/4130\",[]],[\"name/4131\",[16,44.087]],[\"comment/4131\",[]],[\"name/4132\",[106,76.396]],[\"comment/4132\",[]],[\"name/4133\",[107,70.205]],[\"comment/4133\",[]],[\"name/4134\",[25,44.668]],[\"comment/4134\",[]],[\"name/4135\",[1056,84.871]],[\"comment/4135\",[]],[\"name/4136\",[1057,84.871]],[\"comment/4136\",[]],[\"name/4137\",[1058,84.871]],[\"comment/4137\",[]],[\"name/4138\",[35,56.148]],[\"comment/4138\",[]],[\"name/4139\",[36,55.778]],[\"comment/4139\",[]],[\"name/4140\",[128,54.419]],[\"comment/4140\",[]],[\"name/4141\",[129,54.419]],[\"comment/4141\",[]],[\"name/4142\",[130,54.107]],[\"comment/4142\",[]],[\"name/4143\",[22,49.502]],[\"comment/4143\",[]],[\"name/4144\",[26,50.524]],[\"comment/4144\",[]],[\"name/4145\",[175,53.804]],[\"comment/4145\",[]],[\"name/4146\",[250,60.887]],[\"comment/4146\",[]],[\"name/4147\",[373,65.408]],[\"comment/4147\",[]],[\"name/4148\",[374,65.408]],[\"comment/4148\",[]],[\"name/4149\",[375,64.498]],[\"comment/4149\",[]],[\"name/4150\",[376,65.408]],[\"comment/4150\",[]],[\"name/4151\",[377,65.408]],[\"comment/4151\",[]],[\"name/4152\",[44,47.097]],[\"comment/4152\",[]],[\"name/4153\",[45,47.097]],[\"comment/4153\",[]],[\"name/4154\",[46,47.097]],[\"comment/4154\",[]],[\"name/4155\",[47,47.097]],[\"comment/4155\",[]],[\"name/4156\",[48,47.097]],[\"comment/4156\",[]],[\"name/4157\",[49,47.097]],[\"comment/4157\",[]],[\"name/4158\",[50,47.097]],[\"comment/4158\",[]],[\"name/4159\",[51,47.097]],[\"comment/4159\",[]],[\"name/4160\",[52,47.097]],[\"comment/4160\",[]],[\"name/4161\",[53,47.097]],[\"comment/4161\",[]],[\"name/4162\",[54,47.097]],[\"comment/4162\",[]],[\"name/4163\",[55,47.097]],[\"comment/4163\",[]],[\"name/4164\",[56,47.097]],[\"comment/4164\",[]],[\"name/4165\",[57,47.097]],[\"comment/4165\",[]],[\"name/4166\",[58,47.097]],[\"comment/4166\",[]],[\"name/4167\",[59,47.097]],[\"comment/4167\",[]],[\"name/4168\",[60,47.097]],[\"comment/4168\",[]],[\"name/4169\",[61,47.097]],[\"comment/4169\",[]],[\"name/4170\",[62,47.097]],[\"comment/4170\",[]],[\"name/4171\",[63,46.796]],[\"comment/4171\",[]],[\"name/4172\",[64,46.796]],[\"comment/4172\",[]],[\"name/4173\",[65,47.097]],[\"comment/4173\",[]],[\"name/4174\",[66,43.221]],[\"comment/4174\",[]],[\"name/4175\",[67,46.649]],[\"comment/4175\",[]],[\"name/4176\",[68,46.649]],[\"comment/4176\",[]],[\"name/4177\",[69,47.097]],[\"comment/4177\",[]],[\"name/4178\",[70,46.945]],[\"comment/4178\",[]],[\"name/4179\",[71,46.945]],[\"comment/4179\",[]],[\"name/4180\",[72,47.097]],[\"comment/4180\",[]],[\"name/4181\",[73,47.097]],[\"comment/4181\",[]],[\"name/4182\",[74,47.097]],[\"comment/4182\",[]],[\"name/4183\",[75,46.945]],[\"comment/4183\",[]],[\"name/4184\",[76,46.796]],[\"comment/4184\",[]],[\"name/4185\",[77,46.796]],[\"comment/4185\",[]],[\"name/4186\",[1059,84.871]],[\"comment/4186\",[]],[\"name/4187\",[509,73.883]],[\"comment/4187\",[]],[\"name/4188\",[9,46.22]],[\"comment/4188\",[]],[\"name/4189\",[15,46.945]],[\"comment/4189\",[]],[\"name/4190\",[17,57.785]],[\"comment/4190\",[]],[\"name/4191\",[947,76.396]],[\"comment/4191\",[]],[\"name/4192\",[16,44.087]],[\"comment/4192\",[]],[\"name/4193\",[1060,84.871]],[\"comment/4193\",[]],[\"name/4194\",[1061,84.871]],[\"comment/4194\",[]],[\"name/4195\",[390,79.762]],[\"comment/4195\",[]],[\"name/4196\",[107,70.205]],[\"comment/4196\",[]],[\"name/4197\",[106,76.396]],[\"comment/4197\",[]],[\"name/4198\",[1020,71.876]],[\"comment/4198\",[]],[\"name/4199\",[41,52.675]],[\"comment/4199\",[]],[\"name/4200\",[42,52.675]],[\"comment/4200\",[]],[\"name/4201\",[25,44.668]],[\"comment/4201\",[]],[\"name/4202\",[44,47.097]],[\"comment/4202\",[]],[\"name/4203\",[45,47.097]],[\"comment/4203\",[]],[\"name/4204\",[46,47.097]],[\"comment/4204\",[]],[\"name/4205\",[47,47.097]],[\"comment/4205\",[]],[\"name/4206\",[48,47.097]],[\"comment/4206\",[]],[\"name/4207\",[49,47.097]],[\"comment/4207\",[]],[\"name/4208\",[50,47.097]],[\"comment/4208\",[]],[\"name/4209\",[51,47.097]],[\"comment/4209\",[]],[\"name/4210\",[52,47.097]],[\"comment/4210\",[]],[\"name/4211\",[53,47.097]],[\"comment/4211\",[]],[\"name/4212\",[54,47.097]],[\"comment/4212\",[]],[\"name/4213\",[55,47.097]],[\"comment/4213\",[]],[\"name/4214\",[56,47.097]],[\"comment/4214\",[]],[\"name/4215\",[57,47.097]],[\"comment/4215\",[]],[\"name/4216\",[58,47.097]],[\"comment/4216\",[]],[\"name/4217\",[59,47.097]],[\"comment/4217\",[]],[\"name/4218\",[60,47.097]],[\"comment/4218\",[]],[\"name/4219\",[61,47.097]],[\"comment/4219\",[]],[\"name/4220\",[62,47.097]],[\"comment/4220\",[]],[\"name/4221\",[63,46.796]],[\"comment/4221\",[]],[\"name/4222\",[64,46.796]],[\"comment/4222\",[]],[\"name/4223\",[65,47.097]],[\"comment/4223\",[]],[\"name/4224\",[66,43.221]],[\"comment/4224\",[]],[\"name/4225\",[67,46.649]],[\"comment/4225\",[]],[\"name/4226\",[68,46.649]],[\"comment/4226\",[]],[\"name/4227\",[69,47.097]],[\"comment/4227\",[]],[\"name/4228\",[70,46.945]],[\"comment/4228\",[]],[\"name/4229\",[71,46.945]],[\"comment/4229\",[]],[\"name/4230\",[72,47.097]],[\"comment/4230\",[]],[\"name/4231\",[73,47.097]],[\"comment/4231\",[]],[\"name/4232\",[74,47.097]],[\"comment/4232\",[]],[\"name/4233\",[75,46.945]],[\"comment/4233\",[]],[\"name/4234\",[76,46.796]],[\"comment/4234\",[]],[\"name/4235\",[77,46.796]],[\"comment/4235\",[]],[\"name/4236\",[1062,84.871]],[\"comment/4236\",[]],[\"name/4237\",[1063,84.871]],[\"comment/4237\",[]],[\"name/4238\",[1064,84.871]],[\"comment/4238\",[]],[\"name/4239\",[1065,84.871]],[\"comment/4239\",[]],[\"name/4240\",[1066,84.871]],[\"comment/4240\",[]],[\"name/4241\",[260,65.408]],[\"comment/4241\",[]],[\"name/4242\",[116,57.35]],[\"comment/4242\",[]],[\"name/4243\",[535,76.396]],[\"comment/4243\",[]],[\"name/4244\",[9,46.22]],[\"comment/4244\",[]],[\"name/4245\",[17,57.785]],[\"comment/4245\",[]],[\"name/4246\",[1,44.315]],[\"comment/4246\",[]],[\"name/4247\",[1067,84.871]],[\"comment/4247\",[]],[\"name/4248\",[1068,84.871]],[\"comment/4248\",[]],[\"name/4249\",[1069,84.871]],[\"comment/4249\",[]],[\"name/4250\",[15,46.945]],[\"comment/4250\",[]],[\"name/4251\",[16,44.087]],[\"comment/4251\",[]],[\"name/4252\",[18,52.946]],[\"comment/4252\",[]],[\"name/4253\",[36,55.778]],[\"comment/4253\",[]],[\"name/4254\",[1070,84.871]],[\"comment/4254\",[]],[\"name/4255\",[397,70.205]],[\"comment/4255\",[]],[\"name/4256\",[1071,84.871]],[\"comment/4256\",[]],[\"name/4257\",[25,44.668]],[\"comment/4257\",[]],[\"name/4258\",[44,47.097]],[\"comment/4258\",[]],[\"name/4259\",[45,47.097]],[\"comment/4259\",[]],[\"name/4260\",[46,47.097]],[\"comment/4260\",[]],[\"name/4261\",[47,47.097]],[\"comment/4261\",[]],[\"name/4262\",[48,47.097]],[\"comment/4262\",[]],[\"name/4263\",[49,47.097]],[\"comment/4263\",[]],[\"name/4264\",[50,47.097]],[\"comment/4264\",[]],[\"name/4265\",[51,47.097]],[\"comment/4265\",[]],[\"name/4266\",[52,47.097]],[\"comment/4266\",[]],[\"name/4267\",[53,47.097]],[\"comment/4267\",[]],[\"name/4268\",[54,47.097]],[\"comment/4268\",[]],[\"name/4269\",[55,47.097]],[\"comment/4269\",[]],[\"name/4270\",[56,47.097]],[\"comment/4270\",[]],[\"name/4271\",[57,47.097]],[\"comment/4271\",[]],[\"name/4272\",[58,47.097]],[\"comment/4272\",[]],[\"name/4273\",[59,47.097]],[\"comment/4273\",[]],[\"name/4274\",[60,47.097]],[\"comment/4274\",[]],[\"name/4275\",[61,47.097]],[\"comment/4275\",[]],[\"name/4276\",[62,47.097]],[\"comment/4276\",[]],[\"name/4277\",[63,46.796]],[\"comment/4277\",[]],[\"name/4278\",[64,46.796]],[\"comment/4278\",[]],[\"name/4279\",[65,47.097]],[\"comment/4279\",[]],[\"name/4280\",[66,43.221]],[\"comment/4280\",[]],[\"name/4281\",[67,46.649]],[\"comment/4281\",[]],[\"name/4282\",[68,46.649]],[\"comment/4282\",[]],[\"name/4283\",[69,47.097]],[\"comment/4283\",[]],[\"name/4284\",[70,46.945]],[\"comment/4284\",[]],[\"name/4285\",[71,46.945]],[\"comment/4285\",[]],[\"name/4286\",[72,47.097]],[\"comment/4286\",[]],[\"name/4287\",[73,47.097]],[\"comment/4287\",[]],[\"name/4288\",[74,47.097]],[\"comment/4288\",[]],[\"name/4289\",[75,46.945]],[\"comment/4289\",[]],[\"name/4290\",[76,46.796]],[\"comment/4290\",[]],[\"name/4291\",[77,46.796]],[\"comment/4291\",[]],[\"name/4292\",[1072,84.871]],[\"comment/4292\",[]],[\"name/4293\",[1073,79.762]],[\"comment/4293\",[]],[\"name/4294\",[1074,79.762]],[\"comment/4294\",[]],[\"name/4295\",[1075,79.762]],[\"comment/4295\",[]],[\"name/4296\",[1076,79.762]],[\"comment/4296\",[]],[\"name/4297\",[512,73.883]],[\"comment/4297\",[]],[\"name/4298\",[9,46.22]],[\"comment/4298\",[]],[\"name/4299\",[15,46.945]],[\"comment/4299\",[]],[\"name/4300\",[1077,84.871]],[\"comment/4300\",[]],[\"name/4301\",[1,44.315]],[\"comment/4301\",[]],[\"name/4302\",[84,71.876]],[\"comment/4302\",[]],[\"name/4303\",[85,71.876]],[\"comment/4303\",[]],[\"name/4304\",[555,76.396]],[\"comment/4304\",[]],[\"name/4305\",[16,44.087]],[\"comment/4305\",[]],[\"name/4306\",[18,52.946]],[\"comment/4306\",[]],[\"name/4307\",[1,44.315]],[\"comment/4307\",[]],[\"name/4308\",[838,79.762]],[\"comment/4308\",[]],[\"name/4309\",[839,79.762]],[\"comment/4309\",[]],[\"name/4310\",[235,76.396]],[\"comment/4310\",[]],[\"name/4311\",[1078,84.871]],[\"comment/4311\",[]],[\"name/4312\",[1079,84.871]],[\"comment/4312\",[]],[\"name/4313\",[951,76.396]],[\"comment/4313\",[]],[\"name/4314\",[1080,84.871]],[\"comment/4314\",[]],[\"name/4315\",[1081,84.871]],[\"comment/4315\",[]],[\"name/4316\",[1082,84.871]],[\"comment/4316\",[]],[\"name/4317\",[1083,84.871]],[\"comment/4317\",[]],[\"name/4318\",[1084,84.871]],[\"comment/4318\",[]],[\"name/4319\",[1085,84.871]],[\"comment/4319\",[]],[\"name/4320\",[1020,71.876]],[\"comment/4320\",[]],[\"name/4321\",[397,70.205]],[\"comment/4321\",[]],[\"name/4322\",[1086,84.871]],[\"comment/4322\",[]],[\"name/4323\",[1087,84.871]],[\"comment/4323\",[]],[\"name/4324\",[25,44.668]],[\"comment/4324\",[]],[\"name/4325\",[44,47.097]],[\"comment/4325\",[]],[\"name/4326\",[45,47.097]],[\"comment/4326\",[]],[\"name/4327\",[46,47.097]],[\"comment/4327\",[]],[\"name/4328\",[47,47.097]],[\"comment/4328\",[]],[\"name/4329\",[48,47.097]],[\"comment/4329\",[]],[\"name/4330\",[49,47.097]],[\"comment/4330\",[]],[\"name/4331\",[50,47.097]],[\"comment/4331\",[]],[\"name/4332\",[51,47.097]],[\"comment/4332\",[]],[\"name/4333\",[52,47.097]],[\"comment/4333\",[]],[\"name/4334\",[53,47.097]],[\"comment/4334\",[]],[\"name/4335\",[54,47.097]],[\"comment/4335\",[]],[\"name/4336\",[55,47.097]],[\"comment/4336\",[]],[\"name/4337\",[56,47.097]],[\"comment/4337\",[]],[\"name/4338\",[57,47.097]],[\"comment/4338\",[]],[\"name/4339\",[58,47.097]],[\"comment/4339\",[]],[\"name/4340\",[59,47.097]],[\"comment/4340\",[]],[\"name/4341\",[60,47.097]],[\"comment/4341\",[]],[\"name/4342\",[61,47.097]],[\"comment/4342\",[]],[\"name/4343\",[62,47.097]],[\"comment/4343\",[]],[\"name/4344\",[63,46.796]],[\"comment/4344\",[]],[\"name/4345\",[64,46.796]],[\"comment/4345\",[]],[\"name/4346\",[65,47.097]],[\"comment/4346\",[]],[\"name/4347\",[66,43.221]],[\"comment/4347\",[]],[\"name/4348\",[67,46.649]],[\"comment/4348\",[]],[\"name/4349\",[68,46.649]],[\"comment/4349\",[]],[\"name/4350\",[69,47.097]],[\"comment/4350\",[]],[\"name/4351\",[70,46.945]],[\"comment/4351\",[]],[\"name/4352\",[71,46.945]],[\"comment/4352\",[]],[\"name/4353\",[72,47.097]],[\"comment/4353\",[]],[\"name/4354\",[73,47.097]],[\"comment/4354\",[]],[\"name/4355\",[74,47.097]],[\"comment/4355\",[]],[\"name/4356\",[75,46.945]],[\"comment/4356\",[]],[\"name/4357\",[76,46.796]],[\"comment/4357\",[]],[\"name/4358\",[77,46.796]],[\"comment/4358\",[]],[\"name/4359\",[1088,84.871]],[\"comment/4359\",[]],[\"name/4360\",[1089,79.762]],[\"comment/4360\",[]],[\"name/4361\",[1090,84.871]],[\"comment/4361\",[]],[\"name/4362\",[1091,84.871]],[\"comment/4362\",[]],[\"name/4363\",[1092,84.871]],[\"comment/4363\",[]],[\"name/4364\",[552,79.762]],[\"comment/4364\",[]],[\"name/4365\",[80,70.205]],[\"comment/4365\",[]],[\"name/4366\",[79,67.521]],[\"comment/4366\",[]],[\"name/4367\",[81,67.521]],[\"comment/4367\",[]],[\"name/4368\",[817,79.762]],[\"comment/4368\",[]],[\"name/4369\",[818,79.762]],[\"comment/4369\",[]],[\"name/4370\",[407,73.883]],[\"comment/4370\",[]],[\"name/4371\",[1052,76.396]],[\"comment/4371\",[]],[\"name/4372\",[536,76.396]],[\"comment/4372\",[]],[\"name/4373\",[9,46.22]],[\"comment/4373\",[]],[\"name/4374\",[13,54.107]],[\"comment/4374\",[]],[\"name/4375\",[15,46.945]],[\"comment/4375\",[]],[\"name/4376\",[16,44.087]],[\"comment/4376\",[]],[\"name/4377\",[35,56.148]],[\"comment/4377\",[]],[\"name/4378\",[36,55.778]],[\"comment/4378\",[]],[\"name/4379\",[128,54.419]],[\"comment/4379\",[]],[\"name/4380\",[129,54.419]],[\"comment/4380\",[]],[\"name/4381\",[130,54.107]],[\"comment/4381\",[]],[\"name/4382\",[22,49.502]],[\"comment/4382\",[]],[\"name/4383\",[26,50.524]],[\"comment/4383\",[]],[\"name/4384\",[175,53.804]],[\"comment/4384\",[]],[\"name/4385\",[250,60.887]],[\"comment/4385\",[]],[\"name/4386\",[373,65.408]],[\"comment/4386\",[]],[\"name/4387\",[374,65.408]],[\"comment/4387\",[]],[\"name/4388\",[375,64.498]],[\"comment/4388\",[]],[\"name/4389\",[376,65.408]],[\"comment/4389\",[]],[\"name/4390\",[377,65.408]],[\"comment/4390\",[]],[\"name/4391\",[25,44.668]],[\"comment/4391\",[]],[\"name/4392\",[44,47.097]],[\"comment/4392\",[]],[\"name/4393\",[45,47.097]],[\"comment/4393\",[]],[\"name/4394\",[46,47.097]],[\"comment/4394\",[]],[\"name/4395\",[47,47.097]],[\"comment/4395\",[]],[\"name/4396\",[48,47.097]],[\"comment/4396\",[]],[\"name/4397\",[49,47.097]],[\"comment/4397\",[]],[\"name/4398\",[50,47.097]],[\"comment/4398\",[]],[\"name/4399\",[51,47.097]],[\"comment/4399\",[]],[\"name/4400\",[52,47.097]],[\"comment/4400\",[]],[\"name/4401\",[53,47.097]],[\"comment/4401\",[]],[\"name/4402\",[54,47.097]],[\"comment/4402\",[]],[\"name/4403\",[55,47.097]],[\"comment/4403\",[]],[\"name/4404\",[56,47.097]],[\"comment/4404\",[]],[\"name/4405\",[57,47.097]],[\"comment/4405\",[]],[\"name/4406\",[58,47.097]],[\"comment/4406\",[]],[\"name/4407\",[59,47.097]],[\"comment/4407\",[]],[\"name/4408\",[60,47.097]],[\"comment/4408\",[]],[\"name/4409\",[61,47.097]],[\"comment/4409\",[]],[\"name/4410\",[62,47.097]],[\"comment/4410\",[]],[\"name/4411\",[63,46.796]],[\"comment/4411\",[]],[\"name/4412\",[64,46.796]],[\"comment/4412\",[]],[\"name/4413\",[65,47.097]],[\"comment/4413\",[]],[\"name/4414\",[66,43.221]],[\"comment/4414\",[]],[\"name/4415\",[67,46.649]],[\"comment/4415\",[]],[\"name/4416\",[68,46.649]],[\"comment/4416\",[]],[\"name/4417\",[69,47.097]],[\"comment/4417\",[]],[\"name/4418\",[70,46.945]],[\"comment/4418\",[]],[\"name/4419\",[71,46.945]],[\"comment/4419\",[]],[\"name/4420\",[72,47.097]],[\"comment/4420\",[]],[\"name/4421\",[73,47.097]],[\"comment/4421\",[]],[\"name/4422\",[74,47.097]],[\"comment/4422\",[]],[\"name/4423\",[75,46.945]],[\"comment/4423\",[]],[\"name/4424\",[76,46.796]],[\"comment/4424\",[]],[\"name/4425\",[77,46.796]],[\"comment/4425\",[]],[\"name/4426\",[1093,84.871]],[\"comment/4426\",[]],[\"name/4427\",[1094,79.762]],[\"comment/4427\",[]],[\"name/4428\",[1095,79.762]],[\"comment/4428\",[]],[\"name/4429\",[1096,84.871]],[\"comment/4429\",[]],[\"name/4430\",[1097,84.871]],[\"comment/4430\",[]],[\"name/4431\",[1098,84.871]],[\"comment/4431\",[]],[\"name/4432\",[1099,84.871]],[\"comment/4432\",[]],[\"name/4433\",[1100,84.871]],[\"comment/4433\",[]],[\"name/4434\",[1101,84.871]],[\"comment/4434\",[]],[\"name/4435\",[1102,84.871]],[\"comment/4435\",[]],[\"name/4436\",[1103,84.871]],[\"comment/4436\",[]],[\"name/4437\",[1104,84.871]],[\"comment/4437\",[]],[\"name/4438\",[0,59.743]],[\"comment/4438\",[]],[\"name/4439\",[764,76.396]],[\"comment/4439\",[]],[\"name/4440\",[763,76.396]],[\"comment/4440\",[]],[\"name/4441\",[126,59.743]],[\"comment/4441\",[]],[\"name/4442\",[1105,84.871]],[\"comment/4442\",[]],[\"name/4443\",[1106,84.871]],[\"comment/4443\",[]],[\"name/4444\",[1107,84.871]],[\"comment/4444\",[]],[\"name/4445\",[1108,84.871]],[\"comment/4445\",[]],[\"name/4446\",[1109,84.871]],[\"comment/4446\",[]],[\"name/4447\",[413,67.521]],[\"comment/4447\",[]],[\"name/4448\",[1110,84.871]],[\"comment/4448\",[]],[\"name/4449\",[685,64.498]],[\"comment/4449\",[]],[\"name/4450\",[751,76.396]],[\"comment/4450\",[]],[\"name/4451\",[752,71.876]],[\"comment/4451\",[]],[\"name/4452\",[753,71.876]],[\"comment/4452\",[]],[\"name/4453\",[123,58.716]],[\"comment/4453\",[]],[\"name/4454\",[119,57.785]],[\"comment/4454\",[]],[\"name/4455\",[754,76.396]],[\"comment/4455\",[]],[\"name/4456\",[370,66.409]],[\"comment/4456\",[]],[\"name/4457\",[111,57.35]],[\"comment/4457\",[]],[\"name/4458\",[416,63.664]],[\"comment/4458\",[]],[\"name/4459\",[0,59.743]],[\"comment/4459\",[]],[\"name/4460\",[415,64.498]],[\"comment/4460\",[]],[\"name/4461\",[17,57.785]],[\"comment/4461\",[]],[\"name/4462\",[755,70.205]],[\"comment/4462\",[]],[\"name/4463\",[756,70.205]],[\"comment/4463\",[]],[\"name/4464\",[492,73.883]],[\"comment/4464\",[]],[\"name/4465\",[8,57.35]],[\"comment/4465\",[]],[\"name/4466\",[9,46.22]],[\"comment/4466\",[]],[\"name/4467\",[758,79.762]],[\"comment/4467\",[]],[\"name/4468\",[759,79.762]],[\"comment/4468\",[]],[\"name/4469\",[757,79.762]],[\"comment/4469\",[]],[\"name/4470\",[760,79.762]],[\"comment/4470\",[]],[\"name/4471\",[10,58.239]],[\"comment/4471\",[]],[\"name/4472\",[188,56.933]],[\"comment/4472\",[]],[\"name/4473\",[104,60.298]],[\"comment/4473\",[]],[\"name/4474\",[105,59.743]],[\"comment/4474\",[]],[\"name/4475\",[15,46.945]],[\"comment/4475\",[]],[\"name/4476\",[16,44.087]],[\"comment/4476\",[]],[\"name/4477\",[763,76.396]],[\"comment/4477\",[]],[\"name/4478\",[764,76.396]],[\"comment/4478\",[]],[\"name/4479\",[172,57.35]],[\"comment/4479\",[]],[\"name/4480\",[155,60.298]],[\"comment/4480\",[]],[\"name/4481\",[689,70.205]],[\"comment/4481\",[]],[\"name/4482\",[765,79.762]],[\"comment/4482\",[]],[\"name/4483\",[766,79.762]],[\"comment/4483\",[]],[\"name/4484\",[767,79.762]],[\"comment/4484\",[]],[\"name/4485\",[768,79.762]],[\"comment/4485\",[]],[\"name/4486\",[62,47.097]],[\"comment/4486\",[]],[\"name/4487\",[136,60.298]],[\"comment/4487\",[]],[\"name/4488\",[126,59.743]],[\"comment/4488\",[]],[\"name/4489\",[769,79.762]],[\"comment/4489\",[]],[\"name/4490\",[150,60.298]],[\"comment/4490\",[]],[\"name/4491\",[702,70.205]],[\"comment/4491\",[]],[\"name/4492\",[695,70.205]],[\"comment/4492\",[]],[\"name/4493\",[143,59.216]],[\"comment/4493\",[]],[\"name/4494\",[701,67.521]],[\"comment/4494\",[]],[\"name/4495\",[130,54.107]],[\"comment/4495\",[]],[\"name/4496\",[770,76.396]],[\"comment/4496\",[]],[\"name/4497\",[771,79.762]],[\"comment/4497\",[]],[\"name/4498\",[168,60.298]],[\"comment/4498\",[]],[\"name/4499\",[169,60.298]],[\"comment/4499\",[]],[\"name/4500\",[137,60.298]],[\"comment/4500\",[]],[\"name/4501\",[158,60.298]],[\"comment/4501\",[]],[\"name/4502\",[1,44.315]],[\"comment/4502\",[]],[\"name/4503\",[159,56.933]],[\"comment/4503\",[]],[\"name/4504\",[160,56.933]],[\"comment/4504\",[]],[\"name/4505\",[46,47.097]],[\"comment/4505\",[]],[\"name/4506\",[772,79.762]],[\"comment/4506\",[]],[\"name/4507\",[773,79.762]],[\"comment/4507\",[]],[\"name/4508\",[774,79.762]],[\"comment/4508\",[]],[\"name/4509\",[775,79.762]],[\"comment/4509\",[]],[\"name/4510\",[776,79.762]],[\"comment/4510\",[]],[\"name/4511\",[777,79.762]],[\"comment/4511\",[]],[\"name/4512\",[778,79.762]],[\"comment/4512\",[]],[\"name/4513\",[779,79.762]],[\"comment/4513\",[]],[\"name/4514\",[780,79.762]],[\"comment/4514\",[]],[\"name/4515\",[781,79.762]],[\"comment/4515\",[]],[\"name/4516\",[782,79.762]],[\"comment/4516\",[]],[\"name/4517\",[109,56.533]],[\"comment/4517\",[]],[\"name/4518\",[783,79.762]],[\"comment/4518\",[]],[\"name/4519\",[784,79.762]],[\"comment/4519\",[]],[\"name/4520\",[785,79.762]],[\"comment/4520\",[]],[\"name/4521\",[786,79.762]],[\"comment/4521\",[]],[\"name/4522\",[787,79.762]],[\"comment/4522\",[]],[\"name/4523\",[788,79.762]],[\"comment/4523\",[]],[\"name/4524\",[749,70.205]],[\"comment/4524\",[]],[\"name/4525\",[789,79.762]],[\"comment/4525\",[]],[\"name/4526\",[790,73.883]],[\"comment/4526\",[]],[\"name/4527\",[791,79.762]],[\"comment/4527\",[]],[\"name/4528\",[703,70.205]],[\"comment/4528\",[]],[\"name/4529\",[761,79.762]],[\"comment/4529\",[]],[\"name/4530\",[697,70.205]],[\"comment/4530\",[]],[\"name/4531\",[25,44.668]],[\"comment/4531\",[]],[\"name/4532\",[685,64.498]],[\"comment/4532\",[]],[\"name/4533\",[443,63.664]],[\"comment/4533\",[]],[\"name/4534\",[686,70.205]],[\"comment/4534\",[]],[\"name/4535\",[687,70.205]],[\"comment/4535\",[]],[\"name/4536\",[688,70.205]],[\"comment/4536\",[]],[\"name/4537\",[690,70.205]],[\"comment/4537\",[]],[\"name/4538\",[691,70.205]],[\"comment/4538\",[]],[\"name/4539\",[692,70.205]],[\"comment/4539\",[]],[\"name/4540\",[218,68.773]],[\"comment/4540\",[]],[\"name/4541\",[693,70.205]],[\"comment/4541\",[]],[\"name/4542\",[166,59.743]],[\"comment/4542\",[]],[\"name/4543\",[694,70.205]],[\"comment/4543\",[]],[\"name/4544\",[696,70.205]],[\"comment/4544\",[]],[\"name/4545\",[698,70.205]],[\"comment/4545\",[]],[\"name/4546\",[167,60.298]],[\"comment/4546\",[]],[\"name/4547\",[1,44.315]],[\"comment/4547\",[]],[\"name/4548\",[699,68.773]],[\"comment/4548\",[]],[\"name/4549\",[700,68.773]],[\"comment/4549\",[]],[\"name/4550\",[188,56.933]],[\"comment/4550\",[]],[\"name/4551\",[110,59.743]],[\"comment/4551\",[]],[\"name/4552\",[111,57.35]],[\"comment/4552\",[]],[\"name/4553\",[112,59.743]],[\"comment/4553\",[]],[\"name/4554\",[18,52.946]],[\"comment/4554\",[]],[\"name/4555\",[1,44.315]],[\"comment/4555\",[]],[\"name/4556\",[113,60.298]],[\"comment/4556\",[]],[\"name/4557\",[25,44.668]],[\"comment/4557\",[]],[\"name/4558\",[114,60.298]],[\"comment/4558\",[]],[\"name/4559\",[115,60.298]],[\"comment/4559\",[]],[\"name/4560\",[116,57.35]],[\"comment/4560\",[]],[\"name/4561\",[117,60.298]],[\"comment/4561\",[]],[\"name/4562\",[118,60.298]],[\"comment/4562\",[]],[\"name/4563\",[119,57.785]],[\"comment/4563\",[]],[\"name/4564\",[120,60.298]],[\"comment/4564\",[]],[\"name/4565\",[121,60.298]],[\"comment/4565\",[]],[\"name/4566\",[122,56.933]],[\"comment/4566\",[]],[\"name/4567\",[66,43.221]],[\"comment/4567\",[]],[\"name/4568\",[123,58.716]],[\"comment/4568\",[]],[\"name/4569\",[124,60.298]],[\"comment/4569\",[]],[\"name/4570\",[125,60.298]],[\"comment/4570\",[]],[\"name/4571\",[127,60.298]],[\"comment/4571\",[]],[\"name/4572\",[128,54.419]],[\"comment/4572\",[]],[\"name/4573\",[129,54.419]],[\"comment/4573\",[]],[\"name/4574\",[131,60.298]],[\"comment/4574\",[]],[\"name/4575\",[132,60.298]],[\"comment/4575\",[]],[\"name/4576\",[133,60.298]],[\"comment/4576\",[]],[\"name/4577\",[134,60.298]],[\"comment/4577\",[]],[\"name/4578\",[135,59.743]],[\"comment/4578\",[]],[\"name/4579\",[138,59.743]],[\"comment/4579\",[]],[\"name/4580\",[139,60.298]],[\"comment/4580\",[]],[\"name/4581\",[140,60.298]],[\"comment/4581\",[]],[\"name/4582\",[141,60.298]],[\"comment/4582\",[]],[\"name/4583\",[142,60.298]],[\"comment/4583\",[]],[\"name/4584\",[144,59.743]],[\"comment/4584\",[]],[\"name/4585\",[145,59.743]],[\"comment/4585\",[]],[\"name/4586\",[146,59.743]],[\"comment/4586\",[]],[\"name/4587\",[147,59.743]],[\"comment/4587\",[]],[\"name/4588\",[148,60.298]],[\"comment/4588\",[]],[\"name/4589\",[149,60.298]],[\"comment/4589\",[]],[\"name/4590\",[151,60.298]],[\"comment/4590\",[]],[\"name/4591\",[152,60.298]],[\"comment/4591\",[]],[\"name/4592\",[153,60.298]],[\"comment/4592\",[]],[\"name/4593\",[154,60.298]],[\"comment/4593\",[]],[\"name/4594\",[156,58.239]],[\"comment/4594\",[]],[\"name/4595\",[157,60.298]],[\"comment/4595\",[]],[\"name/4596\",[161,60.298]],[\"comment/4596\",[]],[\"name/4597\",[162,60.298]],[\"comment/4597\",[]],[\"name/4598\",[163,60.298]],[\"comment/4598\",[]],[\"name/4599\",[164,56.933]],[\"comment/4599\",[]],[\"name/4600\",[165,59.743]],[\"comment/4600\",[]],[\"name/4601\",[170,60.298]],[\"comment/4601\",[]],[\"name/4602\",[171,60.298]],[\"comment/4602\",[]],[\"name/4603\",[173,59.743]],[\"comment/4603\",[]],[\"name/4604\",[174,59.743]],[\"comment/4604\",[]],[\"name/4605\",[26,50.524]],[\"comment/4605\",[]],[\"name/4606\",[22,49.502]],[\"comment/4606\",[]],[\"name/4607\",[41,52.675]],[\"comment/4607\",[]],[\"name/4608\",[42,52.675]],[\"comment/4608\",[]],[\"name/4609\",[175,53.804]],[\"comment/4609\",[]],[\"name/4610\",[176,59.216]],[\"comment/4610\",[]],[\"name/4611\",[177,59.743]],[\"comment/4611\",[]],[\"name/4612\",[178,59.743]],[\"comment/4612\",[]],[\"name/4613\",[179,59.743]],[\"comment/4613\",[]],[\"name/4614\",[180,59.743]],[\"comment/4614\",[]],[\"name/4615\",[181,59.743]],[\"comment/4615\",[]],[\"name/4616\",[182,59.743]],[\"comment/4616\",[]],[\"name/4617\",[183,59.743]],[\"comment/4617\",[]],[\"name/4618\",[184,59.743]],[\"comment/4618\",[]],[\"name/4619\",[108,59.743]],[\"comment/4619\",[]],[\"name/4620\",[185,58.239]],[\"comment/4620\",[]],[\"name/4621\",[186,59.743]],[\"comment/4621\",[]],[\"name/4622\",[187,59.743]],[\"comment/4622\",[]],[\"name/4623\",[189,59.216]],[\"comment/4623\",[]],[\"name/4624\",[190,59.743]],[\"comment/4624\",[]],[\"name/4625\",[191,59.743]],[\"comment/4625\",[]],[\"name/4626\",[192,59.743]],[\"comment/4626\",[]],[\"name/4627\",[193,59.743]],[\"comment/4627\",[]],[\"name/4628\",[194,59.743]],[\"comment/4628\",[]],[\"name/4629\",[34,53.509]],[\"comment/4629\",[]],[\"name/4630\",[32,53.509]],[\"comment/4630\",[]],[\"name/4631\",[33,53.509]],[\"comment/4631\",[]],[\"name/4632\",[44,47.097]],[\"comment/4632\",[]],[\"name/4633\",[45,47.097]],[\"comment/4633\",[]],[\"name/4634\",[47,47.097]],[\"comment/4634\",[]],[\"name/4635\",[48,47.097]],[\"comment/4635\",[]],[\"name/4636\",[49,47.097]],[\"comment/4636\",[]],[\"name/4637\",[50,47.097]],[\"comment/4637\",[]],[\"name/4638\",[51,47.097]],[\"comment/4638\",[]],[\"name/4639\",[52,47.097]],[\"comment/4639\",[]],[\"name/4640\",[53,47.097]],[\"comment/4640\",[]],[\"name/4641\",[54,47.097]],[\"comment/4641\",[]],[\"name/4642\",[55,47.097]],[\"comment/4642\",[]],[\"name/4643\",[56,47.097]],[\"comment/4643\",[]],[\"name/4644\",[57,47.097]],[\"comment/4644\",[]],[\"name/4645\",[58,47.097]],[\"comment/4645\",[]],[\"name/4646\",[59,47.097]],[\"comment/4646\",[]],[\"name/4647\",[60,47.097]],[\"comment/4647\",[]],[\"name/4648\",[61,47.097]],[\"comment/4648\",[]],[\"name/4649\",[63,46.796]],[\"comment/4649\",[]],[\"name/4650\",[64,46.796]],[\"comment/4650\",[]],[\"name/4651\",[65,47.097]],[\"comment/4651\",[]],[\"name/4652\",[66,43.221]],[\"comment/4652\",[]],[\"name/4653\",[67,46.649]],[\"comment/4653\",[]],[\"name/4654\",[68,46.649]],[\"comment/4654\",[]],[\"name/4655\",[69,47.097]],[\"comment/4655\",[]],[\"name/4656\",[70,46.945]],[\"comment/4656\",[]],[\"name/4657\",[71,46.945]],[\"comment/4657\",[]],[\"name/4658\",[72,47.097]],[\"comment/4658\",[]],[\"name/4659\",[73,47.097]],[\"comment/4659\",[]],[\"name/4660\",[74,47.097]],[\"comment/4660\",[]],[\"name/4661\",[75,46.945]],[\"comment/4661\",[]],[\"name/4662\",[76,46.796]],[\"comment/4662\",[]],[\"name/4663\",[77,46.796]],[\"comment/4663\",[]],[\"name/4664\",[534,76.396]],[\"comment/4664\",[]],[\"name/4665\",[9,46.22]],[\"comment/4665\",[]],[\"name/4666\",[15,46.945]],[\"comment/4666\",[]],[\"name/4667\",[17,57.785]],[\"comment/4667\",[]],[\"name/4668\",[1,44.315]],[\"comment/4668\",[]],[\"name/4669\",[329,71.876]],[\"comment/4669\",[]],[\"name/4670\",[1111,84.871]],[\"comment/4670\",[]],[\"name/4671\",[1112,84.871]],[\"comment/4671\",[]],[\"name/4672\",[1113,84.871]],[\"comment/4672\",[]],[\"name/4673\",[1114,84.871]],[\"comment/4673\",[]],[\"name/4674\",[1115,84.871]],[\"comment/4674\",[]],[\"name/4675\",[1116,84.871]],[\"comment/4675\",[]],[\"name/4676\",[1117,84.871]],[\"comment/4676\",[]],[\"name/4677\",[1118,84.871]],[\"comment/4677\",[]],[\"name/4678\",[1119,84.871]],[\"comment/4678\",[]],[\"name/4679\",[1120,84.871]],[\"comment/4679\",[]],[\"name/4680\",[1121,84.871]],[\"comment/4680\",[]],[\"name/4681\",[1122,84.871]],[\"comment/4681\",[]],[\"name/4682\",[13,54.107]],[\"comment/4682\",[]],[\"name/4683\",[16,44.087]],[\"comment/4683\",[]],[\"name/4684\",[1123,73.883]],[\"comment/4684\",[]],[\"name/4685\",[1124,71.876]],[\"comment/4685\",[]],[\"name/4686\",[25,44.668]],[\"comment/4686\",[]],[\"name/4687\",[1125,84.871]],[\"comment/4687\",[]],[\"name/4688\",[1126,84.871]],[\"comment/4688\",[]],[\"name/4689\",[1127,84.871]],[\"comment/4689\",[]],[\"name/4690\",[35,56.148]],[\"comment/4690\",[]],[\"name/4691\",[36,55.778]],[\"comment/4691\",[]],[\"name/4692\",[128,54.419]],[\"comment/4692\",[]],[\"name/4693\",[129,54.419]],[\"comment/4693\",[]],[\"name/4694\",[130,54.107]],[\"comment/4694\",[]],[\"name/4695\",[22,49.502]],[\"comment/4695\",[]],[\"name/4696\",[26,50.524]],[\"comment/4696\",[]],[\"name/4697\",[175,53.804]],[\"comment/4697\",[]],[\"name/4698\",[250,60.887]],[\"comment/4698\",[]],[\"name/4699\",[373,65.408]],[\"comment/4699\",[]],[\"name/4700\",[374,65.408]],[\"comment/4700\",[]],[\"name/4701\",[375,64.498]],[\"comment/4701\",[]],[\"name/4702\",[376,65.408]],[\"comment/4702\",[]],[\"name/4703\",[377,65.408]],[\"comment/4703\",[]],[\"name/4704\",[44,47.097]],[\"comment/4704\",[]],[\"name/4705\",[45,47.097]],[\"comment/4705\",[]],[\"name/4706\",[46,47.097]],[\"comment/4706\",[]],[\"name/4707\",[47,47.097]],[\"comment/4707\",[]],[\"name/4708\",[48,47.097]],[\"comment/4708\",[]],[\"name/4709\",[49,47.097]],[\"comment/4709\",[]],[\"name/4710\",[50,47.097]],[\"comment/4710\",[]],[\"name/4711\",[51,47.097]],[\"comment/4711\",[]],[\"name/4712\",[52,47.097]],[\"comment/4712\",[]],[\"name/4713\",[53,47.097]],[\"comment/4713\",[]],[\"name/4714\",[54,47.097]],[\"comment/4714\",[]],[\"name/4715\",[55,47.097]],[\"comment/4715\",[]],[\"name/4716\",[56,47.097]],[\"comment/4716\",[]],[\"name/4717\",[57,47.097]],[\"comment/4717\",[]],[\"name/4718\",[58,47.097]],[\"comment/4718\",[]],[\"name/4719\",[59,47.097]],[\"comment/4719\",[]],[\"name/4720\",[60,47.097]],[\"comment/4720\",[]],[\"name/4721\",[61,47.097]],[\"comment/4721\",[]],[\"name/4722\",[62,47.097]],[\"comment/4722\",[]],[\"name/4723\",[63,46.796]],[\"comment/4723\",[]],[\"name/4724\",[64,46.796]],[\"comment/4724\",[]],[\"name/4725\",[65,47.097]],[\"comment/4725\",[]],[\"name/4726\",[66,43.221]],[\"comment/4726\",[]],[\"name/4727\",[67,46.649]],[\"comment/4727\",[]],[\"name/4728\",[68,46.649]],[\"comment/4728\",[]],[\"name/4729\",[69,47.097]],[\"comment/4729\",[]],[\"name/4730\",[70,46.945]],[\"comment/4730\",[]],[\"name/4731\",[71,46.945]],[\"comment/4731\",[]],[\"name/4732\",[72,47.097]],[\"comment/4732\",[]],[\"name/4733\",[73,47.097]],[\"comment/4733\",[]],[\"name/4734\",[74,47.097]],[\"comment/4734\",[]],[\"name/4735\",[75,46.945]],[\"comment/4735\",[]],[\"name/4736\",[76,46.796]],[\"comment/4736\",[]],[\"name/4737\",[77,46.796]],[\"comment/4737\",[]],[\"name/4738\",[1128,79.762]],[\"comment/4738\",[]],[\"name/4739\",[9,46.22]],[\"comment/4739\",[]],[\"name/4740\",[15,46.945]],[\"comment/4740\",[]],[\"name/4741\",[13,54.107]],[\"comment/4741\",[]],[\"name/4742\",[16,44.087]],[\"comment/4742\",[]],[\"name/4743\",[1129,84.871]],[\"comment/4743\",[]],[\"name/4744\",[1123,73.883]],[\"comment/4744\",[]],[\"name/4745\",[1124,71.876]],[\"comment/4745\",[]],[\"name/4746\",[25,44.668]],[\"comment/4746\",[]],[\"name/4747\",[35,56.148]],[\"comment/4747\",[]],[\"name/4748\",[36,55.778]],[\"comment/4748\",[]],[\"name/4749\",[128,54.419]],[\"comment/4749\",[]],[\"name/4750\",[129,54.419]],[\"comment/4750\",[]],[\"name/4751\",[130,54.107]],[\"comment/4751\",[]],[\"name/4752\",[22,49.502]],[\"comment/4752\",[]],[\"name/4753\",[26,50.524]],[\"comment/4753\",[]],[\"name/4754\",[175,53.804]],[\"comment/4754\",[]],[\"name/4755\",[250,60.887]],[\"comment/4755\",[]],[\"name/4756\",[373,65.408]],[\"comment/4756\",[]],[\"name/4757\",[374,65.408]],[\"comment/4757\",[]],[\"name/4758\",[375,64.498]],[\"comment/4758\",[]],[\"name/4759\",[376,65.408]],[\"comment/4759\",[]],[\"name/4760\",[377,65.408]],[\"comment/4760\",[]],[\"name/4761\",[44,47.097]],[\"comment/4761\",[]],[\"name/4762\",[45,47.097]],[\"comment/4762\",[]],[\"name/4763\",[46,47.097]],[\"comment/4763\",[]],[\"name/4764\",[47,47.097]],[\"comment/4764\",[]],[\"name/4765\",[48,47.097]],[\"comment/4765\",[]],[\"name/4766\",[49,47.097]],[\"comment/4766\",[]],[\"name/4767\",[50,47.097]],[\"comment/4767\",[]],[\"name/4768\",[51,47.097]],[\"comment/4768\",[]],[\"name/4769\",[52,47.097]],[\"comment/4769\",[]],[\"name/4770\",[53,47.097]],[\"comment/4770\",[]],[\"name/4771\",[54,47.097]],[\"comment/4771\",[]],[\"name/4772\",[55,47.097]],[\"comment/4772\",[]],[\"name/4773\",[56,47.097]],[\"comment/4773\",[]],[\"name/4774\",[57,47.097]],[\"comment/4774\",[]],[\"name/4775\",[58,47.097]],[\"comment/4775\",[]],[\"name/4776\",[59,47.097]],[\"comment/4776\",[]],[\"name/4777\",[60,47.097]],[\"comment/4777\",[]],[\"name/4778\",[61,47.097]],[\"comment/4778\",[]],[\"name/4779\",[62,47.097]],[\"comment/4779\",[]],[\"name/4780\",[63,46.796]],[\"comment/4780\",[]],[\"name/4781\",[64,46.796]],[\"comment/4781\",[]],[\"name/4782\",[65,47.097]],[\"comment/4782\",[]],[\"name/4783\",[66,43.221]],[\"comment/4783\",[]],[\"name/4784\",[67,46.649]],[\"comment/4784\",[]],[\"name/4785\",[68,46.649]],[\"comment/4785\",[]],[\"name/4786\",[69,47.097]],[\"comment/4786\",[]],[\"name/4787\",[70,46.945]],[\"comment/4787\",[]],[\"name/4788\",[71,46.945]],[\"comment/4788\",[]],[\"name/4789\",[72,47.097]],[\"comment/4789\",[]],[\"name/4790\",[73,47.097]],[\"comment/4790\",[]],[\"name/4791\",[74,47.097]],[\"comment/4791\",[]],[\"name/4792\",[75,46.945]],[\"comment/4792\",[]],[\"name/4793\",[76,46.796]],[\"comment/4793\",[]],[\"name/4794\",[77,46.796]],[\"comment/4794\",[]],[\"name/4795\",[1130,84.871]],[\"comment/4795\",[]],[\"name/4796\",[1131,84.871]],[\"comment/4796\",[]],[\"name/4797\",[416,63.664]],[\"comment/4797\",[]],[\"name/4798\",[415,64.498]],[\"comment/4798\",[]],[\"name/4799\",[959,79.762]],[\"comment/4799\",[]],[\"name/4800\",[537,76.396]],[\"comment/4800\",[]],[\"name/4801\",[9,46.22]],[\"comment/4801\",[]],[\"name/4802\",[15,46.945]],[\"comment/4802\",[]],[\"name/4803\",[13,54.107]],[\"comment/4803\",[]],[\"name/4804\",[16,44.087]],[\"comment/4804\",[]],[\"name/4805\",[18,52.946]],[\"comment/4805\",[]],[\"name/4806\",[1,44.315]],[\"comment/4806\",[]],[\"name/4807\",[119,57.785]],[\"comment/4807\",[]],[\"name/4808\",[1019,76.396]],[\"comment/4808\",[]],[\"name/4809\",[1123,73.883]],[\"comment/4809\",[]],[\"name/4810\",[1124,71.876]],[\"comment/4810\",[]],[\"name/4811\",[25,44.668]],[\"comment/4811\",[]],[\"name/4812\",[35,56.148]],[\"comment/4812\",[]],[\"name/4813\",[36,55.778]],[\"comment/4813\",[]],[\"name/4814\",[128,54.419]],[\"comment/4814\",[]],[\"name/4815\",[129,54.419]],[\"comment/4815\",[]],[\"name/4816\",[130,54.107]],[\"comment/4816\",[]],[\"name/4817\",[22,49.502]],[\"comment/4817\",[]],[\"name/4818\",[26,50.524]],[\"comment/4818\",[]],[\"name/4819\",[175,53.804]],[\"comment/4819\",[]],[\"name/4820\",[250,60.887]],[\"comment/4820\",[]],[\"name/4821\",[373,65.408]],[\"comment/4821\",[]],[\"name/4822\",[374,65.408]],[\"comment/4822\",[]],[\"name/4823\",[375,64.498]],[\"comment/4823\",[]],[\"name/4824\",[376,65.408]],[\"comment/4824\",[]],[\"name/4825\",[377,65.408]],[\"comment/4825\",[]],[\"name/4826\",[44,47.097]],[\"comment/4826\",[]],[\"name/4827\",[45,47.097]],[\"comment/4827\",[]],[\"name/4828\",[46,47.097]],[\"comment/4828\",[]],[\"name/4829\",[47,47.097]],[\"comment/4829\",[]],[\"name/4830\",[48,47.097]],[\"comment/4830\",[]],[\"name/4831\",[49,47.097]],[\"comment/4831\",[]],[\"name/4832\",[50,47.097]],[\"comment/4832\",[]],[\"name/4833\",[51,47.097]],[\"comment/4833\",[]],[\"name/4834\",[52,47.097]],[\"comment/4834\",[]],[\"name/4835\",[53,47.097]],[\"comment/4835\",[]],[\"name/4836\",[54,47.097]],[\"comment/4836\",[]],[\"name/4837\",[55,47.097]],[\"comment/4837\",[]],[\"name/4838\",[56,47.097]],[\"comment/4838\",[]],[\"name/4839\",[57,47.097]],[\"comment/4839\",[]],[\"name/4840\",[58,47.097]],[\"comment/4840\",[]],[\"name/4841\",[59,47.097]],[\"comment/4841\",[]],[\"name/4842\",[60,47.097]],[\"comment/4842\",[]],[\"name/4843\",[61,47.097]],[\"comment/4843\",[]],[\"name/4844\",[62,47.097]],[\"comment/4844\",[]],[\"name/4845\",[63,46.796]],[\"comment/4845\",[]],[\"name/4846\",[64,46.796]],[\"comment/4846\",[]],[\"name/4847\",[65,47.097]],[\"comment/4847\",[]],[\"name/4848\",[66,43.221]],[\"comment/4848\",[]],[\"name/4849\",[67,46.649]],[\"comment/4849\",[]],[\"name/4850\",[68,46.649]],[\"comment/4850\",[]],[\"name/4851\",[69,47.097]],[\"comment/4851\",[]],[\"name/4852\",[70,46.945]],[\"comment/4852\",[]],[\"name/4853\",[71,46.945]],[\"comment/4853\",[]],[\"name/4854\",[72,47.097]],[\"comment/4854\",[]],[\"name/4855\",[73,47.097]],[\"comment/4855\",[]],[\"name/4856\",[74,47.097]],[\"comment/4856\",[]],[\"name/4857\",[75,46.945]],[\"comment/4857\",[]],[\"name/4858\",[76,46.796]],[\"comment/4858\",[]],[\"name/4859\",[77,46.796]],[\"comment/4859\",[]],[\"name/4860\",[538,76.396]],[\"comment/4860\",[]],[\"name/4861\",[9,46.22]],[\"comment/4861\",[]],[\"name/4862\",[15,46.945]],[\"comment/4862\",[]],[\"name/4863\",[13,54.107]],[\"comment/4863\",[]],[\"name/4864\",[16,44.087]],[\"comment/4864\",[]],[\"name/4865\",[1132,84.871]],[\"comment/4865\",[]],[\"name/4866\",[1123,73.883]],[\"comment/4866\",[]],[\"name/4867\",[1124,71.876]],[\"comment/4867\",[]],[\"name/4868\",[1020,71.876]],[\"comment/4868\",[]],[\"name/4869\",[25,44.668]],[\"comment/4869\",[]],[\"name/4870\",[35,56.148]],[\"comment/4870\",[]],[\"name/4871\",[36,55.778]],[\"comment/4871\",[]],[\"name/4872\",[128,54.419]],[\"comment/4872\",[]],[\"name/4873\",[129,54.419]],[\"comment/4873\",[]],[\"name/4874\",[130,54.107]],[\"comment/4874\",[]],[\"name/4875\",[22,49.502]],[\"comment/4875\",[]],[\"name/4876\",[26,50.524]],[\"comment/4876\",[]],[\"name/4877\",[175,53.804]],[\"comment/4877\",[]],[\"name/4878\",[250,60.887]],[\"comment/4878\",[]],[\"name/4879\",[373,65.408]],[\"comment/4879\",[]],[\"name/4880\",[374,65.408]],[\"comment/4880\",[]],[\"name/4881\",[375,64.498]],[\"comment/4881\",[]],[\"name/4882\",[376,65.408]],[\"comment/4882\",[]],[\"name/4883\",[377,65.408]],[\"comment/4883\",[]],[\"name/4884\",[44,47.097]],[\"comment/4884\",[]],[\"name/4885\",[45,47.097]],[\"comment/4885\",[]],[\"name/4886\",[46,47.097]],[\"comment/4886\",[]],[\"name/4887\",[47,47.097]],[\"comment/4887\",[]],[\"name/4888\",[48,47.097]],[\"comment/4888\",[]],[\"name/4889\",[49,47.097]],[\"comment/4889\",[]],[\"name/4890\",[50,47.097]],[\"comment/4890\",[]],[\"name/4891\",[51,47.097]],[\"comment/4891\",[]],[\"name/4892\",[52,47.097]],[\"comment/4892\",[]],[\"name/4893\",[53,47.097]],[\"comment/4893\",[]],[\"name/4894\",[54,47.097]],[\"comment/4894\",[]],[\"name/4895\",[55,47.097]],[\"comment/4895\",[]],[\"name/4896\",[56,47.097]],[\"comment/4896\",[]],[\"name/4897\",[57,47.097]],[\"comment/4897\",[]],[\"name/4898\",[58,47.097]],[\"comment/4898\",[]],[\"name/4899\",[59,47.097]],[\"comment/4899\",[]],[\"name/4900\",[60,47.097]],[\"comment/4900\",[]],[\"name/4901\",[61,47.097]],[\"comment/4901\",[]],[\"name/4902\",[62,47.097]],[\"comment/4902\",[]],[\"name/4903\",[63,46.796]],[\"comment/4903\",[]],[\"name/4904\",[64,46.796]],[\"comment/4904\",[]],[\"name/4905\",[65,47.097]],[\"comment/4905\",[]],[\"name/4906\",[66,43.221]],[\"comment/4906\",[]],[\"name/4907\",[67,46.649]],[\"comment/4907\",[]],[\"name/4908\",[68,46.649]],[\"comment/4908\",[]],[\"name/4909\",[69,47.097]],[\"comment/4909\",[]],[\"name/4910\",[70,46.945]],[\"comment/4910\",[]],[\"name/4911\",[71,46.945]],[\"comment/4911\",[]],[\"name/4912\",[72,47.097]],[\"comment/4912\",[]],[\"name/4913\",[73,47.097]],[\"comment/4913\",[]],[\"name/4914\",[74,47.097]],[\"comment/4914\",[]],[\"name/4915\",[75,46.945]],[\"comment/4915\",[]],[\"name/4916\",[76,46.796]],[\"comment/4916\",[]],[\"name/4917\",[77,46.796]],[\"comment/4917\",[]],[\"name/4918\",[1133,84.871]],[\"comment/4918\",[]],[\"name/4919\",[1073,79.762]],[\"comment/4919\",[]],[\"name/4920\",[1075,79.762]],[\"comment/4920\",[]],[\"name/4921\",[1074,79.762]],[\"comment/4921\",[]],[\"name/4922\",[1076,79.762]],[\"comment/4922\",[]],[\"name/4923\",[511,73.883]],[\"comment/4923\",[]],[\"name/4924\",[9,46.22]],[\"comment/4924\",[]],[\"name/4925\",[15,46.945]],[\"comment/4925\",[]],[\"name/4926\",[16,44.087]],[\"comment/4926\",[]],[\"name/4927\",[18,52.946]],[\"comment/4927\",[]],[\"name/4928\",[1,44.315]],[\"comment/4928\",[]],[\"name/4929\",[1134,76.396]],[\"comment/4929\",[]],[\"name/4930\",[1135,76.396]],[\"comment/4930\",[]],[\"name/4931\",[1136,76.396]],[\"comment/4931\",[]],[\"name/4932\",[1137,76.396]],[\"comment/4932\",[]],[\"name/4933\",[1138,76.396]],[\"comment/4933\",[]],[\"name/4934\",[1139,76.396]],[\"comment/4934\",[]],[\"name/4935\",[116,57.35]],[\"comment/4935\",[]],[\"name/4936\",[1140,73.883]],[\"comment/4936\",[]],[\"name/4937\",[397,70.205]],[\"comment/4937\",[]],[\"name/4938\",[398,73.883]],[\"comment/4938\",[]],[\"name/4939\",[1141,76.396]],[\"comment/4939\",[]],[\"name/4940\",[1142,76.396]],[\"comment/4940\",[]],[\"name/4941\",[217,71.876]],[\"comment/4941\",[]],[\"name/4942\",[25,44.668]],[\"comment/4942\",[]],[\"name/4943\",[44,47.097]],[\"comment/4943\",[]],[\"name/4944\",[45,47.097]],[\"comment/4944\",[]],[\"name/4945\",[46,47.097]],[\"comment/4945\",[]],[\"name/4946\",[47,47.097]],[\"comment/4946\",[]],[\"name/4947\",[48,47.097]],[\"comment/4947\",[]],[\"name/4948\",[49,47.097]],[\"comment/4948\",[]],[\"name/4949\",[50,47.097]],[\"comment/4949\",[]],[\"name/4950\",[51,47.097]],[\"comment/4950\",[]],[\"name/4951\",[52,47.097]],[\"comment/4951\",[]],[\"name/4952\",[53,47.097]],[\"comment/4952\",[]],[\"name/4953\",[54,47.097]],[\"comment/4953\",[]],[\"name/4954\",[55,47.097]],[\"comment/4954\",[]],[\"name/4955\",[56,47.097]],[\"comment/4955\",[]],[\"name/4956\",[57,47.097]],[\"comment/4956\",[]],[\"name/4957\",[58,47.097]],[\"comment/4957\",[]],[\"name/4958\",[59,47.097]],[\"comment/4958\",[]],[\"name/4959\",[60,47.097]],[\"comment/4959\",[]],[\"name/4960\",[61,47.097]],[\"comment/4960\",[]],[\"name/4961\",[62,47.097]],[\"comment/4961\",[]],[\"name/4962\",[63,46.796]],[\"comment/4962\",[]],[\"name/4963\",[64,46.796]],[\"comment/4963\",[]],[\"name/4964\",[65,47.097]],[\"comment/4964\",[]],[\"name/4965\",[66,43.221]],[\"comment/4965\",[]],[\"name/4966\",[67,46.649]],[\"comment/4966\",[]],[\"name/4967\",[68,46.649]],[\"comment/4967\",[]],[\"name/4968\",[69,47.097]],[\"comment/4968\",[]],[\"name/4969\",[70,46.945]],[\"comment/4969\",[]],[\"name/4970\",[71,46.945]],[\"comment/4970\",[]],[\"name/4971\",[72,47.097]],[\"comment/4971\",[]],[\"name/4972\",[73,47.097]],[\"comment/4972\",[]],[\"name/4973\",[74,47.097]],[\"comment/4973\",[]],[\"name/4974\",[75,46.945]],[\"comment/4974\",[]],[\"name/4975\",[76,46.796]],[\"comment/4975\",[]],[\"name/4976\",[77,46.796]],[\"comment/4976\",[]],[\"name/4977\",[553,79.762]],[\"comment/4977\",[]],[\"name/4978\",[329,71.876]],[\"comment/4978\",[]],[\"name/4979\",[407,73.883]],[\"comment/4979\",[]],[\"name/4980\",[1143,84.871]],[\"comment/4980\",[]],[\"name/4981\",[1052,76.396]],[\"comment/4981\",[]],[\"name/4982\",[1144,84.871]],[\"comment/4982\",[]],[\"name/4983\",[547,76.396]],[\"comment/4983\",[]],[\"name/4984\",[9,46.22]],[\"comment/4984\",[]],[\"name/4985\",[17,57.785]],[\"comment/4985\",[]],[\"name/4986\",[15,46.945]],[\"comment/4986\",[]],[\"name/4987\",[13,54.107]],[\"comment/4987\",[]],[\"name/4988\",[16,44.087]],[\"comment/4988\",[]],[\"name/4989\",[1124,71.876]],[\"comment/4989\",[]],[\"name/4990\",[25,44.668]],[\"comment/4990\",[]],[\"name/4991\",[35,56.148]],[\"comment/4991\",[]],[\"name/4992\",[36,55.778]],[\"comment/4992\",[]],[\"name/4993\",[128,54.419]],[\"comment/4993\",[]],[\"name/4994\",[129,54.419]],[\"comment/4994\",[]],[\"name/4995\",[130,54.107]],[\"comment/4995\",[]],[\"name/4996\",[22,49.502]],[\"comment/4996\",[]],[\"name/4997\",[26,50.524]],[\"comment/4997\",[]],[\"name/4998\",[175,53.804]],[\"comment/4998\",[]],[\"name/4999\",[250,60.887]],[\"comment/4999\",[]],[\"name/5000\",[373,65.408]],[\"comment/5000\",[]],[\"name/5001\",[374,65.408]],[\"comment/5001\",[]],[\"name/5002\",[375,64.498]],[\"comment/5002\",[]],[\"name/5003\",[376,65.408]],[\"comment/5003\",[]],[\"name/5004\",[377,65.408]],[\"comment/5004\",[]],[\"name/5005\",[44,47.097]],[\"comment/5005\",[]],[\"name/5006\",[45,47.097]],[\"comment/5006\",[]],[\"name/5007\",[46,47.097]],[\"comment/5007\",[]],[\"name/5008\",[47,47.097]],[\"comment/5008\",[]],[\"name/5009\",[48,47.097]],[\"comment/5009\",[]],[\"name/5010\",[49,47.097]],[\"comment/5010\",[]],[\"name/5011\",[50,47.097]],[\"comment/5011\",[]],[\"name/5012\",[51,47.097]],[\"comment/5012\",[]],[\"name/5013\",[52,47.097]],[\"comment/5013\",[]],[\"name/5014\",[53,47.097]],[\"comment/5014\",[]],[\"name/5015\",[54,47.097]],[\"comment/5015\",[]],[\"name/5016\",[55,47.097]],[\"comment/5016\",[]],[\"name/5017\",[56,47.097]],[\"comment/5017\",[]],[\"name/5018\",[57,47.097]],[\"comment/5018\",[]],[\"name/5019\",[58,47.097]],[\"comment/5019\",[]],[\"name/5020\",[59,47.097]],[\"comment/5020\",[]],[\"name/5021\",[60,47.097]],[\"comment/5021\",[]],[\"name/5022\",[61,47.097]],[\"comment/5022\",[]],[\"name/5023\",[62,47.097]],[\"comment/5023\",[]],[\"name/5024\",[63,46.796]],[\"comment/5024\",[]],[\"name/5025\",[64,46.796]],[\"comment/5025\",[]],[\"name/5026\",[65,47.097]],[\"comment/5026\",[]],[\"name/5027\",[66,43.221]],[\"comment/5027\",[]],[\"name/5028\",[67,46.649]],[\"comment/5028\",[]],[\"name/5029\",[68,46.649]],[\"comment/5029\",[]],[\"name/5030\",[69,47.097]],[\"comment/5030\",[]],[\"name/5031\",[70,46.945]],[\"comment/5031\",[]],[\"name/5032\",[71,46.945]],[\"comment/5032\",[]],[\"name/5033\",[72,47.097]],[\"comment/5033\",[]],[\"name/5034\",[73,47.097]],[\"comment/5034\",[]],[\"name/5035\",[74,47.097]],[\"comment/5035\",[]],[\"name/5036\",[75,46.945]],[\"comment/5036\",[]],[\"name/5037\",[76,46.796]],[\"comment/5037\",[]],[\"name/5038\",[77,46.796]],[\"comment/5038\",[]],[\"name/5039\",[1145,84.871]],[\"comment/5039\",[]],[\"name/5040\",[1146,84.871]],[\"comment/5040\",[]],[\"name/5041\",[1147,84.871]],[\"comment/5041\",[]],[\"name/5042\",[1148,84.871]],[\"comment/5042\",[]],[\"name/5043\",[1149,84.871]],[\"comment/5043\",[]],[\"name/5044\",[1150,84.871]],[\"comment/5044\",[]],[\"name/5045\",[1151,84.871]],[\"comment/5045\",[]],[\"name/5046\",[1152,84.871]],[\"comment/5046\",[]],[\"name/5047\",[685,64.498]],[\"comment/5047\",[]],[\"name/5048\",[1153,84.871]],[\"comment/5048\",[]],[\"name/5049\",[1095,79.762]],[\"comment/5049\",[]],[\"name/5050\",[1094,79.762]],[\"comment/5050\",[]],[\"name/5051\",[1154,84.871]],[\"comment/5051\",[]],[\"name/5052\",[1155,84.871]],[\"comment/5052\",[]],[\"name/5053\",[443,63.664]],[\"comment/5053\",[]],[\"name/5054\",[8,57.35]],[\"comment/5054\",[]],[\"name/5055\",[9,46.22]],[\"comment/5055\",[]],[\"name/5056\",[233,76.396]],[\"comment/5056\",[]],[\"name/5057\",[234,76.396]],[\"comment/5057\",[]],[\"name/5058\",[6,60.298]],[\"comment/5058\",[]],[\"name/5059\",[260,65.408]],[\"comment/5059\",[]],[\"name/5060\",[15,46.945]],[\"comment/5060\",[]],[\"name/5061\",[16,44.087]],[\"comment/5061\",[]],[\"name/5062\",[469,70.205]],[\"comment/5062\",[]],[\"name/5063\",[1156,84.871]],[\"comment/5063\",[]],[\"name/5064\",[1140,73.883]],[\"comment/5064\",[]],[\"name/5065\",[1157,84.871]],[\"comment/5065\",[]],[\"name/5066\",[1158,84.871]],[\"comment/5066\",[]],[\"name/5067\",[1159,84.871]],[\"comment/5067\",[]],[\"name/5068\",[1021,76.396]],[\"comment/5068\",[]],[\"name/5069\",[62,47.097]],[\"comment/5069\",[]],[\"name/5070\",[1160,84.871]],[\"comment/5070\",[]],[\"name/5071\",[1,44.315]],[\"comment/5071\",[]],[\"name/5072\",[699,68.773]],[\"comment/5072\",[]],[\"name/5073\",[700,68.773]],[\"comment/5073\",[]],[\"name/5074\",[1161,84.871]],[\"comment/5074\",[]],[\"name/5075\",[1162,84.871]],[\"comment/5075\",[]],[\"name/5076\",[1163,84.871]],[\"comment/5076\",[]],[\"name/5077\",[1164,84.871]],[\"comment/5077\",[]],[\"name/5078\",[25,44.668]],[\"comment/5078\",[]],[\"name/5079\",[44,47.097]],[\"comment/5079\",[]],[\"name/5080\",[45,47.097]],[\"comment/5080\",[]],[\"name/5081\",[46,47.097]],[\"comment/5081\",[]],[\"name/5082\",[47,47.097]],[\"comment/5082\",[]],[\"name/5083\",[48,47.097]],[\"comment/5083\",[]],[\"name/5084\",[49,47.097]],[\"comment/5084\",[]],[\"name/5085\",[50,47.097]],[\"comment/5085\",[]],[\"name/5086\",[51,47.097]],[\"comment/5086\",[]],[\"name/5087\",[52,47.097]],[\"comment/5087\",[]],[\"name/5088\",[53,47.097]],[\"comment/5088\",[]],[\"name/5089\",[54,47.097]],[\"comment/5089\",[]],[\"name/5090\",[55,47.097]],[\"comment/5090\",[]],[\"name/5091\",[56,47.097]],[\"comment/5091\",[]],[\"name/5092\",[57,47.097]],[\"comment/5092\",[]],[\"name/5093\",[58,47.097]],[\"comment/5093\",[]],[\"name/5094\",[59,47.097]],[\"comment/5094\",[]],[\"name/5095\",[60,47.097]],[\"comment/5095\",[]],[\"name/5096\",[61,47.097]],[\"comment/5096\",[]],[\"name/5097\",[63,46.796]],[\"comment/5097\",[]],[\"name/5098\",[64,46.796]],[\"comment/5098\",[]],[\"name/5099\",[65,47.097]],[\"comment/5099\",[]],[\"name/5100\",[66,43.221]],[\"comment/5100\",[]],[\"name/5101\",[67,46.649]],[\"comment/5101\",[]],[\"name/5102\",[68,46.649]],[\"comment/5102\",[]],[\"name/5103\",[69,47.097]],[\"comment/5103\",[]],[\"name/5104\",[70,46.945]],[\"comment/5104\",[]],[\"name/5105\",[71,46.945]],[\"comment/5105\",[]],[\"name/5106\",[72,47.097]],[\"comment/5106\",[]],[\"name/5107\",[73,47.097]],[\"comment/5107\",[]],[\"name/5108\",[74,47.097]],[\"comment/5108\",[]],[\"name/5109\",[75,46.945]],[\"comment/5109\",[]],[\"name/5110\",[76,46.796]],[\"comment/5110\",[]],[\"name/5111\",[77,46.796]],[\"comment/5111\",[]],[\"name/5112\",[1165,79.762]],[\"comment/5112\",[]],[\"name/5113\",[9,46.22]],[\"comment/5113\",[]],[\"name/5114\",[104,60.298]],[\"comment/5114\",[]],[\"name/5115\",[105,59.743]],[\"comment/5115\",[]],[\"name/5116\",[15,46.945]],[\"comment/5116\",[]],[\"name/5117\",[16,44.087]],[\"comment/5117\",[]],[\"name/5118\",[685,64.498]],[\"comment/5118\",[]],[\"name/5119\",[443,63.664]],[\"comment/5119\",[]],[\"name/5120\",[686,70.205]],[\"comment/5120\",[]],[\"name/5121\",[687,70.205]],[\"comment/5121\",[]],[\"name/5122\",[688,70.205]],[\"comment/5122\",[]],[\"name/5123\",[689,70.205]],[\"comment/5123\",[]],[\"name/5124\",[690,70.205]],[\"comment/5124\",[]],[\"name/5125\",[691,70.205]],[\"comment/5125\",[]],[\"name/5126\",[692,70.205]],[\"comment/5126\",[]],[\"name/5127\",[218,68.773]],[\"comment/5127\",[]],[\"name/5128\",[693,70.205]],[\"comment/5128\",[]],[\"name/5129\",[166,59.743]],[\"comment/5129\",[]],[\"name/5130\",[694,70.205]],[\"comment/5130\",[]],[\"name/5131\",[695,70.205]],[\"comment/5131\",[]],[\"name/5132\",[696,70.205]],[\"comment/5132\",[]],[\"name/5133\",[697,70.205]],[\"comment/5133\",[]],[\"name/5134\",[698,70.205]],[\"comment/5134\",[]],[\"name/5135\",[167,60.298]],[\"comment/5135\",[]],[\"name/5136\",[1,44.315]],[\"comment/5136\",[]],[\"name/5137\",[699,68.773]],[\"comment/5137\",[]],[\"name/5138\",[700,68.773]],[\"comment/5138\",[]],[\"name/5139\",[143,59.216]],[\"comment/5139\",[]],[\"name/5140\",[701,67.521]],[\"comment/5140\",[]],[\"name/5141\",[702,70.205]],[\"comment/5141\",[]],[\"name/5142\",[188,56.933]],[\"comment/5142\",[]],[\"name/5143\",[703,70.205]],[\"comment/5143\",[]],[\"name/5144\",[110,59.743]],[\"comment/5144\",[]],[\"name/5145\",[111,57.35]],[\"comment/5145\",[]],[\"name/5146\",[112,59.743]],[\"comment/5146\",[]],[\"name/5147\",[18,52.946]],[\"comment/5147\",[]],[\"name/5148\",[1,44.315]],[\"comment/5148\",[]],[\"name/5149\",[113,60.298]],[\"comment/5149\",[]],[\"name/5150\",[25,44.668]],[\"comment/5150\",[]],[\"name/5151\",[114,60.298]],[\"comment/5151\",[]],[\"name/5152\",[115,60.298]],[\"comment/5152\",[]],[\"name/5153\",[116,57.35]],[\"comment/5153\",[]],[\"name/5154\",[117,60.298]],[\"comment/5154\",[]],[\"name/5155\",[118,60.298]],[\"comment/5155\",[]],[\"name/5156\",[119,57.785]],[\"comment/5156\",[]],[\"name/5157\",[120,60.298]],[\"comment/5157\",[]],[\"name/5158\",[121,60.298]],[\"comment/5158\",[]],[\"name/5159\",[122,56.933]],[\"comment/5159\",[]],[\"name/5160\",[66,43.221]],[\"comment/5160\",[]],[\"name/5161\",[123,58.716]],[\"comment/5161\",[]],[\"name/5162\",[124,60.298]],[\"comment/5162\",[]],[\"name/5163\",[125,60.298]],[\"comment/5163\",[]],[\"name/5164\",[126,59.743]],[\"comment/5164\",[]],[\"name/5165\",[127,60.298]],[\"comment/5165\",[]],[\"name/5166\",[128,54.419]],[\"comment/5166\",[]],[\"name/5167\",[129,54.419]],[\"comment/5167\",[]],[\"name/5168\",[130,54.107]],[\"comment/5168\",[]],[\"name/5169\",[131,60.298]],[\"comment/5169\",[]],[\"name/5170\",[132,60.298]],[\"comment/5170\",[]],[\"name/5171\",[133,60.298]],[\"comment/5171\",[]],[\"name/5172\",[134,60.298]],[\"comment/5172\",[]],[\"name/5173\",[135,59.743]],[\"comment/5173\",[]],[\"name/5174\",[136,60.298]],[\"comment/5174\",[]],[\"name/5175\",[137,60.298]],[\"comment/5175\",[]],[\"name/5176\",[138,59.743]],[\"comment/5176\",[]],[\"name/5177\",[139,60.298]],[\"comment/5177\",[]],[\"name/5178\",[140,60.298]],[\"comment/5178\",[]],[\"name/5179\",[141,60.298]],[\"comment/5179\",[]],[\"name/5180\",[142,60.298]],[\"comment/5180\",[]],[\"name/5181\",[144,59.743]],[\"comment/5181\",[]],[\"name/5182\",[145,59.743]],[\"comment/5182\",[]],[\"name/5183\",[146,59.743]],[\"comment/5183\",[]],[\"name/5184\",[147,59.743]],[\"comment/5184\",[]],[\"name/5185\",[148,60.298]],[\"comment/5185\",[]],[\"name/5186\",[149,60.298]],[\"comment/5186\",[]],[\"name/5187\",[150,60.298]],[\"comment/5187\",[]],[\"name/5188\",[151,60.298]],[\"comment/5188\",[]],[\"name/5189\",[152,60.298]],[\"comment/5189\",[]],[\"name/5190\",[153,60.298]],[\"comment/5190\",[]],[\"name/5191\",[154,60.298]],[\"comment/5191\",[]],[\"name/5192\",[155,60.298]],[\"comment/5192\",[]],[\"name/5193\",[156,58.239]],[\"comment/5193\",[]],[\"name/5194\",[157,60.298]],[\"comment/5194\",[]],[\"name/5195\",[158,60.298]],[\"comment/5195\",[]],[\"name/5196\",[1,44.315]],[\"comment/5196\",[]],[\"name/5197\",[159,56.933]],[\"comment/5197\",[]],[\"name/5198\",[160,56.933]],[\"comment/5198\",[]],[\"name/5199\",[161,60.298]],[\"comment/5199\",[]],[\"name/5200\",[162,60.298]],[\"comment/5200\",[]],[\"name/5201\",[163,60.298]],[\"comment/5201\",[]],[\"name/5202\",[164,56.933]],[\"comment/5202\",[]],[\"name/5203\",[165,59.743]],[\"comment/5203\",[]],[\"name/5204\",[168,60.298]],[\"comment/5204\",[]],[\"name/5205\",[169,60.298]],[\"comment/5205\",[]],[\"name/5206\",[170,60.298]],[\"comment/5206\",[]],[\"name/5207\",[171,60.298]],[\"comment/5207\",[]],[\"name/5208\",[172,57.35]],[\"comment/5208\",[]],[\"name/5209\",[173,59.743]],[\"comment/5209\",[]],[\"name/5210\",[174,59.743]],[\"comment/5210\",[]],[\"name/5211\",[26,50.524]],[\"comment/5211\",[]],[\"name/5212\",[22,49.502]],[\"comment/5212\",[]],[\"name/5213\",[41,52.675]],[\"comment/5213\",[]],[\"name/5214\",[42,52.675]],[\"comment/5214\",[]],[\"name/5215\",[175,53.804]],[\"comment/5215\",[]],[\"name/5216\",[176,59.216]],[\"comment/5216\",[]],[\"name/5217\",[177,59.743]],[\"comment/5217\",[]],[\"name/5218\",[178,59.743]],[\"comment/5218\",[]],[\"name/5219\",[179,59.743]],[\"comment/5219\",[]],[\"name/5220\",[180,59.743]],[\"comment/5220\",[]],[\"name/5221\",[181,59.743]],[\"comment/5221\",[]],[\"name/5222\",[182,59.743]],[\"comment/5222\",[]],[\"name/5223\",[183,59.743]],[\"comment/5223\",[]],[\"name/5224\",[184,59.743]],[\"comment/5224\",[]],[\"name/5225\",[108,59.743]],[\"comment/5225\",[]],[\"name/5226\",[185,58.239]],[\"comment/5226\",[]],[\"name/5227\",[186,59.743]],[\"comment/5227\",[]],[\"name/5228\",[109,56.533]],[\"comment/5228\",[]],[\"name/5229\",[187,59.743]],[\"comment/5229\",[]],[\"name/5230\",[189,59.216]],[\"comment/5230\",[]],[\"name/5231\",[190,59.743]],[\"comment/5231\",[]],[\"name/5232\",[191,59.743]],[\"comment/5232\",[]],[\"name/5233\",[192,59.743]],[\"comment/5233\",[]],[\"name/5234\",[193,59.743]],[\"comment/5234\",[]],[\"name/5235\",[194,59.743]],[\"comment/5235\",[]],[\"name/5236\",[34,53.509]],[\"comment/5236\",[]],[\"name/5237\",[32,53.509]],[\"comment/5237\",[]],[\"name/5238\",[33,53.509]],[\"comment/5238\",[]],[\"name/5239\",[44,47.097]],[\"comment/5239\",[]],[\"name/5240\",[45,47.097]],[\"comment/5240\",[]],[\"name/5241\",[46,47.097]],[\"comment/5241\",[]],[\"name/5242\",[47,47.097]],[\"comment/5242\",[]],[\"name/5243\",[48,47.097]],[\"comment/5243\",[]],[\"name/5244\",[49,47.097]],[\"comment/5244\",[]],[\"name/5245\",[50,47.097]],[\"comment/5245\",[]],[\"name/5246\",[51,47.097]],[\"comment/5246\",[]],[\"name/5247\",[25,44.668]],[\"comment/5247\",[]],[\"name/5248\",[52,47.097]],[\"comment/5248\",[]],[\"name/5249\",[53,47.097]],[\"comment/5249\",[]],[\"name/5250\",[54,47.097]],[\"comment/5250\",[]],[\"name/5251\",[55,47.097]],[\"comment/5251\",[]],[\"name/5252\",[56,47.097]],[\"comment/5252\",[]],[\"name/5253\",[57,47.097]],[\"comment/5253\",[]],[\"name/5254\",[58,47.097]],[\"comment/5254\",[]],[\"name/5255\",[59,47.097]],[\"comment/5255\",[]],[\"name/5256\",[60,47.097]],[\"comment/5256\",[]],[\"name/5257\",[61,47.097]],[\"comment/5257\",[]],[\"name/5258\",[62,47.097]],[\"comment/5258\",[]],[\"name/5259\",[63,46.796]],[\"comment/5259\",[]],[\"name/5260\",[64,46.796]],[\"comment/5260\",[]],[\"name/5261\",[65,47.097]],[\"comment/5261\",[]],[\"name/5262\",[66,43.221]],[\"comment/5262\",[]],[\"name/5263\",[67,46.649]],[\"comment/5263\",[]],[\"name/5264\",[68,46.649]],[\"comment/5264\",[]],[\"name/5265\",[69,47.097]],[\"comment/5265\",[]],[\"name/5266\",[70,46.945]],[\"comment/5266\",[]],[\"name/5267\",[71,46.945]],[\"comment/5267\",[]],[\"name/5268\",[72,47.097]],[\"comment/5268\",[]],[\"name/5269\",[73,47.097]],[\"comment/5269\",[]],[\"name/5270\",[74,47.097]],[\"comment/5270\",[]],[\"name/5271\",[75,46.945]],[\"comment/5271\",[]],[\"name/5272\",[76,46.796]],[\"comment/5272\",[]],[\"name/5273\",[77,46.796]],[\"comment/5273\",[]],[\"name/5274\",[1166,84.871]],[\"comment/5274\",[]],[\"name/5275\",[1167,84.871]],[\"comment/5275\",[]],[\"name/5276\",[1168,84.871]],[\"comment/5276\",[]],[\"name/5277\",[1169,84.871]],[\"comment/5277\",[]],[\"name/5278\",[999,76.396]],[\"comment/5278\",[]],[\"name/5279\",[505,71.876]],[\"comment/5279\",[]],[\"name/5280\",[9,46.22]],[\"comment/5280\",[]],[\"name/5281\",[15,46.945]],[\"comment/5281\",[]],[\"name/5282\",[340,70.205]],[\"comment/5282\",[]],[\"name/5283\",[10,58.239]],[\"comment/5283\",[]],[\"name/5284\",[13,54.107]],[\"comment/5284\",[]],[\"name/5285\",[14,59.743]],[\"comment/5285\",[]],[\"name/5286\",[16,44.087]],[\"comment/5286\",[]],[\"name/5287\",[1170,84.871]],[\"comment/5287\",[]],[\"name/5288\",[1171,84.871]],[\"comment/5288\",[]],[\"name/5289\",[683,79.762]],[\"comment/5289\",[]],[\"name/5290\",[684,79.762]],[\"comment/5290\",[]],[\"name/5291\",[1172,84.871]],[\"comment/5291\",[]],[\"name/5292\",[1173,79.762]],[\"comment/5292\",[]],[\"name/5293\",[1174,84.871]],[\"comment/5293\",[]],[\"name/5294\",[25,44.668]],[\"comment/5294\",[]],[\"name/5295\",[22,49.502]],[\"comment/5295\",[]],[\"name/5296\",[26,50.524]],[\"comment/5296\",[]],[\"name/5297\",[27,60.887]],[\"comment/5297\",[]],[\"name/5298\",[28,60.887]],[\"comment/5298\",[]],[\"name/5299\",[23,60.887]],[\"comment/5299\",[]],[\"name/5300\",[29,60.887]],[\"comment/5300\",[]],[\"name/5301\",[30,60.887]],[\"comment/5301\",[]],[\"name/5302\",[31,60.887]],[\"comment/5302\",[]],[\"name/5303\",[32,53.509]],[\"comment/5303\",[]],[\"name/5304\",[33,53.509]],[\"comment/5304\",[]],[\"name/5305\",[34,53.509]],[\"comment/5305\",[]],[\"name/5306\",[35,56.148]],[\"comment/5306\",[]],[\"name/5307\",[36,55.778]],[\"comment/5307\",[]],[\"name/5308\",[37,60.887]],[\"comment/5308\",[]],[\"name/5309\",[38,59.743]],[\"comment/5309\",[]],[\"name/5310\",[39,60.887]],[\"comment/5310\",[]],[\"name/5311\",[40,60.887]],[\"comment/5311\",[]],[\"name/5312\",[41,52.675]],[\"comment/5312\",[]],[\"name/5313\",[42,52.675]],[\"comment/5313\",[]],[\"name/5314\",[43,60.887]],[\"comment/5314\",[]],[\"name/5315\",[44,47.097]],[\"comment/5315\",[]],[\"name/5316\",[45,47.097]],[\"comment/5316\",[]],[\"name/5317\",[46,47.097]],[\"comment/5317\",[]],[\"name/5318\",[47,47.097]],[\"comment/5318\",[]],[\"name/5319\",[48,47.097]],[\"comment/5319\",[]],[\"name/5320\",[49,47.097]],[\"comment/5320\",[]],[\"name/5321\",[50,47.097]],[\"comment/5321\",[]],[\"name/5322\",[51,47.097]],[\"comment/5322\",[]],[\"name/5323\",[52,47.097]],[\"comment/5323\",[]],[\"name/5324\",[53,47.097]],[\"comment/5324\",[]],[\"name/5325\",[54,47.097]],[\"comment/5325\",[]],[\"name/5326\",[55,47.097]],[\"comment/5326\",[]],[\"name/5327\",[56,47.097]],[\"comment/5327\",[]],[\"name/5328\",[57,47.097]],[\"comment/5328\",[]],[\"name/5329\",[58,47.097]],[\"comment/5329\",[]],[\"name/5330\",[59,47.097]],[\"comment/5330\",[]],[\"name/5331\",[60,47.097]],[\"comment/5331\",[]],[\"name/5332\",[61,47.097]],[\"comment/5332\",[]],[\"name/5333\",[62,47.097]],[\"comment/5333\",[]],[\"name/5334\",[63,46.796]],[\"comment/5334\",[]],[\"name/5335\",[64,46.796]],[\"comment/5335\",[]],[\"name/5336\",[65,47.097]],[\"comment/5336\",[]],[\"name/5337\",[66,43.221]],[\"comment/5337\",[]],[\"name/5338\",[67,46.649]],[\"comment/5338\",[]],[\"name/5339\",[68,46.649]],[\"comment/5339\",[]],[\"name/5340\",[69,47.097]],[\"comment/5340\",[]],[\"name/5341\",[70,46.945]],[\"comment/5341\",[]],[\"name/5342\",[71,46.945]],[\"comment/5342\",[]],[\"name/5343\",[72,47.097]],[\"comment/5343\",[]],[\"name/5344\",[73,47.097]],[\"comment/5344\",[]],[\"name/5345\",[74,47.097]],[\"comment/5345\",[]],[\"name/5346\",[75,46.945]],[\"comment/5346\",[]],[\"name/5347\",[76,46.796]],[\"comment/5347\",[]],[\"name/5348\",[77,46.796]],[\"comment/5348\",[]],[\"name/5349\",[295,68.773]],[\"comment/5349\",[]],[\"name/5350\",[9,46.22]],[\"comment/5350\",[]],[\"name/5351\",[17,57.785]],[\"comment/5351\",[]],[\"name/5352\",[1,44.315]],[\"comment/5352\",[]],[\"name/5353\",[1175,84.871]],[\"comment/5353\",[]],[\"name/5354\",[1176,84.871]],[\"comment/5354\",[]],[\"name/5355\",[1177,84.871]],[\"comment/5355\",[]],[\"name/5356\",[1178,84.871]],[\"comment/5356\",[]],[\"name/5357\",[1179,84.871]],[\"comment/5357\",[]],[\"name/5358\",[1180,84.871]],[\"comment/5358\",[]],[\"name/5359\",[1181,84.871]],[\"comment/5359\",[]],[\"name/5360\",[15,46.945]],[\"comment/5360\",[]],[\"name/5361\",[10,58.239]],[\"comment/5361\",[]],[\"name/5362\",[13,54.107]],[\"comment/5362\",[]],[\"name/5363\",[14,59.743]],[\"comment/5363\",[]],[\"name/5364\",[16,44.087]],[\"comment/5364\",[]],[\"name/5365\",[18,52.946]],[\"comment/5365\",[]],[\"name/5366\",[1,44.315]],[\"comment/5366\",[]],[\"name/5367\",[20,73.883]],[\"comment/5367\",[]],[\"name/5368\",[35,56.148]],[\"comment/5368\",[]],[\"name/5369\",[1182,84.871]],[\"comment/5369\",[]],[\"name/5370\",[25,44.668]],[\"comment/5370\",[]],[\"name/5371\",[22,49.502]],[\"comment/5371\",[]],[\"name/5372\",[26,50.524]],[\"comment/5372\",[]],[\"name/5373\",[27,60.887]],[\"comment/5373\",[]],[\"name/5374\",[28,60.887]],[\"comment/5374\",[]],[\"name/5375\",[23,60.887]],[\"comment/5375\",[]],[\"name/5376\",[29,60.887]],[\"comment/5376\",[]],[\"name/5377\",[30,60.887]],[\"comment/5377\",[]],[\"name/5378\",[31,60.887]],[\"comment/5378\",[]],[\"name/5379\",[32,53.509]],[\"comment/5379\",[]],[\"name/5380\",[33,53.509]],[\"comment/5380\",[]],[\"name/5381\",[34,53.509]],[\"comment/5381\",[]],[\"name/5382\",[36,55.778]],[\"comment/5382\",[]],[\"name/5383\",[37,60.887]],[\"comment/5383\",[]],[\"name/5384\",[38,59.743]],[\"comment/5384\",[]],[\"name/5385\",[39,60.887]],[\"comment/5385\",[]],[\"name/5386\",[40,60.887]],[\"comment/5386\",[]],[\"name/5387\",[41,52.675]],[\"comment/5387\",[]],[\"name/5388\",[42,52.675]],[\"comment/5388\",[]],[\"name/5389\",[43,60.887]],[\"comment/5389\",[]],[\"name/5390\",[44,47.097]],[\"comment/5390\",[]],[\"name/5391\",[45,47.097]],[\"comment/5391\",[]],[\"name/5392\",[46,47.097]],[\"comment/5392\",[]],[\"name/5393\",[47,47.097]],[\"comment/5393\",[]],[\"name/5394\",[48,47.097]],[\"comment/5394\",[]],[\"name/5395\",[49,47.097]],[\"comment/5395\",[]],[\"name/5396\",[50,47.097]],[\"comment/5396\",[]],[\"name/5397\",[51,47.097]],[\"comment/5397\",[]],[\"name/5398\",[52,47.097]],[\"comment/5398\",[]],[\"name/5399\",[53,47.097]],[\"comment/5399\",[]],[\"name/5400\",[54,47.097]],[\"comment/5400\",[]],[\"name/5401\",[55,47.097]],[\"comment/5401\",[]],[\"name/5402\",[56,47.097]],[\"comment/5402\",[]],[\"name/5403\",[57,47.097]],[\"comment/5403\",[]],[\"name/5404\",[58,47.097]],[\"comment/5404\",[]],[\"name/5405\",[59,47.097]],[\"comment/5405\",[]],[\"name/5406\",[60,47.097]],[\"comment/5406\",[]],[\"name/5407\",[61,47.097]],[\"comment/5407\",[]],[\"name/5408\",[62,47.097]],[\"comment/5408\",[]],[\"name/5409\",[63,46.796]],[\"comment/5409\",[]],[\"name/5410\",[64,46.796]],[\"comment/5410\",[]],[\"name/5411\",[65,47.097]],[\"comment/5411\",[]],[\"name/5412\",[66,43.221]],[\"comment/5412\",[]],[\"name/5413\",[67,46.649]],[\"comment/5413\",[]],[\"name/5414\",[68,46.649]],[\"comment/5414\",[]],[\"name/5415\",[69,47.097]],[\"comment/5415\",[]],[\"name/5416\",[70,46.945]],[\"comment/5416\",[]],[\"name/5417\",[71,46.945]],[\"comment/5417\",[]],[\"name/5418\",[72,47.097]],[\"comment/5418\",[]],[\"name/5419\",[73,47.097]],[\"comment/5419\",[]],[\"name/5420\",[74,47.097]],[\"comment/5420\",[]],[\"name/5421\",[75,46.945]],[\"comment/5421\",[]],[\"name/5422\",[76,46.796]],[\"comment/5422\",[]],[\"name/5423\",[77,46.796]],[\"comment/5423\",[]],[\"name/5424\",[1183,76.396]],[\"comment/5424\",[]],[\"name/5425\",[1,44.315]],[\"comment/5425\",[]],[\"name/5426\",[66,30.676,582,54.222]],[\"comment/5426\",[]],[\"name/5427\",[66,30.676,583,54.222]],[\"comment/5427\",[]],[\"name/5428\",[66,30.676,585,54.222]],[\"comment/5428\",[]],[\"name/5429\",[66,30.676,584,56.611]],[\"comment/5429\",[]],[\"name/5430\",[1184,84.871]],[\"comment/5430\",[]],[\"name/5431\",[1185,84.871]],[\"comment/5431\",[]],[\"name/5432\",[1186,76.396]],[\"comment/5432\",[]],[\"name/5433\",[1186,76.396]],[\"comment/5433\",[]],[\"name/5434\",[1183,76.396]],[\"comment/5434\",[]],[\"name/5435\",[1187,79.762]],[\"comment/5435\",[]],[\"name/5436\",[479,76.396]],[\"comment/5436\",[]],[\"name/5437\",[539,79.762]],[\"comment/5437\",[]],[\"name/5438\",[9,46.22]],[\"comment/5438\",[]],[\"name/5439\",[16,44.087]],[\"comment/5439\",[]],[\"name/5440\",[480,73.883]],[\"comment/5440\",[]],[\"name/5441\",[977,79.762]],[\"comment/5441\",[]],[\"name/5442\",[6,60.298]],[\"comment/5442\",[]],[\"name/5443\",[260,65.408]],[\"comment/5443\",[]],[\"name/5444\",[1188,84.871]],[\"comment/5444\",[]],[\"name/5445\",[1189,84.871]],[\"comment/5445\",[]],[\"name/5446\",[1,44.315]],[\"comment/5446\",[]],[\"name/5447\",[159,56.933]],[\"comment/5447\",[]],[\"name/5448\",[160,56.933]],[\"comment/5448\",[]],[\"name/5449\",[479,76.396]],[\"comment/5449\",[]],[\"name/5450\",[1183,76.396]],[\"comment/5450\",[]],[\"name/5451\",[1187,79.762]],[\"comment/5451\",[]],[\"name/5452\",[1186,76.396]],[\"comment/5452\",[]],[\"name/5453\",[1190,84.871]],[\"comment/5453\",[]],[\"name/5454\",[1191,84.871]],[\"comment/5454\",[]],[\"name/5455\",[1192,84.871]],[\"comment/5455\",[]],[\"name/5456\",[1193,84.871]],[\"comment/5456\",[]],[\"name/5457\",[1194,79.762]],[\"comment/5457\",[]],[\"name/5458\",[273,76.396]],[\"comment/5458\",[]],[\"name/5459\",[274,76.396]],[\"comment/5459\",[]],[\"name/5460\",[275,73.883]],[\"comment/5460\",[]],[\"name/5461\",[276,76.396]],[\"comment/5461\",[]],[\"name/5462\",[277,76.396]],[\"comment/5462\",[]],[\"name/5463\",[278,76.396]],[\"comment/5463\",[]],[\"name/5464\",[279,76.396]],[\"comment/5464\",[]],[\"name/5465\",[280,76.396]],[\"comment/5465\",[]],[\"name/5466\",[281,76.396]],[\"comment/5466\",[]],[\"name/5467\",[283,76.396]],[\"comment/5467\",[]],[\"name/5468\",[282,76.396]],[\"comment/5468\",[]],[\"name/5469\",[284,73.883]],[\"comment/5469\",[]],[\"name/5470\",[122,56.933]],[\"comment/5470\",[]],[\"name/5471\",[1195,84.871]],[\"comment/5471\",[]],[\"name/5472\",[1196,84.871]],[\"comment/5472\",[]],[\"name/5473\",[272,73.883]],[\"comment/5473\",[]],[\"name/5474\",[285,76.396]],[\"comment/5474\",[]],[\"name/5475\",[286,76.396]],[\"comment/5475\",[]],[\"name/5476\",[287,76.396]],[\"comment/5476\",[]],[\"name/5477\",[288,76.396]],[\"comment/5477\",[]],[\"name/5478\",[289,76.396]],[\"comment/5478\",[]],[\"name/5479\",[290,76.396]],[\"comment/5479\",[]],[\"name/5480\",[291,76.396]],[\"comment/5480\",[]],[\"name/5481\",[292,76.396]],[\"comment/5481\",[]],[\"name/5482\",[293,76.396]],[\"comment/5482\",[]],[\"name/5483\",[296,76.396]],[\"comment/5483\",[]],[\"name/5484\",[294,76.396]],[\"comment/5484\",[]],[\"name/5485\",[295,68.773]],[\"comment/5485\",[]],[\"name/5486\",[297,76.396]],[\"comment/5486\",[]],[\"name/5487\",[298,76.396]],[\"comment/5487\",[]],[\"name/5488\",[299,76.396]],[\"comment/5488\",[]],[\"name/5489\",[300,76.396]],[\"comment/5489\",[]],[\"name/5490\",[301,73.883]],[\"comment/5490\",[]],[\"name/5491\",[302,73.883]],[\"comment/5491\",[]],[\"name/5492\",[67,46.649]],[\"comment/5492\",[]],[\"name/5493\",[68,46.649]],[\"comment/5493\",[]],[\"name/5494\",[66,43.221]],[\"comment/5494\",[]],[\"name/5495\",[303,76.396]],[\"comment/5495\",[]],[\"name/5496\",[1197,84.871]],[\"comment/5496\",[]],[\"name/5497\",[1198,84.871]],[\"comment/5497\",[]],[\"name/5498\",[633,79.762]],[\"comment/5498\",[]],[\"name/5499\",[634,79.762]],[\"comment/5499\",[]],[\"name/5500\",[635,79.762]],[\"comment/5500\",[]],[\"name/5501\",[1199,84.871]],[\"comment/5501\",[]],[\"name/5502\",[1200,84.871]],[\"comment/5502\",[]],[\"name/5503\",[482,67.521]],[\"comment/5503\",[]],[\"name/5504\",[1201,79.762]],[\"comment/5504\",[]],[\"name/5505\",[440,70.205]],[\"comment/5505\",[]],[\"name/5506\",[1202,84.871]],[\"comment/5506\",[]],[\"name/5507\",[1203,84.871]],[\"comment/5507\",[]],[\"name/5508\",[1204,84.871]],[\"comment/5508\",[]],[\"name/5509\",[1205,84.871]],[\"comment/5509\",[]],[\"name/5510\",[444,70.205]],[\"comment/5510\",[]],[\"name/5511\",[1206,84.871]],[\"comment/5511\",[]],[\"name/5512\",[1207,84.871]],[\"comment/5512\",[]],[\"name/5513\",[1208,84.871]],[\"comment/5513\",[]],[\"name/5514\",[1209,84.871]],[\"comment/5514\",[]],[\"name/5515\",[1210,84.871]],[\"comment/5515\",[]],[\"name/5516\",[159,56.933]],[\"comment/5516\",[]],[\"name/5517\",[6,60.298]],[\"comment/5517\",[]],[\"name/5518\",[160,56.933]],[\"comment/5518\",[]],[\"name/5519\",[1211,84.871]],[\"comment/5519\",[]],[\"name/5520\",[1212,84.871]],[\"comment/5520\",[]],[\"name/5521\",[1201,79.762]],[\"comment/5521\",[]],[\"name/5522\",[515,73.883]],[\"comment/5522\",[]],[\"name/5523\",[9,46.22]],[\"comment/5523\",[]],[\"name/5524\",[15,46.945]],[\"comment/5524\",[]],[\"name/5525\",[16,44.087]],[\"comment/5525\",[]],[\"name/5526\",[469,70.205]],[\"comment/5526\",[]],[\"name/5527\",[175,53.804]],[\"comment/5527\",[]],[\"name/5528\",[250,60.887]],[\"comment/5528\",[]],[\"name/5529\",[247,71.876]],[\"comment/5529\",[]],[\"name/5530\",[251,71.876]],[\"comment/5530\",[]],[\"name/5531\",[1213,84.871]],[\"comment/5531\",[]],[\"name/5532\",[490,79.762]],[\"comment/5532\",[]],[\"name/5533\",[64,46.796]],[\"comment/5533\",[]],[\"name/5534\",[1214,84.871]],[\"comment/5534\",[]],[\"name/5535\",[1215,84.871]],[\"comment/5535\",[]],[\"name/5536\",[1216,84.871]],[\"comment/5536\",[]],[\"name/5537\",[10,58.239]],[\"comment/5537\",[]],[\"name/5538\",[25,44.668]],[\"comment/5538\",[]],[\"name/5539\",[44,47.097]],[\"comment/5539\",[]],[\"name/5540\",[45,47.097]],[\"comment/5540\",[]],[\"name/5541\",[46,47.097]],[\"comment/5541\",[]],[\"name/5542\",[47,47.097]],[\"comment/5542\",[]],[\"name/5543\",[48,47.097]],[\"comment/5543\",[]],[\"name/5544\",[49,47.097]],[\"comment/5544\",[]],[\"name/5545\",[50,47.097]],[\"comment/5545\",[]],[\"name/5546\",[51,47.097]],[\"comment/5546\",[]],[\"name/5547\",[52,47.097]],[\"comment/5547\",[]],[\"name/5548\",[53,47.097]],[\"comment/5548\",[]],[\"name/5549\",[54,47.097]],[\"comment/5549\",[]],[\"name/5550\",[55,47.097]],[\"comment/5550\",[]],[\"name/5551\",[56,47.097]],[\"comment/5551\",[]],[\"name/5552\",[57,47.097]],[\"comment/5552\",[]],[\"name/5553\",[58,47.097]],[\"comment/5553\",[]],[\"name/5554\",[59,47.097]],[\"comment/5554\",[]],[\"name/5555\",[60,47.097]],[\"comment/5555\",[]],[\"name/5556\",[61,47.097]],[\"comment/5556\",[]],[\"name/5557\",[62,47.097]],[\"comment/5557\",[]],[\"name/5558\",[63,46.796]],[\"comment/5558\",[]],[\"name/5559\",[65,47.097]],[\"comment/5559\",[]],[\"name/5560\",[66,43.221]],[\"comment/5560\",[]],[\"name/5561\",[67,46.649]],[\"comment/5561\",[]],[\"name/5562\",[68,46.649]],[\"comment/5562\",[]],[\"name/5563\",[69,47.097]],[\"comment/5563\",[]],[\"name/5564\",[70,46.945]],[\"comment/5564\",[]],[\"name/5565\",[71,46.945]],[\"comment/5565\",[]],[\"name/5566\",[72,47.097]],[\"comment/5566\",[]],[\"name/5567\",[73,47.097]],[\"comment/5567\",[]],[\"name/5568\",[74,47.097]],[\"comment/5568\",[]],[\"name/5569\",[75,46.945]],[\"comment/5569\",[]],[\"name/5570\",[76,46.796]],[\"comment/5570\",[]],[\"name/5571\",[77,46.796]],[\"comment/5571\",[]],[\"name/5572\",[1217,84.871]],[\"comment/5572\",[]],[\"name/5573\",[1218,84.871]],[\"comment/5573\",[]],[\"name/5574\",[1219,84.871]],[\"comment/5574\",[]],[\"name/5575\",[1220,84.871]],[\"comment/5575\",[]],[\"name/5576\",[1221,79.762]],[\"comment/5576\",[]],[\"name/5577\",[685,64.498]],[\"comment/5577\",[]],[\"name/5578\",[751,76.396]],[\"comment/5578\",[]],[\"name/5579\",[752,71.876]],[\"comment/5579\",[]],[\"name/5580\",[753,71.876]],[\"comment/5580\",[]],[\"name/5581\",[123,58.716]],[\"comment/5581\",[]],[\"name/5582\",[119,57.785]],[\"comment/5582\",[]],[\"name/5583\",[754,76.396]],[\"comment/5583\",[]],[\"name/5584\",[370,66.409]],[\"comment/5584\",[]],[\"name/5585\",[111,57.35]],[\"comment/5585\",[]],[\"name/5586\",[416,63.664]],[\"comment/5586\",[]],[\"name/5587\",[0,59.743]],[\"comment/5587\",[]],[\"name/5588\",[415,64.498]],[\"comment/5588\",[]],[\"name/5589\",[17,57.785]],[\"comment/5589\",[]],[\"name/5590\",[755,70.205]],[\"comment/5590\",[]],[\"name/5591\",[756,70.205]],[\"comment/5591\",[]],[\"name/5592\",[499,73.883]],[\"comment/5592\",[]],[\"name/5593\",[9,46.22]],[\"comment/5593\",[]],[\"name/5594\",[104,60.298]],[\"comment/5594\",[]],[\"name/5595\",[105,59.743]],[\"comment/5595\",[]],[\"name/5596\",[15,46.945]],[\"comment/5596\",[]],[\"name/5597\",[16,44.087]],[\"comment/5597\",[]],[\"name/5598\",[795,79.762]],[\"comment/5598\",[]],[\"name/5599\",[796,79.762]],[\"comment/5599\",[]],[\"name/5600\",[172,57.35]],[\"comment/5600\",[]],[\"name/5601\",[797,79.762]],[\"comment/5601\",[]],[\"name/5602\",[150,60.298]],[\"comment/5602\",[]],[\"name/5603\",[697,70.205]],[\"comment/5603\",[]],[\"name/5604\",[798,79.762]],[\"comment/5604\",[]],[\"name/5605\",[130,54.107]],[\"comment/5605\",[]],[\"name/5606\",[799,79.762]],[\"comment/5606\",[]],[\"name/5607\",[158,60.298]],[\"comment/5607\",[]],[\"name/5608\",[1,44.315]],[\"comment/5608\",[]],[\"name/5609\",[159,56.933]],[\"comment/5609\",[]],[\"name/5610\",[160,56.933]],[\"comment/5610\",[]],[\"name/5611\",[137,60.298]],[\"comment/5611\",[]],[\"name/5612\",[109,56.533]],[\"comment/5612\",[]],[\"name/5613\",[695,70.205]],[\"comment/5613\",[]],[\"name/5614\",[800,79.762]],[\"comment/5614\",[]],[\"name/5615\",[167,60.298]],[\"comment/5615\",[]],[\"name/5616\",[1,44.315]],[\"comment/5616\",[]],[\"name/5617\",[699,68.773]],[\"comment/5617\",[]],[\"name/5618\",[700,68.773]],[\"comment/5618\",[]],[\"name/5619\",[790,73.883]],[\"comment/5619\",[]],[\"name/5620\",[749,70.205]],[\"comment/5620\",[]],[\"name/5621\",[801,79.762]],[\"comment/5621\",[]],[\"name/5622\",[802,79.762]],[\"comment/5622\",[]],[\"name/5623\",[25,44.668]],[\"comment/5623\",[]],[\"name/5624\",[685,64.498]],[\"comment/5624\",[]],[\"name/5625\",[443,63.664]],[\"comment/5625\",[]],[\"name/5626\",[686,70.205]],[\"comment/5626\",[]],[\"name/5627\",[687,70.205]],[\"comment/5627\",[]],[\"name/5628\",[688,70.205]],[\"comment/5628\",[]],[\"name/5629\",[689,70.205]],[\"comment/5629\",[]],[\"name/5630\",[690,70.205]],[\"comment/5630\",[]],[\"name/5631\",[691,70.205]],[\"comment/5631\",[]],[\"name/5632\",[692,70.205]],[\"comment/5632\",[]],[\"name/5633\",[218,68.773]],[\"comment/5633\",[]],[\"name/5634\",[693,70.205]],[\"comment/5634\",[]],[\"name/5635\",[166,59.743]],[\"comment/5635\",[]],[\"name/5636\",[694,70.205]],[\"comment/5636\",[]],[\"name/5637\",[696,70.205]],[\"comment/5637\",[]],[\"name/5638\",[698,70.205]],[\"comment/5638\",[]],[\"name/5639\",[143,59.216]],[\"comment/5639\",[]],[\"name/5640\",[701,67.521]],[\"comment/5640\",[]],[\"name/5641\",[702,70.205]],[\"comment/5641\",[]],[\"name/5642\",[188,56.933]],[\"comment/5642\",[]],[\"name/5643\",[703,70.205]],[\"comment/5643\",[]],[\"name/5644\",[110,59.743]],[\"comment/5644\",[]],[\"name/5645\",[111,57.35]],[\"comment/5645\",[]],[\"name/5646\",[112,59.743]],[\"comment/5646\",[]],[\"name/5647\",[18,52.946]],[\"comment/5647\",[]],[\"name/5648\",[1,44.315]],[\"comment/5648\",[]],[\"name/5649\",[113,60.298]],[\"comment/5649\",[]],[\"name/5650\",[25,44.668]],[\"comment/5650\",[]],[\"name/5651\",[114,60.298]],[\"comment/5651\",[]],[\"name/5652\",[115,60.298]],[\"comment/5652\",[]],[\"name/5653\",[116,57.35]],[\"comment/5653\",[]],[\"name/5654\",[117,60.298]],[\"comment/5654\",[]],[\"name/5655\",[118,60.298]],[\"comment/5655\",[]],[\"name/5656\",[119,57.785]],[\"comment/5656\",[]],[\"name/5657\",[120,60.298]],[\"comment/5657\",[]],[\"name/5658\",[121,60.298]],[\"comment/5658\",[]],[\"name/5659\",[122,56.933]],[\"comment/5659\",[]],[\"name/5660\",[66,43.221]],[\"comment/5660\",[]],[\"name/5661\",[123,58.716]],[\"comment/5661\",[]],[\"name/5662\",[124,60.298]],[\"comment/5662\",[]],[\"name/5663\",[125,60.298]],[\"comment/5663\",[]],[\"name/5664\",[126,59.743]],[\"comment/5664\",[]],[\"name/5665\",[127,60.298]],[\"comment/5665\",[]],[\"name/5666\",[128,54.419]],[\"comment/5666\",[]],[\"name/5667\",[129,54.419]],[\"comment/5667\",[]],[\"name/5668\",[131,60.298]],[\"comment/5668\",[]],[\"name/5669\",[132,60.298]],[\"comment/5669\",[]],[\"name/5670\",[133,60.298]],[\"comment/5670\",[]],[\"name/5671\",[134,60.298]],[\"comment/5671\",[]],[\"name/5672\",[135,59.743]],[\"comment/5672\",[]],[\"name/5673\",[136,60.298]],[\"comment/5673\",[]],[\"name/5674\",[138,59.743]],[\"comment/5674\",[]],[\"name/5675\",[139,60.298]],[\"comment/5675\",[]],[\"name/5676\",[140,60.298]],[\"comment/5676\",[]],[\"name/5677\",[141,60.298]],[\"comment/5677\",[]],[\"name/5678\",[142,60.298]],[\"comment/5678\",[]],[\"name/5679\",[144,59.743]],[\"comment/5679\",[]],[\"name/5680\",[145,59.743]],[\"comment/5680\",[]],[\"name/5681\",[146,59.743]],[\"comment/5681\",[]],[\"name/5682\",[147,59.743]],[\"comment/5682\",[]],[\"name/5683\",[148,60.298]],[\"comment/5683\",[]],[\"name/5684\",[149,60.298]],[\"comment/5684\",[]],[\"name/5685\",[151,60.298]],[\"comment/5685\",[]],[\"name/5686\",[152,60.298]],[\"comment/5686\",[]],[\"name/5687\",[153,60.298]],[\"comment/5687\",[]],[\"name/5688\",[154,60.298]],[\"comment/5688\",[]],[\"name/5689\",[155,60.298]],[\"comment/5689\",[]],[\"name/5690\",[156,58.239]],[\"comment/5690\",[]],[\"name/5691\",[157,60.298]],[\"comment/5691\",[]],[\"name/5692\",[161,60.298]],[\"comment/5692\",[]],[\"name/5693\",[162,60.298]],[\"comment/5693\",[]],[\"name/5694\",[163,60.298]],[\"comment/5694\",[]],[\"name/5695\",[164,56.933]],[\"comment/5695\",[]],[\"name/5696\",[165,59.743]],[\"comment/5696\",[]],[\"name/5697\",[168,60.298]],[\"comment/5697\",[]],[\"name/5698\",[169,60.298]],[\"comment/5698\",[]],[\"name/5699\",[170,60.298]],[\"comment/5699\",[]],[\"name/5700\",[171,60.298]],[\"comment/5700\",[]],[\"name/5701\",[173,59.743]],[\"comment/5701\",[]],[\"name/5702\",[174,59.743]],[\"comment/5702\",[]],[\"name/5703\",[26,50.524]],[\"comment/5703\",[]],[\"name/5704\",[22,49.502]],[\"comment/5704\",[]],[\"name/5705\",[41,52.675]],[\"comment/5705\",[]],[\"name/5706\",[42,52.675]],[\"comment/5706\",[]],[\"name/5707\",[175,53.804]],[\"comment/5707\",[]],[\"name/5708\",[176,59.216]],[\"comment/5708\",[]],[\"name/5709\",[177,59.743]],[\"comment/5709\",[]],[\"name/5710\",[178,59.743]],[\"comment/5710\",[]],[\"name/5711\",[179,59.743]],[\"comment/5711\",[]],[\"name/5712\",[180,59.743]],[\"comment/5712\",[]],[\"name/5713\",[181,59.743]],[\"comment/5713\",[]],[\"name/5714\",[182,59.743]],[\"comment/5714\",[]],[\"name/5715\",[183,59.743]],[\"comment/5715\",[]],[\"name/5716\",[184,59.743]],[\"comment/5716\",[]],[\"name/5717\",[108,59.743]],[\"comment/5717\",[]],[\"name/5718\",[185,58.239]],[\"comment/5718\",[]],[\"name/5719\",[186,59.743]],[\"comment/5719\",[]],[\"name/5720\",[187,59.743]],[\"comment/5720\",[]],[\"name/5721\",[189,59.216]],[\"comment/5721\",[]],[\"name/5722\",[190,59.743]],[\"comment/5722\",[]],[\"name/5723\",[191,59.743]],[\"comment/5723\",[]],[\"name/5724\",[192,59.743]],[\"comment/5724\",[]],[\"name/5725\",[193,59.743]],[\"comment/5725\",[]],[\"name/5726\",[194,59.743]],[\"comment/5726\",[]],[\"name/5727\",[34,53.509]],[\"comment/5727\",[]],[\"name/5728\",[32,53.509]],[\"comment/5728\",[]],[\"name/5729\",[33,53.509]],[\"comment/5729\",[]],[\"name/5730\",[44,47.097]],[\"comment/5730\",[]],[\"name/5731\",[45,47.097]],[\"comment/5731\",[]],[\"name/5732\",[46,47.097]],[\"comment/5732\",[]],[\"name/5733\",[47,47.097]],[\"comment/5733\",[]],[\"name/5734\",[48,47.097]],[\"comment/5734\",[]],[\"name/5735\",[49,47.097]],[\"comment/5735\",[]],[\"name/5736\",[50,47.097]],[\"comment/5736\",[]],[\"name/5737\",[51,47.097]],[\"comment/5737\",[]],[\"name/5738\",[52,47.097]],[\"comment/5738\",[]],[\"name/5739\",[53,47.097]],[\"comment/5739\",[]],[\"name/5740\",[54,47.097]],[\"comment/5740\",[]],[\"name/5741\",[55,47.097]],[\"comment/5741\",[]],[\"name/5742\",[56,47.097]],[\"comment/5742\",[]],[\"name/5743\",[57,47.097]],[\"comment/5743\",[]],[\"name/5744\",[58,47.097]],[\"comment/5744\",[]],[\"name/5745\",[59,47.097]],[\"comment/5745\",[]],[\"name/5746\",[60,47.097]],[\"comment/5746\",[]],[\"name/5747\",[61,47.097]],[\"comment/5747\",[]],[\"name/5748\",[62,47.097]],[\"comment/5748\",[]],[\"name/5749\",[63,46.796]],[\"comment/5749\",[]],[\"name/5750\",[64,46.796]],[\"comment/5750\",[]],[\"name/5751\",[65,47.097]],[\"comment/5751\",[]],[\"name/5752\",[66,43.221]],[\"comment/5752\",[]],[\"name/5753\",[67,46.649]],[\"comment/5753\",[]],[\"name/5754\",[68,46.649]],[\"comment/5754\",[]],[\"name/5755\",[69,47.097]],[\"comment/5755\",[]],[\"name/5756\",[70,46.945]],[\"comment/5756\",[]],[\"name/5757\",[71,46.945]],[\"comment/5757\",[]],[\"name/5758\",[72,47.097]],[\"comment/5758\",[]],[\"name/5759\",[73,47.097]],[\"comment/5759\",[]],[\"name/5760\",[74,47.097]],[\"comment/5760\",[]],[\"name/5761\",[75,46.945]],[\"comment/5761\",[]],[\"name/5762\",[76,46.796]],[\"comment/5762\",[]],[\"name/5763\",[77,46.796]],[\"comment/5763\",[]],[\"name/5764\",[540,76.396]],[\"comment/5764\",[]],[\"name/5765\",[9,46.22]],[\"comment/5765\",[]],[\"name/5766\",[15,46.945]],[\"comment/5766\",[]],[\"name/5767\",[1222,84.871]],[\"comment/5767\",[]],[\"name/5768\",[1223,84.871]],[\"comment/5768\",[]],[\"name/5769\",[1224,84.871]],[\"comment/5769\",[]],[\"name/5770\",[1225,84.871]],[\"comment/5770\",[]],[\"name/5771\",[1226,79.762]],[\"comment/5771\",[]],[\"name/5772\",[1227,79.762]],[\"comment/5772\",[]],[\"name/5773\",[16,44.087]],[\"comment/5773\",[]],[\"name/5774\",[1141,76.396]],[\"comment/5774\",[]],[\"name/5775\",[18,52.946]],[\"comment/5775\",[]],[\"name/5776\",[1,44.315]],[\"comment/5776\",[]],[\"name/5777\",[1134,76.396]],[\"comment/5777\",[]],[\"name/5778\",[1135,76.396]],[\"comment/5778\",[]],[\"name/5779\",[1136,76.396]],[\"comment/5779\",[]],[\"name/5780\",[1137,76.396]],[\"comment/5780\",[]],[\"name/5781\",[1138,76.396]],[\"comment/5781\",[]],[\"name/5782\",[1139,76.396]],[\"comment/5782\",[]],[\"name/5783\",[116,57.35]],[\"comment/5783\",[]],[\"name/5784\",[1140,73.883]],[\"comment/5784\",[]],[\"name/5785\",[397,70.205]],[\"comment/5785\",[]],[\"name/5786\",[398,73.883]],[\"comment/5786\",[]],[\"name/5787\",[1142,76.396]],[\"comment/5787\",[]],[\"name/5788\",[217,71.876]],[\"comment/5788\",[]],[\"name/5789\",[25,44.668]],[\"comment/5789\",[]],[\"name/5790\",[44,47.097]],[\"comment/5790\",[]],[\"name/5791\",[45,47.097]],[\"comment/5791\",[]],[\"name/5792\",[46,47.097]],[\"comment/5792\",[]],[\"name/5793\",[47,47.097]],[\"comment/5793\",[]],[\"name/5794\",[48,47.097]],[\"comment/5794\",[]],[\"name/5795\",[49,47.097]],[\"comment/5795\",[]],[\"name/5796\",[50,47.097]],[\"comment/5796\",[]],[\"name/5797\",[51,47.097]],[\"comment/5797\",[]],[\"name/5798\",[52,47.097]],[\"comment/5798\",[]],[\"name/5799\",[53,47.097]],[\"comment/5799\",[]],[\"name/5800\",[54,47.097]],[\"comment/5800\",[]],[\"name/5801\",[55,47.097]],[\"comment/5801\",[]],[\"name/5802\",[56,47.097]],[\"comment/5802\",[]],[\"name/5803\",[57,47.097]],[\"comment/5803\",[]],[\"name/5804\",[58,47.097]],[\"comment/5804\",[]],[\"name/5805\",[59,47.097]],[\"comment/5805\",[]],[\"name/5806\",[60,47.097]],[\"comment/5806\",[]],[\"name/5807\",[61,47.097]],[\"comment/5807\",[]],[\"name/5808\",[62,47.097]],[\"comment/5808\",[]],[\"name/5809\",[63,46.796]],[\"comment/5809\",[]],[\"name/5810\",[64,46.796]],[\"comment/5810\",[]],[\"name/5811\",[65,47.097]],[\"comment/5811\",[]],[\"name/5812\",[66,43.221]],[\"comment/5812\",[]],[\"name/5813\",[67,46.649]],[\"comment/5813\",[]],[\"name/5814\",[68,46.649]],[\"comment/5814\",[]],[\"name/5815\",[69,47.097]],[\"comment/5815\",[]],[\"name/5816\",[70,46.945]],[\"comment/5816\",[]],[\"name/5817\",[71,46.945]],[\"comment/5817\",[]],[\"name/5818\",[72,47.097]],[\"comment/5818\",[]],[\"name/5819\",[73,47.097]],[\"comment/5819\",[]],[\"name/5820\",[74,47.097]],[\"comment/5820\",[]],[\"name/5821\",[75,46.945]],[\"comment/5821\",[]],[\"name/5822\",[76,46.796]],[\"comment/5822\",[]],[\"name/5823\",[77,46.796]],[\"comment/5823\",[]],[\"name/5824\",[491,73.883]],[\"comment/5824\",[]],[\"name/5825\",[9,46.22]],[\"comment/5825\",[]],[\"name/5826\",[15,46.945]],[\"comment/5826\",[]],[\"name/5827\",[998,79.762]],[\"comment/5827\",[]],[\"name/5828\",[999,76.396]],[\"comment/5828\",[]],[\"name/5829\",[1000,79.762]],[\"comment/5829\",[]],[\"name/5830\",[16,44.087]],[\"comment/5830\",[]],[\"name/5831\",[1028,79.762]],[\"comment/5831\",[]],[\"name/5832\",[1228,84.871]],[\"comment/5832\",[]],[\"name/5833\",[440,70.205]],[\"comment/5833\",[]],[\"name/5834\",[1001,79.762]],[\"comment/5834\",[]],[\"name/5835\",[1002,79.762]],[\"comment/5835\",[]],[\"name/5836\",[483,73.883]],[\"comment/5836\",[]],[\"name/5837\",[1003,79.762]],[\"comment/5837\",[]],[\"name/5838\",[1004,79.762]],[\"comment/5838\",[]],[\"name/5839\",[1005,79.762]],[\"comment/5839\",[]],[\"name/5840\",[1006,79.762]],[\"comment/5840\",[]],[\"name/5841\",[1007,79.762]],[\"comment/5841\",[]],[\"name/5842\",[1008,79.762]],[\"comment/5842\",[]],[\"name/5843\",[175,53.804]],[\"comment/5843\",[]],[\"name/5844\",[1009,79.762]],[\"comment/5844\",[]],[\"name/5845\",[1010,79.762]],[\"comment/5845\",[]],[\"name/5846\",[251,71.876]],[\"comment/5846\",[]],[\"name/5847\",[247,71.876]],[\"comment/5847\",[]],[\"name/5848\",[1011,79.762]],[\"comment/5848\",[]],[\"name/5849\",[1012,79.762]],[\"comment/5849\",[]],[\"name/5850\",[250,60.887]],[\"comment/5850\",[]],[\"name/5851\",[26,50.524]],[\"comment/5851\",[]],[\"name/5852\",[22,49.502]],[\"comment/5852\",[]],[\"name/5853\",[48,47.097]],[\"comment/5853\",[]],[\"name/5854\",[1013,79.762]],[\"comment/5854\",[]],[\"name/5855\",[1014,79.762]],[\"comment/5855\",[]],[\"name/5856\",[1015,79.762]],[\"comment/5856\",[]],[\"name/5857\",[1016,79.762]],[\"comment/5857\",[]],[\"name/5858\",[1017,79.762]],[\"comment/5858\",[]],[\"name/5859\",[1018,79.762]],[\"comment/5859\",[]],[\"name/5860\",[1019,76.396]],[\"comment/5860\",[]],[\"name/5861\",[1020,71.876]],[\"comment/5861\",[]],[\"name/5862\",[1021,76.396]],[\"comment/5862\",[]],[\"name/5863\",[1022,79.762]],[\"comment/5863\",[]],[\"name/5864\",[62,47.097]],[\"comment/5864\",[]],[\"name/5865\",[1023,79.762]],[\"comment/5865\",[]],[\"name/5866\",[1024,79.762]],[\"comment/5866\",[]],[\"name/5867\",[1025,79.762]],[\"comment/5867\",[]],[\"name/5868\",[1026,79.762]],[\"comment/5868\",[]],[\"name/5869\",[143,59.216]],[\"comment/5869\",[]],[\"name/5870\",[701,67.521]],[\"comment/5870\",[]],[\"name/5871\",[1027,79.762]],[\"comment/5871\",[]],[\"name/5872\",[156,58.239]],[\"comment/5872\",[]],[\"name/5873\",[1029,79.762]],[\"comment/5873\",[]],[\"name/5874\",[1030,79.762]],[\"comment/5874\",[]],[\"name/5875\",[1031,79.762]],[\"comment/5875\",[]],[\"name/5876\",[1032,79.762]],[\"comment/5876\",[]],[\"name/5877\",[379,76.396]],[\"comment/5877\",[]],[\"name/5878\",[1033,79.762]],[\"comment/5878\",[]],[\"name/5879\",[1034,79.762]],[\"comment/5879\",[]],[\"name/5880\",[1035,79.762]],[\"comment/5880\",[]],[\"name/5881\",[1036,79.762]],[\"comment/5881\",[]],[\"name/5882\",[1037,79.762]],[\"comment/5882\",[]],[\"name/5883\",[1038,79.762]],[\"comment/5883\",[]],[\"name/5884\",[1039,79.762]],[\"comment/5884\",[]],[\"name/5885\",[1040,79.762]],[\"comment/5885\",[]],[\"name/5886\",[1041,79.762]],[\"comment/5886\",[]],[\"name/5887\",[1042,79.762]],[\"comment/5887\",[]],[\"name/5888\",[1043,79.762]],[\"comment/5888\",[]],[\"name/5889\",[1044,79.762]],[\"comment/5889\",[]],[\"name/5890\",[185,58.239]],[\"comment/5890\",[]],[\"name/5891\",[1045,79.762]],[\"comment/5891\",[]],[\"name/5892\",[10,58.239]],[\"comment/5892\",[]],[\"name/5893\",[25,44.668]],[\"comment/5893\",[]],[\"name/5894\",[1046,79.762]],[\"comment/5894\",[]],[\"name/5895\",[1047,79.762]],[\"comment/5895\",[]],[\"name/5896\",[1048,79.762]],[\"comment/5896\",[]],[\"name/5897\",[1049,79.762]],[\"comment/5897\",[]],[\"name/5898\",[44,47.097]],[\"comment/5898\",[]],[\"name/5899\",[45,47.097]],[\"comment/5899\",[]],[\"name/5900\",[46,47.097]],[\"comment/5900\",[]],[\"name/5901\",[47,47.097]],[\"comment/5901\",[]],[\"name/5902\",[49,47.097]],[\"comment/5902\",[]],[\"name/5903\",[50,47.097]],[\"comment/5903\",[]],[\"name/5904\",[51,47.097]],[\"comment/5904\",[]],[\"name/5905\",[52,47.097]],[\"comment/5905\",[]],[\"name/5906\",[53,47.097]],[\"comment/5906\",[]],[\"name/5907\",[54,47.097]],[\"comment/5907\",[]],[\"name/5908\",[55,47.097]],[\"comment/5908\",[]],[\"name/5909\",[56,47.097]],[\"comment/5909\",[]],[\"name/5910\",[57,47.097]],[\"comment/5910\",[]],[\"name/5911\",[58,47.097]],[\"comment/5911\",[]],[\"name/5912\",[59,47.097]],[\"comment/5912\",[]],[\"name/5913\",[60,47.097]],[\"comment/5913\",[]],[\"name/5914\",[61,47.097]],[\"comment/5914\",[]],[\"name/5915\",[63,46.796]],[\"comment/5915\",[]],[\"name/5916\",[64,46.796]],[\"comment/5916\",[]],[\"name/5917\",[65,47.097]],[\"comment/5917\",[]],[\"name/5918\",[66,43.221]],[\"comment/5918\",[]],[\"name/5919\",[67,46.649]],[\"comment/5919\",[]],[\"name/5920\",[68,46.649]],[\"comment/5920\",[]],[\"name/5921\",[69,47.097]],[\"comment/5921\",[]],[\"name/5922\",[70,46.945]],[\"comment/5922\",[]],[\"name/5923\",[71,46.945]],[\"comment/5923\",[]],[\"name/5924\",[72,47.097]],[\"comment/5924\",[]],[\"name/5925\",[73,47.097]],[\"comment/5925\",[]],[\"name/5926\",[74,47.097]],[\"comment/5926\",[]],[\"name/5927\",[75,46.945]],[\"comment/5927\",[]],[\"name/5928\",[76,46.796]],[\"comment/5928\",[]],[\"name/5929\",[77,46.796]],[\"comment/5929\",[]],[\"name/5930\",[541,76.396]],[\"comment/5930\",[]],[\"name/5931\",[9,46.22]],[\"comment/5931\",[]],[\"name/5932\",[1226,79.762]],[\"comment/5932\",[]],[\"name/5933\",[1227,79.762]],[\"comment/5933\",[]],[\"name/5934\",[15,46.945]],[\"comment/5934\",[]],[\"name/5935\",[16,44.087]],[\"comment/5935\",[]],[\"name/5936\",[18,52.946]],[\"comment/5936\",[]],[\"name/5937\",[1,44.315]],[\"comment/5937\",[]],[\"name/5938\",[1134,76.396]],[\"comment/5938\",[]],[\"name/5939\",[1135,76.396]],[\"comment/5939\",[]],[\"name/5940\",[1136,76.396]],[\"comment/5940\",[]],[\"name/5941\",[1137,76.396]],[\"comment/5941\",[]],[\"name/5942\",[1138,76.396]],[\"comment/5942\",[]],[\"name/5943\",[1139,76.396]],[\"comment/5943\",[]],[\"name/5944\",[116,57.35]],[\"comment/5944\",[]],[\"name/5945\",[1140,73.883]],[\"comment/5945\",[]],[\"name/5946\",[397,70.205]],[\"comment/5946\",[]],[\"name/5947\",[398,73.883]],[\"comment/5947\",[]],[\"name/5948\",[1141,76.396]],[\"comment/5948\",[]],[\"name/5949\",[1142,76.396]],[\"comment/5949\",[]],[\"name/5950\",[217,71.876]],[\"comment/5950\",[]],[\"name/5951\",[25,44.668]],[\"comment/5951\",[]],[\"name/5952\",[44,47.097]],[\"comment/5952\",[]],[\"name/5953\",[45,47.097]],[\"comment/5953\",[]],[\"name/5954\",[46,47.097]],[\"comment/5954\",[]],[\"name/5955\",[47,47.097]],[\"comment/5955\",[]],[\"name/5956\",[48,47.097]],[\"comment/5956\",[]],[\"name/5957\",[49,47.097]],[\"comment/5957\",[]],[\"name/5958\",[50,47.097]],[\"comment/5958\",[]],[\"name/5959\",[51,47.097]],[\"comment/5959\",[]],[\"name/5960\",[52,47.097]],[\"comment/5960\",[]],[\"name/5961\",[53,47.097]],[\"comment/5961\",[]],[\"name/5962\",[54,47.097]],[\"comment/5962\",[]],[\"name/5963\",[55,47.097]],[\"comment/5963\",[]],[\"name/5964\",[56,47.097]],[\"comment/5964\",[]],[\"name/5965\",[57,47.097]],[\"comment/5965\",[]],[\"name/5966\",[58,47.097]],[\"comment/5966\",[]],[\"name/5967\",[59,47.097]],[\"comment/5967\",[]],[\"name/5968\",[60,47.097]],[\"comment/5968\",[]],[\"name/5969\",[61,47.097]],[\"comment/5969\",[]],[\"name/5970\",[62,47.097]],[\"comment/5970\",[]],[\"name/5971\",[63,46.796]],[\"comment/5971\",[]],[\"name/5972\",[64,46.796]],[\"comment/5972\",[]],[\"name/5973\",[65,47.097]],[\"comment/5973\",[]],[\"name/5974\",[66,43.221]],[\"comment/5974\",[]],[\"name/5975\",[67,46.649]],[\"comment/5975\",[]],[\"name/5976\",[68,46.649]],[\"comment/5976\",[]],[\"name/5977\",[69,47.097]],[\"comment/5977\",[]],[\"name/5978\",[70,46.945]],[\"comment/5978\",[]],[\"name/5979\",[71,46.945]],[\"comment/5979\",[]],[\"name/5980\",[72,47.097]],[\"comment/5980\",[]],[\"name/5981\",[73,47.097]],[\"comment/5981\",[]],[\"name/5982\",[74,47.097]],[\"comment/5982\",[]],[\"name/5983\",[75,46.945]],[\"comment/5983\",[]],[\"name/5984\",[76,46.796]],[\"comment/5984\",[]],[\"name/5985\",[77,46.796]],[\"comment/5985\",[]],[\"name/5986\",[1229,84.871]],[\"comment/5986\",[]],[\"name/5987\",[1230,79.762]],[\"comment/5987\",[]],[\"name/5988\",[1231,79.762]],[\"comment/5988\",[]],[\"name/5989\",[230,68.773]],[\"comment/5989\",[]],[\"name/5990\",[331,76.396]],[\"comment/5990\",[]],[\"name/5991\",[13,54.107]],[\"comment/5991\",[]],[\"name/5992\",[554,79.762]],[\"comment/5992\",[]],[\"name/5993\",[84,71.876]],[\"comment/5993\",[]],[\"name/5994\",[85,71.876]],[\"comment/5994\",[]],[\"name/5995\",[514,73.883]],[\"comment/5995\",[]],[\"name/5996\",[8,57.35]],[\"comment/5996\",[]],[\"name/5997\",[9,46.22]],[\"comment/5997\",[]],[\"name/5998\",[15,46.945]],[\"comment/5998\",[]],[\"name/5999\",[13,54.107]],[\"comment/5999\",[]],[\"name/6000\",[14,59.743]],[\"comment/6000\",[]],[\"name/6001\",[1221,79.762]],[\"comment/6001\",[]],[\"name/6002\",[1232,84.871]],[\"comment/6002\",[]],[\"name/6003\",[16,44.087]],[\"comment/6003\",[]],[\"name/6004\",[18,52.946]],[\"comment/6004\",[]],[\"name/6005\",[1,44.315]],[\"comment/6005\",[]],[\"name/6006\",[1233,84.871]],[\"comment/6006\",[]],[\"name/6007\",[951,76.396]],[\"comment/6007\",[]],[\"name/6008\",[235,76.396]],[\"comment/6008\",[]],[\"name/6009\",[1234,84.871]],[\"comment/6009\",[]],[\"name/6010\",[1235,84.871]],[\"comment/6010\",[]],[\"name/6011\",[1236,84.871]],[\"comment/6011\",[]],[\"name/6012\",[952,79.762]],[\"comment/6012\",[]],[\"name/6013\",[13,54.107]],[\"comment/6013\",[]],[\"name/6014\",[1230,79.762]],[\"comment/6014\",[]],[\"name/6015\",[1231,79.762]],[\"comment/6015\",[]],[\"name/6016\",[49,47.097]],[\"comment/6016\",[]],[\"name/6017\",[1173,79.762]],[\"comment/6017\",[]],[\"name/6018\",[385,67.521]],[\"comment/6018\",[]],[\"name/6019\",[25,44.668]],[\"comment/6019\",[]],[\"name/6020\",[44,47.097]],[\"comment/6020\",[]],[\"name/6021\",[45,47.097]],[\"comment/6021\",[]],[\"name/6022\",[46,47.097]],[\"comment/6022\",[]],[\"name/6023\",[47,47.097]],[\"comment/6023\",[]],[\"name/6024\",[48,47.097]],[\"comment/6024\",[]],[\"name/6025\",[50,47.097]],[\"comment/6025\",[]],[\"name/6026\",[51,47.097]],[\"comment/6026\",[]],[\"name/6027\",[52,47.097]],[\"comment/6027\",[]],[\"name/6028\",[53,47.097]],[\"comment/6028\",[]],[\"name/6029\",[54,47.097]],[\"comment/6029\",[]],[\"name/6030\",[55,47.097]],[\"comment/6030\",[]],[\"name/6031\",[56,47.097]],[\"comment/6031\",[]],[\"name/6032\",[57,47.097]],[\"comment/6032\",[]],[\"name/6033\",[58,47.097]],[\"comment/6033\",[]],[\"name/6034\",[59,47.097]],[\"comment/6034\",[]],[\"name/6035\",[60,47.097]],[\"comment/6035\",[]],[\"name/6036\",[61,47.097]],[\"comment/6036\",[]],[\"name/6037\",[62,47.097]],[\"comment/6037\",[]],[\"name/6038\",[63,46.796]],[\"comment/6038\",[]],[\"name/6039\",[64,46.796]],[\"comment/6039\",[]],[\"name/6040\",[65,47.097]],[\"comment/6040\",[]],[\"name/6041\",[66,43.221]],[\"comment/6041\",[]],[\"name/6042\",[67,46.649]],[\"comment/6042\",[]],[\"name/6043\",[68,46.649]],[\"comment/6043\",[]],[\"name/6044\",[69,47.097]],[\"comment/6044\",[]],[\"name/6045\",[70,46.945]],[\"comment/6045\",[]],[\"name/6046\",[71,46.945]],[\"comment/6046\",[]],[\"name/6047\",[72,47.097]],[\"comment/6047\",[]],[\"name/6048\",[73,47.097]],[\"comment/6048\",[]],[\"name/6049\",[74,47.097]],[\"comment/6049\",[]],[\"name/6050\",[75,46.945]],[\"comment/6050\",[]],[\"name/6051\",[76,46.796]],[\"comment/6051\",[]],[\"name/6052\",[77,46.796]],[\"comment/6052\",[]],[\"name/6053\",[503,73.883]],[\"comment/6053\",[]],[\"name/6054\",[8,57.35]],[\"comment/6054\",[]],[\"name/6055\",[9,46.22]],[\"comment/6055\",[]],[\"name/6056\",[324,66.409]],[\"comment/6056\",[]],[\"name/6057\",[104,60.298]],[\"comment/6057\",[]],[\"name/6058\",[105,59.743]],[\"comment/6058\",[]],[\"name/6059\",[15,46.945]],[\"comment/6059\",[]],[\"name/6060\",[16,44.087]],[\"comment/6060\",[]],[\"name/6061\",[385,67.521]],[\"comment/6061\",[]],[\"name/6062\",[109,56.533]],[\"comment/6062\",[]],[\"name/6063\",[25,44.668]],[\"comment/6063\",[]],[\"name/6064\",[110,59.743]],[\"comment/6064\",[]],[\"name/6065\",[111,57.35]],[\"comment/6065\",[]],[\"name/6066\",[112,59.743]],[\"comment/6066\",[]],[\"name/6067\",[18,52.946]],[\"comment/6067\",[]],[\"name/6068\",[1,44.315]],[\"comment/6068\",[]],[\"name/6069\",[113,60.298]],[\"comment/6069\",[]],[\"name/6070\",[25,44.668]],[\"comment/6070\",[]],[\"name/6071\",[114,60.298]],[\"comment/6071\",[]],[\"name/6072\",[115,60.298]],[\"comment/6072\",[]],[\"name/6073\",[116,57.35]],[\"comment/6073\",[]],[\"name/6074\",[117,60.298]],[\"comment/6074\",[]],[\"name/6075\",[118,60.298]],[\"comment/6075\",[]],[\"name/6076\",[119,57.785]],[\"comment/6076\",[]],[\"name/6077\",[120,60.298]],[\"comment/6077\",[]],[\"name/6078\",[121,60.298]],[\"comment/6078\",[]],[\"name/6079\",[122,56.933]],[\"comment/6079\",[]],[\"name/6080\",[66,43.221]],[\"comment/6080\",[]],[\"name/6081\",[123,58.716]],[\"comment/6081\",[]],[\"name/6082\",[124,60.298]],[\"comment/6082\",[]],[\"name/6083\",[125,60.298]],[\"comment/6083\",[]],[\"name/6084\",[126,59.743]],[\"comment/6084\",[]],[\"name/6085\",[127,60.298]],[\"comment/6085\",[]],[\"name/6086\",[128,54.419]],[\"comment/6086\",[]],[\"name/6087\",[129,54.419]],[\"comment/6087\",[]],[\"name/6088\",[130,54.107]],[\"comment/6088\",[]],[\"name/6089\",[131,60.298]],[\"comment/6089\",[]],[\"name/6090\",[132,60.298]],[\"comment/6090\",[]],[\"name/6091\",[133,60.298]],[\"comment/6091\",[]],[\"name/6092\",[134,60.298]],[\"comment/6092\",[]],[\"name/6093\",[135,59.743]],[\"comment/6093\",[]],[\"name/6094\",[136,60.298]],[\"comment/6094\",[]],[\"name/6095\",[137,60.298]],[\"comment/6095\",[]],[\"name/6096\",[138,59.743]],[\"comment/6096\",[]],[\"name/6097\",[139,60.298]],[\"comment/6097\",[]],[\"name/6098\",[140,60.298]],[\"comment/6098\",[]],[\"name/6099\",[141,60.298]],[\"comment/6099\",[]],[\"name/6100\",[142,60.298]],[\"comment/6100\",[]],[\"name/6101\",[143,59.216]],[\"comment/6101\",[]],[\"name/6102\",[144,59.743]],[\"comment/6102\",[]],[\"name/6103\",[145,59.743]],[\"comment/6103\",[]],[\"name/6104\",[146,59.743]],[\"comment/6104\",[]],[\"name/6105\",[147,59.743]],[\"comment/6105\",[]],[\"name/6106\",[148,60.298]],[\"comment/6106\",[]],[\"name/6107\",[149,60.298]],[\"comment/6107\",[]],[\"name/6108\",[150,60.298]],[\"comment/6108\",[]],[\"name/6109\",[151,60.298]],[\"comment/6109\",[]],[\"name/6110\",[152,60.298]],[\"comment/6110\",[]],[\"name/6111\",[153,60.298]],[\"comment/6111\",[]],[\"name/6112\",[154,60.298]],[\"comment/6112\",[]],[\"name/6113\",[155,60.298]],[\"comment/6113\",[]],[\"name/6114\",[156,58.239]],[\"comment/6114\",[]],[\"name/6115\",[157,60.298]],[\"comment/6115\",[]],[\"name/6116\",[158,60.298]],[\"comment/6116\",[]],[\"name/6117\",[1,44.315]],[\"comment/6117\",[]],[\"name/6118\",[159,56.933]],[\"comment/6118\",[]],[\"name/6119\",[160,56.933]],[\"comment/6119\",[]],[\"name/6120\",[161,60.298]],[\"comment/6120\",[]],[\"name/6121\",[162,60.298]],[\"comment/6121\",[]],[\"name/6122\",[163,60.298]],[\"comment/6122\",[]],[\"name/6123\",[164,56.933]],[\"comment/6123\",[]],[\"name/6124\",[165,59.743]],[\"comment/6124\",[]],[\"name/6125\",[166,59.743]],[\"comment/6125\",[]],[\"name/6126\",[167,60.298]],[\"comment/6126\",[]],[\"name/6127\",[168,60.298]],[\"comment/6127\",[]],[\"name/6128\",[169,60.298]],[\"comment/6128\",[]],[\"name/6129\",[170,60.298]],[\"comment/6129\",[]],[\"name/6130\",[171,60.298]],[\"comment/6130\",[]],[\"name/6131\",[172,57.35]],[\"comment/6131\",[]],[\"name/6132\",[173,59.743]],[\"comment/6132\",[]],[\"name/6133\",[174,59.743]],[\"comment/6133\",[]],[\"name/6134\",[26,50.524]],[\"comment/6134\",[]],[\"name/6135\",[22,49.502]],[\"comment/6135\",[]],[\"name/6136\",[41,52.675]],[\"comment/6136\",[]],[\"name/6137\",[42,52.675]],[\"comment/6137\",[]],[\"name/6138\",[175,53.804]],[\"comment/6138\",[]],[\"name/6139\",[176,59.216]],[\"comment/6139\",[]],[\"name/6140\",[177,59.743]],[\"comment/6140\",[]],[\"name/6141\",[178,59.743]],[\"comment/6141\",[]],[\"name/6142\",[179,59.743]],[\"comment/6142\",[]],[\"name/6143\",[180,59.743]],[\"comment/6143\",[]],[\"name/6144\",[181,59.743]],[\"comment/6144\",[]],[\"name/6145\",[182,59.743]],[\"comment/6145\",[]],[\"name/6146\",[183,59.743]],[\"comment/6146\",[]],[\"name/6147\",[184,59.743]],[\"comment/6147\",[]],[\"name/6148\",[108,59.743]],[\"comment/6148\",[]],[\"name/6149\",[185,58.239]],[\"comment/6149\",[]],[\"name/6150\",[186,59.743]],[\"comment/6150\",[]],[\"name/6151\",[187,59.743]],[\"comment/6151\",[]],[\"name/6152\",[188,56.933]],[\"comment/6152\",[]],[\"name/6153\",[189,59.216]],[\"comment/6153\",[]],[\"name/6154\",[190,59.743]],[\"comment/6154\",[]],[\"name/6155\",[191,59.743]],[\"comment/6155\",[]],[\"name/6156\",[192,59.743]],[\"comment/6156\",[]],[\"name/6157\",[193,59.743]],[\"comment/6157\",[]],[\"name/6158\",[194,59.743]],[\"comment/6158\",[]],[\"name/6159\",[34,53.509]],[\"comment/6159\",[]],[\"name/6160\",[32,53.509]],[\"comment/6160\",[]],[\"name/6161\",[33,53.509]],[\"comment/6161\",[]],[\"name/6162\",[44,47.097]],[\"comment/6162\",[]],[\"name/6163\",[45,47.097]],[\"comment/6163\",[]],[\"name/6164\",[46,47.097]],[\"comment/6164\",[]],[\"name/6165\",[47,47.097]],[\"comment/6165\",[]],[\"name/6166\",[48,47.097]],[\"comment/6166\",[]],[\"name/6167\",[49,47.097]],[\"comment/6167\",[]],[\"name/6168\",[50,47.097]],[\"comment/6168\",[]],[\"name/6169\",[51,47.097]],[\"comment/6169\",[]],[\"name/6170\",[52,47.097]],[\"comment/6170\",[]],[\"name/6171\",[53,47.097]],[\"comment/6171\",[]],[\"name/6172\",[54,47.097]],[\"comment/6172\",[]],[\"name/6173\",[55,47.097]],[\"comment/6173\",[]],[\"name/6174\",[56,47.097]],[\"comment/6174\",[]],[\"name/6175\",[57,47.097]],[\"comment/6175\",[]],[\"name/6176\",[58,47.097]],[\"comment/6176\",[]],[\"name/6177\",[59,47.097]],[\"comment/6177\",[]],[\"name/6178\",[60,47.097]],[\"comment/6178\",[]],[\"name/6179\",[61,47.097]],[\"comment/6179\",[]],[\"name/6180\",[62,47.097]],[\"comment/6180\",[]],[\"name/6181\",[63,46.796]],[\"comment/6181\",[]],[\"name/6182\",[64,46.796]],[\"comment/6182\",[]],[\"name/6183\",[65,47.097]],[\"comment/6183\",[]],[\"name/6184\",[66,43.221]],[\"comment/6184\",[]],[\"name/6185\",[67,46.649]],[\"comment/6185\",[]],[\"name/6186\",[68,46.649]],[\"comment/6186\",[]],[\"name/6187\",[69,47.097]],[\"comment/6187\",[]],[\"name/6188\",[70,46.945]],[\"comment/6188\",[]],[\"name/6189\",[71,46.945]],[\"comment/6189\",[]],[\"name/6190\",[72,47.097]],[\"comment/6190\",[]],[\"name/6191\",[73,47.097]],[\"comment/6191\",[]],[\"name/6192\",[74,47.097]],[\"comment/6192\",[]],[\"name/6193\",[75,46.945]],[\"comment/6193\",[]],[\"name/6194\",[76,46.796]],[\"comment/6194\",[]],[\"name/6195\",[77,46.796]],[\"comment/6195\",[]],[\"name/6196\",[1237,84.871]],[\"comment/6196\",[]],[\"name/6197\",[582,76.396]],[\"comment/6197\",[]],[\"name/6198\",[565,71.876]],[\"comment/6198\",[]],[\"name/6199\",[324,66.409]],[\"comment/6199\",[]],[\"name/6200\",[1238,84.871]],[\"comment/6200\",[]],[\"name/6201\",[1239,84.871]],[\"comment/6201\",[]],[\"name/6202\",[606,79.762]],[\"comment/6202\",[]],[\"name/6203\",[605,79.762]],[\"comment/6203\",[]],[\"name/6204\",[1240,84.871]],[\"comment/6204\",[]],[\"name/6205\",[317,73.883]],[\"comment/6205\",[]],[\"name/6206\",[318,73.883]],[\"comment/6206\",[]],[\"name/6207\",[1241,84.871]],[\"comment/6207\",[]],[\"name/6208\",[1242,84.871]],[\"comment/6208\",[]],[\"name/6209\",[1243,84.871]],[\"comment/6209\",[]],[\"name/6210\",[1244,84.871]],[\"comment/6210\",[]],[\"name/6211\",[260,65.408]],[\"comment/6211\",[]],[\"name/6212\",[542,79.762]],[\"comment/6212\",[]],[\"name/6213\",[8,57.35]],[\"comment/6213\",[]],[\"name/6214\",[1245,84.871]],[\"comment/6214\",[]],[\"name/6215\",[1194,79.762]],[\"comment/6215\",[]],[\"name/6216\",[1246,79.762]],[\"comment/6216\",[]],[\"name/6217\",[1247,84.871]],[\"comment/6217\",[]],[\"name/6218\",[1248,84.871]],[\"comment/6218\",[]],[\"name/6219\",[1249,84.871]],[\"comment/6219\",[]],[\"name/6220\",[1250,84.871]],[\"comment/6220\",[]],[\"name/6221\",[1251,84.871]],[\"comment/6221\",[]],[\"name/6222\",[1252,84.871]],[\"comment/6222\",[]],[\"name/6223\",[1253,84.871]],[\"comment/6223\",[]],[\"name/6224\",[1254,84.871]],[\"comment/6224\",[]],[\"name/6225\",[1255,84.871]],[\"comment/6225\",[]],[\"name/6226\",[1256,84.871]],[\"comment/6226\",[]],[\"name/6227\",[1257,84.871]],[\"comment/6227\",[]],[\"name/6228\",[71,46.945]],[\"comment/6228\",[]],[\"name/6229\",[75,46.945]],[\"comment/6229\",[]],[\"name/6230\",[628,79.762]],[\"comment/6230\",[]],[\"name/6231\",[555,76.396]],[\"comment/6231\",[]],[\"name/6232\",[79,67.521]],[\"comment/6232\",[]],[\"name/6233\",[80,70.205]],[\"comment/6233\",[]],[\"name/6234\",[81,67.521]],[\"comment/6234\",[]],[\"name/6235\",[1258,84.871]],[\"comment/6235\",[]],[\"name/6236\",[230,68.773]],[\"comment/6236\",[]],[\"name/6237\",[310,66.409]],[\"comment/6237\",[]],[\"name/6238\",[1259,84.871]],[\"comment/6238\",[]],[\"name/6239\",[1260,84.871]],[\"comment/6239\",[]],[\"name/6240\",[66,43.221]],[\"comment/6240\",[]],[\"name/6241\",[330,79.762]],[\"comment/6241\",[]],[\"name/6242\",[331,76.396]],[\"comment/6242\",[]],[\"name/6243\",[111,57.35]],[\"comment/6243\",[]],[\"name/6244\",[416,63.664]],[\"comment/6244\",[]],[\"name/6245\",[0,59.743]],[\"comment/6245\",[]],[\"name/6246\",[415,64.498]],[\"comment/6246\",[]],[\"name/6247\",[17,57.785]],[\"comment/6247\",[]],[\"name/6248\",[755,70.205]],[\"comment/6248\",[]],[\"name/6249\",[756,70.205]],[\"comment/6249\",[]],[\"name/6250\",[496,73.883]],[\"comment/6250\",[]],[\"name/6251\",[9,46.22]],[\"comment/6251\",[]],[\"name/6252\",[15,46.945]],[\"comment/6252\",[]],[\"name/6253\",[1261,84.871]],[\"comment/6253\",[]],[\"name/6254\",[324,66.409]],[\"comment/6254\",[]],[\"name/6255\",[104,60.298]],[\"comment/6255\",[]],[\"name/6256\",[105,59.743]],[\"comment/6256\",[]],[\"name/6257\",[16,44.087]],[\"comment/6257\",[]],[\"name/6258\",[94,79.762]],[\"comment/6258\",[]],[\"name/6259\",[385,67.521]],[\"comment/6259\",[]],[\"name/6260\",[902,76.396]],[\"comment/6260\",[]],[\"name/6261\",[240,79.762]],[\"comment/6261\",[]],[\"name/6262\",[109,56.533]],[\"comment/6262\",[]],[\"name/6263\",[25,44.668]],[\"comment/6263\",[]],[\"name/6264\",[110,59.743]],[\"comment/6264\",[]],[\"name/6265\",[111,57.35]],[\"comment/6265\",[]],[\"name/6266\",[112,59.743]],[\"comment/6266\",[]],[\"name/6267\",[18,52.946]],[\"comment/6267\",[]],[\"name/6268\",[1,44.315]],[\"comment/6268\",[]],[\"name/6269\",[113,60.298]],[\"comment/6269\",[]],[\"name/6270\",[25,44.668]],[\"comment/6270\",[]],[\"name/6271\",[114,60.298]],[\"comment/6271\",[]],[\"name/6272\",[115,60.298]],[\"comment/6272\",[]],[\"name/6273\",[116,57.35]],[\"comment/6273\",[]],[\"name/6274\",[117,60.298]],[\"comment/6274\",[]],[\"name/6275\",[118,60.298]],[\"comment/6275\",[]],[\"name/6276\",[119,57.785]],[\"comment/6276\",[]],[\"name/6277\",[120,60.298]],[\"comment/6277\",[]],[\"name/6278\",[121,60.298]],[\"comment/6278\",[]],[\"name/6279\",[122,56.933]],[\"comment/6279\",[]],[\"name/6280\",[66,43.221]],[\"comment/6280\",[]],[\"name/6281\",[123,58.716]],[\"comment/6281\",[]],[\"name/6282\",[124,60.298]],[\"comment/6282\",[]],[\"name/6283\",[125,60.298]],[\"comment/6283\",[]],[\"name/6284\",[126,59.743]],[\"comment/6284\",[]],[\"name/6285\",[127,60.298]],[\"comment/6285\",[]],[\"name/6286\",[128,54.419]],[\"comment/6286\",[]],[\"name/6287\",[129,54.419]],[\"comment/6287\",[]],[\"name/6288\",[130,54.107]],[\"comment/6288\",[]],[\"name/6289\",[131,60.298]],[\"comment/6289\",[]],[\"name/6290\",[132,60.298]],[\"comment/6290\",[]],[\"name/6291\",[133,60.298]],[\"comment/6291\",[]],[\"name/6292\",[134,60.298]],[\"comment/6292\",[]],[\"name/6293\",[135,59.743]],[\"comment/6293\",[]],[\"name/6294\",[136,60.298]],[\"comment/6294\",[]],[\"name/6295\",[137,60.298]],[\"comment/6295\",[]],[\"name/6296\",[138,59.743]],[\"comment/6296\",[]],[\"name/6297\",[139,60.298]],[\"comment/6297\",[]],[\"name/6298\",[140,60.298]],[\"comment/6298\",[]],[\"name/6299\",[141,60.298]],[\"comment/6299\",[]],[\"name/6300\",[142,60.298]],[\"comment/6300\",[]],[\"name/6301\",[143,59.216]],[\"comment/6301\",[]],[\"name/6302\",[144,59.743]],[\"comment/6302\",[]],[\"name/6303\",[145,59.743]],[\"comment/6303\",[]],[\"name/6304\",[146,59.743]],[\"comment/6304\",[]],[\"name/6305\",[147,59.743]],[\"comment/6305\",[]],[\"name/6306\",[148,60.298]],[\"comment/6306\",[]],[\"name/6307\",[149,60.298]],[\"comment/6307\",[]],[\"name/6308\",[150,60.298]],[\"comment/6308\",[]],[\"name/6309\",[151,60.298]],[\"comment/6309\",[]],[\"name/6310\",[152,60.298]],[\"comment/6310\",[]],[\"name/6311\",[153,60.298]],[\"comment/6311\",[]],[\"name/6312\",[154,60.298]],[\"comment/6312\",[]],[\"name/6313\",[155,60.298]],[\"comment/6313\",[]],[\"name/6314\",[156,58.239]],[\"comment/6314\",[]],[\"name/6315\",[157,60.298]],[\"comment/6315\",[]],[\"name/6316\",[158,60.298]],[\"comment/6316\",[]],[\"name/6317\",[1,44.315]],[\"comment/6317\",[]],[\"name/6318\",[159,56.933]],[\"comment/6318\",[]],[\"name/6319\",[160,56.933]],[\"comment/6319\",[]],[\"name/6320\",[161,60.298]],[\"comment/6320\",[]],[\"name/6321\",[162,60.298]],[\"comment/6321\",[]],[\"name/6322\",[163,60.298]],[\"comment/6322\",[]],[\"name/6323\",[164,56.933]],[\"comment/6323\",[]],[\"name/6324\",[165,59.743]],[\"comment/6324\",[]],[\"name/6325\",[166,59.743]],[\"comment/6325\",[]],[\"name/6326\",[167,60.298]],[\"comment/6326\",[]],[\"name/6327\",[168,60.298]],[\"comment/6327\",[]],[\"name/6328\",[169,60.298]],[\"comment/6328\",[]],[\"name/6329\",[170,60.298]],[\"comment/6329\",[]],[\"name/6330\",[171,60.298]],[\"comment/6330\",[]],[\"name/6331\",[172,57.35]],[\"comment/6331\",[]],[\"name/6332\",[173,59.743]],[\"comment/6332\",[]],[\"name/6333\",[174,59.743]],[\"comment/6333\",[]],[\"name/6334\",[26,50.524]],[\"comment/6334\",[]],[\"name/6335\",[22,49.502]],[\"comment/6335\",[]],[\"name/6336\",[41,52.675]],[\"comment/6336\",[]],[\"name/6337\",[42,52.675]],[\"comment/6337\",[]],[\"name/6338\",[175,53.804]],[\"comment/6338\",[]],[\"name/6339\",[176,59.216]],[\"comment/6339\",[]],[\"name/6340\",[177,59.743]],[\"comment/6340\",[]],[\"name/6341\",[178,59.743]],[\"comment/6341\",[]],[\"name/6342\",[179,59.743]],[\"comment/6342\",[]],[\"name/6343\",[180,59.743]],[\"comment/6343\",[]],[\"name/6344\",[181,59.743]],[\"comment/6344\",[]],[\"name/6345\",[182,59.743]],[\"comment/6345\",[]],[\"name/6346\",[183,59.743]],[\"comment/6346\",[]],[\"name/6347\",[184,59.743]],[\"comment/6347\",[]],[\"name/6348\",[108,59.743]],[\"comment/6348\",[]],[\"name/6349\",[185,58.239]],[\"comment/6349\",[]],[\"name/6350\",[186,59.743]],[\"comment/6350\",[]],[\"name/6351\",[187,59.743]],[\"comment/6351\",[]],[\"name/6352\",[188,56.933]],[\"comment/6352\",[]],[\"name/6353\",[189,59.216]],[\"comment/6353\",[]],[\"name/6354\",[190,59.743]],[\"comment/6354\",[]],[\"name/6355\",[191,59.743]],[\"comment/6355\",[]],[\"name/6356\",[192,59.743]],[\"comment/6356\",[]],[\"name/6357\",[193,59.743]],[\"comment/6357\",[]],[\"name/6358\",[194,59.743]],[\"comment/6358\",[]],[\"name/6359\",[34,53.509]],[\"comment/6359\",[]],[\"name/6360\",[32,53.509]],[\"comment/6360\",[]],[\"name/6361\",[33,53.509]],[\"comment/6361\",[]],[\"name/6362\",[44,47.097]],[\"comment/6362\",[]],[\"name/6363\",[45,47.097]],[\"comment/6363\",[]],[\"name/6364\",[46,47.097]],[\"comment/6364\",[]],[\"name/6365\",[47,47.097]],[\"comment/6365\",[]],[\"name/6366\",[48,47.097]],[\"comment/6366\",[]],[\"name/6367\",[49,47.097]],[\"comment/6367\",[]],[\"name/6368\",[50,47.097]],[\"comment/6368\",[]],[\"name/6369\",[51,47.097]],[\"comment/6369\",[]],[\"name/6370\",[52,47.097]],[\"comment/6370\",[]],[\"name/6371\",[53,47.097]],[\"comment/6371\",[]],[\"name/6372\",[54,47.097]],[\"comment/6372\",[]],[\"name/6373\",[55,47.097]],[\"comment/6373\",[]],[\"name/6374\",[56,47.097]],[\"comment/6374\",[]],[\"name/6375\",[57,47.097]],[\"comment/6375\",[]],[\"name/6376\",[58,47.097]],[\"comment/6376\",[]],[\"name/6377\",[59,47.097]],[\"comment/6377\",[]],[\"name/6378\",[60,47.097]],[\"comment/6378\",[]],[\"name/6379\",[61,47.097]],[\"comment/6379\",[]],[\"name/6380\",[62,47.097]],[\"comment/6380\",[]],[\"name/6381\",[63,46.796]],[\"comment/6381\",[]],[\"name/6382\",[64,46.796]],[\"comment/6382\",[]],[\"name/6383\",[65,47.097]],[\"comment/6383\",[]],[\"name/6384\",[66,43.221]],[\"comment/6384\",[]],[\"name/6385\",[67,46.649]],[\"comment/6385\",[]],[\"name/6386\",[68,46.649]],[\"comment/6386\",[]],[\"name/6387\",[69,47.097]],[\"comment/6387\",[]],[\"name/6388\",[70,46.945]],[\"comment/6388\",[]],[\"name/6389\",[71,46.945]],[\"comment/6389\",[]],[\"name/6390\",[72,47.097]],[\"comment/6390\",[]],[\"name/6391\",[73,47.097]],[\"comment/6391\",[]],[\"name/6392\",[74,47.097]],[\"comment/6392\",[]],[\"name/6393\",[75,46.945]],[\"comment/6393\",[]],[\"name/6394\",[76,46.796]],[\"comment/6394\",[]],[\"name/6395\",[77,46.796]],[\"comment/6395\",[]],[\"name/6396\",[1262,84.871]],[\"comment/6396\",[]],[\"name/6397\",[416,63.664]],[\"comment/6397\",[]],[\"name/6398\",[1263,79.762]],[\"comment/6398\",[]],[\"name/6399\",[1,44.315]],[\"comment/6399\",[]],[\"name/6400\",[79,67.521]],[\"comment/6400\",[]],[\"name/6401\",[81,67.521]],[\"comment/6401\",[]],[\"name/6402\",[1264,84.871]],[\"comment/6402\",[]],[\"name/6403\",[483,73.883]],[\"comment/6403\",[]],[\"name/6404\",[1,44.315]],[\"comment/6404\",[]],[\"name/6405\",[1265,84.871]],[\"comment/6405\",[]],[\"name/6406\",[1266,84.871]],[\"comment/6406\",[]],[\"name/6407\",[1267,84.871]],[\"comment/6407\",[]],[\"name/6408\",[1268,79.762]],[\"comment/6408\",[]],[\"name/6409\",[9,46.22]],[\"comment/6409\",[]],[\"name/6410\",[15,46.945]],[\"comment/6410\",[]],[\"name/6411\",[16,44.087]],[\"comment/6411\",[]],[\"name/6412\",[172,57.35]],[\"comment/6412\",[]],[\"name/6413\",[173,59.743]],[\"comment/6413\",[]],[\"name/6414\",[135,59.743]],[\"comment/6414\",[]],[\"name/6415\",[174,59.743]],[\"comment/6415\",[]],[\"name/6416\",[26,50.524]],[\"comment/6416\",[]],[\"name/6417\",[22,49.502]],[\"comment/6417\",[]],[\"name/6418\",[41,52.675]],[\"comment/6418\",[]],[\"name/6419\",[42,52.675]],[\"comment/6419\",[]],[\"name/6420\",[175,53.804]],[\"comment/6420\",[]],[\"name/6421\",[176,59.216]],[\"comment/6421\",[]],[\"name/6422\",[177,59.743]],[\"comment/6422\",[]],[\"name/6423\",[178,59.743]],[\"comment/6423\",[]],[\"name/6424\",[179,59.743]],[\"comment/6424\",[]],[\"name/6425\",[180,59.743]],[\"comment/6425\",[]],[\"name/6426\",[144,59.743]],[\"comment/6426\",[]],[\"name/6427\",[145,59.743]],[\"comment/6427\",[]],[\"name/6428\",[181,59.743]],[\"comment/6428\",[]],[\"name/6429\",[182,59.743]],[\"comment/6429\",[]],[\"name/6430\",[183,59.743]],[\"comment/6430\",[]],[\"name/6431\",[184,59.743]],[\"comment/6431\",[]],[\"name/6432\",[108,59.743]],[\"comment/6432\",[]],[\"name/6433\",[156,58.239]],[\"comment/6433\",[]],[\"name/6434\",[185,58.239]],[\"comment/6434\",[]],[\"name/6435\",[147,59.743]],[\"comment/6435\",[]],[\"name/6436\",[186,59.743]],[\"comment/6436\",[]],[\"name/6437\",[109,56.533]],[\"comment/6437\",[]],[\"name/6438\",[187,59.743]],[\"comment/6438\",[]],[\"name/6439\",[188,56.933]],[\"comment/6439\",[]],[\"name/6440\",[189,59.216]],[\"comment/6440\",[]],[\"name/6441\",[190,59.743]],[\"comment/6441\",[]],[\"name/6442\",[191,59.743]],[\"comment/6442\",[]],[\"name/6443\",[192,59.743]],[\"comment/6443\",[]],[\"name/6444\",[193,59.743]],[\"comment/6444\",[]],[\"name/6445\",[194,59.743]],[\"comment/6445\",[]],[\"name/6446\",[165,59.743]],[\"comment/6446\",[]],[\"name/6447\",[34,53.509]],[\"comment/6447\",[]],[\"name/6448\",[32,53.509]],[\"comment/6448\",[]],[\"name/6449\",[33,53.509]],[\"comment/6449\",[]],[\"name/6450\",[128,54.419]],[\"comment/6450\",[]],[\"name/6451\",[130,54.107]],[\"comment/6451\",[]],[\"name/6452\",[164,56.933]],[\"comment/6452\",[]],[\"name/6453\",[44,47.097]],[\"comment/6453\",[]],[\"name/6454\",[45,47.097]],[\"comment/6454\",[]],[\"name/6455\",[46,47.097]],[\"comment/6455\",[]],[\"name/6456\",[47,47.097]],[\"comment/6456\",[]],[\"name/6457\",[48,47.097]],[\"comment/6457\",[]],[\"name/6458\",[49,47.097]],[\"comment/6458\",[]],[\"name/6459\",[50,47.097]],[\"comment/6459\",[]],[\"name/6460\",[51,47.097]],[\"comment/6460\",[]],[\"name/6461\",[25,44.668]],[\"comment/6461\",[]],[\"name/6462\",[52,47.097]],[\"comment/6462\",[]],[\"name/6463\",[53,47.097]],[\"comment/6463\",[]],[\"name/6464\",[54,47.097]],[\"comment/6464\",[]],[\"name/6465\",[55,47.097]],[\"comment/6465\",[]],[\"name/6466\",[56,47.097]],[\"comment/6466\",[]],[\"name/6467\",[57,47.097]],[\"comment/6467\",[]],[\"name/6468\",[58,47.097]],[\"comment/6468\",[]],[\"name/6469\",[59,47.097]],[\"comment/6469\",[]],[\"name/6470\",[60,47.097]],[\"comment/6470\",[]],[\"name/6471\",[61,47.097]],[\"comment/6471\",[]],[\"name/6472\",[62,47.097]],[\"comment/6472\",[]],[\"name/6473\",[63,46.796]],[\"comment/6473\",[]],[\"name/6474\",[64,46.796]],[\"comment/6474\",[]],[\"name/6475\",[65,47.097]],[\"comment/6475\",[]],[\"name/6476\",[66,43.221]],[\"comment/6476\",[]],[\"name/6477\",[67,46.649]],[\"comment/6477\",[]],[\"name/6478\",[68,46.649]],[\"comment/6478\",[]],[\"name/6479\",[69,47.097]],[\"comment/6479\",[]],[\"name/6480\",[70,46.945]],[\"comment/6480\",[]],[\"name/6481\",[71,46.945]],[\"comment/6481\",[]],[\"name/6482\",[72,47.097]],[\"comment/6482\",[]],[\"name/6483\",[73,47.097]],[\"comment/6483\",[]],[\"name/6484\",[74,47.097]],[\"comment/6484\",[]],[\"name/6485\",[75,46.945]],[\"comment/6485\",[]],[\"name/6486\",[76,46.796]],[\"comment/6486\",[]],[\"name/6487\",[77,46.796]],[\"comment/6487\",[]],[\"name/6488\",[1269,84.871]],[\"comment/6488\",[]],[\"name/6489\",[1270,84.871]],[\"comment/6489\",[]],[\"name/6490\",[1271,84.871]],[\"comment/6490\",[]],[\"name/6491\",[6,60.298]],[\"comment/6491\",[]],[\"name/6492\",[882,79.762]],[\"comment/6492\",[]],[\"name/6493\",[883,79.762]],[\"comment/6493\",[]],[\"name/6494\",[884,79.762]],[\"comment/6494\",[]],[\"name/6495\",[885,79.762]],[\"comment/6495\",[]],[\"name/6496\",[886,79.762]],[\"comment/6496\",[]],[\"name/6497\",[887,79.762]],[\"comment/6497\",[]],[\"name/6498\",[888,79.762]],[\"comment/6498\",[]],[\"name/6499\",[1272,84.871]],[\"comment/6499\",[]],[\"name/6500\",[1273,84.871]],[\"comment/6500\",[]],[\"name/6501\",[506,76.396]],[\"comment/6501\",[]],[\"name/6502\",[1274,84.871]],[\"comment/6502\",[]],[\"name/6503\",[16,44.087]],[\"comment/6503\",[]],[\"name/6504\",[1275,84.871]],[\"comment/6504\",[]],[\"name/6505\",[1276,84.871]],[\"comment/6505\",[]],[\"name/6506\",[175,53.804]],[\"comment/6506\",[]],[\"name/6507\",[250,60.887]],[\"comment/6507\",[]],[\"name/6508\",[1277,84.871]],[\"comment/6508\",[]],[\"name/6509\",[1278,84.871]],[\"comment/6509\",[]],[\"name/6510\",[1279,84.871]],[\"comment/6510\",[]],[\"name/6511\",[1280,84.871]],[\"comment/6511\",[]],[\"name/6512\",[22,49.502]],[\"comment/6512\",[]],[\"name/6513\",[375,64.498]],[\"comment/6513\",[]],[\"name/6514\",[1281,84.871]],[\"comment/6514\",[]],[\"name/6515\",[1282,84.871]],[\"comment/6515\",[]],[\"name/6516\",[1283,84.871]],[\"comment/6516\",[]],[\"name/6517\",[1284,84.871]],[\"comment/6517\",[]],[\"name/6518\",[1285,79.762]],[\"comment/6518\",[]],[\"name/6519\",[1286,84.871]],[\"comment/6519\",[]],[\"name/6520\",[1287,84.871]],[\"comment/6520\",[]],[\"name/6521\",[1288,84.871]],[\"comment/6521\",[]],[\"name/6522\",[164,56.933]],[\"comment/6522\",[]],[\"name/6523\",[1289,84.871]],[\"comment/6523\",[]],[\"name/6524\",[1290,84.871]],[\"comment/6524\",[]],[\"name/6525\",[1291,79.762]],[\"comment/6525\",[]],[\"name/6526\",[109,56.533]],[\"comment/6526\",[]],[\"name/6527\",[188,56.933]],[\"comment/6527\",[]],[\"name/6528\",[176,59.216]],[\"comment/6528\",[]],[\"name/6529\",[1,44.315]],[\"comment/6529\",[]],[\"name/6530\",[1263,79.762]],[\"comment/6530\",[]],[\"name/6531\",[1,44.315]],[\"comment/6531\",[]],[\"name/6532\",[79,67.521]],[\"comment/6532\",[]],[\"name/6533\",[81,67.521]],[\"comment/6533\",[]],[\"name/6534\",[1292,84.871]],[\"comment/6534\",[]],[\"name/6535\",[9,46.22]],[\"comment/6535\",[]],[\"name/6536\",[726,79.762]],[\"comment/6536\",[]],[\"name/6537\",[727,79.762]],[\"comment/6537\",[]],[\"name/6538\",[728,79.762]],[\"comment/6538\",[]],[\"name/6539\",[729,79.762]],[\"comment/6539\",[]],[\"name/6540\",[1,44.315]],[\"comment/6540\",[]],[\"name/6541\",[66,43.221]],[\"comment/6541\",[]],[\"name/6542\",[310,66.409]],[\"comment/6542\",[]],[\"name/6543\",[730,79.762]],[\"comment/6543\",[]],[\"name/6544\",[731,79.762]],[\"comment/6544\",[]],[\"name/6545\",[732,79.762]],[\"comment/6545\",[]],[\"name/6546\",[733,79.762]],[\"comment/6546\",[]],[\"name/6547\",[22,49.502]],[\"comment/6547\",[]],[\"name/6548\",[15,46.945]],[\"comment/6548\",[]],[\"name/6549\",[16,44.087]],[\"comment/6549\",[]],[\"name/6550\",[543,73.883]],[\"comment/6550\",[]],[\"name/6551\",[1293,84.871]],[\"comment/6551\",[]],[\"name/6552\",[1294,84.871]],[\"comment/6552\",[]],[\"name/6553\",[6,60.298]],[\"comment/6553\",[]],[\"name/6554\",[1295,84.871]],[\"comment/6554\",[]],[\"name/6555\",[1089,79.762]],[\"comment/6555\",[]],[\"name/6556\",[164,56.933]],[\"comment/6556\",[]],[\"name/6557\",[745,79.762]],[\"comment/6557\",[]],[\"name/6558\",[734,79.762]],[\"comment/6558\",[]],[\"name/6559\",[96,67.521]],[\"comment/6559\",[]],[\"name/6560\",[340,70.205]],[\"comment/6560\",[]],[\"name/6561\",[735,79.762]],[\"comment/6561\",[]],[\"name/6562\",[736,79.762]],[\"comment/6562\",[]],[\"name/6563\",[122,56.933]],[\"comment/6563\",[]],[\"name/6564\",[25,44.668]],[\"comment/6564\",[]],[\"name/6565\",[737,79.762]],[\"comment/6565\",[]],[\"name/6566\",[469,70.205]],[\"comment/6566\",[]],[\"name/6567\",[738,79.762]],[\"comment/6567\",[]],[\"name/6568\",[130,54.107]],[\"comment/6568\",[]],[\"name/6569\",[42,52.675]],[\"comment/6569\",[]],[\"name/6570\",[41,52.675]],[\"comment/6570\",[]],[\"name/6571\",[739,79.762]],[\"comment/6571\",[]],[\"name/6572\",[38,59.743]],[\"comment/6572\",[]],[\"name/6573\",[172,57.35]],[\"comment/6573\",[]],[\"name/6574\",[740,79.762]],[\"comment/6574\",[]],[\"name/6575\",[741,79.762]],[\"comment/6575\",[]],[\"name/6576\",[742,79.762]],[\"comment/6576\",[]],[\"name/6577\",[743,79.762]],[\"comment/6577\",[]],[\"name/6578\",[744,79.762]],[\"comment/6578\",[]],[\"name/6579\",[129,54.419]],[\"comment/6579\",[]],[\"name/6580\",[44,47.097]],[\"comment/6580\",[]],[\"name/6581\",[45,47.097]],[\"comment/6581\",[]],[\"name/6582\",[46,47.097]],[\"comment/6582\",[]],[\"name/6583\",[47,47.097]],[\"comment/6583\",[]],[\"name/6584\",[48,47.097]],[\"comment/6584\",[]],[\"name/6585\",[49,47.097]],[\"comment/6585\",[]],[\"name/6586\",[50,47.097]],[\"comment/6586\",[]],[\"name/6587\",[51,47.097]],[\"comment/6587\",[]],[\"name/6588\",[52,47.097]],[\"comment/6588\",[]],[\"name/6589\",[53,47.097]],[\"comment/6589\",[]],[\"name/6590\",[54,47.097]],[\"comment/6590\",[]],[\"name/6591\",[55,47.097]],[\"comment/6591\",[]],[\"name/6592\",[56,47.097]],[\"comment/6592\",[]],[\"name/6593\",[57,47.097]],[\"comment/6593\",[]],[\"name/6594\",[58,47.097]],[\"comment/6594\",[]],[\"name/6595\",[59,47.097]],[\"comment/6595\",[]],[\"name/6596\",[60,47.097]],[\"comment/6596\",[]],[\"name/6597\",[61,47.097]],[\"comment/6597\",[]],[\"name/6598\",[62,47.097]],[\"comment/6598\",[]],[\"name/6599\",[63,46.796]],[\"comment/6599\",[]],[\"name/6600\",[64,46.796]],[\"comment/6600\",[]],[\"name/6601\",[65,47.097]],[\"comment/6601\",[]],[\"name/6602\",[66,43.221]],[\"comment/6602\",[]],[\"name/6603\",[67,46.649]],[\"comment/6603\",[]],[\"name/6604\",[68,46.649]],[\"comment/6604\",[]],[\"name/6605\",[69,47.097]],[\"comment/6605\",[]],[\"name/6606\",[70,46.945]],[\"comment/6606\",[]],[\"name/6607\",[71,46.945]],[\"comment/6607\",[]],[\"name/6608\",[72,47.097]],[\"comment/6608\",[]],[\"name/6609\",[73,47.097]],[\"comment/6609\",[]],[\"name/6610\",[74,47.097]],[\"comment/6610\",[]],[\"name/6611\",[75,46.945]],[\"comment/6611\",[]],[\"name/6612\",[76,46.796]],[\"comment/6612\",[]],[\"name/6613\",[77,46.796]],[\"comment/6613\",[]],[\"name/6614\",[1296,84.871]],[\"comment/6614\",[]],[\"name/6615\",[310,66.409]],[\"comment/6615\",[]],[\"name/6616\",[0,59.743]],[\"comment/6616\",[]],[\"name/6617\",[1297,84.871]],[\"comment/6617\",[]],[\"name/6618\",[543,73.883]],[\"comment/6618\",[]],[\"name/6619\",[9,46.22]],[\"comment/6619\",[]],[\"name/6620\",[324,66.409]],[\"comment/6620\",[]],[\"name/6621\",[13,54.107]],[\"comment/6621\",[]],[\"name/6622\",[15,46.945]],[\"comment/6622\",[]],[\"name/6623\",[16,44.087]],[\"comment/6623\",[]],[\"name/6624\",[367,79.762]],[\"comment/6624\",[]],[\"name/6625\",[1298,79.762]],[\"comment/6625\",[]],[\"name/6626\",[1299,84.871]],[\"comment/6626\",[]],[\"name/6627\",[1300,84.871]],[\"comment/6627\",[]],[\"name/6628\",[1301,84.871]],[\"comment/6628\",[]],[\"name/6629\",[1246,79.762]],[\"comment/6629\",[]],[\"name/6630\",[1302,84.871]],[\"comment/6630\",[]],[\"name/6631\",[1303,84.871]],[\"comment/6631\",[]],[\"name/6632\",[902,76.396]],[\"comment/6632\",[]],[\"name/6633\",[385,67.521]],[\"comment/6633\",[]],[\"name/6634\",[138,59.743]],[\"comment/6634\",[]],[\"name/6635\",[748,76.396]],[\"comment/6635\",[]],[\"name/6636\",[1304,84.871]],[\"comment/6636\",[]],[\"name/6637\",[1305,84.871]],[\"comment/6637\",[]],[\"name/6638\",[25,44.668]],[\"comment/6638\",[]],[\"name/6639\",[35,56.148]],[\"comment/6639\",[]],[\"name/6640\",[36,55.778]],[\"comment/6640\",[]],[\"name/6641\",[128,54.419]],[\"comment/6641\",[]],[\"name/6642\",[129,54.419]],[\"comment/6642\",[]],[\"name/6643\",[130,54.107]],[\"comment/6643\",[]],[\"name/6644\",[22,49.502]],[\"comment/6644\",[]],[\"name/6645\",[26,50.524]],[\"comment/6645\",[]],[\"name/6646\",[175,53.804]],[\"comment/6646\",[]],[\"name/6647\",[250,60.887]],[\"comment/6647\",[]],[\"name/6648\",[373,65.408]],[\"comment/6648\",[]],[\"name/6649\",[374,65.408]],[\"comment/6649\",[]],[\"name/6650\",[375,64.498]],[\"comment/6650\",[]],[\"name/6651\",[376,65.408]],[\"comment/6651\",[]],[\"name/6652\",[377,65.408]],[\"comment/6652\",[]],[\"name/6653\",[44,47.097]],[\"comment/6653\",[]],[\"name/6654\",[45,47.097]],[\"comment/6654\",[]],[\"name/6655\",[46,47.097]],[\"comment/6655\",[]],[\"name/6656\",[47,47.097]],[\"comment/6656\",[]],[\"name/6657\",[48,47.097]],[\"comment/6657\",[]],[\"name/6658\",[49,47.097]],[\"comment/6658\",[]],[\"name/6659\",[50,47.097]],[\"comment/6659\",[]],[\"name/6660\",[51,47.097]],[\"comment/6660\",[]],[\"name/6661\",[52,47.097]],[\"comment/6661\",[]],[\"name/6662\",[53,47.097]],[\"comment/6662\",[]],[\"name/6663\",[54,47.097]],[\"comment/6663\",[]],[\"name/6664\",[55,47.097]],[\"comment/6664\",[]],[\"name/6665\",[56,47.097]],[\"comment/6665\",[]],[\"name/6666\",[57,47.097]],[\"comment/6666\",[]],[\"name/6667\",[58,47.097]],[\"comment/6667\",[]],[\"name/6668\",[59,47.097]],[\"comment/6668\",[]],[\"name/6669\",[60,47.097]],[\"comment/6669\",[]],[\"name/6670\",[61,47.097]],[\"comment/6670\",[]],[\"name/6671\",[62,47.097]],[\"comment/6671\",[]],[\"name/6672\",[63,46.796]],[\"comment/6672\",[]],[\"name/6673\",[64,46.796]],[\"comment/6673\",[]],[\"name/6674\",[65,47.097]],[\"comment/6674\",[]],[\"name/6675\",[66,43.221]],[\"comment/6675\",[]],[\"name/6676\",[67,46.649]],[\"comment/6676\",[]],[\"name/6677\",[68,46.649]],[\"comment/6677\",[]],[\"name/6678\",[69,47.097]],[\"comment/6678\",[]],[\"name/6679\",[70,46.945]],[\"comment/6679\",[]],[\"name/6680\",[71,46.945]],[\"comment/6680\",[]],[\"name/6681\",[72,47.097]],[\"comment/6681\",[]],[\"name/6682\",[73,47.097]],[\"comment/6682\",[]],[\"name/6683\",[74,47.097]],[\"comment/6683\",[]],[\"name/6684\",[75,46.945]],[\"comment/6684\",[]],[\"name/6685\",[76,46.796]],[\"comment/6685\",[]],[\"name/6686\",[77,46.796]],[\"comment/6686\",[]],[\"name/6687\",[497,73.883]],[\"comment/6687\",[]],[\"name/6688\",[9,46.22]],[\"comment/6688\",[]],[\"name/6689\",[104,60.298]],[\"comment/6689\",[]],[\"name/6690\",[105,59.743]],[\"comment/6690\",[]],[\"name/6691\",[15,46.945]],[\"comment/6691\",[]],[\"name/6692\",[16,44.087]],[\"comment/6692\",[]],[\"name/6693\",[108,59.743]],[\"comment/6693\",[]],[\"name/6694\",[109,56.533]],[\"comment/6694\",[]],[\"name/6695\",[25,44.668]],[\"comment/6695\",[]],[\"name/6696\",[110,59.743]],[\"comment/6696\",[]],[\"name/6697\",[111,57.35]],[\"comment/6697\",[]],[\"name/6698\",[112,59.743]],[\"comment/6698\",[]],[\"name/6699\",[18,52.946]],[\"comment/6699\",[]],[\"name/6700\",[1,44.315]],[\"comment/6700\",[]],[\"name/6701\",[113,60.298]],[\"comment/6701\",[]],[\"name/6702\",[25,44.668]],[\"comment/6702\",[]],[\"name/6703\",[114,60.298]],[\"comment/6703\",[]],[\"name/6704\",[115,60.298]],[\"comment/6704\",[]],[\"name/6705\",[116,57.35]],[\"comment/6705\",[]],[\"name/6706\",[117,60.298]],[\"comment/6706\",[]],[\"name/6707\",[118,60.298]],[\"comment/6707\",[]],[\"name/6708\",[119,57.785]],[\"comment/6708\",[]],[\"name/6709\",[120,60.298]],[\"comment/6709\",[]],[\"name/6710\",[121,60.298]],[\"comment/6710\",[]],[\"name/6711\",[122,56.933]],[\"comment/6711\",[]],[\"name/6712\",[66,43.221]],[\"comment/6712\",[]],[\"name/6713\",[123,58.716]],[\"comment/6713\",[]],[\"name/6714\",[124,60.298]],[\"comment/6714\",[]],[\"name/6715\",[125,60.298]],[\"comment/6715\",[]],[\"name/6716\",[126,59.743]],[\"comment/6716\",[]],[\"name/6717\",[127,60.298]],[\"comment/6717\",[]],[\"name/6718\",[128,54.419]],[\"comment/6718\",[]],[\"name/6719\",[129,54.419]],[\"comment/6719\",[]],[\"name/6720\",[130,54.107]],[\"comment/6720\",[]],[\"name/6721\",[131,60.298]],[\"comment/6721\",[]],[\"name/6722\",[132,60.298]],[\"comment/6722\",[]],[\"name/6723\",[133,60.298]],[\"comment/6723\",[]],[\"name/6724\",[134,60.298]],[\"comment/6724\",[]],[\"name/6725\",[135,59.743]],[\"comment/6725\",[]],[\"name/6726\",[136,60.298]],[\"comment/6726\",[]],[\"name/6727\",[137,60.298]],[\"comment/6727\",[]],[\"name/6728\",[138,59.743]],[\"comment/6728\",[]],[\"name/6729\",[139,60.298]],[\"comment/6729\",[]],[\"name/6730\",[140,60.298]],[\"comment/6730\",[]],[\"name/6731\",[141,60.298]],[\"comment/6731\",[]],[\"name/6732\",[142,60.298]],[\"comment/6732\",[]],[\"name/6733\",[143,59.216]],[\"comment/6733\",[]],[\"name/6734\",[144,59.743]],[\"comment/6734\",[]],[\"name/6735\",[145,59.743]],[\"comment/6735\",[]],[\"name/6736\",[146,59.743]],[\"comment/6736\",[]],[\"name/6737\",[147,59.743]],[\"comment/6737\",[]],[\"name/6738\",[148,60.298]],[\"comment/6738\",[]],[\"name/6739\",[149,60.298]],[\"comment/6739\",[]],[\"name/6740\",[150,60.298]],[\"comment/6740\",[]],[\"name/6741\",[151,60.298]],[\"comment/6741\",[]],[\"name/6742\",[152,60.298]],[\"comment/6742\",[]],[\"name/6743\",[153,60.298]],[\"comment/6743\",[]],[\"name/6744\",[154,60.298]],[\"comment/6744\",[]],[\"name/6745\",[155,60.298]],[\"comment/6745\",[]],[\"name/6746\",[156,58.239]],[\"comment/6746\",[]],[\"name/6747\",[157,60.298]],[\"comment/6747\",[]],[\"name/6748\",[158,60.298]],[\"comment/6748\",[]],[\"name/6749\",[1,44.315]],[\"comment/6749\",[]],[\"name/6750\",[159,56.933]],[\"comment/6750\",[]],[\"name/6751\",[160,56.933]],[\"comment/6751\",[]],[\"name/6752\",[161,60.298]],[\"comment/6752\",[]],[\"name/6753\",[162,60.298]],[\"comment/6753\",[]],[\"name/6754\",[163,60.298]],[\"comment/6754\",[]],[\"name/6755\",[164,56.933]],[\"comment/6755\",[]],[\"name/6756\",[165,59.743]],[\"comment/6756\",[]],[\"name/6757\",[166,59.743]],[\"comment/6757\",[]],[\"name/6758\",[167,60.298]],[\"comment/6758\",[]],[\"name/6759\",[168,60.298]],[\"comment/6759\",[]],[\"name/6760\",[169,60.298]],[\"comment/6760\",[]],[\"name/6761\",[170,60.298]],[\"comment/6761\",[]],[\"name/6762\",[171,60.298]],[\"comment/6762\",[]],[\"name/6763\",[172,57.35]],[\"comment/6763\",[]],[\"name/6764\",[173,59.743]],[\"comment/6764\",[]],[\"name/6765\",[174,59.743]],[\"comment/6765\",[]],[\"name/6766\",[26,50.524]],[\"comment/6766\",[]],[\"name/6767\",[22,49.502]],[\"comment/6767\",[]],[\"name/6768\",[41,52.675]],[\"comment/6768\",[]],[\"name/6769\",[42,52.675]],[\"comment/6769\",[]],[\"name/6770\",[175,53.804]],[\"comment/6770\",[]],[\"name/6771\",[176,59.216]],[\"comment/6771\",[]],[\"name/6772\",[177,59.743]],[\"comment/6772\",[]],[\"name/6773\",[178,59.743]],[\"comment/6773\",[]],[\"name/6774\",[179,59.743]],[\"comment/6774\",[]],[\"name/6775\",[180,59.743]],[\"comment/6775\",[]],[\"name/6776\",[181,59.743]],[\"comment/6776\",[]],[\"name/6777\",[182,59.743]],[\"comment/6777\",[]],[\"name/6778\",[183,59.743]],[\"comment/6778\",[]],[\"name/6779\",[184,59.743]],[\"comment/6779\",[]],[\"name/6780\",[185,58.239]],[\"comment/6780\",[]],[\"name/6781\",[186,59.743]],[\"comment/6781\",[]],[\"name/6782\",[187,59.743]],[\"comment/6782\",[]],[\"name/6783\",[188,56.933]],[\"comment/6783\",[]],[\"name/6784\",[189,59.216]],[\"comment/6784\",[]],[\"name/6785\",[190,59.743]],[\"comment/6785\",[]],[\"name/6786\",[191,59.743]],[\"comment/6786\",[]],[\"name/6787\",[192,59.743]],[\"comment/6787\",[]],[\"name/6788\",[193,59.743]],[\"comment/6788\",[]],[\"name/6789\",[194,59.743]],[\"comment/6789\",[]],[\"name/6790\",[34,53.509]],[\"comment/6790\",[]],[\"name/6791\",[32,53.509]],[\"comment/6791\",[]],[\"name/6792\",[33,53.509]],[\"comment/6792\",[]],[\"name/6793\",[44,47.097]],[\"comment/6793\",[]],[\"name/6794\",[45,47.097]],[\"comment/6794\",[]],[\"name/6795\",[46,47.097]],[\"comment/6795\",[]],[\"name/6796\",[47,47.097]],[\"comment/6796\",[]],[\"name/6797\",[48,47.097]],[\"comment/6797\",[]],[\"name/6798\",[49,47.097]],[\"comment/6798\",[]],[\"name/6799\",[50,47.097]],[\"comment/6799\",[]],[\"name/6800\",[51,47.097]],[\"comment/6800\",[]],[\"name/6801\",[52,47.097]],[\"comment/6801\",[]],[\"name/6802\",[53,47.097]],[\"comment/6802\",[]],[\"name/6803\",[54,47.097]],[\"comment/6803\",[]],[\"name/6804\",[55,47.097]],[\"comment/6804\",[]],[\"name/6805\",[56,47.097]],[\"comment/6805\",[]],[\"name/6806\",[57,47.097]],[\"comment/6806\",[]],[\"name/6807\",[58,47.097]],[\"comment/6807\",[]],[\"name/6808\",[59,47.097]],[\"comment/6808\",[]],[\"name/6809\",[60,47.097]],[\"comment/6809\",[]],[\"name/6810\",[61,47.097]],[\"comment/6810\",[]],[\"name/6811\",[62,47.097]],[\"comment/6811\",[]],[\"name/6812\",[63,46.796]],[\"comment/6812\",[]],[\"name/6813\",[64,46.796]],[\"comment/6813\",[]],[\"name/6814\",[65,47.097]],[\"comment/6814\",[]],[\"name/6815\",[66,43.221]],[\"comment/6815\",[]],[\"name/6816\",[67,46.649]],[\"comment/6816\",[]],[\"name/6817\",[68,46.649]],[\"comment/6817\",[]],[\"name/6818\",[69,47.097]],[\"comment/6818\",[]],[\"name/6819\",[70,46.945]],[\"comment/6819\",[]],[\"name/6820\",[71,46.945]],[\"comment/6820\",[]],[\"name/6821\",[72,47.097]],[\"comment/6821\",[]],[\"name/6822\",[73,47.097]],[\"comment/6822\",[]],[\"name/6823\",[74,47.097]],[\"comment/6823\",[]],[\"name/6824\",[75,46.945]],[\"comment/6824\",[]],[\"name/6825\",[76,46.796]],[\"comment/6825\",[]],[\"name/6826\",[77,46.796]],[\"comment/6826\",[]],[\"name/6827\",[544,73.883]],[\"comment/6827\",[]],[\"name/6828\",[9,46.22]],[\"comment/6828\",[]],[\"name/6829\",[13,54.107]],[\"comment/6829\",[]],[\"name/6830\",[14,59.743]],[\"comment/6830\",[]],[\"name/6831\",[15,46.945]],[\"comment/6831\",[]],[\"name/6832\",[16,44.087]],[\"comment/6832\",[]],[\"name/6833\",[1306,84.871]],[\"comment/6833\",[]],[\"name/6834\",[1307,84.871]],[\"comment/6834\",[]],[\"name/6835\",[25,44.668]],[\"comment/6835\",[]],[\"name/6836\",[22,49.502]],[\"comment/6836\",[]],[\"name/6837\",[26,50.524]],[\"comment/6837\",[]],[\"name/6838\",[27,60.887]],[\"comment/6838\",[]],[\"name/6839\",[28,60.887]],[\"comment/6839\",[]],[\"name/6840\",[23,60.887]],[\"comment/6840\",[]],[\"name/6841\",[29,60.887]],[\"comment/6841\",[]],[\"name/6842\",[30,60.887]],[\"comment/6842\",[]],[\"name/6843\",[31,60.887]],[\"comment/6843\",[]],[\"name/6844\",[32,53.509]],[\"comment/6844\",[]],[\"name/6845\",[33,53.509]],[\"comment/6845\",[]],[\"name/6846\",[34,53.509]],[\"comment/6846\",[]],[\"name/6847\",[35,56.148]],[\"comment/6847\",[]],[\"name/6848\",[36,55.778]],[\"comment/6848\",[]],[\"name/6849\",[37,60.887]],[\"comment/6849\",[]],[\"name/6850\",[38,59.743]],[\"comment/6850\",[]],[\"name/6851\",[39,60.887]],[\"comment/6851\",[]],[\"name/6852\",[40,60.887]],[\"comment/6852\",[]],[\"name/6853\",[41,52.675]],[\"comment/6853\",[]],[\"name/6854\",[42,52.675]],[\"comment/6854\",[]],[\"name/6855\",[43,60.887]],[\"comment/6855\",[]],[\"name/6856\",[44,47.097]],[\"comment/6856\",[]],[\"name/6857\",[45,47.097]],[\"comment/6857\",[]],[\"name/6858\",[46,47.097]],[\"comment/6858\",[]],[\"name/6859\",[47,47.097]],[\"comment/6859\",[]],[\"name/6860\",[48,47.097]],[\"comment/6860\",[]],[\"name/6861\",[49,47.097]],[\"comment/6861\",[]],[\"name/6862\",[50,47.097]],[\"comment/6862\",[]],[\"name/6863\",[51,47.097]],[\"comment/6863\",[]],[\"name/6864\",[52,47.097]],[\"comment/6864\",[]],[\"name/6865\",[53,47.097]],[\"comment/6865\",[]],[\"name/6866\",[54,47.097]],[\"comment/6866\",[]],[\"name/6867\",[55,47.097]],[\"comment/6867\",[]],[\"name/6868\",[56,47.097]],[\"comment/6868\",[]],[\"name/6869\",[57,47.097]],[\"comment/6869\",[]],[\"name/6870\",[58,47.097]],[\"comment/6870\",[]],[\"name/6871\",[59,47.097]],[\"comment/6871\",[]],[\"name/6872\",[60,47.097]],[\"comment/6872\",[]],[\"name/6873\",[61,47.097]],[\"comment/6873\",[]],[\"name/6874\",[62,47.097]],[\"comment/6874\",[]],[\"name/6875\",[63,46.796]],[\"comment/6875\",[]],[\"name/6876\",[64,46.796]],[\"comment/6876\",[]],[\"name/6877\",[65,47.097]],[\"comment/6877\",[]],[\"name/6878\",[66,43.221]],[\"comment/6878\",[]],[\"name/6879\",[67,46.649]],[\"comment/6879\",[]],[\"name/6880\",[68,46.649]],[\"comment/6880\",[]],[\"name/6881\",[69,47.097]],[\"comment/6881\",[]],[\"name/6882\",[70,46.945]],[\"comment/6882\",[]],[\"name/6883\",[71,46.945]],[\"comment/6883\",[]],[\"name/6884\",[72,47.097]],[\"comment/6884\",[]],[\"name/6885\",[73,47.097]],[\"comment/6885\",[]],[\"name/6886\",[74,47.097]],[\"comment/6886\",[]],[\"name/6887\",[75,46.945]],[\"comment/6887\",[]],[\"name/6888\",[76,46.796]],[\"comment/6888\",[]],[\"name/6889\",[77,46.796]],[\"comment/6889\",[]],[\"name/6890\",[545,79.762]],[\"comment/6890\",[]],[\"name/6891\",[1308,84.871]],[\"comment/6891\",[]],[\"name/6892\",[16,44.087]],[\"comment/6892\",[]],[\"name/6893\",[1309,84.871]],[\"comment/6893\",[]],[\"name/6894\",[1310,84.871]],[\"comment/6894\",[]],[\"name/6895\",[1311,84.871]],[\"comment/6895\",[]],[\"name/6896\",[1312,84.871]],[\"comment/6896\",[]],[\"name/6897\",[1313,84.871]],[\"comment/6897\",[]],[\"name/6898\",[1314,84.871]],[\"comment/6898\",[]],[\"name/6899\",[1315,84.871]],[\"comment/6899\",[]],[\"name/6900\",[1316,84.871]],[\"comment/6900\",[]],[\"name/6901\",[1317,84.871]],[\"comment/6901\",[]],[\"name/6902\",[1318,84.871]],[\"comment/6902\",[]],[\"name/6903\",[1319,84.871]],[\"comment/6903\",[]],[\"name/6904\",[1320,84.871]],[\"comment/6904\",[]],[\"name/6905\",[1321,84.871]],[\"comment/6905\",[]],[\"name/6906\",[1322,84.871]],[\"comment/6906\",[]],[\"name/6907\",[1323,84.871]],[\"comment/6907\",[]],[\"name/6908\",[1324,84.871]],[\"comment/6908\",[]],[\"name/6909\",[1298,79.762]],[\"comment/6909\",[]],[\"name/6910\",[1325,84.871]],[\"comment/6910\",[]],[\"name/6911\",[1326,84.871]],[\"comment/6911\",[]],[\"name/6912\",[85,71.876]],[\"comment/6912\",[]],[\"name/6913\",[84,71.876]],[\"comment/6913\",[]],[\"name/6914\",[471,70.205]],[\"comment/6914\",[]],[\"name/6915\",[9,46.22]],[\"comment/6915\",[]],[\"name/6916\",[1327,84.871]],[\"comment/6916\",[]],[\"name/6917\",[1328,84.871]],[\"comment/6917\",[]],[\"name/6918\",[1329,84.871]],[\"comment/6918\",[]],[\"name/6919\",[340,70.205]],[\"comment/6919\",[]],[\"name/6920\",[15,46.945]],[\"comment/6920\",[]],[\"name/6921\",[16,44.087]],[\"comment/6921\",[]],[\"name/6922\",[215,71.876]],[\"comment/6922\",[]],[\"name/6923\",[1330,84.871]],[\"comment/6923\",[]],[\"name/6924\",[1331,84.871]],[\"comment/6924\",[]],[\"name/6925\",[1332,84.871]],[\"comment/6925\",[]],[\"name/6926\",[1333,84.871]],[\"comment/6926\",[]],[\"name/6927\",[1334,84.871]],[\"comment/6927\",[]],[\"name/6928\",[217,71.876]],[\"comment/6928\",[]],[\"name/6929\",[1335,84.871]],[\"comment/6929\",[]],[\"name/6930\",[1336,84.871]],[\"comment/6930\",[]],[\"name/6931\",[1337,84.871]],[\"comment/6931\",[]],[\"name/6932\",[1338,84.871]],[\"comment/6932\",[]],[\"name/6933\",[1339,84.871]],[\"comment/6933\",[]],[\"name/6934\",[1340,84.871]],[\"comment/6934\",[]],[\"name/6935\",[1341,84.871]],[\"comment/6935\",[]],[\"name/6936\",[1342,84.871]],[\"comment/6936\",[]],[\"name/6937\",[1343,84.871]],[\"comment/6937\",[]],[\"name/6938\",[25,44.668]],[\"comment/6938\",[]],[\"name/6939\",[44,47.097]],[\"comment/6939\",[]],[\"name/6940\",[45,47.097]],[\"comment/6940\",[]],[\"name/6941\",[46,47.097]],[\"comment/6941\",[]],[\"name/6942\",[47,47.097]],[\"comment/6942\",[]],[\"name/6943\",[48,47.097]],[\"comment/6943\",[]],[\"name/6944\",[49,47.097]],[\"comment/6944\",[]],[\"name/6945\",[50,47.097]],[\"comment/6945\",[]],[\"name/6946\",[51,47.097]],[\"comment/6946\",[]],[\"name/6947\",[52,47.097]],[\"comment/6947\",[]],[\"name/6948\",[53,47.097]],[\"comment/6948\",[]],[\"name/6949\",[54,47.097]],[\"comment/6949\",[]],[\"name/6950\",[55,47.097]],[\"comment/6950\",[]],[\"name/6951\",[56,47.097]],[\"comment/6951\",[]],[\"name/6952\",[57,47.097]],[\"comment/6952\",[]],[\"name/6953\",[58,47.097]],[\"comment/6953\",[]],[\"name/6954\",[59,47.097]],[\"comment/6954\",[]],[\"name/6955\",[60,47.097]],[\"comment/6955\",[]],[\"name/6956\",[61,47.097]],[\"comment/6956\",[]],[\"name/6957\",[62,47.097]],[\"comment/6957\",[]],[\"name/6958\",[63,46.796]],[\"comment/6958\",[]],[\"name/6959\",[64,46.796]],[\"comment/6959\",[]],[\"name/6960\",[65,47.097]],[\"comment/6960\",[]],[\"name/6961\",[66,43.221]],[\"comment/6961\",[]],[\"name/6962\",[67,46.649]],[\"comment/6962\",[]],[\"name/6963\",[68,46.649]],[\"comment/6963\",[]],[\"name/6964\",[69,47.097]],[\"comment/6964\",[]],[\"name/6965\",[70,46.945]],[\"comment/6965\",[]],[\"name/6966\",[71,46.945]],[\"comment/6966\",[]],[\"name/6967\",[72,47.097]],[\"comment/6967\",[]],[\"name/6968\",[73,47.097]],[\"comment/6968\",[]],[\"name/6969\",[74,47.097]],[\"comment/6969\",[]],[\"name/6970\",[75,46.945]],[\"comment/6970\",[]],[\"name/6971\",[76,46.796]],[\"comment/6971\",[]],[\"name/6972\",[77,46.796]],[\"comment/6972\",[]],[\"name/6973\",[1344,84.871]],[\"comment/6973\",[]],[\"name/6974\",[1345,84.871]],[\"comment/6974\",[]],[\"name/6975\",[1346,84.871]],[\"comment/6975\",[]],[\"name/6976\",[1347,84.871]],[\"comment/6976\",[]],[\"name/6977\",[1348,84.871]],[\"comment/6977\",[]],[\"name/6978\",[1349,84.871]],[\"comment/6978\",[]],[\"name/6979\",[1350,84.871]],[\"comment/6979\",[]],[\"name/6980\",[1351,84.871]],[\"comment/6980\",[]],[\"name/6981\",[1352,84.871]],[\"comment/6981\",[]],[\"name/6982\",[1353,84.871]],[\"comment/6982\",[]],[\"name/6983\",[1354,84.871]],[\"comment/6983\",[]],[\"name/6984\",[1355,84.871]],[\"comment/6984\",[]],[\"name/6985\",[9,46.22]],[\"comment/6985\",[]],[\"name/6986\",[7,63.664]],[\"comment/6986\",[]],[\"name/6987\",[86,71.876]],[\"comment/6987\",[]],[\"name/6988\",[100,71.876]],[\"comment/6988\",[]],[\"name/6989\",[522,76.396]],[\"comment/6989\",[]],[\"name/6990\",[103,73.883]],[\"comment/6990\",[]],[\"name/6991\",[199,71.876]],[\"comment/6991\",[]],[\"name/6992\",[232,76.396]],[\"comment/6992\",[]],[\"name/6993\",[332,71.876]],[\"comment/6993\",[]],[\"name/6994\",[370,66.409]],[\"comment/6994\",[]],[\"name/6995\",[378,73.883]],[\"comment/6995\",[]],[\"name/6996\",[384,76.396]],[\"comment/6996\",[]],[\"name/6997\",[396,73.883]],[\"comment/6997\",[]],[\"name/6998\",[400,73.883]],[\"comment/6998\",[]],[\"name/6999\",[480,73.883]],[\"comment/6999\",[]],[\"name/7000\",[523,76.396]],[\"comment/7000\",[]],[\"name/7001\",[524,76.396]],[\"comment/7001\",[]],[\"name/7002\",[495,73.883]],[\"comment/7002\",[]],[\"name/7003\",[310,66.409]],[\"comment/7003\",[]],[\"name/7004\",[493,73.883]],[\"comment/7004\",[]],[\"name/7005\",[500,73.883]],[\"comment/7005\",[]],[\"name/7006\",[501,73.883]],[\"comment/7006\",[]],[\"name/7007\",[525,76.396]],[\"comment/7007\",[]],[\"name/7008\",[527,73.883]],[\"comment/7008\",[]],[\"name/7009\",[498,73.883]],[\"comment/7009\",[]],[\"name/7010\",[528,76.396]],[\"comment/7010\",[]],[\"name/7011\",[508,73.883]],[\"comment/7011\",[]],[\"name/7012\",[413,67.521]],[\"comment/7012\",[]],[\"name/7013\",[530,73.883]],[\"comment/7013\",[]],[\"name/7014\",[517,73.883]],[\"comment/7014\",[]],[\"name/7015\",[502,71.876]],[\"comment/7015\",[]],[\"name/7016\",[531,76.396]],[\"comment/7016\",[]],[\"name/7017\",[516,71.876]],[\"comment/7017\",[]],[\"name/7018\",[533,76.396]],[\"comment/7018\",[]],[\"name/7019\",[494,73.883]],[\"comment/7019\",[]],[\"name/7020\",[534,76.396]],[\"comment/7020\",[]],[\"name/7021\",[482,67.521]],[\"comment/7021\",[]],[\"name/7022\",[509,73.883]],[\"comment/7022\",[]],[\"name/7023\",[535,76.396]],[\"comment/7023\",[]],[\"name/7024\",[512,73.883]],[\"comment/7024\",[]],[\"name/7025\",[536,76.396]],[\"comment/7025\",[]],[\"name/7026\",[492,73.883]],[\"comment/7026\",[]],[\"name/7027\",[1128,79.762]],[\"comment/7027\",[]],[\"name/7028\",[537,76.396]],[\"comment/7028\",[]],[\"name/7029\",[538,76.396]],[\"comment/7029\",[]],[\"name/7030\",[511,73.883]],[\"comment/7030\",[]],[\"name/7031\",[443,63.664]],[\"comment/7031\",[]],[\"name/7032\",[1165,79.762]],[\"comment/7032\",[]],[\"name/7033\",[505,71.876]],[\"comment/7033\",[]],[\"name/7034\",[295,68.773]],[\"comment/7034\",[]],[\"name/7035\",[515,73.883]],[\"comment/7035\",[]],[\"name/7036\",[499,73.883]],[\"comment/7036\",[]],[\"name/7037\",[540,76.396]],[\"comment/7037\",[]],[\"name/7038\",[491,73.883]],[\"comment/7038\",[]],[\"name/7039\",[541,76.396]],[\"comment/7039\",[]],[\"name/7040\",[514,73.883]],[\"comment/7040\",[]],[\"name/7041\",[503,73.883]],[\"comment/7041\",[]],[\"name/7042\",[496,73.883]],[\"comment/7042\",[]],[\"name/7043\",[1268,79.762]],[\"comment/7043\",[]],[\"name/7044\",[543,73.883]],[\"comment/7044\",[]],[\"name/7045\",[497,73.883]],[\"comment/7045\",[]],[\"name/7046\",[544,73.883]],[\"comment/7046\",[]],[\"name/7047\",[471,70.205]],[\"comment/7047\",[]],[\"name/7048\",[546,76.396]],[\"comment/7048\",[]],[\"name/7049\",[513,73.883]],[\"comment/7049\",[]],[\"name/7050\",[472,71.876]],[\"comment/7050\",[]],[\"name/7051\",[547,76.396]],[\"comment/7051\",[]],[\"name/7052\",[1356,84.871]],[\"comment/7052\",[]],[\"name/7053\",[1357,84.871]],[\"comment/7053\",[]],[\"name/7054\",[1358,84.871]],[\"comment/7054\",[]],[\"name/7055\",[1359,84.871]],[\"comment/7055\",[]],[\"name/7056\",[1360,84.871]],[\"comment/7056\",[]],[\"name/7057\",[1361,84.871]],[\"comment/7057\",[]],[\"name/7058\",[1362,84.871]],[\"comment/7058\",[]],[\"name/7059\",[1363,84.871]],[\"comment/7059\",[]],[\"name/7060\",[1364,79.762]],[\"comment/7060\",[]],[\"name/7061\",[16,44.087]],[\"comment/7061\",[]],[\"name/7062\",[96,67.521]],[\"comment/7062\",[]],[\"name/7063\",[1365,84.871]],[\"comment/7063\",[]],[\"name/7064\",[518,79.762]],[\"comment/7064\",[]],[\"name/7065\",[1366,84.871]],[\"comment/7065\",[]],[\"name/7066\",[1367,84.871]],[\"comment/7066\",[]],[\"name/7067\",[982,79.762]],[\"comment/7067\",[]],[\"name/7068\",[1368,84.871]],[\"comment/7068\",[]],[\"name/7069\",[1369,84.871]],[\"comment/7069\",[]],[\"name/7070\",[1370,84.871]],[\"comment/7070\",[]],[\"name/7071\",[1364,79.762]],[\"comment/7071\",[]],[\"name/7072\",[16,44.087]],[\"comment/7072\",[]],[\"name/7073\",[1371,84.871]],[\"comment/7073\",[]],[\"name/7074\",[1372,79.762]],[\"comment/7074\",[]],[\"name/7075\",[1373,79.762]],[\"comment/7075\",[]],[\"name/7076\",[1374,79.762]],[\"comment/7076\",[]],[\"name/7077\",[1375,79.762]],[\"comment/7077\",[]],[\"name/7078\",[1376,79.762]],[\"comment/7078\",[]],[\"name/7079\",[546,76.396]],[\"comment/7079\",[]],[\"name/7080\",[9,46.22]],[\"comment/7080\",[]],[\"name/7081\",[10,58.239]],[\"comment/7081\",[]],[\"name/7082\",[1377,84.871]],[\"comment/7082\",[]],[\"name/7083\",[13,54.107]],[\"comment/7083\",[]],[\"name/7084\",[14,59.743]],[\"comment/7084\",[]],[\"name/7085\",[15,46.945]],[\"comment/7085\",[]],[\"name/7086\",[16,44.087]],[\"comment/7086\",[]],[\"name/7087\",[18,52.946]],[\"comment/7087\",[]],[\"name/7088\",[1378,79.762]],[\"comment/7088\",[]],[\"name/7089\",[1379,84.871]],[\"comment/7089\",[]],[\"name/7090\",[25,44.668]],[\"comment/7090\",[]],[\"name/7091\",[22,49.502]],[\"comment/7091\",[]],[\"name/7092\",[26,50.524]],[\"comment/7092\",[]],[\"name/7093\",[27,60.887]],[\"comment/7093\",[]],[\"name/7094\",[28,60.887]],[\"comment/7094\",[]],[\"name/7095\",[23,60.887]],[\"comment/7095\",[]],[\"name/7096\",[29,60.887]],[\"comment/7096\",[]],[\"name/7097\",[30,60.887]],[\"comment/7097\",[]],[\"name/7098\",[31,60.887]],[\"comment/7098\",[]],[\"name/7099\",[32,53.509]],[\"comment/7099\",[]],[\"name/7100\",[33,53.509]],[\"comment/7100\",[]],[\"name/7101\",[34,53.509]],[\"comment/7101\",[]],[\"name/7102\",[35,56.148]],[\"comment/7102\",[]],[\"name/7103\",[36,55.778]],[\"comment/7103\",[]],[\"name/7104\",[37,60.887]],[\"comment/7104\",[]],[\"name/7105\",[38,59.743]],[\"comment/7105\",[]],[\"name/7106\",[39,60.887]],[\"comment/7106\",[]],[\"name/7107\",[40,60.887]],[\"comment/7107\",[]],[\"name/7108\",[41,52.675]],[\"comment/7108\",[]],[\"name/7109\",[42,52.675]],[\"comment/7109\",[]],[\"name/7110\",[43,60.887]],[\"comment/7110\",[]],[\"name/7111\",[44,47.097]],[\"comment/7111\",[]],[\"name/7112\",[45,47.097]],[\"comment/7112\",[]],[\"name/7113\",[46,47.097]],[\"comment/7113\",[]],[\"name/7114\",[47,47.097]],[\"comment/7114\",[]],[\"name/7115\",[48,47.097]],[\"comment/7115\",[]],[\"name/7116\",[49,47.097]],[\"comment/7116\",[]],[\"name/7117\",[50,47.097]],[\"comment/7117\",[]],[\"name/7118\",[51,47.097]],[\"comment/7118\",[]],[\"name/7119\",[52,47.097]],[\"comment/7119\",[]],[\"name/7120\",[53,47.097]],[\"comment/7120\",[]],[\"name/7121\",[54,47.097]],[\"comment/7121\",[]],[\"name/7122\",[55,47.097]],[\"comment/7122\",[]],[\"name/7123\",[56,47.097]],[\"comment/7123\",[]],[\"name/7124\",[57,47.097]],[\"comment/7124\",[]],[\"name/7125\",[58,47.097]],[\"comment/7125\",[]],[\"name/7126\",[59,47.097]],[\"comment/7126\",[]],[\"name/7127\",[60,47.097]],[\"comment/7127\",[]],[\"name/7128\",[61,47.097]],[\"comment/7128\",[]],[\"name/7129\",[62,47.097]],[\"comment/7129\",[]],[\"name/7130\",[63,46.796]],[\"comment/7130\",[]],[\"name/7131\",[64,46.796]],[\"comment/7131\",[]],[\"name/7132\",[65,47.097]],[\"comment/7132\",[]],[\"name/7133\",[66,43.221]],[\"comment/7133\",[]],[\"name/7134\",[67,46.649]],[\"comment/7134\",[]],[\"name/7135\",[68,46.649]],[\"comment/7135\",[]],[\"name/7136\",[69,47.097]],[\"comment/7136\",[]],[\"name/7137\",[70,46.945]],[\"comment/7137\",[]],[\"name/7138\",[71,46.945]],[\"comment/7138\",[]],[\"name/7139\",[72,47.097]],[\"comment/7139\",[]],[\"name/7140\",[73,47.097]],[\"comment/7140\",[]],[\"name/7141\",[74,47.097]],[\"comment/7141\",[]],[\"name/7142\",[75,46.945]],[\"comment/7142\",[]],[\"name/7143\",[76,46.796]],[\"comment/7143\",[]],[\"name/7144\",[77,46.796]],[\"comment/7144\",[]],[\"name/7145\",[513,73.883]],[\"comment/7145\",[]],[\"name/7146\",[8,57.35]],[\"comment/7146\",[]],[\"name/7147\",[9,46.22]],[\"comment/7147\",[]],[\"name/7148\",[15,46.945]],[\"comment/7148\",[]],[\"name/7149\",[16,44.087]],[\"comment/7149\",[]],[\"name/7150\",[18,52.946]],[\"comment/7150\",[]],[\"name/7151\",[1,44.315]],[\"comment/7151\",[]],[\"name/7152\",[1374,79.762]],[\"comment/7152\",[]],[\"name/7153\",[1372,79.762]],[\"comment/7153\",[]],[\"name/7154\",[1373,79.762]],[\"comment/7154\",[]],[\"name/7155\",[1375,79.762]],[\"comment/7155\",[]],[\"name/7156\",[1376,79.762]],[\"comment/7156\",[]],[\"name/7157\",[385,67.521]],[\"comment/7157\",[]],[\"name/7158\",[1378,79.762]],[\"comment/7158\",[]],[\"name/7159\",[25,44.668]],[\"comment/7159\",[]],[\"name/7160\",[44,47.097]],[\"comment/7160\",[]],[\"name/7161\",[45,47.097]],[\"comment/7161\",[]],[\"name/7162\",[46,47.097]],[\"comment/7162\",[]],[\"name/7163\",[47,47.097]],[\"comment/7163\",[]],[\"name/7164\",[48,47.097]],[\"comment/7164\",[]],[\"name/7165\",[49,47.097]],[\"comment/7165\",[]],[\"name/7166\",[50,47.097]],[\"comment/7166\",[]],[\"name/7167\",[51,47.097]],[\"comment/7167\",[]],[\"name/7168\",[52,47.097]],[\"comment/7168\",[]],[\"name/7169\",[53,47.097]],[\"comment/7169\",[]],[\"name/7170\",[54,47.097]],[\"comment/7170\",[]],[\"name/7171\",[55,47.097]],[\"comment/7171\",[]],[\"name/7172\",[56,47.097]],[\"comment/7172\",[]],[\"name/7173\",[57,47.097]],[\"comment/7173\",[]],[\"name/7174\",[58,47.097]],[\"comment/7174\",[]],[\"name/7175\",[59,47.097]],[\"comment/7175\",[]],[\"name/7176\",[60,47.097]],[\"comment/7176\",[]],[\"name/7177\",[61,47.097]],[\"comment/7177\",[]],[\"name/7178\",[62,47.097]],[\"comment/7178\",[]],[\"name/7179\",[63,46.796]],[\"comment/7179\",[]],[\"name/7180\",[64,46.796]],[\"comment/7180\",[]],[\"name/7181\",[65,47.097]],[\"comment/7181\",[]],[\"name/7182\",[66,43.221]],[\"comment/7182\",[]],[\"name/7183\",[67,46.649]],[\"comment/7183\",[]],[\"name/7184\",[68,46.649]],[\"comment/7184\",[]],[\"name/7185\",[69,47.097]],[\"comment/7185\",[]],[\"name/7186\",[70,46.945]],[\"comment/7186\",[]],[\"name/7187\",[71,46.945]],[\"comment/7187\",[]],[\"name/7188\",[72,47.097]],[\"comment/7188\",[]],[\"name/7189\",[73,47.097]],[\"comment/7189\",[]],[\"name/7190\",[74,47.097]],[\"comment/7190\",[]],[\"name/7191\",[75,46.945]],[\"comment/7191\",[]],[\"name/7192\",[76,46.796]],[\"comment/7192\",[]],[\"name/7193\",[77,46.796]],[\"comment/7193\",[]],[\"name/7194\",[1380,84.871]],[\"comment/7194\",[]],[\"name/7195\",[572,79.762]],[\"comment/7195\",[]],[\"name/7196\",[573,79.762]],[\"comment/7196\",[]],[\"name/7197\",[565,71.876]],[\"comment/7197\",[]],[\"name/7198\",[556,79.762]],[\"comment/7198\",[]],[\"name/7199\",[1381,84.871]],[\"comment/7199\",[]],[\"name/7200\",[1382,84.871]],[\"comment/7200\",[]],[\"name/7201\",[1383,84.871]],[\"comment/7201\",[]],[\"name/7202\",[472,71.876]],[\"comment/7202\",[]],[\"name/7203\",[9,46.22]],[\"comment/7203\",[]],[\"name/7204\",[1384,84.871]],[\"comment/7204\",[]],[\"name/7205\",[15,46.945]],[\"comment/7205\",[]],[\"name/7206\",[16,44.087]],[\"comment/7206\",[]],[\"name/7207\",[1385,84.871]],[\"comment/7207\",[]],[\"name/7208\",[1386,84.871]],[\"comment/7208\",[]],[\"name/7209\",[1387,84.871]],[\"comment/7209\",[]],[\"name/7210\",[1388,84.871]],[\"comment/7210\",[]],[\"name/7211\",[1285,79.762]],[\"comment/7211\",[]],[\"name/7212\",[1389,84.871]],[\"comment/7212\",[]],[\"name/7213\",[1390,84.871]],[\"comment/7213\",[]],[\"name/7214\",[651,79.762]],[\"comment/7214\",[]],[\"name/7215\",[1391,84.871]],[\"comment/7215\",[]],[\"name/7216\",[130,54.107]],[\"comment/7216\",[]],[\"name/7217\",[128,54.419]],[\"comment/7217\",[]],[\"name/7218\",[62,47.097]],[\"comment/7218\",[]],[\"name/7219\",[1392,84.871]],[\"comment/7219\",[]],[\"name/7220\",[1393,84.871]],[\"comment/7220\",[]],[\"name/7221\",[1394,84.871]],[\"comment/7221\",[]],[\"name/7222\",[1395,84.871]],[\"comment/7222\",[]],[\"name/7223\",[1291,79.762]],[\"comment/7223\",[]],[\"name/7224\",[1396,84.871]],[\"comment/7224\",[]],[\"name/7225\",[109,56.533]],[\"comment/7225\",[]],[\"name/7226\",[129,54.419]],[\"comment/7226\",[]],[\"name/7227\",[25,44.668]],[\"comment/7227\",[]],[\"name/7228\",[44,47.097]],[\"comment/7228\",[]],[\"name/7229\",[45,47.097]],[\"comment/7229\",[]],[\"name/7230\",[46,47.097]],[\"comment/7230\",[]],[\"name/7231\",[47,47.097]],[\"comment/7231\",[]],[\"name/7232\",[48,47.097]],[\"comment/7232\",[]],[\"name/7233\",[49,47.097]],[\"comment/7233\",[]],[\"name/7234\",[50,47.097]],[\"comment/7234\",[]],[\"name/7235\",[51,47.097]],[\"comment/7235\",[]],[\"name/7236\",[52,47.097]],[\"comment/7236\",[]],[\"name/7237\",[53,47.097]],[\"comment/7237\",[]],[\"name/7238\",[54,47.097]],[\"comment/7238\",[]],[\"name/7239\",[55,47.097]],[\"comment/7239\",[]],[\"name/7240\",[56,47.097]],[\"comment/7240\",[]],[\"name/7241\",[57,47.097]],[\"comment/7241\",[]],[\"name/7242\",[58,47.097]],[\"comment/7242\",[]],[\"name/7243\",[59,47.097]],[\"comment/7243\",[]],[\"name/7244\",[60,47.097]],[\"comment/7244\",[]],[\"name/7245\",[61,47.097]],[\"comment/7245\",[]],[\"name/7246\",[63,46.796]],[\"comment/7246\",[]],[\"name/7247\",[64,46.796]],[\"comment/7247\",[]],[\"name/7248\",[65,47.097]],[\"comment/7248\",[]],[\"name/7249\",[66,43.221]],[\"comment/7249\",[]],[\"name/7250\",[67,46.649]],[\"comment/7250\",[]],[\"name/7251\",[68,46.649]],[\"comment/7251\",[]],[\"name/7252\",[69,47.097]],[\"comment/7252\",[]],[\"name/7253\",[70,46.945]],[\"comment/7253\",[]],[\"name/7254\",[71,46.945]],[\"comment/7254\",[]],[\"name/7255\",[72,47.097]],[\"comment/7255\",[]],[\"name/7256\",[73,47.097]],[\"comment/7256\",[]],[\"name/7257\",[74,47.097]],[\"comment/7257\",[]],[\"name/7258\",[75,46.945]],[\"comment/7258\",[]],[\"name/7259\",[76,46.796]],[\"comment/7259\",[]],[\"name/7260\",[77,46.796]],[\"comment/7260\",[]],[\"name/7261\",[1397,84.871]],[\"comment/7261\",[]],[\"name/7262\",[1398,84.871]],[\"comment/7262\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":1,\"name\":{\"1\":{},\"20\":{},\"177\":{},\"251\":{},\"300\":{},\"390\":{},\"472\":{},\"630\":{},\"775\":{},\"776\":{},\"852\":{},\"901\":{},\"1002\":{},\"1051\":{},\"1252\":{},\"1304\":{},\"1410\":{},\"1413\":{},\"1474\":{},\"1591\":{},\"1601\":{},\"1612\":{},\"1846\":{},\"1858\":{},\"1904\":{},\"2026\":{},\"2113\":{},\"2161\":{},\"2299\":{},\"2341\":{},\"2349\":{},\"2467\":{},\"2543\":{},\"2551\":{},\"2583\":{},\"2705\":{},\"2710\":{},\"2792\":{},\"2841\":{},\"3029\":{},\"3162\":{},\"3211\":{},\"3340\":{},\"3388\":{},\"3547\":{},\"3675\":{},\"3677\":{},\"3716\":{},\"3726\":{},\"3872\":{},\"3920\":{},\"4246\":{},\"4301\":{},\"4307\":{},\"4502\":{},\"4547\":{},\"4555\":{},\"4668\":{},\"4806\":{},\"4928\":{},\"5071\":{},\"5136\":{},\"5148\":{},\"5196\":{},\"5352\":{},\"5366\":{},\"5425\":{},\"5446\":{},\"5608\":{},\"5616\":{},\"5648\":{},\"5776\":{},\"5937\":{},\"6005\":{},\"6068\":{},\"6117\":{},\"6268\":{},\"6317\":{},\"6399\":{},\"6404\":{},\"6529\":{},\"6531\":{},\"6540\":{},\"6700\":{},\"6749\":{},\"7151\":{}},\"comment\":{}}],[\"above\",{\"_index\":817,\"name\":{\"2923\":{},\"4368\":{}},\"comment\":{}}],[\"abovecode\",{\"_index\":97,\"name\":{\"163\":{}},\"comment\":{}}],[\"accid\",{\"_index\":439,\"name\":{\"1295\":{}},\"comment\":{}}],[\"accidental\",{\"_index\":7,\"name\":{\"8\":{},\"1266\":{},\"1446\":{},\"1478\":{},\"1623\":{},\"2707\":{},\"2712\":{},\"3074\":{},\"3077\":{},\"3080\":{},\"3120\":{},\"6986\":{}},\"comment\":{}}],[\"accidentallowerpadding\",{\"_index\":913,\"name\":{\"3549\":{}},\"comment\":{}}],[\"accidentalmap\",{\"_index\":574,\"name\":{\"1595\":{}},\"comment\":{}}],[\"accidentals\",{\"_index\":426,\"name\":{\"1279\":{},\"1307\":{},\"3099\":{}},\"comment\":{}}],[\"accidentalspacing\",{\"_index\":808,\"name\":{\"2716\":{}},\"comment\":{}}],[\"accidentalupperpadding\",{\"_index\":912,\"name\":{\"3548\":{}},\"comment\":{}}],[\"accidentalvalue\",{\"_index\":853,\"name\":{\"3084\":{}},\"comment\":{}}],[\"add\",{\"_index\":275,\"name\":{\"582\":{},\"1732\":{},\"3829\":{},\"5460\":{}},\"comment\":{}}],[\"addbeziercurve\",{\"_index\":265,\"name\":{\"568\":{}},\"comment\":{}}],[\"addchildelement\",{\"_index\":44,\"name\":{\"46\":{},\"127\":{},\"201\":{},\"344\":{},\"422\":{},\"501\":{},\"731\":{},\"804\":{},\"946\":{},\"1096\":{},\"1152\":{},\"1217\":{},\"1373\":{},\"1783\":{},\"1945\":{},\"2060\":{},\"2206\":{},\"2426\":{},\"2493\":{},\"2665\":{},\"2745\":{},\"2885\":{},\"2952\":{},\"3038\":{},\"3257\":{},\"3431\":{},\"3493\":{},\"3576\":{},\"3639\":{},\"3737\":{},\"3965\":{},\"4085\":{},\"4152\":{},\"4202\":{},\"4258\":{},\"4325\":{},\"4392\":{},\"4632\":{},\"4704\":{},\"4761\":{},\"4826\":{},\"4884\":{},\"4943\":{},\"5005\":{},\"5079\":{},\"5239\":{},\"5315\":{},\"5390\":{},\"5539\":{},\"5730\":{},\"5790\":{},\"5898\":{},\"5952\":{},\"6020\":{},\"6162\":{},\"6362\":{},\"6453\":{},\"6580\":{},\"6653\":{},\"6793\":{},\"6856\":{},\"6939\":{},\"7111\":{},\"7160\":{},\"7228\":{}},\"comment\":{}}],[\"addchord\",{\"_index\":458,\"name\":{\"1330\":{}},\"comment\":{}}],[\"addclass\",{\"_index\":53,\"name\":{\"55\":{},\"136\":{},\"210\":{},\"353\":{},\"431\":{},\"510\":{},\"740\":{},\"813\":{},\"955\":{},\"1105\":{},\"1161\":{},\"1226\":{},\"1383\":{},\"1792\":{},\"1954\":{},\"2069\":{},\"2215\":{},\"2434\":{},\"2502\":{},\"2674\":{},\"2754\":{},\"2894\":{},\"2961\":{},\"3047\":{},\"3267\":{},\"3440\":{},\"3502\":{},\"3585\":{},\"3648\":{},\"3746\":{},\"3974\":{},\"4093\":{},\"4161\":{},\"4211\":{},\"4267\":{},\"4334\":{},\"4401\":{},\"4640\":{},\"4713\":{},\"4770\":{},\"4835\":{},\"4893\":{},\"4952\":{},\"5014\":{},\"5088\":{},\"5249\":{},\"5324\":{},\"5399\":{},\"5548\":{},\"5739\":{},\"5799\":{},\"5906\":{},\"5961\":{},\"6028\":{},\"6171\":{},\"6371\":{},\"6463\":{},\"6589\":{},\"6662\":{},\"6802\":{},\"6865\":{},\"6948\":{},\"7120\":{},\"7169\":{},\"7237\":{}},\"comment\":{}}],[\"addclef\",{\"_index\":1040,\"name\":{\"4072\":{},\"5885\":{}},\"comment\":{}}],[\"addcommithook\",{\"_index\":450,\"name\":{\"1322\":{},\"1358\":{}},\"comment\":{}}],[\"addconnector\",{\"_index\":1214,\"name\":{\"5534\":{}},\"comment\":{}}],[\"addendclef\",{\"_index\":1041,\"name\":{\"4073\":{},\"5886\":{}},\"comment\":{}}],[\"addendmodifier\",{\"_index\":1029,\"name\":{\"4060\":{},\"5873\":{}},\"comment\":{}}],[\"addendnote\",{\"_index\":1182,\"name\":{\"5369\":{}},\"comment\":{}}],[\"addendtimesignature\",{\"_index\":1043,\"name\":{\"4075\":{},\"5888\":{}},\"comment\":{}}],[\"addglyph\",{\"_index\":355,\"name\":{\"700\":{}},\"comment\":{}}],[\"addglyphortext\",{\"_index\":356,\"name\":{\"701\":{}},\"comment\":{}}],[\"addglyphsuperscript\",{\"_index\":354,\"name\":{\"699\":{}},\"comment\":{}}],[\"addkeysignature\",{\"_index\":1039,\"name\":{\"4071\":{},\"5884\":{}},\"comment\":{}}],[\"addline\",{\"_index\":357,\"name\":{\"702\":{}},\"comment\":{}}],[\"addmember\",{\"_index\":826,\"name\":{\"2999\":{}},\"comment\":{}}],[\"addmodifier\",{\"_index\":156,\"name\":{\"297\":{},\"898\":{},\"1048\":{},\"1901\":{},\"2158\":{},\"2388\":{},\"2625\":{},\"2838\":{},\"2998\":{},\"3208\":{},\"3385\":{},\"3917\":{},\"4059\":{},\"4594\":{},\"5193\":{},\"5690\":{},\"5872\":{},\"6114\":{},\"6314\":{},\"6433\":{},\"6746\":{}},\"comment\":{}}],[\"addnote\",{\"_index\":456,\"name\":{\"1328\":{}},\"comment\":{}}],[\"addnoteoption\",{\"_index\":455,\"name\":{\"1327\":{}},\"comment\":{}}],[\"addpoint\",{\"_index\":261,\"name\":{\"564\":{}},\"comment\":{}}],[\"addquadraticcurve\",{\"_index\":264,\"name\":{\"567\":{}},\"comment\":{}}],[\"addsinglenote\",{\"_index\":457,\"name\":{\"1329\":{}},\"comment\":{}}],[\"addstave\",{\"_index\":1215,\"name\":{\"5535\":{}},\"comment\":{}}],[\"addstroke\",{\"_index\":127,\"name\":{\"268\":{},\"869\":{},\"1019\":{},\"1874\":{},\"2130\":{},\"2365\":{},\"2600\":{},\"2809\":{},\"3179\":{},\"3357\":{},\"3889\":{},\"4571\":{},\"5165\":{},\"5665\":{},\"6085\":{},\"6285\":{},\"6717\":{}},\"comment\":{}}],[\"addsymbolblock\",{\"_index\":350,\"name\":{\"695\":{}},\"comment\":{}}],[\"addtabglyph\",{\"_index\":1228,\"name\":{\"5832\":{}},\"comment\":{}}],[\"addtext\",{\"_index\":351,\"name\":{\"696\":{}},\"comment\":{}}],[\"addtextsubscript\",{\"_index\":353,\"name\":{\"698\":{}},\"comment\":{}}],[\"addtextsuperscript\",{\"_index\":352,\"name\":{\"697\":{}},\"comment\":{}}],[\"addtickable\",{\"_index\":1291,\"name\":{\"6525\":{},\"7223\":{}},\"comment\":{}}],[\"addtickables\",{\"_index\":1396,\"name\":{\"7224\":{}},\"comment\":{}}],[\"addtimesignature\",{\"_index\":1042,\"name\":{\"4074\":{},\"5887\":{}},\"comment\":{}}],[\"addtomodifiercontext\",{\"_index\":108,\"name\":{\"244\":{},\"932\":{},\"1082\":{},\"1825\":{},\"2192\":{},\"2413\":{},\"2652\":{},\"2785\":{},\"3242\":{},\"3417\":{},\"3951\":{},\"4619\":{},\"5225\":{},\"5717\":{},\"6148\":{},\"6348\":{},\"6432\":{},\"6693\":{}},\"comment\":{}}],[\"addtostave\",{\"_index\":812,\"name\":{\"2723\":{}},\"comment\":{}}],[\"addtrebleglyph\",{\"_index\":1044,\"name\":{\"4076\":{},\"5889\":{}},\"comment\":{}}],[\"addvoices\",{\"_index\":1216,\"name\":{\"5536\":{}},\"comment\":{}}],[\"addx\",{\"_index\":262,\"name\":{\"565\":{}},\"comment\":{}}],[\"addy\",{\"_index\":263,\"name\":{\"566\":{}},\"comment\":{}}],[\"adjustheightforbeam\",{\"_index\":1164,\"name\":{\"5077\":{}},\"comment\":{}}],[\"adjustheightforflag\",{\"_index\":1163,\"name\":{\"5076\":{}},\"comment\":{}}],[\"advancewidth\",{\"_index\":313,\"name\":{\"626\":{},\"1643\":{}},\"comment\":{}}],[\"align_center\",{\"_index\":755,\"name\":{\"2254\":{},\"3150\":{},\"3314\":{},\"4462\":{},\"5590\":{},\"6248\":{}},\"comment\":{}}],[\"align_rests\",{\"_index\":637,\"name\":{\"1685\":{}},\"comment\":{}}],[\"alignmentcontexts\",{\"_index\":640,\"name\":{\"1689\":{}},\"comment\":{}}],[\"alignmentmodifiercontexts\",{\"_index\":645,\"name\":{\"1694\":{}},\"comment\":{}}],[\"alignrests\",{\"_index\":652,\"name\":{\"1707\":{}},\"comment\":{}}],[\"alignreststonotes\",{\"_index\":650,\"name\":{\"1704\":{}},\"comment\":{}}],[\"alignsubnoteswithnote\",{\"_index\":43,\"name\":{\"45\":{},\"126\":{},\"200\":{},\"500\":{},\"730\":{},\"1216\":{},\"1782\":{},\"2492\":{},\"2951\":{},\"3492\":{},\"3575\":{},\"3638\":{},\"5314\":{},\"5389\":{},\"6855\":{},\"7110\":{}},\"comment\":{}}],[\"alpha\",{\"_index\":1198,\"name\":{\"5497\":{}},\"comment\":{}}],[\"alterkey\",{\"_index\":815,\"name\":{\"2728\":{}},\"comment\":{}}],[\"annotation\",{\"_index\":86,\"name\":{\"90\":{},\"786\":{},\"1447\":{},\"1479\":{},\"6987\":{}},\"comment\":{}}],[\"annotation_spacing\",{\"_index\":120,\"name\":{\"260\":{},\"861\":{},\"1011\":{},\"1867\":{},\"2122\":{},\"2358\":{},\"2592\":{},\"2801\":{},\"3171\":{},\"3349\":{},\"3881\":{},\"4564\":{},\"5157\":{},\"5657\":{},\"6077\":{},\"6277\":{},\"6709\":{}},\"comment\":{}}],[\"annotationhorizontaljustify\",{\"_index\":78,\"name\":{\"80\":{},\"1558\":{}},\"comment\":{}}],[\"annotations\",{\"_index\":369,\"name\":{\"774\":{}},\"comment\":{}}],[\"annotationsmufl\",{\"_index\":372,\"name\":{\"781\":{}},\"comment\":{}}],[\"annotationverticaljustify\",{\"_index\":83,\"name\":{\"85\":{},\"1559\":{}},\"comment\":{}}],[\"applyaccidentals\",{\"_index\":12,\"name\":{\"13\":{}},\"comment\":{}}],[\"applyandgetbeams\",{\"_index\":201,\"name\":{\"385\":{}},\"comment\":{}}],[\"applyattributes\",{\"_index\":1196,\"name\":{\"5472\":{}},\"comment\":{}}],[\"applyfontstyle\",{\"_index\":1087,\"name\":{\"4323\":{}},\"comment\":{}}],[\"applylinestyle\",{\"_index\":1086,\"name\":{\"4322\":{}},\"comment\":{}}],[\"applystemextensions\",{\"_index\":226,\"name\":{\"416\":{}},\"comment\":{}}],[\"applystyle\",{\"_index\":49,\"name\":{\"51\":{},\"132\":{},\"206\":{},\"349\":{},\"427\":{},\"506\":{},\"736\":{},\"809\":{},\"951\":{},\"1101\":{},\"1157\":{},\"1222\":{},\"1378\":{},\"1788\":{},\"1950\":{},\"2065\":{},\"2211\":{},\"2430\":{},\"2498\":{},\"2670\":{},\"2750\":{},\"2890\":{},\"2957\":{},\"3043\":{},\"3262\":{},\"3436\":{},\"3498\":{},\"3581\":{},\"3644\":{},\"3742\":{},\"3970\":{},\"4089\":{},\"4157\":{},\"4207\":{},\"4263\":{},\"4330\":{},\"4397\":{},\"4636\":{},\"4709\":{},\"4766\":{},\"4831\":{},\"4889\":{},\"4948\":{},\"5010\":{},\"5084\":{},\"5244\":{},\"5320\":{},\"5395\":{},\"5544\":{},\"5735\":{},\"5795\":{},\"5902\":{},\"5957\":{},\"6016\":{},\"6167\":{},\"6367\":{},\"6458\":{},\"6585\":{},\"6658\":{},\"6798\":{},\"6861\":{},\"6944\":{},\"7116\":{},\"7165\":{},\"7233\":{}},\"comment\":{}}],[\"applytickmultiplier\",{\"_index\":193,\"name\":{\"339\":{},\"941\":{},\"1091\":{},\"1940\":{},\"2201\":{},\"2421\":{},\"2660\":{},\"2880\":{},\"3252\":{},\"3426\":{},\"3960\":{},\"4627\":{},\"5234\":{},\"5725\":{},\"6157\":{},\"6357\":{},\"6444\":{},\"6788\":{}},\"comment\":{}}],[\"arc\",{\"_index\":293,\"name\":{\"601\":{},\"3820\":{},\"5482\":{}},\"comment\":{}}],[\"arpeggio_directionless\",{\"_index\":1181,\"name\":{\"5359\":{}},\"comment\":{}}],[\"array\",{\"_index\":643,\"name\":{\"1692\":{},\"1696\":{}},\"comment\":{}}],[\"arrowhead_angle\",{\"_index\":1083,\"name\":{\"4317\":{}},\"comment\":{}}],[\"arrowhead_length\",{\"_index\":1082,\"name\":{\"4316\":{}},\"comment\":{}}],[\"articulation\",{\"_index\":100,\"name\":{\"166\":{},\"1449\":{},\"1480\":{},\"1628\":{},\"6988\":{}},\"comment\":{}}],[\"articulationstruct\",{\"_index\":95,\"name\":{\"161\":{}},\"comment\":{}}],[\"attach\",{\"_index\":1330,\"name\":{\"6923\":{}},\"comment\":{}}],[\"attributes\",{\"_index\":1183,\"name\":{\"5424\":{},\"5434\":{},\"5450\":{}},\"comment\":{}}],[\"auto_beam\",{\"_index\":639,\"name\":{\"1688\":{}},\"comment\":{}}],[\"auto_stem\",{\"_index\":751,\"name\":{\"2242\":{},\"4450\":{},\"5578\":{}},\"comment\":{}}],[\"autostem\",{\"_index\":766,\"name\":{\"2280\":{},\"4483\":{}},\"comment\":{}}],[\"autowidth\",{\"_index\":1210,\"name\":{\"5515\":{}},\"comment\":{}}],[\"backend\",{\"_index\":486,\"name\":{\"1415\":{}},\"comment\":{}}],[\"backends\",{\"_index\":978,\"name\":{\"3846\":{}},\"comment\":{}}],[\"background\",{\"_index\":487,\"name\":{\"1418\":{}},\"comment\":{}}],[\"backgroundfillstyle\",{\"_index\":1193,\"name\":{\"5456\":{}},\"comment\":{}}],[\"barline\",{\"_index\":522,\"name\":{\"1481\":{},\"4125\":{},\"6989\":{}},\"comment\":{}}],[\"barlinetype\",{\"_index\":551,\"name\":{\"1570\":{},\"4117\":{}},\"comment\":{}}],[\"barnote\",{\"_index\":103,\"name\":{\"235\":{},\"1439\":{},\"1482\":{},\"6990\":{}},\"comment\":{}}],[\"basey\",{\"_index\":700,\"name\":{\"1848\":{},\"2343\":{},\"2553\":{},\"4549\":{},\"5073\":{},\"5138\":{},\"5618\":{}},\"comment\":{}}],[\"bbox\",{\"_index\":734,\"name\":{\"2036\":{},\"6558\":{}},\"comment\":{}}],[\"beam\",{\"_index\":199,\"name\":{\"382\":{},\"1354\":{},\"1461\":{},\"1483\":{},\"6991\":{}},\"comment\":{}}],[\"beam_both\",{\"_index\":197,\"name\":{\"380\":{}},\"comment\":{}}],[\"beam_count\",{\"_index\":718,\"name\":{\"1999\":{}},\"comment\":{}}],[\"beam_left\",{\"_index\":195,\"name\":{\"378\":{}},\"comment\":{}}],[\"beam_right\",{\"_index\":196,\"name\":{\"379\":{}},\"comment\":{}}],[\"beam_width\",{\"_index\":207,\"name\":{\"395\":{}},\"comment\":{}}],[\"beamnotes\",{\"_index\":793,\"name\":{\"2470\":{}},\"comment\":{}}],[\"beat_value\",{\"_index\":573,\"name\":{\"1593\":{},\"7196\":{}},\"comment\":{}}],[\"beats_occupied\",{\"_index\":1315,\"name\":{\"6899\":{}},\"comment\":{}}],[\"beatsoccupieddeprecationwarning\",{\"_index\":1336,\"name\":{\"6930\":{}},\"comment\":{}}],[\"begin\",{\"_index\":407,\"name\":{\"1256\":{},\"3698\":{},\"4370\":{},\"4979\":{}},\"comment\":{}}],[\"begin_end\",{\"_index\":1144,\"name\":{\"4982\":{}},\"comment\":{}}],[\"begin_x\",{\"_index\":383,\"name\":{\"985\":{}},\"comment\":{}}],[\"beginpath\",{\"_index\":288,\"name\":{\"596\":{},\"3815\":{},\"5477\":{}},\"comment\":{}}],[\"below\",{\"_index\":818,\"name\":{\"2924\":{},\"4369\":{}},\"comment\":{}}],[\"belowcode\",{\"_index\":98,\"name\":{\"164\":{}},\"comment\":{}}],[\"benchmark\",{\"_index\":1368,\"name\":{\"7068\":{}},\"comment\":{}}],[\"bend\",{\"_index\":232,\"name\":{\"462\":{},\"1484\":{},\"6992\":{}},\"comment\":{}}],[\"bend_width\",{\"_index\":237,\"name\":{\"475\":{}},\"comment\":{}}],[\"bendphrase\",{\"_index\":229,\"name\":{\"456\":{}},\"comment\":{}}],[\"between_lines\",{\"_index\":99,\"name\":{\"165\":{}},\"comment\":{}}],[\"bezier\",{\"_index\":725,\"name\":{\"2019\":{}},\"comment\":{}}],[\"beziercurveto\",{\"_index\":291,\"name\":{\"599\":{},\"3818\":{},\"5480\":{}},\"comment\":{}}],[\"bold\",{\"_index\":605,\"name\":{\"1648\":{},\"6203\":{}},\"comment\":{}}],[\"botglyphs\",{\"_index\":736,\"name\":{\"2040\":{},\"6562\":{}},\"comment\":{}}],[\"botstartx\",{\"_index\":1294,\"name\":{\"6552\":{}},\"comment\":{}}],[\"bottom\",{\"_index\":85,\"name\":{\"88\":{},\"646\":{},\"4303\":{},\"5994\":{},\"6912\":{}},\"comment\":{}}],[\"bottom_stave\",{\"_index\":1061,\"name\":{\"4194\":{}},\"comment\":{}}],[\"bottom_text_position\",{\"_index\":988,\"name\":{\"4001\":{}},\"comment\":{}}],[\"bottomline\",{\"_index\":1298,\"name\":{\"6625\":{},\"6909\":{}},\"comment\":{}}],[\"boundingbox\",{\"_index\":245,\"name\":{\"540\":{},\"1485\":{}},\"comment\":{}}],[\"boundingboxcomputation\",{\"_index\":257,\"name\":{\"558\":{},\"1486\":{}},\"comment\":{}}],[\"bounds\",{\"_index\":242,\"name\":{\"535\":{}},\"comment\":{}}],[\"bpm\",{\"_index\":1131,\"name\":{\"4796\":{}},\"comment\":{}}],[\"bracket\",{\"_index\":945,\"name\":{\"3718\":{}},\"comment\":{}}],[\"bracket_height\",{\"_index\":952,\"name\":{\"3728\":{},\"6012\":{}},\"comment\":{}}],[\"bracket_line_width\",{\"_index\":954,\"name\":{\"3730\":{}},\"comment\":{}}],[\"bracketed\",{\"_index\":1316,\"name\":{\"6900\":{}},\"comment\":{}}],[\"breaksecondaryat\",{\"_index\":219,\"name\":{\"409\":{}},\"comment\":{}}],[\"brush_down\",{\"_index\":1175,\"name\":{\"5353\":{}},\"comment\":{}}],[\"brush_up\",{\"_index\":1176,\"name\":{\"5354\":{}},\"comment\":{}}],[\"build\",{\"_index\":519,\"name\":{\"1473\":{}},\"comment\":{}}],[\"buildandattach\",{\"_index\":402,\"name\":{\"1189\":{},\"3612\":{}},\"comment\":{}}],[\"buildcontext\",{\"_index\":981,\"name\":{\"3849\":{}},\"comment\":{}}],[\"builder\",{\"_index\":406,\"name\":{\"1255\":{},\"1311\":{},\"1334\":{},\"1347\":{}},\"comment\":{}}],[\"builderelements\",{\"_index\":441,\"name\":{\"1305\":{}},\"comment\":{}}],[\"builderoptions\",{\"_index\":442,\"name\":{\"1308\":{}},\"comment\":{}}],[\"buildflag\",{\"_index\":690,\"name\":{\"1834\":{},\"2331\":{},\"2565\":{},\"4537\":{},\"5124\":{},\"5630\":{}},\"comment\":{}}],[\"buildnoteheads\",{\"_index\":765,\"name\":{\"2279\":{},\"4482\":{}},\"comment\":{}}],[\"buildstem\",{\"_index\":689,\"name\":{\"1833\":{},\"2278\":{},\"2564\":{},\"4481\":{},\"5123\":{},\"5629\":{}},\"comment\":{}}],[\"cached_outline\",{\"_index\":603,\"name\":{\"1645\":{}},\"comment\":{}}],[\"calcbeamednotesslashbbox\",{\"_index\":762,\"name\":{\"2273\":{}},\"comment\":{}}],[\"calcnotedisplacements\",{\"_index\":782,\"name\":{\"2313\":{},\"4516\":{}},\"comment\":{}}],[\"calculateflatslope\",{\"_index\":224,\"name\":{\"414\":{}},\"comment\":{}}],[\"calculatekeyprops\",{\"_index\":768,\"name\":{\"2282\":{},\"4485\":{}},\"comment\":{}}],[\"calculateoptimalstemdirection\",{\"_index\":767,\"name\":{\"2281\":{},\"4484\":{}},\"comment\":{}}],[\"calculateslope\",{\"_index\":223,\"name\":{\"413\":{}},\"comment\":{}}],[\"cancelkey\",{\"_index\":810,\"name\":{\"2721\":{}},\"comment\":{}}],[\"canonical_notes\",{\"_index\":860,\"name\":{\"3093\":{}},\"comment\":{}}],[\"canvas\",{\"_index\":270,\"name\":{\"577\":{},\"3839\":{}},\"comment\":{}}],[\"canvas_browser_size_limit\",{\"_index\":267,\"name\":{\"572\":{}},\"comment\":{}}],[\"canvascontext\",{\"_index\":266,\"name\":{\"569\":{},\"1487\":{}},\"comment\":{}}],[\"category\",{\"_index\":9,\"name\":{\"10\":{},\"92\":{},\"168\":{},\"237\":{},\"383\":{},\"463\":{},\"574\":{},\"657\":{},\"779\":{},\"839\":{},\"988\":{},\"1142\":{},\"1187\":{},\"1370\":{},\"1722\":{},\"1751\":{},\"1818\":{},\"2003\":{},\"2021\":{},\"2098\":{},\"2257\":{},\"2460\":{},\"2528\":{},\"2715\":{},\"2780\":{},\"2926\":{},\"3024\":{},\"3153\":{},\"3318\":{},\"3465\":{},\"3534\":{},\"3611\":{},\"3712\":{},\"3799\":{},\"3857\":{},\"4013\":{},\"4126\":{},\"4188\":{},\"4244\":{},\"4298\":{},\"4373\":{},\"4466\":{},\"4665\":{},\"4739\":{},\"4801\":{},\"4861\":{},\"4924\":{},\"4984\":{},\"5055\":{},\"5113\":{},\"5280\":{},\"5350\":{},\"5438\":{},\"5523\":{},\"5593\":{},\"5765\":{},\"5825\":{},\"5931\":{},\"5997\":{},\"6055\":{},\"6251\":{},\"6409\":{},\"6535\":{},\"6619\":{},\"6688\":{},\"6828\":{},\"6915\":{},\"6985\":{},\"7080\":{},\"7147\":{},\"7203\":{}},\"comment\":{}}],[\"center\",{\"_index\":80,\"name\":{\"82\":{},\"87\":{},\"641\":{},\"2920\":{},\"4365\":{},\"6233\":{}},\"comment\":{}}],[\"center_stem\",{\"_index\":82,\"name\":{\"84\":{},\"89\":{},\"643\":{}},\"comment\":{}}],[\"change\",{\"_index\":806,\"name\":{\"2708\":{},\"2713\":{}},\"comment\":{}}],[\"checkattachednote\",{\"_index\":28,\"name\":{\"30\":{},\"110\":{},\"184\":{},\"485\":{},\"714\":{},\"1201\":{},\"1766\":{},\"2476\":{},\"2934\":{},\"3476\":{},\"3559\":{},\"3623\":{},\"5298\":{},\"5374\":{},\"6839\":{},\"7094\":{}},\"comment\":{}}],[\"checkbeam\",{\"_index\":153,\"name\":{\"294\":{},\"895\":{},\"1045\":{},\"1898\":{},\"2155\":{},\"2386\":{},\"2622\":{},\"2835\":{},\"3205\":{},\"3382\":{},\"3914\":{},\"4592\":{},\"5190\":{},\"5687\":{},\"6111\":{},\"6311\":{},\"6743\":{}},\"comment\":{}}],[\"checkcollision\",{\"_index\":11,\"name\":{\"12\":{}},\"comment\":{}}],[\"checkcontext\",{\"_index\":65,\"name\":{\"67\":{},\"148\":{},\"222\":{},\"365\":{},\"443\":{},\"522\":{},\"752\":{},\"825\":{},\"967\":{},\"1117\":{},\"1173\":{},\"1238\":{},\"1395\":{},\"1804\":{},\"1966\":{},\"2081\":{},\"2226\":{},\"2445\":{},\"2514\":{},\"2686\":{},\"2766\":{},\"2906\":{},\"2973\":{},\"3059\":{},\"3279\":{},\"3451\":{},\"3514\":{},\"3597\":{},\"3660\":{},\"3758\":{},\"3985\":{},\"4104\":{},\"4173\":{},\"4223\":{},\"4279\":{},\"4346\":{},\"4413\":{},\"4651\":{},\"4725\":{},\"4782\":{},\"4847\":{},\"4905\":{},\"4964\":{},\"5026\":{},\"5099\":{},\"5261\":{},\"5336\":{},\"5411\":{},\"5559\":{},\"5751\":{},\"5811\":{},\"5917\":{},\"5973\":{},\"6040\":{},\"6183\":{},\"6383\":{},\"6475\":{},\"6601\":{},\"6674\":{},\"6814\":{},\"6877\":{},\"6960\":{},\"7132\":{},\"7181\":{},\"7248\":{}},\"comment\":{}}],[\"checkindex\",{\"_index\":30,\"name\":{\"32\":{},\"113\":{},\"187\":{},\"488\":{},\"717\":{},\"1203\":{},\"1769\":{},\"2479\":{},\"2937\":{},\"3479\":{},\"3562\":{},\"3625\":{},\"5301\":{},\"5377\":{},\"6842\":{},\"7097\":{}},\"comment\":{}}],[\"checkmetrics\",{\"_index\":740,\"name\":{\"2052\":{},\"6574\":{}},\"comment\":{}}],[\"checkmodifiercontext\",{\"_index\":33,\"name\":{\"35\":{},\"116\":{},\"190\":{},\"343\":{},\"491\":{},\"720\":{},\"945\":{},\"1095\":{},\"1206\":{},\"1772\":{},\"1944\":{},\"2205\":{},\"2425\":{},\"2482\":{},\"2664\":{},\"2884\":{},\"2940\":{},\"3256\":{},\"3430\":{},\"3482\":{},\"3565\":{},\"3628\":{},\"3964\":{},\"4631\":{},\"5238\":{},\"5304\":{},\"5380\":{},\"5729\":{},\"6161\":{},\"6361\":{},\"6449\":{},\"6792\":{},\"6845\":{},\"7100\":{}},\"comment\":{}}],[\"checkstave\",{\"_index\":129,\"name\":{\"270\":{},\"795\":{},\"871\":{},\"1021\":{},\"1876\":{},\"2058\":{},\"2132\":{},\"2367\":{},\"2602\":{},\"2736\":{},\"2811\":{},\"3034\":{},\"3181\":{},\"3359\":{},\"3891\":{},\"4141\":{},\"4380\":{},\"4573\":{},\"4693\":{},\"4750\":{},\"4815\":{},\"4873\":{},\"4994\":{},\"5167\":{},\"5667\":{},\"6087\":{},\"6287\":{},\"6579\":{},\"6642\":{},\"6719\":{},\"7226\":{}},\"comment\":{}}],[\"checkstem\",{\"_index\":687,\"name\":{\"1831\":{},\"2329\":{},\"2562\":{},\"4535\":{},\"5121\":{},\"5627\":{}},\"comment\":{}}],[\"checktickcontext\",{\"_index\":186,\"name\":{\"332\":{},\"934\":{},\"1084\":{},\"1934\":{},\"2194\":{},\"2415\":{},\"2654\":{},\"2873\":{},\"3244\":{},\"3419\":{},\"3953\":{},\"4621\":{},\"5227\":{},\"5719\":{},\"6150\":{},\"6350\":{},\"6436\":{},\"6781\":{}},\"comment\":{}}],[\"chord\",{\"_index\":412,\"name\":{\"1262\":{},\"1299\":{}},\"comment\":{}}],[\"chordornote\",{\"_index\":411,\"name\":{\"1261\":{}},\"comment\":{}}],[\"chordsymbol\",{\"_index\":332,\"name\":{\"655\":{},\"1448\":{},\"1488\":{},\"1630\":{},\"6993\":{}},\"comment\":{}}],[\"chordsymbolblock\",{\"_index\":304,\"name\":{\"615\":{}},\"comment\":{}}],[\"chordsymbolglyphmetrics\",{\"_index\":311,\"name\":{\"624\":{}},\"comment\":{}}],[\"chordsymbolhorizontaljustify\",{\"_index\":325,\"name\":{\"639\":{},\"1560\":{}},\"comment\":{}}],[\"chordsymbolmetrics\",{\"_index\":315,\"name\":{\"628\":{}},\"comment\":{}}],[\"chordsymbolverticaljustify\",{\"_index\":326,\"name\":{\"644\":{},\"1561\":{}},\"comment\":{}}],[\"class\",{\"_index\":475,\"name\":{\"1362\":{}},\"comment\":{}}],[\"clear\",{\"_index\":272,\"name\":{\"579\":{},\"3781\":{},\"3801\":{},\"5473\":{}},\"comment\":{}}],[\"clearrect\",{\"_index\":287,\"name\":{\"595\":{},\"3814\":{},\"5476\":{}},\"comment\":{}}],[\"clef\",{\"_index\":370,\"name\":{\"777\":{},\"787\":{},\"1310\":{},\"1338\":{},\"1489\":{},\"2248\":{},\"4456\":{},\"5584\":{},\"6994\":{}},\"comment\":{}}],[\"clef_default\",{\"_index\":593,\"name\":{\"1624\":{}},\"comment\":{}}],[\"clef_small\",{\"_index\":594,\"name\":{\"1625\":{}},\"comment\":{}}],[\"clefannotatiomtype\",{\"_index\":365,\"name\":{\"767\":{}},\"comment\":{}}],[\"clefmetrics\",{\"_index\":368,\"name\":{\"772\":{}},\"comment\":{}}],[\"clefnote\",{\"_index\":378,\"name\":{\"838\":{},\"1440\":{},\"1490\":{},\"6995\":{}},\"comment\":{}}],[\"clefproperties\",{\"_index\":578,\"name\":{\"1600\":{}},\"comment\":{}}],[\"cleftype\",{\"_index\":364,\"name\":{\"764\":{}},\"comment\":{}}],[\"clone\",{\"_index\":255,\"name\":{\"556\":{},\"1741\":{}},\"comment\":{}}],[\"closegroup\",{\"_index\":274,\"name\":{\"581\":{},\"3828\":{},\"5459\":{}},\"comment\":{}}],[\"closepath\",{\"_index\":296,\"name\":{\"604\":{},\"3823\":{},\"5483\":{}},\"comment\":{}}],[\"coda_left\",{\"_index\":1111,\"name\":{\"4670\":{}},\"comment\":{}}],[\"coda_right\",{\"_index\":1112,\"name\":{\"4671\":{}},\"comment\":{}}],[\"code\",{\"_index\":96,\"name\":{\"162\":{},\"765\":{},\"770\":{},\"1991\":{},\"2037\":{},\"3121\":{},\"6559\":{},\"7062\":{}},\"comment\":{}}],[\"code_flag_downstem\",{\"_index\":714,\"name\":{\"1993\":{}},\"comment\":{}}],[\"code_flag_upstem\",{\"_index\":713,\"name\":{\"1992\":{}},\"comment\":{}}],[\"code_head\",{\"_index\":704,\"name\":{\"1980\":{}},\"comment\":{}}],[\"color\",{\"_index\":951,\"name\":{\"3727\":{},\"4313\":{},\"6007\":{}},\"comment\":{}}],[\"column\",{\"_index\":2,\"name\":{\"2\":{}},\"comment\":{}}],[\"comma\",{\"_index\":431,\"name\":{\"1285\":{}},\"comment\":{}}],[\"commithook\",{\"_index\":404,\"name\":{\"1251\":{}},\"comment\":{}}],[\"commithooks\",{\"_index\":446,\"name\":{\"1317\":{},\"1335\":{}},\"comment\":{}}],[\"commitpiece\",{\"_index\":459,\"name\":{\"1331\":{}},\"comment\":{}}],[\"constructor\",{\"_index\":16,\"name\":{\"17\":{},\"102\":{},\"174\":{},\"241\":{},\"388\":{},\"470\":{},\"542\":{},\"559\":{},\"575\":{},\"686\":{},\"785\":{},\"843\":{},\"992\":{},\"1146\":{},\"1194\":{},\"1254\":{},\"1298\":{},\"1312\":{},\"1343\":{},\"1372\":{},\"1424\":{},\"1605\":{},\"1706\":{},\"1726\":{},\"1757\":{},\"1822\":{},\"2035\":{},\"2102\":{},\"2269\":{},\"2465\":{},\"2532\":{},\"2700\":{},\"2719\":{},\"2784\":{},\"2930\":{},\"2997\":{},\"3026\":{},\"3101\":{},\"3157\":{},\"3322\":{},\"3470\":{},\"3545\":{},\"3617\":{},\"3701\":{},\"3724\":{},\"3780\":{},\"3800\":{},\"3853\":{},\"3861\":{},\"4018\":{},\"4131\":{},\"4192\":{},\"4251\":{},\"4305\":{},\"4376\":{},\"4476\":{},\"4683\":{},\"4742\":{},\"4804\":{},\"4864\":{},\"4926\":{},\"4988\":{},\"5061\":{},\"5117\":{},\"5286\":{},\"5364\":{},\"5439\":{},\"5525\":{},\"5597\":{},\"5773\":{},\"5830\":{},\"5935\":{},\"6003\":{},\"6060\":{},\"6257\":{},\"6411\":{},\"6503\":{},\"6549\":{},\"6623\":{},\"6692\":{},\"6832\":{},\"6892\":{},\"6921\":{},\"7061\":{},\"7072\":{},\"7086\":{},\"7149\":{},\"7206\":{}},\"comment\":{}}],[\"contains\",{\"_index\":1367,\"name\":{\"7066\":{}},\"comment\":{}}],[\"context\",{\"_index\":638,\"name\":{\"1687\":{}},\"comment\":{}}],[\"context2d\",{\"_index\":269,\"name\":{\"576\":{}},\"comment\":{}}],[\"contextbuilder\",{\"_index\":976,\"name\":{\"3837\":{}},\"comment\":{}}],[\"convertacclines\",{\"_index\":813,\"name\":{\"2724\":{}},\"comment\":{}}],[\"convertsizetopixelvalue\",{\"_index\":610,\"name\":{\"1657\":{}},\"comment\":{}}],[\"convertsizetopointvalue\",{\"_index\":611,\"name\":{\"1658\":{}},\"comment\":{}}],[\"converttoalteracclist\",{\"_index\":816,\"name\":{\"2729\":{}},\"comment\":{}}],[\"converttocancelacclist\",{\"_index\":811,\"name\":{\"2722\":{}},\"comment\":{}}],[\"converttoglyph\",{\"_index\":809,\"name\":{\"2720\":{}},\"comment\":{}}],[\"copy\",{\"_index\":246,\"name\":{\"541\":{},\"1742\":{}},\"comment\":{}}],[\"cp1\",{\"_index\":1137,\"name\":{\"4932\":{},\"5780\":{},\"5941\":{}},\"comment\":{}}],[\"cp2\",{\"_index\":1134,\"name\":{\"4929\":{},\"5777\":{},\"5938\":{}},\"comment\":{}}],[\"cps\",{\"_index\":389,\"name\":{\"1131\":{}},\"comment\":{}}],[\"create\",{\"_index\":1194,\"name\":{\"5457\":{},\"6215\":{}},\"comment\":{}}],[\"createhammeron\",{\"_index\":1226,\"name\":{\"5771\":{},\"5932\":{}},\"comment\":{}}],[\"createmodifiercontexts\",{\"_index\":655,\"name\":{\"1710\":{}},\"comment\":{}}],[\"createpulloff\",{\"_index\":1227,\"name\":{\"5772\":{},\"5933\":{}},\"comment\":{}}],[\"createscalemap\",{\"_index\":877,\"name\":{\"3112\":{}},\"comment\":{}}],[\"createslidedown\",{\"_index\":1225,\"name\":{\"5770\":{}},\"comment\":{}}],[\"createslideup\",{\"_index\":1224,\"name\":{\"5769\":{}},\"comment\":{}}],[\"createsostenuto\",{\"_index\":949,\"name\":{\"3722\":{}},\"comment\":{}}],[\"createsustain\",{\"_index\":948,\"name\":{\"3721\":{}},\"comment\":{}}],[\"createtickcontexts\",{\"_index\":656,\"name\":{\"1711\":{}},\"comment\":{}}],[\"createunacorda\",{\"_index\":950,\"name\":{\"3723\":{}},\"comment\":{}}],[\"cresc\",{\"_index\":1067,\"name\":{\"4247\":{}},\"comment\":{}}],[\"crescendo\",{\"_index\":384,\"name\":{\"986\":{},\"1491\":{},\"6996\":{}},\"comment\":{}}],[\"crescendoparams\",{\"_index\":380,\"name\":{\"980\":{}},\"comment\":{}}],[\"current_cache_key\",{\"_index\":726,\"name\":{\"2022\":{},\"6536\":{}},\"comment\":{}}],[\"curve\",{\"_index\":396,\"name\":{\"1141\":{},\"1462\":{},\"1492\":{},\"6997\":{}},\"comment\":{}}],[\"curveoptions\",{\"_index\":388,\"name\":{\"1130\":{}},\"comment\":{}}],[\"curveposition\",{\"_index\":393,\"name\":{\"1138\":{},\"1564\":{}},\"comment\":{}}],[\"custom_glyph_code\",{\"_index\":898,\"name\":{\"3302\":{}},\"comment\":{}}],[\"customtypes\",{\"_index\":891,\"name\":{\"3141\":{}},\"comment\":{}}],[\"dash\",{\"_index\":1236,\"name\":{\"6011\":{}},\"comment\":{}}],[\"dashed\",{\"_index\":1233,\"name\":{\"6006\":{}},\"comment\":{}}],[\"data\",{\"_index\":587,\"name\":{\"1613\":{}},\"comment\":{}}],[\"date\",{\"_index\":521,\"name\":{\"1477\":{}},\"comment\":{}}],[\"dblsharpline\",{\"_index\":4,\"name\":{\"5\":{}},\"comment\":{}}],[\"dc\",{\"_index\":1115,\"name\":{\"4674\":{}},\"comment\":{}}],[\"dc_al_coda\",{\"_index\":1116,\"name\":{\"4675\":{}},\"comment\":{}}],[\"dc_al_fine\",{\"_index\":1117,\"name\":{\"4676\":{}},\"comment\":{}}],[\"debug\",{\"_index\":8,\"name\":{\"9\":{},\"91\":{},\"167\":{},\"236\":{},\"656\":{},\"778\":{},\"987\":{},\"1342\":{},\"1421\":{},\"1699\":{},\"2260\":{},\"2459\":{},\"2996\":{},\"3317\":{},\"3533\":{},\"3700\":{},\"3711\":{},\"4465\":{},\"5054\":{},\"5996\":{},\"6054\":{},\"6213\":{},\"7146\":{}},\"comment\":{}}],[\"debugformatter\",{\"_index\":1207,\"name\":{\"5512\":{}},\"comment\":{}}],[\"debugnotemetrics\",{\"_index\":1204,\"name\":{\"5508\":{}},\"comment\":{}}],[\"decresc\",{\"_index\":1068,\"name\":{\"4248\":{}},\"comment\":{}}],[\"defaultpadding\",{\"_index\":998,\"name\":{\"4015\":{},\"5827\":{}},\"comment\":{}}],[\"defaults\",{\"_index\":465,\"name\":{\"1344\":{}},\"comment\":{}}],[\"defined\",{\"_index\":1357,\"name\":{\"7053\":{}},\"comment\":{}}],[\"denominator\",{\"_index\":666,\"name\":{\"1728\":{}},\"comment\":{}}],[\"description\",{\"_index\":1241,\"name\":{\"6207\":{}},\"comment\":{}}],[\"detach\",{\"_index\":1331,\"name\":{\"6924\":{}},\"comment\":{}}],[\"details\",{\"_index\":1211,\"name\":{\"5519\":{}},\"comment\":{}}],[\"deviation\",{\"_index\":1267,\"name\":{\"6407\":{}},\"comment\":{}}],[\"diatonic_accidentals\",{\"_index\":862,\"name\":{\"3095\":{}},\"comment\":{}}],[\"diatonic_intervals\",{\"_index\":861,\"name\":{\"3094\":{}},\"comment\":{}}],[\"digits\",{\"_index\":595,\"name\":{\"1627\":{}},\"comment\":{}}],[\"disabledefaultregistry\",{\"_index\":963,\"name\":{\"3779\":{}},\"comment\":{}}],[\"displaced\",{\"_index\":880,\"name\":{\"3124\":{},\"3305\":{}},\"comment\":{}}],[\"displaced_x\",{\"_index\":1096,\"name\":{\"4429\":{}},\"comment\":{}}],[\"displacedshiftx\",{\"_index\":895,\"name\":{\"3294\":{}},\"comment\":{}}],[\"divide\",{\"_index\":671,\"name\":{\"1735\":{}},\"comment\":{}}],[\"dot\",{\"_index\":400,\"name\":{\"1186\":{},\"1286\":{},\"1493\":{},\"6998\":{}},\"comment\":{}}],[\"dot_shifty\",{\"_index\":706,\"name\":{\"1982\":{}},\"comment\":{}}],[\"dots\",{\"_index\":415,\"name\":{\"1267\":{},\"1301\":{},\"2252\":{},\"3136\":{},\"3142\":{},\"3148\":{},\"3312\":{},\"4460\":{},\"4798\":{},\"5588\":{},\"6246\":{}},\"comment\":{}}],[\"double\",{\"_index\":1051,\"name\":{\"4119\":{}},\"comment\":{}}],[\"down\",{\"_index\":234,\"name\":{\"465\":{},\"3844\":{},\"5057\":{}},\"comment\":{}}],[\"draw\",{\"_index\":25,\"name\":{\"27\":{},\"106\":{},\"180\":{},\"246\":{},\"253\":{},\"421\":{},\"481\":{},\"711\":{},\"791\":{},\"847\":{},\"854\":{},\"997\":{},\"1004\":{},\"1151\":{},\"1197\":{},\"1381\":{},\"1471\":{},\"1762\":{},\"1827\":{},\"1860\":{},\"2042\":{},\"2108\":{},\"2115\":{},\"2272\":{},\"2351\":{},\"2474\":{},\"2558\":{},\"2585\":{},\"2732\":{},\"2787\":{},\"2794\":{},\"2950\":{},\"3037\":{},\"3164\":{},\"3265\":{},\"3335\":{},\"3342\":{},\"3474\":{},\"3555\":{},\"3619\":{},\"3736\":{},\"3867\":{},\"3874\":{},\"4080\":{},\"4134\":{},\"4201\":{},\"4257\":{},\"4324\":{},\"4391\":{},\"4531\":{},\"4557\":{},\"4686\":{},\"4746\":{},\"4811\":{},\"4869\":{},\"4942\":{},\"4990\":{},\"5078\":{},\"5150\":{},\"5247\":{},\"5294\":{},\"5370\":{},\"5538\":{},\"5623\":{},\"5650\":{},\"5789\":{},\"5893\":{},\"5951\":{},\"6019\":{},\"6063\":{},\"6070\":{},\"6263\":{},\"6270\":{},\"6461\":{},\"6564\":{},\"6638\":{},\"6695\":{},\"6702\":{},\"6835\":{},\"6938\":{},\"7090\":{},\"7159\":{},\"7227\":{}},\"comment\":{}}],[\"draw_dots\",{\"_index\":114,\"name\":{\"254\":{},\"855\":{},\"1005\":{},\"1861\":{},\"2116\":{},\"2352\":{},\"2586\":{},\"2795\":{},\"3165\":{},\"3343\":{},\"3875\":{},\"4558\":{},\"5151\":{},\"5651\":{},\"6071\":{},\"6271\":{},\"6703\":{}},\"comment\":{}}],[\"draw_end_arrow\",{\"_index\":1081,\"name\":{\"4315\":{}},\"comment\":{}}],[\"draw_start_arrow\",{\"_index\":1080,\"name\":{\"4314\":{}},\"comment\":{}}],[\"draw_stem\",{\"_index\":115,\"name\":{\"255\":{},\"856\":{},\"1006\":{},\"1862\":{},\"2117\":{},\"2353\":{},\"2587\":{},\"2796\":{},\"3166\":{},\"3344\":{},\"3876\":{},\"4559\":{},\"5152\":{},\"5652\":{},\"6072\":{},\"6272\":{},\"6704\":{}},\"comment\":{}}],[\"draw_stem_through_stave\",{\"_index\":113,\"name\":{\"252\":{},\"853\":{},\"1003\":{},\"1859\":{},\"2114\":{},\"2350\":{},\"2584\":{},\"2793\":{},\"3163\":{},\"3341\":{},\"3873\":{},\"4556\":{},\"5149\":{},\"5649\":{},\"6069\":{},\"6269\":{},\"6701\":{}},\"comment\":{}}],[\"draw_width\",{\"_index\":231,\"name\":{\"461\":{}},\"comment\":{}}],[\"drawbracketed\",{\"_index\":956,\"name\":{\"3734\":{}},\"comment\":{}}],[\"drawcodafixed\",{\"_index\":1125,\"name\":{\"4687\":{}},\"comment\":{}}],[\"drawdashedline\",{\"_index\":984,\"name\":{\"3852\":{}},\"comment\":{}}],[\"drawdot\",{\"_index\":972,\"name\":{\"3790\":{}},\"comment\":{}}],[\"drawflag\",{\"_index\":790,\"name\":{\"2323\":{},\"2554\":{},\"4526\":{},\"5619\":{}},\"comment\":{}}],[\"drawledgerlines\",{\"_index\":788,\"name\":{\"2320\":{},\"4523\":{}},\"comment\":{}}],[\"drawline\",{\"_index\":845,\"name\":{\"3035\":{}},\"comment\":{}}],[\"drawmodifiers\",{\"_index\":749,\"name\":{\"2106\":{},\"2321\":{},\"2555\":{},\"3865\":{},\"4524\":{},\"5620\":{}},\"comment\":{}}],[\"drawnoteheads\",{\"_index\":791,\"name\":{\"2324\":{},\"4527\":{}},\"comment\":{}}],[\"drawpositions\",{\"_index\":802,\"name\":{\"2557\":{},\"5622\":{}},\"comment\":{}}],[\"drawrepeatbar\",{\"_index\":1058,\"name\":{\"4137\":{}},\"comment\":{}}],[\"drawsignofixed\",{\"_index\":1126,\"name\":{\"4688\":{}},\"comment\":{}}],[\"drawstem\",{\"_index\":703,\"name\":{\"1853\":{},\"2325\":{},\"2578\":{},\"4528\":{},\"5143\":{},\"5643\":{}},\"comment\":{}}],[\"drawstemthrough\",{\"_index\":801,\"name\":{\"2556\":{},\"5621\":{}},\"comment\":{}}],[\"drawsymbols\",{\"_index\":846,\"name\":{\"3036\":{}},\"comment\":{}}],[\"drawsymboltext\",{\"_index\":1127,\"name\":{\"4689\":{}},\"comment\":{}}],[\"drawtext\",{\"_index\":957,\"name\":{\"3735\":{}},\"comment\":{}}],[\"drawverticalbar\",{\"_index\":1056,\"name\":{\"4135\":{}},\"comment\":{}}],[\"drawverticalendbar\",{\"_index\":1057,\"name\":{\"4136\":{}},\"comment\":{}}],[\"drawwithstyle\",{\"_index\":51,\"name\":{\"53\":{},\"134\":{},\"208\":{},\"351\":{},\"429\":{},\"508\":{},\"738\":{},\"811\":{},\"953\":{},\"1103\":{},\"1159\":{},\"1224\":{},\"1380\":{},\"1790\":{},\"1952\":{},\"2067\":{},\"2213\":{},\"2432\":{},\"2500\":{},\"2672\":{},\"2752\":{},\"2892\":{},\"2959\":{},\"3045\":{},\"3264\":{},\"3438\":{},\"3500\":{},\"3583\":{},\"3646\":{},\"3744\":{},\"3972\":{},\"4091\":{},\"4159\":{},\"4209\":{},\"4265\":{},\"4332\":{},\"4399\":{},\"4638\":{},\"4711\":{},\"4768\":{},\"4833\":{},\"4891\":{},\"4950\":{},\"5012\":{},\"5086\":{},\"5246\":{},\"5322\":{},\"5397\":{},\"5546\":{},\"5737\":{},\"5797\":{},\"5904\":{},\"5959\":{},\"6026\":{},\"6169\":{},\"6369\":{},\"6460\":{},\"6587\":{},\"6660\":{},\"6800\":{},\"6863\":{},\"6946\":{},\"7118\":{},\"7167\":{},\"7235\":{}},\"comment\":{}}],[\"ds\",{\"_index\":1118,\"name\":{\"4677\":{}},\"comment\":{}}],[\"ds_al_coda\",{\"_index\":1119,\"name\":{\"4678\":{}},\"comment\":{}}],[\"ds_al_fine\",{\"_index\":1120,\"name\":{\"4679\":{}},\"comment\":{}}],[\"duration\",{\"_index\":416,\"name\":{\"1269\":{},\"1300\":{},\"2250\":{},\"3135\":{},\"3139\":{},\"3146\":{},\"3311\":{},\"4458\":{},\"4797\":{},\"5586\":{},\"6244\":{},\"6397\":{}},\"comment\":{}}],[\"duration_override\",{\"_index\":756,\"name\":{\"2255\":{},\"3151\":{},\"3315\":{},\"4463\":{},\"5591\":{},\"6249\":{}},\"comment\":{}}],[\"durations\",{\"_index\":428,\"name\":{\"1281\":{}},\"comment\":{}}],[\"durationtoticks\",{\"_index\":581,\"name\":{\"1604\":{}},\"comment\":{}}],[\"dval\",{\"_index\":422,\"name\":{\"1275\":{}},\"comment\":{}}],[\"easyscore\",{\"_index\":464,\"name\":{\"1341\":{},\"1468\":{},\"1494\":{}},\"comment\":{}}],[\"easyscoredefaults\",{\"_index\":462,\"name\":{\"1337\":{}},\"comment\":{}}],[\"easyscoregrammar\",{\"_index\":405,\"name\":{\"1253\":{}},\"comment\":{}}],[\"easyscorehook\",{\"_index\":101,\"name\":{\"170\":{},\"1754\":{}},\"comment\":{}}],[\"easyscoreoptions\",{\"_index\":460,\"name\":{\"1332\":{}},\"comment\":{}}],[\"element\",{\"_index\":480,\"name\":{\"1369\":{},\"1495\":{},\"5440\":{},\"6999\":{}},\"comment\":{}}],[\"elementattributes\",{\"_index\":473,\"name\":{\"1359\":{}},\"comment\":{}}],[\"elementid\",{\"_index\":485,\"name\":{\"1414\":{}},\"comment\":{}}],[\"elements\",{\"_index\":445,\"name\":{\"1314\":{}},\"comment\":{}}],[\"elementstyle\",{\"_index\":476,\"name\":{\"1363\":{}},\"comment\":{}}],[\"enabledefaultregistry\",{\"_index\":962,\"name\":{\"3778\":{}},\"comment\":{}}],[\"end\",{\"_index\":1052,\"name\":{\"4120\":{},\"4371\":{},\"4981\":{}},\"comment\":{}}],[\"end_x\",{\"_index\":382,\"name\":{\"984\":{}},\"comment\":{}}],[\"engravingfontresolution\",{\"_index\":335,\"name\":{\"665\":{}},\"comment\":{}}],[\"eol\",{\"_index\":437,\"name\":{\"1292\":{}},\"comment\":{}}],[\"equals\",{\"_index\":434,\"name\":{\"1289\":{},\"1736\":{}},\"comment\":{}}],[\"errorpos\",{\"_index\":937,\"name\":{\"3695\":{}},\"comment\":{}}],[\"evaluate\",{\"_index\":658,\"name\":{\"1714\":{}},\"comment\":{}}],[\"expect\",{\"_index\":923,\"name\":{\"3681\":{},\"3709\":{}},\"comment\":{}}],[\"expectone\",{\"_index\":942,\"name\":{\"3706\":{}},\"comment\":{}}],[\"expectoneormore\",{\"_index\":943,\"name\":{\"3707\":{}},\"comment\":{}}],[\"expectzeroormore\",{\"_index\":944,\"name\":{\"3708\":{}},\"comment\":{}}],[\"extend_left\",{\"_index\":117,\"name\":{\"257\":{},\"858\":{},\"1008\":{},\"1864\":{},\"2119\":{},\"2355\":{},\"2589\":{},\"2798\":{},\"3168\":{},\"3346\":{},\"3878\":{},\"4561\":{},\"5154\":{},\"5654\":{},\"6074\":{},\"6274\":{},\"6706\":{}},\"comment\":{}}],[\"extend_right\",{\"_index\":118,\"name\":{\"258\":{},\"859\":{},\"1009\":{},\"1865\":{},\"2120\":{},\"2356\":{},\"2590\":{},\"2799\":{},\"3169\":{},\"3347\":{},\"3879\":{},\"4562\":{},\"5155\":{},\"5655\":{},\"6075\":{},\"6275\":{},\"6707\":{}},\"comment\":{}}],[\"extra_stroke_scale\",{\"_index\":1307,\"name\":{\"6834\":{}},\"comment\":{}}],[\"factory\",{\"_index\":444,\"name\":{\"1313\":{},\"1333\":{},\"1346\":{},\"1420\":{},\"1496\":{},\"5510\":{}},\"comment\":{}}],[\"factoryoptions\",{\"_index\":481,\"name\":{\"1408\":{}},\"comment\":{}}],[\"family\",{\"_index\":582,\"name\":{\"1607\":{},\"5426\":{},\"6197\":{}},\"comment\":{}}],[\"fetchmusicfont\",{\"_index\":558,\"name\":{\"1577\":{}},\"comment\":{}}],[\"fill\",{\"_index\":294,\"name\":{\"602\":{},\"3821\":{},\"5484\":{}},\"comment\":{}}],[\"fill_style\",{\"_index\":993,\"name\":{\"4006\":{}},\"comment\":{}}],[\"fillrect\",{\"_index\":286,\"name\":{\"594\":{},\"3813\":{},\"5475\":{}},\"comment\":{}}],[\"fillstyle\",{\"_index\":301,\"name\":{\"609\":{},\"1366\":{},\"3831\":{},\"5490\":{}},\"comment\":{}}],[\"filltext\",{\"_index\":298,\"name\":{\"606\":{},\"3824\":{},\"5487\":{}},\"comment\":{}}],[\"fine\",{\"_index\":1121,\"name\":{\"4680\":{}},\"comment\":{}}],[\"fingering\",{\"_index\":504,\"name\":{\"1452\":{}},\"comment\":{}}],[\"first_indices\",{\"_index\":1074,\"name\":{\"4294\":{},\"4921\":{}},\"comment\":{}}],[\"first_note\",{\"_index\":1073,\"name\":{\"4293\":{},\"4919\":{}},\"comment\":{}}],[\"first_x_shift\",{\"_index\":1138,\"name\":{\"4933\":{},\"5781\":{},\"5942\":{}},\"comment\":{}}],[\"flag\",{\"_index\":715,\"name\":{\"1994\":{}},\"comment\":{}}],[\"flat_beam_offset\",{\"_index\":203,\"name\":{\"391\":{}},\"comment\":{}}],[\"flat_beams\",{\"_index\":204,\"name\":{\"392\":{}},\"comment\":{}}],[\"flatline\",{\"_index\":3,\"name\":{\"4\":{}},\"comment\":{}}],[\"flow\",{\"_index\":518,\"name\":{\"1472\":{},\"7064\":{}},\"comment\":{}}],[\"font\",{\"_index\":66,\"name\":{\"68\":{},\"149\":{},\"223\":{},\"263\":{},\"366\":{},\"444\":{},\"523\":{},\"613\":{},\"753\":{},\"826\":{},\"864\":{},\"968\":{},\"1014\":{},\"1118\":{},\"1174\":{},\"1239\":{},\"1396\":{},\"1419\":{},\"1497\":{},\"1652\":{},\"1805\":{},\"1870\":{},\"1967\":{},\"2014\":{},\"2027\":{},\"2082\":{},\"2125\":{},\"2227\":{},\"2361\":{},\"2446\":{},\"2515\":{},\"2595\":{},\"2687\":{},\"2767\":{},\"2804\":{},\"2907\":{},\"2974\":{},\"3060\":{},\"3174\":{},\"3280\":{},\"3352\":{},\"3452\":{},\"3515\":{},\"3598\":{},\"3661\":{},\"3759\":{},\"3835\":{},\"3884\":{},\"3986\":{},\"4105\":{},\"4174\":{},\"4224\":{},\"4280\":{},\"4347\":{},\"4414\":{},\"4567\":{},\"4652\":{},\"4726\":{},\"4783\":{},\"4848\":{},\"4906\":{},\"4965\":{},\"5027\":{},\"5100\":{},\"5160\":{},\"5262\":{},\"5337\":{},\"5412\":{},\"5426\":{},\"5427\":{},\"5428\":{},\"5429\":{},\"5494\":{},\"5560\":{},\"5660\":{},\"5752\":{},\"5812\":{},\"5918\":{},\"5974\":{},\"6041\":{},\"6080\":{},\"6184\":{},\"6240\":{},\"6280\":{},\"6384\":{},\"6476\":{},\"6541\":{},\"6602\":{},\"6675\":{},\"6712\":{},\"6815\":{},\"6878\":{},\"6961\":{},\"7133\":{},\"7182\":{},\"7249\":{}},\"comment\":{}}],[\"font_scale\",{\"_index\":20,\"name\":{\"22\":{},\"178\":{},\"3550\":{},\"5367\":{}},\"comment\":{}}],[\"fontdata\",{\"_index\":588,\"name\":{\"1615\":{}},\"comment\":{}}],[\"fontfamily\",{\"_index\":589,\"name\":{\"1617\":{}},\"comment\":{}}],[\"fontglyph\",{\"_index\":596,\"name\":{\"1636\":{}},\"comment\":{}}],[\"fontinfo\",{\"_index\":70,\"name\":{\"72\":{},\"153\":{},\"227\":{},\"370\":{},\"448\":{},\"527\":{},\"756\":{},\"830\":{},\"972\":{},\"1122\":{},\"1178\":{},\"1243\":{},\"1400\":{},\"1606\":{},\"1809\":{},\"1971\":{},\"2086\":{},\"2231\":{},\"2450\":{},\"2519\":{},\"2691\":{},\"2771\":{},\"2911\":{},\"2978\":{},\"3064\":{},\"3284\":{},\"3456\":{},\"3519\":{},\"3602\":{},\"3665\":{},\"3763\":{},\"3990\":{},\"4109\":{},\"4178\":{},\"4228\":{},\"4284\":{},\"4351\":{},\"4418\":{},\"4656\":{},\"4730\":{},\"4787\":{},\"4852\":{},\"4910\":{},\"4969\":{},\"5031\":{},\"5104\":{},\"5266\":{},\"5341\":{},\"5416\":{},\"5564\":{},\"5756\":{},\"5816\":{},\"5922\":{},\"5978\":{},\"6045\":{},\"6188\":{},\"6388\":{},\"6480\":{},\"6606\":{},\"6679\":{},\"6819\":{},\"6882\":{},\"6965\":{},\"7137\":{},\"7186\":{},\"7253\":{}},\"comment\":{}}],[\"fontmetrics\",{\"_index\":591,\"name\":{\"1620\":{}},\"comment\":{}}],[\"fontmodule\",{\"_index\":586,\"name\":{\"1611\":{}},\"comment\":{}}],[\"fontsize\",{\"_index\":73,\"name\":{\"75\":{},\"156\":{},\"230\":{},\"373\":{},\"451\":{},\"530\":{},\"759\":{},\"833\":{},\"975\":{},\"1125\":{},\"1181\":{},\"1246\":{},\"1403\":{},\"1812\":{},\"1974\":{},\"2089\":{},\"2234\":{},\"2453\":{},\"2522\":{},\"2694\":{},\"2774\":{},\"2914\":{},\"2981\":{},\"3067\":{},\"3287\":{},\"3459\":{},\"3522\":{},\"3605\":{},\"3668\":{},\"3766\":{},\"3993\":{},\"4112\":{},\"4181\":{},\"4231\":{},\"4287\":{},\"4354\":{},\"4421\":{},\"4659\":{},\"4733\":{},\"4790\":{},\"4855\":{},\"4913\":{},\"4972\":{},\"5034\":{},\"5107\":{},\"5269\":{},\"5344\":{},\"5419\":{},\"5567\":{},\"5759\":{},\"5819\":{},\"5925\":{},\"5981\":{},\"6048\":{},\"6191\":{},\"6391\":{},\"6483\":{},\"6609\":{},\"6682\":{},\"6822\":{},\"6885\":{},\"6968\":{},\"7140\":{},\"7189\":{},\"7256\":{}},\"comment\":{}}],[\"fontsizeinpixels\",{\"_index\":75,\"name\":{\"77\":{},\"158\":{},\"232\":{},\"375\":{},\"453\":{},\"532\":{},\"761\":{},\"835\":{},\"977\":{},\"1127\":{},\"1183\":{},\"1248\":{},\"1405\":{},\"1814\":{},\"1976\":{},\"2091\":{},\"2236\":{},\"2455\":{},\"2524\":{},\"2696\":{},\"2776\":{},\"2916\":{},\"2983\":{},\"3069\":{},\"3289\":{},\"3461\":{},\"3524\":{},\"3607\":{},\"3670\":{},\"3768\":{},\"3995\":{},\"4114\":{},\"4183\":{},\"4233\":{},\"4289\":{},\"4356\":{},\"4423\":{},\"4661\":{},\"4735\":{},\"4792\":{},\"4857\":{},\"4915\":{},\"4974\":{},\"5036\":{},\"5109\":{},\"5271\":{},\"5346\":{},\"5421\":{},\"5569\":{},\"5761\":{},\"5821\":{},\"5927\":{},\"5983\":{},\"6050\":{},\"6193\":{},\"6229\":{},\"6393\":{},\"6485\":{},\"6611\":{},\"6684\":{},\"6824\":{},\"6887\":{},\"6970\":{},\"7142\":{},\"7191\":{},\"7258\":{}},\"comment\":{}}],[\"fontsizeinpoints\",{\"_index\":74,\"name\":{\"76\":{},\"157\":{},\"231\":{},\"374\":{},\"452\":{},\"531\":{},\"760\":{},\"834\":{},\"976\":{},\"1126\":{},\"1182\":{},\"1247\":{},\"1404\":{},\"1813\":{},\"1975\":{},\"2090\":{},\"2235\":{},\"2454\":{},\"2523\":{},\"2695\":{},\"2775\":{},\"2915\":{},\"2982\":{},\"3068\":{},\"3288\":{},\"3460\":{},\"3523\":{},\"3606\":{},\"3669\":{},\"3767\":{},\"3994\":{},\"4113\":{},\"4182\":{},\"4232\":{},\"4288\":{},\"4355\":{},\"4422\":{},\"4660\":{},\"4734\":{},\"4791\":{},\"4856\":{},\"4914\":{},\"4973\":{},\"5035\":{},\"5108\":{},\"5270\":{},\"5345\":{},\"5420\":{},\"5568\":{},\"5760\":{},\"5820\":{},\"5926\":{},\"5982\":{},\"6049\":{},\"6192\":{},\"6392\":{},\"6484\":{},\"6610\":{},\"6683\":{},\"6823\":{},\"6886\":{},\"6969\":{},\"7141\":{},\"7190\":{},\"7257\":{}},\"comment\":{}}],[\"fontstyle\",{\"_index\":76,\"name\":{\"78\":{},\"159\":{},\"233\":{},\"376\":{},\"454\":{},\"533\":{},\"762\":{},\"836\":{},\"978\":{},\"1128\":{},\"1184\":{},\"1249\":{},\"1406\":{},\"1566\":{},\"1649\":{},\"1815\":{},\"1977\":{},\"2092\":{},\"2237\":{},\"2456\":{},\"2525\":{},\"2697\":{},\"2777\":{},\"2917\":{},\"2984\":{},\"3070\":{},\"3290\":{},\"3462\":{},\"3525\":{},\"3608\":{},\"3671\":{},\"3769\":{},\"3996\":{},\"4115\":{},\"4184\":{},\"4234\":{},\"4290\":{},\"4357\":{},\"4424\":{},\"4662\":{},\"4736\":{},\"4793\":{},\"4858\":{},\"4916\":{},\"4975\":{},\"5037\":{},\"5110\":{},\"5272\":{},\"5347\":{},\"5422\":{},\"5570\":{},\"5762\":{},\"5822\":{},\"5928\":{},\"5984\":{},\"6051\":{},\"6194\":{},\"6394\":{},\"6486\":{},\"6612\":{},\"6685\":{},\"6825\":{},\"6888\":{},\"6971\":{},\"7143\":{},\"7192\":{},\"7259\":{}},\"comment\":{}}],[\"fontweight\",{\"_index\":77,\"name\":{\"79\":{},\"160\":{},\"234\":{},\"377\":{},\"455\":{},\"534\":{},\"763\":{},\"837\":{},\"979\":{},\"1129\":{},\"1185\":{},\"1250\":{},\"1407\":{},\"1565\":{},\"1646\":{},\"1816\":{},\"1978\":{},\"2093\":{},\"2238\":{},\"2457\":{},\"2526\":{},\"2698\":{},\"2778\":{},\"2918\":{},\"2985\":{},\"3071\":{},\"3291\":{},\"3463\":{},\"3526\":{},\"3609\":{},\"3672\":{},\"3770\":{},\"3997\":{},\"4116\":{},\"4185\":{},\"4235\":{},\"4291\":{},\"4358\":{},\"4425\":{},\"4663\":{},\"4737\":{},\"4794\":{},\"4859\":{},\"4917\":{},\"4976\":{},\"5038\":{},\"5111\":{},\"5273\":{},\"5348\":{},\"5423\":{},\"5571\":{},\"5763\":{},\"5823\":{},\"5929\":{},\"5985\":{},\"6052\":{},\"6195\":{},\"6395\":{},\"6487\":{},\"6613\":{},\"6686\":{},\"6826\":{},\"6889\":{},\"6972\":{},\"7144\":{},\"7193\":{},\"7260\":{}},\"comment\":{}}],[\"format\",{\"_index\":10,\"name\":{\"11\":{},\"99\":{},\"169\":{},\"467\":{},\"682\":{},\"1190\":{},\"1718\":{},\"1753\":{},\"2264\":{},\"2461\":{},\"2730\":{},\"3466\":{},\"3536\":{},\"3613\":{},\"4079\":{},\"4471\":{},\"5283\":{},\"5361\":{},\"5537\":{},\"5892\":{},\"7081\":{}},\"comment\":{}}],[\"formatanddraw\",{\"_index\":648,\"name\":{\"1702\":{}},\"comment\":{}}],[\"formatanddrawtab\",{\"_index\":649,\"name\":{\"1703\":{}},\"comment\":{}}],[\"formatbegmodifiers\",{\"_index\":1000,\"name\":{\"4017\":{},\"5829\":{}},\"comment\":{}}],[\"formatbyticksanddraw\",{\"_index\":1069,\"name\":{\"4249\":{}},\"comment\":{}}],[\"formatiterations\",{\"_index\":1209,\"name\":{\"5514\":{}},\"comment\":{}}],[\"formatoptions\",{\"_index\":1212,\"name\":{\"5520\":{}},\"comment\":{}}],[\"formatparams\",{\"_index\":636,\"name\":{\"1684\":{}},\"comment\":{}}],[\"formatter\",{\"_index\":510,\"name\":{\"1459\":{},\"1498\":{},\"1698\":{}},\"comment\":{}}],[\"formattermetrics\",{\"_index\":1262,\"name\":{\"6396\":{}},\"comment\":{}}],[\"formatteroptions\",{\"_index\":632,\"name\":{\"1680\":{}},\"comment\":{}}],[\"formattostave\",{\"_index\":661,\"name\":{\"1719\":{}},\"comment\":{}}],[\"fraction\",{\"_index\":523,\"name\":{\"1499\":{},\"1721\":{},\"7000\":{}},\"comment\":{}}],[\"freedom\",{\"_index\":1263,\"name\":{\"6398\":{},\"6530\":{}},\"comment\":{}}],[\"fret\",{\"_index\":1219,\"name\":{\"5574\":{}},\"comment\":{}}],[\"frethandfinger\",{\"_index\":524,\"name\":{\"1500\":{},\"1750\":{},\"7001\":{}},\"comment\":{}}],[\"fromcssstring\",{\"_index\":613,\"name\":{\"1660\":{}},\"comment\":{}}],[\"full\",{\"_index\":1383,\"name\":{\"7201\":{}},\"comment\":{}}],[\"gcd\",{\"_index\":662,\"name\":{\"1723\":{}},\"comment\":{}}],[\"generatebeams\",{\"_index\":202,\"name\":{\"386\":{}},\"comment\":{}}],[\"generatedon\",{\"_index\":590,\"name\":{\"1619\":{}},\"comment\":{}}],[\"getabsolutex\",{\"_index\":165,\"name\":{\"307\":{},\"908\":{},\"1058\":{},\"1911\":{},\"2168\":{},\"2394\":{},\"2631\":{},\"2848\":{},\"3218\":{},\"3331\":{},\"3927\":{},\"4600\":{},\"5203\":{},\"5696\":{},\"6124\":{},\"6324\":{},\"6446\":{},\"6756\":{}},\"comment\":{}}],[\"getaccidental\",{\"_index\":805,\"name\":{\"2704\":{}},\"comment\":{}}],[\"getactualresolution\",{\"_index\":1391,\"name\":{\"7215\":{}},\"comment\":{}}],[\"getattribute\",{\"_index\":59,\"name\":{\"61\":{},\"142\":{},\"216\":{},\"359\":{},\"437\":{},\"516\":{},\"746\":{},\"819\":{},\"961\":{},\"1111\":{},\"1167\":{},\"1232\":{},\"1389\":{},\"1798\":{},\"1960\":{},\"2075\":{},\"2221\":{},\"2440\":{},\"2508\":{},\"2680\":{},\"2760\":{},\"2900\":{},\"2967\":{},\"3053\":{},\"3273\":{},\"3446\":{},\"3508\":{},\"3591\":{},\"3654\":{},\"3752\":{},\"3980\":{},\"4099\":{},\"4167\":{},\"4217\":{},\"4273\":{},\"4340\":{},\"4407\":{},\"4646\":{},\"4719\":{},\"4776\":{},\"4841\":{},\"4899\":{},\"4958\":{},\"5020\":{},\"5094\":{},\"5255\":{},\"5330\":{},\"5405\":{},\"5554\":{},\"5745\":{},\"5805\":{},\"5912\":{},\"5967\":{},\"6034\":{},\"6177\":{},\"6377\":{},\"6469\":{},\"6595\":{},\"6668\":{},\"6808\":{},\"6871\":{},\"6954\":{},\"7126\":{},\"7175\":{},\"7243\":{}},\"comment\":{}}],[\"getattributes\",{\"_index\":58,\"name\":{\"60\":{},\"141\":{},\"215\":{},\"358\":{},\"436\":{},\"515\":{},\"745\":{},\"818\":{},\"960\":{},\"1110\":{},\"1166\":{},\"1231\":{},\"1388\":{},\"1797\":{},\"1959\":{},\"2074\":{},\"2220\":{},\"2439\":{},\"2507\":{},\"2679\":{},\"2759\":{},\"2899\":{},\"2966\":{},\"3052\":{},\"3272\":{},\"3445\":{},\"3507\":{},\"3590\":{},\"3653\":{},\"3751\":{},\"3979\":{},\"4098\":{},\"4166\":{},\"4216\":{},\"4272\":{},\"4339\":{},\"4406\":{},\"4645\":{},\"4718\":{},\"4775\":{},\"4840\":{},\"4898\":{},\"4957\":{},\"5019\":{},\"5093\":{},\"5254\":{},\"5329\":{},\"5404\":{},\"5553\":{},\"5744\":{},\"5804\":{},\"5911\":{},\"5966\":{},\"6033\":{},\"6176\":{},\"6376\":{},\"6468\":{},\"6594\":{},\"6667\":{},\"6807\":{},\"6870\":{},\"6953\":{},\"7125\":{},\"7174\":{},\"7242\":{}},\"comment\":{}}],[\"getbasecustomnoteheadglyphprops\",{\"_index\":691,\"name\":{\"1835\":{},\"2332\":{},\"2566\":{},\"4538\":{},\"5125\":{},\"5631\":{}},\"comment\":{}}],[\"getbeam\",{\"_index\":152,\"name\":{\"293\":{},\"894\":{},\"1044\":{},\"1897\":{},\"2154\":{},\"2385\":{},\"2621\":{},\"2834\":{},\"3204\":{},\"3381\":{},\"3913\":{},\"4591\":{},\"5189\":{},\"5686\":{},\"6110\":{},\"6310\":{},\"6742\":{}},\"comment\":{}}],[\"getbeamcount\",{\"_index\":218,\"name\":{\"408\":{},\"1837\":{},\"2334\":{},\"2568\":{},\"4540\":{},\"5127\":{},\"5633\":{}},\"comment\":{}}],[\"getbeamlines\",{\"_index\":228,\"name\":{\"418\":{}},\"comment\":{}}],[\"getbeamytodraw\",{\"_index\":225,\"name\":{\"415\":{}},\"comment\":{}}],[\"getbeatsoccupied\",{\"_index\":1337,\"name\":{\"6931\":{}},\"comment\":{}}],[\"getbottomlinebottomy\",{\"_index\":1012,\"name\":{\"4035\":{},\"5849\":{}},\"comment\":{}}],[\"getbottomliney\",{\"_index\":1024,\"name\":{\"4052\":{},\"5866\":{}},\"comment\":{}}],[\"getbottomy\",{\"_index\":1023,\"name\":{\"4051\":{},\"5865\":{}},\"comment\":{}}],[\"getboundingbox\",{\"_index\":62,\"name\":{\"64\":{},\"145\":{},\"219\":{},\"362\":{},\"440\":{},\"519\":{},\"749\":{},\"822\":{},\"964\":{},\"1114\":{},\"1170\":{},\"1235\":{},\"1392\":{},\"1801\":{},\"1963\":{},\"2078\":{},\"2104\":{},\"2283\":{},\"2511\":{},\"2683\":{},\"2763\":{},\"2903\":{},\"2970\":{},\"3056\":{},\"3276\":{},\"3332\":{},\"3511\":{},\"3594\":{},\"3657\":{},\"3755\":{},\"3863\":{},\"4050\":{},\"4170\":{},\"4220\":{},\"4276\":{},\"4343\":{},\"4410\":{},\"4486\":{},\"4722\":{},\"4779\":{},\"4844\":{},\"4902\":{},\"4961\":{},\"5023\":{},\"5069\":{},\"5258\":{},\"5333\":{},\"5408\":{},\"5557\":{},\"5748\":{},\"5808\":{},\"5864\":{},\"5970\":{},\"6037\":{},\"6180\":{},\"6380\":{},\"6472\":{},\"6598\":{},\"6671\":{},\"6811\":{},\"6874\":{},\"6957\":{},\"7129\":{},\"7178\":{},\"7218\":{}},\"comment\":{}}],[\"getcanonicalintervalname\",{\"_index\":872,\"name\":{\"3107\":{}},\"comment\":{}}],[\"getcanonicalnotename\",{\"_index\":871,\"name\":{\"3106\":{}},\"comment\":{}}],[\"getcanvascontext\",{\"_index\":982,\"name\":{\"3850\":{},\"7067\":{}},\"comment\":{}}],[\"getcategory\",{\"_index\":45,\"name\":{\"47\":{},\"128\":{},\"202\":{},\"345\":{},\"423\":{},\"502\":{},\"732\":{},\"805\":{},\"947\":{},\"1097\":{},\"1153\":{},\"1218\":{},\"1374\":{},\"1784\":{},\"1946\":{},\"2061\":{},\"2207\":{},\"2427\":{},\"2494\":{},\"2666\":{},\"2746\":{},\"2886\":{},\"2953\":{},\"3039\":{},\"3258\":{},\"3432\":{},\"3494\":{},\"3577\":{},\"3640\":{},\"3738\":{},\"3966\":{},\"4086\":{},\"4153\":{},\"4203\":{},\"4259\":{},\"4326\":{},\"4393\":{},\"4633\":{},\"4705\":{},\"4762\":{},\"4827\":{},\"4885\":{},\"4944\":{},\"5006\":{},\"5080\":{},\"5240\":{},\"5316\":{},\"5391\":{},\"5540\":{},\"5731\":{},\"5791\":{},\"5899\":{},\"5953\":{},\"6021\":{},\"6163\":{},\"6363\":{},\"6454\":{},\"6581\":{},\"6654\":{},\"6794\":{},\"6857\":{},\"6940\":{},\"7112\":{},\"7161\":{},\"7229\":{}},\"comment\":{}}],[\"getcenteralignedtickables\",{\"_index\":1288,\"name\":{\"6521\":{}},\"comment\":{}}],[\"getcenterglyphx\",{\"_index\":696,\"name\":{\"1842\":{},\"2338\":{},\"2572\":{},\"4544\":{},\"5132\":{},\"5637\":{}},\"comment\":{}}],[\"getcenterxshift\",{\"_index\":177,\"name\":{\"323\":{},\"924\":{},\"1074\":{},\"1925\":{},\"2184\":{},\"2405\":{},\"2644\":{},\"2864\":{},\"3234\":{},\"3409\":{},\"3943\":{},\"4611\":{},\"5217\":{},\"5709\":{},\"6140\":{},\"6340\":{},\"6422\":{},\"6772\":{}},\"comment\":{}}],[\"getclef\",{\"_index\":379,\"name\":{\"845\":{},\"4064\":{},\"5877\":{}},\"comment\":{}}],[\"getcode\",{\"_index\":737,\"name\":{\"2043\":{},\"6565\":{}},\"comment\":{}}],[\"getconfigforlines\",{\"_index\":1047,\"name\":{\"4082\":{},\"5895\":{}},\"comment\":{}}],[\"getcontext\",{\"_index\":63,\"name\":{\"65\":{},\"146\":{},\"220\":{},\"363\":{},\"441\":{},\"520\":{},\"750\":{},\"823\":{},\"965\":{},\"1115\":{},\"1171\":{},\"1236\":{},\"1393\":{},\"1428\":{},\"1802\":{},\"1964\":{},\"2079\":{},\"2224\":{},\"2443\":{},\"2512\":{},\"2684\":{},\"2764\":{},\"2904\":{},\"2971\":{},\"3057\":{},\"3277\":{},\"3449\":{},\"3512\":{},\"3595\":{},\"3658\":{},\"3756\":{},\"3855\":{},\"3983\":{},\"4102\":{},\"4171\":{},\"4221\":{},\"4277\":{},\"4344\":{},\"4411\":{},\"4649\":{},\"4723\":{},\"4780\":{},\"4845\":{},\"4903\":{},\"4962\":{},\"5024\":{},\"5097\":{},\"5259\":{},\"5334\":{},\"5409\":{},\"5558\":{},\"5749\":{},\"5809\":{},\"5915\":{},\"5971\":{},\"6038\":{},\"6181\":{},\"6381\":{},\"6473\":{},\"6599\":{},\"6672\":{},\"6812\":{},\"6875\":{},\"6958\":{},\"7130\":{},\"7179\":{},\"7246\":{}},\"comment\":{}}],[\"getcurrenttick\",{\"_index\":1289,\"name\":{\"6523\":{}},\"comment\":{}}],[\"getdata\",{\"_index\":624,\"name\":{\"1671\":{}},\"comment\":{}}],[\"getdefaultbeamgroups\",{\"_index\":200,\"name\":{\"384\":{}},\"comment\":{}}],[\"getdefaultledgerlinestyle\",{\"_index\":1002,\"name\":{\"4021\":{},\"5835\":{}},\"comment\":{}}],[\"getdefaultregistry\",{\"_index\":961,\"name\":{\"3777\":{}},\"comment\":{}}],[\"getdots\",{\"_index\":401,\"name\":{\"1188\":{}},\"comment\":{}}],[\"getduration\",{\"_index\":148,\"name\":{\"289\":{},\"890\":{},\"1040\":{},\"1893\":{},\"2150\":{},\"2382\":{},\"2618\":{},\"2830\":{},\"3200\":{},\"3377\":{},\"3909\":{},\"4588\":{},\"5185\":{},\"5683\":{},\"6106\":{},\"6306\":{},\"6738\":{}},\"comment\":{}}],[\"getelementbyid\",{\"_index\":967,\"name\":{\"3785\":{}},\"comment\":{}}],[\"getelements\",{\"_index\":449,\"name\":{\"1321\":{}},\"comment\":{}}],[\"getelementsbyattribute\",{\"_index\":968,\"name\":{\"3786\":{}},\"comment\":{}}],[\"getelementsbyclass\",{\"_index\":970,\"name\":{\"3788\":{}},\"comment\":{}}],[\"getelementsbytype\",{\"_index\":969,\"name\":{\"3787\":{}},\"comment\":{}}],[\"getendclef\",{\"_index\":1034,\"name\":{\"4066\":{},\"5879\":{}},\"comment\":{}}],[\"getextension\",{\"_index\":1158,\"name\":{\"5066\":{}},\"comment\":{}}],[\"getextents\",{\"_index\":1160,\"name\":{\"5070\":{}},\"comment\":{}}],[\"getfactory\",{\"_index\":448,\"name\":{\"1320\":{}},\"comment\":{}}],[\"getfirstdotpx\",{\"_index\":163,\"name\":{\"305\":{},\"906\":{},\"1056\":{},\"1909\":{},\"2166\":{},\"2392\":{},\"2629\":{},\"2846\":{},\"3216\":{},\"3393\":{},\"3925\":{},\"4598\":{},\"5201\":{},\"5694\":{},\"6122\":{},\"6322\":{},\"6754\":{}},\"comment\":{}}],[\"getflagstyle\",{\"_index\":777,\"name\":{\"2308\":{},\"4511\":{}},\"comment\":{}}],[\"getfont\",{\"_index\":68,\"name\":{\"70\":{},\"151\":{},\"225\":{},\"368\":{},\"446\":{},\"525\":{},\"612\":{},\"754\":{},\"828\":{},\"970\":{},\"1120\":{},\"1176\":{},\"1241\":{},\"1398\":{},\"1807\":{},\"1969\":{},\"2084\":{},\"2229\":{},\"2448\":{},\"2517\":{},\"2689\":{},\"2769\":{},\"2909\":{},\"2976\":{},\"3062\":{},\"3282\":{},\"3454\":{},\"3517\":{},\"3600\":{},\"3663\":{},\"3761\":{},\"3834\":{},\"3988\":{},\"4107\":{},\"4176\":{},\"4226\":{},\"4282\":{},\"4349\":{},\"4416\":{},\"4654\":{},\"4728\":{},\"4785\":{},\"4850\":{},\"4908\":{},\"4967\":{},\"5029\":{},\"5102\":{},\"5264\":{},\"5339\":{},\"5414\":{},\"5493\":{},\"5562\":{},\"5754\":{},\"5814\":{},\"5920\":{},\"5976\":{},\"6043\":{},\"6186\":{},\"6386\":{},\"6478\":{},\"6604\":{},\"6677\":{},\"6817\":{},\"6880\":{},\"6963\":{},\"7135\":{},\"7184\":{},\"7251\":{}},\"comment\":{}}],[\"getfontfamilies\",{\"_index\":1245,\"name\":{\"6214\":{}},\"comment\":{}}],[\"getfontsize\",{\"_index\":72,\"name\":{\"74\":{},\"155\":{},\"229\":{},\"372\":{},\"450\":{},\"529\":{},\"758\":{},\"832\":{},\"974\":{},\"1124\":{},\"1180\":{},\"1245\":{},\"1402\":{},\"1811\":{},\"1973\":{},\"2088\":{},\"2233\":{},\"2452\":{},\"2521\":{},\"2693\":{},\"2773\":{},\"2913\":{},\"2980\":{},\"3066\":{},\"3286\":{},\"3458\":{},\"3521\":{},\"3604\":{},\"3667\":{},\"3765\":{},\"3992\":{},\"4111\":{},\"4180\":{},\"4230\":{},\"4286\":{},\"4353\":{},\"4420\":{},\"4658\":{},\"4732\":{},\"4789\":{},\"4854\":{},\"4912\":{},\"4971\":{},\"5033\":{},\"5106\":{},\"5268\":{},\"5343\":{},\"5418\":{},\"5566\":{},\"5758\":{},\"5818\":{},\"5924\":{},\"5980\":{},\"6047\":{},\"6190\":{},\"6390\":{},\"6482\":{},\"6608\":{},\"6681\":{},\"6821\":{},\"6884\":{},\"6967\":{},\"7139\":{},\"7188\":{},\"7255\":{}},\"comment\":{}}],[\"getformattermetrics\",{\"_index\":176,\"name\":{\"322\":{},\"923\":{},\"1073\":{},\"1924\":{},\"2183\":{},\"2404\":{},\"2643\":{},\"2863\":{},\"3233\":{},\"3408\":{},\"3942\":{},\"4610\":{},\"5216\":{},\"5708\":{},\"6139\":{},\"6339\":{},\"6421\":{},\"6528\":{},\"6771\":{}},\"comment\":{}}],[\"getfrethandfinger\",{\"_index\":682,\"name\":{\"1759\":{}},\"comment\":{}}],[\"getglyph\",{\"_index\":138,\"name\":{\"279\":{},\"880\":{},\"1030\":{},\"1884\":{},\"2141\":{},\"2373\":{},\"2609\":{},\"2820\":{},\"3190\":{},\"3367\":{},\"3900\":{},\"4579\":{},\"5176\":{},\"5674\":{},\"6096\":{},\"6296\":{},\"6634\":{},\"6728\":{}},\"comment\":{}}],[\"getglyphmetrics\",{\"_index\":1251,\"name\":{\"6221\":{}},\"comment\":{}}],[\"getglyphprops\",{\"_index\":139,\"name\":{\"280\":{},\"881\":{},\"1031\":{},\"1885\":{},\"2142\":{},\"2374\":{},\"2610\":{},\"2821\":{},\"3191\":{},\"3368\":{},\"3901\":{},\"4580\":{},\"5177\":{},\"5675\":{},\"6097\":{},\"6297\":{},\"6729\":{}},\"comment\":{}}],[\"getglyphs\",{\"_index\":629,\"name\":{\"1677\":{},\"2731\":{}},\"comment\":{}}],[\"getglyphwidth\",{\"_index\":140,\"name\":{\"281\":{},\"882\":{},\"1032\":{},\"1886\":{},\"2107\":{},\"2375\":{},\"2611\":{},\"2822\":{},\"3192\":{},\"3369\":{},\"3866\":{},\"4581\":{},\"5178\":{},\"5676\":{},\"6098\":{},\"6298\":{},\"6730\":{}},\"comment\":{}}],[\"getgracenotes\",{\"_index\":794,\"name\":{\"2473\":{}},\"comment\":{}}],[\"geth\",{\"_index\":249,\"name\":{\"550\":{}},\"comment\":{}}],[\"getheight\",{\"_index\":1021,\"name\":{\"4048\":{},\"5068\":{},\"5862\":{}},\"comment\":{}}],[\"gethorizontal\",{\"_index\":362,\"name\":{\"708\":{}},\"comment\":{}}],[\"getindex\",{\"_index\":29,\"name\":{\"31\":{},\"112\":{},\"186\":{},\"487\":{},\"716\":{},\"1202\":{},\"1768\":{},\"2478\":{},\"2936\":{},\"3478\":{},\"3561\":{},\"3624\":{},\"5300\":{},\"5376\":{},\"6841\":{},\"7096\":{}},\"comment\":{}}],[\"getinfo\",{\"_index\":1246,\"name\":{\"6216\":{},\"6629\":{}},\"comment\":{}}],[\"getintervalbetween\",{\"_index\":876,\"name\":{\"3111\":{}},\"comment\":{}}],[\"getintervalvalue\",{\"_index\":870,\"name\":{\"3105\":{}},\"comment\":{}}],[\"getintrinsicticks\",{\"_index\":190,\"name\":{\"336\":{},\"938\":{},\"1088\":{},\"1937\":{},\"2198\":{},\"2418\":{},\"2657\":{},\"2877\":{},\"3249\":{},\"3423\":{},\"3957\":{},\"4624\":{},\"5231\":{},\"5722\":{},\"6154\":{},\"6354\":{},\"6441\":{},\"6785\":{}},\"comment\":{}}],[\"getisnumeric\",{\"_index\":1304,\"name\":{\"6636\":{}},\"comment\":{}}],[\"getjustification\",{\"_index\":93,\"name\":{\"104\":{}},\"comment\":{}}],[\"getkerningadjustment\",{\"_index\":348,\"name\":{\"693\":{}},\"comment\":{}}],[\"getkey\",{\"_index\":804,\"name\":{\"2702\":{}},\"comment\":{}}],[\"getkeyline\",{\"_index\":780,\"name\":{\"2311\":{},\"4514\":{}},\"comment\":{}}],[\"getkeyparts\",{\"_index\":868,\"name\":{\"3103\":{}},\"comment\":{}}],[\"getkeyprops\",{\"_index\":171,\"name\":{\"313\":{},\"914\":{},\"1064\":{},\"1915\":{},\"2174\":{},\"2396\":{},\"2635\":{},\"2854\":{},\"3224\":{},\"3400\":{},\"3933\":{},\"4602\":{},\"5207\":{},\"5700\":{},\"6130\":{},\"6330\":{},\"6762\":{}},\"comment\":{}}],[\"getkeys\",{\"_index\":170,\"name\":{\"312\":{},\"913\":{},\"1063\":{},\"1914\":{},\"2173\":{},\"2395\":{},\"2634\":{},\"2853\":{},\"3223\":{},\"3399\":{},\"3932\":{},\"4601\":{},\"5206\":{},\"5699\":{},\"6129\":{},\"6329\":{},\"6761\":{}},\"comment\":{}}],[\"getkeysignatures\",{\"_index\":577,\"name\":{\"1599\":{}},\"comment\":{}}],[\"getlargesttickwidth\",{\"_index\":1387,\"name\":{\"7209\":{}},\"comment\":{}}],[\"getlayoutmetrics\",{\"_index\":377,\"name\":{\"803\":{},\"2744\":{},\"4151\":{},\"4390\":{},\"4703\":{},\"4760\":{},\"4825\":{},\"4883\":{},\"5004\":{},\"6652\":{}},\"comment\":{}}],[\"getledgerlinestyle\",{\"_index\":775,\"name\":{\"2306\":{},\"4509\":{}},\"comment\":{}}],[\"getleftdisplacedheadpx\",{\"_index\":131,\"name\":{\"272\":{},\"873\":{},\"1023\":{},\"1877\":{},\"2134\":{},\"2368\":{},\"2603\":{},\"2813\":{},\"3183\":{},\"3360\":{},\"3893\":{},\"4574\":{},\"5169\":{},\"5668\":{},\"6089\":{},\"6289\":{},\"6721\":{}},\"comment\":{}}],[\"getleftparenthesispx\",{\"_index\":162,\"name\":{\"304\":{},\"905\":{},\"1055\":{},\"1908\":{},\"2165\":{},\"2391\":{},\"2628\":{},\"2845\":{},\"3215\":{},\"3392\":{},\"3924\":{},\"4597\":{},\"5200\":{},\"5693\":{},\"6121\":{},\"6321\":{},\"6753\":{}},\"comment\":{}}],[\"getleftshift\",{\"_index\":828,\"name\":{\"3003\":{}},\"comment\":{}}],[\"getline\",{\"_index\":902,\"name\":{\"3329\":{},\"6260\":{},\"6632\":{}},\"comment\":{}}],[\"getlineforrest\",{\"_index\":137,\"name\":{\"278\":{},\"879\":{},\"1029\":{},\"1883\":{},\"2140\":{},\"2297\":{},\"2546\":{},\"2819\":{},\"3189\":{},\"3366\":{},\"3899\":{},\"4500\":{},\"5175\":{},\"5611\":{},\"6095\":{},\"6295\":{},\"6727\":{}},\"comment\":{}}],[\"getlinefory\",{\"_index\":1026,\"name\":{\"4054\":{},\"5868\":{}},\"comment\":{}}],[\"getlinenumber\",{\"_index\":136,\"name\":{\"277\":{},\"878\":{},\"1028\":{},\"1882\":{},\"2139\":{},\"2284\":{},\"2608\":{},\"2818\":{},\"3188\":{},\"3365\":{},\"3898\":{},\"4487\":{},\"5174\":{},\"5673\":{},\"6094\":{},\"6294\":{},\"6726\":{}},\"comment\":{}}],[\"getmaxtickable\",{\"_index\":1283,\"name\":{\"6516\":{}},\"comment\":{}}],[\"getmaxticks\",{\"_index\":1281,\"name\":{\"6514\":{}},\"comment\":{}}],[\"getmeasure\",{\"_index\":1014,\"name\":{\"4041\":{},\"5855\":{}},\"comment\":{}}],[\"getmembers\",{\"_index\":827,\"name\":{\"3001\":{}},\"comment\":{}}],[\"getmetricforglyph\",{\"_index\":334,\"name\":{\"664\":{}},\"comment\":{}}],[\"getmetrics\",{\"_index\":164,\"name\":{\"306\":{},\"907\":{},\"1057\":{},\"1672\":{},\"1910\":{},\"2053\":{},\"2167\":{},\"2393\":{},\"2630\":{},\"2847\":{},\"3006\":{},\"3217\":{},\"3394\":{},\"3551\":{},\"3926\":{},\"4599\":{},\"5202\":{},\"5695\":{},\"6123\":{},\"6323\":{},\"6452\":{},\"6522\":{},\"6556\":{},\"6755\":{}},\"comment\":{}}],[\"getmintickable\",{\"_index\":1284,\"name\":{\"6517\":{}},\"comment\":{}}],[\"getminticks\",{\"_index\":1282,\"name\":{\"6515\":{}},\"comment\":{}}],[\"getmintotalwidth\",{\"_index\":654,\"name\":{\"1709\":{}},\"comment\":{}}],[\"getmode\",{\"_index\":1389,\"name\":{\"7212\":{}},\"comment\":{}}],[\"getmodifiercontext\",{\"_index\":32,\"name\":{\"34\":{},\"115\":{},\"189\":{},\"342\":{},\"490\":{},\"719\":{},\"944\":{},\"1094\":{},\"1205\":{},\"1771\":{},\"1943\":{},\"2204\":{},\"2424\":{},\"2481\":{},\"2663\":{},\"2883\":{},\"2939\":{},\"3255\":{},\"3429\":{},\"3481\":{},\"3564\":{},\"3627\":{},\"3963\":{},\"4630\":{},\"5237\":{},\"5303\":{},\"5379\":{},\"5728\":{},\"6160\":{},\"6360\":{},\"6448\":{},\"6791\":{},\"6844\":{},\"7099\":{}},\"comment\":{}}],[\"getmodifiers\",{\"_index\":185,\"name\":{\"331\":{},\"933\":{},\"1083\":{},\"1933\":{},\"2193\":{},\"2414\":{},\"2653\":{},\"2872\":{},\"3000\":{},\"3243\":{},\"3418\":{},\"3952\":{},\"4077\":{},\"4620\":{},\"5226\":{},\"5718\":{},\"5890\":{},\"6149\":{},\"6349\":{},\"6434\":{},\"6780\":{}},\"comment\":{}}],[\"getmodifiersbytype\",{\"_index\":157,\"name\":{\"298\":{},\"899\":{},\"1049\":{},\"1902\":{},\"2159\":{},\"2389\":{},\"2626\":{},\"2839\":{},\"3209\":{},\"3386\":{},\"3918\":{},\"4595\":{},\"5194\":{},\"5691\":{},\"6115\":{},\"6315\":{},\"6747\":{}},\"comment\":{}}],[\"getmodifierstartxy\",{\"_index\":158,\"name\":{\"299\":{},\"900\":{},\"1050\":{},\"1903\":{},\"2160\":{},\"2298\":{},\"2542\":{},\"2840\":{},\"3210\":{},\"3387\":{},\"3919\":{},\"4501\":{},\"5195\":{},\"5607\":{},\"6116\":{},\"6316\":{},\"6748\":{}},\"comment\":{}}],[\"getmodifierxshift\",{\"_index\":1015,\"name\":{\"4042\":{},\"5856\":{}},\"comment\":{}}],[\"getmusicfont\",{\"_index\":559,\"name\":{\"1578\":{}},\"comment\":{}}],[\"getmusicfontstack\",{\"_index\":560,\"name\":{\"1579\":{}},\"comment\":{}}],[\"getname\",{\"_index\":623,\"name\":{\"1670\":{}},\"comment\":{}}],[\"getnestedtupletcount\",{\"_index\":1342,\"name\":{\"6936\":{}},\"comment\":{}}],[\"getnextcontext\",{\"_index\":1274,\"name\":{\"6502\":{}},\"comment\":{}}],[\"getnote\",{\"_index\":27,\"name\":{\"29\":{},\"109\":{},\"183\":{},\"484\":{},\"713\":{},\"1200\":{},\"1765\":{},\"2475\":{},\"2933\":{},\"3475\":{},\"3558\":{},\"3622\":{},\"5297\":{},\"5373\":{},\"6838\":{},\"7093\":{}},\"comment\":{}}],[\"getnotecount\",{\"_index\":1335,\"name\":{\"6929\":{}},\"comment\":{}}],[\"getnoteendx\",{\"_index\":1006,\"name\":{\"4026\":{},\"5840\":{}},\"comment\":{}}],[\"getnoteforfret\",{\"_index\":1313,\"name\":{\"6897\":{}},\"comment\":{}}],[\"getnoteheadbeginx\",{\"_index\":784,\"name\":{\"2316\":{},\"4519\":{}},\"comment\":{}}],[\"getnoteheadbounds\",{\"_index\":783,\"name\":{\"2315\":{},\"4518\":{}},\"comment\":{}}],[\"getnoteheadendx\",{\"_index\":785,\"name\":{\"2317\":{},\"4520\":{}},\"comment\":{}}],[\"getnoteparts\",{\"_index\":867,\"name\":{\"3102\":{}},\"comment\":{}}],[\"getnotes\",{\"_index\":217,\"name\":{\"407\":{},\"4941\":{},\"5788\":{},\"5950\":{},\"6928\":{}},\"comment\":{}}],[\"getnotesoccupied\",{\"_index\":1339,\"name\":{\"6933\":{}},\"comment\":{}}],[\"getnotestartx\",{\"_index\":1005,\"name\":{\"4025\":{},\"5839\":{}},\"comment\":{}}],[\"getnotetype\",{\"_index\":151,\"name\":{\"292\":{},\"893\":{},\"1043\":{},\"1896\":{},\"2153\":{},\"2384\":{},\"2620\":{},\"2833\":{},\"3203\":{},\"3380\":{},\"3912\":{},\"4590\":{},\"5188\":{},\"5685\":{},\"6109\":{},\"6309\":{},\"6741\":{}},\"comment\":{}}],[\"getnotevalue\",{\"_index\":869,\"name\":{\"3104\":{}},\"comment\":{}}],[\"getnumlines\",{\"_index\":1009,\"name\":{\"4030\":{},\"5844\":{}},\"comment\":{}}],[\"getoutlineboundingbox\",{\"_index\":733,\"name\":{\"2032\":{},\"6546\":{}},\"comment\":{}}],[\"getpadding\",{\"_index\":374,\"name\":{\"800\":{},\"2725\":{},\"4148\":{},\"4387\":{},\"4700\":{},\"4757\":{},\"4822\":{},\"4880\":{},\"5001\":{},\"6649\":{}},\"comment\":{}}],[\"getplaynote\",{\"_index\":124,\"name\":{\"265\":{},\"866\":{},\"1016\":{},\"1872\":{},\"2127\":{},\"2363\":{},\"2597\":{},\"2806\":{},\"3176\":{},\"3354\":{},\"3886\":{},\"4569\":{},\"5162\":{},\"5662\":{},\"6082\":{},\"6282\":{},\"6714\":{}},\"comment\":{}}],[\"getpoint\",{\"_index\":105,\"name\":{\"239\":{},\"782\":{},\"841\":{},\"990\":{},\"1820\":{},\"2100\":{},\"2267\":{},\"2530\":{},\"2782\":{},\"3155\":{},\"3320\":{},\"3859\":{},\"4474\":{},\"5115\":{},\"5595\":{},\"6058\":{},\"6256\":{},\"6690\":{}},\"comment\":{}}],[\"getposition\",{\"_index\":35,\"name\":{\"37\":{},\"118\":{},\"192\":{},\"493\":{},\"722\":{},\"792\":{},\"1208\":{},\"1774\":{},\"2484\":{},\"2733\":{},\"2942\":{},\"3484\":{},\"3567\":{},\"3630\":{},\"4138\":{},\"4377\":{},\"4690\":{},\"4747\":{},\"4812\":{},\"4870\":{},\"4991\":{},\"5306\":{},\"5368\":{},\"6639\":{},\"6847\":{},\"7102\":{}},\"comment\":{}}],[\"getpositions\",{\"_index\":799,\"name\":{\"2541\":{},\"5606\":{}},\"comment\":{}}],[\"getrelativenotename\",{\"_index\":874,\"name\":{\"3109\":{}},\"comment\":{}}],[\"getrelativenotevalue\",{\"_index\":873,\"name\":{\"3108\":{}},\"comment\":{}}],[\"getreportwidth\",{\"_index\":345,\"name\":{\"690\":{}},\"comment\":{}}],[\"getresolution\",{\"_index\":628,\"name\":{\"1676\":{},\"6230\":{}},\"comment\":{}}],[\"getresolutionmultiplier\",{\"_index\":651,\"name\":{\"1705\":{},\"7214\":{}},\"comment\":{}}],[\"getrightdisplacedheadpx\",{\"_index\":132,\"name\":{\"273\":{},\"874\":{},\"1024\":{},\"1878\":{},\"2135\":{},\"2369\":{},\"2604\":{},\"2814\":{},\"3184\":{},\"3361\":{},\"3894\":{},\"4575\":{},\"5170\":{},\"5669\":{},\"6090\":{},\"6290\":{},\"6722\":{}},\"comment\":{}}],[\"getrightparenthesispx\",{\"_index\":161,\"name\":{\"303\":{},\"904\":{},\"1054\":{},\"1907\":{},\"2164\":{},\"2390\":{},\"2627\":{},\"2844\":{},\"3214\":{},\"3391\":{},\"3923\":{},\"4596\":{},\"5199\":{},\"5692\":{},\"6120\":{},\"6320\":{},\"6752\":{}},\"comment\":{}}],[\"getrightshift\",{\"_index\":829,\"name\":{\"3004\":{}},\"comment\":{}}],[\"getscaletones\",{\"_index\":875,\"name\":{\"3110\":{}},\"comment\":{}}],[\"getslopey\",{\"_index\":222,\"name\":{\"412\":{}},\"comment\":{}}],[\"getsmallesttickcount\",{\"_index\":1388,\"name\":{\"7210\":{}},\"comment\":{}}],[\"getspacingbetweenlines\",{\"_index\":1022,\"name\":{\"4049\":{},\"5863\":{}},\"comment\":{}}],[\"getspacingfromnextmodifier\",{\"_index\":40,\"name\":{\"42\":{},\"123\":{},\"197\":{},\"498\":{},\"727\":{},\"1213\":{},\"1779\":{},\"2489\":{},\"2947\":{},\"3489\":{},\"3572\":{},\"3635\":{},\"5311\":{},\"5386\":{},\"6852\":{},\"7107\":{}},\"comment\":{}}],[\"getstate\",{\"_index\":830,\"name\":{\"3005\":{}},\"comment\":{}}],[\"getstave\",{\"_index\":128,\"name\":{\"269\":{},\"794\":{},\"870\":{},\"1020\":{},\"1430\":{},\"1875\":{},\"2131\":{},\"2366\":{},\"2601\":{},\"2735\":{},\"2810\":{},\"3033\":{},\"3180\":{},\"3358\":{},\"3890\":{},\"4140\":{},\"4379\":{},\"4572\":{},\"4692\":{},\"4749\":{},\"4814\":{},\"4872\":{},\"4993\":{},\"5166\":{},\"5666\":{},\"6086\":{},\"6286\":{},\"6450\":{},\"6641\":{},\"6718\":{},\"7217\":{}},\"comment\":{}}],[\"getstavenotescale\",{\"_index\":761,\"name\":{\"2271\":{},\"4529\":{}},\"comment\":{}}],[\"getstaves\",{\"_index\":1213,\"name\":{\"5531\":{}},\"comment\":{}}],[\"getstem\",{\"_index\":686,\"name\":{\"1830\":{},\"2328\":{},\"2561\":{},\"4534\":{},\"5120\":{},\"5626\":{}},\"comment\":{}}],[\"getstemdirection\",{\"_index\":166,\"name\":{\"308\":{},\"406\":{},\"909\":{},\"1059\":{},\"1839\":{},\"2169\":{},\"2336\":{},\"2570\":{},\"2849\":{},\"3219\":{},\"3395\":{},\"3928\":{},\"4542\":{},\"5129\":{},\"5635\":{},\"6125\":{},\"6325\":{},\"6757\":{}},\"comment\":{}}],[\"getstemextension\",{\"_index\":697,\"name\":{\"1843\":{},\"2270\":{},\"2538\":{},\"4530\":{},\"5133\":{},\"5603\":{}},\"comment\":{}}],[\"getstemextents\",{\"_index\":167,\"name\":{\"309\":{},\"910\":{},\"1060\":{},\"1845\":{},\"2170\":{},\"2340\":{},\"2550\":{},\"2850\":{},\"3220\":{},\"3396\":{},\"3929\":{},\"4546\":{},\"5135\":{},\"5615\":{},\"6126\":{},\"6326\":{},\"6758\":{}},\"comment\":{}}],[\"getstemlength\",{\"_index\":692,\"name\":{\"1836\":{},\"2333\":{},\"2567\":{},\"4539\":{},\"5126\":{},\"5632\":{}},\"comment\":{}}],[\"getstemminimumlength\",{\"_index\":693,\"name\":{\"1838\":{},\"2335\":{},\"2569\":{},\"4541\":{},\"5128\":{},\"5634\":{}},\"comment\":{}}],[\"getstemstyle\",{\"_index\":773,\"name\":{\"2304\":{},\"4507\":{}},\"comment\":{}}],[\"getstemx\",{\"_index\":695,\"name\":{\"1841\":{},\"2289\":{},\"2548\":{},\"4492\":{},\"5131\":{},\"5613\":{}},\"comment\":{}}],[\"getstemy\",{\"_index\":800,\"name\":{\"2549\":{},\"5614\":{}},\"comment\":{}}],[\"getstyle\",{\"_index\":48,\"name\":{\"50\":{},\"131\":{},\"205\":{},\"348\":{},\"426\":{},\"505\":{},\"735\":{},\"808\":{},\"950\":{},\"1100\":{},\"1156\":{},\"1221\":{},\"1377\":{},\"1787\":{},\"1949\":{},\"2064\":{},\"2210\":{},\"2429\":{},\"2497\":{},\"2669\":{},\"2749\":{},\"2889\":{},\"2956\":{},\"3042\":{},\"3261\":{},\"3435\":{},\"3497\":{},\"3580\":{},\"3643\":{},\"3741\":{},\"3969\":{},\"4039\":{},\"4156\":{},\"4206\":{},\"4262\":{},\"4329\":{},\"4396\":{},\"4635\":{},\"4708\":{},\"4765\":{},\"4830\":{},\"4888\":{},\"4947\":{},\"5009\":{},\"5083\":{},\"5243\":{},\"5319\":{},\"5394\":{},\"5543\":{},\"5734\":{},\"5794\":{},\"5853\":{},\"5956\":{},\"6024\":{},\"6166\":{},\"6366\":{},\"6457\":{},\"6584\":{},\"6657\":{},\"6797\":{},\"6860\":{},\"6943\":{},\"7115\":{},\"7164\":{},\"7232\":{}},\"comment\":{}}],[\"getsvgcontext\",{\"_index\":983,\"name\":{\"3851\":{}},\"comment\":{}}],[\"getsvgelement\",{\"_index\":60,\"name\":{\"62\":{},\"143\":{},\"217\":{},\"360\":{},\"438\":{},\"517\":{},\"747\":{},\"820\":{},\"962\":{},\"1112\":{},\"1168\":{},\"1233\":{},\"1390\":{},\"1799\":{},\"1961\":{},\"2076\":{},\"2222\":{},\"2441\":{},\"2509\":{},\"2681\":{},\"2761\":{},\"2901\":{},\"2968\":{},\"3054\":{},\"3274\":{},\"3447\":{},\"3509\":{},\"3592\":{},\"3655\":{},\"3753\":{},\"3981\":{},\"4100\":{},\"4168\":{},\"4218\":{},\"4274\":{},\"4341\":{},\"4408\":{},\"4647\":{},\"4720\":{},\"4777\":{},\"4842\":{},\"4900\":{},\"4959\":{},\"5021\":{},\"5095\":{},\"5256\":{},\"5331\":{},\"5406\":{},\"5555\":{},\"5746\":{},\"5806\":{},\"5913\":{},\"5968\":{},\"6035\":{},\"6178\":{},\"6378\":{},\"6470\":{},\"6596\":{},\"6669\":{},\"6809\":{},\"6872\":{},\"6955\":{},\"7127\":{},\"7176\":{},\"7244\":{}},\"comment\":{}}],[\"getsymbolblock\",{\"_index\":349,\"name\":{\"694\":{}},\"comment\":{}}],[\"gettext\",{\"_index\":240,\"name\":{\"479\":{},\"6261\":{}},\"comment\":{}}],[\"gettextheight\",{\"_index\":241,\"name\":{\"480\":{}},\"comment\":{}}],[\"gettickableforvoice\",{\"_index\":1286,\"name\":{\"6519\":{}},\"comment\":{}}],[\"gettickables\",{\"_index\":1285,\"name\":{\"6518\":{},\"7211\":{}},\"comment\":{}}],[\"gettickablesbyvoice\",{\"_index\":1287,\"name\":{\"6520\":{}},\"comment\":{}}],[\"gettickcontext\",{\"_index\":146,\"name\":{\"287\":{},\"888\":{},\"1038\":{},\"1720\":{},\"1891\":{},\"2148\":{},\"2380\":{},\"2616\":{},\"2828\":{},\"3198\":{},\"3375\":{},\"3907\":{},\"4586\":{},\"5183\":{},\"5681\":{},\"6104\":{},\"6304\":{},\"6736\":{}},\"comment\":{}}],[\"gettickcontexts\",{\"_index\":657,\"name\":{\"1712\":{}},\"comment\":{}}],[\"gettickid\",{\"_index\":1276,\"name\":{\"6505\":{}},\"comment\":{}}],[\"gettickmultiplier\",{\"_index\":192,\"name\":{\"338\":{},\"940\":{},\"1090\":{},\"1939\":{},\"2200\":{},\"2420\":{},\"2659\":{},\"2879\":{},\"3251\":{},\"3425\":{},\"3959\":{},\"4626\":{},\"5233\":{},\"5724\":{},\"6156\":{},\"6356\":{},\"6443\":{},\"6787\":{}},\"comment\":{}}],[\"getticks\",{\"_index\":173,\"name\":{\"315\":{},\"916\":{},\"1066\":{},\"1917\":{},\"2176\":{},\"2397\":{},\"2636\":{},\"2856\":{},\"3226\":{},\"3402\":{},\"3935\":{},\"4603\":{},\"5209\":{},\"5701\":{},\"6132\":{},\"6332\":{},\"6413\":{},\"6764\":{}},\"comment\":{}}],[\"getticksused\",{\"_index\":1386,\"name\":{\"7208\":{}},\"comment\":{}}],[\"gettieendx\",{\"_index\":1008,\"name\":{\"4028\":{},\"5842\":{}},\"comment\":{}}],[\"gettieleftx\",{\"_index\":169,\"name\":{\"311\":{},\"912\":{},\"1062\":{},\"1913\":{},\"2172\":{},\"2296\":{},\"2633\":{},\"2852\":{},\"3222\":{},\"3398\":{},\"3931\":{},\"4499\":{},\"5205\":{},\"5698\":{},\"6128\":{},\"6328\":{},\"6760\":{}},\"comment\":{}}],[\"gettierightx\",{\"_index\":168,\"name\":{\"310\":{},\"911\":{},\"1061\":{},\"1912\":{},\"2171\":{},\"2295\":{},\"2632\":{},\"2851\":{},\"3221\":{},\"3397\":{},\"3930\":{},\"4498\":{},\"5204\":{},\"5697\":{},\"6127\":{},\"6327\":{},\"6759\":{}},\"comment\":{}}],[\"gettiestartx\",{\"_index\":1007,\"name\":{\"4027\":{},\"5841\":{}},\"comment\":{}}],[\"gettimespec\",{\"_index\":1303,\"name\":{\"6631\":{}},\"comment\":{}}],[\"gettoplinetopy\",{\"_index\":1011,\"name\":{\"4034\":{},\"5848\":{}},\"comment\":{}}],[\"gettotalticks\",{\"_index\":1385,\"name\":{\"7207\":{}},\"comment\":{}}],[\"gettuplet\",{\"_index\":181,\"name\":{\"327\":{},\"928\":{},\"1078\":{},\"1929\":{},\"2188\":{},\"2409\":{},\"2648\":{},\"2868\":{},\"3238\":{},\"3413\":{},\"3947\":{},\"4615\":{},\"5221\":{},\"5713\":{},\"6144\":{},\"6344\":{},\"6428\":{},\"6776\":{}},\"comment\":{}}],[\"gettupletstack\",{\"_index\":182,\"name\":{\"328\":{},\"929\":{},\"1079\":{},\"1930\":{},\"2189\":{},\"2410\":{},\"2649\":{},\"2869\":{},\"3239\":{},\"3414\":{},\"3948\":{},\"4616\":{},\"5222\":{},\"5714\":{},\"6145\":{},\"6345\":{},\"6429\":{},\"6777\":{}},\"comment\":{}}],[\"gettype\",{\"_index\":106,\"name\":{\"242\":{},\"4132\":{},\"4197\":{}},\"comment\":{}}],[\"getvalueforfret\",{\"_index\":1312,\"name\":{\"6896\":{}},\"comment\":{}}],[\"getvalueforstring\",{\"_index\":1311,\"name\":{\"6895\":{}},\"comment\":{}}],[\"getvertical\",{\"_index\":360,\"name\":{\"706\":{}},\"comment\":{}}],[\"getverticalbarwidth\",{\"_index\":1046,\"name\":{\"4081\":{},\"5894\":{}},\"comment\":{}}],[\"getvoice\",{\"_index\":144,\"name\":{\"285\":{},\"886\":{},\"1036\":{},\"1889\":{},\"2146\":{},\"2378\":{},\"2614\":{},\"2826\":{},\"3196\":{},\"3373\":{},\"3905\":{},\"4584\":{},\"5181\":{},\"5679\":{},\"6102\":{},\"6302\":{},\"6426\":{},\"6734\":{}},\"comment\":{}}],[\"getvoices\",{\"_index\":490,\"name\":{\"1431\":{},\"5532\":{}},\"comment\":{}}],[\"getvoiceshiftwidth\",{\"_index\":781,\"name\":{\"2312\":{},\"4515\":{}},\"comment\":{}}],[\"getw\",{\"_index\":248,\"name\":{\"549\":{}},\"comment\":{}}],[\"getwidth\",{\"_index\":22,\"name\":{\"24\":{},\"107\":{},\"181\":{},\"318\":{},\"482\":{},\"709\":{},\"789\":{},\"919\":{},\"1069\":{},\"1198\":{},\"1763\":{},\"1920\":{},\"2001\":{},\"2033\":{},\"2179\":{},\"2400\":{},\"2472\":{},\"2639\":{},\"2726\":{},\"2859\":{},\"2931\":{},\"3002\":{},\"3229\":{},\"3324\":{},\"3473\":{},\"3556\":{},\"3620\":{},\"3938\":{},\"4038\":{},\"4143\":{},\"4382\":{},\"4606\":{},\"4695\":{},\"4752\":{},\"4817\":{},\"4875\":{},\"4996\":{},\"5212\":{},\"5295\":{},\"5371\":{},\"5704\":{},\"5852\":{},\"6135\":{},\"6335\":{},\"6417\":{},\"6512\":{},\"6547\":{},\"6644\":{},\"6767\":{},\"6836\":{},\"7091\":{}},\"comment\":{}}],[\"getwidthforcharacterinem\",{\"_index\":1253,\"name\":{\"6223\":{}},\"comment\":{}}],[\"getwidthforglyph\",{\"_index\":337,\"name\":{\"667\":{}},\"comment\":{}}],[\"getwidthfortextinem\",{\"_index\":1256,\"name\":{\"6226\":{}},\"comment\":{}}],[\"getwidthfortextinpx\",{\"_index\":1257,\"name\":{\"6227\":{}},\"comment\":{}}],[\"getx\",{\"_index\":175,\"name\":{\"321\":{},\"547\":{},\"797\":{},\"922\":{},\"1072\":{},\"1923\":{},\"2182\":{},\"2403\":{},\"2642\":{},\"2739\":{},\"2862\":{},\"3232\":{},\"3407\":{},\"3941\":{},\"4029\":{},\"4145\":{},\"4384\":{},\"4609\":{},\"4697\":{},\"4754\":{},\"4819\":{},\"4877\":{},\"4998\":{},\"5215\":{},\"5527\":{},\"5707\":{},\"5843\":{},\"6138\":{},\"6338\":{},\"6420\":{},\"6506\":{},\"6646\":{},\"6770\":{}},\"comment\":{}}],[\"getx1\",{\"_index\":258,\"name\":{\"560\":{}},\"comment\":{}}],[\"getxbase\",{\"_index\":1277,\"name\":{\"6508\":{}},\"comment\":{}}],[\"getxoffset\",{\"_index\":1279,\"name\":{\"6510\":{}},\"comment\":{}}],[\"getxs\",{\"_index\":844,\"name\":{\"3028\":{}},\"comment\":{}}],[\"getxshift\",{\"_index\":42,\"name\":{\"44\":{},\"125\":{},\"199\":{},\"320\":{},\"499\":{},\"729\":{},\"921\":{},\"1071\":{},\"1215\":{},\"1781\":{},\"1922\":{},\"2047\":{},\"2181\":{},\"2402\":{},\"2491\":{},\"2641\":{},\"2861\":{},\"2949\":{},\"3231\":{},\"3406\":{},\"3491\":{},\"3574\":{},\"3637\":{},\"3940\":{},\"4200\":{},\"4608\":{},\"5214\":{},\"5313\":{},\"5388\":{},\"5706\":{},\"6137\":{},\"6337\":{},\"6419\":{},\"6569\":{},\"6769\":{},\"6854\":{},\"7109\":{}},\"comment\":{}}],[\"getxshiftforglyph\",{\"_index\":339,\"name\":{\"669\":{}},\"comment\":{}}],[\"gety\",{\"_index\":247,\"name\":{\"548\":{},\"3327\":{},\"4033\":{},\"5529\":{},\"5847\":{}},\"comment\":{}}],[\"gety1\",{\"_index\":259,\"name\":{\"561\":{}},\"comment\":{}}],[\"getyforbottomtext\",{\"_index\":701,\"name\":{\"1850\":{},\"2291\":{},\"2575\":{},\"4056\":{},\"4494\":{},\"5140\":{},\"5640\":{},\"5870\":{}},\"comment\":{}}],[\"getyforcharacterinpx\",{\"_index\":1254,\"name\":{\"6224\":{}},\"comment\":{}}],[\"getyforglyphs\",{\"_index\":1028,\"name\":{\"4058\":{},\"5831\":{}},\"comment\":{}}],[\"getyforline\",{\"_index\":1025,\"name\":{\"4053\":{},\"5867\":{}},\"comment\":{}}],[\"getyfornote\",{\"_index\":1027,\"name\":{\"4057\":{},\"5871\":{}},\"comment\":{}}],[\"getyforstringinpx\",{\"_index\":1255,\"name\":{\"6225\":{}},\"comment\":{}}],[\"getyfortoptext\",{\"_index\":143,\"name\":{\"284\":{},\"885\":{},\"1035\":{},\"1849\":{},\"2145\":{},\"2290\":{},\"2574\":{},\"2825\":{},\"3195\":{},\"3372\":{},\"3904\":{},\"4055\":{},\"4493\":{},\"5139\":{},\"5639\":{},\"5869\":{},\"6101\":{},\"6301\":{},\"6733\":{}},\"comment\":{}}],[\"getyoffsetfortext\",{\"_index\":363,\"name\":{\"710\":{}},\"comment\":{}}],[\"getyposition\",{\"_index\":1343,\"name\":{\"6937\":{}},\"comment\":{}}],[\"getys\",{\"_index\":142,\"name\":{\"283\":{},\"884\":{},\"1034\":{},\"1888\":{},\"2144\":{},\"2377\":{},\"2613\":{},\"2824\":{},\"3194\":{},\"3371\":{},\"3903\":{},\"4583\":{},\"5180\":{},\"5678\":{},\"6100\":{},\"6300\":{},\"6732\":{}},\"comment\":{}}],[\"getyshift\",{\"_index\":739,\"name\":{\"2049\":{},\"6571\":{}},\"comment\":{}}],[\"getyshiftforglyph\",{\"_index\":338,\"name\":{\"668\":{}},\"comment\":{}}],[\"ghostnote\",{\"_index\":495,\"name\":{\"1437\":{},\"1501\":{},\"1817\":{},\"7002\":{}},\"comment\":{}}],[\"global\",{\"_index\":316,\"name\":{\"629\":{}},\"comment\":{}}],[\"globalobject\",{\"_index\":1356,\"name\":{\"7052\":{}},\"comment\":{}}],[\"globalsoftmax\",{\"_index\":634,\"name\":{\"1682\":{},\"5499\":{}},\"comment\":{}}],[\"glyph\",{\"_index\":310,\"name\":{\"623\":{},\"648\":{},\"1502\":{},\"2020\":{},\"2028\":{},\"6237\":{},\"6542\":{},\"6615\":{},\"7003\":{}},\"comment\":{}}],[\"glyph_code\",{\"_index\":901,\"name\":{\"3323\":{}},\"comment\":{}}],[\"glyph_font_scale\",{\"_index\":119,\"name\":{\"259\":{},\"860\":{},\"1010\":{},\"1866\":{},\"2121\":{},\"2246\":{},\"2357\":{},\"2591\":{},\"2800\":{},\"3170\":{},\"3297\":{},\"3348\":{},\"3880\":{},\"4454\":{},\"4563\":{},\"4807\":{},\"5156\":{},\"5582\":{},\"5656\":{},\"6076\":{},\"6276\":{},\"6708\":{}},\"comment\":{}}],[\"glyph_font_size\",{\"_index\":121,\"name\":{\"261\":{},\"862\":{},\"1012\":{},\"1868\":{},\"2123\":{},\"2359\":{},\"2593\":{},\"2802\":{},\"3172\":{},\"3350\":{},\"3882\":{},\"4565\":{},\"5158\":{},\"5658\":{},\"6078\":{},\"6278\":{},\"6710\":{}},\"comment\":{}}],[\"glyphmetrics\",{\"_index\":721,\"name\":{\"2004\":{}},\"comment\":{}}],[\"glyphnote\",{\"_index\":493,\"name\":{\"1435\":{},\"1503\":{},\"2097\":{},\"7004\":{}},\"comment\":{}}],[\"glyphnoteoptions\",{\"_index\":746,\"name\":{\"2094\":{}},\"comment\":{}}],[\"glyphoptions\",{\"_index\":720,\"name\":{\"2002\":{}},\"comment\":{}}],[\"glyphprops\",{\"_index\":110,\"name\":{\"247\":{},\"848\":{},\"998\":{},\"1854\":{},\"1979\":{},\"2109\":{},\"2345\":{},\"2579\":{},\"2788\":{},\"3158\":{},\"3336\":{},\"3868\":{},\"4551\":{},\"5144\":{},\"5644\":{},\"6064\":{},\"6264\":{},\"6696\":{}},\"comment\":{}}],[\"glyphpx\",{\"_index\":887,\"name\":{\"3132\":{},\"6497\":{}},\"comment\":{}}],[\"glyphs\",{\"_index\":324,\"name\":{\"638\":{},\"673\":{},\"1616\":{},\"1635\":{},\"3714\":{},\"6056\":{},\"6199\":{},\"6254\":{},\"6620\":{}},\"comment\":{}}],[\"glyphwidth\",{\"_index\":882,\"name\":{\"3127\":{},\"6492\":{}},\"comment\":{}}],[\"gracenote\",{\"_index\":500,\"name\":{\"1444\":{},\"1504\":{},\"2256\":{},\"7005\":{}},\"comment\":{}}],[\"gracenotegroup\",{\"_index\":501,\"name\":{\"1445\":{},\"1505\":{},\"2458\":{},\"7006\":{}},\"comment\":{}}],[\"gracenotestruct\",{\"_index\":750,\"name\":{\"2239\":{}},\"comment\":{}}],[\"gracetabnote\",{\"_index\":525,\"name\":{\"1506\":{},\"2527\":{},\"7007\":{}},\"comment\":{}}],[\"grammar\",{\"_index\":466,\"name\":{\"1348\":{},\"3697\":{}},\"comment\":{}}],[\"greaterthan\",{\"_index\":672,\"name\":{\"1737\":{}},\"comment\":{}}],[\"greaterthanequals\",{\"_index\":673,\"name\":{\"1738\":{}},\"comment\":{}}],[\"greateststring\",{\"_index\":795,\"name\":{\"2533\":{},\"5598\":{}},\"comment\":{}}],[\"groupattributes\",{\"_index\":974,\"name\":{\"3796\":{}},\"comment\":{}}],[\"groupedresults\",{\"_index\":938,\"name\":{\"3696\":{}},\"comment\":{}}],[\"groups\",{\"_index\":1192,\"name\":{\"5455\":{}},\"comment\":{}}],[\"h\",{\"_index\":244,\"name\":{\"539\":{},\"546\":{}},\"comment\":{}}],[\"ha\",{\"_index\":601,\"name\":{\"1641\":{},\"2012\":{}},\"comment\":{}}],[\"harsh\",{\"_index\":1375,\"name\":{\"7077\":{},\"7155\":{}},\"comment\":{}}],[\"hasbeam\",{\"_index\":154,\"name\":{\"295\":{},\"896\":{},\"1046\":{},\"1899\":{},\"2156\":{},\"2387\":{},\"2623\":{},\"2836\":{},\"3206\":{},\"3383\":{},\"3915\":{},\"4593\":{},\"5191\":{},\"5688\":{},\"6112\":{},\"6312\":{},\"6744\":{}},\"comment\":{}}],[\"hasclass\",{\"_index\":52,\"name\":{\"54\":{},\"135\":{},\"209\":{},\"352\":{},\"430\":{},\"509\":{},\"739\":{},\"812\":{},\"954\":{},\"1104\":{},\"1160\":{},\"1225\":{},\"1382\":{},\"1791\":{},\"1953\":{},\"2068\":{},\"2214\":{},\"2433\":{},\"2501\":{},\"2673\":{},\"2753\":{},\"2893\":{},\"2960\":{},\"3046\":{},\"3266\":{},\"3439\":{},\"3501\":{},\"3584\":{},\"3647\":{},\"3745\":{},\"3973\":{},\"4092\":{},\"4160\":{},\"4210\":{},\"4266\":{},\"4333\":{},\"4400\":{},\"4639\":{},\"4712\":{},\"4769\":{},\"4834\":{},\"4892\":{},\"4951\":{},\"5013\":{},\"5087\":{},\"5248\":{},\"5323\":{},\"5398\":{},\"5547\":{},\"5738\":{},\"5798\":{},\"5905\":{},\"5960\":{},\"6027\":{},\"6170\":{},\"6370\":{},\"6462\":{},\"6588\":{},\"6661\":{},\"6801\":{},\"6864\":{},\"6947\":{},\"7119\":{},\"7168\":{},\"7236\":{}},\"comment\":{}}],[\"hasdata\",{\"_index\":627,\"name\":{\"1675\":{}},\"comment\":{}}],[\"hasflag\",{\"_index\":702,\"name\":{\"1851\":{},\"2288\":{},\"2576\":{},\"4491\":{},\"5141\":{},\"5641\":{}},\"comment\":{}}],[\"haskeysignature\",{\"_index\":576,\"name\":{\"1598\":{}},\"comment\":{}}],[\"hasstem\",{\"_index\":150,\"name\":{\"291\":{},\"892\":{},\"1042\":{},\"1895\":{},\"2152\":{},\"2287\":{},\"2537\":{},\"2832\":{},\"3202\":{},\"3379\":{},\"3911\":{},\"4490\":{},\"5187\":{},\"5602\":{},\"6108\":{},\"6308\":{},\"6740\":{}},\"comment\":{}}],[\"height\",{\"_index\":260,\"name\":{\"563\":{},\"571\":{},\"982\":{},\"1417\":{},\"2006\":{},\"3795\":{},\"4241\":{},\"5059\":{},\"5443\":{},\"6211\":{}},\"comment\":{}}],[\"hide\",{\"_index\":1152,\"name\":{\"5046\":{}},\"comment\":{}}],[\"highest_displaced_line\",{\"_index\":1100,\"name\":{\"4433\":{}},\"comment\":{}}],[\"highest_line\",{\"_index\":1098,\"name\":{\"4431\":{}},\"comment\":{}}],[\"highest_non_displaced_line\",{\"_index\":1102,\"name\":{\"4435\":{}},\"comment\":{}}],[\"horizontaljustify\",{\"_index\":87,\"name\":{\"94\":{},\"658\":{}},\"comment\":{}}],[\"horizontaljustifystring\",{\"_index\":88,\"name\":{\"95\":{},\"659\":{}},\"comment\":{}}],[\"id\",{\"_index\":474,\"name\":{\"1360\":{},\"1476\":{},\"3772\":{}},\"comment\":{}}],[\"ignore_ticks\",{\"_index\":1259,\"name\":{\"6238\":{}},\"comment\":{}}],[\"ignoreticks\",{\"_index\":747,\"name\":{\"2095\":{}},\"comment\":{}}],[\"incrementpos\",{\"_index\":932,\"name\":{\"3690\":{}},\"comment\":{}}],[\"index\",{\"_index\":900,\"name\":{\"3309\":{}},\"comment\":{}}],[\"initrenderer\",{\"_index\":489,\"name\":{\"1427\":{}},\"comment\":{}}],[\"int_val\",{\"_index\":855,\"name\":{\"3087\":{}},\"comment\":{}}],[\"int_value\",{\"_index\":878,\"name\":{\"3119\":{}},\"comment\":{}}],[\"intervals\",{\"_index\":863,\"name\":{\"3096\":{}},\"comment\":{}}],[\"invert\",{\"_index\":392,\"name\":{\"1137\":{}},\"comment\":{}}],[\"is_displaced\",{\"_index\":1109,\"name\":{\"4446\":{}},\"comment\":{}}],[\"isaccidental\",{\"_index\":1345,\"name\":{\"6974\":{}},\"comment\":{}}],[\"isannotation\",{\"_index\":1346,\"name\":{\"6975\":{}},\"comment\":{}}],[\"isbarline\",{\"_index\":1347,\"name\":{\"6976\":{}},\"comment\":{}}],[\"isbold\",{\"_index\":616,\"name\":{\"1663\":{}},\"comment\":{}}],[\"iscategory\",{\"_index\":1344,\"name\":{\"6973\":{}},\"comment\":{}}],[\"iscenteraligned\",{\"_index\":179,\"name\":{\"325\":{},\"926\":{},\"1076\":{},\"1927\":{},\"2186\":{},\"2407\":{},\"2646\":{},\"2866\":{},\"3236\":{},\"3411\":{},\"3945\":{},\"4613\":{},\"5219\":{},\"5711\":{},\"6142\":{},\"6342\":{},\"6424\":{},\"6774\":{}},\"comment\":{}}],[\"ischord\",{\"_index\":769,\"name\":{\"2286\":{},\"4489\":{}},\"comment\":{}}],[\"iscomplete\",{\"_index\":1393,\"name\":{\"7220\":{}},\"comment\":{}}],[\"isdisplaced\",{\"_index\":770,\"name\":{\"2293\":{},\"3325\":{},\"4496\":{}},\"comment\":{}}],[\"isdot\",{\"_index\":1348,\"name\":{\"6977\":{}},\"comment\":{}}],[\"isdotted\",{\"_index\":149,\"name\":{\"290\":{},\"891\":{},\"1041\":{},\"1894\":{},\"2151\":{},\"2383\":{},\"2619\":{},\"2831\":{},\"3201\":{},\"3378\":{},\"3910\":{},\"4589\":{},\"5186\":{},\"5684\":{},\"6107\":{},\"6307\":{},\"6739\":{}},\"comment\":{}}],[\"isgracenote\",{\"_index\":1349,\"name\":{\"6978\":{}},\"comment\":{}}],[\"isgracenotegroup\",{\"_index\":1350,\"name\":{\"6979\":{}},\"comment\":{}}],[\"ishtmlcanvas\",{\"_index\":1397,\"name\":{\"7261\":{}},\"comment\":{}}],[\"ishtmldiv\",{\"_index\":1398,\"name\":{\"7262\":{}},\"comment\":{}}],[\"isitalic\",{\"_index\":617,\"name\":{\"1664\":{}},\"comment\":{}}],[\"isnote\",{\"_index\":1351,\"name\":{\"6980\":{}},\"comment\":{}}],[\"ispartial\",{\"_index\":398,\"name\":{\"1149\":{},\"4938\":{},\"5786\":{},\"5947\":{}},\"comment\":{}}],[\"isrendercontext\",{\"_index\":1352,\"name\":{\"6981\":{}},\"comment\":{}}],[\"isrendered\",{\"_index\":56,\"name\":{\"58\":{},\"139\":{},\"213\":{},\"356\":{},\"434\":{},\"513\":{},\"743\":{},\"816\":{},\"958\":{},\"1108\":{},\"1164\":{},\"1229\":{},\"1386\":{},\"1795\":{},\"1957\":{},\"2072\":{},\"2218\":{},\"2437\":{},\"2505\":{},\"2677\":{},\"2757\":{},\"2897\":{},\"2964\":{},\"3050\":{},\"3270\":{},\"3443\":{},\"3505\":{},\"3588\":{},\"3651\":{},\"3749\":{},\"3977\":{},\"4096\":{},\"4164\":{},\"4214\":{},\"4270\":{},\"4337\":{},\"4404\":{},\"4643\":{},\"4716\":{},\"4773\":{},\"4838\":{},\"4896\":{},\"4955\":{},\"5017\":{},\"5091\":{},\"5252\":{},\"5327\":{},\"5402\":{},\"5551\":{},\"5742\":{},\"5802\":{},\"5909\":{},\"5964\":{},\"6031\":{},\"6174\":{},\"6374\":{},\"6466\":{},\"6592\":{},\"6665\":{},\"6805\":{},\"6868\":{},\"6951\":{},\"7123\":{},\"7172\":{},\"7240\":{}},\"comment\":{}}],[\"isrest\",{\"_index\":126,\"name\":{\"267\":{},\"868\":{},\"1018\":{},\"1823\":{},\"2129\":{},\"2285\":{},\"2599\":{},\"2808\":{},\"3178\":{},\"3356\":{},\"3888\":{},\"4441\":{},\"4488\":{},\"5164\":{},\"5664\":{},\"6084\":{},\"6284\":{},\"6716\":{}},\"comment\":{}}],[\"isstavenote\",{\"_index\":1353,\"name\":{\"6982\":{}},\"comment\":{}}],[\"isstemlet\",{\"_index\":1151,\"name\":{\"5045\":{}},\"comment\":{}}],[\"isstemmablenote\",{\"_index\":1354,\"name\":{\"6983\":{}},\"comment\":{}}],[\"issubscript\",{\"_index\":342,\"name\":{\"680\":{}},\"comment\":{}}],[\"issuperscript\",{\"_index\":341,\"name\":{\"679\":{}},\"comment\":{}}],[\"istabnote\",{\"_index\":1355,\"name\":{\"6984\":{}},\"comment\":{}}],[\"italic\",{\"_index\":606,\"name\":{\"1651\":{},\"6202\":{}},\"comment\":{}}],[\"iterations\",{\"_index\":1264,\"name\":{\"6402\":{}},\"comment\":{}}],[\"joinvoices\",{\"_index\":660,\"name\":{\"1717\":{}},\"comment\":{}}],[\"justification\",{\"_index\":1261,\"name\":{\"6253\":{}},\"comment\":{}}],[\"kerningoffset\",{\"_index\":319,\"name\":{\"633\":{},\"672\":{}},\"comment\":{}}],[\"key\",{\"_index\":421,\"name\":{\"1274\":{},\"1294\":{},\"3085\":{},\"3116\":{}},\"comment\":{}}],[\"keymanager\",{\"_index\":526,\"name\":{\"1507\":{},\"2699\":{}},\"comment\":{}}],[\"keyparts\",{\"_index\":850,\"name\":{\"3078\":{}},\"comment\":{}}],[\"keyproperties\",{\"_index\":580,\"name\":{\"1603\":{}},\"comment\":{}}],[\"keyprops\",{\"_index\":112,\"name\":{\"249\":{},\"850\":{},\"1000\":{},\"1856\":{},\"2111\":{},\"2347\":{},\"2581\":{},\"2790\":{},\"3113\":{},\"3160\":{},\"3338\":{},\"3870\":{},\"4553\":{},\"5146\":{},\"5646\":{},\"6066\":{},\"6266\":{},\"6698\":{}},\"comment\":{}}],[\"keys\",{\"_index\":111,\"name\":{\"248\":{},\"849\":{},\"999\":{},\"1855\":{},\"2110\":{},\"2249\":{},\"2346\":{},\"2580\":{},\"2789\":{},\"3145\":{},\"3159\":{},\"3310\":{},\"3337\":{},\"3869\":{},\"4457\":{},\"4552\":{},\"5145\":{},\"5585\":{},\"5645\":{},\"6065\":{},\"6243\":{},\"6265\":{},\"6697\":{}},\"comment\":{}}],[\"keysignature\",{\"_index\":527,\"name\":{\"1508\":{},\"1597\":{},\"2714\":{},\"7008\":{}},\"comment\":{}}],[\"keysignote\",{\"_index\":498,\"name\":{\"1442\":{},\"1509\":{},\"2779\":{},\"7009\":{}},\"comment\":{}}],[\"keyval\",{\"_index\":419,\"name\":{\"1272\":{}},\"comment\":{}}],[\"keyvals\",{\"_index\":418,\"name\":{\"1271\":{}},\"comment\":{}}],[\"keyvalue\",{\"_index\":851,\"name\":{\"3082\":{}},\"comment\":{}}],[\"last_indices\",{\"_index\":1076,\"name\":{\"4296\":{},\"4922\":{}},\"comment\":{}}],[\"last_note\",{\"_index\":1075,\"name\":{\"4295\":{},\"4920\":{}},\"comment\":{}}],[\"last_x_shift\",{\"_index\":1135,\"name\":{\"4930\":{},\"5778\":{},\"5939\":{}},\"comment\":{}}],[\"lastcontext\",{\"_index\":980,\"name\":{\"3848\":{}},\"comment\":{}}],[\"layoutmetrics\",{\"_index\":1088,\"name\":{\"4359\":{}},\"comment\":{}}],[\"lbracket\",{\"_index\":435,\"name\":{\"1290\":{}},\"comment\":{}}],[\"lcm\",{\"_index\":663,\"name\":{\"1724\":{}},\"comment\":{}}],[\"lcmm\",{\"_index\":664,\"name\":{\"1725\":{}},\"comment\":{}}],[\"leaststring\",{\"_index\":796,\"name\":{\"2534\":{},\"5599\":{}},\"comment\":{}}],[\"ledger_code_head\",{\"_index\":705,\"name\":{\"1981\":{}},\"comment\":{}}],[\"ledger_line_offset\",{\"_index\":757,\"name\":{\"2258\":{},\"4469\":{}},\"comment\":{}}],[\"left\",{\"_index\":79,\"name\":{\"81\":{},\"640\":{},\"2921\":{},\"3030\":{},\"4366\":{},\"6232\":{},\"6400\":{},\"6532\":{}},\"comment\":{}}],[\"left_bar\",{\"_index\":994,\"name\":{\"4007\":{}},\"comment\":{}}],[\"left_shift\",{\"_index\":821,\"name\":{\"2988\":{}},\"comment\":{}}],[\"left_shift_px\",{\"_index\":1065,\"name\":{\"4239\":{}},\"comment\":{}}],[\"left_shift_ticks\",{\"_index\":1064,\"name\":{\"4238\":{}},\"comment\":{}}],[\"leftdisplacedheadpx\",{\"_index\":886,\"name\":{\"3131\":{},\"6496\":{}},\"comment\":{}}],[\"leftpadding\",{\"_index\":1169,\"name\":{\"5277\":{}},\"comment\":{}}],[\"leftsidebearing\",{\"_index\":312,\"name\":{\"625\":{},\"1642\":{}},\"comment\":{}}],[\"lessthan\",{\"_index\":674,\"name\":{\"1739\":{}},\"comment\":{}}],[\"lessthanequals\",{\"_index\":675,\"name\":{\"1740\":{}},\"comment\":{}}],[\"line\",{\"_index\":0,\"name\":{\"0\":{},\"3\":{},\"650\":{},\"766\":{},\"771\":{},\"1257\":{},\"2017\":{},\"2096\":{},\"2251\":{},\"3018\":{},\"3118\":{},\"3147\":{},\"3296\":{},\"4438\":{},\"4459\":{},\"5587\":{},\"6245\":{},\"6616\":{}},\"comment\":{}}],[\"line_above\",{\"_index\":709,\"name\":{\"1986\":{}},\"comment\":{}}],[\"line_below\",{\"_index\":708,\"name\":{\"1985\":{}},\"comment\":{}}],[\"line_config\",{\"_index\":989,\"name\":{\"4002\":{}},\"comment\":{}}],[\"line_dash\",{\"_index\":1078,\"name\":{\"4311\":{}},\"comment\":{}}],[\"line_shift\",{\"_index\":579,\"name\":{\"1602\":{}},\"comment\":{}}],[\"line_style\",{\"_index\":238,\"name\":{\"476\":{}},\"comment\":{}}],[\"line_thickness\",{\"_index\":842,\"name\":{\"3021\":{}},\"comment\":{}}],[\"line_width\",{\"_index\":235,\"name\":{\"473\":{},\"4310\":{},\"6008\":{}},\"comment\":{}}],[\"lineendtype\",{\"_index\":979,\"name\":{\"3847\":{}},\"comment\":{}}],[\"lineshift\",{\"_index\":1295,\"name\":{\"6554\":{}},\"comment\":{}}],[\"lineto\",{\"_index\":290,\"name\":{\"598\":{},\"3817\":{},\"5479\":{}},\"comment\":{}}],[\"linewidth\",{\"_index\":479,\"name\":{\"1368\":{},\"5436\":{},\"5449\":{}},\"comment\":{}}],[\"list\",{\"_index\":641,\"name\":{\"1690\":{}},\"comment\":{}}],[\"load\",{\"_index\":622,\"name\":{\"1669\":{}},\"comment\":{}}],[\"loadmetrics\",{\"_index\":730,\"name\":{\"2029\":{},\"6543\":{}},\"comment\":{}}],[\"loadwebfont\",{\"_index\":620,\"name\":{\"1667\":{}},\"comment\":{}}],[\"loadwebfonts\",{\"_index\":621,\"name\":{\"1668\":{}},\"comment\":{}}],[\"localheightcache\",{\"_index\":1248,\"name\":{\"6218\":{}},\"comment\":{}}],[\"location\",{\"_index\":1317,\"name\":{\"6901\":{}},\"comment\":{}}],[\"location_bottom\",{\"_index\":1328,\"name\":{\"6917\":{}},\"comment\":{}}],[\"location_top\",{\"_index\":1327,\"name\":{\"6916\":{}},\"comment\":{}}],[\"log\",{\"_index\":1358,\"name\":{\"7054\":{}},\"comment\":{}}],[\"lookupbeamdirection\",{\"_index\":227,\"name\":{\"417\":{}},\"comment\":{}}],[\"lookupfontmetric\",{\"_index\":728,\"name\":{\"2024\":{},\"6538\":{}},\"comment\":{}}],[\"lookupglyph\",{\"_index\":729,\"name\":{\"2025\":{},\"6539\":{}},\"comment\":{}}],[\"lookupmetric\",{\"_index\":630,\"name\":{\"1678\":{}},\"comment\":{}}],[\"lowerkerningtext\",{\"_index\":320,\"name\":{\"634\":{},\"677\":{}},\"comment\":{}}],[\"lowest_displaced_line\",{\"_index\":1101,\"name\":{\"4434\":{}},\"comment\":{}}],[\"lowest_line\",{\"_index\":1099,\"name\":{\"4432\":{}},\"comment\":{}}],[\"lowest_non_displaced_line\",{\"_index\":1103,\"name\":{\"4436\":{}},\"comment\":{}}],[\"lparen\",{\"_index\":429,\"name\":{\"1283\":{}},\"comment\":{}}],[\"makeabs\",{\"_index\":678,\"name\":{\"1745\":{}},\"comment\":{}}],[\"maketimesignatureglyph\",{\"_index\":1301,\"name\":{\"6628\":{}},\"comment\":{}}],[\"map\",{\"_index\":642,\"name\":{\"1691\":{},\"1695\":{}},\"comment\":{}}],[\"match\",{\"_index\":917,\"name\":{\"3673\":{}},\"comment\":{}}],[\"matchedstring\",{\"_index\":933,\"name\":{\"3691\":{}},\"comment\":{}}],[\"matches\",{\"_index\":934,\"name\":{\"3692\":{}},\"comment\":{}}],[\"matchfail\",{\"_index\":939,\"name\":{\"3703\":{}},\"comment\":{}}],[\"matchsuccess\",{\"_index\":940,\"name\":{\"3704\":{}},\"comment\":{}}],[\"matchtoken\",{\"_index\":941,\"name\":{\"3705\":{}},\"comment\":{}}],[\"max_slope\",{\"_index\":208,\"name\":{\"396\":{}},\"comment\":{}}],[\"maxheight\",{\"_index\":1252,\"name\":{\"6222\":{}},\"comment\":{}}],[\"maxiterations\",{\"_index\":635,\"name\":{\"1683\":{},\"5500\":{}},\"comment\":{}}],[\"maxline\",{\"_index\":764,\"name\":{\"2275\":{},\"4439\":{},\"4478\":{}},\"comment\":{}}],[\"maxsizeglyph\",{\"_index\":1240,\"name\":{\"6204\":{}},\"comment\":{}}],[\"maybe\",{\"_index\":926,\"name\":{\"3684\":{}},\"comment\":{}}],[\"maybeslash\",{\"_index\":433,\"name\":{\"1288\":{}},\"comment\":{}}],[\"mean\",{\"_index\":1266,\"name\":{\"6406\":{}},\"comment\":{}}],[\"measuretext\",{\"_index\":297,\"name\":{\"605\":{},\"3830\":{},\"5486\":{}},\"comment\":{}}],[\"mergewith\",{\"_index\":256,\"name\":{\"557\":{}},\"comment\":{}}],[\"metrics\",{\"_index\":340,\"name\":{\"676\":{},\"1614\":{},\"2038\":{},\"5282\":{},\"6560\":{},\"6919\":{}},\"comment\":{}}],[\"microtones\",{\"_index\":427,\"name\":{\"1280\":{}},\"comment\":{}}],[\"mid\",{\"_index\":1143,\"name\":{\"4980\":{}},\"comment\":{}}],[\"midline\",{\"_index\":1360,\"name\":{\"7056\":{}},\"comment\":{}}],[\"min_flat_beam_offset\",{\"_index\":214,\"name\":{\"402\":{}},\"comment\":{}}],[\"min_slope\",{\"_index\":209,\"name\":{\"397\":{}},\"comment\":{}}],[\"minannotationpadding\",{\"_index\":91,\"name\":{\"98\":{}},\"comment\":{}}],[\"minline\",{\"_index\":763,\"name\":{\"2274\":{},\"4440\":{},\"4477\":{}},\"comment\":{}}],[\"minnoteheadpadding\",{\"_index\":760,\"name\":{\"2263\":{},\"4470\":{}},\"comment\":{}}],[\"minpadding\",{\"_index\":343,\"name\":{\"681\":{},\"3293\":{},\"3535\":{}},\"comment\":{}}],[\"mixed\",{\"_index\":946,\"name\":{\"3719\":{}},\"comment\":{}}],[\"mode\",{\"_index\":1384,\"name\":{\"7204\":{}},\"comment\":{}}],[\"modifier\",{\"_index\":528,\"name\":{\"1510\":{},\"2925\":{},\"7010\":{}},\"comment\":{}}],[\"modifiercontext\",{\"_index\":507,\"name\":{\"1455\":{},\"1511\":{},\"2995\":{}},\"comment\":{}}],[\"modifiercontextmember\",{\"_index\":825,\"name\":{\"2994\":{}},\"comment\":{}}],[\"modifiercontextmetrics\",{\"_index\":824,\"name\":{\"2991\":{}},\"comment\":{}}],[\"modifiercontextstate\",{\"_index\":819,\"name\":{\"2986\":{}},\"comment\":{}}],[\"modifierposition\",{\"_index\":548,\"name\":{\"1567\":{},\"2919\":{}},\"comment\":{}}],[\"modleftpx\",{\"_index\":884,\"name\":{\"3129\":{},\"6494\":{}},\"comment\":{}}],[\"modrightpx\",{\"_index\":885,\"name\":{\"3130\":{},\"6495\":{}},\"comment\":{}}],[\"monospaced\",{\"_index\":1239,\"name\":{\"6201\":{}},\"comment\":{}}],[\"move\",{\"_index\":254,\"name\":{\"555\":{},\"2016\":{}},\"comment\":{}}],[\"moveto\",{\"_index\":289,\"name\":{\"597\":{},\"3816\":{},\"5478\":{}},\"comment\":{}}],[\"multimeasurerest\",{\"_index\":508,\"name\":{\"1456\":{},\"1512\":{},\"3023\":{},\"7011\":{}},\"comment\":{}}],[\"multimeasurerestrenderoptions\",{\"_index\":831,\"name\":{\"3009\":{}},\"comment\":{}}],[\"multiply\",{\"_index\":670,\"name\":{\"1734\":{}},\"comment\":{}}],[\"music\",{\"_index\":529,\"name\":{\"1513\":{},\"3088\":{}},\"comment\":{}}],[\"music_font_stack\",{\"_index\":727,\"name\":{\"2023\":{},\"6537\":{}},\"comment\":{}}],[\"name\",{\"_index\":959,\"name\":{\"3773\":{},\"4799\":{}},\"comment\":{}}],[\"names\",{\"_index\":1308,\"name\":{\"6891\":{}},\"comment\":{}}],[\"near_head\",{\"_index\":394,\"name\":{\"1139\":{}},\"comment\":{}}],[\"near_top\",{\"_index\":395,\"name\":{\"1140\":{}},\"comment\":{}}],[\"nesting_offset\",{\"_index\":1329,\"name\":{\"6918\":{}},\"comment\":{}}],[\"newfromelementid\",{\"_index\":488,\"name\":{\"1423\":{}},\"comment\":{}}],[\"no_text_format\",{\"_index\":333,\"name\":{\"663\":{}},\"comment\":{}}],[\"nojustification\",{\"_index\":1201,\"name\":{\"5504\":{},\"5521\":{}},\"comment\":{}}],[\"non_displaced_x\",{\"_index\":1097,\"name\":{\"4430\":{}},\"comment\":{}}],[\"none\",{\"_index\":329,\"name\":{\"652\":{},\"3842\":{},\"4124\":{},\"4669\":{},\"4978\":{}},\"comment\":{}}],[\"nopadding\",{\"_index\":1206,\"name\":{\"5511\":{}},\"comment\":{}}],[\"normal\",{\"_index\":604,\"name\":{\"1647\":{},\"1650\":{}},\"comment\":{}}],[\"normalizeangle\",{\"_index\":1362,\"name\":{\"7058\":{}},\"comment\":{}}],[\"nospace\",{\"_index\":922,\"name\":{\"3680\":{}},\"comment\":{}}],[\"notation_font_scale\",{\"_index\":563,\"name\":{\"1582\":{}},\"comment\":{}}],[\"note\",{\"_index\":413,\"name\":{\"1264\":{},\"1514\":{},\"2706\":{},\"2711\":{},\"3073\":{},\"3152\":{},\"4447\":{},\"7012\":{}},\"comment\":{}}],[\"note_heads\",{\"_index\":787,\"name\":{\"2319\":{},\"4522\":{}},\"comment\":{}}],[\"note_type\",{\"_index\":899,\"name\":{\"3306\":{}},\"comment\":{}}],[\"noteaccidental\",{\"_index\":847,\"name\":{\"3072\":{}},\"comment\":{}}],[\"noteduration\",{\"_index\":889,\"name\":{\"3134\":{}},\"comment\":{}}],[\"notehead\",{\"_index\":530,\"name\":{\"1515\":{},\"1632\":{},\"3316\":{},\"7013\":{}},\"comment\":{}}],[\"noteheadmetrics\",{\"_index\":894,\"name\":{\"3292\":{}},\"comment\":{}}],[\"noteheadoffset\",{\"_index\":1323,\"name\":{\"6907\":{}},\"comment\":{}}],[\"noteheads\",{\"_index\":786,\"name\":{\"2318\":{},\"4521\":{}},\"comment\":{}}],[\"noteheadstruct\",{\"_index\":896,\"name\":{\"3295\":{}},\"comment\":{}}],[\"notemetrics\",{\"_index\":881,\"name\":{\"3125\":{}},\"comment\":{}}],[\"notename\",{\"_index\":424,\"name\":{\"1277\":{}},\"comment\":{}}],[\"noteparts\",{\"_index\":848,\"name\":{\"3075\":{}},\"comment\":{}}],[\"notepiece\",{\"_index\":438,\"name\":{\"1293\":{}},\"comment\":{}}],[\"notepx\",{\"_index\":883,\"name\":{\"3128\":{},\"6493\":{}},\"comment\":{}}],[\"notes\",{\"_index\":215,\"name\":{\"403\":{},\"1263\":{},\"1306\":{},\"1356\":{},\"6922\":{}},\"comment\":{}}],[\"notes_occupied\",{\"_index\":1318,\"name\":{\"6902\":{}},\"comment\":{}}],[\"notestruct\",{\"_index\":893,\"name\":{\"3144\":{}},\"comment\":{}}],[\"notesubgroup\",{\"_index\":517,\"name\":{\"1470\":{},\"1516\":{},\"3464\":{},\"7014\":{}},\"comment\":{}}],[\"notetointeger\",{\"_index\":1309,\"name\":{\"6893\":{}},\"comment\":{}}],[\"notevalues\",{\"_index\":866,\"name\":{\"3100\":{}},\"comment\":{}}],[\"num\",{\"_index\":1297,\"name\":{\"6617\":{}},\"comment\":{}}],[\"num_beats\",{\"_index\":572,\"name\":{\"1592\":{},\"7195\":{}},\"comment\":{}}],[\"num_lines\",{\"_index\":997,\"name\":{\"4011\":{}},\"comment\":{}}],[\"num_notes\",{\"_index\":1319,\"name\":{\"6903\":{}},\"comment\":{}}],[\"num_tones\",{\"_index\":856,\"name\":{\"3089\":{}},\"comment\":{}}],[\"numacc\",{\"_index\":5,\"name\":{\"6\":{}},\"comment\":{}}],[\"number_glyph_point\",{\"_index\":837,\"name\":{\"3015\":{}},\"comment\":{}}],[\"number_line\",{\"_index\":836,\"name\":{\"3014\":{}},\"comment\":{}}],[\"number_of_measures\",{\"_index\":832,\"name\":{\"3010\":{}},\"comment\":{}}],[\"numerator\",{\"_index\":665,\"name\":{\"1727\":{}},\"comment\":{}}],[\"nummatches\",{\"_index\":935,\"name\":{\"3693\":{}},\"comment\":{}}],[\"o\",{\"_index\":602,\"name\":{\"1644\":{}},\"comment\":{}}],[\"octave\",{\"_index\":425,\"name\":{\"1278\":{},\"1296\":{},\"3117\":{}},\"comment\":{}}],[\"octave_shift\",{\"_index\":754,\"name\":{\"2247\":{},\"4455\":{},\"5583\":{}},\"comment\":{}}],[\"oldvalue\",{\"_index\":960,\"name\":{\"3775\":{}},\"comment\":{}}],[\"oneormore\",{\"_index\":925,\"name\":{\"3683\":{}},\"comment\":{}}],[\"onregister\",{\"_index\":55,\"name\":{\"57\":{},\"138\":{},\"212\":{},\"355\":{},\"433\":{},\"512\":{},\"742\":{},\"815\":{},\"957\":{},\"1107\":{},\"1163\":{},\"1228\":{},\"1385\":{},\"1794\":{},\"1956\":{},\"2071\":{},\"2217\":{},\"2436\":{},\"2504\":{},\"2676\":{},\"2756\":{},\"2896\":{},\"2963\":{},\"3049\":{},\"3269\":{},\"3442\":{},\"3504\":{},\"3587\":{},\"3650\":{},\"3748\":{},\"3976\":{},\"4095\":{},\"4163\":{},\"4213\":{},\"4269\":{},\"4336\":{},\"4403\":{},\"4642\":{},\"4715\":{},\"4772\":{},\"4837\":{},\"4895\":{},\"4954\":{},\"5016\":{},\"5090\":{},\"5251\":{},\"5326\":{},\"5401\":{},\"5550\":{},\"5741\":{},\"5801\":{},\"5908\":{},\"5963\":{},\"6030\":{},\"6173\":{},\"6373\":{},\"6465\":{},\"6591\":{},\"6664\":{},\"6804\":{},\"6867\":{},\"6950\":{},\"7122\":{},\"7171\":{},\"7239\":{}},\"comment\":{}}],[\"onupdate\",{\"_index\":971,\"name\":{\"3789\":{}},\"comment\":{}}],[\"opengroup\",{\"_index\":273,\"name\":{\"580\":{},\"3827\":{},\"5458\":{}},\"comment\":{}}],[\"options\",{\"_index\":440,\"name\":{\"1303\":{},\"1315\":{},\"1345\":{},\"4019\":{},\"5505\":{},\"5833\":{}},\"comment\":{}}],[\"opts\",{\"_index\":417,\"name\":{\"1270\":{}},\"comment\":{}}],[\"or\",{\"_index\":927,\"name\":{\"3685\":{}},\"comment\":{}}],[\"ornament\",{\"_index\":502,\"name\":{\"1450\":{},\"1517\":{},\"1631\":{},\"3532\":{},\"7015\":{}},\"comment\":{}}],[\"ornamentalignwithnotehead\",{\"_index\":909,\"name\":{\"3539\":{}},\"comment\":{}}],[\"ornamentarticulation\",{\"_index\":911,\"name\":{\"3541\":{}},\"comment\":{}}],[\"ornamentattack\",{\"_index\":908,\"name\":{\"3538\":{}},\"comment\":{}}],[\"ornamentmetrics\",{\"_index\":903,\"name\":{\"3527\":{}},\"comment\":{}}],[\"ornamentnotetransition\",{\"_index\":907,\"name\":{\"3537\":{}},\"comment\":{}}],[\"ornamentrelease\",{\"_index\":910,\"name\":{\"3540\":{}},\"comment\":{}}],[\"outline\",{\"_index\":722,\"name\":{\"2013\":{}},\"comment\":{}}],[\"outlinecode\",{\"_index\":723,\"name\":{\"2015\":{}},\"comment\":{}}],[\"padding_left\",{\"_index\":838,\"name\":{\"3016\":{},\"4308\":{}},\"comment\":{}}],[\"padding_right\",{\"_index\":839,\"name\":{\"3017\":{},\"4309\":{}},\"comment\":{}}],[\"paddingleft\",{\"_index\":1091,\"name\":{\"4362\":{}},\"comment\":{}}],[\"paddingright\",{\"_index\":1092,\"name\":{\"4363\":{}},\"comment\":{}}],[\"params\",{\"_index\":410,\"name\":{\"1260\":{}},\"comment\":{}}],[\"parenleftpadding\",{\"_index\":19,\"name\":{\"21\":{}},\"comment\":{}}],[\"parenrightpadding\",{\"_index\":21,\"name\":{\"23\":{}},\"comment\":{}}],[\"parent\",{\"_index\":1191,\"name\":{\"5454\":{}},\"comment\":{}}],[\"parenthesis\",{\"_index\":531,\"name\":{\"1518\":{},\"3610\":{},\"7016\":{}},\"comment\":{}}],[\"parse\",{\"_index\":470,\"name\":{\"1353\":{},\"1749\":{},\"3702\":{}},\"comment\":{}}],[\"parsednote\",{\"_index\":890,\"name\":{\"3138\":{}},\"comment\":{}}],[\"parser\",{\"_index\":467,\"name\":{\"1349\":{},\"1519\":{},\"3699\":{}},\"comment\":{}}],[\"parsetimespec\",{\"_index\":1300,\"name\":{\"6627\":{}},\"comment\":{}}],[\"partial_beam_length\",{\"_index\":213,\"name\":{\"401\":{}},\"comment\":{}}],[\"partialbeamdirection\",{\"_index\":198,\"name\":{\"381\":{}},\"comment\":{}}],[\"path\",{\"_index\":1188,\"name\":{\"5444\":{}},\"comment\":{}}],[\"pedalmarking\",{\"_index\":516,\"name\":{\"1469\":{},\"1520\":{},\"1626\":{},\"3710\":{},\"7017\":{}},\"comment\":{}}],[\"pen\",{\"_index\":1189,\"name\":{\"5445\":{}},\"comment\":{}}],[\"piece\",{\"_index\":408,\"name\":{\"1258\":{},\"1297\":{},\"1316\":{}},\"comment\":{}}],[\"pieces\",{\"_index\":409,\"name\":{\"1259\":{}},\"comment\":{}}],[\"placeglyphonline\",{\"_index\":373,\"name\":{\"799\":{},\"2741\":{},\"4147\":{},\"4386\":{},\"4699\":{},\"4756\":{},\"4821\":{},\"4879\":{},\"5000\":{},\"6648\":{}},\"comment\":{}}],[\"plotdebugging\",{\"_index\":647,\"name\":{\"1701\":{}},\"comment\":{}}],[\"plotmetrics\",{\"_index\":104,\"name\":{\"238\":{},\"840\":{},\"989\":{},\"1819\":{},\"2099\":{},\"2266\":{},\"2529\":{},\"2781\":{},\"3154\":{},\"3319\":{},\"3858\":{},\"4473\":{},\"5114\":{},\"5594\":{},\"6057\":{},\"6255\":{},\"6689\":{}},\"comment\":{}}],[\"point\",{\"_index\":367,\"name\":{\"769\":{},\"6624\":{}},\"comment\":{}}],[\"pointerbbox\",{\"_index\":975,\"name\":{\"3797\":{}},\"comment\":{}}],[\"pos\",{\"_index\":931,\"name\":{\"3689\":{}},\"comment\":{}}],[\"position\",{\"_index\":13,\"name\":{\"14\":{},\"100\":{},\"171\":{},\"468\":{},\"684\":{},\"783\":{},\"1135\":{},\"1143\":{},\"1191\":{},\"1755\":{},\"1983\":{},\"2462\":{},\"2717\":{},\"2927\":{},\"3467\":{},\"3542\":{},\"3614\":{},\"4129\":{},\"4374\":{},\"4682\":{},\"4741\":{},\"4803\":{},\"4863\":{},\"4987\":{},\"5284\":{},\"5362\":{},\"5991\":{},\"5999\":{},\"6013\":{},\"6621\":{},\"6829\":{},\"7083\":{}},\"comment\":{}}],[\"position_end\",{\"_index\":391,\"name\":{\"1136\":{}},\"comment\":{}}],[\"positions\",{\"_index\":1221,\"name\":{\"5576\":{},\"6001\":{}},\"comment\":{}}],[\"positionsstring\",{\"_index\":1232,\"name\":{\"6002\":{}},\"comment\":{}}],[\"positionstring\",{\"_index\":14,\"name\":{\"15\":{},\"101\":{},\"172\":{},\"469\":{},\"685\":{},\"1144\":{},\"1192\":{},\"1756\":{},\"2463\":{},\"2928\":{},\"3468\":{},\"3543\":{},\"3615\":{},\"5285\":{},\"5363\":{},\"6000\":{},\"6830\":{},\"7084\":{}},\"comment\":{}}],[\"postformat\",{\"_index\":188,\"name\":{\"334\":{},\"420\":{},\"936\":{},\"1086\":{},\"1716\":{},\"1852\":{},\"2196\":{},\"2265\":{},\"2344\":{},\"2577\":{},\"2875\":{},\"3008\":{},\"3247\":{},\"3421\":{},\"3955\":{},\"4472\":{},\"4550\":{},\"5142\":{},\"5642\":{},\"6152\":{},\"6352\":{},\"6439\":{},\"6527\":{},\"6783\":{}},\"comment\":{}}],[\"postformatted\",{\"_index\":189,\"name\":{\"335\":{},\"404\":{},\"937\":{},\"1087\":{},\"1936\":{},\"2197\":{},\"2417\":{},\"2656\":{},\"2876\":{},\"3248\":{},\"3422\":{},\"3956\":{},\"4623\":{},\"5230\":{},\"5721\":{},\"6153\":{},\"6353\":{},\"6440\":{},\"6784\":{}},\"comment\":{}}],[\"precalculatemintotalwidth\",{\"_index\":653,\"name\":{\"1708\":{}},\"comment\":{}}],[\"prefix\",{\"_index\":1361,\"name\":{\"7057\":{}},\"comment\":{}}],[\"preformat\",{\"_index\":109,\"name\":{\"245\":{},\"419\":{},\"846\":{},\"996\":{},\"1713\":{},\"1826\":{},\"2105\":{},\"2314\":{},\"2469\":{},\"2547\":{},\"2786\":{},\"3007\":{},\"3245\":{},\"3334\":{},\"3471\":{},\"3864\":{},\"4517\":{},\"5228\":{},\"5612\":{},\"6062\":{},\"6262\":{},\"6437\":{},\"6526\":{},\"6694\":{},\"7225\":{}},\"comment\":{}}],[\"preformatted\",{\"_index\":187,\"name\":{\"333\":{},\"935\":{},\"1085\":{},\"1935\":{},\"2195\":{},\"2416\":{},\"2655\":{},\"2874\":{},\"3246\":{},\"3420\":{},\"3954\":{},\"4622\":{},\"5229\":{},\"5720\":{},\"6151\":{},\"6351\":{},\"6438\":{},\"6782\":{}},\"comment\":{}}],[\"quadratic\",{\"_index\":724,\"name\":{\"2018\":{}},\"comment\":{}}],[\"quadraticcurveto\",{\"_index\":292,\"name\":{\"600\":{},\"3819\":{},\"5481\":{}},\"comment\":{}}],[\"quotient\",{\"_index\":676,\"name\":{\"1743\":{}},\"comment\":{}}],[\"rasquedo_down\",{\"_index\":1179,\"name\":{\"5357\":{}},\"comment\":{}}],[\"rasquedo_up\",{\"_index\":1180,\"name\":{\"5358\":{}},\"comment\":{}}],[\"ratioed\",{\"_index\":1320,\"name\":{\"6904\":{}},\"comment\":{}}],[\"rbracket\",{\"_index\":436,\"name\":{\"1291\":{}},\"comment\":{}}],[\"rect\",{\"_index\":285,\"name\":{\"593\":{},\"3811\":{},\"5474\":{}},\"comment\":{}}],[\"register\",{\"_index\":966,\"name\":{\"3784\":{}},\"comment\":{}}],[\"registerinfo\",{\"_index\":1247,\"name\":{\"6217\":{}},\"comment\":{}}],[\"registry\",{\"_index\":532,\"name\":{\"1521\":{},\"3776\":{}},\"comment\":{}}],[\"registryupdate\",{\"_index\":958,\"name\":{\"3771\":{}},\"comment\":{}}],[\"release_width\",{\"_index\":236,\"name\":{\"474\":{}},\"comment\":{}}],[\"remainder\",{\"_index\":677,\"name\":{\"1744\":{}},\"comment\":{}}],[\"removeclass\",{\"_index\":54,\"name\":{\"56\":{},\"137\":{},\"211\":{},\"354\":{},\"432\":{},\"511\":{},\"741\":{},\"814\":{},\"956\":{},\"1106\":{},\"1162\":{},\"1227\":{},\"1384\":{},\"1793\":{},\"1955\":{},\"2070\":{},\"2216\":{},\"2435\":{},\"2503\":{},\"2675\":{},\"2755\":{},\"2895\":{},\"2962\":{},\"3048\":{},\"3268\":{},\"3441\":{},\"3503\":{},\"3586\":{},\"3649\":{},\"3747\":{},\"3975\":{},\"4094\":{},\"4162\":{},\"4212\":{},\"4268\":{},\"4335\":{},\"4402\":{},\"4641\":{},\"4714\":{},\"4771\":{},\"4836\":{},\"4894\":{},\"4953\":{},\"5015\":{},\"5089\":{},\"5250\":{},\"5325\":{},\"5400\":{},\"5549\":{},\"5740\":{},\"5800\":{},\"5907\":{},\"5962\":{},\"6029\":{},\"6172\":{},\"6372\":{},\"6464\":{},\"6590\":{},\"6663\":{},\"6803\":{},\"6866\":{},\"6949\":{},\"7121\":{},\"7170\":{},\"7238\":{}},\"comment\":{}}],[\"render\",{\"_index\":744,\"name\":{\"2057\":{},\"6578\":{}},\"comment\":{}}],[\"render_options\",{\"_index\":18,\"name\":{\"19\":{},\"176\":{},\"250\":{},\"389\":{},\"471\":{},\"851\":{},\"1001\":{},\"1147\":{},\"1857\":{},\"2112\":{},\"2348\":{},\"2466\":{},\"2582\":{},\"2791\":{},\"3027\":{},\"3161\":{},\"3339\":{},\"3546\":{},\"3725\":{},\"3871\":{},\"4252\":{},\"4306\":{},\"4554\":{},\"4805\":{},\"4927\":{},\"5147\":{},\"5365\":{},\"5647\":{},\"5775\":{},\"5936\":{},\"6004\":{},\"6067\":{},\"6267\":{},\"6699\":{},\"7087\":{},\"7150\":{}},\"comment\":{}}],[\"render_precision_places\",{\"_index\":561,\"name\":{\"1580\":{}},\"comment\":{}}],[\"rendercontext\",{\"_index\":533,\"name\":{\"1522\":{},\"3798\":{},\"7018\":{}},\"comment\":{}}],[\"rendercurve\",{\"_index\":399,\"name\":{\"1150\":{}},\"comment\":{}}],[\"renderer\",{\"_index\":484,\"name\":{\"1412\":{},\"1523\":{},\"3845\":{}},\"comment\":{}}],[\"rendererbackends\",{\"_index\":549,\"name\":{\"1568\":{},\"3838\":{}},\"comment\":{}}],[\"rendererlineendtype\",{\"_index\":550,\"name\":{\"1569\":{},\"3841\":{}},\"comment\":{}}],[\"renderglyph\",{\"_index\":731,\"name\":{\"2030\":{},\"6544\":{}},\"comment\":{}}],[\"renderhairpin\",{\"_index\":1071,\"name\":{\"4256\":{}},\"comment\":{}}],[\"renderoutline\",{\"_index\":732,\"name\":{\"2031\":{},\"6545\":{}},\"comment\":{}}],[\"rendertext\",{\"_index\":1142,\"name\":{\"4940\":{},\"5787\":{},\"5949\":{}},\"comment\":{}}],[\"rendertie\",{\"_index\":1141,\"name\":{\"4939\":{},\"5774\":{},\"5948\":{}},\"comment\":{}}],[\"rendertostave\",{\"_index\":745,\"name\":{\"2059\":{},\"6557\":{}},\"comment\":{}}],[\"rendervibrato\",{\"_index\":1377,\"name\":{\"7082\":{}},\"comment\":{}}],[\"repeat_begin\",{\"_index\":1053,\"name\":{\"4121\":{}},\"comment\":{}}],[\"repeat_both\",{\"_index\":1055,\"name\":{\"4123\":{}},\"comment\":{}}],[\"repeat_end\",{\"_index\":1054,\"name\":{\"4122\":{}},\"comment\":{}}],[\"repeatnote\",{\"_index\":494,\"name\":{\"1436\":{},\"1524\":{},\"3856\":{},\"7019\":{}},\"comment\":{}}],[\"repetition\",{\"_index\":534,\"name\":{\"1525\":{},\"4664\":{},\"7020\":{}},\"comment\":{}}],[\"reportedwidth\",{\"_index\":906,\"name\":{\"3531\":{}},\"comment\":{}}],[\"rerr\",{\"_index\":1370,\"name\":{\"7070\":{}},\"comment\":{}}],[\"reset\",{\"_index\":172,\"name\":{\"314\":{},\"915\":{},\"1065\":{},\"1319\":{},\"1425\":{},\"1916\":{},\"2051\":{},\"2175\":{},\"2276\":{},\"2535\":{},\"2703\":{},\"2855\":{},\"3225\":{},\"3401\":{},\"3934\":{},\"4479\":{},\"5208\":{},\"5600\":{},\"6131\":{},\"6331\":{},\"6412\":{},\"6573\":{},\"6763\":{}},\"comment\":{}}],[\"resetfont\",{\"_index\":69,\"name\":{\"71\":{},\"152\":{},\"226\":{},\"369\":{},\"447\":{},\"526\":{},\"755\":{},\"829\":{},\"971\":{},\"1121\":{},\"1177\":{},\"1242\":{},\"1399\":{},\"1808\":{},\"1970\":{},\"2085\":{},\"2230\":{},\"2449\":{},\"2518\":{},\"2690\":{},\"2770\":{},\"2910\":{},\"2977\":{},\"3063\":{},\"3283\":{},\"3455\":{},\"3518\":{},\"3601\":{},\"3664\":{},\"3762\":{},\"3989\":{},\"4108\":{},\"4177\":{},\"4227\":{},\"4283\":{},\"4350\":{},\"4417\":{},\"4655\":{},\"4729\":{},\"4786\":{},\"4851\":{},\"4909\":{},\"4968\":{},\"5030\":{},\"5103\":{},\"5265\":{},\"5340\":{},\"5415\":{},\"5563\":{},\"5755\":{},\"5815\":{},\"5921\":{},\"5977\":{},\"6044\":{},\"6187\":{},\"6387\":{},\"6479\":{},\"6605\":{},\"6678\":{},\"6818\":{},\"6881\":{},\"6964\":{},\"7136\":{},\"7185\":{},\"7252\":{}},\"comment\":{}}],[\"resetlines\",{\"_index\":1003,\"name\":{\"4023\":{},\"5837\":{}},\"comment\":{}}],[\"resetpiece\",{\"_index\":451,\"name\":{\"1323\":{}},\"comment\":{}}],[\"resettuplet\",{\"_index\":183,\"name\":{\"329\":{},\"930\":{},\"1080\":{},\"1931\":{},\"2190\":{},\"2411\":{},\"2650\":{},\"2870\":{},\"3240\":{},\"3415\":{},\"3949\":{},\"4617\":{},\"5223\":{},\"5715\":{},\"6146\":{},\"6346\":{},\"6430\":{},\"6778\":{}},\"comment\":{}}],[\"resize\",{\"_index\":284,\"name\":{\"592\":{},\"3812\":{},\"3854\":{},\"5469\":{}},\"comment\":{}}],[\"resolution\",{\"_index\":565,\"name\":{\"1584\":{},\"1594\":{},\"1618\":{},\"6198\":{},\"7197\":{}},\"comment\":{}}],[\"resolutionmultiplier\",{\"_index\":644,\"name\":{\"1693\":{},\"1697\":{}},\"comment\":{}}],[\"resolveglyphs\",{\"_index\":1341,\"name\":{\"6935\":{}},\"comment\":{}}],[\"rest\",{\"_index\":707,\"name\":{\"1984\":{}},\"comment\":{}}],[\"restore\",{\"_index\":300,\"name\":{\"608\":{},\"3826\":{},\"5489\":{}},\"comment\":{}}],[\"restorestyle\",{\"_index\":50,\"name\":{\"52\":{},\"133\":{},\"207\":{},\"350\":{},\"428\":{},\"507\":{},\"737\":{},\"810\":{},\"952\":{},\"1102\":{},\"1158\":{},\"1223\":{},\"1379\":{},\"1789\":{},\"1951\":{},\"2066\":{},\"2212\":{},\"2431\":{},\"2499\":{},\"2671\":{},\"2751\":{},\"2891\":{},\"2958\":{},\"3044\":{},\"3263\":{},\"3437\":{},\"3499\":{},\"3582\":{},\"3645\":{},\"3743\":{},\"3971\":{},\"4090\":{},\"4158\":{},\"4208\":{},\"4264\":{},\"4331\":{},\"4398\":{},\"4637\":{},\"4710\":{},\"4767\":{},\"4832\":{},\"4890\":{},\"4949\":{},\"5011\":{},\"5085\":{},\"5245\":{},\"5321\":{},\"5396\":{},\"5545\":{},\"5736\":{},\"5796\":{},\"5903\":{},\"5958\":{},\"6025\":{},\"6168\":{},\"6368\":{},\"6459\":{},\"6586\":{},\"6659\":{},\"6799\":{},\"6862\":{},\"6945\":{},\"7117\":{},\"7166\":{},\"7234\":{}},\"comment\":{}}],[\"result\",{\"_index\":929,\"name\":{\"3687\":{}},\"comment\":{}}],[\"results\",{\"_index\":936,\"name\":{\"3694\":{}},\"comment\":{}}],[\"reverse\",{\"_index\":381,\"name\":{\"981\":{}},\"comment\":{}}],[\"right\",{\"_index\":81,\"name\":{\"83\":{},\"642\":{},\"2922\":{},\"3031\":{},\"4367\":{},\"6234\":{},\"6401\":{},\"6533\":{}},\"comment\":{}}],[\"right_bar\",{\"_index\":995,\"name\":{\"4008\":{}},\"comment\":{}}],[\"right_shift\",{\"_index\":820,\"name\":{\"2987\":{}},\"comment\":{}}],[\"right_shift_px\",{\"_index\":1066,\"name\":{\"4240\":{}},\"comment\":{}}],[\"right_shift_ticks\",{\"_index\":1063,\"name\":{\"4237\":{}},\"comment\":{}}],[\"rightdisplacedheadpx\",{\"_index\":888,\"name\":{\"3133\":{},\"6498\":{}},\"comment\":{}}],[\"rightpadding\",{\"_index\":999,\"name\":{\"4016\":{},\"5278\":{},\"5828\":{}},\"comment\":{}}],[\"roll_down\",{\"_index\":1177,\"name\":{\"5355\":{}},\"comment\":{}}],[\"roll_up\",{\"_index\":1178,\"name\":{\"5356\":{}},\"comment\":{}}],[\"rollingduration\",{\"_index\":447,\"name\":{\"1318\":{}},\"comment\":{}}],[\"root\",{\"_index\":849,\"name\":{\"3076\":{},\"3079\":{}},\"comment\":{}}],[\"root_index\",{\"_index\":854,\"name\":{\"3086\":{}},\"comment\":{}}],[\"root_indices\",{\"_index\":859,\"name\":{\"3092\":{}},\"comment\":{}}],[\"root_values\",{\"_index\":858,\"name\":{\"3091\":{}},\"comment\":{}}],[\"roots\",{\"_index\":857,\"name\":{\"3090\":{}},\"comment\":{}}],[\"rootvalue\",{\"_index\":852,\"name\":{\"3083\":{}},\"comment\":{}}],[\"rounded_end\",{\"_index\":1079,\"name\":{\"4312\":{}},\"comment\":{}}],[\"rparen\",{\"_index\":430,\"name\":{\"1284\":{}},\"comment\":{}}],[\"rule\",{\"_index\":920,\"name\":{\"3678\":{}},\"comment\":{}}],[\"rulefunction\",{\"_index\":918,\"name\":{\"3674\":{}},\"comment\":{}}],[\"run\",{\"_index\":928,\"name\":{\"3686\":{}},\"comment\":{}}],[\"runtimeerror\",{\"_index\":1364,\"name\":{\"7060\":{},\"7071\":{}},\"comment\":{}}],[\"sanitizecanvasdims\",{\"_index\":268,\"name\":{\"573\":{}},\"comment\":{}}],[\"sans_serif\",{\"_index\":607,\"name\":{\"1653\":{}},\"comment\":{}}],[\"save\",{\"_index\":299,\"name\":{\"607\":{},\"3825\":{},\"5488\":{}},\"comment\":{}}],[\"scale\",{\"_index\":122,\"name\":{\"262\":{},\"591\":{},\"863\":{},\"1013\":{},\"1869\":{},\"2011\":{},\"2041\":{},\"2124\":{},\"2259\":{},\"2360\":{},\"2594\":{},\"2803\":{},\"3173\":{},\"3351\":{},\"3810\":{},\"3883\":{},\"4566\":{},\"5159\":{},\"5470\":{},\"5659\":{},\"6079\":{},\"6279\":{},\"6563\":{},\"6711\":{}},\"comment\":{}}],[\"scales\",{\"_index\":864,\"name\":{\"3097\":{}},\"comment\":{}}],[\"scalesize\",{\"_index\":615,\"name\":{\"1662\":{}},\"comment\":{}}],[\"scaletopxfrom\",{\"_index\":609,\"name\":{\"1656\":{}},\"comment\":{}}],[\"scaletypes\",{\"_index\":865,\"name\":{\"3098\":{}},\"comment\":{}}],[\"scalex\",{\"_index\":1184,\"name\":{\"5430\":{}},\"comment\":{}}],[\"scaley\",{\"_index\":1185,\"name\":{\"5431\":{}},\"comment\":{}}],[\"secondary_break_ticks\",{\"_index\":205,\"name\":{\"393\":{}},\"comment\":{}}],[\"segno_left\",{\"_index\":1113,\"name\":{\"4672\":{}},\"comment\":{}}],[\"segno_right\",{\"_index\":1114,\"name\":{\"4673\":{}},\"comment\":{}}],[\"selectnote\",{\"_index\":807,\"name\":{\"2709\":{}},\"comment\":{}}],[\"semibreve_rest_glyph_scale\",{\"_index\":841,\"name\":{\"3020\":{}},\"comment\":{}}],[\"serif\",{\"_index\":608,\"name\":{\"1654\":{}},\"comment\":{}}],[\"serif_thickness\",{\"_index\":843,\"name\":{\"3022\":{}},\"comment\":{}}],[\"serifs\",{\"_index\":1238,\"name\":{\"6200\":{}},\"comment\":{}}],[\"set\",{\"_index\":468,\"name\":{\"1350\":{},\"1729\":{}},\"comment\":{}}],[\"setascautionary\",{\"_index\":24,\"name\":{\"26\":{}},\"comment\":{}}],[\"setattribute\",{\"_index\":61,\"name\":{\"63\":{},\"144\":{},\"218\":{},\"361\":{},\"439\":{},\"518\":{},\"748\":{},\"821\":{},\"963\":{},\"1113\":{},\"1169\":{},\"1234\":{},\"1391\":{},\"1800\":{},\"1962\":{},\"2077\":{},\"2223\":{},\"2442\":{},\"2510\":{},\"2682\":{},\"2762\":{},\"2902\":{},\"2969\":{},\"3055\":{},\"3275\":{},\"3448\":{},\"3510\":{},\"3593\":{},\"3656\":{},\"3754\":{},\"3982\":{},\"4101\":{},\"4169\":{},\"4219\":{},\"4275\":{},\"4342\":{},\"4409\":{},\"4648\":{},\"4721\":{},\"4778\":{},\"4843\":{},\"4901\":{},\"4960\":{},\"5022\":{},\"5096\":{},\"5257\":{},\"5332\":{},\"5407\":{},\"5556\":{},\"5747\":{},\"5807\":{},\"5914\":{},\"5969\":{},\"6036\":{},\"6179\":{},\"6379\":{},\"6471\":{},\"6597\":{},\"6670\":{},\"6810\":{},\"6873\":{},\"6956\":{},\"7128\":{},\"7177\":{},\"7245\":{}},\"comment\":{}}],[\"setbackgroundfillstyle\",{\"_index\":277,\"name\":{\"584\":{},\"3803\":{},\"5462\":{}},\"comment\":{}}],[\"setbeam\",{\"_index\":155,\"name\":{\"296\":{},\"897\":{},\"1047\":{},\"1900\":{},\"2157\":{},\"2277\":{},\"2624\":{},\"2837\":{},\"3207\":{},\"3384\":{},\"3916\":{},\"4480\":{},\"5192\":{},\"5689\":{},\"6113\":{},\"6313\":{},\"6745\":{}},\"comment\":{}}],[\"setbeatsoccupied\",{\"_index\":1338,\"name\":{\"6932\":{}},\"comment\":{}}],[\"setbegbartype\",{\"_index\":1030,\"name\":{\"4061\":{},\"5874\":{}},\"comment\":{}}],[\"setbetweenlines\",{\"_index\":102,\"name\":{\"179\":{}},\"comment\":{}}],[\"setbracketed\",{\"_index\":1332,\"name\":{\"6925\":{}},\"comment\":{}}],[\"setcenteralignment\",{\"_index\":180,\"name\":{\"326\":{},\"927\":{},\"1077\":{},\"1928\":{},\"2187\":{},\"2408\":{},\"2647\":{},\"2867\":{},\"3237\":{},\"3412\":{},\"3946\":{},\"4614\":{},\"5220\":{},\"5712\":{},\"6143\":{},\"6343\":{},\"6425\":{},\"6775\":{}},\"comment\":{}}],[\"setcenterxshift\",{\"_index\":178,\"name\":{\"324\":{},\"925\":{},\"1075\":{},\"1926\":{},\"2185\":{},\"2406\":{},\"2645\":{},\"2865\":{},\"3235\":{},\"3410\":{},\"3944\":{},\"4612\":{},\"5218\":{},\"5710\":{},\"6141\":{},\"6341\":{},\"6423\":{},\"6773\":{}},\"comment\":{}}],[\"setclef\",{\"_index\":1032,\"name\":{\"4063\":{},\"5876\":{}},\"comment\":{}}],[\"setconfigforline\",{\"_index\":1048,\"name\":{\"4083\":{},\"5896\":{}},\"comment\":{}}],[\"setconfigforlines\",{\"_index\":1049,\"name\":{\"4084\":{},\"5897\":{}},\"comment\":{}}],[\"setcontext\",{\"_index\":64,\"name\":{\"66\":{},\"147\":{},\"221\":{},\"364\":{},\"442\":{},\"521\":{},\"751\":{},\"824\":{},\"966\":{},\"1116\":{},\"1172\":{},\"1237\":{},\"1352\":{},\"1394\":{},\"1429\":{},\"1803\":{},\"1965\":{},\"2080\":{},\"2225\":{},\"2444\":{},\"2513\":{},\"2685\":{},\"2765\":{},\"2905\":{},\"2972\":{},\"3058\":{},\"3278\":{},\"3450\":{},\"3513\":{},\"3596\":{},\"3659\":{},\"3757\":{},\"3984\":{},\"4103\":{},\"4172\":{},\"4222\":{},\"4278\":{},\"4345\":{},\"4412\":{},\"4650\":{},\"4724\":{},\"4781\":{},\"4846\":{},\"4904\":{},\"4963\":{},\"5025\":{},\"5098\":{},\"5260\":{},\"5335\":{},\"5410\":{},\"5533\":{},\"5750\":{},\"5810\":{},\"5916\":{},\"5972\":{},\"6039\":{},\"6182\":{},\"6382\":{},\"6474\":{},\"6600\":{},\"6673\":{},\"6813\":{},\"6876\":{},\"6959\":{},\"7131\":{},\"7180\":{},\"7247\":{}},\"comment\":{}}],[\"setcurrenttick\",{\"_index\":1290,\"name\":{\"6524\":{}},\"comment\":{}}],[\"setcustomtext\",{\"_index\":955,\"name\":{\"3732\":{}},\"comment\":{}}],[\"setdashed\",{\"_index\":1173,\"name\":{\"5292\":{},\"6017\":{}},\"comment\":{}}],[\"setdata\",{\"_index\":625,\"name\":{\"1673\":{}},\"comment\":{}}],[\"setdecrescendo\",{\"_index\":387,\"name\":{\"995\":{}},\"comment\":{}}],[\"setdefaultledgerlinestyle\",{\"_index\":1001,\"name\":{\"4020\":{},\"5834\":{}},\"comment\":{}}],[\"setdelayed\",{\"_index\":914,\"name\":{\"3552\":{}},\"comment\":{}}],[\"setdirection\",{\"_index\":1140,\"name\":{\"4936\":{},\"5064\":{},\"5784\":{},\"5945\":{}},\"comment\":{}}],[\"setdotshifty\",{\"_index\":403,\"name\":{\"1196\":{}},\"comment\":{}}],[\"setdrawcircle\",{\"_index\":1174,\"name\":{\"5293\":{}},\"comment\":{}}],[\"setduration\",{\"_index\":194,\"name\":{\"340\":{},\"942\":{},\"1092\":{},\"1941\":{},\"2202\":{},\"2422\":{},\"2661\":{},\"2881\":{},\"3253\":{},\"3427\":{},\"3961\":{},\"4628\":{},\"5235\":{},\"5726\":{},\"6158\":{},\"6358\":{},\"6445\":{},\"6789\":{}},\"comment\":{}}],[\"setenablekerning\",{\"_index\":358,\"name\":{\"704\":{}},\"comment\":{}}],[\"setendbartype\",{\"_index\":1031,\"name\":{\"4062\":{},\"5875\":{}},\"comment\":{}}],[\"setendclef\",{\"_index\":1033,\"name\":{\"4065\":{},\"5878\":{}},\"comment\":{}}],[\"setendkeysignature\",{\"_index\":1036,\"name\":{\"4068\":{},\"5881\":{}},\"comment\":{}}],[\"setendtimesignature\",{\"_index\":1038,\"name\":{\"4070\":{},\"5883\":{}},\"comment\":{}}],[\"setextension\",{\"_index\":1157,\"name\":{\"5065\":{}},\"comment\":{}}],[\"setfillstyle\",{\"_index\":276,\"name\":{\"583\":{},\"3802\":{},\"5461\":{}},\"comment\":{}}],[\"setflagstyle\",{\"_index\":776,\"name\":{\"2307\":{},\"4510\":{}},\"comment\":{}}],[\"setfont\",{\"_index\":67,\"name\":{\"69\":{},\"150\":{},\"224\":{},\"367\":{},\"445\":{},\"524\":{},\"611\":{},\"703\":{},\"827\":{},\"969\":{},\"1119\":{},\"1175\":{},\"1240\":{},\"1397\":{},\"1806\":{},\"1968\":{},\"2083\":{},\"2228\":{},\"2447\":{},\"2516\":{},\"2688\":{},\"2768\":{},\"2908\":{},\"2975\":{},\"3061\":{},\"3281\":{},\"3453\":{},\"3516\":{},\"3599\":{},\"3662\":{},\"3760\":{},\"3833\":{},\"3987\":{},\"4106\":{},\"4175\":{},\"4225\":{},\"4281\":{},\"4348\":{},\"4415\":{},\"4653\":{},\"4727\":{},\"4784\":{},\"4849\":{},\"4907\":{},\"4966\":{},\"5028\":{},\"5101\":{},\"5263\":{},\"5338\":{},\"5413\":{},\"5492\":{},\"5561\":{},\"5753\":{},\"5813\":{},\"5919\":{},\"5975\":{},\"6042\":{},\"6185\":{},\"6385\":{},\"6477\":{},\"6603\":{},\"6676\":{},\"6816\":{},\"6879\":{},\"6962\":{},\"7134\":{},\"7183\":{},\"7250\":{}},\"comment\":{}}],[\"setfontsize\",{\"_index\":71,\"name\":{\"73\":{},\"154\":{},\"228\":{},\"371\":{},\"449\":{},\"528\":{},\"757\":{},\"831\":{},\"973\":{},\"1123\":{},\"1179\":{},\"1244\":{},\"1401\":{},\"1810\":{},\"1972\":{},\"2087\":{},\"2232\":{},\"2451\":{},\"2520\":{},\"2692\":{},\"2772\":{},\"2912\":{},\"2979\":{},\"3065\":{},\"3285\":{},\"3457\":{},\"3520\":{},\"3603\":{},\"3666\":{},\"3764\":{},\"3991\":{},\"4110\":{},\"4179\":{},\"4229\":{},\"4285\":{},\"4352\":{},\"4419\":{},\"4657\":{},\"4731\":{},\"4788\":{},\"4853\":{},\"4911\":{},\"4970\":{},\"5032\":{},\"5105\":{},\"5267\":{},\"5342\":{},\"5417\":{},\"5565\":{},\"5757\":{},\"5817\":{},\"5923\":{},\"5979\":{},\"6046\":{},\"6189\":{},\"6228\":{},\"6389\":{},\"6481\":{},\"6607\":{},\"6680\":{},\"6820\":{},\"6883\":{},\"6966\":{},\"7138\":{},\"7187\":{},\"7254\":{}},\"comment\":{}}],[\"setfrethandfinger\",{\"_index\":681,\"name\":{\"1758\":{}},\"comment\":{}}],[\"setghost\",{\"_index\":797,\"name\":{\"2536\":{},\"5601\":{}},\"comment\":{}}],[\"setglyph\",{\"_index\":748,\"name\":{\"2103\":{},\"3862\":{},\"6635\":{}},\"comment\":{}}],[\"setgroupstyle\",{\"_index\":47,\"name\":{\"49\":{},\"130\":{},\"204\":{},\"347\":{},\"425\":{},\"504\":{},\"734\":{},\"807\":{},\"949\":{},\"1099\":{},\"1155\":{},\"1220\":{},\"1376\":{},\"1786\":{},\"1948\":{},\"2063\":{},\"2209\":{},\"2428\":{},\"2496\":{},\"2668\":{},\"2748\":{},\"2888\":{},\"2955\":{},\"3041\":{},\"3260\":{},\"3434\":{},\"3496\":{},\"3579\":{},\"3642\":{},\"3740\":{},\"3968\":{},\"4088\":{},\"4155\":{},\"4205\":{},\"4261\":{},\"4328\":{},\"4395\":{},\"4634\":{},\"4707\":{},\"4764\":{},\"4829\":{},\"4887\":{},\"4946\":{},\"5008\":{},\"5082\":{},\"5242\":{},\"5318\":{},\"5393\":{},\"5542\":{},\"5733\":{},\"5793\":{},\"5901\":{},\"5955\":{},\"6023\":{},\"6165\":{},\"6365\":{},\"6456\":{},\"6583\":{},\"6656\":{},\"6796\":{},\"6859\":{},\"6942\":{},\"7114\":{},\"7163\":{},\"7231\":{}},\"comment\":{}}],[\"seth\",{\"_index\":253,\"name\":{\"554\":{}},\"comment\":{}}],[\"setharsh\",{\"_index\":1378,\"name\":{\"7088\":{},\"7158\":{}},\"comment\":{}}],[\"setheight\",{\"_index\":386,\"name\":{\"994\":{}},\"comment\":{}}],[\"sethorizontal\",{\"_index\":361,\"name\":{\"707\":{}},\"comment\":{}}],[\"setignoreticks\",{\"_index\":174,\"name\":{\"316\":{},\"917\":{},\"1067\":{},\"1918\":{},\"2177\":{},\"2398\":{},\"2637\":{},\"2857\":{},\"3227\":{},\"3403\":{},\"3936\":{},\"4604\":{},\"5210\":{},\"5702\":{},\"6133\":{},\"6333\":{},\"6415\":{},\"6765\":{}},\"comment\":{}}],[\"setindex\",{\"_index\":31,\"name\":{\"33\":{},\"114\":{},\"188\":{},\"489\":{},\"718\":{},\"1204\":{},\"1770\":{},\"2480\":{},\"2938\":{},\"3480\":{},\"3563\":{},\"3626\":{},\"5302\":{},\"5378\":{},\"6843\":{},\"7098\":{}},\"comment\":{}}],[\"setindexvalue\",{\"_index\":964,\"name\":{\"3782\":{}},\"comment\":{}}],[\"setintrinsicticks\",{\"_index\":191,\"name\":{\"337\":{},\"939\":{},\"1089\":{},\"1938\":{},\"2199\":{},\"2419\":{},\"2658\":{},\"2878\":{},\"3250\":{},\"3424\":{},\"3958\":{},\"4625\":{},\"5232\":{},\"5723\":{},\"6155\":{},\"6355\":{},\"6442\":{},\"6786\":{}},\"comment\":{}}],[\"setisnumeric\",{\"_index\":1305,\"name\":{\"6637\":{}},\"comment\":{}}],[\"setjustification\",{\"_index\":94,\"name\":{\"105\":{},\"6258\":{}},\"comment\":{}}],[\"setkey\",{\"_index\":803,\"name\":{\"2701\":{}},\"comment\":{}}],[\"setkeyline\",{\"_index\":779,\"name\":{\"2310\":{},\"4513\":{}},\"comment\":{}}],[\"setkeysig\",{\"_index\":814,\"name\":{\"2727\":{}},\"comment\":{}}],[\"setkeysignature\",{\"_index\":1035,\"name\":{\"4067\":{},\"5880\":{}},\"comment\":{}}],[\"setkeystyle\",{\"_index\":778,\"name\":{\"2309\":{},\"4512\":{}},\"comment\":{}}],[\"setlastnote\",{\"_index\":1172,\"name\":{\"5291\":{}},\"comment\":{}}],[\"setlayoutmetrics\",{\"_index\":376,\"name\":{\"802\":{},\"2743\":{},\"4150\":{},\"4389\":{},\"4702\":{},\"4759\":{},\"4824\":{},\"4882\":{},\"5003\":{},\"6651\":{}},\"comment\":{}}],[\"setledgerlinestyle\",{\"_index\":774,\"name\":{\"2305\":{},\"4508\":{}},\"comment\":{}}],[\"setleftdisplacedheadpx\",{\"_index\":133,\"name\":{\"274\":{},\"875\":{},\"1025\":{},\"1879\":{},\"2136\":{},\"2370\":{},\"2605\":{},\"2815\":{},\"3185\":{},\"3362\":{},\"3895\":{},\"4576\":{},\"5171\":{},\"5670\":{},\"6091\":{},\"6291\":{},\"6723\":{}},\"comment\":{}}],[\"setline\",{\"_index\":385,\"name\":{\"993\":{},\"3330\":{},\"3733\":{},\"6018\":{},\"6061\":{},\"6259\":{},\"6633\":{},\"7157\":{}},\"comment\":{}}],[\"setlinecap\",{\"_index\":282,\"name\":{\"589\":{},\"3808\":{},\"5468\":{}},\"comment\":{}}],[\"setlinedash\",{\"_index\":283,\"name\":{\"590\":{},\"3809\":{},\"5467\":{}},\"comment\":{}}],[\"setlineendtype\",{\"_index\":1170,\"name\":{\"5287\":{}},\"comment\":{}}],[\"setlinewidth\",{\"_index\":281,\"name\":{\"588\":{},\"3807\":{},\"5466\":{}},\"comment\":{}}],[\"setloweraccidental\",{\"_index\":916,\"name\":{\"3554\":{}},\"comment\":{}}],[\"setmeasure\",{\"_index\":1013,\"name\":{\"4040\":{},\"5854\":{}},\"comment\":{}}],[\"setmetrics\",{\"_index\":626,\"name\":{\"1674\":{}},\"comment\":{}}],[\"setmode\",{\"_index\":1390,\"name\":{\"7213\":{}},\"comment\":{}}],[\"setmodifiercontext\",{\"_index\":34,\"name\":{\"36\":{},\"117\":{},\"191\":{},\"341\":{},\"492\":{},\"721\":{},\"943\":{},\"1093\":{},\"1207\":{},\"1773\":{},\"1942\":{},\"2203\":{},\"2423\":{},\"2483\":{},\"2662\":{},\"2882\":{},\"2941\":{},\"3254\":{},\"3428\":{},\"3483\":{},\"3566\":{},\"3629\":{},\"3962\":{},\"4629\":{},\"5236\":{},\"5305\":{},\"5381\":{},\"5727\":{},\"6159\":{},\"6359\":{},\"6447\":{},\"6790\":{},\"6846\":{},\"7101\":{}},\"comment\":{}}],[\"setmusicfont\",{\"_index\":557,\"name\":{\"1576\":{}},\"comment\":{}}],[\"setnote\",{\"_index\":23,\"name\":{\"25\":{},\"111\":{},\"185\":{},\"486\":{},\"715\":{},\"1195\":{},\"1767\":{},\"2477\":{},\"2935\":{},\"3477\":{},\"3560\":{},\"3618\":{},\"5299\":{},\"5375\":{},\"6840\":{},\"7095\":{}},\"comment\":{}}],[\"setnotedisplaced\",{\"_index\":771,\"name\":{\"2294\":{},\"4497\":{}},\"comment\":{}}],[\"setnotedots\",{\"_index\":452,\"name\":{\"1324\":{}},\"comment\":{}}],[\"setnoteduration\",{\"_index\":453,\"name\":{\"1325\":{}},\"comment\":{}}],[\"setnoteheadxbounds\",{\"_index\":1156,\"name\":{\"5063\":{}},\"comment\":{}}],[\"setnotes\",{\"_index\":397,\"name\":{\"1148\":{},\"4255\":{},\"4321\":{},\"4937\":{},\"5785\":{},\"5946\":{}},\"comment\":{}}],[\"setnotesoccupied\",{\"_index\":1340,\"name\":{\"6934\":{}},\"comment\":{}}],[\"setnotestartx\",{\"_index\":1004,\"name\":{\"4024\":{},\"5838\":{}},\"comment\":{}}],[\"setnotetype\",{\"_index\":454,\"name\":{\"1326\":{}},\"comment\":{}}],[\"setnumlines\",{\"_index\":1010,\"name\":{\"4031\":{},\"5845\":{}},\"comment\":{}}],[\"setoffsetx\",{\"_index\":683,\"name\":{\"1760\":{},\"5289\":{}},\"comment\":{}}],[\"setoffsety\",{\"_index\":684,\"name\":{\"1761\":{},\"5290\":{}},\"comment\":{}}],[\"setoptions\",{\"_index\":469,\"name\":{\"1351\":{},\"1426\":{},\"2044\":{},\"5062\":{},\"5526\":{},\"6566\":{}},\"comment\":{}}],[\"setorigin\",{\"_index\":743,\"name\":{\"2056\":{},\"6577\":{}},\"comment\":{}}],[\"setoriginx\",{\"_index\":741,\"name\":{\"2054\":{},\"6575\":{}},\"comment\":{}}],[\"setoriginy\",{\"_index\":742,\"name\":{\"2055\":{},\"6576\":{}},\"comment\":{}}],[\"setpadding\",{\"_index\":375,\"name\":{\"801\":{},\"2742\":{},\"4149\":{},\"4388\":{},\"4701\":{},\"4758\":{},\"4823\":{},\"4881\":{},\"5002\":{},\"6513\":{},\"6650\":{}},\"comment\":{}}],[\"setpartialbeamsideat\",{\"_index\":220,\"name\":{\"410\":{}},\"comment\":{}}],[\"setplaynote\",{\"_index\":125,\"name\":{\"266\":{},\"867\":{},\"1017\":{},\"1873\":{},\"2128\":{},\"2364\":{},\"2598\":{},\"2807\":{},\"3177\":{},\"3355\":{},\"3887\":{},\"4570\":{},\"5163\":{},\"5663\":{},\"6083\":{},\"6283\":{},\"6715\":{}},\"comment\":{}}],[\"setpoint\",{\"_index\":738,\"name\":{\"2045\":{},\"6567\":{}},\"comment\":{}}],[\"setposition\",{\"_index\":36,\"name\":{\"38\":{},\"119\":{},\"193\":{},\"494\":{},\"723\":{},\"793\":{},\"1209\":{},\"1775\":{},\"2485\":{},\"2734\":{},\"2943\":{},\"3485\":{},\"3568\":{},\"3631\":{},\"4139\":{},\"4253\":{},\"4378\":{},\"4691\":{},\"4748\":{},\"4813\":{},\"4871\":{},\"4992\":{},\"5307\":{},\"5382\":{},\"6640\":{},\"6848\":{},\"7103\":{}},\"comment\":{}}],[\"setratioed\",{\"_index\":1333,\"name\":{\"6926\":{}},\"comment\":{}}],[\"setrawfont\",{\"_index\":303,\"name\":{\"614\":{},\"3836\":{},\"5495\":{}},\"comment\":{}}],[\"setrendered\",{\"_index\":57,\"name\":{\"59\":{},\"140\":{},\"214\":{},\"357\":{},\"435\":{},\"514\":{},\"744\":{},\"817\":{},\"959\":{},\"1109\":{},\"1165\":{},\"1230\":{},\"1387\":{},\"1796\":{},\"1958\":{},\"2073\":{},\"2219\":{},\"2438\":{},\"2506\":{},\"2678\":{},\"2758\":{},\"2898\":{},\"2965\":{},\"3051\":{},\"3271\":{},\"3444\":{},\"3506\":{},\"3589\":{},\"3652\":{},\"3750\":{},\"3978\":{},\"4097\":{},\"4165\":{},\"4215\":{},\"4271\":{},\"4338\":{},\"4405\":{},\"4644\":{},\"4717\":{},\"4774\":{},\"4839\":{},\"4897\":{},\"4956\":{},\"5018\":{},\"5092\":{},\"5253\":{},\"5328\":{},\"5403\":{},\"5552\":{},\"5743\":{},\"5803\":{},\"5910\":{},\"5965\":{},\"6032\":{},\"6175\":{},\"6375\":{},\"6467\":{},\"6593\":{},\"6666\":{},\"6806\":{},\"6869\":{},\"6952\":{},\"7124\":{},\"7173\":{},\"7241\":{}},\"comment\":{}}],[\"setrenderoptions\",{\"_index\":1070,\"name\":{\"4254\":{}},\"comment\":{}}],[\"setrepetitiontype\",{\"_index\":1016,\"name\":{\"4043\":{},\"5857\":{}},\"comment\":{}}],[\"setreportwidth\",{\"_index\":344,\"name\":{\"689\":{}},\"comment\":{}}],[\"setrightdisplacedheadpx\",{\"_index\":134,\"name\":{\"275\":{},\"876\":{},\"1026\":{},\"1880\":{},\"2137\":{},\"2371\":{},\"2606\":{},\"2816\":{},\"3186\":{},\"3363\":{},\"3896\":{},\"4577\":{},\"5172\":{},\"5671\":{},\"6092\":{},\"6292\":{},\"6724\":{}},\"comment\":{}}],[\"setsection\",{\"_index\":1018,\"name\":{\"4045\":{},\"5859\":{}},\"comment\":{}}],[\"setshadowblur\",{\"_index\":280,\"name\":{\"587\":{},\"3806\":{},\"5465\":{}},\"comment\":{}}],[\"setshadowcolor\",{\"_index\":279,\"name\":{\"586\":{},\"3805\":{},\"5464\":{}},\"comment\":{}}],[\"setshiftx\",{\"_index\":1123,\"name\":{\"4684\":{},\"4744\":{},\"4809\":{},\"4866\":{}},\"comment\":{}}],[\"setshifty\",{\"_index\":1124,\"name\":{\"4685\":{},\"4745\":{},\"4810\":{},\"4867\":{},\"4989\":{}},\"comment\":{}}],[\"setsoftmaxfactor\",{\"_index\":1394,\"name\":{\"7221\":{}},\"comment\":{}}],[\"setspacingfromnextmodifier\",{\"_index\":39,\"name\":{\"41\":{},\"122\":{},\"196\":{},\"497\":{},\"726\":{},\"1212\":{},\"1778\":{},\"2488\":{},\"2946\":{},\"3488\":{},\"3571\":{},\"3634\":{},\"5310\":{},\"5385\":{},\"6851\":{},\"7106\":{}},\"comment\":{}}],[\"setstave\",{\"_index\":130,\"name\":{\"271\":{},\"790\":{},\"872\":{},\"1022\":{},\"1824\":{},\"2046\":{},\"2133\":{},\"2292\":{},\"2540\":{},\"2737\":{},\"2812\":{},\"3032\":{},\"3182\":{},\"3333\":{},\"3892\":{},\"4142\":{},\"4381\":{},\"4495\":{},\"4694\":{},\"4751\":{},\"4816\":{},\"4874\":{},\"4995\":{},\"5168\":{},\"5605\":{},\"6088\":{},\"6288\":{},\"6451\":{},\"6568\":{},\"6643\":{},\"6720\":{},\"7216\":{}},\"comment\":{}}],[\"setstavesection\",{\"_index\":1129,\"name\":{\"4743\":{}},\"comment\":{}}],[\"setstavetext\",{\"_index\":1132,\"name\":{\"4865\":{}},\"comment\":{}}],[\"setstem\",{\"_index\":688,\"name\":{\"1832\":{},\"2330\":{},\"2563\":{},\"4536\":{},\"5122\":{},\"5628\":{}},\"comment\":{}}],[\"setstemdirection\",{\"_index\":694,\"name\":{\"1840\":{},\"2337\":{},\"2571\":{},\"4543\":{},\"5130\":{},\"5636\":{}},\"comment\":{}}],[\"setstemlength\",{\"_index\":698,\"name\":{\"1844\":{},\"2339\":{},\"2573\":{},\"4545\":{},\"5134\":{},\"5638\":{}},\"comment\":{}}],[\"setstemlet\",{\"_index\":1162,\"name\":{\"5075\":{}},\"comment\":{}}],[\"setstemstyle\",{\"_index\":772,\"name\":{\"2303\":{},\"4506\":{}},\"comment\":{}}],[\"setstrict\",{\"_index\":1392,\"name\":{\"7219\":{}},\"comment\":{}}],[\"setstringnumber\",{\"_index\":1171,\"name\":{\"5288\":{}},\"comment\":{}}],[\"setstrokestyle\",{\"_index\":278,\"name\":{\"585\":{},\"3804\":{},\"5463\":{}},\"comment\":{}}],[\"setstyle\",{\"_index\":46,\"name\":{\"48\":{},\"129\":{},\"203\":{},\"346\":{},\"424\":{},\"503\":{},\"733\":{},\"806\":{},\"948\":{},\"1098\":{},\"1154\":{},\"1219\":{},\"1375\":{},\"1785\":{},\"1947\":{},\"2062\":{},\"2208\":{},\"2302\":{},\"2495\":{},\"2667\":{},\"2747\":{},\"2887\":{},\"2954\":{},\"3040\":{},\"3259\":{},\"3433\":{},\"3495\":{},\"3578\":{},\"3641\":{},\"3739\":{},\"3967\":{},\"4087\":{},\"4154\":{},\"4204\":{},\"4260\":{},\"4327\":{},\"4394\":{},\"4505\":{},\"4706\":{},\"4763\":{},\"4828\":{},\"4886\":{},\"4945\":{},\"5007\":{},\"5081\":{},\"5241\":{},\"5317\":{},\"5392\":{},\"5541\":{},\"5732\":{},\"5792\":{},\"5900\":{},\"5954\":{},\"6022\":{},\"6164\":{},\"6364\":{},\"6455\":{},\"6582\":{},\"6655\":{},\"6795\":{},\"6858\":{},\"6941\":{},\"7113\":{},\"7162\":{},\"7230\":{}},\"comment\":{}}],[\"settap\",{\"_index\":239,\"name\":{\"478\":{}},\"comment\":{}}],[\"settempo\",{\"_index\":1019,\"name\":{\"4046\":{},\"4808\":{},\"5860\":{}},\"comment\":{}}],[\"settext\",{\"_index\":1020,\"name\":{\"4047\":{},\"4198\":{},\"4320\":{},\"4868\":{},\"5861\":{}},\"comment\":{}}],[\"settextline\",{\"_index\":37,\"name\":{\"39\":{},\"120\":{},\"194\":{},\"495\":{},\"724\":{},\"1210\":{},\"1776\":{},\"2486\":{},\"2944\":{},\"3486\":{},\"3569\":{},\"3632\":{},\"5308\":{},\"5383\":{},\"6849\":{},\"7104\":{}},\"comment\":{}}],[\"settickcontext\",{\"_index\":147,\"name\":{\"288\":{},\"889\":{},\"1039\":{},\"1892\":{},\"2149\":{},\"2381\":{},\"2617\":{},\"2829\":{},\"3199\":{},\"3376\":{},\"3908\":{},\"4587\":{},\"5184\":{},\"5682\":{},\"6105\":{},\"6305\":{},\"6435\":{},\"6737\":{}},\"comment\":{}}],[\"settimesig\",{\"_index\":1302,\"name\":{\"6630\":{}},\"comment\":{}}],[\"settimesignature\",{\"_index\":1037,\"name\":{\"4069\":{},\"5882\":{}},\"comment\":{}}],[\"settuning\",{\"_index\":1310,\"name\":{\"6894\":{}},\"comment\":{}}],[\"settuplet\",{\"_index\":184,\"name\":{\"330\":{},\"931\":{},\"1081\":{},\"1932\":{},\"2191\":{},\"2412\":{},\"2651\":{},\"2871\":{},\"3241\":{},\"3416\":{},\"3950\":{},\"4618\":{},\"5224\":{},\"5716\":{},\"6147\":{},\"6347\":{},\"6431\":{},\"6779\":{}},\"comment\":{}}],[\"settupletlocation\",{\"_index\":1334,\"name\":{\"6927\":{}},\"comment\":{}}],[\"settype\",{\"_index\":107,\"name\":{\"243\":{},\"788\":{},\"844\":{},\"3731\":{},\"4133\":{},\"4196\":{}},\"comment\":{}}],[\"setupperaccidental\",{\"_index\":915,\"name\":{\"3553\":{}},\"comment\":{}}],[\"setvertical\",{\"_index\":359,\"name\":{\"705\":{}},\"comment\":{}}],[\"setverticaljustification\",{\"_index\":92,\"name\":{\"103\":{}},\"comment\":{}}],[\"setvibratowidth\",{\"_index\":1379,\"name\":{\"7089\":{}},\"comment\":{}}],[\"setviewbox\",{\"_index\":1195,\"name\":{\"5471\":{}},\"comment\":{}}],[\"setvisibility\",{\"_index\":1161,\"name\":{\"5074\":{}},\"comment\":{}}],[\"setvoice\",{\"_index\":145,\"name\":{\"286\":{},\"887\":{},\"1037\":{},\"1890\":{},\"2147\":{},\"2379\":{},\"2615\":{},\"2827\":{},\"3197\":{},\"3374\":{},\"3906\":{},\"4585\":{},\"5182\":{},\"5680\":{},\"6103\":{},\"6303\":{},\"6427\":{},\"6735\":{}},\"comment\":{}}],[\"setvoltatype\",{\"_index\":1017,\"name\":{\"4044\":{},\"5858\":{}},\"comment\":{}}],[\"setw\",{\"_index\":252,\"name\":{\"553\":{}},\"comment\":{}}],[\"setwidth\",{\"_index\":26,\"name\":{\"28\":{},\"108\":{},\"182\":{},\"317\":{},\"483\":{},\"712\":{},\"796\":{},\"918\":{},\"1068\":{},\"1199\":{},\"1764\":{},\"1919\":{},\"2178\":{},\"2399\":{},\"2471\":{},\"2638\":{},\"2738\":{},\"2858\":{},\"2932\":{},\"3228\":{},\"3404\":{},\"3472\":{},\"3557\":{},\"3621\":{},\"3937\":{},\"4037\":{},\"4144\":{},\"4383\":{},\"4605\":{},\"4696\":{},\"4753\":{},\"4818\":{},\"4876\":{},\"4997\":{},\"5211\":{},\"5296\":{},\"5372\":{},\"5703\":{},\"5851\":{},\"6134\":{},\"6334\":{},\"6416\":{},\"6645\":{},\"6766\":{},\"6837\":{},\"7092\":{}},\"comment\":{}}],[\"setx\",{\"_index\":250,\"name\":{\"551\":{},\"798\":{},\"2740\":{},\"3326\":{},\"4036\":{},\"4146\":{},\"4385\":{},\"4698\":{},\"4755\":{},\"4820\":{},\"4878\":{},\"4999\":{},\"5528\":{},\"5850\":{},\"6507\":{},\"6647\":{}},\"comment\":{}}],[\"setxbase\",{\"_index\":1278,\"name\":{\"6509\":{}},\"comment\":{}}],[\"setxoffset\",{\"_index\":1280,\"name\":{\"6511\":{}},\"comment\":{}}],[\"setxshift\",{\"_index\":41,\"name\":{\"43\":{},\"124\":{},\"198\":{},\"319\":{},\"477\":{},\"728\":{},\"920\":{},\"1070\":{},\"1214\":{},\"1780\":{},\"1921\":{},\"2048\":{},\"2180\":{},\"2401\":{},\"2490\":{},\"2640\":{},\"2860\":{},\"2948\":{},\"3230\":{},\"3405\":{},\"3490\":{},\"3573\":{},\"3636\":{},\"3939\":{},\"4199\":{},\"4607\":{},\"5213\":{},\"5312\":{},\"5387\":{},\"5705\":{},\"6136\":{},\"6336\":{},\"6418\":{},\"6570\":{},\"6768\":{},\"6853\":{},\"7108\":{}},\"comment\":{}}],[\"sety\",{\"_index\":251,\"name\":{\"552\":{},\"3328\":{},\"4032\":{},\"5530\":{},\"5846\":{}},\"comment\":{}}],[\"setybounds\",{\"_index\":1159,\"name\":{\"5067\":{}},\"comment\":{}}],[\"setys\",{\"_index\":141,\"name\":{\"282\":{},\"883\":{},\"1033\":{},\"1887\":{},\"2143\":{},\"2376\":{},\"2612\":{},\"2823\":{},\"3193\":{},\"3370\":{},\"3902\":{},\"4582\":{},\"5179\":{},\"5677\":{},\"6099\":{},\"6299\":{},\"6731\":{}},\"comment\":{}}],[\"setyshift\",{\"_index\":38,\"name\":{\"40\":{},\"121\":{},\"195\":{},\"496\":{},\"725\":{},\"1211\":{},\"1777\":{},\"2050\":{},\"2487\":{},\"2945\":{},\"3487\":{},\"3570\":{},\"3633\":{},\"5309\":{},\"5384\":{},\"6572\":{},\"6850\":{},\"7105\":{}},\"comment\":{}}],[\"shadow_attributes\",{\"_index\":1187,\"name\":{\"5435\":{},\"5451\":{}},\"comment\":{}}],[\"shadowblur\",{\"_index\":478,\"name\":{\"1365\":{}},\"comment\":{}}],[\"shadowcolor\",{\"_index\":477,\"name\":{\"1364\":{}},\"comment\":{}}],[\"shift_right\",{\"_index\":879,\"name\":{\"3123\":{}},\"comment\":{}}],[\"shift_y\",{\"_index\":719,\"name\":{\"2000\":{}},\"comment\":{}}],[\"shoulddrawflag\",{\"_index\":789,\"name\":{\"2322\":{},\"4525\":{}},\"comment\":{}}],[\"shouldignoreticks\",{\"_index\":135,\"name\":{\"276\":{},\"877\":{},\"1027\":{},\"1881\":{},\"2138\":{},\"2372\":{},\"2607\":{},\"2817\":{},\"3187\":{},\"3364\":{},\"3897\":{},\"4578\":{},\"5173\":{},\"5672\":{},\"6093\":{},\"6293\":{},\"6414\":{},\"6725\":{}},\"comment\":{}}],[\"show_bracket\",{\"_index\":1235,\"name\":{\"6010\":{}},\"comment\":{}}],[\"show_number\",{\"_index\":835,\"name\":{\"3013\":{}},\"comment\":{}}],[\"show_stemlets\",{\"_index\":206,\"name\":{\"394\":{}},\"comment\":{}}],[\"simpleformat\",{\"_index\":646,\"name\":{\"1700\":{}},\"comment\":{}}],[\"simplify\",{\"_index\":668,\"name\":{\"1731\":{}},\"comment\":{}}],[\"single\",{\"_index\":1050,\"name\":{\"4118\":{}},\"comment\":{}}],[\"singlenote\",{\"_index\":414,\"name\":{\"1265\":{}},\"comment\":{}}],[\"size\",{\"_index\":583,\"name\":{\"1608\":{},\"1655\":{},\"5427\":{}},\"comment\":{}}],[\"slash\",{\"_index\":432,\"name\":{\"1287\":{},\"2240\":{}},\"comment\":{}}],[\"slash_notehead_width\",{\"_index\":566,\"name\":{\"1585\":{}},\"comment\":{}}],[\"slashed\",{\"_index\":897,\"name\":{\"3298\":{}},\"comment\":{}}],[\"slide_down\",{\"_index\":1223,\"name\":{\"5768\":{}},\"comment\":{}}],[\"slide_up\",{\"_index\":1222,\"name\":{\"5767\":{}},\"comment\":{}}],[\"slope\",{\"_index\":216,\"name\":{\"405\":{}},\"comment\":{}}],[\"slope_cost\",{\"_index\":211,\"name\":{\"399\":{}},\"comment\":{}}],[\"slope_iterations\",{\"_index\":210,\"name\":{\"398\":{}},\"comment\":{}}],[\"slur_y_shift\",{\"_index\":792,\"name\":{\"2468\":{}},\"comment\":{}}],[\"smooth\",{\"_index\":1260,\"name\":{\"6239\":{}},\"comment\":{}}],[\"smufl\",{\"_index\":592,\"name\":{\"1621\":{}},\"comment\":{}}],[\"soft\",{\"_index\":1382,\"name\":{\"7200\":{}},\"comment\":{}}],[\"softmax\",{\"_index\":1395,\"name\":{\"7222\":{}},\"comment\":{}}],[\"softmax_factor\",{\"_index\":562,\"name\":{\"1581\":{}},\"comment\":{}}],[\"softmaxfactor\",{\"_index\":633,\"name\":{\"1681\":{},\"5498\":{}},\"comment\":{}}],[\"sortandunique\",{\"_index\":1366,\"name\":{\"7065\":{}},\"comment\":{}}],[\"sortbycategory\",{\"_index\":1045,\"name\":{\"4078\":{},\"5891\":{}},\"comment\":{}}],[\"space\",{\"_index\":483,\"name\":{\"1411\":{},\"4022\":{},\"5836\":{},\"6403\":{}},\"comment\":{}}],[\"space_above_staff_ln\",{\"_index\":991,\"name\":{\"4004\":{}},\"comment\":{}}],[\"space_below_staff_ln\",{\"_index\":990,\"name\":{\"4003\":{}},\"comment\":{}}],[\"spaceabove\",{\"_index\":1202,\"name\":{\"5506\":{}},\"comment\":{}}],[\"spacebelow\",{\"_index\":1203,\"name\":{\"5507\":{}},\"comment\":{}}],[\"spacebetweenstaves\",{\"_index\":1208,\"name\":{\"5513\":{}},\"comment\":{}}],[\"spacing\",{\"_index\":322,\"name\":{\"636\":{},\"2993\":{}},\"comment\":{}}],[\"spacing_between_lines_px\",{\"_index\":840,\"name\":{\"3019\":{},\"4009\":{}},\"comment\":{}}],[\"spacingbetweenblocks\",{\"_index\":336,\"name\":{\"666\":{}},\"comment\":{}}],[\"stacktrace\",{\"_index\":1369,\"name\":{\"7069\":{}},\"comment\":{}}],[\"start\",{\"_index\":1230,\"name\":{\"5987\":{},\"6014\":{}},\"comment\":{}}],[\"state\",{\"_index\":1186,\"name\":{\"5432\":{},\"5433\":{},\"5452\":{}},\"comment\":{}}],[\"state_stack\",{\"_index\":1190,\"name\":{\"5453\":{}},\"comment\":{}}],[\"stave\",{\"_index\":482,\"name\":{\"1409\":{},\"1432\":{},\"1526\":{},\"1622\":{},\"1686\":{},\"4012\":{},\"5503\":{},\"7021\":{}},\"comment\":{}}],[\"stave_line_distance\",{\"_index\":567,\"name\":{\"1586\":{}},\"comment\":{}}],[\"stave_line_thickness\",{\"_index\":568,\"name\":{\"1587\":{}},\"comment\":{}}],[\"staveconnector\",{\"_index\":509,\"name\":{\"1458\":{},\"1527\":{},\"4187\":{},\"7022\":{}},\"comment\":{}}],[\"staveconnectortype\",{\"_index\":1059,\"name\":{\"4186\":{}},\"comment\":{}}],[\"stavehairpin\",{\"_index\":535,\"name\":{\"1528\":{},\"4243\":{},\"7023\":{}},\"comment\":{}}],[\"stavehairpinrenderoptions\",{\"_index\":1062,\"name\":{\"4236\":{}},\"comment\":{}}],[\"staveline\",{\"_index\":512,\"name\":{\"1464\":{},\"1529\":{},\"4297\":{},\"7024\":{}},\"comment\":{}}],[\"stavelineconfig\",{\"_index\":985,\"name\":{\"3998\":{}},\"comment\":{}}],[\"stavelinenotes\",{\"_index\":1072,\"name\":{\"4292\":{}},\"comment\":{}}],[\"stavemodifier\",{\"_index\":536,\"name\":{\"1530\":{},\"4372\":{},\"7025\":{}},\"comment\":{}}],[\"stavemodifierposition\",{\"_index\":552,\"name\":{\"1571\":{},\"4364\":{}},\"comment\":{}}],[\"stavenote\",{\"_index\":492,\"name\":{\"1434\":{},\"1531\":{},\"4464\":{},\"7026\":{}},\"comment\":{}}],[\"stavenoteformatsettings\",{\"_index\":1104,\"name\":{\"4437\":{}},\"comment\":{}}],[\"stavenoteheadbounds\",{\"_index\":1093,\"name\":{\"4426\":{}},\"comment\":{}}],[\"stavenotestruct\",{\"_index\":1110,\"name\":{\"4448\":{}},\"comment\":{}}],[\"staveoptions\",{\"_index\":987,\"name\":{\"4000\":{}},\"comment\":{}}],[\"stavesection\",{\"_index\":1128,\"name\":{\"4738\":{},\"7027\":{}},\"comment\":{}}],[\"stavetempo\",{\"_index\":537,\"name\":{\"1532\":{},\"4800\":{},\"7028\":{}},\"comment\":{}}],[\"stavetempooptions\",{\"_index\":1130,\"name\":{\"4795\":{}},\"comment\":{}}],[\"stavetext\",{\"_index\":538,\"name\":{\"1533\":{},\"4860\":{},\"7029\":{}},\"comment\":{}}],[\"stavetie\",{\"_index\":511,\"name\":{\"1463\":{},\"1534\":{},\"4923\":{},\"7030\":{}},\"comment\":{}}],[\"stem\",{\"_index\":443,\"name\":{\"1309\":{},\"1340\":{},\"1535\":{},\"1829\":{},\"1990\":{},\"2327\":{},\"2560\":{},\"4533\":{},\"5053\":{},\"5119\":{},\"5625\":{},\"7031\":{}},\"comment\":{}}],[\"stem_beam_extension\",{\"_index\":710,\"name\":{\"1987\":{}},\"comment\":{}}],[\"stem_direction\",{\"_index\":685,\"name\":{\"1828\":{},\"2241\":{},\"2326\":{},\"2559\":{},\"3304\":{},\"4449\":{},\"4532\":{},\"5047\":{},\"5118\":{},\"5577\":{},\"5624\":{}},\"comment\":{}}],[\"stem_down\",{\"_index\":759,\"name\":{\"2262\":{},\"4468\":{}},\"comment\":{}}],[\"stem_down_extension\",{\"_index\":712,\"name\":{\"1989\":{}},\"comment\":{}}],[\"stem_down_x_offset\",{\"_index\":752,\"name\":{\"2243\":{},\"3114\":{},\"3300\":{},\"4451\":{},\"5579\":{}},\"comment\":{}}],[\"stem_down_y_base_offset\",{\"_index\":1146,\"name\":{\"5040\":{}},\"comment\":{}}],[\"stem_down_y_offset\",{\"_index\":1148,\"name\":{\"5042\":{}},\"comment\":{}}],[\"stem_extension\",{\"_index\":1153,\"name\":{\"5048\":{}},\"comment\":{}}],[\"stem_height\",{\"_index\":569,\"name\":{\"1588\":{}},\"comment\":{}}],[\"stem_up\",{\"_index\":758,\"name\":{\"2261\":{},\"4467\":{}},\"comment\":{}}],[\"stem_up_extension\",{\"_index\":711,\"name\":{\"1988\":{}},\"comment\":{}}],[\"stem_up_x_offset\",{\"_index\":753,\"name\":{\"2244\":{},\"3115\":{},\"3301\":{},\"4452\":{},\"5580\":{}},\"comment\":{}}],[\"stem_up_y_base_offset\",{\"_index\":1147,\"name\":{\"5041\":{}},\"comment\":{}}],[\"stem_up_y_offset\",{\"_index\":1149,\"name\":{\"5043\":{}},\"comment\":{}}],[\"stem_width\",{\"_index\":570,\"name\":{\"1589\":{}},\"comment\":{}}],[\"stemdirection\",{\"_index\":1105,\"name\":{\"4442\":{}},\"comment\":{}}],[\"stemlet_extension\",{\"_index\":212,\"name\":{\"400\":{}},\"comment\":{}}],[\"stemletheight\",{\"_index\":1150,\"name\":{\"5044\":{}},\"comment\":{}}],[\"stemmablenote\",{\"_index\":1165,\"name\":{\"5112\":{},\"7032\":{}},\"comment\":{}}],[\"stemmax\",{\"_index\":1106,\"name\":{\"4443\":{}},\"comment\":{}}],[\"stemmin\",{\"_index\":1107,\"name\":{\"4444\":{}},\"comment\":{}}],[\"stemoffset\",{\"_index\":1324,\"name\":{\"6908\":{}},\"comment\":{}}],[\"stemoptions\",{\"_index\":1145,\"name\":{\"5039\":{}},\"comment\":{}}],[\"stempadding\",{\"_index\":1168,\"name\":{\"5276\":{}},\"comment\":{}}],[\"stemupyoffset\",{\"_index\":905,\"name\":{\"3530\":{}},\"comment\":{}}],[\"stop\",{\"_index\":1231,\"name\":{\"5988\":{},\"6015\":{}},\"comment\":{}}],[\"str\",{\"_index\":1218,\"name\":{\"5573\":{}},\"comment\":{}}],[\"strict\",{\"_index\":1381,\"name\":{\"7199\":{}},\"comment\":{}}],[\"stringnumber\",{\"_index\":505,\"name\":{\"1453\":{},\"1536\":{},\"1633\":{},\"5279\":{},\"7033\":{}},\"comment\":{}}],[\"stringnumbermetrics\",{\"_index\":1166,\"name\":{\"5274\":{}},\"comment\":{}}],[\"stroke\",{\"_index\":295,\"name\":{\"603\":{},\"1537\":{},\"3122\":{},\"3822\":{},\"5349\":{},\"5485\":{},\"7034\":{}},\"comment\":{}}],[\"stroke_px\",{\"_index\":123,\"name\":{\"264\":{},\"865\":{},\"1015\":{},\"1871\":{},\"2126\":{},\"2245\":{},\"2362\":{},\"2596\":{},\"2805\":{},\"3175\":{},\"3353\":{},\"3885\":{},\"4453\":{},\"4568\":{},\"5161\":{},\"5581\":{},\"5661\":{},\"6081\":{},\"6281\":{},\"6713\":{}},\"comment\":{}}],[\"strokestyle\",{\"_index\":302,\"name\":{\"610\":{},\"1367\":{},\"3832\":{},\"5491\":{}},\"comment\":{}}],[\"style\",{\"_index\":585,\"name\":{\"1610\":{},\"3299\":{},\"5428\":{}},\"comment\":{}}],[\"subscript\",{\"_index\":330,\"name\":{\"653\":{},\"6241\":{}},\"comment\":{}}],[\"subscriptoffset\",{\"_index\":318,\"name\":{\"632\":{},\"671\":{},\"688\":{},\"6206\":{}},\"comment\":{}}],[\"subtract\",{\"_index\":669,\"name\":{\"1733\":{}},\"comment\":{}}],[\"success\",{\"_index\":930,\"name\":{\"3688\":{}},\"comment\":{}}],[\"sumarray\",{\"_index\":1363,\"name\":{\"7059\":{}},\"comment\":{}}],[\"superscript\",{\"_index\":331,\"name\":{\"654\":{},\"5990\":{},\"6242\":{}},\"comment\":{}}],[\"superscriptoffset\",{\"_index\":317,\"name\":{\"631\":{},\"670\":{},\"687\":{},\"6205\":{}},\"comment\":{}}],[\"supersubratio\",{\"_index\":323,\"name\":{\"637\":{},\"662\":{}},\"comment\":{}}],[\"sval\",{\"_index\":423,\"name\":{\"1276\":{}},\"comment\":{}}],[\"svg\",{\"_index\":977,\"name\":{\"3840\":{},\"5441\":{}},\"comment\":{}}],[\"svgcontext\",{\"_index\":539,\"name\":{\"1538\":{},\"5437\":{}},\"comment\":{}}],[\"symbol_spacing\",{\"_index\":834,\"name\":{\"3012\":{}},\"comment\":{}}],[\"symbolmodifier\",{\"_index\":306,\"name\":{\"618\":{}},\"comment\":{}}],[\"symbolmodifiers\",{\"_index\":328,\"name\":{\"651\":{},\"675\":{},\"1563\":{}},\"comment\":{}}],[\"symboltype\",{\"_index\":305,\"name\":{\"617\":{}},\"comment\":{}}],[\"symboltypes\",{\"_index\":327,\"name\":{\"647\":{},\"674\":{},\"1562\":{}},\"comment\":{}}],[\"system\",{\"_index\":515,\"name\":{\"1467\":{},\"1539\":{},\"5522\":{},\"7035\":{}},\"comment\":{}}],[\"systemformatteroptions\",{\"_index\":1197,\"name\":{\"5496\":{}},\"comment\":{}}],[\"systemoptions\",{\"_index\":1205,\"name\":{\"5509\":{}},\"comment\":{}}],[\"systemstave\",{\"_index\":1199,\"name\":{\"5501\":{}},\"comment\":{}}],[\"tablature_font_scale\",{\"_index\":564,\"name\":{\"1583\":{}},\"comment\":{}}],[\"tabnote\",{\"_index\":499,\"name\":{\"1443\":{},\"1540\":{},\"5592\":{},\"7036\":{}},\"comment\":{}}],[\"tabnote_stem_down_extension\",{\"_index\":716,\"name\":{\"1997\":{}},\"comment\":{}}],[\"tabnote_stem_up_extension\",{\"_index\":717,\"name\":{\"1998\":{}},\"comment\":{}}],[\"tabnoteposition\",{\"_index\":1217,\"name\":{\"5572\":{}},\"comment\":{}}],[\"tabnotestruct\",{\"_index\":1220,\"name\":{\"5575\":{}},\"comment\":{}}],[\"tabslide\",{\"_index\":540,\"name\":{\"1541\":{},\"5764\":{},\"7037\":{}},\"comment\":{}}],[\"tabstave\",{\"_index\":491,\"name\":{\"1433\":{},\"1542\":{},\"5824\":{},\"7038\":{}},\"comment\":{}}],[\"tabtie\",{\"_index\":541,\"name\":{\"1543\":{},\"5930\":{},\"7039\":{}},\"comment\":{}}],[\"tcontexts\",{\"_index\":1275,\"name\":{\"6504\":{}},\"comment\":{}}],[\"text\",{\"_index\":230,\"name\":{\"459\":{},\"616\":{},\"649\":{},\"1996\":{},\"3717\":{},\"5989\":{},\"6236\":{}},\"comment\":{}}],[\"text_font\",{\"_index\":15,\"name\":{\"16\":{},\"93\":{},\"173\":{},\"240\":{},\"387\":{},\"466\":{},\"683\":{},\"784\":{},\"842\":{},\"991\":{},\"1145\":{},\"1193\":{},\"1371\":{},\"1422\":{},\"1752\":{},\"1821\":{},\"2034\":{},\"2101\":{},\"2268\":{},\"2464\":{},\"2531\":{},\"2718\":{},\"2783\":{},\"2929\":{},\"3025\":{},\"3156\":{},\"3321\":{},\"3469\":{},\"3544\":{},\"3616\":{},\"3713\":{},\"3860\":{},\"4014\":{},\"4130\":{},\"4189\":{},\"4250\":{},\"4299\":{},\"4375\":{},\"4475\":{},\"4666\":{},\"4740\":{},\"4802\":{},\"4862\":{},\"4925\":{},\"4986\":{},\"5060\":{},\"5116\":{},\"5281\":{},\"5360\":{},\"5524\":{},\"5596\":{},\"5766\":{},\"5826\":{},\"5934\":{},\"5998\":{},\"6059\":{},\"6252\":{},\"6410\":{},\"6548\":{},\"6622\":{},\"6691\":{},\"6831\":{},\"6920\":{},\"7085\":{},\"7148\":{},\"7205\":{}},\"comment\":{}}],[\"text_justification\",{\"_index\":1085,\"name\":{\"4319\":{}},\"comment\":{}}],[\"text_line\",{\"_index\":822,\"name\":{\"2989\":{}},\"comment\":{}}],[\"text_margin_right\",{\"_index\":953,\"name\":{\"3729\":{}},\"comment\":{}}],[\"text_position_vertical\",{\"_index\":1084,\"name\":{\"4318\":{}},\"comment\":{}}],[\"text_shift_x\",{\"_index\":1139,\"name\":{\"4934\":{},\"5782\":{},\"5943\":{}},\"comment\":{}}],[\"textbracket\",{\"_index\":514,\"name\":{\"1466\":{},\"1544\":{},\"5995\":{},\"7040\":{}},\"comment\":{}}],[\"textbracketparams\",{\"_index\":1229,\"name\":{\"5986\":{}},\"comment\":{}}],[\"textbracketposition\",{\"_index\":554,\"name\":{\"1573\":{},\"5992\":{}},\"comment\":{}}],[\"textdynamics\",{\"_index\":503,\"name\":{\"1451\":{},\"1545\":{},\"6053\":{},\"7041\":{}},\"comment\":{}}],[\"textformatter\",{\"_index\":542,\"name\":{\"1546\":{},\"6212\":{}},\"comment\":{}}],[\"textformatterinfo\",{\"_index\":1237,\"name\":{\"6196\":{}},\"comment\":{}}],[\"textheight\",{\"_index\":271,\"name\":{\"578\":{}},\"comment\":{}}],[\"textjustification\",{\"_index\":555,\"name\":{\"1574\":{},\"4304\":{},\"6231\":{}},\"comment\":{}}],[\"textmeasure\",{\"_index\":973,\"name\":{\"3791\":{}},\"comment\":{}}],[\"textnote\",{\"_index\":496,\"name\":{\"1438\":{},\"1547\":{},\"6250\":{},\"7042\":{}},\"comment\":{}}],[\"textnotestruct\",{\"_index\":1258,\"name\":{\"6235\":{}},\"comment\":{}}],[\"textverticalposition\",{\"_index\":1077,\"name\":{\"4300\":{}},\"comment\":{}}],[\"thickness\",{\"_index\":390,\"name\":{\"1132\":{},\"4195\":{}},\"comment\":{}}],[\"throwonerror\",{\"_index\":461,\"name\":{\"1336\":{}},\"comment\":{}}],[\"tickable\",{\"_index\":1268,\"name\":{\"6408\":{},\"7043\":{}},\"comment\":{}}],[\"tickcontext\",{\"_index\":506,\"name\":{\"1454\":{},\"1548\":{},\"6501\":{}},\"comment\":{}}],[\"tickcontextmetrics\",{\"_index\":1269,\"name\":{\"6488\":{}},\"comment\":{}}],[\"tickcontextoptions\",{\"_index\":1272,\"name\":{\"6499\":{}},\"comment\":{}}],[\"tickid\",{\"_index\":1273,\"name\":{\"6500\":{}},\"comment\":{}}],[\"ticks\",{\"_index\":892,\"name\":{\"3143\":{}},\"comment\":{}}],[\"tie_spacing\",{\"_index\":1136,\"name\":{\"4931\":{},\"5779\":{},\"5940\":{}},\"comment\":{}}],[\"tienotes\",{\"_index\":1133,\"name\":{\"4918\":{}},\"comment\":{}}],[\"time\",{\"_index\":463,\"name\":{\"1339\":{}},\"comment\":{}}],[\"time4_4\",{\"_index\":571,\"name\":{\"1590\":{}},\"comment\":{}}],[\"timesignature\",{\"_index\":543,\"name\":{\"1549\":{},\"6550\":{},\"6618\":{},\"7044\":{}},\"comment\":{}}],[\"timesignatureglyph\",{\"_index\":1292,\"name\":{\"6534\":{}},\"comment\":{}}],[\"timesignatureinfo\",{\"_index\":1296,\"name\":{\"6614\":{}},\"comment\":{}}],[\"timesignote\",{\"_index\":497,\"name\":{\"1441\":{},\"1550\":{},\"6687\":{},\"7045\":{}},\"comment\":{}}],[\"to_coda\",{\"_index\":1122,\"name\":{\"4681\":{}},\"comment\":{}}],[\"tocssstring\",{\"_index\":614,\"name\":{\"1661\":{}},\"comment\":{}}],[\"token\",{\"_index\":921,\"name\":{\"3679\":{}},\"comment\":{}}],[\"tomixedstring\",{\"_index\":680,\"name\":{\"1748\":{}},\"comment\":{}}],[\"top\",{\"_index\":84,\"name\":{\"86\":{},\"645\":{},\"4302\":{},\"5993\":{},\"6913\":{}},\"comment\":{}}],[\"top_stave\",{\"_index\":1060,\"name\":{\"4193\":{}},\"comment\":{}}],[\"top_text_line\",{\"_index\":823,\"name\":{\"2990\":{}},\"comment\":{}}],[\"top_text_position\",{\"_index\":996,\"name\":{\"4010\":{}},\"comment\":{}}],[\"topglyphs\",{\"_index\":735,\"name\":{\"2039\":{},\"6561\":{}},\"comment\":{}}],[\"topline\",{\"_index\":1299,\"name\":{\"6626\":{}},\"comment\":{}}],[\"topmodifieroffset\",{\"_index\":1325,\"name\":{\"6910\":{}},\"comment\":{}}],[\"topstartx\",{\"_index\":1293,\"name\":{\"6551\":{}},\"comment\":{}}],[\"topy\",{\"_index\":699,\"name\":{\"1847\":{},\"2342\":{},\"2552\":{},\"4548\":{},\"5072\":{},\"5137\":{},\"5617\":{}},\"comment\":{}}],[\"tosimplifiedstring\",{\"_index\":679,\"name\":{\"1747\":{}},\"comment\":{}}],[\"tostring\",{\"_index\":631,\"name\":{\"1679\":{},\"1746\":{}},\"comment\":{}}],[\"totalleftpx\",{\"_index\":1270,\"name\":{\"6489\":{}},\"comment\":{}}],[\"totalrightpx\",{\"_index\":1271,\"name\":{\"6490\":{}},\"comment\":{}}],[\"tremolo\",{\"_index\":544,\"name\":{\"1551\":{},\"1629\":{},\"6827\":{},\"7046\":{}},\"comment\":{}}],[\"triggerfunction\",{\"_index\":919,\"name\":{\"3676\":{}},\"comment\":{}}],[\"tune\",{\"_index\":659,\"name\":{\"1715\":{}},\"comment\":{}}],[\"tuning\",{\"_index\":545,\"name\":{\"1552\":{},\"6890\":{}},\"comment\":{}}],[\"tuplet\",{\"_index\":471,\"name\":{\"1355\":{},\"1460\":{},\"1553\":{},\"1634\":{},\"6914\":{},\"7047\":{}},\"comment\":{}}],[\"tupletlocation\",{\"_index\":1326,\"name\":{\"6911\":{}},\"comment\":{}}],[\"tupletmetrics\",{\"_index\":1322,\"name\":{\"6906\":{}},\"comment\":{}}],[\"tupletoptions\",{\"_index\":1314,\"name\":{\"6898\":{}},\"comment\":{}}],[\"type\",{\"_index\":17,\"name\":{\"18\":{},\"175\":{},\"458\":{},\"1268\":{},\"1302\":{},\"1361\":{},\"2253\":{},\"3081\":{},\"3137\":{},\"3140\":{},\"3149\":{},\"3313\":{},\"3715\":{},\"4127\":{},\"4190\":{},\"4245\":{},\"4461\":{},\"4667\":{},\"4985\":{},\"5351\":{},\"5589\":{},\"6247\":{}},\"comment\":{}}],[\"types\",{\"_index\":371,\"name\":{\"780\":{},\"1282\":{}},\"comment\":{}}],[\"typestring\",{\"_index\":947,\"name\":{\"3720\":{},\"4128\":{},\"4191\":{}},\"comment\":{}}],[\"underline_superscript\",{\"_index\":1234,\"name\":{\"6009\":{}},\"comment\":{}}],[\"unicode\",{\"_index\":575,\"name\":{\"1596\":{}},\"comment\":{}}],[\"unsetpartialbeamsideat\",{\"_index\":221,\"name\":{\"411\":{}},\"comment\":{}}],[\"up\",{\"_index\":233,\"name\":{\"464\":{},\"3843\":{},\"5056\":{}},\"comment\":{}}],[\"updatecachekey\",{\"_index\":1250,\"name\":{\"6220\":{}},\"comment\":{}}],[\"updateindex\",{\"_index\":965,\"name\":{\"3783\":{}},\"comment\":{}}],[\"updatekerningadjustments\",{\"_index\":347,\"name\":{\"692\":{}},\"comment\":{}}],[\"updateoverbaradjustments\",{\"_index\":346,\"name\":{\"691\":{}},\"comment\":{}}],[\"updateparams\",{\"_index\":1249,\"name\":{\"6219\":{}},\"comment\":{}}],[\"updatewidth\",{\"_index\":798,\"name\":{\"2539\":{},\"5604\":{}},\"comment\":{}}],[\"upperkerningtext\",{\"_index\":321,\"name\":{\"635\":{},\"678\":{}},\"comment\":{}}],[\"use_symbols\",{\"_index\":833,\"name\":{\"3011\":{}},\"comment\":{}}],[\"used\",{\"_index\":1265,\"name\":{\"6405\":{}},\"comment\":{}}],[\"val\",{\"_index\":420,\"name\":{\"1273\":{}},\"comment\":{}}],[\"validate\",{\"_index\":612,\"name\":{\"1659\":{}},\"comment\":{}}],[\"valign\",{\"_index\":309,\"name\":{\"621\":{}},\"comment\":{}}],[\"value\",{\"_index\":667,\"name\":{\"1730\":{},\"3774\":{}},\"comment\":{}}],[\"version\",{\"_index\":520,\"name\":{\"1475\":{}},\"comment\":{}}],[\"vertical_bar_width\",{\"_index\":992,\"name\":{\"4005\":{}},\"comment\":{}}],[\"verticaljustify\",{\"_index\":89,\"name\":{\"96\":{},\"660\":{}},\"comment\":{}}],[\"verticaljustifystring\",{\"_index\":90,\"name\":{\"97\":{},\"661\":{}},\"comment\":{}}],[\"verticalpadding\",{\"_index\":1167,\"name\":{\"5275\":{}},\"comment\":{}}],[\"vex\",{\"_index\":1365,\"name\":{\"7063\":{}},\"comment\":{}}],[\"vibrato\",{\"_index\":546,\"name\":{\"1554\":{},\"7048\":{},\"7079\":{}},\"comment\":{}}],[\"vibrato_width\",{\"_index\":1374,\"name\":{\"7076\":{},\"7152\":{}},\"comment\":{}}],[\"vibratobracket\",{\"_index\":513,\"name\":{\"1465\":{},\"1555\":{},\"7049\":{},\"7145\":{}},\"comment\":{}}],[\"vibratorenderoptions\",{\"_index\":1371,\"name\":{\"7073\":{}},\"comment\":{}}],[\"visible\",{\"_index\":986,\"name\":{\"3999\":{}},\"comment\":{}}],[\"voice\",{\"_index\":472,\"name\":{\"1357\":{},\"1457\":{},\"1556\":{},\"7050\":{},\"7202\":{}},\"comment\":{}}],[\"voice_shift\",{\"_index\":1108,\"name\":{\"4445\":{}},\"comment\":{}}],[\"voicemode\",{\"_index\":556,\"name\":{\"1575\":{},\"7198\":{}},\"comment\":{}}],[\"voices\",{\"_index\":1200,\"name\":{\"5502\":{}},\"comment\":{}}],[\"voicetime\",{\"_index\":1380,\"name\":{\"7194\":{}},\"comment\":{}}],[\"volta\",{\"_index\":547,\"name\":{\"1557\":{},\"4983\":{},\"7051\":{}},\"comment\":{}}],[\"voltatype\",{\"_index\":553,\"name\":{\"1572\":{},\"4977\":{}},\"comment\":{}}],[\"w\",{\"_index\":243,\"name\":{\"538\":{},\"545\":{}},\"comment\":{}}],[\"warn\",{\"_index\":1359,\"name\":{\"7055\":{}},\"comment\":{}}],[\"wave_girth\",{\"_index\":1373,\"name\":{\"7075\":{},\"7154\":{}},\"comment\":{}}],[\"wave_height\",{\"_index\":1372,\"name\":{\"7074\":{},\"7153\":{}},\"comment\":{}}],[\"wave_width\",{\"_index\":1376,\"name\":{\"7078\":{},\"7156\":{}},\"comment\":{}}],[\"web_font_files\",{\"_index\":619,\"name\":{\"1666\":{}},\"comment\":{}}],[\"web_font_host\",{\"_index\":618,\"name\":{\"1665\":{}},\"comment\":{}}],[\"weight\",{\"_index\":584,\"name\":{\"1609\":{},\"5429\":{}},\"comment\":{}}],[\"width\",{\"_index\":6,\"name\":{\"7\":{},\"460\":{},\"562\":{},\"570\":{},\"622\":{},\"773\":{},\"1416\":{},\"1995\":{},\"2005\":{},\"2992\":{},\"3126\":{},\"3794\":{},\"5058\":{},\"5442\":{},\"5517\":{},\"6491\":{},\"6553\":{}},\"comment\":{}}],[\"x\",{\"_index\":159,\"name\":{\"301\":{},\"457\":{},\"536\":{},\"543\":{},\"902\":{},\"1052\":{},\"1905\":{},\"2162\":{},\"2300\":{},\"2544\":{},\"2842\":{},\"3212\":{},\"3307\":{},\"3389\":{},\"3792\":{},\"3921\":{},\"4503\":{},\"5197\":{},\"5447\":{},\"5516\":{},\"5609\":{},\"6118\":{},\"6318\":{},\"6750\":{}},\"comment\":{}}],[\"x_begin\",{\"_index\":1155,\"name\":{\"5052\":{}},\"comment\":{}}],[\"x_end\",{\"_index\":1154,\"name\":{\"5051\":{}},\"comment\":{}}],[\"x_max\",{\"_index\":598,\"name\":{\"1638\":{},\"2008\":{}},\"comment\":{}}],[\"x_min\",{\"_index\":597,\"name\":{\"1637\":{},\"2007\":{}},\"comment\":{}}],[\"x_shift\",{\"_index\":366,\"name\":{\"768\":{},\"1133\":{},\"2009\":{},\"3303\":{}},\"comment\":{}}],[\"xmax\",{\"_index\":1090,\"name\":{\"4361\":{}},\"comment\":{}}],[\"xmin\",{\"_index\":1089,\"name\":{\"4360\":{},\"6555\":{}},\"comment\":{}}],[\"xoffset\",{\"_index\":904,\"name\":{\"3528\":{}},\"comment\":{}}],[\"xshift\",{\"_index\":307,\"name\":{\"619\":{}},\"comment\":{}}],[\"y\",{\"_index\":160,\"name\":{\"302\":{},\"537\":{},\"544\":{},\"903\":{},\"983\":{},\"1053\":{},\"1906\":{},\"2163\":{},\"2301\":{},\"2545\":{},\"2843\":{},\"3213\":{},\"3308\":{},\"3390\":{},\"3793\":{},\"3922\":{},\"4504\":{},\"5198\":{},\"5448\":{},\"5518\":{},\"5610\":{},\"6119\":{},\"6319\":{},\"6751\":{}},\"comment\":{}}],[\"y_bottom\",{\"_index\":1095,\"name\":{\"4428\":{},\"5049\":{}},\"comment\":{}}],[\"y_max\",{\"_index\":600,\"name\":{\"1640\":{}},\"comment\":{}}],[\"y_min\",{\"_index\":599,\"name\":{\"1639\":{}},\"comment\":{}}],[\"y_offset\",{\"_index\":1321,\"name\":{\"6905\":{}},\"comment\":{}}],[\"y_shift\",{\"_index\":116,\"name\":{\"256\":{},\"857\":{},\"1007\":{},\"1134\":{},\"1863\":{},\"2010\":{},\"2118\":{},\"2354\":{},\"2588\":{},\"2797\":{},\"3167\":{},\"3345\":{},\"3877\":{},\"4242\":{},\"4560\":{},\"4935\":{},\"5153\":{},\"5653\":{},\"5783\":{},\"5944\":{},\"6073\":{},\"6273\":{},\"6705\":{}},\"comment\":{}}],[\"y_spacing_scale\",{\"_index\":1306,\"name\":{\"6833\":{}},\"comment\":{}}],[\"y_top\",{\"_index\":1094,\"name\":{\"4427\":{},\"5050\":{}},\"comment\":{}}],[\"yextent\",{\"_index\":1242,\"name\":{\"6208\":{}},\"comment\":{}}],[\"ymax\",{\"_index\":1244,\"name\":{\"6210\":{}},\"comment\":{}}],[\"ymin\",{\"_index\":1243,\"name\":{\"6209\":{}},\"comment\":{}}],[\"yoffset\",{\"_index\":314,\"name\":{\"627\":{},\"3529\":{}},\"comment\":{}}],[\"yshift\",{\"_index\":308,\"name\":{\"620\":{}},\"comment\":{}}],[\"zeroormore\",{\"_index\":924,\"name\":{\"3682\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file +window.searchData = JSON.parse("{\"rows\":[{\"kind\":128,\"name\":\"Accidental\",\"url\":\"classes/Accidental.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Accidental.html#DEBUG\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Accidental.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Accidental.html#format\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"checkCollision\",\"url\":\"classes/Accidental.html#checkCollision\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"applyAccidentals\",\"url\":\"classes/Accidental.html#applyAccidentals\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Accidental.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Accidental.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Accidental.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Accidental.html#constructor\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/Accidental.html#type\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Accidental.html#render_options\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Accidental.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Accidental.render_options\"},{\"kind\":1024,\"name\":\"parenLeftPadding\",\"url\":\"classes/Accidental.html#render_options.__type.parenLeftPadding\",\"classes\":\"\",\"parent\":\"Accidental.render_options.__type\"},{\"kind\":1024,\"name\":\"font_scale\",\"url\":\"classes/Accidental.html#render_options.__type.font_scale\",\"classes\":\"\",\"parent\":\"Accidental.render_options.__type\"},{\"kind\":1024,\"name\":\"parenRightPadding\",\"url\":\"classes/Accidental.html#render_options.__type.parenRightPadding\",\"classes\":\"\",\"parent\":\"Accidental.render_options.__type\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Accidental.html#getWidth\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Accidental.html#setNote\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setAsCautionary\",\"url\":\"classes/Accidental.html#setAsCautionary\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Accidental.html#draw\",\"classes\":\"\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Accidental.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Accidental.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Accidental.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Accidental.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Accidental.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Accidental.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Accidental.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Accidental.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Accidental.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Accidental.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Accidental.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Accidental.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Accidental.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Accidental.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Accidental.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Accidental.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Accidental.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Accidental.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Accidental.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Accidental.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Accidental.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Accidental.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Accidental.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Accidental.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Accidental.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Accidental.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Accidental.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Accidental.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Accidental.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Accidental.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Accidental.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Accidental.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Accidental.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Accidental.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Accidental.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Accidental.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Accidental.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Accidental.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Accidental.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Accidental.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Accidental.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Accidental.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Accidental.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Accidental.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Accidental.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Accidental.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Accidental.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Accidental.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Accidental.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Accidental.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Accidental.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Accidental.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Accidental\"},{\"kind\":8,\"name\":\"AnnotationHorizontalJustify\",\"url\":\"enums/AnnotationHorizontalJustify.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"LEFT\",\"url\":\"enums/AnnotationHorizontalJustify.html#LEFT\",\"classes\":\"\",\"parent\":\"AnnotationHorizontalJustify\"},{\"kind\":16,\"name\":\"CENTER\",\"url\":\"enums/AnnotationHorizontalJustify.html#CENTER\",\"classes\":\"\",\"parent\":\"AnnotationHorizontalJustify\"},{\"kind\":16,\"name\":\"RIGHT\",\"url\":\"enums/AnnotationHorizontalJustify.html#RIGHT\",\"classes\":\"\",\"parent\":\"AnnotationHorizontalJustify\"},{\"kind\":16,\"name\":\"CENTER_STEM\",\"url\":\"enums/AnnotationHorizontalJustify.html#CENTER_STEM\",\"classes\":\"\",\"parent\":\"AnnotationHorizontalJustify\"},{\"kind\":8,\"name\":\"AnnotationVerticalJustify\",\"url\":\"enums/AnnotationVerticalJustify.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"TOP\",\"url\":\"enums/AnnotationVerticalJustify.html#TOP\",\"classes\":\"\",\"parent\":\"AnnotationVerticalJustify\"},{\"kind\":16,\"name\":\"CENTER\",\"url\":\"enums/AnnotationVerticalJustify.html#CENTER\",\"classes\":\"\",\"parent\":\"AnnotationVerticalJustify\"},{\"kind\":16,\"name\":\"BOTTOM\",\"url\":\"enums/AnnotationVerticalJustify.html#BOTTOM\",\"classes\":\"\",\"parent\":\"AnnotationVerticalJustify\"},{\"kind\":16,\"name\":\"CENTER_STEM\",\"url\":\"enums/AnnotationVerticalJustify.html#CENTER_STEM\",\"classes\":\"\",\"parent\":\"AnnotationVerticalJustify\"},{\"kind\":128,\"name\":\"Annotation\",\"url\":\"classes/Annotation.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Annotation.html#DEBUG\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Annotation.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Annotation.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":1024,\"name\":\"HorizontalJustify\",\"url\":\"classes/Annotation.html#HorizontalJustify\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":1024,\"name\":\"HorizontalJustifyString\",\"url\":\"classes/Annotation.html#HorizontalJustifyString\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":1024,\"name\":\"VerticalJustify\",\"url\":\"classes/Annotation.html#VerticalJustify\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":1024,\"name\":\"VerticalJustifyString\",\"url\":\"classes/Annotation.html#VerticalJustifyString\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"minAnnotationPadding\",\"url\":\"classes/Annotation.html#minAnnotationPadding\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Annotation.html#format\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Annotation.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Annotation.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Annotation.html#constructor\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setVerticalJustification\",\"url\":\"classes/Annotation.html#setVerticalJustification\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getJustification\",\"url\":\"classes/Annotation.html#getJustification\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setJustification\",\"url\":\"classes/Annotation.html#setJustification\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Annotation.html#draw\",\"classes\":\"\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Annotation.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Annotation.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Annotation.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Annotation.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Annotation.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Annotation.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Annotation.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Annotation.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Annotation.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Annotation.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Annotation.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Annotation.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Annotation.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Annotation.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Annotation.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Annotation.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Annotation.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Annotation.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Annotation.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Annotation.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Annotation.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Annotation.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Annotation.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Annotation.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Annotation.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Annotation.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Annotation.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Annotation.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Annotation.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Annotation.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Annotation.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Annotation.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Annotation.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Annotation.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Annotation.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Annotation.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Annotation.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Annotation.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Annotation.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Annotation.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Annotation.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Annotation.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Annotation.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Annotation.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Annotation.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Annotation.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Annotation.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Annotation.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Annotation.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Annotation.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Annotation.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Annotation.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Annotation.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Annotation.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Annotation\"},{\"kind\":256,\"name\":\"ArticulationStruct\",\"url\":\"interfaces/ArticulationStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"interfaces/ArticulationStruct.html#code\",\"classes\":\"\",\"parent\":\"ArticulationStruct\"},{\"kind\":1024,\"name\":\"aboveCode\",\"url\":\"interfaces/ArticulationStruct.html#aboveCode\",\"classes\":\"\",\"parent\":\"ArticulationStruct\"},{\"kind\":1024,\"name\":\"belowCode\",\"url\":\"interfaces/ArticulationStruct.html#belowCode\",\"classes\":\"\",\"parent\":\"ArticulationStruct\"},{\"kind\":1024,\"name\":\"between_lines\",\"url\":\"interfaces/ArticulationStruct.html#between_lines\",\"classes\":\"\",\"parent\":\"ArticulationStruct\"},{\"kind\":128,\"name\":\"Articulation\",\"url\":\"classes/Articulation.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Articulation.html#DEBUG\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Articulation.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Articulation.html#format\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"easyScoreHook\",\"url\":\"classes/Articulation.html#easyScoreHook\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Articulation.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Articulation.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Articulation.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Articulation.html#constructor\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/Articulation.html#type\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Articulation.html#render_options\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Articulation.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Articulation.render_options\"},{\"kind\":1024,\"name\":\"font_scale\",\"url\":\"classes/Articulation.html#render_options.__type.font_scale\",\"classes\":\"\",\"parent\":\"Articulation.render_options.__type\"},{\"kind\":2048,\"name\":\"setBetweenLines\",\"url\":\"classes/Articulation.html#setBetweenLines\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Articulation.html#draw\",\"classes\":\"\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Articulation.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Articulation.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Articulation.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Articulation.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Articulation.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Articulation.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Articulation.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Articulation.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Articulation.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Articulation.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Articulation.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Articulation.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Articulation.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Articulation.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Articulation.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Articulation.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Articulation.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Articulation.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Articulation.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Articulation.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Articulation.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Articulation.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Articulation.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Articulation.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Articulation.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Articulation.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Articulation.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Articulation.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Articulation.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Articulation.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Articulation.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Articulation.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Articulation.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Articulation.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Articulation.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Articulation.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Articulation.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Articulation.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Articulation.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Articulation.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Articulation.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Articulation.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Articulation.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Articulation.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Articulation.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Articulation.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Articulation.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Articulation.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Articulation.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Articulation.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Articulation.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Articulation.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Articulation.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Articulation.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Articulation\"},{\"kind\":128,\"name\":\"BarNote\",\"url\":\"classes/BarNote.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/BarNote.html#DEBUG\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/BarNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/BarNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/BarNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/BarNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/BarNote.html#constructor\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getType\",\"url\":\"classes/BarNote.html#getType\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setType\",\"url\":\"classes/BarNote.html#setType\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/BarNote.html#addToModifierContext\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/BarNote.html#preFormat\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/BarNote.html#draw-1\",\"classes\":\"\",\"parent\":\"BarNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/BarNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/BarNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/BarNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/BarNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/BarNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"BarNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/BarNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/BarNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/BarNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/BarNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/BarNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/BarNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/BarNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/BarNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/BarNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/BarNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/BarNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/BarNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/BarNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"BarNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/BarNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/BarNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/BarNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/BarNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/BarNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/BarNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/BarNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/BarNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/BarNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/BarNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/BarNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/BarNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/BarNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/BarNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/BarNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/BarNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/BarNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/BarNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/BarNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/BarNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/BarNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/BarNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/BarNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/BarNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/BarNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/BarNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/BarNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/BarNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/BarNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/BarNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/BarNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/BarNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/BarNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/BarNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/BarNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/BarNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"BarNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/BarNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"BarNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/BarNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"BarNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/BarNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/BarNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/BarNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/BarNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/BarNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/BarNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/BarNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/BarNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/BarNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/BarNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/BarNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/BarNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/BarNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/BarNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/BarNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/BarNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/BarNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/BarNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/BarNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/BarNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/BarNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/BarNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/BarNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/BarNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/BarNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/BarNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/BarNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/BarNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/BarNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/BarNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/BarNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/BarNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/BarNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/BarNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/BarNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/BarNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/BarNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/BarNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/BarNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/BarNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/BarNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/BarNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/BarNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/BarNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/BarNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/BarNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/BarNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/BarNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/BarNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/BarNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/BarNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/BarNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/BarNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/BarNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/BarNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/BarNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/BarNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/BarNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/BarNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/BarNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/BarNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/BarNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/BarNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/BarNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/BarNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/BarNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/BarNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/BarNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/BarNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/BarNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/BarNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/BarNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/BarNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/BarNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/BarNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BarNote\"},{\"kind\":32,\"name\":\"BEAM_LEFT\",\"url\":\"variables/BEAM_LEFT.html\",\"classes\":\"\"},{\"kind\":32,\"name\":\"BEAM_RIGHT\",\"url\":\"variables/BEAM_RIGHT.html\",\"classes\":\"\"},{\"kind\":32,\"name\":\"BEAM_BOTH\",\"url\":\"variables/BEAM_BOTH.html\",\"classes\":\"\"},{\"kind\":4194304,\"name\":\"PartialBeamDirection\",\"url\":\"types/PartialBeamDirection.html\",\"classes\":\"\"},{\"kind\":128,\"name\":\"Beam\",\"url\":\"classes/Beam.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Beam.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getDefaultBeamGroups\",\"url\":\"classes/Beam.html#getDefaultBeamGroups\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"applyAndGetBeams\",\"url\":\"classes/Beam.html#applyAndGetBeams\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"generateBeams\",\"url\":\"classes/Beam.html#generateBeams\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Beam.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Beam.html#constructor\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Beam.html#render_options\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Beam.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Beam.render_options\"},{\"kind\":1024,\"name\":\"flat_beam_offset\",\"url\":\"classes/Beam.html#render_options.__type.flat_beam_offset\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"flat_beams\",\"url\":\"classes/Beam.html#render_options.__type.flat_beams\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"secondary_break_ticks\",\"url\":\"classes/Beam.html#render_options.__type.secondary_break_ticks\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"show_stemlets\",\"url\":\"classes/Beam.html#render_options.__type.show_stemlets\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"beam_width\",\"url\":\"classes/Beam.html#render_options.__type.beam_width\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"max_slope\",\"url\":\"classes/Beam.html#render_options.__type.max_slope\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"min_slope\",\"url\":\"classes/Beam.html#render_options.__type.min_slope\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"slope_iterations\",\"url\":\"classes/Beam.html#render_options.__type.slope_iterations\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"slope_cost\",\"url\":\"classes/Beam.html#render_options.__type.slope_cost\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"stemlet_extension\",\"url\":\"classes/Beam.html#render_options.__type.stemlet_extension\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"partial_beam_length\",\"url\":\"classes/Beam.html#render_options.__type.partial_beam_length\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"min_flat_beam_offset\",\"url\":\"classes/Beam.html#render_options.__type.min_flat_beam_offset\",\"classes\":\"\",\"parent\":\"Beam.render_options.__type\"},{\"kind\":1024,\"name\":\"notes\",\"url\":\"classes/Beam.html#notes\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":1024,\"name\":\"postFormatted\",\"url\":\"classes/Beam.html#postFormatted\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":1024,\"name\":\"slope\",\"url\":\"classes/Beam.html#slope\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/Beam.html#getStemDirection\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getNotes\",\"url\":\"classes/Beam.html#getNotes\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/Beam.html#getBeamCount\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"breakSecondaryAt\",\"url\":\"classes/Beam.html#breakSecondaryAt\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setPartialBeamSideAt\",\"url\":\"classes/Beam.html#setPartialBeamSideAt\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"unsetPartialBeamSideAt\",\"url\":\"classes/Beam.html#unsetPartialBeamSideAt\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getSlopeY\",\"url\":\"classes/Beam.html#getSlopeY\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"calculateSlope\",\"url\":\"classes/Beam.html#calculateSlope\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"calculateFlatSlope\",\"url\":\"classes/Beam.html#calculateFlatSlope\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getBeamYToDraw\",\"url\":\"classes/Beam.html#getBeamYToDraw\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"applyStemExtensions\",\"url\":\"classes/Beam.html#applyStemExtensions\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"lookupBeamDirection\",\"url\":\"classes/Beam.html#lookupBeamDirection\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getBeamLines\",\"url\":\"classes/Beam.html#getBeamLines\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/Beam.html#preFormat\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/Beam.html#postFormat\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Beam.html#draw\",\"classes\":\"\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Beam.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Beam.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Beam.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Beam.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Beam.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Beam.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Beam.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Beam.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Beam.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Beam.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Beam.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Beam.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Beam.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Beam.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Beam.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Beam.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Beam.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Beam.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Beam.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Beam.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Beam.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Beam.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Beam.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Beam.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Beam.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Beam.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Beam.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Beam.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Beam.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Beam.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Beam.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Beam.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Beam.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Beam.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Beam\"},{\"kind\":256,\"name\":\"BendPhrase\",\"url\":\"interfaces/BendPhrase.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"interfaces/BendPhrase.html#x\",\"classes\":\"\",\"parent\":\"BendPhrase\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/BendPhrase.html#type\",\"classes\":\"\",\"parent\":\"BendPhrase\"},{\"kind\":1024,\"name\":\"text\",\"url\":\"interfaces/BendPhrase.html#text\",\"classes\":\"\",\"parent\":\"BendPhrase\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/BendPhrase.html#width\",\"classes\":\"\",\"parent\":\"BendPhrase\"},{\"kind\":1024,\"name\":\"draw_width\",\"url\":\"interfaces/BendPhrase.html#draw_width\",\"classes\":\"\",\"parent\":\"BendPhrase\"},{\"kind\":128,\"name\":\"Bend\",\"url\":\"classes/Bend.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Bend.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"UP\",\"url\":\"classes/Bend.html#UP\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"DOWN\",\"url\":\"classes/Bend.html#DOWN\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Bend.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Bend.html#format\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Bend.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Bend.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Bend.html#constructor\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Bend.html#render_options\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Bend.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Bend.render_options\"},{\"kind\":1024,\"name\":\"line_width\",\"url\":\"classes/Bend.html#render_options.__type.line_width\",\"classes\":\"\",\"parent\":\"Bend.render_options.__type\"},{\"kind\":1024,\"name\":\"release_width\",\"url\":\"classes/Bend.html#render_options.__type.release_width\",\"classes\":\"\",\"parent\":\"Bend.render_options.__type\"},{\"kind\":1024,\"name\":\"bend_width\",\"url\":\"classes/Bend.html#render_options.__type.bend_width\",\"classes\":\"\",\"parent\":\"Bend.render_options.__type\"},{\"kind\":1024,\"name\":\"line_style\",\"url\":\"classes/Bend.html#render_options.__type.line_style\",\"classes\":\"\",\"parent\":\"Bend.render_options.__type\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Bend.html#setXShift\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setTap\",\"url\":\"classes/Bend.html#setTap\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getText\",\"url\":\"classes/Bend.html#getText\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getTextHeight\",\"url\":\"classes/Bend.html#getTextHeight\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Bend.html#draw\",\"classes\":\"\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Bend.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Bend.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Bend.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Bend.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Bend.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Bend.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Bend.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Bend.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Bend.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Bend.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Bend.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Bend.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Bend.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Bend.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Bend.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Bend.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Bend.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Bend.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Bend.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Bend.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Bend.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Bend.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Bend.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Bend.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Bend.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Bend.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Bend.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Bend.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Bend.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Bend.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Bend.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Bend.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Bend.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Bend.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Bend.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Bend.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Bend.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Bend.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Bend.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Bend.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Bend.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Bend.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Bend.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Bend.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Bend.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Bend.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Bend.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Bend.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Bend.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Bend.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Bend.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Bend.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Bend.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Bend\"},{\"kind\":256,\"name\":\"Bounds\",\"url\":\"interfaces/Bounds.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"interfaces/Bounds.html#x\",\"classes\":\"\",\"parent\":\"Bounds\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"interfaces/Bounds.html#y\",\"classes\":\"\",\"parent\":\"Bounds\"},{\"kind\":1024,\"name\":\"w\",\"url\":\"interfaces/Bounds.html#w\",\"classes\":\"\",\"parent\":\"Bounds\"},{\"kind\":1024,\"name\":\"h\",\"url\":\"interfaces/Bounds.html#h\",\"classes\":\"\",\"parent\":\"Bounds\"},{\"kind\":128,\"name\":\"BoundingBox\",\"url\":\"classes/BoundingBox.html\",\"classes\":\"\"},{\"kind\":2048,\"name\":\"copy\",\"url\":\"classes/BoundingBox.html#copy\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/BoundingBox.html#constructor\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/BoundingBox.html#x\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/BoundingBox.html#y\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":1024,\"name\":\"w\",\"url\":\"classes/BoundingBox.html#w\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":1024,\"name\":\"h\",\"url\":\"classes/BoundingBox.html#h\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/BoundingBox.html#getX\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"getY\",\"url\":\"classes/BoundingBox.html#getY\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"getW\",\"url\":\"classes/BoundingBox.html#getW\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"getH\",\"url\":\"classes/BoundingBox.html#getH\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/BoundingBox.html#setX\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"setY\",\"url\":\"classes/BoundingBox.html#setY\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"setW\",\"url\":\"classes/BoundingBox.html#setW\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"setH\",\"url\":\"classes/BoundingBox.html#setH\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"move\",\"url\":\"classes/BoundingBox.html#move\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"clone\",\"url\":\"classes/BoundingBox.html#clone\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":2048,\"name\":\"mergeWith\",\"url\":\"classes/BoundingBox.html#mergeWith\",\"classes\":\"\",\"parent\":\"BoundingBox\"},{\"kind\":128,\"name\":\"BoundingBoxComputation\",\"url\":\"classes/BoundingBoxComputation.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/BoundingBoxComputation.html#constructor\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"getX1\",\"url\":\"classes/BoundingBoxComputation.html#getX1\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"getY1\",\"url\":\"classes/BoundingBoxComputation.html#getY1\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"width\",\"url\":\"classes/BoundingBoxComputation.html#width\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"height\",\"url\":\"classes/BoundingBoxComputation.html#height\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"addPoint\",\"url\":\"classes/BoundingBoxComputation.html#addPoint\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"addX\",\"url\":\"classes/BoundingBoxComputation.html#addX\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"addY\",\"url\":\"classes/BoundingBoxComputation.html#addY\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"addQuadraticCurve\",\"url\":\"classes/BoundingBoxComputation.html#addQuadraticCurve\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":2048,\"name\":\"addBezierCurve\",\"url\":\"classes/BoundingBoxComputation.html#addBezierCurve\",\"classes\":\"\",\"parent\":\"BoundingBoxComputation\"},{\"kind\":128,\"name\":\"CanvasContext\",\"url\":\"classes/CanvasContext.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"WIDTH\",\"url\":\"classes/CanvasContext.html#WIDTH\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":262144,\"name\":\"HEIGHT\",\"url\":\"classes/CanvasContext.html#HEIGHT\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":262144,\"name\":\"CANVAS_BROWSER_SIZE_LIMIT\",\"url\":\"classes/CanvasContext.html#CANVAS_BROWSER_SIZE_LIMIT\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"sanitizeCanvasDims\",\"url\":\"classes/CanvasContext.html#sanitizeCanvasDims\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/CanvasContext.html#CATEGORY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CanvasContext\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/CanvasContext.html#constructor\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":1024,\"name\":\"context2D\",\"url\":\"classes/CanvasContext.html#context2D\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":1024,\"name\":\"canvas\",\"url\":\"classes/CanvasContext.html#canvas\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":1024,\"name\":\"textHeight\",\"url\":\"classes/CanvasContext.html#textHeight\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"clear\",\"url\":\"classes/CanvasContext.html#clear\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"openGroup\",\"url\":\"classes/CanvasContext.html#openGroup\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"closeGroup\",\"url\":\"classes/CanvasContext.html#closeGroup\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"add\",\"url\":\"classes/CanvasContext.html#add\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setFillStyle\",\"url\":\"classes/CanvasContext.html#setFillStyle\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setBackgroundFillStyle\",\"url\":\"classes/CanvasContext.html#setBackgroundFillStyle\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setStrokeStyle\",\"url\":\"classes/CanvasContext.html#setStrokeStyle\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setShadowColor\",\"url\":\"classes/CanvasContext.html#setShadowColor\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setShadowBlur\",\"url\":\"classes/CanvasContext.html#setShadowBlur\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setLineWidth\",\"url\":\"classes/CanvasContext.html#setLineWidth\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setLineCap\",\"url\":\"classes/CanvasContext.html#setLineCap\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setLineDash\",\"url\":\"classes/CanvasContext.html#setLineDash\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"scale\",\"url\":\"classes/CanvasContext.html#scale\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"resize\",\"url\":\"classes/CanvasContext.html#resize\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"rect\",\"url\":\"classes/CanvasContext.html#rect\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"fillRect\",\"url\":\"classes/CanvasContext.html#fillRect\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"clearRect\",\"url\":\"classes/CanvasContext.html#clearRect\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"beginPath\",\"url\":\"classes/CanvasContext.html#beginPath\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"moveTo\",\"url\":\"classes/CanvasContext.html#moveTo\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"lineTo\",\"url\":\"classes/CanvasContext.html#lineTo\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"bezierCurveTo\",\"url\":\"classes/CanvasContext.html#bezierCurveTo\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"quadraticCurveTo\",\"url\":\"classes/CanvasContext.html#quadraticCurveTo\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"arc\",\"url\":\"classes/CanvasContext.html#arc\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"fill\",\"url\":\"classes/CanvasContext.html#fill\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"stroke\",\"url\":\"classes/CanvasContext.html#stroke\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"closePath\",\"url\":\"classes/CanvasContext.html#closePath\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"measureText\",\"url\":\"classes/CanvasContext.html#measureText\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"fillText\",\"url\":\"classes/CanvasContext.html#fillText\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"save\",\"url\":\"classes/CanvasContext.html#save\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"restore\",\"url\":\"classes/CanvasContext.html#restore\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":262144,\"name\":\"fillStyle\",\"url\":\"classes/CanvasContext.html#fillStyle\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":262144,\"name\":\"strokeStyle\",\"url\":\"classes/CanvasContext.html#strokeStyle\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/CanvasContext.html#setFont\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/CanvasContext.html#getFont\",\"classes\":\"\",\"parent\":\"CanvasContext\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/CanvasContext.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CanvasContext\"},{\"kind\":2048,\"name\":\"setRawFont\",\"url\":\"classes/CanvasContext.html#setRawFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CanvasContext\"},{\"kind\":256,\"name\":\"ChordSymbolBlock\",\"url\":\"interfaces/ChordSymbolBlock.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"text\",\"url\":\"interfaces/ChordSymbolBlock.html#text\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"symbolType\",\"url\":\"interfaces/ChordSymbolBlock.html#symbolType\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"symbolModifier\",\"url\":\"interfaces/ChordSymbolBlock.html#symbolModifier\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"xShift\",\"url\":\"interfaces/ChordSymbolBlock.html#xShift\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"yShift\",\"url\":\"interfaces/ChordSymbolBlock.html#yShift\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"vAlign\",\"url\":\"interfaces/ChordSymbolBlock.html#vAlign\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/ChordSymbolBlock.html#width\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":1024,\"name\":\"glyph\",\"url\":\"interfaces/ChordSymbolBlock.html#glyph\",\"classes\":\"\",\"parent\":\"ChordSymbolBlock\"},{\"kind\":256,\"name\":\"ChordSymbolGlyphMetrics\",\"url\":\"interfaces/ChordSymbolGlyphMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"leftSideBearing\",\"url\":\"interfaces/ChordSymbolGlyphMetrics.html#leftSideBearing\",\"classes\":\"\",\"parent\":\"ChordSymbolGlyphMetrics\"},{\"kind\":1024,\"name\":\"advanceWidth\",\"url\":\"interfaces/ChordSymbolGlyphMetrics.html#advanceWidth\",\"classes\":\"\",\"parent\":\"ChordSymbolGlyphMetrics\"},{\"kind\":1024,\"name\":\"yOffset\",\"url\":\"interfaces/ChordSymbolGlyphMetrics.html#yOffset\",\"classes\":\"\",\"parent\":\"ChordSymbolGlyphMetrics\"},{\"kind\":256,\"name\":\"ChordSymbolMetrics\",\"url\":\"interfaces/ChordSymbolMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"global\",\"url\":\"interfaces/ChordSymbolMetrics.html#global\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global\"},{\"kind\":1024,\"name\":\"superscriptOffset\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.superscriptOffset\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"subscriptOffset\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.subscriptOffset\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"kerningOffset\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.kerningOffset\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"lowerKerningText\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.lowerKerningText\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"upperKerningText\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.upperKerningText\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"spacing\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.spacing\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"superSubRatio\",\"url\":\"interfaces/ChordSymbolMetrics.html#global.__type.superSubRatio\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics.global.__type\"},{\"kind\":1024,\"name\":\"glyphs\",\"url\":\"interfaces/ChordSymbolMetrics.html#glyphs\",\"classes\":\"\",\"parent\":\"ChordSymbolMetrics\"},{\"kind\":8,\"name\":\"ChordSymbolHorizontalJustify\",\"url\":\"enums/ChordSymbolHorizontalJustify.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"LEFT\",\"url\":\"enums/ChordSymbolHorizontalJustify.html#LEFT\",\"classes\":\"\",\"parent\":\"ChordSymbolHorizontalJustify\"},{\"kind\":16,\"name\":\"CENTER\",\"url\":\"enums/ChordSymbolHorizontalJustify.html#CENTER\",\"classes\":\"\",\"parent\":\"ChordSymbolHorizontalJustify\"},{\"kind\":16,\"name\":\"RIGHT\",\"url\":\"enums/ChordSymbolHorizontalJustify.html#RIGHT\",\"classes\":\"\",\"parent\":\"ChordSymbolHorizontalJustify\"},{\"kind\":16,\"name\":\"CENTER_STEM\",\"url\":\"enums/ChordSymbolHorizontalJustify.html#CENTER_STEM\",\"classes\":\"\",\"parent\":\"ChordSymbolHorizontalJustify\"},{\"kind\":8,\"name\":\"ChordSymbolVerticalJustify\",\"url\":\"enums/ChordSymbolVerticalJustify.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"TOP\",\"url\":\"enums/ChordSymbolVerticalJustify.html#TOP\",\"classes\":\"\",\"parent\":\"ChordSymbolVerticalJustify\"},{\"kind\":16,\"name\":\"BOTTOM\",\"url\":\"enums/ChordSymbolVerticalJustify.html#BOTTOM\",\"classes\":\"\",\"parent\":\"ChordSymbolVerticalJustify\"},{\"kind\":8,\"name\":\"SymbolTypes\",\"url\":\"enums/SymbolTypes.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"GLYPH\",\"url\":\"enums/SymbolTypes.html#GLYPH\",\"classes\":\"\",\"parent\":\"SymbolTypes\"},{\"kind\":16,\"name\":\"TEXT\",\"url\":\"enums/SymbolTypes.html#TEXT\",\"classes\":\"\",\"parent\":\"SymbolTypes\"},{\"kind\":16,\"name\":\"LINE\",\"url\":\"enums/SymbolTypes.html#LINE\",\"classes\":\"\",\"parent\":\"SymbolTypes\"},{\"kind\":8,\"name\":\"SymbolModifiers\",\"url\":\"enums/SymbolModifiers.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"NONE\",\"url\":\"enums/SymbolModifiers.html#NONE\",\"classes\":\"\",\"parent\":\"SymbolModifiers\"},{\"kind\":16,\"name\":\"SUBSCRIPT\",\"url\":\"enums/SymbolModifiers.html#SUBSCRIPT\",\"classes\":\"\",\"parent\":\"SymbolModifiers\"},{\"kind\":16,\"name\":\"SUPERSCRIPT\",\"url\":\"enums/SymbolModifiers.html#SUPERSCRIPT\",\"classes\":\"\",\"parent\":\"SymbolModifiers\"},{\"kind\":128,\"name\":\"ChordSymbol\",\"url\":\"classes/ChordSymbol.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/ChordSymbol.html#DEBUG\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/ChordSymbol.html#CATEGORY\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"HorizontalJustify\",\"url\":\"classes/ChordSymbol.html#HorizontalJustify\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"HorizontalJustifyString\",\"url\":\"classes/ChordSymbol.html#HorizontalJustifyString\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"VerticalJustify\",\"url\":\"classes/ChordSymbol.html#VerticalJustify\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"VerticalJustifyString\",\"url\":\"classes/ChordSymbol.html#VerticalJustifyString\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"superSubRatio\",\"url\":\"classes/ChordSymbol.html#superSubRatio\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"NO_TEXT_FORMAT\",\"url\":\"classes/ChordSymbol.html#NO_TEXT_FORMAT\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getMetricForGlyph\",\"url\":\"classes/ChordSymbol.html#getMetricForGlyph\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"engravingFontResolution\",\"url\":\"classes/ChordSymbol.html#engravingFontResolution\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"spacingBetweenBlocks\",\"url\":\"classes/ChordSymbol.html#spacingBetweenBlocks\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getWidthForGlyph\",\"url\":\"classes/ChordSymbol.html#getWidthForGlyph\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getYShiftForGlyph\",\"url\":\"classes/ChordSymbol.html#getYShiftForGlyph\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getXShiftForGlyph\",\"url\":\"classes/ChordSymbol.html#getXShiftForGlyph\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"superscriptOffset\",\"url\":\"classes/ChordSymbol.html#superscriptOffset-2\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"subscriptOffset\",\"url\":\"classes/ChordSymbol.html#subscriptOffset-2\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"kerningOffset\",\"url\":\"classes/ChordSymbol.html#kerningOffset\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"glyphs\",\"url\":\"classes/ChordSymbol.html#glyphs\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"symbolTypes\",\"url\":\"classes/ChordSymbol.html#symbolTypes\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":1024,\"name\":\"symbolModifiers\",\"url\":\"classes/ChordSymbol.html#symbolModifiers\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"metrics\",\"url\":\"classes/ChordSymbol.html#metrics\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"lowerKerningText\",\"url\":\"classes/ChordSymbol.html#lowerKerningText\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"upperKerningText\",\"url\":\"classes/ChordSymbol.html#upperKerningText\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"isSuperscript\",\"url\":\"classes/ChordSymbol.html#isSuperscript\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"isSubscript\",\"url\":\"classes/ChordSymbol.html#isSubscript\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"minPadding\",\"url\":\"classes/ChordSymbol.html#minPadding\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/ChordSymbol.html#format\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"TEXT_FONT\",\"url\":\"classes/ChordSymbol.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/ChordSymbol.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/ChordSymbol.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ChordSymbol.html#constructor\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"superscriptOffset\",\"url\":\"classes/ChordSymbol.html#superscriptOffset\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"subscriptOffset\",\"url\":\"classes/ChordSymbol.html#subscriptOffset\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setReportWidth\",\"url\":\"classes/ChordSymbol.html#setReportWidth\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getReportWidth\",\"url\":\"classes/ChordSymbol.html#getReportWidth\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"updateOverBarAdjustments\",\"url\":\"classes/ChordSymbol.html#updateOverBarAdjustments\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"updateKerningAdjustments\",\"url\":\"classes/ChordSymbol.html#updateKerningAdjustments\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getKerningAdjustment\",\"url\":\"classes/ChordSymbol.html#getKerningAdjustment\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getSymbolBlock\",\"url\":\"classes/ChordSymbol.html#getSymbolBlock\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addSymbolBlock\",\"url\":\"classes/ChordSymbol.html#addSymbolBlock\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addText\",\"url\":\"classes/ChordSymbol.html#addText\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addTextSuperscript\",\"url\":\"classes/ChordSymbol.html#addTextSuperscript\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addTextSubscript\",\"url\":\"classes/ChordSymbol.html#addTextSubscript\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addGlyphSuperscript\",\"url\":\"classes/ChordSymbol.html#addGlyphSuperscript\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addGlyph\",\"url\":\"classes/ChordSymbol.html#addGlyph\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addGlyphOrText\",\"url\":\"classes/ChordSymbol.html#addGlyphOrText\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addLine\",\"url\":\"classes/ChordSymbol.html#addLine\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/ChordSymbol.html#setFont\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setEnableKerning\",\"url\":\"classes/ChordSymbol.html#setEnableKerning\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setVertical\",\"url\":\"classes/ChordSymbol.html#setVertical\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getVertical\",\"url\":\"classes/ChordSymbol.html#getVertical\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setHorizontal\",\"url\":\"classes/ChordSymbol.html#setHorizontal\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getHorizontal\",\"url\":\"classes/ChordSymbol.html#getHorizontal\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/ChordSymbol.html#getWidth\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getYOffsetForText\",\"url\":\"classes/ChordSymbol.html#getYOffsetForText\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/ChordSymbol.html#draw\",\"classes\":\"\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/ChordSymbol.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/ChordSymbol.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/ChordSymbol.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/ChordSymbol.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/ChordSymbol.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/ChordSymbol.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/ChordSymbol.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/ChordSymbol.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/ChordSymbol.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/ChordSymbol.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/ChordSymbol.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/ChordSymbol.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/ChordSymbol.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/ChordSymbol.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/ChordSymbol.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/ChordSymbol.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/ChordSymbol.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/ChordSymbol.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/ChordSymbol.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/ChordSymbol.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/ChordSymbol.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/ChordSymbol.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/ChordSymbol.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/ChordSymbol.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/ChordSymbol.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/ChordSymbol.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/ChordSymbol.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/ChordSymbol.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/ChordSymbol.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/ChordSymbol.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/ChordSymbol.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/ChordSymbol.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/ChordSymbol.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/ChordSymbol.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/ChordSymbol.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/ChordSymbol.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/ChordSymbol.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/ChordSymbol.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/ChordSymbol.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/ChordSymbol.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/ChordSymbol.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/ChordSymbol.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/ChordSymbol.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/ChordSymbol.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/ChordSymbol.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/ChordSymbol.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/ChordSymbol.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/ChordSymbol.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/ChordSymbol.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/ChordSymbol.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/ChordSymbol.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/ChordSymbol.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChordSymbol\"},{\"kind\":256,\"name\":\"ClefType\",\"url\":\"interfaces/ClefType.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"interfaces/ClefType.html#code\",\"classes\":\"\",\"parent\":\"ClefType\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/ClefType.html#line\",\"classes\":\"\",\"parent\":\"ClefType\"},{\"kind\":256,\"name\":\"ClefAnnotatiomType\",\"url\":\"interfaces/ClefAnnotatiomType.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"x_shift\",\"url\":\"interfaces/ClefAnnotatiomType.html#x_shift\",\"classes\":\"\",\"parent\":\"ClefAnnotatiomType\"},{\"kind\":1024,\"name\":\"point\",\"url\":\"interfaces/ClefAnnotatiomType.html#point\",\"classes\":\"\",\"parent\":\"ClefAnnotatiomType\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"interfaces/ClefAnnotatiomType.html#code\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefAnnotatiomType\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/ClefAnnotatiomType.html#line\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefAnnotatiomType\"},{\"kind\":256,\"name\":\"ClefMetrics\",\"url\":\"interfaces/ClefMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/ClefMetrics.html#width\",\"classes\":\"\",\"parent\":\"ClefMetrics\"},{\"kind\":1024,\"name\":\"annotations\",\"url\":\"interfaces/ClefMetrics.html#annotations\",\"classes\":\"\",\"parent\":\"ClefMetrics\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ClefMetrics.html#annotations.__type\",\"classes\":\"\",\"parent\":\"ClefMetrics.annotations\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ClefMetrics.html#annotations.__type.__index.__type-1\",\"classes\":\"\",\"parent\":\"ClefMetrics.annotations.__type.__index\"},{\"kind\":128,\"name\":\"Clef\",\"url\":\"classes/Clef.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Clef.html#DEBUG\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Clef.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"types\",\"url\":\"classes/Clef.html#types\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"annotationSmufl\",\"url\":\"classes/Clef.html#annotationSmufl\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/Clef.html#getPoint\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Clef.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Clef.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Clef.html#constructor\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":1024,\"name\":\"annotation\",\"url\":\"classes/Clef.html#annotation\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":1024,\"name\":\"clef\",\"url\":\"classes/Clef.html#clef\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setType\",\"url\":\"classes/Clef.html#setType\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Clef.html#getWidth\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Clef.html#setStave\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Clef.html#draw\",\"classes\":\"\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Clef.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Clef.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Clef.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Clef.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Clef.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Clef.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/Clef.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/Clef.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/Clef.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/Clef.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/Clef.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/Clef.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Clef.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Clef.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Clef.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Clef.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Clef.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Clef.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Clef.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Clef.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Clef.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Clef.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Clef.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Clef.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Clef.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Clef.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Clef.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Clef.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Clef.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Clef.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Clef.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Clef.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Clef.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Clef.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Clef.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Clef.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Clef.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Clef.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Clef.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Clef.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Clef.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Clef.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Clef.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Clef.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Clef.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Clef.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clef\"},{\"kind\":128,\"name\":\"ClefNote\",\"url\":\"classes/ClefNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/ClefNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/ClefNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/ClefNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/ClefNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ClefNote.html#constructor\",\"classes\":\"\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setType\",\"url\":\"classes/ClefNote.html#setType\",\"classes\":\"\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getClef\",\"url\":\"classes/ClefNote.html#getClef\",\"classes\":\"\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/ClefNote.html#preFormat\",\"classes\":\"\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/ClefNote.html#draw-1\",\"classes\":\"\",\"parent\":\"ClefNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/ClefNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/ClefNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/ClefNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/ClefNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/ClefNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"ClefNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/ClefNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/ClefNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/ClefNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/ClefNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/ClefNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/ClefNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/ClefNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/ClefNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/ClefNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/ClefNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/ClefNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/ClefNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/ClefNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"ClefNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/ClefNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/ClefNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/ClefNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/ClefNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/ClefNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/ClefNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/ClefNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/ClefNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/ClefNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/ClefNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/ClefNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/ClefNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/ClefNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/ClefNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/ClefNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/ClefNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/ClefNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/ClefNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/ClefNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/ClefNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/ClefNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/ClefNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/ClefNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/ClefNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/ClefNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/ClefNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/ClefNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/ClefNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/ClefNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/ClefNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/ClefNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/ClefNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/ClefNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/ClefNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/ClefNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/ClefNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"ClefNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/ClefNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"ClefNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/ClefNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"ClefNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/ClefNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/ClefNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/ClefNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/ClefNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/ClefNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/ClefNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/ClefNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/ClefNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/ClefNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/ClefNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/ClefNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/ClefNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/ClefNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/ClefNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/ClefNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/ClefNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/ClefNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/ClefNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/ClefNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/ClefNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/ClefNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/ClefNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/ClefNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/ClefNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/ClefNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/ClefNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/ClefNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/ClefNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/ClefNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/ClefNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/ClefNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/ClefNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/ClefNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/ClefNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/ClefNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/ClefNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/ClefNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/ClefNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/ClefNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/ClefNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/ClefNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/ClefNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/ClefNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/ClefNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/ClefNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/ClefNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/ClefNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/ClefNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/ClefNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/ClefNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/ClefNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/ClefNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/ClefNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/ClefNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/ClefNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/ClefNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/ClefNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/ClefNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/ClefNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/ClefNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/ClefNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/ClefNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/ClefNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/ClefNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/ClefNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/ClefNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/ClefNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/ClefNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/ClefNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/ClefNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/ClefNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/ClefNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/ClefNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/ClefNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/ClefNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/ClefNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClefNote\"},{\"kind\":256,\"name\":\"CrescendoParams\",\"url\":\"interfaces/CrescendoParams.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"reverse\",\"url\":\"interfaces/CrescendoParams.html#reverse\",\"classes\":\"\",\"parent\":\"CrescendoParams\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/CrescendoParams.html#height\",\"classes\":\"\",\"parent\":\"CrescendoParams\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"interfaces/CrescendoParams.html#y\",\"classes\":\"\",\"parent\":\"CrescendoParams\"},{\"kind\":1024,\"name\":\"end_x\",\"url\":\"interfaces/CrescendoParams.html#end_x\",\"classes\":\"\",\"parent\":\"CrescendoParams\"},{\"kind\":1024,\"name\":\"begin_x\",\"url\":\"interfaces/CrescendoParams.html#begin_x\",\"classes\":\"\",\"parent\":\"CrescendoParams\"},{\"kind\":128,\"name\":\"Crescendo\",\"url\":\"classes/Crescendo.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Crescendo.html#DEBUG\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Crescendo.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/Crescendo.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/Crescendo.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Crescendo.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Crescendo.html#constructor\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/Crescendo.html#setLine\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setHeight\",\"url\":\"classes/Crescendo.html#setHeight\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setDecrescendo\",\"url\":\"classes/Crescendo.html#setDecrescendo\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/Crescendo.html#preFormat\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Crescendo.html#draw-1\",\"classes\":\"\",\"parent\":\"Crescendo\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/Crescendo.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/Crescendo.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/Crescendo.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Crescendo.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Crescendo.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Crescendo.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/Crescendo.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/Crescendo.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/Crescendo.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/Crescendo.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/Crescendo.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/Crescendo.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/Crescendo.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/Crescendo.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/Crescendo.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/Crescendo.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/Crescendo.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/Crescendo.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/Crescendo.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"Crescendo.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/Crescendo.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/Crescendo.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/Crescendo.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/Crescendo.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Crescendo.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Crescendo.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Crescendo.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/Crescendo.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/Crescendo.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/Crescendo.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/Crescendo.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/Crescendo.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/Crescendo.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/Crescendo.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/Crescendo.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/Crescendo.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/Crescendo.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/Crescendo.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/Crescendo.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/Crescendo.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/Crescendo.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/Crescendo.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/Crescendo.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/Crescendo.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/Crescendo.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/Crescendo.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/Crescendo.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/Crescendo.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/Crescendo.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/Crescendo.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/Crescendo.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/Crescendo.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/Crescendo.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/Crescendo.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/Crescendo.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Crescendo.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"Crescendo.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/Crescendo.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"Crescendo.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/Crescendo.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"Crescendo.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/Crescendo.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/Crescendo.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/Crescendo.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/Crescendo.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/Crescendo.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/Crescendo.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/Crescendo.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/Crescendo.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/Crescendo.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/Crescendo.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/Crescendo.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Crescendo.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/Crescendo.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/Crescendo.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Crescendo.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Crescendo.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Crescendo.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Crescendo.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Crescendo.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/Crescendo.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/Crescendo.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/Crescendo.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/Crescendo.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/Crescendo.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/Crescendo.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/Crescendo.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/Crescendo.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/Crescendo.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/Crescendo.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/Crescendo.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/Crescendo.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/Crescendo.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/Crescendo.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/Crescendo.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/Crescendo.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/Crescendo.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/Crescendo.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/Crescendo.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/Crescendo.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Crescendo.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Crescendo.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Crescendo.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Crescendo.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Crescendo.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Crescendo.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Crescendo.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Crescendo.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Crescendo.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Crescendo.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Crescendo.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Crescendo.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Crescendo.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Crescendo.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Crescendo.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Crescendo.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Crescendo.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Crescendo.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Crescendo.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Crescendo.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Crescendo.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Crescendo.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Crescendo.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Crescendo.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Crescendo.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Crescendo.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Crescendo.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Crescendo.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Crescendo.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Crescendo.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Crescendo.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Crescendo.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Crescendo.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Crescendo.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Crescendo.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Crescendo.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Crescendo.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Crescendo\"},{\"kind\":256,\"name\":\"CurveOptions\",\"url\":\"interfaces/CurveOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"cps\",\"url\":\"interfaces/CurveOptions.html#cps\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":1024,\"name\":\"thickness\",\"url\":\"interfaces/CurveOptions.html#thickness\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":1024,\"name\":\"x_shift\",\"url\":\"interfaces/CurveOptions.html#x_shift\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"interfaces/CurveOptions.html#y_shift\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":1024,\"name\":\"position\",\"url\":\"interfaces/CurveOptions.html#position\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":1024,\"name\":\"position_end\",\"url\":\"interfaces/CurveOptions.html#position_end\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":1024,\"name\":\"invert\",\"url\":\"interfaces/CurveOptions.html#invert\",\"classes\":\"\",\"parent\":\"CurveOptions\"},{\"kind\":8,\"name\":\"CurvePosition\",\"url\":\"enums/CurvePosition.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"NEAR_HEAD\",\"url\":\"enums/CurvePosition.html#NEAR_HEAD\",\"classes\":\"\",\"parent\":\"CurvePosition\"},{\"kind\":16,\"name\":\"NEAR_TOP\",\"url\":\"enums/CurvePosition.html#NEAR_TOP\",\"classes\":\"\",\"parent\":\"CurvePosition\"},{\"kind\":128,\"name\":\"Curve\",\"url\":\"classes/Curve.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Curve.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Curve.html#Position\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Curve.html#PositionString\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Curve.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Curve.html#constructor\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Curve.html#render_options\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setNotes\",\"url\":\"classes/Curve.html#setNotes\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"isPartial\",\"url\":\"classes/Curve.html#isPartial\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"renderCurve\",\"url\":\"classes/Curve.html#renderCurve\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Curve.html#draw\",\"classes\":\"\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Curve.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Curve.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Curve.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Curve.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Curve.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Curve.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Curve.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Curve.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Curve.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Curve.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Curve.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Curve.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Curve.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Curve.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Curve.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Curve.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Curve.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Curve.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Curve.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Curve.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Curve.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Curve.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Curve.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Curve.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Curve.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Curve.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Curve.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Curve.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Curve.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Curve.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Curve.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Curve.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Curve.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Curve.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Curve\"},{\"kind\":128,\"name\":\"Dot\",\"url\":\"classes/Dot.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Dot.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getDots\",\"url\":\"classes/Dot.html#getDots\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"buildAndAttach\",\"url\":\"classes/Dot.html#buildAndAttach\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Dot.html#format\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Dot.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Dot.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Dot.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Dot.html#constructor\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Dot.html#setNote\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setDotShiftY\",\"url\":\"classes/Dot.html#setDotShiftY\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Dot.html#draw\",\"classes\":\"\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Dot.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Dot.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Dot.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Dot.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Dot.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Dot.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Dot.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Dot.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Dot.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Dot.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Dot.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Dot.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Dot.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Dot.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Dot.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Dot.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Dot.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Dot.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Dot.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Dot.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Dot.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Dot.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Dot.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Dot.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Dot.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Dot.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Dot.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Dot.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Dot.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Dot.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Dot.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Dot.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Dot.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Dot.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Dot.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Dot.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Dot.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Dot.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Dot.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Dot.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Dot.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Dot.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Dot.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Dot.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Dot.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Dot.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Dot.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Dot.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Dot.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Dot.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Dot.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Dot.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Dot.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Dot\"},{\"kind\":4194304,\"name\":\"CommitHook\",\"url\":\"types/CommitHook.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/CommitHook.html#__type\",\"classes\":\"\",\"parent\":\"CommitHook\"},{\"kind\":128,\"name\":\"EasyScoreGrammar\",\"url\":\"classes/EasyScoreGrammar.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/EasyScoreGrammar.html#constructor\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":1024,\"name\":\"builder\",\"url\":\"classes/EasyScoreGrammar.html#builder\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"begin\",\"url\":\"classes/EasyScoreGrammar.html#begin\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"LINE\",\"url\":\"classes/EasyScoreGrammar.html#LINE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"PIECE\",\"url\":\"classes/EasyScoreGrammar.html#PIECE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"PIECES\",\"url\":\"classes/EasyScoreGrammar.html#PIECES\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"PARAMS\",\"url\":\"classes/EasyScoreGrammar.html#PARAMS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"CHORDORNOTE\",\"url\":\"classes/EasyScoreGrammar.html#CHORDORNOTE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"CHORD\",\"url\":\"classes/EasyScoreGrammar.html#CHORD\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"NOTES\",\"url\":\"classes/EasyScoreGrammar.html#NOTES\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"NOTE\",\"url\":\"classes/EasyScoreGrammar.html#NOTE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"SINGLENOTE\",\"url\":\"classes/EasyScoreGrammar.html#SINGLENOTE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"ACCIDENTAL\",\"url\":\"classes/EasyScoreGrammar.html#ACCIDENTAL\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"DOTS\",\"url\":\"classes/EasyScoreGrammar.html#DOTS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"TYPE\",\"url\":\"classes/EasyScoreGrammar.html#TYPE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"DURATION\",\"url\":\"classes/EasyScoreGrammar.html#DURATION\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"OPTS\",\"url\":\"classes/EasyScoreGrammar.html#OPTS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"KEYVALS\",\"url\":\"classes/EasyScoreGrammar.html#KEYVALS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"KEYVAL\",\"url\":\"classes/EasyScoreGrammar.html#KEYVAL\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"VAL\",\"url\":\"classes/EasyScoreGrammar.html#VAL\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"KEY\",\"url\":\"classes/EasyScoreGrammar.html#KEY\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"DVAL\",\"url\":\"classes/EasyScoreGrammar.html#DVAL\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"SVAL\",\"url\":\"classes/EasyScoreGrammar.html#SVAL\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"NOTENAME\",\"url\":\"classes/EasyScoreGrammar.html#NOTENAME\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"OCTAVE\",\"url\":\"classes/EasyScoreGrammar.html#OCTAVE\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"ACCIDENTALS\",\"url\":\"classes/EasyScoreGrammar.html#ACCIDENTALS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"MICROTONES\",\"url\":\"classes/EasyScoreGrammar.html#MICROTONES\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"DURATIONS\",\"url\":\"classes/EasyScoreGrammar.html#DURATIONS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"TYPES\",\"url\":\"classes/EasyScoreGrammar.html#TYPES\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"LPAREN\",\"url\":\"classes/EasyScoreGrammar.html#LPAREN\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"RPAREN\",\"url\":\"classes/EasyScoreGrammar.html#RPAREN\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"COMMA\",\"url\":\"classes/EasyScoreGrammar.html#COMMA\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"DOT\",\"url\":\"classes/EasyScoreGrammar.html#DOT\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"SLASH\",\"url\":\"classes/EasyScoreGrammar.html#SLASH\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"MAYBESLASH\",\"url\":\"classes/EasyScoreGrammar.html#MAYBESLASH\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"EQUALS\",\"url\":\"classes/EasyScoreGrammar.html#EQUALS\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"LBRACKET\",\"url\":\"classes/EasyScoreGrammar.html#LBRACKET\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"RBRACKET\",\"url\":\"classes/EasyScoreGrammar.html#RBRACKET\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":2048,\"name\":\"EOL\",\"url\":\"classes/EasyScoreGrammar.html#EOL\",\"classes\":\"\",\"parent\":\"EasyScoreGrammar\"},{\"kind\":256,\"name\":\"NotePiece\",\"url\":\"interfaces/NotePiece.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"key\",\"url\":\"interfaces/NotePiece.html#key\",\"classes\":\"\",\"parent\":\"NotePiece\"},{\"kind\":1024,\"name\":\"accid\",\"url\":\"interfaces/NotePiece.html#accid\",\"classes\":\"\",\"parent\":\"NotePiece\"},{\"kind\":1024,\"name\":\"octave\",\"url\":\"interfaces/NotePiece.html#octave\",\"classes\":\"\",\"parent\":\"NotePiece\"},{\"kind\":128,\"name\":\"Piece\",\"url\":\"classes/Piece.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Piece.html#constructor\",\"classes\":\"\",\"parent\":\"Piece\"},{\"kind\":1024,\"name\":\"chord\",\"url\":\"classes/Piece.html#chord\",\"classes\":\"\",\"parent\":\"Piece\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"classes/Piece.html#duration\",\"classes\":\"\",\"parent\":\"Piece\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"classes/Piece.html#dots\",\"classes\":\"\",\"parent\":\"Piece\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/Piece.html#type\",\"classes\":\"\",\"parent\":\"Piece\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"classes/Piece.html#options\",\"classes\":\"\",\"parent\":\"Piece\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Piece.html#options.__type\",\"classes\":\"\",\"parent\":\"Piece.options\"},{\"kind\":256,\"name\":\"BuilderElements\",\"url\":\"interfaces/BuilderElements.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"notes\",\"url\":\"interfaces/BuilderElements.html#notes\",\"classes\":\"\",\"parent\":\"BuilderElements\"},{\"kind\":1024,\"name\":\"accidentals\",\"url\":\"interfaces/BuilderElements.html#accidentals\",\"classes\":\"\",\"parent\":\"BuilderElements\"},{\"kind\":256,\"name\":\"BuilderOptions\",\"url\":\"interfaces/BuilderOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"interfaces/BuilderOptions.html#stem\",\"classes\":\"\",\"parent\":\"BuilderOptions\"},{\"kind\":1024,\"name\":\"clef\",\"url\":\"interfaces/BuilderOptions.html#clef\",\"classes\":\"\",\"parent\":\"BuilderOptions\"},{\"kind\":128,\"name\":\"Builder\",\"url\":\"classes/Builder.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Builder.html#constructor\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":1024,\"name\":\"factory\",\"url\":\"classes/Builder.html#factory\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":1024,\"name\":\"elements\",\"url\":\"classes/Builder.html#elements\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"classes/Builder.html#options\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":1024,\"name\":\"piece\",\"url\":\"classes/Builder.html#piece\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":1024,\"name\":\"commitHooks\",\"url\":\"classes/Builder.html#commitHooks\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":1024,\"name\":\"rollingDuration\",\"url\":\"classes/Builder.html#rollingDuration\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Builder.html#reset\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"getFactory\",\"url\":\"classes/Builder.html#getFactory\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"getElements\",\"url\":\"classes/Builder.html#getElements\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"addCommitHook\",\"url\":\"classes/Builder.html#addCommitHook\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"resetPiece\",\"url\":\"classes/Builder.html#resetPiece\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"setNoteDots\",\"url\":\"classes/Builder.html#setNoteDots\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"setNoteDuration\",\"url\":\"classes/Builder.html#setNoteDuration\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"setNoteType\",\"url\":\"classes/Builder.html#setNoteType\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"addNoteOption\",\"url\":\"classes/Builder.html#addNoteOption\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"addNote\",\"url\":\"classes/Builder.html#addNote\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"addSingleNote\",\"url\":\"classes/Builder.html#addSingleNote\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"addChord\",\"url\":\"classes/Builder.html#addChord\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":2048,\"name\":\"commitPiece\",\"url\":\"classes/Builder.html#commitPiece\",\"classes\":\"\",\"parent\":\"Builder\"},{\"kind\":256,\"name\":\"EasyScoreOptions\",\"url\":\"interfaces/EasyScoreOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"factory\",\"url\":\"interfaces/EasyScoreOptions.html#factory\",\"classes\":\"\",\"parent\":\"EasyScoreOptions\"},{\"kind\":1024,\"name\":\"builder\",\"url\":\"interfaces/EasyScoreOptions.html#builder\",\"classes\":\"\",\"parent\":\"EasyScoreOptions\"},{\"kind\":1024,\"name\":\"commitHooks\",\"url\":\"interfaces/EasyScoreOptions.html#commitHooks\",\"classes\":\"\",\"parent\":\"EasyScoreOptions\"},{\"kind\":1024,\"name\":\"throwOnError\",\"url\":\"interfaces/EasyScoreOptions.html#throwOnError\",\"classes\":\"\",\"parent\":\"EasyScoreOptions\"},{\"kind\":256,\"name\":\"EasyScoreDefaults\",\"url\":\"interfaces/EasyScoreDefaults.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"clef\",\"url\":\"interfaces/EasyScoreDefaults.html#clef\",\"classes\":\"\",\"parent\":\"EasyScoreDefaults\"},{\"kind\":1024,\"name\":\"time\",\"url\":\"interfaces/EasyScoreDefaults.html#time\",\"classes\":\"\",\"parent\":\"EasyScoreDefaults\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"interfaces/EasyScoreDefaults.html#stem\",\"classes\":\"\",\"parent\":\"EasyScoreDefaults\"},{\"kind\":128,\"name\":\"EasyScore\",\"url\":\"classes/EasyScore.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/EasyScore.html#DEBUG\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/EasyScore.html#constructor\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":1024,\"name\":\"defaults\",\"url\":\"classes/EasyScore.html#defaults\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"classes/EasyScore.html#options\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":1024,\"name\":\"factory\",\"url\":\"classes/EasyScore.html#factory\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":1024,\"name\":\"builder\",\"url\":\"classes/EasyScore.html#builder\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":1024,\"name\":\"grammar\",\"url\":\"classes/EasyScore.html#grammar\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":1024,\"name\":\"parser\",\"url\":\"classes/EasyScore.html#parser\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"set\",\"url\":\"classes/EasyScore.html#set\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"setOptions\",\"url\":\"classes/EasyScore.html#setOptions\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/EasyScore.html#setContext\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"parse\",\"url\":\"classes/EasyScore.html#parse\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"beam\",\"url\":\"classes/EasyScore.html#beam\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"tuplet\",\"url\":\"classes/EasyScore.html#tuplet\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"notes\",\"url\":\"classes/EasyScore.html#notes\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"voice\",\"url\":\"classes/EasyScore.html#voice\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":2048,\"name\":\"addCommitHook\",\"url\":\"classes/EasyScore.html#addCommitHook\",\"classes\":\"\",\"parent\":\"EasyScore\"},{\"kind\":256,\"name\":\"ElementAttributes\",\"url\":\"interfaces/ElementAttributes.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ElementAttributes.html#id\",\"classes\":\"\",\"parent\":\"ElementAttributes\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/ElementAttributes.html#type\",\"classes\":\"\",\"parent\":\"ElementAttributes\"},{\"kind\":1024,\"name\":\"class\",\"url\":\"interfaces/ElementAttributes.html#class\",\"classes\":\"\",\"parent\":\"ElementAttributes\"},{\"kind\":256,\"name\":\"ElementStyle\",\"url\":\"interfaces/ElementStyle.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"shadowColor\",\"url\":\"interfaces/ElementStyle.html#shadowColor\",\"classes\":\"\",\"parent\":\"ElementStyle\"},{\"kind\":1024,\"name\":\"shadowBlur\",\"url\":\"interfaces/ElementStyle.html#shadowBlur\",\"classes\":\"\",\"parent\":\"ElementStyle\"},{\"kind\":1024,\"name\":\"fillStyle\",\"url\":\"interfaces/ElementStyle.html#fillStyle\",\"classes\":\"\",\"parent\":\"ElementStyle\"},{\"kind\":1024,\"name\":\"strokeStyle\",\"url\":\"interfaces/ElementStyle.html#strokeStyle\",\"classes\":\"\",\"parent\":\"ElementStyle\"},{\"kind\":1024,\"name\":\"lineWidth\",\"url\":\"interfaces/ElementStyle.html#lineWidth\",\"classes\":\"\",\"parent\":\"ElementStyle\"},{\"kind\":128,\"name\":\"Element\",\"url\":\"classes/Element.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Element.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Element.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Element.html#constructor\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Element.html#addChildElement\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Element.html#getCategory\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Element.html#setStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Element.html#setGroupStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Element.html#getStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Element.html#applyStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Element.html#restoreStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Element.html#drawWithStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Element.html#draw\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Element.html#hasClass\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Element.html#addClass\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Element.html#removeClass\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Element.html#onRegister\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Element.html#isRendered\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Element.html#setRendered\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Element.html#getAttributes\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Element.html#getAttribute\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Element.html#getSVGElement\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Element.html#setAttribute\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Element.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Element.html#getContext\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Element.html#setContext\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Element.html#checkContext\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Element.html#font\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Element.html#setFont\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Element.html#getFont\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Element.html#resetFont\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Element.html#fontInfo\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Element.html#setFontSize\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Element.html#getFontSize\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Element.html#fontSize\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Element.html#fontSizeInPoints\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Element.html#fontSizeInPixels\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Element.html#fontStyle\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Element.html#fontWeight\",\"classes\":\"\",\"parent\":\"Element\"},{\"kind\":256,\"name\":\"FactoryOptions\",\"url\":\"interfaces/FactoryOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"stave\",\"url\":\"interfaces/FactoryOptions.html#stave\",\"classes\":\"\",\"parent\":\"FactoryOptions\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FactoryOptions.html#stave.__type-1\",\"classes\":\"\",\"parent\":\"FactoryOptions.stave\"},{\"kind\":1024,\"name\":\"space\",\"url\":\"interfaces/FactoryOptions.html#stave.__type-1.space\",\"classes\":\"\",\"parent\":\"FactoryOptions.stave.__type\"},{\"kind\":1024,\"name\":\"renderer\",\"url\":\"interfaces/FactoryOptions.html#renderer\",\"classes\":\"\",\"parent\":\"FactoryOptions\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FactoryOptions.html#renderer.__type\",\"classes\":\"\",\"parent\":\"FactoryOptions.renderer\"},{\"kind\":1024,\"name\":\"elementId\",\"url\":\"interfaces/FactoryOptions.html#renderer.__type.elementId\",\"classes\":\"\",\"parent\":\"FactoryOptions.renderer.__type\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"interfaces/FactoryOptions.html#renderer.__type.backend\",\"classes\":\"\",\"parent\":\"FactoryOptions.renderer.__type\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/FactoryOptions.html#renderer.__type.width\",\"classes\":\"\",\"parent\":\"FactoryOptions.renderer.__type\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/FactoryOptions.html#renderer.__type.height\",\"classes\":\"\",\"parent\":\"FactoryOptions.renderer.__type\"},{\"kind\":1024,\"name\":\"background\",\"url\":\"interfaces/FactoryOptions.html#renderer.__type.background\",\"classes\":\"\",\"parent\":\"FactoryOptions.renderer.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"interfaces/FactoryOptions.html#font\",\"classes\":\"\",\"parent\":\"FactoryOptions\"},{\"kind\":128,\"name\":\"Factory\",\"url\":\"classes/Factory.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Factory.html#DEBUG\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Factory.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"newFromElementId\",\"url\":\"classes/Factory.html#newFromElementId\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Factory.html#constructor\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Factory.html#reset\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"setOptions\",\"url\":\"classes/Factory.html#setOptions\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"initRenderer\",\"url\":\"classes/Factory.html#initRenderer\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Factory.html#getContext\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Factory.html#setContext\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Factory.html#getStave\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"getVoices\",\"url\":\"classes/Factory.html#getVoices\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Stave\",\"url\":\"classes/Factory.html#Stave\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TabStave\",\"url\":\"classes/Factory.html#TabStave\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"StaveNote\",\"url\":\"classes/Factory.html#StaveNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"GlyphNote\",\"url\":\"classes/Factory.html#GlyphNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"RepeatNote\",\"url\":\"classes/Factory.html#RepeatNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"GhostNote\",\"url\":\"classes/Factory.html#GhostNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TextNote\",\"url\":\"classes/Factory.html#TextNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"BarNote\",\"url\":\"classes/Factory.html#BarNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"ClefNote\",\"url\":\"classes/Factory.html#ClefNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TimeSigNote\",\"url\":\"classes/Factory.html#TimeSigNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"KeySigNote\",\"url\":\"classes/Factory.html#KeySigNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TabNote\",\"url\":\"classes/Factory.html#TabNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"GraceNote\",\"url\":\"classes/Factory.html#GraceNote\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"GraceNoteGroup\",\"url\":\"classes/Factory.html#GraceNoteGroup\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Accidental\",\"url\":\"classes/Factory.html#Accidental\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Annotation\",\"url\":\"classes/Factory.html#Annotation\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"ChordSymbol\",\"url\":\"classes/Factory.html#ChordSymbol\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Articulation\",\"url\":\"classes/Factory.html#Articulation\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Ornament\",\"url\":\"classes/Factory.html#Ornament\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TextDynamics\",\"url\":\"classes/Factory.html#TextDynamics\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Fingering\",\"url\":\"classes/Factory.html#Fingering\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"StringNumber\",\"url\":\"classes/Factory.html#StringNumber\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TickContext\",\"url\":\"classes/Factory.html#TickContext\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"ModifierContext\",\"url\":\"classes/Factory.html#ModifierContext\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"MultiMeasureRest\",\"url\":\"classes/Factory.html#MultiMeasureRest\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Voice\",\"url\":\"classes/Factory.html#Voice\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"StaveConnector\",\"url\":\"classes/Factory.html#StaveConnector\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Formatter\",\"url\":\"classes/Factory.html#Formatter\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Tuplet\",\"url\":\"classes/Factory.html#Tuplet\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Beam\",\"url\":\"classes/Factory.html#Beam\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"Curve\",\"url\":\"classes/Factory.html#Curve\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"StaveTie\",\"url\":\"classes/Factory.html#StaveTie\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"StaveLine\",\"url\":\"classes/Factory.html#StaveLine\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"VibratoBracket\",\"url\":\"classes/Factory.html#VibratoBracket\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"TextBracket\",\"url\":\"classes/Factory.html#TextBracket\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"System\",\"url\":\"classes/Factory.html#System\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"EasyScore\",\"url\":\"classes/Factory.html#EasyScore\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"PedalMarking\",\"url\":\"classes/Factory.html#PedalMarking\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"NoteSubGroup\",\"url\":\"classes/Factory.html#NoteSubGroup\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Factory.html#draw\",\"classes\":\"\",\"parent\":\"Factory\"},{\"kind\":128,\"name\":\"Flow\",\"url\":\"classes/Flow.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"BUILD\",\"url\":\"classes/Flow.html#BUILD\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Flow.html#BUILD.BUILD-1.__type\",\"classes\":\"\",\"parent\":\"Flow.BUILD.BUILD\"},{\"kind\":1024,\"name\":\"VERSION\",\"url\":\"classes/Flow.html#BUILD.BUILD-1.__type.VERSION\",\"classes\":\"\",\"parent\":\"Flow.BUILD.BUILD.__type\"},{\"kind\":1024,\"name\":\"ID\",\"url\":\"classes/Flow.html#BUILD.BUILD-1.__type.ID\",\"classes\":\"\",\"parent\":\"Flow.BUILD.BUILD.__type\"},{\"kind\":1024,\"name\":\"DATE\",\"url\":\"classes/Flow.html#BUILD.BUILD-1.__type.DATE\",\"classes\":\"\",\"parent\":\"Flow.BUILD.BUILD.__type\"},{\"kind\":1024,\"name\":\"Accidental\",\"url\":\"classes/Flow.html#Accidental\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Annotation\",\"url\":\"classes/Flow.html#Annotation\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Articulation\",\"url\":\"classes/Flow.html#Articulation\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Barline\",\"url\":\"classes/Flow.html#Barline\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"BarNote\",\"url\":\"classes/Flow.html#BarNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Beam\",\"url\":\"classes/Flow.html#Beam\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Bend\",\"url\":\"classes/Flow.html#Bend\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"BoundingBox\",\"url\":\"classes/Flow.html#BoundingBox\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"BoundingBoxComputation\",\"url\":\"classes/Flow.html#BoundingBoxComputation\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"CanvasContext\",\"url\":\"classes/Flow.html#CanvasContext\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"ChordSymbol\",\"url\":\"classes/Flow.html#ChordSymbol\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Clef\",\"url\":\"classes/Flow.html#Clef\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"ClefNote\",\"url\":\"classes/Flow.html#ClefNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Crescendo\",\"url\":\"classes/Flow.html#Crescendo\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Curve\",\"url\":\"classes/Flow.html#Curve\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Dot\",\"url\":\"classes/Flow.html#Dot\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"EasyScore\",\"url\":\"classes/Flow.html#EasyScore\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Element\",\"url\":\"classes/Flow.html#Element\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Factory\",\"url\":\"classes/Flow.html#Factory\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Font\",\"url\":\"classes/Flow.html#Font\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Formatter\",\"url\":\"classes/Flow.html#Formatter\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Fraction\",\"url\":\"classes/Flow.html#Fraction\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"FretHandFinger\",\"url\":\"classes/Flow.html#FretHandFinger\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"GhostNote\",\"url\":\"classes/Flow.html#GhostNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Glyph\",\"url\":\"classes/Flow.html#Glyph\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"GlyphNote\",\"url\":\"classes/Flow.html#GlyphNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"GraceNote\",\"url\":\"classes/Flow.html#GraceNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"GraceNoteGroup\",\"url\":\"classes/Flow.html#GraceNoteGroup\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"GraceTabNote\",\"url\":\"classes/Flow.html#GraceTabNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"KeyManager\",\"url\":\"classes/Flow.html#KeyManager\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"KeySignature\",\"url\":\"classes/Flow.html#KeySignature\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"KeySigNote\",\"url\":\"classes/Flow.html#KeySigNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Modifier\",\"url\":\"classes/Flow.html#Modifier\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"ModifierContext\",\"url\":\"classes/Flow.html#ModifierContext\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"MultiMeasureRest\",\"url\":\"classes/Flow.html#MultiMeasureRest\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Music\",\"url\":\"classes/Flow.html#Music\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Note\",\"url\":\"classes/Flow.html#Note\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"NoteHead\",\"url\":\"classes/Flow.html#NoteHead\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"NoteSubGroup\",\"url\":\"classes/Flow.html#NoteSubGroup\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Ornament\",\"url\":\"classes/Flow.html#Ornament\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Parenthesis\",\"url\":\"classes/Flow.html#Parenthesis\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Parser\",\"url\":\"classes/Flow.html#Parser\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"PedalMarking\",\"url\":\"classes/Flow.html#PedalMarking\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Registry\",\"url\":\"classes/Flow.html#Registry\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"RenderContext\",\"url\":\"classes/Flow.html#RenderContext\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Renderer\",\"url\":\"classes/Flow.html#Renderer\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"RepeatNote\",\"url\":\"classes/Flow.html#RepeatNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Repetition\",\"url\":\"classes/Flow.html#Repetition\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Stave\",\"url\":\"classes/Flow.html#Stave\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveConnector\",\"url\":\"classes/Flow.html#StaveConnector\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveHairpin\",\"url\":\"classes/Flow.html#StaveHairpin\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveLine\",\"url\":\"classes/Flow.html#StaveLine\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveModifier\",\"url\":\"classes/Flow.html#StaveModifier\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveNote\",\"url\":\"classes/Flow.html#StaveNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveTempo\",\"url\":\"classes/Flow.html#StaveTempo\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveText\",\"url\":\"classes/Flow.html#StaveText\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveTie\",\"url\":\"classes/Flow.html#StaveTie\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Stem\",\"url\":\"classes/Flow.html#Stem\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StringNumber\",\"url\":\"classes/Flow.html#StringNumber\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Stroke\",\"url\":\"classes/Flow.html#Stroke\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"SVGContext\",\"url\":\"classes/Flow.html#SVGContext\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"System\",\"url\":\"classes/Flow.html#System\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TabNote\",\"url\":\"classes/Flow.html#TabNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TabSlide\",\"url\":\"classes/Flow.html#TabSlide\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TabStave\",\"url\":\"classes/Flow.html#TabStave\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TabTie\",\"url\":\"classes/Flow.html#TabTie\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TextBracket\",\"url\":\"classes/Flow.html#TextBracket\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TextDynamics\",\"url\":\"classes/Flow.html#TextDynamics\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TextFormatter\",\"url\":\"classes/Flow.html#TextFormatter\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TextNote\",\"url\":\"classes/Flow.html#TextNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TickContext\",\"url\":\"classes/Flow.html#TickContext\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TimeSignature\",\"url\":\"classes/Flow.html#TimeSignature\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TimeSigNote\",\"url\":\"classes/Flow.html#TimeSigNote\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Tremolo\",\"url\":\"classes/Flow.html#Tremolo\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Tuning\",\"url\":\"classes/Flow.html#Tuning\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Tuplet\",\"url\":\"classes/Flow.html#Tuplet\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Vibrato\",\"url\":\"classes/Flow.html#Vibrato\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"VibratoBracket\",\"url\":\"classes/Flow.html#VibratoBracket\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Voice\",\"url\":\"classes/Flow.html#Voice\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"Volta\",\"url\":\"classes/Flow.html#Volta\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"AnnotationHorizontalJustify\",\"url\":\"classes/Flow.html#AnnotationHorizontalJustify\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"AnnotationVerticalJustify\",\"url\":\"classes/Flow.html#AnnotationVerticalJustify\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"ChordSymbolHorizontalJustify\",\"url\":\"classes/Flow.html#ChordSymbolHorizontalJustify\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"ChordSymbolVerticalJustify\",\"url\":\"classes/Flow.html#ChordSymbolVerticalJustify\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"SymbolTypes\",\"url\":\"classes/Flow.html#SymbolTypes\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"SymbolModifiers\",\"url\":\"classes/Flow.html#SymbolModifiers\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"CurvePosition\",\"url\":\"classes/Flow.html#CurvePosition\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"FontWeight\",\"url\":\"classes/Flow.html#FontWeight\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"FontStyle\",\"url\":\"classes/Flow.html#FontStyle\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"ModifierPosition\",\"url\":\"classes/Flow.html#ModifierPosition\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"RendererBackends\",\"url\":\"classes/Flow.html#RendererBackends\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"RendererLineEndType\",\"url\":\"classes/Flow.html#RendererLineEndType\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"BarlineType\",\"url\":\"classes/Flow.html#BarlineType\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"StaveModifierPosition\",\"url\":\"classes/Flow.html#StaveModifierPosition\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"VoltaType\",\"url\":\"classes/Flow.html#VoltaType\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TextBracketPosition\",\"url\":\"classes/Flow.html#TextBracketPosition\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"TextJustification\",\"url\":\"classes/Flow.html#TextJustification\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":1024,\"name\":\"VoiceMode\",\"url\":\"classes/Flow.html#VoiceMode\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"setMusicFont\",\"url\":\"classes/Flow.html#setMusicFont\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"fetchMusicFont\",\"url\":\"classes/Flow.html#fetchMusicFont\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"getMusicFont\",\"url\":\"classes/Flow.html#getMusicFont\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"getMusicFontStack\",\"url\":\"classes/Flow.html#getMusicFontStack\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"RENDER_PRECISION_PLACES\",\"url\":\"classes/Flow.html#RENDER_PRECISION_PLACES\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"SOFTMAX_FACTOR\",\"url\":\"classes/Flow.html#SOFTMAX_FACTOR\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"NOTATION_FONT_SCALE\",\"url\":\"classes/Flow.html#NOTATION_FONT_SCALE\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"TABLATURE_FONT_SCALE\",\"url\":\"classes/Flow.html#TABLATURE_FONT_SCALE\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"RESOLUTION\",\"url\":\"classes/Flow.html#RESOLUTION\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"SLASH_NOTEHEAD_WIDTH\",\"url\":\"classes/Flow.html#SLASH_NOTEHEAD_WIDTH\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"STAVE_LINE_DISTANCE\",\"url\":\"classes/Flow.html#STAVE_LINE_DISTANCE\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"STAVE_LINE_THICKNESS\",\"url\":\"classes/Flow.html#STAVE_LINE_THICKNESS\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"STEM_HEIGHT\",\"url\":\"classes/Flow.html#STEM_HEIGHT\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"STEM_WIDTH\",\"url\":\"classes/Flow.html#STEM_WIDTH\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"TIME4_4\",\"url\":\"classes/Flow.html#TIME4_4\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Flow.html#TIME4_4.TIME4_4-1.__type-1\",\"classes\":\"\",\"parent\":\"Flow.TIME4_4.TIME4_4\"},{\"kind\":1024,\"name\":\"num_beats\",\"url\":\"classes/Flow.html#TIME4_4.TIME4_4-1.__type-1.num_beats\",\"classes\":\"\",\"parent\":\"Flow.TIME4_4.TIME4_4.__type\"},{\"kind\":1024,\"name\":\"beat_value\",\"url\":\"classes/Flow.html#TIME4_4.TIME4_4-1.__type-1.beat_value\",\"classes\":\"\",\"parent\":\"Flow.TIME4_4.TIME4_4.__type\"},{\"kind\":1024,\"name\":\"resolution\",\"url\":\"classes/Flow.html#TIME4_4.TIME4_4-1.__type-1.resolution-3\",\"classes\":\"\",\"parent\":\"Flow.TIME4_4.TIME4_4.__type\"},{\"kind\":262144,\"name\":\"accidentalMap\",\"url\":\"classes/Flow.html#accidentalMap\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":262144,\"name\":\"unicode\",\"url\":\"classes/Flow.html#unicode\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"keySignature\",\"url\":\"classes/Flow.html#keySignature-1\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"hasKeySignature\",\"url\":\"classes/Flow.html#hasKeySignature\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"getKeySignatures\",\"url\":\"classes/Flow.html#getKeySignatures\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"clefProperties\",\"url\":\"classes/Flow.html#clefProperties\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Flow.html#clefProperties.clefProperties-1.__type-2\",\"classes\":\"\",\"parent\":\"Flow.clefProperties.clefProperties\"},{\"kind\":1024,\"name\":\"line_shift\",\"url\":\"classes/Flow.html#clefProperties.clefProperties-1.__type-2.line_shift\",\"classes\":\"\",\"parent\":\"Flow.clefProperties.clefProperties.__type\"},{\"kind\":2048,\"name\":\"keyProperties\",\"url\":\"classes/Flow.html#keyProperties\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":2048,\"name\":\"durationToTicks\",\"url\":\"classes/Flow.html#durationToTicks\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Flow.html#constructor\",\"classes\":\"\",\"parent\":\"Flow\"},{\"kind\":256,\"name\":\"FontInfo\",\"url\":\"interfaces/FontInfo.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"family\",\"url\":\"interfaces/FontInfo.html#family\",\"classes\":\"\",\"parent\":\"FontInfo\"},{\"kind\":1024,\"name\":\"size\",\"url\":\"interfaces/FontInfo.html#size\",\"classes\":\"\",\"parent\":\"FontInfo\"},{\"kind\":1024,\"name\":\"weight\",\"url\":\"interfaces/FontInfo.html#weight\",\"classes\":\"\",\"parent\":\"FontInfo\"},{\"kind\":1024,\"name\":\"style\",\"url\":\"interfaces/FontInfo.html#style\",\"classes\":\"\",\"parent\":\"FontInfo\"},{\"kind\":4194304,\"name\":\"FontModule\",\"url\":\"types/FontModule.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/FontModule.html#__type\",\"classes\":\"\",\"parent\":\"FontModule\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"types/FontModule.html#__type.data\",\"classes\":\"\",\"parent\":\"FontModule.__type\"},{\"kind\":1024,\"name\":\"metrics\",\"url\":\"types/FontModule.html#__type.metrics\",\"classes\":\"\",\"parent\":\"FontModule.__type\"},{\"kind\":256,\"name\":\"FontData\",\"url\":\"interfaces/FontData.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"glyphs\",\"url\":\"interfaces/FontData.html#glyphs\",\"classes\":\"\",\"parent\":\"FontData\"},{\"kind\":1024,\"name\":\"fontFamily\",\"url\":\"interfaces/FontData.html#fontFamily\",\"classes\":\"\",\"parent\":\"FontData\"},{\"kind\":1024,\"name\":\"resolution\",\"url\":\"interfaces/FontData.html#resolution\",\"classes\":\"\",\"parent\":\"FontData\"},{\"kind\":1024,\"name\":\"generatedOn\",\"url\":\"interfaces/FontData.html#generatedOn\",\"classes\":\"\",\"parent\":\"FontData\"},{\"kind\":256,\"name\":\"FontMetrics\",\"url\":\"interfaces/FontMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"smufl\",\"url\":\"interfaces/FontMetrics.html#smufl\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"stave\",\"url\":\"interfaces/FontMetrics.html#stave\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"interfaces/FontMetrics.html#accidental\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"clef_default\",\"url\":\"interfaces/FontMetrics.html#clef_default\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"clef_small\",\"url\":\"interfaces/FontMetrics.html#clef_small\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"pedalMarking\",\"url\":\"interfaces/FontMetrics.html#pedalMarking\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"digits\",\"url\":\"interfaces/FontMetrics.html#digits\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"articulation\",\"url\":\"interfaces/FontMetrics.html#articulation\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"tremolo\",\"url\":\"interfaces/FontMetrics.html#tremolo\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"chordSymbol\",\"url\":\"interfaces/FontMetrics.html#chordSymbol\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"ornament\",\"url\":\"interfaces/FontMetrics.html#ornament\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"noteHead\",\"url\":\"interfaces/FontMetrics.html#noteHead\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"stringNumber\",\"url\":\"interfaces/FontMetrics.html#stringNumber\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"tuplet\",\"url\":\"interfaces/FontMetrics.html#tuplet\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":1024,\"name\":\"glyphs\",\"url\":\"interfaces/FontMetrics.html#glyphs\",\"classes\":\"\",\"parent\":\"FontMetrics\"},{\"kind\":256,\"name\":\"FontGlyph\",\"url\":\"interfaces/FontGlyph.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"x_min\",\"url\":\"interfaces/FontGlyph.html#x_min\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"x_max\",\"url\":\"interfaces/FontGlyph.html#x_max\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"y_min\",\"url\":\"interfaces/FontGlyph.html#y_min\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"y_max\",\"url\":\"interfaces/FontGlyph.html#y_max\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"ha\",\"url\":\"interfaces/FontGlyph.html#ha\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"leftSideBearing\",\"url\":\"interfaces/FontGlyph.html#leftSideBearing\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"advanceWidth\",\"url\":\"interfaces/FontGlyph.html#advanceWidth\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"o\",\"url\":\"interfaces/FontGlyph.html#o\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":1024,\"name\":\"cached_outline\",\"url\":\"interfaces/FontGlyph.html#cached_outline\",\"classes\":\"\",\"parent\":\"FontGlyph\"},{\"kind\":8,\"name\":\"FontWeight\",\"url\":\"enums/FontWeight.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"NORMAL\",\"url\":\"enums/FontWeight.html#NORMAL\",\"classes\":\"\",\"parent\":\"FontWeight\"},{\"kind\":16,\"name\":\"BOLD\",\"url\":\"enums/FontWeight.html#BOLD\",\"classes\":\"\",\"parent\":\"FontWeight\"},{\"kind\":8,\"name\":\"FontStyle\",\"url\":\"enums/FontStyle.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"NORMAL\",\"url\":\"enums/FontStyle.html#NORMAL\",\"classes\":\"\",\"parent\":\"FontStyle\"},{\"kind\":16,\"name\":\"ITALIC\",\"url\":\"enums/FontStyle.html#ITALIC\",\"classes\":\"\",\"parent\":\"FontStyle\"},{\"kind\":128,\"name\":\"Font\",\"url\":\"classes/Font.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"SANS_SERIF\",\"url\":\"classes/Font.html#SANS_SERIF\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":1024,\"name\":\"SERIF\",\"url\":\"classes/Font.html#SERIF\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":1024,\"name\":\"SIZE\",\"url\":\"classes/Font.html#SIZE\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":1024,\"name\":\"scaleToPxFrom\",\"url\":\"classes/Font.html#scaleToPxFrom\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"convertSizeToPixelValue\",\"url\":\"classes/Font.html#convertSizeToPixelValue\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"convertSizeToPointValue\",\"url\":\"classes/Font.html#convertSizeToPointValue\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"validate\",\"url\":\"classes/Font.html#validate\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"fromCSSString\",\"url\":\"classes/Font.html#fromCSSString\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"toCSSString\",\"url\":\"classes/Font.html#toCSSString\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"scaleSize\",\"url\":\"classes/Font.html#scaleSize\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"isBold\",\"url\":\"classes/Font.html#isBold\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"isItalic\",\"url\":\"classes/Font.html#isItalic\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":1024,\"name\":\"WEB_FONT_HOST\",\"url\":\"classes/Font.html#WEB_FONT_HOST\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":1024,\"name\":\"WEB_FONT_FILES\",\"url\":\"classes/Font.html#WEB_FONT_FILES\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"loadWebFont\",\"url\":\"classes/Font.html#loadWebFont\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"loadWebFonts\",\"url\":\"classes/Font.html#loadWebFonts\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"load\",\"url\":\"classes/Font.html#load\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/Font.html#getName\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"getData\",\"url\":\"classes/Font.html#getData\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/Font.html#getMetrics\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"setData\",\"url\":\"classes/Font.html#setData\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"setMetrics\",\"url\":\"classes/Font.html#setMetrics\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"hasData\",\"url\":\"classes/Font.html#hasData\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"getResolution\",\"url\":\"classes/Font.html#getResolution\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"getGlyphs\",\"url\":\"classes/Font.html#getGlyphs\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"lookupMetric\",\"url\":\"classes/Font.html#lookupMetric\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/Font.html#toString\",\"classes\":\"\",\"parent\":\"Font\"},{\"kind\":256,\"name\":\"FormatterOptions\",\"url\":\"interfaces/FormatterOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"softmaxFactor\",\"url\":\"interfaces/FormatterOptions.html#softmaxFactor\",\"classes\":\"\",\"parent\":\"FormatterOptions\"},{\"kind\":1024,\"name\":\"globalSoftmax\",\"url\":\"interfaces/FormatterOptions.html#globalSoftmax\",\"classes\":\"\",\"parent\":\"FormatterOptions\"},{\"kind\":1024,\"name\":\"maxIterations\",\"url\":\"interfaces/FormatterOptions.html#maxIterations\",\"classes\":\"\",\"parent\":\"FormatterOptions\"},{\"kind\":256,\"name\":\"FormatParams\",\"url\":\"interfaces/FormatParams.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"align_rests\",\"url\":\"interfaces/FormatParams.html#align_rests\",\"classes\":\"\",\"parent\":\"FormatParams\"},{\"kind\":1024,\"name\":\"stave\",\"url\":\"interfaces/FormatParams.html#stave\",\"classes\":\"\",\"parent\":\"FormatParams\"},{\"kind\":1024,\"name\":\"context\",\"url\":\"interfaces/FormatParams.html#context\",\"classes\":\"\",\"parent\":\"FormatParams\"},{\"kind\":1024,\"name\":\"auto_beam\",\"url\":\"interfaces/FormatParams.html#auto_beam\",\"classes\":\"\",\"parent\":\"FormatParams\"},{\"kind\":256,\"name\":\"AlignmentContexts\",\"url\":\"interfaces/AlignmentContexts.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"list\",\"url\":\"interfaces/AlignmentContexts.html#list\",\"classes\":\"\",\"parent\":\"AlignmentContexts\"},{\"kind\":1024,\"name\":\"map\",\"url\":\"interfaces/AlignmentContexts.html#map\",\"classes\":\"\",\"parent\":\"AlignmentContexts\"},{\"kind\":1024,\"name\":\"array\",\"url\":\"interfaces/AlignmentContexts.html#array\",\"classes\":\"\",\"parent\":\"AlignmentContexts\"},{\"kind\":1024,\"name\":\"resolutionMultiplier\",\"url\":\"interfaces/AlignmentContexts.html#resolutionMultiplier\",\"classes\":\"\",\"parent\":\"AlignmentContexts\"},{\"kind\":256,\"name\":\"AlignmentModifierContexts\",\"url\":\"interfaces/AlignmentModifierContexts.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"map\",\"url\":\"interfaces/AlignmentModifierContexts.html#map\",\"classes\":\"\",\"parent\":\"AlignmentModifierContexts\"},{\"kind\":1024,\"name\":\"array\",\"url\":\"interfaces/AlignmentModifierContexts.html#array\",\"classes\":\"\",\"parent\":\"AlignmentModifierContexts\"},{\"kind\":1024,\"name\":\"resolutionMultiplier\",\"url\":\"interfaces/AlignmentModifierContexts.html#resolutionMultiplier\",\"classes\":\"\",\"parent\":\"AlignmentModifierContexts\"},{\"kind\":128,\"name\":\"Formatter\",\"url\":\"classes/Formatter.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Formatter.html#DEBUG\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"SimpleFormat\",\"url\":\"classes/Formatter.html#SimpleFormat\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"plotDebugging\",\"url\":\"classes/Formatter.html#plotDebugging\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"FormatAndDraw\",\"url\":\"classes/Formatter.html#FormatAndDraw\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"FormatAndDrawTab\",\"url\":\"classes/Formatter.html#FormatAndDrawTab\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"AlignRestsToNotes\",\"url\":\"classes/Formatter.html#AlignRestsToNotes\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"getResolutionMultiplier\",\"url\":\"classes/Formatter.html#getResolutionMultiplier\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Formatter.html#constructor\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"alignRests\",\"url\":\"classes/Formatter.html#alignRests\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"preCalculateMinTotalWidth\",\"url\":\"classes/Formatter.html#preCalculateMinTotalWidth\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"getMinTotalWidth\",\"url\":\"classes/Formatter.html#getMinTotalWidth\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"createModifierContexts\",\"url\":\"classes/Formatter.html#createModifierContexts\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"createTickContexts\",\"url\":\"classes/Formatter.html#createTickContexts\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"getTickContexts\",\"url\":\"classes/Formatter.html#getTickContexts\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/Formatter.html#preFormat\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"evaluate\",\"url\":\"classes/Formatter.html#evaluate\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"tune\",\"url\":\"classes/Formatter.html#tune\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/Formatter.html#postFormat\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"joinVoices\",\"url\":\"classes/Formatter.html#joinVoices\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Formatter.html#format\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"formatToStave\",\"url\":\"classes/Formatter.html#formatToStave\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/Formatter.html#getTickContext\",\"classes\":\"\",\"parent\":\"Formatter\"},{\"kind\":128,\"name\":\"Fraction\",\"url\":\"classes/Fraction.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Fraction.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"GCD\",\"url\":\"classes/Fraction.html#GCD\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"LCM\",\"url\":\"classes/Fraction.html#LCM\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"LCMM\",\"url\":\"classes/Fraction.html#LCMM\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Fraction.html#constructor\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":1024,\"name\":\"numerator\",\"url\":\"classes/Fraction.html#numerator\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":1024,\"name\":\"denominator\",\"url\":\"classes/Fraction.html#denominator\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"set\",\"url\":\"classes/Fraction.html#set\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"value\",\"url\":\"classes/Fraction.html#value\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"simplify\",\"url\":\"classes/Fraction.html#simplify\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"add\",\"url\":\"classes/Fraction.html#add\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"subtract\",\"url\":\"classes/Fraction.html#subtract\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"multiply\",\"url\":\"classes/Fraction.html#multiply\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"divide\",\"url\":\"classes/Fraction.html#divide\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"equals\",\"url\":\"classes/Fraction.html#equals\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"greaterThan\",\"url\":\"classes/Fraction.html#greaterThan\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"greaterThanEquals\",\"url\":\"classes/Fraction.html#greaterThanEquals\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"lessThan\",\"url\":\"classes/Fraction.html#lessThan\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"lessThanEquals\",\"url\":\"classes/Fraction.html#lessThanEquals\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"clone\",\"url\":\"classes/Fraction.html#clone\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"copy\",\"url\":\"classes/Fraction.html#copy\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"quotient\",\"url\":\"classes/Fraction.html#quotient\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"remainder\",\"url\":\"classes/Fraction.html#remainder\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"makeAbs\",\"url\":\"classes/Fraction.html#makeAbs\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/Fraction.html#toString\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"toSimplifiedString\",\"url\":\"classes/Fraction.html#toSimplifiedString\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"toMixedString\",\"url\":\"classes/Fraction.html#toMixedString\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":2048,\"name\":\"parse\",\"url\":\"classes/Fraction.html#parse\",\"classes\":\"\",\"parent\":\"Fraction\"},{\"kind\":128,\"name\":\"FretHandFinger\",\"url\":\"classes/FretHandFinger.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/FretHandFinger.html#CATEGORY\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/FretHandFinger.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/FretHandFinger.html#format\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"easyScoreHook\",\"url\":\"classes/FretHandFinger.html#easyScoreHook\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/FretHandFinger.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/FretHandFinger.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/FretHandFinger.html#constructor\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setFretHandFinger\",\"url\":\"classes/FretHandFinger.html#setFretHandFinger\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getFretHandFinger\",\"url\":\"classes/FretHandFinger.html#getFretHandFinger\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setOffsetX\",\"url\":\"classes/FretHandFinger.html#setOffsetX\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setOffsetY\",\"url\":\"classes/FretHandFinger.html#setOffsetY\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/FretHandFinger.html#draw\",\"classes\":\"\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/FretHandFinger.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/FretHandFinger.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/FretHandFinger.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/FretHandFinger.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/FretHandFinger.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/FretHandFinger.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/FretHandFinger.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/FretHandFinger.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/FretHandFinger.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/FretHandFinger.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/FretHandFinger.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/FretHandFinger.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/FretHandFinger.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/FretHandFinger.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/FretHandFinger.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/FretHandFinger.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/FretHandFinger.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/FretHandFinger.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/FretHandFinger.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/FretHandFinger.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/FretHandFinger.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/FretHandFinger.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/FretHandFinger.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/FretHandFinger.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/FretHandFinger.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/FretHandFinger.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/FretHandFinger.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/FretHandFinger.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/FretHandFinger.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/FretHandFinger.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/FretHandFinger.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/FretHandFinger.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/FretHandFinger.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/FretHandFinger.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/FretHandFinger.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/FretHandFinger.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/FretHandFinger.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/FretHandFinger.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/FretHandFinger.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/FretHandFinger.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/FretHandFinger.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/FretHandFinger.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/FretHandFinger.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/FretHandFinger.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/FretHandFinger.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/FretHandFinger.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/FretHandFinger.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/FretHandFinger.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/FretHandFinger.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/FretHandFinger.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/FretHandFinger.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/FretHandFinger.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/FretHandFinger.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/FretHandFinger.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FretHandFinger\"},{\"kind\":128,\"name\":\"GhostNote\",\"url\":\"classes/GhostNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/GhostNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/GhostNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/GhostNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/GhostNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GhostNote.html#constructor\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/GhostNote.html#isRest\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/GhostNote.html#setStave\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/GhostNote.html#addToModifierContext\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/GhostNote.html#preFormat\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/GhostNote.html#draw-1\",\"classes\":\"\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"classes/GhostNote.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"classes/GhostNote.html#stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStem\",\"url\":\"classes/GhostNote.html#getStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"checkStem\",\"url\":\"classes/GhostNote.html#checkStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setStem\",\"url\":\"classes/GhostNote.html#setStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"buildStem\",\"url\":\"classes/GhostNote.html#buildStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"buildFlag\",\"url\":\"classes/GhostNote.html#buildFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getBaseCustomNoteHeadGlyphProps\",\"url\":\"classes/GhostNote.html#getBaseCustomNoteHeadGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStemLength\",\"url\":\"classes/GhostNote.html#getStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/GhostNote.html#getBeamCount\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStemMinimumLength\",\"url\":\"classes/GhostNote.html#getStemMinimumLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/GhostNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setStemDirection\",\"url\":\"classes/GhostNote.html#setStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStemX\",\"url\":\"classes/GhostNote.html#getStemX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getCenterGlyphX\",\"url\":\"classes/GhostNote.html#getCenterGlyphX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStemExtension\",\"url\":\"classes/GhostNote.html#getStemExtension\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setStemLength\",\"url\":\"classes/GhostNote.html#setStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/GhostNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GhostNote.html#getStemExtents.getStemExtents-1.__type-2\",\"classes\":\"\",\"parent\":\"GhostNote.getStemExtents.getStemExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/GhostNote.html#getStemExtents.getStemExtents-1.__type-2.topY\",\"classes\":\"\",\"parent\":\"GhostNote.getStemExtents.getStemExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/GhostNote.html#getStemExtents.getStemExtents-1.__type-2.baseY\",\"classes\":\"\",\"parent\":\"GhostNote.getStemExtents.getStemExtents.__type\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/GhostNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/GhostNote.html#getYForBottomText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"hasFlag\",\"url\":\"classes/GhostNote.html#hasFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/GhostNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"drawStem\",\"url\":\"classes/GhostNote.html#drawStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/GhostNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/GhostNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/GhostNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/GhostNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GhostNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"GhostNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/GhostNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/GhostNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/GhostNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/GhostNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/GhostNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/GhostNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/GhostNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/GhostNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/GhostNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/GhostNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/GhostNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/GhostNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/GhostNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"GhostNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/GhostNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/GhostNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/GhostNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/GhostNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/GhostNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/GhostNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/GhostNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/GhostNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/GhostNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/GhostNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/GhostNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/GhostNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/GhostNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/GhostNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/GhostNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/GhostNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/GhostNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/GhostNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/GhostNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/GhostNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/GhostNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/GhostNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/GhostNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/GhostNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/GhostNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/GhostNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/GhostNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/GhostNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/GhostNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/GhostNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/GhostNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/GhostNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GhostNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"GhostNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/GhostNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"GhostNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/GhostNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"GhostNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/GhostNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/GhostNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/GhostNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/GhostNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/GhostNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/GhostNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/GhostNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/GhostNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/GhostNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/GhostNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/GhostNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/GhostNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/GhostNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/GhostNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/GhostNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/GhostNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/GhostNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/GhostNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/GhostNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/GhostNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/GhostNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/GhostNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/GhostNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/GhostNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/GhostNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/GhostNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/GhostNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/GhostNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/GhostNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/GhostNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/GhostNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/GhostNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/GhostNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/GhostNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/GhostNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/GhostNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/GhostNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/GhostNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/GhostNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/GhostNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/GhostNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/GhostNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/GhostNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/GhostNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/GhostNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/GhostNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/GhostNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/GhostNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/GhostNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/GhostNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/GhostNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/GhostNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/GhostNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/GhostNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/GhostNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/GhostNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/GhostNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/GhostNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/GhostNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/GhostNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/GhostNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/GhostNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/GhostNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/GhostNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/GhostNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/GhostNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/GhostNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/GhostNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/GhostNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/GhostNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/GhostNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/GhostNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GhostNote\"},{\"kind\":256,\"name\":\"GlyphProps\",\"url\":\"interfaces/GlyphProps.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"code_head\",\"url\":\"interfaces/GlyphProps.html#code_head\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"ledger_code_head\",\"url\":\"interfaces/GlyphProps.html#ledger_code_head\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"dot_shiftY\",\"url\":\"interfaces/GlyphProps.html#dot_shiftY\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"position\",\"url\":\"interfaces/GlyphProps.html#position\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"rest\",\"url\":\"interfaces/GlyphProps.html#rest\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"line_below\",\"url\":\"interfaces/GlyphProps.html#line_below\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"line_above\",\"url\":\"interfaces/GlyphProps.html#line_above\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"stem_beam_extension\",\"url\":\"interfaces/GlyphProps.html#stem_beam_extension\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"stem_up_extension\",\"url\":\"interfaces/GlyphProps.html#stem_up_extension\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"stem_down_extension\",\"url\":\"interfaces/GlyphProps.html#stem_down_extension\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"interfaces/GlyphProps.html#stem\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"interfaces/GlyphProps.html#code\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"code_flag_upstem\",\"url\":\"interfaces/GlyphProps.html#code_flag_upstem\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"code_flag_downstem\",\"url\":\"interfaces/GlyphProps.html#code_flag_downstem\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"flag\",\"url\":\"interfaces/GlyphProps.html#flag\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/GlyphProps.html#width\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"text\",\"url\":\"interfaces/GlyphProps.html#text\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"tabnote_stem_down_extension\",\"url\":\"interfaces/GlyphProps.html#tabnote_stem_down_extension\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"tabnote_stem_up_extension\",\"url\":\"interfaces/GlyphProps.html#tabnote_stem_up_extension\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"beam_count\",\"url\":\"interfaces/GlyphProps.html#beam_count\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":1024,\"name\":\"shift_y\",\"url\":\"interfaces/GlyphProps.html#shift_y\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"interfaces/GlyphProps.html#getWidth\",\"classes\":\"\",\"parent\":\"GlyphProps\"},{\"kind\":256,\"name\":\"GlyphOptions\",\"url\":\"interfaces/GlyphOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"category\",\"url\":\"interfaces/GlyphOptions.html#category\",\"classes\":\"\",\"parent\":\"GlyphOptions\"},{\"kind\":256,\"name\":\"GlyphMetrics\",\"url\":\"interfaces/GlyphMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/GlyphMetrics.html#width\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/GlyphMetrics.html#height\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"x_min\",\"url\":\"interfaces/GlyphMetrics.html#x_min\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"x_max\",\"url\":\"interfaces/GlyphMetrics.html#x_max\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"x_shift\",\"url\":\"interfaces/GlyphMetrics.html#x_shift\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"interfaces/GlyphMetrics.html#y_shift\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"interfaces/GlyphMetrics.html#scale\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"ha\",\"url\":\"interfaces/GlyphMetrics.html#ha\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"outline\",\"url\":\"interfaces/GlyphMetrics.html#outline\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"interfaces/GlyphMetrics.html#font\",\"classes\":\"\",\"parent\":\"GlyphMetrics\"},{\"kind\":8,\"name\":\"OutlineCode\",\"url\":\"enums/OutlineCode.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"MOVE\",\"url\":\"enums/OutlineCode.html#MOVE\",\"classes\":\"\",\"parent\":\"OutlineCode\"},{\"kind\":16,\"name\":\"LINE\",\"url\":\"enums/OutlineCode.html#LINE\",\"classes\":\"\",\"parent\":\"OutlineCode\"},{\"kind\":16,\"name\":\"QUADRATIC\",\"url\":\"enums/OutlineCode.html#QUADRATIC\",\"classes\":\"\",\"parent\":\"OutlineCode\"},{\"kind\":16,\"name\":\"BEZIER\",\"url\":\"enums/OutlineCode.html#BEZIER\",\"classes\":\"\",\"parent\":\"OutlineCode\"},{\"kind\":128,\"name\":\"Glyph\",\"url\":\"classes/Glyph.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Glyph.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"CURRENT_CACHE_KEY\",\"url\":\"classes/Glyph.html#CURRENT_CACHE_KEY\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"MUSIC_FONT_STACK\",\"url\":\"classes/Glyph.html#MUSIC_FONT_STACK\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"lookupFontMetric\",\"url\":\"classes/Glyph.html#lookupFontMetric\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"lookupGlyph\",\"url\":\"classes/Glyph.html#lookupGlyph\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Glyph.html#lookupGlyph.lookupGlyph-1.__type\",\"classes\":\"\",\"parent\":\"Glyph.lookupGlyph.lookupGlyph\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/Glyph.html#lookupGlyph.lookupGlyph-1.__type.font-3\",\"classes\":\"\",\"parent\":\"Glyph.lookupGlyph.lookupGlyph.__type\"},{\"kind\":1024,\"name\":\"glyph\",\"url\":\"classes/Glyph.html#lookupGlyph.lookupGlyph-1.__type.glyph\",\"classes\":\"\",\"parent\":\"Glyph.lookupGlyph.lookupGlyph.__type\"},{\"kind\":2048,\"name\":\"loadMetrics\",\"url\":\"classes/Glyph.html#loadMetrics\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"renderGlyph\",\"url\":\"classes/Glyph.html#renderGlyph\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"renderOutline\",\"url\":\"classes/Glyph.html#renderOutline\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getOutlineBoundingBox\",\"url\":\"classes/Glyph.html#getOutlineBoundingBox\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Glyph.html#getWidth\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Glyph.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Glyph.html#constructor\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"bbox\",\"url\":\"classes/Glyph.html#bbox\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/Glyph.html#code\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"metrics\",\"url\":\"classes/Glyph.html#metrics\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"topGlyphs\",\"url\":\"classes/Glyph.html#topGlyphs\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"botGlyphs\",\"url\":\"classes/Glyph.html#botGlyphs\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/Glyph.html#scale\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Glyph.html#draw\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getCode\",\"url\":\"classes/Glyph.html#getCode\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setOptions\",\"url\":\"classes/Glyph.html#setOptions\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setPoint\",\"url\":\"classes/Glyph.html#setPoint\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Glyph.html#setStave\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Glyph.html#getXShift\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Glyph.html#setXShift\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getYshift\",\"url\":\"classes/Glyph.html#getYshift\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Glyph.html#setYShift\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Glyph.html#reset\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"checkMetrics\",\"url\":\"classes/Glyph.html#checkMetrics\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/Glyph.html#getMetrics\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setOriginX\",\"url\":\"classes/Glyph.html#setOriginX\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setOriginY\",\"url\":\"classes/Glyph.html#setOriginY\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setOrigin\",\"url\":\"classes/Glyph.html#setOrigin\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/Glyph.html#render\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Glyph.html#checkStave\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"renderToStave\",\"url\":\"classes/Glyph.html#renderToStave\",\"classes\":\"\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Glyph.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Glyph.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Glyph.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Glyph.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Glyph.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Glyph.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Glyph.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Glyph.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Glyph.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Glyph.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Glyph.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Glyph.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Glyph.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Glyph.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Glyph.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Glyph.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Glyph.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Glyph.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Glyph.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Glyph.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Glyph.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Glyph.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Glyph.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Glyph.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Glyph.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Glyph.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Glyph.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Glyph.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Glyph.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Glyph.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Glyph.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Glyph.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Glyph.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Glyph.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Glyph\"},{\"kind\":256,\"name\":\"GlyphNoteOptions\",\"url\":\"interfaces/GlyphNoteOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"ignoreTicks\",\"url\":\"interfaces/GlyphNoteOptions.html#ignoreTicks\",\"classes\":\"\",\"parent\":\"GlyphNoteOptions\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/GlyphNoteOptions.html#line\",\"classes\":\"\",\"parent\":\"GlyphNoteOptions\"},{\"kind\":128,\"name\":\"GlyphNote\",\"url\":\"classes/GlyphNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/GlyphNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/GlyphNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/GlyphNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/GlyphNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GlyphNote.html#constructor\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setGlyph\",\"url\":\"classes/GlyphNote.html#setGlyph\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/GlyphNote.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/GlyphNote.html#preFormat\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"drawModifiers\",\"url\":\"classes/GlyphNote.html#drawModifiers\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/GlyphNote.html#getGlyphWidth\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/GlyphNote.html#draw-1\",\"classes\":\"\",\"parent\":\"GlyphNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/GlyphNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/GlyphNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/GlyphNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/GlyphNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GlyphNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/GlyphNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/GlyphNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/GlyphNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/GlyphNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/GlyphNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/GlyphNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/GlyphNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/GlyphNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/GlyphNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/GlyphNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/GlyphNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/GlyphNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/GlyphNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"GlyphNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/GlyphNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/GlyphNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/GlyphNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/GlyphNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/GlyphNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/GlyphNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/GlyphNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/GlyphNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/GlyphNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/GlyphNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/GlyphNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/GlyphNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/GlyphNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/GlyphNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/GlyphNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/GlyphNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/GlyphNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/GlyphNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/GlyphNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/GlyphNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/GlyphNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/GlyphNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/GlyphNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/GlyphNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/GlyphNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/GlyphNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/GlyphNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/GlyphNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/GlyphNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/GlyphNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/GlyphNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/GlyphNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/GlyphNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/GlyphNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GlyphNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"GlyphNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/GlyphNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"GlyphNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/GlyphNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"GlyphNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/GlyphNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/GlyphNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/GlyphNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/GlyphNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/GlyphNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/GlyphNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/GlyphNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/GlyphNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/GlyphNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/GlyphNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/GlyphNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/GlyphNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/GlyphNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/GlyphNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/GlyphNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/GlyphNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/GlyphNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/GlyphNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/GlyphNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/GlyphNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/GlyphNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/GlyphNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/GlyphNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/GlyphNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/GlyphNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/GlyphNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/GlyphNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/GlyphNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/GlyphNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/GlyphNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/GlyphNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/GlyphNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/GlyphNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/GlyphNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/GlyphNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/GlyphNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/GlyphNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/GlyphNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/GlyphNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/GlyphNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/GlyphNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/GlyphNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/GlyphNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/GlyphNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/GlyphNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/GlyphNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/GlyphNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/GlyphNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/GlyphNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/GlyphNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/GlyphNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/GlyphNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/GlyphNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/GlyphNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/GlyphNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/GlyphNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/GlyphNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/GlyphNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/GlyphNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/GlyphNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/GlyphNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/GlyphNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/GlyphNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/GlyphNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/GlyphNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/GlyphNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/GlyphNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/GlyphNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/GlyphNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/GlyphNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/GlyphNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/GlyphNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/GlyphNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/GlyphNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/GlyphNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GlyphNote\"},{\"kind\":256,\"name\":\"GraceNoteStruct\",\"url\":\"interfaces/GraceNoteStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"slash\",\"url\":\"interfaces/GraceNoteStruct.html#slash\",\"classes\":\"\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"interfaces/GraceNoteStruct.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"auto_stem\",\"url\":\"interfaces/GraceNoteStruct.html#auto_stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"stem_down_x_offset\",\"url\":\"interfaces/GraceNoteStruct.html#stem_down_x_offset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"stem_up_x_offset\",\"url\":\"interfaces/GraceNoteStruct.html#stem_up_x_offset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"interfaces/GraceNoteStruct.html#stroke_px\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"interfaces/GraceNoteStruct.html#glyph_font_scale\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"octave_shift\",\"url\":\"interfaces/GraceNoteStruct.html#octave_shift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"clef\",\"url\":\"interfaces/GraceNoteStruct.html#clef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"interfaces/GraceNoteStruct.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/GraceNoteStruct.html#duration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/GraceNoteStruct.html#line\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/GraceNoteStruct.html#dots\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/GraceNoteStruct.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"align_center\",\"url\":\"interfaces/GraceNoteStruct.html#align_center\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":1024,\"name\":\"duration_override\",\"url\":\"interfaces/GraceNoteStruct.html#duration_override\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteStruct\"},{\"kind\":128,\"name\":\"GraceNote\",\"url\":\"classes/GraceNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/GraceNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"LEDGER_LINE_OFFSET\",\"url\":\"classes/GraceNote.html#LEDGER_LINE_OFFSET\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"SCALE\",\"url\":\"classes/GraceNote.html#SCALE-1\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/GraceNote.html#DEBUG\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"STEM_UP\",\"url\":\"classes/GraceNote.html#STEM_UP\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"STEM_DOWN\",\"url\":\"classes/GraceNote.html#STEM_DOWN\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"minNoteheadPadding\",\"url\":\"classes/GraceNote.html#minNoteheadPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/GraceNote.html#format\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/GraceNote.html#postFormat-2\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/GraceNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/GraceNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/GraceNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GraceNote.html#constructor\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemExtension\",\"url\":\"classes/GraceNote.html#getStemExtension\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStaveNoteScale\",\"url\":\"classes/GraceNote.html#getStaveNoteScale\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/GraceNote.html#draw-1\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"calcBeamedNotesSlashBBox\",\"url\":\"classes/GraceNote.html#calcBeamedNotesSlashBBox\",\"classes\":\"\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"minLine\",\"url\":\"classes/GraceNote.html#minLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"maxLine\",\"url\":\"classes/GraceNote.html#maxLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/GraceNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/GraceNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"buildStem\",\"url\":\"classes/GraceNote.html#buildStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"buildNoteHeads\",\"url\":\"classes/GraceNote.html#buildNoteHeads\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"autoStem\",\"url\":\"classes/GraceNote.html#autoStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"calculateOptimalStemDirection\",\"url\":\"classes/GraceNote.html#calculateOptimalStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"calculateKeyProps\",\"url\":\"classes/GraceNote.html#calculateKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/GraceNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/GraceNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/GraceNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"isChord\",\"url\":\"classes/GraceNote.html#isChord\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/GraceNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"hasFlag\",\"url\":\"classes/GraceNote.html#hasFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemX\",\"url\":\"classes/GraceNote.html#getStemX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/GraceNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/GraceNote.html#getYForBottomText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/GraceNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"isDisplaced\",\"url\":\"classes/GraceNote.html#isDisplaced\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setNoteDisplaced\",\"url\":\"classes/GraceNote.html#setNoteDisplaced\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/GraceNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/GraceNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/GraceNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/GraceNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"GraceNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/GraceNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"GraceNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/GraceNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"GraceNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/GraceNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setStemStyle\",\"url\":\"classes/GraceNote.html#setStemStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemStyle\",\"url\":\"classes/GraceNote.html#getStemStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setLedgerLineStyle\",\"url\":\"classes/GraceNote.html#setLedgerLineStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getLedgerLineStyle\",\"url\":\"classes/GraceNote.html#getLedgerLineStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setFlagStyle\",\"url\":\"classes/GraceNote.html#setFlagStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getFlagStyle\",\"url\":\"classes/GraceNote.html#getFlagStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setKeyStyle\",\"url\":\"classes/GraceNote.html#setKeyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setKeyLine\",\"url\":\"classes/GraceNote.html#setKeyLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getKeyLine\",\"url\":\"classes/GraceNote.html#getKeyLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getVoiceShiftWidth\",\"url\":\"classes/GraceNote.html#getVoiceShiftWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"calcNoteDisplacements\",\"url\":\"classes/GraceNote.html#calcNoteDisplacements\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/GraceNote.html#preFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getNoteHeadBounds\",\"url\":\"classes/GraceNote.html#getNoteHeadBounds\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getNoteHeadBeginX\",\"url\":\"classes/GraceNote.html#getNoteHeadBeginX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getNoteHeadEndX\",\"url\":\"classes/GraceNote.html#getNoteHeadEndX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"noteHeads\",\"url\":\"classes/GraceNote.html#noteHeads\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"note_heads\",\"url\":\"classes/GraceNote.html#note_heads\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"drawLedgerLines\",\"url\":\"classes/GraceNote.html#drawLedgerLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"drawModifiers\",\"url\":\"classes/GraceNote.html#drawModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"shouldDrawFlag\",\"url\":\"classes/GraceNote.html#shouldDrawFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"drawFlag\",\"url\":\"classes/GraceNote.html#drawFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"drawNoteHeads\",\"url\":\"classes/GraceNote.html#drawNoteHeads\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"drawStem\",\"url\":\"classes/GraceNote.html#drawStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"classes/GraceNote.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"classes/GraceNote.html#stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStem\",\"url\":\"classes/GraceNote.html#getStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"checkStem\",\"url\":\"classes/GraceNote.html#checkStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setStem\",\"url\":\"classes/GraceNote.html#setStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"buildFlag\",\"url\":\"classes/GraceNote.html#buildFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getBaseCustomNoteHeadGlyphProps\",\"url\":\"classes/GraceNote.html#getBaseCustomNoteHeadGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemLength\",\"url\":\"classes/GraceNote.html#getStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/GraceNote.html#getBeamCount\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemMinimumLength\",\"url\":\"classes/GraceNote.html#getStemMinimumLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/GraceNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setStemDirection\",\"url\":\"classes/GraceNote.html#setStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getCenterGlyphX\",\"url\":\"classes/GraceNote.html#getCenterGlyphX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setStemLength\",\"url\":\"classes/GraceNote.html#setStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/GraceNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceNote.html#getStemExtents.getStemExtents-1.__type-2\",\"classes\":\"\",\"parent\":\"GraceNote.getStemExtents.getStemExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/GraceNote.html#getStemExtents.getStemExtents-1.__type-2.topY\",\"classes\":\"\",\"parent\":\"GraceNote.getStemExtents.getStemExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/GraceNote.html#getStemExtents.getStemExtents-1.__type-2.baseY\",\"classes\":\"\",\"parent\":\"GraceNote.getStemExtents.getStemExtents.__type\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/GraceNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/GraceNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/GraceNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/GraceNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/GraceNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"GraceNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/GraceNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/GraceNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/GraceNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/GraceNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/GraceNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/GraceNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/GraceNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/GraceNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/GraceNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/GraceNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/GraceNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/GraceNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/GraceNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"GraceNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/GraceNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/GraceNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/GraceNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/GraceNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/GraceNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/GraceNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/GraceNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/GraceNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/GraceNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/GraceNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/GraceNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/GraceNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/GraceNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/GraceNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/GraceNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/GraceNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/GraceNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/GraceNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/GraceNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/GraceNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/GraceNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/GraceNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/GraceNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/GraceNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/GraceNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/GraceNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/GraceNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/GraceNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/GraceNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/GraceNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/GraceNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/GraceNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/GraceNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/GraceNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/GraceNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/GraceNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/GraceNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/GraceNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/GraceNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/GraceNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/GraceNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/GraceNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/GraceNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/GraceNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/GraceNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/GraceNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/GraceNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/GraceNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/GraceNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/GraceNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/GraceNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/GraceNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/GraceNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/GraceNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/GraceNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/GraceNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/GraceNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/GraceNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/GraceNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/GraceNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/GraceNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/GraceNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/GraceNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/GraceNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/GraceNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/GraceNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/GraceNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/GraceNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/GraceNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/GraceNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/GraceNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/GraceNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/GraceNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/GraceNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/GraceNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/GraceNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/GraceNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/GraceNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/GraceNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/GraceNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/GraceNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/GraceNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/GraceNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/GraceNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/GraceNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/GraceNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/GraceNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/GraceNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/GraceNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/GraceNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/GraceNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/GraceNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/GraceNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/GraceNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/GraceNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNote\"},{\"kind\":128,\"name\":\"GraceNoteGroup\",\"url\":\"classes/GraceNoteGroup.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/GraceNoteGroup.html#DEBUG\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/GraceNoteGroup.html#CATEGORY\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/GraceNoteGroup.html#format\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/GraceNoteGroup.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/GraceNoteGroup.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/GraceNoteGroup.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GraceNoteGroup.html#constructor\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/GraceNoteGroup.html#render_options\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceNoteGroup.html#render_options.__type\",\"classes\":\"\",\"parent\":\"GraceNoteGroup.render_options\"},{\"kind\":1024,\"name\":\"slur_y_shift\",\"url\":\"classes/GraceNoteGroup.html#render_options.__type.slur_y_shift\",\"classes\":\"\",\"parent\":\"GraceNoteGroup.render_options.__type\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/GraceNoteGroup.html#preFormat\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"beamNotes\",\"url\":\"classes/GraceNoteGroup.html#beamNotes\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/GraceNoteGroup.html#setWidth\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/GraceNoteGroup.html#getWidth\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getGraceNotes\",\"url\":\"classes/GraceNoteGroup.html#getGraceNotes\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/GraceNoteGroup.html#draw\",\"classes\":\"\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/GraceNoteGroup.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/GraceNoteGroup.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/GraceNoteGroup.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/GraceNoteGroup.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/GraceNoteGroup.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/GraceNoteGroup.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/GraceNoteGroup.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/GraceNoteGroup.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/GraceNoteGroup.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/GraceNoteGroup.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/GraceNoteGroup.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/GraceNoteGroup.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/GraceNoteGroup.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/GraceNoteGroup.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/GraceNoteGroup.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/GraceNoteGroup.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/GraceNoteGroup.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/GraceNoteGroup.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/GraceNoteGroup.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/GraceNoteGroup.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/GraceNoteGroup.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/GraceNoteGroup.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/GraceNoteGroup.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/GraceNoteGroup.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/GraceNoteGroup.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/GraceNoteGroup.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/GraceNoteGroup.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/GraceNoteGroup.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/GraceNoteGroup.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/GraceNoteGroup.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/GraceNoteGroup.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/GraceNoteGroup.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/GraceNoteGroup.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/GraceNoteGroup.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/GraceNoteGroup.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/GraceNoteGroup.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/GraceNoteGroup.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/GraceNoteGroup.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/GraceNoteGroup.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/GraceNoteGroup.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/GraceNoteGroup.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/GraceNoteGroup.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/GraceNoteGroup.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/GraceNoteGroup.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/GraceNoteGroup.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/GraceNoteGroup.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/GraceNoteGroup.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/GraceNoteGroup.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/GraceNoteGroup.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/GraceNoteGroup.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/GraceNoteGroup.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/GraceNoteGroup.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceNoteGroup\"},{\"kind\":128,\"name\":\"GraceTabNote\",\"url\":\"classes/GraceTabNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/GraceTabNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/GraceTabNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/GraceTabNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/GraceTabNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GraceTabNote.html#constructor\",\"classes\":\"\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"greatestString\",\"url\":\"classes/GraceTabNote.html#greatestString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"leastString\",\"url\":\"classes/GraceTabNote.html#leastString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/GraceTabNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setGhost\",\"url\":\"classes/GraceTabNote.html#setGhost\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/GraceTabNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemExtension\",\"url\":\"classes/GraceTabNote.html#getStemExtension\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"updateWidth\",\"url\":\"classes/GraceTabNote.html#updateWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/GraceTabNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getPositions\",\"url\":\"classes/GraceTabNote.html#getPositions\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/GraceTabNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceTabNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"GraceTabNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/GraceTabNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"GraceTabNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/GraceTabNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"GraceTabNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/GraceTabNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/GraceTabNote.html#preFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemX\",\"url\":\"classes/GraceTabNote.html#getStemX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemY\",\"url\":\"classes/GraceTabNote.html#getStemY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/GraceTabNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceTabNote.html#getStemExtents.getStemExtents-1.__type-2\",\"classes\":\"\",\"parent\":\"GraceTabNote.getStemExtents.getStemExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/GraceTabNote.html#getStemExtents.getStemExtents-1.__type-2.topY\",\"classes\":\"\",\"parent\":\"GraceTabNote.getStemExtents.getStemExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/GraceTabNote.html#getStemExtents.getStemExtents-1.__type-2.baseY\",\"classes\":\"\",\"parent\":\"GraceTabNote.getStemExtents.getStemExtents.__type\"},{\"kind\":2048,\"name\":\"drawFlag\",\"url\":\"classes/GraceTabNote.html#drawFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"drawModifiers\",\"url\":\"classes/GraceTabNote.html#drawModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"drawStemThrough\",\"url\":\"classes/GraceTabNote.html#drawStemThrough\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"drawPositions\",\"url\":\"classes/GraceTabNote.html#drawPositions\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/GraceTabNote.html#draw-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"classes/GraceTabNote.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"classes/GraceTabNote.html#stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStem\",\"url\":\"classes/GraceTabNote.html#getStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"checkStem\",\"url\":\"classes/GraceTabNote.html#checkStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setStem\",\"url\":\"classes/GraceTabNote.html#setStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"buildStem\",\"url\":\"classes/GraceTabNote.html#buildStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"buildFlag\",\"url\":\"classes/GraceTabNote.html#buildFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getBaseCustomNoteHeadGlyphProps\",\"url\":\"classes/GraceTabNote.html#getBaseCustomNoteHeadGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemLength\",\"url\":\"classes/GraceTabNote.html#getStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/GraceTabNote.html#getBeamCount\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemMinimumLength\",\"url\":\"classes/GraceTabNote.html#getStemMinimumLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/GraceTabNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setStemDirection\",\"url\":\"classes/GraceTabNote.html#setStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getCenterGlyphX\",\"url\":\"classes/GraceTabNote.html#getCenterGlyphX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setStemLength\",\"url\":\"classes/GraceTabNote.html#setStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/GraceTabNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/GraceTabNote.html#getYForBottomText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"hasFlag\",\"url\":\"classes/GraceTabNote.html#hasFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/GraceTabNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"drawStem\",\"url\":\"classes/GraceTabNote.html#drawStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/GraceTabNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/GraceTabNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/GraceTabNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/GraceTabNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraceTabNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/GraceTabNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/GraceTabNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/GraceTabNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/GraceTabNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/GraceTabNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/GraceTabNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/GraceTabNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/GraceTabNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/GraceTabNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/GraceTabNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/GraceTabNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/GraceTabNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/GraceTabNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"GraceTabNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/GraceTabNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/GraceTabNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/GraceTabNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/GraceTabNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/GraceTabNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/GraceTabNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/GraceTabNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/GraceTabNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/GraceTabNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/GraceTabNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/GraceTabNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/GraceTabNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/GraceTabNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/GraceTabNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/GraceTabNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/GraceTabNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/GraceTabNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/GraceTabNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/GraceTabNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/GraceTabNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/GraceTabNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/GraceTabNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/GraceTabNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/GraceTabNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/GraceTabNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/GraceTabNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/GraceTabNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/GraceTabNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/GraceTabNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/GraceTabNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/GraceTabNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/GraceTabNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/GraceTabNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/GraceTabNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/GraceTabNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/GraceTabNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/GraceTabNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/GraceTabNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/GraceTabNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/GraceTabNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/GraceTabNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/GraceTabNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/GraceTabNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/GraceTabNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/GraceTabNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/GraceTabNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/GraceTabNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/GraceTabNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/GraceTabNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/GraceTabNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/GraceTabNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/GraceTabNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/GraceTabNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/GraceTabNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/GraceTabNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/GraceTabNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/GraceTabNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/GraceTabNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/GraceTabNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/GraceTabNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/GraceTabNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/GraceTabNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/GraceTabNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/GraceTabNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/GraceTabNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/GraceTabNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/GraceTabNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/GraceTabNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/GraceTabNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/GraceTabNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/GraceTabNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/GraceTabNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/GraceTabNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/GraceTabNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/GraceTabNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/GraceTabNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/GraceTabNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/GraceTabNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/GraceTabNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/GraceTabNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/GraceTabNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/GraceTabNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/GraceTabNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/GraceTabNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/GraceTabNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/GraceTabNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/GraceTabNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/GraceTabNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/GraceTabNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/GraceTabNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/GraceTabNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/GraceTabNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/GraceTabNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/GraceTabNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/GraceTabNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/GraceTabNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/GraceTabNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/GraceTabNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/GraceTabNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/GraceTabNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/GraceTabNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/GraceTabNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GraceTabNote\"},{\"kind\":128,\"name\":\"KeyManager\",\"url\":\"classes/KeyManager.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/KeyManager.html#constructor\",\"classes\":\"\",\"parent\":\"KeyManager\"},{\"kind\":2048,\"name\":\"setKey\",\"url\":\"classes/KeyManager.html#setKey\",\"classes\":\"\",\"parent\":\"KeyManager\"},{\"kind\":2048,\"name\":\"getKey\",\"url\":\"classes/KeyManager.html#getKey\",\"classes\":\"\",\"parent\":\"KeyManager\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/KeyManager.html#reset\",\"classes\":\"\",\"parent\":\"KeyManager\"},{\"kind\":2048,\"name\":\"getAccidental\",\"url\":\"classes/KeyManager.html#getAccidental\",\"classes\":\"\",\"parent\":\"KeyManager\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/KeyManager.html#getAccidental.getAccidental-1.__type\",\"classes\":\"\",\"parent\":\"KeyManager.getAccidental.getAccidental\"},{\"kind\":1024,\"name\":\"note\",\"url\":\"classes/KeyManager.html#getAccidental.getAccidental-1.__type.note\",\"classes\":\"\",\"parent\":\"KeyManager.getAccidental.getAccidental.__type\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"classes/KeyManager.html#getAccidental.getAccidental-1.__type.accidental\",\"classes\":\"\",\"parent\":\"KeyManager.getAccidental.getAccidental.__type\"},{\"kind\":1024,\"name\":\"change\",\"url\":\"classes/KeyManager.html#getAccidental.getAccidental-1.__type.change\",\"classes\":\"\",\"parent\":\"KeyManager.getAccidental.getAccidental.__type\"},{\"kind\":2048,\"name\":\"selectNote\",\"url\":\"classes/KeyManager.html#selectNote\",\"classes\":\"\",\"parent\":\"KeyManager\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/KeyManager.html#selectNote.selectNote-1.__type-1\",\"classes\":\"\",\"parent\":\"KeyManager.selectNote.selectNote\"},{\"kind\":1024,\"name\":\"note\",\"url\":\"classes/KeyManager.html#selectNote.selectNote-1.__type-1.note-1\",\"classes\":\"\",\"parent\":\"KeyManager.selectNote.selectNote.__type\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"classes/KeyManager.html#selectNote.selectNote-1.__type-1.accidental-1\",\"classes\":\"\",\"parent\":\"KeyManager.selectNote.selectNote.__type\"},{\"kind\":1024,\"name\":\"change\",\"url\":\"classes/KeyManager.html#selectNote.selectNote-1.__type-1.change-1\",\"classes\":\"\",\"parent\":\"KeyManager.selectNote.selectNote.__type\"},{\"kind\":128,\"name\":\"KeySignature\",\"url\":\"classes/KeySignature.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/KeySignature.html#CATEGORY\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":1024,\"name\":\"accidentalSpacing\",\"url\":\"classes/KeySignature.html#accidentalSpacing\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/KeySignature.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/KeySignature.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/KeySignature.html#constructor\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"convertToGlyph\",\"url\":\"classes/KeySignature.html#convertToGlyph\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"cancelKey\",\"url\":\"classes/KeySignature.html#cancelKey\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"convertToCancelAccList\",\"url\":\"classes/KeySignature.html#convertToCancelAccList\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"addToStave\",\"url\":\"classes/KeySignature.html#addToStave\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"convertAccLines\",\"url\":\"classes/KeySignature.html#convertAccLines\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/KeySignature.html#getPadding\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/KeySignature.html#getWidth\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setKeySig\",\"url\":\"classes/KeySignature.html#setKeySig\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"alterKey\",\"url\":\"classes/KeySignature.html#alterKey\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"convertToAlterAccList\",\"url\":\"classes/KeySignature.html#convertToAlterAccList\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/KeySignature.html#format\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getGlyphs\",\"url\":\"classes/KeySignature.html#getGlyphs\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/KeySignature.html#draw\",\"classes\":\"\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/KeySignature.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/KeySignature.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/KeySignature.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/KeySignature.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/KeySignature.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/KeySignature.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/KeySignature.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/KeySignature.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/KeySignature.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/KeySignature.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/KeySignature.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/KeySignature.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/KeySignature.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/KeySignature.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/KeySignature.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/KeySignature.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/KeySignature.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/KeySignature.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/KeySignature.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/KeySignature.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/KeySignature.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/KeySignature.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/KeySignature.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/KeySignature.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/KeySignature.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/KeySignature.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/KeySignature.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/KeySignature.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/KeySignature.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/KeySignature.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/KeySignature.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/KeySignature.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/KeySignature.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/KeySignature.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/KeySignature.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/KeySignature.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/KeySignature.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/KeySignature.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/KeySignature.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/KeySignature.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/KeySignature.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/KeySignature.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/KeySignature.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/KeySignature.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/KeySignature.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/KeySignature.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySignature\"},{\"kind\":128,\"name\":\"KeySigNote\",\"url\":\"classes/KeySigNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/KeySigNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/KeySigNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/KeySigNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/KeySigNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/KeySigNote.html#constructor\",\"classes\":\"\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/KeySigNote.html#addToModifierContext\",\"classes\":\"\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/KeySigNote.html#preFormat\",\"classes\":\"\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/KeySigNote.html#draw-1\",\"classes\":\"\",\"parent\":\"KeySigNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/KeySigNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/KeySigNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/KeySigNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/KeySigNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/KeySigNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/KeySigNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/KeySigNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/KeySigNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/KeySigNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/KeySigNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/KeySigNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/KeySigNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/KeySigNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/KeySigNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/KeySigNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/KeySigNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/KeySigNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/KeySigNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"KeySigNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/KeySigNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/KeySigNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/KeySigNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/KeySigNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/KeySigNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/KeySigNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/KeySigNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/KeySigNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/KeySigNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/KeySigNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/KeySigNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/KeySigNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/KeySigNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/KeySigNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/KeySigNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/KeySigNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/KeySigNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/KeySigNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/KeySigNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/KeySigNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/KeySigNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/KeySigNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/KeySigNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/KeySigNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/KeySigNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/KeySigNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/KeySigNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/KeySigNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/KeySigNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/KeySigNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/KeySigNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/KeySigNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/KeySigNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/KeySigNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/KeySigNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/KeySigNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"KeySigNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/KeySigNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"KeySigNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/KeySigNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"KeySigNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/KeySigNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/KeySigNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/KeySigNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/KeySigNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/KeySigNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/KeySigNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/KeySigNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/KeySigNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/KeySigNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/KeySigNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/KeySigNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/KeySigNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/KeySigNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/KeySigNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/KeySigNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/KeySigNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/KeySigNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/KeySigNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/KeySigNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/KeySigNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/KeySigNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/KeySigNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/KeySigNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/KeySigNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/KeySigNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/KeySigNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/KeySigNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/KeySigNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/KeySigNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/KeySigNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/KeySigNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/KeySigNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/KeySigNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/KeySigNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/KeySigNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/KeySigNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/KeySigNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/KeySigNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/KeySigNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/KeySigNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/KeySigNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/KeySigNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/KeySigNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/KeySigNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/KeySigNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/KeySigNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/KeySigNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/KeySigNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/KeySigNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/KeySigNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/KeySigNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/KeySigNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/KeySigNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/KeySigNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/KeySigNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/KeySigNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/KeySigNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/KeySigNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/KeySigNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/KeySigNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/KeySigNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/KeySigNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/KeySigNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/KeySigNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/KeySigNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/KeySigNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/KeySigNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/KeySigNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/KeySigNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/KeySigNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/KeySigNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/KeySigNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/KeySigNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/KeySigNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/KeySigNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"KeySigNote\"},{\"kind\":8,\"name\":\"ModifierPosition\",\"url\":\"enums/ModifierPosition.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"CENTER\",\"url\":\"enums/ModifierPosition.html#CENTER\",\"classes\":\"\",\"parent\":\"ModifierPosition\"},{\"kind\":16,\"name\":\"LEFT\",\"url\":\"enums/ModifierPosition.html#LEFT\",\"classes\":\"\",\"parent\":\"ModifierPosition\"},{\"kind\":16,\"name\":\"RIGHT\",\"url\":\"enums/ModifierPosition.html#RIGHT\",\"classes\":\"\",\"parent\":\"ModifierPosition\"},{\"kind\":16,\"name\":\"ABOVE\",\"url\":\"enums/ModifierPosition.html#ABOVE\",\"classes\":\"\",\"parent\":\"ModifierPosition\"},{\"kind\":16,\"name\":\"BELOW\",\"url\":\"enums/ModifierPosition.html#BELOW\",\"classes\":\"\",\"parent\":\"ModifierPosition\"},{\"kind\":128,\"name\":\"Modifier\",\"url\":\"classes/Modifier.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Modifier.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Modifier.html#Position\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Modifier.html#PositionString\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Modifier.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Modifier.html#constructor\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Modifier.html#getWidth\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Modifier.html#setWidth\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Modifier.html#getNote\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Modifier.html#checkAttachedNote\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Modifier.html#setNote\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Modifier.html#getIndex\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Modifier.html#checkIndex\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Modifier.html#setIndex\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Modifier.html#getModifierContext\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Modifier.html#checkModifierContext\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Modifier.html#setModifierContext\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Modifier.html#getPosition\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Modifier.html#setPosition\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Modifier.html#setTextLine\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Modifier.html#setYShift\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Modifier.html#setSpacingFromNextModifier\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Modifier.html#getSpacingFromNextModifier\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Modifier.html#setXShift\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Modifier.html#getXShift\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Modifier.html#draw\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Modifier.html#alignSubNotesWithNote\",\"classes\":\"\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Modifier.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Modifier.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Modifier.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Modifier.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Modifier.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Modifier.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Modifier.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Modifier.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Modifier.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Modifier.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Modifier.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Modifier.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Modifier.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Modifier.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Modifier.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Modifier.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Modifier.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Modifier.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Modifier.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Modifier.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Modifier.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Modifier.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Modifier.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Modifier.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Modifier.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Modifier.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Modifier.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Modifier.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Modifier.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Modifier.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Modifier.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Modifier.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Modifier.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Modifier.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Modifier\"},{\"kind\":256,\"name\":\"ModifierContextState\",\"url\":\"interfaces/ModifierContextState.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"right_shift\",\"url\":\"interfaces/ModifierContextState.html#right_shift\",\"classes\":\"\",\"parent\":\"ModifierContextState\"},{\"kind\":1024,\"name\":\"left_shift\",\"url\":\"interfaces/ModifierContextState.html#left_shift\",\"classes\":\"\",\"parent\":\"ModifierContextState\"},{\"kind\":1024,\"name\":\"text_line\",\"url\":\"interfaces/ModifierContextState.html#text_line\",\"classes\":\"\",\"parent\":\"ModifierContextState\"},{\"kind\":1024,\"name\":\"top_text_line\",\"url\":\"interfaces/ModifierContextState.html#top_text_line\",\"classes\":\"\",\"parent\":\"ModifierContextState\"},{\"kind\":256,\"name\":\"ModifierContextMetrics\",\"url\":\"interfaces/ModifierContextMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/ModifierContextMetrics.html#width\",\"classes\":\"\",\"parent\":\"ModifierContextMetrics\"},{\"kind\":1024,\"name\":\"spacing\",\"url\":\"interfaces/ModifierContextMetrics.html#spacing\",\"classes\":\"\",\"parent\":\"ModifierContextMetrics\"},{\"kind\":4194304,\"name\":\"ModifierContextMember\",\"url\":\"types/ModifierContextMember.html\",\"classes\":\"\"},{\"kind\":128,\"name\":\"ModifierContext\",\"url\":\"classes/ModifierContext.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/ModifierContext.html#DEBUG\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ModifierContext.html#constructor\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/ModifierContext.html#addModifier\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"addMember\",\"url\":\"classes/ModifierContext.html#addMember\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/ModifierContext.html#getModifiers\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getMembers\",\"url\":\"classes/ModifierContext.html#getMembers\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/ModifierContext.html#getWidth\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getLeftShift\",\"url\":\"classes/ModifierContext.html#getLeftShift\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getRightShift\",\"url\":\"classes/ModifierContext.html#getRightShift\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getState\",\"url\":\"classes/ModifierContext.html#getState\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/ModifierContext.html#getMetrics\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/ModifierContext.html#preFormat\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/ModifierContext.html#postFormat\",\"classes\":\"\",\"parent\":\"ModifierContext\"},{\"kind\":256,\"name\":\"MultimeasureRestRenderOptions\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"number_of_measures\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#number_of_measures\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"use_symbols\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#use_symbols\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"symbol_spacing\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#symbol_spacing\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"show_number\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#show_number\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"number_line\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#number_line\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"number_glyph_point\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#number_glyph_point\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"padding_left\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#padding_left\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"padding_right\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#padding_right\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#line\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"spacing_between_lines_px\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#spacing_between_lines_px\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"semibreve_rest_glyph_scale\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#semibreve_rest_glyph_scale\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"line_thickness\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#line_thickness\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":1024,\"name\":\"serif_thickness\",\"url\":\"interfaces/MultimeasureRestRenderOptions.html#serif_thickness\",\"classes\":\"\",\"parent\":\"MultimeasureRestRenderOptions\"},{\"kind\":128,\"name\":\"MultiMeasureRest\",\"url\":\"classes/MultiMeasureRest.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/MultiMeasureRest.html#CATEGORY\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/MultiMeasureRest.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/MultiMeasureRest.html#constructor\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/MultiMeasureRest.html#render_options\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getXs\",\"url\":\"classes/MultiMeasureRest.html#getXs\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/MultiMeasureRest.html#getXs.getXs-1.__type\",\"classes\":\"\",\"parent\":\"MultiMeasureRest.getXs.getXs\"},{\"kind\":1024,\"name\":\"left\",\"url\":\"classes/MultiMeasureRest.html#getXs.getXs-1.__type.left\",\"classes\":\"\",\"parent\":\"MultiMeasureRest.getXs.getXs.__type\"},{\"kind\":1024,\"name\":\"right\",\"url\":\"classes/MultiMeasureRest.html#getXs.getXs-1.__type.right\",\"classes\":\"\",\"parent\":\"MultiMeasureRest.getXs.getXs.__type\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/MultiMeasureRest.html#setStave\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/MultiMeasureRest.html#getStave\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/MultiMeasureRest.html#checkStave\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"drawLine\",\"url\":\"classes/MultiMeasureRest.html#drawLine\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"drawSymbols\",\"url\":\"classes/MultiMeasureRest.html#drawSymbols\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/MultiMeasureRest.html#draw\",\"classes\":\"\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/MultiMeasureRest.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/MultiMeasureRest.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/MultiMeasureRest.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/MultiMeasureRest.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/MultiMeasureRest.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/MultiMeasureRest.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/MultiMeasureRest.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/MultiMeasureRest.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/MultiMeasureRest.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/MultiMeasureRest.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/MultiMeasureRest.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/MultiMeasureRest.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/MultiMeasureRest.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/MultiMeasureRest.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/MultiMeasureRest.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/MultiMeasureRest.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/MultiMeasureRest.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/MultiMeasureRest.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/MultiMeasureRest.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/MultiMeasureRest.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/MultiMeasureRest.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/MultiMeasureRest.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/MultiMeasureRest.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/MultiMeasureRest.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/MultiMeasureRest.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/MultiMeasureRest.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/MultiMeasureRest.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/MultiMeasureRest.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/MultiMeasureRest.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/MultiMeasureRest.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/MultiMeasureRest.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/MultiMeasureRest.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/MultiMeasureRest.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/MultiMeasureRest.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"MultiMeasureRest\"},{\"kind\":256,\"name\":\"NoteAccidental\",\"url\":\"interfaces/NoteAccidental.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"note\",\"url\":\"interfaces/NoteAccidental.html#note\",\"classes\":\"\",\"parent\":\"NoteAccidental\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"interfaces/NoteAccidental.html#accidental\",\"classes\":\"\",\"parent\":\"NoteAccidental\"},{\"kind\":256,\"name\":\"NoteParts\",\"url\":\"interfaces/NoteParts.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"root\",\"url\":\"interfaces/NoteParts.html#root\",\"classes\":\"\",\"parent\":\"NoteParts\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"interfaces/NoteParts.html#accidental\",\"classes\":\"\",\"parent\":\"NoteParts\"},{\"kind\":256,\"name\":\"KeyParts\",\"url\":\"interfaces/KeyParts.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"root\",\"url\":\"interfaces/KeyParts.html#root\",\"classes\":\"\",\"parent\":\"KeyParts\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"interfaces/KeyParts.html#accidental\",\"classes\":\"\",\"parent\":\"KeyParts\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/KeyParts.html#type\",\"classes\":\"\",\"parent\":\"KeyParts\"},{\"kind\":4194304,\"name\":\"KeyValue\",\"url\":\"types/KeyValue.html\",\"classes\":\"\"},{\"kind\":4194304,\"name\":\"RootValue\",\"url\":\"types/RootValue.html\",\"classes\":\"\"},{\"kind\":4194304,\"name\":\"AccidentalValue\",\"url\":\"types/AccidentalValue.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"Key\",\"url\":\"interfaces/Key.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"root_index\",\"url\":\"interfaces/Key.html#root_index\",\"classes\":\"\",\"parent\":\"Key\"},{\"kind\":1024,\"name\":\"int_val\",\"url\":\"interfaces/Key.html#int_val\",\"classes\":\"\",\"parent\":\"Key\"},{\"kind\":128,\"name\":\"Music\",\"url\":\"classes/Music.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"NUM_TONES\",\"url\":\"classes/Music.html#NUM_TONES\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"roots\",\"url\":\"classes/Music.html#roots\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"root_values\",\"url\":\"classes/Music.html#root_values\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"root_indices\",\"url\":\"classes/Music.html#root_indices\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"canonical_notes\",\"url\":\"classes/Music.html#canonical_notes\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"diatonic_intervals\",\"url\":\"classes/Music.html#diatonic_intervals\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"diatonic_accidentals\",\"url\":\"classes/Music.html#diatonic_accidentals\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"intervals\",\"url\":\"classes/Music.html#intervals\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"scales\",\"url\":\"classes/Music.html#scales\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"scaleTypes\",\"url\":\"classes/Music.html#scaleTypes\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"accidentals\",\"url\":\"classes/Music.html#accidentals\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":262144,\"name\":\"noteValues\",\"url\":\"classes/Music.html#noteValues\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Music.html#constructor\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getNoteParts\",\"url\":\"classes/Music.html#getNoteParts\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getKeyParts\",\"url\":\"classes/Music.html#getKeyParts\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getNoteValue\",\"url\":\"classes/Music.html#getNoteValue\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getIntervalValue\",\"url\":\"classes/Music.html#getIntervalValue\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getCanonicalNoteName\",\"url\":\"classes/Music.html#getCanonicalNoteName\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getCanonicalIntervalName\",\"url\":\"classes/Music.html#getCanonicalIntervalName\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getRelativeNoteValue\",\"url\":\"classes/Music.html#getRelativeNoteValue\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getRelativeNoteName\",\"url\":\"classes/Music.html#getRelativeNoteName\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getScaleTones\",\"url\":\"classes/Music.html#getScaleTones\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"getIntervalBetween\",\"url\":\"classes/Music.html#getIntervalBetween\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":2048,\"name\":\"createScaleMap\",\"url\":\"classes/Music.html#createScaleMap\",\"classes\":\"\",\"parent\":\"Music\"},{\"kind\":256,\"name\":\"KeyProps\",\"url\":\"interfaces/KeyProps.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"stem_down_x_offset\",\"url\":\"interfaces/KeyProps.html#stem_down_x_offset\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"stem_up_x_offset\",\"url\":\"interfaces/KeyProps.html#stem_up_x_offset\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"key\",\"url\":\"interfaces/KeyProps.html#key\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"octave\",\"url\":\"interfaces/KeyProps.html#octave\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/KeyProps.html#line\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"int_value\",\"url\":\"interfaces/KeyProps.html#int_value\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"accidental\",\"url\":\"interfaces/KeyProps.html#accidental\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"interfaces/KeyProps.html#code\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"stroke\",\"url\":\"interfaces/KeyProps.html#stroke\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"shift_right\",\"url\":\"interfaces/KeyProps.html#shift_right\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":1024,\"name\":\"displaced\",\"url\":\"interfaces/KeyProps.html#displaced\",\"classes\":\"\",\"parent\":\"KeyProps\"},{\"kind\":256,\"name\":\"NoteMetrics\",\"url\":\"interfaces/NoteMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/NoteMetrics.html#width\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"glyphWidth\",\"url\":\"interfaces/NoteMetrics.html#glyphWidth\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"notePx\",\"url\":\"interfaces/NoteMetrics.html#notePx\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"modLeftPx\",\"url\":\"interfaces/NoteMetrics.html#modLeftPx\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"modRightPx\",\"url\":\"interfaces/NoteMetrics.html#modRightPx\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"leftDisplacedHeadPx\",\"url\":\"interfaces/NoteMetrics.html#leftDisplacedHeadPx\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"glyphPx\",\"url\":\"interfaces/NoteMetrics.html#glyphPx\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":1024,\"name\":\"rightDisplacedHeadPx\",\"url\":\"interfaces/NoteMetrics.html#rightDisplacedHeadPx\",\"classes\":\"\",\"parent\":\"NoteMetrics\"},{\"kind\":256,\"name\":\"NoteDuration\",\"url\":\"interfaces/NoteDuration.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/NoteDuration.html#duration\",\"classes\":\"\",\"parent\":\"NoteDuration\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/NoteDuration.html#dots\",\"classes\":\"\",\"parent\":\"NoteDuration\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/NoteDuration.html#type\",\"classes\":\"\",\"parent\":\"NoteDuration\"},{\"kind\":256,\"name\":\"ParsedNote\",\"url\":\"interfaces/ParsedNote.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/ParsedNote.html#duration\",\"classes\":\"\",\"parent\":\"ParsedNote\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/ParsedNote.html#type\",\"classes\":\"\",\"parent\":\"ParsedNote\"},{\"kind\":1024,\"name\":\"customTypes\",\"url\":\"interfaces/ParsedNote.html#customTypes\",\"classes\":\"\",\"parent\":\"ParsedNote\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/ParsedNote.html#dots\",\"classes\":\"\",\"parent\":\"ParsedNote\"},{\"kind\":1024,\"name\":\"ticks\",\"url\":\"interfaces/ParsedNote.html#ticks\",\"classes\":\"\",\"parent\":\"ParsedNote\"},{\"kind\":256,\"name\":\"NoteStruct\",\"url\":\"interfaces/NoteStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"interfaces/NoteStruct.html#keys\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/NoteStruct.html#duration\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/NoteStruct.html#line\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/NoteStruct.html#dots\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/NoteStruct.html#type\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":1024,\"name\":\"align_center\",\"url\":\"interfaces/NoteStruct.html#align_center\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":1024,\"name\":\"duration_override\",\"url\":\"interfaces/NoteStruct.html#duration_override\",\"classes\":\"\",\"parent\":\"NoteStruct\"},{\"kind\":128,\"name\":\"Note\",\"url\":\"classes/Note.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Note.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/Note.html#plotMetrics\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/Note.html#getPoint\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Note.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Note.html#constructor\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/Note.html#glyphProps\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/Note.html#keys\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/Note.html#keyProps\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Note.html#render_options\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Note.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Note.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/Note.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/Note.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/Note.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/Note.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/Note.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/Note.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/Note.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/Note.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/Note.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/Note.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/Note.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/Note.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/Note.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"Note.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/Note.html#getPlayNote\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/Note.html#setPlayNote\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/Note.html#isRest\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/Note.html#addStroke\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Note.html#getStave\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Note.html#checkStave\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Note.html#setStave\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/Note.html#getLeftDisplacedHeadPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/Note.html#getRightDisplacedHeadPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/Note.html#setLeftDisplacedHeadPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/Note.html#setRightDisplacedHeadPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/Note.html#shouldIgnoreTicks\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/Note.html#getLineNumber\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/Note.html#getLineForRest\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/Note.html#getGlyph\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/Note.html#getGlyphProps\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/Note.html#getGlyphWidth\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/Note.html#setYs\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/Note.html#getYs\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/Note.html#getYForTopText\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/Note.html#getVoice\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/Note.html#setVoice\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/Note.html#getTickContext\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/Note.html#setTickContext\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/Note.html#getDuration\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/Note.html#isDotted\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/Note.html#hasStem\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/Note.html#getNoteType\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/Note.html#getBeam\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/Note.html#checkBeam\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/Note.html#hasBeam\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/Note.html#setBeam\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/Note.html#addModifier\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/Note.html#getModifiersByType\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/Note.html#getModifierStartXY\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Note.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"Note.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/Note.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"Note.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/Note.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"Note.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/Note.html#getRightParenthesisPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/Note.html#getLeftParenthesisPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/Note.html#getFirstDotPx\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/Note.html#getMetrics\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/Note.html#getAbsoluteX\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/Note.html#getStemDirection\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/Note.html#getStemExtents\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/Note.html#getTieRightX\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/Note.html#getTieLeftX\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/Note.html#getKeys\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/Note.html#getKeyProps\",\"classes\":\"\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Note.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/Note.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/Note.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Note.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Note.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Note.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Note.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Note.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/Note.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/Note.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/Note.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/Note.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/Note.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/Note.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/Note.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/Note.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/Note.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/Note.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/Note.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/Note.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/Note.html#preFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/Note.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/Note.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/Note.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/Note.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/Note.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/Note.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/Note.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/Note.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Note.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Note.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Note.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Note.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Note.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Note.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Note.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Note.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Note.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Note.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Note.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Note.html#draw-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Note.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Note.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Note.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Note.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Note.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Note.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Note.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Note.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Note.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Note.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Note.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Note.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Note.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Note.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Note.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Note.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Note.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Note.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Note.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Note.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Note.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Note.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Note.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Note.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Note.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Note.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Note\"},{\"kind\":256,\"name\":\"NoteHeadMetrics\",\"url\":\"interfaces/NoteHeadMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"minPadding\",\"url\":\"interfaces/NoteHeadMetrics.html#minPadding\",\"classes\":\"\",\"parent\":\"NoteHeadMetrics\"},{\"kind\":1024,\"name\":\"displacedShiftX\",\"url\":\"interfaces/NoteHeadMetrics.html#displacedShiftX\",\"classes\":\"\",\"parent\":\"NoteHeadMetrics\"},{\"kind\":256,\"name\":\"NoteHeadStruct\",\"url\":\"interfaces/NoteHeadStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/NoteHeadStruct.html#line\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"interfaces/NoteHeadStruct.html#glyph_font_scale\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"slashed\",\"url\":\"interfaces/NoteHeadStruct.html#slashed\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"style\",\"url\":\"interfaces/NoteHeadStruct.html#style\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"stem_down_x_offset\",\"url\":\"interfaces/NoteHeadStruct.html#stem_down_x_offset\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"stem_up_x_offset\",\"url\":\"interfaces/NoteHeadStruct.html#stem_up_x_offset\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"custom_glyph_code\",\"url\":\"interfaces/NoteHeadStruct.html#custom_glyph_code\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"x_shift\",\"url\":\"interfaces/NoteHeadStruct.html#x_shift\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"interfaces/NoteHeadStruct.html#stem_direction\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"displaced\",\"url\":\"interfaces/NoteHeadStruct.html#displaced\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"note_type\",\"url\":\"interfaces/NoteHeadStruct.html#note_type\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"interfaces/NoteHeadStruct.html#x\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"interfaces/NoteHeadStruct.html#y\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/NoteHeadStruct.html#index\",\"classes\":\"\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"interfaces/NoteHeadStruct.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/NoteHeadStruct.html#duration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/NoteHeadStruct.html#dots\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/NoteHeadStruct.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"align_center\",\"url\":\"interfaces/NoteHeadStruct.html#align_center\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHeadStruct\"},{\"kind\":1024,\"name\":\"duration_override\",\"url\":\"interfaces/NoteHeadStruct.html#duration_override\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHeadStruct\"},{\"kind\":128,\"name\":\"NoteHead\",\"url\":\"classes/NoteHead.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/NoteHead.html#DEBUG\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/NoteHead.html#CATEGORY\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/NoteHead.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/NoteHead.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/NoteHead.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/NoteHead.html#constructor\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":1024,\"name\":\"glyph_code\",\"url\":\"classes/NoteHead.html#glyph_code\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/NoteHead.html#getWidth\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"isDisplaced\",\"url\":\"classes/NoteHead.html#isDisplaced\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/NoteHead.html#setX\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getY\",\"url\":\"classes/NoteHead.html#getY\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setY\",\"url\":\"classes/NoteHead.html#setY\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getLine\",\"url\":\"classes/NoteHead.html#getLine\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/NoteHead.html#setLine\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/NoteHead.html#getAbsoluteX\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/NoteHead.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/NoteHead.html#setStave\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/NoteHead.html#preFormat\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/NoteHead.html#draw-1\",\"classes\":\"\",\"parent\":\"NoteHead\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/NoteHead.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/NoteHead.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/NoteHead.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/NoteHead.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/NoteHead.html#render_options.__type\",\"classes\":\"\",\"parent\":\"NoteHead.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/NoteHead.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/NoteHead.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/NoteHead.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/NoteHead.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/NoteHead.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/NoteHead.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/NoteHead.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/NoteHead.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/NoteHead.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/NoteHead.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/NoteHead.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/NoteHead.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/NoteHead.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"NoteHead.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/NoteHead.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/NoteHead.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/NoteHead.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/NoteHead.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/NoteHead.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/NoteHead.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/NoteHead.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/NoteHead.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/NoteHead.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/NoteHead.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/NoteHead.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/NoteHead.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/NoteHead.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/NoteHead.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/NoteHead.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/NoteHead.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/NoteHead.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/NoteHead.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/NoteHead.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/NoteHead.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/NoteHead.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/NoteHead.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/NoteHead.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/NoteHead.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/NoteHead.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/NoteHead.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/NoteHead.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/NoteHead.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/NoteHead.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/NoteHead.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/NoteHead.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/NoteHead.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/NoteHead.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/NoteHead.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/NoteHead.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"NoteHead.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/NoteHead.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"NoteHead.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/NoteHead.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"NoteHead.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/NoteHead.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/NoteHead.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/NoteHead.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/NoteHead.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/NoteHead.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/NoteHead.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/NoteHead.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/NoteHead.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/NoteHead.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/NoteHead.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/NoteHead.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/NoteHead.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/NoteHead.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/NoteHead.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/NoteHead.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/NoteHead.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/NoteHead.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/NoteHead.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/NoteHead.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/NoteHead.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/NoteHead.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/NoteHead.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/NoteHead.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/NoteHead.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/NoteHead.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/NoteHead.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/NoteHead.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/NoteHead.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/NoteHead.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/NoteHead.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/NoteHead.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/NoteHead.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/NoteHead.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/NoteHead.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/NoteHead.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/NoteHead.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/NoteHead.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/NoteHead.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/NoteHead.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/NoteHead.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/NoteHead.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/NoteHead.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/NoteHead.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/NoteHead.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/NoteHead.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/NoteHead.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/NoteHead.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/NoteHead.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/NoteHead.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/NoteHead.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/NoteHead.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/NoteHead.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/NoteHead.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/NoteHead.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/NoteHead.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/NoteHead.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/NoteHead.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/NoteHead.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/NoteHead.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/NoteHead.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/NoteHead.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/NoteHead.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/NoteHead.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/NoteHead.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/NoteHead.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/NoteHead.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/NoteHead.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/NoteHead.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/NoteHead.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/NoteHead.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/NoteHead.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/NoteHead.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/NoteHead.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteHead\"},{\"kind\":128,\"name\":\"NoteSubGroup\",\"url\":\"classes/NoteSubGroup.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/NoteSubGroup.html#CATEGORY\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/NoteSubGroup.html#format\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/NoteSubGroup.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/NoteSubGroup.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/NoteSubGroup.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/NoteSubGroup.html#constructor\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/NoteSubGroup.html#preFormat\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/NoteSubGroup.html#setWidth\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/NoteSubGroup.html#getWidth\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/NoteSubGroup.html#draw\",\"classes\":\"\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/NoteSubGroup.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/NoteSubGroup.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/NoteSubGroup.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/NoteSubGroup.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/NoteSubGroup.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/NoteSubGroup.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/NoteSubGroup.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/NoteSubGroup.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/NoteSubGroup.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/NoteSubGroup.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/NoteSubGroup.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/NoteSubGroup.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/NoteSubGroup.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/NoteSubGroup.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/NoteSubGroup.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/NoteSubGroup.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/NoteSubGroup.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/NoteSubGroup.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/NoteSubGroup.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/NoteSubGroup.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/NoteSubGroup.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/NoteSubGroup.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/NoteSubGroup.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/NoteSubGroup.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/NoteSubGroup.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/NoteSubGroup.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/NoteSubGroup.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/NoteSubGroup.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/NoteSubGroup.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/NoteSubGroup.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/NoteSubGroup.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/NoteSubGroup.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/NoteSubGroup.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/NoteSubGroup.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/NoteSubGroup.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/NoteSubGroup.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/NoteSubGroup.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/NoteSubGroup.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/NoteSubGroup.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/NoteSubGroup.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/NoteSubGroup.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/NoteSubGroup.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/NoteSubGroup.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/NoteSubGroup.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/NoteSubGroup.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/NoteSubGroup.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/NoteSubGroup.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/NoteSubGroup.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/NoteSubGroup.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/NoteSubGroup.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/NoteSubGroup.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/NoteSubGroup.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoteSubGroup\"},{\"kind\":256,\"name\":\"OrnamentMetrics\",\"url\":\"interfaces/OrnamentMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"xOffset\",\"url\":\"interfaces/OrnamentMetrics.html#xOffset\",\"classes\":\"\",\"parent\":\"OrnamentMetrics\"},{\"kind\":1024,\"name\":\"yOffset\",\"url\":\"interfaces/OrnamentMetrics.html#yOffset\",\"classes\":\"\",\"parent\":\"OrnamentMetrics\"},{\"kind\":1024,\"name\":\"stemUpYOffset\",\"url\":\"interfaces/OrnamentMetrics.html#stemUpYOffset\",\"classes\":\"\",\"parent\":\"OrnamentMetrics\"},{\"kind\":1024,\"name\":\"reportedWidth\",\"url\":\"interfaces/OrnamentMetrics.html#reportedWidth\",\"classes\":\"\",\"parent\":\"OrnamentMetrics\"},{\"kind\":128,\"name\":\"Ornament\",\"url\":\"classes/Ornament.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Ornament.html#DEBUG\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Ornament.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"minPadding\",\"url\":\"classes/Ornament.html#minPadding\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Ornament.html#format\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"ornamentNoteTransition\",\"url\":\"classes/Ornament.html#ornamentNoteTransition\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"ornamentAttack\",\"url\":\"classes/Ornament.html#ornamentAttack\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"ornamentAlignWithNoteHead\",\"url\":\"classes/Ornament.html#ornamentAlignWithNoteHead\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"ornamentRelease\",\"url\":\"classes/Ornament.html#ornamentRelease\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"ornamentArticulation\",\"url\":\"classes/Ornament.html#ornamentArticulation\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Ornament.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Ornament.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Ornament.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Ornament.html#constructor\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Ornament.html#render_options\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Ornament.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Ornament.render_options\"},{\"kind\":1024,\"name\":\"accidentalUpperPadding\",\"url\":\"classes/Ornament.html#render_options.__type.accidentalUpperPadding\",\"classes\":\"\",\"parent\":\"Ornament.render_options.__type\"},{\"kind\":1024,\"name\":\"accidentalLowerPadding\",\"url\":\"classes/Ornament.html#render_options.__type.accidentalLowerPadding\",\"classes\":\"\",\"parent\":\"Ornament.render_options.__type\"},{\"kind\":1024,\"name\":\"font_scale\",\"url\":\"classes/Ornament.html#render_options.__type.font_scale\",\"classes\":\"\",\"parent\":\"Ornament.render_options.__type\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/Ornament.html#getMetrics\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setDelayed\",\"url\":\"classes/Ornament.html#setDelayed\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setUpperAccidental\",\"url\":\"classes/Ornament.html#setUpperAccidental\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setLowerAccidental\",\"url\":\"classes/Ornament.html#setLowerAccidental\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Ornament.html#draw\",\"classes\":\"\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Ornament.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Ornament.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Ornament.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Ornament.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Ornament.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Ornament.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Ornament.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Ornament.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Ornament.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Ornament.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Ornament.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Ornament.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Ornament.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Ornament.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Ornament.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Ornament.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Ornament.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Ornament.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Ornament.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Ornament.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Ornament.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Ornament.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Ornament.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Ornament.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Ornament.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Ornament.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Ornament.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Ornament.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Ornament.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Ornament.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Ornament.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Ornament.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Ornament.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Ornament.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Ornament.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Ornament.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Ornament.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Ornament.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Ornament.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Ornament.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Ornament.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Ornament.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Ornament.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Ornament.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Ornament.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Ornament.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Ornament.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Ornament.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Ornament.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Ornament.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Ornament.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Ornament.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Ornament.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Ornament.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Ornament\"},{\"kind\":128,\"name\":\"Parenthesis\",\"url\":\"classes/Parenthesis.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Parenthesis.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"buildAndAttach\",\"url\":\"classes/Parenthesis.html#buildAndAttach\",\"classes\":\"\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Parenthesis.html#format\",\"classes\":\"\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Parenthesis.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Parenthesis.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Parenthesis.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Parenthesis.html#constructor\",\"classes\":\"\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Parenthesis.html#setNote\",\"classes\":\"\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Parenthesis.html#draw\",\"classes\":\"\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Parenthesis.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Parenthesis.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Parenthesis.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Parenthesis.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Parenthesis.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Parenthesis.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Parenthesis.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Parenthesis.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Parenthesis.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Parenthesis.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Parenthesis.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Parenthesis.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Parenthesis.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Parenthesis.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Parenthesis.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Parenthesis.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Parenthesis.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Parenthesis.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Parenthesis.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Parenthesis.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Parenthesis.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Parenthesis.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Parenthesis.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Parenthesis.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Parenthesis.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Parenthesis.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Parenthesis.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Parenthesis.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Parenthesis.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Parenthesis.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Parenthesis.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Parenthesis.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Parenthesis.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Parenthesis.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Parenthesis.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Parenthesis.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Parenthesis.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Parenthesis.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Parenthesis.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Parenthesis.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Parenthesis.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Parenthesis.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Parenthesis.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Parenthesis.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Parenthesis.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Parenthesis.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Parenthesis.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Parenthesis.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Parenthesis.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Parenthesis.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Parenthesis.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Parenthesis.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Parenthesis.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Parenthesis\"},{\"kind\":4194304,\"name\":\"Match\",\"url\":\"types/Match.html\",\"classes\":\"\"},{\"kind\":4194304,\"name\":\"RuleFunction\",\"url\":\"types/RuleFunction.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/RuleFunction.html#__type\",\"classes\":\"\",\"parent\":\"RuleFunction\"},{\"kind\":4194304,\"name\":\"TriggerFunction\",\"url\":\"types/TriggerFunction.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/TriggerFunction.html#__type\",\"classes\":\"\",\"parent\":\"TriggerFunction\"},{\"kind\":256,\"name\":\"Rule\",\"url\":\"interfaces/Rule.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"interfaces/Rule.html#token\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"noSpace\",\"url\":\"interfaces/Rule.html#noSpace\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"expect\",\"url\":\"interfaces/Rule.html#expect\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"zeroOrMore\",\"url\":\"interfaces/Rule.html#zeroOrMore\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"oneOrMore\",\"url\":\"interfaces/Rule.html#oneOrMore\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"maybe\",\"url\":\"interfaces/Rule.html#maybe\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"or\",\"url\":\"interfaces/Rule.html#or\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":1024,\"name\":\"run\",\"url\":\"interfaces/Rule.html#run\",\"classes\":\"\",\"parent\":\"Rule\"},{\"kind\":256,\"name\":\"Result\",\"url\":\"interfaces/Result.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"success\",\"url\":\"interfaces/Result.html#success\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"pos\",\"url\":\"interfaces/Result.html#pos\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"incrementPos\",\"url\":\"interfaces/Result.html#incrementPos\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"matchedString\",\"url\":\"interfaces/Result.html#matchedString\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"matches\",\"url\":\"interfaces/Result.html#matches\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"numMatches\",\"url\":\"interfaces/Result.html#numMatches\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"results\",\"url\":\"interfaces/Result.html#results\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"errorPos\",\"url\":\"interfaces/Result.html#errorPos\",\"classes\":\"\",\"parent\":\"Result\"},{\"kind\":4194304,\"name\":\"GroupedResults\",\"url\":\"types/GroupedResults.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"Grammar\",\"url\":\"interfaces/Grammar.html\",\"classes\":\"\"},{\"kind\":2048,\"name\":\"begin\",\"url\":\"interfaces/Grammar.html#begin\",\"classes\":\"\",\"parent\":\"Grammar\"},{\"kind\":128,\"name\":\"Parser\",\"url\":\"classes/Parser.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Parser.html#DEBUG\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Parser.html#constructor\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"parse\",\"url\":\"classes/Parser.html#parse\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"matchFail\",\"url\":\"classes/Parser.html#matchFail\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"matchSuccess\",\"url\":\"classes/Parser.html#matchSuccess\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"matchToken\",\"url\":\"classes/Parser.html#matchToken\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"expectOne\",\"url\":\"classes/Parser.html#expectOne\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"expectOneOrMore\",\"url\":\"classes/Parser.html#expectOneOrMore\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"expectZeroOrMore\",\"url\":\"classes/Parser.html#expectZeroOrMore\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":2048,\"name\":\"expect\",\"url\":\"classes/Parser.html#expect\",\"classes\":\"\",\"parent\":\"Parser\"},{\"kind\":128,\"name\":\"PedalMarking\",\"url\":\"classes/PedalMarking.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/PedalMarking.html#DEBUG\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/PedalMarking.html#CATEGORY\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/PedalMarking.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":1024,\"name\":\"GLYPHS\",\"url\":\"classes/PedalMarking.html#GLYPHS\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/PedalMarking.html#type\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/PedalMarking.html#type.__type-1\",\"classes\":\"\",\"parent\":\"PedalMarking.type\"},{\"kind\":1024,\"name\":\"TEXT\",\"url\":\"classes/PedalMarking.html#type.__type-1.TEXT\",\"classes\":\"\",\"parent\":\"PedalMarking.type.__type\"},{\"kind\":1024,\"name\":\"BRACKET\",\"url\":\"classes/PedalMarking.html#type.__type-1.BRACKET\",\"classes\":\"\",\"parent\":\"PedalMarking.type.__type\"},{\"kind\":1024,\"name\":\"MIXED\",\"url\":\"classes/PedalMarking.html#type.__type-1.MIXED\",\"classes\":\"\",\"parent\":\"PedalMarking.type.__type\"},{\"kind\":1024,\"name\":\"typeString\",\"url\":\"classes/PedalMarking.html#typeString\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"createSustain\",\"url\":\"classes/PedalMarking.html#createSustain\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"createSostenuto\",\"url\":\"classes/PedalMarking.html#createSostenuto\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"createUnaCorda\",\"url\":\"classes/PedalMarking.html#createUnaCorda\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/PedalMarking.html#constructor\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/PedalMarking.html#render_options\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/PedalMarking.html#render_options.__type\",\"classes\":\"\",\"parent\":\"PedalMarking.render_options\"},{\"kind\":1024,\"name\":\"color\",\"url\":\"classes/PedalMarking.html#render_options.__type.color\",\"classes\":\"\",\"parent\":\"PedalMarking.render_options.__type\"},{\"kind\":1024,\"name\":\"bracket_height\",\"url\":\"classes/PedalMarking.html#render_options.__type.bracket_height\",\"classes\":\"\",\"parent\":\"PedalMarking.render_options.__type\"},{\"kind\":1024,\"name\":\"text_margin_right\",\"url\":\"classes/PedalMarking.html#render_options.__type.text_margin_right\",\"classes\":\"\",\"parent\":\"PedalMarking.render_options.__type\"},{\"kind\":1024,\"name\":\"bracket_line_width\",\"url\":\"classes/PedalMarking.html#render_options.__type.bracket_line_width\",\"classes\":\"\",\"parent\":\"PedalMarking.render_options.__type\"},{\"kind\":2048,\"name\":\"setType\",\"url\":\"classes/PedalMarking.html#setType\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setCustomText\",\"url\":\"classes/PedalMarking.html#setCustomText\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/PedalMarking.html#setLine\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"drawBracketed\",\"url\":\"classes/PedalMarking.html#drawBracketed\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"drawText\",\"url\":\"classes/PedalMarking.html#drawText\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/PedalMarking.html#draw\",\"classes\":\"\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/PedalMarking.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/PedalMarking.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/PedalMarking.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/PedalMarking.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/PedalMarking.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/PedalMarking.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/PedalMarking.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/PedalMarking.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/PedalMarking.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/PedalMarking.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/PedalMarking.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/PedalMarking.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/PedalMarking.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/PedalMarking.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/PedalMarking.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/PedalMarking.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/PedalMarking.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/PedalMarking.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/PedalMarking.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/PedalMarking.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/PedalMarking.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/PedalMarking.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/PedalMarking.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/PedalMarking.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/PedalMarking.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/PedalMarking.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/PedalMarking.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/PedalMarking.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/PedalMarking.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/PedalMarking.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/PedalMarking.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/PedalMarking.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/PedalMarking.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/PedalMarking.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PedalMarking\"},{\"kind\":256,\"name\":\"RegistryUpdate\",\"url\":\"interfaces/RegistryUpdate.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/RegistryUpdate.html#id\",\"classes\":\"\",\"parent\":\"RegistryUpdate\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"interfaces/RegistryUpdate.html#name\",\"classes\":\"\",\"parent\":\"RegistryUpdate\"},{\"kind\":1024,\"name\":\"value\",\"url\":\"interfaces/RegistryUpdate.html#value\",\"classes\":\"\",\"parent\":\"RegistryUpdate\"},{\"kind\":1024,\"name\":\"oldValue\",\"url\":\"interfaces/RegistryUpdate.html#oldValue\",\"classes\":\"\",\"parent\":\"RegistryUpdate\"},{\"kind\":128,\"name\":\"Registry\",\"url\":\"classes/Registry.html\",\"classes\":\"\"},{\"kind\":2048,\"name\":\"getDefaultRegistry\",\"url\":\"classes/Registry.html#getDefaultRegistry\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"enableDefaultRegistry\",\"url\":\"classes/Registry.html#enableDefaultRegistry\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"disableDefaultRegistry\",\"url\":\"classes/Registry.html#disableDefaultRegistry\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Registry.html#constructor\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"clear\",\"url\":\"classes/Registry.html#clear\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"setIndexValue\",\"url\":\"classes/Registry.html#setIndexValue\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"updateIndex\",\"url\":\"classes/Registry.html#updateIndex\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"register\",\"url\":\"classes/Registry.html#register\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"getElementById\",\"url\":\"classes/Registry.html#getElementById\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"getElementsByAttribute\",\"url\":\"classes/Registry.html#getElementsByAttribute\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"getElementsByType\",\"url\":\"classes/Registry.html#getElementsByType\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"getElementsByClass\",\"url\":\"classes/Registry.html#getElementsByClass\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":2048,\"name\":\"onUpdate\",\"url\":\"classes/Registry.html#onUpdate\",\"classes\":\"\",\"parent\":\"Registry\"},{\"kind\":64,\"name\":\"drawDot\",\"url\":\"functions/drawDot.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"TextMeasure\",\"url\":\"interfaces/TextMeasure.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"interfaces/TextMeasure.html#x\",\"classes\":\"\",\"parent\":\"TextMeasure\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"interfaces/TextMeasure.html#y\",\"classes\":\"\",\"parent\":\"TextMeasure\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/TextMeasure.html#width\",\"classes\":\"\",\"parent\":\"TextMeasure\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/TextMeasure.html#height\",\"classes\":\"\",\"parent\":\"TextMeasure\"},{\"kind\":256,\"name\":\"GroupAttributes\",\"url\":\"interfaces/GroupAttributes.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"pointerBBox\",\"url\":\"interfaces/GroupAttributes.html#pointerBBox\",\"classes\":\"\",\"parent\":\"GroupAttributes\"},{\"kind\":128,\"name\":\"RenderContext\",\"url\":\"classes/RenderContext.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/RenderContext.html#CATEGORY\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RenderContext.html#constructor\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"clear\",\"url\":\"classes/RenderContext.html#clear\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setFillStyle\",\"url\":\"classes/RenderContext.html#setFillStyle\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setBackgroundFillStyle\",\"url\":\"classes/RenderContext.html#setBackgroundFillStyle\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setStrokeStyle\",\"url\":\"classes/RenderContext.html#setStrokeStyle\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setShadowColor\",\"url\":\"classes/RenderContext.html#setShadowColor\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setShadowBlur\",\"url\":\"classes/RenderContext.html#setShadowBlur\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setLineWidth\",\"url\":\"classes/RenderContext.html#setLineWidth\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setLineCap\",\"url\":\"classes/RenderContext.html#setLineCap\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setLineDash\",\"url\":\"classes/RenderContext.html#setLineDash\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"scale\",\"url\":\"classes/RenderContext.html#scale\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"rect\",\"url\":\"classes/RenderContext.html#rect\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"resize\",\"url\":\"classes/RenderContext.html#resize\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"fillRect\",\"url\":\"classes/RenderContext.html#fillRect\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"clearRect\",\"url\":\"classes/RenderContext.html#clearRect\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"beginPath\",\"url\":\"classes/RenderContext.html#beginPath\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"moveTo\",\"url\":\"classes/RenderContext.html#moveTo\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"lineTo\",\"url\":\"classes/RenderContext.html#lineTo\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"bezierCurveTo\",\"url\":\"classes/RenderContext.html#bezierCurveTo\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"quadraticCurveTo\",\"url\":\"classes/RenderContext.html#quadraticCurveTo\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"arc\",\"url\":\"classes/RenderContext.html#arc\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"fill\",\"url\":\"classes/RenderContext.html#fill\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"stroke\",\"url\":\"classes/RenderContext.html#stroke\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"closePath\",\"url\":\"classes/RenderContext.html#closePath\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"fillText\",\"url\":\"classes/RenderContext.html#fillText\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"save\",\"url\":\"classes/RenderContext.html#save\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"restore\",\"url\":\"classes/RenderContext.html#restore\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"openGroup\",\"url\":\"classes/RenderContext.html#openGroup\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"closeGroup\",\"url\":\"classes/RenderContext.html#closeGroup\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"add\",\"url\":\"classes/RenderContext.html#add\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"measureText\",\"url\":\"classes/RenderContext.html#measureText\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":262144,\"name\":\"fillStyle\",\"url\":\"classes/RenderContext.html#fillStyle\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":262144,\"name\":\"strokeStyle\",\"url\":\"classes/RenderContext.html#strokeStyle\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/RenderContext.html#setFont\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/RenderContext.html#getFont\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/RenderContext.html#font\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":2048,\"name\":\"setRawFont\",\"url\":\"classes/RenderContext.html#setRawFont\",\"classes\":\"\",\"parent\":\"RenderContext\"},{\"kind\":4194304,\"name\":\"ContextBuilder\",\"url\":\"types/ContextBuilder.html\",\"classes\":\"\"},{\"kind\":8,\"name\":\"RendererBackends\",\"url\":\"enums/RendererBackends.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"CANVAS\",\"url\":\"enums/RendererBackends.html#CANVAS\",\"classes\":\"\",\"parent\":\"RendererBackends\"},{\"kind\":16,\"name\":\"SVG\",\"url\":\"enums/RendererBackends.html#SVG\",\"classes\":\"\",\"parent\":\"RendererBackends\"},{\"kind\":8,\"name\":\"RendererLineEndType\",\"url\":\"enums/RendererLineEndType.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"NONE\",\"url\":\"enums/RendererLineEndType.html#NONE\",\"classes\":\"\",\"parent\":\"RendererLineEndType\"},{\"kind\":16,\"name\":\"UP\",\"url\":\"enums/RendererLineEndType.html#UP\",\"classes\":\"\",\"parent\":\"RendererLineEndType\"},{\"kind\":16,\"name\":\"DOWN\",\"url\":\"enums/RendererLineEndType.html#DOWN\",\"classes\":\"\",\"parent\":\"RendererLineEndType\"},{\"kind\":128,\"name\":\"Renderer\",\"url\":\"classes/Renderer.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"Backends\",\"url\":\"classes/Renderer.html#Backends\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":1024,\"name\":\"LineEndType\",\"url\":\"classes/Renderer.html#LineEndType\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":1024,\"name\":\"lastContext\",\"url\":\"classes/Renderer.html#lastContext\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":2048,\"name\":\"buildContext\",\"url\":\"classes/Renderer.html#buildContext\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":2048,\"name\":\"getCanvasContext\",\"url\":\"classes/Renderer.html#getCanvasContext\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":2048,\"name\":\"getSVGContext\",\"url\":\"classes/Renderer.html#getSVGContext\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":2048,\"name\":\"drawDashedLine\",\"url\":\"classes/Renderer.html#drawDashedLine\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Renderer.html#constructor\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":2048,\"name\":\"resize\",\"url\":\"classes/Renderer.html#resize\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Renderer.html#getContext\",\"classes\":\"\",\"parent\":\"Renderer\"},{\"kind\":128,\"name\":\"RepeatNote\",\"url\":\"classes/RepeatNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/RepeatNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/RepeatNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/RepeatNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/RepeatNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RepeatNote.html#constructor\",\"classes\":\"\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setGlyph\",\"url\":\"classes/RepeatNote.html#setGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/RepeatNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/RepeatNote.html#preFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"drawModifiers\",\"url\":\"classes/RepeatNote.html#drawModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/RepeatNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/RepeatNote.html#draw-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/RepeatNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/RepeatNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/RepeatNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/RepeatNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RepeatNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/RepeatNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/RepeatNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/RepeatNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/RepeatNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/RepeatNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/RepeatNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/RepeatNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/RepeatNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/RepeatNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/RepeatNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/RepeatNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/RepeatNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/RepeatNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"RepeatNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/RepeatNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/RepeatNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/RepeatNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/RepeatNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/RepeatNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/RepeatNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/RepeatNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/RepeatNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/RepeatNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/RepeatNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/RepeatNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/RepeatNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/RepeatNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/RepeatNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/RepeatNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/RepeatNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/RepeatNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/RepeatNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/RepeatNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/RepeatNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/RepeatNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/RepeatNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/RepeatNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/RepeatNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/RepeatNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/RepeatNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/RepeatNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/RepeatNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/RepeatNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/RepeatNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/RepeatNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/RepeatNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/RepeatNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/RepeatNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RepeatNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"RepeatNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/RepeatNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"RepeatNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/RepeatNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"RepeatNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/RepeatNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/RepeatNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/RepeatNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/RepeatNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/RepeatNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/RepeatNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/RepeatNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/RepeatNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/RepeatNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/RepeatNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/RepeatNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/RepeatNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/RepeatNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/RepeatNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/RepeatNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/RepeatNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/RepeatNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/RepeatNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/RepeatNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/RepeatNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/RepeatNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/RepeatNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/RepeatNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/RepeatNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/RepeatNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/RepeatNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/RepeatNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/RepeatNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/RepeatNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/RepeatNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/RepeatNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/RepeatNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/RepeatNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/RepeatNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/RepeatNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/RepeatNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/RepeatNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/RepeatNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/RepeatNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/RepeatNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/RepeatNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/RepeatNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/RepeatNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/RepeatNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/RepeatNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/RepeatNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/RepeatNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/RepeatNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/RepeatNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/RepeatNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/RepeatNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/RepeatNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/RepeatNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/RepeatNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/RepeatNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/RepeatNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/RepeatNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/RepeatNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/RepeatNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/RepeatNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/RepeatNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/RepeatNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/RepeatNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/RepeatNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/RepeatNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/RepeatNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/RepeatNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/RepeatNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/RepeatNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/RepeatNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/RepeatNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/RepeatNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/RepeatNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/RepeatNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/RepeatNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RepeatNote\"},{\"kind\":256,\"name\":\"StaveLineConfig\",\"url\":\"interfaces/StaveLineConfig.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"visible\",\"url\":\"interfaces/StaveLineConfig.html#visible\",\"classes\":\"\",\"parent\":\"StaveLineConfig\"},{\"kind\":256,\"name\":\"StaveOptions\",\"url\":\"interfaces/StaveOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"bottom_text_position\",\"url\":\"interfaces/StaveOptions.html#bottom_text_position\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"line_config\",\"url\":\"interfaces/StaveOptions.html#line_config\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"space_below_staff_ln\",\"url\":\"interfaces/StaveOptions.html#space_below_staff_ln\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"space_above_staff_ln\",\"url\":\"interfaces/StaveOptions.html#space_above_staff_ln\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"vertical_bar_width\",\"url\":\"interfaces/StaveOptions.html#vertical_bar_width\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"fill_style\",\"url\":\"interfaces/StaveOptions.html#fill_style\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"left_bar\",\"url\":\"interfaces/StaveOptions.html#left_bar\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"right_bar\",\"url\":\"interfaces/StaveOptions.html#right_bar\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"spacing_between_lines_px\",\"url\":\"interfaces/StaveOptions.html#spacing_between_lines_px\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"top_text_position\",\"url\":\"interfaces/StaveOptions.html#top_text_position\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":1024,\"name\":\"num_lines\",\"url\":\"interfaces/StaveOptions.html#num_lines\",\"classes\":\"\",\"parent\":\"StaveOptions\"},{\"kind\":128,\"name\":\"Stave\",\"url\":\"classes/Stave.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Stave.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Stave.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"defaultPadding\",\"url\":\"classes/Stave.html#defaultPadding\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"rightPadding\",\"url\":\"classes/Stave.html#rightPadding\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"formatBegModifiers\",\"url\":\"classes/Stave.html#formatBegModifiers\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Stave.html#constructor\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"classes/Stave.html#options\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setDefaultLedgerLineStyle\",\"url\":\"classes/Stave.html#setDefaultLedgerLineStyle\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getDefaultLedgerLineStyle\",\"url\":\"classes/Stave.html#getDefaultLedgerLineStyle\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"space\",\"url\":\"classes/Stave.html#space\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"resetLines\",\"url\":\"classes/Stave.html#resetLines\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setNoteStartX\",\"url\":\"classes/Stave.html#setNoteStartX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getNoteStartX\",\"url\":\"classes/Stave.html#getNoteStartX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getNoteEndX\",\"url\":\"classes/Stave.html#getNoteEndX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getTieStartX\",\"url\":\"classes/Stave.html#getTieStartX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getTieEndX\",\"url\":\"classes/Stave.html#getTieEndX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Stave.html#getX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getNumLines\",\"url\":\"classes/Stave.html#getNumLines\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setNumLines\",\"url\":\"classes/Stave.html#setNumLines\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setY\",\"url\":\"classes/Stave.html#setY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getY\",\"url\":\"classes/Stave.html#getY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getTopLineTopY\",\"url\":\"classes/Stave.html#getTopLineTopY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getBottomLineBottomY\",\"url\":\"classes/Stave.html#getBottomLineBottomY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/Stave.html#setX\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Stave.html#setWidth\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Stave.html#getWidth\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Stave.html#getStyle\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setMeasure\",\"url\":\"classes/Stave.html#setMeasure\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getMeasure\",\"url\":\"classes/Stave.html#getMeasure\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getModifierXShift\",\"url\":\"classes/Stave.html#getModifierXShift\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setRepetitionType\",\"url\":\"classes/Stave.html#setRepetitionType\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setVoltaType\",\"url\":\"classes/Stave.html#setVoltaType\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setSection\",\"url\":\"classes/Stave.html#setSection\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setTempo\",\"url\":\"classes/Stave.html#setTempo\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setText\",\"url\":\"classes/Stave.html#setText\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getHeight\",\"url\":\"classes/Stave.html#getHeight\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getSpacingBetweenLines\",\"url\":\"classes/Stave.html#getSpacingBetweenLines\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Stave.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getBottomY\",\"url\":\"classes/Stave.html#getBottomY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getBottomLineY\",\"url\":\"classes/Stave.html#getBottomLineY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getYForLine\",\"url\":\"classes/Stave.html#getYForLine\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getLineForY\",\"url\":\"classes/Stave.html#getLineForY\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/Stave.html#getYForTopText\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/Stave.html#getYForBottomText\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getYForNote\",\"url\":\"classes/Stave.html#getYForNote\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getYForGlyphs\",\"url\":\"classes/Stave.html#getYForGlyphs\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/Stave.html#addModifier\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addEndModifier\",\"url\":\"classes/Stave.html#addEndModifier\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setBegBarType\",\"url\":\"classes/Stave.html#setBegBarType\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setEndBarType\",\"url\":\"classes/Stave.html#setEndBarType\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setClef\",\"url\":\"classes/Stave.html#setClef\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getClef\",\"url\":\"classes/Stave.html#getClef\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setEndClef\",\"url\":\"classes/Stave.html#setEndClef\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getEndClef\",\"url\":\"classes/Stave.html#getEndClef\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setKeySignature\",\"url\":\"classes/Stave.html#setKeySignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setEndKeySignature\",\"url\":\"classes/Stave.html#setEndKeySignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setTimeSignature\",\"url\":\"classes/Stave.html#setTimeSignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setEndTimeSignature\",\"url\":\"classes/Stave.html#setEndTimeSignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addKeySignature\",\"url\":\"classes/Stave.html#addKeySignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addClef\",\"url\":\"classes/Stave.html#addClef\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addEndClef\",\"url\":\"classes/Stave.html#addEndClef\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addTimeSignature\",\"url\":\"classes/Stave.html#addTimeSignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addEndTimeSignature\",\"url\":\"classes/Stave.html#addEndTimeSignature\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addTrebleGlyph\",\"url\":\"classes/Stave.html#addTrebleGlyph\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/Stave.html#getModifiers\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"sortByCategory\",\"url\":\"classes/Stave.html#sortByCategory\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Stave.html#format\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Stave.html#draw\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getVerticalBarWidth\",\"url\":\"classes/Stave.html#getVerticalBarWidth\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getConfigForLines\",\"url\":\"classes/Stave.html#getConfigForLines\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setConfigForLine\",\"url\":\"classes/Stave.html#setConfigForLine\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setConfigForLines\",\"url\":\"classes/Stave.html#setConfigForLines\",\"classes\":\"\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Stave.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Stave.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Stave.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Stave.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Stave.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Stave.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Stave.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Stave.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Stave.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Stave.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Stave.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Stave.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Stave.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Stave.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Stave.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Stave.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Stave.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Stave.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Stave.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Stave.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Stave.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Stave.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Stave.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Stave.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Stave.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Stave.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Stave.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Stave.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Stave.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Stave.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Stave.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Stave.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stave\"},{\"kind\":8,\"name\":\"BarlineType\",\"url\":\"enums/BarlineType.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"SINGLE\",\"url\":\"enums/BarlineType.html#SINGLE\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":16,\"name\":\"DOUBLE\",\"url\":\"enums/BarlineType.html#DOUBLE\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":16,\"name\":\"END\",\"url\":\"enums/BarlineType.html#END\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":16,\"name\":\"REPEAT_BEGIN\",\"url\":\"enums/BarlineType.html#REPEAT_BEGIN\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":16,\"name\":\"REPEAT_END\",\"url\":\"enums/BarlineType.html#REPEAT_END\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":16,\"name\":\"REPEAT_BOTH\",\"url\":\"enums/BarlineType.html#REPEAT_BOTH\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":16,\"name\":\"NONE\",\"url\":\"enums/BarlineType.html#NONE\",\"classes\":\"\",\"parent\":\"BarlineType\"},{\"kind\":128,\"name\":\"Barline\",\"url\":\"classes/Barline.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Barline.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"type\",\"url\":\"classes/Barline.html#type\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"typeString\",\"url\":\"classes/Barline.html#typeString\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Barline.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Barline.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Barline.html#constructor\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getType\",\"url\":\"classes/Barline.html#getType\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setType\",\"url\":\"classes/Barline.html#setType\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Barline.html#draw\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"drawVerticalBar\",\"url\":\"classes/Barline.html#drawVerticalBar\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"drawVerticalEndBar\",\"url\":\"classes/Barline.html#drawVerticalEndBar\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"drawRepeatBar\",\"url\":\"classes/Barline.html#drawRepeatBar\",\"classes\":\"\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Barline.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Barline.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Barline.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Barline.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Barline.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Barline.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Barline.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Barline.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/Barline.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/Barline.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/Barline.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/Barline.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/Barline.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/Barline.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Barline.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Barline.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Barline.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Barline.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Barline.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Barline.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Barline.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Barline.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Barline.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Barline.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Barline.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Barline.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Barline.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Barline.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Barline.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Barline.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Barline.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Barline.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Barline.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Barline.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Barline.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Barline.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Barline.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Barline.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Barline.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Barline.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Barline.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Barline.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Barline.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Barline.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Barline.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Barline.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Barline.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Barline.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Barline\"},{\"kind\":4194304,\"name\":\"StaveConnectorType\",\"url\":\"types/StaveConnectorType.html\",\"classes\":\"\"},{\"kind\":128,\"name\":\"StaveConnector\",\"url\":\"classes/StaveConnector.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveConnector.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveConnector.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/StaveConnector.html#type\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":1024,\"name\":\"typeString\",\"url\":\"classes/StaveConnector.html#typeString\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveConnector.html#constructor\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":1024,\"name\":\"top_stave\",\"url\":\"classes/StaveConnector.html#top_stave\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":1024,\"name\":\"bottom_stave\",\"url\":\"classes/StaveConnector.html#bottom_stave\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":1024,\"name\":\"thickness\",\"url\":\"classes/StaveConnector.html#thickness\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setType\",\"url\":\"classes/StaveConnector.html#setType\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getType\",\"url\":\"classes/StaveConnector.html#getType\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setText\",\"url\":\"classes/StaveConnector.html#setText\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/StaveConnector.html#setXShift\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/StaveConnector.html#getXShift\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveConnector.html#draw\",\"classes\":\"\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveConnector.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveConnector.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveConnector.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveConnector.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveConnector.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveConnector.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveConnector.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveConnector.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveConnector.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveConnector.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveConnector.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveConnector.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveConnector.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveConnector.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveConnector.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveConnector.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveConnector.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveConnector.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveConnector.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveConnector.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveConnector.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveConnector.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveConnector.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveConnector.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveConnector.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveConnector.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveConnector.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveConnector.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveConnector.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveConnector.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveConnector.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveConnector.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveConnector.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveConnector.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveConnector\"},{\"kind\":256,\"name\":\"StaveHairpinRenderOptions\",\"url\":\"interfaces/StaveHairpinRenderOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"right_shift_ticks\",\"url\":\"interfaces/StaveHairpinRenderOptions.html#right_shift_ticks\",\"classes\":\"\",\"parent\":\"StaveHairpinRenderOptions\"},{\"kind\":1024,\"name\":\"left_shift_ticks\",\"url\":\"interfaces/StaveHairpinRenderOptions.html#left_shift_ticks\",\"classes\":\"\",\"parent\":\"StaveHairpinRenderOptions\"},{\"kind\":1024,\"name\":\"left_shift_px\",\"url\":\"interfaces/StaveHairpinRenderOptions.html#left_shift_px\",\"classes\":\"\",\"parent\":\"StaveHairpinRenderOptions\"},{\"kind\":1024,\"name\":\"right_shift_px\",\"url\":\"interfaces/StaveHairpinRenderOptions.html#right_shift_px\",\"classes\":\"\",\"parent\":\"StaveHairpinRenderOptions\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/StaveHairpinRenderOptions.html#height\",\"classes\":\"\",\"parent\":\"StaveHairpinRenderOptions\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"interfaces/StaveHairpinRenderOptions.html#y_shift\",\"classes\":\"\",\"parent\":\"StaveHairpinRenderOptions\"},{\"kind\":128,\"name\":\"StaveHairpin\",\"url\":\"classes/StaveHairpin.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveHairpin.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/StaveHairpin.html#type\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveHairpin.html#type.__type\",\"classes\":\"\",\"parent\":\"StaveHairpin.type\"},{\"kind\":1024,\"name\":\"CRESC\",\"url\":\"classes/StaveHairpin.html#type.__type.CRESC\",\"classes\":\"\",\"parent\":\"StaveHairpin.type.__type\"},{\"kind\":1024,\"name\":\"DECRESC\",\"url\":\"classes/StaveHairpin.html#type.__type.DECRESC\",\"classes\":\"\",\"parent\":\"StaveHairpin.type.__type\"},{\"kind\":2048,\"name\":\"FormatByTicksAndDraw\",\"url\":\"classes/StaveHairpin.html#FormatByTicksAndDraw\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveHairpin.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveHairpin.html#constructor\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/StaveHairpin.html#render_options\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/StaveHairpin.html#setPosition\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setRenderOptions\",\"url\":\"classes/StaveHairpin.html#setRenderOptions\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setNotes\",\"url\":\"classes/StaveHairpin.html#setNotes\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"renderHairpin\",\"url\":\"classes/StaveHairpin.html#renderHairpin\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveHairpin.html#draw\",\"classes\":\"\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveHairpin.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveHairpin.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveHairpin.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveHairpin.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveHairpin.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveHairpin.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveHairpin.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveHairpin.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveHairpin.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveHairpin.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveHairpin.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveHairpin.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveHairpin.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveHairpin.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveHairpin.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveHairpin.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveHairpin.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveHairpin.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveHairpin.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveHairpin.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveHairpin.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveHairpin.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveHairpin.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveHairpin.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveHairpin.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveHairpin.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveHairpin.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveHairpin.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveHairpin.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveHairpin.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveHairpin.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveHairpin.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveHairpin.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveHairpin.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveHairpin\"},{\"kind\":256,\"name\":\"StaveLineNotes\",\"url\":\"interfaces/StaveLineNotes.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"first_note\",\"url\":\"interfaces/StaveLineNotes.html#first_note\",\"classes\":\"\",\"parent\":\"StaveLineNotes\"},{\"kind\":1024,\"name\":\"first_indices\",\"url\":\"interfaces/StaveLineNotes.html#first_indices\",\"classes\":\"\",\"parent\":\"StaveLineNotes\"},{\"kind\":1024,\"name\":\"last_note\",\"url\":\"interfaces/StaveLineNotes.html#last_note\",\"classes\":\"\",\"parent\":\"StaveLineNotes\"},{\"kind\":1024,\"name\":\"last_indices\",\"url\":\"interfaces/StaveLineNotes.html#last_indices\",\"classes\":\"\",\"parent\":\"StaveLineNotes\"},{\"kind\":128,\"name\":\"StaveLine\",\"url\":\"classes/StaveLine.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveLine.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveLine.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":1024,\"name\":\"TextVerticalPosition\",\"url\":\"classes/StaveLine.html#TextVerticalPosition\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveLine.html#TextVerticalPosition.__type-1\",\"classes\":\"\",\"parent\":\"StaveLine.TextVerticalPosition\"},{\"kind\":1024,\"name\":\"TOP\",\"url\":\"classes/StaveLine.html#TextVerticalPosition.__type-1.TOP\",\"classes\":\"\",\"parent\":\"StaveLine.TextVerticalPosition.__type\"},{\"kind\":1024,\"name\":\"BOTTOM\",\"url\":\"classes/StaveLine.html#TextVerticalPosition.__type-1.BOTTOM\",\"classes\":\"\",\"parent\":\"StaveLine.TextVerticalPosition.__type\"},{\"kind\":1024,\"name\":\"TextJustification\",\"url\":\"classes/StaveLine.html#TextJustification\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveLine.html#constructor\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/StaveLine.html#render_options\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveLine.html#render_options.__type\",\"classes\":\"\",\"parent\":\"StaveLine.render_options\"},{\"kind\":1024,\"name\":\"padding_left\",\"url\":\"classes/StaveLine.html#render_options.__type.padding_left\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"padding_right\",\"url\":\"classes/StaveLine.html#render_options.__type.padding_right\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"line_width\",\"url\":\"classes/StaveLine.html#render_options.__type.line_width\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"line_dash\",\"url\":\"classes/StaveLine.html#render_options.__type.line_dash\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"rounded_end\",\"url\":\"classes/StaveLine.html#render_options.__type.rounded_end\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"color\",\"url\":\"classes/StaveLine.html#render_options.__type.color\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_start_arrow\",\"url\":\"classes/StaveLine.html#render_options.__type.draw_start_arrow\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_end_arrow\",\"url\":\"classes/StaveLine.html#render_options.__type.draw_end_arrow\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"arrowhead_length\",\"url\":\"classes/StaveLine.html#render_options.__type.arrowhead_length\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"arrowhead_angle\",\"url\":\"classes/StaveLine.html#render_options.__type.arrowhead_angle\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"text_position_vertical\",\"url\":\"classes/StaveLine.html#render_options.__type.text_position_vertical\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":1024,\"name\":\"text_justification\",\"url\":\"classes/StaveLine.html#render_options.__type.text_justification\",\"classes\":\"\",\"parent\":\"StaveLine.render_options.__type\"},{\"kind\":2048,\"name\":\"setText\",\"url\":\"classes/StaveLine.html#setText\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setNotes\",\"url\":\"classes/StaveLine.html#setNotes\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"applyLineStyle\",\"url\":\"classes/StaveLine.html#applyLineStyle\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"applyFontStyle\",\"url\":\"classes/StaveLine.html#applyFontStyle\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveLine.html#draw\",\"classes\":\"\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveLine.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveLine.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveLine.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveLine.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveLine.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveLine.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveLine.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveLine.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveLine.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveLine.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveLine.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveLine.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveLine.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveLine.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveLine.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveLine.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveLine.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveLine.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveLine.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveLine.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveLine.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveLine.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveLine.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveLine.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveLine.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveLine.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveLine.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveLine.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveLine.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveLine.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveLine.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveLine.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveLine.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveLine.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveLine\"},{\"kind\":256,\"name\":\"LayoutMetrics\",\"url\":\"interfaces/LayoutMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"xMin\",\"url\":\"interfaces/LayoutMetrics.html#xMin\",\"classes\":\"\",\"parent\":\"LayoutMetrics\"},{\"kind\":1024,\"name\":\"xMax\",\"url\":\"interfaces/LayoutMetrics.html#xMax\",\"classes\":\"\",\"parent\":\"LayoutMetrics\"},{\"kind\":1024,\"name\":\"paddingLeft\",\"url\":\"interfaces/LayoutMetrics.html#paddingLeft\",\"classes\":\"\",\"parent\":\"LayoutMetrics\"},{\"kind\":1024,\"name\":\"paddingRight\",\"url\":\"interfaces/LayoutMetrics.html#paddingRight\",\"classes\":\"\",\"parent\":\"LayoutMetrics\"},{\"kind\":8,\"name\":\"StaveModifierPosition\",\"url\":\"enums/StaveModifierPosition.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"CENTER\",\"url\":\"enums/StaveModifierPosition.html#CENTER\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":16,\"name\":\"LEFT\",\"url\":\"enums/StaveModifierPosition.html#LEFT\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":16,\"name\":\"RIGHT\",\"url\":\"enums/StaveModifierPosition.html#RIGHT\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":16,\"name\":\"ABOVE\",\"url\":\"enums/StaveModifierPosition.html#ABOVE\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":16,\"name\":\"BELOW\",\"url\":\"enums/StaveModifierPosition.html#BELOW\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":16,\"name\":\"BEGIN\",\"url\":\"enums/StaveModifierPosition.html#BEGIN\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":16,\"name\":\"END\",\"url\":\"enums/StaveModifierPosition.html#END\",\"classes\":\"\",\"parent\":\"StaveModifierPosition\"},{\"kind\":128,\"name\":\"StaveModifier\",\"url\":\"classes/StaveModifier.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveModifier.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/StaveModifier.html#Position\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveModifier.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveModifier.html#constructor\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/StaveModifier.html#getPosition\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/StaveModifier.html#setPosition\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/StaveModifier.html#getStave\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/StaveModifier.html#checkStave\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/StaveModifier.html#setStave\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StaveModifier.html#getWidth\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StaveModifier.html#setWidth\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/StaveModifier.html#getX\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/StaveModifier.html#setX\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/StaveModifier.html#placeGlyphOnLine\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/StaveModifier.html#getPadding\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/StaveModifier.html#setPadding\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/StaveModifier.html#setLayoutMetrics\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/StaveModifier.html#getLayoutMetrics\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveModifier.html#draw\",\"classes\":\"\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveModifier.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveModifier.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveModifier.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveModifier.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveModifier.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveModifier.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveModifier.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveModifier.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveModifier.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveModifier.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveModifier.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveModifier.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveModifier.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveModifier.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveModifier.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveModifier.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveModifier.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveModifier.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveModifier.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveModifier.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveModifier.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveModifier.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveModifier.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveModifier.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveModifier.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveModifier.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveModifier.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveModifier.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveModifier.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveModifier.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveModifier.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveModifier.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveModifier.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveModifier.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveModifier\"},{\"kind\":256,\"name\":\"StaveNoteHeadBounds\",\"url\":\"interfaces/StaveNoteHeadBounds.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"y_top\",\"url\":\"interfaces/StaveNoteHeadBounds.html#y_top\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"y_bottom\",\"url\":\"interfaces/StaveNoteHeadBounds.html#y_bottom\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"displaced_x\",\"url\":\"interfaces/StaveNoteHeadBounds.html#displaced_x\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"non_displaced_x\",\"url\":\"interfaces/StaveNoteHeadBounds.html#non_displaced_x\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"highest_line\",\"url\":\"interfaces/StaveNoteHeadBounds.html#highest_line\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"lowest_line\",\"url\":\"interfaces/StaveNoteHeadBounds.html#lowest_line\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"highest_displaced_line\",\"url\":\"interfaces/StaveNoteHeadBounds.html#highest_displaced_line\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"lowest_displaced_line\",\"url\":\"interfaces/StaveNoteHeadBounds.html#lowest_displaced_line\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"highest_non_displaced_line\",\"url\":\"interfaces/StaveNoteHeadBounds.html#highest_non_displaced_line\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":1024,\"name\":\"lowest_non_displaced_line\",\"url\":\"interfaces/StaveNoteHeadBounds.html#lowest_non_displaced_line\",\"classes\":\"\",\"parent\":\"StaveNoteHeadBounds\"},{\"kind\":256,\"name\":\"StaveNoteFormatSettings\",\"url\":\"interfaces/StaveNoteFormatSettings.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/StaveNoteFormatSettings.html#line\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"maxLine\",\"url\":\"interfaces/StaveNoteFormatSettings.html#maxLine\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"minLine\",\"url\":\"interfaces/StaveNoteFormatSettings.html#minLine\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"isrest\",\"url\":\"interfaces/StaveNoteFormatSettings.html#isrest\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"stemDirection\",\"url\":\"interfaces/StaveNoteFormatSettings.html#stemDirection\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"stemMax\",\"url\":\"interfaces/StaveNoteFormatSettings.html#stemMax\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"stemMin\",\"url\":\"interfaces/StaveNoteFormatSettings.html#stemMin\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"voice_shift\",\"url\":\"interfaces/StaveNoteFormatSettings.html#voice_shift\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"is_displaced\",\"url\":\"interfaces/StaveNoteFormatSettings.html#is_displaced\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":1024,\"name\":\"note\",\"url\":\"interfaces/StaveNoteFormatSettings.html#note\",\"classes\":\"\",\"parent\":\"StaveNoteFormatSettings\"},{\"kind\":256,\"name\":\"StaveNoteStruct\",\"url\":\"interfaces/StaveNoteStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"interfaces/StaveNoteStruct.html#stem_direction\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"auto_stem\",\"url\":\"interfaces/StaveNoteStruct.html#auto_stem\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"stem_down_x_offset\",\"url\":\"interfaces/StaveNoteStruct.html#stem_down_x_offset\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"stem_up_x_offset\",\"url\":\"interfaces/StaveNoteStruct.html#stem_up_x_offset\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"interfaces/StaveNoteStruct.html#stroke_px\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"interfaces/StaveNoteStruct.html#glyph_font_scale\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"octave_shift\",\"url\":\"interfaces/StaveNoteStruct.html#octave_shift\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"clef\",\"url\":\"interfaces/StaveNoteStruct.html#clef\",\"classes\":\"\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"interfaces/StaveNoteStruct.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/StaveNoteStruct.html#duration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/StaveNoteStruct.html#line\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/StaveNoteStruct.html#dots\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/StaveNoteStruct.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"align_center\",\"url\":\"interfaces/StaveNoteStruct.html#align_center\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":1024,\"name\":\"duration_override\",\"url\":\"interfaces/StaveNoteStruct.html#duration_override\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNoteStruct\"},{\"kind\":128,\"name\":\"StaveNote\",\"url\":\"classes/StaveNote.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/StaveNote.html#DEBUG\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"STEM_UP\",\"url\":\"classes/StaveNote.html#STEM_UP\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"STEM_DOWN\",\"url\":\"classes/StaveNote.html#STEM_DOWN\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"LEDGER_LINE_OFFSET\",\"url\":\"classes/StaveNote.html#LEDGER_LINE_OFFSET\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"minNoteheadPadding\",\"url\":\"classes/StaveNote.html#minNoteheadPadding\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/StaveNote.html#format\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/StaveNote.html#postFormat-2\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/StaveNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/StaveNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveNote.html#constructor\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"minLine\",\"url\":\"classes/StaveNote.html#minLine\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"maxLine\",\"url\":\"classes/StaveNote.html#maxLine\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/StaveNote.html#reset\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/StaveNote.html#setBeam\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"buildStem\",\"url\":\"classes/StaveNote.html#buildStem\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"buildNoteHeads\",\"url\":\"classes/StaveNote.html#buildNoteHeads\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"autoStem\",\"url\":\"classes/StaveNote.html#autoStem\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"calculateOptimalStemDirection\",\"url\":\"classes/StaveNote.html#calculateOptimalStemDirection\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"calculateKeyProps\",\"url\":\"classes/StaveNote.html#calculateKeyProps\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveNote.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/StaveNote.html#getLineNumber\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/StaveNote.html#isRest\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"isChord\",\"url\":\"classes/StaveNote.html#isChord\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/StaveNote.html#hasStem\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"hasFlag\",\"url\":\"classes/StaveNote.html#hasFlag\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemX\",\"url\":\"classes/StaveNote.html#getStemX\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/StaveNote.html#getYForTopText\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/StaveNote.html#getYForBottomText\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/StaveNote.html#setStave\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"isDisplaced\",\"url\":\"classes/StaveNote.html#isDisplaced\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setNoteDisplaced\",\"url\":\"classes/StaveNote.html#setNoteDisplaced\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/StaveNote.html#getTieRightX\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/StaveNote.html#getTieLeftX\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/StaveNote.html#getLineForRest\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/StaveNote.html#getModifierStartXY\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"StaveNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/StaveNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"StaveNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/StaveNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"StaveNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveNote.html#setStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setStemStyle\",\"url\":\"classes/StaveNote.html#setStemStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemStyle\",\"url\":\"classes/StaveNote.html#getStemStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setLedgerLineStyle\",\"url\":\"classes/StaveNote.html#setLedgerLineStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getLedgerLineStyle\",\"url\":\"classes/StaveNote.html#getLedgerLineStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setFlagStyle\",\"url\":\"classes/StaveNote.html#setFlagStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getFlagStyle\",\"url\":\"classes/StaveNote.html#getFlagStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setKeyStyle\",\"url\":\"classes/StaveNote.html#setKeyStyle\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setKeyLine\",\"url\":\"classes/StaveNote.html#setKeyLine\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getKeyLine\",\"url\":\"classes/StaveNote.html#getKeyLine\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getVoiceShiftWidth\",\"url\":\"classes/StaveNote.html#getVoiceShiftWidth\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"calcNoteDisplacements\",\"url\":\"classes/StaveNote.html#calcNoteDisplacements\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/StaveNote.html#preFormat\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getNoteHeadBounds\",\"url\":\"classes/StaveNote.html#getNoteHeadBounds\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getNoteHeadBeginX\",\"url\":\"classes/StaveNote.html#getNoteHeadBeginX\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getNoteHeadEndX\",\"url\":\"classes/StaveNote.html#getNoteHeadEndX\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"noteHeads\",\"url\":\"classes/StaveNote.html#noteHeads\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"note_heads\",\"url\":\"classes/StaveNote.html#note_heads\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"drawLedgerLines\",\"url\":\"classes/StaveNote.html#drawLedgerLines\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"drawModifiers\",\"url\":\"classes/StaveNote.html#drawModifiers\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"shouldDrawFlag\",\"url\":\"classes/StaveNote.html#shouldDrawFlag\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"drawFlag\",\"url\":\"classes/StaveNote.html#drawFlag\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"drawNoteHeads\",\"url\":\"classes/StaveNote.html#drawNoteHeads\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"drawStem\",\"url\":\"classes/StaveNote.html#drawStem\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStaveNoteScale\",\"url\":\"classes/StaveNote.html#getStaveNoteScale\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemExtension\",\"url\":\"classes/StaveNote.html#getStemExtension\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveNote.html#draw-1\",\"classes\":\"\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"classes/StaveNote.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"classes/StaveNote.html#stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStem\",\"url\":\"classes/StaveNote.html#getStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"checkStem\",\"url\":\"classes/StaveNote.html#checkStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setStem\",\"url\":\"classes/StaveNote.html#setStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"buildFlag\",\"url\":\"classes/StaveNote.html#buildFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getBaseCustomNoteHeadGlyphProps\",\"url\":\"classes/StaveNote.html#getBaseCustomNoteHeadGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemLength\",\"url\":\"classes/StaveNote.html#getStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/StaveNote.html#getBeamCount\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemMinimumLength\",\"url\":\"classes/StaveNote.html#getStemMinimumLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/StaveNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setStemDirection\",\"url\":\"classes/StaveNote.html#setStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getCenterGlyphX\",\"url\":\"classes/StaveNote.html#getCenterGlyphX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setStemLength\",\"url\":\"classes/StaveNote.html#setStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/StaveNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveNote.html#getStemExtents.getStemExtents-1.__type-2\",\"classes\":\"\",\"parent\":\"StaveNote.getStemExtents.getStemExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/StaveNote.html#getStemExtents.getStemExtents-1.__type-2.topY\",\"classes\":\"\",\"parent\":\"StaveNote.getStemExtents.getStemExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/StaveNote.html#getStemExtents.getStemExtents-1.__type-2.baseY\",\"classes\":\"\",\"parent\":\"StaveNote.getStemExtents.getStemExtents.__type\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/StaveNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/StaveNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/StaveNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/StaveNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/StaveNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"StaveNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/StaveNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/StaveNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/StaveNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/StaveNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/StaveNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/StaveNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/StaveNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/StaveNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/StaveNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/StaveNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/StaveNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/StaveNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/StaveNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"StaveNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/StaveNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/StaveNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/StaveNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/StaveNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/StaveNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/StaveNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/StaveNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/StaveNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/StaveNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/StaveNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/StaveNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/StaveNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/StaveNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/StaveNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/StaveNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/StaveNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/StaveNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/StaveNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/StaveNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/StaveNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/StaveNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/StaveNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/StaveNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/StaveNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/StaveNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/StaveNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/StaveNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/StaveNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/StaveNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/StaveNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/StaveNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/StaveNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/StaveNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/StaveNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/StaveNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/StaveNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StaveNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StaveNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/StaveNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/StaveNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/StaveNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/StaveNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/StaveNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/StaveNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/StaveNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/StaveNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/StaveNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/StaveNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/StaveNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/StaveNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/StaveNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/StaveNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/StaveNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/StaveNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/StaveNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/StaveNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/StaveNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/StaveNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/StaveNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/StaveNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/StaveNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/StaveNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/StaveNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveNote\"},{\"kind\":128,\"name\":\"Repetition\",\"url\":\"classes/Repetition.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Repetition.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Repetition.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/Repetition.html#type\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Repetition.html#type.__type\",\"classes\":\"\",\"parent\":\"Repetition.type\"},{\"kind\":1024,\"name\":\"NONE\",\"url\":\"classes/Repetition.html#type.__type.NONE\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"CODA_LEFT\",\"url\":\"classes/Repetition.html#type.__type.CODA_LEFT\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"CODA_RIGHT\",\"url\":\"classes/Repetition.html#type.__type.CODA_RIGHT\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"SEGNO_LEFT\",\"url\":\"classes/Repetition.html#type.__type.SEGNO_LEFT\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"SEGNO_RIGHT\",\"url\":\"classes/Repetition.html#type.__type.SEGNO_RIGHT\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"DC\",\"url\":\"classes/Repetition.html#type.__type.DC\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"DC_AL_CODA\",\"url\":\"classes/Repetition.html#type.__type.DC_AL_CODA\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"DC_AL_FINE\",\"url\":\"classes/Repetition.html#type.__type.DC_AL_FINE\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"DS\",\"url\":\"classes/Repetition.html#type.__type.DS\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"DS_AL_CODA\",\"url\":\"classes/Repetition.html#type.__type.DS_AL_CODA\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"DS_AL_FINE\",\"url\":\"classes/Repetition.html#type.__type.DS_AL_FINE\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"FINE\",\"url\":\"classes/Repetition.html#type.__type.FINE\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":1024,\"name\":\"TO_CODA\",\"url\":\"classes/Repetition.html#type.__type.TO_CODA\",\"classes\":\"\",\"parent\":\"Repetition.type.__type\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Repetition.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Repetition.html#constructor\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setShiftX\",\"url\":\"classes/Repetition.html#setShiftX\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setShiftY\",\"url\":\"classes/Repetition.html#setShiftY\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Repetition.html#draw\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"drawCodaFixed\",\"url\":\"classes/Repetition.html#drawCodaFixed\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"drawSignoFixed\",\"url\":\"classes/Repetition.html#drawSignoFixed\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"drawSymbolText\",\"url\":\"classes/Repetition.html#drawSymbolText\",\"classes\":\"\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Repetition.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Repetition.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Repetition.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Repetition.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Repetition.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Repetition.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Repetition.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Repetition.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/Repetition.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/Repetition.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/Repetition.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/Repetition.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/Repetition.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/Repetition.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Repetition.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Repetition.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Repetition.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Repetition.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Repetition.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Repetition.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Repetition.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Repetition.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Repetition.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Repetition.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Repetition.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Repetition.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Repetition.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Repetition.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Repetition.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Repetition.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Repetition.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Repetition.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Repetition.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Repetition.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Repetition.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Repetition.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Repetition.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Repetition.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Repetition.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Repetition.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Repetition.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Repetition.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Repetition.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Repetition.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Repetition.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Repetition.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Repetition.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Repetition.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Repetition\"},{\"kind\":128,\"name\":\"StaveSection\",\"url\":\"classes/StaveSection.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveSection.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveSection.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/StaveSection.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveSection.html#constructor\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setStaveSection\",\"url\":\"classes/StaveSection.html#setStaveSection\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setShiftX\",\"url\":\"classes/StaveSection.html#setShiftX\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setShiftY\",\"url\":\"classes/StaveSection.html#setShiftY\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveSection.html#draw\",\"classes\":\"\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/StaveSection.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/StaveSection.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/StaveSection.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/StaveSection.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/StaveSection.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StaveSection.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StaveSection.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/StaveSection.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/StaveSection.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/StaveSection.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/StaveSection.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/StaveSection.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/StaveSection.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/StaveSection.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveSection.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveSection.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveSection.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveSection.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveSection.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveSection.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveSection.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveSection.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveSection.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveSection.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveSection.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveSection.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveSection.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveSection.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveSection.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveSection.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveSection.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveSection.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveSection.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveSection.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveSection.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveSection.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveSection.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveSection.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveSection.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveSection.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveSection.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveSection.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveSection.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveSection.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveSection.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveSection.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveSection.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveSection.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveSection\"},{\"kind\":256,\"name\":\"StaveTempoOptions\",\"url\":\"interfaces/StaveTempoOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"bpm\",\"url\":\"interfaces/StaveTempoOptions.html#bpm\",\"classes\":\"\",\"parent\":\"StaveTempoOptions\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/StaveTempoOptions.html#duration\",\"classes\":\"\",\"parent\":\"StaveTempoOptions\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/StaveTempoOptions.html#dots\",\"classes\":\"\",\"parent\":\"StaveTempoOptions\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"interfaces/StaveTempoOptions.html#name\",\"classes\":\"\",\"parent\":\"StaveTempoOptions\"},{\"kind\":128,\"name\":\"StaveTempo\",\"url\":\"classes/StaveTempo.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveTempo.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveTempo.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/StaveTempo.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveTempo.html#constructor\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/StaveTempo.html#render_options\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveTempo.html#render_options.__type\",\"classes\":\"\",\"parent\":\"StaveTempo.render_options\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/StaveTempo.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"StaveTempo.render_options.__type\"},{\"kind\":2048,\"name\":\"setTempo\",\"url\":\"classes/StaveTempo.html#setTempo\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setShiftX\",\"url\":\"classes/StaveTempo.html#setShiftX\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setShiftY\",\"url\":\"classes/StaveTempo.html#setShiftY\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveTempo.html#draw\",\"classes\":\"\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/StaveTempo.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/StaveTempo.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/StaveTempo.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/StaveTempo.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/StaveTempo.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StaveTempo.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StaveTempo.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/StaveTempo.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/StaveTempo.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/StaveTempo.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/StaveTempo.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/StaveTempo.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/StaveTempo.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/StaveTempo.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveTempo.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveTempo.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveTempo.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveTempo.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveTempo.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveTempo.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveTempo.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveTempo.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveTempo.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveTempo.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveTempo.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveTempo.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveTempo.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveTempo.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveTempo.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveTempo.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveTempo.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveTempo.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveTempo.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveTempo.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveTempo.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveTempo.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveTempo.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveTempo.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveTempo.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveTempo.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveTempo.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveTempo.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveTempo.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveTempo.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveTempo.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveTempo.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveTempo.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveTempo.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTempo\"},{\"kind\":128,\"name\":\"StaveText\",\"url\":\"classes/StaveText.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveText.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveText.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/StaveText.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveText.html#constructor\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setStaveText\",\"url\":\"classes/StaveText.html#setStaveText\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setShiftX\",\"url\":\"classes/StaveText.html#setShiftX\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setShiftY\",\"url\":\"classes/StaveText.html#setShiftY\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setText\",\"url\":\"classes/StaveText.html#setText\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveText.html#draw\",\"classes\":\"\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/StaveText.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/StaveText.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/StaveText.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/StaveText.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/StaveText.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StaveText.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StaveText.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/StaveText.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/StaveText.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/StaveText.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/StaveText.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/StaveText.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/StaveText.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/StaveText.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveText.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveText.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveText.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveText.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveText.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveText.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveText.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveText.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveText.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveText.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveText.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveText.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveText.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveText.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveText.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveText.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveText.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveText.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveText.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveText.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveText.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveText.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveText.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveText.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveText.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveText.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveText.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveText.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveText.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveText.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveText.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveText.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveText.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveText.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveText\"},{\"kind\":256,\"name\":\"TieNotes\",\"url\":\"interfaces/TieNotes.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"first_note\",\"url\":\"interfaces/TieNotes.html#first_note\",\"classes\":\"\",\"parent\":\"TieNotes\"},{\"kind\":1024,\"name\":\"last_note\",\"url\":\"interfaces/TieNotes.html#last_note\",\"classes\":\"\",\"parent\":\"TieNotes\"},{\"kind\":1024,\"name\":\"first_indices\",\"url\":\"interfaces/TieNotes.html#first_indices\",\"classes\":\"\",\"parent\":\"TieNotes\"},{\"kind\":1024,\"name\":\"last_indices\",\"url\":\"interfaces/TieNotes.html#last_indices\",\"classes\":\"\",\"parent\":\"TieNotes\"},{\"kind\":128,\"name\":\"StaveTie\",\"url\":\"classes/StaveTie.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StaveTie.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StaveTie.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StaveTie.html#constructor\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/StaveTie.html#render_options\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StaveTie.html#render_options.__type\",\"classes\":\"\",\"parent\":\"StaveTie.render_options\"},{\"kind\":1024,\"name\":\"cp2\",\"url\":\"classes/StaveTie.html#render_options.__type.cp2\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":1024,\"name\":\"last_x_shift\",\"url\":\"classes/StaveTie.html#render_options.__type.last_x_shift\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":1024,\"name\":\"tie_spacing\",\"url\":\"classes/StaveTie.html#render_options.__type.tie_spacing\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":1024,\"name\":\"cp1\",\"url\":\"classes/StaveTie.html#render_options.__type.cp1\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":1024,\"name\":\"first_x_shift\",\"url\":\"classes/StaveTie.html#render_options.__type.first_x_shift\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":1024,\"name\":\"text_shift_x\",\"url\":\"classes/StaveTie.html#render_options.__type.text_shift_x\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/StaveTie.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"StaveTie.render_options.__type\"},{\"kind\":2048,\"name\":\"setDirection\",\"url\":\"classes/StaveTie.html#setDirection\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setNotes\",\"url\":\"classes/StaveTie.html#setNotes\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"isPartial\",\"url\":\"classes/StaveTie.html#isPartial\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"renderTie\",\"url\":\"classes/StaveTie.html#renderTie\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"renderText\",\"url\":\"classes/StaveTie.html#renderText\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getNotes\",\"url\":\"classes/StaveTie.html#getNotes\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StaveTie.html#draw\",\"classes\":\"\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StaveTie.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StaveTie.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StaveTie.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StaveTie.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StaveTie.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StaveTie.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StaveTie.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StaveTie.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StaveTie.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StaveTie.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StaveTie.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StaveTie.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StaveTie.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StaveTie.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StaveTie.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StaveTie.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StaveTie.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StaveTie.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StaveTie.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StaveTie.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StaveTie.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StaveTie.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StaveTie.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StaveTie.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StaveTie.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StaveTie.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StaveTie.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StaveTie.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StaveTie.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StaveTie.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StaveTie.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StaveTie.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StaveTie.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StaveTie.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StaveTie\"},{\"kind\":8,\"name\":\"VoltaType\",\"url\":\"enums/VoltaType.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"NONE\",\"url\":\"enums/VoltaType.html#NONE\",\"classes\":\"\",\"parent\":\"VoltaType\"},{\"kind\":16,\"name\":\"BEGIN\",\"url\":\"enums/VoltaType.html#BEGIN\",\"classes\":\"\",\"parent\":\"VoltaType\"},{\"kind\":16,\"name\":\"MID\",\"url\":\"enums/VoltaType.html#MID\",\"classes\":\"\",\"parent\":\"VoltaType\"},{\"kind\":16,\"name\":\"END\",\"url\":\"enums/VoltaType.html#END\",\"classes\":\"\",\"parent\":\"VoltaType\"},{\"kind\":16,\"name\":\"BEGIN_END\",\"url\":\"enums/VoltaType.html#BEGIN_END\",\"classes\":\"\",\"parent\":\"VoltaType\"},{\"kind\":128,\"name\":\"Volta\",\"url\":\"classes/Volta.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Volta.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"type\",\"url\":\"classes/Volta.html#type\",\"classes\":\"\",\"parent\":\"Volta\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Volta.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Volta.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Volta.html#constructor\",\"classes\":\"\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setShiftY\",\"url\":\"classes/Volta.html#setShiftY\",\"classes\":\"\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Volta.html#draw\",\"classes\":\"\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Volta.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Volta.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Volta.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Volta.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Volta.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Volta.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Volta.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Volta.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/Volta.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/Volta.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/Volta.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/Volta.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/Volta.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/Volta.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Volta.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Volta.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Volta.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Volta.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Volta.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Volta.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Volta.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Volta.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Volta.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Volta.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Volta.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Volta.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Volta.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Volta.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Volta.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Volta.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Volta.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Volta.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Volta.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Volta.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Volta.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Volta.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Volta.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Volta.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Volta.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Volta.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Volta.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Volta.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Volta.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Volta.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Volta.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Volta.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Volta.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Volta.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Volta\"},{\"kind\":256,\"name\":\"StemOptions\",\"url\":\"interfaces/StemOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"stem_down_y_base_offset\",\"url\":\"interfaces/StemOptions.html#stem_down_y_base_offset\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"stem_up_y_base_offset\",\"url\":\"interfaces/StemOptions.html#stem_up_y_base_offset\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"stem_down_y_offset\",\"url\":\"interfaces/StemOptions.html#stem_down_y_offset\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"stem_up_y_offset\",\"url\":\"interfaces/StemOptions.html#stem_up_y_offset\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"stemletHeight\",\"url\":\"interfaces/StemOptions.html#stemletHeight\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"isStemlet\",\"url\":\"interfaces/StemOptions.html#isStemlet\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"hide\",\"url\":\"interfaces/StemOptions.html#hide\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"interfaces/StemOptions.html#stem_direction\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"stem_extension\",\"url\":\"interfaces/StemOptions.html#stem_extension\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"y_bottom\",\"url\":\"interfaces/StemOptions.html#y_bottom\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"y_top\",\"url\":\"interfaces/StemOptions.html#y_top\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"x_end\",\"url\":\"interfaces/StemOptions.html#x_end\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":1024,\"name\":\"x_begin\",\"url\":\"interfaces/StemOptions.html#x_begin\",\"classes\":\"\",\"parent\":\"StemOptions\"},{\"kind\":128,\"name\":\"Stem\",\"url\":\"classes/Stem.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/Stem.html#DEBUG\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Stem.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"UP\",\"url\":\"classes/Stem.html#UP\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"DOWN\",\"url\":\"classes/Stem.html#DOWN\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"WIDTH\",\"url\":\"classes/Stem.html#WIDTH\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"HEIGHT\",\"url\":\"classes/Stem.html#HEIGHT\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Stem.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Stem.html#constructor\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setOptions\",\"url\":\"classes/Stem.html#setOptions\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setNoteHeadXBounds\",\"url\":\"classes/Stem.html#setNoteHeadXBounds\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setDirection\",\"url\":\"classes/Stem.html#setDirection\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setExtension\",\"url\":\"classes/Stem.html#setExtension\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getExtension\",\"url\":\"classes/Stem.html#getExtension\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setYBounds\",\"url\":\"classes/Stem.html#setYBounds\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getHeight\",\"url\":\"classes/Stem.html#getHeight\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Stem.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getExtents\",\"url\":\"classes/Stem.html#getExtents\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Stem.html#getExtents.getExtents-1.__type\",\"classes\":\"\",\"parent\":\"Stem.getExtents.getExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/Stem.html#getExtents.getExtents-1.__type.topY\",\"classes\":\"\",\"parent\":\"Stem.getExtents.getExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/Stem.html#getExtents.getExtents-1.__type.baseY\",\"classes\":\"\",\"parent\":\"Stem.getExtents.getExtents.__type\"},{\"kind\":2048,\"name\":\"setVisibility\",\"url\":\"classes/Stem.html#setVisibility\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setStemlet\",\"url\":\"classes/Stem.html#setStemlet\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"adjustHeightForFlag\",\"url\":\"classes/Stem.html#adjustHeightForFlag\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"adjustHeightForBeam\",\"url\":\"classes/Stem.html#adjustHeightForBeam\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Stem.html#draw\",\"classes\":\"\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Stem.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Stem.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Stem.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Stem.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Stem.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Stem.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Stem.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Stem.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Stem.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Stem.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Stem.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Stem.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Stem.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Stem.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Stem.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Stem.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Stem.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Stem.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Stem.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Stem.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Stem.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Stem.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Stem.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Stem.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Stem.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Stem.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Stem.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Stem.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Stem.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Stem.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Stem.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Stem.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Stem.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stem\"},{\"kind\":128,\"name\":\"StemmableNote\",\"url\":\"classes/StemmableNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StemmableNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/StemmableNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/StemmableNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StemmableNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StemmableNote.html#constructor\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"classes/StemmableNote.html#stem_direction\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"classes/StemmableNote.html#stem\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStem\",\"url\":\"classes/StemmableNote.html#getStem\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"checkStem\",\"url\":\"classes/StemmableNote.html#checkStem\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setStem\",\"url\":\"classes/StemmableNote.html#setStem\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"buildStem\",\"url\":\"classes/StemmableNote.html#buildStem\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"buildFlag\",\"url\":\"classes/StemmableNote.html#buildFlag\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getBaseCustomNoteHeadGlyphProps\",\"url\":\"classes/StemmableNote.html#getBaseCustomNoteHeadGlyphProps\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStemLength\",\"url\":\"classes/StemmableNote.html#getStemLength\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/StemmableNote.html#getBeamCount\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStemMinimumLength\",\"url\":\"classes/StemmableNote.html#getStemMinimumLength\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/StemmableNote.html#getStemDirection\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setStemDirection\",\"url\":\"classes/StemmableNote.html#setStemDirection\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStemX\",\"url\":\"classes/StemmableNote.html#getStemX\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getCenterGlyphX\",\"url\":\"classes/StemmableNote.html#getCenterGlyphX\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStemExtension\",\"url\":\"classes/StemmableNote.html#getStemExtension\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setStemLength\",\"url\":\"classes/StemmableNote.html#setStemLength\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/StemmableNote.html#getStemExtents\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StemmableNote.html#getStemExtents.getStemExtents-1.__type-2\",\"classes\":\"\",\"parent\":\"StemmableNote.getStemExtents.getStemExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/StemmableNote.html#getStemExtents.getStemExtents-1.__type-2.topY\",\"classes\":\"\",\"parent\":\"StemmableNote.getStemExtents.getStemExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/StemmableNote.html#getStemExtents.getStemExtents-1.__type-2.baseY\",\"classes\":\"\",\"parent\":\"StemmableNote.getStemExtents.getStemExtents.__type\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/StemmableNote.html#getYForTopText\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/StemmableNote.html#getYForBottomText\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"hasFlag\",\"url\":\"classes/StemmableNote.html#hasFlag\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/StemmableNote.html#postFormat\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"drawStem\",\"url\":\"classes/StemmableNote.html#drawStem\",\"classes\":\"\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/StemmableNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/StemmableNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/StemmableNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/StemmableNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StemmableNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/StemmableNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/StemmableNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/StemmableNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/StemmableNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/StemmableNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/StemmableNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/StemmableNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/StemmableNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/StemmableNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/StemmableNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/StemmableNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/StemmableNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/StemmableNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"StemmableNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/StemmableNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/StemmableNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/StemmableNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/StemmableNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/StemmableNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/StemmableNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/StemmableNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/StemmableNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/StemmableNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/StemmableNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/StemmableNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/StemmableNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/StemmableNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/StemmableNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/StemmableNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/StemmableNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/StemmableNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/StemmableNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/StemmableNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/StemmableNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/StemmableNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/StemmableNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/StemmableNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/StemmableNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/StemmableNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/StemmableNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/StemmableNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/StemmableNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/StemmableNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/StemmableNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/StemmableNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/StemmableNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/StemmableNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/StemmableNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/StemmableNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"StemmableNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/StemmableNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"StemmableNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/StemmableNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"StemmableNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/StemmableNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/StemmableNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/StemmableNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/StemmableNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/StemmableNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/StemmableNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/StemmableNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/StemmableNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/StemmableNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/StemmableNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/StemmableNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/StemmableNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StemmableNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StemmableNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/StemmableNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/StemmableNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/StemmableNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/StemmableNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/StemmableNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/StemmableNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/StemmableNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/StemmableNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/StemmableNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/StemmableNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/StemmableNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/StemmableNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/StemmableNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/StemmableNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/StemmableNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/StemmableNote.html#preFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/StemmableNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/StemmableNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/StemmableNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/StemmableNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/StemmableNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/StemmableNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/StemmableNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/StemmableNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/StemmableNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/StemmableNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StemmableNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StemmableNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StemmableNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StemmableNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StemmableNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StemmableNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StemmableNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StemmableNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StemmableNote.html#draw-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StemmableNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StemmableNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StemmableNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StemmableNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StemmableNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StemmableNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StemmableNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StemmableNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StemmableNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StemmableNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StemmableNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StemmableNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StemmableNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StemmableNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StemmableNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StemmableNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StemmableNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StemmableNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StemmableNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StemmableNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StemmableNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StemmableNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StemmableNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StemmableNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StemmableNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StemmableNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StemmableNote\"},{\"kind\":256,\"name\":\"StringNumberMetrics\",\"url\":\"interfaces/StringNumberMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"verticalPadding\",\"url\":\"interfaces/StringNumberMetrics.html#verticalPadding\",\"classes\":\"\",\"parent\":\"StringNumberMetrics\"},{\"kind\":1024,\"name\":\"stemPadding\",\"url\":\"interfaces/StringNumberMetrics.html#stemPadding\",\"classes\":\"\",\"parent\":\"StringNumberMetrics\"},{\"kind\":1024,\"name\":\"leftPadding\",\"url\":\"interfaces/StringNumberMetrics.html#leftPadding\",\"classes\":\"\",\"parent\":\"StringNumberMetrics\"},{\"kind\":1024,\"name\":\"rightPadding\",\"url\":\"interfaces/StringNumberMetrics.html#rightPadding\",\"classes\":\"\",\"parent\":\"StringNumberMetrics\"},{\"kind\":128,\"name\":\"StringNumber\",\"url\":\"classes/StringNumber.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/StringNumber.html#CATEGORY\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/StringNumber.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"metrics\",\"url\":\"classes/StringNumber.html#metrics\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/StringNumber.html#format\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/StringNumber.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/StringNumber.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/StringNumber.html#constructor\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setLineEndType\",\"url\":\"classes/StringNumber.html#setLineEndType\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setStringNumber\",\"url\":\"classes/StringNumber.html#setStringNumber\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setOffsetX\",\"url\":\"classes/StringNumber.html#setOffsetX\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setOffsetY\",\"url\":\"classes/StringNumber.html#setOffsetY\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setLastNote\",\"url\":\"classes/StringNumber.html#setLastNote\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setDashed\",\"url\":\"classes/StringNumber.html#setDashed\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setDrawCircle\",\"url\":\"classes/StringNumber.html#setDrawCircle\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/StringNumber.html#draw\",\"classes\":\"\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/StringNumber.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/StringNumber.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/StringNumber.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/StringNumber.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/StringNumber.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/StringNumber.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/StringNumber.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/StringNumber.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/StringNumber.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/StringNumber.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/StringNumber.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/StringNumber.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/StringNumber.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/StringNumber.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/StringNumber.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/StringNumber.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/StringNumber.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/StringNumber.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/StringNumber.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/StringNumber.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/StringNumber.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/StringNumber.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/StringNumber.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/StringNumber.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/StringNumber.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/StringNumber.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/StringNumber.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/StringNumber.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/StringNumber.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/StringNumber.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/StringNumber.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/StringNumber.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/StringNumber.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/StringNumber.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/StringNumber.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/StringNumber.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/StringNumber.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/StringNumber.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/StringNumber.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/StringNumber.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/StringNumber.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/StringNumber.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/StringNumber.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/StringNumber.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/StringNumber.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/StringNumber.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/StringNumber.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/StringNumber.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/StringNumber.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/StringNumber.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/StringNumber.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/StringNumber.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/StringNumber.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/StringNumber.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"StringNumber\"},{\"kind\":128,\"name\":\"Stroke\",\"url\":\"classes/Stroke.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Stroke.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":1024,\"name\":\"Type\",\"url\":\"classes/Stroke.html#Type\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Stroke.html#Type.__type-1\",\"classes\":\"\",\"parent\":\"Stroke.Type\"},{\"kind\":1024,\"name\":\"BRUSH_DOWN\",\"url\":\"classes/Stroke.html#Type.__type-1.BRUSH_DOWN\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"BRUSH_UP\",\"url\":\"classes/Stroke.html#Type.__type-1.BRUSH_UP\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"ROLL_DOWN\",\"url\":\"classes/Stroke.html#Type.__type-1.ROLL_DOWN\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"ROLL_UP\",\"url\":\"classes/Stroke.html#Type.__type-1.ROLL_UP\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"RASQUEDO_DOWN\",\"url\":\"classes/Stroke.html#Type.__type-1.RASQUEDO_DOWN\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"RASQUEDO_UP\",\"url\":\"classes/Stroke.html#Type.__type-1.RASQUEDO_UP\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"ARPEGGIO_DIRECTIONLESS\",\"url\":\"classes/Stroke.html#Type.__type-1.ARPEGGIO_DIRECTIONLESS\",\"classes\":\"\",\"parent\":\"Stroke.Type.__type\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Stroke.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Stroke.html#format\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Stroke.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Stroke.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Stroke.html#constructor\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Stroke.html#render_options\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Stroke.html#render_options.__type\",\"classes\":\"\",\"parent\":\"Stroke.render_options\"},{\"kind\":1024,\"name\":\"font_scale\",\"url\":\"classes/Stroke.html#render_options.__type.font_scale\",\"classes\":\"\",\"parent\":\"Stroke.render_options.__type\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Stroke.html#getPosition\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"addEndNote\",\"url\":\"classes/Stroke.html#addEndNote\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Stroke.html#draw\",\"classes\":\"\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Stroke.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Stroke.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Stroke.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Stroke.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Stroke.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Stroke.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Stroke.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Stroke.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Stroke.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Stroke.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Stroke.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Stroke.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Stroke.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Stroke.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Stroke.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Stroke.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Stroke.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Stroke.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Stroke.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Stroke.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Stroke.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Stroke.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Stroke.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Stroke.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Stroke.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Stroke.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Stroke.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Stroke.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Stroke.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Stroke.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Stroke.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Stroke.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Stroke.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Stroke.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Stroke.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Stroke.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Stroke.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Stroke.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Stroke.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Stroke.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Stroke.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Stroke.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Stroke.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Stroke.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Stroke.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Stroke.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Stroke.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Stroke.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Stroke.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Stroke.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Stroke.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Stroke.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Stroke.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Stroke\"},{\"kind\":4194304,\"name\":\"Attributes\",\"url\":\"types/Attributes.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/Attributes.html#__type\",\"classes\":\"\",\"parent\":\"Attributes\"},{\"kind\":1024,\"name\":\"font-family\",\"url\":\"types/Attributes.html#__type.font_family\",\"classes\":\"\",\"parent\":\"Attributes.__type\"},{\"kind\":1024,\"name\":\"font-size\",\"url\":\"types/Attributes.html#__type.font_size\",\"classes\":\"\",\"parent\":\"Attributes.__type\"},{\"kind\":1024,\"name\":\"font-style\",\"url\":\"types/Attributes.html#__type.font_style\",\"classes\":\"\",\"parent\":\"Attributes.__type\"},{\"kind\":1024,\"name\":\"font-weight\",\"url\":\"types/Attributes.html#__type.font_weight\",\"classes\":\"\",\"parent\":\"Attributes.__type\"},{\"kind\":1024,\"name\":\"scaleX\",\"url\":\"types/Attributes.html#__type.scaleX\",\"classes\":\"\",\"parent\":\"Attributes.__type\"},{\"kind\":1024,\"name\":\"scaleY\",\"url\":\"types/Attributes.html#__type.scaleY\",\"classes\":\"\",\"parent\":\"Attributes.__type\"},{\"kind\":256,\"name\":\"State\",\"url\":\"interfaces/State.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"state\",\"url\":\"interfaces/State.html#state\",\"classes\":\"\",\"parent\":\"State\"},{\"kind\":1024,\"name\":\"attributes\",\"url\":\"interfaces/State.html#attributes\",\"classes\":\"\",\"parent\":\"State\"},{\"kind\":1024,\"name\":\"shadow_attributes\",\"url\":\"interfaces/State.html#shadow_attributes\",\"classes\":\"\",\"parent\":\"State\"},{\"kind\":1024,\"name\":\"lineWidth\",\"url\":\"interfaces/State.html#lineWidth\",\"classes\":\"\",\"parent\":\"State\"},{\"kind\":128,\"name\":\"SVGContext\",\"url\":\"classes/SVGContext.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/SVGContext.html#CATEGORY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SVGContext\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/SVGContext.html#constructor\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"element\",\"url\":\"classes/SVGContext.html#element\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"svg\",\"url\":\"classes/SVGContext.html#svg\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"classes/SVGContext.html#width\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"classes/SVGContext.html#height\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"path\",\"url\":\"classes/SVGContext.html#path\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"pen\",\"url\":\"classes/SVGContext.html#pen\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/SVGContext.html#pen.__type\",\"classes\":\"\",\"parent\":\"SVGContext.pen\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/SVGContext.html#pen.__type.x\",\"classes\":\"\",\"parent\":\"SVGContext.pen.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/SVGContext.html#pen.__type.y\",\"classes\":\"\",\"parent\":\"SVGContext.pen.__type\"},{\"kind\":1024,\"name\":\"lineWidth\",\"url\":\"classes/SVGContext.html#lineWidth\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"attributes\",\"url\":\"classes/SVGContext.html#attributes\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"shadow_attributes\",\"url\":\"classes/SVGContext.html#shadow_attributes\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"state\",\"url\":\"classes/SVGContext.html#state\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"state_stack\",\"url\":\"classes/SVGContext.html#state_stack\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"parent\",\"url\":\"classes/SVGContext.html#parent\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"groups\",\"url\":\"classes/SVGContext.html#groups\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":1024,\"name\":\"backgroundFillStyle\",\"url\":\"classes/SVGContext.html#backgroundFillStyle\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"create\",\"url\":\"classes/SVGContext.html#create\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"openGroup\",\"url\":\"classes/SVGContext.html#openGroup\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"closeGroup\",\"url\":\"classes/SVGContext.html#closeGroup\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"add\",\"url\":\"classes/SVGContext.html#add\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setFillStyle\",\"url\":\"classes/SVGContext.html#setFillStyle\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setBackgroundFillStyle\",\"url\":\"classes/SVGContext.html#setBackgroundFillStyle\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setStrokeStyle\",\"url\":\"classes/SVGContext.html#setStrokeStyle\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setShadowColor\",\"url\":\"classes/SVGContext.html#setShadowColor\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setShadowBlur\",\"url\":\"classes/SVGContext.html#setShadowBlur\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setLineWidth\",\"url\":\"classes/SVGContext.html#setLineWidth\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setLineDash\",\"url\":\"classes/SVGContext.html#setLineDash\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setLineCap\",\"url\":\"classes/SVGContext.html#setLineCap\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"resize\",\"url\":\"classes/SVGContext.html#resize\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"scale\",\"url\":\"classes/SVGContext.html#scale\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setViewBox\",\"url\":\"classes/SVGContext.html#setViewBox\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"applyAttributes\",\"url\":\"classes/SVGContext.html#applyAttributes\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"clear\",\"url\":\"classes/SVGContext.html#clear\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"rect\",\"url\":\"classes/SVGContext.html#rect\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"fillRect\",\"url\":\"classes/SVGContext.html#fillRect\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"clearRect\",\"url\":\"classes/SVGContext.html#clearRect\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"beginPath\",\"url\":\"classes/SVGContext.html#beginPath\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"moveTo\",\"url\":\"classes/SVGContext.html#moveTo\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"lineTo\",\"url\":\"classes/SVGContext.html#lineTo\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"bezierCurveTo\",\"url\":\"classes/SVGContext.html#bezierCurveTo\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"quadraticCurveTo\",\"url\":\"classes/SVGContext.html#quadraticCurveTo\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"arc\",\"url\":\"classes/SVGContext.html#arc\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"closePath\",\"url\":\"classes/SVGContext.html#closePath\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"fill\",\"url\":\"classes/SVGContext.html#fill\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"stroke\",\"url\":\"classes/SVGContext.html#stroke\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"measureText\",\"url\":\"classes/SVGContext.html#measureText\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"fillText\",\"url\":\"classes/SVGContext.html#fillText\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"save\",\"url\":\"classes/SVGContext.html#save\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"restore\",\"url\":\"classes/SVGContext.html#restore\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":262144,\"name\":\"fillStyle\",\"url\":\"classes/SVGContext.html#fillStyle\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":262144,\"name\":\"strokeStyle\",\"url\":\"classes/SVGContext.html#strokeStyle\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/SVGContext.html#setFont\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/SVGContext.html#getFont\",\"classes\":\"\",\"parent\":\"SVGContext\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/SVGContext.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SVGContext\"},{\"kind\":2048,\"name\":\"setRawFont\",\"url\":\"classes/SVGContext.html#setRawFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SVGContext\"},{\"kind\":256,\"name\":\"SystemFormatterOptions\",\"url\":\"interfaces/SystemFormatterOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"alpha\",\"url\":\"interfaces/SystemFormatterOptions.html#alpha\",\"classes\":\"\",\"parent\":\"SystemFormatterOptions\"},{\"kind\":1024,\"name\":\"softmaxFactor\",\"url\":\"interfaces/SystemFormatterOptions.html#softmaxFactor\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SystemFormatterOptions\"},{\"kind\":1024,\"name\":\"globalSoftmax\",\"url\":\"interfaces/SystemFormatterOptions.html#globalSoftmax\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SystemFormatterOptions\"},{\"kind\":1024,\"name\":\"maxIterations\",\"url\":\"interfaces/SystemFormatterOptions.html#maxIterations\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SystemFormatterOptions\"},{\"kind\":256,\"name\":\"SystemStave\",\"url\":\"interfaces/SystemStave.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"voices\",\"url\":\"interfaces/SystemStave.html#voices\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":1024,\"name\":\"stave\",\"url\":\"interfaces/SystemStave.html#stave\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":1024,\"name\":\"noJustification\",\"url\":\"interfaces/SystemStave.html#noJustification\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"interfaces/SystemStave.html#options\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":1024,\"name\":\"spaceAbove\",\"url\":\"interfaces/SystemStave.html#spaceAbove\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":1024,\"name\":\"spaceBelow\",\"url\":\"interfaces/SystemStave.html#spaceBelow\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":1024,\"name\":\"debugNoteMetrics\",\"url\":\"interfaces/SystemStave.html#debugNoteMetrics\",\"classes\":\"\",\"parent\":\"SystemStave\"},{\"kind\":256,\"name\":\"SystemOptions\",\"url\":\"interfaces/SystemOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"factory\",\"url\":\"interfaces/SystemOptions.html#factory\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"noPadding\",\"url\":\"interfaces/SystemOptions.html#noPadding\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"debugFormatter\",\"url\":\"interfaces/SystemOptions.html#debugFormatter\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"spaceBetweenStaves\",\"url\":\"interfaces/SystemOptions.html#spaceBetweenStaves\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"formatIterations\",\"url\":\"interfaces/SystemOptions.html#formatIterations\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"autoWidth\",\"url\":\"interfaces/SystemOptions.html#autoWidth\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"interfaces/SystemOptions.html#x\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/SystemOptions.html#width\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"interfaces/SystemOptions.html#y\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"details\",\"url\":\"interfaces/SystemOptions.html#details\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"formatOptions\",\"url\":\"interfaces/SystemOptions.html#formatOptions\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":1024,\"name\":\"noJustification\",\"url\":\"interfaces/SystemOptions.html#noJustification\",\"classes\":\"\",\"parent\":\"SystemOptions\"},{\"kind\":128,\"name\":\"System\",\"url\":\"classes/System.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/System.html#CATEGORY\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/System.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/System.html#constructor\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setOptions\",\"url\":\"classes/System.html#setOptions\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/System.html#getX\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/System.html#setX\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getY\",\"url\":\"classes/System.html#getY\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setY\",\"url\":\"classes/System.html#setY\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getStaves\",\"url\":\"classes/System.html#getStaves\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getVoices\",\"url\":\"classes/System.html#getVoices\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/System.html#setContext\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"addConnector\",\"url\":\"classes/System.html#addConnector\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"addStave\",\"url\":\"classes/System.html#addStave\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"addVoices\",\"url\":\"classes/System.html#addVoices\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/System.html#format\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/System.html#draw\",\"classes\":\"\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/System.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/System.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/System.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/System.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/System.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/System.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/System.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/System.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/System.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/System.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/System.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/System.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/System.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/System.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/System.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/System.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/System.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/System.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/System.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/System.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/System.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/System.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/System.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/System.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/System.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/System.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/System.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/System.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/System.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/System.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/System.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/System.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/System.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"System\"},{\"kind\":256,\"name\":\"TabNotePosition\",\"url\":\"interfaces/TabNotePosition.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"str\",\"url\":\"interfaces/TabNotePosition.html#str\",\"classes\":\"\",\"parent\":\"TabNotePosition\"},{\"kind\":1024,\"name\":\"fret\",\"url\":\"interfaces/TabNotePosition.html#fret\",\"classes\":\"\",\"parent\":\"TabNotePosition\"},{\"kind\":256,\"name\":\"TabNoteStruct\",\"url\":\"interfaces/TabNoteStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"positions\",\"url\":\"interfaces/TabNoteStruct.html#positions\",\"classes\":\"\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"interfaces/TabNoteStruct.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"auto_stem\",\"url\":\"interfaces/TabNoteStruct.html#auto_stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"stem_down_x_offset\",\"url\":\"interfaces/TabNoteStruct.html#stem_down_x_offset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"stem_up_x_offset\",\"url\":\"interfaces/TabNoteStruct.html#stem_up_x_offset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"interfaces/TabNoteStruct.html#stroke_px\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"interfaces/TabNoteStruct.html#glyph_font_scale\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"octave_shift\",\"url\":\"interfaces/TabNoteStruct.html#octave_shift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"clef\",\"url\":\"interfaces/TabNoteStruct.html#clef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"interfaces/TabNoteStruct.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/TabNoteStruct.html#duration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/TabNoteStruct.html#line\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/TabNoteStruct.html#dots\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/TabNoteStruct.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"align_center\",\"url\":\"interfaces/TabNoteStruct.html#align_center\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":1024,\"name\":\"duration_override\",\"url\":\"interfaces/TabNoteStruct.html#duration_override\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNoteStruct\"},{\"kind\":128,\"name\":\"TabNote\",\"url\":\"classes/TabNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TabNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/TabNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/TabNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TabNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TabNote.html#constructor\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"greatestString\",\"url\":\"classes/TabNote.html#greatestString\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"leastString\",\"url\":\"classes/TabNote.html#leastString\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/TabNote.html#reset\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setGhost\",\"url\":\"classes/TabNote.html#setGhost\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/TabNote.html#hasStem\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemExtension\",\"url\":\"classes/TabNote.html#getStemExtension\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"updateWidth\",\"url\":\"classes/TabNote.html#updateWidth\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/TabNote.html#setStave\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getPositions\",\"url\":\"classes/TabNote.html#getPositions\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/TabNote.html#getModifierStartXY\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TabNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"TabNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/TabNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"TabNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/TabNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"TabNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/TabNote.html#getLineForRest\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/TabNote.html#preFormat\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemX\",\"url\":\"classes/TabNote.html#getStemX\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemY\",\"url\":\"classes/TabNote.html#getStemY\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/TabNote.html#getStemExtents\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TabNote.html#getStemExtents.getStemExtents-1.__type-2\",\"classes\":\"\",\"parent\":\"TabNote.getStemExtents.getStemExtents\"},{\"kind\":1024,\"name\":\"topY\",\"url\":\"classes/TabNote.html#getStemExtents.getStemExtents-1.__type-2.topY\",\"classes\":\"\",\"parent\":\"TabNote.getStemExtents.getStemExtents.__type\"},{\"kind\":1024,\"name\":\"baseY\",\"url\":\"classes/TabNote.html#getStemExtents.getStemExtents-1.__type-2.baseY\",\"classes\":\"\",\"parent\":\"TabNote.getStemExtents.getStemExtents.__type\"},{\"kind\":2048,\"name\":\"drawFlag\",\"url\":\"classes/TabNote.html#drawFlag\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"drawModifiers\",\"url\":\"classes/TabNote.html#drawModifiers\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"drawStemThrough\",\"url\":\"classes/TabNote.html#drawStemThrough\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"drawPositions\",\"url\":\"classes/TabNote.html#drawPositions\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TabNote.html#draw-1\",\"classes\":\"\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"stem_direction\",\"url\":\"classes/TabNote.html#stem_direction\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"stem\",\"url\":\"classes/TabNote.html#stem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStem\",\"url\":\"classes/TabNote.html#getStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"checkStem\",\"url\":\"classes/TabNote.html#checkStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setStem\",\"url\":\"classes/TabNote.html#setStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"buildStem\",\"url\":\"classes/TabNote.html#buildStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"buildFlag\",\"url\":\"classes/TabNote.html#buildFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getBaseCustomNoteHeadGlyphProps\",\"url\":\"classes/TabNote.html#getBaseCustomNoteHeadGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemLength\",\"url\":\"classes/TabNote.html#getStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getBeamCount\",\"url\":\"classes/TabNote.html#getBeamCount\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemMinimumLength\",\"url\":\"classes/TabNote.html#getStemMinimumLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/TabNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setStemDirection\",\"url\":\"classes/TabNote.html#setStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getCenterGlyphX\",\"url\":\"classes/TabNote.html#getCenterGlyphX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setStemLength\",\"url\":\"classes/TabNote.html#setStemLength\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/TabNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/TabNote.html#getYForBottomText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"hasFlag\",\"url\":\"classes/TabNote.html#hasFlag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/TabNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"drawStem\",\"url\":\"classes/TabNote.html#drawStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/TabNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/TabNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/TabNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TabNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TabNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TabNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/TabNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/TabNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/TabNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/TabNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/TabNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/TabNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/TabNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/TabNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/TabNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/TabNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/TabNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/TabNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/TabNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"TabNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/TabNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/TabNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/TabNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/TabNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/TabNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/TabNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/TabNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/TabNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/TabNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/TabNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/TabNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/TabNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/TabNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/TabNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/TabNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/TabNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/TabNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/TabNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/TabNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/TabNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/TabNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/TabNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/TabNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/TabNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/TabNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/TabNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/TabNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/TabNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/TabNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/TabNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/TabNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/TabNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/TabNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/TabNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/TabNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/TabNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/TabNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/TabNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/TabNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/TabNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/TabNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/TabNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TabNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/TabNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/TabNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TabNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/TabNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/TabNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/TabNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/TabNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/TabNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/TabNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/TabNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/TabNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/TabNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/TabNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/TabNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/TabNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/TabNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/TabNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/TabNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/TabNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/TabNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/TabNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/TabNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/TabNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/TabNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/TabNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TabNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TabNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TabNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TabNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TabNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TabNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TabNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TabNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TabNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TabNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TabNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TabNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TabNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TabNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TabNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TabNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TabNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TabNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TabNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TabNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TabNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TabNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TabNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TabNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TabNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TabNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TabNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TabNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TabNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TabNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TabNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TabNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TabNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TabNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabNote\"},{\"kind\":128,\"name\":\"TabSlide\",\"url\":\"classes/TabSlide.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TabSlide.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TabSlide.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"SLIDE_UP\",\"url\":\"classes/TabSlide.html#SLIDE_UP\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"SLIDE_DOWN\",\"url\":\"classes/TabSlide.html#SLIDE_DOWN\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"createSlideUp\",\"url\":\"classes/TabSlide.html#createSlideUp\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"createSlideDown\",\"url\":\"classes/TabSlide.html#createSlideDown\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"createHammeron\",\"url\":\"classes/TabSlide.html#createHammeron\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"createPulloff\",\"url\":\"classes/TabSlide.html#createPulloff\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TabSlide.html#constructor\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"renderTie\",\"url\":\"classes/TabSlide.html#renderTie\",\"classes\":\"\",\"parent\":\"TabSlide\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TabSlide.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TabSlide.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TabSlide.render_options\"},{\"kind\":1024,\"name\":\"cp2\",\"url\":\"classes/TabSlide.html#render_options.__type.cp2\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":1024,\"name\":\"last_x_shift\",\"url\":\"classes/TabSlide.html#render_options.__type.last_x_shift\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":1024,\"name\":\"tie_spacing\",\"url\":\"classes/TabSlide.html#render_options.__type.tie_spacing\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":1024,\"name\":\"cp1\",\"url\":\"classes/TabSlide.html#render_options.__type.cp1\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":1024,\"name\":\"first_x_shift\",\"url\":\"classes/TabSlide.html#render_options.__type.first_x_shift\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":1024,\"name\":\"text_shift_x\",\"url\":\"classes/TabSlide.html#render_options.__type.text_shift_x\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/TabSlide.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"TabSlide.render_options.__type\"},{\"kind\":2048,\"name\":\"setDirection\",\"url\":\"classes/TabSlide.html#setDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setNotes\",\"url\":\"classes/TabSlide.html#setNotes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"isPartial\",\"url\":\"classes/TabSlide.html#isPartial\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"renderText\",\"url\":\"classes/TabSlide.html#renderText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getNotes\",\"url\":\"classes/TabSlide.html#getNotes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TabSlide.html#draw\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TabSlide.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TabSlide.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TabSlide.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TabSlide.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TabSlide.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TabSlide.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TabSlide.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TabSlide.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TabSlide.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TabSlide.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TabSlide.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TabSlide.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TabSlide.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TabSlide.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TabSlide.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TabSlide.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TabSlide.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TabSlide.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TabSlide.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TabSlide.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TabSlide.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TabSlide.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TabSlide.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TabSlide.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TabSlide.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TabSlide.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TabSlide.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TabSlide.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TabSlide.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TabSlide.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TabSlide.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TabSlide.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TabSlide.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TabSlide.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabSlide\"},{\"kind\":128,\"name\":\"TabStave\",\"url\":\"classes/TabStave.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TabStave.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TabStave\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TabStave.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"defaultPadding\",\"url\":\"classes/TabStave.html#defaultPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"rightPadding\",\"url\":\"classes/TabStave.html#rightPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"formatBegModifiers\",\"url\":\"classes/TabStave.html#formatBegModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TabStave.html#constructor\",\"classes\":\"\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getYForGlyphs\",\"url\":\"classes/TabStave.html#getYForGlyphs\",\"classes\":\"\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addTabGlyph\",\"url\":\"classes/TabStave.html#addTabGlyph\",\"classes\":\"\",\"parent\":\"TabStave\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"classes/TabStave.html#options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setDefaultLedgerLineStyle\",\"url\":\"classes/TabStave.html#setDefaultLedgerLineStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getDefaultLedgerLineStyle\",\"url\":\"classes/TabStave.html#getDefaultLedgerLineStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"space\",\"url\":\"classes/TabStave.html#space\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"resetLines\",\"url\":\"classes/TabStave.html#resetLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setNoteStartX\",\"url\":\"classes/TabStave.html#setNoteStartX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getNoteStartX\",\"url\":\"classes/TabStave.html#getNoteStartX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getNoteEndX\",\"url\":\"classes/TabStave.html#getNoteEndX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getTieStartX\",\"url\":\"classes/TabStave.html#getTieStartX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getTieEndX\",\"url\":\"classes/TabStave.html#getTieEndX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TabStave.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getNumLines\",\"url\":\"classes/TabStave.html#getNumLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setNumLines\",\"url\":\"classes/TabStave.html#setNumLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setY\",\"url\":\"classes/TabStave.html#setY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getY\",\"url\":\"classes/TabStave.html#getY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getTopLineTopY\",\"url\":\"classes/TabStave.html#getTopLineTopY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getBottomLineBottomY\",\"url\":\"classes/TabStave.html#getBottomLineBottomY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/TabStave.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/TabStave.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TabStave.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TabStave.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setMeasure\",\"url\":\"classes/TabStave.html#setMeasure\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getMeasure\",\"url\":\"classes/TabStave.html#getMeasure\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getModifierXShift\",\"url\":\"classes/TabStave.html#getModifierXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setRepetitionType\",\"url\":\"classes/TabStave.html#setRepetitionType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setVoltaType\",\"url\":\"classes/TabStave.html#setVoltaType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setSection\",\"url\":\"classes/TabStave.html#setSection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setTempo\",\"url\":\"classes/TabStave.html#setTempo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setText\",\"url\":\"classes/TabStave.html#setText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getHeight\",\"url\":\"classes/TabStave.html#getHeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getSpacingBetweenLines\",\"url\":\"classes/TabStave.html#getSpacingBetweenLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TabStave.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getBottomY\",\"url\":\"classes/TabStave.html#getBottomY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getBottomLineY\",\"url\":\"classes/TabStave.html#getBottomLineY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getYForLine\",\"url\":\"classes/TabStave.html#getYForLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getLineForY\",\"url\":\"classes/TabStave.html#getLineForY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/TabStave.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getYForBottomText\",\"url\":\"classes/TabStave.html#getYForBottomText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getYForNote\",\"url\":\"classes/TabStave.html#getYForNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/TabStave.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addEndModifier\",\"url\":\"classes/TabStave.html#addEndModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setBegBarType\",\"url\":\"classes/TabStave.html#setBegBarType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setEndBarType\",\"url\":\"classes/TabStave.html#setEndBarType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setClef\",\"url\":\"classes/TabStave.html#setClef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getClef\",\"url\":\"classes/TabStave.html#getClef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setEndClef\",\"url\":\"classes/TabStave.html#setEndClef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getEndClef\",\"url\":\"classes/TabStave.html#getEndClef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setKeySignature\",\"url\":\"classes/TabStave.html#setKeySignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setEndKeySignature\",\"url\":\"classes/TabStave.html#setEndKeySignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setTimeSignature\",\"url\":\"classes/TabStave.html#setTimeSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setEndTimeSignature\",\"url\":\"classes/TabStave.html#setEndTimeSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addKeySignature\",\"url\":\"classes/TabStave.html#addKeySignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addClef\",\"url\":\"classes/TabStave.html#addClef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addEndClef\",\"url\":\"classes/TabStave.html#addEndClef\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addTimeSignature\",\"url\":\"classes/TabStave.html#addTimeSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addEndTimeSignature\",\"url\":\"classes/TabStave.html#addEndTimeSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addTrebleGlyph\",\"url\":\"classes/TabStave.html#addTrebleGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/TabStave.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"sortByCategory\",\"url\":\"classes/TabStave.html#sortByCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/TabStave.html#format\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TabStave.html#draw\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getVerticalBarWidth\",\"url\":\"classes/TabStave.html#getVerticalBarWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getConfigForLines\",\"url\":\"classes/TabStave.html#getConfigForLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setConfigForLine\",\"url\":\"classes/TabStave.html#setConfigForLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setConfigForLines\",\"url\":\"classes/TabStave.html#setConfigForLines\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TabStave.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TabStave.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TabStave.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TabStave.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TabStave.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TabStave.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TabStave.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TabStave.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TabStave.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TabStave.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TabStave.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TabStave.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TabStave.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TabStave.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TabStave.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TabStave.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TabStave.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TabStave.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TabStave.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TabStave.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TabStave.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TabStave.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TabStave.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TabStave.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TabStave.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TabStave.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TabStave.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TabStave.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TabStave.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TabStave.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TabStave.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TabStave.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabStave\"},{\"kind\":128,\"name\":\"TabTie\",\"url\":\"classes/TabTie.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TabTie.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"createHammeron\",\"url\":\"classes/TabTie.html#createHammeron\",\"classes\":\"\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"createPulloff\",\"url\":\"classes/TabTie.html#createPulloff\",\"classes\":\"\",\"parent\":\"TabTie\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TabTie.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TabTie.html#constructor\",\"classes\":\"\",\"parent\":\"TabTie\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TabTie.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TabTie.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TabTie.render_options\"},{\"kind\":1024,\"name\":\"cp2\",\"url\":\"classes/TabTie.html#render_options.__type.cp2\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":1024,\"name\":\"last_x_shift\",\"url\":\"classes/TabTie.html#render_options.__type.last_x_shift\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":1024,\"name\":\"tie_spacing\",\"url\":\"classes/TabTie.html#render_options.__type.tie_spacing\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":1024,\"name\":\"cp1\",\"url\":\"classes/TabTie.html#render_options.__type.cp1\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":1024,\"name\":\"first_x_shift\",\"url\":\"classes/TabTie.html#render_options.__type.first_x_shift\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":1024,\"name\":\"text_shift_x\",\"url\":\"classes/TabTie.html#render_options.__type.text_shift_x\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/TabTie.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"TabTie.render_options.__type\"},{\"kind\":2048,\"name\":\"setDirection\",\"url\":\"classes/TabTie.html#setDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setNotes\",\"url\":\"classes/TabTie.html#setNotes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"isPartial\",\"url\":\"classes/TabTie.html#isPartial\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"renderTie\",\"url\":\"classes/TabTie.html#renderTie\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"renderText\",\"url\":\"classes/TabTie.html#renderText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getNotes\",\"url\":\"classes/TabTie.html#getNotes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TabTie.html#draw\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TabTie.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TabTie.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TabTie.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TabTie.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TabTie.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TabTie.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TabTie.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TabTie.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TabTie.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TabTie.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TabTie.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TabTie.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TabTie.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TabTie.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TabTie.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TabTie.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TabTie.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TabTie.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TabTie.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TabTie.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TabTie.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TabTie.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TabTie.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TabTie.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TabTie.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TabTie.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TabTie.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TabTie.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TabTie.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TabTie.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TabTie.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TabTie.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TabTie.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TabTie.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TabTie\"},{\"kind\":256,\"name\":\"TextBracketParams\",\"url\":\"interfaces/TextBracketParams.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"start\",\"url\":\"interfaces/TextBracketParams.html#start\",\"classes\":\"\",\"parent\":\"TextBracketParams\"},{\"kind\":1024,\"name\":\"stop\",\"url\":\"interfaces/TextBracketParams.html#stop\",\"classes\":\"\",\"parent\":\"TextBracketParams\"},{\"kind\":1024,\"name\":\"text\",\"url\":\"interfaces/TextBracketParams.html#text\",\"classes\":\"\",\"parent\":\"TextBracketParams\"},{\"kind\":1024,\"name\":\"superscript\",\"url\":\"interfaces/TextBracketParams.html#superscript\",\"classes\":\"\",\"parent\":\"TextBracketParams\"},{\"kind\":1024,\"name\":\"position\",\"url\":\"interfaces/TextBracketParams.html#position\",\"classes\":\"\",\"parent\":\"TextBracketParams\"},{\"kind\":8,\"name\":\"TextBracketPosition\",\"url\":\"enums/TextBracketPosition.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"TOP\",\"url\":\"enums/TextBracketPosition.html#TOP\",\"classes\":\"\",\"parent\":\"TextBracketPosition\"},{\"kind\":16,\"name\":\"BOTTOM\",\"url\":\"enums/TextBracketPosition.html#BOTTOM\",\"classes\":\"\",\"parent\":\"TextBracketPosition\"},{\"kind\":128,\"name\":\"TextBracket\",\"url\":\"classes/TextBracket.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/TextBracket.html#DEBUG\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TextBracket.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TextBracket.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/TextBracket.html#Position-1\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/TextBracket.html#PositionString\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"Positions\",\"url\":\"classes/TextBracket.html#Positions\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"PositionsString\",\"url\":\"classes/TextBracket.html#PositionsString\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TextBracket.html#constructor\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TextBracket.html#render_options\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TextBracket.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TextBracket.render_options\"},{\"kind\":1024,\"name\":\"dashed\",\"url\":\"classes/TextBracket.html#render_options.__type.dashed\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"color\",\"url\":\"classes/TextBracket.html#render_options.__type.color\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"line_width\",\"url\":\"classes/TextBracket.html#render_options.__type.line_width\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"underline_superscript\",\"url\":\"classes/TextBracket.html#render_options.__type.underline_superscript\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"show_bracket\",\"url\":\"classes/TextBracket.html#render_options.__type.show_bracket\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"dash\",\"url\":\"classes/TextBracket.html#render_options.__type.dash\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"bracket_height\",\"url\":\"classes/TextBracket.html#render_options.__type.bracket_height\",\"classes\":\"\",\"parent\":\"TextBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"position\",\"url\":\"classes/TextBracket.html#position\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":1024,\"name\":\"start\",\"url\":\"classes/TextBracket.html#start\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":1024,\"name\":\"stop\",\"url\":\"classes/TextBracket.html#stop\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TextBracket.html#applyStyle\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setDashed\",\"url\":\"classes/TextBracket.html#setDashed\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/TextBracket.html#setLine\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TextBracket.html#draw\",\"classes\":\"\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TextBracket.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TextBracket.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TextBracket.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TextBracket.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TextBracket.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TextBracket.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TextBracket.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TextBracket.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TextBracket.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TextBracket.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TextBracket.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TextBracket.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TextBracket.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TextBracket.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TextBracket.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TextBracket.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TextBracket.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TextBracket.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TextBracket.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TextBracket.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TextBracket.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TextBracket.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TextBracket.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TextBracket.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TextBracket.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TextBracket.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TextBracket.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TextBracket.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TextBracket.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TextBracket.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TextBracket.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TextBracket.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TextBracket.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextBracket\"},{\"kind\":128,\"name\":\"TextDynamics\",\"url\":\"classes/TextDynamics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/TextDynamics.html#DEBUG\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TextDynamics.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"GLYPHS\",\"url\":\"classes/TextDynamics.html#GLYPHS\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/TextDynamics.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/TextDynamics.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TextDynamics.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TextDynamics.html#constructor\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/TextDynamics.html#setLine\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/TextDynamics.html#preFormat\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TextDynamics.html#draw-1\",\"classes\":\"\",\"parent\":\"TextDynamics\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/TextDynamics.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/TextDynamics.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/TextDynamics.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TextDynamics.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TextDynamics.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/TextDynamics.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/TextDynamics.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/TextDynamics.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/TextDynamics.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/TextDynamics.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/TextDynamics.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/TextDynamics.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/TextDynamics.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/TextDynamics.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/TextDynamics.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/TextDynamics.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/TextDynamics.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/TextDynamics.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"TextDynamics.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/TextDynamics.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/TextDynamics.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/TextDynamics.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/TextDynamics.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/TextDynamics.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/TextDynamics.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/TextDynamics.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/TextDynamics.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/TextDynamics.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/TextDynamics.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/TextDynamics.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/TextDynamics.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/TextDynamics.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/TextDynamics.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/TextDynamics.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/TextDynamics.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/TextDynamics.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/TextDynamics.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/TextDynamics.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/TextDynamics.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/TextDynamics.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/TextDynamics.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/TextDynamics.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/TextDynamics.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/TextDynamics.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/TextDynamics.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/TextDynamics.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/TextDynamics.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/TextDynamics.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/TextDynamics.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/TextDynamics.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/TextDynamics.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/TextDynamics.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/TextDynamics.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/TextDynamics.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TextDynamics.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"TextDynamics.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/TextDynamics.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"TextDynamics.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/TextDynamics.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"TextDynamics.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/TextDynamics.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/TextDynamics.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/TextDynamics.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/TextDynamics.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/TextDynamics.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/TextDynamics.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/TextDynamics.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/TextDynamics.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/TextDynamics.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/TextDynamics.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/TextDynamics.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/TextDynamics.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/TextDynamics.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/TextDynamics.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/TextDynamics.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TextDynamics.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/TextDynamics.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/TextDynamics.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TextDynamics.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/TextDynamics.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/TextDynamics.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/TextDynamics.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/TextDynamics.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/TextDynamics.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/TextDynamics.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/TextDynamics.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/TextDynamics.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/TextDynamics.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/TextDynamics.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/TextDynamics.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/TextDynamics.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/TextDynamics.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/TextDynamics.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/TextDynamics.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/TextDynamics.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/TextDynamics.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/TextDynamics.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/TextDynamics.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/TextDynamics.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/TextDynamics.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/TextDynamics.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/TextDynamics.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TextDynamics.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TextDynamics.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TextDynamics.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TextDynamics.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TextDynamics.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TextDynamics.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TextDynamics.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TextDynamics.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TextDynamics.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TextDynamics.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TextDynamics.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TextDynamics.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TextDynamics.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TextDynamics.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TextDynamics.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TextDynamics.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TextDynamics.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TextDynamics.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TextDynamics.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TextDynamics.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TextDynamics.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TextDynamics.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TextDynamics.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TextDynamics.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TextDynamics.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TextDynamics.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TextDynamics.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TextDynamics.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TextDynamics.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TextDynamics.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TextDynamics.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TextDynamics.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TextDynamics.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TextDynamics.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextDynamics\"},{\"kind\":256,\"name\":\"TextFormatterInfo\",\"url\":\"interfaces/TextFormatterInfo.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"family\",\"url\":\"interfaces/TextFormatterInfo.html#family\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"resolution\",\"url\":\"interfaces/TextFormatterInfo.html#resolution\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"glyphs\",\"url\":\"interfaces/TextFormatterInfo.html#glyphs\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"serifs\",\"url\":\"interfaces/TextFormatterInfo.html#serifs\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"monospaced\",\"url\":\"interfaces/TextFormatterInfo.html#monospaced\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"italic\",\"url\":\"interfaces/TextFormatterInfo.html#italic\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"bold\",\"url\":\"interfaces/TextFormatterInfo.html#bold\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"maxSizeGlyph\",\"url\":\"interfaces/TextFormatterInfo.html#maxSizeGlyph\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"superscriptOffset\",\"url\":\"interfaces/TextFormatterInfo.html#superscriptOffset\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"subscriptOffset\",\"url\":\"interfaces/TextFormatterInfo.html#subscriptOffset\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"interfaces/TextFormatterInfo.html#description\",\"classes\":\"\",\"parent\":\"TextFormatterInfo\"},{\"kind\":256,\"name\":\"yExtent\",\"url\":\"interfaces/yExtent.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"yMin\",\"url\":\"interfaces/yExtent.html#yMin\",\"classes\":\"\",\"parent\":\"yExtent\"},{\"kind\":1024,\"name\":\"yMax\",\"url\":\"interfaces/yExtent.html#yMax\",\"classes\":\"\",\"parent\":\"yExtent\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/yExtent.html#height\",\"classes\":\"\",\"parent\":\"yExtent\"},{\"kind\":128,\"name\":\"TextFormatter\",\"url\":\"classes/TextFormatter.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/TextFormatter.html#DEBUG\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getFontFamilies\",\"url\":\"classes/TextFormatter.html#getFontFamilies\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"create\",\"url\":\"classes/TextFormatter.html#create\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getInfo\",\"url\":\"classes/TextFormatter.html#getInfo\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"registerInfo\",\"url\":\"classes/TextFormatter.html#registerInfo\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":262144,\"name\":\"localHeightCache\",\"url\":\"classes/TextFormatter.html#localHeightCache\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"updateParams\",\"url\":\"classes/TextFormatter.html#updateParams\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"updateCacheKey\",\"url\":\"classes/TextFormatter.html#updateCacheKey\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getGlyphMetrics\",\"url\":\"classes/TextFormatter.html#getGlyphMetrics\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":262144,\"name\":\"maxHeight\",\"url\":\"classes/TextFormatter.html#maxHeight\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getWidthForCharacterInEm\",\"url\":\"classes/TextFormatter.html#getWidthForCharacterInEm\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getYForCharacterInPx\",\"url\":\"classes/TextFormatter.html#getYForCharacterInPx\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getYForStringInPx\",\"url\":\"classes/TextFormatter.html#getYForStringInPx\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getWidthForTextInEm\",\"url\":\"classes/TextFormatter.html#getWidthForTextInEm\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getWidthForTextInPx\",\"url\":\"classes/TextFormatter.html#getWidthForTextInPx\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TextFormatter.html#setFontSize\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TextFormatter.html#fontSizeInPixels\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":2048,\"name\":\"getResolution\",\"url\":\"classes/TextFormatter.html#getResolution\",\"classes\":\"\",\"parent\":\"TextFormatter\"},{\"kind\":8,\"name\":\"TextJustification\",\"url\":\"enums/TextJustification.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"LEFT\",\"url\":\"enums/TextJustification.html#LEFT\",\"classes\":\"\",\"parent\":\"TextJustification\"},{\"kind\":16,\"name\":\"CENTER\",\"url\":\"enums/TextJustification.html#CENTER\",\"classes\":\"\",\"parent\":\"TextJustification\"},{\"kind\":16,\"name\":\"RIGHT\",\"url\":\"enums/TextJustification.html#RIGHT\",\"classes\":\"\",\"parent\":\"TextJustification\"},{\"kind\":256,\"name\":\"TextNoteStruct\",\"url\":\"interfaces/TextNoteStruct.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"text\",\"url\":\"interfaces/TextNoteStruct.html#text\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"glyph\",\"url\":\"interfaces/TextNoteStruct.html#glyph\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"ignore_ticks\",\"url\":\"interfaces/TextNoteStruct.html#ignore_ticks\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"smooth\",\"url\":\"interfaces/TextNoteStruct.html#smooth\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"interfaces/TextNoteStruct.html#font\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"subscript\",\"url\":\"interfaces/TextNoteStruct.html#subscript\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"superscript\",\"url\":\"interfaces/TextNoteStruct.html#superscript\",\"classes\":\"\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"interfaces/TextNoteStruct.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/TextNoteStruct.html#duration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/TextNoteStruct.html#line\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"dots\",\"url\":\"interfaces/TextNoteStruct.html#dots\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/TextNoteStruct.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"align_center\",\"url\":\"interfaces/TextNoteStruct.html#align_center\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":1024,\"name\":\"duration_override\",\"url\":\"interfaces/TextNoteStruct.html#duration_override\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNoteStruct\"},{\"kind\":128,\"name\":\"TextNote\",\"url\":\"classes/TextNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TextNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TextNote.html#TEXT_FONT\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":1024,\"name\":\"Justification\",\"url\":\"classes/TextNote.html#Justification\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"GLYPHS\",\"url\":\"classes/TextNote.html#GLYPHS\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/TextNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/TextNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TextNote.html#constructor\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setJustification\",\"url\":\"classes/TextNote.html#setJustification\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/TextNote.html#setLine\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getLine\",\"url\":\"classes/TextNote.html#getLine\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getText\",\"url\":\"classes/TextNote.html#getText\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/TextNote.html#preFormat\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TextNote.html#draw-1\",\"classes\":\"\",\"parent\":\"TextNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/TextNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/TextNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/TextNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TextNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TextNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TextNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/TextNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/TextNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/TextNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/TextNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/TextNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/TextNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/TextNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/TextNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/TextNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/TextNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/TextNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/TextNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/TextNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"TextNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/TextNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/TextNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/TextNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/TextNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/TextNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/TextNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/TextNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/TextNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/TextNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/TextNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/TextNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/TextNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/TextNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/TextNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/TextNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/TextNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/TextNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/TextNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/TextNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/TextNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/TextNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/TextNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/TextNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/TextNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/TextNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/TextNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/TextNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/TextNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/TextNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/TextNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/TextNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/TextNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/TextNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/TextNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/TextNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TextNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"TextNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/TextNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"TextNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/TextNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"TextNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/TextNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/TextNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/TextNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/TextNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/TextNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/TextNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/TextNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/TextNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/TextNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/TextNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/TextNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/TextNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/TextNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/TextNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/TextNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TextNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/TextNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/TextNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TextNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/TextNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/TextNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/TextNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/TextNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/TextNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/TextNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/TextNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/TextNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/TextNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/TextNote.html#addToModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/TextNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/TextNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/TextNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/TextNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/TextNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/TextNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/TextNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/TextNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/TextNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/TextNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/TextNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/TextNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/TextNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TextNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TextNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TextNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TextNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TextNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TextNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TextNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TextNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TextNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TextNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TextNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TextNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TextNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TextNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TextNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TextNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TextNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TextNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TextNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TextNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TextNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TextNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TextNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TextNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TextNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TextNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TextNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TextNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TextNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TextNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TextNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TextNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TextNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TextNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TextNote\"},{\"kind\":256,\"name\":\"FormatterMetrics\",\"url\":\"interfaces/FormatterMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"duration\",\"url\":\"interfaces/FormatterMetrics.html#duration\",\"classes\":\"\",\"parent\":\"FormatterMetrics\"},{\"kind\":1024,\"name\":\"freedom\",\"url\":\"interfaces/FormatterMetrics.html#freedom\",\"classes\":\"\",\"parent\":\"FormatterMetrics\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FormatterMetrics.html#freedom.__type\",\"classes\":\"\",\"parent\":\"FormatterMetrics.freedom\"},{\"kind\":1024,\"name\":\"left\",\"url\":\"interfaces/FormatterMetrics.html#freedom.__type.left\",\"classes\":\"\",\"parent\":\"FormatterMetrics.freedom.__type\"},{\"kind\":1024,\"name\":\"right\",\"url\":\"interfaces/FormatterMetrics.html#freedom.__type.right\",\"classes\":\"\",\"parent\":\"FormatterMetrics.freedom.__type\"},{\"kind\":1024,\"name\":\"iterations\",\"url\":\"interfaces/FormatterMetrics.html#iterations\",\"classes\":\"\",\"parent\":\"FormatterMetrics\"},{\"kind\":1024,\"name\":\"space\",\"url\":\"interfaces/FormatterMetrics.html#space\",\"classes\":\"\",\"parent\":\"FormatterMetrics\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FormatterMetrics.html#space.__type-1\",\"classes\":\"\",\"parent\":\"FormatterMetrics.space\"},{\"kind\":1024,\"name\":\"used\",\"url\":\"interfaces/FormatterMetrics.html#space.__type-1.used\",\"classes\":\"\",\"parent\":\"FormatterMetrics.space.__type\"},{\"kind\":1024,\"name\":\"mean\",\"url\":\"interfaces/FormatterMetrics.html#space.__type-1.mean\",\"classes\":\"\",\"parent\":\"FormatterMetrics.space.__type\"},{\"kind\":1024,\"name\":\"deviation\",\"url\":\"interfaces/FormatterMetrics.html#space.__type-1.deviation\",\"classes\":\"\",\"parent\":\"FormatterMetrics.space.__type\"},{\"kind\":128,\"name\":\"Tickable\",\"url\":\"classes/Tickable.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Tickable.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Tickable.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tickable.html#constructor\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Tickable.html#reset\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/Tickable.html#getTicks\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/Tickable.html#shouldIgnoreTicks\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/Tickable.html#setIgnoreTicks\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Tickable.html#setWidth\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Tickable.html#getWidth\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Tickable.html#setXShift\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Tickable.html#getXShift\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/Tickable.html#getX\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/Tickable.html#getFormatterMetrics\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/Tickable.html#getCenterXShift\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/Tickable.html#setCenterXShift\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/Tickable.html#isCenterAligned\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/Tickable.html#setCenterAlignment\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/Tickable.html#getVoice\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/Tickable.html#setVoice\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/Tickable.html#getTuplet\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/Tickable.html#getTupletStack\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/Tickable.html#resetTuplet\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/Tickable.html#setTuplet\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/Tickable.html#addToModifierContext\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/Tickable.html#addModifier\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/Tickable.html#getModifiers\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/Tickable.html#setTickContext\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/Tickable.html#checkTickContext\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/Tickable.html#preFormat\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/Tickable.html#preFormatted\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/Tickable.html#postFormat\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/Tickable.html#postFormatted\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/Tickable.html#getIntrinsicTicks\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/Tickable.html#setIntrinsicTicks\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/Tickable.html#getTickMultiplier\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/Tickable.html#applyTickMultiplier\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/Tickable.html#setDuration\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/Tickable.html#getAbsoluteX\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Tickable.html#setModifierContext\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Tickable.html#getModifierContext\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Tickable.html#checkModifierContext\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Tickable.html#getStave\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Tickable.html#setStave\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/Tickable.html#getMetrics\",\"classes\":\"\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Tickable.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Tickable.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Tickable.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Tickable.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Tickable.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Tickable.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Tickable.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Tickable.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Tickable.html#draw\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Tickable.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Tickable.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Tickable.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Tickable.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Tickable.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Tickable.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Tickable.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Tickable.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Tickable.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Tickable.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Tickable.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Tickable.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Tickable.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Tickable.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Tickable.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Tickable.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Tickable.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Tickable.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Tickable.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Tickable.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Tickable.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Tickable.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Tickable.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Tickable.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Tickable.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Tickable.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tickable\"},{\"kind\":256,\"name\":\"TickContextMetrics\",\"url\":\"interfaces/TickContextMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"totalLeftPx\",\"url\":\"interfaces/TickContextMetrics.html#totalLeftPx\",\"classes\":\"\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"totalRightPx\",\"url\":\"interfaces/TickContextMetrics.html#totalRightPx\",\"classes\":\"\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/TickContextMetrics.html#width\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"glyphWidth\",\"url\":\"interfaces/TickContextMetrics.html#glyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"notePx\",\"url\":\"interfaces/TickContextMetrics.html#notePx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"modLeftPx\",\"url\":\"interfaces/TickContextMetrics.html#modLeftPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"modRightPx\",\"url\":\"interfaces/TickContextMetrics.html#modRightPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"leftDisplacedHeadPx\",\"url\":\"interfaces/TickContextMetrics.html#leftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"glyphPx\",\"url\":\"interfaces/TickContextMetrics.html#glyphPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":1024,\"name\":\"rightDisplacedHeadPx\",\"url\":\"interfaces/TickContextMetrics.html#rightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TickContextMetrics\"},{\"kind\":256,\"name\":\"TickContextOptions\",\"url\":\"interfaces/TickContextOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"tickID\",\"url\":\"interfaces/TickContextOptions.html#tickID\",\"classes\":\"\",\"parent\":\"TickContextOptions\"},{\"kind\":128,\"name\":\"TickContext\",\"url\":\"classes/TickContext.html\",\"classes\":\"\"},{\"kind\":2048,\"name\":\"getNextContext\",\"url\":\"classes/TickContext.html#getNextContext\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TickContext.html#constructor\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":1024,\"name\":\"tContexts\",\"url\":\"classes/TickContext.html#tContexts\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getTickID\",\"url\":\"classes/TickContext.html#getTickID\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TickContext.html#getX\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/TickContext.html#setX\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getXBase\",\"url\":\"classes/TickContext.html#getXBase\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"setXBase\",\"url\":\"classes/TickContext.html#setXBase\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getXOffset\",\"url\":\"classes/TickContext.html#getXOffset\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"setXOffset\",\"url\":\"classes/TickContext.html#setXOffset\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TickContext.html#getWidth\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/TickContext.html#setPadding\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getMaxTicks\",\"url\":\"classes/TickContext.html#getMaxTicks\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getMinTicks\",\"url\":\"classes/TickContext.html#getMinTicks\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getMaxTickable\",\"url\":\"classes/TickContext.html#getMaxTickable\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getMinTickable\",\"url\":\"classes/TickContext.html#getMinTickable\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getTickables\",\"url\":\"classes/TickContext.html#getTickables\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getTickableForVoice\",\"url\":\"classes/TickContext.html#getTickableForVoice\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getTickablesByVoice\",\"url\":\"classes/TickContext.html#getTickablesByVoice\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getCenterAlignedTickables\",\"url\":\"classes/TickContext.html#getCenterAlignedTickables\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/TickContext.html#getMetrics\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getCurrentTick\",\"url\":\"classes/TickContext.html#getCurrentTick\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"setCurrentTick\",\"url\":\"classes/TickContext.html#setCurrentTick\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"addTickable\",\"url\":\"classes/TickContext.html#addTickable\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/TickContext.html#preFormat\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/TickContext.html#postFormat\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/TickContext.html#getFormatterMetrics\",\"classes\":\"\",\"parent\":\"TickContext\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TickContext.html#getFormatterMetrics.getFormatterMetrics-1.__type\",\"classes\":\"\",\"parent\":\"TickContext.getFormatterMetrics.getFormatterMetrics\"},{\"kind\":1024,\"name\":\"freedom\",\"url\":\"classes/TickContext.html#getFormatterMetrics.getFormatterMetrics-1.__type.freedom\",\"classes\":\"\",\"parent\":\"TickContext.getFormatterMetrics.getFormatterMetrics.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TickContext.html#getFormatterMetrics.getFormatterMetrics-1.__type.freedom.__type-1\",\"classes\":\"\",\"parent\":\"TickContext.getFormatterMetrics.getFormatterMetrics.__type.freedom\"},{\"kind\":1024,\"name\":\"left\",\"url\":\"classes/TickContext.html#getFormatterMetrics.getFormatterMetrics-1.__type.freedom.__type-1.left\",\"classes\":\"\",\"parent\":\"TickContext.getFormatterMetrics.getFormatterMetrics.__type.freedom.__type\"},{\"kind\":1024,\"name\":\"right\",\"url\":\"classes/TickContext.html#getFormatterMetrics.getFormatterMetrics-1.__type.freedom.__type-1.right\",\"classes\":\"\",\"parent\":\"TickContext.getFormatterMetrics.getFormatterMetrics.__type.freedom.__type\"},{\"kind\":128,\"name\":\"TimeSignatureGlyph\",\"url\":\"classes/TimeSignatureGlyph.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TimeSignatureGlyph.html#CATEGORY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"CURRENT_CACHE_KEY\",\"url\":\"classes/TimeSignatureGlyph.html#CURRENT_CACHE_KEY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"MUSIC_FONT_STACK\",\"url\":\"classes/TimeSignatureGlyph.html#MUSIC_FONT_STACK\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"lookupFontMetric\",\"url\":\"classes/TimeSignatureGlyph.html#lookupFontMetric\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"lookupGlyph\",\"url\":\"classes/TimeSignatureGlyph.html#lookupGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TimeSignatureGlyph.html#lookupGlyph.lookupGlyph-1.__type\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph.lookupGlyph.lookupGlyph\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/TimeSignatureGlyph.html#lookupGlyph.lookupGlyph-1.__type.font-3\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph.lookupGlyph.lookupGlyph.__type\"},{\"kind\":1024,\"name\":\"glyph\",\"url\":\"classes/TimeSignatureGlyph.html#lookupGlyph.lookupGlyph-1.__type.glyph\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph.lookupGlyph.lookupGlyph.__type\"},{\"kind\":2048,\"name\":\"loadMetrics\",\"url\":\"classes/TimeSignatureGlyph.html#loadMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"renderGlyph\",\"url\":\"classes/TimeSignatureGlyph.html#renderGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"renderOutline\",\"url\":\"classes/TimeSignatureGlyph.html#renderOutline\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getOutlineBoundingBox\",\"url\":\"classes/TimeSignatureGlyph.html#getOutlineBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TimeSignatureGlyph.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TimeSignatureGlyph.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TimeSignatureGlyph.html#constructor\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"timeSignature\",\"url\":\"classes/TimeSignatureGlyph.html#timeSignature\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"topStartX\",\"url\":\"classes/TimeSignatureGlyph.html#topStartX\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"botStartX\",\"url\":\"classes/TimeSignatureGlyph.html#botStartX\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"classes/TimeSignatureGlyph.html#width\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"lineShift\",\"url\":\"classes/TimeSignatureGlyph.html#lineShift\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"xMin\",\"url\":\"classes/TimeSignatureGlyph.html#xMin\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/TimeSignatureGlyph.html#getMetrics\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"renderToStave\",\"url\":\"classes/TimeSignatureGlyph.html#renderToStave\",\"classes\":\"\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"bbox\",\"url\":\"classes/TimeSignatureGlyph.html#bbox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/TimeSignatureGlyph.html#code\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"metrics\",\"url\":\"classes/TimeSignatureGlyph.html#metrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"topGlyphs\",\"url\":\"classes/TimeSignatureGlyph.html#topGlyphs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"botGlyphs\",\"url\":\"classes/TimeSignatureGlyph.html#botGlyphs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/TimeSignatureGlyph.html#scale\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TimeSignatureGlyph.html#draw\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getCode\",\"url\":\"classes/TimeSignatureGlyph.html#getCode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setOptions\",\"url\":\"classes/TimeSignatureGlyph.html#setOptions\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setPoint\",\"url\":\"classes/TimeSignatureGlyph.html#setPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/TimeSignatureGlyph.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/TimeSignatureGlyph.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/TimeSignatureGlyph.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getYshift\",\"url\":\"classes/TimeSignatureGlyph.html#getYshift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/TimeSignatureGlyph.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/TimeSignatureGlyph.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"checkMetrics\",\"url\":\"classes/TimeSignatureGlyph.html#checkMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setOriginX\",\"url\":\"classes/TimeSignatureGlyph.html#setOriginX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setOriginY\",\"url\":\"classes/TimeSignatureGlyph.html#setOriginY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setOrigin\",\"url\":\"classes/TimeSignatureGlyph.html#setOrigin\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/TimeSignatureGlyph.html#render\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/TimeSignatureGlyph.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TimeSignatureGlyph.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TimeSignatureGlyph.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TimeSignatureGlyph.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TimeSignatureGlyph.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TimeSignatureGlyph.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TimeSignatureGlyph.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TimeSignatureGlyph.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TimeSignatureGlyph.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TimeSignatureGlyph.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TimeSignatureGlyph.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TimeSignatureGlyph.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TimeSignatureGlyph.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TimeSignatureGlyph.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TimeSignatureGlyph.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TimeSignatureGlyph.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TimeSignatureGlyph.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TimeSignatureGlyph.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TimeSignatureGlyph.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TimeSignatureGlyph.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TimeSignatureGlyph.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TimeSignatureGlyph.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TimeSignatureGlyph.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TimeSignatureGlyph.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TimeSignatureGlyph.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TimeSignatureGlyph.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TimeSignatureGlyph.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TimeSignatureGlyph.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TimeSignatureGlyph.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TimeSignatureGlyph.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TimeSignatureGlyph.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TimeSignatureGlyph.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TimeSignatureGlyph.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TimeSignatureGlyph.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TimeSignatureGlyph.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignatureGlyph\"},{\"kind\":256,\"name\":\"TimeSignatureInfo\",\"url\":\"interfaces/TimeSignatureInfo.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"glyph\",\"url\":\"interfaces/TimeSignatureInfo.html#glyph\",\"classes\":\"\",\"parent\":\"TimeSignatureInfo\"},{\"kind\":1024,\"name\":\"line\",\"url\":\"interfaces/TimeSignatureInfo.html#line\",\"classes\":\"\",\"parent\":\"TimeSignatureInfo\"},{\"kind\":1024,\"name\":\"num\",\"url\":\"interfaces/TimeSignatureInfo.html#num\",\"classes\":\"\",\"parent\":\"TimeSignatureInfo\"},{\"kind\":128,\"name\":\"TimeSignature\",\"url\":\"classes/TimeSignature.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TimeSignature.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"glyphs\",\"url\":\"classes/TimeSignature.html#glyphs\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/TimeSignature.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TimeSignature.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TimeSignature.html#constructor\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":1024,\"name\":\"point\",\"url\":\"classes/TimeSignature.html#point\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":1024,\"name\":\"bottomLine\",\"url\":\"classes/TimeSignature.html#bottomLine\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":1024,\"name\":\"topLine\",\"url\":\"classes/TimeSignature.html#topLine\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"parseTimeSpec\",\"url\":\"classes/TimeSignature.html#parseTimeSpec\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"makeTimeSignatureGlyph\",\"url\":\"classes/TimeSignature.html#makeTimeSignatureGlyph\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getInfo\",\"url\":\"classes/TimeSignature.html#getInfo\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setTimeSig\",\"url\":\"classes/TimeSignature.html#setTimeSig\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getTimeSpec\",\"url\":\"classes/TimeSignature.html#getTimeSpec\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getLine\",\"url\":\"classes/TimeSignature.html#getLine\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/TimeSignature.html#setLine\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/TimeSignature.html#getGlyph\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setGlyph\",\"url\":\"classes/TimeSignature.html#setGlyph\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getIsNumeric\",\"url\":\"classes/TimeSignature.html#getIsNumeric\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setIsNumeric\",\"url\":\"classes/TimeSignature.html#setIsNumeric\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TimeSignature.html#draw\",\"classes\":\"\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/TimeSignature.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/TimeSignature.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/TimeSignature.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/TimeSignature.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/TimeSignature.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TimeSignature.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/TimeSignature.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TimeSignature.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setX\",\"url\":\"classes/TimeSignature.html#setX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"placeGlyphOnLine\",\"url\":\"classes/TimeSignature.html#placeGlyphOnLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getPadding\",\"url\":\"classes/TimeSignature.html#getPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setPadding\",\"url\":\"classes/TimeSignature.html#setPadding\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setLayoutMetrics\",\"url\":\"classes/TimeSignature.html#setLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getLayoutMetrics\",\"url\":\"classes/TimeSignature.html#getLayoutMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TimeSignature.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TimeSignature.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TimeSignature.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TimeSignature.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TimeSignature.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TimeSignature.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TimeSignature.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TimeSignature.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TimeSignature.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TimeSignature.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TimeSignature.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TimeSignature.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TimeSignature.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TimeSignature.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TimeSignature.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TimeSignature.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TimeSignature.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TimeSignature.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TimeSignature.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TimeSignature.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TimeSignature.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TimeSignature.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TimeSignature.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TimeSignature.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TimeSignature.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TimeSignature.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TimeSignature.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TimeSignature.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TimeSignature.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TimeSignature.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TimeSignature.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TimeSignature.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TimeSignature.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TimeSignature.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSignature\"},{\"kind\":128,\"name\":\"TimeSigNote\",\"url\":\"classes/TimeSigNote.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/TimeSigNote.html#CATEGORY\",\"classes\":\"\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"plotMetrics\",\"url\":\"classes/TimeSigNote.html#plotMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getPoint\",\"url\":\"classes/TimeSigNote.html#getPoint\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/TimeSigNote.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TimeSigNote.html#constructor\",\"classes\":\"\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"addToModifierContext\",\"url\":\"classes/TimeSigNote.html#addToModifierContext\",\"classes\":\"\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/TimeSigNote.html#preFormat\",\"classes\":\"\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/TimeSigNote.html#draw-1\",\"classes\":\"\",\"parent\":\"TimeSigNote\"},{\"kind\":1024,\"name\":\"glyphProps\",\"url\":\"classes/TimeSigNote.html#glyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":1024,\"name\":\"keys\",\"url\":\"classes/TimeSigNote.html#keys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":1024,\"name\":\"keyProps\",\"url\":\"classes/TimeSigNote.html#keyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/TimeSigNote.html#render_options\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TimeSigNote.html#render_options.__type\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options\"},{\"kind\":1024,\"name\":\"draw_stem_through_stave\",\"url\":\"classes/TimeSigNote.html#render_options.__type.draw_stem_through_stave\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/TimeSigNote.html#render_options.__type.draw\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_dots\",\"url\":\"classes/TimeSigNote.html#render_options.__type.draw_dots\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"draw_stem\",\"url\":\"classes/TimeSigNote.html#render_options.__type.draw_stem\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"y_shift\",\"url\":\"classes/TimeSigNote.html#render_options.__type.y_shift\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_left\",\"url\":\"classes/TimeSigNote.html#render_options.__type.extend_left\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"extend_right\",\"url\":\"classes/TimeSigNote.html#render_options.__type.extend_right\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_scale\",\"url\":\"classes/TimeSigNote.html#render_options.__type.glyph_font_scale\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"annotation_spacing\",\"url\":\"classes/TimeSigNote.html#render_options.__type.annotation_spacing\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"glyph_font_size\",\"url\":\"classes/TimeSigNote.html#render_options.__type.glyph_font_size\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"scale\",\"url\":\"classes/TimeSigNote.html#render_options.__type.scale\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"classes/TimeSigNote.html#render_options.__type.font\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":1024,\"name\":\"stroke_px\",\"url\":\"classes/TimeSigNote.html#render_options.__type.stroke_px\",\"classes\":\"\",\"parent\":\"TimeSigNote.render_options.__type\"},{\"kind\":2048,\"name\":\"getPlayNote\",\"url\":\"classes/TimeSigNote.html#getPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setPlayNote\",\"url\":\"classes/TimeSigNote.html#setPlayNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"isRest\",\"url\":\"classes/TimeSigNote.html#isRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"addStroke\",\"url\":\"classes/TimeSigNote.html#addStroke\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/TimeSigNote.html#getStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/TimeSigNote.html#checkStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/TimeSigNote.html#setStave\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getLeftDisplacedHeadPx\",\"url\":\"classes/TimeSigNote.html#getLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getRightDisplacedHeadPx\",\"url\":\"classes/TimeSigNote.html#getRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setLeftDisplacedHeadPx\",\"url\":\"classes/TimeSigNote.html#setLeftDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setRightDisplacedHeadPx\",\"url\":\"classes/TimeSigNote.html#setRightDisplacedHeadPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"shouldIgnoreTicks\",\"url\":\"classes/TimeSigNote.html#shouldIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getLineNumber\",\"url\":\"classes/TimeSigNote.html#getLineNumber\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getLineForRest\",\"url\":\"classes/TimeSigNote.html#getLineForRest\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getGlyph\",\"url\":\"classes/TimeSigNote.html#getGlyph\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getGlyphProps\",\"url\":\"classes/TimeSigNote.html#getGlyphProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getGlyphWidth\",\"url\":\"classes/TimeSigNote.html#getGlyphWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setYs\",\"url\":\"classes/TimeSigNote.html#setYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getYs\",\"url\":\"classes/TimeSigNote.html#getYs\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getYForTopText\",\"url\":\"classes/TimeSigNote.html#getYForTopText\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getVoice\",\"url\":\"classes/TimeSigNote.html#getVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setVoice\",\"url\":\"classes/TimeSigNote.html#setVoice\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTickContext\",\"url\":\"classes/TimeSigNote.html#getTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setTickContext\",\"url\":\"classes/TimeSigNote.html#setTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getDuration\",\"url\":\"classes/TimeSigNote.html#getDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"isDotted\",\"url\":\"classes/TimeSigNote.html#isDotted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"hasStem\",\"url\":\"classes/TimeSigNote.html#hasStem\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getNoteType\",\"url\":\"classes/TimeSigNote.html#getNoteType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getBeam\",\"url\":\"classes/TimeSigNote.html#getBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"checkBeam\",\"url\":\"classes/TimeSigNote.html#checkBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"hasBeam\",\"url\":\"classes/TimeSigNote.html#hasBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setBeam\",\"url\":\"classes/TimeSigNote.html#setBeam\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"addModifier\",\"url\":\"classes/TimeSigNote.html#addModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getModifiersByType\",\"url\":\"classes/TimeSigNote.html#getModifiersByType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getModifierStartXY\",\"url\":\"classes/TimeSigNote.html#getModifierStartXY\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/TimeSigNote.html#getModifierStartXY.getModifierStartXY-1.__type-1\",\"classes\":\"\",\"parent\":\"TimeSigNote.getModifierStartXY.getModifierStartXY\"},{\"kind\":1024,\"name\":\"x\",\"url\":\"classes/TimeSigNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.x\",\"classes\":\"\",\"parent\":\"TimeSigNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":1024,\"name\":\"y\",\"url\":\"classes/TimeSigNote.html#getModifierStartXY.getModifierStartXY-1.__type-1.y\",\"classes\":\"\",\"parent\":\"TimeSigNote.getModifierStartXY.getModifierStartXY.__type\"},{\"kind\":2048,\"name\":\"getRightParenthesisPx\",\"url\":\"classes/TimeSigNote.html#getRightParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getLeftParenthesisPx\",\"url\":\"classes/TimeSigNote.html#getLeftParenthesisPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getFirstDotPx\",\"url\":\"classes/TimeSigNote.html#getFirstDotPx\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getMetrics\",\"url\":\"classes/TimeSigNote.html#getMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getAbsoluteX\",\"url\":\"classes/TimeSigNote.html#getAbsoluteX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getStemDirection\",\"url\":\"classes/TimeSigNote.html#getStemDirection\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getStemExtents\",\"url\":\"classes/TimeSigNote.html#getStemExtents\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTieRightX\",\"url\":\"classes/TimeSigNote.html#getTieRightX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTieLeftX\",\"url\":\"classes/TimeSigNote.html#getTieLeftX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getKeys\",\"url\":\"classes/TimeSigNote.html#getKeys\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getKeyProps\",\"url\":\"classes/TimeSigNote.html#getKeyProps\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/TimeSigNote.html#reset\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTicks\",\"url\":\"classes/TimeSigNote.html#getTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setIgnoreTicks\",\"url\":\"classes/TimeSigNote.html#setIgnoreTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/TimeSigNote.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/TimeSigNote.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/TimeSigNote.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/TimeSigNote.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getX\",\"url\":\"classes/TimeSigNote.html#getX\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getFormatterMetrics\",\"url\":\"classes/TimeSigNote.html#getFormatterMetrics\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getCenterXShift\",\"url\":\"classes/TimeSigNote.html#getCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setCenterXShift\",\"url\":\"classes/TimeSigNote.html#setCenterXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"isCenterAligned\",\"url\":\"classes/TimeSigNote.html#isCenterAligned\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setCenterAlignment\",\"url\":\"classes/TimeSigNote.html#setCenterAlignment\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTuplet\",\"url\":\"classes/TimeSigNote.html#getTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTupletStack\",\"url\":\"classes/TimeSigNote.html#getTupletStack\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"resetTuplet\",\"url\":\"classes/TimeSigNote.html#resetTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setTuplet\",\"url\":\"classes/TimeSigNote.html#setTuplet\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getModifiers\",\"url\":\"classes/TimeSigNote.html#getModifiers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"checkTickContext\",\"url\":\"classes/TimeSigNote.html#checkTickContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"preFormatted\",\"url\":\"classes/TimeSigNote.html#preFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"postFormat\",\"url\":\"classes/TimeSigNote.html#postFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"postFormatted\",\"url\":\"classes/TimeSigNote.html#postFormatted\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getIntrinsicTicks\",\"url\":\"classes/TimeSigNote.html#getIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setIntrinsicTicks\",\"url\":\"classes/TimeSigNote.html#setIntrinsicTicks\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getTickMultiplier\",\"url\":\"classes/TimeSigNote.html#getTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"applyTickMultiplier\",\"url\":\"classes/TimeSigNote.html#applyTickMultiplier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setDuration\",\"url\":\"classes/TimeSigNote.html#setDuration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/TimeSigNote.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/TimeSigNote.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/TimeSigNote.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/TimeSigNote.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/TimeSigNote.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/TimeSigNote.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/TimeSigNote.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/TimeSigNote.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/TimeSigNote.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/TimeSigNote.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/TimeSigNote.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/TimeSigNote.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/TimeSigNote.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/TimeSigNote.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/TimeSigNote.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/TimeSigNote.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/TimeSigNote.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/TimeSigNote.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/TimeSigNote.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/TimeSigNote.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/TimeSigNote.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/TimeSigNote.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/TimeSigNote.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/TimeSigNote.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/TimeSigNote.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/TimeSigNote.html#font-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/TimeSigNote.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/TimeSigNote.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/TimeSigNote.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/TimeSigNote.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/TimeSigNote.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/TimeSigNote.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/TimeSigNote.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/TimeSigNote.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/TimeSigNote.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/TimeSigNote.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/TimeSigNote.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeSigNote\"},{\"kind\":128,\"name\":\"Tremolo\",\"url\":\"classes/Tremolo.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Tremolo.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Tremolo.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Tremolo.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Tremolo.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tremolo.html#constructor\",\"classes\":\"\",\"parent\":\"Tremolo\"},{\"kind\":1024,\"name\":\"y_spacing_scale\",\"url\":\"classes/Tremolo.html#y_spacing_scale\",\"classes\":\"\",\"parent\":\"Tremolo\"},{\"kind\":1024,\"name\":\"extra_stroke_scale\",\"url\":\"classes/Tremolo.html#extra_stroke_scale\",\"classes\":\"\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Tremolo.html#draw\",\"classes\":\"\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Tremolo.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Tremolo.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Tremolo.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Tremolo.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Tremolo.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Tremolo.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Tremolo.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Tremolo.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Tremolo.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Tremolo.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Tremolo.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Tremolo.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Tremolo.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Tremolo.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Tremolo.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Tremolo.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Tremolo.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Tremolo.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Tremolo.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Tremolo.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Tremolo.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Tremolo.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Tremolo.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Tremolo.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Tremolo.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Tremolo.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Tremolo.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Tremolo.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Tremolo.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Tremolo.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Tremolo.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Tremolo.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Tremolo.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Tremolo.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Tremolo.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Tremolo.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Tremolo.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Tremolo.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Tremolo.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Tremolo.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Tremolo.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Tremolo.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Tremolo.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Tremolo.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Tremolo.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Tremolo.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Tremolo.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Tremolo.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Tremolo.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Tremolo.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Tremolo.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Tremolo.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Tremolo.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Tremolo.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tremolo\"},{\"kind\":128,\"name\":\"Tuning\",\"url\":\"classes/Tuning.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"names\",\"url\":\"classes/Tuning.html#names\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tuning.html#constructor\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":2048,\"name\":\"noteToInteger\",\"url\":\"classes/Tuning.html#noteToInteger\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":2048,\"name\":\"setTuning\",\"url\":\"classes/Tuning.html#setTuning\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":2048,\"name\":\"getValueForString\",\"url\":\"classes/Tuning.html#getValueForString\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":2048,\"name\":\"getValueForFret\",\"url\":\"classes/Tuning.html#getValueForFret\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":2048,\"name\":\"getNoteForFret\",\"url\":\"classes/Tuning.html#getNoteForFret\",\"classes\":\"\",\"parent\":\"Tuning\"},{\"kind\":256,\"name\":\"TupletOptions\",\"url\":\"interfaces/TupletOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"beats_occupied\",\"url\":\"interfaces/TupletOptions.html#beats_occupied\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":1024,\"name\":\"bracketed\",\"url\":\"interfaces/TupletOptions.html#bracketed\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":1024,\"name\":\"location\",\"url\":\"interfaces/TupletOptions.html#location\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":1024,\"name\":\"notes_occupied\",\"url\":\"interfaces/TupletOptions.html#notes_occupied\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":1024,\"name\":\"num_notes\",\"url\":\"interfaces/TupletOptions.html#num_notes\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":1024,\"name\":\"ratioed\",\"url\":\"interfaces/TupletOptions.html#ratioed\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":1024,\"name\":\"y_offset\",\"url\":\"interfaces/TupletOptions.html#y_offset\",\"classes\":\"\",\"parent\":\"TupletOptions\"},{\"kind\":256,\"name\":\"TupletMetrics\",\"url\":\"interfaces/TupletMetrics.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"noteHeadOffset\",\"url\":\"interfaces/TupletMetrics.html#noteHeadOffset\",\"classes\":\"\",\"parent\":\"TupletMetrics\"},{\"kind\":1024,\"name\":\"stemOffset\",\"url\":\"interfaces/TupletMetrics.html#stemOffset\",\"classes\":\"\",\"parent\":\"TupletMetrics\"},{\"kind\":1024,\"name\":\"bottomLine\",\"url\":\"interfaces/TupletMetrics.html#bottomLine\",\"classes\":\"\",\"parent\":\"TupletMetrics\"},{\"kind\":1024,\"name\":\"topModifierOffset\",\"url\":\"interfaces/TupletMetrics.html#topModifierOffset\",\"classes\":\"\",\"parent\":\"TupletMetrics\"},{\"kind\":8,\"name\":\"TupletLocation\",\"url\":\"enums/TupletLocation.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"BOTTOM\",\"url\":\"enums/TupletLocation.html#BOTTOM\",\"classes\":\"\",\"parent\":\"TupletLocation\"},{\"kind\":16,\"name\":\"TOP\",\"url\":\"enums/TupletLocation.html#TOP\",\"classes\":\"\",\"parent\":\"TupletLocation\"},{\"kind\":128,\"name\":\"Tuplet\",\"url\":\"classes/Tuplet.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Tuplet.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"LOCATION_TOP\",\"url\":\"classes/Tuplet.html#LOCATION_TOP\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"LOCATION_BOTTOM\",\"url\":\"classes/Tuplet.html#LOCATION_BOTTOM\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"NESTING_OFFSET\",\"url\":\"classes/Tuplet.html#NESTING_OFFSET\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"metrics\",\"url\":\"classes/Tuplet.html#metrics\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Tuplet.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tuplet.html#constructor\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":1024,\"name\":\"notes\",\"url\":\"classes/Tuplet.html#notes\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"attach\",\"url\":\"classes/Tuplet.html#attach\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"detach\",\"url\":\"classes/Tuplet.html#detach\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setBracketed\",\"url\":\"classes/Tuplet.html#setBracketed\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setRatioed\",\"url\":\"classes/Tuplet.html#setRatioed\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setTupletLocation\",\"url\":\"classes/Tuplet.html#setTupletLocation\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getNotes\",\"url\":\"classes/Tuplet.html#getNotes\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getNoteCount\",\"url\":\"classes/Tuplet.html#getNoteCount\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"beatsOccupiedDeprecationWarning\",\"url\":\"classes/Tuplet.html#beatsOccupiedDeprecationWarning\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getBeatsOccupied\",\"url\":\"classes/Tuplet.html#getBeatsOccupied\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setBeatsOccupied\",\"url\":\"classes/Tuplet.html#setBeatsOccupied\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getNotesOccupied\",\"url\":\"classes/Tuplet.html#getNotesOccupied\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setNotesOccupied\",\"url\":\"classes/Tuplet.html#setNotesOccupied\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"resolveGlyphs\",\"url\":\"classes/Tuplet.html#resolveGlyphs\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getNestedTupletCount\",\"url\":\"classes/Tuplet.html#getNestedTupletCount\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getYPosition\",\"url\":\"classes/Tuplet.html#getYPosition\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Tuplet.html#draw\",\"classes\":\"\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Tuplet.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Tuplet.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Tuplet.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Tuplet.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Tuplet.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Tuplet.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Tuplet.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Tuplet.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Tuplet.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Tuplet.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Tuplet.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Tuplet.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Tuplet.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Tuplet.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Tuplet.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Tuplet.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Tuplet.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Tuplet.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Tuplet.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Tuplet.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Tuplet.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Tuplet.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Tuplet.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Tuplet.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Tuplet.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Tuplet.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Tuplet.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Tuplet.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Tuplet.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Tuplet.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Tuplet.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Tuplet.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Tuplet.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Tuplet.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Tuplet\"},{\"kind\":64,\"name\":\"isCategory\",\"url\":\"functions/isCategory.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isAccidental\",\"url\":\"functions/isAccidental.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isAnnotation\",\"url\":\"functions/isAnnotation.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isBarline\",\"url\":\"functions/isBarline.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isDot\",\"url\":\"functions/isDot.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isGraceNote\",\"url\":\"functions/isGraceNote.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isGraceNoteGroup\",\"url\":\"functions/isGraceNoteGroup.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isNote\",\"url\":\"functions/isNote.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isRenderContext\",\"url\":\"functions/isRenderContext.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isStaveNote\",\"url\":\"functions/isStaveNote.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isStemmableNote\",\"url\":\"functions/isStemmableNote.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isTabNote\",\"url\":\"functions/isTabNote.html\",\"classes\":\"\"},{\"kind\":8,\"name\":\"Category\",\"url\":\"enums/Category.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"Accidental\",\"url\":\"enums/Category.html#Accidental\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Annotation\",\"url\":\"enums/Category.html#Annotation\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Articulation\",\"url\":\"enums/Category.html#Articulation\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Barline\",\"url\":\"enums/Category.html#Barline\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"BarNote\",\"url\":\"enums/Category.html#BarNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Beam\",\"url\":\"enums/Category.html#Beam\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Bend\",\"url\":\"enums/Category.html#Bend\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"ChordSymbol\",\"url\":\"enums/Category.html#ChordSymbol\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Clef\",\"url\":\"enums/Category.html#Clef\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"ClefNote\",\"url\":\"enums/Category.html#ClefNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Crescendo\",\"url\":\"enums/Category.html#Crescendo\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Curve\",\"url\":\"enums/Category.html#Curve\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Dot\",\"url\":\"enums/Category.html#Dot\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Element\",\"url\":\"enums/Category.html#Element\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Fraction\",\"url\":\"enums/Category.html#Fraction\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"FretHandFinger\",\"url\":\"enums/Category.html#FretHandFinger\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"GhostNote\",\"url\":\"enums/Category.html#GhostNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Glyph\",\"url\":\"enums/Category.html#Glyph\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"GlyphNote\",\"url\":\"enums/Category.html#GlyphNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"GraceNote\",\"url\":\"enums/Category.html#GraceNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"GraceNoteGroup\",\"url\":\"enums/Category.html#GraceNoteGroup\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"GraceTabNote\",\"url\":\"enums/Category.html#GraceTabNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"KeySignature\",\"url\":\"enums/Category.html#KeySignature\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"KeySigNote\",\"url\":\"enums/Category.html#KeySigNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Modifier\",\"url\":\"enums/Category.html#Modifier\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"MultiMeasureRest\",\"url\":\"enums/Category.html#MultiMeasureRest\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Note\",\"url\":\"enums/Category.html#Note\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"NoteHead\",\"url\":\"enums/Category.html#NoteHead\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"NoteSubGroup\",\"url\":\"enums/Category.html#NoteSubGroup\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Ornament\",\"url\":\"enums/Category.html#Ornament\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Parenthesis\",\"url\":\"enums/Category.html#Parenthesis\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"PedalMarking\",\"url\":\"enums/Category.html#PedalMarking\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"RenderContext\",\"url\":\"enums/Category.html#RenderContext\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"RepeatNote\",\"url\":\"enums/Category.html#RepeatNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Repetition\",\"url\":\"enums/Category.html#Repetition\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Stave\",\"url\":\"enums/Category.html#Stave\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveConnector\",\"url\":\"enums/Category.html#StaveConnector\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveHairpin\",\"url\":\"enums/Category.html#StaveHairpin\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveLine\",\"url\":\"enums/Category.html#StaveLine\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveModifier\",\"url\":\"enums/Category.html#StaveModifier\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveNote\",\"url\":\"enums/Category.html#StaveNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveSection\",\"url\":\"enums/Category.html#StaveSection\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveTempo\",\"url\":\"enums/Category.html#StaveTempo\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveText\",\"url\":\"enums/Category.html#StaveText\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StaveTie\",\"url\":\"enums/Category.html#StaveTie\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Stem\",\"url\":\"enums/Category.html#Stem\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StemmableNote\",\"url\":\"enums/Category.html#StemmableNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"StringNumber\",\"url\":\"enums/Category.html#StringNumber\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Stroke\",\"url\":\"enums/Category.html#Stroke\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"System\",\"url\":\"enums/Category.html#System\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TabNote\",\"url\":\"enums/Category.html#TabNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TabSlide\",\"url\":\"enums/Category.html#TabSlide\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TabStave\",\"url\":\"enums/Category.html#TabStave\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TabTie\",\"url\":\"enums/Category.html#TabTie\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TextBracket\",\"url\":\"enums/Category.html#TextBracket\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TextDynamics\",\"url\":\"enums/Category.html#TextDynamics\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TextNote\",\"url\":\"enums/Category.html#TextNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Tickable\",\"url\":\"enums/Category.html#Tickable\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TimeSignature\",\"url\":\"enums/Category.html#TimeSignature\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"TimeSigNote\",\"url\":\"enums/Category.html#TimeSigNote\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Tremolo\",\"url\":\"enums/Category.html#Tremolo\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Tuplet\",\"url\":\"enums/Category.html#Tuplet\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Vibrato\",\"url\":\"enums/Category.html#Vibrato\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"VibratoBracket\",\"url\":\"enums/Category.html#VibratoBracket\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Voice\",\"url\":\"enums/Category.html#Voice\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":16,\"name\":\"Volta\",\"url\":\"enums/Category.html#Volta\",\"classes\":\"\",\"parent\":\"Category\"},{\"kind\":64,\"name\":\"globalObject\",\"url\":\"functions/globalObject.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"defined\",\"url\":\"functions/defined.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"log\",\"url\":\"functions/log.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"warn\",\"url\":\"functions/warn.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"midLine\",\"url\":\"functions/midLine.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"prefix\",\"url\":\"functions/prefix.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"normalizeAngle\",\"url\":\"functions/normalizeAngle.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"sumArray\",\"url\":\"functions/sumArray.html\",\"classes\":\"\"},{\"kind\":128,\"name\":\"RuntimeError\",\"url\":\"classes/RuntimeError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RuntimeError.html#constructor\",\"classes\":\"\",\"parent\":\"RuntimeError\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/RuntimeError.html#code\",\"classes\":\"\",\"parent\":\"RuntimeError\"},{\"kind\":128,\"name\":\"Vex\",\"url\":\"classes/Vex.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"Flow\",\"url\":\"classes/Vex.html#Flow\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":2048,\"name\":\"sortAndUnique\",\"url\":\"classes/Vex.html#sortAndUnique\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":2048,\"name\":\"contains\",\"url\":\"classes/Vex.html#contains\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":2048,\"name\":\"getCanvasContext\",\"url\":\"classes/Vex.html#getCanvasContext\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":2048,\"name\":\"benchmark\",\"url\":\"classes/Vex.html#benchmark\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":2048,\"name\":\"stackTrace\",\"url\":\"classes/Vex.html#stackTrace\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":1024,\"name\":\"RERR\",\"url\":\"classes/Vex.html#RERR\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":1024,\"name\":\"RuntimeError\",\"url\":\"classes/Vex.html#RuntimeError\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Vex.html#constructor\",\"classes\":\"\",\"parent\":\"Vex\"},{\"kind\":256,\"name\":\"VibratoRenderOptions\",\"url\":\"interfaces/VibratoRenderOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"wave_height\",\"url\":\"interfaces/VibratoRenderOptions.html#wave_height\",\"classes\":\"\",\"parent\":\"VibratoRenderOptions\"},{\"kind\":1024,\"name\":\"wave_girth\",\"url\":\"interfaces/VibratoRenderOptions.html#wave_girth\",\"classes\":\"\",\"parent\":\"VibratoRenderOptions\"},{\"kind\":1024,\"name\":\"vibrato_width\",\"url\":\"interfaces/VibratoRenderOptions.html#vibrato_width\",\"classes\":\"\",\"parent\":\"VibratoRenderOptions\"},{\"kind\":1024,\"name\":\"harsh\",\"url\":\"interfaces/VibratoRenderOptions.html#harsh\",\"classes\":\"\",\"parent\":\"VibratoRenderOptions\"},{\"kind\":1024,\"name\":\"wave_width\",\"url\":\"interfaces/VibratoRenderOptions.html#wave_width\",\"classes\":\"\",\"parent\":\"VibratoRenderOptions\"},{\"kind\":128,\"name\":\"Vibrato\",\"url\":\"classes/Vibrato.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Vibrato.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"format\",\"url\":\"classes/Vibrato.html#format\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"renderVibrato\",\"url\":\"classes/Vibrato.html#renderVibrato\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"Position\",\"url\":\"classes/Vibrato.html#Position\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"PositionString\",\"url\":\"classes/Vibrato.html#PositionString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Vibrato.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Vibrato.html#constructor\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/Vibrato.html#render_options\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setHarsh\",\"url\":\"classes/Vibrato.html#setHarsh\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setVibratoWidth\",\"url\":\"classes/Vibrato.html#setVibratoWidth\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Vibrato.html#draw\",\"classes\":\"\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getWidth\",\"url\":\"classes/Vibrato.html#getWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setWidth\",\"url\":\"classes/Vibrato.html#setWidth\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getNote\",\"url\":\"classes/Vibrato.html#getNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"checkAttachedNote\",\"url\":\"classes/Vibrato.html#checkAttachedNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setNote\",\"url\":\"classes/Vibrato.html#setNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getIndex\",\"url\":\"classes/Vibrato.html#getIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"checkIndex\",\"url\":\"classes/Vibrato.html#checkIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setIndex\",\"url\":\"classes/Vibrato.html#setIndex\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getModifierContext\",\"url\":\"classes/Vibrato.html#getModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"checkModifierContext\",\"url\":\"classes/Vibrato.html#checkModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setModifierContext\",\"url\":\"classes/Vibrato.html#setModifierContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Vibrato.html#getPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setPosition\",\"url\":\"classes/Vibrato.html#setPosition\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setTextLine\",\"url\":\"classes/Vibrato.html#setTextLine\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setYShift\",\"url\":\"classes/Vibrato.html#setYShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setSpacingFromNextModifier\",\"url\":\"classes/Vibrato.html#setSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getSpacingFromNextModifier\",\"url\":\"classes/Vibrato.html#getSpacingFromNextModifier\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setXShift\",\"url\":\"classes/Vibrato.html#setXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getXShift\",\"url\":\"classes/Vibrato.html#getXShift\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"alignSubNotesWithNote\",\"url\":\"classes/Vibrato.html#alignSubNotesWithNote\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Vibrato.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Vibrato.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Vibrato.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Vibrato.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Vibrato.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Vibrato.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Vibrato.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Vibrato.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Vibrato.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Vibrato.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Vibrato.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Vibrato.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Vibrato.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Vibrato.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Vibrato.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Vibrato.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Vibrato.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Vibrato.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Vibrato.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Vibrato.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Vibrato.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Vibrato.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Vibrato.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Vibrato.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Vibrato.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Vibrato.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Vibrato.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Vibrato.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Vibrato.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Vibrato.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Vibrato.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Vibrato.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Vibrato.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Vibrato.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Vibrato\"},{\"kind\":128,\"name\":\"VibratoBracket\",\"url\":\"classes/VibratoBracket.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DEBUG\",\"url\":\"classes/VibratoBracket.html#DEBUG\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/VibratoBracket.html#CATEGORY\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/VibratoBracket.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/VibratoBracket.html#constructor\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":1024,\"name\":\"render_options\",\"url\":\"classes/VibratoBracket.html#render_options\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/VibratoBracket.html#render_options.__type\",\"classes\":\"\",\"parent\":\"VibratoBracket.render_options\"},{\"kind\":1024,\"name\":\"vibrato_width\",\"url\":\"classes/VibratoBracket.html#render_options.__type.vibrato_width\",\"classes\":\"\",\"parent\":\"VibratoBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"wave_height\",\"url\":\"classes/VibratoBracket.html#render_options.__type.wave_height\",\"classes\":\"\",\"parent\":\"VibratoBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"wave_girth\",\"url\":\"classes/VibratoBracket.html#render_options.__type.wave_girth\",\"classes\":\"\",\"parent\":\"VibratoBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"harsh\",\"url\":\"classes/VibratoBracket.html#render_options.__type.harsh\",\"classes\":\"\",\"parent\":\"VibratoBracket.render_options.__type\"},{\"kind\":1024,\"name\":\"wave_width\",\"url\":\"classes/VibratoBracket.html#render_options.__type.wave_width\",\"classes\":\"\",\"parent\":\"VibratoBracket.render_options.__type\"},{\"kind\":2048,\"name\":\"setLine\",\"url\":\"classes/VibratoBracket.html#setLine\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setHarsh\",\"url\":\"classes/VibratoBracket.html#setHarsh\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/VibratoBracket.html#draw\",\"classes\":\"\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/VibratoBracket.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/VibratoBracket.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/VibratoBracket.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/VibratoBracket.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/VibratoBracket.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/VibratoBracket.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/VibratoBracket.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/VibratoBracket.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/VibratoBracket.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/VibratoBracket.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/VibratoBracket.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/VibratoBracket.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/VibratoBracket.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/VibratoBracket.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/VibratoBracket.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/VibratoBracket.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/VibratoBracket.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/VibratoBracket.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/VibratoBracket.html#getBoundingBox\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/VibratoBracket.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/VibratoBracket.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/VibratoBracket.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/VibratoBracket.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/VibratoBracket.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/VibratoBracket.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/VibratoBracket.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/VibratoBracket.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/VibratoBracket.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/VibratoBracket.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/VibratoBracket.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/VibratoBracket.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/VibratoBracket.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/VibratoBracket.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/VibratoBracket.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"VibratoBracket\"},{\"kind\":256,\"name\":\"VoiceTime\",\"url\":\"interfaces/VoiceTime.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"num_beats\",\"url\":\"interfaces/VoiceTime.html#num_beats\",\"classes\":\"\",\"parent\":\"VoiceTime\"},{\"kind\":1024,\"name\":\"beat_value\",\"url\":\"interfaces/VoiceTime.html#beat_value\",\"classes\":\"\",\"parent\":\"VoiceTime\"},{\"kind\":1024,\"name\":\"resolution\",\"url\":\"interfaces/VoiceTime.html#resolution\",\"classes\":\"\",\"parent\":\"VoiceTime\"},{\"kind\":8,\"name\":\"VoiceMode\",\"url\":\"enums/VoiceMode.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"STRICT\",\"url\":\"enums/VoiceMode.html#STRICT\",\"classes\":\"\",\"parent\":\"VoiceMode\"},{\"kind\":16,\"name\":\"SOFT\",\"url\":\"enums/VoiceMode.html#SOFT\",\"classes\":\"\",\"parent\":\"VoiceMode\"},{\"kind\":16,\"name\":\"FULL\",\"url\":\"enums/VoiceMode.html#FULL\",\"classes\":\"\",\"parent\":\"VoiceMode\"},{\"kind\":128,\"name\":\"Voice\",\"url\":\"classes/Voice.html\",\"classes\":\"\"},{\"kind\":262144,\"name\":\"CATEGORY\",\"url\":\"classes/Voice.html#CATEGORY\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"Mode\",\"url\":\"classes/Voice.html#Mode\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":1024,\"name\":\"TEXT_FONT\",\"url\":\"classes/Voice.html#TEXT_FONT\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Voice.html#constructor\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getTotalTicks\",\"url\":\"classes/Voice.html#getTotalTicks\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getTicksUsed\",\"url\":\"classes/Voice.html#getTicksUsed\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getLargestTickWidth\",\"url\":\"classes/Voice.html#getLargestTickWidth\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getSmallestTickCount\",\"url\":\"classes/Voice.html#getSmallestTickCount\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getTickables\",\"url\":\"classes/Voice.html#getTickables\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getMode\",\"url\":\"classes/Voice.html#getMode\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setMode\",\"url\":\"classes/Voice.html#setMode\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getResolutionMultiplier\",\"url\":\"classes/Voice.html#getResolutionMultiplier\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getActualResolution\",\"url\":\"classes/Voice.html#getActualResolution\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setStave\",\"url\":\"classes/Voice.html#setStave\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getStave\",\"url\":\"classes/Voice.html#getStave\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getBoundingBox\",\"url\":\"classes/Voice.html#getBoundingBox\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setStrict\",\"url\":\"classes/Voice.html#setStrict\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"isComplete\",\"url\":\"classes/Voice.html#isComplete\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setSoftmaxFactor\",\"url\":\"classes/Voice.html#setSoftmaxFactor\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"softmax\",\"url\":\"classes/Voice.html#softmax\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"addTickable\",\"url\":\"classes/Voice.html#addTickable\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"addTickables\",\"url\":\"classes/Voice.html#addTickables\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"preFormat\",\"url\":\"classes/Voice.html#preFormat\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"checkStave\",\"url\":\"classes/Voice.html#checkStave\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"draw\",\"url\":\"classes/Voice.html#draw\",\"classes\":\"\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"addChildElement\",\"url\":\"classes/Voice.html#addChildElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getCategory\",\"url\":\"classes/Voice.html#getCategory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setStyle\",\"url\":\"classes/Voice.html#setStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setGroupStyle\",\"url\":\"classes/Voice.html#setGroupStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getStyle\",\"url\":\"classes/Voice.html#getStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"applyStyle\",\"url\":\"classes/Voice.html#applyStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"restoreStyle\",\"url\":\"classes/Voice.html#restoreStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"drawWithStyle\",\"url\":\"classes/Voice.html#drawWithStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"hasClass\",\"url\":\"classes/Voice.html#hasClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"addClass\",\"url\":\"classes/Voice.html#addClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"removeClass\",\"url\":\"classes/Voice.html#removeClass\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"onRegister\",\"url\":\"classes/Voice.html#onRegister\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"isRendered\",\"url\":\"classes/Voice.html#isRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setRendered\",\"url\":\"classes/Voice.html#setRendered\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getAttributes\",\"url\":\"classes/Voice.html#getAttributes\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getAttribute\",\"url\":\"classes/Voice.html#getAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getSVGElement\",\"url\":\"classes/Voice.html#getSVGElement\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setAttribute\",\"url\":\"classes/Voice.html#setAttribute\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getContext\",\"url\":\"classes/Voice.html#getContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setContext\",\"url\":\"classes/Voice.html#setContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"checkContext\",\"url\":\"classes/Voice.html#checkContext\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"font\",\"url\":\"classes/Voice.html#font\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setFont\",\"url\":\"classes/Voice.html#setFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getFont\",\"url\":\"classes/Voice.html#getFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"resetFont\",\"url\":\"classes/Voice.html#resetFont\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"fontInfo\",\"url\":\"classes/Voice.html#fontInfo\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"setFontSize\",\"url\":\"classes/Voice.html#setFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":2048,\"name\":\"getFontSize\",\"url\":\"classes/Voice.html#getFontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"fontSize\",\"url\":\"classes/Voice.html#fontSize\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"fontSizeInPoints\",\"url\":\"classes/Voice.html#fontSizeInPoints\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"fontSizeInPixels\",\"url\":\"classes/Voice.html#fontSizeInPixels\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"fontStyle\",\"url\":\"classes/Voice.html#fontStyle\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":262144,\"name\":\"fontWeight\",\"url\":\"classes/Voice.html#fontWeight\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Voice\"},{\"kind\":64,\"name\":\"isHTMLCanvas\",\"url\":\"functions/isHTMLCanvas.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isHTMLDiv\",\"url\":\"functions/isHTMLDiv.html\",\"classes\":\"\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,63.653]],[\"comment/0\",[]],[\"name/1\",[1,57.339]],[\"comment/1\",[]],[\"name/2\",[2,46.209]],[\"comment/2\",[]],[\"name/3\",[3,58.228]],[\"comment/3\",[]],[\"name/4\",[4,84.86]],[\"comment/4\",[]],[\"name/5\",[5,84.86]],[\"comment/5\",[]],[\"name/6\",[6,54.096]],[\"comment/6\",[]],[\"name/7\",[7,59.732]],[\"comment/7\",[]],[\"name/8\",[8,46.934]],[\"comment/8\",[]],[\"name/9\",[9,44.076]],[\"comment/9\",[]],[\"name/10\",[10,57.774]],[\"comment/10\",[]],[\"name/11\",[11,52.935]],[\"comment/11\",[]],[\"name/12\",[12,44.421]],[\"comment/12\",[]],[\"name/13\",[13,84.86]],[\"comment/13\",[]],[\"name/14\",[14,73.872]],[\"comment/14\",[]],[\"name/15\",[15,84.86]],[\"comment/15\",[]],[\"name/16\",[16,49.491]],[\"comment/16\",[]],[\"name/17\",[17,60.876]],[\"comment/17\",[]],[\"name/18\",[18,84.86]],[\"comment/18\",[]],[\"name/19\",[19,44.657]],[\"comment/19\",[]],[\"name/20\",[20,50.513]],[\"comment/20\",[]],[\"name/21\",[21,60.876]],[\"comment/21\",[]],[\"name/22\",[22,60.876]],[\"comment/22\",[]],[\"name/23\",[23,60.876]],[\"comment/23\",[]],[\"name/24\",[24,60.876]],[\"comment/24\",[]],[\"name/25\",[25,60.876]],[\"comment/25\",[]],[\"name/26\",[26,53.498]],[\"comment/26\",[]],[\"name/27\",[27,53.498]],[\"comment/27\",[]],[\"name/28\",[28,53.498]],[\"comment/28\",[]],[\"name/29\",[29,56.137]],[\"comment/29\",[]],[\"name/30\",[30,55.767]],[\"comment/30\",[]],[\"name/31\",[31,60.876]],[\"comment/31\",[]],[\"name/32\",[32,59.732]],[\"comment/32\",[]],[\"name/33\",[33,60.876]],[\"comment/33\",[]],[\"name/34\",[34,60.876]],[\"comment/34\",[]],[\"name/35\",[35,52.664]],[\"comment/35\",[]],[\"name/36\",[36,52.664]],[\"comment/36\",[]],[\"name/37\",[37,60.876]],[\"comment/37\",[]],[\"name/38\",[38,47.086]],[\"comment/38\",[]],[\"name/39\",[39,47.086]],[\"comment/39\",[]],[\"name/40\",[40,47.086]],[\"comment/40\",[]],[\"name/41\",[41,47.086]],[\"comment/41\",[]],[\"name/42\",[42,47.086]],[\"comment/42\",[]],[\"name/43\",[43,47.086]],[\"comment/43\",[]],[\"name/44\",[44,47.086]],[\"comment/44\",[]],[\"name/45\",[45,47.086]],[\"comment/45\",[]],[\"name/46\",[46,47.086]],[\"comment/46\",[]],[\"name/47\",[47,47.086]],[\"comment/47\",[]],[\"name/48\",[48,47.086]],[\"comment/48\",[]],[\"name/49\",[49,47.086]],[\"comment/49\",[]],[\"name/50\",[50,47.086]],[\"comment/50\",[]],[\"name/51\",[51,47.086]],[\"comment/51\",[]],[\"name/52\",[52,47.086]],[\"comment/52\",[]],[\"name/53\",[53,47.086]],[\"comment/53\",[]],[\"name/54\",[54,47.086]],[\"comment/54\",[]],[\"name/55\",[55,47.086]],[\"comment/55\",[]],[\"name/56\",[56,47.086]],[\"comment/56\",[]],[\"name/57\",[57,46.785]],[\"comment/57\",[]],[\"name/58\",[58,46.785]],[\"comment/58\",[]],[\"name/59\",[59,47.086]],[\"comment/59\",[]],[\"name/60\",[60,43.21]],[\"comment/60\",[]],[\"name/61\",[61,46.638]],[\"comment/61\",[]],[\"name/62\",[62,46.638]],[\"comment/62\",[]],[\"name/63\",[63,47.086]],[\"comment/63\",[]],[\"name/64\",[64,46.934]],[\"comment/64\",[]],[\"name/65\",[65,46.934]],[\"comment/65\",[]],[\"name/66\",[66,47.086]],[\"comment/66\",[]],[\"name/67\",[67,47.086]],[\"comment/67\",[]],[\"name/68\",[68,47.086]],[\"comment/68\",[]],[\"name/69\",[69,46.934]],[\"comment/69\",[]],[\"name/70\",[70,46.785]],[\"comment/70\",[]],[\"name/71\",[71,46.785]],[\"comment/71\",[]],[\"name/72\",[72,79.751]],[\"comment/72\",[]],[\"name/73\",[73,67.51]],[\"comment/73\",[]],[\"name/74\",[74,70.194]],[\"comment/74\",[]],[\"name/75\",[75,67.51]],[\"comment/75\",[]],[\"name/76\",[76,76.385]],[\"comment/76\",[]],[\"name/77\",[77,79.751]],[\"comment/77\",[]],[\"name/78\",[78,71.865]],[\"comment/78\",[]],[\"name/79\",[74,70.194]],[\"comment/79\",[]],[\"name/80\",[79,71.865]],[\"comment/80\",[]],[\"name/81\",[76,76.385]],[\"comment/81\",[]],[\"name/82\",[80,71.865]],[\"comment/82\",[]],[\"name/83\",[1,57.339]],[\"comment/83\",[]],[\"name/84\",[2,46.209]],[\"comment/84\",[]],[\"name/85\",[8,46.934]],[\"comment/85\",[]],[\"name/86\",[81,79.751]],[\"comment/86\",[]],[\"name/87\",[82,79.751]],[\"comment/87\",[]],[\"name/88\",[83,79.751]],[\"comment/88\",[]],[\"name/89\",[84,79.751]],[\"comment/89\",[]],[\"name/90\",[85,84.86]],[\"comment/90\",[]],[\"name/91\",[3,58.228]],[\"comment/91\",[]],[\"name/92\",[6,54.096]],[\"comment/92\",[]],[\"name/93\",[7,59.732]],[\"comment/93\",[]],[\"name/94\",[9,44.076]],[\"comment/94\",[]],[\"name/95\",[86,84.86]],[\"comment/95\",[]],[\"name/96\",[87,84.86]],[\"comment/96\",[]],[\"name/97\",[88,79.751]],[\"comment/97\",[]],[\"name/98\",[19,44.657]],[\"comment/98\",[]],[\"name/99\",[16,49.491]],[\"comment/99\",[]],[\"name/100\",[20,50.513]],[\"comment/100\",[]],[\"name/101\",[21,60.876]],[\"comment/101\",[]],[\"name/102\",[22,60.876]],[\"comment/102\",[]],[\"name/103\",[17,60.876]],[\"comment/103\",[]],[\"name/104\",[23,60.876]],[\"comment/104\",[]],[\"name/105\",[24,60.876]],[\"comment/105\",[]],[\"name/106\",[25,60.876]],[\"comment/106\",[]],[\"name/107\",[26,53.498]],[\"comment/107\",[]],[\"name/108\",[27,53.498]],[\"comment/108\",[]],[\"name/109\",[28,53.498]],[\"comment/109\",[]],[\"name/110\",[29,56.137]],[\"comment/110\",[]],[\"name/111\",[30,55.767]],[\"comment/111\",[]],[\"name/112\",[31,60.876]],[\"comment/112\",[]],[\"name/113\",[32,59.732]],[\"comment/113\",[]],[\"name/114\",[33,60.876]],[\"comment/114\",[]],[\"name/115\",[34,60.876]],[\"comment/115\",[]],[\"name/116\",[35,52.664]],[\"comment/116\",[]],[\"name/117\",[36,52.664]],[\"comment/117\",[]],[\"name/118\",[37,60.876]],[\"comment/118\",[]],[\"name/119\",[38,47.086]],[\"comment/119\",[]],[\"name/120\",[39,47.086]],[\"comment/120\",[]],[\"name/121\",[40,47.086]],[\"comment/121\",[]],[\"name/122\",[41,47.086]],[\"comment/122\",[]],[\"name/123\",[42,47.086]],[\"comment/123\",[]],[\"name/124\",[43,47.086]],[\"comment/124\",[]],[\"name/125\",[44,47.086]],[\"comment/125\",[]],[\"name/126\",[45,47.086]],[\"comment/126\",[]],[\"name/127\",[46,47.086]],[\"comment/127\",[]],[\"name/128\",[47,47.086]],[\"comment/128\",[]],[\"name/129\",[48,47.086]],[\"comment/129\",[]],[\"name/130\",[49,47.086]],[\"comment/130\",[]],[\"name/131\",[50,47.086]],[\"comment/131\",[]],[\"name/132\",[51,47.086]],[\"comment/132\",[]],[\"name/133\",[52,47.086]],[\"comment/133\",[]],[\"name/134\",[53,47.086]],[\"comment/134\",[]],[\"name/135\",[54,47.086]],[\"comment/135\",[]],[\"name/136\",[55,47.086]],[\"comment/136\",[]],[\"name/137\",[56,47.086]],[\"comment/137\",[]],[\"name/138\",[57,46.785]],[\"comment/138\",[]],[\"name/139\",[58,46.785]],[\"comment/139\",[]],[\"name/140\",[59,47.086]],[\"comment/140\",[]],[\"name/141\",[60,43.21]],[\"comment/141\",[]],[\"name/142\",[61,46.638]],[\"comment/142\",[]],[\"name/143\",[62,46.638]],[\"comment/143\",[]],[\"name/144\",[63,47.086]],[\"comment/144\",[]],[\"name/145\",[64,46.934]],[\"comment/145\",[]],[\"name/146\",[65,46.934]],[\"comment/146\",[]],[\"name/147\",[66,47.086]],[\"comment/147\",[]],[\"name/148\",[67,47.086]],[\"comment/148\",[]],[\"name/149\",[68,47.086]],[\"comment/149\",[]],[\"name/150\",[69,46.934]],[\"comment/150\",[]],[\"name/151\",[70,46.785]],[\"comment/151\",[]],[\"name/152\",[71,46.785]],[\"comment/152\",[]],[\"name/153\",[89,84.86]],[\"comment/153\",[]],[\"name/154\",[90,67.51]],[\"comment/154\",[]],[\"name/155\",[91,84.86]],[\"comment/155\",[]],[\"name/156\",[92,84.86]],[\"comment/156\",[]],[\"name/157\",[93,84.86]],[\"comment/157\",[]],[\"name/158\",[94,71.865]],[\"comment/158\",[]],[\"name/159\",[1,57.339]],[\"comment/159\",[]],[\"name/160\",[2,46.209]],[\"comment/160\",[]],[\"name/161\",[3,58.228]],[\"comment/161\",[]],[\"name/162\",[95,79.751]],[\"comment/162\",[]],[\"name/163\",[6,54.096]],[\"comment/163\",[]],[\"name/164\",[7,59.732]],[\"comment/164\",[]],[\"name/165\",[8,46.934]],[\"comment/165\",[]],[\"name/166\",[9,44.076]],[\"comment/166\",[]],[\"name/167\",[10,57.774]],[\"comment/167\",[]],[\"name/168\",[11,52.935]],[\"comment/168\",[]],[\"name/169\",[12,44.421]],[\"comment/169\",[]],[\"name/170\",[14,73.872]],[\"comment/170\",[]],[\"name/171\",[96,84.86]],[\"comment/171\",[]],[\"name/172\",[19,44.657]],[\"comment/172\",[]],[\"name/173\",[16,49.491]],[\"comment/173\",[]],[\"name/174\",[20,50.513]],[\"comment/174\",[]],[\"name/175\",[21,60.876]],[\"comment/175\",[]],[\"name/176\",[22,60.876]],[\"comment/176\",[]],[\"name/177\",[17,60.876]],[\"comment/177\",[]],[\"name/178\",[23,60.876]],[\"comment/178\",[]],[\"name/179\",[24,60.876]],[\"comment/179\",[]],[\"name/180\",[25,60.876]],[\"comment/180\",[]],[\"name/181\",[26,53.498]],[\"comment/181\",[]],[\"name/182\",[27,53.498]],[\"comment/182\",[]],[\"name/183\",[28,53.498]],[\"comment/183\",[]],[\"name/184\",[29,56.137]],[\"comment/184\",[]],[\"name/185\",[30,55.767]],[\"comment/185\",[]],[\"name/186\",[31,60.876]],[\"comment/186\",[]],[\"name/187\",[32,59.732]],[\"comment/187\",[]],[\"name/188\",[33,60.876]],[\"comment/188\",[]],[\"name/189\",[34,60.876]],[\"comment/189\",[]],[\"name/190\",[35,52.664]],[\"comment/190\",[]],[\"name/191\",[36,52.664]],[\"comment/191\",[]],[\"name/192\",[37,60.876]],[\"comment/192\",[]],[\"name/193\",[38,47.086]],[\"comment/193\",[]],[\"name/194\",[39,47.086]],[\"comment/194\",[]],[\"name/195\",[40,47.086]],[\"comment/195\",[]],[\"name/196\",[41,47.086]],[\"comment/196\",[]],[\"name/197\",[42,47.086]],[\"comment/197\",[]],[\"name/198\",[43,47.086]],[\"comment/198\",[]],[\"name/199\",[44,47.086]],[\"comment/199\",[]],[\"name/200\",[45,47.086]],[\"comment/200\",[]],[\"name/201\",[46,47.086]],[\"comment/201\",[]],[\"name/202\",[47,47.086]],[\"comment/202\",[]],[\"name/203\",[48,47.086]],[\"comment/203\",[]],[\"name/204\",[49,47.086]],[\"comment/204\",[]],[\"name/205\",[50,47.086]],[\"comment/205\",[]],[\"name/206\",[51,47.086]],[\"comment/206\",[]],[\"name/207\",[52,47.086]],[\"comment/207\",[]],[\"name/208\",[53,47.086]],[\"comment/208\",[]],[\"name/209\",[54,47.086]],[\"comment/209\",[]],[\"name/210\",[55,47.086]],[\"comment/210\",[]],[\"name/211\",[56,47.086]],[\"comment/211\",[]],[\"name/212\",[57,46.785]],[\"comment/212\",[]],[\"name/213\",[58,46.785]],[\"comment/213\",[]],[\"name/214\",[59,47.086]],[\"comment/214\",[]],[\"name/215\",[60,43.21]],[\"comment/215\",[]],[\"name/216\",[61,46.638]],[\"comment/216\",[]],[\"name/217\",[62,46.638]],[\"comment/217\",[]],[\"name/218\",[63,47.086]],[\"comment/218\",[]],[\"name/219\",[64,46.934]],[\"comment/219\",[]],[\"name/220\",[65,46.934]],[\"comment/220\",[]],[\"name/221\",[66,47.086]],[\"comment/221\",[]],[\"name/222\",[67,47.086]],[\"comment/222\",[]],[\"name/223\",[68,47.086]],[\"comment/223\",[]],[\"name/224\",[69,46.934]],[\"comment/224\",[]],[\"name/225\",[70,46.785]],[\"comment/225\",[]],[\"name/226\",[71,46.785]],[\"comment/226\",[]],[\"name/227\",[97,73.872]],[\"comment/227\",[]],[\"name/228\",[1,57.339]],[\"comment/228\",[]],[\"name/229\",[2,46.209]],[\"comment/229\",[]],[\"name/230\",[98,60.287]],[\"comment/230\",[]],[\"name/231\",[99,59.732]],[\"comment/231\",[]],[\"name/232\",[8,46.934]],[\"comment/232\",[]],[\"name/233\",[9,44.076]],[\"comment/233\",[]],[\"name/234\",[100,76.385]],[\"comment/234\",[]],[\"name/235\",[101,70.194]],[\"comment/235\",[]],[\"name/236\",[102,59.732]],[\"comment/236\",[]],[\"name/237\",[103,56.522]],[\"comment/237\",[]],[\"name/238\",[19,44.657]],[\"comment/238\",[]],[\"name/239\",[104,59.732]],[\"comment/239\",[]],[\"name/240\",[105,57.339]],[\"comment/240\",[]],[\"name/241\",[106,59.732]],[\"comment/241\",[]],[\"name/242\",[11,52.935]],[\"comment/242\",[]],[\"name/243\",[12,44.421]],[\"comment/243\",[]],[\"name/244\",[107,60.287]],[\"comment/244\",[]],[\"name/245\",[19,44.657]],[\"comment/245\",[]],[\"name/246\",[108,60.287]],[\"comment/246\",[]],[\"name/247\",[109,60.287]],[\"comment/247\",[]],[\"name/248\",[110,57.339]],[\"comment/248\",[]],[\"name/249\",[111,60.287]],[\"comment/249\",[]],[\"name/250\",[112,60.287]],[\"comment/250\",[]],[\"name/251\",[113,57.774]],[\"comment/251\",[]],[\"name/252\",[114,60.287]],[\"comment/252\",[]],[\"name/253\",[115,60.287]],[\"comment/253\",[]],[\"name/254\",[116,56.922]],[\"comment/254\",[]],[\"name/255\",[60,43.21]],[\"comment/255\",[]],[\"name/256\",[117,58.705]],[\"comment/256\",[]],[\"name/257\",[118,60.287]],[\"comment/257\",[]],[\"name/258\",[119,60.287]],[\"comment/258\",[]],[\"name/259\",[120,59.732]],[\"comment/259\",[]],[\"name/260\",[121,60.287]],[\"comment/260\",[]],[\"name/261\",[122,54.408]],[\"comment/261\",[]],[\"name/262\",[123,54.408]],[\"comment/262\",[]],[\"name/263\",[124,54.096]],[\"comment/263\",[]],[\"name/264\",[125,60.287]],[\"comment/264\",[]],[\"name/265\",[126,60.287]],[\"comment/265\",[]],[\"name/266\",[127,60.287]],[\"comment/266\",[]],[\"name/267\",[128,60.287]],[\"comment/267\",[]],[\"name/268\",[129,59.732]],[\"comment/268\",[]],[\"name/269\",[130,60.287]],[\"comment/269\",[]],[\"name/270\",[131,60.287]],[\"comment/270\",[]],[\"name/271\",[132,59.732]],[\"comment/271\",[]],[\"name/272\",[133,60.287]],[\"comment/272\",[]],[\"name/273\",[134,60.287]],[\"comment/273\",[]],[\"name/274\",[135,60.287]],[\"comment/274\",[]],[\"name/275\",[136,60.287]],[\"comment/275\",[]],[\"name/276\",[137,59.205]],[\"comment/276\",[]],[\"name/277\",[138,59.732]],[\"comment/277\",[]],[\"name/278\",[139,59.732]],[\"comment/278\",[]],[\"name/279\",[140,59.732]],[\"comment/279\",[]],[\"name/280\",[141,59.732]],[\"comment/280\",[]],[\"name/281\",[142,60.287]],[\"comment/281\",[]],[\"name/282\",[143,60.287]],[\"comment/282\",[]],[\"name/283\",[144,60.287]],[\"comment/283\",[]],[\"name/284\",[145,60.287]],[\"comment/284\",[]],[\"name/285\",[146,60.287]],[\"comment/285\",[]],[\"name/286\",[147,60.287]],[\"comment/286\",[]],[\"name/287\",[148,60.287]],[\"comment/287\",[]],[\"name/288\",[149,60.287]],[\"comment/288\",[]],[\"name/289\",[150,58.228]],[\"comment/289\",[]],[\"name/290\",[151,60.287]],[\"comment/290\",[]],[\"name/291\",[152,60.287]],[\"comment/291\",[]],[\"name/292\",[12,44.421]],[\"comment/292\",[]],[\"name/293\",[153,56.922]],[\"comment/293\",[]],[\"name/294\",[154,56.922]],[\"comment/294\",[]],[\"name/295\",[155,60.287]],[\"comment/295\",[]],[\"name/296\",[156,60.287]],[\"comment/296\",[]],[\"name/297\",[157,60.287]],[\"comment/297\",[]],[\"name/298\",[158,56.922]],[\"comment/298\",[]],[\"name/299\",[159,59.732]],[\"comment/299\",[]],[\"name/300\",[160,59.732]],[\"comment/300\",[]],[\"name/301\",[161,60.287]],[\"comment/301\",[]],[\"name/302\",[162,60.287]],[\"comment/302\",[]],[\"name/303\",[163,60.287]],[\"comment/303\",[]],[\"name/304\",[164,60.287]],[\"comment/304\",[]],[\"name/305\",[165,60.287]],[\"comment/305\",[]],[\"name/306\",[166,57.339]],[\"comment/306\",[]],[\"name/307\",[167,59.732]],[\"comment/307\",[]],[\"name/308\",[168,59.732]],[\"comment/308\",[]],[\"name/309\",[20,50.513]],[\"comment/309\",[]],[\"name/310\",[16,49.491]],[\"comment/310\",[]],[\"name/311\",[35,52.664]],[\"comment/311\",[]],[\"name/312\",[36,52.664]],[\"comment/312\",[]],[\"name/313\",[169,53.793]],[\"comment/313\",[]],[\"name/314\",[170,59.205]],[\"comment/314\",[]],[\"name/315\",[171,59.732]],[\"comment/315\",[]],[\"name/316\",[172,59.732]],[\"comment/316\",[]],[\"name/317\",[173,59.732]],[\"comment/317\",[]],[\"name/318\",[174,59.732]],[\"comment/318\",[]],[\"name/319\",[175,59.732]],[\"comment/319\",[]],[\"name/320\",[176,59.732]],[\"comment/320\",[]],[\"name/321\",[177,59.732]],[\"comment/321\",[]],[\"name/322\",[178,59.732]],[\"comment/322\",[]],[\"name/323\",[179,58.228]],[\"comment/323\",[]],[\"name/324\",[180,59.732]],[\"comment/324\",[]],[\"name/325\",[181,59.732]],[\"comment/325\",[]],[\"name/326\",[182,56.922]],[\"comment/326\",[]],[\"name/327\",[183,59.205]],[\"comment/327\",[]],[\"name/328\",[184,59.732]],[\"comment/328\",[]],[\"name/329\",[185,59.732]],[\"comment/329\",[]],[\"name/330\",[186,59.732]],[\"comment/330\",[]],[\"name/331\",[187,59.732]],[\"comment/331\",[]],[\"name/332\",[188,59.732]],[\"comment/332\",[]],[\"name/333\",[28,53.498]],[\"comment/333\",[]],[\"name/334\",[26,53.498]],[\"comment/334\",[]],[\"name/335\",[27,53.498]],[\"comment/335\",[]],[\"name/336\",[38,47.086]],[\"comment/336\",[]],[\"name/337\",[39,47.086]],[\"comment/337\",[]],[\"name/338\",[40,47.086]],[\"comment/338\",[]],[\"name/339\",[41,47.086]],[\"comment/339\",[]],[\"name/340\",[42,47.086]],[\"comment/340\",[]],[\"name/341\",[43,47.086]],[\"comment/341\",[]],[\"name/342\",[44,47.086]],[\"comment/342\",[]],[\"name/343\",[45,47.086]],[\"comment/343\",[]],[\"name/344\",[46,47.086]],[\"comment/344\",[]],[\"name/345\",[47,47.086]],[\"comment/345\",[]],[\"name/346\",[48,47.086]],[\"comment/346\",[]],[\"name/347\",[49,47.086]],[\"comment/347\",[]],[\"name/348\",[50,47.086]],[\"comment/348\",[]],[\"name/349\",[51,47.086]],[\"comment/349\",[]],[\"name/350\",[52,47.086]],[\"comment/350\",[]],[\"name/351\",[53,47.086]],[\"comment/351\",[]],[\"name/352\",[54,47.086]],[\"comment/352\",[]],[\"name/353\",[55,47.086]],[\"comment/353\",[]],[\"name/354\",[56,47.086]],[\"comment/354\",[]],[\"name/355\",[57,46.785]],[\"comment/355\",[]],[\"name/356\",[58,46.785]],[\"comment/356\",[]],[\"name/357\",[59,47.086]],[\"comment/357\",[]],[\"name/358\",[60,43.21]],[\"comment/358\",[]],[\"name/359\",[61,46.638]],[\"comment/359\",[]],[\"name/360\",[62,46.638]],[\"comment/360\",[]],[\"name/361\",[63,47.086]],[\"comment/361\",[]],[\"name/362\",[64,46.934]],[\"comment/362\",[]],[\"name/363\",[65,46.934]],[\"comment/363\",[]],[\"name/364\",[66,47.086]],[\"comment/364\",[]],[\"name/365\",[67,47.086]],[\"comment/365\",[]],[\"name/366\",[68,47.086]],[\"comment/366\",[]],[\"name/367\",[69,46.934]],[\"comment/367\",[]],[\"name/368\",[70,46.785]],[\"comment/368\",[]],[\"name/369\",[71,46.785]],[\"comment/369\",[]],[\"name/370\",[189,84.86]],[\"comment/370\",[]],[\"name/371\",[190,84.86]],[\"comment/371\",[]],[\"name/372\",[191,84.86]],[\"comment/372\",[]],[\"name/373\",[192,84.86]],[\"comment/373\",[]],[\"name/374\",[193,71.865]],[\"comment/374\",[]],[\"name/375\",[2,46.209]],[\"comment/375\",[]],[\"name/376\",[194,84.86]],[\"comment/376\",[]],[\"name/377\",[195,84.86]],[\"comment/377\",[]],[\"name/378\",[196,84.86]],[\"comment/378\",[]],[\"name/379\",[8,46.934]],[\"comment/379\",[]],[\"name/380\",[9,44.076]],[\"comment/380\",[]],[\"name/381\",[11,52.935]],[\"comment/381\",[]],[\"name/382\",[12,44.421]],[\"comment/382\",[]],[\"name/383\",[197,84.86]],[\"comment/383\",[]],[\"name/384\",[198,84.86]],[\"comment/384\",[]],[\"name/385\",[199,84.86]],[\"comment/385\",[]],[\"name/386\",[200,84.86]],[\"comment/386\",[]],[\"name/387\",[201,84.86]],[\"comment/387\",[]],[\"name/388\",[202,84.86]],[\"comment/388\",[]],[\"name/389\",[203,84.86]],[\"comment/389\",[]],[\"name/390\",[204,84.86]],[\"comment/390\",[]],[\"name/391\",[205,84.86]],[\"comment/391\",[]],[\"name/392\",[206,84.86]],[\"comment/392\",[]],[\"name/393\",[207,84.86]],[\"comment/393\",[]],[\"name/394\",[208,84.86]],[\"comment/394\",[]],[\"name/395\",[209,71.865]],[\"comment/395\",[]],[\"name/396\",[183,59.205]],[\"comment/396\",[]],[\"name/397\",[210,84.86]],[\"comment/397\",[]],[\"name/398\",[160,59.732]],[\"comment/398\",[]],[\"name/399\",[211,71.865]],[\"comment/399\",[]],[\"name/400\",[212,68.762]],[\"comment/400\",[]],[\"name/401\",[213,84.86]],[\"comment/401\",[]],[\"name/402\",[214,84.86]],[\"comment/402\",[]],[\"name/403\",[215,84.86]],[\"comment/403\",[]],[\"name/404\",[216,84.86]],[\"comment/404\",[]],[\"name/405\",[217,84.86]],[\"comment/405\",[]],[\"name/406\",[218,84.86]],[\"comment/406\",[]],[\"name/407\",[219,84.86]],[\"comment/407\",[]],[\"name/408\",[220,84.86]],[\"comment/408\",[]],[\"name/409\",[221,84.86]],[\"comment/409\",[]],[\"name/410\",[222,84.86]],[\"comment/410\",[]],[\"name/411\",[103,56.522]],[\"comment/411\",[]],[\"name/412\",[182,56.922]],[\"comment/412\",[]],[\"name/413\",[19,44.657]],[\"comment/413\",[]],[\"name/414\",[38,47.086]],[\"comment/414\",[]],[\"name/415\",[39,47.086]],[\"comment/415\",[]],[\"name/416\",[40,47.086]],[\"comment/416\",[]],[\"name/417\",[41,47.086]],[\"comment/417\",[]],[\"name/418\",[42,47.086]],[\"comment/418\",[]],[\"name/419\",[43,47.086]],[\"comment/419\",[]],[\"name/420\",[44,47.086]],[\"comment/420\",[]],[\"name/421\",[45,47.086]],[\"comment/421\",[]],[\"name/422\",[46,47.086]],[\"comment/422\",[]],[\"name/423\",[47,47.086]],[\"comment/423\",[]],[\"name/424\",[48,47.086]],[\"comment/424\",[]],[\"name/425\",[49,47.086]],[\"comment/425\",[]],[\"name/426\",[50,47.086]],[\"comment/426\",[]],[\"name/427\",[51,47.086]],[\"comment/427\",[]],[\"name/428\",[52,47.086]],[\"comment/428\",[]],[\"name/429\",[53,47.086]],[\"comment/429\",[]],[\"name/430\",[54,47.086]],[\"comment/430\",[]],[\"name/431\",[55,47.086]],[\"comment/431\",[]],[\"name/432\",[56,47.086]],[\"comment/432\",[]],[\"name/433\",[57,46.785]],[\"comment/433\",[]],[\"name/434\",[58,46.785]],[\"comment/434\",[]],[\"name/435\",[59,47.086]],[\"comment/435\",[]],[\"name/436\",[60,43.21]],[\"comment/436\",[]],[\"name/437\",[61,46.638]],[\"comment/437\",[]],[\"name/438\",[62,46.638]],[\"comment/438\",[]],[\"name/439\",[63,47.086]],[\"comment/439\",[]],[\"name/440\",[64,46.934]],[\"comment/440\",[]],[\"name/441\",[65,46.934]],[\"comment/441\",[]],[\"name/442\",[66,47.086]],[\"comment/442\",[]],[\"name/443\",[67,47.086]],[\"comment/443\",[]],[\"name/444\",[68,47.086]],[\"comment/444\",[]],[\"name/445\",[69,46.934]],[\"comment/445\",[]],[\"name/446\",[70,46.785]],[\"comment/446\",[]],[\"name/447\",[71,46.785]],[\"comment/447\",[]],[\"name/448\",[223,84.86]],[\"comment/448\",[]],[\"name/449\",[153,56.922]],[\"comment/449\",[]],[\"name/450\",[10,57.774]],[\"comment/450\",[]],[\"name/451\",[224,68.762]],[\"comment/451\",[]],[\"name/452\",[225,60.876]],[\"comment/452\",[]],[\"name/453\",[226,84.86]],[\"comment/453\",[]],[\"name/454\",[227,76.385]],[\"comment/454\",[]],[\"name/455\",[2,46.209]],[\"comment/455\",[]],[\"name/456\",[228,76.385]],[\"comment/456\",[]],[\"name/457\",[229,76.385]],[\"comment/457\",[]],[\"name/458\",[8,46.934]],[\"comment/458\",[]],[\"name/459\",[3,58.228]],[\"comment/459\",[]],[\"name/460\",[6,54.096]],[\"comment/460\",[]],[\"name/461\",[7,59.732]],[\"comment/461\",[]],[\"name/462\",[9,44.076]],[\"comment/462\",[]],[\"name/463\",[11,52.935]],[\"comment/463\",[]],[\"name/464\",[12,44.421]],[\"comment/464\",[]],[\"name/465\",[230,76.385]],[\"comment/465\",[]],[\"name/466\",[231,84.86]],[\"comment/466\",[]],[\"name/467\",[232,84.86]],[\"comment/467\",[]],[\"name/468\",[233,84.86]],[\"comment/468\",[]],[\"name/469\",[35,52.664]],[\"comment/469\",[]],[\"name/470\",[234,84.86]],[\"comment/470\",[]],[\"name/471\",[235,79.751]],[\"comment/471\",[]],[\"name/472\",[236,84.86]],[\"comment/472\",[]],[\"name/473\",[19,44.657]],[\"comment/473\",[]],[\"name/474\",[16,49.491]],[\"comment/474\",[]],[\"name/475\",[20,50.513]],[\"comment/475\",[]],[\"name/476\",[21,60.876]],[\"comment/476\",[]],[\"name/477\",[22,60.876]],[\"comment/477\",[]],[\"name/478\",[17,60.876]],[\"comment/478\",[]],[\"name/479\",[23,60.876]],[\"comment/479\",[]],[\"name/480\",[24,60.876]],[\"comment/480\",[]],[\"name/481\",[25,60.876]],[\"comment/481\",[]],[\"name/482\",[26,53.498]],[\"comment/482\",[]],[\"name/483\",[27,53.498]],[\"comment/483\",[]],[\"name/484\",[28,53.498]],[\"comment/484\",[]],[\"name/485\",[29,56.137]],[\"comment/485\",[]],[\"name/486\",[30,55.767]],[\"comment/486\",[]],[\"name/487\",[31,60.876]],[\"comment/487\",[]],[\"name/488\",[32,59.732]],[\"comment/488\",[]],[\"name/489\",[33,60.876]],[\"comment/489\",[]],[\"name/490\",[34,60.876]],[\"comment/490\",[]],[\"name/491\",[36,52.664]],[\"comment/491\",[]],[\"name/492\",[37,60.876]],[\"comment/492\",[]],[\"name/493\",[38,47.086]],[\"comment/493\",[]],[\"name/494\",[39,47.086]],[\"comment/494\",[]],[\"name/495\",[40,47.086]],[\"comment/495\",[]],[\"name/496\",[41,47.086]],[\"comment/496\",[]],[\"name/497\",[42,47.086]],[\"comment/497\",[]],[\"name/498\",[43,47.086]],[\"comment/498\",[]],[\"name/499\",[44,47.086]],[\"comment/499\",[]],[\"name/500\",[45,47.086]],[\"comment/500\",[]],[\"name/501\",[46,47.086]],[\"comment/501\",[]],[\"name/502\",[47,47.086]],[\"comment/502\",[]],[\"name/503\",[48,47.086]],[\"comment/503\",[]],[\"name/504\",[49,47.086]],[\"comment/504\",[]],[\"name/505\",[50,47.086]],[\"comment/505\",[]],[\"name/506\",[51,47.086]],[\"comment/506\",[]],[\"name/507\",[52,47.086]],[\"comment/507\",[]],[\"name/508\",[53,47.086]],[\"comment/508\",[]],[\"name/509\",[54,47.086]],[\"comment/509\",[]],[\"name/510\",[55,47.086]],[\"comment/510\",[]],[\"name/511\",[56,47.086]],[\"comment/511\",[]],[\"name/512\",[57,46.785]],[\"comment/512\",[]],[\"name/513\",[58,46.785]],[\"comment/513\",[]],[\"name/514\",[59,47.086]],[\"comment/514\",[]],[\"name/515\",[60,43.21]],[\"comment/515\",[]],[\"name/516\",[61,46.638]],[\"comment/516\",[]],[\"name/517\",[62,46.638]],[\"comment/517\",[]],[\"name/518\",[63,47.086]],[\"comment/518\",[]],[\"name/519\",[64,46.934]],[\"comment/519\",[]],[\"name/520\",[65,46.934]],[\"comment/520\",[]],[\"name/521\",[66,47.086]],[\"comment/521\",[]],[\"name/522\",[67,47.086]],[\"comment/522\",[]],[\"name/523\",[68,47.086]],[\"comment/523\",[]],[\"name/524\",[69,46.934]],[\"comment/524\",[]],[\"name/525\",[70,46.785]],[\"comment/525\",[]],[\"name/526\",[71,46.785]],[\"comment/526\",[]],[\"name/527\",[237,84.86]],[\"comment/527\",[]],[\"name/528\",[153,56.922]],[\"comment/528\",[]],[\"name/529\",[154,56.922]],[\"comment/529\",[]],[\"name/530\",[238,79.751]],[\"comment/530\",[]],[\"name/531\",[239,79.751]],[\"comment/531\",[]],[\"name/532\",[240,79.751]],[\"comment/532\",[]],[\"name/533\",[241,79.751]],[\"comment/533\",[]],[\"name/534\",[9,44.076]],[\"comment/534\",[]],[\"name/535\",[153,56.922]],[\"comment/535\",[]],[\"name/536\",[154,56.922]],[\"comment/536\",[]],[\"name/537\",[238,79.751]],[\"comment/537\",[]],[\"name/538\",[239,79.751]],[\"comment/538\",[]],[\"name/539\",[169,53.793]],[\"comment/539\",[]],[\"name/540\",[242,71.865]],[\"comment/540\",[]],[\"name/541\",[243,84.86]],[\"comment/541\",[]],[\"name/542\",[244,84.86]],[\"comment/542\",[]],[\"name/543\",[245,60.876]],[\"comment/543\",[]],[\"name/544\",[246,71.865]],[\"comment/544\",[]],[\"name/545\",[247,84.86]],[\"comment/545\",[]],[\"name/546\",[248,84.86]],[\"comment/546\",[]],[\"name/547\",[249,79.751]],[\"comment/547\",[]],[\"name/548\",[250,79.751]],[\"comment/548\",[]],[\"name/549\",[251,84.86]],[\"comment/549\",[]],[\"name/550\",[252,79.751]],[\"comment/550\",[]],[\"name/551\",[9,44.076]],[\"comment/551\",[]],[\"name/552\",[253,84.86]],[\"comment/552\",[]],[\"name/553\",[254,84.86]],[\"comment/553\",[]],[\"name/554\",[225,60.876]],[\"comment/554\",[]],[\"name/555\",[255,65.397]],[\"comment/555\",[]],[\"name/556\",[256,84.86]],[\"comment/556\",[]],[\"name/557\",[257,84.86]],[\"comment/557\",[]],[\"name/558\",[258,84.86]],[\"comment/558\",[]],[\"name/559\",[259,84.86]],[\"comment/559\",[]],[\"name/560\",[260,84.86]],[\"comment/560\",[]],[\"name/561\",[261,79.751]],[\"comment/561\",[]],[\"name/562\",[225,60.876]],[\"comment/562\",[]],[\"name/563\",[255,65.397]],[\"comment/563\",[]],[\"name/564\",[262,84.86]],[\"comment/564\",[]],[\"name/565\",[263,84.86]],[\"comment/565\",[]],[\"name/566\",[2,46.209]],[\"comment/566\",[]],[\"name/567\",[9,44.076]],[\"comment/567\",[]],[\"name/568\",[264,84.86]],[\"comment/568\",[]],[\"name/569\",[265,79.751]],[\"comment/569\",[]],[\"name/570\",[266,84.86]],[\"comment/570\",[]],[\"name/571\",[267,73.872]],[\"comment/571\",[]],[\"name/572\",[268,76.385]],[\"comment/572\",[]],[\"name/573\",[269,76.385]],[\"comment/573\",[]],[\"name/574\",[270,73.872]],[\"comment/574\",[]],[\"name/575\",[271,76.385]],[\"comment/575\",[]],[\"name/576\",[272,76.385]],[\"comment/576\",[]],[\"name/577\",[273,76.385]],[\"comment/577\",[]],[\"name/578\",[274,76.385]],[\"comment/578\",[]],[\"name/579\",[275,76.385]],[\"comment/579\",[]],[\"name/580\",[276,76.385]],[\"comment/580\",[]],[\"name/581\",[277,76.385]],[\"comment/581\",[]],[\"name/582\",[278,76.385]],[\"comment/582\",[]],[\"name/583\",[116,56.922]],[\"comment/583\",[]],[\"name/584\",[279,73.872]],[\"comment/584\",[]],[\"name/585\",[280,76.385]],[\"comment/585\",[]],[\"name/586\",[281,76.385]],[\"comment/586\",[]],[\"name/587\",[282,76.385]],[\"comment/587\",[]],[\"name/588\",[283,76.385]],[\"comment/588\",[]],[\"name/589\",[284,76.385]],[\"comment/589\",[]],[\"name/590\",[285,76.385]],[\"comment/590\",[]],[\"name/591\",[286,76.385]],[\"comment/591\",[]],[\"name/592\",[287,76.385]],[\"comment/592\",[]],[\"name/593\",[288,76.385]],[\"comment/593\",[]],[\"name/594\",[289,76.385]],[\"comment/594\",[]],[\"name/595\",[290,68.762]],[\"comment/595\",[]],[\"name/596\",[291,76.385]],[\"comment/596\",[]],[\"name/597\",[292,76.385]],[\"comment/597\",[]],[\"name/598\",[293,76.385]],[\"comment/598\",[]],[\"name/599\",[294,76.385]],[\"comment/599\",[]],[\"name/600\",[295,76.385]],[\"comment/600\",[]],[\"name/601\",[296,73.872]],[\"comment/601\",[]],[\"name/602\",[297,73.872]],[\"comment/602\",[]],[\"name/603\",[61,46.638]],[\"comment/603\",[]],[\"name/604\",[62,46.638]],[\"comment/604\",[]],[\"name/605\",[60,43.21]],[\"comment/605\",[]],[\"name/606\",[298,76.385]],[\"comment/606\",[]],[\"name/607\",[299,84.86]],[\"comment/607\",[]],[\"name/608\",[224,68.762]],[\"comment/608\",[]],[\"name/609\",[300,84.86]],[\"comment/609\",[]],[\"name/610\",[301,84.86]],[\"comment/610\",[]],[\"name/611\",[302,84.86]],[\"comment/611\",[]],[\"name/612\",[303,84.86]],[\"comment/612\",[]],[\"name/613\",[304,84.86]],[\"comment/613\",[]],[\"name/614\",[225,60.876]],[\"comment/614\",[]],[\"name/615\",[305,66.398]],[\"comment/615\",[]],[\"name/616\",[306,84.86]],[\"comment/616\",[]],[\"name/617\",[307,79.751]],[\"comment/617\",[]],[\"name/618\",[308,79.751]],[\"comment/618\",[]],[\"name/619\",[309,79.751]],[\"comment/619\",[]],[\"name/620\",[310,84.86]],[\"comment/620\",[]],[\"name/621\",[311,84.86]],[\"comment/621\",[]],[\"name/622\",[12,44.421]],[\"comment/622\",[]],[\"name/623\",[312,73.872]],[\"comment/623\",[]],[\"name/624\",[313,73.872]],[\"comment/624\",[]],[\"name/625\",[314,79.751]],[\"comment/625\",[]],[\"name/626\",[315,79.751]],[\"comment/626\",[]],[\"name/627\",[316,79.751]],[\"comment/627\",[]],[\"name/628\",[317,79.751]],[\"comment/628\",[]],[\"name/629\",[318,79.751]],[\"comment/629\",[]],[\"name/630\",[319,66.398]],[\"comment/630\",[]],[\"name/631\",[320,79.751]],[\"comment/631\",[]],[\"name/632\",[73,67.51]],[\"comment/632\",[]],[\"name/633\",[74,70.194]],[\"comment/633\",[]],[\"name/634\",[75,67.51]],[\"comment/634\",[]],[\"name/635\",[76,76.385]],[\"comment/635\",[]],[\"name/636\",[321,79.751]],[\"comment/636\",[]],[\"name/637\",[78,71.865]],[\"comment/637\",[]],[\"name/638\",[79,71.865]],[\"comment/638\",[]],[\"name/639\",[322,76.385]],[\"comment/639\",[]],[\"name/640\",[305,66.398]],[\"comment/640\",[]],[\"name/641\",[224,68.762]],[\"comment/641\",[]],[\"name/642\",[323,60.876]],[\"comment/642\",[]],[\"name/643\",[324,76.385]],[\"comment/643\",[]],[\"name/644\",[325,71.865]],[\"comment/644\",[]],[\"name/645\",[326,79.751]],[\"comment/645\",[]],[\"name/646\",[327,76.385]],[\"comment/646\",[]],[\"name/647\",[328,71.865]],[\"comment/647\",[]],[\"name/648\",[1,57.339]],[\"comment/648\",[]],[\"name/649\",[2,46.209]],[\"comment/649\",[]],[\"name/650\",[81,79.751]],[\"comment/650\",[]],[\"name/651\",[82,79.751]],[\"comment/651\",[]],[\"name/652\",[83,79.751]],[\"comment/652\",[]],[\"name/653\",[84,79.751]],[\"comment/653\",[]],[\"name/654\",[318,79.751]],[\"comment/654\",[]],[\"name/655\",[329,84.86]],[\"comment/655\",[]],[\"name/656\",[330,84.86]],[\"comment/656\",[]],[\"name/657\",[331,84.86]],[\"comment/657\",[]],[\"name/658\",[332,84.86]],[\"comment/658\",[]],[\"name/659\",[333,84.86]],[\"comment/659\",[]],[\"name/660\",[334,84.86]],[\"comment/660\",[]],[\"name/661\",[335,84.86]],[\"comment/661\",[]],[\"name/662\",[312,73.872]],[\"comment/662\",[]],[\"name/663\",[313,73.872]],[\"comment/663\",[]],[\"name/664\",[314,79.751]],[\"comment/664\",[]],[\"name/665\",[319,66.398]],[\"comment/665\",[]],[\"name/666\",[322,76.385]],[\"comment/666\",[]],[\"name/667\",[324,76.385]],[\"comment/667\",[]],[\"name/668\",[336,70.194]],[\"comment/668\",[]],[\"name/669\",[315,79.751]],[\"comment/669\",[]],[\"name/670\",[316,79.751]],[\"comment/670\",[]],[\"name/671\",[337,84.86]],[\"comment/671\",[]],[\"name/672\",[338,84.86]],[\"comment/672\",[]],[\"name/673\",[339,76.385]],[\"comment/673\",[]],[\"name/674\",[3,58.228]],[\"comment/674\",[]],[\"name/675\",[8,46.934]],[\"comment/675\",[]],[\"name/676\",[6,54.096]],[\"comment/676\",[]],[\"name/677\",[7,59.732]],[\"comment/677\",[]],[\"name/678\",[9,44.076]],[\"comment/678\",[]],[\"name/679\",[312,73.872]],[\"comment/679\",[]],[\"name/680\",[313,73.872]],[\"comment/680\",[]],[\"name/681\",[340,84.86]],[\"comment/681\",[]],[\"name/682\",[341,84.86]],[\"comment/682\",[]],[\"name/683\",[342,84.86]],[\"comment/683\",[]],[\"name/684\",[343,84.86]],[\"comment/684\",[]],[\"name/685\",[344,84.86]],[\"comment/685\",[]],[\"name/686\",[345,84.86]],[\"comment/686\",[]],[\"name/687\",[346,84.86]],[\"comment/687\",[]],[\"name/688\",[347,84.86]],[\"comment/688\",[]],[\"name/689\",[348,84.86]],[\"comment/689\",[]],[\"name/690\",[349,84.86]],[\"comment/690\",[]],[\"name/691\",[350,84.86]],[\"comment/691\",[]],[\"name/692\",[351,84.86]],[\"comment/692\",[]],[\"name/693\",[352,84.86]],[\"comment/693\",[]],[\"name/694\",[353,84.86]],[\"comment/694\",[]],[\"name/695\",[61,46.638]],[\"comment/695\",[]],[\"name/696\",[354,84.86]],[\"comment/696\",[]],[\"name/697\",[355,84.86]],[\"comment/697\",[]],[\"name/698\",[356,84.86]],[\"comment/698\",[]],[\"name/699\",[357,84.86]],[\"comment/699\",[]],[\"name/700\",[358,84.86]],[\"comment/700\",[]],[\"name/701\",[16,49.491]],[\"comment/701\",[]],[\"name/702\",[359,84.86]],[\"comment/702\",[]],[\"name/703\",[19,44.657]],[\"comment/703\",[]],[\"name/704\",[20,50.513]],[\"comment/704\",[]],[\"name/705\",[21,60.876]],[\"comment/705\",[]],[\"name/706\",[22,60.876]],[\"comment/706\",[]],[\"name/707\",[17,60.876]],[\"comment/707\",[]],[\"name/708\",[23,60.876]],[\"comment/708\",[]],[\"name/709\",[24,60.876]],[\"comment/709\",[]],[\"name/710\",[25,60.876]],[\"comment/710\",[]],[\"name/711\",[26,53.498]],[\"comment/711\",[]],[\"name/712\",[27,53.498]],[\"comment/712\",[]],[\"name/713\",[28,53.498]],[\"comment/713\",[]],[\"name/714\",[29,56.137]],[\"comment/714\",[]],[\"name/715\",[30,55.767]],[\"comment/715\",[]],[\"name/716\",[31,60.876]],[\"comment/716\",[]],[\"name/717\",[32,59.732]],[\"comment/717\",[]],[\"name/718\",[33,60.876]],[\"comment/718\",[]],[\"name/719\",[34,60.876]],[\"comment/719\",[]],[\"name/720\",[35,52.664]],[\"comment/720\",[]],[\"name/721\",[36,52.664]],[\"comment/721\",[]],[\"name/722\",[37,60.876]],[\"comment/722\",[]],[\"name/723\",[38,47.086]],[\"comment/723\",[]],[\"name/724\",[39,47.086]],[\"comment/724\",[]],[\"name/725\",[40,47.086]],[\"comment/725\",[]],[\"name/726\",[41,47.086]],[\"comment/726\",[]],[\"name/727\",[42,47.086]],[\"comment/727\",[]],[\"name/728\",[43,47.086]],[\"comment/728\",[]],[\"name/729\",[44,47.086]],[\"comment/729\",[]],[\"name/730\",[45,47.086]],[\"comment/730\",[]],[\"name/731\",[46,47.086]],[\"comment/731\",[]],[\"name/732\",[47,47.086]],[\"comment/732\",[]],[\"name/733\",[48,47.086]],[\"comment/733\",[]],[\"name/734\",[49,47.086]],[\"comment/734\",[]],[\"name/735\",[50,47.086]],[\"comment/735\",[]],[\"name/736\",[51,47.086]],[\"comment/736\",[]],[\"name/737\",[52,47.086]],[\"comment/737\",[]],[\"name/738\",[53,47.086]],[\"comment/738\",[]],[\"name/739\",[54,47.086]],[\"comment/739\",[]],[\"name/740\",[55,47.086]],[\"comment/740\",[]],[\"name/741\",[56,47.086]],[\"comment/741\",[]],[\"name/742\",[57,46.785]],[\"comment/742\",[]],[\"name/743\",[58,46.785]],[\"comment/743\",[]],[\"name/744\",[59,47.086]],[\"comment/744\",[]],[\"name/745\",[60,43.21]],[\"comment/745\",[]],[\"name/746\",[62,46.638]],[\"comment/746\",[]],[\"name/747\",[63,47.086]],[\"comment/747\",[]],[\"name/748\",[64,46.934]],[\"comment/748\",[]],[\"name/749\",[65,46.934]],[\"comment/749\",[]],[\"name/750\",[66,47.086]],[\"comment/750\",[]],[\"name/751\",[67,47.086]],[\"comment/751\",[]],[\"name/752\",[68,47.086]],[\"comment/752\",[]],[\"name/753\",[69,46.934]],[\"comment/753\",[]],[\"name/754\",[70,46.785]],[\"comment/754\",[]],[\"name/755\",[71,46.785]],[\"comment/755\",[]],[\"name/756\",[360,84.86]],[\"comment/756\",[]],[\"name/757\",[90,67.51]],[\"comment/757\",[]],[\"name/758\",[323,60.876]],[\"comment/758\",[]],[\"name/759\",[361,84.86]],[\"comment/759\",[]],[\"name/760\",[362,73.872]],[\"comment/760\",[]],[\"name/761\",[363,79.751]],[\"comment/761\",[]],[\"name/762\",[90,67.51]],[\"comment/762\",[]],[\"name/763\",[323,60.876]],[\"comment/763\",[]],[\"name/764\",[364,84.86]],[\"comment/764\",[]],[\"name/765\",[225,60.876]],[\"comment/765\",[]],[\"name/766\",[365,84.86]],[\"comment/766\",[]],[\"name/767\",[12,44.421]],[\"comment/767\",[]],[\"name/768\",[12,44.421]],[\"comment/768\",[]],[\"name/769\",[366,66.398]],[\"comment/769\",[]],[\"name/770\",[1,57.339]],[\"comment/770\",[]],[\"name/771\",[2,46.209]],[\"comment/771\",[]],[\"name/772\",[367,79.751]],[\"comment/772\",[]],[\"name/773\",[368,84.86]],[\"comment/773\",[]],[\"name/774\",[99,59.732]],[\"comment/774\",[]],[\"name/775\",[6,54.096]],[\"comment/775\",[]],[\"name/776\",[8,46.934]],[\"comment/776\",[]],[\"name/777\",[9,44.076]],[\"comment/777\",[]],[\"name/778\",[80,71.865]],[\"comment/778\",[]],[\"name/779\",[366,66.398]],[\"comment/779\",[]],[\"name/780\",[101,70.194]],[\"comment/780\",[]],[\"name/781\",[16,49.491]],[\"comment/781\",[]],[\"name/782\",[124,54.096]],[\"comment/782\",[]],[\"name/783\",[19,44.657]],[\"comment/783\",[]],[\"name/784\",[29,56.137]],[\"comment/784\",[]],[\"name/785\",[30,55.767]],[\"comment/785\",[]],[\"name/786\",[122,54.408]],[\"comment/786\",[]],[\"name/787\",[123,54.408]],[\"comment/787\",[]],[\"name/788\",[20,50.513]],[\"comment/788\",[]],[\"name/789\",[169,53.793]],[\"comment/789\",[]],[\"name/790\",[245,60.876]],[\"comment/790\",[]],[\"name/791\",[369,65.397]],[\"comment/791\",[]],[\"name/792\",[370,65.397]],[\"comment/792\",[]],[\"name/793\",[371,64.487]],[\"comment/793\",[]],[\"name/794\",[372,65.397]],[\"comment/794\",[]],[\"name/795\",[373,65.397]],[\"comment/795\",[]],[\"name/796\",[38,47.086]],[\"comment/796\",[]],[\"name/797\",[39,47.086]],[\"comment/797\",[]],[\"name/798\",[40,47.086]],[\"comment/798\",[]],[\"name/799\",[41,47.086]],[\"comment/799\",[]],[\"name/800\",[42,47.086]],[\"comment/800\",[]],[\"name/801\",[43,47.086]],[\"comment/801\",[]],[\"name/802\",[44,47.086]],[\"comment/802\",[]],[\"name/803\",[45,47.086]],[\"comment/803\",[]],[\"name/804\",[46,47.086]],[\"comment/804\",[]],[\"name/805\",[47,47.086]],[\"comment/805\",[]],[\"name/806\",[48,47.086]],[\"comment/806\",[]],[\"name/807\",[49,47.086]],[\"comment/807\",[]],[\"name/808\",[50,47.086]],[\"comment/808\",[]],[\"name/809\",[51,47.086]],[\"comment/809\",[]],[\"name/810\",[52,47.086]],[\"comment/810\",[]],[\"name/811\",[53,47.086]],[\"comment/811\",[]],[\"name/812\",[54,47.086]],[\"comment/812\",[]],[\"name/813\",[55,47.086]],[\"comment/813\",[]],[\"name/814\",[56,47.086]],[\"comment/814\",[]],[\"name/815\",[57,46.785]],[\"comment/815\",[]],[\"name/816\",[58,46.785]],[\"comment/816\",[]],[\"name/817\",[59,47.086]],[\"comment/817\",[]],[\"name/818\",[60,43.21]],[\"comment/818\",[]],[\"name/819\",[61,46.638]],[\"comment/819\",[]],[\"name/820\",[62,46.638]],[\"comment/820\",[]],[\"name/821\",[63,47.086]],[\"comment/821\",[]],[\"name/822\",[64,46.934]],[\"comment/822\",[]],[\"name/823\",[65,46.934]],[\"comment/823\",[]],[\"name/824\",[66,47.086]],[\"comment/824\",[]],[\"name/825\",[67,47.086]],[\"comment/825\",[]],[\"name/826\",[68,47.086]],[\"comment/826\",[]],[\"name/827\",[69,46.934]],[\"comment/827\",[]],[\"name/828\",[70,46.785]],[\"comment/828\",[]],[\"name/829\",[71,46.785]],[\"comment/829\",[]],[\"name/830\",[374,73.872]],[\"comment/830\",[]],[\"name/831\",[2,46.209]],[\"comment/831\",[]],[\"name/832\",[98,60.287]],[\"comment/832\",[]],[\"name/833\",[99,59.732]],[\"comment/833\",[]],[\"name/834\",[8,46.934]],[\"comment/834\",[]],[\"name/835\",[9,44.076]],[\"comment/835\",[]],[\"name/836\",[101,70.194]],[\"comment/836\",[]],[\"name/837\",[375,76.385]],[\"comment/837\",[]],[\"name/838\",[103,56.522]],[\"comment/838\",[]],[\"name/839\",[19,44.657]],[\"comment/839\",[]],[\"name/840\",[104,59.732]],[\"comment/840\",[]],[\"name/841\",[105,57.339]],[\"comment/841\",[]],[\"name/842\",[106,59.732]],[\"comment/842\",[]],[\"name/843\",[11,52.935]],[\"comment/843\",[]],[\"name/844\",[12,44.421]],[\"comment/844\",[]],[\"name/845\",[107,60.287]],[\"comment/845\",[]],[\"name/846\",[19,44.657]],[\"comment/846\",[]],[\"name/847\",[108,60.287]],[\"comment/847\",[]],[\"name/848\",[109,60.287]],[\"comment/848\",[]],[\"name/849\",[110,57.339]],[\"comment/849\",[]],[\"name/850\",[111,60.287]],[\"comment/850\",[]],[\"name/851\",[112,60.287]],[\"comment/851\",[]],[\"name/852\",[113,57.774]],[\"comment/852\",[]],[\"name/853\",[114,60.287]],[\"comment/853\",[]],[\"name/854\",[115,60.287]],[\"comment/854\",[]],[\"name/855\",[116,56.922]],[\"comment/855\",[]],[\"name/856\",[60,43.21]],[\"comment/856\",[]],[\"name/857\",[117,58.705]],[\"comment/857\",[]],[\"name/858\",[118,60.287]],[\"comment/858\",[]],[\"name/859\",[119,60.287]],[\"comment/859\",[]],[\"name/860\",[120,59.732]],[\"comment/860\",[]],[\"name/861\",[121,60.287]],[\"comment/861\",[]],[\"name/862\",[122,54.408]],[\"comment/862\",[]],[\"name/863\",[123,54.408]],[\"comment/863\",[]],[\"name/864\",[124,54.096]],[\"comment/864\",[]],[\"name/865\",[125,60.287]],[\"comment/865\",[]],[\"name/866\",[126,60.287]],[\"comment/866\",[]],[\"name/867\",[127,60.287]],[\"comment/867\",[]],[\"name/868\",[128,60.287]],[\"comment/868\",[]],[\"name/869\",[129,59.732]],[\"comment/869\",[]],[\"name/870\",[130,60.287]],[\"comment/870\",[]],[\"name/871\",[131,60.287]],[\"comment/871\",[]],[\"name/872\",[132,59.732]],[\"comment/872\",[]],[\"name/873\",[133,60.287]],[\"comment/873\",[]],[\"name/874\",[134,60.287]],[\"comment/874\",[]],[\"name/875\",[135,60.287]],[\"comment/875\",[]],[\"name/876\",[136,60.287]],[\"comment/876\",[]],[\"name/877\",[137,59.205]],[\"comment/877\",[]],[\"name/878\",[138,59.732]],[\"comment/878\",[]],[\"name/879\",[139,59.732]],[\"comment/879\",[]],[\"name/880\",[140,59.732]],[\"comment/880\",[]],[\"name/881\",[141,59.732]],[\"comment/881\",[]],[\"name/882\",[142,60.287]],[\"comment/882\",[]],[\"name/883\",[143,60.287]],[\"comment/883\",[]],[\"name/884\",[144,60.287]],[\"comment/884\",[]],[\"name/885\",[145,60.287]],[\"comment/885\",[]],[\"name/886\",[146,60.287]],[\"comment/886\",[]],[\"name/887\",[147,60.287]],[\"comment/887\",[]],[\"name/888\",[148,60.287]],[\"comment/888\",[]],[\"name/889\",[149,60.287]],[\"comment/889\",[]],[\"name/890\",[150,58.228]],[\"comment/890\",[]],[\"name/891\",[151,60.287]],[\"comment/891\",[]],[\"name/892\",[152,60.287]],[\"comment/892\",[]],[\"name/893\",[12,44.421]],[\"comment/893\",[]],[\"name/894\",[153,56.922]],[\"comment/894\",[]],[\"name/895\",[154,56.922]],[\"comment/895\",[]],[\"name/896\",[155,60.287]],[\"comment/896\",[]],[\"name/897\",[156,60.287]],[\"comment/897\",[]],[\"name/898\",[157,60.287]],[\"comment/898\",[]],[\"name/899\",[158,56.922]],[\"comment/899\",[]],[\"name/900\",[159,59.732]],[\"comment/900\",[]],[\"name/901\",[160,59.732]],[\"comment/901\",[]],[\"name/902\",[161,60.287]],[\"comment/902\",[]],[\"name/903\",[162,60.287]],[\"comment/903\",[]],[\"name/904\",[163,60.287]],[\"comment/904\",[]],[\"name/905\",[164,60.287]],[\"comment/905\",[]],[\"name/906\",[165,60.287]],[\"comment/906\",[]],[\"name/907\",[166,57.339]],[\"comment/907\",[]],[\"name/908\",[167,59.732]],[\"comment/908\",[]],[\"name/909\",[168,59.732]],[\"comment/909\",[]],[\"name/910\",[20,50.513]],[\"comment/910\",[]],[\"name/911\",[16,49.491]],[\"comment/911\",[]],[\"name/912\",[35,52.664]],[\"comment/912\",[]],[\"name/913\",[36,52.664]],[\"comment/913\",[]],[\"name/914\",[169,53.793]],[\"comment/914\",[]],[\"name/915\",[170,59.205]],[\"comment/915\",[]],[\"name/916\",[171,59.732]],[\"comment/916\",[]],[\"name/917\",[172,59.732]],[\"comment/917\",[]],[\"name/918\",[173,59.732]],[\"comment/918\",[]],[\"name/919\",[174,59.732]],[\"comment/919\",[]],[\"name/920\",[175,59.732]],[\"comment/920\",[]],[\"name/921\",[176,59.732]],[\"comment/921\",[]],[\"name/922\",[177,59.732]],[\"comment/922\",[]],[\"name/923\",[178,59.732]],[\"comment/923\",[]],[\"name/924\",[102,59.732]],[\"comment/924\",[]],[\"name/925\",[179,58.228]],[\"comment/925\",[]],[\"name/926\",[180,59.732]],[\"comment/926\",[]],[\"name/927\",[181,59.732]],[\"comment/927\",[]],[\"name/928\",[182,56.922]],[\"comment/928\",[]],[\"name/929\",[183,59.205]],[\"comment/929\",[]],[\"name/930\",[184,59.732]],[\"comment/930\",[]],[\"name/931\",[185,59.732]],[\"comment/931\",[]],[\"name/932\",[186,59.732]],[\"comment/932\",[]],[\"name/933\",[187,59.732]],[\"comment/933\",[]],[\"name/934\",[188,59.732]],[\"comment/934\",[]],[\"name/935\",[28,53.498]],[\"comment/935\",[]],[\"name/936\",[26,53.498]],[\"comment/936\",[]],[\"name/937\",[27,53.498]],[\"comment/937\",[]],[\"name/938\",[38,47.086]],[\"comment/938\",[]],[\"name/939\",[39,47.086]],[\"comment/939\",[]],[\"name/940\",[40,47.086]],[\"comment/940\",[]],[\"name/941\",[41,47.086]],[\"comment/941\",[]],[\"name/942\",[42,47.086]],[\"comment/942\",[]],[\"name/943\",[43,47.086]],[\"comment/943\",[]],[\"name/944\",[44,47.086]],[\"comment/944\",[]],[\"name/945\",[45,47.086]],[\"comment/945\",[]],[\"name/946\",[46,47.086]],[\"comment/946\",[]],[\"name/947\",[47,47.086]],[\"comment/947\",[]],[\"name/948\",[48,47.086]],[\"comment/948\",[]],[\"name/949\",[49,47.086]],[\"comment/949\",[]],[\"name/950\",[50,47.086]],[\"comment/950\",[]],[\"name/951\",[51,47.086]],[\"comment/951\",[]],[\"name/952\",[52,47.086]],[\"comment/952\",[]],[\"name/953\",[53,47.086]],[\"comment/953\",[]],[\"name/954\",[54,47.086]],[\"comment/954\",[]],[\"name/955\",[55,47.086]],[\"comment/955\",[]],[\"name/956\",[56,47.086]],[\"comment/956\",[]],[\"name/957\",[57,46.785]],[\"comment/957\",[]],[\"name/958\",[58,46.785]],[\"comment/958\",[]],[\"name/959\",[59,47.086]],[\"comment/959\",[]],[\"name/960\",[60,43.21]],[\"comment/960\",[]],[\"name/961\",[61,46.638]],[\"comment/961\",[]],[\"name/962\",[62,46.638]],[\"comment/962\",[]],[\"name/963\",[63,47.086]],[\"comment/963\",[]],[\"name/964\",[64,46.934]],[\"comment/964\",[]],[\"name/965\",[65,46.934]],[\"comment/965\",[]],[\"name/966\",[66,47.086]],[\"comment/966\",[]],[\"name/967\",[67,47.086]],[\"comment/967\",[]],[\"name/968\",[68,47.086]],[\"comment/968\",[]],[\"name/969\",[69,46.934]],[\"comment/969\",[]],[\"name/970\",[70,46.785]],[\"comment/970\",[]],[\"name/971\",[71,46.785]],[\"comment/971\",[]],[\"name/972\",[376,84.86]],[\"comment/972\",[]],[\"name/973\",[377,84.86]],[\"comment/973\",[]],[\"name/974\",[255,65.397]],[\"comment/974\",[]],[\"name/975\",[154,56.922]],[\"comment/975\",[]],[\"name/976\",[378,84.86]],[\"comment/976\",[]],[\"name/977\",[379,84.86]],[\"comment/977\",[]],[\"name/978\",[380,76.385]],[\"comment/978\",[]],[\"name/979\",[1,57.339]],[\"comment/979\",[]],[\"name/980\",[2,46.209]],[\"comment/980\",[]],[\"name/981\",[98,60.287]],[\"comment/981\",[]],[\"name/982\",[99,59.732]],[\"comment/982\",[]],[\"name/983\",[8,46.934]],[\"comment/983\",[]],[\"name/984\",[9,44.076]],[\"comment/984\",[]],[\"name/985\",[381,67.51]],[\"comment/985\",[]],[\"name/986\",[382,84.86]],[\"comment/986\",[]],[\"name/987\",[383,84.86]],[\"comment/987\",[]],[\"name/988\",[103,56.522]],[\"comment/988\",[]],[\"name/989\",[19,44.657]],[\"comment/989\",[]],[\"name/990\",[104,59.732]],[\"comment/990\",[]],[\"name/991\",[105,57.339]],[\"comment/991\",[]],[\"name/992\",[106,59.732]],[\"comment/992\",[]],[\"name/993\",[11,52.935]],[\"comment/993\",[]],[\"name/994\",[12,44.421]],[\"comment/994\",[]],[\"name/995\",[107,60.287]],[\"comment/995\",[]],[\"name/996\",[19,44.657]],[\"comment/996\",[]],[\"name/997\",[108,60.287]],[\"comment/997\",[]],[\"name/998\",[109,60.287]],[\"comment/998\",[]],[\"name/999\",[110,57.339]],[\"comment/999\",[]],[\"name/1000\",[111,60.287]],[\"comment/1000\",[]],[\"name/1001\",[112,60.287]],[\"comment/1001\",[]],[\"name/1002\",[113,57.774]],[\"comment/1002\",[]],[\"name/1003\",[114,60.287]],[\"comment/1003\",[]],[\"name/1004\",[115,60.287]],[\"comment/1004\",[]],[\"name/1005\",[116,56.922]],[\"comment/1005\",[]],[\"name/1006\",[60,43.21]],[\"comment/1006\",[]],[\"name/1007\",[117,58.705]],[\"comment/1007\",[]],[\"name/1008\",[118,60.287]],[\"comment/1008\",[]],[\"name/1009\",[119,60.287]],[\"comment/1009\",[]],[\"name/1010\",[120,59.732]],[\"comment/1010\",[]],[\"name/1011\",[121,60.287]],[\"comment/1011\",[]],[\"name/1012\",[122,54.408]],[\"comment/1012\",[]],[\"name/1013\",[123,54.408]],[\"comment/1013\",[]],[\"name/1014\",[124,54.096]],[\"comment/1014\",[]],[\"name/1015\",[125,60.287]],[\"comment/1015\",[]],[\"name/1016\",[126,60.287]],[\"comment/1016\",[]],[\"name/1017\",[127,60.287]],[\"comment/1017\",[]],[\"name/1018\",[128,60.287]],[\"comment/1018\",[]],[\"name/1019\",[129,59.732]],[\"comment/1019\",[]],[\"name/1020\",[130,60.287]],[\"comment/1020\",[]],[\"name/1021\",[131,60.287]],[\"comment/1021\",[]],[\"name/1022\",[132,59.732]],[\"comment/1022\",[]],[\"name/1023\",[133,60.287]],[\"comment/1023\",[]],[\"name/1024\",[134,60.287]],[\"comment/1024\",[]],[\"name/1025\",[135,60.287]],[\"comment/1025\",[]],[\"name/1026\",[136,60.287]],[\"comment/1026\",[]],[\"name/1027\",[137,59.205]],[\"comment/1027\",[]],[\"name/1028\",[138,59.732]],[\"comment/1028\",[]],[\"name/1029\",[139,59.732]],[\"comment/1029\",[]],[\"name/1030\",[140,59.732]],[\"comment/1030\",[]],[\"name/1031\",[141,59.732]],[\"comment/1031\",[]],[\"name/1032\",[142,60.287]],[\"comment/1032\",[]],[\"name/1033\",[143,60.287]],[\"comment/1033\",[]],[\"name/1034\",[144,60.287]],[\"comment/1034\",[]],[\"name/1035\",[145,60.287]],[\"comment/1035\",[]],[\"name/1036\",[146,60.287]],[\"comment/1036\",[]],[\"name/1037\",[147,60.287]],[\"comment/1037\",[]],[\"name/1038\",[148,60.287]],[\"comment/1038\",[]],[\"name/1039\",[149,60.287]],[\"comment/1039\",[]],[\"name/1040\",[150,58.228]],[\"comment/1040\",[]],[\"name/1041\",[151,60.287]],[\"comment/1041\",[]],[\"name/1042\",[152,60.287]],[\"comment/1042\",[]],[\"name/1043\",[12,44.421]],[\"comment/1043\",[]],[\"name/1044\",[153,56.922]],[\"comment/1044\",[]],[\"name/1045\",[154,56.922]],[\"comment/1045\",[]],[\"name/1046\",[155,60.287]],[\"comment/1046\",[]],[\"name/1047\",[156,60.287]],[\"comment/1047\",[]],[\"name/1048\",[157,60.287]],[\"comment/1048\",[]],[\"name/1049\",[158,56.922]],[\"comment/1049\",[]],[\"name/1050\",[159,59.732]],[\"comment/1050\",[]],[\"name/1051\",[160,59.732]],[\"comment/1051\",[]],[\"name/1052\",[161,60.287]],[\"comment/1052\",[]],[\"name/1053\",[162,60.287]],[\"comment/1053\",[]],[\"name/1054\",[163,60.287]],[\"comment/1054\",[]],[\"name/1055\",[164,60.287]],[\"comment/1055\",[]],[\"name/1056\",[165,60.287]],[\"comment/1056\",[]],[\"name/1057\",[166,57.339]],[\"comment/1057\",[]],[\"name/1058\",[167,59.732]],[\"comment/1058\",[]],[\"name/1059\",[168,59.732]],[\"comment/1059\",[]],[\"name/1060\",[20,50.513]],[\"comment/1060\",[]],[\"name/1061\",[16,49.491]],[\"comment/1061\",[]],[\"name/1062\",[35,52.664]],[\"comment/1062\",[]],[\"name/1063\",[36,52.664]],[\"comment/1063\",[]],[\"name/1064\",[169,53.793]],[\"comment/1064\",[]],[\"name/1065\",[170,59.205]],[\"comment/1065\",[]],[\"name/1066\",[171,59.732]],[\"comment/1066\",[]],[\"name/1067\",[172,59.732]],[\"comment/1067\",[]],[\"name/1068\",[173,59.732]],[\"comment/1068\",[]],[\"name/1069\",[174,59.732]],[\"comment/1069\",[]],[\"name/1070\",[175,59.732]],[\"comment/1070\",[]],[\"name/1071\",[176,59.732]],[\"comment/1071\",[]],[\"name/1072\",[177,59.732]],[\"comment/1072\",[]],[\"name/1073\",[178,59.732]],[\"comment/1073\",[]],[\"name/1074\",[102,59.732]],[\"comment/1074\",[]],[\"name/1075\",[179,58.228]],[\"comment/1075\",[]],[\"name/1076\",[180,59.732]],[\"comment/1076\",[]],[\"name/1077\",[181,59.732]],[\"comment/1077\",[]],[\"name/1078\",[182,56.922]],[\"comment/1078\",[]],[\"name/1079\",[183,59.205]],[\"comment/1079\",[]],[\"name/1080\",[184,59.732]],[\"comment/1080\",[]],[\"name/1081\",[185,59.732]],[\"comment/1081\",[]],[\"name/1082\",[186,59.732]],[\"comment/1082\",[]],[\"name/1083\",[187,59.732]],[\"comment/1083\",[]],[\"name/1084\",[188,59.732]],[\"comment/1084\",[]],[\"name/1085\",[28,53.498]],[\"comment/1085\",[]],[\"name/1086\",[26,53.498]],[\"comment/1086\",[]],[\"name/1087\",[27,53.498]],[\"comment/1087\",[]],[\"name/1088\",[38,47.086]],[\"comment/1088\",[]],[\"name/1089\",[39,47.086]],[\"comment/1089\",[]],[\"name/1090\",[40,47.086]],[\"comment/1090\",[]],[\"name/1091\",[41,47.086]],[\"comment/1091\",[]],[\"name/1092\",[42,47.086]],[\"comment/1092\",[]],[\"name/1093\",[43,47.086]],[\"comment/1093\",[]],[\"name/1094\",[44,47.086]],[\"comment/1094\",[]],[\"name/1095\",[45,47.086]],[\"comment/1095\",[]],[\"name/1096\",[46,47.086]],[\"comment/1096\",[]],[\"name/1097\",[47,47.086]],[\"comment/1097\",[]],[\"name/1098\",[48,47.086]],[\"comment/1098\",[]],[\"name/1099\",[49,47.086]],[\"comment/1099\",[]],[\"name/1100\",[50,47.086]],[\"comment/1100\",[]],[\"name/1101\",[51,47.086]],[\"comment/1101\",[]],[\"name/1102\",[52,47.086]],[\"comment/1102\",[]],[\"name/1103\",[53,47.086]],[\"comment/1103\",[]],[\"name/1104\",[54,47.086]],[\"comment/1104\",[]],[\"name/1105\",[55,47.086]],[\"comment/1105\",[]],[\"name/1106\",[56,47.086]],[\"comment/1106\",[]],[\"name/1107\",[57,46.785]],[\"comment/1107\",[]],[\"name/1108\",[58,46.785]],[\"comment/1108\",[]],[\"name/1109\",[59,47.086]],[\"comment/1109\",[]],[\"name/1110\",[60,43.21]],[\"comment/1110\",[]],[\"name/1111\",[61,46.638]],[\"comment/1111\",[]],[\"name/1112\",[62,46.638]],[\"comment/1112\",[]],[\"name/1113\",[63,47.086]],[\"comment/1113\",[]],[\"name/1114\",[64,46.934]],[\"comment/1114\",[]],[\"name/1115\",[65,46.934]],[\"comment/1115\",[]],[\"name/1116\",[66,47.086]],[\"comment/1116\",[]],[\"name/1117\",[67,47.086]],[\"comment/1117\",[]],[\"name/1118\",[68,47.086]],[\"comment/1118\",[]],[\"name/1119\",[69,46.934]],[\"comment/1119\",[]],[\"name/1120\",[70,46.785]],[\"comment/1120\",[]],[\"name/1121\",[71,46.785]],[\"comment/1121\",[]],[\"name/1122\",[384,84.86]],[\"comment/1122\",[]],[\"name/1123\",[385,84.86]],[\"comment/1123\",[]],[\"name/1124\",[386,79.751]],[\"comment/1124\",[]],[\"name/1125\",[362,73.872]],[\"comment/1125\",[]],[\"name/1126\",[110,57.339]],[\"comment/1126\",[]],[\"name/1127\",[6,54.096]],[\"comment/1127\",[]],[\"name/1128\",[387,84.86]],[\"comment/1128\",[]],[\"name/1129\",[388,84.86]],[\"comment/1129\",[]],[\"name/1130\",[389,79.751]],[\"comment/1130\",[]],[\"name/1131\",[390,84.86]],[\"comment/1131\",[]],[\"name/1132\",[391,84.86]],[\"comment/1132\",[]],[\"name/1133\",[392,73.872]],[\"comment/1133\",[]],[\"name/1134\",[2,46.209]],[\"comment/1134\",[]],[\"name/1135\",[6,54.096]],[\"comment/1135\",[]],[\"name/1136\",[7,59.732]],[\"comment/1136\",[]],[\"name/1137\",[8,46.934]],[\"comment/1137\",[]],[\"name/1138\",[9,44.076]],[\"comment/1138\",[]],[\"name/1139\",[11,52.935]],[\"comment/1139\",[]],[\"name/1140\",[393,70.194]],[\"comment/1140\",[]],[\"name/1141\",[394,73.872]],[\"comment/1141\",[]],[\"name/1142\",[395,84.86]],[\"comment/1142\",[]],[\"name/1143\",[19,44.657]],[\"comment/1143\",[]],[\"name/1144\",[38,47.086]],[\"comment/1144\",[]],[\"name/1145\",[39,47.086]],[\"comment/1145\",[]],[\"name/1146\",[40,47.086]],[\"comment/1146\",[]],[\"name/1147\",[41,47.086]],[\"comment/1147\",[]],[\"name/1148\",[42,47.086]],[\"comment/1148\",[]],[\"name/1149\",[43,47.086]],[\"comment/1149\",[]],[\"name/1150\",[44,47.086]],[\"comment/1150\",[]],[\"name/1151\",[45,47.086]],[\"comment/1151\",[]],[\"name/1152\",[46,47.086]],[\"comment/1152\",[]],[\"name/1153\",[47,47.086]],[\"comment/1153\",[]],[\"name/1154\",[48,47.086]],[\"comment/1154\",[]],[\"name/1155\",[49,47.086]],[\"comment/1155\",[]],[\"name/1156\",[50,47.086]],[\"comment/1156\",[]],[\"name/1157\",[51,47.086]],[\"comment/1157\",[]],[\"name/1158\",[52,47.086]],[\"comment/1158\",[]],[\"name/1159\",[53,47.086]],[\"comment/1159\",[]],[\"name/1160\",[54,47.086]],[\"comment/1160\",[]],[\"name/1161\",[55,47.086]],[\"comment/1161\",[]],[\"name/1162\",[56,47.086]],[\"comment/1162\",[]],[\"name/1163\",[57,46.785]],[\"comment/1163\",[]],[\"name/1164\",[58,46.785]],[\"comment/1164\",[]],[\"name/1165\",[59,47.086]],[\"comment/1165\",[]],[\"name/1166\",[60,43.21]],[\"comment/1166\",[]],[\"name/1167\",[61,46.638]],[\"comment/1167\",[]],[\"name/1168\",[62,46.638]],[\"comment/1168\",[]],[\"name/1169\",[63,47.086]],[\"comment/1169\",[]],[\"name/1170\",[64,46.934]],[\"comment/1170\",[]],[\"name/1171\",[65,46.934]],[\"comment/1171\",[]],[\"name/1172\",[66,47.086]],[\"comment/1172\",[]],[\"name/1173\",[67,47.086]],[\"comment/1173\",[]],[\"name/1174\",[68,47.086]],[\"comment/1174\",[]],[\"name/1175\",[69,46.934]],[\"comment/1175\",[]],[\"name/1176\",[70,46.785]],[\"comment/1176\",[]],[\"name/1177\",[71,46.785]],[\"comment/1177\",[]],[\"name/1178\",[396,73.872]],[\"comment/1178\",[]],[\"name/1179\",[2,46.209]],[\"comment/1179\",[]],[\"name/1180\",[397,84.86]],[\"comment/1180\",[]],[\"name/1181\",[398,79.751]],[\"comment/1181\",[]],[\"name/1182\",[3,58.228]],[\"comment/1182\",[]],[\"name/1183\",[6,54.096]],[\"comment/1183\",[]],[\"name/1184\",[7,59.732]],[\"comment/1184\",[]],[\"name/1185\",[8,46.934]],[\"comment/1185\",[]],[\"name/1186\",[9,44.076]],[\"comment/1186\",[]],[\"name/1187\",[17,60.876]],[\"comment/1187\",[]],[\"name/1188\",[399,84.86]],[\"comment/1188\",[]],[\"name/1189\",[19,44.657]],[\"comment/1189\",[]],[\"name/1190\",[16,49.491]],[\"comment/1190\",[]],[\"name/1191\",[20,50.513]],[\"comment/1191\",[]],[\"name/1192\",[21,60.876]],[\"comment/1192\",[]],[\"name/1193\",[22,60.876]],[\"comment/1193\",[]],[\"name/1194\",[23,60.876]],[\"comment/1194\",[]],[\"name/1195\",[24,60.876]],[\"comment/1195\",[]],[\"name/1196\",[25,60.876]],[\"comment/1196\",[]],[\"name/1197\",[26,53.498]],[\"comment/1197\",[]],[\"name/1198\",[27,53.498]],[\"comment/1198\",[]],[\"name/1199\",[28,53.498]],[\"comment/1199\",[]],[\"name/1200\",[29,56.137]],[\"comment/1200\",[]],[\"name/1201\",[30,55.767]],[\"comment/1201\",[]],[\"name/1202\",[31,60.876]],[\"comment/1202\",[]],[\"name/1203\",[32,59.732]],[\"comment/1203\",[]],[\"name/1204\",[33,60.876]],[\"comment/1204\",[]],[\"name/1205\",[34,60.876]],[\"comment/1205\",[]],[\"name/1206\",[35,52.664]],[\"comment/1206\",[]],[\"name/1207\",[36,52.664]],[\"comment/1207\",[]],[\"name/1208\",[37,60.876]],[\"comment/1208\",[]],[\"name/1209\",[38,47.086]],[\"comment/1209\",[]],[\"name/1210\",[39,47.086]],[\"comment/1210\",[]],[\"name/1211\",[40,47.086]],[\"comment/1211\",[]],[\"name/1212\",[41,47.086]],[\"comment/1212\",[]],[\"name/1213\",[42,47.086]],[\"comment/1213\",[]],[\"name/1214\",[43,47.086]],[\"comment/1214\",[]],[\"name/1215\",[44,47.086]],[\"comment/1215\",[]],[\"name/1216\",[45,47.086]],[\"comment/1216\",[]],[\"name/1217\",[46,47.086]],[\"comment/1217\",[]],[\"name/1218\",[47,47.086]],[\"comment/1218\",[]],[\"name/1219\",[48,47.086]],[\"comment/1219\",[]],[\"name/1220\",[49,47.086]],[\"comment/1220\",[]],[\"name/1221\",[50,47.086]],[\"comment/1221\",[]],[\"name/1222\",[51,47.086]],[\"comment/1222\",[]],[\"name/1223\",[52,47.086]],[\"comment/1223\",[]],[\"name/1224\",[53,47.086]],[\"comment/1224\",[]],[\"name/1225\",[54,47.086]],[\"comment/1225\",[]],[\"name/1226\",[55,47.086]],[\"comment/1226\",[]],[\"name/1227\",[56,47.086]],[\"comment/1227\",[]],[\"name/1228\",[57,46.785]],[\"comment/1228\",[]],[\"name/1229\",[58,46.785]],[\"comment/1229\",[]],[\"name/1230\",[59,47.086]],[\"comment/1230\",[]],[\"name/1231\",[60,43.21]],[\"comment/1231\",[]],[\"name/1232\",[61,46.638]],[\"comment/1232\",[]],[\"name/1233\",[62,46.638]],[\"comment/1233\",[]],[\"name/1234\",[63,47.086]],[\"comment/1234\",[]],[\"name/1235\",[64,46.934]],[\"comment/1235\",[]],[\"name/1236\",[65,46.934]],[\"comment/1236\",[]],[\"name/1237\",[66,47.086]],[\"comment/1237\",[]],[\"name/1238\",[67,47.086]],[\"comment/1238\",[]],[\"name/1239\",[68,47.086]],[\"comment/1239\",[]],[\"name/1240\",[69,46.934]],[\"comment/1240\",[]],[\"name/1241\",[70,46.785]],[\"comment/1241\",[]],[\"name/1242\",[71,46.785]],[\"comment/1242\",[]],[\"name/1243\",[400,84.86]],[\"comment/1243\",[]],[\"name/1244\",[12,44.421]],[\"comment/1244\",[]],[\"name/1245\",[401,84.86]],[\"comment/1245\",[]],[\"name/1246\",[9,44.076]],[\"comment/1246\",[]],[\"name/1247\",[402,73.872]],[\"comment/1247\",[]],[\"name/1248\",[403,73.872]],[\"comment/1248\",[]],[\"name/1249\",[323,60.876]],[\"comment/1249\",[]],[\"name/1250\",[404,76.385]],[\"comment/1250\",[]],[\"name/1251\",[405,84.86]],[\"comment/1251\",[]],[\"name/1252\",[406,84.86]],[\"comment/1252\",[]],[\"name/1253\",[407,84.86]],[\"comment/1253\",[]],[\"name/1254\",[408,79.751]],[\"comment/1254\",[]],[\"name/1255\",[209,71.865]],[\"comment/1255\",[]],[\"name/1256\",[409,67.51]],[\"comment/1256\",[]],[\"name/1257\",[410,84.86]],[\"comment/1257\",[]],[\"name/1258\",[0,63.653]],[\"comment/1258\",[]],[\"name/1259\",[411,64.487]],[\"comment/1259\",[]],[\"name/1260\",[10,57.774]],[\"comment/1260\",[]],[\"name/1261\",[412,63.653]],[\"comment/1261\",[]],[\"name/1262\",[413,84.86]],[\"comment/1262\",[]],[\"name/1263\",[414,84.86]],[\"comment/1263\",[]],[\"name/1264\",[415,84.86]],[\"comment/1264\",[]],[\"name/1265\",[416,84.86]],[\"comment/1265\",[]],[\"name/1266\",[417,73.872]],[\"comment/1266\",[]],[\"name/1267\",[418,84.86]],[\"comment/1267\",[]],[\"name/1268\",[419,84.86]],[\"comment/1268\",[]],[\"name/1269\",[420,84.86]],[\"comment/1269\",[]],[\"name/1270\",[421,76.385]],[\"comment/1270\",[]],[\"name/1271\",[422,76.385]],[\"comment/1271\",[]],[\"name/1272\",[423,84.86]],[\"comment/1272\",[]],[\"name/1273\",[424,84.86]],[\"comment/1273\",[]],[\"name/1274\",[367,79.751]],[\"comment/1274\",[]],[\"name/1275\",[425,84.86]],[\"comment/1275\",[]],[\"name/1276\",[426,84.86]],[\"comment/1276\",[]],[\"name/1277\",[427,84.86]],[\"comment/1277\",[]],[\"name/1278\",[396,73.872]],[\"comment/1278\",[]],[\"name/1279\",[428,79.751]],[\"comment/1279\",[]],[\"name/1280\",[429,84.86]],[\"comment/1280\",[]],[\"name/1281\",[430,79.751]],[\"comment/1281\",[]],[\"name/1282\",[431,84.86]],[\"comment/1282\",[]],[\"name/1283\",[432,84.86]],[\"comment/1283\",[]],[\"name/1284\",[433,84.86]],[\"comment/1284\",[]],[\"name/1285\",[434,84.86]],[\"comment/1285\",[]],[\"name/1286\",[417,73.872]],[\"comment/1286\",[]],[\"name/1287\",[435,84.86]],[\"comment/1287\",[]],[\"name/1288\",[421,76.385]],[\"comment/1288\",[]],[\"name/1289\",[404,76.385]],[\"comment/1289\",[]],[\"name/1290\",[9,44.076]],[\"comment/1290\",[]],[\"name/1291\",[408,79.751]],[\"comment/1291\",[]],[\"name/1292\",[412,63.653]],[\"comment/1292\",[]],[\"name/1293\",[411,64.487]],[\"comment/1293\",[]],[\"name/1294\",[10,57.774]],[\"comment/1294\",[]],[\"name/1295\",[436,70.194]],[\"comment/1295\",[]],[\"name/1296\",[12,44.421]],[\"comment/1296\",[]],[\"name/1297\",[437,84.86]],[\"comment/1297\",[]],[\"name/1298\",[209,71.865]],[\"comment/1298\",[]],[\"name/1299\",[422,76.385]],[\"comment/1299\",[]],[\"name/1300\",[438,84.86]],[\"comment/1300\",[]],[\"name/1301\",[439,63.653]],[\"comment/1301\",[]],[\"name/1302\",[366,66.398]],[\"comment/1302\",[]],[\"name/1303\",[402,73.872]],[\"comment/1303\",[]],[\"name/1304\",[9,44.076]],[\"comment/1304\",[]],[\"name/1305\",[440,70.194]],[\"comment/1305\",[]],[\"name/1306\",[441,84.86]],[\"comment/1306\",[]],[\"name/1307\",[436,70.194]],[\"comment/1307\",[]],[\"name/1308\",[404,76.385]],[\"comment/1308\",[]],[\"name/1309\",[442,79.751]],[\"comment/1309\",[]],[\"name/1310\",[443,84.86]],[\"comment/1310\",[]],[\"name/1311\",[166,57.339]],[\"comment/1311\",[]],[\"name/1312\",[444,84.86]],[\"comment/1312\",[]],[\"name/1313\",[445,84.86]],[\"comment/1313\",[]],[\"name/1314\",[446,79.751]],[\"comment/1314\",[]],[\"name/1315\",[447,84.86]],[\"comment/1315\",[]],[\"name/1316\",[448,84.86]],[\"comment/1316\",[]],[\"name/1317\",[449,84.86]],[\"comment/1317\",[]],[\"name/1318\",[450,84.86]],[\"comment/1318\",[]],[\"name/1319\",[451,84.86]],[\"comment/1319\",[]],[\"name/1320\",[452,84.86]],[\"comment/1320\",[]],[\"name/1321\",[453,84.86]],[\"comment/1321\",[]],[\"name/1322\",[454,84.86]],[\"comment/1322\",[]],[\"name/1323\",[455,84.86]],[\"comment/1323\",[]],[\"name/1324\",[456,84.86]],[\"comment/1324\",[]],[\"name/1325\",[440,70.194]],[\"comment/1325\",[]],[\"name/1326\",[402,73.872]],[\"comment/1326\",[]],[\"name/1327\",[442,79.751]],[\"comment/1327\",[]],[\"name/1328\",[457,84.86]],[\"comment/1328\",[]],[\"name/1329\",[458,84.86]],[\"comment/1329\",[]],[\"name/1330\",[366,66.398]],[\"comment/1330\",[]],[\"name/1331\",[459,84.86]],[\"comment/1331\",[]],[\"name/1332\",[439,63.653]],[\"comment/1332\",[]],[\"name/1333\",[460,76.385]],[\"comment/1333\",[]],[\"name/1334\",[1,57.339]],[\"comment/1334\",[]],[\"name/1335\",[9,44.076]],[\"comment/1335\",[]],[\"name/1336\",[461,84.86]],[\"comment/1336\",[]],[\"name/1337\",[436,70.194]],[\"comment/1337\",[]],[\"name/1338\",[440,70.194]],[\"comment/1338\",[]],[\"name/1339\",[402,73.872]],[\"comment/1339\",[]],[\"name/1340\",[462,79.751]],[\"comment/1340\",[]],[\"name/1341\",[463,76.385]],[\"comment/1341\",[]],[\"name/1342\",[464,79.751]],[\"comment/1342\",[]],[\"name/1343\",[465,70.194]],[\"comment/1343\",[]],[\"name/1344\",[58,46.785]],[\"comment/1344\",[]],[\"name/1345\",[466,76.385]],[\"comment/1345\",[]],[\"name/1346\",[193,71.865]],[\"comment/1346\",[]],[\"name/1347\",[467,70.194]],[\"comment/1347\",[]],[\"name/1348\",[209,71.865]],[\"comment/1348\",[]],[\"name/1349\",[468,71.865]],[\"comment/1349\",[]],[\"name/1350\",[446,79.751]],[\"comment/1350\",[]],[\"name/1351\",[469,84.86]],[\"comment/1351\",[]],[\"name/1352\",[470,76.385]],[\"comment/1352\",[]],[\"name/1353\",[10,57.774]],[\"comment/1353\",[]],[\"name/1354\",[471,84.86]],[\"comment/1354\",[]],[\"name/1355\",[472,84.86]],[\"comment/1355\",[]],[\"name/1356\",[473,84.86]],[\"comment/1356\",[]],[\"name/1357\",[474,84.86]],[\"comment/1357\",[]],[\"name/1358\",[296,73.872]],[\"comment/1358\",[]],[\"name/1359\",[297,73.872]],[\"comment/1359\",[]],[\"name/1360\",[475,76.385]],[\"comment/1360\",[]],[\"name/1361\",[476,73.872]],[\"comment/1361\",[]],[\"name/1362\",[2,46.209]],[\"comment/1362\",[]],[\"name/1363\",[8,46.934]],[\"comment/1363\",[]],[\"name/1364\",[9,44.076]],[\"comment/1364\",[]],[\"name/1365\",[38,47.086]],[\"comment/1365\",[]],[\"name/1366\",[39,47.086]],[\"comment/1366\",[]],[\"name/1367\",[40,47.086]],[\"comment/1367\",[]],[\"name/1368\",[41,47.086]],[\"comment/1368\",[]],[\"name/1369\",[42,47.086]],[\"comment/1369\",[]],[\"name/1370\",[43,47.086]],[\"comment/1370\",[]],[\"name/1371\",[44,47.086]],[\"comment/1371\",[]],[\"name/1372\",[45,47.086]],[\"comment/1372\",[]],[\"name/1373\",[19,44.657]],[\"comment/1373\",[]],[\"name/1374\",[46,47.086]],[\"comment/1374\",[]],[\"name/1375\",[47,47.086]],[\"comment/1375\",[]],[\"name/1376\",[48,47.086]],[\"comment/1376\",[]],[\"name/1377\",[49,47.086]],[\"comment/1377\",[]],[\"name/1378\",[50,47.086]],[\"comment/1378\",[]],[\"name/1379\",[51,47.086]],[\"comment/1379\",[]],[\"name/1380\",[52,47.086]],[\"comment/1380\",[]],[\"name/1381\",[53,47.086]],[\"comment/1381\",[]],[\"name/1382\",[54,47.086]],[\"comment/1382\",[]],[\"name/1383\",[55,47.086]],[\"comment/1383\",[]],[\"name/1384\",[56,47.086]],[\"comment/1384\",[]],[\"name/1385\",[57,46.785]],[\"comment/1385\",[]],[\"name/1386\",[58,46.785]],[\"comment/1386\",[]],[\"name/1387\",[59,47.086]],[\"comment/1387\",[]],[\"name/1388\",[60,43.21]],[\"comment/1388\",[]],[\"name/1389\",[61,46.638]],[\"comment/1389\",[]],[\"name/1390\",[62,46.638]],[\"comment/1390\",[]],[\"name/1391\",[63,47.086]],[\"comment/1391\",[]],[\"name/1392\",[64,46.934]],[\"comment/1392\",[]],[\"name/1393\",[65,46.934]],[\"comment/1393\",[]],[\"name/1394\",[66,47.086]],[\"comment/1394\",[]],[\"name/1395\",[67,47.086]],[\"comment/1395\",[]],[\"name/1396\",[68,47.086]],[\"comment/1396\",[]],[\"name/1397\",[69,46.934]],[\"comment/1397\",[]],[\"name/1398\",[70,46.785]],[\"comment/1398\",[]],[\"name/1399\",[71,46.785]],[\"comment/1399\",[]],[\"name/1400\",[477,84.86]],[\"comment/1400\",[]],[\"name/1401\",[478,67.51]],[\"comment/1401\",[]],[\"name/1402\",[12,44.421]],[\"comment/1402\",[]],[\"name/1403\",[479,73.872]],[\"comment/1403\",[]],[\"name/1404\",[480,76.385]],[\"comment/1404\",[]],[\"name/1405\",[12,44.421]],[\"comment/1405\",[]],[\"name/1406\",[481,84.86]],[\"comment/1406\",[]],[\"name/1407\",[482,84.86]],[\"comment/1407\",[]],[\"name/1408\",[225,60.876]],[\"comment/1408\",[]],[\"name/1409\",[255,65.397]],[\"comment/1409\",[]],[\"name/1410\",[483,84.86]],[\"comment/1410\",[]],[\"name/1411\",[60,43.21]],[\"comment/1411\",[]],[\"name/1412\",[440,70.194]],[\"comment/1412\",[]],[\"name/1413\",[1,57.339]],[\"comment/1413\",[]],[\"name/1414\",[8,46.934]],[\"comment/1414\",[]],[\"name/1415\",[484,84.86]],[\"comment/1415\",[]],[\"name/1416\",[9,44.076]],[\"comment/1416\",[]],[\"name/1417\",[166,57.339]],[\"comment/1417\",[]],[\"name/1418\",[465,70.194]],[\"comment/1418\",[]],[\"name/1419\",[485,84.86]],[\"comment/1419\",[]],[\"name/1420\",[57,46.785]],[\"comment/1420\",[]],[\"name/1421\",[58,46.785]],[\"comment/1421\",[]],[\"name/1422\",[122,54.408]],[\"comment/1422\",[]],[\"name/1423\",[486,79.751]],[\"comment/1423\",[]],[\"name/1424\",[478,67.51]],[\"comment/1424\",[]],[\"name/1425\",[487,73.872]],[\"comment/1425\",[]],[\"name/1426\",[488,73.872]],[\"comment/1426\",[]],[\"name/1427\",[489,73.872]],[\"comment/1427\",[]],[\"name/1428\",[490,73.872]],[\"comment/1428\",[]],[\"name/1429\",[491,73.872]],[\"comment/1429\",[]],[\"name/1430\",[492,73.872]],[\"comment/1430\",[]],[\"name/1431\",[97,73.872]],[\"comment/1431\",[]],[\"name/1432\",[374,73.872]],[\"comment/1432\",[]],[\"name/1433\",[493,73.872]],[\"comment/1433\",[]],[\"name/1434\",[494,73.872]],[\"comment/1434\",[]],[\"name/1435\",[495,73.872]],[\"comment/1435\",[]],[\"name/1436\",[496,73.872]],[\"comment/1436\",[]],[\"name/1437\",[497,73.872]],[\"comment/1437\",[]],[\"name/1438\",[0,63.653]],[\"comment/1438\",[]],[\"name/1439\",[80,71.865]],[\"comment/1439\",[]],[\"name/1440\",[328,71.865]],[\"comment/1440\",[]],[\"name/1441\",[94,71.865]],[\"comment/1441\",[]],[\"name/1442\",[498,71.865]],[\"comment/1442\",[]],[\"name/1443\",[499,73.872]],[\"comment/1443\",[]],[\"name/1444\",[500,84.86]],[\"comment/1444\",[]],[\"name/1445\",[501,71.865]],[\"comment/1445\",[]],[\"name/1446\",[502,76.385]],[\"comment/1446\",[]],[\"name/1447\",[503,76.385]],[\"comment/1447\",[]],[\"name/1448\",[504,73.872]],[\"comment/1448\",[]],[\"name/1449\",[468,71.865]],[\"comment/1449\",[]],[\"name/1450\",[505,73.872]],[\"comment/1450\",[]],[\"name/1451\",[506,76.385]],[\"comment/1451\",[]],[\"name/1452\",[467,70.194]],[\"comment/1452\",[]],[\"name/1453\",[193,71.865]],[\"comment/1453\",[]],[\"name/1454\",[392,73.872]],[\"comment/1454\",[]],[\"name/1455\",[507,73.872]],[\"comment/1455\",[]],[\"name/1456\",[508,73.872]],[\"comment/1456\",[]],[\"name/1457\",[509,73.872]],[\"comment/1457\",[]],[\"name/1458\",[510,73.872]],[\"comment/1458\",[]],[\"name/1459\",[511,73.872]],[\"comment/1459\",[]],[\"name/1460\",[460,76.385]],[\"comment/1460\",[]],[\"name/1461\",[512,71.865]],[\"comment/1461\",[]],[\"name/1462\",[513,73.872]],[\"comment/1462\",[]],[\"name/1463\",[19,44.657]],[\"comment/1463\",[]],[\"name/1464\",[514,79.751]],[\"comment/1464\",[]],[\"name/1465\",[515,84.86]],[\"comment/1465\",[]],[\"name/1466\",[12,44.421]],[\"comment/1466\",[]],[\"name/1467\",[516,84.86]],[\"comment/1467\",[]],[\"name/1468\",[470,76.385]],[\"comment/1468\",[]],[\"name/1469\",[517,84.86]],[\"comment/1469\",[]],[\"name/1470\",[0,63.653]],[\"comment/1470\",[]],[\"name/1471\",[80,71.865]],[\"comment/1471\",[]],[\"name/1472\",[94,71.865]],[\"comment/1472\",[]],[\"name/1473\",[518,76.385]],[\"comment/1473\",[]],[\"name/1474\",[97,73.872]],[\"comment/1474\",[]],[\"name/1475\",[193,71.865]],[\"comment/1475\",[]],[\"name/1476\",[227,76.385]],[\"comment/1476\",[]],[\"name/1477\",[240,79.751]],[\"comment/1477\",[]],[\"name/1478\",[252,79.751]],[\"comment/1478\",[]],[\"name/1479\",[261,79.751]],[\"comment/1479\",[]],[\"name/1480\",[328,71.865]],[\"comment/1480\",[]],[\"name/1481\",[366,66.398]],[\"comment/1481\",[]],[\"name/1482\",[374,73.872]],[\"comment/1482\",[]],[\"name/1483\",[380,76.385]],[\"comment/1483\",[]],[\"name/1484\",[392,73.872]],[\"comment/1484\",[]],[\"name/1485\",[396,73.872]],[\"comment/1485\",[]],[\"name/1486\",[460,76.385]],[\"comment/1486\",[]],[\"name/1487\",[476,73.872]],[\"comment/1487\",[]],[\"name/1488\",[440,70.194]],[\"comment/1488\",[]],[\"name/1489\",[60,43.21]],[\"comment/1489\",[]],[\"name/1490\",[506,76.385]],[\"comment/1490\",[]],[\"name/1491\",[519,76.385]],[\"comment/1491\",[]],[\"name/1492\",[520,76.385]],[\"comment/1492\",[]],[\"name/1493\",[491,73.872]],[\"comment/1493\",[]],[\"name/1494\",[305,66.398]],[\"comment/1494\",[]],[\"name/1495\",[489,73.872]],[\"comment/1495\",[]],[\"name/1496\",[496,73.872]],[\"comment/1496\",[]],[\"name/1497\",[497,73.872]],[\"comment/1497\",[]],[\"name/1498\",[521,76.385]],[\"comment/1498\",[]],[\"name/1499\",[522,79.751]],[\"comment/1499\",[]],[\"name/1500\",[523,73.872]],[\"comment/1500\",[]],[\"name/1501\",[494,73.872]],[\"comment/1501\",[]],[\"name/1502\",[524,76.385]],[\"comment/1502\",[]],[\"name/1503\",[503,76.385]],[\"comment/1503\",[]],[\"name/1504\",[504,73.872]],[\"comment/1504\",[]],[\"name/1505\",[525,79.751]],[\"comment/1505\",[]],[\"name/1506\",[409,67.51]],[\"comment/1506\",[]],[\"name/1507\",[526,73.872]],[\"comment/1507\",[]],[\"name/1508\",[513,73.872]],[\"comment/1508\",[]],[\"name/1509\",[498,71.865]],[\"comment/1509\",[]],[\"name/1510\",[527,76.385]],[\"comment/1510\",[]],[\"name/1511\",[463,76.385]],[\"comment/1511\",[]],[\"name/1512\",[512,71.865]],[\"comment/1512\",[]],[\"name/1513\",[528,79.751]],[\"comment/1513\",[]],[\"name/1514\",[529,76.385]],[\"comment/1514\",[]],[\"name/1515\",[480,76.385]],[\"comment/1515\",[]],[\"name/1516\",[490,73.872]],[\"comment/1516\",[]],[\"name/1517\",[530,76.385]],[\"comment/1517\",[]],[\"name/1518\",[478,67.51]],[\"comment/1518\",[]],[\"name/1519\",[505,73.872]],[\"comment/1519\",[]],[\"name/1520\",[531,76.385]],[\"comment/1520\",[]],[\"name/1521\",[508,73.872]],[\"comment/1521\",[]],[\"name/1522\",[532,76.385]],[\"comment/1522\",[]],[\"name/1523\",[488,73.872]],[\"comment/1523\",[]],[\"name/1524\",[533,76.385]],[\"comment/1524\",[]],[\"name/1525\",[534,76.385]],[\"comment/1525\",[]],[\"name/1526\",[507,73.872]],[\"comment/1526\",[]],[\"name/1527\",[439,63.653]],[\"comment/1527\",[]],[\"name/1528\",[501,71.865]],[\"comment/1528\",[]],[\"name/1529\",[290,68.762]],[\"comment/1529\",[]],[\"name/1530\",[535,79.751]],[\"comment/1530\",[]],[\"name/1531\",[511,73.872]],[\"comment/1531\",[]],[\"name/1532\",[495,73.872]],[\"comment/1532\",[]],[\"name/1533\",[536,76.385]],[\"comment/1533\",[]],[\"name/1534\",[487,73.872]],[\"comment/1534\",[]],[\"name/1535\",[537,76.385]],[\"comment/1535\",[]],[\"name/1536\",[510,73.872]],[\"comment/1536\",[]],[\"name/1537\",[499,73.872]],[\"comment/1537\",[]],[\"name/1538\",[538,79.751]],[\"comment/1538\",[]],[\"name/1539\",[492,73.872]],[\"comment/1539\",[]],[\"name/1540\",[502,76.385]],[\"comment/1540\",[]],[\"name/1541\",[539,73.872]],[\"comment/1541\",[]],[\"name/1542\",[493,73.872]],[\"comment/1542\",[]],[\"name/1543\",[540,73.872]],[\"comment/1543\",[]],[\"name/1544\",[541,79.751]],[\"comment/1544\",[]],[\"name/1545\",[467,70.194]],[\"comment/1545\",[]],[\"name/1546\",[542,76.385]],[\"comment/1546\",[]],[\"name/1547\",[509,73.872]],[\"comment/1547\",[]],[\"name/1548\",[468,71.865]],[\"comment/1548\",[]],[\"name/1549\",[543,76.385]],[\"comment/1549\",[]],[\"name/1550\",[72,79.751]],[\"comment/1550\",[]],[\"name/1551\",[77,79.751]],[\"comment/1551\",[]],[\"name/1552\",[320,79.751]],[\"comment/1552\",[]],[\"name/1553\",[321,79.751]],[\"comment/1553\",[]],[\"name/1554\",[322,76.385]],[\"comment/1554\",[]],[\"name/1555\",[324,76.385]],[\"comment/1555\",[]],[\"name/1556\",[389,79.751]],[\"comment/1556\",[]],[\"name/1557\",[71,46.785]],[\"comment/1557\",[]],[\"name/1558\",[70,46.785]],[\"comment/1558\",[]],[\"name/1559\",[544,79.751]],[\"comment/1559\",[]],[\"name/1560\",[545,79.751]],[\"comment/1560\",[]],[\"name/1561\",[546,79.751]],[\"comment/1561\",[]],[\"name/1562\",[547,79.751]],[\"comment/1562\",[]],[\"name/1563\",[548,79.751]],[\"comment/1563\",[]],[\"name/1564\",[549,79.751]],[\"comment/1564\",[]],[\"name/1565\",[550,79.751]],[\"comment/1565\",[]],[\"name/1566\",[551,76.385]],[\"comment/1566\",[]],[\"name/1567\",[552,79.751]],[\"comment/1567\",[]],[\"name/1568\",[553,84.86]],[\"comment/1568\",[]],[\"name/1569\",[554,84.86]],[\"comment/1569\",[]],[\"name/1570\",[555,84.86]],[\"comment/1570\",[]],[\"name/1571\",[556,84.86]],[\"comment/1571\",[]],[\"name/1572\",[557,84.86]],[\"comment/1572\",[]],[\"name/1573\",[558,84.86]],[\"comment/1573\",[]],[\"name/1574\",[559,84.86]],[\"comment/1574\",[]],[\"name/1575\",[560,84.86]],[\"comment/1575\",[]],[\"name/1576\",[561,71.865]],[\"comment/1576\",[]],[\"name/1577\",[562,84.86]],[\"comment/1577\",[]],[\"name/1578\",[563,84.86]],[\"comment/1578\",[]],[\"name/1579\",[564,84.86]],[\"comment/1579\",[]],[\"name/1580\",[565,84.86]],[\"comment/1580\",[]],[\"name/1581\",[566,84.86]],[\"comment/1581\",[]],[\"name/1582\",[567,84.86]],[\"comment/1582\",[]],[\"name/1583\",[12,44.421]],[\"comment/1583\",[]],[\"name/1584\",[568,79.751]],[\"comment/1584\",[]],[\"name/1585\",[569,79.751]],[\"comment/1585\",[]],[\"name/1586\",[561,71.865]],[\"comment/1586\",[]],[\"name/1587\",[570,84.86]],[\"comment/1587\",[]],[\"name/1588\",[571,84.86]],[\"comment/1588\",[]],[\"name/1589\",[523,73.872]],[\"comment/1589\",[]],[\"name/1590\",[572,84.86]],[\"comment/1590\",[]],[\"name/1591\",[573,84.86]],[\"comment/1591\",[]],[\"name/1592\",[574,84.86]],[\"comment/1592\",[]],[\"name/1593\",[12,44.421]],[\"comment/1593\",[]],[\"name/1594\",[575,84.86]],[\"comment/1594\",[]],[\"name/1595\",[576,84.86]],[\"comment/1595\",[]],[\"name/1596\",[577,84.86]],[\"comment/1596\",[]],[\"name/1597\",[9,44.076]],[\"comment/1597\",[]],[\"name/1598\",[64,46.934]],[\"comment/1598\",[]],[\"name/1599\",[578,76.385]],[\"comment/1599\",[]],[\"name/1600\",[579,76.385]],[\"comment/1600\",[]],[\"name/1601\",[580,79.751]],[\"comment/1601\",[]],[\"name/1602\",[581,76.385]],[\"comment/1602\",[]],[\"name/1603\",[582,84.86]],[\"comment/1603\",[]],[\"name/1604\",[12,44.421]],[\"comment/1604\",[]],[\"name/1605\",[583,84.86]],[\"comment/1605\",[]],[\"name/1606\",[336,70.194]],[\"comment/1606\",[]],[\"name/1607\",[584,84.86]],[\"comment/1607\",[]],[\"name/1608\",[319,66.398]],[\"comment/1608\",[]],[\"name/1609\",[585,84.86]],[\"comment/1609\",[]],[\"name/1610\",[561,71.865]],[\"comment/1610\",[]],[\"name/1611\",[586,84.86]],[\"comment/1611\",[]],[\"name/1612\",[587,84.86]],[\"comment/1612\",[]],[\"name/1613\",[588,84.86]],[\"comment/1613\",[]],[\"name/1614\",[478,67.51]],[\"comment/1614\",[]],[\"name/1615\",[0,63.653]],[\"comment/1615\",[]],[\"name/1616\",[589,84.86]],[\"comment/1616\",[]],[\"name/1617\",[590,84.86]],[\"comment/1617\",[]],[\"name/1618\",[512,71.865]],[\"comment/1618\",[]],[\"name/1619\",[591,84.86]],[\"comment/1619\",[]],[\"name/1620\",[94,71.865]],[\"comment/1620\",[]],[\"name/1621\",[540,73.872]],[\"comment/1621\",[]],[\"name/1622\",[328,71.865]],[\"comment/1622\",[]],[\"name/1623\",[498,71.865]],[\"comment/1623\",[]],[\"name/1624\",[526,73.872]],[\"comment/1624\",[]],[\"name/1625\",[501,71.865]],[\"comment/1625\",[]],[\"name/1626\",[467,70.194]],[\"comment/1626\",[]],[\"name/1627\",[319,66.398]],[\"comment/1627\",[]],[\"name/1628\",[592,84.86]],[\"comment/1628\",[]],[\"name/1629\",[593,79.751]],[\"comment/1629\",[]],[\"name/1630\",[594,79.751]],[\"comment/1630\",[]],[\"name/1631\",[595,84.86]],[\"comment/1631\",[]],[\"name/1632\",[596,84.86]],[\"comment/1632\",[]],[\"name/1633\",[597,79.751]],[\"comment/1633\",[]],[\"name/1634\",[307,79.751]],[\"comment/1634\",[]],[\"name/1635\",[308,79.751]],[\"comment/1635\",[]],[\"name/1636\",[598,84.86]],[\"comment/1636\",[]],[\"name/1637\",[599,84.86]],[\"comment/1637\",[]],[\"name/1638\",[71,46.785]],[\"comment/1638\",[]],[\"name/1639\",[600,79.751]],[\"comment/1639\",[]],[\"name/1640\",[601,79.751]],[\"comment/1640\",[]],[\"name/1641\",[70,46.785]],[\"comment/1641\",[]],[\"name/1642\",[600,79.751]],[\"comment/1642\",[]],[\"name/1643\",[602,79.751]],[\"comment/1643\",[]],[\"name/1644\",[60,43.21]],[\"comment/1644\",[]],[\"name/1645\",[603,84.86]],[\"comment/1645\",[]],[\"name/1646\",[604,84.86]],[\"comment/1646\",[]],[\"name/1647\",[579,76.385]],[\"comment/1647\",[]],[\"name/1648\",[605,84.86]],[\"comment/1648\",[]],[\"name/1649\",[606,84.86]],[\"comment/1649\",[]],[\"name/1650\",[607,84.86]],[\"comment/1650\",[]],[\"name/1651\",[608,84.86]],[\"comment/1651\",[]],[\"name/1652\",[609,84.86]],[\"comment/1652\",[]],[\"name/1653\",[610,84.86]],[\"comment/1653\",[]],[\"name/1654\",[611,84.86]],[\"comment/1654\",[]],[\"name/1655\",[612,84.86]],[\"comment/1655\",[]],[\"name/1656\",[613,84.86]],[\"comment/1656\",[]],[\"name/1657\",[614,84.86]],[\"comment/1657\",[]],[\"name/1658\",[615,84.86]],[\"comment/1658\",[]],[\"name/1659\",[616,84.86]],[\"comment/1659\",[]],[\"name/1660\",[617,84.86]],[\"comment/1660\",[]],[\"name/1661\",[618,84.86]],[\"comment/1661\",[]],[\"name/1662\",[619,84.86]],[\"comment/1662\",[]],[\"name/1663\",[620,84.86]],[\"comment/1663\",[]],[\"name/1664\",[158,56.922]],[\"comment/1664\",[]],[\"name/1665\",[621,84.86]],[\"comment/1665\",[]],[\"name/1666\",[622,84.86]],[\"comment/1666\",[]],[\"name/1667\",[623,84.86]],[\"comment/1667\",[]],[\"name/1668\",[624,79.751]],[\"comment/1668\",[]],[\"name/1669\",[625,79.751]],[\"comment/1669\",[]],[\"name/1670\",[626,84.86]],[\"comment/1670\",[]],[\"name/1671\",[627,79.751]],[\"comment/1671\",[]],[\"name/1672\",[628,84.86]],[\"comment/1672\",[]],[\"name/1673\",[629,79.751]],[\"comment/1673\",[]],[\"name/1674\",[630,79.751]],[\"comment/1674\",[]],[\"name/1675\",[631,79.751]],[\"comment/1675\",[]],[\"name/1676\",[632,84.86]],[\"comment/1676\",[]],[\"name/1677\",[633,84.86]],[\"comment/1677\",[]],[\"name/1678\",[478,67.51]],[\"comment/1678\",[]],[\"name/1679\",[634,84.86]],[\"comment/1679\",[]],[\"name/1680\",[635,84.86]],[\"comment/1680\",[]],[\"name/1681\",[636,84.86]],[\"comment/1681\",[]],[\"name/1682\",[637,84.86]],[\"comment/1682\",[]],[\"name/1683\",[638,79.751]],[\"comment/1683\",[]],[\"name/1684\",[639,79.751]],[\"comment/1684\",[]],[\"name/1685\",[640,79.751]],[\"comment/1685\",[]],[\"name/1686\",[641,84.86]],[\"comment/1686\",[]],[\"name/1687\",[638,79.751]],[\"comment/1687\",[]],[\"name/1688\",[639,79.751]],[\"comment/1688\",[]],[\"name/1689\",[640,79.751]],[\"comment/1689\",[]],[\"name/1690\",[506,76.385]],[\"comment/1690\",[]],[\"name/1691\",[1,57.339]],[\"comment/1691\",[]],[\"name/1692\",[642,84.86]],[\"comment/1692\",[]],[\"name/1693\",[643,84.86]],[\"comment/1693\",[]],[\"name/1694\",[644,84.86]],[\"comment/1694\",[]],[\"name/1695\",[645,84.86]],[\"comment/1695\",[]],[\"name/1696\",[646,84.86]],[\"comment/1696\",[]],[\"name/1697\",[647,79.751]],[\"comment/1697\",[]],[\"name/1698\",[9,44.076]],[\"comment/1698\",[]],[\"name/1699\",[648,84.86]],[\"comment/1699\",[]],[\"name/1700\",[649,84.86]],[\"comment/1700\",[]],[\"name/1701\",[650,84.86]],[\"comment/1701\",[]],[\"name/1702\",[651,84.86]],[\"comment/1702\",[]],[\"name/1703\",[652,84.86]],[\"comment/1703\",[]],[\"name/1704\",[653,84.86]],[\"comment/1704\",[]],[\"name/1705\",[103,56.522]],[\"comment/1705\",[]],[\"name/1706\",[654,84.86]],[\"comment/1706\",[]],[\"name/1707\",[655,84.86]],[\"comment/1707\",[]],[\"name/1708\",[182,56.922]],[\"comment/1708\",[]],[\"name/1709\",[656,84.86]],[\"comment/1709\",[]],[\"name/1710\",[3,58.228]],[\"comment/1710\",[]],[\"name/1711\",[657,84.86]],[\"comment/1711\",[]],[\"name/1712\",[140,59.732]],[\"comment/1712\",[]],[\"name/1713\",[519,76.385]],[\"comment/1713\",[]],[\"name/1714\",[2,46.209]],[\"comment/1714\",[]],[\"name/1715\",[658,84.86]],[\"comment/1715\",[]],[\"name/1716\",[659,84.86]],[\"comment/1716\",[]],[\"name/1717\",[660,84.86]],[\"comment/1717\",[]],[\"name/1718\",[9,44.076]],[\"comment/1718\",[]],[\"name/1719\",[661,84.86]],[\"comment/1719\",[]],[\"name/1720\",[662,84.86]],[\"comment/1720\",[]],[\"name/1721\",[464,79.751]],[\"comment/1721\",[]],[\"name/1722\",[663,79.751]],[\"comment/1722\",[]],[\"name/1723\",[664,84.86]],[\"comment/1723\",[]],[\"name/1724\",[270,73.872]],[\"comment/1724\",[]],[\"name/1725\",[665,84.86]],[\"comment/1725\",[]],[\"name/1726\",[666,84.86]],[\"comment/1726\",[]],[\"name/1727\",[667,84.86]],[\"comment/1727\",[]],[\"name/1728\",[430,79.751]],[\"comment/1728\",[]],[\"name/1729\",[668,84.86]],[\"comment/1729\",[]],[\"name/1730\",[669,84.86]],[\"comment/1730\",[]],[\"name/1731\",[670,84.86]],[\"comment/1731\",[]],[\"name/1732\",[671,84.86]],[\"comment/1732\",[]],[\"name/1733\",[250,79.751]],[\"comment/1733\",[]],[\"name/1734\",[241,79.751]],[\"comment/1734\",[]],[\"name/1735\",[672,84.86]],[\"comment/1735\",[]],[\"name/1736\",[673,84.86]],[\"comment/1736\",[]],[\"name/1737\",[674,84.86]],[\"comment/1737\",[]],[\"name/1738\",[627,79.751]],[\"comment/1738\",[]],[\"name/1739\",[675,84.86]],[\"comment/1739\",[]],[\"name/1740\",[676,84.86]],[\"comment/1740\",[]],[\"name/1741\",[466,76.385]],[\"comment/1741\",[]],[\"name/1742\",[520,76.385]],[\"comment/1742\",[]],[\"name/1743\",[2,46.209]],[\"comment/1743\",[]],[\"name/1744\",[8,46.934]],[\"comment/1744\",[]],[\"name/1745\",[3,58.228]],[\"comment/1745\",[]],[\"name/1746\",[95,79.751]],[\"comment/1746\",[]],[\"name/1747\",[6,54.096]],[\"comment/1747\",[]],[\"name/1748\",[7,59.732]],[\"comment/1748\",[]],[\"name/1749\",[9,44.076]],[\"comment/1749\",[]],[\"name/1750\",[677,84.86]],[\"comment/1750\",[]],[\"name/1751\",[678,84.86]],[\"comment/1751\",[]],[\"name/1752\",[679,79.751]],[\"comment/1752\",[]],[\"name/1753\",[680,79.751]],[\"comment/1753\",[]],[\"name/1754\",[19,44.657]],[\"comment/1754\",[]],[\"name/1755\",[16,49.491]],[\"comment/1755\",[]],[\"name/1756\",[20,50.513]],[\"comment/1756\",[]],[\"name/1757\",[21,60.876]],[\"comment/1757\",[]],[\"name/1758\",[22,60.876]],[\"comment/1758\",[]],[\"name/1759\",[17,60.876]],[\"comment/1759\",[]],[\"name/1760\",[23,60.876]],[\"comment/1760\",[]],[\"name/1761\",[24,60.876]],[\"comment/1761\",[]],[\"name/1762\",[25,60.876]],[\"comment/1762\",[]],[\"name/1763\",[26,53.498]],[\"comment/1763\",[]],[\"name/1764\",[27,53.498]],[\"comment/1764\",[]],[\"name/1765\",[28,53.498]],[\"comment/1765\",[]],[\"name/1766\",[29,56.137]],[\"comment/1766\",[]],[\"name/1767\",[30,55.767]],[\"comment/1767\",[]],[\"name/1768\",[31,60.876]],[\"comment/1768\",[]],[\"name/1769\",[32,59.732]],[\"comment/1769\",[]],[\"name/1770\",[33,60.876]],[\"comment/1770\",[]],[\"name/1771\",[34,60.876]],[\"comment/1771\",[]],[\"name/1772\",[35,52.664]],[\"comment/1772\",[]],[\"name/1773\",[36,52.664]],[\"comment/1773\",[]],[\"name/1774\",[37,60.876]],[\"comment/1774\",[]],[\"name/1775\",[38,47.086]],[\"comment/1775\",[]],[\"name/1776\",[39,47.086]],[\"comment/1776\",[]],[\"name/1777\",[40,47.086]],[\"comment/1777\",[]],[\"name/1778\",[41,47.086]],[\"comment/1778\",[]],[\"name/1779\",[42,47.086]],[\"comment/1779\",[]],[\"name/1780\",[43,47.086]],[\"comment/1780\",[]],[\"name/1781\",[44,47.086]],[\"comment/1781\",[]],[\"name/1782\",[45,47.086]],[\"comment/1782\",[]],[\"name/1783\",[46,47.086]],[\"comment/1783\",[]],[\"name/1784\",[47,47.086]],[\"comment/1784\",[]],[\"name/1785\",[48,47.086]],[\"comment/1785\",[]],[\"name/1786\",[49,47.086]],[\"comment/1786\",[]],[\"name/1787\",[50,47.086]],[\"comment/1787\",[]],[\"name/1788\",[51,47.086]],[\"comment/1788\",[]],[\"name/1789\",[52,47.086]],[\"comment/1789\",[]],[\"name/1790\",[53,47.086]],[\"comment/1790\",[]],[\"name/1791\",[54,47.086]],[\"comment/1791\",[]],[\"name/1792\",[55,47.086]],[\"comment/1792\",[]],[\"name/1793\",[56,47.086]],[\"comment/1793\",[]],[\"name/1794\",[57,46.785]],[\"comment/1794\",[]],[\"name/1795\",[58,46.785]],[\"comment/1795\",[]],[\"name/1796\",[59,47.086]],[\"comment/1796\",[]],[\"name/1797\",[60,43.21]],[\"comment/1797\",[]],[\"name/1798\",[61,46.638]],[\"comment/1798\",[]],[\"name/1799\",[62,46.638]],[\"comment/1799\",[]],[\"name/1800\",[63,47.086]],[\"comment/1800\",[]],[\"name/1801\",[64,46.934]],[\"comment/1801\",[]],[\"name/1802\",[65,46.934]],[\"comment/1802\",[]],[\"name/1803\",[66,47.086]],[\"comment/1803\",[]],[\"name/1804\",[67,47.086]],[\"comment/1804\",[]],[\"name/1805\",[68,47.086]],[\"comment/1805\",[]],[\"name/1806\",[69,46.934]],[\"comment/1806\",[]],[\"name/1807\",[70,46.785]],[\"comment/1807\",[]],[\"name/1808\",[71,46.785]],[\"comment/1808\",[]],[\"name/1809\",[491,73.872]],[\"comment/1809\",[]],[\"name/1810\",[2,46.209]],[\"comment/1810\",[]],[\"name/1811\",[98,60.287]],[\"comment/1811\",[]],[\"name/1812\",[99,59.732]],[\"comment/1812\",[]],[\"name/1813\",[8,46.934]],[\"comment/1813\",[]],[\"name/1814\",[9,44.076]],[\"comment/1814\",[]],[\"name/1815\",[120,59.732]],[\"comment/1815\",[]],[\"name/1816\",[124,54.096]],[\"comment/1816\",[]],[\"name/1817\",[102,59.732]],[\"comment/1817\",[]],[\"name/1818\",[103,56.522]],[\"comment/1818\",[]],[\"name/1819\",[19,44.657]],[\"comment/1819\",[]],[\"name/1820\",[681,64.487]],[\"comment/1820\",[]],[\"name/1821\",[439,63.653]],[\"comment/1821\",[]],[\"name/1822\",[682,70.194]],[\"comment/1822\",[]],[\"name/1823\",[683,70.194]],[\"comment/1823\",[]],[\"name/1824\",[684,70.194]],[\"comment/1824\",[]],[\"name/1825\",[685,70.194]],[\"comment/1825\",[]],[\"name/1826\",[686,70.194]],[\"comment/1826\",[]],[\"name/1827\",[687,70.194]],[\"comment/1827\",[]],[\"name/1828\",[688,70.194]],[\"comment/1828\",[]],[\"name/1829\",[212,68.762]],[\"comment/1829\",[]],[\"name/1830\",[689,70.194]],[\"comment/1830\",[]],[\"name/1831\",[160,59.732]],[\"comment/1831\",[]],[\"name/1832\",[690,70.194]],[\"comment/1832\",[]],[\"name/1833\",[691,70.194]],[\"comment/1833\",[]],[\"name/1834\",[692,70.194]],[\"comment/1834\",[]],[\"name/1835\",[693,70.194]],[\"comment/1835\",[]],[\"name/1836\",[694,70.194]],[\"comment/1836\",[]],[\"name/1837\",[161,60.287]],[\"comment/1837\",[]],[\"name/1838\",[12,44.421]],[\"comment/1838\",[]],[\"name/1839\",[695,68.762]],[\"comment/1839\",[]],[\"name/1840\",[696,68.762]],[\"comment/1840\",[]],[\"name/1841\",[137,59.205]],[\"comment/1841\",[]],[\"name/1842\",[697,67.51]],[\"comment/1842\",[]],[\"name/1843\",[698,70.194]],[\"comment/1843\",[]],[\"name/1844\",[182,56.922]],[\"comment/1844\",[]],[\"name/1845\",[699,70.194]],[\"comment/1845\",[]],[\"name/1846\",[104,59.732]],[\"comment/1846\",[]],[\"name/1847\",[105,57.339]],[\"comment/1847\",[]],[\"name/1848\",[106,59.732]],[\"comment/1848\",[]],[\"name/1849\",[11,52.935]],[\"comment/1849\",[]],[\"name/1850\",[12,44.421]],[\"comment/1850\",[]],[\"name/1851\",[107,60.287]],[\"comment/1851\",[]],[\"name/1852\",[19,44.657]],[\"comment/1852\",[]],[\"name/1853\",[108,60.287]],[\"comment/1853\",[]],[\"name/1854\",[109,60.287]],[\"comment/1854\",[]],[\"name/1855\",[110,57.339]],[\"comment/1855\",[]],[\"name/1856\",[111,60.287]],[\"comment/1856\",[]],[\"name/1857\",[112,60.287]],[\"comment/1857\",[]],[\"name/1858\",[113,57.774]],[\"comment/1858\",[]],[\"name/1859\",[114,60.287]],[\"comment/1859\",[]],[\"name/1860\",[115,60.287]],[\"comment/1860\",[]],[\"name/1861\",[116,56.922]],[\"comment/1861\",[]],[\"name/1862\",[60,43.21]],[\"comment/1862\",[]],[\"name/1863\",[117,58.705]],[\"comment/1863\",[]],[\"name/1864\",[118,60.287]],[\"comment/1864\",[]],[\"name/1865\",[119,60.287]],[\"comment/1865\",[]],[\"name/1866\",[121,60.287]],[\"comment/1866\",[]],[\"name/1867\",[122,54.408]],[\"comment/1867\",[]],[\"name/1868\",[123,54.408]],[\"comment/1868\",[]],[\"name/1869\",[125,60.287]],[\"comment/1869\",[]],[\"name/1870\",[126,60.287]],[\"comment/1870\",[]],[\"name/1871\",[127,60.287]],[\"comment/1871\",[]],[\"name/1872\",[128,60.287]],[\"comment/1872\",[]],[\"name/1873\",[129,59.732]],[\"comment/1873\",[]],[\"name/1874\",[130,60.287]],[\"comment/1874\",[]],[\"name/1875\",[131,60.287]],[\"comment/1875\",[]],[\"name/1876\",[132,59.732]],[\"comment/1876\",[]],[\"name/1877\",[133,60.287]],[\"comment/1877\",[]],[\"name/1878\",[134,60.287]],[\"comment/1878\",[]],[\"name/1879\",[135,60.287]],[\"comment/1879\",[]],[\"name/1880\",[136,60.287]],[\"comment/1880\",[]],[\"name/1881\",[138,59.732]],[\"comment/1881\",[]],[\"name/1882\",[139,59.732]],[\"comment/1882\",[]],[\"name/1883\",[140,59.732]],[\"comment/1883\",[]],[\"name/1884\",[141,59.732]],[\"comment/1884\",[]],[\"name/1885\",[142,60.287]],[\"comment/1885\",[]],[\"name/1886\",[143,60.287]],[\"comment/1886\",[]],[\"name/1887\",[144,60.287]],[\"comment/1887\",[]],[\"name/1888\",[145,60.287]],[\"comment/1888\",[]],[\"name/1889\",[146,60.287]],[\"comment/1889\",[]],[\"name/1890\",[147,60.287]],[\"comment/1890\",[]],[\"name/1891\",[148,60.287]],[\"comment/1891\",[]],[\"name/1892\",[149,60.287]],[\"comment/1892\",[]],[\"name/1893\",[150,58.228]],[\"comment/1893\",[]],[\"name/1894\",[151,60.287]],[\"comment/1894\",[]],[\"name/1895\",[152,60.287]],[\"comment/1895\",[]],[\"name/1896\",[12,44.421]],[\"comment/1896\",[]],[\"name/1897\",[153,56.922]],[\"comment/1897\",[]],[\"name/1898\",[154,56.922]],[\"comment/1898\",[]],[\"name/1899\",[155,60.287]],[\"comment/1899\",[]],[\"name/1900\",[156,60.287]],[\"comment/1900\",[]],[\"name/1901\",[157,60.287]],[\"comment/1901\",[]],[\"name/1902\",[158,56.922]],[\"comment/1902\",[]],[\"name/1903\",[159,59.732]],[\"comment/1903\",[]],[\"name/1904\",[162,60.287]],[\"comment/1904\",[]],[\"name/1905\",[163,60.287]],[\"comment/1905\",[]],[\"name/1906\",[164,60.287]],[\"comment/1906\",[]],[\"name/1907\",[165,60.287]],[\"comment/1907\",[]],[\"name/1908\",[166,57.339]],[\"comment/1908\",[]],[\"name/1909\",[167,59.732]],[\"comment/1909\",[]],[\"name/1910\",[168,59.732]],[\"comment/1910\",[]],[\"name/1911\",[20,50.513]],[\"comment/1911\",[]],[\"name/1912\",[16,49.491]],[\"comment/1912\",[]],[\"name/1913\",[35,52.664]],[\"comment/1913\",[]],[\"name/1914\",[36,52.664]],[\"comment/1914\",[]],[\"name/1915\",[169,53.793]],[\"comment/1915\",[]],[\"name/1916\",[170,59.205]],[\"comment/1916\",[]],[\"name/1917\",[171,59.732]],[\"comment/1917\",[]],[\"name/1918\",[172,59.732]],[\"comment/1918\",[]],[\"name/1919\",[173,59.732]],[\"comment/1919\",[]],[\"name/1920\",[174,59.732]],[\"comment/1920\",[]],[\"name/1921\",[175,59.732]],[\"comment/1921\",[]],[\"name/1922\",[176,59.732]],[\"comment/1922\",[]],[\"name/1923\",[177,59.732]],[\"comment/1923\",[]],[\"name/1924\",[178,59.732]],[\"comment/1924\",[]],[\"name/1925\",[179,58.228]],[\"comment/1925\",[]],[\"name/1926\",[180,59.732]],[\"comment/1926\",[]],[\"name/1927\",[181,59.732]],[\"comment/1927\",[]],[\"name/1928\",[183,59.205]],[\"comment/1928\",[]],[\"name/1929\",[184,59.732]],[\"comment/1929\",[]],[\"name/1930\",[185,59.732]],[\"comment/1930\",[]],[\"name/1931\",[186,59.732]],[\"comment/1931\",[]],[\"name/1932\",[187,59.732]],[\"comment/1932\",[]],[\"name/1933\",[188,59.732]],[\"comment/1933\",[]],[\"name/1934\",[28,53.498]],[\"comment/1934\",[]],[\"name/1935\",[26,53.498]],[\"comment/1935\",[]],[\"name/1936\",[27,53.498]],[\"comment/1936\",[]],[\"name/1937\",[38,47.086]],[\"comment/1937\",[]],[\"name/1938\",[39,47.086]],[\"comment/1938\",[]],[\"name/1939\",[40,47.086]],[\"comment/1939\",[]],[\"name/1940\",[41,47.086]],[\"comment/1940\",[]],[\"name/1941\",[42,47.086]],[\"comment/1941\",[]],[\"name/1942\",[43,47.086]],[\"comment/1942\",[]],[\"name/1943\",[44,47.086]],[\"comment/1943\",[]],[\"name/1944\",[45,47.086]],[\"comment/1944\",[]],[\"name/1945\",[46,47.086]],[\"comment/1945\",[]],[\"name/1946\",[47,47.086]],[\"comment/1946\",[]],[\"name/1947\",[48,47.086]],[\"comment/1947\",[]],[\"name/1948\",[49,47.086]],[\"comment/1948\",[]],[\"name/1949\",[50,47.086]],[\"comment/1949\",[]],[\"name/1950\",[51,47.086]],[\"comment/1950\",[]],[\"name/1951\",[52,47.086]],[\"comment/1951\",[]],[\"name/1952\",[53,47.086]],[\"comment/1952\",[]],[\"name/1953\",[54,47.086]],[\"comment/1953\",[]],[\"name/1954\",[55,47.086]],[\"comment/1954\",[]],[\"name/1955\",[56,47.086]],[\"comment/1955\",[]],[\"name/1956\",[57,46.785]],[\"comment/1956\",[]],[\"name/1957\",[58,46.785]],[\"comment/1957\",[]],[\"name/1958\",[59,47.086]],[\"comment/1958\",[]],[\"name/1959\",[60,43.21]],[\"comment/1959\",[]],[\"name/1960\",[61,46.638]],[\"comment/1960\",[]],[\"name/1961\",[62,46.638]],[\"comment/1961\",[]],[\"name/1962\",[63,47.086]],[\"comment/1962\",[]],[\"name/1963\",[64,46.934]],[\"comment/1963\",[]],[\"name/1964\",[65,46.934]],[\"comment/1964\",[]],[\"name/1965\",[66,47.086]],[\"comment/1965\",[]],[\"name/1966\",[67,47.086]],[\"comment/1966\",[]],[\"name/1967\",[68,47.086]],[\"comment/1967\",[]],[\"name/1968\",[69,46.934]],[\"comment/1968\",[]],[\"name/1969\",[70,46.785]],[\"comment/1969\",[]],[\"name/1970\",[71,46.785]],[\"comment/1970\",[]],[\"name/1971\",[104,59.732]],[\"comment/1971\",[]],[\"name/1972\",[700,84.86]],[\"comment/1972\",[]],[\"name/1973\",[701,84.86]],[\"comment/1973\",[]],[\"name/1974\",[702,84.86]],[\"comment/1974\",[]],[\"name/1975\",[6,54.096]],[\"comment/1975\",[]],[\"name/1976\",[703,84.86]],[\"comment/1976\",[]],[\"name/1977\",[704,84.86]],[\"comment/1977\",[]],[\"name/1978\",[705,84.86]],[\"comment/1978\",[]],[\"name/1979\",[706,84.86]],[\"comment/1979\",[]],[\"name/1980\",[707,84.86]],[\"comment/1980\",[]],[\"name/1981\",[708,84.86]],[\"comment/1981\",[]],[\"name/1982\",[439,63.653]],[\"comment/1982\",[]],[\"name/1983\",[90,67.51]],[\"comment/1983\",[]],[\"name/1984\",[709,84.86]],[\"comment/1984\",[]],[\"name/1985\",[710,84.86]],[\"comment/1985\",[]],[\"name/1986\",[711,84.86]],[\"comment/1986\",[]],[\"name/1987\",[225,60.876]],[\"comment/1987\",[]],[\"name/1988\",[224,68.762]],[\"comment/1988\",[]],[\"name/1989\",[712,84.86]],[\"comment/1989\",[]],[\"name/1990\",[713,84.86]],[\"comment/1990\",[]],[\"name/1991\",[714,84.86]],[\"comment/1991\",[]],[\"name/1992\",[715,84.86]],[\"comment/1992\",[]],[\"name/1993\",[16,49.491]],[\"comment/1993\",[]],[\"name/1994\",[716,84.86]],[\"comment/1994\",[]],[\"name/1995\",[2,46.209]],[\"comment/1995\",[]],[\"name/1996\",[717,84.86]],[\"comment/1996\",[]],[\"name/1997\",[225,60.876]],[\"comment/1997\",[]],[\"name/1998\",[255,65.397]],[\"comment/1998\",[]],[\"name/1999\",[593,79.751]],[\"comment/1999\",[]],[\"name/2000\",[594,79.751]],[\"comment/2000\",[]],[\"name/2001\",[362,73.872]],[\"comment/2001\",[]],[\"name/2002\",[110,57.339]],[\"comment/2002\",[]],[\"name/2003\",[116,56.922]],[\"comment/2003\",[]],[\"name/2004\",[597,79.751]],[\"comment/2004\",[]],[\"name/2005\",[718,84.86]],[\"comment/2005\",[]],[\"name/2006\",[60,43.21]],[\"comment/2006\",[]],[\"name/2007\",[719,84.86]],[\"comment/2007\",[]],[\"name/2008\",[249,79.751]],[\"comment/2008\",[]],[\"name/2009\",[323,60.876]],[\"comment/2009\",[]],[\"name/2010\",[720,84.86]],[\"comment/2010\",[]],[\"name/2011\",[721,84.86]],[\"comment/2011\",[]],[\"name/2012\",[305,66.398]],[\"comment/2012\",[]],[\"name/2013\",[2,46.209]],[\"comment/2013\",[]],[\"name/2014\",[722,79.751]],[\"comment/2014\",[]],[\"name/2015\",[723,79.751]],[\"comment/2015\",[]],[\"name/2016\",[724,79.751]],[\"comment/2016\",[]],[\"name/2017\",[725,79.751]],[\"comment/2017\",[]],[\"name/2018\",[12,44.421]],[\"comment/2018\",[]],[\"name/2019\",[60,43.21]],[\"comment/2019\",[]],[\"name/2020\",[305,66.398]],[\"comment/2020\",[]],[\"name/2021\",[726,79.751]],[\"comment/2021\",[]],[\"name/2022\",[727,79.751]],[\"comment/2022\",[]],[\"name/2023\",[728,79.751]],[\"comment/2023\",[]],[\"name/2024\",[729,79.751]],[\"comment/2024\",[]],[\"name/2025\",[16,49.491]],[\"comment/2025\",[]],[\"name/2026\",[8,46.934]],[\"comment/2026\",[]],[\"name/2027\",[9,44.076]],[\"comment/2027\",[]],[\"name/2028\",[730,79.751]],[\"comment/2028\",[]],[\"name/2029\",[90,67.51]],[\"comment/2029\",[]],[\"name/2030\",[336,70.194]],[\"comment/2030\",[]],[\"name/2031\",[731,79.751]],[\"comment/2031\",[]],[\"name/2032\",[732,79.751]],[\"comment/2032\",[]],[\"name/2033\",[116,56.922]],[\"comment/2033\",[]],[\"name/2034\",[19,44.657]],[\"comment/2034\",[]],[\"name/2035\",[733,79.751]],[\"comment/2035\",[]],[\"name/2036\",[465,70.194]],[\"comment/2036\",[]],[\"name/2037\",[734,79.751]],[\"comment/2037\",[]],[\"name/2038\",[124,54.096]],[\"comment/2038\",[]],[\"name/2039\",[36,52.664]],[\"comment/2039\",[]],[\"name/2040\",[35,52.664]],[\"comment/2040\",[]],[\"name/2041\",[735,79.751]],[\"comment/2041\",[]],[\"name/2042\",[32,59.732]],[\"comment/2042\",[]],[\"name/2043\",[166,57.339]],[\"comment/2043\",[]],[\"name/2044\",[736,79.751]],[\"comment/2044\",[]],[\"name/2045\",[158,56.922]],[\"comment/2045\",[]],[\"name/2046\",[737,79.751]],[\"comment/2046\",[]],[\"name/2047\",[738,79.751]],[\"comment/2047\",[]],[\"name/2048\",[739,79.751]],[\"comment/2048\",[]],[\"name/2049\",[740,79.751]],[\"comment/2049\",[]],[\"name/2050\",[123,54.408]],[\"comment/2050\",[]],[\"name/2051\",[741,79.751]],[\"comment/2051\",[]],[\"name/2052\",[38,47.086]],[\"comment/2052\",[]],[\"name/2053\",[39,47.086]],[\"comment/2053\",[]],[\"name/2054\",[40,47.086]],[\"comment/2054\",[]],[\"name/2055\",[41,47.086]],[\"comment/2055\",[]],[\"name/2056\",[42,47.086]],[\"comment/2056\",[]],[\"name/2057\",[43,47.086]],[\"comment/2057\",[]],[\"name/2058\",[44,47.086]],[\"comment/2058\",[]],[\"name/2059\",[45,47.086]],[\"comment/2059\",[]],[\"name/2060\",[46,47.086]],[\"comment/2060\",[]],[\"name/2061\",[47,47.086]],[\"comment/2061\",[]],[\"name/2062\",[48,47.086]],[\"comment/2062\",[]],[\"name/2063\",[49,47.086]],[\"comment/2063\",[]],[\"name/2064\",[50,47.086]],[\"comment/2064\",[]],[\"name/2065\",[51,47.086]],[\"comment/2065\",[]],[\"name/2066\",[52,47.086]],[\"comment/2066\",[]],[\"name/2067\",[53,47.086]],[\"comment/2067\",[]],[\"name/2068\",[54,47.086]],[\"comment/2068\",[]],[\"name/2069\",[55,47.086]],[\"comment/2069\",[]],[\"name/2070\",[56,47.086]],[\"comment/2070\",[]],[\"name/2071\",[57,46.785]],[\"comment/2071\",[]],[\"name/2072\",[58,46.785]],[\"comment/2072\",[]],[\"name/2073\",[59,47.086]],[\"comment/2073\",[]],[\"name/2074\",[60,43.21]],[\"comment/2074\",[]],[\"name/2075\",[61,46.638]],[\"comment/2075\",[]],[\"name/2076\",[62,46.638]],[\"comment/2076\",[]],[\"name/2077\",[63,47.086]],[\"comment/2077\",[]],[\"name/2078\",[64,46.934]],[\"comment/2078\",[]],[\"name/2079\",[65,46.934]],[\"comment/2079\",[]],[\"name/2080\",[66,47.086]],[\"comment/2080\",[]],[\"name/2081\",[67,47.086]],[\"comment/2081\",[]],[\"name/2082\",[68,47.086]],[\"comment/2082\",[]],[\"name/2083\",[69,46.934]],[\"comment/2083\",[]],[\"name/2084\",[70,46.785]],[\"comment/2084\",[]],[\"name/2085\",[71,46.785]],[\"comment/2085\",[]],[\"name/2086\",[742,84.86]],[\"comment/2086\",[]],[\"name/2087\",[743,84.86]],[\"comment/2087\",[]],[\"name/2088\",[323,60.876]],[\"comment/2088\",[]],[\"name/2089\",[489,73.872]],[\"comment/2089\",[]],[\"name/2090\",[2,46.209]],[\"comment/2090\",[]],[\"name/2091\",[98,60.287]],[\"comment/2091\",[]],[\"name/2092\",[99,59.732]],[\"comment/2092\",[]],[\"name/2093\",[8,46.934]],[\"comment/2093\",[]],[\"name/2094\",[9,44.076]],[\"comment/2094\",[]],[\"name/2095\",[744,76.385]],[\"comment/2095\",[]],[\"name/2096\",[56,47.086]],[\"comment/2096\",[]],[\"name/2097\",[103,56.522]],[\"comment/2097\",[]],[\"name/2098\",[745,70.194]],[\"comment/2098\",[]],[\"name/2099\",[134,60.287]],[\"comment/2099\",[]],[\"name/2100\",[19,44.657]],[\"comment/2100\",[]],[\"name/2101\",[104,59.732]],[\"comment/2101\",[]],[\"name/2102\",[105,57.339]],[\"comment/2102\",[]],[\"name/2103\",[106,59.732]],[\"comment/2103\",[]],[\"name/2104\",[11,52.935]],[\"comment/2104\",[]],[\"name/2105\",[12,44.421]],[\"comment/2105\",[]],[\"name/2106\",[107,60.287]],[\"comment/2106\",[]],[\"name/2107\",[19,44.657]],[\"comment/2107\",[]],[\"name/2108\",[108,60.287]],[\"comment/2108\",[]],[\"name/2109\",[109,60.287]],[\"comment/2109\",[]],[\"name/2110\",[110,57.339]],[\"comment/2110\",[]],[\"name/2111\",[111,60.287]],[\"comment/2111\",[]],[\"name/2112\",[112,60.287]],[\"comment/2112\",[]],[\"name/2113\",[113,57.774]],[\"comment/2113\",[]],[\"name/2114\",[114,60.287]],[\"comment/2114\",[]],[\"name/2115\",[115,60.287]],[\"comment/2115\",[]],[\"name/2116\",[116,56.922]],[\"comment/2116\",[]],[\"name/2117\",[60,43.21]],[\"comment/2117\",[]],[\"name/2118\",[117,58.705]],[\"comment/2118\",[]],[\"name/2119\",[118,60.287]],[\"comment/2119\",[]],[\"name/2120\",[119,60.287]],[\"comment/2120\",[]],[\"name/2121\",[120,59.732]],[\"comment/2121\",[]],[\"name/2122\",[121,60.287]],[\"comment/2122\",[]],[\"name/2123\",[122,54.408]],[\"comment/2123\",[]],[\"name/2124\",[123,54.408]],[\"comment/2124\",[]],[\"name/2125\",[124,54.096]],[\"comment/2125\",[]],[\"name/2126\",[125,60.287]],[\"comment/2126\",[]],[\"name/2127\",[126,60.287]],[\"comment/2127\",[]],[\"name/2128\",[127,60.287]],[\"comment/2128\",[]],[\"name/2129\",[128,60.287]],[\"comment/2129\",[]],[\"name/2130\",[129,59.732]],[\"comment/2130\",[]],[\"name/2131\",[130,60.287]],[\"comment/2131\",[]],[\"name/2132\",[131,60.287]],[\"comment/2132\",[]],[\"name/2133\",[132,59.732]],[\"comment/2133\",[]],[\"name/2134\",[133,60.287]],[\"comment/2134\",[]],[\"name/2135\",[135,60.287]],[\"comment/2135\",[]],[\"name/2136\",[136,60.287]],[\"comment/2136\",[]],[\"name/2137\",[137,59.205]],[\"comment/2137\",[]],[\"name/2138\",[138,59.732]],[\"comment/2138\",[]],[\"name/2139\",[139,59.732]],[\"comment/2139\",[]],[\"name/2140\",[140,59.732]],[\"comment/2140\",[]],[\"name/2141\",[141,59.732]],[\"comment/2141\",[]],[\"name/2142\",[142,60.287]],[\"comment/2142\",[]],[\"name/2143\",[143,60.287]],[\"comment/2143\",[]],[\"name/2144\",[144,60.287]],[\"comment/2144\",[]],[\"name/2145\",[145,60.287]],[\"comment/2145\",[]],[\"name/2146\",[146,60.287]],[\"comment/2146\",[]],[\"name/2147\",[147,60.287]],[\"comment/2147\",[]],[\"name/2148\",[148,60.287]],[\"comment/2148\",[]],[\"name/2149\",[149,60.287]],[\"comment/2149\",[]],[\"name/2150\",[150,58.228]],[\"comment/2150\",[]],[\"name/2151\",[151,60.287]],[\"comment/2151\",[]],[\"name/2152\",[152,60.287]],[\"comment/2152\",[]],[\"name/2153\",[12,44.421]],[\"comment/2153\",[]],[\"name/2154\",[153,56.922]],[\"comment/2154\",[]],[\"name/2155\",[154,56.922]],[\"comment/2155\",[]],[\"name/2156\",[155,60.287]],[\"comment/2156\",[]],[\"name/2157\",[156,60.287]],[\"comment/2157\",[]],[\"name/2158\",[157,60.287]],[\"comment/2158\",[]],[\"name/2159\",[158,56.922]],[\"comment/2159\",[]],[\"name/2160\",[159,59.732]],[\"comment/2160\",[]],[\"name/2161\",[160,59.732]],[\"comment/2161\",[]],[\"name/2162\",[161,60.287]],[\"comment/2162\",[]],[\"name/2163\",[162,60.287]],[\"comment/2163\",[]],[\"name/2164\",[163,60.287]],[\"comment/2164\",[]],[\"name/2165\",[164,60.287]],[\"comment/2165\",[]],[\"name/2166\",[165,60.287]],[\"comment/2166\",[]],[\"name/2167\",[166,57.339]],[\"comment/2167\",[]],[\"name/2168\",[167,59.732]],[\"comment/2168\",[]],[\"name/2169\",[168,59.732]],[\"comment/2169\",[]],[\"name/2170\",[20,50.513]],[\"comment/2170\",[]],[\"name/2171\",[16,49.491]],[\"comment/2171\",[]],[\"name/2172\",[35,52.664]],[\"comment/2172\",[]],[\"name/2173\",[36,52.664]],[\"comment/2173\",[]],[\"name/2174\",[169,53.793]],[\"comment/2174\",[]],[\"name/2175\",[170,59.205]],[\"comment/2175\",[]],[\"name/2176\",[171,59.732]],[\"comment/2176\",[]],[\"name/2177\",[172,59.732]],[\"comment/2177\",[]],[\"name/2178\",[173,59.732]],[\"comment/2178\",[]],[\"name/2179\",[174,59.732]],[\"comment/2179\",[]],[\"name/2180\",[175,59.732]],[\"comment/2180\",[]],[\"name/2181\",[176,59.732]],[\"comment/2181\",[]],[\"name/2182\",[177,59.732]],[\"comment/2182\",[]],[\"name/2183\",[178,59.732]],[\"comment/2183\",[]],[\"name/2184\",[102,59.732]],[\"comment/2184\",[]],[\"name/2185\",[179,58.228]],[\"comment/2185\",[]],[\"name/2186\",[180,59.732]],[\"comment/2186\",[]],[\"name/2187\",[181,59.732]],[\"comment/2187\",[]],[\"name/2188\",[182,56.922]],[\"comment/2188\",[]],[\"name/2189\",[183,59.205]],[\"comment/2189\",[]],[\"name/2190\",[184,59.732]],[\"comment/2190\",[]],[\"name/2191\",[185,59.732]],[\"comment/2191\",[]],[\"name/2192\",[186,59.732]],[\"comment/2192\",[]],[\"name/2193\",[187,59.732]],[\"comment/2193\",[]],[\"name/2194\",[188,59.732]],[\"comment/2194\",[]],[\"name/2195\",[28,53.498]],[\"comment/2195\",[]],[\"name/2196\",[26,53.498]],[\"comment/2196\",[]],[\"name/2197\",[27,53.498]],[\"comment/2197\",[]],[\"name/2198\",[38,47.086]],[\"comment/2198\",[]],[\"name/2199\",[39,47.086]],[\"comment/2199\",[]],[\"name/2200\",[40,47.086]],[\"comment/2200\",[]],[\"name/2201\",[41,47.086]],[\"comment/2201\",[]],[\"name/2202\",[42,47.086]],[\"comment/2202\",[]],[\"name/2203\",[43,47.086]],[\"comment/2203\",[]],[\"name/2204\",[44,47.086]],[\"comment/2204\",[]],[\"name/2205\",[45,47.086]],[\"comment/2205\",[]],[\"name/2206\",[46,47.086]],[\"comment/2206\",[]],[\"name/2207\",[47,47.086]],[\"comment/2207\",[]],[\"name/2208\",[48,47.086]],[\"comment/2208\",[]],[\"name/2209\",[49,47.086]],[\"comment/2209\",[]],[\"name/2210\",[50,47.086]],[\"comment/2210\",[]],[\"name/2211\",[51,47.086]],[\"comment/2211\",[]],[\"name/2212\",[52,47.086]],[\"comment/2212\",[]],[\"name/2213\",[53,47.086]],[\"comment/2213\",[]],[\"name/2214\",[54,47.086]],[\"comment/2214\",[]],[\"name/2215\",[55,47.086]],[\"comment/2215\",[]],[\"name/2216\",[57,46.785]],[\"comment/2216\",[]],[\"name/2217\",[58,46.785]],[\"comment/2217\",[]],[\"name/2218\",[59,47.086]],[\"comment/2218\",[]],[\"name/2219\",[60,43.21]],[\"comment/2219\",[]],[\"name/2220\",[61,46.638]],[\"comment/2220\",[]],[\"name/2221\",[62,46.638]],[\"comment/2221\",[]],[\"name/2222\",[63,47.086]],[\"comment/2222\",[]],[\"name/2223\",[64,46.934]],[\"comment/2223\",[]],[\"name/2224\",[65,46.934]],[\"comment/2224\",[]],[\"name/2225\",[66,47.086]],[\"comment/2225\",[]],[\"name/2226\",[67,47.086]],[\"comment/2226\",[]],[\"name/2227\",[68,47.086]],[\"comment/2227\",[]],[\"name/2228\",[69,46.934]],[\"comment/2228\",[]],[\"name/2229\",[70,46.785]],[\"comment/2229\",[]],[\"name/2230\",[71,46.785]],[\"comment/2230\",[]],[\"name/2231\",[746,84.86]],[\"comment/2231\",[]],[\"name/2232\",[428,79.751]],[\"comment/2232\",[]],[\"name/2233\",[681,64.487]],[\"comment/2233\",[]],[\"name/2234\",[747,76.385]],[\"comment/2234\",[]],[\"name/2235\",[748,71.865]],[\"comment/2235\",[]],[\"name/2236\",[749,71.865]],[\"comment/2236\",[]],[\"name/2237\",[117,58.705]],[\"comment/2237\",[]],[\"name/2238\",[113,57.774]],[\"comment/2238\",[]],[\"name/2239\",[750,76.385]],[\"comment/2239\",[]],[\"name/2240\",[366,66.398]],[\"comment/2240\",[]],[\"name/2241\",[105,57.339]],[\"comment/2241\",[]],[\"name/2242\",[412,63.653]],[\"comment/2242\",[]],[\"name/2243\",[323,60.876]],[\"comment/2243\",[]],[\"name/2244\",[411,64.487]],[\"comment/2244\",[]],[\"name/2245\",[10,57.774]],[\"comment/2245\",[]],[\"name/2246\",[751,70.194]],[\"comment/2246\",[]],[\"name/2247\",[752,70.194]],[\"comment/2247\",[]],[\"name/2248\",[496,73.872]],[\"comment/2248\",[]],[\"name/2249\",[2,46.209]],[\"comment/2249\",[]],[\"name/2250\",[753,79.751]],[\"comment/2250\",[]],[\"name/2251\",[116,56.922]],[\"comment/2251\",[]],[\"name/2252\",[1,57.339]],[\"comment/2252\",[]],[\"name/2253\",[754,79.751]],[\"comment/2253\",[]],[\"name/2254\",[755,79.751]],[\"comment/2254\",[]],[\"name/2255\",[756,79.751]],[\"comment/2255\",[]],[\"name/2256\",[3,58.228]],[\"comment/2256\",[]],[\"name/2257\",[182,56.922]],[\"comment/2257\",[]],[\"name/2258\",[98,60.287]],[\"comment/2258\",[]],[\"name/2259\",[99,59.732]],[\"comment/2259\",[]],[\"name/2260\",[8,46.934]],[\"comment/2260\",[]],[\"name/2261\",[9,44.076]],[\"comment/2261\",[]],[\"name/2262\",[693,70.194]],[\"comment/2262\",[]],[\"name/2263\",[757,79.751]],[\"comment/2263\",[]],[\"name/2264\",[19,44.657]],[\"comment/2264\",[]],[\"name/2265\",[758,84.86]],[\"comment/2265\",[]],[\"name/2266\",[759,76.385]],[\"comment/2266\",[]],[\"name/2267\",[760,76.385]],[\"comment/2267\",[]],[\"name/2268\",[166,57.339]],[\"comment/2268\",[]],[\"name/2269\",[149,60.287]],[\"comment/2269\",[]],[\"name/2270\",[685,70.194]],[\"comment/2270\",[]],[\"name/2271\",[761,79.751]],[\"comment/2271\",[]],[\"name/2272\",[762,79.751]],[\"comment/2272\",[]],[\"name/2273\",[763,79.751]],[\"comment/2273\",[]],[\"name/2274\",[764,79.751]],[\"comment/2274\",[]],[\"name/2275\",[56,47.086]],[\"comment/2275\",[]],[\"name/2276\",[130,60.287]],[\"comment/2276\",[]],[\"name/2277\",[120,59.732]],[\"comment/2277\",[]],[\"name/2278\",[765,79.751]],[\"comment/2278\",[]],[\"name/2279\",[144,60.287]],[\"comment/2279\",[]],[\"name/2280\",[698,70.194]],[\"comment/2280\",[]],[\"name/2281\",[691,70.194]],[\"comment/2281\",[]],[\"name/2282\",[137,59.205]],[\"comment/2282\",[]],[\"name/2283\",[697,67.51]],[\"comment/2283\",[]],[\"name/2284\",[124,54.096]],[\"comment/2284\",[]],[\"name/2285\",[766,76.385]],[\"comment/2285\",[]],[\"name/2286\",[767,79.751]],[\"comment/2286\",[]],[\"name/2287\",[162,60.287]],[\"comment/2287\",[]],[\"name/2288\",[163,60.287]],[\"comment/2288\",[]],[\"name/2289\",[131,60.287]],[\"comment/2289\",[]],[\"name/2290\",[152,60.287]],[\"comment/2290\",[]],[\"name/2291\",[12,44.421]],[\"comment/2291\",[]],[\"name/2292\",[153,56.922]],[\"comment/2292\",[]],[\"name/2293\",[154,56.922]],[\"comment/2293\",[]],[\"name/2294\",[40,47.086]],[\"comment/2294\",[]],[\"name/2295\",[768,79.751]],[\"comment/2295\",[]],[\"name/2296\",[769,79.751]],[\"comment/2296\",[]],[\"name/2297\",[770,79.751]],[\"comment/2297\",[]],[\"name/2298\",[771,79.751]],[\"comment/2298\",[]],[\"name/2299\",[772,79.751]],[\"comment/2299\",[]],[\"name/2300\",[773,79.751]],[\"comment/2300\",[]],[\"name/2301\",[774,79.751]],[\"comment/2301\",[]],[\"name/2302\",[775,79.751]],[\"comment/2302\",[]],[\"name/2303\",[776,79.751]],[\"comment/2303\",[]],[\"name/2304\",[777,79.751]],[\"comment/2304\",[]],[\"name/2305\",[778,79.751]],[\"comment/2305\",[]],[\"name/2306\",[103,56.522]],[\"comment/2306\",[]],[\"name/2307\",[779,79.751]],[\"comment/2307\",[]],[\"name/2308\",[780,79.751]],[\"comment/2308\",[]],[\"name/2309\",[781,79.751]],[\"comment/2309\",[]],[\"name/2310\",[782,79.751]],[\"comment/2310\",[]],[\"name/2311\",[783,79.751]],[\"comment/2311\",[]],[\"name/2312\",[784,79.751]],[\"comment/2312\",[]],[\"name/2313\",[745,70.194]],[\"comment/2313\",[]],[\"name/2314\",[785,79.751]],[\"comment/2314\",[]],[\"name/2315\",[786,73.872]],[\"comment/2315\",[]],[\"name/2316\",[787,79.751]],[\"comment/2316\",[]],[\"name/2317\",[699,70.194]],[\"comment/2317\",[]],[\"name/2318\",[681,64.487]],[\"comment/2318\",[]],[\"name/2319\",[439,63.653]],[\"comment/2319\",[]],[\"name/2320\",[682,70.194]],[\"comment/2320\",[]],[\"name/2321\",[683,70.194]],[\"comment/2321\",[]],[\"name/2322\",[684,70.194]],[\"comment/2322\",[]],[\"name/2323\",[686,70.194]],[\"comment/2323\",[]],[\"name/2324\",[687,70.194]],[\"comment/2324\",[]],[\"name/2325\",[688,70.194]],[\"comment/2325\",[]],[\"name/2326\",[212,68.762]],[\"comment/2326\",[]],[\"name/2327\",[689,70.194]],[\"comment/2327\",[]],[\"name/2328\",[160,59.732]],[\"comment/2328\",[]],[\"name/2329\",[690,70.194]],[\"comment/2329\",[]],[\"name/2330\",[692,70.194]],[\"comment/2330\",[]],[\"name/2331\",[694,70.194]],[\"comment/2331\",[]],[\"name/2332\",[161,60.287]],[\"comment/2332\",[]],[\"name/2333\",[12,44.421]],[\"comment/2333\",[]],[\"name/2334\",[695,68.762]],[\"comment/2334\",[]],[\"name/2335\",[696,68.762]],[\"comment/2335\",[]],[\"name/2336\",[182,56.922]],[\"comment/2336\",[]],[\"name/2337\",[104,59.732]],[\"comment/2337\",[]],[\"name/2338\",[105,57.339]],[\"comment/2338\",[]],[\"name/2339\",[106,59.732]],[\"comment/2339\",[]],[\"name/2340\",[11,52.935]],[\"comment/2340\",[]],[\"name/2341\",[12,44.421]],[\"comment/2341\",[]],[\"name/2342\",[107,60.287]],[\"comment/2342\",[]],[\"name/2343\",[19,44.657]],[\"comment/2343\",[]],[\"name/2344\",[108,60.287]],[\"comment/2344\",[]],[\"name/2345\",[109,60.287]],[\"comment/2345\",[]],[\"name/2346\",[110,57.339]],[\"comment/2346\",[]],[\"name/2347\",[111,60.287]],[\"comment/2347\",[]],[\"name/2348\",[112,60.287]],[\"comment/2348\",[]],[\"name/2349\",[113,57.774]],[\"comment/2349\",[]],[\"name/2350\",[114,60.287]],[\"comment/2350\",[]],[\"name/2351\",[115,60.287]],[\"comment/2351\",[]],[\"name/2352\",[116,56.922]],[\"comment/2352\",[]],[\"name/2353\",[60,43.21]],[\"comment/2353\",[]],[\"name/2354\",[117,58.705]],[\"comment/2354\",[]],[\"name/2355\",[118,60.287]],[\"comment/2355\",[]],[\"name/2356\",[119,60.287]],[\"comment/2356\",[]],[\"name/2357\",[121,60.287]],[\"comment/2357\",[]],[\"name/2358\",[122,54.408]],[\"comment/2358\",[]],[\"name/2359\",[123,54.408]],[\"comment/2359\",[]],[\"name/2360\",[125,60.287]],[\"comment/2360\",[]],[\"name/2361\",[126,60.287]],[\"comment/2361\",[]],[\"name/2362\",[127,60.287]],[\"comment/2362\",[]],[\"name/2363\",[128,60.287]],[\"comment/2363\",[]],[\"name/2364\",[129,59.732]],[\"comment/2364\",[]],[\"name/2365\",[132,59.732]],[\"comment/2365\",[]],[\"name/2366\",[133,60.287]],[\"comment/2366\",[]],[\"name/2367\",[134,60.287]],[\"comment/2367\",[]],[\"name/2368\",[135,60.287]],[\"comment/2368\",[]],[\"name/2369\",[136,60.287]],[\"comment/2369\",[]],[\"name/2370\",[138,59.732]],[\"comment/2370\",[]],[\"name/2371\",[139,59.732]],[\"comment/2371\",[]],[\"name/2372\",[140,59.732]],[\"comment/2372\",[]],[\"name/2373\",[141,59.732]],[\"comment/2373\",[]],[\"name/2374\",[142,60.287]],[\"comment/2374\",[]],[\"name/2375\",[143,60.287]],[\"comment/2375\",[]],[\"name/2376\",[145,60.287]],[\"comment/2376\",[]],[\"name/2377\",[146,60.287]],[\"comment/2377\",[]],[\"name/2378\",[147,60.287]],[\"comment/2378\",[]],[\"name/2379\",[148,60.287]],[\"comment/2379\",[]],[\"name/2380\",[150,58.228]],[\"comment/2380\",[]],[\"name/2381\",[151,60.287]],[\"comment/2381\",[]],[\"name/2382\",[155,60.287]],[\"comment/2382\",[]],[\"name/2383\",[156,60.287]],[\"comment/2383\",[]],[\"name/2384\",[157,60.287]],[\"comment/2384\",[]],[\"name/2385\",[158,56.922]],[\"comment/2385\",[]],[\"name/2386\",[159,59.732]],[\"comment/2386\",[]],[\"name/2387\",[164,60.287]],[\"comment/2387\",[]],[\"name/2388\",[165,60.287]],[\"comment/2388\",[]],[\"name/2389\",[167,59.732]],[\"comment/2389\",[]],[\"name/2390\",[168,59.732]],[\"comment/2390\",[]],[\"name/2391\",[20,50.513]],[\"comment/2391\",[]],[\"name/2392\",[16,49.491]],[\"comment/2392\",[]],[\"name/2393\",[35,52.664]],[\"comment/2393\",[]],[\"name/2394\",[36,52.664]],[\"comment/2394\",[]],[\"name/2395\",[169,53.793]],[\"comment/2395\",[]],[\"name/2396\",[170,59.205]],[\"comment/2396\",[]],[\"name/2397\",[171,59.732]],[\"comment/2397\",[]],[\"name/2398\",[172,59.732]],[\"comment/2398\",[]],[\"name/2399\",[173,59.732]],[\"comment/2399\",[]],[\"name/2400\",[174,59.732]],[\"comment/2400\",[]],[\"name/2401\",[175,59.732]],[\"comment/2401\",[]],[\"name/2402\",[176,59.732]],[\"comment/2402\",[]],[\"name/2403\",[177,59.732]],[\"comment/2403\",[]],[\"name/2404\",[178,59.732]],[\"comment/2404\",[]],[\"name/2405\",[102,59.732]],[\"comment/2405\",[]],[\"name/2406\",[179,58.228]],[\"comment/2406\",[]],[\"name/2407\",[180,59.732]],[\"comment/2407\",[]],[\"name/2408\",[181,59.732]],[\"comment/2408\",[]],[\"name/2409\",[183,59.205]],[\"comment/2409\",[]],[\"name/2410\",[184,59.732]],[\"comment/2410\",[]],[\"name/2411\",[185,59.732]],[\"comment/2411\",[]],[\"name/2412\",[186,59.732]],[\"comment/2412\",[]],[\"name/2413\",[187,59.732]],[\"comment/2413\",[]],[\"name/2414\",[188,59.732]],[\"comment/2414\",[]],[\"name/2415\",[28,53.498]],[\"comment/2415\",[]],[\"name/2416\",[26,53.498]],[\"comment/2416\",[]],[\"name/2417\",[27,53.498]],[\"comment/2417\",[]],[\"name/2418\",[38,47.086]],[\"comment/2418\",[]],[\"name/2419\",[39,47.086]],[\"comment/2419\",[]],[\"name/2420\",[41,47.086]],[\"comment/2420\",[]],[\"name/2421\",[42,47.086]],[\"comment/2421\",[]],[\"name/2422\",[43,47.086]],[\"comment/2422\",[]],[\"name/2423\",[44,47.086]],[\"comment/2423\",[]],[\"name/2424\",[45,47.086]],[\"comment/2424\",[]],[\"name/2425\",[46,47.086]],[\"comment/2425\",[]],[\"name/2426\",[47,47.086]],[\"comment/2426\",[]],[\"name/2427\",[48,47.086]],[\"comment/2427\",[]],[\"name/2428\",[49,47.086]],[\"comment/2428\",[]],[\"name/2429\",[50,47.086]],[\"comment/2429\",[]],[\"name/2430\",[51,47.086]],[\"comment/2430\",[]],[\"name/2431\",[52,47.086]],[\"comment/2431\",[]],[\"name/2432\",[53,47.086]],[\"comment/2432\",[]],[\"name/2433\",[54,47.086]],[\"comment/2433\",[]],[\"name/2434\",[55,47.086]],[\"comment/2434\",[]],[\"name/2435\",[57,46.785]],[\"comment/2435\",[]],[\"name/2436\",[58,46.785]],[\"comment/2436\",[]],[\"name/2437\",[59,47.086]],[\"comment/2437\",[]],[\"name/2438\",[60,43.21]],[\"comment/2438\",[]],[\"name/2439\",[61,46.638]],[\"comment/2439\",[]],[\"name/2440\",[62,46.638]],[\"comment/2440\",[]],[\"name/2441\",[63,47.086]],[\"comment/2441\",[]],[\"name/2442\",[64,46.934]],[\"comment/2442\",[]],[\"name/2443\",[65,46.934]],[\"comment/2443\",[]],[\"name/2444\",[66,47.086]],[\"comment/2444\",[]],[\"name/2445\",[67,47.086]],[\"comment/2445\",[]],[\"name/2446\",[68,47.086]],[\"comment/2446\",[]],[\"name/2447\",[69,46.934]],[\"comment/2447\",[]],[\"name/2448\",[70,46.785]],[\"comment/2448\",[]],[\"name/2449\",[71,46.785]],[\"comment/2449\",[]],[\"name/2450\",[497,73.872]],[\"comment/2450\",[]],[\"name/2451\",[1,57.339]],[\"comment/2451\",[]],[\"name/2452\",[2,46.209]],[\"comment/2452\",[]],[\"name/2453\",[3,58.228]],[\"comment/2453\",[]],[\"name/2454\",[6,54.096]],[\"comment/2454\",[]],[\"name/2455\",[7,59.732]],[\"comment/2455\",[]],[\"name/2456\",[8,46.934]],[\"comment/2456\",[]],[\"name/2457\",[9,44.076]],[\"comment/2457\",[]],[\"name/2458\",[11,52.935]],[\"comment/2458\",[]],[\"name/2459\",[12,44.421]],[\"comment/2459\",[]],[\"name/2460\",[788,84.86]],[\"comment/2460\",[]],[\"name/2461\",[103,56.522]],[\"comment/2461\",[]],[\"name/2462\",[789,84.86]],[\"comment/2462\",[]],[\"name/2463\",[20,50.513]],[\"comment/2463\",[]],[\"name/2464\",[16,49.491]],[\"comment/2464\",[]],[\"name/2465\",[790,84.86]],[\"comment/2465\",[]],[\"name/2466\",[19,44.657]],[\"comment/2466\",[]],[\"name/2467\",[21,60.876]],[\"comment/2467\",[]],[\"name/2468\",[22,60.876]],[\"comment/2468\",[]],[\"name/2469\",[17,60.876]],[\"comment/2469\",[]],[\"name/2470\",[23,60.876]],[\"comment/2470\",[]],[\"name/2471\",[24,60.876]],[\"comment/2471\",[]],[\"name/2472\",[25,60.876]],[\"comment/2472\",[]],[\"name/2473\",[26,53.498]],[\"comment/2473\",[]],[\"name/2474\",[27,53.498]],[\"comment/2474\",[]],[\"name/2475\",[28,53.498]],[\"comment/2475\",[]],[\"name/2476\",[29,56.137]],[\"comment/2476\",[]],[\"name/2477\",[30,55.767]],[\"comment/2477\",[]],[\"name/2478\",[31,60.876]],[\"comment/2478\",[]],[\"name/2479\",[32,59.732]],[\"comment/2479\",[]],[\"name/2480\",[33,60.876]],[\"comment/2480\",[]],[\"name/2481\",[34,60.876]],[\"comment/2481\",[]],[\"name/2482\",[35,52.664]],[\"comment/2482\",[]],[\"name/2483\",[36,52.664]],[\"comment/2483\",[]],[\"name/2484\",[37,60.876]],[\"comment/2484\",[]],[\"name/2485\",[38,47.086]],[\"comment/2485\",[]],[\"name/2486\",[39,47.086]],[\"comment/2486\",[]],[\"name/2487\",[40,47.086]],[\"comment/2487\",[]],[\"name/2488\",[41,47.086]],[\"comment/2488\",[]],[\"name/2489\",[42,47.086]],[\"comment/2489\",[]],[\"name/2490\",[43,47.086]],[\"comment/2490\",[]],[\"name/2491\",[44,47.086]],[\"comment/2491\",[]],[\"name/2492\",[45,47.086]],[\"comment/2492\",[]],[\"name/2493\",[46,47.086]],[\"comment/2493\",[]],[\"name/2494\",[47,47.086]],[\"comment/2494\",[]],[\"name/2495\",[48,47.086]],[\"comment/2495\",[]],[\"name/2496\",[49,47.086]],[\"comment/2496\",[]],[\"name/2497\",[50,47.086]],[\"comment/2497\",[]],[\"name/2498\",[51,47.086]],[\"comment/2498\",[]],[\"name/2499\",[52,47.086]],[\"comment/2499\",[]],[\"name/2500\",[53,47.086]],[\"comment/2500\",[]],[\"name/2501\",[54,47.086]],[\"comment/2501\",[]],[\"name/2502\",[55,47.086]],[\"comment/2502\",[]],[\"name/2503\",[56,47.086]],[\"comment/2503\",[]],[\"name/2504\",[57,46.785]],[\"comment/2504\",[]],[\"name/2505\",[58,46.785]],[\"comment/2505\",[]],[\"name/2506\",[59,47.086]],[\"comment/2506\",[]],[\"name/2507\",[60,43.21]],[\"comment/2507\",[]],[\"name/2508\",[61,46.638]],[\"comment/2508\",[]],[\"name/2509\",[62,46.638]],[\"comment/2509\",[]],[\"name/2510\",[63,47.086]],[\"comment/2510\",[]],[\"name/2511\",[64,46.934]],[\"comment/2511\",[]],[\"name/2512\",[65,46.934]],[\"comment/2512\",[]],[\"name/2513\",[66,47.086]],[\"comment/2513\",[]],[\"name/2514\",[67,47.086]],[\"comment/2514\",[]],[\"name/2515\",[68,47.086]],[\"comment/2515\",[]],[\"name/2516\",[69,46.934]],[\"comment/2516\",[]],[\"name/2517\",[70,46.785]],[\"comment/2517\",[]],[\"name/2518\",[71,46.785]],[\"comment/2518\",[]],[\"name/2519\",[521,76.385]],[\"comment/2519\",[]],[\"name/2520\",[2,46.209]],[\"comment/2520\",[]],[\"name/2521\",[98,60.287]],[\"comment/2521\",[]],[\"name/2522\",[99,59.732]],[\"comment/2522\",[]],[\"name/2523\",[8,46.934]],[\"comment/2523\",[]],[\"name/2524\",[9,44.076]],[\"comment/2524\",[]],[\"name/2525\",[791,79.751]],[\"comment/2525\",[]],[\"name/2526\",[792,79.751]],[\"comment/2526\",[]],[\"name/2527\",[166,57.339]],[\"comment/2527\",[]],[\"name/2528\",[793,79.751]],[\"comment/2528\",[]],[\"name/2529\",[144,60.287]],[\"comment/2529\",[]],[\"name/2530\",[693,70.194]],[\"comment/2530\",[]],[\"name/2531\",[794,79.751]],[\"comment/2531\",[]],[\"name/2532\",[124,54.096]],[\"comment/2532\",[]],[\"name/2533\",[795,79.751]],[\"comment/2533\",[]],[\"name/2534\",[152,60.287]],[\"comment/2534\",[]],[\"name/2535\",[12,44.421]],[\"comment/2535\",[]],[\"name/2536\",[153,56.922]],[\"comment/2536\",[]],[\"name/2537\",[154,56.922]],[\"comment/2537\",[]],[\"name/2538\",[131,60.287]],[\"comment/2538\",[]],[\"name/2539\",[103,56.522]],[\"comment/2539\",[]],[\"name/2540\",[691,70.194]],[\"comment/2540\",[]],[\"name/2541\",[796,79.751]],[\"comment/2541\",[]],[\"name/2542\",[161,60.287]],[\"comment/2542\",[]],[\"name/2543\",[12,44.421]],[\"comment/2543\",[]],[\"name/2544\",[695,68.762]],[\"comment/2544\",[]],[\"name/2545\",[696,68.762]],[\"comment/2545\",[]],[\"name/2546\",[786,73.872]],[\"comment/2546\",[]],[\"name/2547\",[745,70.194]],[\"comment/2547\",[]],[\"name/2548\",[797,79.751]],[\"comment/2548\",[]],[\"name/2549\",[798,79.751]],[\"comment/2549\",[]],[\"name/2550\",[19,44.657]],[\"comment/2550\",[]],[\"name/2551\",[681,64.487]],[\"comment/2551\",[]],[\"name/2552\",[439,63.653]],[\"comment/2552\",[]],[\"name/2553\",[682,70.194]],[\"comment/2553\",[]],[\"name/2554\",[683,70.194]],[\"comment/2554\",[]],[\"name/2555\",[684,70.194]],[\"comment/2555\",[]],[\"name/2556\",[685,70.194]],[\"comment/2556\",[]],[\"name/2557\",[686,70.194]],[\"comment/2557\",[]],[\"name/2558\",[687,70.194]],[\"comment/2558\",[]],[\"name/2559\",[688,70.194]],[\"comment/2559\",[]],[\"name/2560\",[212,68.762]],[\"comment/2560\",[]],[\"name/2561\",[689,70.194]],[\"comment/2561\",[]],[\"name/2562\",[160,59.732]],[\"comment/2562\",[]],[\"name/2563\",[690,70.194]],[\"comment/2563\",[]],[\"name/2564\",[692,70.194]],[\"comment/2564\",[]],[\"name/2565\",[694,70.194]],[\"comment/2565\",[]],[\"name/2566\",[137,59.205]],[\"comment/2566\",[]],[\"name/2567\",[697,67.51]],[\"comment/2567\",[]],[\"name/2568\",[698,70.194]],[\"comment/2568\",[]],[\"name/2569\",[182,56.922]],[\"comment/2569\",[]],[\"name/2570\",[699,70.194]],[\"comment/2570\",[]],[\"name/2571\",[104,59.732]],[\"comment/2571\",[]],[\"name/2572\",[105,57.339]],[\"comment/2572\",[]],[\"name/2573\",[106,59.732]],[\"comment/2573\",[]],[\"name/2574\",[11,52.935]],[\"comment/2574\",[]],[\"name/2575\",[12,44.421]],[\"comment/2575\",[]],[\"name/2576\",[107,60.287]],[\"comment/2576\",[]],[\"name/2577\",[19,44.657]],[\"comment/2577\",[]],[\"name/2578\",[108,60.287]],[\"comment/2578\",[]],[\"name/2579\",[109,60.287]],[\"comment/2579\",[]],[\"name/2580\",[110,57.339]],[\"comment/2580\",[]],[\"name/2581\",[111,60.287]],[\"comment/2581\",[]],[\"name/2582\",[112,60.287]],[\"comment/2582\",[]],[\"name/2583\",[113,57.774]],[\"comment/2583\",[]],[\"name/2584\",[114,60.287]],[\"comment/2584\",[]],[\"name/2585\",[115,60.287]],[\"comment/2585\",[]],[\"name/2586\",[116,56.922]],[\"comment/2586\",[]],[\"name/2587\",[60,43.21]],[\"comment/2587\",[]],[\"name/2588\",[117,58.705]],[\"comment/2588\",[]],[\"name/2589\",[118,60.287]],[\"comment/2589\",[]],[\"name/2590\",[119,60.287]],[\"comment/2590\",[]],[\"name/2591\",[120,59.732]],[\"comment/2591\",[]],[\"name/2592\",[121,60.287]],[\"comment/2592\",[]],[\"name/2593\",[122,54.408]],[\"comment/2593\",[]],[\"name/2594\",[123,54.408]],[\"comment/2594\",[]],[\"name/2595\",[125,60.287]],[\"comment/2595\",[]],[\"name/2596\",[126,60.287]],[\"comment/2596\",[]],[\"name/2597\",[127,60.287]],[\"comment/2597\",[]],[\"name/2598\",[128,60.287]],[\"comment/2598\",[]],[\"name/2599\",[129,59.732]],[\"comment/2599\",[]],[\"name/2600\",[130,60.287]],[\"comment/2600\",[]],[\"name/2601\",[132,59.732]],[\"comment/2601\",[]],[\"name/2602\",[133,60.287]],[\"comment/2602\",[]],[\"name/2603\",[134,60.287]],[\"comment/2603\",[]],[\"name/2604\",[135,60.287]],[\"comment/2604\",[]],[\"name/2605\",[136,60.287]],[\"comment/2605\",[]],[\"name/2606\",[138,59.732]],[\"comment/2606\",[]],[\"name/2607\",[139,59.732]],[\"comment/2607\",[]],[\"name/2608\",[140,59.732]],[\"comment/2608\",[]],[\"name/2609\",[141,59.732]],[\"comment/2609\",[]],[\"name/2610\",[142,60.287]],[\"comment/2610\",[]],[\"name/2611\",[143,60.287]],[\"comment/2611\",[]],[\"name/2612\",[145,60.287]],[\"comment/2612\",[]],[\"name/2613\",[146,60.287]],[\"comment/2613\",[]],[\"name/2614\",[147,60.287]],[\"comment/2614\",[]],[\"name/2615\",[148,60.287]],[\"comment/2615\",[]],[\"name/2616\",[149,60.287]],[\"comment/2616\",[]],[\"name/2617\",[150,58.228]],[\"comment/2617\",[]],[\"name/2618\",[151,60.287]],[\"comment/2618\",[]],[\"name/2619\",[155,60.287]],[\"comment/2619\",[]],[\"name/2620\",[156,60.287]],[\"comment/2620\",[]],[\"name/2621\",[157,60.287]],[\"comment/2621\",[]],[\"name/2622\",[158,56.922]],[\"comment/2622\",[]],[\"name/2623\",[159,59.732]],[\"comment/2623\",[]],[\"name/2624\",[162,60.287]],[\"comment/2624\",[]],[\"name/2625\",[163,60.287]],[\"comment/2625\",[]],[\"name/2626\",[164,60.287]],[\"comment/2626\",[]],[\"name/2627\",[165,60.287]],[\"comment/2627\",[]],[\"name/2628\",[167,59.732]],[\"comment/2628\",[]],[\"name/2629\",[168,59.732]],[\"comment/2629\",[]],[\"name/2630\",[20,50.513]],[\"comment/2630\",[]],[\"name/2631\",[16,49.491]],[\"comment/2631\",[]],[\"name/2632\",[35,52.664]],[\"comment/2632\",[]],[\"name/2633\",[36,52.664]],[\"comment/2633\",[]],[\"name/2634\",[169,53.793]],[\"comment/2634\",[]],[\"name/2635\",[170,59.205]],[\"comment/2635\",[]],[\"name/2636\",[171,59.732]],[\"comment/2636\",[]],[\"name/2637\",[172,59.732]],[\"comment/2637\",[]],[\"name/2638\",[173,59.732]],[\"comment/2638\",[]],[\"name/2639\",[174,59.732]],[\"comment/2639\",[]],[\"name/2640\",[175,59.732]],[\"comment/2640\",[]],[\"name/2641\",[176,59.732]],[\"comment/2641\",[]],[\"name/2642\",[177,59.732]],[\"comment/2642\",[]],[\"name/2643\",[178,59.732]],[\"comment/2643\",[]],[\"name/2644\",[102,59.732]],[\"comment/2644\",[]],[\"name/2645\",[179,58.228]],[\"comment/2645\",[]],[\"name/2646\",[180,59.732]],[\"comment/2646\",[]],[\"name/2647\",[181,59.732]],[\"comment/2647\",[]],[\"name/2648\",[183,59.205]],[\"comment/2648\",[]],[\"name/2649\",[184,59.732]],[\"comment/2649\",[]],[\"name/2650\",[185,59.732]],[\"comment/2650\",[]],[\"name/2651\",[186,59.732]],[\"comment/2651\",[]],[\"name/2652\",[187,59.732]],[\"comment/2652\",[]],[\"name/2653\",[188,59.732]],[\"comment/2653\",[]],[\"name/2654\",[28,53.498]],[\"comment/2654\",[]],[\"name/2655\",[26,53.498]],[\"comment/2655\",[]],[\"name/2656\",[27,53.498]],[\"comment/2656\",[]],[\"name/2657\",[38,47.086]],[\"comment/2657\",[]],[\"name/2658\",[39,47.086]],[\"comment/2658\",[]],[\"name/2659\",[40,47.086]],[\"comment/2659\",[]],[\"name/2660\",[41,47.086]],[\"comment/2660\",[]],[\"name/2661\",[42,47.086]],[\"comment/2661\",[]],[\"name/2662\",[43,47.086]],[\"comment/2662\",[]],[\"name/2663\",[44,47.086]],[\"comment/2663\",[]],[\"name/2664\",[45,47.086]],[\"comment/2664\",[]],[\"name/2665\",[46,47.086]],[\"comment/2665\",[]],[\"name/2666\",[47,47.086]],[\"comment/2666\",[]],[\"name/2667\",[48,47.086]],[\"comment/2667\",[]],[\"name/2668\",[49,47.086]],[\"comment/2668\",[]],[\"name/2669\",[50,47.086]],[\"comment/2669\",[]],[\"name/2670\",[51,47.086]],[\"comment/2670\",[]],[\"name/2671\",[52,47.086]],[\"comment/2671\",[]],[\"name/2672\",[53,47.086]],[\"comment/2672\",[]],[\"name/2673\",[54,47.086]],[\"comment/2673\",[]],[\"name/2674\",[55,47.086]],[\"comment/2674\",[]],[\"name/2675\",[56,47.086]],[\"comment/2675\",[]],[\"name/2676\",[57,46.785]],[\"comment/2676\",[]],[\"name/2677\",[58,46.785]],[\"comment/2677\",[]],[\"name/2678\",[59,47.086]],[\"comment/2678\",[]],[\"name/2679\",[60,43.21]],[\"comment/2679\",[]],[\"name/2680\",[61,46.638]],[\"comment/2680\",[]],[\"name/2681\",[62,46.638]],[\"comment/2681\",[]],[\"name/2682\",[63,47.086]],[\"comment/2682\",[]],[\"name/2683\",[64,46.934]],[\"comment/2683\",[]],[\"name/2684\",[65,46.934]],[\"comment/2684\",[]],[\"name/2685\",[66,47.086]],[\"comment/2685\",[]],[\"name/2686\",[67,47.086]],[\"comment/2686\",[]],[\"name/2687\",[68,47.086]],[\"comment/2687\",[]],[\"name/2688\",[69,46.934]],[\"comment/2688\",[]],[\"name/2689\",[70,46.785]],[\"comment/2689\",[]],[\"name/2690\",[71,46.785]],[\"comment/2690\",[]],[\"name/2691\",[522,79.751]],[\"comment/2691\",[]],[\"name/2692\",[9,44.076]],[\"comment/2692\",[]],[\"name/2693\",[799,84.86]],[\"comment/2693\",[]],[\"name/2694\",[800,84.86]],[\"comment/2694\",[]],[\"name/2695\",[166,57.339]],[\"comment/2695\",[]],[\"name/2696\",[801,84.86]],[\"comment/2696\",[]],[\"name/2697\",[12,44.421]],[\"comment/2697\",[]],[\"name/2698\",[409,67.51]],[\"comment/2698\",[]],[\"name/2699\",[0,63.653]],[\"comment/2699\",[]],[\"name/2700\",[802,79.751]],[\"comment/2700\",[]],[\"name/2701\",[803,84.86]],[\"comment/2701\",[]],[\"name/2702\",[12,44.421]],[\"comment/2702\",[]],[\"name/2703\",[409,67.51]],[\"comment/2703\",[]],[\"name/2704\",[0,63.653]],[\"comment/2704\",[]],[\"name/2705\",[802,79.751]],[\"comment/2705\",[]],[\"name/2706\",[523,73.872]],[\"comment/2706\",[]],[\"name/2707\",[2,46.209]],[\"comment/2707\",[]],[\"name/2708\",[804,84.86]],[\"comment/2708\",[]],[\"name/2709\",[6,54.096]],[\"comment/2709\",[]],[\"name/2710\",[8,46.934]],[\"comment/2710\",[]],[\"name/2711\",[9,44.076]],[\"comment/2711\",[]],[\"name/2712\",[805,84.86]],[\"comment/2712\",[]],[\"name/2713\",[806,84.86]],[\"comment/2713\",[]],[\"name/2714\",[807,84.86]],[\"comment/2714\",[]],[\"name/2715\",[808,84.86]],[\"comment/2715\",[]],[\"name/2716\",[809,84.86]],[\"comment/2716\",[]],[\"name/2717\",[370,65.397]],[\"comment/2717\",[]],[\"name/2718\",[16,49.491]],[\"comment/2718\",[]],[\"name/2719\",[810,84.86]],[\"comment/2719\",[]],[\"name/2720\",[811,84.86]],[\"comment/2720\",[]],[\"name/2721\",[812,84.86]],[\"comment/2721\",[]],[\"name/2722\",[3,58.228]],[\"comment/2722\",[]],[\"name/2723\",[625,79.751]],[\"comment/2723\",[]],[\"name/2724\",[19,44.657]],[\"comment/2724\",[]],[\"name/2725\",[29,56.137]],[\"comment/2725\",[]],[\"name/2726\",[30,55.767]],[\"comment/2726\",[]],[\"name/2727\",[122,54.408]],[\"comment/2727\",[]],[\"name/2728\",[123,54.408]],[\"comment/2728\",[]],[\"name/2729\",[124,54.096]],[\"comment/2729\",[]],[\"name/2730\",[20,50.513]],[\"comment/2730\",[]],[\"name/2731\",[169,53.793]],[\"comment/2731\",[]],[\"name/2732\",[245,60.876]],[\"comment/2732\",[]],[\"name/2733\",[369,65.397]],[\"comment/2733\",[]],[\"name/2734\",[371,64.487]],[\"comment/2734\",[]],[\"name/2735\",[372,65.397]],[\"comment/2735\",[]],[\"name/2736\",[373,65.397]],[\"comment/2736\",[]],[\"name/2737\",[38,47.086]],[\"comment/2737\",[]],[\"name/2738\",[39,47.086]],[\"comment/2738\",[]],[\"name/2739\",[40,47.086]],[\"comment/2739\",[]],[\"name/2740\",[41,47.086]],[\"comment/2740\",[]],[\"name/2741\",[42,47.086]],[\"comment/2741\",[]],[\"name/2742\",[43,47.086]],[\"comment/2742\",[]],[\"name/2743\",[44,47.086]],[\"comment/2743\",[]],[\"name/2744\",[45,47.086]],[\"comment/2744\",[]],[\"name/2745\",[46,47.086]],[\"comment/2745\",[]],[\"name/2746\",[47,47.086]],[\"comment/2746\",[]],[\"name/2747\",[48,47.086]],[\"comment/2747\",[]],[\"name/2748\",[49,47.086]],[\"comment/2748\",[]],[\"name/2749\",[50,47.086]],[\"comment/2749\",[]],[\"name/2750\",[51,47.086]],[\"comment/2750\",[]],[\"name/2751\",[52,47.086]],[\"comment/2751\",[]],[\"name/2752\",[53,47.086]],[\"comment/2752\",[]],[\"name/2753\",[54,47.086]],[\"comment/2753\",[]],[\"name/2754\",[55,47.086]],[\"comment/2754\",[]],[\"name/2755\",[56,47.086]],[\"comment/2755\",[]],[\"name/2756\",[57,46.785]],[\"comment/2756\",[]],[\"name/2757\",[58,46.785]],[\"comment/2757\",[]],[\"name/2758\",[59,47.086]],[\"comment/2758\",[]],[\"name/2759\",[60,43.21]],[\"comment/2759\",[]],[\"name/2760\",[61,46.638]],[\"comment/2760\",[]],[\"name/2761\",[62,46.638]],[\"comment/2761\",[]],[\"name/2762\",[63,47.086]],[\"comment/2762\",[]],[\"name/2763\",[64,46.934]],[\"comment/2763\",[]],[\"name/2764\",[65,46.934]],[\"comment/2764\",[]],[\"name/2765\",[66,47.086]],[\"comment/2765\",[]],[\"name/2766\",[67,47.086]],[\"comment/2766\",[]],[\"name/2767\",[68,47.086]],[\"comment/2767\",[]],[\"name/2768\",[69,46.934]],[\"comment/2768\",[]],[\"name/2769\",[70,46.785]],[\"comment/2769\",[]],[\"name/2770\",[71,46.785]],[\"comment/2770\",[]],[\"name/2771\",[494,73.872]],[\"comment/2771\",[]],[\"name/2772\",[2,46.209]],[\"comment/2772\",[]],[\"name/2773\",[98,60.287]],[\"comment/2773\",[]],[\"name/2774\",[99,59.732]],[\"comment/2774\",[]],[\"name/2775\",[8,46.934]],[\"comment/2775\",[]],[\"name/2776\",[9,44.076]],[\"comment/2776\",[]],[\"name/2777\",[102,59.732]],[\"comment/2777\",[]],[\"name/2778\",[103,56.522]],[\"comment/2778\",[]],[\"name/2779\",[19,44.657]],[\"comment/2779\",[]],[\"name/2780\",[104,59.732]],[\"comment/2780\",[]],[\"name/2781\",[105,57.339]],[\"comment/2781\",[]],[\"name/2782\",[106,59.732]],[\"comment/2782\",[]],[\"name/2783\",[11,52.935]],[\"comment/2783\",[]],[\"name/2784\",[12,44.421]],[\"comment/2784\",[]],[\"name/2785\",[107,60.287]],[\"comment/2785\",[]],[\"name/2786\",[19,44.657]],[\"comment/2786\",[]],[\"name/2787\",[108,60.287]],[\"comment/2787\",[]],[\"name/2788\",[109,60.287]],[\"comment/2788\",[]],[\"name/2789\",[110,57.339]],[\"comment/2789\",[]],[\"name/2790\",[111,60.287]],[\"comment/2790\",[]],[\"name/2791\",[112,60.287]],[\"comment/2791\",[]],[\"name/2792\",[113,57.774]],[\"comment/2792\",[]],[\"name/2793\",[114,60.287]],[\"comment/2793\",[]],[\"name/2794\",[115,60.287]],[\"comment/2794\",[]],[\"name/2795\",[116,56.922]],[\"comment/2795\",[]],[\"name/2796\",[60,43.21]],[\"comment/2796\",[]],[\"name/2797\",[117,58.705]],[\"comment/2797\",[]],[\"name/2798\",[118,60.287]],[\"comment/2798\",[]],[\"name/2799\",[119,60.287]],[\"comment/2799\",[]],[\"name/2800\",[120,59.732]],[\"comment/2800\",[]],[\"name/2801\",[121,60.287]],[\"comment/2801\",[]],[\"name/2802\",[122,54.408]],[\"comment/2802\",[]],[\"name/2803\",[123,54.408]],[\"comment/2803\",[]],[\"name/2804\",[124,54.096]],[\"comment/2804\",[]],[\"name/2805\",[125,60.287]],[\"comment/2805\",[]],[\"name/2806\",[126,60.287]],[\"comment/2806\",[]],[\"name/2807\",[127,60.287]],[\"comment/2807\",[]],[\"name/2808\",[128,60.287]],[\"comment/2808\",[]],[\"name/2809\",[129,59.732]],[\"comment/2809\",[]],[\"name/2810\",[130,60.287]],[\"comment/2810\",[]],[\"name/2811\",[131,60.287]],[\"comment/2811\",[]],[\"name/2812\",[132,59.732]],[\"comment/2812\",[]],[\"name/2813\",[133,60.287]],[\"comment/2813\",[]],[\"name/2814\",[134,60.287]],[\"comment/2814\",[]],[\"name/2815\",[135,60.287]],[\"comment/2815\",[]],[\"name/2816\",[136,60.287]],[\"comment/2816\",[]],[\"name/2817\",[137,59.205]],[\"comment/2817\",[]],[\"name/2818\",[138,59.732]],[\"comment/2818\",[]],[\"name/2819\",[139,59.732]],[\"comment/2819\",[]],[\"name/2820\",[140,59.732]],[\"comment/2820\",[]],[\"name/2821\",[141,59.732]],[\"comment/2821\",[]],[\"name/2822\",[142,60.287]],[\"comment/2822\",[]],[\"name/2823\",[143,60.287]],[\"comment/2823\",[]],[\"name/2824\",[144,60.287]],[\"comment/2824\",[]],[\"name/2825\",[145,60.287]],[\"comment/2825\",[]],[\"name/2826\",[146,60.287]],[\"comment/2826\",[]],[\"name/2827\",[147,60.287]],[\"comment/2827\",[]],[\"name/2828\",[148,60.287]],[\"comment/2828\",[]],[\"name/2829\",[149,60.287]],[\"comment/2829\",[]],[\"name/2830\",[150,58.228]],[\"comment/2830\",[]],[\"name/2831\",[151,60.287]],[\"comment/2831\",[]],[\"name/2832\",[152,60.287]],[\"comment/2832\",[]],[\"name/2833\",[12,44.421]],[\"comment/2833\",[]],[\"name/2834\",[153,56.922]],[\"comment/2834\",[]],[\"name/2835\",[154,56.922]],[\"comment/2835\",[]],[\"name/2836\",[155,60.287]],[\"comment/2836\",[]],[\"name/2837\",[156,60.287]],[\"comment/2837\",[]],[\"name/2838\",[157,60.287]],[\"comment/2838\",[]],[\"name/2839\",[158,56.922]],[\"comment/2839\",[]],[\"name/2840\",[159,59.732]],[\"comment/2840\",[]],[\"name/2841\",[160,59.732]],[\"comment/2841\",[]],[\"name/2842\",[161,60.287]],[\"comment/2842\",[]],[\"name/2843\",[162,60.287]],[\"comment/2843\",[]],[\"name/2844\",[163,60.287]],[\"comment/2844\",[]],[\"name/2845\",[164,60.287]],[\"comment/2845\",[]],[\"name/2846\",[165,60.287]],[\"comment/2846\",[]],[\"name/2847\",[166,57.339]],[\"comment/2847\",[]],[\"name/2848\",[167,59.732]],[\"comment/2848\",[]],[\"name/2849\",[168,59.732]],[\"comment/2849\",[]],[\"name/2850\",[20,50.513]],[\"comment/2850\",[]],[\"name/2851\",[16,49.491]],[\"comment/2851\",[]],[\"name/2852\",[35,52.664]],[\"comment/2852\",[]],[\"name/2853\",[36,52.664]],[\"comment/2853\",[]],[\"name/2854\",[169,53.793]],[\"comment/2854\",[]],[\"name/2855\",[170,59.205]],[\"comment/2855\",[]],[\"name/2856\",[171,59.732]],[\"comment/2856\",[]],[\"name/2857\",[172,59.732]],[\"comment/2857\",[]],[\"name/2858\",[173,59.732]],[\"comment/2858\",[]],[\"name/2859\",[174,59.732]],[\"comment/2859\",[]],[\"name/2860\",[175,59.732]],[\"comment/2860\",[]],[\"name/2861\",[176,59.732]],[\"comment/2861\",[]],[\"name/2862\",[177,59.732]],[\"comment/2862\",[]],[\"name/2863\",[178,59.732]],[\"comment/2863\",[]],[\"name/2864\",[179,58.228]],[\"comment/2864\",[]],[\"name/2865\",[180,59.732]],[\"comment/2865\",[]],[\"name/2866\",[181,59.732]],[\"comment/2866\",[]],[\"name/2867\",[182,56.922]],[\"comment/2867\",[]],[\"name/2868\",[183,59.205]],[\"comment/2868\",[]],[\"name/2869\",[184,59.732]],[\"comment/2869\",[]],[\"name/2870\",[185,59.732]],[\"comment/2870\",[]],[\"name/2871\",[186,59.732]],[\"comment/2871\",[]],[\"name/2872\",[187,59.732]],[\"comment/2872\",[]],[\"name/2873\",[188,59.732]],[\"comment/2873\",[]],[\"name/2874\",[28,53.498]],[\"comment/2874\",[]],[\"name/2875\",[26,53.498]],[\"comment/2875\",[]],[\"name/2876\",[27,53.498]],[\"comment/2876\",[]],[\"name/2877\",[38,47.086]],[\"comment/2877\",[]],[\"name/2878\",[39,47.086]],[\"comment/2878\",[]],[\"name/2879\",[40,47.086]],[\"comment/2879\",[]],[\"name/2880\",[41,47.086]],[\"comment/2880\",[]],[\"name/2881\",[42,47.086]],[\"comment/2881\",[]],[\"name/2882\",[43,47.086]],[\"comment/2882\",[]],[\"name/2883\",[44,47.086]],[\"comment/2883\",[]],[\"name/2884\",[45,47.086]],[\"comment/2884\",[]],[\"name/2885\",[46,47.086]],[\"comment/2885\",[]],[\"name/2886\",[47,47.086]],[\"comment/2886\",[]],[\"name/2887\",[48,47.086]],[\"comment/2887\",[]],[\"name/2888\",[49,47.086]],[\"comment/2888\",[]],[\"name/2889\",[50,47.086]],[\"comment/2889\",[]],[\"name/2890\",[51,47.086]],[\"comment/2890\",[]],[\"name/2891\",[52,47.086]],[\"comment/2891\",[]],[\"name/2892\",[53,47.086]],[\"comment/2892\",[]],[\"name/2893\",[54,47.086]],[\"comment/2893\",[]],[\"name/2894\",[55,47.086]],[\"comment/2894\",[]],[\"name/2895\",[56,47.086]],[\"comment/2895\",[]],[\"name/2896\",[57,46.785]],[\"comment/2896\",[]],[\"name/2897\",[58,46.785]],[\"comment/2897\",[]],[\"name/2898\",[59,47.086]],[\"comment/2898\",[]],[\"name/2899\",[60,43.21]],[\"comment/2899\",[]],[\"name/2900\",[61,46.638]],[\"comment/2900\",[]],[\"name/2901\",[62,46.638]],[\"comment/2901\",[]],[\"name/2902\",[63,47.086]],[\"comment/2902\",[]],[\"name/2903\",[64,46.934]],[\"comment/2903\",[]],[\"name/2904\",[65,46.934]],[\"comment/2904\",[]],[\"name/2905\",[66,47.086]],[\"comment/2905\",[]],[\"name/2906\",[67,47.086]],[\"comment/2906\",[]],[\"name/2907\",[68,47.086]],[\"comment/2907\",[]],[\"name/2908\",[69,46.934]],[\"comment/2908\",[]],[\"name/2909\",[70,46.785]],[\"comment/2909\",[]],[\"name/2910\",[71,46.785]],[\"comment/2910\",[]],[\"name/2911\",[544,79.751]],[\"comment/2911\",[]],[\"name/2912\",[74,70.194]],[\"comment/2912\",[]],[\"name/2913\",[73,67.51]],[\"comment/2913\",[]],[\"name/2914\",[75,67.51]],[\"comment/2914\",[]],[\"name/2915\",[813,79.751]],[\"comment/2915\",[]],[\"name/2916\",[814,79.751]],[\"comment/2916\",[]],[\"name/2917\",[524,76.385]],[\"comment/2917\",[]],[\"name/2918\",[2,46.209]],[\"comment/2918\",[]],[\"name/2919\",[6,54.096]],[\"comment/2919\",[]],[\"name/2920\",[7,59.732]],[\"comment/2920\",[]],[\"name/2921\",[8,46.934]],[\"comment/2921\",[]],[\"name/2922\",[9,44.076]],[\"comment/2922\",[]],[\"name/2923\",[16,49.491]],[\"comment/2923\",[]],[\"name/2924\",[20,50.513]],[\"comment/2924\",[]],[\"name/2925\",[21,60.876]],[\"comment/2925\",[]],[\"name/2926\",[22,60.876]],[\"comment/2926\",[]],[\"name/2927\",[17,60.876]],[\"comment/2927\",[]],[\"name/2928\",[23,60.876]],[\"comment/2928\",[]],[\"name/2929\",[24,60.876]],[\"comment/2929\",[]],[\"name/2930\",[25,60.876]],[\"comment/2930\",[]],[\"name/2931\",[26,53.498]],[\"comment/2931\",[]],[\"name/2932\",[27,53.498]],[\"comment/2932\",[]],[\"name/2933\",[28,53.498]],[\"comment/2933\",[]],[\"name/2934\",[29,56.137]],[\"comment/2934\",[]],[\"name/2935\",[30,55.767]],[\"comment/2935\",[]],[\"name/2936\",[31,60.876]],[\"comment/2936\",[]],[\"name/2937\",[32,59.732]],[\"comment/2937\",[]],[\"name/2938\",[33,60.876]],[\"comment/2938\",[]],[\"name/2939\",[34,60.876]],[\"comment/2939\",[]],[\"name/2940\",[35,52.664]],[\"comment/2940\",[]],[\"name/2941\",[36,52.664]],[\"comment/2941\",[]],[\"name/2942\",[19,44.657]],[\"comment/2942\",[]],[\"name/2943\",[37,60.876]],[\"comment/2943\",[]],[\"name/2944\",[38,47.086]],[\"comment/2944\",[]],[\"name/2945\",[39,47.086]],[\"comment/2945\",[]],[\"name/2946\",[40,47.086]],[\"comment/2946\",[]],[\"name/2947\",[41,47.086]],[\"comment/2947\",[]],[\"name/2948\",[42,47.086]],[\"comment/2948\",[]],[\"name/2949\",[43,47.086]],[\"comment/2949\",[]],[\"name/2950\",[44,47.086]],[\"comment/2950\",[]],[\"name/2951\",[45,47.086]],[\"comment/2951\",[]],[\"name/2952\",[46,47.086]],[\"comment/2952\",[]],[\"name/2953\",[47,47.086]],[\"comment/2953\",[]],[\"name/2954\",[48,47.086]],[\"comment/2954\",[]],[\"name/2955\",[49,47.086]],[\"comment/2955\",[]],[\"name/2956\",[50,47.086]],[\"comment/2956\",[]],[\"name/2957\",[51,47.086]],[\"comment/2957\",[]],[\"name/2958\",[52,47.086]],[\"comment/2958\",[]],[\"name/2959\",[53,47.086]],[\"comment/2959\",[]],[\"name/2960\",[54,47.086]],[\"comment/2960\",[]],[\"name/2961\",[55,47.086]],[\"comment/2961\",[]],[\"name/2962\",[56,47.086]],[\"comment/2962\",[]],[\"name/2963\",[57,46.785]],[\"comment/2963\",[]],[\"name/2964\",[58,46.785]],[\"comment/2964\",[]],[\"name/2965\",[59,47.086]],[\"comment/2965\",[]],[\"name/2966\",[60,43.21]],[\"comment/2966\",[]],[\"name/2967\",[61,46.638]],[\"comment/2967\",[]],[\"name/2968\",[62,46.638]],[\"comment/2968\",[]],[\"name/2969\",[63,47.086]],[\"comment/2969\",[]],[\"name/2970\",[64,46.934]],[\"comment/2970\",[]],[\"name/2971\",[65,46.934]],[\"comment/2971\",[]],[\"name/2972\",[66,47.086]],[\"comment/2972\",[]],[\"name/2973\",[67,47.086]],[\"comment/2973\",[]],[\"name/2974\",[68,47.086]],[\"comment/2974\",[]],[\"name/2975\",[69,46.934]],[\"comment/2975\",[]],[\"name/2976\",[70,46.785]],[\"comment/2976\",[]],[\"name/2977\",[71,46.785]],[\"comment/2977\",[]],[\"name/2978\",[815,84.86]],[\"comment/2978\",[]],[\"name/2979\",[816,84.86]],[\"comment/2979\",[]],[\"name/2980\",[817,84.86]],[\"comment/2980\",[]],[\"name/2981\",[818,84.86]],[\"comment/2981\",[]],[\"name/2982\",[819,84.86]],[\"comment/2982\",[]],[\"name/2983\",[820,84.86]],[\"comment/2983\",[]],[\"name/2984\",[225,60.876]],[\"comment/2984\",[]],[\"name/2985\",[317,79.751]],[\"comment/2985\",[]],[\"name/2986\",[821,84.86]],[\"comment/2986\",[]],[\"name/2987\",[503,76.385]],[\"comment/2987\",[]],[\"name/2988\",[1,57.339]],[\"comment/2988\",[]],[\"name/2989\",[9,44.076]],[\"comment/2989\",[]],[\"name/2990\",[150,58.228]],[\"comment/2990\",[]],[\"name/2991\",[822,84.86]],[\"comment/2991\",[]],[\"name/2992\",[179,58.228]],[\"comment/2992\",[]],[\"name/2993\",[823,84.86]],[\"comment/2993\",[]],[\"name/2994\",[16,49.491]],[\"comment/2994\",[]],[\"name/2995\",[824,84.86]],[\"comment/2995\",[]],[\"name/2996\",[825,84.86]],[\"comment/2996\",[]],[\"name/2997\",[826,84.86]],[\"comment/2997\",[]],[\"name/2998\",[158,56.922]],[\"comment/2998\",[]],[\"name/2999\",[103,56.522]],[\"comment/2999\",[]],[\"name/3000\",[182,56.922]],[\"comment/3000\",[]],[\"name/3001\",[827,84.86]],[\"comment/3001\",[]],[\"name/3002\",[828,84.86]],[\"comment/3002\",[]],[\"name/3003\",[829,84.86]],[\"comment/3003\",[]],[\"name/3004\",[830,84.86]],[\"comment/3004\",[]],[\"name/3005\",[831,84.86]],[\"comment/3005\",[]],[\"name/3006\",[832,84.86]],[\"comment/3006\",[]],[\"name/3007\",[833,84.86]],[\"comment/3007\",[]],[\"name/3008\",[834,79.751]],[\"comment/3008\",[]],[\"name/3009\",[835,79.751]],[\"comment/3009\",[]],[\"name/3010\",[323,60.876]],[\"comment/3010\",[]],[\"name/3011\",[836,79.751]],[\"comment/3011\",[]],[\"name/3012\",[837,84.86]],[\"comment/3012\",[]],[\"name/3013\",[838,84.86]],[\"comment/3013\",[]],[\"name/3014\",[839,84.86]],[\"comment/3014\",[]],[\"name/3015\",[504,73.872]],[\"comment/3015\",[]],[\"name/3016\",[2,46.209]],[\"comment/3016\",[]],[\"name/3017\",[8,46.934]],[\"comment/3017\",[]],[\"name/3018\",[9,44.076]],[\"comment/3018\",[]],[\"name/3019\",[11,52.935]],[\"comment/3019\",[]],[\"name/3020\",[840,84.86]],[\"comment/3020\",[]],[\"name/3021\",[12,44.421]],[\"comment/3021\",[]],[\"name/3022\",[73,67.51]],[\"comment/3022\",[]],[\"name/3023\",[75,67.51]],[\"comment/3023\",[]],[\"name/3024\",[124,54.096]],[\"comment/3024\",[]],[\"name/3025\",[122,54.408]],[\"comment/3025\",[]],[\"name/3026\",[123,54.408]],[\"comment/3026\",[]],[\"name/3027\",[841,84.86]],[\"comment/3027\",[]],[\"name/3028\",[842,84.86]],[\"comment/3028\",[]],[\"name/3029\",[19,44.657]],[\"comment/3029\",[]],[\"name/3030\",[38,47.086]],[\"comment/3030\",[]],[\"name/3031\",[39,47.086]],[\"comment/3031\",[]],[\"name/3032\",[40,47.086]],[\"comment/3032\",[]],[\"name/3033\",[41,47.086]],[\"comment/3033\",[]],[\"name/3034\",[42,47.086]],[\"comment/3034\",[]],[\"name/3035\",[43,47.086]],[\"comment/3035\",[]],[\"name/3036\",[44,47.086]],[\"comment/3036\",[]],[\"name/3037\",[45,47.086]],[\"comment/3037\",[]],[\"name/3038\",[46,47.086]],[\"comment/3038\",[]],[\"name/3039\",[47,47.086]],[\"comment/3039\",[]],[\"name/3040\",[48,47.086]],[\"comment/3040\",[]],[\"name/3041\",[49,47.086]],[\"comment/3041\",[]],[\"name/3042\",[50,47.086]],[\"comment/3042\",[]],[\"name/3043\",[51,47.086]],[\"comment/3043\",[]],[\"name/3044\",[52,47.086]],[\"comment/3044\",[]],[\"name/3045\",[53,47.086]],[\"comment/3045\",[]],[\"name/3046\",[54,47.086]],[\"comment/3046\",[]],[\"name/3047\",[55,47.086]],[\"comment/3047\",[]],[\"name/3048\",[56,47.086]],[\"comment/3048\",[]],[\"name/3049\",[57,46.785]],[\"comment/3049\",[]],[\"name/3050\",[58,46.785]],[\"comment/3050\",[]],[\"name/3051\",[59,47.086]],[\"comment/3051\",[]],[\"name/3052\",[60,43.21]],[\"comment/3052\",[]],[\"name/3053\",[61,46.638]],[\"comment/3053\",[]],[\"name/3054\",[62,46.638]],[\"comment/3054\",[]],[\"name/3055\",[63,47.086]],[\"comment/3055\",[]],[\"name/3056\",[64,46.934]],[\"comment/3056\",[]],[\"name/3057\",[65,46.934]],[\"comment/3057\",[]],[\"name/3058\",[66,47.086]],[\"comment/3058\",[]],[\"name/3059\",[67,47.086]],[\"comment/3059\",[]],[\"name/3060\",[68,47.086]],[\"comment/3060\",[]],[\"name/3061\",[69,46.934]],[\"comment/3061\",[]],[\"name/3062\",[70,46.785]],[\"comment/3062\",[]],[\"name/3063\",[71,46.785]],[\"comment/3063\",[]],[\"name/3064\",[843,84.86]],[\"comment/3064\",[]],[\"name/3065\",[409,67.51]],[\"comment/3065\",[]],[\"name/3066\",[0,63.653]],[\"comment/3066\",[]],[\"name/3067\",[844,84.86]],[\"comment/3067\",[]],[\"name/3068\",[845,79.751]],[\"comment/3068\",[]],[\"name/3069\",[0,63.653]],[\"comment/3069\",[]],[\"name/3070\",[846,84.86]],[\"comment/3070\",[]],[\"name/3071\",[845,79.751]],[\"comment/3071\",[]],[\"name/3072\",[0,63.653]],[\"comment/3072\",[]],[\"name/3073\",[10,57.774]],[\"comment/3073\",[]],[\"name/3074\",[847,84.86]],[\"comment/3074\",[]],[\"name/3075\",[848,84.86]],[\"comment/3075\",[]],[\"name/3076\",[849,84.86]],[\"comment/3076\",[]],[\"name/3077\",[417,73.872]],[\"comment/3077\",[]],[\"name/3078\",[850,84.86]],[\"comment/3078\",[]],[\"name/3079\",[851,84.86]],[\"comment/3079\",[]],[\"name/3080\",[525,79.751]],[\"comment/3080\",[]],[\"name/3081\",[852,84.86]],[\"comment/3081\",[]],[\"name/3082\",[853,84.86]],[\"comment/3082\",[]],[\"name/3083\",[854,84.86]],[\"comment/3083\",[]],[\"name/3084\",[855,84.86]],[\"comment/3084\",[]],[\"name/3085\",[856,84.86]],[\"comment/3085\",[]],[\"name/3086\",[857,84.86]],[\"comment/3086\",[]],[\"name/3087\",[858,84.86]],[\"comment/3087\",[]],[\"name/3088\",[859,84.86]],[\"comment/3088\",[]],[\"name/3089\",[860,84.86]],[\"comment/3089\",[]],[\"name/3090\",[861,84.86]],[\"comment/3090\",[]],[\"name/3091\",[422,76.385]],[\"comment/3091\",[]],[\"name/3092\",[862,84.86]],[\"comment/3092\",[]],[\"name/3093\",[9,44.076]],[\"comment/3093\",[]],[\"name/3094\",[863,84.86]],[\"comment/3094\",[]],[\"name/3095\",[864,84.86]],[\"comment/3095\",[]],[\"name/3096\",[865,84.86]],[\"comment/3096\",[]],[\"name/3097\",[866,84.86]],[\"comment/3097\",[]],[\"name/3098\",[867,84.86]],[\"comment/3098\",[]],[\"name/3099\",[868,84.86]],[\"comment/3099\",[]],[\"name/3100\",[869,84.86]],[\"comment/3100\",[]],[\"name/3101\",[870,84.86]],[\"comment/3101\",[]],[\"name/3102\",[871,84.86]],[\"comment/3102\",[]],[\"name/3103\",[872,84.86]],[\"comment/3103\",[]],[\"name/3104\",[873,84.86]],[\"comment/3104\",[]],[\"name/3105\",[106,59.732]],[\"comment/3105\",[]],[\"name/3106\",[748,71.865]],[\"comment/3106\",[]],[\"name/3107\",[749,71.865]],[\"comment/3107\",[]],[\"name/3108\",[417,73.872]],[\"comment/3108\",[]],[\"name/3109\",[421,76.385]],[\"comment/3109\",[]],[\"name/3110\",[323,60.876]],[\"comment/3110\",[]],[\"name/3111\",[874,84.86]],[\"comment/3111\",[]],[\"name/3112\",[0,63.653]],[\"comment/3112\",[]],[\"name/3113\",[90,67.51]],[\"comment/3113\",[]],[\"name/3114\",[290,68.762]],[\"comment/3114\",[]],[\"name/3115\",[875,84.86]],[\"comment/3115\",[]],[\"name/3116\",[876,79.751]],[\"comment/3116\",[]],[\"name/3117\",[877,84.86]],[\"comment/3117\",[]],[\"name/3118\",[225,60.876]],[\"comment/3118\",[]],[\"name/3119\",[878,79.751]],[\"comment/3119\",[]],[\"name/3120\",[879,79.751]],[\"comment/3120\",[]],[\"name/3121\",[880,79.751]],[\"comment/3121\",[]],[\"name/3122\",[881,79.751]],[\"comment/3122\",[]],[\"name/3123\",[882,79.751]],[\"comment/3123\",[]],[\"name/3124\",[883,79.751]],[\"comment/3124\",[]],[\"name/3125\",[884,79.751]],[\"comment/3125\",[]],[\"name/3126\",[885,84.86]],[\"comment/3126\",[]],[\"name/3127\",[412,63.653]],[\"comment/3127\",[]],[\"name/3128\",[411,64.487]],[\"comment/3128\",[]],[\"name/3129\",[10,57.774]],[\"comment/3129\",[]],[\"name/3130\",[886,84.86]],[\"comment/3130\",[]],[\"name/3131\",[412,63.653]],[\"comment/3131\",[]],[\"name/3132\",[10,57.774]],[\"comment/3132\",[]],[\"name/3133\",[887,84.86]],[\"comment/3133\",[]],[\"name/3134\",[411,64.487]],[\"comment/3134\",[]],[\"name/3135\",[888,84.86]],[\"comment/3135\",[]],[\"name/3136\",[889,84.86]],[\"comment/3136\",[]],[\"name/3137\",[105,57.339]],[\"comment/3137\",[]],[\"name/3138\",[412,63.653]],[\"comment/3138\",[]],[\"name/3139\",[323,60.876]],[\"comment/3139\",[]],[\"name/3140\",[411,64.487]],[\"comment/3140\",[]],[\"name/3141\",[10,57.774]],[\"comment/3141\",[]],[\"name/3142\",[751,70.194]],[\"comment/3142\",[]],[\"name/3143\",[752,70.194]],[\"comment/3143\",[]],[\"name/3144\",[409,67.51]],[\"comment/3144\",[]],[\"name/3145\",[2,46.209]],[\"comment/3145\",[]],[\"name/3146\",[98,60.287]],[\"comment/3146\",[]],[\"name/3147\",[99,59.732]],[\"comment/3147\",[]],[\"name/3148\",[8,46.934]],[\"comment/3148\",[]],[\"name/3149\",[9,44.076]],[\"comment/3149\",[]],[\"name/3150\",[104,59.732]],[\"comment/3150\",[]],[\"name/3151\",[105,57.339]],[\"comment/3151\",[]],[\"name/3152\",[106,59.732]],[\"comment/3152\",[]],[\"name/3153\",[11,52.935]],[\"comment/3153\",[]],[\"name/3154\",[12,44.421]],[\"comment/3154\",[]],[\"name/3155\",[107,60.287]],[\"comment/3155\",[]],[\"name/3156\",[19,44.657]],[\"comment/3156\",[]],[\"name/3157\",[108,60.287]],[\"comment/3157\",[]],[\"name/3158\",[109,60.287]],[\"comment/3158\",[]],[\"name/3159\",[110,57.339]],[\"comment/3159\",[]],[\"name/3160\",[111,60.287]],[\"comment/3160\",[]],[\"name/3161\",[112,60.287]],[\"comment/3161\",[]],[\"name/3162\",[113,57.774]],[\"comment/3162\",[]],[\"name/3163\",[114,60.287]],[\"comment/3163\",[]],[\"name/3164\",[115,60.287]],[\"comment/3164\",[]],[\"name/3165\",[116,56.922]],[\"comment/3165\",[]],[\"name/3166\",[60,43.21]],[\"comment/3166\",[]],[\"name/3167\",[117,58.705]],[\"comment/3167\",[]],[\"name/3168\",[118,60.287]],[\"comment/3168\",[]],[\"name/3169\",[119,60.287]],[\"comment/3169\",[]],[\"name/3170\",[120,59.732]],[\"comment/3170\",[]],[\"name/3171\",[121,60.287]],[\"comment/3171\",[]],[\"name/3172\",[122,54.408]],[\"comment/3172\",[]],[\"name/3173\",[123,54.408]],[\"comment/3173\",[]],[\"name/3174\",[124,54.096]],[\"comment/3174\",[]],[\"name/3175\",[125,60.287]],[\"comment/3175\",[]],[\"name/3176\",[126,60.287]],[\"comment/3176\",[]],[\"name/3177\",[127,60.287]],[\"comment/3177\",[]],[\"name/3178\",[128,60.287]],[\"comment/3178\",[]],[\"name/3179\",[129,59.732]],[\"comment/3179\",[]],[\"name/3180\",[130,60.287]],[\"comment/3180\",[]],[\"name/3181\",[131,60.287]],[\"comment/3181\",[]],[\"name/3182\",[132,59.732]],[\"comment/3182\",[]],[\"name/3183\",[133,60.287]],[\"comment/3183\",[]],[\"name/3184\",[134,60.287]],[\"comment/3184\",[]],[\"name/3185\",[135,60.287]],[\"comment/3185\",[]],[\"name/3186\",[136,60.287]],[\"comment/3186\",[]],[\"name/3187\",[137,59.205]],[\"comment/3187\",[]],[\"name/3188\",[138,59.732]],[\"comment/3188\",[]],[\"name/3189\",[139,59.732]],[\"comment/3189\",[]],[\"name/3190\",[140,59.732]],[\"comment/3190\",[]],[\"name/3191\",[141,59.732]],[\"comment/3191\",[]],[\"name/3192\",[142,60.287]],[\"comment/3192\",[]],[\"name/3193\",[143,60.287]],[\"comment/3193\",[]],[\"name/3194\",[144,60.287]],[\"comment/3194\",[]],[\"name/3195\",[145,60.287]],[\"comment/3195\",[]],[\"name/3196\",[146,60.287]],[\"comment/3196\",[]],[\"name/3197\",[147,60.287]],[\"comment/3197\",[]],[\"name/3198\",[148,60.287]],[\"comment/3198\",[]],[\"name/3199\",[149,60.287]],[\"comment/3199\",[]],[\"name/3200\",[150,58.228]],[\"comment/3200\",[]],[\"name/3201\",[151,60.287]],[\"comment/3201\",[]],[\"name/3202\",[152,60.287]],[\"comment/3202\",[]],[\"name/3203\",[12,44.421]],[\"comment/3203\",[]],[\"name/3204\",[153,56.922]],[\"comment/3204\",[]],[\"name/3205\",[154,56.922]],[\"comment/3205\",[]],[\"name/3206\",[155,60.287]],[\"comment/3206\",[]],[\"name/3207\",[156,60.287]],[\"comment/3207\",[]],[\"name/3208\",[157,60.287]],[\"comment/3208\",[]],[\"name/3209\",[158,56.922]],[\"comment/3209\",[]],[\"name/3210\",[159,59.732]],[\"comment/3210\",[]],[\"name/3211\",[160,59.732]],[\"comment/3211\",[]],[\"name/3212\",[161,60.287]],[\"comment/3212\",[]],[\"name/3213\",[162,60.287]],[\"comment/3213\",[]],[\"name/3214\",[163,60.287]],[\"comment/3214\",[]],[\"name/3215\",[164,60.287]],[\"comment/3215\",[]],[\"name/3216\",[165,60.287]],[\"comment/3216\",[]],[\"name/3217\",[166,57.339]],[\"comment/3217\",[]],[\"name/3218\",[167,59.732]],[\"comment/3218\",[]],[\"name/3219\",[168,59.732]],[\"comment/3219\",[]],[\"name/3220\",[20,50.513]],[\"comment/3220\",[]],[\"name/3221\",[16,49.491]],[\"comment/3221\",[]],[\"name/3222\",[35,52.664]],[\"comment/3222\",[]],[\"name/3223\",[36,52.664]],[\"comment/3223\",[]],[\"name/3224\",[169,53.793]],[\"comment/3224\",[]],[\"name/3225\",[170,59.205]],[\"comment/3225\",[]],[\"name/3226\",[171,59.732]],[\"comment/3226\",[]],[\"name/3227\",[172,59.732]],[\"comment/3227\",[]],[\"name/3228\",[173,59.732]],[\"comment/3228\",[]],[\"name/3229\",[174,59.732]],[\"comment/3229\",[]],[\"name/3230\",[175,59.732]],[\"comment/3230\",[]],[\"name/3231\",[176,59.732]],[\"comment/3231\",[]],[\"name/3232\",[177,59.732]],[\"comment/3232\",[]],[\"name/3233\",[178,59.732]],[\"comment/3233\",[]],[\"name/3234\",[102,59.732]],[\"comment/3234\",[]],[\"name/3235\",[179,58.228]],[\"comment/3235\",[]],[\"name/3236\",[180,59.732]],[\"comment/3236\",[]],[\"name/3237\",[103,56.522]],[\"comment/3237\",[]],[\"name/3238\",[181,59.732]],[\"comment/3238\",[]],[\"name/3239\",[182,56.922]],[\"comment/3239\",[]],[\"name/3240\",[183,59.205]],[\"comment/3240\",[]],[\"name/3241\",[184,59.732]],[\"comment/3241\",[]],[\"name/3242\",[185,59.732]],[\"comment/3242\",[]],[\"name/3243\",[186,59.732]],[\"comment/3243\",[]],[\"name/3244\",[187,59.732]],[\"comment/3244\",[]],[\"name/3245\",[188,59.732]],[\"comment/3245\",[]],[\"name/3246\",[28,53.498]],[\"comment/3246\",[]],[\"name/3247\",[26,53.498]],[\"comment/3247\",[]],[\"name/3248\",[27,53.498]],[\"comment/3248\",[]],[\"name/3249\",[38,47.086]],[\"comment/3249\",[]],[\"name/3250\",[39,47.086]],[\"comment/3250\",[]],[\"name/3251\",[40,47.086]],[\"comment/3251\",[]],[\"name/3252\",[41,47.086]],[\"comment/3252\",[]],[\"name/3253\",[42,47.086]],[\"comment/3253\",[]],[\"name/3254\",[43,47.086]],[\"comment/3254\",[]],[\"name/3255\",[44,47.086]],[\"comment/3255\",[]],[\"name/3256\",[45,47.086]],[\"comment/3256\",[]],[\"name/3257\",[19,44.657]],[\"comment/3257\",[]],[\"name/3258\",[46,47.086]],[\"comment/3258\",[]],[\"name/3259\",[47,47.086]],[\"comment/3259\",[]],[\"name/3260\",[48,47.086]],[\"comment/3260\",[]],[\"name/3261\",[49,47.086]],[\"comment/3261\",[]],[\"name/3262\",[50,47.086]],[\"comment/3262\",[]],[\"name/3263\",[51,47.086]],[\"comment/3263\",[]],[\"name/3264\",[52,47.086]],[\"comment/3264\",[]],[\"name/3265\",[53,47.086]],[\"comment/3265\",[]],[\"name/3266\",[54,47.086]],[\"comment/3266\",[]],[\"name/3267\",[55,47.086]],[\"comment/3267\",[]],[\"name/3268\",[56,47.086]],[\"comment/3268\",[]],[\"name/3269\",[57,46.785]],[\"comment/3269\",[]],[\"name/3270\",[58,46.785]],[\"comment/3270\",[]],[\"name/3271\",[59,47.086]],[\"comment/3271\",[]],[\"name/3272\",[60,43.21]],[\"comment/3272\",[]],[\"name/3273\",[61,46.638]],[\"comment/3273\",[]],[\"name/3274\",[62,46.638]],[\"comment/3274\",[]],[\"name/3275\",[63,47.086]],[\"comment/3275\",[]],[\"name/3276\",[64,46.934]],[\"comment/3276\",[]],[\"name/3277\",[65,46.934]],[\"comment/3277\",[]],[\"name/3278\",[66,47.086]],[\"comment/3278\",[]],[\"name/3279\",[67,47.086]],[\"comment/3279\",[]],[\"name/3280\",[68,47.086]],[\"comment/3280\",[]],[\"name/3281\",[69,46.934]],[\"comment/3281\",[]],[\"name/3282\",[70,46.785]],[\"comment/3282\",[]],[\"name/3283\",[71,46.785]],[\"comment/3283\",[]],[\"name/3284\",[890,84.86]],[\"comment/3284\",[]],[\"name/3285\",[339,76.385]],[\"comment/3285\",[]],[\"name/3286\",[891,84.86]],[\"comment/3286\",[]],[\"name/3287\",[892,84.86]],[\"comment/3287\",[]],[\"name/3288\",[323,60.876]],[\"comment/3288\",[]],[\"name/3289\",[113,57.774]],[\"comment/3289\",[]],[\"name/3290\",[893,84.86]],[\"comment/3290\",[]],[\"name/3291\",[581,76.385]],[\"comment/3291\",[]],[\"name/3292\",[748,71.865]],[\"comment/3292\",[]],[\"name/3293\",[749,71.865]],[\"comment/3293\",[]],[\"name/3294\",[894,84.86]],[\"comment/3294\",[]],[\"name/3295\",[362,73.872]],[\"comment/3295\",[]],[\"name/3296\",[681,64.487]],[\"comment/3296\",[]],[\"name/3297\",[876,79.751]],[\"comment/3297\",[]],[\"name/3298\",[895,84.86]],[\"comment/3298\",[]],[\"name/3299\",[153,56.922]],[\"comment/3299\",[]],[\"name/3300\",[154,56.922]],[\"comment/3300\",[]],[\"name/3301\",[896,84.86]],[\"comment/3301\",[]],[\"name/3302\",[105,57.339]],[\"comment/3302\",[]],[\"name/3303\",[412,63.653]],[\"comment/3303\",[]],[\"name/3304\",[411,64.487]],[\"comment/3304\",[]],[\"name/3305\",[10,57.774]],[\"comment/3305\",[]],[\"name/3306\",[751,70.194]],[\"comment/3306\",[]],[\"name/3307\",[752,70.194]],[\"comment/3307\",[]],[\"name/3308\",[526,73.872]],[\"comment/3308\",[]],[\"name/3309\",[1,57.339]],[\"comment/3309\",[]],[\"name/3310\",[2,46.209]],[\"comment/3310\",[]],[\"name/3311\",[98,60.287]],[\"comment/3311\",[]],[\"name/3312\",[99,59.732]],[\"comment/3312\",[]],[\"name/3313\",[8,46.934]],[\"comment/3313\",[]],[\"name/3314\",[9,44.076]],[\"comment/3314\",[]],[\"name/3315\",[897,84.86]],[\"comment/3315\",[]],[\"name/3316\",[16,49.491]],[\"comment/3316\",[]],[\"name/3317\",[766,76.385]],[\"comment/3317\",[]],[\"name/3318\",[245,60.876]],[\"comment/3318\",[]],[\"name/3319\",[242,71.865]],[\"comment/3319\",[]],[\"name/3320\",[246,71.865]],[\"comment/3320\",[]],[\"name/3321\",[898,76.385]],[\"comment/3321\",[]],[\"name/3322\",[381,67.51]],[\"comment/3322\",[]],[\"name/3323\",[159,59.732]],[\"comment/3323\",[]],[\"name/3324\",[56,47.086]],[\"comment/3324\",[]],[\"name/3325\",[124,54.096]],[\"comment/3325\",[]],[\"name/3326\",[103,56.522]],[\"comment/3326\",[]],[\"name/3327\",[19,44.657]],[\"comment/3327\",[]],[\"name/3328\",[104,59.732]],[\"comment/3328\",[]],[\"name/3329\",[105,57.339]],[\"comment/3329\",[]],[\"name/3330\",[106,59.732]],[\"comment/3330\",[]],[\"name/3331\",[11,52.935]],[\"comment/3331\",[]],[\"name/3332\",[12,44.421]],[\"comment/3332\",[]],[\"name/3333\",[107,60.287]],[\"comment/3333\",[]],[\"name/3334\",[19,44.657]],[\"comment/3334\",[]],[\"name/3335\",[108,60.287]],[\"comment/3335\",[]],[\"name/3336\",[109,60.287]],[\"comment/3336\",[]],[\"name/3337\",[110,57.339]],[\"comment/3337\",[]],[\"name/3338\",[111,60.287]],[\"comment/3338\",[]],[\"name/3339\",[112,60.287]],[\"comment/3339\",[]],[\"name/3340\",[113,57.774]],[\"comment/3340\",[]],[\"name/3341\",[114,60.287]],[\"comment/3341\",[]],[\"name/3342\",[115,60.287]],[\"comment/3342\",[]],[\"name/3343\",[116,56.922]],[\"comment/3343\",[]],[\"name/3344\",[60,43.21]],[\"comment/3344\",[]],[\"name/3345\",[117,58.705]],[\"comment/3345\",[]],[\"name/3346\",[118,60.287]],[\"comment/3346\",[]],[\"name/3347\",[119,60.287]],[\"comment/3347\",[]],[\"name/3348\",[120,59.732]],[\"comment/3348\",[]],[\"name/3349\",[121,60.287]],[\"comment/3349\",[]],[\"name/3350\",[122,54.408]],[\"comment/3350\",[]],[\"name/3351\",[123,54.408]],[\"comment/3351\",[]],[\"name/3352\",[125,60.287]],[\"comment/3352\",[]],[\"name/3353\",[126,60.287]],[\"comment/3353\",[]],[\"name/3354\",[127,60.287]],[\"comment/3354\",[]],[\"name/3355\",[128,60.287]],[\"comment/3355\",[]],[\"name/3356\",[129,59.732]],[\"comment/3356\",[]],[\"name/3357\",[130,60.287]],[\"comment/3357\",[]],[\"name/3358\",[131,60.287]],[\"comment/3358\",[]],[\"name/3359\",[132,59.732]],[\"comment/3359\",[]],[\"name/3360\",[133,60.287]],[\"comment/3360\",[]],[\"name/3361\",[134,60.287]],[\"comment/3361\",[]],[\"name/3362\",[135,60.287]],[\"comment/3362\",[]],[\"name/3363\",[136,60.287]],[\"comment/3363\",[]],[\"name/3364\",[137,59.205]],[\"comment/3364\",[]],[\"name/3365\",[138,59.732]],[\"comment/3365\",[]],[\"name/3366\",[139,59.732]],[\"comment/3366\",[]],[\"name/3367\",[140,59.732]],[\"comment/3367\",[]],[\"name/3368\",[141,59.732]],[\"comment/3368\",[]],[\"name/3369\",[142,60.287]],[\"comment/3369\",[]],[\"name/3370\",[143,60.287]],[\"comment/3370\",[]],[\"name/3371\",[144,60.287]],[\"comment/3371\",[]],[\"name/3372\",[145,60.287]],[\"comment/3372\",[]],[\"name/3373\",[146,60.287]],[\"comment/3373\",[]],[\"name/3374\",[147,60.287]],[\"comment/3374\",[]],[\"name/3375\",[148,60.287]],[\"comment/3375\",[]],[\"name/3376\",[149,60.287]],[\"comment/3376\",[]],[\"name/3377\",[150,58.228]],[\"comment/3377\",[]],[\"name/3378\",[151,60.287]],[\"comment/3378\",[]],[\"name/3379\",[152,60.287]],[\"comment/3379\",[]],[\"name/3380\",[12,44.421]],[\"comment/3380\",[]],[\"name/3381\",[153,56.922]],[\"comment/3381\",[]],[\"name/3382\",[154,56.922]],[\"comment/3382\",[]],[\"name/3383\",[155,60.287]],[\"comment/3383\",[]],[\"name/3384\",[156,60.287]],[\"comment/3384\",[]],[\"name/3385\",[157,60.287]],[\"comment/3385\",[]],[\"name/3386\",[158,56.922]],[\"comment/3386\",[]],[\"name/3387\",[160,59.732]],[\"comment/3387\",[]],[\"name/3388\",[161,60.287]],[\"comment/3388\",[]],[\"name/3389\",[162,60.287]],[\"comment/3389\",[]],[\"name/3390\",[163,60.287]],[\"comment/3390\",[]],[\"name/3391\",[164,60.287]],[\"comment/3391\",[]],[\"name/3392\",[165,60.287]],[\"comment/3392\",[]],[\"name/3393\",[166,57.339]],[\"comment/3393\",[]],[\"name/3394\",[167,59.732]],[\"comment/3394\",[]],[\"name/3395\",[168,59.732]],[\"comment/3395\",[]],[\"name/3396\",[20,50.513]],[\"comment/3396\",[]],[\"name/3397\",[35,52.664]],[\"comment/3397\",[]],[\"name/3398\",[36,52.664]],[\"comment/3398\",[]],[\"name/3399\",[169,53.793]],[\"comment/3399\",[]],[\"name/3400\",[170,59.205]],[\"comment/3400\",[]],[\"name/3401\",[171,59.732]],[\"comment/3401\",[]],[\"name/3402\",[172,59.732]],[\"comment/3402\",[]],[\"name/3403\",[173,59.732]],[\"comment/3403\",[]],[\"name/3404\",[174,59.732]],[\"comment/3404\",[]],[\"name/3405\",[175,59.732]],[\"comment/3405\",[]],[\"name/3406\",[176,59.732]],[\"comment/3406\",[]],[\"name/3407\",[177,59.732]],[\"comment/3407\",[]],[\"name/3408\",[178,59.732]],[\"comment/3408\",[]],[\"name/3409\",[102,59.732]],[\"comment/3409\",[]],[\"name/3410\",[179,58.228]],[\"comment/3410\",[]],[\"name/3411\",[180,59.732]],[\"comment/3411\",[]],[\"name/3412\",[181,59.732]],[\"comment/3412\",[]],[\"name/3413\",[182,56.922]],[\"comment/3413\",[]],[\"name/3414\",[183,59.205]],[\"comment/3414\",[]],[\"name/3415\",[184,59.732]],[\"comment/3415\",[]],[\"name/3416\",[185,59.732]],[\"comment/3416\",[]],[\"name/3417\",[186,59.732]],[\"comment/3417\",[]],[\"name/3418\",[187,59.732]],[\"comment/3418\",[]],[\"name/3419\",[188,59.732]],[\"comment/3419\",[]],[\"name/3420\",[28,53.498]],[\"comment/3420\",[]],[\"name/3421\",[26,53.498]],[\"comment/3421\",[]],[\"name/3422\",[27,53.498]],[\"comment/3422\",[]],[\"name/3423\",[38,47.086]],[\"comment/3423\",[]],[\"name/3424\",[39,47.086]],[\"comment/3424\",[]],[\"name/3425\",[40,47.086]],[\"comment/3425\",[]],[\"name/3426\",[41,47.086]],[\"comment/3426\",[]],[\"name/3427\",[42,47.086]],[\"comment/3427\",[]],[\"name/3428\",[43,47.086]],[\"comment/3428\",[]],[\"name/3429\",[44,47.086]],[\"comment/3429\",[]],[\"name/3430\",[45,47.086]],[\"comment/3430\",[]],[\"name/3431\",[46,47.086]],[\"comment/3431\",[]],[\"name/3432\",[47,47.086]],[\"comment/3432\",[]],[\"name/3433\",[48,47.086]],[\"comment/3433\",[]],[\"name/3434\",[49,47.086]],[\"comment/3434\",[]],[\"name/3435\",[50,47.086]],[\"comment/3435\",[]],[\"name/3436\",[51,47.086]],[\"comment/3436\",[]],[\"name/3437\",[52,47.086]],[\"comment/3437\",[]],[\"name/3438\",[53,47.086]],[\"comment/3438\",[]],[\"name/3439\",[54,47.086]],[\"comment/3439\",[]],[\"name/3440\",[55,47.086]],[\"comment/3440\",[]],[\"name/3441\",[57,46.785]],[\"comment/3441\",[]],[\"name/3442\",[58,46.785]],[\"comment/3442\",[]],[\"name/3443\",[59,47.086]],[\"comment/3443\",[]],[\"name/3444\",[60,43.21]],[\"comment/3444\",[]],[\"name/3445\",[61,46.638]],[\"comment/3445\",[]],[\"name/3446\",[62,46.638]],[\"comment/3446\",[]],[\"name/3447\",[63,47.086]],[\"comment/3447\",[]],[\"name/3448\",[64,46.934]],[\"comment/3448\",[]],[\"name/3449\",[65,46.934]],[\"comment/3449\",[]],[\"name/3450\",[66,47.086]],[\"comment/3450\",[]],[\"name/3451\",[67,47.086]],[\"comment/3451\",[]],[\"name/3452\",[68,47.086]],[\"comment/3452\",[]],[\"name/3453\",[69,46.934]],[\"comment/3453\",[]],[\"name/3454\",[70,46.785]],[\"comment/3454\",[]],[\"name/3455\",[71,46.785]],[\"comment/3455\",[]],[\"name/3456\",[513,73.872]],[\"comment/3456\",[]],[\"name/3457\",[2,46.209]],[\"comment/3457\",[]],[\"name/3458\",[3,58.228]],[\"comment/3458\",[]],[\"name/3459\",[6,54.096]],[\"comment/3459\",[]],[\"name/3460\",[7,59.732]],[\"comment/3460\",[]],[\"name/3461\",[8,46.934]],[\"comment/3461\",[]],[\"name/3462\",[9,44.076]],[\"comment/3462\",[]],[\"name/3463\",[103,56.522]],[\"comment/3463\",[]],[\"name/3464\",[20,50.513]],[\"comment/3464\",[]],[\"name/3465\",[16,49.491]],[\"comment/3465\",[]],[\"name/3466\",[19,44.657]],[\"comment/3466\",[]],[\"name/3467\",[21,60.876]],[\"comment/3467\",[]],[\"name/3468\",[22,60.876]],[\"comment/3468\",[]],[\"name/3469\",[17,60.876]],[\"comment/3469\",[]],[\"name/3470\",[23,60.876]],[\"comment/3470\",[]],[\"name/3471\",[24,60.876]],[\"comment/3471\",[]],[\"name/3472\",[25,60.876]],[\"comment/3472\",[]],[\"name/3473\",[26,53.498]],[\"comment/3473\",[]],[\"name/3474\",[27,53.498]],[\"comment/3474\",[]],[\"name/3475\",[28,53.498]],[\"comment/3475\",[]],[\"name/3476\",[29,56.137]],[\"comment/3476\",[]],[\"name/3477\",[30,55.767]],[\"comment/3477\",[]],[\"name/3478\",[31,60.876]],[\"comment/3478\",[]],[\"name/3479\",[32,59.732]],[\"comment/3479\",[]],[\"name/3480\",[33,60.876]],[\"comment/3480\",[]],[\"name/3481\",[34,60.876]],[\"comment/3481\",[]],[\"name/3482\",[35,52.664]],[\"comment/3482\",[]],[\"name/3483\",[36,52.664]],[\"comment/3483\",[]],[\"name/3484\",[37,60.876]],[\"comment/3484\",[]],[\"name/3485\",[38,47.086]],[\"comment/3485\",[]],[\"name/3486\",[39,47.086]],[\"comment/3486\",[]],[\"name/3487\",[40,47.086]],[\"comment/3487\",[]],[\"name/3488\",[41,47.086]],[\"comment/3488\",[]],[\"name/3489\",[42,47.086]],[\"comment/3489\",[]],[\"name/3490\",[43,47.086]],[\"comment/3490\",[]],[\"name/3491\",[44,47.086]],[\"comment/3491\",[]],[\"name/3492\",[45,47.086]],[\"comment/3492\",[]],[\"name/3493\",[46,47.086]],[\"comment/3493\",[]],[\"name/3494\",[47,47.086]],[\"comment/3494\",[]],[\"name/3495\",[48,47.086]],[\"comment/3495\",[]],[\"name/3496\",[49,47.086]],[\"comment/3496\",[]],[\"name/3497\",[50,47.086]],[\"comment/3497\",[]],[\"name/3498\",[51,47.086]],[\"comment/3498\",[]],[\"name/3499\",[52,47.086]],[\"comment/3499\",[]],[\"name/3500\",[53,47.086]],[\"comment/3500\",[]],[\"name/3501\",[54,47.086]],[\"comment/3501\",[]],[\"name/3502\",[55,47.086]],[\"comment/3502\",[]],[\"name/3503\",[56,47.086]],[\"comment/3503\",[]],[\"name/3504\",[57,46.785]],[\"comment/3504\",[]],[\"name/3505\",[58,46.785]],[\"comment/3505\",[]],[\"name/3506\",[59,47.086]],[\"comment/3506\",[]],[\"name/3507\",[60,43.21]],[\"comment/3507\",[]],[\"name/3508\",[61,46.638]],[\"comment/3508\",[]],[\"name/3509\",[62,46.638]],[\"comment/3509\",[]],[\"name/3510\",[63,47.086]],[\"comment/3510\",[]],[\"name/3511\",[64,46.934]],[\"comment/3511\",[]],[\"name/3512\",[65,46.934]],[\"comment/3512\",[]],[\"name/3513\",[66,47.086]],[\"comment/3513\",[]],[\"name/3514\",[67,47.086]],[\"comment/3514\",[]],[\"name/3515\",[68,47.086]],[\"comment/3515\",[]],[\"name/3516\",[69,46.934]],[\"comment/3516\",[]],[\"name/3517\",[70,46.785]],[\"comment/3517\",[]],[\"name/3518\",[71,46.785]],[\"comment/3518\",[]],[\"name/3519\",[899,84.86]],[\"comment/3519\",[]],[\"name/3520\",[900,84.86]],[\"comment/3520\",[]],[\"name/3521\",[309,79.751]],[\"comment/3521\",[]],[\"name/3522\",[901,84.86]],[\"comment/3522\",[]],[\"name/3523\",[902,84.86]],[\"comment/3523\",[]],[\"name/3524\",[498,71.865]],[\"comment/3524\",[]],[\"name/3525\",[1,57.339]],[\"comment/3525\",[]],[\"name/3526\",[2,46.209]],[\"comment/3526\",[]],[\"name/3527\",[339,76.385]],[\"comment/3527\",[]],[\"name/3528\",[3,58.228]],[\"comment/3528\",[]],[\"name/3529\",[903,84.86]],[\"comment/3529\",[]],[\"name/3530\",[904,84.86]],[\"comment/3530\",[]],[\"name/3531\",[905,84.86]],[\"comment/3531\",[]],[\"name/3532\",[906,84.86]],[\"comment/3532\",[]],[\"name/3533\",[907,84.86]],[\"comment/3533\",[]],[\"name/3534\",[6,54.096]],[\"comment/3534\",[]],[\"name/3535\",[7,59.732]],[\"comment/3535\",[]],[\"name/3536\",[8,46.934]],[\"comment/3536\",[]],[\"name/3537\",[9,44.076]],[\"comment/3537\",[]],[\"name/3538\",[11,52.935]],[\"comment/3538\",[]],[\"name/3539\",[12,44.421]],[\"comment/3539\",[]],[\"name/3540\",[908,84.86]],[\"comment/3540\",[]],[\"name/3541\",[909,84.86]],[\"comment/3541\",[]],[\"name/3542\",[14,73.872]],[\"comment/3542\",[]],[\"name/3543\",[158,56.922]],[\"comment/3543\",[]],[\"name/3544\",[910,84.86]],[\"comment/3544\",[]],[\"name/3545\",[911,84.86]],[\"comment/3545\",[]],[\"name/3546\",[912,84.86]],[\"comment/3546\",[]],[\"name/3547\",[19,44.657]],[\"comment/3547\",[]],[\"name/3548\",[16,49.491]],[\"comment/3548\",[]],[\"name/3549\",[20,50.513]],[\"comment/3549\",[]],[\"name/3550\",[21,60.876]],[\"comment/3550\",[]],[\"name/3551\",[22,60.876]],[\"comment/3551\",[]],[\"name/3552\",[17,60.876]],[\"comment/3552\",[]],[\"name/3553\",[23,60.876]],[\"comment/3553\",[]],[\"name/3554\",[24,60.876]],[\"comment/3554\",[]],[\"name/3555\",[25,60.876]],[\"comment/3555\",[]],[\"name/3556\",[26,53.498]],[\"comment/3556\",[]],[\"name/3557\",[27,53.498]],[\"comment/3557\",[]],[\"name/3558\",[28,53.498]],[\"comment/3558\",[]],[\"name/3559\",[29,56.137]],[\"comment/3559\",[]],[\"name/3560\",[30,55.767]],[\"comment/3560\",[]],[\"name/3561\",[31,60.876]],[\"comment/3561\",[]],[\"name/3562\",[32,59.732]],[\"comment/3562\",[]],[\"name/3563\",[33,60.876]],[\"comment/3563\",[]],[\"name/3564\",[34,60.876]],[\"comment/3564\",[]],[\"name/3565\",[35,52.664]],[\"comment/3565\",[]],[\"name/3566\",[36,52.664]],[\"comment/3566\",[]],[\"name/3567\",[37,60.876]],[\"comment/3567\",[]],[\"name/3568\",[38,47.086]],[\"comment/3568\",[]],[\"name/3569\",[39,47.086]],[\"comment/3569\",[]],[\"name/3570\",[40,47.086]],[\"comment/3570\",[]],[\"name/3571\",[41,47.086]],[\"comment/3571\",[]],[\"name/3572\",[42,47.086]],[\"comment/3572\",[]],[\"name/3573\",[43,47.086]],[\"comment/3573\",[]],[\"name/3574\",[44,47.086]],[\"comment/3574\",[]],[\"name/3575\",[45,47.086]],[\"comment/3575\",[]],[\"name/3576\",[46,47.086]],[\"comment/3576\",[]],[\"name/3577\",[47,47.086]],[\"comment/3577\",[]],[\"name/3578\",[48,47.086]],[\"comment/3578\",[]],[\"name/3579\",[49,47.086]],[\"comment/3579\",[]],[\"name/3580\",[50,47.086]],[\"comment/3580\",[]],[\"name/3581\",[51,47.086]],[\"comment/3581\",[]],[\"name/3582\",[52,47.086]],[\"comment/3582\",[]],[\"name/3583\",[53,47.086]],[\"comment/3583\",[]],[\"name/3584\",[54,47.086]],[\"comment/3584\",[]],[\"name/3585\",[55,47.086]],[\"comment/3585\",[]],[\"name/3586\",[56,47.086]],[\"comment/3586\",[]],[\"name/3587\",[57,46.785]],[\"comment/3587\",[]],[\"name/3588\",[58,46.785]],[\"comment/3588\",[]],[\"name/3589\",[59,47.086]],[\"comment/3589\",[]],[\"name/3590\",[60,43.21]],[\"comment/3590\",[]],[\"name/3591\",[61,46.638]],[\"comment/3591\",[]],[\"name/3592\",[62,46.638]],[\"comment/3592\",[]],[\"name/3593\",[63,47.086]],[\"comment/3593\",[]],[\"name/3594\",[64,46.934]],[\"comment/3594\",[]],[\"name/3595\",[65,46.934]],[\"comment/3595\",[]],[\"name/3596\",[66,47.086]],[\"comment/3596\",[]],[\"name/3597\",[67,47.086]],[\"comment/3597\",[]],[\"name/3598\",[68,47.086]],[\"comment/3598\",[]],[\"name/3599\",[69,46.934]],[\"comment/3599\",[]],[\"name/3600\",[70,46.785]],[\"comment/3600\",[]],[\"name/3601\",[71,46.785]],[\"comment/3601\",[]],[\"name/3602\",[527,76.385]],[\"comment/3602\",[]],[\"name/3603\",[2,46.209]],[\"comment/3603\",[]],[\"name/3604\",[398,79.751]],[\"comment/3604\",[]],[\"name/3605\",[3,58.228]],[\"comment/3605\",[]],[\"name/3606\",[6,54.096]],[\"comment/3606\",[]],[\"name/3607\",[7,59.732]],[\"comment/3607\",[]],[\"name/3608\",[8,46.934]],[\"comment/3608\",[]],[\"name/3609\",[9,44.076]],[\"comment/3609\",[]],[\"name/3610\",[17,60.876]],[\"comment/3610\",[]],[\"name/3611\",[19,44.657]],[\"comment/3611\",[]],[\"name/3612\",[16,49.491]],[\"comment/3612\",[]],[\"name/3613\",[20,50.513]],[\"comment/3613\",[]],[\"name/3614\",[21,60.876]],[\"comment/3614\",[]],[\"name/3615\",[22,60.876]],[\"comment/3615\",[]],[\"name/3616\",[23,60.876]],[\"comment/3616\",[]],[\"name/3617\",[24,60.876]],[\"comment/3617\",[]],[\"name/3618\",[25,60.876]],[\"comment/3618\",[]],[\"name/3619\",[26,53.498]],[\"comment/3619\",[]],[\"name/3620\",[27,53.498]],[\"comment/3620\",[]],[\"name/3621\",[28,53.498]],[\"comment/3621\",[]],[\"name/3622\",[29,56.137]],[\"comment/3622\",[]],[\"name/3623\",[30,55.767]],[\"comment/3623\",[]],[\"name/3624\",[31,60.876]],[\"comment/3624\",[]],[\"name/3625\",[32,59.732]],[\"comment/3625\",[]],[\"name/3626\",[33,60.876]],[\"comment/3626\",[]],[\"name/3627\",[34,60.876]],[\"comment/3627\",[]],[\"name/3628\",[35,52.664]],[\"comment/3628\",[]],[\"name/3629\",[36,52.664]],[\"comment/3629\",[]],[\"name/3630\",[37,60.876]],[\"comment/3630\",[]],[\"name/3631\",[38,47.086]],[\"comment/3631\",[]],[\"name/3632\",[39,47.086]],[\"comment/3632\",[]],[\"name/3633\",[40,47.086]],[\"comment/3633\",[]],[\"name/3634\",[41,47.086]],[\"comment/3634\",[]],[\"name/3635\",[42,47.086]],[\"comment/3635\",[]],[\"name/3636\",[43,47.086]],[\"comment/3636\",[]],[\"name/3637\",[44,47.086]],[\"comment/3637\",[]],[\"name/3638\",[45,47.086]],[\"comment/3638\",[]],[\"name/3639\",[46,47.086]],[\"comment/3639\",[]],[\"name/3640\",[47,47.086]],[\"comment/3640\",[]],[\"name/3641\",[48,47.086]],[\"comment/3641\",[]],[\"name/3642\",[49,47.086]],[\"comment/3642\",[]],[\"name/3643\",[50,47.086]],[\"comment/3643\",[]],[\"name/3644\",[51,47.086]],[\"comment/3644\",[]],[\"name/3645\",[52,47.086]],[\"comment/3645\",[]],[\"name/3646\",[53,47.086]],[\"comment/3646\",[]],[\"name/3647\",[54,47.086]],[\"comment/3647\",[]],[\"name/3648\",[55,47.086]],[\"comment/3648\",[]],[\"name/3649\",[56,47.086]],[\"comment/3649\",[]],[\"name/3650\",[57,46.785]],[\"comment/3650\",[]],[\"name/3651\",[58,46.785]],[\"comment/3651\",[]],[\"name/3652\",[59,47.086]],[\"comment/3652\",[]],[\"name/3653\",[60,43.21]],[\"comment/3653\",[]],[\"name/3654\",[61,46.638]],[\"comment/3654\",[]],[\"name/3655\",[62,46.638]],[\"comment/3655\",[]],[\"name/3656\",[63,47.086]],[\"comment/3656\",[]],[\"name/3657\",[64,46.934]],[\"comment/3657\",[]],[\"name/3658\",[65,46.934]],[\"comment/3658\",[]],[\"name/3659\",[66,47.086]],[\"comment/3659\",[]],[\"name/3660\",[67,47.086]],[\"comment/3660\",[]],[\"name/3661\",[68,47.086]],[\"comment/3661\",[]],[\"name/3662\",[69,46.934]],[\"comment/3662\",[]],[\"name/3663\",[70,46.785]],[\"comment/3663\",[]],[\"name/3664\",[71,46.785]],[\"comment/3664\",[]],[\"name/3665\",[913,84.86]],[\"comment/3665\",[]],[\"name/3666\",[914,84.86]],[\"comment/3666\",[]],[\"name/3667\",[12,44.421]],[\"comment/3667\",[]],[\"name/3668\",[915,84.86]],[\"comment/3668\",[]],[\"name/3669\",[12,44.421]],[\"comment/3669\",[]],[\"name/3670\",[916,84.86]],[\"comment/3670\",[]],[\"name/3671\",[917,84.86]],[\"comment/3671\",[]],[\"name/3672\",[918,84.86]],[\"comment/3672\",[]],[\"name/3673\",[919,79.751]],[\"comment/3673\",[]],[\"name/3674\",[920,84.86]],[\"comment/3674\",[]],[\"name/3675\",[921,84.86]],[\"comment/3675\",[]],[\"name/3676\",[922,84.86]],[\"comment/3676\",[]],[\"name/3677\",[923,84.86]],[\"comment/3677\",[]],[\"name/3678\",[924,84.86]],[\"comment/3678\",[]],[\"name/3679\",[925,84.86]],[\"comment/3679\",[]],[\"name/3680\",[926,84.86]],[\"comment/3680\",[]],[\"name/3681\",[927,84.86]],[\"comment/3681\",[]],[\"name/3682\",[928,84.86]],[\"comment/3682\",[]],[\"name/3683\",[929,84.86]],[\"comment/3683\",[]],[\"name/3684\",[930,84.86]],[\"comment/3684\",[]],[\"name/3685\",[931,84.86]],[\"comment/3685\",[]],[\"name/3686\",[932,84.86]],[\"comment/3686\",[]],[\"name/3687\",[933,84.86]],[\"comment/3687\",[]],[\"name/3688\",[934,84.86]],[\"comment/3688\",[]],[\"name/3689\",[462,79.751]],[\"comment/3689\",[]],[\"name/3690\",[403,73.872]],[\"comment/3690\",[]],[\"name/3691\",[463,76.385]],[\"comment/3691\",[]],[\"name/3692\",[1,57.339]],[\"comment/3692\",[]],[\"name/3693\",[9,44.076]],[\"comment/3693\",[]],[\"name/3694\",[466,76.385]],[\"comment/3694\",[]],[\"name/3695\",[935,84.86]],[\"comment/3695\",[]],[\"name/3696\",[936,84.86]],[\"comment/3696\",[]],[\"name/3697\",[937,84.86]],[\"comment/3697\",[]],[\"name/3698\",[938,84.86]],[\"comment/3698\",[]],[\"name/3699\",[939,84.86]],[\"comment/3699\",[]],[\"name/3700\",[940,84.86]],[\"comment/3700\",[]],[\"name/3701\",[919,79.751]],[\"comment/3701\",[]],[\"name/3702\",[512,71.865]],[\"comment/3702\",[]],[\"name/3703\",[1,57.339]],[\"comment/3703\",[]],[\"name/3704\",[2,46.209]],[\"comment/3704\",[]],[\"name/3705\",[8,46.934]],[\"comment/3705\",[]],[\"name/3706\",[319,66.398]],[\"comment/3706\",[]],[\"name/3707\",[10,57.774]],[\"comment/3707\",[]],[\"name/3708\",[12,44.421]],[\"comment/3708\",[]],[\"name/3709\",[224,68.762]],[\"comment/3709\",[]],[\"name/3710\",[941,84.86]],[\"comment/3710\",[]],[\"name/3711\",[942,84.86]],[\"comment/3711\",[]],[\"name/3712\",[943,76.385]],[\"comment/3712\",[]],[\"name/3713\",[944,84.86]],[\"comment/3713\",[]],[\"name/3714\",[945,84.86]],[\"comment/3714\",[]],[\"name/3715\",[946,84.86]],[\"comment/3715\",[]],[\"name/3716\",[9,44.076]],[\"comment/3716\",[]],[\"name/3717\",[11,52.935]],[\"comment/3717\",[]],[\"name/3718\",[12,44.421]],[\"comment/3718\",[]],[\"name/3719\",[947,76.385]],[\"comment/3719\",[]],[\"name/3720\",[948,79.751]],[\"comment/3720\",[]],[\"name/3721\",[949,84.86]],[\"comment/3721\",[]],[\"name/3722\",[950,84.86]],[\"comment/3722\",[]],[\"name/3723\",[101,70.194]],[\"comment/3723\",[]],[\"name/3724\",[951,84.86]],[\"comment/3724\",[]],[\"name/3725\",[381,67.51]],[\"comment/3725\",[]],[\"name/3726\",[952,84.86]],[\"comment/3726\",[]],[\"name/3727\",[953,84.86]],[\"comment/3727\",[]],[\"name/3728\",[19,44.657]],[\"comment/3728\",[]],[\"name/3729\",[38,47.086]],[\"comment/3729\",[]],[\"name/3730\",[39,47.086]],[\"comment/3730\",[]],[\"name/3731\",[40,47.086]],[\"comment/3731\",[]],[\"name/3732\",[41,47.086]],[\"comment/3732\",[]],[\"name/3733\",[42,47.086]],[\"comment/3733\",[]],[\"name/3734\",[43,47.086]],[\"comment/3734\",[]],[\"name/3735\",[44,47.086]],[\"comment/3735\",[]],[\"name/3736\",[45,47.086]],[\"comment/3736\",[]],[\"name/3737\",[46,47.086]],[\"comment/3737\",[]],[\"name/3738\",[47,47.086]],[\"comment/3738\",[]],[\"name/3739\",[48,47.086]],[\"comment/3739\",[]],[\"name/3740\",[49,47.086]],[\"comment/3740\",[]],[\"name/3741\",[50,47.086]],[\"comment/3741\",[]],[\"name/3742\",[51,47.086]],[\"comment/3742\",[]],[\"name/3743\",[52,47.086]],[\"comment/3743\",[]],[\"name/3744\",[53,47.086]],[\"comment/3744\",[]],[\"name/3745\",[54,47.086]],[\"comment/3745\",[]],[\"name/3746\",[55,47.086]],[\"comment/3746\",[]],[\"name/3747\",[56,47.086]],[\"comment/3747\",[]],[\"name/3748\",[57,46.785]],[\"comment/3748\",[]],[\"name/3749\",[58,46.785]],[\"comment/3749\",[]],[\"name/3750\",[59,47.086]],[\"comment/3750\",[]],[\"name/3751\",[60,43.21]],[\"comment/3751\",[]],[\"name/3752\",[61,46.638]],[\"comment/3752\",[]],[\"name/3753\",[62,46.638]],[\"comment/3753\",[]],[\"name/3754\",[63,47.086]],[\"comment/3754\",[]],[\"name/3755\",[64,46.934]],[\"comment/3755\",[]],[\"name/3756\",[65,46.934]],[\"comment/3756\",[]],[\"name/3757\",[66,47.086]],[\"comment/3757\",[]],[\"name/3758\",[67,47.086]],[\"comment/3758\",[]],[\"name/3759\",[68,47.086]],[\"comment/3759\",[]],[\"name/3760\",[69,46.934]],[\"comment/3760\",[]],[\"name/3761\",[70,46.785]],[\"comment/3761\",[]],[\"name/3762\",[71,46.785]],[\"comment/3762\",[]],[\"name/3763\",[954,84.86]],[\"comment/3763\",[]],[\"name/3764\",[470,76.385]],[\"comment/3764\",[]],[\"name/3765\",[955,79.751]],[\"comment/3765\",[]],[\"name/3766\",[663,79.751]],[\"comment/3766\",[]],[\"name/3767\",[956,84.86]],[\"comment/3767\",[]],[\"name/3768\",[528,79.751]],[\"comment/3768\",[]],[\"name/3769\",[957,84.86]],[\"comment/3769\",[]],[\"name/3770\",[958,84.86]],[\"comment/3770\",[]],[\"name/3771\",[959,84.86]],[\"comment/3771\",[]],[\"name/3772\",[9,44.076]],[\"comment/3772\",[]],[\"name/3773\",[267,73.872]],[\"comment/3773\",[]],[\"name/3774\",[960,84.86]],[\"comment/3774\",[]],[\"name/3775\",[961,84.86]],[\"comment/3775\",[]],[\"name/3776\",[962,84.86]],[\"comment/3776\",[]],[\"name/3777\",[963,84.86]],[\"comment/3777\",[]],[\"name/3778\",[964,84.86]],[\"comment/3778\",[]],[\"name/3779\",[965,84.86]],[\"comment/3779\",[]],[\"name/3780\",[966,84.86]],[\"comment/3780\",[]],[\"name/3781\",[967,84.86]],[\"comment/3781\",[]],[\"name/3782\",[968,84.86]],[\"comment/3782\",[]],[\"name/3783\",[969,84.86]],[\"comment/3783\",[]],[\"name/3784\",[153,56.922]],[\"comment/3784\",[]],[\"name/3785\",[154,56.922]],[\"comment/3785\",[]],[\"name/3786\",[225,60.876]],[\"comment/3786\",[]],[\"name/3787\",[255,65.397]],[\"comment/3787\",[]],[\"name/3788\",[970,84.86]],[\"comment/3788\",[]],[\"name/3789\",[971,84.86]],[\"comment/3789\",[]],[\"name/3790\",[529,76.385]],[\"comment/3790\",[]],[\"name/3791\",[2,46.209]],[\"comment/3791\",[]],[\"name/3792\",[9,44.076]],[\"comment/3792\",[]],[\"name/3793\",[267,73.872]],[\"comment/3793\",[]],[\"name/3794\",[271,76.385]],[\"comment/3794\",[]],[\"name/3795\",[272,76.385]],[\"comment/3795\",[]],[\"name/3796\",[273,76.385]],[\"comment/3796\",[]],[\"name/3797\",[274,76.385]],[\"comment/3797\",[]],[\"name/3798\",[275,76.385]],[\"comment/3798\",[]],[\"name/3799\",[276,76.385]],[\"comment/3799\",[]],[\"name/3800\",[277,76.385]],[\"comment/3800\",[]],[\"name/3801\",[278,76.385]],[\"comment/3801\",[]],[\"name/3802\",[116,56.922]],[\"comment/3802\",[]],[\"name/3803\",[280,76.385]],[\"comment/3803\",[]],[\"name/3804\",[279,73.872]],[\"comment/3804\",[]],[\"name/3805\",[281,76.385]],[\"comment/3805\",[]],[\"name/3806\",[282,76.385]],[\"comment/3806\",[]],[\"name/3807\",[283,76.385]],[\"comment/3807\",[]],[\"name/3808\",[284,76.385]],[\"comment/3808\",[]],[\"name/3809\",[285,76.385]],[\"comment/3809\",[]],[\"name/3810\",[286,76.385]],[\"comment/3810\",[]],[\"name/3811\",[287,76.385]],[\"comment/3811\",[]],[\"name/3812\",[288,76.385]],[\"comment/3812\",[]],[\"name/3813\",[289,76.385]],[\"comment/3813\",[]],[\"name/3814\",[290,68.762]],[\"comment/3814\",[]],[\"name/3815\",[291,76.385]],[\"comment/3815\",[]],[\"name/3816\",[293,76.385]],[\"comment/3816\",[]],[\"name/3817\",[294,76.385]],[\"comment/3817\",[]],[\"name/3818\",[295,76.385]],[\"comment/3818\",[]],[\"name/3819\",[268,76.385]],[\"comment/3819\",[]],[\"name/3820\",[269,76.385]],[\"comment/3820\",[]],[\"name/3821\",[270,73.872]],[\"comment/3821\",[]],[\"name/3822\",[292,76.385]],[\"comment/3822\",[]],[\"name/3823\",[296,73.872]],[\"comment/3823\",[]],[\"name/3824\",[297,73.872]],[\"comment/3824\",[]],[\"name/3825\",[61,46.638]],[\"comment/3825\",[]],[\"name/3826\",[62,46.638]],[\"comment/3826\",[]],[\"name/3827\",[60,43.21]],[\"comment/3827\",[]],[\"name/3828\",[298,76.385]],[\"comment/3828\",[]],[\"name/3829\",[972,84.86]],[\"comment/3829\",[]],[\"name/3830\",[545,79.751]],[\"comment/3830\",[]],[\"name/3831\",[265,79.751]],[\"comment/3831\",[]],[\"name/3832\",[973,79.751]],[\"comment/3832\",[]],[\"name/3833\",[546,79.751]],[\"comment/3833\",[]],[\"name/3834\",[325,71.865]],[\"comment/3834\",[]],[\"name/3835\",[228,76.385]],[\"comment/3835\",[]],[\"name/3836\",[229,76.385]],[\"comment/3836\",[]],[\"name/3837\",[480,76.385]],[\"comment/3837\",[]],[\"name/3838\",[974,84.86]],[\"comment/3838\",[]],[\"name/3839\",[975,84.86]],[\"comment/3839\",[]],[\"name/3840\",[976,84.86]],[\"comment/3840\",[]],[\"name/3841\",[977,84.86]],[\"comment/3841\",[]],[\"name/3842\",[978,79.751]],[\"comment/3842\",[]],[\"name/3843\",[979,84.86]],[\"comment/3843\",[]],[\"name/3844\",[980,84.86]],[\"comment/3844\",[]],[\"name/3845\",[9,44.076]],[\"comment/3845\",[]],[\"name/3846\",[279,73.872]],[\"comment/3846\",[]],[\"name/3847\",[57,46.785]],[\"comment/3847\",[]],[\"name/3848\",[490,73.872]],[\"comment/3848\",[]],[\"name/3849\",[2,46.209]],[\"comment/3849\",[]],[\"name/3850\",[98,60.287]],[\"comment/3850\",[]],[\"name/3851\",[99,59.732]],[\"comment/3851\",[]],[\"name/3852\",[8,46.934]],[\"comment/3852\",[]],[\"name/3853\",[9,44.076]],[\"comment/3853\",[]],[\"name/3854\",[744,76.385]],[\"comment/3854\",[]],[\"name/3855\",[56,47.086]],[\"comment/3855\",[]],[\"name/3856\",[103,56.522]],[\"comment/3856\",[]],[\"name/3857\",[745,70.194]],[\"comment/3857\",[]],[\"name/3858\",[134,60.287]],[\"comment/3858\",[]],[\"name/3859\",[19,44.657]],[\"comment/3859\",[]],[\"name/3860\",[104,59.732]],[\"comment/3860\",[]],[\"name/3861\",[105,57.339]],[\"comment/3861\",[]],[\"name/3862\",[106,59.732]],[\"comment/3862\",[]],[\"name/3863\",[11,52.935]],[\"comment/3863\",[]],[\"name/3864\",[12,44.421]],[\"comment/3864\",[]],[\"name/3865\",[107,60.287]],[\"comment/3865\",[]],[\"name/3866\",[19,44.657]],[\"comment/3866\",[]],[\"name/3867\",[108,60.287]],[\"comment/3867\",[]],[\"name/3868\",[109,60.287]],[\"comment/3868\",[]],[\"name/3869\",[110,57.339]],[\"comment/3869\",[]],[\"name/3870\",[111,60.287]],[\"comment/3870\",[]],[\"name/3871\",[112,60.287]],[\"comment/3871\",[]],[\"name/3872\",[113,57.774]],[\"comment/3872\",[]],[\"name/3873\",[114,60.287]],[\"comment/3873\",[]],[\"name/3874\",[115,60.287]],[\"comment/3874\",[]],[\"name/3875\",[116,56.922]],[\"comment/3875\",[]],[\"name/3876\",[60,43.21]],[\"comment/3876\",[]],[\"name/3877\",[117,58.705]],[\"comment/3877\",[]],[\"name/3878\",[118,60.287]],[\"comment/3878\",[]],[\"name/3879\",[119,60.287]],[\"comment/3879\",[]],[\"name/3880\",[120,59.732]],[\"comment/3880\",[]],[\"name/3881\",[121,60.287]],[\"comment/3881\",[]],[\"name/3882\",[122,54.408]],[\"comment/3882\",[]],[\"name/3883\",[123,54.408]],[\"comment/3883\",[]],[\"name/3884\",[124,54.096]],[\"comment/3884\",[]],[\"name/3885\",[125,60.287]],[\"comment/3885\",[]],[\"name/3886\",[126,60.287]],[\"comment/3886\",[]],[\"name/3887\",[127,60.287]],[\"comment/3887\",[]],[\"name/3888\",[128,60.287]],[\"comment/3888\",[]],[\"name/3889\",[129,59.732]],[\"comment/3889\",[]],[\"name/3890\",[130,60.287]],[\"comment/3890\",[]],[\"name/3891\",[131,60.287]],[\"comment/3891\",[]],[\"name/3892\",[132,59.732]],[\"comment/3892\",[]],[\"name/3893\",[133,60.287]],[\"comment/3893\",[]],[\"name/3894\",[135,60.287]],[\"comment/3894\",[]],[\"name/3895\",[136,60.287]],[\"comment/3895\",[]],[\"name/3896\",[137,59.205]],[\"comment/3896\",[]],[\"name/3897\",[138,59.732]],[\"comment/3897\",[]],[\"name/3898\",[139,59.732]],[\"comment/3898\",[]],[\"name/3899\",[140,59.732]],[\"comment/3899\",[]],[\"name/3900\",[141,59.732]],[\"comment/3900\",[]],[\"name/3901\",[142,60.287]],[\"comment/3901\",[]],[\"name/3902\",[143,60.287]],[\"comment/3902\",[]],[\"name/3903\",[144,60.287]],[\"comment/3903\",[]],[\"name/3904\",[145,60.287]],[\"comment/3904\",[]],[\"name/3905\",[146,60.287]],[\"comment/3905\",[]],[\"name/3906\",[147,60.287]],[\"comment/3906\",[]],[\"name/3907\",[148,60.287]],[\"comment/3907\",[]],[\"name/3908\",[149,60.287]],[\"comment/3908\",[]],[\"name/3909\",[150,58.228]],[\"comment/3909\",[]],[\"name/3910\",[151,60.287]],[\"comment/3910\",[]],[\"name/3911\",[152,60.287]],[\"comment/3911\",[]],[\"name/3912\",[12,44.421]],[\"comment/3912\",[]],[\"name/3913\",[153,56.922]],[\"comment/3913\",[]],[\"name/3914\",[154,56.922]],[\"comment/3914\",[]],[\"name/3915\",[155,60.287]],[\"comment/3915\",[]],[\"name/3916\",[156,60.287]],[\"comment/3916\",[]],[\"name/3917\",[157,60.287]],[\"comment/3917\",[]],[\"name/3918\",[158,56.922]],[\"comment/3918\",[]],[\"name/3919\",[159,59.732]],[\"comment/3919\",[]],[\"name/3920\",[160,59.732]],[\"comment/3920\",[]],[\"name/3921\",[161,60.287]],[\"comment/3921\",[]],[\"name/3922\",[162,60.287]],[\"comment/3922\",[]],[\"name/3923\",[163,60.287]],[\"comment/3923\",[]],[\"name/3924\",[164,60.287]],[\"comment/3924\",[]],[\"name/3925\",[165,60.287]],[\"comment/3925\",[]],[\"name/3926\",[166,57.339]],[\"comment/3926\",[]],[\"name/3927\",[167,59.732]],[\"comment/3927\",[]],[\"name/3928\",[168,59.732]],[\"comment/3928\",[]],[\"name/3929\",[20,50.513]],[\"comment/3929\",[]],[\"name/3930\",[16,49.491]],[\"comment/3930\",[]],[\"name/3931\",[35,52.664]],[\"comment/3931\",[]],[\"name/3932\",[36,52.664]],[\"comment/3932\",[]],[\"name/3933\",[169,53.793]],[\"comment/3933\",[]],[\"name/3934\",[170,59.205]],[\"comment/3934\",[]],[\"name/3935\",[171,59.732]],[\"comment/3935\",[]],[\"name/3936\",[172,59.732]],[\"comment/3936\",[]],[\"name/3937\",[173,59.732]],[\"comment/3937\",[]],[\"name/3938\",[174,59.732]],[\"comment/3938\",[]],[\"name/3939\",[175,59.732]],[\"comment/3939\",[]],[\"name/3940\",[176,59.732]],[\"comment/3940\",[]],[\"name/3941\",[177,59.732]],[\"comment/3941\",[]],[\"name/3942\",[178,59.732]],[\"comment/3942\",[]],[\"name/3943\",[102,59.732]],[\"comment/3943\",[]],[\"name/3944\",[179,58.228]],[\"comment/3944\",[]],[\"name/3945\",[180,59.732]],[\"comment/3945\",[]],[\"name/3946\",[181,59.732]],[\"comment/3946\",[]],[\"name/3947\",[182,56.922]],[\"comment/3947\",[]],[\"name/3948\",[183,59.205]],[\"comment/3948\",[]],[\"name/3949\",[184,59.732]],[\"comment/3949\",[]],[\"name/3950\",[185,59.732]],[\"comment/3950\",[]],[\"name/3951\",[186,59.732]],[\"comment/3951\",[]],[\"name/3952\",[187,59.732]],[\"comment/3952\",[]],[\"name/3953\",[188,59.732]],[\"comment/3953\",[]],[\"name/3954\",[28,53.498]],[\"comment/3954\",[]],[\"name/3955\",[26,53.498]],[\"comment/3955\",[]],[\"name/3956\",[27,53.498]],[\"comment/3956\",[]],[\"name/3957\",[38,47.086]],[\"comment/3957\",[]],[\"name/3958\",[39,47.086]],[\"comment/3958\",[]],[\"name/3959\",[40,47.086]],[\"comment/3959\",[]],[\"name/3960\",[41,47.086]],[\"comment/3960\",[]],[\"name/3961\",[42,47.086]],[\"comment/3961\",[]],[\"name/3962\",[43,47.086]],[\"comment/3962\",[]],[\"name/3963\",[44,47.086]],[\"comment/3963\",[]],[\"name/3964\",[45,47.086]],[\"comment/3964\",[]],[\"name/3965\",[46,47.086]],[\"comment/3965\",[]],[\"name/3966\",[47,47.086]],[\"comment/3966\",[]],[\"name/3967\",[48,47.086]],[\"comment/3967\",[]],[\"name/3968\",[49,47.086]],[\"comment/3968\",[]],[\"name/3969\",[50,47.086]],[\"comment/3969\",[]],[\"name/3970\",[51,47.086]],[\"comment/3970\",[]],[\"name/3971\",[52,47.086]],[\"comment/3971\",[]],[\"name/3972\",[53,47.086]],[\"comment/3972\",[]],[\"name/3973\",[54,47.086]],[\"comment/3973\",[]],[\"name/3974\",[55,47.086]],[\"comment/3974\",[]],[\"name/3975\",[57,46.785]],[\"comment/3975\",[]],[\"name/3976\",[58,46.785]],[\"comment/3976\",[]],[\"name/3977\",[59,47.086]],[\"comment/3977\",[]],[\"name/3978\",[60,43.21]],[\"comment/3978\",[]],[\"name/3979\",[61,46.638]],[\"comment/3979\",[]],[\"name/3980\",[62,46.638]],[\"comment/3980\",[]],[\"name/3981\",[63,47.086]],[\"comment/3981\",[]],[\"name/3982\",[64,46.934]],[\"comment/3982\",[]],[\"name/3983\",[65,46.934]],[\"comment/3983\",[]],[\"name/3984\",[66,47.086]],[\"comment/3984\",[]],[\"name/3985\",[67,47.086]],[\"comment/3985\",[]],[\"name/3986\",[68,47.086]],[\"comment/3986\",[]],[\"name/3987\",[69,46.934]],[\"comment/3987\",[]],[\"name/3988\",[70,46.785]],[\"comment/3988\",[]],[\"name/3989\",[71,46.785]],[\"comment/3989\",[]],[\"name/3990\",[981,84.86]],[\"comment/3990\",[]],[\"name/3991\",[982,84.86]],[\"comment/3991\",[]],[\"name/3992\",[983,84.86]],[\"comment/3992\",[]],[\"name/3993\",[984,84.86]],[\"comment/3993\",[]],[\"name/3994\",[985,84.86]],[\"comment/3994\",[]],[\"name/3995\",[986,84.86]],[\"comment/3995\",[]],[\"name/3996\",[987,84.86]],[\"comment/3996\",[]],[\"name/3997\",[988,84.86]],[\"comment/3997\",[]],[\"name/3998\",[989,84.86]],[\"comment/3998\",[]],[\"name/3999\",[990,84.86]],[\"comment/3999\",[]],[\"name/4000\",[991,84.86]],[\"comment/4000\",[]],[\"name/4001\",[836,79.751]],[\"comment/4001\",[]],[\"name/4002\",[992,84.86]],[\"comment/4002\",[]],[\"name/4003\",[993,84.86]],[\"comment/4003\",[]],[\"name/4004\",[478,67.51]],[\"comment/4004\",[]],[\"name/4005\",[2,46.209]],[\"comment/4005\",[]],[\"name/4006\",[8,46.934]],[\"comment/4006\",[]],[\"name/4007\",[994,79.751]],[\"comment/4007\",[]],[\"name/4008\",[995,76.385]],[\"comment/4008\",[]],[\"name/4009\",[996,79.751]],[\"comment/4009\",[]],[\"name/4010\",[9,44.076]],[\"comment/4010\",[]],[\"name/4011\",[436,70.194]],[\"comment/4011\",[]],[\"name/4012\",[997,79.751]],[\"comment/4012\",[]],[\"name/4013\",[998,79.751]],[\"comment/4013\",[]],[\"name/4014\",[479,73.872]],[\"comment/4014\",[]],[\"name/4015\",[999,79.751]],[\"comment/4015\",[]],[\"name/4016\",[1000,79.751]],[\"comment/4016\",[]],[\"name/4017\",[1001,79.751]],[\"comment/4017\",[]],[\"name/4018\",[1002,79.751]],[\"comment/4018\",[]],[\"name/4019\",[1003,79.751]],[\"comment/4019\",[]],[\"name/4020\",[1004,79.751]],[\"comment/4020\",[]],[\"name/4021\",[169,53.793]],[\"comment/4021\",[]],[\"name/4022\",[1005,79.751]],[\"comment/4022\",[]],[\"name/4023\",[1006,79.751]],[\"comment/4023\",[]],[\"name/4024\",[246,71.865]],[\"comment/4024\",[]],[\"name/4025\",[242,71.865]],[\"comment/4025\",[]],[\"name/4026\",[1007,79.751]],[\"comment/4026\",[]],[\"name/4027\",[1008,79.751]],[\"comment/4027\",[]],[\"name/4028\",[245,60.876]],[\"comment/4028\",[]],[\"name/4029\",[20,50.513]],[\"comment/4029\",[]],[\"name/4030\",[16,49.491]],[\"comment/4030\",[]],[\"name/4031\",[42,47.086]],[\"comment/4031\",[]],[\"name/4032\",[1009,79.751]],[\"comment/4032\",[]],[\"name/4033\",[1010,79.751]],[\"comment/4033\",[]],[\"name/4034\",[1011,79.751]],[\"comment/4034\",[]],[\"name/4035\",[1012,79.751]],[\"comment/4035\",[]],[\"name/4036\",[1013,79.751]],[\"comment/4036\",[]],[\"name/4037\",[1014,79.751]],[\"comment/4037\",[]],[\"name/4038\",[1015,76.385]],[\"comment/4038\",[]],[\"name/4039\",[1016,71.865]],[\"comment/4039\",[]],[\"name/4040\",[1017,76.385]],[\"comment/4040\",[]],[\"name/4041\",[1018,79.751]],[\"comment/4041\",[]],[\"name/4042\",[56,47.086]],[\"comment/4042\",[]],[\"name/4043\",[1019,79.751]],[\"comment/4043\",[]],[\"name/4044\",[1020,79.751]],[\"comment/4044\",[]],[\"name/4045\",[1021,79.751]],[\"comment/4045\",[]],[\"name/4046\",[1022,79.751]],[\"comment/4046\",[]],[\"name/4047\",[137,59.205]],[\"comment/4047\",[]],[\"name/4048\",[697,67.51]],[\"comment/4048\",[]],[\"name/4049\",[1023,79.751]],[\"comment/4049\",[]],[\"name/4050\",[1024,79.751]],[\"comment/4050\",[]],[\"name/4051\",[150,58.228]],[\"comment/4051\",[]],[\"name/4052\",[1025,79.751]],[\"comment/4052\",[]],[\"name/4053\",[1026,79.751]],[\"comment/4053\",[]],[\"name/4054\",[1027,79.751]],[\"comment/4054\",[]],[\"name/4055\",[1028,79.751]],[\"comment/4055\",[]],[\"name/4056\",[375,76.385]],[\"comment/4056\",[]],[\"name/4057\",[1029,79.751]],[\"comment/4057\",[]],[\"name/4058\",[1030,79.751]],[\"comment/4058\",[]],[\"name/4059\",[1031,79.751]],[\"comment/4059\",[]],[\"name/4060\",[1032,79.751]],[\"comment/4060\",[]],[\"name/4061\",[1033,79.751]],[\"comment/4061\",[]],[\"name/4062\",[1034,79.751]],[\"comment/4062\",[]],[\"name/4063\",[1035,79.751]],[\"comment/4063\",[]],[\"name/4064\",[1036,79.751]],[\"comment/4064\",[]],[\"name/4065\",[1037,79.751]],[\"comment/4065\",[]],[\"name/4066\",[1038,79.751]],[\"comment/4066\",[]],[\"name/4067\",[1039,79.751]],[\"comment/4067\",[]],[\"name/4068\",[1040,79.751]],[\"comment/4068\",[]],[\"name/4069\",[179,58.228]],[\"comment/4069\",[]],[\"name/4070\",[1041,79.751]],[\"comment/4070\",[]],[\"name/4071\",[3,58.228]],[\"comment/4071\",[]],[\"name/4072\",[19,44.657]],[\"comment/4072\",[]],[\"name/4073\",[1042,79.751]],[\"comment/4073\",[]],[\"name/4074\",[1043,79.751]],[\"comment/4074\",[]],[\"name/4075\",[1044,79.751]],[\"comment/4075\",[]],[\"name/4076\",[1045,79.751]],[\"comment/4076\",[]],[\"name/4077\",[38,47.086]],[\"comment/4077\",[]],[\"name/4078\",[39,47.086]],[\"comment/4078\",[]],[\"name/4079\",[40,47.086]],[\"comment/4079\",[]],[\"name/4080\",[41,47.086]],[\"comment/4080\",[]],[\"name/4081\",[43,47.086]],[\"comment/4081\",[]],[\"name/4082\",[44,47.086]],[\"comment/4082\",[]],[\"name/4083\",[45,47.086]],[\"comment/4083\",[]],[\"name/4084\",[46,47.086]],[\"comment/4084\",[]],[\"name/4085\",[47,47.086]],[\"comment/4085\",[]],[\"name/4086\",[48,47.086]],[\"comment/4086\",[]],[\"name/4087\",[49,47.086]],[\"comment/4087\",[]],[\"name/4088\",[50,47.086]],[\"comment/4088\",[]],[\"name/4089\",[51,47.086]],[\"comment/4089\",[]],[\"name/4090\",[52,47.086]],[\"comment/4090\",[]],[\"name/4091\",[53,47.086]],[\"comment/4091\",[]],[\"name/4092\",[54,47.086]],[\"comment/4092\",[]],[\"name/4093\",[55,47.086]],[\"comment/4093\",[]],[\"name/4094\",[57,46.785]],[\"comment/4094\",[]],[\"name/4095\",[58,46.785]],[\"comment/4095\",[]],[\"name/4096\",[59,47.086]],[\"comment/4096\",[]],[\"name/4097\",[60,43.21]],[\"comment/4097\",[]],[\"name/4098\",[61,46.638]],[\"comment/4098\",[]],[\"name/4099\",[62,46.638]],[\"comment/4099\",[]],[\"name/4100\",[63,47.086]],[\"comment/4100\",[]],[\"name/4101\",[64,46.934]],[\"comment/4101\",[]],[\"name/4102\",[65,46.934]],[\"comment/4102\",[]],[\"name/4103\",[66,47.086]],[\"comment/4103\",[]],[\"name/4104\",[67,47.086]],[\"comment/4104\",[]],[\"name/4105\",[68,47.086]],[\"comment/4105\",[]],[\"name/4106\",[69,46.934]],[\"comment/4106\",[]],[\"name/4107\",[70,46.785]],[\"comment/4107\",[]],[\"name/4108\",[71,46.785]],[\"comment/4108\",[]],[\"name/4109\",[547,79.751]],[\"comment/4109\",[]],[\"name/4110\",[1046,84.86]],[\"comment/4110\",[]],[\"name/4111\",[1047,84.86]],[\"comment/4111\",[]],[\"name/4112\",[1048,76.385]],[\"comment/4112\",[]],[\"name/4113\",[1049,84.86]],[\"comment/4113\",[]],[\"name/4114\",[1050,84.86]],[\"comment/4114\",[]],[\"name/4115\",[1051,84.86]],[\"comment/4115\",[]],[\"name/4116\",[325,71.865]],[\"comment/4116\",[]],[\"name/4117\",[518,76.385]],[\"comment/4117\",[]],[\"name/4118\",[2,46.209]],[\"comment/4118\",[]],[\"name/4119\",[10,57.774]],[\"comment/4119\",[]],[\"name/4120\",[943,76.385]],[\"comment/4120\",[]],[\"name/4121\",[6,54.096]],[\"comment/4121\",[]],[\"name/4122\",[8,46.934]],[\"comment/4122\",[]],[\"name/4123\",[9,44.076]],[\"comment/4123\",[]],[\"name/4124\",[100,76.385]],[\"comment/4124\",[]],[\"name/4125\",[101,70.194]],[\"comment/4125\",[]],[\"name/4126\",[19,44.657]],[\"comment/4126\",[]],[\"name/4127\",[1052,84.86]],[\"comment/4127\",[]],[\"name/4128\",[1053,84.86]],[\"comment/4128\",[]],[\"name/4129\",[1054,84.86]],[\"comment/4129\",[]],[\"name/4130\",[29,56.137]],[\"comment/4130\",[]],[\"name/4131\",[30,55.767]],[\"comment/4131\",[]],[\"name/4132\",[122,54.408]],[\"comment/4132\",[]],[\"name/4133\",[123,54.408]],[\"comment/4133\",[]],[\"name/4134\",[124,54.096]],[\"comment/4134\",[]],[\"name/4135\",[16,49.491]],[\"comment/4135\",[]],[\"name/4136\",[20,50.513]],[\"comment/4136\",[]],[\"name/4137\",[169,53.793]],[\"comment/4137\",[]],[\"name/4138\",[245,60.876]],[\"comment/4138\",[]],[\"name/4139\",[369,65.397]],[\"comment/4139\",[]],[\"name/4140\",[370,65.397]],[\"comment/4140\",[]],[\"name/4141\",[371,64.487]],[\"comment/4141\",[]],[\"name/4142\",[372,65.397]],[\"comment/4142\",[]],[\"name/4143\",[373,65.397]],[\"comment/4143\",[]],[\"name/4144\",[38,47.086]],[\"comment/4144\",[]],[\"name/4145\",[39,47.086]],[\"comment/4145\",[]],[\"name/4146\",[40,47.086]],[\"comment/4146\",[]],[\"name/4147\",[41,47.086]],[\"comment/4147\",[]],[\"name/4148\",[42,47.086]],[\"comment/4148\",[]],[\"name/4149\",[43,47.086]],[\"comment/4149\",[]],[\"name/4150\",[44,47.086]],[\"comment/4150\",[]],[\"name/4151\",[45,47.086]],[\"comment/4151\",[]],[\"name/4152\",[46,47.086]],[\"comment/4152\",[]],[\"name/4153\",[47,47.086]],[\"comment/4153\",[]],[\"name/4154\",[48,47.086]],[\"comment/4154\",[]],[\"name/4155\",[49,47.086]],[\"comment/4155\",[]],[\"name/4156\",[50,47.086]],[\"comment/4156\",[]],[\"name/4157\",[51,47.086]],[\"comment/4157\",[]],[\"name/4158\",[52,47.086]],[\"comment/4158\",[]],[\"name/4159\",[53,47.086]],[\"comment/4159\",[]],[\"name/4160\",[54,47.086]],[\"comment/4160\",[]],[\"name/4161\",[55,47.086]],[\"comment/4161\",[]],[\"name/4162\",[56,47.086]],[\"comment/4162\",[]],[\"name/4163\",[57,46.785]],[\"comment/4163\",[]],[\"name/4164\",[58,46.785]],[\"comment/4164\",[]],[\"name/4165\",[59,47.086]],[\"comment/4165\",[]],[\"name/4166\",[60,43.21]],[\"comment/4166\",[]],[\"name/4167\",[61,46.638]],[\"comment/4167\",[]],[\"name/4168\",[62,46.638]],[\"comment/4168\",[]],[\"name/4169\",[63,47.086]],[\"comment/4169\",[]],[\"name/4170\",[64,46.934]],[\"comment/4170\",[]],[\"name/4171\",[65,46.934]],[\"comment/4171\",[]],[\"name/4172\",[66,47.086]],[\"comment/4172\",[]],[\"name/4173\",[67,47.086]],[\"comment/4173\",[]],[\"name/4174\",[68,47.086]],[\"comment/4174\",[]],[\"name/4175\",[69,46.934]],[\"comment/4175\",[]],[\"name/4176\",[70,46.785]],[\"comment/4176\",[]],[\"name/4177\",[71,46.785]],[\"comment/4177\",[]],[\"name/4178\",[1055,84.86]],[\"comment/4178\",[]],[\"name/4179\",[505,73.872]],[\"comment/4179\",[]],[\"name/4180\",[2,46.209]],[\"comment/4180\",[]],[\"name/4181\",[8,46.934]],[\"comment/4181\",[]],[\"name/4182\",[10,57.774]],[\"comment/4182\",[]],[\"name/4183\",[943,76.385]],[\"comment/4183\",[]],[\"name/4184\",[9,44.076]],[\"comment/4184\",[]],[\"name/4185\",[1056,84.86]],[\"comment/4185\",[]],[\"name/4186\",[1057,84.86]],[\"comment/4186\",[]],[\"name/4187\",[386,79.751]],[\"comment/4187\",[]],[\"name/4188\",[101,70.194]],[\"comment/4188\",[]],[\"name/4189\",[100,76.385]],[\"comment/4189\",[]],[\"name/4190\",[1016,71.865]],[\"comment/4190\",[]],[\"name/4191\",[35,52.664]],[\"comment/4191\",[]],[\"name/4192\",[36,52.664]],[\"comment/4192\",[]],[\"name/4193\",[19,44.657]],[\"comment/4193\",[]],[\"name/4194\",[38,47.086]],[\"comment/4194\",[]],[\"name/4195\",[39,47.086]],[\"comment/4195\",[]],[\"name/4196\",[40,47.086]],[\"comment/4196\",[]],[\"name/4197\",[41,47.086]],[\"comment/4197\",[]],[\"name/4198\",[42,47.086]],[\"comment/4198\",[]],[\"name/4199\",[43,47.086]],[\"comment/4199\",[]],[\"name/4200\",[44,47.086]],[\"comment/4200\",[]],[\"name/4201\",[45,47.086]],[\"comment/4201\",[]],[\"name/4202\",[46,47.086]],[\"comment/4202\",[]],[\"name/4203\",[47,47.086]],[\"comment/4203\",[]],[\"name/4204\",[48,47.086]],[\"comment/4204\",[]],[\"name/4205\",[49,47.086]],[\"comment/4205\",[]],[\"name/4206\",[50,47.086]],[\"comment/4206\",[]],[\"name/4207\",[51,47.086]],[\"comment/4207\",[]],[\"name/4208\",[52,47.086]],[\"comment/4208\",[]],[\"name/4209\",[53,47.086]],[\"comment/4209\",[]],[\"name/4210\",[54,47.086]],[\"comment/4210\",[]],[\"name/4211\",[55,47.086]],[\"comment/4211\",[]],[\"name/4212\",[56,47.086]],[\"comment/4212\",[]],[\"name/4213\",[57,46.785]],[\"comment/4213\",[]],[\"name/4214\",[58,46.785]],[\"comment/4214\",[]],[\"name/4215\",[59,47.086]],[\"comment/4215\",[]],[\"name/4216\",[60,43.21]],[\"comment/4216\",[]],[\"name/4217\",[61,46.638]],[\"comment/4217\",[]],[\"name/4218\",[62,46.638]],[\"comment/4218\",[]],[\"name/4219\",[63,47.086]],[\"comment/4219\",[]],[\"name/4220\",[64,46.934]],[\"comment/4220\",[]],[\"name/4221\",[65,46.934]],[\"comment/4221\",[]],[\"name/4222\",[66,47.086]],[\"comment/4222\",[]],[\"name/4223\",[67,47.086]],[\"comment/4223\",[]],[\"name/4224\",[68,47.086]],[\"comment/4224\",[]],[\"name/4225\",[69,46.934]],[\"comment/4225\",[]],[\"name/4226\",[70,46.785]],[\"comment/4226\",[]],[\"name/4227\",[71,46.785]],[\"comment/4227\",[]],[\"name/4228\",[1058,84.86]],[\"comment/4228\",[]],[\"name/4229\",[1059,84.86]],[\"comment/4229\",[]],[\"name/4230\",[1060,84.86]],[\"comment/4230\",[]],[\"name/4231\",[1061,84.86]],[\"comment/4231\",[]],[\"name/4232\",[1062,84.86]],[\"comment/4232\",[]],[\"name/4233\",[255,65.397]],[\"comment/4233\",[]],[\"name/4234\",[110,57.339]],[\"comment/4234\",[]],[\"name/4235\",[531,76.385]],[\"comment/4235\",[]],[\"name/4236\",[2,46.209]],[\"comment/4236\",[]],[\"name/4237\",[10,57.774]],[\"comment/4237\",[]],[\"name/4238\",[12,44.421]],[\"comment/4238\",[]],[\"name/4239\",[1063,84.86]],[\"comment/4239\",[]],[\"name/4240\",[1064,84.86]],[\"comment/4240\",[]],[\"name/4241\",[1065,84.86]],[\"comment/4241\",[]],[\"name/4242\",[8,46.934]],[\"comment/4242\",[]],[\"name/4243\",[9,44.076]],[\"comment/4243\",[]],[\"name/4244\",[11,52.935]],[\"comment/4244\",[]],[\"name/4245\",[30,55.767]],[\"comment/4245\",[]],[\"name/4246\",[1066,84.86]],[\"comment/4246\",[]],[\"name/4247\",[393,70.194]],[\"comment/4247\",[]],[\"name/4248\",[1067,84.86]],[\"comment/4248\",[]],[\"name/4249\",[19,44.657]],[\"comment/4249\",[]],[\"name/4250\",[38,47.086]],[\"comment/4250\",[]],[\"name/4251\",[39,47.086]],[\"comment/4251\",[]],[\"name/4252\",[40,47.086]],[\"comment/4252\",[]],[\"name/4253\",[41,47.086]],[\"comment/4253\",[]],[\"name/4254\",[42,47.086]],[\"comment/4254\",[]],[\"name/4255\",[43,47.086]],[\"comment/4255\",[]],[\"name/4256\",[44,47.086]],[\"comment/4256\",[]],[\"name/4257\",[45,47.086]],[\"comment/4257\",[]],[\"name/4258\",[46,47.086]],[\"comment/4258\",[]],[\"name/4259\",[47,47.086]],[\"comment/4259\",[]],[\"name/4260\",[48,47.086]],[\"comment/4260\",[]],[\"name/4261\",[49,47.086]],[\"comment/4261\",[]],[\"name/4262\",[50,47.086]],[\"comment/4262\",[]],[\"name/4263\",[51,47.086]],[\"comment/4263\",[]],[\"name/4264\",[52,47.086]],[\"comment/4264\",[]],[\"name/4265\",[53,47.086]],[\"comment/4265\",[]],[\"name/4266\",[54,47.086]],[\"comment/4266\",[]],[\"name/4267\",[55,47.086]],[\"comment/4267\",[]],[\"name/4268\",[56,47.086]],[\"comment/4268\",[]],[\"name/4269\",[57,46.785]],[\"comment/4269\",[]],[\"name/4270\",[58,46.785]],[\"comment/4270\",[]],[\"name/4271\",[59,47.086]],[\"comment/4271\",[]],[\"name/4272\",[60,43.21]],[\"comment/4272\",[]],[\"name/4273\",[61,46.638]],[\"comment/4273\",[]],[\"name/4274\",[62,46.638]],[\"comment/4274\",[]],[\"name/4275\",[63,47.086]],[\"comment/4275\",[]],[\"name/4276\",[64,46.934]],[\"comment/4276\",[]],[\"name/4277\",[65,46.934]],[\"comment/4277\",[]],[\"name/4278\",[66,47.086]],[\"comment/4278\",[]],[\"name/4279\",[67,47.086]],[\"comment/4279\",[]],[\"name/4280\",[68,47.086]],[\"comment/4280\",[]],[\"name/4281\",[69,46.934]],[\"comment/4281\",[]],[\"name/4282\",[70,46.785]],[\"comment/4282\",[]],[\"name/4283\",[71,46.785]],[\"comment/4283\",[]],[\"name/4284\",[1068,84.86]],[\"comment/4284\",[]],[\"name/4285\",[1069,79.751]],[\"comment/4285\",[]],[\"name/4286\",[1070,79.751]],[\"comment/4286\",[]],[\"name/4287\",[1071,79.751]],[\"comment/4287\",[]],[\"name/4288\",[1072,79.751]],[\"comment/4288\",[]],[\"name/4289\",[508,73.872]],[\"comment/4289\",[]],[\"name/4290\",[2,46.209]],[\"comment/4290\",[]],[\"name/4291\",[8,46.934]],[\"comment/4291\",[]],[\"name/4292\",[1073,84.86]],[\"comment/4292\",[]],[\"name/4293\",[12,44.421]],[\"comment/4293\",[]],[\"name/4294\",[78,71.865]],[\"comment/4294\",[]],[\"name/4295\",[79,71.865]],[\"comment/4295\",[]],[\"name/4296\",[551,76.385]],[\"comment/4296\",[]],[\"name/4297\",[9,44.076]],[\"comment/4297\",[]],[\"name/4298\",[11,52.935]],[\"comment/4298\",[]],[\"name/4299\",[12,44.421]],[\"comment/4299\",[]],[\"name/4300\",[834,79.751]],[\"comment/4300\",[]],[\"name/4301\",[835,79.751]],[\"comment/4301\",[]],[\"name/4302\",[230,76.385]],[\"comment/4302\",[]],[\"name/4303\",[1074,84.86]],[\"comment/4303\",[]],[\"name/4304\",[1075,84.86]],[\"comment/4304\",[]],[\"name/4305\",[947,76.385]],[\"comment/4305\",[]],[\"name/4306\",[1076,84.86]],[\"comment/4306\",[]],[\"name/4307\",[1077,84.86]],[\"comment/4307\",[]],[\"name/4308\",[1078,84.86]],[\"comment/4308\",[]],[\"name/4309\",[1079,84.86]],[\"comment/4309\",[]],[\"name/4310\",[1080,84.86]],[\"comment/4310\",[]],[\"name/4311\",[1081,84.86]],[\"comment/4311\",[]],[\"name/4312\",[1016,71.865]],[\"comment/4312\",[]],[\"name/4313\",[393,70.194]],[\"comment/4313\",[]],[\"name/4314\",[1082,84.86]],[\"comment/4314\",[]],[\"name/4315\",[1083,84.86]],[\"comment/4315\",[]],[\"name/4316\",[19,44.657]],[\"comment/4316\",[]],[\"name/4317\",[38,47.086]],[\"comment/4317\",[]],[\"name/4318\",[39,47.086]],[\"comment/4318\",[]],[\"name/4319\",[40,47.086]],[\"comment/4319\",[]],[\"name/4320\",[41,47.086]],[\"comment/4320\",[]],[\"name/4321\",[42,47.086]],[\"comment/4321\",[]],[\"name/4322\",[43,47.086]],[\"comment/4322\",[]],[\"name/4323\",[44,47.086]],[\"comment/4323\",[]],[\"name/4324\",[45,47.086]],[\"comment/4324\",[]],[\"name/4325\",[46,47.086]],[\"comment/4325\",[]],[\"name/4326\",[47,47.086]],[\"comment/4326\",[]],[\"name/4327\",[48,47.086]],[\"comment/4327\",[]],[\"name/4328\",[49,47.086]],[\"comment/4328\",[]],[\"name/4329\",[50,47.086]],[\"comment/4329\",[]],[\"name/4330\",[51,47.086]],[\"comment/4330\",[]],[\"name/4331\",[52,47.086]],[\"comment/4331\",[]],[\"name/4332\",[53,47.086]],[\"comment/4332\",[]],[\"name/4333\",[54,47.086]],[\"comment/4333\",[]],[\"name/4334\",[55,47.086]],[\"comment/4334\",[]],[\"name/4335\",[56,47.086]],[\"comment/4335\",[]],[\"name/4336\",[57,46.785]],[\"comment/4336\",[]],[\"name/4337\",[58,46.785]],[\"comment/4337\",[]],[\"name/4338\",[59,47.086]],[\"comment/4338\",[]],[\"name/4339\",[60,43.21]],[\"comment/4339\",[]],[\"name/4340\",[61,46.638]],[\"comment/4340\",[]],[\"name/4341\",[62,46.638]],[\"comment/4341\",[]],[\"name/4342\",[63,47.086]],[\"comment/4342\",[]],[\"name/4343\",[64,46.934]],[\"comment/4343\",[]],[\"name/4344\",[65,46.934]],[\"comment/4344\",[]],[\"name/4345\",[66,47.086]],[\"comment/4345\",[]],[\"name/4346\",[67,47.086]],[\"comment/4346\",[]],[\"name/4347\",[68,47.086]],[\"comment/4347\",[]],[\"name/4348\",[69,46.934]],[\"comment/4348\",[]],[\"name/4349\",[70,46.785]],[\"comment/4349\",[]],[\"name/4350\",[71,46.785]],[\"comment/4350\",[]],[\"name/4351\",[1084,84.86]],[\"comment/4351\",[]],[\"name/4352\",[1085,79.751]],[\"comment/4352\",[]],[\"name/4353\",[1086,84.86]],[\"comment/4353\",[]],[\"name/4354\",[1087,84.86]],[\"comment/4354\",[]],[\"name/4355\",[1088,84.86]],[\"comment/4355\",[]],[\"name/4356\",[548,79.751]],[\"comment/4356\",[]],[\"name/4357\",[74,70.194]],[\"comment/4357\",[]],[\"name/4358\",[73,67.51]],[\"comment/4358\",[]],[\"name/4359\",[75,67.51]],[\"comment/4359\",[]],[\"name/4360\",[813,79.751]],[\"comment/4360\",[]],[\"name/4361\",[814,79.751]],[\"comment/4361\",[]],[\"name/4362\",[403,73.872]],[\"comment/4362\",[]],[\"name/4363\",[1048,76.385]],[\"comment/4363\",[]],[\"name/4364\",[532,76.385]],[\"comment/4364\",[]],[\"name/4365\",[2,46.209]],[\"comment/4365\",[]],[\"name/4366\",[6,54.096]],[\"comment/4366\",[]],[\"name/4367\",[8,46.934]],[\"comment/4367\",[]],[\"name/4368\",[9,44.076]],[\"comment/4368\",[]],[\"name/4369\",[29,56.137]],[\"comment/4369\",[]],[\"name/4370\",[30,55.767]],[\"comment/4370\",[]],[\"name/4371\",[122,54.408]],[\"comment/4371\",[]],[\"name/4372\",[123,54.408]],[\"comment/4372\",[]],[\"name/4373\",[124,54.096]],[\"comment/4373\",[]],[\"name/4374\",[16,49.491]],[\"comment/4374\",[]],[\"name/4375\",[20,50.513]],[\"comment/4375\",[]],[\"name/4376\",[169,53.793]],[\"comment/4376\",[]],[\"name/4377\",[245,60.876]],[\"comment/4377\",[]],[\"name/4378\",[369,65.397]],[\"comment/4378\",[]],[\"name/4379\",[370,65.397]],[\"comment/4379\",[]],[\"name/4380\",[371,64.487]],[\"comment/4380\",[]],[\"name/4381\",[372,65.397]],[\"comment/4381\",[]],[\"name/4382\",[373,65.397]],[\"comment/4382\",[]],[\"name/4383\",[19,44.657]],[\"comment/4383\",[]],[\"name/4384\",[38,47.086]],[\"comment/4384\",[]],[\"name/4385\",[39,47.086]],[\"comment/4385\",[]],[\"name/4386\",[40,47.086]],[\"comment/4386\",[]],[\"name/4387\",[41,47.086]],[\"comment/4387\",[]],[\"name/4388\",[42,47.086]],[\"comment/4388\",[]],[\"name/4389\",[43,47.086]],[\"comment/4389\",[]],[\"name/4390\",[44,47.086]],[\"comment/4390\",[]],[\"name/4391\",[45,47.086]],[\"comment/4391\",[]],[\"name/4392\",[46,47.086]],[\"comment/4392\",[]],[\"name/4393\",[47,47.086]],[\"comment/4393\",[]],[\"name/4394\",[48,47.086]],[\"comment/4394\",[]],[\"name/4395\",[49,47.086]],[\"comment/4395\",[]],[\"name/4396\",[50,47.086]],[\"comment/4396\",[]],[\"name/4397\",[51,47.086]],[\"comment/4397\",[]],[\"name/4398\",[52,47.086]],[\"comment/4398\",[]],[\"name/4399\",[53,47.086]],[\"comment/4399\",[]],[\"name/4400\",[54,47.086]],[\"comment/4400\",[]],[\"name/4401\",[55,47.086]],[\"comment/4401\",[]],[\"name/4402\",[56,47.086]],[\"comment/4402\",[]],[\"name/4403\",[57,46.785]],[\"comment/4403\",[]],[\"name/4404\",[58,46.785]],[\"comment/4404\",[]],[\"name/4405\",[59,47.086]],[\"comment/4405\",[]],[\"name/4406\",[60,43.21]],[\"comment/4406\",[]],[\"name/4407\",[61,46.638]],[\"comment/4407\",[]],[\"name/4408\",[62,46.638]],[\"comment/4408\",[]],[\"name/4409\",[63,47.086]],[\"comment/4409\",[]],[\"name/4410\",[64,46.934]],[\"comment/4410\",[]],[\"name/4411\",[65,46.934]],[\"comment/4411\",[]],[\"name/4412\",[66,47.086]],[\"comment/4412\",[]],[\"name/4413\",[67,47.086]],[\"comment/4413\",[]],[\"name/4414\",[68,47.086]],[\"comment/4414\",[]],[\"name/4415\",[69,46.934]],[\"comment/4415\",[]],[\"name/4416\",[70,46.785]],[\"comment/4416\",[]],[\"name/4417\",[71,46.785]],[\"comment/4417\",[]],[\"name/4418\",[1089,84.86]],[\"comment/4418\",[]],[\"name/4419\",[1090,79.751]],[\"comment/4419\",[]],[\"name/4420\",[1091,79.751]],[\"comment/4420\",[]],[\"name/4421\",[1092,84.86]],[\"comment/4421\",[]],[\"name/4422\",[1093,84.86]],[\"comment/4422\",[]],[\"name/4423\",[1094,84.86]],[\"comment/4423\",[]],[\"name/4424\",[1095,84.86]],[\"comment/4424\",[]],[\"name/4425\",[1096,84.86]],[\"comment/4425\",[]],[\"name/4426\",[1097,84.86]],[\"comment/4426\",[]],[\"name/4427\",[1098,84.86]],[\"comment/4427\",[]],[\"name/4428\",[1099,84.86]],[\"comment/4428\",[]],[\"name/4429\",[1100,84.86]],[\"comment/4429\",[]],[\"name/4430\",[323,60.876]],[\"comment/4430\",[]],[\"name/4431\",[760,76.385]],[\"comment/4431\",[]],[\"name/4432\",[759,76.385]],[\"comment/4432\",[]],[\"name/4433\",[120,59.732]],[\"comment/4433\",[]],[\"name/4434\",[1101,84.86]],[\"comment/4434\",[]],[\"name/4435\",[1102,84.86]],[\"comment/4435\",[]],[\"name/4436\",[1103,84.86]],[\"comment/4436\",[]],[\"name/4437\",[1104,84.86]],[\"comment/4437\",[]],[\"name/4438\",[1105,84.86]],[\"comment/4438\",[]],[\"name/4439\",[409,67.51]],[\"comment/4439\",[]],[\"name/4440\",[1106,84.86]],[\"comment/4440\",[]],[\"name/4441\",[681,64.487]],[\"comment/4441\",[]],[\"name/4442\",[747,76.385]],[\"comment/4442\",[]],[\"name/4443\",[748,71.865]],[\"comment/4443\",[]],[\"name/4444\",[749,71.865]],[\"comment/4444\",[]],[\"name/4445\",[117,58.705]],[\"comment/4445\",[]],[\"name/4446\",[113,57.774]],[\"comment/4446\",[]],[\"name/4447\",[750,76.385]],[\"comment/4447\",[]],[\"name/4448\",[366,66.398]],[\"comment/4448\",[]],[\"name/4449\",[105,57.339]],[\"comment/4449\",[]],[\"name/4450\",[412,63.653]],[\"comment/4450\",[]],[\"name/4451\",[323,60.876]],[\"comment/4451\",[]],[\"name/4452\",[411,64.487]],[\"comment/4452\",[]],[\"name/4453\",[10,57.774]],[\"comment/4453\",[]],[\"name/4454\",[751,70.194]],[\"comment/4454\",[]],[\"name/4455\",[752,70.194]],[\"comment/4455\",[]],[\"name/4456\",[488,73.872]],[\"comment/4456\",[]],[\"name/4457\",[1,57.339]],[\"comment/4457\",[]],[\"name/4458\",[2,46.209]],[\"comment/4458\",[]],[\"name/4459\",[754,79.751]],[\"comment/4459\",[]],[\"name/4460\",[755,79.751]],[\"comment/4460\",[]],[\"name/4461\",[753,79.751]],[\"comment/4461\",[]],[\"name/4462\",[756,79.751]],[\"comment/4462\",[]],[\"name/4463\",[3,58.228]],[\"comment/4463\",[]],[\"name/4464\",[182,56.922]],[\"comment/4464\",[]],[\"name/4465\",[98,60.287]],[\"comment/4465\",[]],[\"name/4466\",[99,59.732]],[\"comment/4466\",[]],[\"name/4467\",[8,46.934]],[\"comment/4467\",[]],[\"name/4468\",[9,44.076]],[\"comment/4468\",[]],[\"name/4469\",[759,76.385]],[\"comment/4469\",[]],[\"name/4470\",[760,76.385]],[\"comment/4470\",[]],[\"name/4471\",[166,57.339]],[\"comment/4471\",[]],[\"name/4472\",[149,60.287]],[\"comment/4472\",[]],[\"name/4473\",[685,70.194]],[\"comment/4473\",[]],[\"name/4474\",[761,79.751]],[\"comment/4474\",[]],[\"name/4475\",[762,79.751]],[\"comment/4475\",[]],[\"name/4476\",[763,79.751]],[\"comment/4476\",[]],[\"name/4477\",[764,79.751]],[\"comment/4477\",[]],[\"name/4478\",[56,47.086]],[\"comment/4478\",[]],[\"name/4479\",[130,60.287]],[\"comment/4479\",[]],[\"name/4480\",[120,59.732]],[\"comment/4480\",[]],[\"name/4481\",[765,79.751]],[\"comment/4481\",[]],[\"name/4482\",[144,60.287]],[\"comment/4482\",[]],[\"name/4483\",[698,70.194]],[\"comment/4483\",[]],[\"name/4484\",[691,70.194]],[\"comment/4484\",[]],[\"name/4485\",[137,59.205]],[\"comment/4485\",[]],[\"name/4486\",[697,67.51]],[\"comment/4486\",[]],[\"name/4487\",[124,54.096]],[\"comment/4487\",[]],[\"name/4488\",[766,76.385]],[\"comment/4488\",[]],[\"name/4489\",[767,79.751]],[\"comment/4489\",[]],[\"name/4490\",[162,60.287]],[\"comment/4490\",[]],[\"name/4491\",[163,60.287]],[\"comment/4491\",[]],[\"name/4492\",[131,60.287]],[\"comment/4492\",[]],[\"name/4493\",[152,60.287]],[\"comment/4493\",[]],[\"name/4494\",[12,44.421]],[\"comment/4494\",[]],[\"name/4495\",[153,56.922]],[\"comment/4495\",[]],[\"name/4496\",[154,56.922]],[\"comment/4496\",[]],[\"name/4497\",[40,47.086]],[\"comment/4497\",[]],[\"name/4498\",[768,79.751]],[\"comment/4498\",[]],[\"name/4499\",[769,79.751]],[\"comment/4499\",[]],[\"name/4500\",[770,79.751]],[\"comment/4500\",[]],[\"name/4501\",[771,79.751]],[\"comment/4501\",[]],[\"name/4502\",[772,79.751]],[\"comment/4502\",[]],[\"name/4503\",[773,79.751]],[\"comment/4503\",[]],[\"name/4504\",[774,79.751]],[\"comment/4504\",[]],[\"name/4505\",[775,79.751]],[\"comment/4505\",[]],[\"name/4506\",[776,79.751]],[\"comment/4506\",[]],[\"name/4507\",[777,79.751]],[\"comment/4507\",[]],[\"name/4508\",[778,79.751]],[\"comment/4508\",[]],[\"name/4509\",[103,56.522]],[\"comment/4509\",[]],[\"name/4510\",[779,79.751]],[\"comment/4510\",[]],[\"name/4511\",[780,79.751]],[\"comment/4511\",[]],[\"name/4512\",[781,79.751]],[\"comment/4512\",[]],[\"name/4513\",[782,79.751]],[\"comment/4513\",[]],[\"name/4514\",[783,79.751]],[\"comment/4514\",[]],[\"name/4515\",[784,79.751]],[\"comment/4515\",[]],[\"name/4516\",[745,70.194]],[\"comment/4516\",[]],[\"name/4517\",[785,79.751]],[\"comment/4517\",[]],[\"name/4518\",[786,73.872]],[\"comment/4518\",[]],[\"name/4519\",[787,79.751]],[\"comment/4519\",[]],[\"name/4520\",[699,70.194]],[\"comment/4520\",[]],[\"name/4521\",[757,79.751]],[\"comment/4521\",[]],[\"name/4522\",[693,70.194]],[\"comment/4522\",[]],[\"name/4523\",[19,44.657]],[\"comment/4523\",[]],[\"name/4524\",[681,64.487]],[\"comment/4524\",[]],[\"name/4525\",[439,63.653]],[\"comment/4525\",[]],[\"name/4526\",[682,70.194]],[\"comment/4526\",[]],[\"name/4527\",[683,70.194]],[\"comment/4527\",[]],[\"name/4528\",[684,70.194]],[\"comment/4528\",[]],[\"name/4529\",[686,70.194]],[\"comment/4529\",[]],[\"name/4530\",[687,70.194]],[\"comment/4530\",[]],[\"name/4531\",[688,70.194]],[\"comment/4531\",[]],[\"name/4532\",[212,68.762]],[\"comment/4532\",[]],[\"name/4533\",[689,70.194]],[\"comment/4533\",[]],[\"name/4534\",[160,59.732]],[\"comment/4534\",[]],[\"name/4535\",[690,70.194]],[\"comment/4535\",[]],[\"name/4536\",[692,70.194]],[\"comment/4536\",[]],[\"name/4537\",[694,70.194]],[\"comment/4537\",[]],[\"name/4538\",[161,60.287]],[\"comment/4538\",[]],[\"name/4539\",[12,44.421]],[\"comment/4539\",[]],[\"name/4540\",[695,68.762]],[\"comment/4540\",[]],[\"name/4541\",[696,68.762]],[\"comment/4541\",[]],[\"name/4542\",[182,56.922]],[\"comment/4542\",[]],[\"name/4543\",[104,59.732]],[\"comment/4543\",[]],[\"name/4544\",[105,57.339]],[\"comment/4544\",[]],[\"name/4545\",[106,59.732]],[\"comment/4545\",[]],[\"name/4546\",[11,52.935]],[\"comment/4546\",[]],[\"name/4547\",[12,44.421]],[\"comment/4547\",[]],[\"name/4548\",[107,60.287]],[\"comment/4548\",[]],[\"name/4549\",[19,44.657]],[\"comment/4549\",[]],[\"name/4550\",[108,60.287]],[\"comment/4550\",[]],[\"name/4551\",[109,60.287]],[\"comment/4551\",[]],[\"name/4552\",[110,57.339]],[\"comment/4552\",[]],[\"name/4553\",[111,60.287]],[\"comment/4553\",[]],[\"name/4554\",[112,60.287]],[\"comment/4554\",[]],[\"name/4555\",[113,57.774]],[\"comment/4555\",[]],[\"name/4556\",[114,60.287]],[\"comment/4556\",[]],[\"name/4557\",[115,60.287]],[\"comment/4557\",[]],[\"name/4558\",[116,56.922]],[\"comment/4558\",[]],[\"name/4559\",[60,43.21]],[\"comment/4559\",[]],[\"name/4560\",[117,58.705]],[\"comment/4560\",[]],[\"name/4561\",[118,60.287]],[\"comment/4561\",[]],[\"name/4562\",[119,60.287]],[\"comment/4562\",[]],[\"name/4563\",[121,60.287]],[\"comment/4563\",[]],[\"name/4564\",[122,54.408]],[\"comment/4564\",[]],[\"name/4565\",[123,54.408]],[\"comment/4565\",[]],[\"name/4566\",[125,60.287]],[\"comment/4566\",[]],[\"name/4567\",[126,60.287]],[\"comment/4567\",[]],[\"name/4568\",[127,60.287]],[\"comment/4568\",[]],[\"name/4569\",[128,60.287]],[\"comment/4569\",[]],[\"name/4570\",[129,59.732]],[\"comment/4570\",[]],[\"name/4571\",[132,59.732]],[\"comment/4571\",[]],[\"name/4572\",[133,60.287]],[\"comment/4572\",[]],[\"name/4573\",[134,60.287]],[\"comment/4573\",[]],[\"name/4574\",[135,60.287]],[\"comment/4574\",[]],[\"name/4575\",[136,60.287]],[\"comment/4575\",[]],[\"name/4576\",[138,59.732]],[\"comment/4576\",[]],[\"name/4577\",[139,59.732]],[\"comment/4577\",[]],[\"name/4578\",[140,59.732]],[\"comment/4578\",[]],[\"name/4579\",[141,59.732]],[\"comment/4579\",[]],[\"name/4580\",[142,60.287]],[\"comment/4580\",[]],[\"name/4581\",[143,60.287]],[\"comment/4581\",[]],[\"name/4582\",[145,60.287]],[\"comment/4582\",[]],[\"name/4583\",[146,60.287]],[\"comment/4583\",[]],[\"name/4584\",[147,60.287]],[\"comment/4584\",[]],[\"name/4585\",[148,60.287]],[\"comment/4585\",[]],[\"name/4586\",[150,58.228]],[\"comment/4586\",[]],[\"name/4587\",[151,60.287]],[\"comment/4587\",[]],[\"name/4588\",[155,60.287]],[\"comment/4588\",[]],[\"name/4589\",[156,60.287]],[\"comment/4589\",[]],[\"name/4590\",[157,60.287]],[\"comment/4590\",[]],[\"name/4591\",[158,56.922]],[\"comment/4591\",[]],[\"name/4592\",[159,59.732]],[\"comment/4592\",[]],[\"name/4593\",[164,60.287]],[\"comment/4593\",[]],[\"name/4594\",[165,60.287]],[\"comment/4594\",[]],[\"name/4595\",[167,59.732]],[\"comment/4595\",[]],[\"name/4596\",[168,59.732]],[\"comment/4596\",[]],[\"name/4597\",[20,50.513]],[\"comment/4597\",[]],[\"name/4598\",[16,49.491]],[\"comment/4598\",[]],[\"name/4599\",[35,52.664]],[\"comment/4599\",[]],[\"name/4600\",[36,52.664]],[\"comment/4600\",[]],[\"name/4601\",[169,53.793]],[\"comment/4601\",[]],[\"name/4602\",[170,59.205]],[\"comment/4602\",[]],[\"name/4603\",[171,59.732]],[\"comment/4603\",[]],[\"name/4604\",[172,59.732]],[\"comment/4604\",[]],[\"name/4605\",[173,59.732]],[\"comment/4605\",[]],[\"name/4606\",[174,59.732]],[\"comment/4606\",[]],[\"name/4607\",[175,59.732]],[\"comment/4607\",[]],[\"name/4608\",[176,59.732]],[\"comment/4608\",[]],[\"name/4609\",[177,59.732]],[\"comment/4609\",[]],[\"name/4610\",[178,59.732]],[\"comment/4610\",[]],[\"name/4611\",[102,59.732]],[\"comment/4611\",[]],[\"name/4612\",[179,58.228]],[\"comment/4612\",[]],[\"name/4613\",[180,59.732]],[\"comment/4613\",[]],[\"name/4614\",[181,59.732]],[\"comment/4614\",[]],[\"name/4615\",[183,59.205]],[\"comment/4615\",[]],[\"name/4616\",[184,59.732]],[\"comment/4616\",[]],[\"name/4617\",[185,59.732]],[\"comment/4617\",[]],[\"name/4618\",[186,59.732]],[\"comment/4618\",[]],[\"name/4619\",[187,59.732]],[\"comment/4619\",[]],[\"name/4620\",[188,59.732]],[\"comment/4620\",[]],[\"name/4621\",[28,53.498]],[\"comment/4621\",[]],[\"name/4622\",[26,53.498]],[\"comment/4622\",[]],[\"name/4623\",[27,53.498]],[\"comment/4623\",[]],[\"name/4624\",[38,47.086]],[\"comment/4624\",[]],[\"name/4625\",[39,47.086]],[\"comment/4625\",[]],[\"name/4626\",[41,47.086]],[\"comment/4626\",[]],[\"name/4627\",[42,47.086]],[\"comment/4627\",[]],[\"name/4628\",[43,47.086]],[\"comment/4628\",[]],[\"name/4629\",[44,47.086]],[\"comment/4629\",[]],[\"name/4630\",[45,47.086]],[\"comment/4630\",[]],[\"name/4631\",[46,47.086]],[\"comment/4631\",[]],[\"name/4632\",[47,47.086]],[\"comment/4632\",[]],[\"name/4633\",[48,47.086]],[\"comment/4633\",[]],[\"name/4634\",[49,47.086]],[\"comment/4634\",[]],[\"name/4635\",[50,47.086]],[\"comment/4635\",[]],[\"name/4636\",[51,47.086]],[\"comment/4636\",[]],[\"name/4637\",[52,47.086]],[\"comment/4637\",[]],[\"name/4638\",[53,47.086]],[\"comment/4638\",[]],[\"name/4639\",[54,47.086]],[\"comment/4639\",[]],[\"name/4640\",[55,47.086]],[\"comment/4640\",[]],[\"name/4641\",[57,46.785]],[\"comment/4641\",[]],[\"name/4642\",[58,46.785]],[\"comment/4642\",[]],[\"name/4643\",[59,47.086]],[\"comment/4643\",[]],[\"name/4644\",[60,43.21]],[\"comment/4644\",[]],[\"name/4645\",[61,46.638]],[\"comment/4645\",[]],[\"name/4646\",[62,46.638]],[\"comment/4646\",[]],[\"name/4647\",[63,47.086]],[\"comment/4647\",[]],[\"name/4648\",[64,46.934]],[\"comment/4648\",[]],[\"name/4649\",[65,46.934]],[\"comment/4649\",[]],[\"name/4650\",[66,47.086]],[\"comment/4650\",[]],[\"name/4651\",[67,47.086]],[\"comment/4651\",[]],[\"name/4652\",[68,47.086]],[\"comment/4652\",[]],[\"name/4653\",[69,46.934]],[\"comment/4653\",[]],[\"name/4654\",[70,46.785]],[\"comment/4654\",[]],[\"name/4655\",[71,46.785]],[\"comment/4655\",[]],[\"name/4656\",[530,76.385]],[\"comment/4656\",[]],[\"name/4657\",[2,46.209]],[\"comment/4657\",[]],[\"name/4658\",[8,46.934]],[\"comment/4658\",[]],[\"name/4659\",[10,57.774]],[\"comment/4659\",[]],[\"name/4660\",[12,44.421]],[\"comment/4660\",[]],[\"name/4661\",[325,71.865]],[\"comment/4661\",[]],[\"name/4662\",[1107,84.86]],[\"comment/4662\",[]],[\"name/4663\",[1108,84.86]],[\"comment/4663\",[]],[\"name/4664\",[1109,84.86]],[\"comment/4664\",[]],[\"name/4665\",[1110,84.86]],[\"comment/4665\",[]],[\"name/4666\",[1111,84.86]],[\"comment/4666\",[]],[\"name/4667\",[1112,84.86]],[\"comment/4667\",[]],[\"name/4668\",[1113,84.86]],[\"comment/4668\",[]],[\"name/4669\",[1114,84.86]],[\"comment/4669\",[]],[\"name/4670\",[1115,84.86]],[\"comment/4670\",[]],[\"name/4671\",[1116,84.86]],[\"comment/4671\",[]],[\"name/4672\",[1117,84.86]],[\"comment/4672\",[]],[\"name/4673\",[1118,84.86]],[\"comment/4673\",[]],[\"name/4674\",[6,54.096]],[\"comment/4674\",[]],[\"name/4675\",[9,44.076]],[\"comment/4675\",[]],[\"name/4676\",[1119,73.872]],[\"comment/4676\",[]],[\"name/4677\",[1120,71.865]],[\"comment/4677\",[]],[\"name/4678\",[19,44.657]],[\"comment/4678\",[]],[\"name/4679\",[1121,84.86]],[\"comment/4679\",[]],[\"name/4680\",[1122,84.86]],[\"comment/4680\",[]],[\"name/4681\",[1123,84.86]],[\"comment/4681\",[]],[\"name/4682\",[29,56.137]],[\"comment/4682\",[]],[\"name/4683\",[30,55.767]],[\"comment/4683\",[]],[\"name/4684\",[122,54.408]],[\"comment/4684\",[]],[\"name/4685\",[123,54.408]],[\"comment/4685\",[]],[\"name/4686\",[124,54.096]],[\"comment/4686\",[]],[\"name/4687\",[16,49.491]],[\"comment/4687\",[]],[\"name/4688\",[20,50.513]],[\"comment/4688\",[]],[\"name/4689\",[169,53.793]],[\"comment/4689\",[]],[\"name/4690\",[245,60.876]],[\"comment/4690\",[]],[\"name/4691\",[369,65.397]],[\"comment/4691\",[]],[\"name/4692\",[370,65.397]],[\"comment/4692\",[]],[\"name/4693\",[371,64.487]],[\"comment/4693\",[]],[\"name/4694\",[372,65.397]],[\"comment/4694\",[]],[\"name/4695\",[373,65.397]],[\"comment/4695\",[]],[\"name/4696\",[38,47.086]],[\"comment/4696\",[]],[\"name/4697\",[39,47.086]],[\"comment/4697\",[]],[\"name/4698\",[40,47.086]],[\"comment/4698\",[]],[\"name/4699\",[41,47.086]],[\"comment/4699\",[]],[\"name/4700\",[42,47.086]],[\"comment/4700\",[]],[\"name/4701\",[43,47.086]],[\"comment/4701\",[]],[\"name/4702\",[44,47.086]],[\"comment/4702\",[]],[\"name/4703\",[45,47.086]],[\"comment/4703\",[]],[\"name/4704\",[46,47.086]],[\"comment/4704\",[]],[\"name/4705\",[47,47.086]],[\"comment/4705\",[]],[\"name/4706\",[48,47.086]],[\"comment/4706\",[]],[\"name/4707\",[49,47.086]],[\"comment/4707\",[]],[\"name/4708\",[50,47.086]],[\"comment/4708\",[]],[\"name/4709\",[51,47.086]],[\"comment/4709\",[]],[\"name/4710\",[52,47.086]],[\"comment/4710\",[]],[\"name/4711\",[53,47.086]],[\"comment/4711\",[]],[\"name/4712\",[54,47.086]],[\"comment/4712\",[]],[\"name/4713\",[55,47.086]],[\"comment/4713\",[]],[\"name/4714\",[56,47.086]],[\"comment/4714\",[]],[\"name/4715\",[57,46.785]],[\"comment/4715\",[]],[\"name/4716\",[58,46.785]],[\"comment/4716\",[]],[\"name/4717\",[59,47.086]],[\"comment/4717\",[]],[\"name/4718\",[60,43.21]],[\"comment/4718\",[]],[\"name/4719\",[61,46.638]],[\"comment/4719\",[]],[\"name/4720\",[62,46.638]],[\"comment/4720\",[]],[\"name/4721\",[63,47.086]],[\"comment/4721\",[]],[\"name/4722\",[64,46.934]],[\"comment/4722\",[]],[\"name/4723\",[65,46.934]],[\"comment/4723\",[]],[\"name/4724\",[66,47.086]],[\"comment/4724\",[]],[\"name/4725\",[67,47.086]],[\"comment/4725\",[]],[\"name/4726\",[68,47.086]],[\"comment/4726\",[]],[\"name/4727\",[69,46.934]],[\"comment/4727\",[]],[\"name/4728\",[70,46.785]],[\"comment/4728\",[]],[\"name/4729\",[71,46.785]],[\"comment/4729\",[]],[\"name/4730\",[1124,79.751]],[\"comment/4730\",[]],[\"name/4731\",[2,46.209]],[\"comment/4731\",[]],[\"name/4732\",[8,46.934]],[\"comment/4732\",[]],[\"name/4733\",[6,54.096]],[\"comment/4733\",[]],[\"name/4734\",[9,44.076]],[\"comment/4734\",[]],[\"name/4735\",[1125,84.86]],[\"comment/4735\",[]],[\"name/4736\",[1119,73.872]],[\"comment/4736\",[]],[\"name/4737\",[1120,71.865]],[\"comment/4737\",[]],[\"name/4738\",[19,44.657]],[\"comment/4738\",[]],[\"name/4739\",[29,56.137]],[\"comment/4739\",[]],[\"name/4740\",[30,55.767]],[\"comment/4740\",[]],[\"name/4741\",[122,54.408]],[\"comment/4741\",[]],[\"name/4742\",[123,54.408]],[\"comment/4742\",[]],[\"name/4743\",[124,54.096]],[\"comment/4743\",[]],[\"name/4744\",[16,49.491]],[\"comment/4744\",[]],[\"name/4745\",[20,50.513]],[\"comment/4745\",[]],[\"name/4746\",[169,53.793]],[\"comment/4746\",[]],[\"name/4747\",[245,60.876]],[\"comment/4747\",[]],[\"name/4748\",[369,65.397]],[\"comment/4748\",[]],[\"name/4749\",[370,65.397]],[\"comment/4749\",[]],[\"name/4750\",[371,64.487]],[\"comment/4750\",[]],[\"name/4751\",[372,65.397]],[\"comment/4751\",[]],[\"name/4752\",[373,65.397]],[\"comment/4752\",[]],[\"name/4753\",[38,47.086]],[\"comment/4753\",[]],[\"name/4754\",[39,47.086]],[\"comment/4754\",[]],[\"name/4755\",[40,47.086]],[\"comment/4755\",[]],[\"name/4756\",[41,47.086]],[\"comment/4756\",[]],[\"name/4757\",[42,47.086]],[\"comment/4757\",[]],[\"name/4758\",[43,47.086]],[\"comment/4758\",[]],[\"name/4759\",[44,47.086]],[\"comment/4759\",[]],[\"name/4760\",[45,47.086]],[\"comment/4760\",[]],[\"name/4761\",[46,47.086]],[\"comment/4761\",[]],[\"name/4762\",[47,47.086]],[\"comment/4762\",[]],[\"name/4763\",[48,47.086]],[\"comment/4763\",[]],[\"name/4764\",[49,47.086]],[\"comment/4764\",[]],[\"name/4765\",[50,47.086]],[\"comment/4765\",[]],[\"name/4766\",[51,47.086]],[\"comment/4766\",[]],[\"name/4767\",[52,47.086]],[\"comment/4767\",[]],[\"name/4768\",[53,47.086]],[\"comment/4768\",[]],[\"name/4769\",[54,47.086]],[\"comment/4769\",[]],[\"name/4770\",[55,47.086]],[\"comment/4770\",[]],[\"name/4771\",[56,47.086]],[\"comment/4771\",[]],[\"name/4772\",[57,46.785]],[\"comment/4772\",[]],[\"name/4773\",[58,46.785]],[\"comment/4773\",[]],[\"name/4774\",[59,47.086]],[\"comment/4774\",[]],[\"name/4775\",[60,43.21]],[\"comment/4775\",[]],[\"name/4776\",[61,46.638]],[\"comment/4776\",[]],[\"name/4777\",[62,46.638]],[\"comment/4777\",[]],[\"name/4778\",[63,47.086]],[\"comment/4778\",[]],[\"name/4779\",[64,46.934]],[\"comment/4779\",[]],[\"name/4780\",[65,46.934]],[\"comment/4780\",[]],[\"name/4781\",[66,47.086]],[\"comment/4781\",[]],[\"name/4782\",[67,47.086]],[\"comment/4782\",[]],[\"name/4783\",[68,47.086]],[\"comment/4783\",[]],[\"name/4784\",[69,46.934]],[\"comment/4784\",[]],[\"name/4785\",[70,46.785]],[\"comment/4785\",[]],[\"name/4786\",[71,46.785]],[\"comment/4786\",[]],[\"name/4787\",[1126,84.86]],[\"comment/4787\",[]],[\"name/4788\",[1127,84.86]],[\"comment/4788\",[]],[\"name/4789\",[412,63.653]],[\"comment/4789\",[]],[\"name/4790\",[411,64.487]],[\"comment/4790\",[]],[\"name/4791\",[955,79.751]],[\"comment/4791\",[]],[\"name/4792\",[533,76.385]],[\"comment/4792\",[]],[\"name/4793\",[2,46.209]],[\"comment/4793\",[]],[\"name/4794\",[8,46.934]],[\"comment/4794\",[]],[\"name/4795\",[6,54.096]],[\"comment/4795\",[]],[\"name/4796\",[9,44.076]],[\"comment/4796\",[]],[\"name/4797\",[11,52.935]],[\"comment/4797\",[]],[\"name/4798\",[12,44.421]],[\"comment/4798\",[]],[\"name/4799\",[113,57.774]],[\"comment/4799\",[]],[\"name/4800\",[1015,76.385]],[\"comment/4800\",[]],[\"name/4801\",[1119,73.872]],[\"comment/4801\",[]],[\"name/4802\",[1120,71.865]],[\"comment/4802\",[]],[\"name/4803\",[19,44.657]],[\"comment/4803\",[]],[\"name/4804\",[29,56.137]],[\"comment/4804\",[]],[\"name/4805\",[30,55.767]],[\"comment/4805\",[]],[\"name/4806\",[122,54.408]],[\"comment/4806\",[]],[\"name/4807\",[123,54.408]],[\"comment/4807\",[]],[\"name/4808\",[124,54.096]],[\"comment/4808\",[]],[\"name/4809\",[16,49.491]],[\"comment/4809\",[]],[\"name/4810\",[20,50.513]],[\"comment/4810\",[]],[\"name/4811\",[169,53.793]],[\"comment/4811\",[]],[\"name/4812\",[245,60.876]],[\"comment/4812\",[]],[\"name/4813\",[369,65.397]],[\"comment/4813\",[]],[\"name/4814\",[370,65.397]],[\"comment/4814\",[]],[\"name/4815\",[371,64.487]],[\"comment/4815\",[]],[\"name/4816\",[372,65.397]],[\"comment/4816\",[]],[\"name/4817\",[373,65.397]],[\"comment/4817\",[]],[\"name/4818\",[38,47.086]],[\"comment/4818\",[]],[\"name/4819\",[39,47.086]],[\"comment/4819\",[]],[\"name/4820\",[40,47.086]],[\"comment/4820\",[]],[\"name/4821\",[41,47.086]],[\"comment/4821\",[]],[\"name/4822\",[42,47.086]],[\"comment/4822\",[]],[\"name/4823\",[43,47.086]],[\"comment/4823\",[]],[\"name/4824\",[44,47.086]],[\"comment/4824\",[]],[\"name/4825\",[45,47.086]],[\"comment/4825\",[]],[\"name/4826\",[46,47.086]],[\"comment/4826\",[]],[\"name/4827\",[47,47.086]],[\"comment/4827\",[]],[\"name/4828\",[48,47.086]],[\"comment/4828\",[]],[\"name/4829\",[49,47.086]],[\"comment/4829\",[]],[\"name/4830\",[50,47.086]],[\"comment/4830\",[]],[\"name/4831\",[51,47.086]],[\"comment/4831\",[]],[\"name/4832\",[52,47.086]],[\"comment/4832\",[]],[\"name/4833\",[53,47.086]],[\"comment/4833\",[]],[\"name/4834\",[54,47.086]],[\"comment/4834\",[]],[\"name/4835\",[55,47.086]],[\"comment/4835\",[]],[\"name/4836\",[56,47.086]],[\"comment/4836\",[]],[\"name/4837\",[57,46.785]],[\"comment/4837\",[]],[\"name/4838\",[58,46.785]],[\"comment/4838\",[]],[\"name/4839\",[59,47.086]],[\"comment/4839\",[]],[\"name/4840\",[60,43.21]],[\"comment/4840\",[]],[\"name/4841\",[61,46.638]],[\"comment/4841\",[]],[\"name/4842\",[62,46.638]],[\"comment/4842\",[]],[\"name/4843\",[63,47.086]],[\"comment/4843\",[]],[\"name/4844\",[64,46.934]],[\"comment/4844\",[]],[\"name/4845\",[65,46.934]],[\"comment/4845\",[]],[\"name/4846\",[66,47.086]],[\"comment/4846\",[]],[\"name/4847\",[67,47.086]],[\"comment/4847\",[]],[\"name/4848\",[68,47.086]],[\"comment/4848\",[]],[\"name/4849\",[69,46.934]],[\"comment/4849\",[]],[\"name/4850\",[70,46.785]],[\"comment/4850\",[]],[\"name/4851\",[71,46.785]],[\"comment/4851\",[]],[\"name/4852\",[534,76.385]],[\"comment/4852\",[]],[\"name/4853\",[2,46.209]],[\"comment/4853\",[]],[\"name/4854\",[8,46.934]],[\"comment/4854\",[]],[\"name/4855\",[6,54.096]],[\"comment/4855\",[]],[\"name/4856\",[9,44.076]],[\"comment/4856\",[]],[\"name/4857\",[1128,84.86]],[\"comment/4857\",[]],[\"name/4858\",[1119,73.872]],[\"comment/4858\",[]],[\"name/4859\",[1120,71.865]],[\"comment/4859\",[]],[\"name/4860\",[1016,71.865]],[\"comment/4860\",[]],[\"name/4861\",[19,44.657]],[\"comment/4861\",[]],[\"name/4862\",[29,56.137]],[\"comment/4862\",[]],[\"name/4863\",[30,55.767]],[\"comment/4863\",[]],[\"name/4864\",[122,54.408]],[\"comment/4864\",[]],[\"name/4865\",[123,54.408]],[\"comment/4865\",[]],[\"name/4866\",[124,54.096]],[\"comment/4866\",[]],[\"name/4867\",[16,49.491]],[\"comment/4867\",[]],[\"name/4868\",[20,50.513]],[\"comment/4868\",[]],[\"name/4869\",[169,53.793]],[\"comment/4869\",[]],[\"name/4870\",[245,60.876]],[\"comment/4870\",[]],[\"name/4871\",[369,65.397]],[\"comment/4871\",[]],[\"name/4872\",[370,65.397]],[\"comment/4872\",[]],[\"name/4873\",[371,64.487]],[\"comment/4873\",[]],[\"name/4874\",[372,65.397]],[\"comment/4874\",[]],[\"name/4875\",[373,65.397]],[\"comment/4875\",[]],[\"name/4876\",[38,47.086]],[\"comment/4876\",[]],[\"name/4877\",[39,47.086]],[\"comment/4877\",[]],[\"name/4878\",[40,47.086]],[\"comment/4878\",[]],[\"name/4879\",[41,47.086]],[\"comment/4879\",[]],[\"name/4880\",[42,47.086]],[\"comment/4880\",[]],[\"name/4881\",[43,47.086]],[\"comment/4881\",[]],[\"name/4882\",[44,47.086]],[\"comment/4882\",[]],[\"name/4883\",[45,47.086]],[\"comment/4883\",[]],[\"name/4884\",[46,47.086]],[\"comment/4884\",[]],[\"name/4885\",[47,47.086]],[\"comment/4885\",[]],[\"name/4886\",[48,47.086]],[\"comment/4886\",[]],[\"name/4887\",[49,47.086]],[\"comment/4887\",[]],[\"name/4888\",[50,47.086]],[\"comment/4888\",[]],[\"name/4889\",[51,47.086]],[\"comment/4889\",[]],[\"name/4890\",[52,47.086]],[\"comment/4890\",[]],[\"name/4891\",[53,47.086]],[\"comment/4891\",[]],[\"name/4892\",[54,47.086]],[\"comment/4892\",[]],[\"name/4893\",[55,47.086]],[\"comment/4893\",[]],[\"name/4894\",[56,47.086]],[\"comment/4894\",[]],[\"name/4895\",[57,46.785]],[\"comment/4895\",[]],[\"name/4896\",[58,46.785]],[\"comment/4896\",[]],[\"name/4897\",[59,47.086]],[\"comment/4897\",[]],[\"name/4898\",[60,43.21]],[\"comment/4898\",[]],[\"name/4899\",[61,46.638]],[\"comment/4899\",[]],[\"name/4900\",[62,46.638]],[\"comment/4900\",[]],[\"name/4901\",[63,47.086]],[\"comment/4901\",[]],[\"name/4902\",[64,46.934]],[\"comment/4902\",[]],[\"name/4903\",[65,46.934]],[\"comment/4903\",[]],[\"name/4904\",[66,47.086]],[\"comment/4904\",[]],[\"name/4905\",[67,47.086]],[\"comment/4905\",[]],[\"name/4906\",[68,47.086]],[\"comment/4906\",[]],[\"name/4907\",[69,46.934]],[\"comment/4907\",[]],[\"name/4908\",[70,46.785]],[\"comment/4908\",[]],[\"name/4909\",[71,46.785]],[\"comment/4909\",[]],[\"name/4910\",[1129,84.86]],[\"comment/4910\",[]],[\"name/4911\",[1069,79.751]],[\"comment/4911\",[]],[\"name/4912\",[1071,79.751]],[\"comment/4912\",[]],[\"name/4913\",[1070,79.751]],[\"comment/4913\",[]],[\"name/4914\",[1072,79.751]],[\"comment/4914\",[]],[\"name/4915\",[507,73.872]],[\"comment/4915\",[]],[\"name/4916\",[2,46.209]],[\"comment/4916\",[]],[\"name/4917\",[8,46.934]],[\"comment/4917\",[]],[\"name/4918\",[9,44.076]],[\"comment/4918\",[]],[\"name/4919\",[11,52.935]],[\"comment/4919\",[]],[\"name/4920\",[12,44.421]],[\"comment/4920\",[]],[\"name/4921\",[1130,76.385]],[\"comment/4921\",[]],[\"name/4922\",[1131,76.385]],[\"comment/4922\",[]],[\"name/4923\",[1132,76.385]],[\"comment/4923\",[]],[\"name/4924\",[1133,76.385]],[\"comment/4924\",[]],[\"name/4925\",[1134,76.385]],[\"comment/4925\",[]],[\"name/4926\",[1135,76.385]],[\"comment/4926\",[]],[\"name/4927\",[110,57.339]],[\"comment/4927\",[]],[\"name/4928\",[1136,73.872]],[\"comment/4928\",[]],[\"name/4929\",[393,70.194]],[\"comment/4929\",[]],[\"name/4930\",[394,73.872]],[\"comment/4930\",[]],[\"name/4931\",[1137,76.385]],[\"comment/4931\",[]],[\"name/4932\",[1138,76.385]],[\"comment/4932\",[]],[\"name/4933\",[211,71.865]],[\"comment/4933\",[]],[\"name/4934\",[19,44.657]],[\"comment/4934\",[]],[\"name/4935\",[38,47.086]],[\"comment/4935\",[]],[\"name/4936\",[39,47.086]],[\"comment/4936\",[]],[\"name/4937\",[40,47.086]],[\"comment/4937\",[]],[\"name/4938\",[41,47.086]],[\"comment/4938\",[]],[\"name/4939\",[42,47.086]],[\"comment/4939\",[]],[\"name/4940\",[43,47.086]],[\"comment/4940\",[]],[\"name/4941\",[44,47.086]],[\"comment/4941\",[]],[\"name/4942\",[45,47.086]],[\"comment/4942\",[]],[\"name/4943\",[46,47.086]],[\"comment/4943\",[]],[\"name/4944\",[47,47.086]],[\"comment/4944\",[]],[\"name/4945\",[48,47.086]],[\"comment/4945\",[]],[\"name/4946\",[49,47.086]],[\"comment/4946\",[]],[\"name/4947\",[50,47.086]],[\"comment/4947\",[]],[\"name/4948\",[51,47.086]],[\"comment/4948\",[]],[\"name/4949\",[52,47.086]],[\"comment/4949\",[]],[\"name/4950\",[53,47.086]],[\"comment/4950\",[]],[\"name/4951\",[54,47.086]],[\"comment/4951\",[]],[\"name/4952\",[55,47.086]],[\"comment/4952\",[]],[\"name/4953\",[56,47.086]],[\"comment/4953\",[]],[\"name/4954\",[57,46.785]],[\"comment/4954\",[]],[\"name/4955\",[58,46.785]],[\"comment/4955\",[]],[\"name/4956\",[59,47.086]],[\"comment/4956\",[]],[\"name/4957\",[60,43.21]],[\"comment/4957\",[]],[\"name/4958\",[61,46.638]],[\"comment/4958\",[]],[\"name/4959\",[62,46.638]],[\"comment/4959\",[]],[\"name/4960\",[63,47.086]],[\"comment/4960\",[]],[\"name/4961\",[64,46.934]],[\"comment/4961\",[]],[\"name/4962\",[65,46.934]],[\"comment/4962\",[]],[\"name/4963\",[66,47.086]],[\"comment/4963\",[]],[\"name/4964\",[67,47.086]],[\"comment/4964\",[]],[\"name/4965\",[68,47.086]],[\"comment/4965\",[]],[\"name/4966\",[69,46.934]],[\"comment/4966\",[]],[\"name/4967\",[70,46.785]],[\"comment/4967\",[]],[\"name/4968\",[71,46.785]],[\"comment/4968\",[]],[\"name/4969\",[549,79.751]],[\"comment/4969\",[]],[\"name/4970\",[325,71.865]],[\"comment/4970\",[]],[\"name/4971\",[403,73.872]],[\"comment/4971\",[]],[\"name/4972\",[1139,84.86]],[\"comment/4972\",[]],[\"name/4973\",[1048,76.385]],[\"comment/4973\",[]],[\"name/4974\",[1140,84.86]],[\"comment/4974\",[]],[\"name/4975\",[543,76.385]],[\"comment/4975\",[]],[\"name/4976\",[2,46.209]],[\"comment/4976\",[]],[\"name/4977\",[10,57.774]],[\"comment/4977\",[]],[\"name/4978\",[8,46.934]],[\"comment/4978\",[]],[\"name/4979\",[6,54.096]],[\"comment/4979\",[]],[\"name/4980\",[9,44.076]],[\"comment/4980\",[]],[\"name/4981\",[1120,71.865]],[\"comment/4981\",[]],[\"name/4982\",[19,44.657]],[\"comment/4982\",[]],[\"name/4983\",[29,56.137]],[\"comment/4983\",[]],[\"name/4984\",[30,55.767]],[\"comment/4984\",[]],[\"name/4985\",[122,54.408]],[\"comment/4985\",[]],[\"name/4986\",[123,54.408]],[\"comment/4986\",[]],[\"name/4987\",[124,54.096]],[\"comment/4987\",[]],[\"name/4988\",[16,49.491]],[\"comment/4988\",[]],[\"name/4989\",[20,50.513]],[\"comment/4989\",[]],[\"name/4990\",[169,53.793]],[\"comment/4990\",[]],[\"name/4991\",[245,60.876]],[\"comment/4991\",[]],[\"name/4992\",[369,65.397]],[\"comment/4992\",[]],[\"name/4993\",[370,65.397]],[\"comment/4993\",[]],[\"name/4994\",[371,64.487]],[\"comment/4994\",[]],[\"name/4995\",[372,65.397]],[\"comment/4995\",[]],[\"name/4996\",[373,65.397]],[\"comment/4996\",[]],[\"name/4997\",[38,47.086]],[\"comment/4997\",[]],[\"name/4998\",[39,47.086]],[\"comment/4998\",[]],[\"name/4999\",[40,47.086]],[\"comment/4999\",[]],[\"name/5000\",[41,47.086]],[\"comment/5000\",[]],[\"name/5001\",[42,47.086]],[\"comment/5001\",[]],[\"name/5002\",[43,47.086]],[\"comment/5002\",[]],[\"name/5003\",[44,47.086]],[\"comment/5003\",[]],[\"name/5004\",[45,47.086]],[\"comment/5004\",[]],[\"name/5005\",[46,47.086]],[\"comment/5005\",[]],[\"name/5006\",[47,47.086]],[\"comment/5006\",[]],[\"name/5007\",[48,47.086]],[\"comment/5007\",[]],[\"name/5008\",[49,47.086]],[\"comment/5008\",[]],[\"name/5009\",[50,47.086]],[\"comment/5009\",[]],[\"name/5010\",[51,47.086]],[\"comment/5010\",[]],[\"name/5011\",[52,47.086]],[\"comment/5011\",[]],[\"name/5012\",[53,47.086]],[\"comment/5012\",[]],[\"name/5013\",[54,47.086]],[\"comment/5013\",[]],[\"name/5014\",[55,47.086]],[\"comment/5014\",[]],[\"name/5015\",[56,47.086]],[\"comment/5015\",[]],[\"name/5016\",[57,46.785]],[\"comment/5016\",[]],[\"name/5017\",[58,46.785]],[\"comment/5017\",[]],[\"name/5018\",[59,47.086]],[\"comment/5018\",[]],[\"name/5019\",[60,43.21]],[\"comment/5019\",[]],[\"name/5020\",[61,46.638]],[\"comment/5020\",[]],[\"name/5021\",[62,46.638]],[\"comment/5021\",[]],[\"name/5022\",[63,47.086]],[\"comment/5022\",[]],[\"name/5023\",[64,46.934]],[\"comment/5023\",[]],[\"name/5024\",[65,46.934]],[\"comment/5024\",[]],[\"name/5025\",[66,47.086]],[\"comment/5025\",[]],[\"name/5026\",[67,47.086]],[\"comment/5026\",[]],[\"name/5027\",[68,47.086]],[\"comment/5027\",[]],[\"name/5028\",[69,46.934]],[\"comment/5028\",[]],[\"name/5029\",[70,46.785]],[\"comment/5029\",[]],[\"name/5030\",[71,46.785]],[\"comment/5030\",[]],[\"name/5031\",[1141,84.86]],[\"comment/5031\",[]],[\"name/5032\",[1142,84.86]],[\"comment/5032\",[]],[\"name/5033\",[1143,84.86]],[\"comment/5033\",[]],[\"name/5034\",[1144,84.86]],[\"comment/5034\",[]],[\"name/5035\",[1145,84.86]],[\"comment/5035\",[]],[\"name/5036\",[1146,84.86]],[\"comment/5036\",[]],[\"name/5037\",[1147,84.86]],[\"comment/5037\",[]],[\"name/5038\",[1148,84.86]],[\"comment/5038\",[]],[\"name/5039\",[681,64.487]],[\"comment/5039\",[]],[\"name/5040\",[1149,84.86]],[\"comment/5040\",[]],[\"name/5041\",[1091,79.751]],[\"comment/5041\",[]],[\"name/5042\",[1090,79.751]],[\"comment/5042\",[]],[\"name/5043\",[1150,84.86]],[\"comment/5043\",[]],[\"name/5044\",[1151,84.86]],[\"comment/5044\",[]],[\"name/5045\",[439,63.653]],[\"comment/5045\",[]],[\"name/5046\",[1,57.339]],[\"comment/5046\",[]],[\"name/5047\",[2,46.209]],[\"comment/5047\",[]],[\"name/5048\",[228,76.385]],[\"comment/5048\",[]],[\"name/5049\",[229,76.385]],[\"comment/5049\",[]],[\"name/5050\",[225,60.876]],[\"comment/5050\",[]],[\"name/5051\",[255,65.397]],[\"comment/5051\",[]],[\"name/5052\",[8,46.934]],[\"comment/5052\",[]],[\"name/5053\",[9,44.076]],[\"comment/5053\",[]],[\"name/5054\",[465,70.194]],[\"comment/5054\",[]],[\"name/5055\",[1152,84.86]],[\"comment/5055\",[]],[\"name/5056\",[1136,73.872]],[\"comment/5056\",[]],[\"name/5057\",[1153,84.86]],[\"comment/5057\",[]],[\"name/5058\",[1154,84.86]],[\"comment/5058\",[]],[\"name/5059\",[1155,84.86]],[\"comment/5059\",[]],[\"name/5060\",[1017,76.385]],[\"comment/5060\",[]],[\"name/5061\",[56,47.086]],[\"comment/5061\",[]],[\"name/5062\",[1156,84.86]],[\"comment/5062\",[]],[\"name/5063\",[12,44.421]],[\"comment/5063\",[]],[\"name/5064\",[695,68.762]],[\"comment/5064\",[]],[\"name/5065\",[696,68.762]],[\"comment/5065\",[]],[\"name/5066\",[1157,84.86]],[\"comment/5066\",[]],[\"name/5067\",[1158,84.86]],[\"comment/5067\",[]],[\"name/5068\",[1159,84.86]],[\"comment/5068\",[]],[\"name/5069\",[1160,84.86]],[\"comment/5069\",[]],[\"name/5070\",[19,44.657]],[\"comment/5070\",[]],[\"name/5071\",[38,47.086]],[\"comment/5071\",[]],[\"name/5072\",[39,47.086]],[\"comment/5072\",[]],[\"name/5073\",[40,47.086]],[\"comment/5073\",[]],[\"name/5074\",[41,47.086]],[\"comment/5074\",[]],[\"name/5075\",[42,47.086]],[\"comment/5075\",[]],[\"name/5076\",[43,47.086]],[\"comment/5076\",[]],[\"name/5077\",[44,47.086]],[\"comment/5077\",[]],[\"name/5078\",[45,47.086]],[\"comment/5078\",[]],[\"name/5079\",[46,47.086]],[\"comment/5079\",[]],[\"name/5080\",[47,47.086]],[\"comment/5080\",[]],[\"name/5081\",[48,47.086]],[\"comment/5081\",[]],[\"name/5082\",[49,47.086]],[\"comment/5082\",[]],[\"name/5083\",[50,47.086]],[\"comment/5083\",[]],[\"name/5084\",[51,47.086]],[\"comment/5084\",[]],[\"name/5085\",[52,47.086]],[\"comment/5085\",[]],[\"name/5086\",[53,47.086]],[\"comment/5086\",[]],[\"name/5087\",[54,47.086]],[\"comment/5087\",[]],[\"name/5088\",[55,47.086]],[\"comment/5088\",[]],[\"name/5089\",[57,46.785]],[\"comment/5089\",[]],[\"name/5090\",[58,46.785]],[\"comment/5090\",[]],[\"name/5091\",[59,47.086]],[\"comment/5091\",[]],[\"name/5092\",[60,43.21]],[\"comment/5092\",[]],[\"name/5093\",[61,46.638]],[\"comment/5093\",[]],[\"name/5094\",[62,46.638]],[\"comment/5094\",[]],[\"name/5095\",[63,47.086]],[\"comment/5095\",[]],[\"name/5096\",[64,46.934]],[\"comment/5096\",[]],[\"name/5097\",[65,46.934]],[\"comment/5097\",[]],[\"name/5098\",[66,47.086]],[\"comment/5098\",[]],[\"name/5099\",[67,47.086]],[\"comment/5099\",[]],[\"name/5100\",[68,47.086]],[\"comment/5100\",[]],[\"name/5101\",[69,46.934]],[\"comment/5101\",[]],[\"name/5102\",[70,46.785]],[\"comment/5102\",[]],[\"name/5103\",[71,46.785]],[\"comment/5103\",[]],[\"name/5104\",[1161,79.751]],[\"comment/5104\",[]],[\"name/5105\",[2,46.209]],[\"comment/5105\",[]],[\"name/5106\",[98,60.287]],[\"comment/5106\",[]],[\"name/5107\",[99,59.732]],[\"comment/5107\",[]],[\"name/5108\",[8,46.934]],[\"comment/5108\",[]],[\"name/5109\",[9,44.076]],[\"comment/5109\",[]],[\"name/5110\",[681,64.487]],[\"comment/5110\",[]],[\"name/5111\",[439,63.653]],[\"comment/5111\",[]],[\"name/5112\",[682,70.194]],[\"comment/5112\",[]],[\"name/5113\",[683,70.194]],[\"comment/5113\",[]],[\"name/5114\",[684,70.194]],[\"comment/5114\",[]],[\"name/5115\",[685,70.194]],[\"comment/5115\",[]],[\"name/5116\",[686,70.194]],[\"comment/5116\",[]],[\"name/5117\",[687,70.194]],[\"comment/5117\",[]],[\"name/5118\",[688,70.194]],[\"comment/5118\",[]],[\"name/5119\",[212,68.762]],[\"comment/5119\",[]],[\"name/5120\",[689,70.194]],[\"comment/5120\",[]],[\"name/5121\",[160,59.732]],[\"comment/5121\",[]],[\"name/5122\",[690,70.194]],[\"comment/5122\",[]],[\"name/5123\",[691,70.194]],[\"comment/5123\",[]],[\"name/5124\",[692,70.194]],[\"comment/5124\",[]],[\"name/5125\",[693,70.194]],[\"comment/5125\",[]],[\"name/5126\",[694,70.194]],[\"comment/5126\",[]],[\"name/5127\",[161,60.287]],[\"comment/5127\",[]],[\"name/5128\",[12,44.421]],[\"comment/5128\",[]],[\"name/5129\",[695,68.762]],[\"comment/5129\",[]],[\"name/5130\",[696,68.762]],[\"comment/5130\",[]],[\"name/5131\",[137,59.205]],[\"comment/5131\",[]],[\"name/5132\",[697,67.51]],[\"comment/5132\",[]],[\"name/5133\",[698,70.194]],[\"comment/5133\",[]],[\"name/5134\",[182,56.922]],[\"comment/5134\",[]],[\"name/5135\",[699,70.194]],[\"comment/5135\",[]],[\"name/5136\",[104,59.732]],[\"comment/5136\",[]],[\"name/5137\",[105,57.339]],[\"comment/5137\",[]],[\"name/5138\",[106,59.732]],[\"comment/5138\",[]],[\"name/5139\",[11,52.935]],[\"comment/5139\",[]],[\"name/5140\",[12,44.421]],[\"comment/5140\",[]],[\"name/5141\",[107,60.287]],[\"comment/5141\",[]],[\"name/5142\",[19,44.657]],[\"comment/5142\",[]],[\"name/5143\",[108,60.287]],[\"comment/5143\",[]],[\"name/5144\",[109,60.287]],[\"comment/5144\",[]],[\"name/5145\",[110,57.339]],[\"comment/5145\",[]],[\"name/5146\",[111,60.287]],[\"comment/5146\",[]],[\"name/5147\",[112,60.287]],[\"comment/5147\",[]],[\"name/5148\",[113,57.774]],[\"comment/5148\",[]],[\"name/5149\",[114,60.287]],[\"comment/5149\",[]],[\"name/5150\",[115,60.287]],[\"comment/5150\",[]],[\"name/5151\",[116,56.922]],[\"comment/5151\",[]],[\"name/5152\",[60,43.21]],[\"comment/5152\",[]],[\"name/5153\",[117,58.705]],[\"comment/5153\",[]],[\"name/5154\",[118,60.287]],[\"comment/5154\",[]],[\"name/5155\",[119,60.287]],[\"comment/5155\",[]],[\"name/5156\",[120,59.732]],[\"comment/5156\",[]],[\"name/5157\",[121,60.287]],[\"comment/5157\",[]],[\"name/5158\",[122,54.408]],[\"comment/5158\",[]],[\"name/5159\",[123,54.408]],[\"comment/5159\",[]],[\"name/5160\",[124,54.096]],[\"comment/5160\",[]],[\"name/5161\",[125,60.287]],[\"comment/5161\",[]],[\"name/5162\",[126,60.287]],[\"comment/5162\",[]],[\"name/5163\",[127,60.287]],[\"comment/5163\",[]],[\"name/5164\",[128,60.287]],[\"comment/5164\",[]],[\"name/5165\",[129,59.732]],[\"comment/5165\",[]],[\"name/5166\",[130,60.287]],[\"comment/5166\",[]],[\"name/5167\",[131,60.287]],[\"comment/5167\",[]],[\"name/5168\",[132,59.732]],[\"comment/5168\",[]],[\"name/5169\",[133,60.287]],[\"comment/5169\",[]],[\"name/5170\",[134,60.287]],[\"comment/5170\",[]],[\"name/5171\",[135,60.287]],[\"comment/5171\",[]],[\"name/5172\",[136,60.287]],[\"comment/5172\",[]],[\"name/5173\",[138,59.732]],[\"comment/5173\",[]],[\"name/5174\",[139,59.732]],[\"comment/5174\",[]],[\"name/5175\",[140,59.732]],[\"comment/5175\",[]],[\"name/5176\",[141,59.732]],[\"comment/5176\",[]],[\"name/5177\",[142,60.287]],[\"comment/5177\",[]],[\"name/5178\",[143,60.287]],[\"comment/5178\",[]],[\"name/5179\",[144,60.287]],[\"comment/5179\",[]],[\"name/5180\",[145,60.287]],[\"comment/5180\",[]],[\"name/5181\",[146,60.287]],[\"comment/5181\",[]],[\"name/5182\",[147,60.287]],[\"comment/5182\",[]],[\"name/5183\",[148,60.287]],[\"comment/5183\",[]],[\"name/5184\",[149,60.287]],[\"comment/5184\",[]],[\"name/5185\",[150,58.228]],[\"comment/5185\",[]],[\"name/5186\",[151,60.287]],[\"comment/5186\",[]],[\"name/5187\",[152,60.287]],[\"comment/5187\",[]],[\"name/5188\",[12,44.421]],[\"comment/5188\",[]],[\"name/5189\",[153,56.922]],[\"comment/5189\",[]],[\"name/5190\",[154,56.922]],[\"comment/5190\",[]],[\"name/5191\",[155,60.287]],[\"comment/5191\",[]],[\"name/5192\",[156,60.287]],[\"comment/5192\",[]],[\"name/5193\",[157,60.287]],[\"comment/5193\",[]],[\"name/5194\",[158,56.922]],[\"comment/5194\",[]],[\"name/5195\",[159,59.732]],[\"comment/5195\",[]],[\"name/5196\",[162,60.287]],[\"comment/5196\",[]],[\"name/5197\",[163,60.287]],[\"comment/5197\",[]],[\"name/5198\",[164,60.287]],[\"comment/5198\",[]],[\"name/5199\",[165,60.287]],[\"comment/5199\",[]],[\"name/5200\",[166,57.339]],[\"comment/5200\",[]],[\"name/5201\",[167,59.732]],[\"comment/5201\",[]],[\"name/5202\",[168,59.732]],[\"comment/5202\",[]],[\"name/5203\",[20,50.513]],[\"comment/5203\",[]],[\"name/5204\",[16,49.491]],[\"comment/5204\",[]],[\"name/5205\",[35,52.664]],[\"comment/5205\",[]],[\"name/5206\",[36,52.664]],[\"comment/5206\",[]],[\"name/5207\",[169,53.793]],[\"comment/5207\",[]],[\"name/5208\",[170,59.205]],[\"comment/5208\",[]],[\"name/5209\",[171,59.732]],[\"comment/5209\",[]],[\"name/5210\",[172,59.732]],[\"comment/5210\",[]],[\"name/5211\",[173,59.732]],[\"comment/5211\",[]],[\"name/5212\",[174,59.732]],[\"comment/5212\",[]],[\"name/5213\",[175,59.732]],[\"comment/5213\",[]],[\"name/5214\",[176,59.732]],[\"comment/5214\",[]],[\"name/5215\",[177,59.732]],[\"comment/5215\",[]],[\"name/5216\",[178,59.732]],[\"comment/5216\",[]],[\"name/5217\",[102,59.732]],[\"comment/5217\",[]],[\"name/5218\",[179,58.228]],[\"comment/5218\",[]],[\"name/5219\",[180,59.732]],[\"comment/5219\",[]],[\"name/5220\",[103,56.522]],[\"comment/5220\",[]],[\"name/5221\",[181,59.732]],[\"comment/5221\",[]],[\"name/5222\",[183,59.205]],[\"comment/5222\",[]],[\"name/5223\",[184,59.732]],[\"comment/5223\",[]],[\"name/5224\",[185,59.732]],[\"comment/5224\",[]],[\"name/5225\",[186,59.732]],[\"comment/5225\",[]],[\"name/5226\",[187,59.732]],[\"comment/5226\",[]],[\"name/5227\",[188,59.732]],[\"comment/5227\",[]],[\"name/5228\",[28,53.498]],[\"comment/5228\",[]],[\"name/5229\",[26,53.498]],[\"comment/5229\",[]],[\"name/5230\",[27,53.498]],[\"comment/5230\",[]],[\"name/5231\",[38,47.086]],[\"comment/5231\",[]],[\"name/5232\",[39,47.086]],[\"comment/5232\",[]],[\"name/5233\",[40,47.086]],[\"comment/5233\",[]],[\"name/5234\",[41,47.086]],[\"comment/5234\",[]],[\"name/5235\",[42,47.086]],[\"comment/5235\",[]],[\"name/5236\",[43,47.086]],[\"comment/5236\",[]],[\"name/5237\",[44,47.086]],[\"comment/5237\",[]],[\"name/5238\",[45,47.086]],[\"comment/5238\",[]],[\"name/5239\",[19,44.657]],[\"comment/5239\",[]],[\"name/5240\",[46,47.086]],[\"comment/5240\",[]],[\"name/5241\",[47,47.086]],[\"comment/5241\",[]],[\"name/5242\",[48,47.086]],[\"comment/5242\",[]],[\"name/5243\",[49,47.086]],[\"comment/5243\",[]],[\"name/5244\",[50,47.086]],[\"comment/5244\",[]],[\"name/5245\",[51,47.086]],[\"comment/5245\",[]],[\"name/5246\",[52,47.086]],[\"comment/5246\",[]],[\"name/5247\",[53,47.086]],[\"comment/5247\",[]],[\"name/5248\",[54,47.086]],[\"comment/5248\",[]],[\"name/5249\",[55,47.086]],[\"comment/5249\",[]],[\"name/5250\",[56,47.086]],[\"comment/5250\",[]],[\"name/5251\",[57,46.785]],[\"comment/5251\",[]],[\"name/5252\",[58,46.785]],[\"comment/5252\",[]],[\"name/5253\",[59,47.086]],[\"comment/5253\",[]],[\"name/5254\",[60,43.21]],[\"comment/5254\",[]],[\"name/5255\",[61,46.638]],[\"comment/5255\",[]],[\"name/5256\",[62,46.638]],[\"comment/5256\",[]],[\"name/5257\",[63,47.086]],[\"comment/5257\",[]],[\"name/5258\",[64,46.934]],[\"comment/5258\",[]],[\"name/5259\",[65,46.934]],[\"comment/5259\",[]],[\"name/5260\",[66,47.086]],[\"comment/5260\",[]],[\"name/5261\",[67,47.086]],[\"comment/5261\",[]],[\"name/5262\",[68,47.086]],[\"comment/5262\",[]],[\"name/5263\",[69,46.934]],[\"comment/5263\",[]],[\"name/5264\",[70,46.785]],[\"comment/5264\",[]],[\"name/5265\",[71,46.785]],[\"comment/5265\",[]],[\"name/5266\",[1162,84.86]],[\"comment/5266\",[]],[\"name/5267\",[1163,84.86]],[\"comment/5267\",[]],[\"name/5268\",[1164,84.86]],[\"comment/5268\",[]],[\"name/5269\",[1165,84.86]],[\"comment/5269\",[]],[\"name/5270\",[995,76.385]],[\"comment/5270\",[]],[\"name/5271\",[501,71.865]],[\"comment/5271\",[]],[\"name/5272\",[2,46.209]],[\"comment/5272\",[]],[\"name/5273\",[8,46.934]],[\"comment/5273\",[]],[\"name/5274\",[336,70.194]],[\"comment/5274\",[]],[\"name/5275\",[3,58.228]],[\"comment/5275\",[]],[\"name/5276\",[6,54.096]],[\"comment/5276\",[]],[\"name/5277\",[7,59.732]],[\"comment/5277\",[]],[\"name/5278\",[9,44.076]],[\"comment/5278\",[]],[\"name/5279\",[1166,84.86]],[\"comment/5279\",[]],[\"name/5280\",[1167,84.86]],[\"comment/5280\",[]],[\"name/5281\",[679,79.751]],[\"comment/5281\",[]],[\"name/5282\",[680,79.751]],[\"comment/5282\",[]],[\"name/5283\",[1168,84.86]],[\"comment/5283\",[]],[\"name/5284\",[1169,79.751]],[\"comment/5284\",[]],[\"name/5285\",[1170,84.86]],[\"comment/5285\",[]],[\"name/5286\",[19,44.657]],[\"comment/5286\",[]],[\"name/5287\",[16,49.491]],[\"comment/5287\",[]],[\"name/5288\",[20,50.513]],[\"comment/5288\",[]],[\"name/5289\",[21,60.876]],[\"comment/5289\",[]],[\"name/5290\",[22,60.876]],[\"comment/5290\",[]],[\"name/5291\",[17,60.876]],[\"comment/5291\",[]],[\"name/5292\",[23,60.876]],[\"comment/5292\",[]],[\"name/5293\",[24,60.876]],[\"comment/5293\",[]],[\"name/5294\",[25,60.876]],[\"comment/5294\",[]],[\"name/5295\",[26,53.498]],[\"comment/5295\",[]],[\"name/5296\",[27,53.498]],[\"comment/5296\",[]],[\"name/5297\",[28,53.498]],[\"comment/5297\",[]],[\"name/5298\",[29,56.137]],[\"comment/5298\",[]],[\"name/5299\",[30,55.767]],[\"comment/5299\",[]],[\"name/5300\",[31,60.876]],[\"comment/5300\",[]],[\"name/5301\",[32,59.732]],[\"comment/5301\",[]],[\"name/5302\",[33,60.876]],[\"comment/5302\",[]],[\"name/5303\",[34,60.876]],[\"comment/5303\",[]],[\"name/5304\",[35,52.664]],[\"comment/5304\",[]],[\"name/5305\",[36,52.664]],[\"comment/5305\",[]],[\"name/5306\",[37,60.876]],[\"comment/5306\",[]],[\"name/5307\",[38,47.086]],[\"comment/5307\",[]],[\"name/5308\",[39,47.086]],[\"comment/5308\",[]],[\"name/5309\",[40,47.086]],[\"comment/5309\",[]],[\"name/5310\",[41,47.086]],[\"comment/5310\",[]],[\"name/5311\",[42,47.086]],[\"comment/5311\",[]],[\"name/5312\",[43,47.086]],[\"comment/5312\",[]],[\"name/5313\",[44,47.086]],[\"comment/5313\",[]],[\"name/5314\",[45,47.086]],[\"comment/5314\",[]],[\"name/5315\",[46,47.086]],[\"comment/5315\",[]],[\"name/5316\",[47,47.086]],[\"comment/5316\",[]],[\"name/5317\",[48,47.086]],[\"comment/5317\",[]],[\"name/5318\",[49,47.086]],[\"comment/5318\",[]],[\"name/5319\",[50,47.086]],[\"comment/5319\",[]],[\"name/5320\",[51,47.086]],[\"comment/5320\",[]],[\"name/5321\",[52,47.086]],[\"comment/5321\",[]],[\"name/5322\",[53,47.086]],[\"comment/5322\",[]],[\"name/5323\",[54,47.086]],[\"comment/5323\",[]],[\"name/5324\",[55,47.086]],[\"comment/5324\",[]],[\"name/5325\",[56,47.086]],[\"comment/5325\",[]],[\"name/5326\",[57,46.785]],[\"comment/5326\",[]],[\"name/5327\",[58,46.785]],[\"comment/5327\",[]],[\"name/5328\",[59,47.086]],[\"comment/5328\",[]],[\"name/5329\",[60,43.21]],[\"comment/5329\",[]],[\"name/5330\",[61,46.638]],[\"comment/5330\",[]],[\"name/5331\",[62,46.638]],[\"comment/5331\",[]],[\"name/5332\",[63,47.086]],[\"comment/5332\",[]],[\"name/5333\",[64,46.934]],[\"comment/5333\",[]],[\"name/5334\",[65,46.934]],[\"comment/5334\",[]],[\"name/5335\",[66,47.086]],[\"comment/5335\",[]],[\"name/5336\",[67,47.086]],[\"comment/5336\",[]],[\"name/5337\",[68,47.086]],[\"comment/5337\",[]],[\"name/5338\",[69,46.934]],[\"comment/5338\",[]],[\"name/5339\",[70,46.785]],[\"comment/5339\",[]],[\"name/5340\",[71,46.785]],[\"comment/5340\",[]],[\"name/5341\",[290,68.762]],[\"comment/5341\",[]],[\"name/5342\",[2,46.209]],[\"comment/5342\",[]],[\"name/5343\",[10,57.774]],[\"comment/5343\",[]],[\"name/5344\",[12,44.421]],[\"comment/5344\",[]],[\"name/5345\",[1171,84.86]],[\"comment/5345\",[]],[\"name/5346\",[1172,84.86]],[\"comment/5346\",[]],[\"name/5347\",[1173,84.86]],[\"comment/5347\",[]],[\"name/5348\",[1174,84.86]],[\"comment/5348\",[]],[\"name/5349\",[1175,84.86]],[\"comment/5349\",[]],[\"name/5350\",[1176,84.86]],[\"comment/5350\",[]],[\"name/5351\",[1177,84.86]],[\"comment/5351\",[]],[\"name/5352\",[8,46.934]],[\"comment/5352\",[]],[\"name/5353\",[3,58.228]],[\"comment/5353\",[]],[\"name/5354\",[6,54.096]],[\"comment/5354\",[]],[\"name/5355\",[7,59.732]],[\"comment/5355\",[]],[\"name/5356\",[9,44.076]],[\"comment/5356\",[]],[\"name/5357\",[11,52.935]],[\"comment/5357\",[]],[\"name/5358\",[12,44.421]],[\"comment/5358\",[]],[\"name/5359\",[14,73.872]],[\"comment/5359\",[]],[\"name/5360\",[29,56.137]],[\"comment/5360\",[]],[\"name/5361\",[1178,84.86]],[\"comment/5361\",[]],[\"name/5362\",[19,44.657]],[\"comment/5362\",[]],[\"name/5363\",[16,49.491]],[\"comment/5363\",[]],[\"name/5364\",[20,50.513]],[\"comment/5364\",[]],[\"name/5365\",[21,60.876]],[\"comment/5365\",[]],[\"name/5366\",[22,60.876]],[\"comment/5366\",[]],[\"name/5367\",[17,60.876]],[\"comment/5367\",[]],[\"name/5368\",[23,60.876]],[\"comment/5368\",[]],[\"name/5369\",[24,60.876]],[\"comment/5369\",[]],[\"name/5370\",[25,60.876]],[\"comment/5370\",[]],[\"name/5371\",[26,53.498]],[\"comment/5371\",[]],[\"name/5372\",[27,53.498]],[\"comment/5372\",[]],[\"name/5373\",[28,53.498]],[\"comment/5373\",[]],[\"name/5374\",[30,55.767]],[\"comment/5374\",[]],[\"name/5375\",[31,60.876]],[\"comment/5375\",[]],[\"name/5376\",[32,59.732]],[\"comment/5376\",[]],[\"name/5377\",[33,60.876]],[\"comment/5377\",[]],[\"name/5378\",[34,60.876]],[\"comment/5378\",[]],[\"name/5379\",[35,52.664]],[\"comment/5379\",[]],[\"name/5380\",[36,52.664]],[\"comment/5380\",[]],[\"name/5381\",[37,60.876]],[\"comment/5381\",[]],[\"name/5382\",[38,47.086]],[\"comment/5382\",[]],[\"name/5383\",[39,47.086]],[\"comment/5383\",[]],[\"name/5384\",[40,47.086]],[\"comment/5384\",[]],[\"name/5385\",[41,47.086]],[\"comment/5385\",[]],[\"name/5386\",[42,47.086]],[\"comment/5386\",[]],[\"name/5387\",[43,47.086]],[\"comment/5387\",[]],[\"name/5388\",[44,47.086]],[\"comment/5388\",[]],[\"name/5389\",[45,47.086]],[\"comment/5389\",[]],[\"name/5390\",[46,47.086]],[\"comment/5390\",[]],[\"name/5391\",[47,47.086]],[\"comment/5391\",[]],[\"name/5392\",[48,47.086]],[\"comment/5392\",[]],[\"name/5393\",[49,47.086]],[\"comment/5393\",[]],[\"name/5394\",[50,47.086]],[\"comment/5394\",[]],[\"name/5395\",[51,47.086]],[\"comment/5395\",[]],[\"name/5396\",[52,47.086]],[\"comment/5396\",[]],[\"name/5397\",[53,47.086]],[\"comment/5397\",[]],[\"name/5398\",[54,47.086]],[\"comment/5398\",[]],[\"name/5399\",[55,47.086]],[\"comment/5399\",[]],[\"name/5400\",[56,47.086]],[\"comment/5400\",[]],[\"name/5401\",[57,46.785]],[\"comment/5401\",[]],[\"name/5402\",[58,46.785]],[\"comment/5402\",[]],[\"name/5403\",[59,47.086]],[\"comment/5403\",[]],[\"name/5404\",[60,43.21]],[\"comment/5404\",[]],[\"name/5405\",[61,46.638]],[\"comment/5405\",[]],[\"name/5406\",[62,46.638]],[\"comment/5406\",[]],[\"name/5407\",[63,47.086]],[\"comment/5407\",[]],[\"name/5408\",[64,46.934]],[\"comment/5408\",[]],[\"name/5409\",[65,46.934]],[\"comment/5409\",[]],[\"name/5410\",[66,47.086]],[\"comment/5410\",[]],[\"name/5411\",[67,47.086]],[\"comment/5411\",[]],[\"name/5412\",[68,47.086]],[\"comment/5412\",[]],[\"name/5413\",[69,46.934]],[\"comment/5413\",[]],[\"name/5414\",[70,46.785]],[\"comment/5414\",[]],[\"name/5415\",[71,46.785]],[\"comment/5415\",[]],[\"name/5416\",[1179,76.385]],[\"comment/5416\",[]],[\"name/5417\",[12,44.421]],[\"comment/5417\",[]],[\"name/5418\",[60,30.668,578,54.214]],[\"comment/5418\",[]],[\"name/5419\",[60,30.668,579,54.214]],[\"comment/5419\",[]],[\"name/5420\",[60,30.668,581,54.214]],[\"comment/5420\",[]],[\"name/5421\",[60,30.668,580,56.603]],[\"comment/5421\",[]],[\"name/5422\",[1180,84.86]],[\"comment/5422\",[]],[\"name/5423\",[1181,84.86]],[\"comment/5423\",[]],[\"name/5424\",[1182,76.385]],[\"comment/5424\",[]],[\"name/5425\",[1182,76.385]],[\"comment/5425\",[]],[\"name/5426\",[1179,76.385]],[\"comment/5426\",[]],[\"name/5427\",[1183,79.751]],[\"comment/5427\",[]],[\"name/5428\",[475,76.385]],[\"comment/5428\",[]],[\"name/5429\",[535,79.751]],[\"comment/5429\",[]],[\"name/5430\",[2,46.209]],[\"comment/5430\",[]],[\"name/5431\",[9,44.076]],[\"comment/5431\",[]],[\"name/5432\",[476,73.872]],[\"comment/5432\",[]],[\"name/5433\",[973,79.751]],[\"comment/5433\",[]],[\"name/5434\",[225,60.876]],[\"comment/5434\",[]],[\"name/5435\",[255,65.397]],[\"comment/5435\",[]],[\"name/5436\",[1184,84.86]],[\"comment/5436\",[]],[\"name/5437\",[1185,84.86]],[\"comment/5437\",[]],[\"name/5438\",[12,44.421]],[\"comment/5438\",[]],[\"name/5439\",[153,56.922]],[\"comment/5439\",[]],[\"name/5440\",[154,56.922]],[\"comment/5440\",[]],[\"name/5441\",[475,76.385]],[\"comment/5441\",[]],[\"name/5442\",[1179,76.385]],[\"comment/5442\",[]],[\"name/5443\",[1183,79.751]],[\"comment/5443\",[]],[\"name/5444\",[1182,76.385]],[\"comment/5444\",[]],[\"name/5445\",[1186,84.86]],[\"comment/5445\",[]],[\"name/5446\",[1187,84.86]],[\"comment/5446\",[]],[\"name/5447\",[1188,84.86]],[\"comment/5447\",[]],[\"name/5448\",[1189,84.86]],[\"comment/5448\",[]],[\"name/5449\",[1190,79.751]],[\"comment/5449\",[]],[\"name/5450\",[268,76.385]],[\"comment/5450\",[]],[\"name/5451\",[269,76.385]],[\"comment/5451\",[]],[\"name/5452\",[270,73.872]],[\"comment/5452\",[]],[\"name/5453\",[271,76.385]],[\"comment/5453\",[]],[\"name/5454\",[272,76.385]],[\"comment/5454\",[]],[\"name/5455\",[273,76.385]],[\"comment/5455\",[]],[\"name/5456\",[274,76.385]],[\"comment/5456\",[]],[\"name/5457\",[275,76.385]],[\"comment/5457\",[]],[\"name/5458\",[276,76.385]],[\"comment/5458\",[]],[\"name/5459\",[278,76.385]],[\"comment/5459\",[]],[\"name/5460\",[277,76.385]],[\"comment/5460\",[]],[\"name/5461\",[279,73.872]],[\"comment/5461\",[]],[\"name/5462\",[116,56.922]],[\"comment/5462\",[]],[\"name/5463\",[1191,84.86]],[\"comment/5463\",[]],[\"name/5464\",[1192,84.86]],[\"comment/5464\",[]],[\"name/5465\",[267,73.872]],[\"comment/5465\",[]],[\"name/5466\",[280,76.385]],[\"comment/5466\",[]],[\"name/5467\",[281,76.385]],[\"comment/5467\",[]],[\"name/5468\",[282,76.385]],[\"comment/5468\",[]],[\"name/5469\",[283,76.385]],[\"comment/5469\",[]],[\"name/5470\",[284,76.385]],[\"comment/5470\",[]],[\"name/5471\",[285,76.385]],[\"comment/5471\",[]],[\"name/5472\",[286,76.385]],[\"comment/5472\",[]],[\"name/5473\",[287,76.385]],[\"comment/5473\",[]],[\"name/5474\",[288,76.385]],[\"comment/5474\",[]],[\"name/5475\",[291,76.385]],[\"comment/5475\",[]],[\"name/5476\",[289,76.385]],[\"comment/5476\",[]],[\"name/5477\",[290,68.762]],[\"comment/5477\",[]],[\"name/5478\",[292,76.385]],[\"comment/5478\",[]],[\"name/5479\",[293,76.385]],[\"comment/5479\",[]],[\"name/5480\",[294,76.385]],[\"comment/5480\",[]],[\"name/5481\",[295,76.385]],[\"comment/5481\",[]],[\"name/5482\",[296,73.872]],[\"comment/5482\",[]],[\"name/5483\",[297,73.872]],[\"comment/5483\",[]],[\"name/5484\",[61,46.638]],[\"comment/5484\",[]],[\"name/5485\",[62,46.638]],[\"comment/5485\",[]],[\"name/5486\",[60,43.21]],[\"comment/5486\",[]],[\"name/5487\",[298,76.385]],[\"comment/5487\",[]],[\"name/5488\",[1193,84.86]],[\"comment/5488\",[]],[\"name/5489\",[1194,84.86]],[\"comment/5489\",[]],[\"name/5490\",[629,79.751]],[\"comment/5490\",[]],[\"name/5491\",[630,79.751]],[\"comment/5491\",[]],[\"name/5492\",[631,79.751]],[\"comment/5492\",[]],[\"name/5493\",[1195,84.86]],[\"comment/5493\",[]],[\"name/5494\",[1196,84.86]],[\"comment/5494\",[]],[\"name/5495\",[478,67.51]],[\"comment/5495\",[]],[\"name/5496\",[1197,79.751]],[\"comment/5496\",[]],[\"name/5497\",[436,70.194]],[\"comment/5497\",[]],[\"name/5498\",[1198,84.86]],[\"comment/5498\",[]],[\"name/5499\",[1199,84.86]],[\"comment/5499\",[]],[\"name/5500\",[1200,84.86]],[\"comment/5500\",[]],[\"name/5501\",[1201,84.86]],[\"comment/5501\",[]],[\"name/5502\",[440,70.194]],[\"comment/5502\",[]],[\"name/5503\",[1202,84.86]],[\"comment/5503\",[]],[\"name/5504\",[1203,84.86]],[\"comment/5504\",[]],[\"name/5505\",[1204,84.86]],[\"comment/5505\",[]],[\"name/5506\",[1205,84.86]],[\"comment/5506\",[]],[\"name/5507\",[1206,84.86]],[\"comment/5507\",[]],[\"name/5508\",[153,56.922]],[\"comment/5508\",[]],[\"name/5509\",[225,60.876]],[\"comment/5509\",[]],[\"name/5510\",[154,56.922]],[\"comment/5510\",[]],[\"name/5511\",[1207,84.86]],[\"comment/5511\",[]],[\"name/5512\",[1208,84.86]],[\"comment/5512\",[]],[\"name/5513\",[1197,79.751]],[\"comment/5513\",[]],[\"name/5514\",[511,73.872]],[\"comment/5514\",[]],[\"name/5515\",[2,46.209]],[\"comment/5515\",[]],[\"name/5516\",[8,46.934]],[\"comment/5516\",[]],[\"name/5517\",[9,44.076]],[\"comment/5517\",[]],[\"name/5518\",[465,70.194]],[\"comment/5518\",[]],[\"name/5519\",[169,53.793]],[\"comment/5519\",[]],[\"name/5520\",[245,60.876]],[\"comment/5520\",[]],[\"name/5521\",[242,71.865]],[\"comment/5521\",[]],[\"name/5522\",[246,71.865]],[\"comment/5522\",[]],[\"name/5523\",[1209,84.86]],[\"comment/5523\",[]],[\"name/5524\",[486,79.751]],[\"comment/5524\",[]],[\"name/5525\",[58,46.785]],[\"comment/5525\",[]],[\"name/5526\",[1210,84.86]],[\"comment/5526\",[]],[\"name/5527\",[1211,84.86]],[\"comment/5527\",[]],[\"name/5528\",[1212,84.86]],[\"comment/5528\",[]],[\"name/5529\",[3,58.228]],[\"comment/5529\",[]],[\"name/5530\",[19,44.657]],[\"comment/5530\",[]],[\"name/5531\",[38,47.086]],[\"comment/5531\",[]],[\"name/5532\",[39,47.086]],[\"comment/5532\",[]],[\"name/5533\",[40,47.086]],[\"comment/5533\",[]],[\"name/5534\",[41,47.086]],[\"comment/5534\",[]],[\"name/5535\",[42,47.086]],[\"comment/5535\",[]],[\"name/5536\",[43,47.086]],[\"comment/5536\",[]],[\"name/5537\",[44,47.086]],[\"comment/5537\",[]],[\"name/5538\",[45,47.086]],[\"comment/5538\",[]],[\"name/5539\",[46,47.086]],[\"comment/5539\",[]],[\"name/5540\",[47,47.086]],[\"comment/5540\",[]],[\"name/5541\",[48,47.086]],[\"comment/5541\",[]],[\"name/5542\",[49,47.086]],[\"comment/5542\",[]],[\"name/5543\",[50,47.086]],[\"comment/5543\",[]],[\"name/5544\",[51,47.086]],[\"comment/5544\",[]],[\"name/5545\",[52,47.086]],[\"comment/5545\",[]],[\"name/5546\",[53,47.086]],[\"comment/5546\",[]],[\"name/5547\",[54,47.086]],[\"comment/5547\",[]],[\"name/5548\",[55,47.086]],[\"comment/5548\",[]],[\"name/5549\",[56,47.086]],[\"comment/5549\",[]],[\"name/5550\",[57,46.785]],[\"comment/5550\",[]],[\"name/5551\",[59,47.086]],[\"comment/5551\",[]],[\"name/5552\",[60,43.21]],[\"comment/5552\",[]],[\"name/5553\",[61,46.638]],[\"comment/5553\",[]],[\"name/5554\",[62,46.638]],[\"comment/5554\",[]],[\"name/5555\",[63,47.086]],[\"comment/5555\",[]],[\"name/5556\",[64,46.934]],[\"comment/5556\",[]],[\"name/5557\",[65,46.934]],[\"comment/5557\",[]],[\"name/5558\",[66,47.086]],[\"comment/5558\",[]],[\"name/5559\",[67,47.086]],[\"comment/5559\",[]],[\"name/5560\",[68,47.086]],[\"comment/5560\",[]],[\"name/5561\",[69,46.934]],[\"comment/5561\",[]],[\"name/5562\",[70,46.785]],[\"comment/5562\",[]],[\"name/5563\",[71,46.785]],[\"comment/5563\",[]],[\"name/5564\",[1213,84.86]],[\"comment/5564\",[]],[\"name/5565\",[1214,84.86]],[\"comment/5565\",[]],[\"name/5566\",[1215,84.86]],[\"comment/5566\",[]],[\"name/5567\",[1216,84.86]],[\"comment/5567\",[]],[\"name/5568\",[1217,79.751]],[\"comment/5568\",[]],[\"name/5569\",[681,64.487]],[\"comment/5569\",[]],[\"name/5570\",[747,76.385]],[\"comment/5570\",[]],[\"name/5571\",[748,71.865]],[\"comment/5571\",[]],[\"name/5572\",[749,71.865]],[\"comment/5572\",[]],[\"name/5573\",[117,58.705]],[\"comment/5573\",[]],[\"name/5574\",[113,57.774]],[\"comment/5574\",[]],[\"name/5575\",[750,76.385]],[\"comment/5575\",[]],[\"name/5576\",[366,66.398]],[\"comment/5576\",[]],[\"name/5577\",[105,57.339]],[\"comment/5577\",[]],[\"name/5578\",[412,63.653]],[\"comment/5578\",[]],[\"name/5579\",[323,60.876]],[\"comment/5579\",[]],[\"name/5580\",[411,64.487]],[\"comment/5580\",[]],[\"name/5581\",[10,57.774]],[\"comment/5581\",[]],[\"name/5582\",[751,70.194]],[\"comment/5582\",[]],[\"name/5583\",[752,70.194]],[\"comment/5583\",[]],[\"name/5584\",[495,73.872]],[\"comment/5584\",[]],[\"name/5585\",[2,46.209]],[\"comment/5585\",[]],[\"name/5586\",[98,60.287]],[\"comment/5586\",[]],[\"name/5587\",[99,59.732]],[\"comment/5587\",[]],[\"name/5588\",[8,46.934]],[\"comment/5588\",[]],[\"name/5589\",[9,44.076]],[\"comment/5589\",[]],[\"name/5590\",[791,79.751]],[\"comment/5590\",[]],[\"name/5591\",[792,79.751]],[\"comment/5591\",[]],[\"name/5592\",[166,57.339]],[\"comment/5592\",[]],[\"name/5593\",[793,79.751]],[\"comment/5593\",[]],[\"name/5594\",[144,60.287]],[\"comment/5594\",[]],[\"name/5595\",[693,70.194]],[\"comment/5595\",[]],[\"name/5596\",[794,79.751]],[\"comment/5596\",[]],[\"name/5597\",[124,54.096]],[\"comment/5597\",[]],[\"name/5598\",[795,79.751]],[\"comment/5598\",[]],[\"name/5599\",[152,60.287]],[\"comment/5599\",[]],[\"name/5600\",[12,44.421]],[\"comment/5600\",[]],[\"name/5601\",[153,56.922]],[\"comment/5601\",[]],[\"name/5602\",[154,56.922]],[\"comment/5602\",[]],[\"name/5603\",[131,60.287]],[\"comment/5603\",[]],[\"name/5604\",[103,56.522]],[\"comment/5604\",[]],[\"name/5605\",[691,70.194]],[\"comment/5605\",[]],[\"name/5606\",[796,79.751]],[\"comment/5606\",[]],[\"name/5607\",[161,60.287]],[\"comment/5607\",[]],[\"name/5608\",[12,44.421]],[\"comment/5608\",[]],[\"name/5609\",[695,68.762]],[\"comment/5609\",[]],[\"name/5610\",[696,68.762]],[\"comment/5610\",[]],[\"name/5611\",[786,73.872]],[\"comment/5611\",[]],[\"name/5612\",[745,70.194]],[\"comment/5612\",[]],[\"name/5613\",[797,79.751]],[\"comment/5613\",[]],[\"name/5614\",[798,79.751]],[\"comment/5614\",[]],[\"name/5615\",[19,44.657]],[\"comment/5615\",[]],[\"name/5616\",[681,64.487]],[\"comment/5616\",[]],[\"name/5617\",[439,63.653]],[\"comment/5617\",[]],[\"name/5618\",[682,70.194]],[\"comment/5618\",[]],[\"name/5619\",[683,70.194]],[\"comment/5619\",[]],[\"name/5620\",[684,70.194]],[\"comment/5620\",[]],[\"name/5621\",[685,70.194]],[\"comment/5621\",[]],[\"name/5622\",[686,70.194]],[\"comment/5622\",[]],[\"name/5623\",[687,70.194]],[\"comment/5623\",[]],[\"name/5624\",[688,70.194]],[\"comment/5624\",[]],[\"name/5625\",[212,68.762]],[\"comment/5625\",[]],[\"name/5626\",[689,70.194]],[\"comment/5626\",[]],[\"name/5627\",[160,59.732]],[\"comment/5627\",[]],[\"name/5628\",[690,70.194]],[\"comment/5628\",[]],[\"name/5629\",[692,70.194]],[\"comment/5629\",[]],[\"name/5630\",[694,70.194]],[\"comment/5630\",[]],[\"name/5631\",[137,59.205]],[\"comment/5631\",[]],[\"name/5632\",[697,67.51]],[\"comment/5632\",[]],[\"name/5633\",[698,70.194]],[\"comment/5633\",[]],[\"name/5634\",[182,56.922]],[\"comment/5634\",[]],[\"name/5635\",[699,70.194]],[\"comment/5635\",[]],[\"name/5636\",[104,59.732]],[\"comment/5636\",[]],[\"name/5637\",[105,57.339]],[\"comment/5637\",[]],[\"name/5638\",[106,59.732]],[\"comment/5638\",[]],[\"name/5639\",[11,52.935]],[\"comment/5639\",[]],[\"name/5640\",[12,44.421]],[\"comment/5640\",[]],[\"name/5641\",[107,60.287]],[\"comment/5641\",[]],[\"name/5642\",[19,44.657]],[\"comment/5642\",[]],[\"name/5643\",[108,60.287]],[\"comment/5643\",[]],[\"name/5644\",[109,60.287]],[\"comment/5644\",[]],[\"name/5645\",[110,57.339]],[\"comment/5645\",[]],[\"name/5646\",[111,60.287]],[\"comment/5646\",[]],[\"name/5647\",[112,60.287]],[\"comment/5647\",[]],[\"name/5648\",[113,57.774]],[\"comment/5648\",[]],[\"name/5649\",[114,60.287]],[\"comment/5649\",[]],[\"name/5650\",[115,60.287]],[\"comment/5650\",[]],[\"name/5651\",[116,56.922]],[\"comment/5651\",[]],[\"name/5652\",[60,43.21]],[\"comment/5652\",[]],[\"name/5653\",[117,58.705]],[\"comment/5653\",[]],[\"name/5654\",[118,60.287]],[\"comment/5654\",[]],[\"name/5655\",[119,60.287]],[\"comment/5655\",[]],[\"name/5656\",[120,59.732]],[\"comment/5656\",[]],[\"name/5657\",[121,60.287]],[\"comment/5657\",[]],[\"name/5658\",[122,54.408]],[\"comment/5658\",[]],[\"name/5659\",[123,54.408]],[\"comment/5659\",[]],[\"name/5660\",[125,60.287]],[\"comment/5660\",[]],[\"name/5661\",[126,60.287]],[\"comment/5661\",[]],[\"name/5662\",[127,60.287]],[\"comment/5662\",[]],[\"name/5663\",[128,60.287]],[\"comment/5663\",[]],[\"name/5664\",[129,59.732]],[\"comment/5664\",[]],[\"name/5665\",[130,60.287]],[\"comment/5665\",[]],[\"name/5666\",[132,59.732]],[\"comment/5666\",[]],[\"name/5667\",[133,60.287]],[\"comment/5667\",[]],[\"name/5668\",[134,60.287]],[\"comment/5668\",[]],[\"name/5669\",[135,60.287]],[\"comment/5669\",[]],[\"name/5670\",[136,60.287]],[\"comment/5670\",[]],[\"name/5671\",[138,59.732]],[\"comment/5671\",[]],[\"name/5672\",[139,59.732]],[\"comment/5672\",[]],[\"name/5673\",[140,59.732]],[\"comment/5673\",[]],[\"name/5674\",[141,59.732]],[\"comment/5674\",[]],[\"name/5675\",[142,60.287]],[\"comment/5675\",[]],[\"name/5676\",[143,60.287]],[\"comment/5676\",[]],[\"name/5677\",[145,60.287]],[\"comment/5677\",[]],[\"name/5678\",[146,60.287]],[\"comment/5678\",[]],[\"name/5679\",[147,60.287]],[\"comment/5679\",[]],[\"name/5680\",[148,60.287]],[\"comment/5680\",[]],[\"name/5681\",[149,60.287]],[\"comment/5681\",[]],[\"name/5682\",[150,58.228]],[\"comment/5682\",[]],[\"name/5683\",[151,60.287]],[\"comment/5683\",[]],[\"name/5684\",[155,60.287]],[\"comment/5684\",[]],[\"name/5685\",[156,60.287]],[\"comment/5685\",[]],[\"name/5686\",[157,60.287]],[\"comment/5686\",[]],[\"name/5687\",[158,56.922]],[\"comment/5687\",[]],[\"name/5688\",[159,59.732]],[\"comment/5688\",[]],[\"name/5689\",[162,60.287]],[\"comment/5689\",[]],[\"name/5690\",[163,60.287]],[\"comment/5690\",[]],[\"name/5691\",[164,60.287]],[\"comment/5691\",[]],[\"name/5692\",[165,60.287]],[\"comment/5692\",[]],[\"name/5693\",[167,59.732]],[\"comment/5693\",[]],[\"name/5694\",[168,59.732]],[\"comment/5694\",[]],[\"name/5695\",[20,50.513]],[\"comment/5695\",[]],[\"name/5696\",[16,49.491]],[\"comment/5696\",[]],[\"name/5697\",[35,52.664]],[\"comment/5697\",[]],[\"name/5698\",[36,52.664]],[\"comment/5698\",[]],[\"name/5699\",[169,53.793]],[\"comment/5699\",[]],[\"name/5700\",[170,59.205]],[\"comment/5700\",[]],[\"name/5701\",[171,59.732]],[\"comment/5701\",[]],[\"name/5702\",[172,59.732]],[\"comment/5702\",[]],[\"name/5703\",[173,59.732]],[\"comment/5703\",[]],[\"name/5704\",[174,59.732]],[\"comment/5704\",[]],[\"name/5705\",[175,59.732]],[\"comment/5705\",[]],[\"name/5706\",[176,59.732]],[\"comment/5706\",[]],[\"name/5707\",[177,59.732]],[\"comment/5707\",[]],[\"name/5708\",[178,59.732]],[\"comment/5708\",[]],[\"name/5709\",[102,59.732]],[\"comment/5709\",[]],[\"name/5710\",[179,58.228]],[\"comment/5710\",[]],[\"name/5711\",[180,59.732]],[\"comment/5711\",[]],[\"name/5712\",[181,59.732]],[\"comment/5712\",[]],[\"name/5713\",[183,59.205]],[\"comment/5713\",[]],[\"name/5714\",[184,59.732]],[\"comment/5714\",[]],[\"name/5715\",[185,59.732]],[\"comment/5715\",[]],[\"name/5716\",[186,59.732]],[\"comment/5716\",[]],[\"name/5717\",[187,59.732]],[\"comment/5717\",[]],[\"name/5718\",[188,59.732]],[\"comment/5718\",[]],[\"name/5719\",[28,53.498]],[\"comment/5719\",[]],[\"name/5720\",[26,53.498]],[\"comment/5720\",[]],[\"name/5721\",[27,53.498]],[\"comment/5721\",[]],[\"name/5722\",[38,47.086]],[\"comment/5722\",[]],[\"name/5723\",[39,47.086]],[\"comment/5723\",[]],[\"name/5724\",[40,47.086]],[\"comment/5724\",[]],[\"name/5725\",[41,47.086]],[\"comment/5725\",[]],[\"name/5726\",[42,47.086]],[\"comment/5726\",[]],[\"name/5727\",[43,47.086]],[\"comment/5727\",[]],[\"name/5728\",[44,47.086]],[\"comment/5728\",[]],[\"name/5729\",[45,47.086]],[\"comment/5729\",[]],[\"name/5730\",[46,47.086]],[\"comment/5730\",[]],[\"name/5731\",[47,47.086]],[\"comment/5731\",[]],[\"name/5732\",[48,47.086]],[\"comment/5732\",[]],[\"name/5733\",[49,47.086]],[\"comment/5733\",[]],[\"name/5734\",[50,47.086]],[\"comment/5734\",[]],[\"name/5735\",[51,47.086]],[\"comment/5735\",[]],[\"name/5736\",[52,47.086]],[\"comment/5736\",[]],[\"name/5737\",[53,47.086]],[\"comment/5737\",[]],[\"name/5738\",[54,47.086]],[\"comment/5738\",[]],[\"name/5739\",[55,47.086]],[\"comment/5739\",[]],[\"name/5740\",[56,47.086]],[\"comment/5740\",[]],[\"name/5741\",[57,46.785]],[\"comment/5741\",[]],[\"name/5742\",[58,46.785]],[\"comment/5742\",[]],[\"name/5743\",[59,47.086]],[\"comment/5743\",[]],[\"name/5744\",[60,43.21]],[\"comment/5744\",[]],[\"name/5745\",[61,46.638]],[\"comment/5745\",[]],[\"name/5746\",[62,46.638]],[\"comment/5746\",[]],[\"name/5747\",[63,47.086]],[\"comment/5747\",[]],[\"name/5748\",[64,46.934]],[\"comment/5748\",[]],[\"name/5749\",[65,46.934]],[\"comment/5749\",[]],[\"name/5750\",[66,47.086]],[\"comment/5750\",[]],[\"name/5751\",[67,47.086]],[\"comment/5751\",[]],[\"name/5752\",[68,47.086]],[\"comment/5752\",[]],[\"name/5753\",[69,46.934]],[\"comment/5753\",[]],[\"name/5754\",[70,46.785]],[\"comment/5754\",[]],[\"name/5755\",[71,46.785]],[\"comment/5755\",[]],[\"name/5756\",[536,76.385]],[\"comment/5756\",[]],[\"name/5757\",[2,46.209]],[\"comment/5757\",[]],[\"name/5758\",[8,46.934]],[\"comment/5758\",[]],[\"name/5759\",[1218,84.86]],[\"comment/5759\",[]],[\"name/5760\",[1219,84.86]],[\"comment/5760\",[]],[\"name/5761\",[1220,84.86]],[\"comment/5761\",[]],[\"name/5762\",[1221,84.86]],[\"comment/5762\",[]],[\"name/5763\",[1222,79.751]],[\"comment/5763\",[]],[\"name/5764\",[1223,79.751]],[\"comment/5764\",[]],[\"name/5765\",[9,44.076]],[\"comment/5765\",[]],[\"name/5766\",[1137,76.385]],[\"comment/5766\",[]],[\"name/5767\",[11,52.935]],[\"comment/5767\",[]],[\"name/5768\",[12,44.421]],[\"comment/5768\",[]],[\"name/5769\",[1130,76.385]],[\"comment/5769\",[]],[\"name/5770\",[1131,76.385]],[\"comment/5770\",[]],[\"name/5771\",[1132,76.385]],[\"comment/5771\",[]],[\"name/5772\",[1133,76.385]],[\"comment/5772\",[]],[\"name/5773\",[1134,76.385]],[\"comment/5773\",[]],[\"name/5774\",[1135,76.385]],[\"comment/5774\",[]],[\"name/5775\",[110,57.339]],[\"comment/5775\",[]],[\"name/5776\",[1136,73.872]],[\"comment/5776\",[]],[\"name/5777\",[393,70.194]],[\"comment/5777\",[]],[\"name/5778\",[394,73.872]],[\"comment/5778\",[]],[\"name/5779\",[1138,76.385]],[\"comment/5779\",[]],[\"name/5780\",[211,71.865]],[\"comment/5780\",[]],[\"name/5781\",[19,44.657]],[\"comment/5781\",[]],[\"name/5782\",[38,47.086]],[\"comment/5782\",[]],[\"name/5783\",[39,47.086]],[\"comment/5783\",[]],[\"name/5784\",[40,47.086]],[\"comment/5784\",[]],[\"name/5785\",[41,47.086]],[\"comment/5785\",[]],[\"name/5786\",[42,47.086]],[\"comment/5786\",[]],[\"name/5787\",[43,47.086]],[\"comment/5787\",[]],[\"name/5788\",[44,47.086]],[\"comment/5788\",[]],[\"name/5789\",[45,47.086]],[\"comment/5789\",[]],[\"name/5790\",[46,47.086]],[\"comment/5790\",[]],[\"name/5791\",[47,47.086]],[\"comment/5791\",[]],[\"name/5792\",[48,47.086]],[\"comment/5792\",[]],[\"name/5793\",[49,47.086]],[\"comment/5793\",[]],[\"name/5794\",[50,47.086]],[\"comment/5794\",[]],[\"name/5795\",[51,47.086]],[\"comment/5795\",[]],[\"name/5796\",[52,47.086]],[\"comment/5796\",[]],[\"name/5797\",[53,47.086]],[\"comment/5797\",[]],[\"name/5798\",[54,47.086]],[\"comment/5798\",[]],[\"name/5799\",[55,47.086]],[\"comment/5799\",[]],[\"name/5800\",[56,47.086]],[\"comment/5800\",[]],[\"name/5801\",[57,46.785]],[\"comment/5801\",[]],[\"name/5802\",[58,46.785]],[\"comment/5802\",[]],[\"name/5803\",[59,47.086]],[\"comment/5803\",[]],[\"name/5804\",[60,43.21]],[\"comment/5804\",[]],[\"name/5805\",[61,46.638]],[\"comment/5805\",[]],[\"name/5806\",[62,46.638]],[\"comment/5806\",[]],[\"name/5807\",[63,47.086]],[\"comment/5807\",[]],[\"name/5808\",[64,46.934]],[\"comment/5808\",[]],[\"name/5809\",[65,46.934]],[\"comment/5809\",[]],[\"name/5810\",[66,47.086]],[\"comment/5810\",[]],[\"name/5811\",[67,47.086]],[\"comment/5811\",[]],[\"name/5812\",[68,47.086]],[\"comment/5812\",[]],[\"name/5813\",[69,46.934]],[\"comment/5813\",[]],[\"name/5814\",[70,46.785]],[\"comment/5814\",[]],[\"name/5815\",[71,46.785]],[\"comment/5815\",[]],[\"name/5816\",[487,73.872]],[\"comment/5816\",[]],[\"name/5817\",[2,46.209]],[\"comment/5817\",[]],[\"name/5818\",[8,46.934]],[\"comment/5818\",[]],[\"name/5819\",[994,79.751]],[\"comment/5819\",[]],[\"name/5820\",[995,76.385]],[\"comment/5820\",[]],[\"name/5821\",[996,79.751]],[\"comment/5821\",[]],[\"name/5822\",[9,44.076]],[\"comment/5822\",[]],[\"name/5823\",[1024,79.751]],[\"comment/5823\",[]],[\"name/5824\",[1224,84.86]],[\"comment/5824\",[]],[\"name/5825\",[436,70.194]],[\"comment/5825\",[]],[\"name/5826\",[997,79.751]],[\"comment/5826\",[]],[\"name/5827\",[998,79.751]],[\"comment/5827\",[]],[\"name/5828\",[479,73.872]],[\"comment/5828\",[]],[\"name/5829\",[999,79.751]],[\"comment/5829\",[]],[\"name/5830\",[1000,79.751]],[\"comment/5830\",[]],[\"name/5831\",[1001,79.751]],[\"comment/5831\",[]],[\"name/5832\",[1002,79.751]],[\"comment/5832\",[]],[\"name/5833\",[1003,79.751]],[\"comment/5833\",[]],[\"name/5834\",[1004,79.751]],[\"comment/5834\",[]],[\"name/5835\",[169,53.793]],[\"comment/5835\",[]],[\"name/5836\",[1005,79.751]],[\"comment/5836\",[]],[\"name/5837\",[1006,79.751]],[\"comment/5837\",[]],[\"name/5838\",[246,71.865]],[\"comment/5838\",[]],[\"name/5839\",[242,71.865]],[\"comment/5839\",[]],[\"name/5840\",[1007,79.751]],[\"comment/5840\",[]],[\"name/5841\",[1008,79.751]],[\"comment/5841\",[]],[\"name/5842\",[245,60.876]],[\"comment/5842\",[]],[\"name/5843\",[20,50.513]],[\"comment/5843\",[]],[\"name/5844\",[16,49.491]],[\"comment/5844\",[]],[\"name/5845\",[42,47.086]],[\"comment/5845\",[]],[\"name/5846\",[1009,79.751]],[\"comment/5846\",[]],[\"name/5847\",[1010,79.751]],[\"comment/5847\",[]],[\"name/5848\",[1011,79.751]],[\"comment/5848\",[]],[\"name/5849\",[1012,79.751]],[\"comment/5849\",[]],[\"name/5850\",[1013,79.751]],[\"comment/5850\",[]],[\"name/5851\",[1014,79.751]],[\"comment/5851\",[]],[\"name/5852\",[1015,76.385]],[\"comment/5852\",[]],[\"name/5853\",[1016,71.865]],[\"comment/5853\",[]],[\"name/5854\",[1017,76.385]],[\"comment/5854\",[]],[\"name/5855\",[1018,79.751]],[\"comment/5855\",[]],[\"name/5856\",[56,47.086]],[\"comment/5856\",[]],[\"name/5857\",[1019,79.751]],[\"comment/5857\",[]],[\"name/5858\",[1020,79.751]],[\"comment/5858\",[]],[\"name/5859\",[1021,79.751]],[\"comment/5859\",[]],[\"name/5860\",[1022,79.751]],[\"comment/5860\",[]],[\"name/5861\",[137,59.205]],[\"comment/5861\",[]],[\"name/5862\",[697,67.51]],[\"comment/5862\",[]],[\"name/5863\",[1023,79.751]],[\"comment/5863\",[]],[\"name/5864\",[150,58.228]],[\"comment/5864\",[]],[\"name/5865\",[1025,79.751]],[\"comment/5865\",[]],[\"name/5866\",[1026,79.751]],[\"comment/5866\",[]],[\"name/5867\",[1027,79.751]],[\"comment/5867\",[]],[\"name/5868\",[1028,79.751]],[\"comment/5868\",[]],[\"name/5869\",[375,76.385]],[\"comment/5869\",[]],[\"name/5870\",[1029,79.751]],[\"comment/5870\",[]],[\"name/5871\",[1030,79.751]],[\"comment/5871\",[]],[\"name/5872\",[1031,79.751]],[\"comment/5872\",[]],[\"name/5873\",[1032,79.751]],[\"comment/5873\",[]],[\"name/5874\",[1033,79.751]],[\"comment/5874\",[]],[\"name/5875\",[1034,79.751]],[\"comment/5875\",[]],[\"name/5876\",[1035,79.751]],[\"comment/5876\",[]],[\"name/5877\",[1036,79.751]],[\"comment/5877\",[]],[\"name/5878\",[1037,79.751]],[\"comment/5878\",[]],[\"name/5879\",[1038,79.751]],[\"comment/5879\",[]],[\"name/5880\",[1039,79.751]],[\"comment/5880\",[]],[\"name/5881\",[1040,79.751]],[\"comment/5881\",[]],[\"name/5882\",[179,58.228]],[\"comment/5882\",[]],[\"name/5883\",[1041,79.751]],[\"comment/5883\",[]],[\"name/5884\",[3,58.228]],[\"comment/5884\",[]],[\"name/5885\",[19,44.657]],[\"comment/5885\",[]],[\"name/5886\",[1042,79.751]],[\"comment/5886\",[]],[\"name/5887\",[1043,79.751]],[\"comment/5887\",[]],[\"name/5888\",[1044,79.751]],[\"comment/5888\",[]],[\"name/5889\",[1045,79.751]],[\"comment/5889\",[]],[\"name/5890\",[38,47.086]],[\"comment/5890\",[]],[\"name/5891\",[39,47.086]],[\"comment/5891\",[]],[\"name/5892\",[40,47.086]],[\"comment/5892\",[]],[\"name/5893\",[41,47.086]],[\"comment/5893\",[]],[\"name/5894\",[43,47.086]],[\"comment/5894\",[]],[\"name/5895\",[44,47.086]],[\"comment/5895\",[]],[\"name/5896\",[45,47.086]],[\"comment/5896\",[]],[\"name/5897\",[46,47.086]],[\"comment/5897\",[]],[\"name/5898\",[47,47.086]],[\"comment/5898\",[]],[\"name/5899\",[48,47.086]],[\"comment/5899\",[]],[\"name/5900\",[49,47.086]],[\"comment/5900\",[]],[\"name/5901\",[50,47.086]],[\"comment/5901\",[]],[\"name/5902\",[51,47.086]],[\"comment/5902\",[]],[\"name/5903\",[52,47.086]],[\"comment/5903\",[]],[\"name/5904\",[53,47.086]],[\"comment/5904\",[]],[\"name/5905\",[54,47.086]],[\"comment/5905\",[]],[\"name/5906\",[55,47.086]],[\"comment/5906\",[]],[\"name/5907\",[57,46.785]],[\"comment/5907\",[]],[\"name/5908\",[58,46.785]],[\"comment/5908\",[]],[\"name/5909\",[59,47.086]],[\"comment/5909\",[]],[\"name/5910\",[60,43.21]],[\"comment/5910\",[]],[\"name/5911\",[61,46.638]],[\"comment/5911\",[]],[\"name/5912\",[62,46.638]],[\"comment/5912\",[]],[\"name/5913\",[63,47.086]],[\"comment/5913\",[]],[\"name/5914\",[64,46.934]],[\"comment/5914\",[]],[\"name/5915\",[65,46.934]],[\"comment/5915\",[]],[\"name/5916\",[66,47.086]],[\"comment/5916\",[]],[\"name/5917\",[67,47.086]],[\"comment/5917\",[]],[\"name/5918\",[68,47.086]],[\"comment/5918\",[]],[\"name/5919\",[69,46.934]],[\"comment/5919\",[]],[\"name/5920\",[70,46.785]],[\"comment/5920\",[]],[\"name/5921\",[71,46.785]],[\"comment/5921\",[]],[\"name/5922\",[537,76.385]],[\"comment/5922\",[]],[\"name/5923\",[2,46.209]],[\"comment/5923\",[]],[\"name/5924\",[1222,79.751]],[\"comment/5924\",[]],[\"name/5925\",[1223,79.751]],[\"comment/5925\",[]],[\"name/5926\",[8,46.934]],[\"comment/5926\",[]],[\"name/5927\",[9,44.076]],[\"comment/5927\",[]],[\"name/5928\",[11,52.935]],[\"comment/5928\",[]],[\"name/5929\",[12,44.421]],[\"comment/5929\",[]],[\"name/5930\",[1130,76.385]],[\"comment/5930\",[]],[\"name/5931\",[1131,76.385]],[\"comment/5931\",[]],[\"name/5932\",[1132,76.385]],[\"comment/5932\",[]],[\"name/5933\",[1133,76.385]],[\"comment/5933\",[]],[\"name/5934\",[1134,76.385]],[\"comment/5934\",[]],[\"name/5935\",[1135,76.385]],[\"comment/5935\",[]],[\"name/5936\",[110,57.339]],[\"comment/5936\",[]],[\"name/5937\",[1136,73.872]],[\"comment/5937\",[]],[\"name/5938\",[393,70.194]],[\"comment/5938\",[]],[\"name/5939\",[394,73.872]],[\"comment/5939\",[]],[\"name/5940\",[1137,76.385]],[\"comment/5940\",[]],[\"name/5941\",[1138,76.385]],[\"comment/5941\",[]],[\"name/5942\",[211,71.865]],[\"comment/5942\",[]],[\"name/5943\",[19,44.657]],[\"comment/5943\",[]],[\"name/5944\",[38,47.086]],[\"comment/5944\",[]],[\"name/5945\",[39,47.086]],[\"comment/5945\",[]],[\"name/5946\",[40,47.086]],[\"comment/5946\",[]],[\"name/5947\",[41,47.086]],[\"comment/5947\",[]],[\"name/5948\",[42,47.086]],[\"comment/5948\",[]],[\"name/5949\",[43,47.086]],[\"comment/5949\",[]],[\"name/5950\",[44,47.086]],[\"comment/5950\",[]],[\"name/5951\",[45,47.086]],[\"comment/5951\",[]],[\"name/5952\",[46,47.086]],[\"comment/5952\",[]],[\"name/5953\",[47,47.086]],[\"comment/5953\",[]],[\"name/5954\",[48,47.086]],[\"comment/5954\",[]],[\"name/5955\",[49,47.086]],[\"comment/5955\",[]],[\"name/5956\",[50,47.086]],[\"comment/5956\",[]],[\"name/5957\",[51,47.086]],[\"comment/5957\",[]],[\"name/5958\",[52,47.086]],[\"comment/5958\",[]],[\"name/5959\",[53,47.086]],[\"comment/5959\",[]],[\"name/5960\",[54,47.086]],[\"comment/5960\",[]],[\"name/5961\",[55,47.086]],[\"comment/5961\",[]],[\"name/5962\",[56,47.086]],[\"comment/5962\",[]],[\"name/5963\",[57,46.785]],[\"comment/5963\",[]],[\"name/5964\",[58,46.785]],[\"comment/5964\",[]],[\"name/5965\",[59,47.086]],[\"comment/5965\",[]],[\"name/5966\",[60,43.21]],[\"comment/5966\",[]],[\"name/5967\",[61,46.638]],[\"comment/5967\",[]],[\"name/5968\",[62,46.638]],[\"comment/5968\",[]],[\"name/5969\",[63,47.086]],[\"comment/5969\",[]],[\"name/5970\",[64,46.934]],[\"comment/5970\",[]],[\"name/5971\",[65,46.934]],[\"comment/5971\",[]],[\"name/5972\",[66,47.086]],[\"comment/5972\",[]],[\"name/5973\",[67,47.086]],[\"comment/5973\",[]],[\"name/5974\",[68,47.086]],[\"comment/5974\",[]],[\"name/5975\",[69,46.934]],[\"comment/5975\",[]],[\"name/5976\",[70,46.785]],[\"comment/5976\",[]],[\"name/5977\",[71,46.785]],[\"comment/5977\",[]],[\"name/5978\",[1225,84.86]],[\"comment/5978\",[]],[\"name/5979\",[1226,79.751]],[\"comment/5979\",[]],[\"name/5980\",[1227,79.751]],[\"comment/5980\",[]],[\"name/5981\",[224,68.762]],[\"comment/5981\",[]],[\"name/5982\",[327,76.385]],[\"comment/5982\",[]],[\"name/5983\",[6,54.096]],[\"comment/5983\",[]],[\"name/5984\",[550,79.751]],[\"comment/5984\",[]],[\"name/5985\",[78,71.865]],[\"comment/5985\",[]],[\"name/5986\",[79,71.865]],[\"comment/5986\",[]],[\"name/5987\",[510,73.872]],[\"comment/5987\",[]],[\"name/5988\",[1,57.339]],[\"comment/5988\",[]],[\"name/5989\",[2,46.209]],[\"comment/5989\",[]],[\"name/5990\",[8,46.934]],[\"comment/5990\",[]],[\"name/5991\",[6,54.096]],[\"comment/5991\",[]],[\"name/5992\",[7,59.732]],[\"comment/5992\",[]],[\"name/5993\",[1217,79.751]],[\"comment/5993\",[]],[\"name/5994\",[1228,84.86]],[\"comment/5994\",[]],[\"name/5995\",[9,44.076]],[\"comment/5995\",[]],[\"name/5996\",[11,52.935]],[\"comment/5996\",[]],[\"name/5997\",[12,44.421]],[\"comment/5997\",[]],[\"name/5998\",[1229,84.86]],[\"comment/5998\",[]],[\"name/5999\",[947,76.385]],[\"comment/5999\",[]],[\"name/6000\",[230,76.385]],[\"comment/6000\",[]],[\"name/6001\",[1230,84.86]],[\"comment/6001\",[]],[\"name/6002\",[1231,84.86]],[\"comment/6002\",[]],[\"name/6003\",[1232,84.86]],[\"comment/6003\",[]],[\"name/6004\",[948,79.751]],[\"comment/6004\",[]],[\"name/6005\",[6,54.096]],[\"comment/6005\",[]],[\"name/6006\",[1226,79.751]],[\"comment/6006\",[]],[\"name/6007\",[1227,79.751]],[\"comment/6007\",[]],[\"name/6008\",[43,47.086]],[\"comment/6008\",[]],[\"name/6009\",[1169,79.751]],[\"comment/6009\",[]],[\"name/6010\",[381,67.51]],[\"comment/6010\",[]],[\"name/6011\",[19,44.657]],[\"comment/6011\",[]],[\"name/6012\",[38,47.086]],[\"comment/6012\",[]],[\"name/6013\",[39,47.086]],[\"comment/6013\",[]],[\"name/6014\",[40,47.086]],[\"comment/6014\",[]],[\"name/6015\",[41,47.086]],[\"comment/6015\",[]],[\"name/6016\",[42,47.086]],[\"comment/6016\",[]],[\"name/6017\",[44,47.086]],[\"comment/6017\",[]],[\"name/6018\",[45,47.086]],[\"comment/6018\",[]],[\"name/6019\",[46,47.086]],[\"comment/6019\",[]],[\"name/6020\",[47,47.086]],[\"comment/6020\",[]],[\"name/6021\",[48,47.086]],[\"comment/6021\",[]],[\"name/6022\",[49,47.086]],[\"comment/6022\",[]],[\"name/6023\",[50,47.086]],[\"comment/6023\",[]],[\"name/6024\",[51,47.086]],[\"comment/6024\",[]],[\"name/6025\",[52,47.086]],[\"comment/6025\",[]],[\"name/6026\",[53,47.086]],[\"comment/6026\",[]],[\"name/6027\",[54,47.086]],[\"comment/6027\",[]],[\"name/6028\",[55,47.086]],[\"comment/6028\",[]],[\"name/6029\",[56,47.086]],[\"comment/6029\",[]],[\"name/6030\",[57,46.785]],[\"comment/6030\",[]],[\"name/6031\",[58,46.785]],[\"comment/6031\",[]],[\"name/6032\",[59,47.086]],[\"comment/6032\",[]],[\"name/6033\",[60,43.21]],[\"comment/6033\",[]],[\"name/6034\",[61,46.638]],[\"comment/6034\",[]],[\"name/6035\",[62,46.638]],[\"comment/6035\",[]],[\"name/6036\",[63,47.086]],[\"comment/6036\",[]],[\"name/6037\",[64,46.934]],[\"comment/6037\",[]],[\"name/6038\",[65,46.934]],[\"comment/6038\",[]],[\"name/6039\",[66,47.086]],[\"comment/6039\",[]],[\"name/6040\",[67,47.086]],[\"comment/6040\",[]],[\"name/6041\",[68,47.086]],[\"comment/6041\",[]],[\"name/6042\",[69,46.934]],[\"comment/6042\",[]],[\"name/6043\",[70,46.785]],[\"comment/6043\",[]],[\"name/6044\",[71,46.785]],[\"comment/6044\",[]],[\"name/6045\",[499,73.872]],[\"comment/6045\",[]],[\"name/6046\",[1,57.339]],[\"comment/6046\",[]],[\"name/6047\",[2,46.209]],[\"comment/6047\",[]],[\"name/6048\",[319,66.398]],[\"comment/6048\",[]],[\"name/6049\",[98,60.287]],[\"comment/6049\",[]],[\"name/6050\",[99,59.732]],[\"comment/6050\",[]],[\"name/6051\",[8,46.934]],[\"comment/6051\",[]],[\"name/6052\",[9,44.076]],[\"comment/6052\",[]],[\"name/6053\",[381,67.51]],[\"comment/6053\",[]],[\"name/6054\",[103,56.522]],[\"comment/6054\",[]],[\"name/6055\",[19,44.657]],[\"comment/6055\",[]],[\"name/6056\",[104,59.732]],[\"comment/6056\",[]],[\"name/6057\",[105,57.339]],[\"comment/6057\",[]],[\"name/6058\",[106,59.732]],[\"comment/6058\",[]],[\"name/6059\",[11,52.935]],[\"comment/6059\",[]],[\"name/6060\",[12,44.421]],[\"comment/6060\",[]],[\"name/6061\",[107,60.287]],[\"comment/6061\",[]],[\"name/6062\",[19,44.657]],[\"comment/6062\",[]],[\"name/6063\",[108,60.287]],[\"comment/6063\",[]],[\"name/6064\",[109,60.287]],[\"comment/6064\",[]],[\"name/6065\",[110,57.339]],[\"comment/6065\",[]],[\"name/6066\",[111,60.287]],[\"comment/6066\",[]],[\"name/6067\",[112,60.287]],[\"comment/6067\",[]],[\"name/6068\",[113,57.774]],[\"comment/6068\",[]],[\"name/6069\",[114,60.287]],[\"comment/6069\",[]],[\"name/6070\",[115,60.287]],[\"comment/6070\",[]],[\"name/6071\",[116,56.922]],[\"comment/6071\",[]],[\"name/6072\",[60,43.21]],[\"comment/6072\",[]],[\"name/6073\",[117,58.705]],[\"comment/6073\",[]],[\"name/6074\",[118,60.287]],[\"comment/6074\",[]],[\"name/6075\",[119,60.287]],[\"comment/6075\",[]],[\"name/6076\",[120,59.732]],[\"comment/6076\",[]],[\"name/6077\",[121,60.287]],[\"comment/6077\",[]],[\"name/6078\",[122,54.408]],[\"comment/6078\",[]],[\"name/6079\",[123,54.408]],[\"comment/6079\",[]],[\"name/6080\",[124,54.096]],[\"comment/6080\",[]],[\"name/6081\",[125,60.287]],[\"comment/6081\",[]],[\"name/6082\",[126,60.287]],[\"comment/6082\",[]],[\"name/6083\",[127,60.287]],[\"comment/6083\",[]],[\"name/6084\",[128,60.287]],[\"comment/6084\",[]],[\"name/6085\",[129,59.732]],[\"comment/6085\",[]],[\"name/6086\",[130,60.287]],[\"comment/6086\",[]],[\"name/6087\",[131,60.287]],[\"comment/6087\",[]],[\"name/6088\",[132,59.732]],[\"comment/6088\",[]],[\"name/6089\",[133,60.287]],[\"comment/6089\",[]],[\"name/6090\",[134,60.287]],[\"comment/6090\",[]],[\"name/6091\",[135,60.287]],[\"comment/6091\",[]],[\"name/6092\",[136,60.287]],[\"comment/6092\",[]],[\"name/6093\",[137,59.205]],[\"comment/6093\",[]],[\"name/6094\",[138,59.732]],[\"comment/6094\",[]],[\"name/6095\",[139,59.732]],[\"comment/6095\",[]],[\"name/6096\",[140,59.732]],[\"comment/6096\",[]],[\"name/6097\",[141,59.732]],[\"comment/6097\",[]],[\"name/6098\",[142,60.287]],[\"comment/6098\",[]],[\"name/6099\",[143,60.287]],[\"comment/6099\",[]],[\"name/6100\",[144,60.287]],[\"comment/6100\",[]],[\"name/6101\",[145,60.287]],[\"comment/6101\",[]],[\"name/6102\",[146,60.287]],[\"comment/6102\",[]],[\"name/6103\",[147,60.287]],[\"comment/6103\",[]],[\"name/6104\",[148,60.287]],[\"comment/6104\",[]],[\"name/6105\",[149,60.287]],[\"comment/6105\",[]],[\"name/6106\",[150,58.228]],[\"comment/6106\",[]],[\"name/6107\",[151,60.287]],[\"comment/6107\",[]],[\"name/6108\",[152,60.287]],[\"comment/6108\",[]],[\"name/6109\",[12,44.421]],[\"comment/6109\",[]],[\"name/6110\",[153,56.922]],[\"comment/6110\",[]],[\"name/6111\",[154,56.922]],[\"comment/6111\",[]],[\"name/6112\",[155,60.287]],[\"comment/6112\",[]],[\"name/6113\",[156,60.287]],[\"comment/6113\",[]],[\"name/6114\",[157,60.287]],[\"comment/6114\",[]],[\"name/6115\",[158,56.922]],[\"comment/6115\",[]],[\"name/6116\",[159,59.732]],[\"comment/6116\",[]],[\"name/6117\",[160,59.732]],[\"comment/6117\",[]],[\"name/6118\",[161,60.287]],[\"comment/6118\",[]],[\"name/6119\",[162,60.287]],[\"comment/6119\",[]],[\"name/6120\",[163,60.287]],[\"comment/6120\",[]],[\"name/6121\",[164,60.287]],[\"comment/6121\",[]],[\"name/6122\",[165,60.287]],[\"comment/6122\",[]],[\"name/6123\",[166,57.339]],[\"comment/6123\",[]],[\"name/6124\",[167,59.732]],[\"comment/6124\",[]],[\"name/6125\",[168,59.732]],[\"comment/6125\",[]],[\"name/6126\",[20,50.513]],[\"comment/6126\",[]],[\"name/6127\",[16,49.491]],[\"comment/6127\",[]],[\"name/6128\",[35,52.664]],[\"comment/6128\",[]],[\"name/6129\",[36,52.664]],[\"comment/6129\",[]],[\"name/6130\",[169,53.793]],[\"comment/6130\",[]],[\"name/6131\",[170,59.205]],[\"comment/6131\",[]],[\"name/6132\",[171,59.732]],[\"comment/6132\",[]],[\"name/6133\",[172,59.732]],[\"comment/6133\",[]],[\"name/6134\",[173,59.732]],[\"comment/6134\",[]],[\"name/6135\",[174,59.732]],[\"comment/6135\",[]],[\"name/6136\",[175,59.732]],[\"comment/6136\",[]],[\"name/6137\",[176,59.732]],[\"comment/6137\",[]],[\"name/6138\",[177,59.732]],[\"comment/6138\",[]],[\"name/6139\",[178,59.732]],[\"comment/6139\",[]],[\"name/6140\",[102,59.732]],[\"comment/6140\",[]],[\"name/6141\",[179,58.228]],[\"comment/6141\",[]],[\"name/6142\",[180,59.732]],[\"comment/6142\",[]],[\"name/6143\",[181,59.732]],[\"comment/6143\",[]],[\"name/6144\",[182,56.922]],[\"comment/6144\",[]],[\"name/6145\",[183,59.205]],[\"comment/6145\",[]],[\"name/6146\",[184,59.732]],[\"comment/6146\",[]],[\"name/6147\",[185,59.732]],[\"comment/6147\",[]],[\"name/6148\",[186,59.732]],[\"comment/6148\",[]],[\"name/6149\",[187,59.732]],[\"comment/6149\",[]],[\"name/6150\",[188,59.732]],[\"comment/6150\",[]],[\"name/6151\",[28,53.498]],[\"comment/6151\",[]],[\"name/6152\",[26,53.498]],[\"comment/6152\",[]],[\"name/6153\",[27,53.498]],[\"comment/6153\",[]],[\"name/6154\",[38,47.086]],[\"comment/6154\",[]],[\"name/6155\",[39,47.086]],[\"comment/6155\",[]],[\"name/6156\",[40,47.086]],[\"comment/6156\",[]],[\"name/6157\",[41,47.086]],[\"comment/6157\",[]],[\"name/6158\",[42,47.086]],[\"comment/6158\",[]],[\"name/6159\",[43,47.086]],[\"comment/6159\",[]],[\"name/6160\",[44,47.086]],[\"comment/6160\",[]],[\"name/6161\",[45,47.086]],[\"comment/6161\",[]],[\"name/6162\",[46,47.086]],[\"comment/6162\",[]],[\"name/6163\",[47,47.086]],[\"comment/6163\",[]],[\"name/6164\",[48,47.086]],[\"comment/6164\",[]],[\"name/6165\",[49,47.086]],[\"comment/6165\",[]],[\"name/6166\",[50,47.086]],[\"comment/6166\",[]],[\"name/6167\",[51,47.086]],[\"comment/6167\",[]],[\"name/6168\",[52,47.086]],[\"comment/6168\",[]],[\"name/6169\",[53,47.086]],[\"comment/6169\",[]],[\"name/6170\",[54,47.086]],[\"comment/6170\",[]],[\"name/6171\",[55,47.086]],[\"comment/6171\",[]],[\"name/6172\",[56,47.086]],[\"comment/6172\",[]],[\"name/6173\",[57,46.785]],[\"comment/6173\",[]],[\"name/6174\",[58,46.785]],[\"comment/6174\",[]],[\"name/6175\",[59,47.086]],[\"comment/6175\",[]],[\"name/6176\",[60,43.21]],[\"comment/6176\",[]],[\"name/6177\",[61,46.638]],[\"comment/6177\",[]],[\"name/6178\",[62,46.638]],[\"comment/6178\",[]],[\"name/6179\",[63,47.086]],[\"comment/6179\",[]],[\"name/6180\",[64,46.934]],[\"comment/6180\",[]],[\"name/6181\",[65,46.934]],[\"comment/6181\",[]],[\"name/6182\",[66,47.086]],[\"comment/6182\",[]],[\"name/6183\",[67,47.086]],[\"comment/6183\",[]],[\"name/6184\",[68,47.086]],[\"comment/6184\",[]],[\"name/6185\",[69,46.934]],[\"comment/6185\",[]],[\"name/6186\",[70,46.785]],[\"comment/6186\",[]],[\"name/6187\",[71,46.785]],[\"comment/6187\",[]],[\"name/6188\",[1233,84.86]],[\"comment/6188\",[]],[\"name/6189\",[578,76.385]],[\"comment/6189\",[]],[\"name/6190\",[561,71.865]],[\"comment/6190\",[]],[\"name/6191\",[319,66.398]],[\"comment/6191\",[]],[\"name/6192\",[1234,84.86]],[\"comment/6192\",[]],[\"name/6193\",[1235,84.86]],[\"comment/6193\",[]],[\"name/6194\",[602,79.751]],[\"comment/6194\",[]],[\"name/6195\",[601,79.751]],[\"comment/6195\",[]],[\"name/6196\",[1236,84.86]],[\"comment/6196\",[]],[\"name/6197\",[312,73.872]],[\"comment/6197\",[]],[\"name/6198\",[313,73.872]],[\"comment/6198\",[]],[\"name/6199\",[1237,84.86]],[\"comment/6199\",[]],[\"name/6200\",[1238,84.86]],[\"comment/6200\",[]],[\"name/6201\",[1239,84.86]],[\"comment/6201\",[]],[\"name/6202\",[1240,84.86]],[\"comment/6202\",[]],[\"name/6203\",[255,65.397]],[\"comment/6203\",[]],[\"name/6204\",[538,79.751]],[\"comment/6204\",[]],[\"name/6205\",[1,57.339]],[\"comment/6205\",[]],[\"name/6206\",[1241,84.86]],[\"comment/6206\",[]],[\"name/6207\",[1190,79.751]],[\"comment/6207\",[]],[\"name/6208\",[1242,79.751]],[\"comment/6208\",[]],[\"name/6209\",[1243,84.86]],[\"comment/6209\",[]],[\"name/6210\",[1244,84.86]],[\"comment/6210\",[]],[\"name/6211\",[1245,84.86]],[\"comment/6211\",[]],[\"name/6212\",[1246,84.86]],[\"comment/6212\",[]],[\"name/6213\",[1247,84.86]],[\"comment/6213\",[]],[\"name/6214\",[1248,84.86]],[\"comment/6214\",[]],[\"name/6215\",[1249,84.86]],[\"comment/6215\",[]],[\"name/6216\",[1250,84.86]],[\"comment/6216\",[]],[\"name/6217\",[1251,84.86]],[\"comment/6217\",[]],[\"name/6218\",[1252,84.86]],[\"comment/6218\",[]],[\"name/6219\",[1253,84.86]],[\"comment/6219\",[]],[\"name/6220\",[65,46.934]],[\"comment/6220\",[]],[\"name/6221\",[69,46.934]],[\"comment/6221\",[]],[\"name/6222\",[624,79.751]],[\"comment/6222\",[]],[\"name/6223\",[551,76.385]],[\"comment/6223\",[]],[\"name/6224\",[73,67.51]],[\"comment/6224\",[]],[\"name/6225\",[74,70.194]],[\"comment/6225\",[]],[\"name/6226\",[75,67.51]],[\"comment/6226\",[]],[\"name/6227\",[1254,84.86]],[\"comment/6227\",[]],[\"name/6228\",[224,68.762]],[\"comment/6228\",[]],[\"name/6229\",[305,66.398]],[\"comment/6229\",[]],[\"name/6230\",[1255,84.86]],[\"comment/6230\",[]],[\"name/6231\",[1256,84.86]],[\"comment/6231\",[]],[\"name/6232\",[60,43.21]],[\"comment/6232\",[]],[\"name/6233\",[326,79.751]],[\"comment/6233\",[]],[\"name/6234\",[327,76.385]],[\"comment/6234\",[]],[\"name/6235\",[105,57.339]],[\"comment/6235\",[]],[\"name/6236\",[412,63.653]],[\"comment/6236\",[]],[\"name/6237\",[323,60.876]],[\"comment/6237\",[]],[\"name/6238\",[411,64.487]],[\"comment/6238\",[]],[\"name/6239\",[10,57.774]],[\"comment/6239\",[]],[\"name/6240\",[751,70.194]],[\"comment/6240\",[]],[\"name/6241\",[752,70.194]],[\"comment/6241\",[]],[\"name/6242\",[492,73.872]],[\"comment/6242\",[]],[\"name/6243\",[2,46.209]],[\"comment/6243\",[]],[\"name/6244\",[8,46.934]],[\"comment/6244\",[]],[\"name/6245\",[1257,84.86]],[\"comment/6245\",[]],[\"name/6246\",[319,66.398]],[\"comment/6246\",[]],[\"name/6247\",[98,60.287]],[\"comment/6247\",[]],[\"name/6248\",[99,59.732]],[\"comment/6248\",[]],[\"name/6249\",[9,44.076]],[\"comment/6249\",[]],[\"name/6250\",[88,79.751]],[\"comment/6250\",[]],[\"name/6251\",[381,67.51]],[\"comment/6251\",[]],[\"name/6252\",[898,76.385]],[\"comment/6252\",[]],[\"name/6253\",[235,79.751]],[\"comment/6253\",[]],[\"name/6254\",[103,56.522]],[\"comment/6254\",[]],[\"name/6255\",[19,44.657]],[\"comment/6255\",[]],[\"name/6256\",[104,59.732]],[\"comment/6256\",[]],[\"name/6257\",[105,57.339]],[\"comment/6257\",[]],[\"name/6258\",[106,59.732]],[\"comment/6258\",[]],[\"name/6259\",[11,52.935]],[\"comment/6259\",[]],[\"name/6260\",[12,44.421]],[\"comment/6260\",[]],[\"name/6261\",[107,60.287]],[\"comment/6261\",[]],[\"name/6262\",[19,44.657]],[\"comment/6262\",[]],[\"name/6263\",[108,60.287]],[\"comment/6263\",[]],[\"name/6264\",[109,60.287]],[\"comment/6264\",[]],[\"name/6265\",[110,57.339]],[\"comment/6265\",[]],[\"name/6266\",[111,60.287]],[\"comment/6266\",[]],[\"name/6267\",[112,60.287]],[\"comment/6267\",[]],[\"name/6268\",[113,57.774]],[\"comment/6268\",[]],[\"name/6269\",[114,60.287]],[\"comment/6269\",[]],[\"name/6270\",[115,60.287]],[\"comment/6270\",[]],[\"name/6271\",[116,56.922]],[\"comment/6271\",[]],[\"name/6272\",[60,43.21]],[\"comment/6272\",[]],[\"name/6273\",[117,58.705]],[\"comment/6273\",[]],[\"name/6274\",[118,60.287]],[\"comment/6274\",[]],[\"name/6275\",[119,60.287]],[\"comment/6275\",[]],[\"name/6276\",[120,59.732]],[\"comment/6276\",[]],[\"name/6277\",[121,60.287]],[\"comment/6277\",[]],[\"name/6278\",[122,54.408]],[\"comment/6278\",[]],[\"name/6279\",[123,54.408]],[\"comment/6279\",[]],[\"name/6280\",[124,54.096]],[\"comment/6280\",[]],[\"name/6281\",[125,60.287]],[\"comment/6281\",[]],[\"name/6282\",[126,60.287]],[\"comment/6282\",[]],[\"name/6283\",[127,60.287]],[\"comment/6283\",[]],[\"name/6284\",[128,60.287]],[\"comment/6284\",[]],[\"name/6285\",[129,59.732]],[\"comment/6285\",[]],[\"name/6286\",[130,60.287]],[\"comment/6286\",[]],[\"name/6287\",[131,60.287]],[\"comment/6287\",[]],[\"name/6288\",[132,59.732]],[\"comment/6288\",[]],[\"name/6289\",[133,60.287]],[\"comment/6289\",[]],[\"name/6290\",[134,60.287]],[\"comment/6290\",[]],[\"name/6291\",[135,60.287]],[\"comment/6291\",[]],[\"name/6292\",[136,60.287]],[\"comment/6292\",[]],[\"name/6293\",[137,59.205]],[\"comment/6293\",[]],[\"name/6294\",[138,59.732]],[\"comment/6294\",[]],[\"name/6295\",[139,59.732]],[\"comment/6295\",[]],[\"name/6296\",[140,59.732]],[\"comment/6296\",[]],[\"name/6297\",[141,59.732]],[\"comment/6297\",[]],[\"name/6298\",[142,60.287]],[\"comment/6298\",[]],[\"name/6299\",[143,60.287]],[\"comment/6299\",[]],[\"name/6300\",[144,60.287]],[\"comment/6300\",[]],[\"name/6301\",[145,60.287]],[\"comment/6301\",[]],[\"name/6302\",[146,60.287]],[\"comment/6302\",[]],[\"name/6303\",[147,60.287]],[\"comment/6303\",[]],[\"name/6304\",[148,60.287]],[\"comment/6304\",[]],[\"name/6305\",[149,60.287]],[\"comment/6305\",[]],[\"name/6306\",[150,58.228]],[\"comment/6306\",[]],[\"name/6307\",[151,60.287]],[\"comment/6307\",[]],[\"name/6308\",[152,60.287]],[\"comment/6308\",[]],[\"name/6309\",[12,44.421]],[\"comment/6309\",[]],[\"name/6310\",[153,56.922]],[\"comment/6310\",[]],[\"name/6311\",[154,56.922]],[\"comment/6311\",[]],[\"name/6312\",[155,60.287]],[\"comment/6312\",[]],[\"name/6313\",[156,60.287]],[\"comment/6313\",[]],[\"name/6314\",[157,60.287]],[\"comment/6314\",[]],[\"name/6315\",[158,56.922]],[\"comment/6315\",[]],[\"name/6316\",[159,59.732]],[\"comment/6316\",[]],[\"name/6317\",[160,59.732]],[\"comment/6317\",[]],[\"name/6318\",[161,60.287]],[\"comment/6318\",[]],[\"name/6319\",[162,60.287]],[\"comment/6319\",[]],[\"name/6320\",[163,60.287]],[\"comment/6320\",[]],[\"name/6321\",[164,60.287]],[\"comment/6321\",[]],[\"name/6322\",[165,60.287]],[\"comment/6322\",[]],[\"name/6323\",[166,57.339]],[\"comment/6323\",[]],[\"name/6324\",[167,59.732]],[\"comment/6324\",[]],[\"name/6325\",[168,59.732]],[\"comment/6325\",[]],[\"name/6326\",[20,50.513]],[\"comment/6326\",[]],[\"name/6327\",[16,49.491]],[\"comment/6327\",[]],[\"name/6328\",[35,52.664]],[\"comment/6328\",[]],[\"name/6329\",[36,52.664]],[\"comment/6329\",[]],[\"name/6330\",[169,53.793]],[\"comment/6330\",[]],[\"name/6331\",[170,59.205]],[\"comment/6331\",[]],[\"name/6332\",[171,59.732]],[\"comment/6332\",[]],[\"name/6333\",[172,59.732]],[\"comment/6333\",[]],[\"name/6334\",[173,59.732]],[\"comment/6334\",[]],[\"name/6335\",[174,59.732]],[\"comment/6335\",[]],[\"name/6336\",[175,59.732]],[\"comment/6336\",[]],[\"name/6337\",[176,59.732]],[\"comment/6337\",[]],[\"name/6338\",[177,59.732]],[\"comment/6338\",[]],[\"name/6339\",[178,59.732]],[\"comment/6339\",[]],[\"name/6340\",[102,59.732]],[\"comment/6340\",[]],[\"name/6341\",[179,58.228]],[\"comment/6341\",[]],[\"name/6342\",[180,59.732]],[\"comment/6342\",[]],[\"name/6343\",[181,59.732]],[\"comment/6343\",[]],[\"name/6344\",[182,56.922]],[\"comment/6344\",[]],[\"name/6345\",[183,59.205]],[\"comment/6345\",[]],[\"name/6346\",[184,59.732]],[\"comment/6346\",[]],[\"name/6347\",[185,59.732]],[\"comment/6347\",[]],[\"name/6348\",[186,59.732]],[\"comment/6348\",[]],[\"name/6349\",[187,59.732]],[\"comment/6349\",[]],[\"name/6350\",[188,59.732]],[\"comment/6350\",[]],[\"name/6351\",[28,53.498]],[\"comment/6351\",[]],[\"name/6352\",[26,53.498]],[\"comment/6352\",[]],[\"name/6353\",[27,53.498]],[\"comment/6353\",[]],[\"name/6354\",[38,47.086]],[\"comment/6354\",[]],[\"name/6355\",[39,47.086]],[\"comment/6355\",[]],[\"name/6356\",[40,47.086]],[\"comment/6356\",[]],[\"name/6357\",[41,47.086]],[\"comment/6357\",[]],[\"name/6358\",[42,47.086]],[\"comment/6358\",[]],[\"name/6359\",[43,47.086]],[\"comment/6359\",[]],[\"name/6360\",[44,47.086]],[\"comment/6360\",[]],[\"name/6361\",[45,47.086]],[\"comment/6361\",[]],[\"name/6362\",[46,47.086]],[\"comment/6362\",[]],[\"name/6363\",[47,47.086]],[\"comment/6363\",[]],[\"name/6364\",[48,47.086]],[\"comment/6364\",[]],[\"name/6365\",[49,47.086]],[\"comment/6365\",[]],[\"name/6366\",[50,47.086]],[\"comment/6366\",[]],[\"name/6367\",[51,47.086]],[\"comment/6367\",[]],[\"name/6368\",[52,47.086]],[\"comment/6368\",[]],[\"name/6369\",[53,47.086]],[\"comment/6369\",[]],[\"name/6370\",[54,47.086]],[\"comment/6370\",[]],[\"name/6371\",[55,47.086]],[\"comment/6371\",[]],[\"name/6372\",[56,47.086]],[\"comment/6372\",[]],[\"name/6373\",[57,46.785]],[\"comment/6373\",[]],[\"name/6374\",[58,46.785]],[\"comment/6374\",[]],[\"name/6375\",[59,47.086]],[\"comment/6375\",[]],[\"name/6376\",[60,43.21]],[\"comment/6376\",[]],[\"name/6377\",[61,46.638]],[\"comment/6377\",[]],[\"name/6378\",[62,46.638]],[\"comment/6378\",[]],[\"name/6379\",[63,47.086]],[\"comment/6379\",[]],[\"name/6380\",[64,46.934]],[\"comment/6380\",[]],[\"name/6381\",[65,46.934]],[\"comment/6381\",[]],[\"name/6382\",[66,47.086]],[\"comment/6382\",[]],[\"name/6383\",[67,47.086]],[\"comment/6383\",[]],[\"name/6384\",[68,47.086]],[\"comment/6384\",[]],[\"name/6385\",[69,46.934]],[\"comment/6385\",[]],[\"name/6386\",[70,46.785]],[\"comment/6386\",[]],[\"name/6387\",[71,46.785]],[\"comment/6387\",[]],[\"name/6388\",[1258,84.86]],[\"comment/6388\",[]],[\"name/6389\",[412,63.653]],[\"comment/6389\",[]],[\"name/6390\",[1259,79.751]],[\"comment/6390\",[]],[\"name/6391\",[12,44.421]],[\"comment/6391\",[]],[\"name/6392\",[73,67.51]],[\"comment/6392\",[]],[\"name/6393\",[75,67.51]],[\"comment/6393\",[]],[\"name/6394\",[1260,84.86]],[\"comment/6394\",[]],[\"name/6395\",[479,73.872]],[\"comment/6395\",[]],[\"name/6396\",[12,44.421]],[\"comment/6396\",[]],[\"name/6397\",[1261,84.86]],[\"comment/6397\",[]],[\"name/6398\",[1262,84.86]],[\"comment/6398\",[]],[\"name/6399\",[1263,84.86]],[\"comment/6399\",[]],[\"name/6400\",[1264,79.751]],[\"comment/6400\",[]],[\"name/6401\",[2,46.209]],[\"comment/6401\",[]],[\"name/6402\",[8,46.934]],[\"comment/6402\",[]],[\"name/6403\",[9,44.076]],[\"comment/6403\",[]],[\"name/6404\",[166,57.339]],[\"comment/6404\",[]],[\"name/6405\",[167,59.732]],[\"comment/6405\",[]],[\"name/6406\",[129,59.732]],[\"comment/6406\",[]],[\"name/6407\",[168,59.732]],[\"comment/6407\",[]],[\"name/6408\",[20,50.513]],[\"comment/6408\",[]],[\"name/6409\",[16,49.491]],[\"comment/6409\",[]],[\"name/6410\",[35,52.664]],[\"comment/6410\",[]],[\"name/6411\",[36,52.664]],[\"comment/6411\",[]],[\"name/6412\",[169,53.793]],[\"comment/6412\",[]],[\"name/6413\",[170,59.205]],[\"comment/6413\",[]],[\"name/6414\",[171,59.732]],[\"comment/6414\",[]],[\"name/6415\",[172,59.732]],[\"comment/6415\",[]],[\"name/6416\",[173,59.732]],[\"comment/6416\",[]],[\"name/6417\",[174,59.732]],[\"comment/6417\",[]],[\"name/6418\",[138,59.732]],[\"comment/6418\",[]],[\"name/6419\",[139,59.732]],[\"comment/6419\",[]],[\"name/6420\",[175,59.732]],[\"comment/6420\",[]],[\"name/6421\",[176,59.732]],[\"comment/6421\",[]],[\"name/6422\",[177,59.732]],[\"comment/6422\",[]],[\"name/6423\",[178,59.732]],[\"comment/6423\",[]],[\"name/6424\",[102,59.732]],[\"comment/6424\",[]],[\"name/6425\",[150,58.228]],[\"comment/6425\",[]],[\"name/6426\",[179,58.228]],[\"comment/6426\",[]],[\"name/6427\",[141,59.732]],[\"comment/6427\",[]],[\"name/6428\",[180,59.732]],[\"comment/6428\",[]],[\"name/6429\",[103,56.522]],[\"comment/6429\",[]],[\"name/6430\",[181,59.732]],[\"comment/6430\",[]],[\"name/6431\",[182,56.922]],[\"comment/6431\",[]],[\"name/6432\",[183,59.205]],[\"comment/6432\",[]],[\"name/6433\",[184,59.732]],[\"comment/6433\",[]],[\"name/6434\",[185,59.732]],[\"comment/6434\",[]],[\"name/6435\",[186,59.732]],[\"comment/6435\",[]],[\"name/6436\",[187,59.732]],[\"comment/6436\",[]],[\"name/6437\",[188,59.732]],[\"comment/6437\",[]],[\"name/6438\",[159,59.732]],[\"comment/6438\",[]],[\"name/6439\",[28,53.498]],[\"comment/6439\",[]],[\"name/6440\",[26,53.498]],[\"comment/6440\",[]],[\"name/6441\",[27,53.498]],[\"comment/6441\",[]],[\"name/6442\",[122,54.408]],[\"comment/6442\",[]],[\"name/6443\",[124,54.096]],[\"comment/6443\",[]],[\"name/6444\",[158,56.922]],[\"comment/6444\",[]],[\"name/6445\",[38,47.086]],[\"comment/6445\",[]],[\"name/6446\",[39,47.086]],[\"comment/6446\",[]],[\"name/6447\",[40,47.086]],[\"comment/6447\",[]],[\"name/6448\",[41,47.086]],[\"comment/6448\",[]],[\"name/6449\",[42,47.086]],[\"comment/6449\",[]],[\"name/6450\",[43,47.086]],[\"comment/6450\",[]],[\"name/6451\",[44,47.086]],[\"comment/6451\",[]],[\"name/6452\",[45,47.086]],[\"comment/6452\",[]],[\"name/6453\",[19,44.657]],[\"comment/6453\",[]],[\"name/6454\",[46,47.086]],[\"comment/6454\",[]],[\"name/6455\",[47,47.086]],[\"comment/6455\",[]],[\"name/6456\",[48,47.086]],[\"comment/6456\",[]],[\"name/6457\",[49,47.086]],[\"comment/6457\",[]],[\"name/6458\",[50,47.086]],[\"comment/6458\",[]],[\"name/6459\",[51,47.086]],[\"comment/6459\",[]],[\"name/6460\",[52,47.086]],[\"comment/6460\",[]],[\"name/6461\",[53,47.086]],[\"comment/6461\",[]],[\"name/6462\",[54,47.086]],[\"comment/6462\",[]],[\"name/6463\",[55,47.086]],[\"comment/6463\",[]],[\"name/6464\",[56,47.086]],[\"comment/6464\",[]],[\"name/6465\",[57,46.785]],[\"comment/6465\",[]],[\"name/6466\",[58,46.785]],[\"comment/6466\",[]],[\"name/6467\",[59,47.086]],[\"comment/6467\",[]],[\"name/6468\",[60,43.21]],[\"comment/6468\",[]],[\"name/6469\",[61,46.638]],[\"comment/6469\",[]],[\"name/6470\",[62,46.638]],[\"comment/6470\",[]],[\"name/6471\",[63,47.086]],[\"comment/6471\",[]],[\"name/6472\",[64,46.934]],[\"comment/6472\",[]],[\"name/6473\",[65,46.934]],[\"comment/6473\",[]],[\"name/6474\",[66,47.086]],[\"comment/6474\",[]],[\"name/6475\",[67,47.086]],[\"comment/6475\",[]],[\"name/6476\",[68,47.086]],[\"comment/6476\",[]],[\"name/6477\",[69,46.934]],[\"comment/6477\",[]],[\"name/6478\",[70,46.785]],[\"comment/6478\",[]],[\"name/6479\",[71,46.785]],[\"comment/6479\",[]],[\"name/6480\",[1265,84.86]],[\"comment/6480\",[]],[\"name/6481\",[1266,84.86]],[\"comment/6481\",[]],[\"name/6482\",[1267,84.86]],[\"comment/6482\",[]],[\"name/6483\",[225,60.876]],[\"comment/6483\",[]],[\"name/6484\",[878,79.751]],[\"comment/6484\",[]],[\"name/6485\",[879,79.751]],[\"comment/6485\",[]],[\"name/6486\",[880,79.751]],[\"comment/6486\",[]],[\"name/6487\",[881,79.751]],[\"comment/6487\",[]],[\"name/6488\",[882,79.751]],[\"comment/6488\",[]],[\"name/6489\",[883,79.751]],[\"comment/6489\",[]],[\"name/6490\",[884,79.751]],[\"comment/6490\",[]],[\"name/6491\",[1268,84.86]],[\"comment/6491\",[]],[\"name/6492\",[1269,84.86]],[\"comment/6492\",[]],[\"name/6493\",[502,76.385]],[\"comment/6493\",[]],[\"name/6494\",[1270,84.86]],[\"comment/6494\",[]],[\"name/6495\",[9,44.076]],[\"comment/6495\",[]],[\"name/6496\",[1271,84.86]],[\"comment/6496\",[]],[\"name/6497\",[1272,84.86]],[\"comment/6497\",[]],[\"name/6498\",[169,53.793]],[\"comment/6498\",[]],[\"name/6499\",[245,60.876]],[\"comment/6499\",[]],[\"name/6500\",[1273,84.86]],[\"comment/6500\",[]],[\"name/6501\",[1274,84.86]],[\"comment/6501\",[]],[\"name/6502\",[1275,84.86]],[\"comment/6502\",[]],[\"name/6503\",[1276,84.86]],[\"comment/6503\",[]],[\"name/6504\",[16,49.491]],[\"comment/6504\",[]],[\"name/6505\",[371,64.487]],[\"comment/6505\",[]],[\"name/6506\",[1277,84.86]],[\"comment/6506\",[]],[\"name/6507\",[1278,84.86]],[\"comment/6507\",[]],[\"name/6508\",[1279,84.86]],[\"comment/6508\",[]],[\"name/6509\",[1280,84.86]],[\"comment/6509\",[]],[\"name/6510\",[1281,79.751]],[\"comment/6510\",[]],[\"name/6511\",[1282,84.86]],[\"comment/6511\",[]],[\"name/6512\",[1283,84.86]],[\"comment/6512\",[]],[\"name/6513\",[1284,84.86]],[\"comment/6513\",[]],[\"name/6514\",[158,56.922]],[\"comment/6514\",[]],[\"name/6515\",[1285,84.86]],[\"comment/6515\",[]],[\"name/6516\",[1286,84.86]],[\"comment/6516\",[]],[\"name/6517\",[1287,79.751]],[\"comment/6517\",[]],[\"name/6518\",[103,56.522]],[\"comment/6518\",[]],[\"name/6519\",[182,56.922]],[\"comment/6519\",[]],[\"name/6520\",[170,59.205]],[\"comment/6520\",[]],[\"name/6521\",[12,44.421]],[\"comment/6521\",[]],[\"name/6522\",[1259,79.751]],[\"comment/6522\",[]],[\"name/6523\",[12,44.421]],[\"comment/6523\",[]],[\"name/6524\",[73,67.51]],[\"comment/6524\",[]],[\"name/6525\",[75,67.51]],[\"comment/6525\",[]],[\"name/6526\",[1288,84.86]],[\"comment/6526\",[]],[\"name/6527\",[2,46.209]],[\"comment/6527\",[]],[\"name/6528\",[722,79.751]],[\"comment/6528\",[]],[\"name/6529\",[723,79.751]],[\"comment/6529\",[]],[\"name/6530\",[724,79.751]],[\"comment/6530\",[]],[\"name/6531\",[725,79.751]],[\"comment/6531\",[]],[\"name/6532\",[12,44.421]],[\"comment/6532\",[]],[\"name/6533\",[60,43.21]],[\"comment/6533\",[]],[\"name/6534\",[305,66.398]],[\"comment/6534\",[]],[\"name/6535\",[726,79.751]],[\"comment/6535\",[]],[\"name/6536\",[727,79.751]],[\"comment/6536\",[]],[\"name/6537\",[728,79.751]],[\"comment/6537\",[]],[\"name/6538\",[729,79.751]],[\"comment/6538\",[]],[\"name/6539\",[16,49.491]],[\"comment/6539\",[]],[\"name/6540\",[8,46.934]],[\"comment/6540\",[]],[\"name/6541\",[9,44.076]],[\"comment/6541\",[]],[\"name/6542\",[539,73.872]],[\"comment/6542\",[]],[\"name/6543\",[1289,84.86]],[\"comment/6543\",[]],[\"name/6544\",[1290,84.86]],[\"comment/6544\",[]],[\"name/6545\",[225,60.876]],[\"comment/6545\",[]],[\"name/6546\",[1291,84.86]],[\"comment/6546\",[]],[\"name/6547\",[1085,79.751]],[\"comment/6547\",[]],[\"name/6548\",[158,56.922]],[\"comment/6548\",[]],[\"name/6549\",[741,79.751]],[\"comment/6549\",[]],[\"name/6550\",[730,79.751]],[\"comment/6550\",[]],[\"name/6551\",[90,67.51]],[\"comment/6551\",[]],[\"name/6552\",[336,70.194]],[\"comment/6552\",[]],[\"name/6553\",[731,79.751]],[\"comment/6553\",[]],[\"name/6554\",[732,79.751]],[\"comment/6554\",[]],[\"name/6555\",[116,56.922]],[\"comment/6555\",[]],[\"name/6556\",[19,44.657]],[\"comment/6556\",[]],[\"name/6557\",[733,79.751]],[\"comment/6557\",[]],[\"name/6558\",[465,70.194]],[\"comment/6558\",[]],[\"name/6559\",[734,79.751]],[\"comment/6559\",[]],[\"name/6560\",[124,54.096]],[\"comment/6560\",[]],[\"name/6561\",[36,52.664]],[\"comment/6561\",[]],[\"name/6562\",[35,52.664]],[\"comment/6562\",[]],[\"name/6563\",[735,79.751]],[\"comment/6563\",[]],[\"name/6564\",[32,59.732]],[\"comment/6564\",[]],[\"name/6565\",[166,57.339]],[\"comment/6565\",[]],[\"name/6566\",[736,79.751]],[\"comment/6566\",[]],[\"name/6567\",[737,79.751]],[\"comment/6567\",[]],[\"name/6568\",[738,79.751]],[\"comment/6568\",[]],[\"name/6569\",[739,79.751]],[\"comment/6569\",[]],[\"name/6570\",[740,79.751]],[\"comment/6570\",[]],[\"name/6571\",[123,54.408]],[\"comment/6571\",[]],[\"name/6572\",[38,47.086]],[\"comment/6572\",[]],[\"name/6573\",[39,47.086]],[\"comment/6573\",[]],[\"name/6574\",[40,47.086]],[\"comment/6574\",[]],[\"name/6575\",[41,47.086]],[\"comment/6575\",[]],[\"name/6576\",[42,47.086]],[\"comment/6576\",[]],[\"name/6577\",[43,47.086]],[\"comment/6577\",[]],[\"name/6578\",[44,47.086]],[\"comment/6578\",[]],[\"name/6579\",[45,47.086]],[\"comment/6579\",[]],[\"name/6580\",[46,47.086]],[\"comment/6580\",[]],[\"name/6581\",[47,47.086]],[\"comment/6581\",[]],[\"name/6582\",[48,47.086]],[\"comment/6582\",[]],[\"name/6583\",[49,47.086]],[\"comment/6583\",[]],[\"name/6584\",[50,47.086]],[\"comment/6584\",[]],[\"name/6585\",[51,47.086]],[\"comment/6585\",[]],[\"name/6586\",[52,47.086]],[\"comment/6586\",[]],[\"name/6587\",[53,47.086]],[\"comment/6587\",[]],[\"name/6588\",[54,47.086]],[\"comment/6588\",[]],[\"name/6589\",[55,47.086]],[\"comment/6589\",[]],[\"name/6590\",[56,47.086]],[\"comment/6590\",[]],[\"name/6591\",[57,46.785]],[\"comment/6591\",[]],[\"name/6592\",[58,46.785]],[\"comment/6592\",[]],[\"name/6593\",[59,47.086]],[\"comment/6593\",[]],[\"name/6594\",[60,43.21]],[\"comment/6594\",[]],[\"name/6595\",[61,46.638]],[\"comment/6595\",[]],[\"name/6596\",[62,46.638]],[\"comment/6596\",[]],[\"name/6597\",[63,47.086]],[\"comment/6597\",[]],[\"name/6598\",[64,46.934]],[\"comment/6598\",[]],[\"name/6599\",[65,46.934]],[\"comment/6599\",[]],[\"name/6600\",[66,47.086]],[\"comment/6600\",[]],[\"name/6601\",[67,47.086]],[\"comment/6601\",[]],[\"name/6602\",[68,47.086]],[\"comment/6602\",[]],[\"name/6603\",[69,46.934]],[\"comment/6603\",[]],[\"name/6604\",[70,46.785]],[\"comment/6604\",[]],[\"name/6605\",[71,46.785]],[\"comment/6605\",[]],[\"name/6606\",[1292,84.86]],[\"comment/6606\",[]],[\"name/6607\",[305,66.398]],[\"comment/6607\",[]],[\"name/6608\",[323,60.876]],[\"comment/6608\",[]],[\"name/6609\",[1293,84.86]],[\"comment/6609\",[]],[\"name/6610\",[539,73.872]],[\"comment/6610\",[]],[\"name/6611\",[2,46.209]],[\"comment/6611\",[]],[\"name/6612\",[319,66.398]],[\"comment/6612\",[]],[\"name/6613\",[6,54.096]],[\"comment/6613\",[]],[\"name/6614\",[8,46.934]],[\"comment/6614\",[]],[\"name/6615\",[9,44.076]],[\"comment/6615\",[]],[\"name/6616\",[363,79.751]],[\"comment/6616\",[]],[\"name/6617\",[1294,79.751]],[\"comment/6617\",[]],[\"name/6618\",[1295,84.86]],[\"comment/6618\",[]],[\"name/6619\",[1296,84.86]],[\"comment/6619\",[]],[\"name/6620\",[1297,84.86]],[\"comment/6620\",[]],[\"name/6621\",[1242,79.751]],[\"comment/6621\",[]],[\"name/6622\",[1298,84.86]],[\"comment/6622\",[]],[\"name/6623\",[1299,84.86]],[\"comment/6623\",[]],[\"name/6624\",[898,76.385]],[\"comment/6624\",[]],[\"name/6625\",[381,67.51]],[\"comment/6625\",[]],[\"name/6626\",[132,59.732]],[\"comment/6626\",[]],[\"name/6627\",[744,76.385]],[\"comment/6627\",[]],[\"name/6628\",[1300,84.86]],[\"comment/6628\",[]],[\"name/6629\",[1301,84.86]],[\"comment/6629\",[]],[\"name/6630\",[19,44.657]],[\"comment/6630\",[]],[\"name/6631\",[29,56.137]],[\"comment/6631\",[]],[\"name/6632\",[30,55.767]],[\"comment/6632\",[]],[\"name/6633\",[122,54.408]],[\"comment/6633\",[]],[\"name/6634\",[123,54.408]],[\"comment/6634\",[]],[\"name/6635\",[124,54.096]],[\"comment/6635\",[]],[\"name/6636\",[16,49.491]],[\"comment/6636\",[]],[\"name/6637\",[20,50.513]],[\"comment/6637\",[]],[\"name/6638\",[169,53.793]],[\"comment/6638\",[]],[\"name/6639\",[245,60.876]],[\"comment/6639\",[]],[\"name/6640\",[369,65.397]],[\"comment/6640\",[]],[\"name/6641\",[370,65.397]],[\"comment/6641\",[]],[\"name/6642\",[371,64.487]],[\"comment/6642\",[]],[\"name/6643\",[372,65.397]],[\"comment/6643\",[]],[\"name/6644\",[373,65.397]],[\"comment/6644\",[]],[\"name/6645\",[38,47.086]],[\"comment/6645\",[]],[\"name/6646\",[39,47.086]],[\"comment/6646\",[]],[\"name/6647\",[40,47.086]],[\"comment/6647\",[]],[\"name/6648\",[41,47.086]],[\"comment/6648\",[]],[\"name/6649\",[42,47.086]],[\"comment/6649\",[]],[\"name/6650\",[43,47.086]],[\"comment/6650\",[]],[\"name/6651\",[44,47.086]],[\"comment/6651\",[]],[\"name/6652\",[45,47.086]],[\"comment/6652\",[]],[\"name/6653\",[46,47.086]],[\"comment/6653\",[]],[\"name/6654\",[47,47.086]],[\"comment/6654\",[]],[\"name/6655\",[48,47.086]],[\"comment/6655\",[]],[\"name/6656\",[49,47.086]],[\"comment/6656\",[]],[\"name/6657\",[50,47.086]],[\"comment/6657\",[]],[\"name/6658\",[51,47.086]],[\"comment/6658\",[]],[\"name/6659\",[52,47.086]],[\"comment/6659\",[]],[\"name/6660\",[53,47.086]],[\"comment/6660\",[]],[\"name/6661\",[54,47.086]],[\"comment/6661\",[]],[\"name/6662\",[55,47.086]],[\"comment/6662\",[]],[\"name/6663\",[56,47.086]],[\"comment/6663\",[]],[\"name/6664\",[57,46.785]],[\"comment/6664\",[]],[\"name/6665\",[58,46.785]],[\"comment/6665\",[]],[\"name/6666\",[59,47.086]],[\"comment/6666\",[]],[\"name/6667\",[60,43.21]],[\"comment/6667\",[]],[\"name/6668\",[61,46.638]],[\"comment/6668\",[]],[\"name/6669\",[62,46.638]],[\"comment/6669\",[]],[\"name/6670\",[63,47.086]],[\"comment/6670\",[]],[\"name/6671\",[64,46.934]],[\"comment/6671\",[]],[\"name/6672\",[65,46.934]],[\"comment/6672\",[]],[\"name/6673\",[66,47.086]],[\"comment/6673\",[]],[\"name/6674\",[67,47.086]],[\"comment/6674\",[]],[\"name/6675\",[68,47.086]],[\"comment/6675\",[]],[\"name/6676\",[69,46.934]],[\"comment/6676\",[]],[\"name/6677\",[70,46.785]],[\"comment/6677\",[]],[\"name/6678\",[71,46.785]],[\"comment/6678\",[]],[\"name/6679\",[493,73.872]],[\"comment/6679\",[]],[\"name/6680\",[2,46.209]],[\"comment/6680\",[]],[\"name/6681\",[98,60.287]],[\"comment/6681\",[]],[\"name/6682\",[99,59.732]],[\"comment/6682\",[]],[\"name/6683\",[8,46.934]],[\"comment/6683\",[]],[\"name/6684\",[9,44.076]],[\"comment/6684\",[]],[\"name/6685\",[102,59.732]],[\"comment/6685\",[]],[\"name/6686\",[103,56.522]],[\"comment/6686\",[]],[\"name/6687\",[19,44.657]],[\"comment/6687\",[]],[\"name/6688\",[104,59.732]],[\"comment/6688\",[]],[\"name/6689\",[105,57.339]],[\"comment/6689\",[]],[\"name/6690\",[106,59.732]],[\"comment/6690\",[]],[\"name/6691\",[11,52.935]],[\"comment/6691\",[]],[\"name/6692\",[12,44.421]],[\"comment/6692\",[]],[\"name/6693\",[107,60.287]],[\"comment/6693\",[]],[\"name/6694\",[19,44.657]],[\"comment/6694\",[]],[\"name/6695\",[108,60.287]],[\"comment/6695\",[]],[\"name/6696\",[109,60.287]],[\"comment/6696\",[]],[\"name/6697\",[110,57.339]],[\"comment/6697\",[]],[\"name/6698\",[111,60.287]],[\"comment/6698\",[]],[\"name/6699\",[112,60.287]],[\"comment/6699\",[]],[\"name/6700\",[113,57.774]],[\"comment/6700\",[]],[\"name/6701\",[114,60.287]],[\"comment/6701\",[]],[\"name/6702\",[115,60.287]],[\"comment/6702\",[]],[\"name/6703\",[116,56.922]],[\"comment/6703\",[]],[\"name/6704\",[60,43.21]],[\"comment/6704\",[]],[\"name/6705\",[117,58.705]],[\"comment/6705\",[]],[\"name/6706\",[118,60.287]],[\"comment/6706\",[]],[\"name/6707\",[119,60.287]],[\"comment/6707\",[]],[\"name/6708\",[120,59.732]],[\"comment/6708\",[]],[\"name/6709\",[121,60.287]],[\"comment/6709\",[]],[\"name/6710\",[122,54.408]],[\"comment/6710\",[]],[\"name/6711\",[123,54.408]],[\"comment/6711\",[]],[\"name/6712\",[124,54.096]],[\"comment/6712\",[]],[\"name/6713\",[125,60.287]],[\"comment/6713\",[]],[\"name/6714\",[126,60.287]],[\"comment/6714\",[]],[\"name/6715\",[127,60.287]],[\"comment/6715\",[]],[\"name/6716\",[128,60.287]],[\"comment/6716\",[]],[\"name/6717\",[129,59.732]],[\"comment/6717\",[]],[\"name/6718\",[130,60.287]],[\"comment/6718\",[]],[\"name/6719\",[131,60.287]],[\"comment/6719\",[]],[\"name/6720\",[132,59.732]],[\"comment/6720\",[]],[\"name/6721\",[133,60.287]],[\"comment/6721\",[]],[\"name/6722\",[134,60.287]],[\"comment/6722\",[]],[\"name/6723\",[135,60.287]],[\"comment/6723\",[]],[\"name/6724\",[136,60.287]],[\"comment/6724\",[]],[\"name/6725\",[137,59.205]],[\"comment/6725\",[]],[\"name/6726\",[138,59.732]],[\"comment/6726\",[]],[\"name/6727\",[139,59.732]],[\"comment/6727\",[]],[\"name/6728\",[140,59.732]],[\"comment/6728\",[]],[\"name/6729\",[141,59.732]],[\"comment/6729\",[]],[\"name/6730\",[142,60.287]],[\"comment/6730\",[]],[\"name/6731\",[143,60.287]],[\"comment/6731\",[]],[\"name/6732\",[144,60.287]],[\"comment/6732\",[]],[\"name/6733\",[145,60.287]],[\"comment/6733\",[]],[\"name/6734\",[146,60.287]],[\"comment/6734\",[]],[\"name/6735\",[147,60.287]],[\"comment/6735\",[]],[\"name/6736\",[148,60.287]],[\"comment/6736\",[]],[\"name/6737\",[149,60.287]],[\"comment/6737\",[]],[\"name/6738\",[150,58.228]],[\"comment/6738\",[]],[\"name/6739\",[151,60.287]],[\"comment/6739\",[]],[\"name/6740\",[152,60.287]],[\"comment/6740\",[]],[\"name/6741\",[12,44.421]],[\"comment/6741\",[]],[\"name/6742\",[153,56.922]],[\"comment/6742\",[]],[\"name/6743\",[154,56.922]],[\"comment/6743\",[]],[\"name/6744\",[155,60.287]],[\"comment/6744\",[]],[\"name/6745\",[156,60.287]],[\"comment/6745\",[]],[\"name/6746\",[157,60.287]],[\"comment/6746\",[]],[\"name/6747\",[158,56.922]],[\"comment/6747\",[]],[\"name/6748\",[159,59.732]],[\"comment/6748\",[]],[\"name/6749\",[160,59.732]],[\"comment/6749\",[]],[\"name/6750\",[161,60.287]],[\"comment/6750\",[]],[\"name/6751\",[162,60.287]],[\"comment/6751\",[]],[\"name/6752\",[163,60.287]],[\"comment/6752\",[]],[\"name/6753\",[164,60.287]],[\"comment/6753\",[]],[\"name/6754\",[165,60.287]],[\"comment/6754\",[]],[\"name/6755\",[166,57.339]],[\"comment/6755\",[]],[\"name/6756\",[167,59.732]],[\"comment/6756\",[]],[\"name/6757\",[168,59.732]],[\"comment/6757\",[]],[\"name/6758\",[20,50.513]],[\"comment/6758\",[]],[\"name/6759\",[16,49.491]],[\"comment/6759\",[]],[\"name/6760\",[35,52.664]],[\"comment/6760\",[]],[\"name/6761\",[36,52.664]],[\"comment/6761\",[]],[\"name/6762\",[169,53.793]],[\"comment/6762\",[]],[\"name/6763\",[170,59.205]],[\"comment/6763\",[]],[\"name/6764\",[171,59.732]],[\"comment/6764\",[]],[\"name/6765\",[172,59.732]],[\"comment/6765\",[]],[\"name/6766\",[173,59.732]],[\"comment/6766\",[]],[\"name/6767\",[174,59.732]],[\"comment/6767\",[]],[\"name/6768\",[175,59.732]],[\"comment/6768\",[]],[\"name/6769\",[176,59.732]],[\"comment/6769\",[]],[\"name/6770\",[177,59.732]],[\"comment/6770\",[]],[\"name/6771\",[178,59.732]],[\"comment/6771\",[]],[\"name/6772\",[179,58.228]],[\"comment/6772\",[]],[\"name/6773\",[180,59.732]],[\"comment/6773\",[]],[\"name/6774\",[181,59.732]],[\"comment/6774\",[]],[\"name/6775\",[182,56.922]],[\"comment/6775\",[]],[\"name/6776\",[183,59.205]],[\"comment/6776\",[]],[\"name/6777\",[184,59.732]],[\"comment/6777\",[]],[\"name/6778\",[185,59.732]],[\"comment/6778\",[]],[\"name/6779\",[186,59.732]],[\"comment/6779\",[]],[\"name/6780\",[187,59.732]],[\"comment/6780\",[]],[\"name/6781\",[188,59.732]],[\"comment/6781\",[]],[\"name/6782\",[28,53.498]],[\"comment/6782\",[]],[\"name/6783\",[26,53.498]],[\"comment/6783\",[]],[\"name/6784\",[27,53.498]],[\"comment/6784\",[]],[\"name/6785\",[38,47.086]],[\"comment/6785\",[]],[\"name/6786\",[39,47.086]],[\"comment/6786\",[]],[\"name/6787\",[40,47.086]],[\"comment/6787\",[]],[\"name/6788\",[41,47.086]],[\"comment/6788\",[]],[\"name/6789\",[42,47.086]],[\"comment/6789\",[]],[\"name/6790\",[43,47.086]],[\"comment/6790\",[]],[\"name/6791\",[44,47.086]],[\"comment/6791\",[]],[\"name/6792\",[45,47.086]],[\"comment/6792\",[]],[\"name/6793\",[46,47.086]],[\"comment/6793\",[]],[\"name/6794\",[47,47.086]],[\"comment/6794\",[]],[\"name/6795\",[48,47.086]],[\"comment/6795\",[]],[\"name/6796\",[49,47.086]],[\"comment/6796\",[]],[\"name/6797\",[50,47.086]],[\"comment/6797\",[]],[\"name/6798\",[51,47.086]],[\"comment/6798\",[]],[\"name/6799\",[52,47.086]],[\"comment/6799\",[]],[\"name/6800\",[53,47.086]],[\"comment/6800\",[]],[\"name/6801\",[54,47.086]],[\"comment/6801\",[]],[\"name/6802\",[55,47.086]],[\"comment/6802\",[]],[\"name/6803\",[56,47.086]],[\"comment/6803\",[]],[\"name/6804\",[57,46.785]],[\"comment/6804\",[]],[\"name/6805\",[58,46.785]],[\"comment/6805\",[]],[\"name/6806\",[59,47.086]],[\"comment/6806\",[]],[\"name/6807\",[60,43.21]],[\"comment/6807\",[]],[\"name/6808\",[61,46.638]],[\"comment/6808\",[]],[\"name/6809\",[62,46.638]],[\"comment/6809\",[]],[\"name/6810\",[63,47.086]],[\"comment/6810\",[]],[\"name/6811\",[64,46.934]],[\"comment/6811\",[]],[\"name/6812\",[65,46.934]],[\"comment/6812\",[]],[\"name/6813\",[66,47.086]],[\"comment/6813\",[]],[\"name/6814\",[67,47.086]],[\"comment/6814\",[]],[\"name/6815\",[68,47.086]],[\"comment/6815\",[]],[\"name/6816\",[69,46.934]],[\"comment/6816\",[]],[\"name/6817\",[70,46.785]],[\"comment/6817\",[]],[\"name/6818\",[71,46.785]],[\"comment/6818\",[]],[\"name/6819\",[540,73.872]],[\"comment/6819\",[]],[\"name/6820\",[2,46.209]],[\"comment/6820\",[]],[\"name/6821\",[6,54.096]],[\"comment/6821\",[]],[\"name/6822\",[7,59.732]],[\"comment/6822\",[]],[\"name/6823\",[8,46.934]],[\"comment/6823\",[]],[\"name/6824\",[9,44.076]],[\"comment/6824\",[]],[\"name/6825\",[1302,84.86]],[\"comment/6825\",[]],[\"name/6826\",[1303,84.86]],[\"comment/6826\",[]],[\"name/6827\",[19,44.657]],[\"comment/6827\",[]],[\"name/6828\",[16,49.491]],[\"comment/6828\",[]],[\"name/6829\",[20,50.513]],[\"comment/6829\",[]],[\"name/6830\",[21,60.876]],[\"comment/6830\",[]],[\"name/6831\",[22,60.876]],[\"comment/6831\",[]],[\"name/6832\",[17,60.876]],[\"comment/6832\",[]],[\"name/6833\",[23,60.876]],[\"comment/6833\",[]],[\"name/6834\",[24,60.876]],[\"comment/6834\",[]],[\"name/6835\",[25,60.876]],[\"comment/6835\",[]],[\"name/6836\",[26,53.498]],[\"comment/6836\",[]],[\"name/6837\",[27,53.498]],[\"comment/6837\",[]],[\"name/6838\",[28,53.498]],[\"comment/6838\",[]],[\"name/6839\",[29,56.137]],[\"comment/6839\",[]],[\"name/6840\",[30,55.767]],[\"comment/6840\",[]],[\"name/6841\",[31,60.876]],[\"comment/6841\",[]],[\"name/6842\",[32,59.732]],[\"comment/6842\",[]],[\"name/6843\",[33,60.876]],[\"comment/6843\",[]],[\"name/6844\",[34,60.876]],[\"comment/6844\",[]],[\"name/6845\",[35,52.664]],[\"comment/6845\",[]],[\"name/6846\",[36,52.664]],[\"comment/6846\",[]],[\"name/6847\",[37,60.876]],[\"comment/6847\",[]],[\"name/6848\",[38,47.086]],[\"comment/6848\",[]],[\"name/6849\",[39,47.086]],[\"comment/6849\",[]],[\"name/6850\",[40,47.086]],[\"comment/6850\",[]],[\"name/6851\",[41,47.086]],[\"comment/6851\",[]],[\"name/6852\",[42,47.086]],[\"comment/6852\",[]],[\"name/6853\",[43,47.086]],[\"comment/6853\",[]],[\"name/6854\",[44,47.086]],[\"comment/6854\",[]],[\"name/6855\",[45,47.086]],[\"comment/6855\",[]],[\"name/6856\",[46,47.086]],[\"comment/6856\",[]],[\"name/6857\",[47,47.086]],[\"comment/6857\",[]],[\"name/6858\",[48,47.086]],[\"comment/6858\",[]],[\"name/6859\",[49,47.086]],[\"comment/6859\",[]],[\"name/6860\",[50,47.086]],[\"comment/6860\",[]],[\"name/6861\",[51,47.086]],[\"comment/6861\",[]],[\"name/6862\",[52,47.086]],[\"comment/6862\",[]],[\"name/6863\",[53,47.086]],[\"comment/6863\",[]],[\"name/6864\",[54,47.086]],[\"comment/6864\",[]],[\"name/6865\",[55,47.086]],[\"comment/6865\",[]],[\"name/6866\",[56,47.086]],[\"comment/6866\",[]],[\"name/6867\",[57,46.785]],[\"comment/6867\",[]],[\"name/6868\",[58,46.785]],[\"comment/6868\",[]],[\"name/6869\",[59,47.086]],[\"comment/6869\",[]],[\"name/6870\",[60,43.21]],[\"comment/6870\",[]],[\"name/6871\",[61,46.638]],[\"comment/6871\",[]],[\"name/6872\",[62,46.638]],[\"comment/6872\",[]],[\"name/6873\",[63,47.086]],[\"comment/6873\",[]],[\"name/6874\",[64,46.934]],[\"comment/6874\",[]],[\"name/6875\",[65,46.934]],[\"comment/6875\",[]],[\"name/6876\",[66,47.086]],[\"comment/6876\",[]],[\"name/6877\",[67,47.086]],[\"comment/6877\",[]],[\"name/6878\",[68,47.086]],[\"comment/6878\",[]],[\"name/6879\",[69,46.934]],[\"comment/6879\",[]],[\"name/6880\",[70,46.785]],[\"comment/6880\",[]],[\"name/6881\",[71,46.785]],[\"comment/6881\",[]],[\"name/6882\",[541,79.751]],[\"comment/6882\",[]],[\"name/6883\",[1304,84.86]],[\"comment/6883\",[]],[\"name/6884\",[9,44.076]],[\"comment/6884\",[]],[\"name/6885\",[1305,84.86]],[\"comment/6885\",[]],[\"name/6886\",[1306,84.86]],[\"comment/6886\",[]],[\"name/6887\",[1307,84.86]],[\"comment/6887\",[]],[\"name/6888\",[1308,84.86]],[\"comment/6888\",[]],[\"name/6889\",[1309,84.86]],[\"comment/6889\",[]],[\"name/6890\",[1310,84.86]],[\"comment/6890\",[]],[\"name/6891\",[1311,84.86]],[\"comment/6891\",[]],[\"name/6892\",[1312,84.86]],[\"comment/6892\",[]],[\"name/6893\",[1313,84.86]],[\"comment/6893\",[]],[\"name/6894\",[1314,84.86]],[\"comment/6894\",[]],[\"name/6895\",[1315,84.86]],[\"comment/6895\",[]],[\"name/6896\",[1316,84.86]],[\"comment/6896\",[]],[\"name/6897\",[1317,84.86]],[\"comment/6897\",[]],[\"name/6898\",[1318,84.86]],[\"comment/6898\",[]],[\"name/6899\",[1319,84.86]],[\"comment/6899\",[]],[\"name/6900\",[1320,84.86]],[\"comment/6900\",[]],[\"name/6901\",[1294,79.751]],[\"comment/6901\",[]],[\"name/6902\",[1321,84.86]],[\"comment/6902\",[]],[\"name/6903\",[1322,84.86]],[\"comment/6903\",[]],[\"name/6904\",[79,71.865]],[\"comment/6904\",[]],[\"name/6905\",[78,71.865]],[\"comment/6905\",[]],[\"name/6906\",[467,70.194]],[\"comment/6906\",[]],[\"name/6907\",[2,46.209]],[\"comment/6907\",[]],[\"name/6908\",[1323,84.86]],[\"comment/6908\",[]],[\"name/6909\",[1324,84.86]],[\"comment/6909\",[]],[\"name/6910\",[1325,84.86]],[\"comment/6910\",[]],[\"name/6911\",[336,70.194]],[\"comment/6911\",[]],[\"name/6912\",[8,46.934]],[\"comment/6912\",[]],[\"name/6913\",[9,44.076]],[\"comment/6913\",[]],[\"name/6914\",[209,71.865]],[\"comment/6914\",[]],[\"name/6915\",[1326,84.86]],[\"comment/6915\",[]],[\"name/6916\",[1327,84.86]],[\"comment/6916\",[]],[\"name/6917\",[1328,84.86]],[\"comment/6917\",[]],[\"name/6918\",[1329,84.86]],[\"comment/6918\",[]],[\"name/6919\",[1330,84.86]],[\"comment/6919\",[]],[\"name/6920\",[211,71.865]],[\"comment/6920\",[]],[\"name/6921\",[1331,84.86]],[\"comment/6921\",[]],[\"name/6922\",[1332,84.86]],[\"comment/6922\",[]],[\"name/6923\",[1333,84.86]],[\"comment/6923\",[]],[\"name/6924\",[1334,84.86]],[\"comment/6924\",[]],[\"name/6925\",[1335,84.86]],[\"comment/6925\",[]],[\"name/6926\",[1336,84.86]],[\"comment/6926\",[]],[\"name/6927\",[1337,84.86]],[\"comment/6927\",[]],[\"name/6928\",[1338,84.86]],[\"comment/6928\",[]],[\"name/6929\",[1339,84.86]],[\"comment/6929\",[]],[\"name/6930\",[19,44.657]],[\"comment/6930\",[]],[\"name/6931\",[38,47.086]],[\"comment/6931\",[]],[\"name/6932\",[39,47.086]],[\"comment/6932\",[]],[\"name/6933\",[40,47.086]],[\"comment/6933\",[]],[\"name/6934\",[41,47.086]],[\"comment/6934\",[]],[\"name/6935\",[42,47.086]],[\"comment/6935\",[]],[\"name/6936\",[43,47.086]],[\"comment/6936\",[]],[\"name/6937\",[44,47.086]],[\"comment/6937\",[]],[\"name/6938\",[45,47.086]],[\"comment/6938\",[]],[\"name/6939\",[46,47.086]],[\"comment/6939\",[]],[\"name/6940\",[47,47.086]],[\"comment/6940\",[]],[\"name/6941\",[48,47.086]],[\"comment/6941\",[]],[\"name/6942\",[49,47.086]],[\"comment/6942\",[]],[\"name/6943\",[50,47.086]],[\"comment/6943\",[]],[\"name/6944\",[51,47.086]],[\"comment/6944\",[]],[\"name/6945\",[52,47.086]],[\"comment/6945\",[]],[\"name/6946\",[53,47.086]],[\"comment/6946\",[]],[\"name/6947\",[54,47.086]],[\"comment/6947\",[]],[\"name/6948\",[55,47.086]],[\"comment/6948\",[]],[\"name/6949\",[56,47.086]],[\"comment/6949\",[]],[\"name/6950\",[57,46.785]],[\"comment/6950\",[]],[\"name/6951\",[58,46.785]],[\"comment/6951\",[]],[\"name/6952\",[59,47.086]],[\"comment/6952\",[]],[\"name/6953\",[60,43.21]],[\"comment/6953\",[]],[\"name/6954\",[61,46.638]],[\"comment/6954\",[]],[\"name/6955\",[62,46.638]],[\"comment/6955\",[]],[\"name/6956\",[63,47.086]],[\"comment/6956\",[]],[\"name/6957\",[64,46.934]],[\"comment/6957\",[]],[\"name/6958\",[65,46.934]],[\"comment/6958\",[]],[\"name/6959\",[66,47.086]],[\"comment/6959\",[]],[\"name/6960\",[67,47.086]],[\"comment/6960\",[]],[\"name/6961\",[68,47.086]],[\"comment/6961\",[]],[\"name/6962\",[69,46.934]],[\"comment/6962\",[]],[\"name/6963\",[70,46.785]],[\"comment/6963\",[]],[\"name/6964\",[71,46.785]],[\"comment/6964\",[]],[\"name/6965\",[1340,84.86]],[\"comment/6965\",[]],[\"name/6966\",[1341,84.86]],[\"comment/6966\",[]],[\"name/6967\",[1342,84.86]],[\"comment/6967\",[]],[\"name/6968\",[1343,84.86]],[\"comment/6968\",[]],[\"name/6969\",[1344,84.86]],[\"comment/6969\",[]],[\"name/6970\",[1345,84.86]],[\"comment/6970\",[]],[\"name/6971\",[1346,84.86]],[\"comment/6971\",[]],[\"name/6972\",[1347,84.86]],[\"comment/6972\",[]],[\"name/6973\",[1348,84.86]],[\"comment/6973\",[]],[\"name/6974\",[1349,84.86]],[\"comment/6974\",[]],[\"name/6975\",[1350,84.86]],[\"comment/6975\",[]],[\"name/6976\",[1351,84.86]],[\"comment/6976\",[]],[\"name/6977\",[2,46.209]],[\"comment/6977\",[]],[\"name/6978\",[0,63.653]],[\"comment/6978\",[]],[\"name/6979\",[80,71.865]],[\"comment/6979\",[]],[\"name/6980\",[94,71.865]],[\"comment/6980\",[]],[\"name/6981\",[518,76.385]],[\"comment/6981\",[]],[\"name/6982\",[97,73.872]],[\"comment/6982\",[]],[\"name/6983\",[193,71.865]],[\"comment/6983\",[]],[\"name/6984\",[227,76.385]],[\"comment/6984\",[]],[\"name/6985\",[328,71.865]],[\"comment/6985\",[]],[\"name/6986\",[366,66.398]],[\"comment/6986\",[]],[\"name/6987\",[374,73.872]],[\"comment/6987\",[]],[\"name/6988\",[380,76.385]],[\"comment/6988\",[]],[\"name/6989\",[392,73.872]],[\"comment/6989\",[]],[\"name/6990\",[396,73.872]],[\"comment/6990\",[]],[\"name/6991\",[476,73.872]],[\"comment/6991\",[]],[\"name/6992\",[519,76.385]],[\"comment/6992\",[]],[\"name/6993\",[520,76.385]],[\"comment/6993\",[]],[\"name/6994\",[491,73.872]],[\"comment/6994\",[]],[\"name/6995\",[305,66.398]],[\"comment/6995\",[]],[\"name/6996\",[489,73.872]],[\"comment/6996\",[]],[\"name/6997\",[496,73.872]],[\"comment/6997\",[]],[\"name/6998\",[497,73.872]],[\"comment/6998\",[]],[\"name/6999\",[521,76.385]],[\"comment/6999\",[]],[\"name/7000\",[523,73.872]],[\"comment/7000\",[]],[\"name/7001\",[494,73.872]],[\"comment/7001\",[]],[\"name/7002\",[524,76.385]],[\"comment/7002\",[]],[\"name/7003\",[504,73.872]],[\"comment/7003\",[]],[\"name/7004\",[409,67.51]],[\"comment/7004\",[]],[\"name/7005\",[526,73.872]],[\"comment/7005\",[]],[\"name/7006\",[513,73.872]],[\"comment/7006\",[]],[\"name/7007\",[498,71.865]],[\"comment/7007\",[]],[\"name/7008\",[527,76.385]],[\"comment/7008\",[]],[\"name/7009\",[512,71.865]],[\"comment/7009\",[]],[\"name/7010\",[529,76.385]],[\"comment/7010\",[]],[\"name/7011\",[490,73.872]],[\"comment/7011\",[]],[\"name/7012\",[530,76.385]],[\"comment/7012\",[]],[\"name/7013\",[478,67.51]],[\"comment/7013\",[]],[\"name/7014\",[505,73.872]],[\"comment/7014\",[]],[\"name/7015\",[531,76.385]],[\"comment/7015\",[]],[\"name/7016\",[508,73.872]],[\"comment/7016\",[]],[\"name/7017\",[532,76.385]],[\"comment/7017\",[]],[\"name/7018\",[488,73.872]],[\"comment/7018\",[]],[\"name/7019\",[1124,79.751]],[\"comment/7019\",[]],[\"name/7020\",[533,76.385]],[\"comment/7020\",[]],[\"name/7021\",[534,76.385]],[\"comment/7021\",[]],[\"name/7022\",[507,73.872]],[\"comment/7022\",[]],[\"name/7023\",[439,63.653]],[\"comment/7023\",[]],[\"name/7024\",[1161,79.751]],[\"comment/7024\",[]],[\"name/7025\",[501,71.865]],[\"comment/7025\",[]],[\"name/7026\",[290,68.762]],[\"comment/7026\",[]],[\"name/7027\",[511,73.872]],[\"comment/7027\",[]],[\"name/7028\",[495,73.872]],[\"comment/7028\",[]],[\"name/7029\",[536,76.385]],[\"comment/7029\",[]],[\"name/7030\",[487,73.872]],[\"comment/7030\",[]],[\"name/7031\",[537,76.385]],[\"comment/7031\",[]],[\"name/7032\",[510,73.872]],[\"comment/7032\",[]],[\"name/7033\",[499,73.872]],[\"comment/7033\",[]],[\"name/7034\",[492,73.872]],[\"comment/7034\",[]],[\"name/7035\",[1264,79.751]],[\"comment/7035\",[]],[\"name/7036\",[539,73.872]],[\"comment/7036\",[]],[\"name/7037\",[493,73.872]],[\"comment/7037\",[]],[\"name/7038\",[540,73.872]],[\"comment/7038\",[]],[\"name/7039\",[467,70.194]],[\"comment/7039\",[]],[\"name/7040\",[542,76.385]],[\"comment/7040\",[]],[\"name/7041\",[509,73.872]],[\"comment/7041\",[]],[\"name/7042\",[468,71.865]],[\"comment/7042\",[]],[\"name/7043\",[543,76.385]],[\"comment/7043\",[]],[\"name/7044\",[1352,84.86]],[\"comment/7044\",[]],[\"name/7045\",[1353,84.86]],[\"comment/7045\",[]],[\"name/7046\",[1354,84.86]],[\"comment/7046\",[]],[\"name/7047\",[1355,84.86]],[\"comment/7047\",[]],[\"name/7048\",[1356,84.86]],[\"comment/7048\",[]],[\"name/7049\",[1357,84.86]],[\"comment/7049\",[]],[\"name/7050\",[1358,84.86]],[\"comment/7050\",[]],[\"name/7051\",[1359,84.86]],[\"comment/7051\",[]],[\"name/7052\",[1360,79.751]],[\"comment/7052\",[]],[\"name/7053\",[9,44.076]],[\"comment/7053\",[]],[\"name/7054\",[90,67.51]],[\"comment/7054\",[]],[\"name/7055\",[1361,84.86]],[\"comment/7055\",[]],[\"name/7056\",[514,79.751]],[\"comment/7056\",[]],[\"name/7057\",[1362,84.86]],[\"comment/7057\",[]],[\"name/7058\",[1363,84.86]],[\"comment/7058\",[]],[\"name/7059\",[978,79.751]],[\"comment/7059\",[]],[\"name/7060\",[1364,84.86]],[\"comment/7060\",[]],[\"name/7061\",[1365,84.86]],[\"comment/7061\",[]],[\"name/7062\",[1366,84.86]],[\"comment/7062\",[]],[\"name/7063\",[1360,79.751]],[\"comment/7063\",[]],[\"name/7064\",[9,44.076]],[\"comment/7064\",[]],[\"name/7065\",[1367,84.86]],[\"comment/7065\",[]],[\"name/7066\",[1368,79.751]],[\"comment/7066\",[]],[\"name/7067\",[1369,79.751]],[\"comment/7067\",[]],[\"name/7068\",[1370,79.751]],[\"comment/7068\",[]],[\"name/7069\",[1371,79.751]],[\"comment/7069\",[]],[\"name/7070\",[1372,79.751]],[\"comment/7070\",[]],[\"name/7071\",[542,76.385]],[\"comment/7071\",[]],[\"name/7072\",[2,46.209]],[\"comment/7072\",[]],[\"name/7073\",[3,58.228]],[\"comment/7073\",[]],[\"name/7074\",[1373,84.86]],[\"comment/7074\",[]],[\"name/7075\",[6,54.096]],[\"comment/7075\",[]],[\"name/7076\",[7,59.732]],[\"comment/7076\",[]],[\"name/7077\",[8,46.934]],[\"comment/7077\",[]],[\"name/7078\",[9,44.076]],[\"comment/7078\",[]],[\"name/7079\",[11,52.935]],[\"comment/7079\",[]],[\"name/7080\",[1374,79.751]],[\"comment/7080\",[]],[\"name/7081\",[1375,84.86]],[\"comment/7081\",[]],[\"name/7082\",[19,44.657]],[\"comment/7082\",[]],[\"name/7083\",[16,49.491]],[\"comment/7083\",[]],[\"name/7084\",[20,50.513]],[\"comment/7084\",[]],[\"name/7085\",[21,60.876]],[\"comment/7085\",[]],[\"name/7086\",[22,60.876]],[\"comment/7086\",[]],[\"name/7087\",[17,60.876]],[\"comment/7087\",[]],[\"name/7088\",[23,60.876]],[\"comment/7088\",[]],[\"name/7089\",[24,60.876]],[\"comment/7089\",[]],[\"name/7090\",[25,60.876]],[\"comment/7090\",[]],[\"name/7091\",[26,53.498]],[\"comment/7091\",[]],[\"name/7092\",[27,53.498]],[\"comment/7092\",[]],[\"name/7093\",[28,53.498]],[\"comment/7093\",[]],[\"name/7094\",[29,56.137]],[\"comment/7094\",[]],[\"name/7095\",[30,55.767]],[\"comment/7095\",[]],[\"name/7096\",[31,60.876]],[\"comment/7096\",[]],[\"name/7097\",[32,59.732]],[\"comment/7097\",[]],[\"name/7098\",[33,60.876]],[\"comment/7098\",[]],[\"name/7099\",[34,60.876]],[\"comment/7099\",[]],[\"name/7100\",[35,52.664]],[\"comment/7100\",[]],[\"name/7101\",[36,52.664]],[\"comment/7101\",[]],[\"name/7102\",[37,60.876]],[\"comment/7102\",[]],[\"name/7103\",[38,47.086]],[\"comment/7103\",[]],[\"name/7104\",[39,47.086]],[\"comment/7104\",[]],[\"name/7105\",[40,47.086]],[\"comment/7105\",[]],[\"name/7106\",[41,47.086]],[\"comment/7106\",[]],[\"name/7107\",[42,47.086]],[\"comment/7107\",[]],[\"name/7108\",[43,47.086]],[\"comment/7108\",[]],[\"name/7109\",[44,47.086]],[\"comment/7109\",[]],[\"name/7110\",[45,47.086]],[\"comment/7110\",[]],[\"name/7111\",[46,47.086]],[\"comment/7111\",[]],[\"name/7112\",[47,47.086]],[\"comment/7112\",[]],[\"name/7113\",[48,47.086]],[\"comment/7113\",[]],[\"name/7114\",[49,47.086]],[\"comment/7114\",[]],[\"name/7115\",[50,47.086]],[\"comment/7115\",[]],[\"name/7116\",[51,47.086]],[\"comment/7116\",[]],[\"name/7117\",[52,47.086]],[\"comment/7117\",[]],[\"name/7118\",[53,47.086]],[\"comment/7118\",[]],[\"name/7119\",[54,47.086]],[\"comment/7119\",[]],[\"name/7120\",[55,47.086]],[\"comment/7120\",[]],[\"name/7121\",[56,47.086]],[\"comment/7121\",[]],[\"name/7122\",[57,46.785]],[\"comment/7122\",[]],[\"name/7123\",[58,46.785]],[\"comment/7123\",[]],[\"name/7124\",[59,47.086]],[\"comment/7124\",[]],[\"name/7125\",[60,43.21]],[\"comment/7125\",[]],[\"name/7126\",[61,46.638]],[\"comment/7126\",[]],[\"name/7127\",[62,46.638]],[\"comment/7127\",[]],[\"name/7128\",[63,47.086]],[\"comment/7128\",[]],[\"name/7129\",[64,46.934]],[\"comment/7129\",[]],[\"name/7130\",[65,46.934]],[\"comment/7130\",[]],[\"name/7131\",[66,47.086]],[\"comment/7131\",[]],[\"name/7132\",[67,47.086]],[\"comment/7132\",[]],[\"name/7133\",[68,47.086]],[\"comment/7133\",[]],[\"name/7134\",[69,46.934]],[\"comment/7134\",[]],[\"name/7135\",[70,46.785]],[\"comment/7135\",[]],[\"name/7136\",[71,46.785]],[\"comment/7136\",[]],[\"name/7137\",[509,73.872]],[\"comment/7137\",[]],[\"name/7138\",[1,57.339]],[\"comment/7138\",[]],[\"name/7139\",[2,46.209]],[\"comment/7139\",[]],[\"name/7140\",[8,46.934]],[\"comment/7140\",[]],[\"name/7141\",[9,44.076]],[\"comment/7141\",[]],[\"name/7142\",[11,52.935]],[\"comment/7142\",[]],[\"name/7143\",[12,44.421]],[\"comment/7143\",[]],[\"name/7144\",[1370,79.751]],[\"comment/7144\",[]],[\"name/7145\",[1368,79.751]],[\"comment/7145\",[]],[\"name/7146\",[1369,79.751]],[\"comment/7146\",[]],[\"name/7147\",[1371,79.751]],[\"comment/7147\",[]],[\"name/7148\",[1372,79.751]],[\"comment/7148\",[]],[\"name/7149\",[381,67.51]],[\"comment/7149\",[]],[\"name/7150\",[1374,79.751]],[\"comment/7150\",[]],[\"name/7151\",[19,44.657]],[\"comment/7151\",[]],[\"name/7152\",[38,47.086]],[\"comment/7152\",[]],[\"name/7153\",[39,47.086]],[\"comment/7153\",[]],[\"name/7154\",[40,47.086]],[\"comment/7154\",[]],[\"name/7155\",[41,47.086]],[\"comment/7155\",[]],[\"name/7156\",[42,47.086]],[\"comment/7156\",[]],[\"name/7157\",[43,47.086]],[\"comment/7157\",[]],[\"name/7158\",[44,47.086]],[\"comment/7158\",[]],[\"name/7159\",[45,47.086]],[\"comment/7159\",[]],[\"name/7160\",[46,47.086]],[\"comment/7160\",[]],[\"name/7161\",[47,47.086]],[\"comment/7161\",[]],[\"name/7162\",[48,47.086]],[\"comment/7162\",[]],[\"name/7163\",[49,47.086]],[\"comment/7163\",[]],[\"name/7164\",[50,47.086]],[\"comment/7164\",[]],[\"name/7165\",[51,47.086]],[\"comment/7165\",[]],[\"name/7166\",[52,47.086]],[\"comment/7166\",[]],[\"name/7167\",[53,47.086]],[\"comment/7167\",[]],[\"name/7168\",[54,47.086]],[\"comment/7168\",[]],[\"name/7169\",[55,47.086]],[\"comment/7169\",[]],[\"name/7170\",[56,47.086]],[\"comment/7170\",[]],[\"name/7171\",[57,46.785]],[\"comment/7171\",[]],[\"name/7172\",[58,46.785]],[\"comment/7172\",[]],[\"name/7173\",[59,47.086]],[\"comment/7173\",[]],[\"name/7174\",[60,43.21]],[\"comment/7174\",[]],[\"name/7175\",[61,46.638]],[\"comment/7175\",[]],[\"name/7176\",[62,46.638]],[\"comment/7176\",[]],[\"name/7177\",[63,47.086]],[\"comment/7177\",[]],[\"name/7178\",[64,46.934]],[\"comment/7178\",[]],[\"name/7179\",[65,46.934]],[\"comment/7179\",[]],[\"name/7180\",[66,47.086]],[\"comment/7180\",[]],[\"name/7181\",[67,47.086]],[\"comment/7181\",[]],[\"name/7182\",[68,47.086]],[\"comment/7182\",[]],[\"name/7183\",[69,46.934]],[\"comment/7183\",[]],[\"name/7184\",[70,46.785]],[\"comment/7184\",[]],[\"name/7185\",[71,46.785]],[\"comment/7185\",[]],[\"name/7186\",[1376,84.86]],[\"comment/7186\",[]],[\"name/7187\",[568,79.751]],[\"comment/7187\",[]],[\"name/7188\",[569,79.751]],[\"comment/7188\",[]],[\"name/7189\",[561,71.865]],[\"comment/7189\",[]],[\"name/7190\",[552,79.751]],[\"comment/7190\",[]],[\"name/7191\",[1377,84.86]],[\"comment/7191\",[]],[\"name/7192\",[1378,84.86]],[\"comment/7192\",[]],[\"name/7193\",[1379,84.86]],[\"comment/7193\",[]],[\"name/7194\",[468,71.865]],[\"comment/7194\",[]],[\"name/7195\",[2,46.209]],[\"comment/7195\",[]],[\"name/7196\",[1380,84.86]],[\"comment/7196\",[]],[\"name/7197\",[8,46.934]],[\"comment/7197\",[]],[\"name/7198\",[9,44.076]],[\"comment/7198\",[]],[\"name/7199\",[1381,84.86]],[\"comment/7199\",[]],[\"name/7200\",[1382,84.86]],[\"comment/7200\",[]],[\"name/7201\",[1383,84.86]],[\"comment/7201\",[]],[\"name/7202\",[1384,84.86]],[\"comment/7202\",[]],[\"name/7203\",[1281,79.751]],[\"comment/7203\",[]],[\"name/7204\",[1385,84.86]],[\"comment/7204\",[]],[\"name/7205\",[1386,84.86]],[\"comment/7205\",[]],[\"name/7206\",[647,79.751]],[\"comment/7206\",[]],[\"name/7207\",[1387,84.86]],[\"comment/7207\",[]],[\"name/7208\",[124,54.096]],[\"comment/7208\",[]],[\"name/7209\",[122,54.408]],[\"comment/7209\",[]],[\"name/7210\",[56,47.086]],[\"comment/7210\",[]],[\"name/7211\",[1388,84.86]],[\"comment/7211\",[]],[\"name/7212\",[1389,84.86]],[\"comment/7212\",[]],[\"name/7213\",[1390,84.86]],[\"comment/7213\",[]],[\"name/7214\",[1391,84.86]],[\"comment/7214\",[]],[\"name/7215\",[1287,79.751]],[\"comment/7215\",[]],[\"name/7216\",[1392,84.86]],[\"comment/7216\",[]],[\"name/7217\",[103,56.522]],[\"comment/7217\",[]],[\"name/7218\",[123,54.408]],[\"comment/7218\",[]],[\"name/7219\",[19,44.657]],[\"comment/7219\",[]],[\"name/7220\",[38,47.086]],[\"comment/7220\",[]],[\"name/7221\",[39,47.086]],[\"comment/7221\",[]],[\"name/7222\",[40,47.086]],[\"comment/7222\",[]],[\"name/7223\",[41,47.086]],[\"comment/7223\",[]],[\"name/7224\",[42,47.086]],[\"comment/7224\",[]],[\"name/7225\",[43,47.086]],[\"comment/7225\",[]],[\"name/7226\",[44,47.086]],[\"comment/7226\",[]],[\"name/7227\",[45,47.086]],[\"comment/7227\",[]],[\"name/7228\",[46,47.086]],[\"comment/7228\",[]],[\"name/7229\",[47,47.086]],[\"comment/7229\",[]],[\"name/7230\",[48,47.086]],[\"comment/7230\",[]],[\"name/7231\",[49,47.086]],[\"comment/7231\",[]],[\"name/7232\",[50,47.086]],[\"comment/7232\",[]],[\"name/7233\",[51,47.086]],[\"comment/7233\",[]],[\"name/7234\",[52,47.086]],[\"comment/7234\",[]],[\"name/7235\",[53,47.086]],[\"comment/7235\",[]],[\"name/7236\",[54,47.086]],[\"comment/7236\",[]],[\"name/7237\",[55,47.086]],[\"comment/7237\",[]],[\"name/7238\",[57,46.785]],[\"comment/7238\",[]],[\"name/7239\",[58,46.785]],[\"comment/7239\",[]],[\"name/7240\",[59,47.086]],[\"comment/7240\",[]],[\"name/7241\",[60,43.21]],[\"comment/7241\",[]],[\"name/7242\",[61,46.638]],[\"comment/7242\",[]],[\"name/7243\",[62,46.638]],[\"comment/7243\",[]],[\"name/7244\",[63,47.086]],[\"comment/7244\",[]],[\"name/7245\",[64,46.934]],[\"comment/7245\",[]],[\"name/7246\",[65,46.934]],[\"comment/7246\",[]],[\"name/7247\",[66,47.086]],[\"comment/7247\",[]],[\"name/7248\",[67,47.086]],[\"comment/7248\",[]],[\"name/7249\",[68,47.086]],[\"comment/7249\",[]],[\"name/7250\",[69,46.934]],[\"comment/7250\",[]],[\"name/7251\",[70,46.785]],[\"comment/7251\",[]],[\"name/7252\",[71,46.785]],[\"comment/7252\",[]],[\"name/7253\",[1393,84.86]],[\"comment/7253\",[]],[\"name/7254\",[1394,84.86]],[\"comment/7254\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":12,\"name\":{\"12\":{},\"169\":{},\"243\":{},\"292\":{},\"382\":{},\"464\":{},\"622\":{},\"767\":{},\"768\":{},\"844\":{},\"893\":{},\"994\":{},\"1043\":{},\"1244\":{},\"1296\":{},\"1402\":{},\"1405\":{},\"1466\":{},\"1583\":{},\"1593\":{},\"1604\":{},\"1838\":{},\"1850\":{},\"1896\":{},\"2018\":{},\"2105\":{},\"2153\":{},\"2291\":{},\"2333\":{},\"2341\":{},\"2459\":{},\"2535\":{},\"2543\":{},\"2575\":{},\"2697\":{},\"2702\":{},\"2784\":{},\"2833\":{},\"3021\":{},\"3154\":{},\"3203\":{},\"3332\":{},\"3380\":{},\"3539\":{},\"3667\":{},\"3669\":{},\"3708\":{},\"3718\":{},\"3864\":{},\"3912\":{},\"4238\":{},\"4293\":{},\"4299\":{},\"4494\":{},\"4539\":{},\"4547\":{},\"4660\":{},\"4798\":{},\"4920\":{},\"5063\":{},\"5128\":{},\"5140\":{},\"5188\":{},\"5344\":{},\"5358\":{},\"5417\":{},\"5438\":{},\"5600\":{},\"5608\":{},\"5640\":{},\"5768\":{},\"5929\":{},\"5997\":{},\"6060\":{},\"6109\":{},\"6260\":{},\"6309\":{},\"6391\":{},\"6396\":{},\"6521\":{},\"6523\":{},\"6532\":{},\"6692\":{},\"6741\":{},\"7143\":{}},\"comment\":{}}],[\"above\",{\"_index\":813,\"name\":{\"2915\":{},\"4360\":{}},\"comment\":{}}],[\"abovecode\",{\"_index\":91,\"name\":{\"155\":{}},\"comment\":{}}],[\"accid\",{\"_index\":435,\"name\":{\"1287\":{}},\"comment\":{}}],[\"accidental\",{\"_index\":0,\"name\":{\"0\":{},\"1258\":{},\"1438\":{},\"1470\":{},\"1615\":{},\"2699\":{},\"2704\":{},\"3066\":{},\"3069\":{},\"3072\":{},\"3112\":{},\"6978\":{}},\"comment\":{}}],[\"accidentallowerpadding\",{\"_index\":909,\"name\":{\"3541\":{}},\"comment\":{}}],[\"accidentalmap\",{\"_index\":570,\"name\":{\"1587\":{}},\"comment\":{}}],[\"accidentals\",{\"_index\":422,\"name\":{\"1271\":{},\"1299\":{},\"3091\":{}},\"comment\":{}}],[\"accidentalspacing\",{\"_index\":804,\"name\":{\"2708\":{}},\"comment\":{}}],[\"accidentalupperpadding\",{\"_index\":908,\"name\":{\"3540\":{}},\"comment\":{}}],[\"accidentalvalue\",{\"_index\":849,\"name\":{\"3076\":{}},\"comment\":{}}],[\"add\",{\"_index\":270,\"name\":{\"574\":{},\"1724\":{},\"3821\":{},\"5452\":{}},\"comment\":{}}],[\"addbeziercurve\",{\"_index\":260,\"name\":{\"560\":{}},\"comment\":{}}],[\"addchildelement\",{\"_index\":38,\"name\":{\"38\":{},\"119\":{},\"193\":{},\"336\":{},\"414\":{},\"493\":{},\"723\":{},\"796\":{},\"938\":{},\"1088\":{},\"1144\":{},\"1209\":{},\"1365\":{},\"1775\":{},\"1937\":{},\"2052\":{},\"2198\":{},\"2418\":{},\"2485\":{},\"2657\":{},\"2737\":{},\"2877\":{},\"2944\":{},\"3030\":{},\"3249\":{},\"3423\":{},\"3485\":{},\"3568\":{},\"3631\":{},\"3729\":{},\"3957\":{},\"4077\":{},\"4144\":{},\"4194\":{},\"4250\":{},\"4317\":{},\"4384\":{},\"4624\":{},\"4696\":{},\"4753\":{},\"4818\":{},\"4876\":{},\"4935\":{},\"4997\":{},\"5071\":{},\"5231\":{},\"5307\":{},\"5382\":{},\"5531\":{},\"5722\":{},\"5782\":{},\"5890\":{},\"5944\":{},\"6012\":{},\"6154\":{},\"6354\":{},\"6445\":{},\"6572\":{},\"6645\":{},\"6785\":{},\"6848\":{},\"6931\":{},\"7103\":{},\"7152\":{},\"7220\":{}},\"comment\":{}}],[\"addchord\",{\"_index\":454,\"name\":{\"1322\":{}},\"comment\":{}}],[\"addclass\",{\"_index\":47,\"name\":{\"47\":{},\"128\":{},\"202\":{},\"345\":{},\"423\":{},\"502\":{},\"732\":{},\"805\":{},\"947\":{},\"1097\":{},\"1153\":{},\"1218\":{},\"1375\":{},\"1784\":{},\"1946\":{},\"2061\":{},\"2207\":{},\"2426\":{},\"2494\":{},\"2666\":{},\"2746\":{},\"2886\":{},\"2953\":{},\"3039\":{},\"3259\":{},\"3432\":{},\"3494\":{},\"3577\":{},\"3640\":{},\"3738\":{},\"3966\":{},\"4085\":{},\"4153\":{},\"4203\":{},\"4259\":{},\"4326\":{},\"4393\":{},\"4632\":{},\"4705\":{},\"4762\":{},\"4827\":{},\"4885\":{},\"4944\":{},\"5006\":{},\"5080\":{},\"5241\":{},\"5316\":{},\"5391\":{},\"5540\":{},\"5731\":{},\"5791\":{},\"5898\":{},\"5953\":{},\"6020\":{},\"6163\":{},\"6363\":{},\"6455\":{},\"6581\":{},\"6654\":{},\"6794\":{},\"6857\":{},\"6940\":{},\"7112\":{},\"7161\":{},\"7229\":{}},\"comment\":{}}],[\"addclef\",{\"_index\":1036,\"name\":{\"4064\":{},\"5877\":{}},\"comment\":{}}],[\"addcommithook\",{\"_index\":446,\"name\":{\"1314\":{},\"1350\":{}},\"comment\":{}}],[\"addconnector\",{\"_index\":1210,\"name\":{\"5526\":{}},\"comment\":{}}],[\"addendclef\",{\"_index\":1037,\"name\":{\"4065\":{},\"5878\":{}},\"comment\":{}}],[\"addendmodifier\",{\"_index\":1025,\"name\":{\"4052\":{},\"5865\":{}},\"comment\":{}}],[\"addendnote\",{\"_index\":1178,\"name\":{\"5361\":{}},\"comment\":{}}],[\"addendtimesignature\",{\"_index\":1039,\"name\":{\"4067\":{},\"5880\":{}},\"comment\":{}}],[\"addglyph\",{\"_index\":351,\"name\":{\"692\":{}},\"comment\":{}}],[\"addglyphortext\",{\"_index\":352,\"name\":{\"693\":{}},\"comment\":{}}],[\"addglyphsuperscript\",{\"_index\":350,\"name\":{\"691\":{}},\"comment\":{}}],[\"addkeysignature\",{\"_index\":1035,\"name\":{\"4063\":{},\"5876\":{}},\"comment\":{}}],[\"addline\",{\"_index\":353,\"name\":{\"694\":{}},\"comment\":{}}],[\"addmember\",{\"_index\":822,\"name\":{\"2991\":{}},\"comment\":{}}],[\"addmodifier\",{\"_index\":150,\"name\":{\"289\":{},\"890\":{},\"1040\":{},\"1893\":{},\"2150\":{},\"2380\":{},\"2617\":{},\"2830\":{},\"2990\":{},\"3200\":{},\"3377\":{},\"3909\":{},\"4051\":{},\"4586\":{},\"5185\":{},\"5682\":{},\"5864\":{},\"6106\":{},\"6306\":{},\"6425\":{},\"6738\":{}},\"comment\":{}}],[\"addnote\",{\"_index\":452,\"name\":{\"1320\":{}},\"comment\":{}}],[\"addnoteoption\",{\"_index\":451,\"name\":{\"1319\":{}},\"comment\":{}}],[\"addpoint\",{\"_index\":256,\"name\":{\"556\":{}},\"comment\":{}}],[\"addquadraticcurve\",{\"_index\":259,\"name\":{\"559\":{}},\"comment\":{}}],[\"addsinglenote\",{\"_index\":453,\"name\":{\"1321\":{}},\"comment\":{}}],[\"addstave\",{\"_index\":1211,\"name\":{\"5527\":{}},\"comment\":{}}],[\"addstroke\",{\"_index\":121,\"name\":{\"260\":{},\"861\":{},\"1011\":{},\"1866\":{},\"2122\":{},\"2357\":{},\"2592\":{},\"2801\":{},\"3171\":{},\"3349\":{},\"3881\":{},\"4563\":{},\"5157\":{},\"5657\":{},\"6077\":{},\"6277\":{},\"6709\":{}},\"comment\":{}}],[\"addsymbolblock\",{\"_index\":346,\"name\":{\"687\":{}},\"comment\":{}}],[\"addtabglyph\",{\"_index\":1224,\"name\":{\"5824\":{}},\"comment\":{}}],[\"addtext\",{\"_index\":347,\"name\":{\"688\":{}},\"comment\":{}}],[\"addtextsubscript\",{\"_index\":349,\"name\":{\"690\":{}},\"comment\":{}}],[\"addtextsuperscript\",{\"_index\":348,\"name\":{\"689\":{}},\"comment\":{}}],[\"addtickable\",{\"_index\":1287,\"name\":{\"6517\":{},\"7215\":{}},\"comment\":{}}],[\"addtickables\",{\"_index\":1392,\"name\":{\"7216\":{}},\"comment\":{}}],[\"addtimesignature\",{\"_index\":1038,\"name\":{\"4066\":{},\"5879\":{}},\"comment\":{}}],[\"addtomodifiercontext\",{\"_index\":102,\"name\":{\"236\":{},\"924\":{},\"1074\":{},\"1817\":{},\"2184\":{},\"2405\":{},\"2644\":{},\"2777\":{},\"3234\":{},\"3409\":{},\"3943\":{},\"4611\":{},\"5217\":{},\"5709\":{},\"6140\":{},\"6340\":{},\"6424\":{},\"6685\":{}},\"comment\":{}}],[\"addtostave\",{\"_index\":808,\"name\":{\"2715\":{}},\"comment\":{}}],[\"addtrebleglyph\",{\"_index\":1040,\"name\":{\"4068\":{},\"5881\":{}},\"comment\":{}}],[\"addvoices\",{\"_index\":1212,\"name\":{\"5528\":{}},\"comment\":{}}],[\"addx\",{\"_index\":257,\"name\":{\"557\":{}},\"comment\":{}}],[\"addy\",{\"_index\":258,\"name\":{\"558\":{}},\"comment\":{}}],[\"adjustheightforbeam\",{\"_index\":1160,\"name\":{\"5069\":{}},\"comment\":{}}],[\"adjustheightforflag\",{\"_index\":1159,\"name\":{\"5068\":{}},\"comment\":{}}],[\"advancewidth\",{\"_index\":308,\"name\":{\"618\":{},\"1635\":{}},\"comment\":{}}],[\"align_center\",{\"_index\":751,\"name\":{\"2246\":{},\"3142\":{},\"3306\":{},\"4454\":{},\"5582\":{},\"6240\":{}},\"comment\":{}}],[\"align_rests\",{\"_index\":633,\"name\":{\"1677\":{}},\"comment\":{}}],[\"alignmentcontexts\",{\"_index\":636,\"name\":{\"1681\":{}},\"comment\":{}}],[\"alignmentmodifiercontexts\",{\"_index\":641,\"name\":{\"1686\":{}},\"comment\":{}}],[\"alignrests\",{\"_index\":648,\"name\":{\"1699\":{}},\"comment\":{}}],[\"alignreststonotes\",{\"_index\":646,\"name\":{\"1696\":{}},\"comment\":{}}],[\"alignsubnoteswithnote\",{\"_index\":37,\"name\":{\"37\":{},\"118\":{},\"192\":{},\"492\":{},\"722\":{},\"1208\":{},\"1774\":{},\"2484\":{},\"2943\":{},\"3484\":{},\"3567\":{},\"3630\":{},\"5306\":{},\"5381\":{},\"6847\":{},\"7102\":{}},\"comment\":{}}],[\"alpha\",{\"_index\":1194,\"name\":{\"5489\":{}},\"comment\":{}}],[\"alterkey\",{\"_index\":811,\"name\":{\"2720\":{}},\"comment\":{}}],[\"annotation\",{\"_index\":80,\"name\":{\"82\":{},\"778\":{},\"1439\":{},\"1471\":{},\"6979\":{}},\"comment\":{}}],[\"annotation_spacing\",{\"_index\":114,\"name\":{\"252\":{},\"853\":{},\"1003\":{},\"1859\":{},\"2114\":{},\"2350\":{},\"2584\":{},\"2793\":{},\"3163\":{},\"3341\":{},\"3873\":{},\"4556\":{},\"5149\":{},\"5649\":{},\"6069\":{},\"6269\":{},\"6701\":{}},\"comment\":{}}],[\"annotationhorizontaljustify\",{\"_index\":72,\"name\":{\"72\":{},\"1550\":{}},\"comment\":{}}],[\"annotations\",{\"_index\":365,\"name\":{\"766\":{}},\"comment\":{}}],[\"annotationsmufl\",{\"_index\":368,\"name\":{\"773\":{}},\"comment\":{}}],[\"annotationverticaljustify\",{\"_index\":77,\"name\":{\"77\":{},\"1551\":{}},\"comment\":{}}],[\"applyaccidentals\",{\"_index\":5,\"name\":{\"5\":{}},\"comment\":{}}],[\"applyandgetbeams\",{\"_index\":195,\"name\":{\"377\":{}},\"comment\":{}}],[\"applyattributes\",{\"_index\":1192,\"name\":{\"5464\":{}},\"comment\":{}}],[\"applyfontstyle\",{\"_index\":1083,\"name\":{\"4315\":{}},\"comment\":{}}],[\"applylinestyle\",{\"_index\":1082,\"name\":{\"4314\":{}},\"comment\":{}}],[\"applystemextensions\",{\"_index\":220,\"name\":{\"408\":{}},\"comment\":{}}],[\"applystyle\",{\"_index\":43,\"name\":{\"43\":{},\"124\":{},\"198\":{},\"341\":{},\"419\":{},\"498\":{},\"728\":{},\"801\":{},\"943\":{},\"1093\":{},\"1149\":{},\"1214\":{},\"1370\":{},\"1780\":{},\"1942\":{},\"2057\":{},\"2203\":{},\"2422\":{},\"2490\":{},\"2662\":{},\"2742\":{},\"2882\":{},\"2949\":{},\"3035\":{},\"3254\":{},\"3428\":{},\"3490\":{},\"3573\":{},\"3636\":{},\"3734\":{},\"3962\":{},\"4081\":{},\"4149\":{},\"4199\":{},\"4255\":{},\"4322\":{},\"4389\":{},\"4628\":{},\"4701\":{},\"4758\":{},\"4823\":{},\"4881\":{},\"4940\":{},\"5002\":{},\"5076\":{},\"5236\":{},\"5312\":{},\"5387\":{},\"5536\":{},\"5727\":{},\"5787\":{},\"5894\":{},\"5949\":{},\"6008\":{},\"6159\":{},\"6359\":{},\"6450\":{},\"6577\":{},\"6650\":{},\"6790\":{},\"6853\":{},\"6936\":{},\"7108\":{},\"7157\":{},\"7225\":{}},\"comment\":{}}],[\"applytickmultiplier\",{\"_index\":187,\"name\":{\"331\":{},\"933\":{},\"1083\":{},\"1932\":{},\"2193\":{},\"2413\":{},\"2652\":{},\"2872\":{},\"3244\":{},\"3418\":{},\"3952\":{},\"4619\":{},\"5226\":{},\"5717\":{},\"6149\":{},\"6349\":{},\"6436\":{},\"6780\":{}},\"comment\":{}}],[\"arc\",{\"_index\":288,\"name\":{\"593\":{},\"3812\":{},\"5474\":{}},\"comment\":{}}],[\"arpeggio_directionless\",{\"_index\":1177,\"name\":{\"5351\":{}},\"comment\":{}}],[\"array\",{\"_index\":639,\"name\":{\"1684\":{},\"1688\":{}},\"comment\":{}}],[\"arrowhead_angle\",{\"_index\":1079,\"name\":{\"4309\":{}},\"comment\":{}}],[\"arrowhead_length\",{\"_index\":1078,\"name\":{\"4308\":{}},\"comment\":{}}],[\"articulation\",{\"_index\":94,\"name\":{\"158\":{},\"1441\":{},\"1472\":{},\"1620\":{},\"6980\":{}},\"comment\":{}}],[\"articulationstruct\",{\"_index\":89,\"name\":{\"153\":{}},\"comment\":{}}],[\"attach\",{\"_index\":1326,\"name\":{\"6915\":{}},\"comment\":{}}],[\"attributes\",{\"_index\":1179,\"name\":{\"5416\":{},\"5426\":{},\"5442\":{}},\"comment\":{}}],[\"auto_beam\",{\"_index\":635,\"name\":{\"1680\":{}},\"comment\":{}}],[\"auto_stem\",{\"_index\":747,\"name\":{\"2234\":{},\"4442\":{},\"5570\":{}},\"comment\":{}}],[\"autostem\",{\"_index\":762,\"name\":{\"2272\":{},\"4475\":{}},\"comment\":{}}],[\"autowidth\",{\"_index\":1206,\"name\":{\"5507\":{}},\"comment\":{}}],[\"backend\",{\"_index\":482,\"name\":{\"1407\":{}},\"comment\":{}}],[\"backends\",{\"_index\":974,\"name\":{\"3838\":{}},\"comment\":{}}],[\"background\",{\"_index\":483,\"name\":{\"1410\":{}},\"comment\":{}}],[\"backgroundfillstyle\",{\"_index\":1189,\"name\":{\"5448\":{}},\"comment\":{}}],[\"barline\",{\"_index\":518,\"name\":{\"1473\":{},\"4117\":{},\"6981\":{}},\"comment\":{}}],[\"barlinetype\",{\"_index\":547,\"name\":{\"1562\":{},\"4109\":{}},\"comment\":{}}],[\"barnote\",{\"_index\":97,\"name\":{\"227\":{},\"1431\":{},\"1474\":{},\"6982\":{}},\"comment\":{}}],[\"basey\",{\"_index\":696,\"name\":{\"1840\":{},\"2335\":{},\"2545\":{},\"4541\":{},\"5065\":{},\"5130\":{},\"5610\":{}},\"comment\":{}}],[\"bbox\",{\"_index\":730,\"name\":{\"2028\":{},\"6550\":{}},\"comment\":{}}],[\"beam\",{\"_index\":193,\"name\":{\"374\":{},\"1346\":{},\"1453\":{},\"1475\":{},\"6983\":{}},\"comment\":{}}],[\"beam_both\",{\"_index\":191,\"name\":{\"372\":{}},\"comment\":{}}],[\"beam_count\",{\"_index\":714,\"name\":{\"1991\":{}},\"comment\":{}}],[\"beam_left\",{\"_index\":189,\"name\":{\"370\":{}},\"comment\":{}}],[\"beam_right\",{\"_index\":190,\"name\":{\"371\":{}},\"comment\":{}}],[\"beam_width\",{\"_index\":201,\"name\":{\"387\":{}},\"comment\":{}}],[\"beamnotes\",{\"_index\":789,\"name\":{\"2462\":{}},\"comment\":{}}],[\"beat_value\",{\"_index\":569,\"name\":{\"1585\":{},\"7188\":{}},\"comment\":{}}],[\"beats_occupied\",{\"_index\":1311,\"name\":{\"6891\":{}},\"comment\":{}}],[\"beatsoccupieddeprecationwarning\",{\"_index\":1332,\"name\":{\"6922\":{}},\"comment\":{}}],[\"begin\",{\"_index\":403,\"name\":{\"1248\":{},\"3690\":{},\"4362\":{},\"4971\":{}},\"comment\":{}}],[\"begin_end\",{\"_index\":1140,\"name\":{\"4974\":{}},\"comment\":{}}],[\"begin_x\",{\"_index\":379,\"name\":{\"977\":{}},\"comment\":{}}],[\"beginpath\",{\"_index\":283,\"name\":{\"588\":{},\"3807\":{},\"5469\":{}},\"comment\":{}}],[\"below\",{\"_index\":814,\"name\":{\"2916\":{},\"4361\":{}},\"comment\":{}}],[\"belowcode\",{\"_index\":92,\"name\":{\"156\":{}},\"comment\":{}}],[\"benchmark\",{\"_index\":1364,\"name\":{\"7060\":{}},\"comment\":{}}],[\"bend\",{\"_index\":227,\"name\":{\"454\":{},\"1476\":{},\"6984\":{}},\"comment\":{}}],[\"bend_width\",{\"_index\":232,\"name\":{\"467\":{}},\"comment\":{}}],[\"bendphrase\",{\"_index\":223,\"name\":{\"448\":{}},\"comment\":{}}],[\"between_lines\",{\"_index\":93,\"name\":{\"157\":{}},\"comment\":{}}],[\"bezier\",{\"_index\":721,\"name\":{\"2011\":{}},\"comment\":{}}],[\"beziercurveto\",{\"_index\":286,\"name\":{\"591\":{},\"3810\":{},\"5472\":{}},\"comment\":{}}],[\"bold\",{\"_index\":601,\"name\":{\"1640\":{},\"6195\":{}},\"comment\":{}}],[\"botglyphs\",{\"_index\":732,\"name\":{\"2032\":{},\"6554\":{}},\"comment\":{}}],[\"botstartx\",{\"_index\":1290,\"name\":{\"6544\":{}},\"comment\":{}}],[\"bottom\",{\"_index\":79,\"name\":{\"80\":{},\"638\":{},\"4295\":{},\"5986\":{},\"6904\":{}},\"comment\":{}}],[\"bottom_stave\",{\"_index\":1057,\"name\":{\"4186\":{}},\"comment\":{}}],[\"bottom_text_position\",{\"_index\":984,\"name\":{\"3993\":{}},\"comment\":{}}],[\"bottomline\",{\"_index\":1294,\"name\":{\"6617\":{},\"6901\":{}},\"comment\":{}}],[\"boundingbox\",{\"_index\":240,\"name\":{\"532\":{},\"1477\":{}},\"comment\":{}}],[\"boundingboxcomputation\",{\"_index\":252,\"name\":{\"550\":{},\"1478\":{}},\"comment\":{}}],[\"bounds\",{\"_index\":237,\"name\":{\"527\":{}},\"comment\":{}}],[\"bpm\",{\"_index\":1127,\"name\":{\"4788\":{}},\"comment\":{}}],[\"bracket\",{\"_index\":941,\"name\":{\"3710\":{}},\"comment\":{}}],[\"bracket_height\",{\"_index\":948,\"name\":{\"3720\":{},\"6004\":{}},\"comment\":{}}],[\"bracket_line_width\",{\"_index\":950,\"name\":{\"3722\":{}},\"comment\":{}}],[\"bracketed\",{\"_index\":1312,\"name\":{\"6892\":{}},\"comment\":{}}],[\"breaksecondaryat\",{\"_index\":213,\"name\":{\"401\":{}},\"comment\":{}}],[\"brush_down\",{\"_index\":1171,\"name\":{\"5345\":{}},\"comment\":{}}],[\"brush_up\",{\"_index\":1172,\"name\":{\"5346\":{}},\"comment\":{}}],[\"build\",{\"_index\":515,\"name\":{\"1465\":{}},\"comment\":{}}],[\"buildandattach\",{\"_index\":398,\"name\":{\"1181\":{},\"3604\":{}},\"comment\":{}}],[\"buildcontext\",{\"_index\":977,\"name\":{\"3841\":{}},\"comment\":{}}],[\"builder\",{\"_index\":402,\"name\":{\"1247\":{},\"1303\":{},\"1326\":{},\"1339\":{}},\"comment\":{}}],[\"builderelements\",{\"_index\":437,\"name\":{\"1297\":{}},\"comment\":{}}],[\"builderoptions\",{\"_index\":438,\"name\":{\"1300\":{}},\"comment\":{}}],[\"buildflag\",{\"_index\":686,\"name\":{\"1826\":{},\"2323\":{},\"2557\":{},\"4529\":{},\"5116\":{},\"5622\":{}},\"comment\":{}}],[\"buildnoteheads\",{\"_index\":761,\"name\":{\"2271\":{},\"4474\":{}},\"comment\":{}}],[\"buildstem\",{\"_index\":685,\"name\":{\"1825\":{},\"2270\":{},\"2556\":{},\"4473\":{},\"5115\":{},\"5621\":{}},\"comment\":{}}],[\"cached_outline\",{\"_index\":599,\"name\":{\"1637\":{}},\"comment\":{}}],[\"calcbeamednotesslashbbox\",{\"_index\":758,\"name\":{\"2265\":{}},\"comment\":{}}],[\"calcnotedisplacements\",{\"_index\":778,\"name\":{\"2305\":{},\"4508\":{}},\"comment\":{}}],[\"calculateflatslope\",{\"_index\":218,\"name\":{\"406\":{}},\"comment\":{}}],[\"calculatekeyprops\",{\"_index\":764,\"name\":{\"2274\":{},\"4477\":{}},\"comment\":{}}],[\"calculateoptimalstemdirection\",{\"_index\":763,\"name\":{\"2273\":{},\"4476\":{}},\"comment\":{}}],[\"calculateslope\",{\"_index\":217,\"name\":{\"405\":{}},\"comment\":{}}],[\"cancelkey\",{\"_index\":806,\"name\":{\"2713\":{}},\"comment\":{}}],[\"canonical_notes\",{\"_index\":856,\"name\":{\"3085\":{}},\"comment\":{}}],[\"canvas\",{\"_index\":265,\"name\":{\"569\":{},\"3831\":{}},\"comment\":{}}],[\"canvas_browser_size_limit\",{\"_index\":262,\"name\":{\"564\":{}},\"comment\":{}}],[\"canvascontext\",{\"_index\":261,\"name\":{\"561\":{},\"1479\":{}},\"comment\":{}}],[\"category\",{\"_index\":2,\"name\":{\"2\":{},\"84\":{},\"160\":{},\"229\":{},\"375\":{},\"455\":{},\"566\":{},\"649\":{},\"771\":{},\"831\":{},\"980\":{},\"1134\":{},\"1179\":{},\"1362\":{},\"1714\":{},\"1743\":{},\"1810\":{},\"1995\":{},\"2013\":{},\"2090\":{},\"2249\":{},\"2452\":{},\"2520\":{},\"2707\":{},\"2772\":{},\"2918\":{},\"3016\":{},\"3145\":{},\"3310\":{},\"3457\":{},\"3526\":{},\"3603\":{},\"3704\":{},\"3791\":{},\"3849\":{},\"4005\":{},\"4118\":{},\"4180\":{},\"4236\":{},\"4290\":{},\"4365\":{},\"4458\":{},\"4657\":{},\"4731\":{},\"4793\":{},\"4853\":{},\"4916\":{},\"4976\":{},\"5047\":{},\"5105\":{},\"5272\":{},\"5342\":{},\"5430\":{},\"5515\":{},\"5585\":{},\"5757\":{},\"5817\":{},\"5923\":{},\"5989\":{},\"6047\":{},\"6243\":{},\"6401\":{},\"6527\":{},\"6611\":{},\"6680\":{},\"6820\":{},\"6907\":{},\"6977\":{},\"7072\":{},\"7139\":{},\"7195\":{}},\"comment\":{}}],[\"center\",{\"_index\":74,\"name\":{\"74\":{},\"79\":{},\"633\":{},\"2912\":{},\"4357\":{},\"6225\":{}},\"comment\":{}}],[\"center_stem\",{\"_index\":76,\"name\":{\"76\":{},\"81\":{},\"635\":{}},\"comment\":{}}],[\"change\",{\"_index\":802,\"name\":{\"2700\":{},\"2705\":{}},\"comment\":{}}],[\"checkattachednote\",{\"_index\":22,\"name\":{\"22\":{},\"102\":{},\"176\":{},\"477\":{},\"706\":{},\"1193\":{},\"1758\":{},\"2468\":{},\"2926\":{},\"3468\":{},\"3551\":{},\"3615\":{},\"5290\":{},\"5366\":{},\"6831\":{},\"7086\":{}},\"comment\":{}}],[\"checkbeam\",{\"_index\":147,\"name\":{\"286\":{},\"887\":{},\"1037\":{},\"1890\":{},\"2147\":{},\"2378\":{},\"2614\":{},\"2827\":{},\"3197\":{},\"3374\":{},\"3906\":{},\"4584\":{},\"5182\":{},\"5679\":{},\"6103\":{},\"6303\":{},\"6735\":{}},\"comment\":{}}],[\"checkcollision\",{\"_index\":4,\"name\":{\"4\":{}},\"comment\":{}}],[\"checkcontext\",{\"_index\":59,\"name\":{\"59\":{},\"140\":{},\"214\":{},\"357\":{},\"435\":{},\"514\":{},\"744\":{},\"817\":{},\"959\":{},\"1109\":{},\"1165\":{},\"1230\":{},\"1387\":{},\"1796\":{},\"1958\":{},\"2073\":{},\"2218\":{},\"2437\":{},\"2506\":{},\"2678\":{},\"2758\":{},\"2898\":{},\"2965\":{},\"3051\":{},\"3271\":{},\"3443\":{},\"3506\":{},\"3589\":{},\"3652\":{},\"3750\":{},\"3977\":{},\"4096\":{},\"4165\":{},\"4215\":{},\"4271\":{},\"4338\":{},\"4405\":{},\"4643\":{},\"4717\":{},\"4774\":{},\"4839\":{},\"4897\":{},\"4956\":{},\"5018\":{},\"5091\":{},\"5253\":{},\"5328\":{},\"5403\":{},\"5551\":{},\"5743\":{},\"5803\":{},\"5909\":{},\"5965\":{},\"6032\":{},\"6175\":{},\"6375\":{},\"6467\":{},\"6593\":{},\"6666\":{},\"6806\":{},\"6869\":{},\"6952\":{},\"7124\":{},\"7173\":{},\"7240\":{}},\"comment\":{}}],[\"checkindex\",{\"_index\":24,\"name\":{\"24\":{},\"105\":{},\"179\":{},\"480\":{},\"709\":{},\"1195\":{},\"1761\":{},\"2471\":{},\"2929\":{},\"3471\":{},\"3554\":{},\"3617\":{},\"5293\":{},\"5369\":{},\"6834\":{},\"7089\":{}},\"comment\":{}}],[\"checkmetrics\",{\"_index\":736,\"name\":{\"2044\":{},\"6566\":{}},\"comment\":{}}],[\"checkmodifiercontext\",{\"_index\":27,\"name\":{\"27\":{},\"108\":{},\"182\":{},\"335\":{},\"483\":{},\"712\":{},\"937\":{},\"1087\":{},\"1198\":{},\"1764\":{},\"1936\":{},\"2197\":{},\"2417\":{},\"2474\":{},\"2656\":{},\"2876\":{},\"2932\":{},\"3248\":{},\"3422\":{},\"3474\":{},\"3557\":{},\"3620\":{},\"3956\":{},\"4623\":{},\"5230\":{},\"5296\":{},\"5372\":{},\"5721\":{},\"6153\":{},\"6353\":{},\"6441\":{},\"6784\":{},\"6837\":{},\"7092\":{}},\"comment\":{}}],[\"checkstave\",{\"_index\":123,\"name\":{\"262\":{},\"787\":{},\"863\":{},\"1013\":{},\"1868\":{},\"2050\":{},\"2124\":{},\"2359\":{},\"2594\":{},\"2728\":{},\"2803\":{},\"3026\":{},\"3173\":{},\"3351\":{},\"3883\":{},\"4133\":{},\"4372\":{},\"4565\":{},\"4685\":{},\"4742\":{},\"4807\":{},\"4865\":{},\"4986\":{},\"5159\":{},\"5659\":{},\"6079\":{},\"6279\":{},\"6571\":{},\"6634\":{},\"6711\":{},\"7218\":{}},\"comment\":{}}],[\"checkstem\",{\"_index\":683,\"name\":{\"1823\":{},\"2321\":{},\"2554\":{},\"4527\":{},\"5113\":{},\"5619\":{}},\"comment\":{}}],[\"checktickcontext\",{\"_index\":180,\"name\":{\"324\":{},\"926\":{},\"1076\":{},\"1926\":{},\"2186\":{},\"2407\":{},\"2646\":{},\"2865\":{},\"3236\":{},\"3411\":{},\"3945\":{},\"4613\":{},\"5219\":{},\"5711\":{},\"6142\":{},\"6342\":{},\"6428\":{},\"6773\":{}},\"comment\":{}}],[\"chord\",{\"_index\":408,\"name\":{\"1254\":{},\"1291\":{}},\"comment\":{}}],[\"chordornote\",{\"_index\":407,\"name\":{\"1253\":{}},\"comment\":{}}],[\"chordsymbol\",{\"_index\":328,\"name\":{\"647\":{},\"1440\":{},\"1480\":{},\"1622\":{},\"6985\":{}},\"comment\":{}}],[\"chordsymbolblock\",{\"_index\":299,\"name\":{\"607\":{}},\"comment\":{}}],[\"chordsymbolglyphmetrics\",{\"_index\":306,\"name\":{\"616\":{}},\"comment\":{}}],[\"chordsymbolhorizontaljustify\",{\"_index\":320,\"name\":{\"631\":{},\"1552\":{}},\"comment\":{}}],[\"chordsymbolmetrics\",{\"_index\":310,\"name\":{\"620\":{}},\"comment\":{}}],[\"chordsymbolverticaljustify\",{\"_index\":321,\"name\":{\"636\":{},\"1553\":{}},\"comment\":{}}],[\"class\",{\"_index\":471,\"name\":{\"1354\":{}},\"comment\":{}}],[\"clear\",{\"_index\":267,\"name\":{\"571\":{},\"3773\":{},\"3793\":{},\"5465\":{}},\"comment\":{}}],[\"clearrect\",{\"_index\":282,\"name\":{\"587\":{},\"3806\":{},\"5468\":{}},\"comment\":{}}],[\"clef\",{\"_index\":366,\"name\":{\"769\":{},\"779\":{},\"1302\":{},\"1330\":{},\"1481\":{},\"2240\":{},\"4448\":{},\"5576\":{},\"6986\":{}},\"comment\":{}}],[\"clef_default\",{\"_index\":589,\"name\":{\"1616\":{}},\"comment\":{}}],[\"clef_small\",{\"_index\":590,\"name\":{\"1617\":{}},\"comment\":{}}],[\"clefannotatiomtype\",{\"_index\":361,\"name\":{\"759\":{}},\"comment\":{}}],[\"clefmetrics\",{\"_index\":364,\"name\":{\"764\":{}},\"comment\":{}}],[\"clefnote\",{\"_index\":374,\"name\":{\"830\":{},\"1432\":{},\"1482\":{},\"6987\":{}},\"comment\":{}}],[\"clefproperties\",{\"_index\":574,\"name\":{\"1592\":{}},\"comment\":{}}],[\"cleftype\",{\"_index\":360,\"name\":{\"756\":{}},\"comment\":{}}],[\"clone\",{\"_index\":250,\"name\":{\"548\":{},\"1733\":{}},\"comment\":{}}],[\"closegroup\",{\"_index\":269,\"name\":{\"573\":{},\"3820\":{},\"5451\":{}},\"comment\":{}}],[\"closepath\",{\"_index\":291,\"name\":{\"596\":{},\"3815\":{},\"5475\":{}},\"comment\":{}}],[\"coda_left\",{\"_index\":1107,\"name\":{\"4662\":{}},\"comment\":{}}],[\"coda_right\",{\"_index\":1108,\"name\":{\"4663\":{}},\"comment\":{}}],[\"code\",{\"_index\":90,\"name\":{\"154\":{},\"757\":{},\"762\":{},\"1983\":{},\"2029\":{},\"3113\":{},\"6551\":{},\"7054\":{}},\"comment\":{}}],[\"code_flag_downstem\",{\"_index\":710,\"name\":{\"1985\":{}},\"comment\":{}}],[\"code_flag_upstem\",{\"_index\":709,\"name\":{\"1984\":{}},\"comment\":{}}],[\"code_head\",{\"_index\":700,\"name\":{\"1972\":{}},\"comment\":{}}],[\"color\",{\"_index\":947,\"name\":{\"3719\":{},\"4305\":{},\"5999\":{}},\"comment\":{}}],[\"comma\",{\"_index\":427,\"name\":{\"1277\":{}},\"comment\":{}}],[\"commithook\",{\"_index\":400,\"name\":{\"1243\":{}},\"comment\":{}}],[\"commithooks\",{\"_index\":442,\"name\":{\"1309\":{},\"1327\":{}},\"comment\":{}}],[\"commitpiece\",{\"_index\":455,\"name\":{\"1323\":{}},\"comment\":{}}],[\"constructor\",{\"_index\":9,\"name\":{\"9\":{},\"94\":{},\"166\":{},\"233\":{},\"380\":{},\"462\":{},\"534\":{},\"551\":{},\"567\":{},\"678\":{},\"777\":{},\"835\":{},\"984\":{},\"1138\":{},\"1186\":{},\"1246\":{},\"1290\":{},\"1304\":{},\"1335\":{},\"1364\":{},\"1416\":{},\"1597\":{},\"1698\":{},\"1718\":{},\"1749\":{},\"1814\":{},\"2027\":{},\"2094\":{},\"2261\":{},\"2457\":{},\"2524\":{},\"2692\":{},\"2711\":{},\"2776\":{},\"2922\":{},\"2989\":{},\"3018\":{},\"3093\":{},\"3149\":{},\"3314\":{},\"3462\":{},\"3537\":{},\"3609\":{},\"3693\":{},\"3716\":{},\"3772\":{},\"3792\":{},\"3845\":{},\"3853\":{},\"4010\":{},\"4123\":{},\"4184\":{},\"4243\":{},\"4297\":{},\"4368\":{},\"4468\":{},\"4675\":{},\"4734\":{},\"4796\":{},\"4856\":{},\"4918\":{},\"4980\":{},\"5053\":{},\"5109\":{},\"5278\":{},\"5356\":{},\"5431\":{},\"5517\":{},\"5589\":{},\"5765\":{},\"5822\":{},\"5927\":{},\"5995\":{},\"6052\":{},\"6249\":{},\"6403\":{},\"6495\":{},\"6541\":{},\"6615\":{},\"6684\":{},\"6824\":{},\"6884\":{},\"6913\":{},\"7053\":{},\"7064\":{},\"7078\":{},\"7141\":{},\"7198\":{}},\"comment\":{}}],[\"contains\",{\"_index\":1363,\"name\":{\"7058\":{}},\"comment\":{}}],[\"context\",{\"_index\":634,\"name\":{\"1679\":{}},\"comment\":{}}],[\"context2d\",{\"_index\":264,\"name\":{\"568\":{}},\"comment\":{}}],[\"contextbuilder\",{\"_index\":972,\"name\":{\"3829\":{}},\"comment\":{}}],[\"convertacclines\",{\"_index\":809,\"name\":{\"2716\":{}},\"comment\":{}}],[\"convertsizetopixelvalue\",{\"_index\":606,\"name\":{\"1649\":{}},\"comment\":{}}],[\"convertsizetopointvalue\",{\"_index\":607,\"name\":{\"1650\":{}},\"comment\":{}}],[\"converttoalteracclist\",{\"_index\":812,\"name\":{\"2721\":{}},\"comment\":{}}],[\"converttocancelacclist\",{\"_index\":807,\"name\":{\"2714\":{}},\"comment\":{}}],[\"converttoglyph\",{\"_index\":805,\"name\":{\"2712\":{}},\"comment\":{}}],[\"copy\",{\"_index\":241,\"name\":{\"533\":{},\"1734\":{}},\"comment\":{}}],[\"cp1\",{\"_index\":1133,\"name\":{\"4924\":{},\"5772\":{},\"5933\":{}},\"comment\":{}}],[\"cp2\",{\"_index\":1130,\"name\":{\"4921\":{},\"5769\":{},\"5930\":{}},\"comment\":{}}],[\"cps\",{\"_index\":385,\"name\":{\"1123\":{}},\"comment\":{}}],[\"create\",{\"_index\":1190,\"name\":{\"5449\":{},\"6207\":{}},\"comment\":{}}],[\"createhammeron\",{\"_index\":1222,\"name\":{\"5763\":{},\"5924\":{}},\"comment\":{}}],[\"createmodifiercontexts\",{\"_index\":651,\"name\":{\"1702\":{}},\"comment\":{}}],[\"createpulloff\",{\"_index\":1223,\"name\":{\"5764\":{},\"5925\":{}},\"comment\":{}}],[\"createscalemap\",{\"_index\":873,\"name\":{\"3104\":{}},\"comment\":{}}],[\"createslidedown\",{\"_index\":1221,\"name\":{\"5762\":{}},\"comment\":{}}],[\"createslideup\",{\"_index\":1220,\"name\":{\"5761\":{}},\"comment\":{}}],[\"createsostenuto\",{\"_index\":945,\"name\":{\"3714\":{}},\"comment\":{}}],[\"createsustain\",{\"_index\":944,\"name\":{\"3713\":{}},\"comment\":{}}],[\"createtickcontexts\",{\"_index\":652,\"name\":{\"1703\":{}},\"comment\":{}}],[\"createunacorda\",{\"_index\":946,\"name\":{\"3715\":{}},\"comment\":{}}],[\"cresc\",{\"_index\":1063,\"name\":{\"4239\":{}},\"comment\":{}}],[\"crescendo\",{\"_index\":380,\"name\":{\"978\":{},\"1483\":{},\"6988\":{}},\"comment\":{}}],[\"crescendoparams\",{\"_index\":376,\"name\":{\"972\":{}},\"comment\":{}}],[\"current_cache_key\",{\"_index\":722,\"name\":{\"2014\":{},\"6528\":{}},\"comment\":{}}],[\"curve\",{\"_index\":392,\"name\":{\"1133\":{},\"1454\":{},\"1484\":{},\"6989\":{}},\"comment\":{}}],[\"curveoptions\",{\"_index\":384,\"name\":{\"1122\":{}},\"comment\":{}}],[\"curveposition\",{\"_index\":389,\"name\":{\"1130\":{},\"1556\":{}},\"comment\":{}}],[\"custom_glyph_code\",{\"_index\":894,\"name\":{\"3294\":{}},\"comment\":{}}],[\"customtypes\",{\"_index\":887,\"name\":{\"3133\":{}},\"comment\":{}}],[\"dash\",{\"_index\":1232,\"name\":{\"6003\":{}},\"comment\":{}}],[\"dashed\",{\"_index\":1229,\"name\":{\"5998\":{}},\"comment\":{}}],[\"data\",{\"_index\":583,\"name\":{\"1605\":{}},\"comment\":{}}],[\"date\",{\"_index\":517,\"name\":{\"1469\":{}},\"comment\":{}}],[\"dc\",{\"_index\":1111,\"name\":{\"4666\":{}},\"comment\":{}}],[\"dc_al_coda\",{\"_index\":1112,\"name\":{\"4667\":{}},\"comment\":{}}],[\"dc_al_fine\",{\"_index\":1113,\"name\":{\"4668\":{}},\"comment\":{}}],[\"debug\",{\"_index\":1,\"name\":{\"1\":{},\"83\":{},\"159\":{},\"228\":{},\"648\":{},\"770\":{},\"979\":{},\"1334\":{},\"1413\":{},\"1691\":{},\"2252\":{},\"2451\":{},\"2988\":{},\"3309\":{},\"3525\":{},\"3692\":{},\"3703\":{},\"4457\":{},\"5046\":{},\"5988\":{},\"6046\":{},\"6205\":{},\"7138\":{}},\"comment\":{}}],[\"debugformatter\",{\"_index\":1203,\"name\":{\"5504\":{}},\"comment\":{}}],[\"debugnotemetrics\",{\"_index\":1200,\"name\":{\"5500\":{}},\"comment\":{}}],[\"decresc\",{\"_index\":1064,\"name\":{\"4240\":{}},\"comment\":{}}],[\"defaultpadding\",{\"_index\":994,\"name\":{\"4007\":{},\"5819\":{}},\"comment\":{}}],[\"defaults\",{\"_index\":461,\"name\":{\"1336\":{}},\"comment\":{}}],[\"defined\",{\"_index\":1353,\"name\":{\"7045\":{}},\"comment\":{}}],[\"denominator\",{\"_index\":662,\"name\":{\"1720\":{}},\"comment\":{}}],[\"description\",{\"_index\":1237,\"name\":{\"6199\":{}},\"comment\":{}}],[\"detach\",{\"_index\":1327,\"name\":{\"6916\":{}},\"comment\":{}}],[\"details\",{\"_index\":1207,\"name\":{\"5511\":{}},\"comment\":{}}],[\"deviation\",{\"_index\":1263,\"name\":{\"6399\":{}},\"comment\":{}}],[\"diatonic_accidentals\",{\"_index\":858,\"name\":{\"3087\":{}},\"comment\":{}}],[\"diatonic_intervals\",{\"_index\":857,\"name\":{\"3086\":{}},\"comment\":{}}],[\"digits\",{\"_index\":591,\"name\":{\"1619\":{}},\"comment\":{}}],[\"disabledefaultregistry\",{\"_index\":959,\"name\":{\"3771\":{}},\"comment\":{}}],[\"displaced\",{\"_index\":876,\"name\":{\"3116\":{},\"3297\":{}},\"comment\":{}}],[\"displaced_x\",{\"_index\":1092,\"name\":{\"4421\":{}},\"comment\":{}}],[\"displacedshiftx\",{\"_index\":891,\"name\":{\"3286\":{}},\"comment\":{}}],[\"divide\",{\"_index\":667,\"name\":{\"1727\":{}},\"comment\":{}}],[\"dot\",{\"_index\":396,\"name\":{\"1178\":{},\"1278\":{},\"1485\":{},\"6990\":{}},\"comment\":{}}],[\"dot_shifty\",{\"_index\":702,\"name\":{\"1974\":{}},\"comment\":{}}],[\"dots\",{\"_index\":411,\"name\":{\"1259\":{},\"1293\":{},\"2244\":{},\"3128\":{},\"3134\":{},\"3140\":{},\"3304\":{},\"4452\":{},\"4790\":{},\"5580\":{},\"6238\":{}},\"comment\":{}}],[\"double\",{\"_index\":1047,\"name\":{\"4111\":{}},\"comment\":{}}],[\"down\",{\"_index\":229,\"name\":{\"457\":{},\"3836\":{},\"5049\":{}},\"comment\":{}}],[\"draw\",{\"_index\":19,\"name\":{\"19\":{},\"98\":{},\"172\":{},\"238\":{},\"245\":{},\"413\":{},\"473\":{},\"703\":{},\"783\":{},\"839\":{},\"846\":{},\"989\":{},\"996\":{},\"1143\":{},\"1189\":{},\"1373\":{},\"1463\":{},\"1754\":{},\"1819\":{},\"1852\":{},\"2034\":{},\"2100\":{},\"2107\":{},\"2264\":{},\"2343\":{},\"2466\":{},\"2550\":{},\"2577\":{},\"2724\":{},\"2779\":{},\"2786\":{},\"2942\":{},\"3029\":{},\"3156\":{},\"3257\":{},\"3327\":{},\"3334\":{},\"3466\":{},\"3547\":{},\"3611\":{},\"3728\":{},\"3859\":{},\"3866\":{},\"4072\":{},\"4126\":{},\"4193\":{},\"4249\":{},\"4316\":{},\"4383\":{},\"4523\":{},\"4549\":{},\"4678\":{},\"4738\":{},\"4803\":{},\"4861\":{},\"4934\":{},\"4982\":{},\"5070\":{},\"5142\":{},\"5239\":{},\"5286\":{},\"5362\":{},\"5530\":{},\"5615\":{},\"5642\":{},\"5781\":{},\"5885\":{},\"5943\":{},\"6011\":{},\"6055\":{},\"6062\":{},\"6255\":{},\"6262\":{},\"6453\":{},\"6556\":{},\"6630\":{},\"6687\":{},\"6694\":{},\"6827\":{},\"6930\":{},\"7082\":{},\"7151\":{},\"7219\":{}},\"comment\":{}}],[\"draw_dots\",{\"_index\":108,\"name\":{\"246\":{},\"847\":{},\"997\":{},\"1853\":{},\"2108\":{},\"2344\":{},\"2578\":{},\"2787\":{},\"3157\":{},\"3335\":{},\"3867\":{},\"4550\":{},\"5143\":{},\"5643\":{},\"6063\":{},\"6263\":{},\"6695\":{}},\"comment\":{}}],[\"draw_end_arrow\",{\"_index\":1077,\"name\":{\"4307\":{}},\"comment\":{}}],[\"draw_start_arrow\",{\"_index\":1076,\"name\":{\"4306\":{}},\"comment\":{}}],[\"draw_stem\",{\"_index\":109,\"name\":{\"247\":{},\"848\":{},\"998\":{},\"1854\":{},\"2109\":{},\"2345\":{},\"2579\":{},\"2788\":{},\"3158\":{},\"3336\":{},\"3868\":{},\"4551\":{},\"5144\":{},\"5644\":{},\"6064\":{},\"6264\":{},\"6696\":{}},\"comment\":{}}],[\"draw_stem_through_stave\",{\"_index\":107,\"name\":{\"244\":{},\"845\":{},\"995\":{},\"1851\":{},\"2106\":{},\"2342\":{},\"2576\":{},\"2785\":{},\"3155\":{},\"3333\":{},\"3865\":{},\"4548\":{},\"5141\":{},\"5641\":{},\"6061\":{},\"6261\":{},\"6693\":{}},\"comment\":{}}],[\"draw_width\",{\"_index\":226,\"name\":{\"453\":{}},\"comment\":{}}],[\"drawbracketed\",{\"_index\":952,\"name\":{\"3726\":{}},\"comment\":{}}],[\"drawcodafixed\",{\"_index\":1121,\"name\":{\"4679\":{}},\"comment\":{}}],[\"drawdashedline\",{\"_index\":980,\"name\":{\"3844\":{}},\"comment\":{}}],[\"drawdot\",{\"_index\":968,\"name\":{\"3782\":{}},\"comment\":{}}],[\"drawflag\",{\"_index\":786,\"name\":{\"2315\":{},\"2546\":{},\"4518\":{},\"5611\":{}},\"comment\":{}}],[\"drawledgerlines\",{\"_index\":784,\"name\":{\"2312\":{},\"4515\":{}},\"comment\":{}}],[\"drawline\",{\"_index\":841,\"name\":{\"3027\":{}},\"comment\":{}}],[\"drawmodifiers\",{\"_index\":745,\"name\":{\"2098\":{},\"2313\":{},\"2547\":{},\"3857\":{},\"4516\":{},\"5612\":{}},\"comment\":{}}],[\"drawnoteheads\",{\"_index\":787,\"name\":{\"2316\":{},\"4519\":{}},\"comment\":{}}],[\"drawpositions\",{\"_index\":798,\"name\":{\"2549\":{},\"5614\":{}},\"comment\":{}}],[\"drawrepeatbar\",{\"_index\":1054,\"name\":{\"4129\":{}},\"comment\":{}}],[\"drawsignofixed\",{\"_index\":1122,\"name\":{\"4680\":{}},\"comment\":{}}],[\"drawstem\",{\"_index\":699,\"name\":{\"1845\":{},\"2317\":{},\"2570\":{},\"4520\":{},\"5135\":{},\"5635\":{}},\"comment\":{}}],[\"drawstemthrough\",{\"_index\":797,\"name\":{\"2548\":{},\"5613\":{}},\"comment\":{}}],[\"drawsymbols\",{\"_index\":842,\"name\":{\"3028\":{}},\"comment\":{}}],[\"drawsymboltext\",{\"_index\":1123,\"name\":{\"4681\":{}},\"comment\":{}}],[\"drawtext\",{\"_index\":953,\"name\":{\"3727\":{}},\"comment\":{}}],[\"drawverticalbar\",{\"_index\":1052,\"name\":{\"4127\":{}},\"comment\":{}}],[\"drawverticalendbar\",{\"_index\":1053,\"name\":{\"4128\":{}},\"comment\":{}}],[\"drawwithstyle\",{\"_index\":45,\"name\":{\"45\":{},\"126\":{},\"200\":{},\"343\":{},\"421\":{},\"500\":{},\"730\":{},\"803\":{},\"945\":{},\"1095\":{},\"1151\":{},\"1216\":{},\"1372\":{},\"1782\":{},\"1944\":{},\"2059\":{},\"2205\":{},\"2424\":{},\"2492\":{},\"2664\":{},\"2744\":{},\"2884\":{},\"2951\":{},\"3037\":{},\"3256\":{},\"3430\":{},\"3492\":{},\"3575\":{},\"3638\":{},\"3736\":{},\"3964\":{},\"4083\":{},\"4151\":{},\"4201\":{},\"4257\":{},\"4324\":{},\"4391\":{},\"4630\":{},\"4703\":{},\"4760\":{},\"4825\":{},\"4883\":{},\"4942\":{},\"5004\":{},\"5078\":{},\"5238\":{},\"5314\":{},\"5389\":{},\"5538\":{},\"5729\":{},\"5789\":{},\"5896\":{},\"5951\":{},\"6018\":{},\"6161\":{},\"6361\":{},\"6452\":{},\"6579\":{},\"6652\":{},\"6792\":{},\"6855\":{},\"6938\":{},\"7110\":{},\"7159\":{},\"7227\":{}},\"comment\":{}}],[\"ds\",{\"_index\":1114,\"name\":{\"4669\":{}},\"comment\":{}}],[\"ds_al_coda\",{\"_index\":1115,\"name\":{\"4670\":{}},\"comment\":{}}],[\"ds_al_fine\",{\"_index\":1116,\"name\":{\"4671\":{}},\"comment\":{}}],[\"duration\",{\"_index\":412,\"name\":{\"1261\":{},\"1292\":{},\"2242\":{},\"3127\":{},\"3131\":{},\"3138\":{},\"3303\":{},\"4450\":{},\"4789\":{},\"5578\":{},\"6236\":{},\"6389\":{}},\"comment\":{}}],[\"duration_override\",{\"_index\":752,\"name\":{\"2247\":{},\"3143\":{},\"3307\":{},\"4455\":{},\"5583\":{},\"6241\":{}},\"comment\":{}}],[\"durations\",{\"_index\":424,\"name\":{\"1273\":{}},\"comment\":{}}],[\"durationtoticks\",{\"_index\":577,\"name\":{\"1596\":{}},\"comment\":{}}],[\"dval\",{\"_index\":418,\"name\":{\"1267\":{}},\"comment\":{}}],[\"easyscore\",{\"_index\":460,\"name\":{\"1333\":{},\"1460\":{},\"1486\":{}},\"comment\":{}}],[\"easyscoredefaults\",{\"_index\":458,\"name\":{\"1329\":{}},\"comment\":{}}],[\"easyscoregrammar\",{\"_index\":401,\"name\":{\"1245\":{}},\"comment\":{}}],[\"easyscorehook\",{\"_index\":95,\"name\":{\"162\":{},\"1746\":{}},\"comment\":{}}],[\"easyscoreoptions\",{\"_index\":456,\"name\":{\"1324\":{}},\"comment\":{}}],[\"element\",{\"_index\":476,\"name\":{\"1361\":{},\"1487\":{},\"5432\":{},\"6991\":{}},\"comment\":{}}],[\"elementattributes\",{\"_index\":469,\"name\":{\"1351\":{}},\"comment\":{}}],[\"elementid\",{\"_index\":481,\"name\":{\"1406\":{}},\"comment\":{}}],[\"elements\",{\"_index\":441,\"name\":{\"1306\":{}},\"comment\":{}}],[\"elementstyle\",{\"_index\":472,\"name\":{\"1355\":{}},\"comment\":{}}],[\"enabledefaultregistry\",{\"_index\":958,\"name\":{\"3770\":{}},\"comment\":{}}],[\"end\",{\"_index\":1048,\"name\":{\"4112\":{},\"4363\":{},\"4973\":{}},\"comment\":{}}],[\"end_x\",{\"_index\":378,\"name\":{\"976\":{}},\"comment\":{}}],[\"engravingfontresolution\",{\"_index\":331,\"name\":{\"657\":{}},\"comment\":{}}],[\"eol\",{\"_index\":433,\"name\":{\"1284\":{}},\"comment\":{}}],[\"equals\",{\"_index\":430,\"name\":{\"1281\":{},\"1728\":{}},\"comment\":{}}],[\"errorpos\",{\"_index\":933,\"name\":{\"3687\":{}},\"comment\":{}}],[\"evaluate\",{\"_index\":654,\"name\":{\"1706\":{}},\"comment\":{}}],[\"expect\",{\"_index\":919,\"name\":{\"3673\":{},\"3701\":{}},\"comment\":{}}],[\"expectone\",{\"_index\":938,\"name\":{\"3698\":{}},\"comment\":{}}],[\"expectoneormore\",{\"_index\":939,\"name\":{\"3699\":{}},\"comment\":{}}],[\"expectzeroormore\",{\"_index\":940,\"name\":{\"3700\":{}},\"comment\":{}}],[\"extend_left\",{\"_index\":111,\"name\":{\"249\":{},\"850\":{},\"1000\":{},\"1856\":{},\"2111\":{},\"2347\":{},\"2581\":{},\"2790\":{},\"3160\":{},\"3338\":{},\"3870\":{},\"4553\":{},\"5146\":{},\"5646\":{},\"6066\":{},\"6266\":{},\"6698\":{}},\"comment\":{}}],[\"extend_right\",{\"_index\":112,\"name\":{\"250\":{},\"851\":{},\"1001\":{},\"1857\":{},\"2112\":{},\"2348\":{},\"2582\":{},\"2791\":{},\"3161\":{},\"3339\":{},\"3871\":{},\"4554\":{},\"5147\":{},\"5647\":{},\"6067\":{},\"6267\":{},\"6699\":{}},\"comment\":{}}],[\"extra_stroke_scale\",{\"_index\":1303,\"name\":{\"6826\":{}},\"comment\":{}}],[\"factory\",{\"_index\":440,\"name\":{\"1305\":{},\"1325\":{},\"1338\":{},\"1412\":{},\"1488\":{},\"5502\":{}},\"comment\":{}}],[\"factoryoptions\",{\"_index\":477,\"name\":{\"1400\":{}},\"comment\":{}}],[\"family\",{\"_index\":578,\"name\":{\"1599\":{},\"5418\":{},\"6189\":{}},\"comment\":{}}],[\"fetchmusicfont\",{\"_index\":554,\"name\":{\"1569\":{}},\"comment\":{}}],[\"fill\",{\"_index\":289,\"name\":{\"594\":{},\"3813\":{},\"5476\":{}},\"comment\":{}}],[\"fill_style\",{\"_index\":989,\"name\":{\"3998\":{}},\"comment\":{}}],[\"fillrect\",{\"_index\":281,\"name\":{\"586\":{},\"3805\":{},\"5467\":{}},\"comment\":{}}],[\"fillstyle\",{\"_index\":296,\"name\":{\"601\":{},\"1358\":{},\"3823\":{},\"5482\":{}},\"comment\":{}}],[\"filltext\",{\"_index\":293,\"name\":{\"598\":{},\"3816\":{},\"5479\":{}},\"comment\":{}}],[\"fine\",{\"_index\":1117,\"name\":{\"4672\":{}},\"comment\":{}}],[\"fingering\",{\"_index\":500,\"name\":{\"1444\":{}},\"comment\":{}}],[\"first_indices\",{\"_index\":1070,\"name\":{\"4286\":{},\"4913\":{}},\"comment\":{}}],[\"first_note\",{\"_index\":1069,\"name\":{\"4285\":{},\"4911\":{}},\"comment\":{}}],[\"first_x_shift\",{\"_index\":1134,\"name\":{\"4925\":{},\"5773\":{},\"5934\":{}},\"comment\":{}}],[\"flag\",{\"_index\":711,\"name\":{\"1986\":{}},\"comment\":{}}],[\"flat_beam_offset\",{\"_index\":197,\"name\":{\"383\":{}},\"comment\":{}}],[\"flat_beams\",{\"_index\":198,\"name\":{\"384\":{}},\"comment\":{}}],[\"flow\",{\"_index\":514,\"name\":{\"1464\":{},\"7056\":{}},\"comment\":{}}],[\"font\",{\"_index\":60,\"name\":{\"60\":{},\"141\":{},\"215\":{},\"255\":{},\"358\":{},\"436\":{},\"515\":{},\"605\":{},\"745\":{},\"818\":{},\"856\":{},\"960\":{},\"1006\":{},\"1110\":{},\"1166\":{},\"1231\":{},\"1388\":{},\"1411\":{},\"1489\":{},\"1644\":{},\"1797\":{},\"1862\":{},\"1959\":{},\"2006\":{},\"2019\":{},\"2074\":{},\"2117\":{},\"2219\":{},\"2353\":{},\"2438\":{},\"2507\":{},\"2587\":{},\"2679\":{},\"2759\":{},\"2796\":{},\"2899\":{},\"2966\":{},\"3052\":{},\"3166\":{},\"3272\":{},\"3344\":{},\"3444\":{},\"3507\":{},\"3590\":{},\"3653\":{},\"3751\":{},\"3827\":{},\"3876\":{},\"3978\":{},\"4097\":{},\"4166\":{},\"4216\":{},\"4272\":{},\"4339\":{},\"4406\":{},\"4559\":{},\"4644\":{},\"4718\":{},\"4775\":{},\"4840\":{},\"4898\":{},\"4957\":{},\"5019\":{},\"5092\":{},\"5152\":{},\"5254\":{},\"5329\":{},\"5404\":{},\"5418\":{},\"5419\":{},\"5420\":{},\"5421\":{},\"5486\":{},\"5552\":{},\"5652\":{},\"5744\":{},\"5804\":{},\"5910\":{},\"5966\":{},\"6033\":{},\"6072\":{},\"6176\":{},\"6232\":{},\"6272\":{},\"6376\":{},\"6468\":{},\"6533\":{},\"6594\":{},\"6667\":{},\"6704\":{},\"6807\":{},\"6870\":{},\"6953\":{},\"7125\":{},\"7174\":{},\"7241\":{}},\"comment\":{}}],[\"font_scale\",{\"_index\":14,\"name\":{\"14\":{},\"170\":{},\"3542\":{},\"5359\":{}},\"comment\":{}}],[\"fontdata\",{\"_index\":584,\"name\":{\"1607\":{}},\"comment\":{}}],[\"fontfamily\",{\"_index\":585,\"name\":{\"1609\":{}},\"comment\":{}}],[\"fontglyph\",{\"_index\":592,\"name\":{\"1628\":{}},\"comment\":{}}],[\"fontinfo\",{\"_index\":64,\"name\":{\"64\":{},\"145\":{},\"219\":{},\"362\":{},\"440\":{},\"519\":{},\"748\":{},\"822\":{},\"964\":{},\"1114\":{},\"1170\":{},\"1235\":{},\"1392\":{},\"1598\":{},\"1801\":{},\"1963\":{},\"2078\":{},\"2223\":{},\"2442\":{},\"2511\":{},\"2683\":{},\"2763\":{},\"2903\":{},\"2970\":{},\"3056\":{},\"3276\":{},\"3448\":{},\"3511\":{},\"3594\":{},\"3657\":{},\"3755\":{},\"3982\":{},\"4101\":{},\"4170\":{},\"4220\":{},\"4276\":{},\"4343\":{},\"4410\":{},\"4648\":{},\"4722\":{},\"4779\":{},\"4844\":{},\"4902\":{},\"4961\":{},\"5023\":{},\"5096\":{},\"5258\":{},\"5333\":{},\"5408\":{},\"5556\":{},\"5748\":{},\"5808\":{},\"5914\":{},\"5970\":{},\"6037\":{},\"6180\":{},\"6380\":{},\"6472\":{},\"6598\":{},\"6671\":{},\"6811\":{},\"6874\":{},\"6957\":{},\"7129\":{},\"7178\":{},\"7245\":{}},\"comment\":{}}],[\"fontmetrics\",{\"_index\":587,\"name\":{\"1612\":{}},\"comment\":{}}],[\"fontmodule\",{\"_index\":582,\"name\":{\"1603\":{}},\"comment\":{}}],[\"fontsize\",{\"_index\":67,\"name\":{\"67\":{},\"148\":{},\"222\":{},\"365\":{},\"443\":{},\"522\":{},\"751\":{},\"825\":{},\"967\":{},\"1117\":{},\"1173\":{},\"1238\":{},\"1395\":{},\"1804\":{},\"1966\":{},\"2081\":{},\"2226\":{},\"2445\":{},\"2514\":{},\"2686\":{},\"2766\":{},\"2906\":{},\"2973\":{},\"3059\":{},\"3279\":{},\"3451\":{},\"3514\":{},\"3597\":{},\"3660\":{},\"3758\":{},\"3985\":{},\"4104\":{},\"4173\":{},\"4223\":{},\"4279\":{},\"4346\":{},\"4413\":{},\"4651\":{},\"4725\":{},\"4782\":{},\"4847\":{},\"4905\":{},\"4964\":{},\"5026\":{},\"5099\":{},\"5261\":{},\"5336\":{},\"5411\":{},\"5559\":{},\"5751\":{},\"5811\":{},\"5917\":{},\"5973\":{},\"6040\":{},\"6183\":{},\"6383\":{},\"6475\":{},\"6601\":{},\"6674\":{},\"6814\":{},\"6877\":{},\"6960\":{},\"7132\":{},\"7181\":{},\"7248\":{}},\"comment\":{}}],[\"fontsizeinpixels\",{\"_index\":69,\"name\":{\"69\":{},\"150\":{},\"224\":{},\"367\":{},\"445\":{},\"524\":{},\"753\":{},\"827\":{},\"969\":{},\"1119\":{},\"1175\":{},\"1240\":{},\"1397\":{},\"1806\":{},\"1968\":{},\"2083\":{},\"2228\":{},\"2447\":{},\"2516\":{},\"2688\":{},\"2768\":{},\"2908\":{},\"2975\":{},\"3061\":{},\"3281\":{},\"3453\":{},\"3516\":{},\"3599\":{},\"3662\":{},\"3760\":{},\"3987\":{},\"4106\":{},\"4175\":{},\"4225\":{},\"4281\":{},\"4348\":{},\"4415\":{},\"4653\":{},\"4727\":{},\"4784\":{},\"4849\":{},\"4907\":{},\"4966\":{},\"5028\":{},\"5101\":{},\"5263\":{},\"5338\":{},\"5413\":{},\"5561\":{},\"5753\":{},\"5813\":{},\"5919\":{},\"5975\":{},\"6042\":{},\"6185\":{},\"6221\":{},\"6385\":{},\"6477\":{},\"6603\":{},\"6676\":{},\"6816\":{},\"6879\":{},\"6962\":{},\"7134\":{},\"7183\":{},\"7250\":{}},\"comment\":{}}],[\"fontsizeinpoints\",{\"_index\":68,\"name\":{\"68\":{},\"149\":{},\"223\":{},\"366\":{},\"444\":{},\"523\":{},\"752\":{},\"826\":{},\"968\":{},\"1118\":{},\"1174\":{},\"1239\":{},\"1396\":{},\"1805\":{},\"1967\":{},\"2082\":{},\"2227\":{},\"2446\":{},\"2515\":{},\"2687\":{},\"2767\":{},\"2907\":{},\"2974\":{},\"3060\":{},\"3280\":{},\"3452\":{},\"3515\":{},\"3598\":{},\"3661\":{},\"3759\":{},\"3986\":{},\"4105\":{},\"4174\":{},\"4224\":{},\"4280\":{},\"4347\":{},\"4414\":{},\"4652\":{},\"4726\":{},\"4783\":{},\"4848\":{},\"4906\":{},\"4965\":{},\"5027\":{},\"5100\":{},\"5262\":{},\"5337\":{},\"5412\":{},\"5560\":{},\"5752\":{},\"5812\":{},\"5918\":{},\"5974\":{},\"6041\":{},\"6184\":{},\"6384\":{},\"6476\":{},\"6602\":{},\"6675\":{},\"6815\":{},\"6878\":{},\"6961\":{},\"7133\":{},\"7182\":{},\"7249\":{}},\"comment\":{}}],[\"fontstyle\",{\"_index\":70,\"name\":{\"70\":{},\"151\":{},\"225\":{},\"368\":{},\"446\":{},\"525\":{},\"754\":{},\"828\":{},\"970\":{},\"1120\":{},\"1176\":{},\"1241\":{},\"1398\":{},\"1558\":{},\"1641\":{},\"1807\":{},\"1969\":{},\"2084\":{},\"2229\":{},\"2448\":{},\"2517\":{},\"2689\":{},\"2769\":{},\"2909\":{},\"2976\":{},\"3062\":{},\"3282\":{},\"3454\":{},\"3517\":{},\"3600\":{},\"3663\":{},\"3761\":{},\"3988\":{},\"4107\":{},\"4176\":{},\"4226\":{},\"4282\":{},\"4349\":{},\"4416\":{},\"4654\":{},\"4728\":{},\"4785\":{},\"4850\":{},\"4908\":{},\"4967\":{},\"5029\":{},\"5102\":{},\"5264\":{},\"5339\":{},\"5414\":{},\"5562\":{},\"5754\":{},\"5814\":{},\"5920\":{},\"5976\":{},\"6043\":{},\"6186\":{},\"6386\":{},\"6478\":{},\"6604\":{},\"6677\":{},\"6817\":{},\"6880\":{},\"6963\":{},\"7135\":{},\"7184\":{},\"7251\":{}},\"comment\":{}}],[\"fontweight\",{\"_index\":71,\"name\":{\"71\":{},\"152\":{},\"226\":{},\"369\":{},\"447\":{},\"526\":{},\"755\":{},\"829\":{},\"971\":{},\"1121\":{},\"1177\":{},\"1242\":{},\"1399\":{},\"1557\":{},\"1638\":{},\"1808\":{},\"1970\":{},\"2085\":{},\"2230\":{},\"2449\":{},\"2518\":{},\"2690\":{},\"2770\":{},\"2910\":{},\"2977\":{},\"3063\":{},\"3283\":{},\"3455\":{},\"3518\":{},\"3601\":{},\"3664\":{},\"3762\":{},\"3989\":{},\"4108\":{},\"4177\":{},\"4227\":{},\"4283\":{},\"4350\":{},\"4417\":{},\"4655\":{},\"4729\":{},\"4786\":{},\"4851\":{},\"4909\":{},\"4968\":{},\"5030\":{},\"5103\":{},\"5265\":{},\"5340\":{},\"5415\":{},\"5563\":{},\"5755\":{},\"5815\":{},\"5921\":{},\"5977\":{},\"6044\":{},\"6187\":{},\"6387\":{},\"6479\":{},\"6605\":{},\"6678\":{},\"6818\":{},\"6881\":{},\"6964\":{},\"7136\":{},\"7185\":{},\"7252\":{}},\"comment\":{}}],[\"format\",{\"_index\":3,\"name\":{\"3\":{},\"91\":{},\"161\":{},\"459\":{},\"674\":{},\"1182\":{},\"1710\":{},\"1745\":{},\"2256\":{},\"2453\":{},\"2722\":{},\"3458\":{},\"3528\":{},\"3605\":{},\"4071\":{},\"4463\":{},\"5275\":{},\"5353\":{},\"5529\":{},\"5884\":{},\"7073\":{}},\"comment\":{}}],[\"formatanddraw\",{\"_index\":644,\"name\":{\"1694\":{}},\"comment\":{}}],[\"formatanddrawtab\",{\"_index\":645,\"name\":{\"1695\":{}},\"comment\":{}}],[\"formatbegmodifiers\",{\"_index\":996,\"name\":{\"4009\":{},\"5821\":{}},\"comment\":{}}],[\"formatbyticksanddraw\",{\"_index\":1065,\"name\":{\"4241\":{}},\"comment\":{}}],[\"formatiterations\",{\"_index\":1205,\"name\":{\"5506\":{}},\"comment\":{}}],[\"formatoptions\",{\"_index\":1208,\"name\":{\"5512\":{}},\"comment\":{}}],[\"formatparams\",{\"_index\":632,\"name\":{\"1676\":{}},\"comment\":{}}],[\"formatter\",{\"_index\":506,\"name\":{\"1451\":{},\"1490\":{},\"1690\":{}},\"comment\":{}}],[\"formattermetrics\",{\"_index\":1258,\"name\":{\"6388\":{}},\"comment\":{}}],[\"formatteroptions\",{\"_index\":628,\"name\":{\"1672\":{}},\"comment\":{}}],[\"formattostave\",{\"_index\":657,\"name\":{\"1711\":{}},\"comment\":{}}],[\"fraction\",{\"_index\":519,\"name\":{\"1491\":{},\"1713\":{},\"6992\":{}},\"comment\":{}}],[\"freedom\",{\"_index\":1259,\"name\":{\"6390\":{},\"6522\":{}},\"comment\":{}}],[\"fret\",{\"_index\":1215,\"name\":{\"5566\":{}},\"comment\":{}}],[\"frethandfinger\",{\"_index\":520,\"name\":{\"1492\":{},\"1742\":{},\"6993\":{}},\"comment\":{}}],[\"fromcssstring\",{\"_index\":609,\"name\":{\"1652\":{}},\"comment\":{}}],[\"full\",{\"_index\":1379,\"name\":{\"7193\":{}},\"comment\":{}}],[\"gcd\",{\"_index\":658,\"name\":{\"1715\":{}},\"comment\":{}}],[\"generatebeams\",{\"_index\":196,\"name\":{\"378\":{}},\"comment\":{}}],[\"generatedon\",{\"_index\":586,\"name\":{\"1611\":{}},\"comment\":{}}],[\"getabsolutex\",{\"_index\":159,\"name\":{\"299\":{},\"900\":{},\"1050\":{},\"1903\":{},\"2160\":{},\"2386\":{},\"2623\":{},\"2840\":{},\"3210\":{},\"3323\":{},\"3919\":{},\"4592\":{},\"5195\":{},\"5688\":{},\"6116\":{},\"6316\":{},\"6438\":{},\"6748\":{}},\"comment\":{}}],[\"getaccidental\",{\"_index\":801,\"name\":{\"2696\":{}},\"comment\":{}}],[\"getactualresolution\",{\"_index\":1387,\"name\":{\"7207\":{}},\"comment\":{}}],[\"getattribute\",{\"_index\":53,\"name\":{\"53\":{},\"134\":{},\"208\":{},\"351\":{},\"429\":{},\"508\":{},\"738\":{},\"811\":{},\"953\":{},\"1103\":{},\"1159\":{},\"1224\":{},\"1381\":{},\"1790\":{},\"1952\":{},\"2067\":{},\"2213\":{},\"2432\":{},\"2500\":{},\"2672\":{},\"2752\":{},\"2892\":{},\"2959\":{},\"3045\":{},\"3265\":{},\"3438\":{},\"3500\":{},\"3583\":{},\"3646\":{},\"3744\":{},\"3972\":{},\"4091\":{},\"4159\":{},\"4209\":{},\"4265\":{},\"4332\":{},\"4399\":{},\"4638\":{},\"4711\":{},\"4768\":{},\"4833\":{},\"4891\":{},\"4950\":{},\"5012\":{},\"5086\":{},\"5247\":{},\"5322\":{},\"5397\":{},\"5546\":{},\"5737\":{},\"5797\":{},\"5904\":{},\"5959\":{},\"6026\":{},\"6169\":{},\"6369\":{},\"6461\":{},\"6587\":{},\"6660\":{},\"6800\":{},\"6863\":{},\"6946\":{},\"7118\":{},\"7167\":{},\"7235\":{}},\"comment\":{}}],[\"getattributes\",{\"_index\":52,\"name\":{\"52\":{},\"133\":{},\"207\":{},\"350\":{},\"428\":{},\"507\":{},\"737\":{},\"810\":{},\"952\":{},\"1102\":{},\"1158\":{},\"1223\":{},\"1380\":{},\"1789\":{},\"1951\":{},\"2066\":{},\"2212\":{},\"2431\":{},\"2499\":{},\"2671\":{},\"2751\":{},\"2891\":{},\"2958\":{},\"3044\":{},\"3264\":{},\"3437\":{},\"3499\":{},\"3582\":{},\"3645\":{},\"3743\":{},\"3971\":{},\"4090\":{},\"4158\":{},\"4208\":{},\"4264\":{},\"4331\":{},\"4398\":{},\"4637\":{},\"4710\":{},\"4767\":{},\"4832\":{},\"4890\":{},\"4949\":{},\"5011\":{},\"5085\":{},\"5246\":{},\"5321\":{},\"5396\":{},\"5545\":{},\"5736\":{},\"5796\":{},\"5903\":{},\"5958\":{},\"6025\":{},\"6168\":{},\"6368\":{},\"6460\":{},\"6586\":{},\"6659\":{},\"6799\":{},\"6862\":{},\"6945\":{},\"7117\":{},\"7166\":{},\"7234\":{}},\"comment\":{}}],[\"getbasecustomnoteheadglyphprops\",{\"_index\":687,\"name\":{\"1827\":{},\"2324\":{},\"2558\":{},\"4530\":{},\"5117\":{},\"5623\":{}},\"comment\":{}}],[\"getbeam\",{\"_index\":146,\"name\":{\"285\":{},\"886\":{},\"1036\":{},\"1889\":{},\"2146\":{},\"2377\":{},\"2613\":{},\"2826\":{},\"3196\":{},\"3373\":{},\"3905\":{},\"4583\":{},\"5181\":{},\"5678\":{},\"6102\":{},\"6302\":{},\"6734\":{}},\"comment\":{}}],[\"getbeamcount\",{\"_index\":212,\"name\":{\"400\":{},\"1829\":{},\"2326\":{},\"2560\":{},\"4532\":{},\"5119\":{},\"5625\":{}},\"comment\":{}}],[\"getbeamlines\",{\"_index\":222,\"name\":{\"410\":{}},\"comment\":{}}],[\"getbeamytodraw\",{\"_index\":219,\"name\":{\"407\":{}},\"comment\":{}}],[\"getbeatsoccupied\",{\"_index\":1333,\"name\":{\"6923\":{}},\"comment\":{}}],[\"getbottomlinebottomy\",{\"_index\":1008,\"name\":{\"4027\":{},\"5841\":{}},\"comment\":{}}],[\"getbottomliney\",{\"_index\":1020,\"name\":{\"4044\":{},\"5858\":{}},\"comment\":{}}],[\"getbottomy\",{\"_index\":1019,\"name\":{\"4043\":{},\"5857\":{}},\"comment\":{}}],[\"getboundingbox\",{\"_index\":56,\"name\":{\"56\":{},\"137\":{},\"211\":{},\"354\":{},\"432\":{},\"511\":{},\"741\":{},\"814\":{},\"956\":{},\"1106\":{},\"1162\":{},\"1227\":{},\"1384\":{},\"1793\":{},\"1955\":{},\"2070\":{},\"2096\":{},\"2275\":{},\"2503\":{},\"2675\":{},\"2755\":{},\"2895\":{},\"2962\":{},\"3048\":{},\"3268\":{},\"3324\":{},\"3503\":{},\"3586\":{},\"3649\":{},\"3747\":{},\"3855\":{},\"4042\":{},\"4162\":{},\"4212\":{},\"4268\":{},\"4335\":{},\"4402\":{},\"4478\":{},\"4714\":{},\"4771\":{},\"4836\":{},\"4894\":{},\"4953\":{},\"5015\":{},\"5061\":{},\"5250\":{},\"5325\":{},\"5400\":{},\"5549\":{},\"5740\":{},\"5800\":{},\"5856\":{},\"5962\":{},\"6029\":{},\"6172\":{},\"6372\":{},\"6464\":{},\"6590\":{},\"6663\":{},\"6803\":{},\"6866\":{},\"6949\":{},\"7121\":{},\"7170\":{},\"7210\":{}},\"comment\":{}}],[\"getcanonicalintervalname\",{\"_index\":868,\"name\":{\"3099\":{}},\"comment\":{}}],[\"getcanonicalnotename\",{\"_index\":867,\"name\":{\"3098\":{}},\"comment\":{}}],[\"getcanvascontext\",{\"_index\":978,\"name\":{\"3842\":{},\"7059\":{}},\"comment\":{}}],[\"getcategory\",{\"_index\":39,\"name\":{\"39\":{},\"120\":{},\"194\":{},\"337\":{},\"415\":{},\"494\":{},\"724\":{},\"797\":{},\"939\":{},\"1089\":{},\"1145\":{},\"1210\":{},\"1366\":{},\"1776\":{},\"1938\":{},\"2053\":{},\"2199\":{},\"2419\":{},\"2486\":{},\"2658\":{},\"2738\":{},\"2878\":{},\"2945\":{},\"3031\":{},\"3250\":{},\"3424\":{},\"3486\":{},\"3569\":{},\"3632\":{},\"3730\":{},\"3958\":{},\"4078\":{},\"4145\":{},\"4195\":{},\"4251\":{},\"4318\":{},\"4385\":{},\"4625\":{},\"4697\":{},\"4754\":{},\"4819\":{},\"4877\":{},\"4936\":{},\"4998\":{},\"5072\":{},\"5232\":{},\"5308\":{},\"5383\":{},\"5532\":{},\"5723\":{},\"5783\":{},\"5891\":{},\"5945\":{},\"6013\":{},\"6155\":{},\"6355\":{},\"6446\":{},\"6573\":{},\"6646\":{},\"6786\":{},\"6849\":{},\"6932\":{},\"7104\":{},\"7153\":{},\"7221\":{}},\"comment\":{}}],[\"getcenteralignedtickables\",{\"_index\":1284,\"name\":{\"6513\":{}},\"comment\":{}}],[\"getcenterglyphx\",{\"_index\":692,\"name\":{\"1834\":{},\"2330\":{},\"2564\":{},\"4536\":{},\"5124\":{},\"5629\":{}},\"comment\":{}}],[\"getcenterxshift\",{\"_index\":171,\"name\":{\"315\":{},\"916\":{},\"1066\":{},\"1917\":{},\"2176\":{},\"2397\":{},\"2636\":{},\"2856\":{},\"3226\":{},\"3401\":{},\"3935\":{},\"4603\":{},\"5209\":{},\"5701\":{},\"6132\":{},\"6332\":{},\"6414\":{},\"6764\":{}},\"comment\":{}}],[\"getclef\",{\"_index\":375,\"name\":{\"837\":{},\"4056\":{},\"5869\":{}},\"comment\":{}}],[\"getcode\",{\"_index\":733,\"name\":{\"2035\":{},\"6557\":{}},\"comment\":{}}],[\"getconfigforlines\",{\"_index\":1043,\"name\":{\"4074\":{},\"5887\":{}},\"comment\":{}}],[\"getcontext\",{\"_index\":57,\"name\":{\"57\":{},\"138\":{},\"212\":{},\"355\":{},\"433\":{},\"512\":{},\"742\":{},\"815\":{},\"957\":{},\"1107\":{},\"1163\":{},\"1228\":{},\"1385\":{},\"1420\":{},\"1794\":{},\"1956\":{},\"2071\":{},\"2216\":{},\"2435\":{},\"2504\":{},\"2676\":{},\"2756\":{},\"2896\":{},\"2963\":{},\"3049\":{},\"3269\":{},\"3441\":{},\"3504\":{},\"3587\":{},\"3650\":{},\"3748\":{},\"3847\":{},\"3975\":{},\"4094\":{},\"4163\":{},\"4213\":{},\"4269\":{},\"4336\":{},\"4403\":{},\"4641\":{},\"4715\":{},\"4772\":{},\"4837\":{},\"4895\":{},\"4954\":{},\"5016\":{},\"5089\":{},\"5251\":{},\"5326\":{},\"5401\":{},\"5550\":{},\"5741\":{},\"5801\":{},\"5907\":{},\"5963\":{},\"6030\":{},\"6173\":{},\"6373\":{},\"6465\":{},\"6591\":{},\"6664\":{},\"6804\":{},\"6867\":{},\"6950\":{},\"7122\":{},\"7171\":{},\"7238\":{}},\"comment\":{}}],[\"getcurrenttick\",{\"_index\":1285,\"name\":{\"6515\":{}},\"comment\":{}}],[\"getdata\",{\"_index\":620,\"name\":{\"1663\":{}},\"comment\":{}}],[\"getdefaultbeamgroups\",{\"_index\":194,\"name\":{\"376\":{}},\"comment\":{}}],[\"getdefaultledgerlinestyle\",{\"_index\":998,\"name\":{\"4013\":{},\"5827\":{}},\"comment\":{}}],[\"getdefaultregistry\",{\"_index\":957,\"name\":{\"3769\":{}},\"comment\":{}}],[\"getdots\",{\"_index\":397,\"name\":{\"1180\":{}},\"comment\":{}}],[\"getduration\",{\"_index\":142,\"name\":{\"281\":{},\"882\":{},\"1032\":{},\"1885\":{},\"2142\":{},\"2374\":{},\"2610\":{},\"2822\":{},\"3192\":{},\"3369\":{},\"3901\":{},\"4580\":{},\"5177\":{},\"5675\":{},\"6098\":{},\"6298\":{},\"6730\":{}},\"comment\":{}}],[\"getelementbyid\",{\"_index\":963,\"name\":{\"3777\":{}},\"comment\":{}}],[\"getelements\",{\"_index\":445,\"name\":{\"1313\":{}},\"comment\":{}}],[\"getelementsbyattribute\",{\"_index\":964,\"name\":{\"3778\":{}},\"comment\":{}}],[\"getelementsbyclass\",{\"_index\":966,\"name\":{\"3780\":{}},\"comment\":{}}],[\"getelementsbytype\",{\"_index\":965,\"name\":{\"3779\":{}},\"comment\":{}}],[\"getendclef\",{\"_index\":1030,\"name\":{\"4058\":{},\"5871\":{}},\"comment\":{}}],[\"getextension\",{\"_index\":1154,\"name\":{\"5058\":{}},\"comment\":{}}],[\"getextents\",{\"_index\":1156,\"name\":{\"5062\":{}},\"comment\":{}}],[\"getfactory\",{\"_index\":444,\"name\":{\"1312\":{}},\"comment\":{}}],[\"getfirstdotpx\",{\"_index\":157,\"name\":{\"297\":{},\"898\":{},\"1048\":{},\"1901\":{},\"2158\":{},\"2384\":{},\"2621\":{},\"2838\":{},\"3208\":{},\"3385\":{},\"3917\":{},\"4590\":{},\"5193\":{},\"5686\":{},\"6114\":{},\"6314\":{},\"6746\":{}},\"comment\":{}}],[\"getflagstyle\",{\"_index\":773,\"name\":{\"2300\":{},\"4503\":{}},\"comment\":{}}],[\"getfont\",{\"_index\":62,\"name\":{\"62\":{},\"143\":{},\"217\":{},\"360\":{},\"438\":{},\"517\":{},\"604\":{},\"746\":{},\"820\":{},\"962\":{},\"1112\":{},\"1168\":{},\"1233\":{},\"1390\":{},\"1799\":{},\"1961\":{},\"2076\":{},\"2221\":{},\"2440\":{},\"2509\":{},\"2681\":{},\"2761\":{},\"2901\":{},\"2968\":{},\"3054\":{},\"3274\":{},\"3446\":{},\"3509\":{},\"3592\":{},\"3655\":{},\"3753\":{},\"3826\":{},\"3980\":{},\"4099\":{},\"4168\":{},\"4218\":{},\"4274\":{},\"4341\":{},\"4408\":{},\"4646\":{},\"4720\":{},\"4777\":{},\"4842\":{},\"4900\":{},\"4959\":{},\"5021\":{},\"5094\":{},\"5256\":{},\"5331\":{},\"5406\":{},\"5485\":{},\"5554\":{},\"5746\":{},\"5806\":{},\"5912\":{},\"5968\":{},\"6035\":{},\"6178\":{},\"6378\":{},\"6470\":{},\"6596\":{},\"6669\":{},\"6809\":{},\"6872\":{},\"6955\":{},\"7127\":{},\"7176\":{},\"7243\":{}},\"comment\":{}}],[\"getfontfamilies\",{\"_index\":1241,\"name\":{\"6206\":{}},\"comment\":{}}],[\"getfontsize\",{\"_index\":66,\"name\":{\"66\":{},\"147\":{},\"221\":{},\"364\":{},\"442\":{},\"521\":{},\"750\":{},\"824\":{},\"966\":{},\"1116\":{},\"1172\":{},\"1237\":{},\"1394\":{},\"1803\":{},\"1965\":{},\"2080\":{},\"2225\":{},\"2444\":{},\"2513\":{},\"2685\":{},\"2765\":{},\"2905\":{},\"2972\":{},\"3058\":{},\"3278\":{},\"3450\":{},\"3513\":{},\"3596\":{},\"3659\":{},\"3757\":{},\"3984\":{},\"4103\":{},\"4172\":{},\"4222\":{},\"4278\":{},\"4345\":{},\"4412\":{},\"4650\":{},\"4724\":{},\"4781\":{},\"4846\":{},\"4904\":{},\"4963\":{},\"5025\":{},\"5098\":{},\"5260\":{},\"5335\":{},\"5410\":{},\"5558\":{},\"5750\":{},\"5810\":{},\"5916\":{},\"5972\":{},\"6039\":{},\"6182\":{},\"6382\":{},\"6474\":{},\"6600\":{},\"6673\":{},\"6813\":{},\"6876\":{},\"6959\":{},\"7131\":{},\"7180\":{},\"7247\":{}},\"comment\":{}}],[\"getformattermetrics\",{\"_index\":170,\"name\":{\"314\":{},\"915\":{},\"1065\":{},\"1916\":{},\"2175\":{},\"2396\":{},\"2635\":{},\"2855\":{},\"3225\":{},\"3400\":{},\"3934\":{},\"4602\":{},\"5208\":{},\"5700\":{},\"6131\":{},\"6331\":{},\"6413\":{},\"6520\":{},\"6763\":{}},\"comment\":{}}],[\"getfrethandfinger\",{\"_index\":678,\"name\":{\"1751\":{}},\"comment\":{}}],[\"getglyph\",{\"_index\":132,\"name\":{\"271\":{},\"872\":{},\"1022\":{},\"1876\":{},\"2133\":{},\"2365\":{},\"2601\":{},\"2812\":{},\"3182\":{},\"3359\":{},\"3892\":{},\"4571\":{},\"5168\":{},\"5666\":{},\"6088\":{},\"6288\":{},\"6626\":{},\"6720\":{}},\"comment\":{}}],[\"getglyphmetrics\",{\"_index\":1247,\"name\":{\"6213\":{}},\"comment\":{}}],[\"getglyphprops\",{\"_index\":133,\"name\":{\"272\":{},\"873\":{},\"1023\":{},\"1877\":{},\"2134\":{},\"2366\":{},\"2602\":{},\"2813\":{},\"3183\":{},\"3360\":{},\"3893\":{},\"4572\":{},\"5169\":{},\"5667\":{},\"6089\":{},\"6289\":{},\"6721\":{}},\"comment\":{}}],[\"getglyphs\",{\"_index\":625,\"name\":{\"1669\":{},\"2723\":{}},\"comment\":{}}],[\"getglyphwidth\",{\"_index\":134,\"name\":{\"273\":{},\"874\":{},\"1024\":{},\"1878\":{},\"2099\":{},\"2367\":{},\"2603\":{},\"2814\":{},\"3184\":{},\"3361\":{},\"3858\":{},\"4573\":{},\"5170\":{},\"5668\":{},\"6090\":{},\"6290\":{},\"6722\":{}},\"comment\":{}}],[\"getgracenotes\",{\"_index\":790,\"name\":{\"2465\":{}},\"comment\":{}}],[\"geth\",{\"_index\":244,\"name\":{\"542\":{}},\"comment\":{}}],[\"getheight\",{\"_index\":1017,\"name\":{\"4040\":{},\"5060\":{},\"5854\":{}},\"comment\":{}}],[\"gethorizontal\",{\"_index\":358,\"name\":{\"700\":{}},\"comment\":{}}],[\"getindex\",{\"_index\":23,\"name\":{\"23\":{},\"104\":{},\"178\":{},\"479\":{},\"708\":{},\"1194\":{},\"1760\":{},\"2470\":{},\"2928\":{},\"3470\":{},\"3553\":{},\"3616\":{},\"5292\":{},\"5368\":{},\"6833\":{},\"7088\":{}},\"comment\":{}}],[\"getinfo\",{\"_index\":1242,\"name\":{\"6208\":{},\"6621\":{}},\"comment\":{}}],[\"getintervalbetween\",{\"_index\":872,\"name\":{\"3103\":{}},\"comment\":{}}],[\"getintervalvalue\",{\"_index\":866,\"name\":{\"3097\":{}},\"comment\":{}}],[\"getintrinsicticks\",{\"_index\":184,\"name\":{\"328\":{},\"930\":{},\"1080\":{},\"1929\":{},\"2190\":{},\"2410\":{},\"2649\":{},\"2869\":{},\"3241\":{},\"3415\":{},\"3949\":{},\"4616\":{},\"5223\":{},\"5714\":{},\"6146\":{},\"6346\":{},\"6433\":{},\"6777\":{}},\"comment\":{}}],[\"getisnumeric\",{\"_index\":1300,\"name\":{\"6628\":{}},\"comment\":{}}],[\"getjustification\",{\"_index\":87,\"name\":{\"96\":{}},\"comment\":{}}],[\"getkerningadjustment\",{\"_index\":344,\"name\":{\"685\":{}},\"comment\":{}}],[\"getkey\",{\"_index\":800,\"name\":{\"2694\":{}},\"comment\":{}}],[\"getkeyline\",{\"_index\":776,\"name\":{\"2303\":{},\"4506\":{}},\"comment\":{}}],[\"getkeyparts\",{\"_index\":864,\"name\":{\"3095\":{}},\"comment\":{}}],[\"getkeyprops\",{\"_index\":165,\"name\":{\"305\":{},\"906\":{},\"1056\":{},\"1907\":{},\"2166\":{},\"2388\":{},\"2627\":{},\"2846\":{},\"3216\":{},\"3392\":{},\"3925\":{},\"4594\":{},\"5199\":{},\"5692\":{},\"6122\":{},\"6322\":{},\"6754\":{}},\"comment\":{}}],[\"getkeys\",{\"_index\":164,\"name\":{\"304\":{},\"905\":{},\"1055\":{},\"1906\":{},\"2165\":{},\"2387\":{},\"2626\":{},\"2845\":{},\"3215\":{},\"3391\":{},\"3924\":{},\"4593\":{},\"5198\":{},\"5691\":{},\"6121\":{},\"6321\":{},\"6753\":{}},\"comment\":{}}],[\"getkeysignatures\",{\"_index\":573,\"name\":{\"1591\":{}},\"comment\":{}}],[\"getlargesttickwidth\",{\"_index\":1383,\"name\":{\"7201\":{}},\"comment\":{}}],[\"getlayoutmetrics\",{\"_index\":373,\"name\":{\"795\":{},\"2736\":{},\"4143\":{},\"4382\":{},\"4695\":{},\"4752\":{},\"4817\":{},\"4875\":{},\"4996\":{},\"6644\":{}},\"comment\":{}}],[\"getledgerlinestyle\",{\"_index\":771,\"name\":{\"2298\":{},\"4501\":{}},\"comment\":{}}],[\"getleftdisplacedheadpx\",{\"_index\":125,\"name\":{\"264\":{},\"865\":{},\"1015\":{},\"1869\":{},\"2126\":{},\"2360\":{},\"2595\":{},\"2805\":{},\"3175\":{},\"3352\":{},\"3885\":{},\"4566\":{},\"5161\":{},\"5660\":{},\"6081\":{},\"6281\":{},\"6713\":{}},\"comment\":{}}],[\"getleftparenthesispx\",{\"_index\":156,\"name\":{\"296\":{},\"897\":{},\"1047\":{},\"1900\":{},\"2157\":{},\"2383\":{},\"2620\":{},\"2837\":{},\"3207\":{},\"3384\":{},\"3916\":{},\"4589\":{},\"5192\":{},\"5685\":{},\"6113\":{},\"6313\":{},\"6745\":{}},\"comment\":{}}],[\"getleftshift\",{\"_index\":824,\"name\":{\"2995\":{}},\"comment\":{}}],[\"getline\",{\"_index\":898,\"name\":{\"3321\":{},\"6252\":{},\"6624\":{}},\"comment\":{}}],[\"getlineforrest\",{\"_index\":131,\"name\":{\"270\":{},\"871\":{},\"1021\":{},\"1875\":{},\"2132\":{},\"2289\":{},\"2538\":{},\"2811\":{},\"3181\":{},\"3358\":{},\"3891\":{},\"4492\":{},\"5167\":{},\"5603\":{},\"6087\":{},\"6287\":{},\"6719\":{}},\"comment\":{}}],[\"getlinefory\",{\"_index\":1022,\"name\":{\"4046\":{},\"5860\":{}},\"comment\":{}}],[\"getlinenumber\",{\"_index\":130,\"name\":{\"269\":{},\"870\":{},\"1020\":{},\"1874\":{},\"2131\":{},\"2276\":{},\"2600\":{},\"2810\":{},\"3180\":{},\"3357\":{},\"3890\":{},\"4479\":{},\"5166\":{},\"5665\":{},\"6086\":{},\"6286\":{},\"6718\":{}},\"comment\":{}}],[\"getmaxtickable\",{\"_index\":1279,\"name\":{\"6508\":{}},\"comment\":{}}],[\"getmaxticks\",{\"_index\":1277,\"name\":{\"6506\":{}},\"comment\":{}}],[\"getmeasure\",{\"_index\":1010,\"name\":{\"4033\":{},\"5847\":{}},\"comment\":{}}],[\"getmembers\",{\"_index\":823,\"name\":{\"2993\":{}},\"comment\":{}}],[\"getmetricforglyph\",{\"_index\":330,\"name\":{\"656\":{}},\"comment\":{}}],[\"getmetrics\",{\"_index\":158,\"name\":{\"298\":{},\"899\":{},\"1049\":{},\"1664\":{},\"1902\":{},\"2045\":{},\"2159\":{},\"2385\":{},\"2622\":{},\"2839\":{},\"2998\":{},\"3209\":{},\"3386\":{},\"3543\":{},\"3918\":{},\"4591\":{},\"5194\":{},\"5687\":{},\"6115\":{},\"6315\":{},\"6444\":{},\"6514\":{},\"6548\":{},\"6747\":{}},\"comment\":{}}],[\"getmintickable\",{\"_index\":1280,\"name\":{\"6509\":{}},\"comment\":{}}],[\"getminticks\",{\"_index\":1278,\"name\":{\"6507\":{}},\"comment\":{}}],[\"getmintotalwidth\",{\"_index\":650,\"name\":{\"1701\":{}},\"comment\":{}}],[\"getmode\",{\"_index\":1385,\"name\":{\"7204\":{}},\"comment\":{}}],[\"getmodifiercontext\",{\"_index\":26,\"name\":{\"26\":{},\"107\":{},\"181\":{},\"334\":{},\"482\":{},\"711\":{},\"936\":{},\"1086\":{},\"1197\":{},\"1763\":{},\"1935\":{},\"2196\":{},\"2416\":{},\"2473\":{},\"2655\":{},\"2875\":{},\"2931\":{},\"3247\":{},\"3421\":{},\"3473\":{},\"3556\":{},\"3619\":{},\"3955\":{},\"4622\":{},\"5229\":{},\"5295\":{},\"5371\":{},\"5720\":{},\"6152\":{},\"6352\":{},\"6440\":{},\"6783\":{},\"6836\":{},\"7091\":{}},\"comment\":{}}],[\"getmodifiers\",{\"_index\":179,\"name\":{\"323\":{},\"925\":{},\"1075\":{},\"1925\":{},\"2185\":{},\"2406\":{},\"2645\":{},\"2864\":{},\"2992\":{},\"3235\":{},\"3410\":{},\"3944\":{},\"4069\":{},\"4612\":{},\"5218\":{},\"5710\":{},\"5882\":{},\"6141\":{},\"6341\":{},\"6426\":{},\"6772\":{}},\"comment\":{}}],[\"getmodifiersbytype\",{\"_index\":151,\"name\":{\"290\":{},\"891\":{},\"1041\":{},\"1894\":{},\"2151\":{},\"2381\":{},\"2618\":{},\"2831\":{},\"3201\":{},\"3378\":{},\"3910\":{},\"4587\":{},\"5186\":{},\"5683\":{},\"6107\":{},\"6307\":{},\"6739\":{}},\"comment\":{}}],[\"getmodifierstartxy\",{\"_index\":152,\"name\":{\"291\":{},\"892\":{},\"1042\":{},\"1895\":{},\"2152\":{},\"2290\":{},\"2534\":{},\"2832\":{},\"3202\":{},\"3379\":{},\"3911\":{},\"4493\":{},\"5187\":{},\"5599\":{},\"6108\":{},\"6308\":{},\"6740\":{}},\"comment\":{}}],[\"getmodifierxshift\",{\"_index\":1011,\"name\":{\"4034\":{},\"5848\":{}},\"comment\":{}}],[\"getmusicfont\",{\"_index\":555,\"name\":{\"1570\":{}},\"comment\":{}}],[\"getmusicfontstack\",{\"_index\":556,\"name\":{\"1571\":{}},\"comment\":{}}],[\"getname\",{\"_index\":619,\"name\":{\"1662\":{}},\"comment\":{}}],[\"getnestedtupletcount\",{\"_index\":1338,\"name\":{\"6928\":{}},\"comment\":{}}],[\"getnextcontext\",{\"_index\":1270,\"name\":{\"6494\":{}},\"comment\":{}}],[\"getnote\",{\"_index\":21,\"name\":{\"21\":{},\"101\":{},\"175\":{},\"476\":{},\"705\":{},\"1192\":{},\"1757\":{},\"2467\":{},\"2925\":{},\"3467\":{},\"3550\":{},\"3614\":{},\"5289\":{},\"5365\":{},\"6830\":{},\"7085\":{}},\"comment\":{}}],[\"getnotecount\",{\"_index\":1331,\"name\":{\"6921\":{}},\"comment\":{}}],[\"getnoteendx\",{\"_index\":1002,\"name\":{\"4018\":{},\"5832\":{}},\"comment\":{}}],[\"getnoteforfret\",{\"_index\":1309,\"name\":{\"6889\":{}},\"comment\":{}}],[\"getnoteheadbeginx\",{\"_index\":780,\"name\":{\"2308\":{},\"4511\":{}},\"comment\":{}}],[\"getnoteheadbounds\",{\"_index\":779,\"name\":{\"2307\":{},\"4510\":{}},\"comment\":{}}],[\"getnoteheadendx\",{\"_index\":781,\"name\":{\"2309\":{},\"4512\":{}},\"comment\":{}}],[\"getnoteparts\",{\"_index\":863,\"name\":{\"3094\":{}},\"comment\":{}}],[\"getnotes\",{\"_index\":211,\"name\":{\"399\":{},\"4933\":{},\"5780\":{},\"5942\":{},\"6920\":{}},\"comment\":{}}],[\"getnotesoccupied\",{\"_index\":1335,\"name\":{\"6925\":{}},\"comment\":{}}],[\"getnotestartx\",{\"_index\":1001,\"name\":{\"4017\":{},\"5831\":{}},\"comment\":{}}],[\"getnotetype\",{\"_index\":145,\"name\":{\"284\":{},\"885\":{},\"1035\":{},\"1888\":{},\"2145\":{},\"2376\":{},\"2612\":{},\"2825\":{},\"3195\":{},\"3372\":{},\"3904\":{},\"4582\":{},\"5180\":{},\"5677\":{},\"6101\":{},\"6301\":{},\"6733\":{}},\"comment\":{}}],[\"getnotevalue\",{\"_index\":865,\"name\":{\"3096\":{}},\"comment\":{}}],[\"getnumlines\",{\"_index\":1005,\"name\":{\"4022\":{},\"5836\":{}},\"comment\":{}}],[\"getoutlineboundingbox\",{\"_index\":729,\"name\":{\"2024\":{},\"6538\":{}},\"comment\":{}}],[\"getpadding\",{\"_index\":370,\"name\":{\"792\":{},\"2717\":{},\"4140\":{},\"4379\":{},\"4692\":{},\"4749\":{},\"4814\":{},\"4872\":{},\"4993\":{},\"6641\":{}},\"comment\":{}}],[\"getplaynote\",{\"_index\":118,\"name\":{\"257\":{},\"858\":{},\"1008\":{},\"1864\":{},\"2119\":{},\"2355\":{},\"2589\":{},\"2798\":{},\"3168\":{},\"3346\":{},\"3878\":{},\"4561\":{},\"5154\":{},\"5654\":{},\"6074\":{},\"6274\":{},\"6706\":{}},\"comment\":{}}],[\"getpoint\",{\"_index\":99,\"name\":{\"231\":{},\"774\":{},\"833\":{},\"982\":{},\"1812\":{},\"2092\":{},\"2259\":{},\"2522\":{},\"2774\":{},\"3147\":{},\"3312\":{},\"3851\":{},\"4466\":{},\"5107\":{},\"5587\":{},\"6050\":{},\"6248\":{},\"6682\":{}},\"comment\":{}}],[\"getposition\",{\"_index\":29,\"name\":{\"29\":{},\"110\":{},\"184\":{},\"485\":{},\"714\":{},\"784\":{},\"1200\":{},\"1766\":{},\"2476\":{},\"2725\":{},\"2934\":{},\"3476\":{},\"3559\":{},\"3622\":{},\"4130\":{},\"4369\":{},\"4682\":{},\"4739\":{},\"4804\":{},\"4862\":{},\"4983\":{},\"5298\":{},\"5360\":{},\"6631\":{},\"6839\":{},\"7094\":{}},\"comment\":{}}],[\"getpositions\",{\"_index\":795,\"name\":{\"2533\":{},\"5598\":{}},\"comment\":{}}],[\"getrelativenotename\",{\"_index\":870,\"name\":{\"3101\":{}},\"comment\":{}}],[\"getrelativenotevalue\",{\"_index\":869,\"name\":{\"3100\":{}},\"comment\":{}}],[\"getreportwidth\",{\"_index\":341,\"name\":{\"682\":{}},\"comment\":{}}],[\"getresolution\",{\"_index\":624,\"name\":{\"1668\":{},\"6222\":{}},\"comment\":{}}],[\"getresolutionmultiplier\",{\"_index\":647,\"name\":{\"1697\":{},\"7206\":{}},\"comment\":{}}],[\"getrightdisplacedheadpx\",{\"_index\":126,\"name\":{\"265\":{},\"866\":{},\"1016\":{},\"1870\":{},\"2127\":{},\"2361\":{},\"2596\":{},\"2806\":{},\"3176\":{},\"3353\":{},\"3886\":{},\"4567\":{},\"5162\":{},\"5661\":{},\"6082\":{},\"6282\":{},\"6714\":{}},\"comment\":{}}],[\"getrightparenthesispx\",{\"_index\":155,\"name\":{\"295\":{},\"896\":{},\"1046\":{},\"1899\":{},\"2156\":{},\"2382\":{},\"2619\":{},\"2836\":{},\"3206\":{},\"3383\":{},\"3915\":{},\"4588\":{},\"5191\":{},\"5684\":{},\"6112\":{},\"6312\":{},\"6744\":{}},\"comment\":{}}],[\"getrightshift\",{\"_index\":825,\"name\":{\"2996\":{}},\"comment\":{}}],[\"getscaletones\",{\"_index\":871,\"name\":{\"3102\":{}},\"comment\":{}}],[\"getslopey\",{\"_index\":216,\"name\":{\"404\":{}},\"comment\":{}}],[\"getsmallesttickcount\",{\"_index\":1384,\"name\":{\"7202\":{}},\"comment\":{}}],[\"getspacingbetweenlines\",{\"_index\":1018,\"name\":{\"4041\":{},\"5855\":{}},\"comment\":{}}],[\"getspacingfromnextmodifier\",{\"_index\":34,\"name\":{\"34\":{},\"115\":{},\"189\":{},\"490\":{},\"719\":{},\"1205\":{},\"1771\":{},\"2481\":{},\"2939\":{},\"3481\":{},\"3564\":{},\"3627\":{},\"5303\":{},\"5378\":{},\"6844\":{},\"7099\":{}},\"comment\":{}}],[\"getstate\",{\"_index\":826,\"name\":{\"2997\":{}},\"comment\":{}}],[\"getstave\",{\"_index\":122,\"name\":{\"261\":{},\"786\":{},\"862\":{},\"1012\":{},\"1422\":{},\"1867\":{},\"2123\":{},\"2358\":{},\"2593\":{},\"2727\":{},\"2802\":{},\"3025\":{},\"3172\":{},\"3350\":{},\"3882\":{},\"4132\":{},\"4371\":{},\"4564\":{},\"4684\":{},\"4741\":{},\"4806\":{},\"4864\":{},\"4985\":{},\"5158\":{},\"5658\":{},\"6078\":{},\"6278\":{},\"6442\":{},\"6633\":{},\"6710\":{},\"7209\":{}},\"comment\":{}}],[\"getstavenotescale\",{\"_index\":757,\"name\":{\"2263\":{},\"4521\":{}},\"comment\":{}}],[\"getstaves\",{\"_index\":1209,\"name\":{\"5523\":{}},\"comment\":{}}],[\"getstem\",{\"_index\":682,\"name\":{\"1822\":{},\"2320\":{},\"2553\":{},\"4526\":{},\"5112\":{},\"5618\":{}},\"comment\":{}}],[\"getstemdirection\",{\"_index\":160,\"name\":{\"300\":{},\"398\":{},\"901\":{},\"1051\":{},\"1831\":{},\"2161\":{},\"2328\":{},\"2562\":{},\"2841\":{},\"3211\":{},\"3387\":{},\"3920\":{},\"4534\":{},\"5121\":{},\"5627\":{},\"6117\":{},\"6317\":{},\"6749\":{}},\"comment\":{}}],[\"getstemextension\",{\"_index\":693,\"name\":{\"1835\":{},\"2262\":{},\"2530\":{},\"4522\":{},\"5125\":{},\"5595\":{}},\"comment\":{}}],[\"getstemextents\",{\"_index\":161,\"name\":{\"301\":{},\"902\":{},\"1052\":{},\"1837\":{},\"2162\":{},\"2332\":{},\"2542\":{},\"2842\":{},\"3212\":{},\"3388\":{},\"3921\":{},\"4538\":{},\"5127\":{},\"5607\":{},\"6118\":{},\"6318\":{},\"6750\":{}},\"comment\":{}}],[\"getstemlength\",{\"_index\":688,\"name\":{\"1828\":{},\"2325\":{},\"2559\":{},\"4531\":{},\"5118\":{},\"5624\":{}},\"comment\":{}}],[\"getstemminimumlength\",{\"_index\":689,\"name\":{\"1830\":{},\"2327\":{},\"2561\":{},\"4533\":{},\"5120\":{},\"5626\":{}},\"comment\":{}}],[\"getstemstyle\",{\"_index\":769,\"name\":{\"2296\":{},\"4499\":{}},\"comment\":{}}],[\"getstemx\",{\"_index\":691,\"name\":{\"1833\":{},\"2281\":{},\"2540\":{},\"4484\":{},\"5123\":{},\"5605\":{}},\"comment\":{}}],[\"getstemy\",{\"_index\":796,\"name\":{\"2541\":{},\"5606\":{}},\"comment\":{}}],[\"getstyle\",{\"_index\":42,\"name\":{\"42\":{},\"123\":{},\"197\":{},\"340\":{},\"418\":{},\"497\":{},\"727\":{},\"800\":{},\"942\":{},\"1092\":{},\"1148\":{},\"1213\":{},\"1369\":{},\"1779\":{},\"1941\":{},\"2056\":{},\"2202\":{},\"2421\":{},\"2489\":{},\"2661\":{},\"2741\":{},\"2881\":{},\"2948\":{},\"3034\":{},\"3253\":{},\"3427\":{},\"3489\":{},\"3572\":{},\"3635\":{},\"3733\":{},\"3961\":{},\"4031\":{},\"4148\":{},\"4198\":{},\"4254\":{},\"4321\":{},\"4388\":{},\"4627\":{},\"4700\":{},\"4757\":{},\"4822\":{},\"4880\":{},\"4939\":{},\"5001\":{},\"5075\":{},\"5235\":{},\"5311\":{},\"5386\":{},\"5535\":{},\"5726\":{},\"5786\":{},\"5845\":{},\"5948\":{},\"6016\":{},\"6158\":{},\"6358\":{},\"6449\":{},\"6576\":{},\"6649\":{},\"6789\":{},\"6852\":{},\"6935\":{},\"7107\":{},\"7156\":{},\"7224\":{}},\"comment\":{}}],[\"getsvgcontext\",{\"_index\":979,\"name\":{\"3843\":{}},\"comment\":{}}],[\"getsvgelement\",{\"_index\":54,\"name\":{\"54\":{},\"135\":{},\"209\":{},\"352\":{},\"430\":{},\"509\":{},\"739\":{},\"812\":{},\"954\":{},\"1104\":{},\"1160\":{},\"1225\":{},\"1382\":{},\"1791\":{},\"1953\":{},\"2068\":{},\"2214\":{},\"2433\":{},\"2501\":{},\"2673\":{},\"2753\":{},\"2893\":{},\"2960\":{},\"3046\":{},\"3266\":{},\"3439\":{},\"3501\":{},\"3584\":{},\"3647\":{},\"3745\":{},\"3973\":{},\"4092\":{},\"4160\":{},\"4210\":{},\"4266\":{},\"4333\":{},\"4400\":{},\"4639\":{},\"4712\":{},\"4769\":{},\"4834\":{},\"4892\":{},\"4951\":{},\"5013\":{},\"5087\":{},\"5248\":{},\"5323\":{},\"5398\":{},\"5547\":{},\"5738\":{},\"5798\":{},\"5905\":{},\"5960\":{},\"6027\":{},\"6170\":{},\"6370\":{},\"6462\":{},\"6588\":{},\"6661\":{},\"6801\":{},\"6864\":{},\"6947\":{},\"7119\":{},\"7168\":{},\"7236\":{}},\"comment\":{}}],[\"getsymbolblock\",{\"_index\":345,\"name\":{\"686\":{}},\"comment\":{}}],[\"gettext\",{\"_index\":235,\"name\":{\"471\":{},\"6253\":{}},\"comment\":{}}],[\"gettextheight\",{\"_index\":236,\"name\":{\"472\":{}},\"comment\":{}}],[\"gettickableforvoice\",{\"_index\":1282,\"name\":{\"6511\":{}},\"comment\":{}}],[\"gettickables\",{\"_index\":1281,\"name\":{\"6510\":{},\"7203\":{}},\"comment\":{}}],[\"gettickablesbyvoice\",{\"_index\":1283,\"name\":{\"6512\":{}},\"comment\":{}}],[\"gettickcontext\",{\"_index\":140,\"name\":{\"279\":{},\"880\":{},\"1030\":{},\"1712\":{},\"1883\":{},\"2140\":{},\"2372\":{},\"2608\":{},\"2820\":{},\"3190\":{},\"3367\":{},\"3899\":{},\"4578\":{},\"5175\":{},\"5673\":{},\"6096\":{},\"6296\":{},\"6728\":{}},\"comment\":{}}],[\"gettickcontexts\",{\"_index\":653,\"name\":{\"1704\":{}},\"comment\":{}}],[\"gettickid\",{\"_index\":1272,\"name\":{\"6497\":{}},\"comment\":{}}],[\"gettickmultiplier\",{\"_index\":186,\"name\":{\"330\":{},\"932\":{},\"1082\":{},\"1931\":{},\"2192\":{},\"2412\":{},\"2651\":{},\"2871\":{},\"3243\":{},\"3417\":{},\"3951\":{},\"4618\":{},\"5225\":{},\"5716\":{},\"6148\":{},\"6348\":{},\"6435\":{},\"6779\":{}},\"comment\":{}}],[\"getticks\",{\"_index\":167,\"name\":{\"307\":{},\"908\":{},\"1058\":{},\"1909\":{},\"2168\":{},\"2389\":{},\"2628\":{},\"2848\":{},\"3218\":{},\"3394\":{},\"3927\":{},\"4595\":{},\"5201\":{},\"5693\":{},\"6124\":{},\"6324\":{},\"6405\":{},\"6756\":{}},\"comment\":{}}],[\"getticksused\",{\"_index\":1382,\"name\":{\"7200\":{}},\"comment\":{}}],[\"gettieendx\",{\"_index\":1004,\"name\":{\"4020\":{},\"5834\":{}},\"comment\":{}}],[\"gettieleftx\",{\"_index\":163,\"name\":{\"303\":{},\"904\":{},\"1054\":{},\"1905\":{},\"2164\":{},\"2288\":{},\"2625\":{},\"2844\":{},\"3214\":{},\"3390\":{},\"3923\":{},\"4491\":{},\"5197\":{},\"5690\":{},\"6120\":{},\"6320\":{},\"6752\":{}},\"comment\":{}}],[\"gettierightx\",{\"_index\":162,\"name\":{\"302\":{},\"903\":{},\"1053\":{},\"1904\":{},\"2163\":{},\"2287\":{},\"2624\":{},\"2843\":{},\"3213\":{},\"3389\":{},\"3922\":{},\"4490\":{},\"5196\":{},\"5689\":{},\"6119\":{},\"6319\":{},\"6751\":{}},\"comment\":{}}],[\"gettiestartx\",{\"_index\":1003,\"name\":{\"4019\":{},\"5833\":{}},\"comment\":{}}],[\"gettimespec\",{\"_index\":1299,\"name\":{\"6623\":{}},\"comment\":{}}],[\"gettoplinetopy\",{\"_index\":1007,\"name\":{\"4026\":{},\"5840\":{}},\"comment\":{}}],[\"gettotalticks\",{\"_index\":1381,\"name\":{\"7199\":{}},\"comment\":{}}],[\"gettuplet\",{\"_index\":175,\"name\":{\"319\":{},\"920\":{},\"1070\":{},\"1921\":{},\"2180\":{},\"2401\":{},\"2640\":{},\"2860\":{},\"3230\":{},\"3405\":{},\"3939\":{},\"4607\":{},\"5213\":{},\"5705\":{},\"6136\":{},\"6336\":{},\"6420\":{},\"6768\":{}},\"comment\":{}}],[\"gettupletstack\",{\"_index\":176,\"name\":{\"320\":{},\"921\":{},\"1071\":{},\"1922\":{},\"2181\":{},\"2402\":{},\"2641\":{},\"2861\":{},\"3231\":{},\"3406\":{},\"3940\":{},\"4608\":{},\"5214\":{},\"5706\":{},\"6137\":{},\"6337\":{},\"6421\":{},\"6769\":{}},\"comment\":{}}],[\"gettype\",{\"_index\":100,\"name\":{\"234\":{},\"4124\":{},\"4189\":{}},\"comment\":{}}],[\"getvalueforfret\",{\"_index\":1308,\"name\":{\"6888\":{}},\"comment\":{}}],[\"getvalueforstring\",{\"_index\":1307,\"name\":{\"6887\":{}},\"comment\":{}}],[\"getvertical\",{\"_index\":356,\"name\":{\"698\":{}},\"comment\":{}}],[\"getverticalbarwidth\",{\"_index\":1042,\"name\":{\"4073\":{},\"5886\":{}},\"comment\":{}}],[\"getvoice\",{\"_index\":138,\"name\":{\"277\":{},\"878\":{},\"1028\":{},\"1881\":{},\"2138\":{},\"2370\":{},\"2606\":{},\"2818\":{},\"3188\":{},\"3365\":{},\"3897\":{},\"4576\":{},\"5173\":{},\"5671\":{},\"6094\":{},\"6294\":{},\"6418\":{},\"6726\":{}},\"comment\":{}}],[\"getvoices\",{\"_index\":486,\"name\":{\"1423\":{},\"5524\":{}},\"comment\":{}}],[\"getvoiceshiftwidth\",{\"_index\":777,\"name\":{\"2304\":{},\"4507\":{}},\"comment\":{}}],[\"getw\",{\"_index\":243,\"name\":{\"541\":{}},\"comment\":{}}],[\"getwidth\",{\"_index\":16,\"name\":{\"16\":{},\"99\":{},\"173\":{},\"310\":{},\"474\":{},\"701\":{},\"781\":{},\"911\":{},\"1061\":{},\"1190\":{},\"1755\":{},\"1912\":{},\"1993\":{},\"2025\":{},\"2171\":{},\"2392\":{},\"2464\":{},\"2631\":{},\"2718\":{},\"2851\":{},\"2923\":{},\"2994\":{},\"3221\":{},\"3316\":{},\"3465\":{},\"3548\":{},\"3612\":{},\"3930\":{},\"4030\":{},\"4135\":{},\"4374\":{},\"4598\":{},\"4687\":{},\"4744\":{},\"4809\":{},\"4867\":{},\"4988\":{},\"5204\":{},\"5287\":{},\"5363\":{},\"5696\":{},\"5844\":{},\"6127\":{},\"6327\":{},\"6409\":{},\"6504\":{},\"6539\":{},\"6636\":{},\"6759\":{},\"6828\":{},\"7083\":{}},\"comment\":{}}],[\"getwidthforcharacterinem\",{\"_index\":1249,\"name\":{\"6215\":{}},\"comment\":{}}],[\"getwidthforglyph\",{\"_index\":333,\"name\":{\"659\":{}},\"comment\":{}}],[\"getwidthfortextinem\",{\"_index\":1252,\"name\":{\"6218\":{}},\"comment\":{}}],[\"getwidthfortextinpx\",{\"_index\":1253,\"name\":{\"6219\":{}},\"comment\":{}}],[\"getx\",{\"_index\":169,\"name\":{\"313\":{},\"539\":{},\"789\":{},\"914\":{},\"1064\":{},\"1915\":{},\"2174\":{},\"2395\":{},\"2634\":{},\"2731\":{},\"2854\":{},\"3224\":{},\"3399\":{},\"3933\":{},\"4021\":{},\"4137\":{},\"4376\":{},\"4601\":{},\"4689\":{},\"4746\":{},\"4811\":{},\"4869\":{},\"4990\":{},\"5207\":{},\"5519\":{},\"5699\":{},\"5835\":{},\"6130\":{},\"6330\":{},\"6412\":{},\"6498\":{},\"6638\":{},\"6762\":{}},\"comment\":{}}],[\"getx1\",{\"_index\":253,\"name\":{\"552\":{}},\"comment\":{}}],[\"getxbase\",{\"_index\":1273,\"name\":{\"6500\":{}},\"comment\":{}}],[\"getxoffset\",{\"_index\":1275,\"name\":{\"6502\":{}},\"comment\":{}}],[\"getxs\",{\"_index\":840,\"name\":{\"3020\":{}},\"comment\":{}}],[\"getxshift\",{\"_index\":36,\"name\":{\"36\":{},\"117\":{},\"191\":{},\"312\":{},\"491\":{},\"721\":{},\"913\":{},\"1063\":{},\"1207\":{},\"1773\":{},\"1914\":{},\"2039\":{},\"2173\":{},\"2394\":{},\"2483\":{},\"2633\":{},\"2853\":{},\"2941\":{},\"3223\":{},\"3398\":{},\"3483\":{},\"3566\":{},\"3629\":{},\"3932\":{},\"4192\":{},\"4600\":{},\"5206\":{},\"5305\":{},\"5380\":{},\"5698\":{},\"6129\":{},\"6329\":{},\"6411\":{},\"6561\":{},\"6761\":{},\"6846\":{},\"7101\":{}},\"comment\":{}}],[\"getxshiftforglyph\",{\"_index\":335,\"name\":{\"661\":{}},\"comment\":{}}],[\"gety\",{\"_index\":242,\"name\":{\"540\":{},\"3319\":{},\"4025\":{},\"5521\":{},\"5839\":{}},\"comment\":{}}],[\"gety1\",{\"_index\":254,\"name\":{\"553\":{}},\"comment\":{}}],[\"getyforbottomtext\",{\"_index\":697,\"name\":{\"1842\":{},\"2283\":{},\"2567\":{},\"4048\":{},\"4486\":{},\"5132\":{},\"5632\":{},\"5862\":{}},\"comment\":{}}],[\"getyforcharacterinpx\",{\"_index\":1250,\"name\":{\"6216\":{}},\"comment\":{}}],[\"getyforglyphs\",{\"_index\":1024,\"name\":{\"4050\":{},\"5823\":{}},\"comment\":{}}],[\"getyforline\",{\"_index\":1021,\"name\":{\"4045\":{},\"5859\":{}},\"comment\":{}}],[\"getyfornote\",{\"_index\":1023,\"name\":{\"4049\":{},\"5863\":{}},\"comment\":{}}],[\"getyforstringinpx\",{\"_index\":1251,\"name\":{\"6217\":{}},\"comment\":{}}],[\"getyfortoptext\",{\"_index\":137,\"name\":{\"276\":{},\"877\":{},\"1027\":{},\"1841\":{},\"2137\":{},\"2282\":{},\"2566\":{},\"2817\":{},\"3187\":{},\"3364\":{},\"3896\":{},\"4047\":{},\"4485\":{},\"5131\":{},\"5631\":{},\"5861\":{},\"6093\":{},\"6293\":{},\"6725\":{}},\"comment\":{}}],[\"getyoffsetfortext\",{\"_index\":359,\"name\":{\"702\":{}},\"comment\":{}}],[\"getyposition\",{\"_index\":1339,\"name\":{\"6929\":{}},\"comment\":{}}],[\"getys\",{\"_index\":136,\"name\":{\"275\":{},\"876\":{},\"1026\":{},\"1880\":{},\"2136\":{},\"2369\":{},\"2605\":{},\"2816\":{},\"3186\":{},\"3363\":{},\"3895\":{},\"4575\":{},\"5172\":{},\"5670\":{},\"6092\":{},\"6292\":{},\"6724\":{}},\"comment\":{}}],[\"getyshift\",{\"_index\":735,\"name\":{\"2041\":{},\"6563\":{}},\"comment\":{}}],[\"getyshiftforglyph\",{\"_index\":334,\"name\":{\"660\":{}},\"comment\":{}}],[\"ghostnote\",{\"_index\":491,\"name\":{\"1429\":{},\"1493\":{},\"1809\":{},\"6994\":{}},\"comment\":{}}],[\"global\",{\"_index\":311,\"name\":{\"621\":{}},\"comment\":{}}],[\"globalobject\",{\"_index\":1352,\"name\":{\"7044\":{}},\"comment\":{}}],[\"globalsoftmax\",{\"_index\":630,\"name\":{\"1674\":{},\"5491\":{}},\"comment\":{}}],[\"glyph\",{\"_index\":305,\"name\":{\"615\":{},\"640\":{},\"1494\":{},\"2012\":{},\"2020\":{},\"6229\":{},\"6534\":{},\"6607\":{},\"6995\":{}},\"comment\":{}}],[\"glyph_code\",{\"_index\":897,\"name\":{\"3315\":{}},\"comment\":{}}],[\"glyph_font_scale\",{\"_index\":113,\"name\":{\"251\":{},\"852\":{},\"1002\":{},\"1858\":{},\"2113\":{},\"2238\":{},\"2349\":{},\"2583\":{},\"2792\":{},\"3162\":{},\"3289\":{},\"3340\":{},\"3872\":{},\"4446\":{},\"4555\":{},\"4799\":{},\"5148\":{},\"5574\":{},\"5648\":{},\"6068\":{},\"6268\":{},\"6700\":{}},\"comment\":{}}],[\"glyph_font_size\",{\"_index\":115,\"name\":{\"253\":{},\"854\":{},\"1004\":{},\"1860\":{},\"2115\":{},\"2351\":{},\"2585\":{},\"2794\":{},\"3164\":{},\"3342\":{},\"3874\":{},\"4557\":{},\"5150\":{},\"5650\":{},\"6070\":{},\"6270\":{},\"6702\":{}},\"comment\":{}}],[\"glyphmetrics\",{\"_index\":717,\"name\":{\"1996\":{}},\"comment\":{}}],[\"glyphnote\",{\"_index\":489,\"name\":{\"1427\":{},\"1495\":{},\"2089\":{},\"6996\":{}},\"comment\":{}}],[\"glyphnoteoptions\",{\"_index\":742,\"name\":{\"2086\":{}},\"comment\":{}}],[\"glyphoptions\",{\"_index\":716,\"name\":{\"1994\":{}},\"comment\":{}}],[\"glyphprops\",{\"_index\":104,\"name\":{\"239\":{},\"840\":{},\"990\":{},\"1846\":{},\"1971\":{},\"2101\":{},\"2337\":{},\"2571\":{},\"2780\":{},\"3150\":{},\"3328\":{},\"3860\":{},\"4543\":{},\"5136\":{},\"5636\":{},\"6056\":{},\"6256\":{},\"6688\":{}},\"comment\":{}}],[\"glyphpx\",{\"_index\":883,\"name\":{\"3124\":{},\"6489\":{}},\"comment\":{}}],[\"glyphs\",{\"_index\":319,\"name\":{\"630\":{},\"665\":{},\"1608\":{},\"1627\":{},\"3706\":{},\"6048\":{},\"6191\":{},\"6246\":{},\"6612\":{}},\"comment\":{}}],[\"glyphwidth\",{\"_index\":878,\"name\":{\"3119\":{},\"6484\":{}},\"comment\":{}}],[\"gracenote\",{\"_index\":496,\"name\":{\"1436\":{},\"1496\":{},\"2248\":{},\"6997\":{}},\"comment\":{}}],[\"gracenotegroup\",{\"_index\":497,\"name\":{\"1437\":{},\"1497\":{},\"2450\":{},\"6998\":{}},\"comment\":{}}],[\"gracenotestruct\",{\"_index\":746,\"name\":{\"2231\":{}},\"comment\":{}}],[\"gracetabnote\",{\"_index\":521,\"name\":{\"1498\":{},\"2519\":{},\"6999\":{}},\"comment\":{}}],[\"grammar\",{\"_index\":462,\"name\":{\"1340\":{},\"3689\":{}},\"comment\":{}}],[\"greaterthan\",{\"_index\":668,\"name\":{\"1729\":{}},\"comment\":{}}],[\"greaterthanequals\",{\"_index\":669,\"name\":{\"1730\":{}},\"comment\":{}}],[\"greateststring\",{\"_index\":791,\"name\":{\"2525\":{},\"5590\":{}},\"comment\":{}}],[\"groupattributes\",{\"_index\":970,\"name\":{\"3788\":{}},\"comment\":{}}],[\"groupedresults\",{\"_index\":934,\"name\":{\"3688\":{}},\"comment\":{}}],[\"groups\",{\"_index\":1188,\"name\":{\"5447\":{}},\"comment\":{}}],[\"h\",{\"_index\":239,\"name\":{\"531\":{},\"538\":{}},\"comment\":{}}],[\"ha\",{\"_index\":597,\"name\":{\"1633\":{},\"2004\":{}},\"comment\":{}}],[\"harsh\",{\"_index\":1371,\"name\":{\"7069\":{},\"7147\":{}},\"comment\":{}}],[\"hasbeam\",{\"_index\":148,\"name\":{\"287\":{},\"888\":{},\"1038\":{},\"1891\":{},\"2148\":{},\"2379\":{},\"2615\":{},\"2828\":{},\"3198\":{},\"3375\":{},\"3907\":{},\"4585\":{},\"5183\":{},\"5680\":{},\"6104\":{},\"6304\":{},\"6736\":{}},\"comment\":{}}],[\"hasclass\",{\"_index\":46,\"name\":{\"46\":{},\"127\":{},\"201\":{},\"344\":{},\"422\":{},\"501\":{},\"731\":{},\"804\":{},\"946\":{},\"1096\":{},\"1152\":{},\"1217\":{},\"1374\":{},\"1783\":{},\"1945\":{},\"2060\":{},\"2206\":{},\"2425\":{},\"2493\":{},\"2665\":{},\"2745\":{},\"2885\":{},\"2952\":{},\"3038\":{},\"3258\":{},\"3431\":{},\"3493\":{},\"3576\":{},\"3639\":{},\"3737\":{},\"3965\":{},\"4084\":{},\"4152\":{},\"4202\":{},\"4258\":{},\"4325\":{},\"4392\":{},\"4631\":{},\"4704\":{},\"4761\":{},\"4826\":{},\"4884\":{},\"4943\":{},\"5005\":{},\"5079\":{},\"5240\":{},\"5315\":{},\"5390\":{},\"5539\":{},\"5730\":{},\"5790\":{},\"5897\":{},\"5952\":{},\"6019\":{},\"6162\":{},\"6362\":{},\"6454\":{},\"6580\":{},\"6653\":{},\"6793\":{},\"6856\":{},\"6939\":{},\"7111\":{},\"7160\":{},\"7228\":{}},\"comment\":{}}],[\"hasdata\",{\"_index\":623,\"name\":{\"1667\":{}},\"comment\":{}}],[\"hasflag\",{\"_index\":698,\"name\":{\"1843\":{},\"2280\":{},\"2568\":{},\"4483\":{},\"5133\":{},\"5633\":{}},\"comment\":{}}],[\"haskeysignature\",{\"_index\":572,\"name\":{\"1590\":{}},\"comment\":{}}],[\"hasstem\",{\"_index\":144,\"name\":{\"283\":{},\"884\":{},\"1034\":{},\"1887\":{},\"2144\":{},\"2279\":{},\"2529\":{},\"2824\":{},\"3194\":{},\"3371\":{},\"3903\":{},\"4482\":{},\"5179\":{},\"5594\":{},\"6100\":{},\"6300\":{},\"6732\":{}},\"comment\":{}}],[\"height\",{\"_index\":255,\"name\":{\"555\":{},\"563\":{},\"974\":{},\"1409\":{},\"1998\":{},\"3787\":{},\"4233\":{},\"5051\":{},\"5435\":{},\"6203\":{}},\"comment\":{}}],[\"hide\",{\"_index\":1148,\"name\":{\"5038\":{}},\"comment\":{}}],[\"highest_displaced_line\",{\"_index\":1096,\"name\":{\"4425\":{}},\"comment\":{}}],[\"highest_line\",{\"_index\":1094,\"name\":{\"4423\":{}},\"comment\":{}}],[\"highest_non_displaced_line\",{\"_index\":1098,\"name\":{\"4427\":{}},\"comment\":{}}],[\"horizontaljustify\",{\"_index\":81,\"name\":{\"86\":{},\"650\":{}},\"comment\":{}}],[\"horizontaljustifystring\",{\"_index\":82,\"name\":{\"87\":{},\"651\":{}},\"comment\":{}}],[\"id\",{\"_index\":470,\"name\":{\"1352\":{},\"1468\":{},\"3764\":{}},\"comment\":{}}],[\"ignore_ticks\",{\"_index\":1255,\"name\":{\"6230\":{}},\"comment\":{}}],[\"ignoreticks\",{\"_index\":743,\"name\":{\"2087\":{}},\"comment\":{}}],[\"incrementpos\",{\"_index\":928,\"name\":{\"3682\":{}},\"comment\":{}}],[\"index\",{\"_index\":896,\"name\":{\"3301\":{}},\"comment\":{}}],[\"initrenderer\",{\"_index\":485,\"name\":{\"1419\":{}},\"comment\":{}}],[\"int_val\",{\"_index\":851,\"name\":{\"3079\":{}},\"comment\":{}}],[\"int_value\",{\"_index\":874,\"name\":{\"3111\":{}},\"comment\":{}}],[\"intervals\",{\"_index\":859,\"name\":{\"3088\":{}},\"comment\":{}}],[\"invert\",{\"_index\":388,\"name\":{\"1129\":{}},\"comment\":{}}],[\"is_displaced\",{\"_index\":1105,\"name\":{\"4438\":{}},\"comment\":{}}],[\"isaccidental\",{\"_index\":1341,\"name\":{\"6966\":{}},\"comment\":{}}],[\"isannotation\",{\"_index\":1342,\"name\":{\"6967\":{}},\"comment\":{}}],[\"isbarline\",{\"_index\":1343,\"name\":{\"6968\":{}},\"comment\":{}}],[\"isbold\",{\"_index\":612,\"name\":{\"1655\":{}},\"comment\":{}}],[\"iscategory\",{\"_index\":1340,\"name\":{\"6965\":{}},\"comment\":{}}],[\"iscenteraligned\",{\"_index\":173,\"name\":{\"317\":{},\"918\":{},\"1068\":{},\"1919\":{},\"2178\":{},\"2399\":{},\"2638\":{},\"2858\":{},\"3228\":{},\"3403\":{},\"3937\":{},\"4605\":{},\"5211\":{},\"5703\":{},\"6134\":{},\"6334\":{},\"6416\":{},\"6766\":{}},\"comment\":{}}],[\"ischord\",{\"_index\":765,\"name\":{\"2278\":{},\"4481\":{}},\"comment\":{}}],[\"iscomplete\",{\"_index\":1389,\"name\":{\"7212\":{}},\"comment\":{}}],[\"isdisplaced\",{\"_index\":766,\"name\":{\"2285\":{},\"3317\":{},\"4488\":{}},\"comment\":{}}],[\"isdot\",{\"_index\":1344,\"name\":{\"6969\":{}},\"comment\":{}}],[\"isdotted\",{\"_index\":143,\"name\":{\"282\":{},\"883\":{},\"1033\":{},\"1886\":{},\"2143\":{},\"2375\":{},\"2611\":{},\"2823\":{},\"3193\":{},\"3370\":{},\"3902\":{},\"4581\":{},\"5178\":{},\"5676\":{},\"6099\":{},\"6299\":{},\"6731\":{}},\"comment\":{}}],[\"isgracenote\",{\"_index\":1345,\"name\":{\"6970\":{}},\"comment\":{}}],[\"isgracenotegroup\",{\"_index\":1346,\"name\":{\"6971\":{}},\"comment\":{}}],[\"ishtmlcanvas\",{\"_index\":1393,\"name\":{\"7253\":{}},\"comment\":{}}],[\"ishtmldiv\",{\"_index\":1394,\"name\":{\"7254\":{}},\"comment\":{}}],[\"isitalic\",{\"_index\":613,\"name\":{\"1656\":{}},\"comment\":{}}],[\"isnote\",{\"_index\":1347,\"name\":{\"6972\":{}},\"comment\":{}}],[\"ispartial\",{\"_index\":394,\"name\":{\"1141\":{},\"4930\":{},\"5778\":{},\"5939\":{}},\"comment\":{}}],[\"isrendercontext\",{\"_index\":1348,\"name\":{\"6973\":{}},\"comment\":{}}],[\"isrendered\",{\"_index\":50,\"name\":{\"50\":{},\"131\":{},\"205\":{},\"348\":{},\"426\":{},\"505\":{},\"735\":{},\"808\":{},\"950\":{},\"1100\":{},\"1156\":{},\"1221\":{},\"1378\":{},\"1787\":{},\"1949\":{},\"2064\":{},\"2210\":{},\"2429\":{},\"2497\":{},\"2669\":{},\"2749\":{},\"2889\":{},\"2956\":{},\"3042\":{},\"3262\":{},\"3435\":{},\"3497\":{},\"3580\":{},\"3643\":{},\"3741\":{},\"3969\":{},\"4088\":{},\"4156\":{},\"4206\":{},\"4262\":{},\"4329\":{},\"4396\":{},\"4635\":{},\"4708\":{},\"4765\":{},\"4830\":{},\"4888\":{},\"4947\":{},\"5009\":{},\"5083\":{},\"5244\":{},\"5319\":{},\"5394\":{},\"5543\":{},\"5734\":{},\"5794\":{},\"5901\":{},\"5956\":{},\"6023\":{},\"6166\":{},\"6366\":{},\"6458\":{},\"6584\":{},\"6657\":{},\"6797\":{},\"6860\":{},\"6943\":{},\"7115\":{},\"7164\":{},\"7232\":{}},\"comment\":{}}],[\"isrest\",{\"_index\":120,\"name\":{\"259\":{},\"860\":{},\"1010\":{},\"1815\":{},\"2121\":{},\"2277\":{},\"2591\":{},\"2800\":{},\"3170\":{},\"3348\":{},\"3880\":{},\"4433\":{},\"4480\":{},\"5156\":{},\"5656\":{},\"6076\":{},\"6276\":{},\"6708\":{}},\"comment\":{}}],[\"isstavenote\",{\"_index\":1349,\"name\":{\"6974\":{}},\"comment\":{}}],[\"isstemlet\",{\"_index\":1147,\"name\":{\"5037\":{}},\"comment\":{}}],[\"isstemmablenote\",{\"_index\":1350,\"name\":{\"6975\":{}},\"comment\":{}}],[\"issubscript\",{\"_index\":338,\"name\":{\"672\":{}},\"comment\":{}}],[\"issuperscript\",{\"_index\":337,\"name\":{\"671\":{}},\"comment\":{}}],[\"istabnote\",{\"_index\":1351,\"name\":{\"6976\":{}},\"comment\":{}}],[\"italic\",{\"_index\":602,\"name\":{\"1643\":{},\"6194\":{}},\"comment\":{}}],[\"iterations\",{\"_index\":1260,\"name\":{\"6394\":{}},\"comment\":{}}],[\"joinvoices\",{\"_index\":656,\"name\":{\"1709\":{}},\"comment\":{}}],[\"justification\",{\"_index\":1257,\"name\":{\"6245\":{}},\"comment\":{}}],[\"kerningoffset\",{\"_index\":314,\"name\":{\"625\":{},\"664\":{}},\"comment\":{}}],[\"key\",{\"_index\":417,\"name\":{\"1266\":{},\"1286\":{},\"3077\":{},\"3108\":{}},\"comment\":{}}],[\"keymanager\",{\"_index\":522,\"name\":{\"1499\":{},\"2691\":{}},\"comment\":{}}],[\"keyparts\",{\"_index\":846,\"name\":{\"3070\":{}},\"comment\":{}}],[\"keyproperties\",{\"_index\":576,\"name\":{\"1595\":{}},\"comment\":{}}],[\"keyprops\",{\"_index\":106,\"name\":{\"241\":{},\"842\":{},\"992\":{},\"1848\":{},\"2103\":{},\"2339\":{},\"2573\":{},\"2782\":{},\"3105\":{},\"3152\":{},\"3330\":{},\"3862\":{},\"4545\":{},\"5138\":{},\"5638\":{},\"6058\":{},\"6258\":{},\"6690\":{}},\"comment\":{}}],[\"keys\",{\"_index\":105,\"name\":{\"240\":{},\"841\":{},\"991\":{},\"1847\":{},\"2102\":{},\"2241\":{},\"2338\":{},\"2572\":{},\"2781\":{},\"3137\":{},\"3151\":{},\"3302\":{},\"3329\":{},\"3861\":{},\"4449\":{},\"4544\":{},\"5137\":{},\"5577\":{},\"5637\":{},\"6057\":{},\"6235\":{},\"6257\":{},\"6689\":{}},\"comment\":{}}],[\"keysignature\",{\"_index\":523,\"name\":{\"1500\":{},\"1589\":{},\"2706\":{},\"7000\":{}},\"comment\":{}}],[\"keysignote\",{\"_index\":494,\"name\":{\"1434\":{},\"1501\":{},\"2771\":{},\"7001\":{}},\"comment\":{}}],[\"keyval\",{\"_index\":415,\"name\":{\"1264\":{}},\"comment\":{}}],[\"keyvals\",{\"_index\":414,\"name\":{\"1263\":{}},\"comment\":{}}],[\"keyvalue\",{\"_index\":847,\"name\":{\"3074\":{}},\"comment\":{}}],[\"last_indices\",{\"_index\":1072,\"name\":{\"4288\":{},\"4914\":{}},\"comment\":{}}],[\"last_note\",{\"_index\":1071,\"name\":{\"4287\":{},\"4912\":{}},\"comment\":{}}],[\"last_x_shift\",{\"_index\":1131,\"name\":{\"4922\":{},\"5770\":{},\"5931\":{}},\"comment\":{}}],[\"lastcontext\",{\"_index\":976,\"name\":{\"3840\":{}},\"comment\":{}}],[\"layoutmetrics\",{\"_index\":1084,\"name\":{\"4351\":{}},\"comment\":{}}],[\"lbracket\",{\"_index\":431,\"name\":{\"1282\":{}},\"comment\":{}}],[\"lcm\",{\"_index\":659,\"name\":{\"1716\":{}},\"comment\":{}}],[\"lcmm\",{\"_index\":660,\"name\":{\"1717\":{}},\"comment\":{}}],[\"leaststring\",{\"_index\":792,\"name\":{\"2526\":{},\"5591\":{}},\"comment\":{}}],[\"ledger_code_head\",{\"_index\":701,\"name\":{\"1973\":{}},\"comment\":{}}],[\"ledger_line_offset\",{\"_index\":753,\"name\":{\"2250\":{},\"4461\":{}},\"comment\":{}}],[\"left\",{\"_index\":73,\"name\":{\"73\":{},\"632\":{},\"2913\":{},\"3022\":{},\"4358\":{},\"6224\":{},\"6392\":{},\"6524\":{}},\"comment\":{}}],[\"left_bar\",{\"_index\":990,\"name\":{\"3999\":{}},\"comment\":{}}],[\"left_shift\",{\"_index\":817,\"name\":{\"2980\":{}},\"comment\":{}}],[\"left_shift_px\",{\"_index\":1061,\"name\":{\"4231\":{}},\"comment\":{}}],[\"left_shift_ticks\",{\"_index\":1060,\"name\":{\"4230\":{}},\"comment\":{}}],[\"leftdisplacedheadpx\",{\"_index\":882,\"name\":{\"3123\":{},\"6488\":{}},\"comment\":{}}],[\"leftpadding\",{\"_index\":1165,\"name\":{\"5269\":{}},\"comment\":{}}],[\"leftsidebearing\",{\"_index\":307,\"name\":{\"617\":{},\"1634\":{}},\"comment\":{}}],[\"lessthan\",{\"_index\":670,\"name\":{\"1731\":{}},\"comment\":{}}],[\"lessthanequals\",{\"_index\":671,\"name\":{\"1732\":{}},\"comment\":{}}],[\"line\",{\"_index\":323,\"name\":{\"642\":{},\"758\":{},\"763\":{},\"1249\":{},\"2009\":{},\"2088\":{},\"2243\":{},\"3010\":{},\"3110\":{},\"3139\":{},\"3288\":{},\"4430\":{},\"4451\":{},\"5579\":{},\"6237\":{},\"6608\":{}},\"comment\":{}}],[\"line_above\",{\"_index\":705,\"name\":{\"1978\":{}},\"comment\":{}}],[\"line_below\",{\"_index\":704,\"name\":{\"1977\":{}},\"comment\":{}}],[\"line_config\",{\"_index\":985,\"name\":{\"3994\":{}},\"comment\":{}}],[\"line_dash\",{\"_index\":1074,\"name\":{\"4303\":{}},\"comment\":{}}],[\"line_shift\",{\"_index\":575,\"name\":{\"1594\":{}},\"comment\":{}}],[\"line_style\",{\"_index\":233,\"name\":{\"468\":{}},\"comment\":{}}],[\"line_thickness\",{\"_index\":838,\"name\":{\"3013\":{}},\"comment\":{}}],[\"line_width\",{\"_index\":230,\"name\":{\"465\":{},\"4302\":{},\"6000\":{}},\"comment\":{}}],[\"lineendtype\",{\"_index\":975,\"name\":{\"3839\":{}},\"comment\":{}}],[\"lineshift\",{\"_index\":1291,\"name\":{\"6546\":{}},\"comment\":{}}],[\"lineto\",{\"_index\":285,\"name\":{\"590\":{},\"3809\":{},\"5471\":{}},\"comment\":{}}],[\"linewidth\",{\"_index\":475,\"name\":{\"1360\":{},\"5428\":{},\"5441\":{}},\"comment\":{}}],[\"list\",{\"_index\":637,\"name\":{\"1682\":{}},\"comment\":{}}],[\"load\",{\"_index\":618,\"name\":{\"1661\":{}},\"comment\":{}}],[\"loadmetrics\",{\"_index\":726,\"name\":{\"2021\":{},\"6535\":{}},\"comment\":{}}],[\"loadwebfont\",{\"_index\":616,\"name\":{\"1659\":{}},\"comment\":{}}],[\"loadwebfonts\",{\"_index\":617,\"name\":{\"1660\":{}},\"comment\":{}}],[\"localheightcache\",{\"_index\":1244,\"name\":{\"6210\":{}},\"comment\":{}}],[\"location\",{\"_index\":1313,\"name\":{\"6893\":{}},\"comment\":{}}],[\"location_bottom\",{\"_index\":1324,\"name\":{\"6909\":{}},\"comment\":{}}],[\"location_top\",{\"_index\":1323,\"name\":{\"6908\":{}},\"comment\":{}}],[\"log\",{\"_index\":1354,\"name\":{\"7046\":{}},\"comment\":{}}],[\"lookupbeamdirection\",{\"_index\":221,\"name\":{\"409\":{}},\"comment\":{}}],[\"lookupfontmetric\",{\"_index\":724,\"name\":{\"2016\":{},\"6530\":{}},\"comment\":{}}],[\"lookupglyph\",{\"_index\":725,\"name\":{\"2017\":{},\"6531\":{}},\"comment\":{}}],[\"lookupmetric\",{\"_index\":626,\"name\":{\"1670\":{}},\"comment\":{}}],[\"lowerkerningtext\",{\"_index\":315,\"name\":{\"626\":{},\"669\":{}},\"comment\":{}}],[\"lowest_displaced_line\",{\"_index\":1097,\"name\":{\"4426\":{}},\"comment\":{}}],[\"lowest_line\",{\"_index\":1095,\"name\":{\"4424\":{}},\"comment\":{}}],[\"lowest_non_displaced_line\",{\"_index\":1099,\"name\":{\"4428\":{}},\"comment\":{}}],[\"lparen\",{\"_index\":425,\"name\":{\"1275\":{}},\"comment\":{}}],[\"makeabs\",{\"_index\":674,\"name\":{\"1737\":{}},\"comment\":{}}],[\"maketimesignatureglyph\",{\"_index\":1297,\"name\":{\"6620\":{}},\"comment\":{}}],[\"map\",{\"_index\":638,\"name\":{\"1683\":{},\"1687\":{}},\"comment\":{}}],[\"match\",{\"_index\":913,\"name\":{\"3665\":{}},\"comment\":{}}],[\"matchedstring\",{\"_index\":929,\"name\":{\"3683\":{}},\"comment\":{}}],[\"matches\",{\"_index\":930,\"name\":{\"3684\":{}},\"comment\":{}}],[\"matchfail\",{\"_index\":935,\"name\":{\"3695\":{}},\"comment\":{}}],[\"matchsuccess\",{\"_index\":936,\"name\":{\"3696\":{}},\"comment\":{}}],[\"matchtoken\",{\"_index\":937,\"name\":{\"3697\":{}},\"comment\":{}}],[\"max_slope\",{\"_index\":202,\"name\":{\"388\":{}},\"comment\":{}}],[\"maxheight\",{\"_index\":1248,\"name\":{\"6214\":{}},\"comment\":{}}],[\"maxiterations\",{\"_index\":631,\"name\":{\"1675\":{},\"5492\":{}},\"comment\":{}}],[\"maxline\",{\"_index\":760,\"name\":{\"2267\":{},\"4431\":{},\"4470\":{}},\"comment\":{}}],[\"maxsizeglyph\",{\"_index\":1236,\"name\":{\"6196\":{}},\"comment\":{}}],[\"maybe\",{\"_index\":922,\"name\":{\"3676\":{}},\"comment\":{}}],[\"maybeslash\",{\"_index\":429,\"name\":{\"1280\":{}},\"comment\":{}}],[\"mean\",{\"_index\":1262,\"name\":{\"6398\":{}},\"comment\":{}}],[\"measuretext\",{\"_index\":292,\"name\":{\"597\":{},\"3822\":{},\"5478\":{}},\"comment\":{}}],[\"mergewith\",{\"_index\":251,\"name\":{\"549\":{}},\"comment\":{}}],[\"metrics\",{\"_index\":336,\"name\":{\"668\":{},\"1606\":{},\"2030\":{},\"5274\":{},\"6552\":{},\"6911\":{}},\"comment\":{}}],[\"microtones\",{\"_index\":423,\"name\":{\"1272\":{}},\"comment\":{}}],[\"mid\",{\"_index\":1139,\"name\":{\"4972\":{}},\"comment\":{}}],[\"midline\",{\"_index\":1356,\"name\":{\"7048\":{}},\"comment\":{}}],[\"min_flat_beam_offset\",{\"_index\":208,\"name\":{\"394\":{}},\"comment\":{}}],[\"min_slope\",{\"_index\":203,\"name\":{\"389\":{}},\"comment\":{}}],[\"minannotationpadding\",{\"_index\":85,\"name\":{\"90\":{}},\"comment\":{}}],[\"minline\",{\"_index\":759,\"name\":{\"2266\":{},\"4432\":{},\"4469\":{}},\"comment\":{}}],[\"minnoteheadpadding\",{\"_index\":756,\"name\":{\"2255\":{},\"4462\":{}},\"comment\":{}}],[\"minpadding\",{\"_index\":339,\"name\":{\"673\":{},\"3285\":{},\"3527\":{}},\"comment\":{}}],[\"mixed\",{\"_index\":942,\"name\":{\"3711\":{}},\"comment\":{}}],[\"mode\",{\"_index\":1380,\"name\":{\"7196\":{}},\"comment\":{}}],[\"modifier\",{\"_index\":524,\"name\":{\"1502\":{},\"2917\":{},\"7002\":{}},\"comment\":{}}],[\"modifiercontext\",{\"_index\":503,\"name\":{\"1447\":{},\"1503\":{},\"2987\":{}},\"comment\":{}}],[\"modifiercontextmember\",{\"_index\":821,\"name\":{\"2986\":{}},\"comment\":{}}],[\"modifiercontextmetrics\",{\"_index\":820,\"name\":{\"2983\":{}},\"comment\":{}}],[\"modifiercontextstate\",{\"_index\":815,\"name\":{\"2978\":{}},\"comment\":{}}],[\"modifierposition\",{\"_index\":544,\"name\":{\"1559\":{},\"2911\":{}},\"comment\":{}}],[\"modleftpx\",{\"_index\":880,\"name\":{\"3121\":{},\"6486\":{}},\"comment\":{}}],[\"modrightpx\",{\"_index\":881,\"name\":{\"3122\":{},\"6487\":{}},\"comment\":{}}],[\"monospaced\",{\"_index\":1235,\"name\":{\"6193\":{}},\"comment\":{}}],[\"move\",{\"_index\":249,\"name\":{\"547\":{},\"2008\":{}},\"comment\":{}}],[\"moveto\",{\"_index\":284,\"name\":{\"589\":{},\"3808\":{},\"5470\":{}},\"comment\":{}}],[\"multimeasurerest\",{\"_index\":504,\"name\":{\"1448\":{},\"1504\":{},\"3015\":{},\"7003\":{}},\"comment\":{}}],[\"multimeasurerestrenderoptions\",{\"_index\":827,\"name\":{\"3001\":{}},\"comment\":{}}],[\"multiply\",{\"_index\":666,\"name\":{\"1726\":{}},\"comment\":{}}],[\"music\",{\"_index\":525,\"name\":{\"1505\":{},\"3080\":{}},\"comment\":{}}],[\"music_font_stack\",{\"_index\":723,\"name\":{\"2015\":{},\"6529\":{}},\"comment\":{}}],[\"name\",{\"_index\":955,\"name\":{\"3765\":{},\"4791\":{}},\"comment\":{}}],[\"names\",{\"_index\":1304,\"name\":{\"6883\":{}},\"comment\":{}}],[\"near_head\",{\"_index\":390,\"name\":{\"1131\":{}},\"comment\":{}}],[\"near_top\",{\"_index\":391,\"name\":{\"1132\":{}},\"comment\":{}}],[\"nesting_offset\",{\"_index\":1325,\"name\":{\"6910\":{}},\"comment\":{}}],[\"newfromelementid\",{\"_index\":484,\"name\":{\"1415\":{}},\"comment\":{}}],[\"no_text_format\",{\"_index\":329,\"name\":{\"655\":{}},\"comment\":{}}],[\"nojustification\",{\"_index\":1197,\"name\":{\"5496\":{},\"5513\":{}},\"comment\":{}}],[\"non_displaced_x\",{\"_index\":1093,\"name\":{\"4422\":{}},\"comment\":{}}],[\"none\",{\"_index\":325,\"name\":{\"644\":{},\"3834\":{},\"4116\":{},\"4661\":{},\"4970\":{}},\"comment\":{}}],[\"nopadding\",{\"_index\":1202,\"name\":{\"5503\":{}},\"comment\":{}}],[\"normal\",{\"_index\":600,\"name\":{\"1639\":{},\"1642\":{}},\"comment\":{}}],[\"normalizeangle\",{\"_index\":1358,\"name\":{\"7050\":{}},\"comment\":{}}],[\"nospace\",{\"_index\":918,\"name\":{\"3672\":{}},\"comment\":{}}],[\"notation_font_scale\",{\"_index\":559,\"name\":{\"1574\":{}},\"comment\":{}}],[\"note\",{\"_index\":409,\"name\":{\"1256\":{},\"1506\":{},\"2698\":{},\"2703\":{},\"3065\":{},\"3144\":{},\"4439\":{},\"7004\":{}},\"comment\":{}}],[\"note_heads\",{\"_index\":783,\"name\":{\"2311\":{},\"4514\":{}},\"comment\":{}}],[\"note_type\",{\"_index\":895,\"name\":{\"3298\":{}},\"comment\":{}}],[\"noteaccidental\",{\"_index\":843,\"name\":{\"3064\":{}},\"comment\":{}}],[\"noteduration\",{\"_index\":885,\"name\":{\"3126\":{}},\"comment\":{}}],[\"notehead\",{\"_index\":526,\"name\":{\"1507\":{},\"1624\":{},\"3308\":{},\"7005\":{}},\"comment\":{}}],[\"noteheadmetrics\",{\"_index\":890,\"name\":{\"3284\":{}},\"comment\":{}}],[\"noteheadoffset\",{\"_index\":1319,\"name\":{\"6899\":{}},\"comment\":{}}],[\"noteheads\",{\"_index\":782,\"name\":{\"2310\":{},\"4513\":{}},\"comment\":{}}],[\"noteheadstruct\",{\"_index\":892,\"name\":{\"3287\":{}},\"comment\":{}}],[\"notemetrics\",{\"_index\":877,\"name\":{\"3117\":{}},\"comment\":{}}],[\"notename\",{\"_index\":420,\"name\":{\"1269\":{}},\"comment\":{}}],[\"noteparts\",{\"_index\":844,\"name\":{\"3067\":{}},\"comment\":{}}],[\"notepiece\",{\"_index\":434,\"name\":{\"1285\":{}},\"comment\":{}}],[\"notepx\",{\"_index\":879,\"name\":{\"3120\":{},\"6485\":{}},\"comment\":{}}],[\"notes\",{\"_index\":209,\"name\":{\"395\":{},\"1255\":{},\"1298\":{},\"1348\":{},\"6914\":{}},\"comment\":{}}],[\"notes_occupied\",{\"_index\":1314,\"name\":{\"6894\":{}},\"comment\":{}}],[\"notestruct\",{\"_index\":889,\"name\":{\"3136\":{}},\"comment\":{}}],[\"notesubgroup\",{\"_index\":513,\"name\":{\"1462\":{},\"1508\":{},\"3456\":{},\"7006\":{}},\"comment\":{}}],[\"notetointeger\",{\"_index\":1305,\"name\":{\"6885\":{}},\"comment\":{}}],[\"notevalues\",{\"_index\":862,\"name\":{\"3092\":{}},\"comment\":{}}],[\"num\",{\"_index\":1293,\"name\":{\"6609\":{}},\"comment\":{}}],[\"num_beats\",{\"_index\":568,\"name\":{\"1584\":{},\"7187\":{}},\"comment\":{}}],[\"num_lines\",{\"_index\":993,\"name\":{\"4003\":{}},\"comment\":{}}],[\"num_notes\",{\"_index\":1315,\"name\":{\"6895\":{}},\"comment\":{}}],[\"num_tones\",{\"_index\":852,\"name\":{\"3081\":{}},\"comment\":{}}],[\"number_glyph_point\",{\"_index\":833,\"name\":{\"3007\":{}},\"comment\":{}}],[\"number_line\",{\"_index\":832,\"name\":{\"3006\":{}},\"comment\":{}}],[\"number_of_measures\",{\"_index\":828,\"name\":{\"3002\":{}},\"comment\":{}}],[\"numerator\",{\"_index\":661,\"name\":{\"1719\":{}},\"comment\":{}}],[\"nummatches\",{\"_index\":931,\"name\":{\"3685\":{}},\"comment\":{}}],[\"o\",{\"_index\":598,\"name\":{\"1636\":{}},\"comment\":{}}],[\"octave\",{\"_index\":421,\"name\":{\"1270\":{},\"1288\":{},\"3109\":{}},\"comment\":{}}],[\"octave_shift\",{\"_index\":750,\"name\":{\"2239\":{},\"4447\":{},\"5575\":{}},\"comment\":{}}],[\"oldvalue\",{\"_index\":956,\"name\":{\"3767\":{}},\"comment\":{}}],[\"oneormore\",{\"_index\":921,\"name\":{\"3675\":{}},\"comment\":{}}],[\"onregister\",{\"_index\":49,\"name\":{\"49\":{},\"130\":{},\"204\":{},\"347\":{},\"425\":{},\"504\":{},\"734\":{},\"807\":{},\"949\":{},\"1099\":{},\"1155\":{},\"1220\":{},\"1377\":{},\"1786\":{},\"1948\":{},\"2063\":{},\"2209\":{},\"2428\":{},\"2496\":{},\"2668\":{},\"2748\":{},\"2888\":{},\"2955\":{},\"3041\":{},\"3261\":{},\"3434\":{},\"3496\":{},\"3579\":{},\"3642\":{},\"3740\":{},\"3968\":{},\"4087\":{},\"4155\":{},\"4205\":{},\"4261\":{},\"4328\":{},\"4395\":{},\"4634\":{},\"4707\":{},\"4764\":{},\"4829\":{},\"4887\":{},\"4946\":{},\"5008\":{},\"5082\":{},\"5243\":{},\"5318\":{},\"5393\":{},\"5542\":{},\"5733\":{},\"5793\":{},\"5900\":{},\"5955\":{},\"6022\":{},\"6165\":{},\"6365\":{},\"6457\":{},\"6583\":{},\"6656\":{},\"6796\":{},\"6859\":{},\"6942\":{},\"7114\":{},\"7163\":{},\"7231\":{}},\"comment\":{}}],[\"onupdate\",{\"_index\":967,\"name\":{\"3781\":{}},\"comment\":{}}],[\"opengroup\",{\"_index\":268,\"name\":{\"572\":{},\"3819\":{},\"5450\":{}},\"comment\":{}}],[\"options\",{\"_index\":436,\"name\":{\"1295\":{},\"1307\":{},\"1337\":{},\"4011\":{},\"5497\":{},\"5825\":{}},\"comment\":{}}],[\"opts\",{\"_index\":413,\"name\":{\"1262\":{}},\"comment\":{}}],[\"or\",{\"_index\":923,\"name\":{\"3677\":{}},\"comment\":{}}],[\"ornament\",{\"_index\":498,\"name\":{\"1442\":{},\"1509\":{},\"1623\":{},\"3524\":{},\"7007\":{}},\"comment\":{}}],[\"ornamentalignwithnotehead\",{\"_index\":905,\"name\":{\"3531\":{}},\"comment\":{}}],[\"ornamentarticulation\",{\"_index\":907,\"name\":{\"3533\":{}},\"comment\":{}}],[\"ornamentattack\",{\"_index\":904,\"name\":{\"3530\":{}},\"comment\":{}}],[\"ornamentmetrics\",{\"_index\":899,\"name\":{\"3519\":{}},\"comment\":{}}],[\"ornamentnotetransition\",{\"_index\":903,\"name\":{\"3529\":{}},\"comment\":{}}],[\"ornamentrelease\",{\"_index\":906,\"name\":{\"3532\":{}},\"comment\":{}}],[\"outline\",{\"_index\":718,\"name\":{\"2005\":{}},\"comment\":{}}],[\"outlinecode\",{\"_index\":719,\"name\":{\"2007\":{}},\"comment\":{}}],[\"padding_left\",{\"_index\":834,\"name\":{\"3008\":{},\"4300\":{}},\"comment\":{}}],[\"padding_right\",{\"_index\":835,\"name\":{\"3009\":{},\"4301\":{}},\"comment\":{}}],[\"paddingleft\",{\"_index\":1087,\"name\":{\"4354\":{}},\"comment\":{}}],[\"paddingright\",{\"_index\":1088,\"name\":{\"4355\":{}},\"comment\":{}}],[\"params\",{\"_index\":406,\"name\":{\"1252\":{}},\"comment\":{}}],[\"parenleftpadding\",{\"_index\":13,\"name\":{\"13\":{}},\"comment\":{}}],[\"parenrightpadding\",{\"_index\":15,\"name\":{\"15\":{}},\"comment\":{}}],[\"parent\",{\"_index\":1187,\"name\":{\"5446\":{}},\"comment\":{}}],[\"parenthesis\",{\"_index\":527,\"name\":{\"1510\":{},\"3602\":{},\"7008\":{}},\"comment\":{}}],[\"parse\",{\"_index\":466,\"name\":{\"1345\":{},\"1741\":{},\"3694\":{}},\"comment\":{}}],[\"parsednote\",{\"_index\":886,\"name\":{\"3130\":{}},\"comment\":{}}],[\"parser\",{\"_index\":463,\"name\":{\"1341\":{},\"1511\":{},\"3691\":{}},\"comment\":{}}],[\"parsetimespec\",{\"_index\":1296,\"name\":{\"6619\":{}},\"comment\":{}}],[\"partial_beam_length\",{\"_index\":207,\"name\":{\"393\":{}},\"comment\":{}}],[\"partialbeamdirection\",{\"_index\":192,\"name\":{\"373\":{}},\"comment\":{}}],[\"path\",{\"_index\":1184,\"name\":{\"5436\":{}},\"comment\":{}}],[\"pedalmarking\",{\"_index\":512,\"name\":{\"1461\":{},\"1512\":{},\"1618\":{},\"3702\":{},\"7009\":{}},\"comment\":{}}],[\"pen\",{\"_index\":1185,\"name\":{\"5437\":{}},\"comment\":{}}],[\"piece\",{\"_index\":404,\"name\":{\"1250\":{},\"1289\":{},\"1308\":{}},\"comment\":{}}],[\"pieces\",{\"_index\":405,\"name\":{\"1251\":{}},\"comment\":{}}],[\"placeglyphonline\",{\"_index\":369,\"name\":{\"791\":{},\"2733\":{},\"4139\":{},\"4378\":{},\"4691\":{},\"4748\":{},\"4813\":{},\"4871\":{},\"4992\":{},\"6640\":{}},\"comment\":{}}],[\"plotdebugging\",{\"_index\":643,\"name\":{\"1693\":{}},\"comment\":{}}],[\"plotmetrics\",{\"_index\":98,\"name\":{\"230\":{},\"832\":{},\"981\":{},\"1811\":{},\"2091\":{},\"2258\":{},\"2521\":{},\"2773\":{},\"3146\":{},\"3311\":{},\"3850\":{},\"4465\":{},\"5106\":{},\"5586\":{},\"6049\":{},\"6247\":{},\"6681\":{}},\"comment\":{}}],[\"point\",{\"_index\":363,\"name\":{\"761\":{},\"6616\":{}},\"comment\":{}}],[\"pointerbbox\",{\"_index\":971,\"name\":{\"3789\":{}},\"comment\":{}}],[\"pos\",{\"_index\":927,\"name\":{\"3681\":{}},\"comment\":{}}],[\"position\",{\"_index\":6,\"name\":{\"6\":{},\"92\":{},\"163\":{},\"460\":{},\"676\":{},\"775\":{},\"1127\":{},\"1135\":{},\"1183\":{},\"1747\":{},\"1975\":{},\"2454\":{},\"2709\":{},\"2919\":{},\"3459\":{},\"3534\":{},\"3606\":{},\"4121\":{},\"4366\":{},\"4674\":{},\"4733\":{},\"4795\":{},\"4855\":{},\"4979\":{},\"5276\":{},\"5354\":{},\"5983\":{},\"5991\":{},\"6005\":{},\"6613\":{},\"6821\":{},\"7075\":{}},\"comment\":{}}],[\"position_end\",{\"_index\":387,\"name\":{\"1128\":{}},\"comment\":{}}],[\"positions\",{\"_index\":1217,\"name\":{\"5568\":{},\"5993\":{}},\"comment\":{}}],[\"positionsstring\",{\"_index\":1228,\"name\":{\"5994\":{}},\"comment\":{}}],[\"positionstring\",{\"_index\":7,\"name\":{\"7\":{},\"93\":{},\"164\":{},\"461\":{},\"677\":{},\"1136\":{},\"1184\":{},\"1748\":{},\"2455\":{},\"2920\":{},\"3460\":{},\"3535\":{},\"3607\":{},\"5277\":{},\"5355\":{},\"5992\":{},\"6822\":{},\"7076\":{}},\"comment\":{}}],[\"postformat\",{\"_index\":182,\"name\":{\"326\":{},\"412\":{},\"928\":{},\"1078\":{},\"1708\":{},\"1844\":{},\"2188\":{},\"2257\":{},\"2336\":{},\"2569\":{},\"2867\":{},\"3000\":{},\"3239\":{},\"3413\":{},\"3947\":{},\"4464\":{},\"4542\":{},\"5134\":{},\"5634\":{},\"6144\":{},\"6344\":{},\"6431\":{},\"6519\":{},\"6775\":{}},\"comment\":{}}],[\"postformatted\",{\"_index\":183,\"name\":{\"327\":{},\"396\":{},\"929\":{},\"1079\":{},\"1928\":{},\"2189\":{},\"2409\":{},\"2648\":{},\"2868\":{},\"3240\":{},\"3414\":{},\"3948\":{},\"4615\":{},\"5222\":{},\"5713\":{},\"6145\":{},\"6345\":{},\"6432\":{},\"6776\":{}},\"comment\":{}}],[\"precalculatemintotalwidth\",{\"_index\":649,\"name\":{\"1700\":{}},\"comment\":{}}],[\"prefix\",{\"_index\":1357,\"name\":{\"7049\":{}},\"comment\":{}}],[\"preformat\",{\"_index\":103,\"name\":{\"237\":{},\"411\":{},\"838\":{},\"988\":{},\"1705\":{},\"1818\":{},\"2097\":{},\"2306\":{},\"2461\":{},\"2539\":{},\"2778\":{},\"2999\":{},\"3237\":{},\"3326\":{},\"3463\":{},\"3856\":{},\"4509\":{},\"5220\":{},\"5604\":{},\"6054\":{},\"6254\":{},\"6429\":{},\"6518\":{},\"6686\":{},\"7217\":{}},\"comment\":{}}],[\"preformatted\",{\"_index\":181,\"name\":{\"325\":{},\"927\":{},\"1077\":{},\"1927\":{},\"2187\":{},\"2408\":{},\"2647\":{},\"2866\":{},\"3238\":{},\"3412\":{},\"3946\":{},\"4614\":{},\"5221\":{},\"5712\":{},\"6143\":{},\"6343\":{},\"6430\":{},\"6774\":{}},\"comment\":{}}],[\"quadratic\",{\"_index\":720,\"name\":{\"2010\":{}},\"comment\":{}}],[\"quadraticcurveto\",{\"_index\":287,\"name\":{\"592\":{},\"3811\":{},\"5473\":{}},\"comment\":{}}],[\"quotient\",{\"_index\":672,\"name\":{\"1735\":{}},\"comment\":{}}],[\"rasquedo_down\",{\"_index\":1175,\"name\":{\"5349\":{}},\"comment\":{}}],[\"rasquedo_up\",{\"_index\":1176,\"name\":{\"5350\":{}},\"comment\":{}}],[\"ratioed\",{\"_index\":1316,\"name\":{\"6896\":{}},\"comment\":{}}],[\"rbracket\",{\"_index\":432,\"name\":{\"1283\":{}},\"comment\":{}}],[\"rect\",{\"_index\":280,\"name\":{\"585\":{},\"3803\":{},\"5466\":{}},\"comment\":{}}],[\"register\",{\"_index\":962,\"name\":{\"3776\":{}},\"comment\":{}}],[\"registerinfo\",{\"_index\":1243,\"name\":{\"6209\":{}},\"comment\":{}}],[\"registry\",{\"_index\":528,\"name\":{\"1513\":{},\"3768\":{}},\"comment\":{}}],[\"registryupdate\",{\"_index\":954,\"name\":{\"3763\":{}},\"comment\":{}}],[\"release_width\",{\"_index\":231,\"name\":{\"466\":{}},\"comment\":{}}],[\"remainder\",{\"_index\":673,\"name\":{\"1736\":{}},\"comment\":{}}],[\"removeclass\",{\"_index\":48,\"name\":{\"48\":{},\"129\":{},\"203\":{},\"346\":{},\"424\":{},\"503\":{},\"733\":{},\"806\":{},\"948\":{},\"1098\":{},\"1154\":{},\"1219\":{},\"1376\":{},\"1785\":{},\"1947\":{},\"2062\":{},\"2208\":{},\"2427\":{},\"2495\":{},\"2667\":{},\"2747\":{},\"2887\":{},\"2954\":{},\"3040\":{},\"3260\":{},\"3433\":{},\"3495\":{},\"3578\":{},\"3641\":{},\"3739\":{},\"3967\":{},\"4086\":{},\"4154\":{},\"4204\":{},\"4260\":{},\"4327\":{},\"4394\":{},\"4633\":{},\"4706\":{},\"4763\":{},\"4828\":{},\"4886\":{},\"4945\":{},\"5007\":{},\"5081\":{},\"5242\":{},\"5317\":{},\"5392\":{},\"5541\":{},\"5732\":{},\"5792\":{},\"5899\":{},\"5954\":{},\"6021\":{},\"6164\":{},\"6364\":{},\"6456\":{},\"6582\":{},\"6655\":{},\"6795\":{},\"6858\":{},\"6941\":{},\"7113\":{},\"7162\":{},\"7230\":{}},\"comment\":{}}],[\"render\",{\"_index\":740,\"name\":{\"2049\":{},\"6570\":{}},\"comment\":{}}],[\"render_options\",{\"_index\":11,\"name\":{\"11\":{},\"168\":{},\"242\":{},\"381\":{},\"463\":{},\"843\":{},\"993\":{},\"1139\":{},\"1849\":{},\"2104\":{},\"2340\":{},\"2458\":{},\"2574\":{},\"2783\":{},\"3019\":{},\"3153\":{},\"3331\":{},\"3538\":{},\"3717\":{},\"3863\":{},\"4244\":{},\"4298\":{},\"4546\":{},\"4797\":{},\"4919\":{},\"5139\":{},\"5357\":{},\"5639\":{},\"5767\":{},\"5928\":{},\"5996\":{},\"6059\":{},\"6259\":{},\"6691\":{},\"7079\":{},\"7142\":{}},\"comment\":{}}],[\"render_precision_places\",{\"_index\":557,\"name\":{\"1572\":{}},\"comment\":{}}],[\"rendercontext\",{\"_index\":529,\"name\":{\"1514\":{},\"3790\":{},\"7010\":{}},\"comment\":{}}],[\"rendercurve\",{\"_index\":395,\"name\":{\"1142\":{}},\"comment\":{}}],[\"renderer\",{\"_index\":480,\"name\":{\"1404\":{},\"1515\":{},\"3837\":{}},\"comment\":{}}],[\"rendererbackends\",{\"_index\":545,\"name\":{\"1560\":{},\"3830\":{}},\"comment\":{}}],[\"rendererlineendtype\",{\"_index\":546,\"name\":{\"1561\":{},\"3833\":{}},\"comment\":{}}],[\"renderglyph\",{\"_index\":727,\"name\":{\"2022\":{},\"6536\":{}},\"comment\":{}}],[\"renderhairpin\",{\"_index\":1067,\"name\":{\"4248\":{}},\"comment\":{}}],[\"renderoutline\",{\"_index\":728,\"name\":{\"2023\":{},\"6537\":{}},\"comment\":{}}],[\"rendertext\",{\"_index\":1138,\"name\":{\"4932\":{},\"5779\":{},\"5941\":{}},\"comment\":{}}],[\"rendertie\",{\"_index\":1137,\"name\":{\"4931\":{},\"5766\":{},\"5940\":{}},\"comment\":{}}],[\"rendertostave\",{\"_index\":741,\"name\":{\"2051\":{},\"6549\":{}},\"comment\":{}}],[\"rendervibrato\",{\"_index\":1373,\"name\":{\"7074\":{}},\"comment\":{}}],[\"repeat_begin\",{\"_index\":1049,\"name\":{\"4113\":{}},\"comment\":{}}],[\"repeat_both\",{\"_index\":1051,\"name\":{\"4115\":{}},\"comment\":{}}],[\"repeat_end\",{\"_index\":1050,\"name\":{\"4114\":{}},\"comment\":{}}],[\"repeatnote\",{\"_index\":490,\"name\":{\"1428\":{},\"1516\":{},\"3848\":{},\"7011\":{}},\"comment\":{}}],[\"repetition\",{\"_index\":530,\"name\":{\"1517\":{},\"4656\":{},\"7012\":{}},\"comment\":{}}],[\"reportedwidth\",{\"_index\":902,\"name\":{\"3523\":{}},\"comment\":{}}],[\"rerr\",{\"_index\":1366,\"name\":{\"7062\":{}},\"comment\":{}}],[\"reset\",{\"_index\":166,\"name\":{\"306\":{},\"907\":{},\"1057\":{},\"1311\":{},\"1417\":{},\"1908\":{},\"2043\":{},\"2167\":{},\"2268\":{},\"2527\":{},\"2695\":{},\"2847\":{},\"3217\":{},\"3393\":{},\"3926\":{},\"4471\":{},\"5200\":{},\"5592\":{},\"6123\":{},\"6323\":{},\"6404\":{},\"6565\":{},\"6755\":{}},\"comment\":{}}],[\"resetfont\",{\"_index\":63,\"name\":{\"63\":{},\"144\":{},\"218\":{},\"361\":{},\"439\":{},\"518\":{},\"747\":{},\"821\":{},\"963\":{},\"1113\":{},\"1169\":{},\"1234\":{},\"1391\":{},\"1800\":{},\"1962\":{},\"2077\":{},\"2222\":{},\"2441\":{},\"2510\":{},\"2682\":{},\"2762\":{},\"2902\":{},\"2969\":{},\"3055\":{},\"3275\":{},\"3447\":{},\"3510\":{},\"3593\":{},\"3656\":{},\"3754\":{},\"3981\":{},\"4100\":{},\"4169\":{},\"4219\":{},\"4275\":{},\"4342\":{},\"4409\":{},\"4647\":{},\"4721\":{},\"4778\":{},\"4843\":{},\"4901\":{},\"4960\":{},\"5022\":{},\"5095\":{},\"5257\":{},\"5332\":{},\"5407\":{},\"5555\":{},\"5747\":{},\"5807\":{},\"5913\":{},\"5969\":{},\"6036\":{},\"6179\":{},\"6379\":{},\"6471\":{},\"6597\":{},\"6670\":{},\"6810\":{},\"6873\":{},\"6956\":{},\"7128\":{},\"7177\":{},\"7244\":{}},\"comment\":{}}],[\"resetlines\",{\"_index\":999,\"name\":{\"4015\":{},\"5829\":{}},\"comment\":{}}],[\"resetpiece\",{\"_index\":447,\"name\":{\"1315\":{}},\"comment\":{}}],[\"resettuplet\",{\"_index\":177,\"name\":{\"321\":{},\"922\":{},\"1072\":{},\"1923\":{},\"2182\":{},\"2403\":{},\"2642\":{},\"2862\":{},\"3232\":{},\"3407\":{},\"3941\":{},\"4609\":{},\"5215\":{},\"5707\":{},\"6138\":{},\"6338\":{},\"6422\":{},\"6770\":{}},\"comment\":{}}],[\"resize\",{\"_index\":279,\"name\":{\"584\":{},\"3804\":{},\"3846\":{},\"5461\":{}},\"comment\":{}}],[\"resolution\",{\"_index\":561,\"name\":{\"1576\":{},\"1586\":{},\"1610\":{},\"6190\":{},\"7189\":{}},\"comment\":{}}],[\"resolutionmultiplier\",{\"_index\":640,\"name\":{\"1685\":{},\"1689\":{}},\"comment\":{}}],[\"resolveglyphs\",{\"_index\":1337,\"name\":{\"6927\":{}},\"comment\":{}}],[\"rest\",{\"_index\":703,\"name\":{\"1976\":{}},\"comment\":{}}],[\"restore\",{\"_index\":295,\"name\":{\"600\":{},\"3818\":{},\"5481\":{}},\"comment\":{}}],[\"restorestyle\",{\"_index\":44,\"name\":{\"44\":{},\"125\":{},\"199\":{},\"342\":{},\"420\":{},\"499\":{},\"729\":{},\"802\":{},\"944\":{},\"1094\":{},\"1150\":{},\"1215\":{},\"1371\":{},\"1781\":{},\"1943\":{},\"2058\":{},\"2204\":{},\"2423\":{},\"2491\":{},\"2663\":{},\"2743\":{},\"2883\":{},\"2950\":{},\"3036\":{},\"3255\":{},\"3429\":{},\"3491\":{},\"3574\":{},\"3637\":{},\"3735\":{},\"3963\":{},\"4082\":{},\"4150\":{},\"4200\":{},\"4256\":{},\"4323\":{},\"4390\":{},\"4629\":{},\"4702\":{},\"4759\":{},\"4824\":{},\"4882\":{},\"4941\":{},\"5003\":{},\"5077\":{},\"5237\":{},\"5313\":{},\"5388\":{},\"5537\":{},\"5728\":{},\"5788\":{},\"5895\":{},\"5950\":{},\"6017\":{},\"6160\":{},\"6360\":{},\"6451\":{},\"6578\":{},\"6651\":{},\"6791\":{},\"6854\":{},\"6937\":{},\"7109\":{},\"7158\":{},\"7226\":{}},\"comment\":{}}],[\"result\",{\"_index\":925,\"name\":{\"3679\":{}},\"comment\":{}}],[\"results\",{\"_index\":932,\"name\":{\"3686\":{}},\"comment\":{}}],[\"reverse\",{\"_index\":377,\"name\":{\"973\":{}},\"comment\":{}}],[\"right\",{\"_index\":75,\"name\":{\"75\":{},\"634\":{},\"2914\":{},\"3023\":{},\"4359\":{},\"6226\":{},\"6393\":{},\"6525\":{}},\"comment\":{}}],[\"right_bar\",{\"_index\":991,\"name\":{\"4000\":{}},\"comment\":{}}],[\"right_shift\",{\"_index\":816,\"name\":{\"2979\":{}},\"comment\":{}}],[\"right_shift_px\",{\"_index\":1062,\"name\":{\"4232\":{}},\"comment\":{}}],[\"right_shift_ticks\",{\"_index\":1059,\"name\":{\"4229\":{}},\"comment\":{}}],[\"rightdisplacedheadpx\",{\"_index\":884,\"name\":{\"3125\":{},\"6490\":{}},\"comment\":{}}],[\"rightpadding\",{\"_index\":995,\"name\":{\"4008\":{},\"5270\":{},\"5820\":{}},\"comment\":{}}],[\"roll_down\",{\"_index\":1173,\"name\":{\"5347\":{}},\"comment\":{}}],[\"roll_up\",{\"_index\":1174,\"name\":{\"5348\":{}},\"comment\":{}}],[\"rollingduration\",{\"_index\":443,\"name\":{\"1310\":{}},\"comment\":{}}],[\"root\",{\"_index\":845,\"name\":{\"3068\":{},\"3071\":{}},\"comment\":{}}],[\"root_index\",{\"_index\":850,\"name\":{\"3078\":{}},\"comment\":{}}],[\"root_indices\",{\"_index\":855,\"name\":{\"3084\":{}},\"comment\":{}}],[\"root_values\",{\"_index\":854,\"name\":{\"3083\":{}},\"comment\":{}}],[\"roots\",{\"_index\":853,\"name\":{\"3082\":{}},\"comment\":{}}],[\"rootvalue\",{\"_index\":848,\"name\":{\"3075\":{}},\"comment\":{}}],[\"rounded_end\",{\"_index\":1075,\"name\":{\"4304\":{}},\"comment\":{}}],[\"rparen\",{\"_index\":426,\"name\":{\"1276\":{}},\"comment\":{}}],[\"rule\",{\"_index\":916,\"name\":{\"3670\":{}},\"comment\":{}}],[\"rulefunction\",{\"_index\":914,\"name\":{\"3666\":{}},\"comment\":{}}],[\"run\",{\"_index\":924,\"name\":{\"3678\":{}},\"comment\":{}}],[\"runtimeerror\",{\"_index\":1360,\"name\":{\"7052\":{},\"7063\":{}},\"comment\":{}}],[\"sanitizecanvasdims\",{\"_index\":263,\"name\":{\"565\":{}},\"comment\":{}}],[\"sans_serif\",{\"_index\":603,\"name\":{\"1645\":{}},\"comment\":{}}],[\"save\",{\"_index\":294,\"name\":{\"599\":{},\"3817\":{},\"5480\":{}},\"comment\":{}}],[\"scale\",{\"_index\":116,\"name\":{\"254\":{},\"583\":{},\"855\":{},\"1005\":{},\"1861\":{},\"2003\":{},\"2033\":{},\"2116\":{},\"2251\":{},\"2352\":{},\"2586\":{},\"2795\":{},\"3165\":{},\"3343\":{},\"3802\":{},\"3875\":{},\"4558\":{},\"5151\":{},\"5462\":{},\"5651\":{},\"6071\":{},\"6271\":{},\"6555\":{},\"6703\":{}},\"comment\":{}}],[\"scales\",{\"_index\":860,\"name\":{\"3089\":{}},\"comment\":{}}],[\"scalesize\",{\"_index\":611,\"name\":{\"1654\":{}},\"comment\":{}}],[\"scaletopxfrom\",{\"_index\":605,\"name\":{\"1648\":{}},\"comment\":{}}],[\"scaletypes\",{\"_index\":861,\"name\":{\"3090\":{}},\"comment\":{}}],[\"scalex\",{\"_index\":1180,\"name\":{\"5422\":{}},\"comment\":{}}],[\"scaley\",{\"_index\":1181,\"name\":{\"5423\":{}},\"comment\":{}}],[\"secondary_break_ticks\",{\"_index\":199,\"name\":{\"385\":{}},\"comment\":{}}],[\"segno_left\",{\"_index\":1109,\"name\":{\"4664\":{}},\"comment\":{}}],[\"segno_right\",{\"_index\":1110,\"name\":{\"4665\":{}},\"comment\":{}}],[\"selectnote\",{\"_index\":803,\"name\":{\"2701\":{}},\"comment\":{}}],[\"semibreve_rest_glyph_scale\",{\"_index\":837,\"name\":{\"3012\":{}},\"comment\":{}}],[\"serif\",{\"_index\":604,\"name\":{\"1646\":{}},\"comment\":{}}],[\"serif_thickness\",{\"_index\":839,\"name\":{\"3014\":{}},\"comment\":{}}],[\"serifs\",{\"_index\":1234,\"name\":{\"6192\":{}},\"comment\":{}}],[\"set\",{\"_index\":464,\"name\":{\"1342\":{},\"1721\":{}},\"comment\":{}}],[\"setascautionary\",{\"_index\":18,\"name\":{\"18\":{}},\"comment\":{}}],[\"setattribute\",{\"_index\":55,\"name\":{\"55\":{},\"136\":{},\"210\":{},\"353\":{},\"431\":{},\"510\":{},\"740\":{},\"813\":{},\"955\":{},\"1105\":{},\"1161\":{},\"1226\":{},\"1383\":{},\"1792\":{},\"1954\":{},\"2069\":{},\"2215\":{},\"2434\":{},\"2502\":{},\"2674\":{},\"2754\":{},\"2894\":{},\"2961\":{},\"3047\":{},\"3267\":{},\"3440\":{},\"3502\":{},\"3585\":{},\"3648\":{},\"3746\":{},\"3974\":{},\"4093\":{},\"4161\":{},\"4211\":{},\"4267\":{},\"4334\":{},\"4401\":{},\"4640\":{},\"4713\":{},\"4770\":{},\"4835\":{},\"4893\":{},\"4952\":{},\"5014\":{},\"5088\":{},\"5249\":{},\"5324\":{},\"5399\":{},\"5548\":{},\"5739\":{},\"5799\":{},\"5906\":{},\"5961\":{},\"6028\":{},\"6171\":{},\"6371\":{},\"6463\":{},\"6589\":{},\"6662\":{},\"6802\":{},\"6865\":{},\"6948\":{},\"7120\":{},\"7169\":{},\"7237\":{}},\"comment\":{}}],[\"setbackgroundfillstyle\",{\"_index\":272,\"name\":{\"576\":{},\"3795\":{},\"5454\":{}},\"comment\":{}}],[\"setbeam\",{\"_index\":149,\"name\":{\"288\":{},\"889\":{},\"1039\":{},\"1892\":{},\"2149\":{},\"2269\":{},\"2616\":{},\"2829\":{},\"3199\":{},\"3376\":{},\"3908\":{},\"4472\":{},\"5184\":{},\"5681\":{},\"6105\":{},\"6305\":{},\"6737\":{}},\"comment\":{}}],[\"setbeatsoccupied\",{\"_index\":1334,\"name\":{\"6924\":{}},\"comment\":{}}],[\"setbegbartype\",{\"_index\":1026,\"name\":{\"4053\":{},\"5866\":{}},\"comment\":{}}],[\"setbetweenlines\",{\"_index\":96,\"name\":{\"171\":{}},\"comment\":{}}],[\"setbracketed\",{\"_index\":1328,\"name\":{\"6917\":{}},\"comment\":{}}],[\"setcenteralignment\",{\"_index\":174,\"name\":{\"318\":{},\"919\":{},\"1069\":{},\"1920\":{},\"2179\":{},\"2400\":{},\"2639\":{},\"2859\":{},\"3229\":{},\"3404\":{},\"3938\":{},\"4606\":{},\"5212\":{},\"5704\":{},\"6135\":{},\"6335\":{},\"6417\":{},\"6767\":{}},\"comment\":{}}],[\"setcenterxshift\",{\"_index\":172,\"name\":{\"316\":{},\"917\":{},\"1067\":{},\"1918\":{},\"2177\":{},\"2398\":{},\"2637\":{},\"2857\":{},\"3227\":{},\"3402\":{},\"3936\":{},\"4604\":{},\"5210\":{},\"5702\":{},\"6133\":{},\"6333\":{},\"6415\":{},\"6765\":{}},\"comment\":{}}],[\"setclef\",{\"_index\":1028,\"name\":{\"4055\":{},\"5868\":{}},\"comment\":{}}],[\"setconfigforline\",{\"_index\":1044,\"name\":{\"4075\":{},\"5888\":{}},\"comment\":{}}],[\"setconfigforlines\",{\"_index\":1045,\"name\":{\"4076\":{},\"5889\":{}},\"comment\":{}}],[\"setcontext\",{\"_index\":58,\"name\":{\"58\":{},\"139\":{},\"213\":{},\"356\":{},\"434\":{},\"513\":{},\"743\":{},\"816\":{},\"958\":{},\"1108\":{},\"1164\":{},\"1229\":{},\"1344\":{},\"1386\":{},\"1421\":{},\"1795\":{},\"1957\":{},\"2072\":{},\"2217\":{},\"2436\":{},\"2505\":{},\"2677\":{},\"2757\":{},\"2897\":{},\"2964\":{},\"3050\":{},\"3270\":{},\"3442\":{},\"3505\":{},\"3588\":{},\"3651\":{},\"3749\":{},\"3976\":{},\"4095\":{},\"4164\":{},\"4214\":{},\"4270\":{},\"4337\":{},\"4404\":{},\"4642\":{},\"4716\":{},\"4773\":{},\"4838\":{},\"4896\":{},\"4955\":{},\"5017\":{},\"5090\":{},\"5252\":{},\"5327\":{},\"5402\":{},\"5525\":{},\"5742\":{},\"5802\":{},\"5908\":{},\"5964\":{},\"6031\":{},\"6174\":{},\"6374\":{},\"6466\":{},\"6592\":{},\"6665\":{},\"6805\":{},\"6868\":{},\"6951\":{},\"7123\":{},\"7172\":{},\"7239\":{}},\"comment\":{}}],[\"setcurrenttick\",{\"_index\":1286,\"name\":{\"6516\":{}},\"comment\":{}}],[\"setcustomtext\",{\"_index\":951,\"name\":{\"3724\":{}},\"comment\":{}}],[\"setdashed\",{\"_index\":1169,\"name\":{\"5284\":{},\"6009\":{}},\"comment\":{}}],[\"setdata\",{\"_index\":621,\"name\":{\"1665\":{}},\"comment\":{}}],[\"setdecrescendo\",{\"_index\":383,\"name\":{\"987\":{}},\"comment\":{}}],[\"setdefaultledgerlinestyle\",{\"_index\":997,\"name\":{\"4012\":{},\"5826\":{}},\"comment\":{}}],[\"setdelayed\",{\"_index\":910,\"name\":{\"3544\":{}},\"comment\":{}}],[\"setdirection\",{\"_index\":1136,\"name\":{\"4928\":{},\"5056\":{},\"5776\":{},\"5937\":{}},\"comment\":{}}],[\"setdotshifty\",{\"_index\":399,\"name\":{\"1188\":{}},\"comment\":{}}],[\"setdrawcircle\",{\"_index\":1170,\"name\":{\"5285\":{}},\"comment\":{}}],[\"setduration\",{\"_index\":188,\"name\":{\"332\":{},\"934\":{},\"1084\":{},\"1933\":{},\"2194\":{},\"2414\":{},\"2653\":{},\"2873\":{},\"3245\":{},\"3419\":{},\"3953\":{},\"4620\":{},\"5227\":{},\"5718\":{},\"6150\":{},\"6350\":{},\"6437\":{},\"6781\":{}},\"comment\":{}}],[\"setenablekerning\",{\"_index\":354,\"name\":{\"696\":{}},\"comment\":{}}],[\"setendbartype\",{\"_index\":1027,\"name\":{\"4054\":{},\"5867\":{}},\"comment\":{}}],[\"setendclef\",{\"_index\":1029,\"name\":{\"4057\":{},\"5870\":{}},\"comment\":{}}],[\"setendkeysignature\",{\"_index\":1032,\"name\":{\"4060\":{},\"5873\":{}},\"comment\":{}}],[\"setendtimesignature\",{\"_index\":1034,\"name\":{\"4062\":{},\"5875\":{}},\"comment\":{}}],[\"setextension\",{\"_index\":1153,\"name\":{\"5057\":{}},\"comment\":{}}],[\"setfillstyle\",{\"_index\":271,\"name\":{\"575\":{},\"3794\":{},\"5453\":{}},\"comment\":{}}],[\"setflagstyle\",{\"_index\":772,\"name\":{\"2299\":{},\"4502\":{}},\"comment\":{}}],[\"setfont\",{\"_index\":61,\"name\":{\"61\":{},\"142\":{},\"216\":{},\"359\":{},\"437\":{},\"516\":{},\"603\":{},\"695\":{},\"819\":{},\"961\":{},\"1111\":{},\"1167\":{},\"1232\":{},\"1389\":{},\"1798\":{},\"1960\":{},\"2075\":{},\"2220\":{},\"2439\":{},\"2508\":{},\"2680\":{},\"2760\":{},\"2900\":{},\"2967\":{},\"3053\":{},\"3273\":{},\"3445\":{},\"3508\":{},\"3591\":{},\"3654\":{},\"3752\":{},\"3825\":{},\"3979\":{},\"4098\":{},\"4167\":{},\"4217\":{},\"4273\":{},\"4340\":{},\"4407\":{},\"4645\":{},\"4719\":{},\"4776\":{},\"4841\":{},\"4899\":{},\"4958\":{},\"5020\":{},\"5093\":{},\"5255\":{},\"5330\":{},\"5405\":{},\"5484\":{},\"5553\":{},\"5745\":{},\"5805\":{},\"5911\":{},\"5967\":{},\"6034\":{},\"6177\":{},\"6377\":{},\"6469\":{},\"6595\":{},\"6668\":{},\"6808\":{},\"6871\":{},\"6954\":{},\"7126\":{},\"7175\":{},\"7242\":{}},\"comment\":{}}],[\"setfontsize\",{\"_index\":65,\"name\":{\"65\":{},\"146\":{},\"220\":{},\"363\":{},\"441\":{},\"520\":{},\"749\":{},\"823\":{},\"965\":{},\"1115\":{},\"1171\":{},\"1236\":{},\"1393\":{},\"1802\":{},\"1964\":{},\"2079\":{},\"2224\":{},\"2443\":{},\"2512\":{},\"2684\":{},\"2764\":{},\"2904\":{},\"2971\":{},\"3057\":{},\"3277\":{},\"3449\":{},\"3512\":{},\"3595\":{},\"3658\":{},\"3756\":{},\"3983\":{},\"4102\":{},\"4171\":{},\"4221\":{},\"4277\":{},\"4344\":{},\"4411\":{},\"4649\":{},\"4723\":{},\"4780\":{},\"4845\":{},\"4903\":{},\"4962\":{},\"5024\":{},\"5097\":{},\"5259\":{},\"5334\":{},\"5409\":{},\"5557\":{},\"5749\":{},\"5809\":{},\"5915\":{},\"5971\":{},\"6038\":{},\"6181\":{},\"6220\":{},\"6381\":{},\"6473\":{},\"6599\":{},\"6672\":{},\"6812\":{},\"6875\":{},\"6958\":{},\"7130\":{},\"7179\":{},\"7246\":{}},\"comment\":{}}],[\"setfrethandfinger\",{\"_index\":677,\"name\":{\"1750\":{}},\"comment\":{}}],[\"setghost\",{\"_index\":793,\"name\":{\"2528\":{},\"5593\":{}},\"comment\":{}}],[\"setglyph\",{\"_index\":744,\"name\":{\"2095\":{},\"3854\":{},\"6627\":{}},\"comment\":{}}],[\"setgroupstyle\",{\"_index\":41,\"name\":{\"41\":{},\"122\":{},\"196\":{},\"339\":{},\"417\":{},\"496\":{},\"726\":{},\"799\":{},\"941\":{},\"1091\":{},\"1147\":{},\"1212\":{},\"1368\":{},\"1778\":{},\"1940\":{},\"2055\":{},\"2201\":{},\"2420\":{},\"2488\":{},\"2660\":{},\"2740\":{},\"2880\":{},\"2947\":{},\"3033\":{},\"3252\":{},\"3426\":{},\"3488\":{},\"3571\":{},\"3634\":{},\"3732\":{},\"3960\":{},\"4080\":{},\"4147\":{},\"4197\":{},\"4253\":{},\"4320\":{},\"4387\":{},\"4626\":{},\"4699\":{},\"4756\":{},\"4821\":{},\"4879\":{},\"4938\":{},\"5000\":{},\"5074\":{},\"5234\":{},\"5310\":{},\"5385\":{},\"5534\":{},\"5725\":{},\"5785\":{},\"5893\":{},\"5947\":{},\"6015\":{},\"6157\":{},\"6357\":{},\"6448\":{},\"6575\":{},\"6648\":{},\"6788\":{},\"6851\":{},\"6934\":{},\"7106\":{},\"7155\":{},\"7223\":{}},\"comment\":{}}],[\"seth\",{\"_index\":248,\"name\":{\"546\":{}},\"comment\":{}}],[\"setharsh\",{\"_index\":1374,\"name\":{\"7080\":{},\"7150\":{}},\"comment\":{}}],[\"setheight\",{\"_index\":382,\"name\":{\"986\":{}},\"comment\":{}}],[\"sethorizontal\",{\"_index\":357,\"name\":{\"699\":{}},\"comment\":{}}],[\"setignoreticks\",{\"_index\":168,\"name\":{\"308\":{},\"909\":{},\"1059\":{},\"1910\":{},\"2169\":{},\"2390\":{},\"2629\":{},\"2849\":{},\"3219\":{},\"3395\":{},\"3928\":{},\"4596\":{},\"5202\":{},\"5694\":{},\"6125\":{},\"6325\":{},\"6407\":{},\"6757\":{}},\"comment\":{}}],[\"setindex\",{\"_index\":25,\"name\":{\"25\":{},\"106\":{},\"180\":{},\"481\":{},\"710\":{},\"1196\":{},\"1762\":{},\"2472\":{},\"2930\":{},\"3472\":{},\"3555\":{},\"3618\":{},\"5294\":{},\"5370\":{},\"6835\":{},\"7090\":{}},\"comment\":{}}],[\"setindexvalue\",{\"_index\":960,\"name\":{\"3774\":{}},\"comment\":{}}],[\"setintrinsicticks\",{\"_index\":185,\"name\":{\"329\":{},\"931\":{},\"1081\":{},\"1930\":{},\"2191\":{},\"2411\":{},\"2650\":{},\"2870\":{},\"3242\":{},\"3416\":{},\"3950\":{},\"4617\":{},\"5224\":{},\"5715\":{},\"6147\":{},\"6347\":{},\"6434\":{},\"6778\":{}},\"comment\":{}}],[\"setisnumeric\",{\"_index\":1301,\"name\":{\"6629\":{}},\"comment\":{}}],[\"setjustification\",{\"_index\":88,\"name\":{\"97\":{},\"6250\":{}},\"comment\":{}}],[\"setkey\",{\"_index\":799,\"name\":{\"2693\":{}},\"comment\":{}}],[\"setkeyline\",{\"_index\":775,\"name\":{\"2302\":{},\"4505\":{}},\"comment\":{}}],[\"setkeysig\",{\"_index\":810,\"name\":{\"2719\":{}},\"comment\":{}}],[\"setkeysignature\",{\"_index\":1031,\"name\":{\"4059\":{},\"5872\":{}},\"comment\":{}}],[\"setkeystyle\",{\"_index\":774,\"name\":{\"2301\":{},\"4504\":{}},\"comment\":{}}],[\"setlastnote\",{\"_index\":1168,\"name\":{\"5283\":{}},\"comment\":{}}],[\"setlayoutmetrics\",{\"_index\":372,\"name\":{\"794\":{},\"2735\":{},\"4142\":{},\"4381\":{},\"4694\":{},\"4751\":{},\"4816\":{},\"4874\":{},\"4995\":{},\"6643\":{}},\"comment\":{}}],[\"setledgerlinestyle\",{\"_index\":770,\"name\":{\"2297\":{},\"4500\":{}},\"comment\":{}}],[\"setleftdisplacedheadpx\",{\"_index\":127,\"name\":{\"266\":{},\"867\":{},\"1017\":{},\"1871\":{},\"2128\":{},\"2362\":{},\"2597\":{},\"2807\":{},\"3177\":{},\"3354\":{},\"3887\":{},\"4568\":{},\"5163\":{},\"5662\":{},\"6083\":{},\"6283\":{},\"6715\":{}},\"comment\":{}}],[\"setline\",{\"_index\":381,\"name\":{\"985\":{},\"3322\":{},\"3725\":{},\"6010\":{},\"6053\":{},\"6251\":{},\"6625\":{},\"7149\":{}},\"comment\":{}}],[\"setlinecap\",{\"_index\":277,\"name\":{\"581\":{},\"3800\":{},\"5460\":{}},\"comment\":{}}],[\"setlinedash\",{\"_index\":278,\"name\":{\"582\":{},\"3801\":{},\"5459\":{}},\"comment\":{}}],[\"setlineendtype\",{\"_index\":1166,\"name\":{\"5279\":{}},\"comment\":{}}],[\"setlinewidth\",{\"_index\":276,\"name\":{\"580\":{},\"3799\":{},\"5458\":{}},\"comment\":{}}],[\"setloweraccidental\",{\"_index\":912,\"name\":{\"3546\":{}},\"comment\":{}}],[\"setmeasure\",{\"_index\":1009,\"name\":{\"4032\":{},\"5846\":{}},\"comment\":{}}],[\"setmetrics\",{\"_index\":622,\"name\":{\"1666\":{}},\"comment\":{}}],[\"setmode\",{\"_index\":1386,\"name\":{\"7205\":{}},\"comment\":{}}],[\"setmodifiercontext\",{\"_index\":28,\"name\":{\"28\":{},\"109\":{},\"183\":{},\"333\":{},\"484\":{},\"713\":{},\"935\":{},\"1085\":{},\"1199\":{},\"1765\":{},\"1934\":{},\"2195\":{},\"2415\":{},\"2475\":{},\"2654\":{},\"2874\":{},\"2933\":{},\"3246\":{},\"3420\":{},\"3475\":{},\"3558\":{},\"3621\":{},\"3954\":{},\"4621\":{},\"5228\":{},\"5297\":{},\"5373\":{},\"5719\":{},\"6151\":{},\"6351\":{},\"6439\":{},\"6782\":{},\"6838\":{},\"7093\":{}},\"comment\":{}}],[\"setmusicfont\",{\"_index\":553,\"name\":{\"1568\":{}},\"comment\":{}}],[\"setnote\",{\"_index\":17,\"name\":{\"17\":{},\"103\":{},\"177\":{},\"478\":{},\"707\":{},\"1187\":{},\"1759\":{},\"2469\":{},\"2927\":{},\"3469\":{},\"3552\":{},\"3610\":{},\"5291\":{},\"5367\":{},\"6832\":{},\"7087\":{}},\"comment\":{}}],[\"setnotedisplaced\",{\"_index\":767,\"name\":{\"2286\":{},\"4489\":{}},\"comment\":{}}],[\"setnotedots\",{\"_index\":448,\"name\":{\"1316\":{}},\"comment\":{}}],[\"setnoteduration\",{\"_index\":449,\"name\":{\"1317\":{}},\"comment\":{}}],[\"setnoteheadxbounds\",{\"_index\":1152,\"name\":{\"5055\":{}},\"comment\":{}}],[\"setnotes\",{\"_index\":393,\"name\":{\"1140\":{},\"4247\":{},\"4313\":{},\"4929\":{},\"5777\":{},\"5938\":{}},\"comment\":{}}],[\"setnotesoccupied\",{\"_index\":1336,\"name\":{\"6926\":{}},\"comment\":{}}],[\"setnotestartx\",{\"_index\":1000,\"name\":{\"4016\":{},\"5830\":{}},\"comment\":{}}],[\"setnotetype\",{\"_index\":450,\"name\":{\"1318\":{}},\"comment\":{}}],[\"setnumlines\",{\"_index\":1006,\"name\":{\"4023\":{},\"5837\":{}},\"comment\":{}}],[\"setoffsetx\",{\"_index\":679,\"name\":{\"1752\":{},\"5281\":{}},\"comment\":{}}],[\"setoffsety\",{\"_index\":680,\"name\":{\"1753\":{},\"5282\":{}},\"comment\":{}}],[\"setoptions\",{\"_index\":465,\"name\":{\"1343\":{},\"1418\":{},\"2036\":{},\"5054\":{},\"5518\":{},\"6558\":{}},\"comment\":{}}],[\"setorigin\",{\"_index\":739,\"name\":{\"2048\":{},\"6569\":{}},\"comment\":{}}],[\"setoriginx\",{\"_index\":737,\"name\":{\"2046\":{},\"6567\":{}},\"comment\":{}}],[\"setoriginy\",{\"_index\":738,\"name\":{\"2047\":{},\"6568\":{}},\"comment\":{}}],[\"setpadding\",{\"_index\":371,\"name\":{\"793\":{},\"2734\":{},\"4141\":{},\"4380\":{},\"4693\":{},\"4750\":{},\"4815\":{},\"4873\":{},\"4994\":{},\"6505\":{},\"6642\":{}},\"comment\":{}}],[\"setpartialbeamsideat\",{\"_index\":214,\"name\":{\"402\":{}},\"comment\":{}}],[\"setplaynote\",{\"_index\":119,\"name\":{\"258\":{},\"859\":{},\"1009\":{},\"1865\":{},\"2120\":{},\"2356\":{},\"2590\":{},\"2799\":{},\"3169\":{},\"3347\":{},\"3879\":{},\"4562\":{},\"5155\":{},\"5655\":{},\"6075\":{},\"6275\":{},\"6707\":{}},\"comment\":{}}],[\"setpoint\",{\"_index\":734,\"name\":{\"2037\":{},\"6559\":{}},\"comment\":{}}],[\"setposition\",{\"_index\":30,\"name\":{\"30\":{},\"111\":{},\"185\":{},\"486\":{},\"715\":{},\"785\":{},\"1201\":{},\"1767\":{},\"2477\":{},\"2726\":{},\"2935\":{},\"3477\":{},\"3560\":{},\"3623\":{},\"4131\":{},\"4245\":{},\"4370\":{},\"4683\":{},\"4740\":{},\"4805\":{},\"4863\":{},\"4984\":{},\"5299\":{},\"5374\":{},\"6632\":{},\"6840\":{},\"7095\":{}},\"comment\":{}}],[\"setratioed\",{\"_index\":1329,\"name\":{\"6918\":{}},\"comment\":{}}],[\"setrawfont\",{\"_index\":298,\"name\":{\"606\":{},\"3828\":{},\"5487\":{}},\"comment\":{}}],[\"setrendered\",{\"_index\":51,\"name\":{\"51\":{},\"132\":{},\"206\":{},\"349\":{},\"427\":{},\"506\":{},\"736\":{},\"809\":{},\"951\":{},\"1101\":{},\"1157\":{},\"1222\":{},\"1379\":{},\"1788\":{},\"1950\":{},\"2065\":{},\"2211\":{},\"2430\":{},\"2498\":{},\"2670\":{},\"2750\":{},\"2890\":{},\"2957\":{},\"3043\":{},\"3263\":{},\"3436\":{},\"3498\":{},\"3581\":{},\"3644\":{},\"3742\":{},\"3970\":{},\"4089\":{},\"4157\":{},\"4207\":{},\"4263\":{},\"4330\":{},\"4397\":{},\"4636\":{},\"4709\":{},\"4766\":{},\"4831\":{},\"4889\":{},\"4948\":{},\"5010\":{},\"5084\":{},\"5245\":{},\"5320\":{},\"5395\":{},\"5544\":{},\"5735\":{},\"5795\":{},\"5902\":{},\"5957\":{},\"6024\":{},\"6167\":{},\"6367\":{},\"6459\":{},\"6585\":{},\"6658\":{},\"6798\":{},\"6861\":{},\"6944\":{},\"7116\":{},\"7165\":{},\"7233\":{}},\"comment\":{}}],[\"setrenderoptions\",{\"_index\":1066,\"name\":{\"4246\":{}},\"comment\":{}}],[\"setrepetitiontype\",{\"_index\":1012,\"name\":{\"4035\":{},\"5849\":{}},\"comment\":{}}],[\"setreportwidth\",{\"_index\":340,\"name\":{\"681\":{}},\"comment\":{}}],[\"setrightdisplacedheadpx\",{\"_index\":128,\"name\":{\"267\":{},\"868\":{},\"1018\":{},\"1872\":{},\"2129\":{},\"2363\":{},\"2598\":{},\"2808\":{},\"3178\":{},\"3355\":{},\"3888\":{},\"4569\":{},\"5164\":{},\"5663\":{},\"6084\":{},\"6284\":{},\"6716\":{}},\"comment\":{}}],[\"setsection\",{\"_index\":1014,\"name\":{\"4037\":{},\"5851\":{}},\"comment\":{}}],[\"setshadowblur\",{\"_index\":275,\"name\":{\"579\":{},\"3798\":{},\"5457\":{}},\"comment\":{}}],[\"setshadowcolor\",{\"_index\":274,\"name\":{\"578\":{},\"3797\":{},\"5456\":{}},\"comment\":{}}],[\"setshiftx\",{\"_index\":1119,\"name\":{\"4676\":{},\"4736\":{},\"4801\":{},\"4858\":{}},\"comment\":{}}],[\"setshifty\",{\"_index\":1120,\"name\":{\"4677\":{},\"4737\":{},\"4802\":{},\"4859\":{},\"4981\":{}},\"comment\":{}}],[\"setsoftmaxfactor\",{\"_index\":1390,\"name\":{\"7213\":{}},\"comment\":{}}],[\"setspacingfromnextmodifier\",{\"_index\":33,\"name\":{\"33\":{},\"114\":{},\"188\":{},\"489\":{},\"718\":{},\"1204\":{},\"1770\":{},\"2480\":{},\"2938\":{},\"3480\":{},\"3563\":{},\"3626\":{},\"5302\":{},\"5377\":{},\"6843\":{},\"7098\":{}},\"comment\":{}}],[\"setstave\",{\"_index\":124,\"name\":{\"263\":{},\"782\":{},\"864\":{},\"1014\":{},\"1816\":{},\"2038\":{},\"2125\":{},\"2284\":{},\"2532\":{},\"2729\":{},\"2804\":{},\"3024\":{},\"3174\":{},\"3325\":{},\"3884\":{},\"4134\":{},\"4373\":{},\"4487\":{},\"4686\":{},\"4743\":{},\"4808\":{},\"4866\":{},\"4987\":{},\"5160\":{},\"5597\":{},\"6080\":{},\"6280\":{},\"6443\":{},\"6560\":{},\"6635\":{},\"6712\":{},\"7208\":{}},\"comment\":{}}],[\"setstavesection\",{\"_index\":1125,\"name\":{\"4735\":{}},\"comment\":{}}],[\"setstavetext\",{\"_index\":1128,\"name\":{\"4857\":{}},\"comment\":{}}],[\"setstem\",{\"_index\":684,\"name\":{\"1824\":{},\"2322\":{},\"2555\":{},\"4528\":{},\"5114\":{},\"5620\":{}},\"comment\":{}}],[\"setstemdirection\",{\"_index\":690,\"name\":{\"1832\":{},\"2329\":{},\"2563\":{},\"4535\":{},\"5122\":{},\"5628\":{}},\"comment\":{}}],[\"setstemlength\",{\"_index\":694,\"name\":{\"1836\":{},\"2331\":{},\"2565\":{},\"4537\":{},\"5126\":{},\"5630\":{}},\"comment\":{}}],[\"setstemlet\",{\"_index\":1158,\"name\":{\"5067\":{}},\"comment\":{}}],[\"setstemstyle\",{\"_index\":768,\"name\":{\"2295\":{},\"4498\":{}},\"comment\":{}}],[\"setstrict\",{\"_index\":1388,\"name\":{\"7211\":{}},\"comment\":{}}],[\"setstringnumber\",{\"_index\":1167,\"name\":{\"5280\":{}},\"comment\":{}}],[\"setstrokestyle\",{\"_index\":273,\"name\":{\"577\":{},\"3796\":{},\"5455\":{}},\"comment\":{}}],[\"setstyle\",{\"_index\":40,\"name\":{\"40\":{},\"121\":{},\"195\":{},\"338\":{},\"416\":{},\"495\":{},\"725\":{},\"798\":{},\"940\":{},\"1090\":{},\"1146\":{},\"1211\":{},\"1367\":{},\"1777\":{},\"1939\":{},\"2054\":{},\"2200\":{},\"2294\":{},\"2487\":{},\"2659\":{},\"2739\":{},\"2879\":{},\"2946\":{},\"3032\":{},\"3251\":{},\"3425\":{},\"3487\":{},\"3570\":{},\"3633\":{},\"3731\":{},\"3959\":{},\"4079\":{},\"4146\":{},\"4196\":{},\"4252\":{},\"4319\":{},\"4386\":{},\"4497\":{},\"4698\":{},\"4755\":{},\"4820\":{},\"4878\":{},\"4937\":{},\"4999\":{},\"5073\":{},\"5233\":{},\"5309\":{},\"5384\":{},\"5533\":{},\"5724\":{},\"5784\":{},\"5892\":{},\"5946\":{},\"6014\":{},\"6156\":{},\"6356\":{},\"6447\":{},\"6574\":{},\"6647\":{},\"6787\":{},\"6850\":{},\"6933\":{},\"7105\":{},\"7154\":{},\"7222\":{}},\"comment\":{}}],[\"settap\",{\"_index\":234,\"name\":{\"470\":{}},\"comment\":{}}],[\"settempo\",{\"_index\":1015,\"name\":{\"4038\":{},\"4800\":{},\"5852\":{}},\"comment\":{}}],[\"settext\",{\"_index\":1016,\"name\":{\"4039\":{},\"4190\":{},\"4312\":{},\"4860\":{},\"5853\":{}},\"comment\":{}}],[\"settextline\",{\"_index\":31,\"name\":{\"31\":{},\"112\":{},\"186\":{},\"487\":{},\"716\":{},\"1202\":{},\"1768\":{},\"2478\":{},\"2936\":{},\"3478\":{},\"3561\":{},\"3624\":{},\"5300\":{},\"5375\":{},\"6841\":{},\"7096\":{}},\"comment\":{}}],[\"settickcontext\",{\"_index\":141,\"name\":{\"280\":{},\"881\":{},\"1031\":{},\"1884\":{},\"2141\":{},\"2373\":{},\"2609\":{},\"2821\":{},\"3191\":{},\"3368\":{},\"3900\":{},\"4579\":{},\"5176\":{},\"5674\":{},\"6097\":{},\"6297\":{},\"6427\":{},\"6729\":{}},\"comment\":{}}],[\"settimesig\",{\"_index\":1298,\"name\":{\"6622\":{}},\"comment\":{}}],[\"settimesignature\",{\"_index\":1033,\"name\":{\"4061\":{},\"5874\":{}},\"comment\":{}}],[\"settuning\",{\"_index\":1306,\"name\":{\"6886\":{}},\"comment\":{}}],[\"settuplet\",{\"_index\":178,\"name\":{\"322\":{},\"923\":{},\"1073\":{},\"1924\":{},\"2183\":{},\"2404\":{},\"2643\":{},\"2863\":{},\"3233\":{},\"3408\":{},\"3942\":{},\"4610\":{},\"5216\":{},\"5708\":{},\"6139\":{},\"6339\":{},\"6423\":{},\"6771\":{}},\"comment\":{}}],[\"settupletlocation\",{\"_index\":1330,\"name\":{\"6919\":{}},\"comment\":{}}],[\"settype\",{\"_index\":101,\"name\":{\"235\":{},\"780\":{},\"836\":{},\"3723\":{},\"4125\":{},\"4188\":{}},\"comment\":{}}],[\"setupperaccidental\",{\"_index\":911,\"name\":{\"3545\":{}},\"comment\":{}}],[\"setvertical\",{\"_index\":355,\"name\":{\"697\":{}},\"comment\":{}}],[\"setverticaljustification\",{\"_index\":86,\"name\":{\"95\":{}},\"comment\":{}}],[\"setvibratowidth\",{\"_index\":1375,\"name\":{\"7081\":{}},\"comment\":{}}],[\"setviewbox\",{\"_index\":1191,\"name\":{\"5463\":{}},\"comment\":{}}],[\"setvisibility\",{\"_index\":1157,\"name\":{\"5066\":{}},\"comment\":{}}],[\"setvoice\",{\"_index\":139,\"name\":{\"278\":{},\"879\":{},\"1029\":{},\"1882\":{},\"2139\":{},\"2371\":{},\"2607\":{},\"2819\":{},\"3189\":{},\"3366\":{},\"3898\":{},\"4577\":{},\"5174\":{},\"5672\":{},\"6095\":{},\"6295\":{},\"6419\":{},\"6727\":{}},\"comment\":{}}],[\"setvoltatype\",{\"_index\":1013,\"name\":{\"4036\":{},\"5850\":{}},\"comment\":{}}],[\"setw\",{\"_index\":247,\"name\":{\"545\":{}},\"comment\":{}}],[\"setwidth\",{\"_index\":20,\"name\":{\"20\":{},\"100\":{},\"174\":{},\"309\":{},\"475\":{},\"704\":{},\"788\":{},\"910\":{},\"1060\":{},\"1191\":{},\"1756\":{},\"1911\":{},\"2170\":{},\"2391\":{},\"2463\":{},\"2630\":{},\"2730\":{},\"2850\":{},\"2924\":{},\"3220\":{},\"3396\":{},\"3464\":{},\"3549\":{},\"3613\":{},\"3929\":{},\"4029\":{},\"4136\":{},\"4375\":{},\"4597\":{},\"4688\":{},\"4745\":{},\"4810\":{},\"4868\":{},\"4989\":{},\"5203\":{},\"5288\":{},\"5364\":{},\"5695\":{},\"5843\":{},\"6126\":{},\"6326\":{},\"6408\":{},\"6637\":{},\"6758\":{},\"6829\":{},\"7084\":{}},\"comment\":{}}],[\"setx\",{\"_index\":245,\"name\":{\"543\":{},\"790\":{},\"2732\":{},\"3318\":{},\"4028\":{},\"4138\":{},\"4377\":{},\"4690\":{},\"4747\":{},\"4812\":{},\"4870\":{},\"4991\":{},\"5520\":{},\"5842\":{},\"6499\":{},\"6639\":{}},\"comment\":{}}],[\"setxbase\",{\"_index\":1274,\"name\":{\"6501\":{}},\"comment\":{}}],[\"setxoffset\",{\"_index\":1276,\"name\":{\"6503\":{}},\"comment\":{}}],[\"setxshift\",{\"_index\":35,\"name\":{\"35\":{},\"116\":{},\"190\":{},\"311\":{},\"469\":{},\"720\":{},\"912\":{},\"1062\":{},\"1206\":{},\"1772\":{},\"1913\":{},\"2040\":{},\"2172\":{},\"2393\":{},\"2482\":{},\"2632\":{},\"2852\":{},\"2940\":{},\"3222\":{},\"3397\":{},\"3482\":{},\"3565\":{},\"3628\":{},\"3931\":{},\"4191\":{},\"4599\":{},\"5205\":{},\"5304\":{},\"5379\":{},\"5697\":{},\"6128\":{},\"6328\":{},\"6410\":{},\"6562\":{},\"6760\":{},\"6845\":{},\"7100\":{}},\"comment\":{}}],[\"sety\",{\"_index\":246,\"name\":{\"544\":{},\"3320\":{},\"4024\":{},\"5522\":{},\"5838\":{}},\"comment\":{}}],[\"setybounds\",{\"_index\":1155,\"name\":{\"5059\":{}},\"comment\":{}}],[\"setys\",{\"_index\":135,\"name\":{\"274\":{},\"875\":{},\"1025\":{},\"1879\":{},\"2135\":{},\"2368\":{},\"2604\":{},\"2815\":{},\"3185\":{},\"3362\":{},\"3894\":{},\"4574\":{},\"5171\":{},\"5669\":{},\"6091\":{},\"6291\":{},\"6723\":{}},\"comment\":{}}],[\"setyshift\",{\"_index\":32,\"name\":{\"32\":{},\"113\":{},\"187\":{},\"488\":{},\"717\":{},\"1203\":{},\"1769\":{},\"2042\":{},\"2479\":{},\"2937\":{},\"3479\":{},\"3562\":{},\"3625\":{},\"5301\":{},\"5376\":{},\"6564\":{},\"6842\":{},\"7097\":{}},\"comment\":{}}],[\"shadow_attributes\",{\"_index\":1183,\"name\":{\"5427\":{},\"5443\":{}},\"comment\":{}}],[\"shadowblur\",{\"_index\":474,\"name\":{\"1357\":{}},\"comment\":{}}],[\"shadowcolor\",{\"_index\":473,\"name\":{\"1356\":{}},\"comment\":{}}],[\"shift_right\",{\"_index\":875,\"name\":{\"3115\":{}},\"comment\":{}}],[\"shift_y\",{\"_index\":715,\"name\":{\"1992\":{}},\"comment\":{}}],[\"shoulddrawflag\",{\"_index\":785,\"name\":{\"2314\":{},\"4517\":{}},\"comment\":{}}],[\"shouldignoreticks\",{\"_index\":129,\"name\":{\"268\":{},\"869\":{},\"1019\":{},\"1873\":{},\"2130\":{},\"2364\":{},\"2599\":{},\"2809\":{},\"3179\":{},\"3356\":{},\"3889\":{},\"4570\":{},\"5165\":{},\"5664\":{},\"6085\":{},\"6285\":{},\"6406\":{},\"6717\":{}},\"comment\":{}}],[\"show_bracket\",{\"_index\":1231,\"name\":{\"6002\":{}},\"comment\":{}}],[\"show_number\",{\"_index\":831,\"name\":{\"3005\":{}},\"comment\":{}}],[\"show_stemlets\",{\"_index\":200,\"name\":{\"386\":{}},\"comment\":{}}],[\"simpleformat\",{\"_index\":642,\"name\":{\"1692\":{}},\"comment\":{}}],[\"simplify\",{\"_index\":664,\"name\":{\"1723\":{}},\"comment\":{}}],[\"single\",{\"_index\":1046,\"name\":{\"4110\":{}},\"comment\":{}}],[\"singlenote\",{\"_index\":410,\"name\":{\"1257\":{}},\"comment\":{}}],[\"size\",{\"_index\":579,\"name\":{\"1600\":{},\"1647\":{},\"5419\":{}},\"comment\":{}}],[\"slash\",{\"_index\":428,\"name\":{\"1279\":{},\"2232\":{}},\"comment\":{}}],[\"slash_notehead_width\",{\"_index\":562,\"name\":{\"1577\":{}},\"comment\":{}}],[\"slashed\",{\"_index\":893,\"name\":{\"3290\":{}},\"comment\":{}}],[\"slide_down\",{\"_index\":1219,\"name\":{\"5760\":{}},\"comment\":{}}],[\"slide_up\",{\"_index\":1218,\"name\":{\"5759\":{}},\"comment\":{}}],[\"slope\",{\"_index\":210,\"name\":{\"397\":{}},\"comment\":{}}],[\"slope_cost\",{\"_index\":205,\"name\":{\"391\":{}},\"comment\":{}}],[\"slope_iterations\",{\"_index\":204,\"name\":{\"390\":{}},\"comment\":{}}],[\"slur_y_shift\",{\"_index\":788,\"name\":{\"2460\":{}},\"comment\":{}}],[\"smooth\",{\"_index\":1256,\"name\":{\"6231\":{}},\"comment\":{}}],[\"smufl\",{\"_index\":588,\"name\":{\"1613\":{}},\"comment\":{}}],[\"soft\",{\"_index\":1378,\"name\":{\"7192\":{}},\"comment\":{}}],[\"softmax\",{\"_index\":1391,\"name\":{\"7214\":{}},\"comment\":{}}],[\"softmax_factor\",{\"_index\":558,\"name\":{\"1573\":{}},\"comment\":{}}],[\"softmaxfactor\",{\"_index\":629,\"name\":{\"1673\":{},\"5490\":{}},\"comment\":{}}],[\"sortandunique\",{\"_index\":1362,\"name\":{\"7057\":{}},\"comment\":{}}],[\"sortbycategory\",{\"_index\":1041,\"name\":{\"4070\":{},\"5883\":{}},\"comment\":{}}],[\"space\",{\"_index\":479,\"name\":{\"1403\":{},\"4014\":{},\"5828\":{},\"6395\":{}},\"comment\":{}}],[\"space_above_staff_ln\",{\"_index\":987,\"name\":{\"3996\":{}},\"comment\":{}}],[\"space_below_staff_ln\",{\"_index\":986,\"name\":{\"3995\":{}},\"comment\":{}}],[\"spaceabove\",{\"_index\":1198,\"name\":{\"5498\":{}},\"comment\":{}}],[\"spacebelow\",{\"_index\":1199,\"name\":{\"5499\":{}},\"comment\":{}}],[\"spacebetweenstaves\",{\"_index\":1204,\"name\":{\"5505\":{}},\"comment\":{}}],[\"spacing\",{\"_index\":317,\"name\":{\"628\":{},\"2985\":{}},\"comment\":{}}],[\"spacing_between_lines_px\",{\"_index\":836,\"name\":{\"3011\":{},\"4001\":{}},\"comment\":{}}],[\"spacingbetweenblocks\",{\"_index\":332,\"name\":{\"658\":{}},\"comment\":{}}],[\"stacktrace\",{\"_index\":1365,\"name\":{\"7061\":{}},\"comment\":{}}],[\"start\",{\"_index\":1226,\"name\":{\"5979\":{},\"6006\":{}},\"comment\":{}}],[\"state\",{\"_index\":1182,\"name\":{\"5424\":{},\"5425\":{},\"5444\":{}},\"comment\":{}}],[\"state_stack\",{\"_index\":1186,\"name\":{\"5445\":{}},\"comment\":{}}],[\"stave\",{\"_index\":478,\"name\":{\"1401\":{},\"1424\":{},\"1518\":{},\"1614\":{},\"1678\":{},\"4004\":{},\"5495\":{},\"7013\":{}},\"comment\":{}}],[\"stave_line_distance\",{\"_index\":563,\"name\":{\"1578\":{}},\"comment\":{}}],[\"stave_line_thickness\",{\"_index\":564,\"name\":{\"1579\":{}},\"comment\":{}}],[\"staveconnector\",{\"_index\":505,\"name\":{\"1450\":{},\"1519\":{},\"4179\":{},\"7014\":{}},\"comment\":{}}],[\"staveconnectortype\",{\"_index\":1055,\"name\":{\"4178\":{}},\"comment\":{}}],[\"stavehairpin\",{\"_index\":531,\"name\":{\"1520\":{},\"4235\":{},\"7015\":{}},\"comment\":{}}],[\"stavehairpinrenderoptions\",{\"_index\":1058,\"name\":{\"4228\":{}},\"comment\":{}}],[\"staveline\",{\"_index\":508,\"name\":{\"1456\":{},\"1521\":{},\"4289\":{},\"7016\":{}},\"comment\":{}}],[\"stavelineconfig\",{\"_index\":981,\"name\":{\"3990\":{}},\"comment\":{}}],[\"stavelinenotes\",{\"_index\":1068,\"name\":{\"4284\":{}},\"comment\":{}}],[\"stavemodifier\",{\"_index\":532,\"name\":{\"1522\":{},\"4364\":{},\"7017\":{}},\"comment\":{}}],[\"stavemodifierposition\",{\"_index\":548,\"name\":{\"1563\":{},\"4356\":{}},\"comment\":{}}],[\"stavenote\",{\"_index\":488,\"name\":{\"1426\":{},\"1523\":{},\"4456\":{},\"7018\":{}},\"comment\":{}}],[\"stavenoteformatsettings\",{\"_index\":1100,\"name\":{\"4429\":{}},\"comment\":{}}],[\"stavenoteheadbounds\",{\"_index\":1089,\"name\":{\"4418\":{}},\"comment\":{}}],[\"stavenotestruct\",{\"_index\":1106,\"name\":{\"4440\":{}},\"comment\":{}}],[\"staveoptions\",{\"_index\":983,\"name\":{\"3992\":{}},\"comment\":{}}],[\"stavesection\",{\"_index\":1124,\"name\":{\"4730\":{},\"7019\":{}},\"comment\":{}}],[\"stavetempo\",{\"_index\":533,\"name\":{\"1524\":{},\"4792\":{},\"7020\":{}},\"comment\":{}}],[\"stavetempooptions\",{\"_index\":1126,\"name\":{\"4787\":{}},\"comment\":{}}],[\"stavetext\",{\"_index\":534,\"name\":{\"1525\":{},\"4852\":{},\"7021\":{}},\"comment\":{}}],[\"stavetie\",{\"_index\":507,\"name\":{\"1455\":{},\"1526\":{},\"4915\":{},\"7022\":{}},\"comment\":{}}],[\"stem\",{\"_index\":439,\"name\":{\"1301\":{},\"1332\":{},\"1527\":{},\"1821\":{},\"1982\":{},\"2319\":{},\"2552\":{},\"4525\":{},\"5045\":{},\"5111\":{},\"5617\":{},\"7023\":{}},\"comment\":{}}],[\"stem_beam_extension\",{\"_index\":706,\"name\":{\"1979\":{}},\"comment\":{}}],[\"stem_direction\",{\"_index\":681,\"name\":{\"1820\":{},\"2233\":{},\"2318\":{},\"2551\":{},\"3296\":{},\"4441\":{},\"4524\":{},\"5039\":{},\"5110\":{},\"5569\":{},\"5616\":{}},\"comment\":{}}],[\"stem_down\",{\"_index\":755,\"name\":{\"2254\":{},\"4460\":{}},\"comment\":{}}],[\"stem_down_extension\",{\"_index\":708,\"name\":{\"1981\":{}},\"comment\":{}}],[\"stem_down_x_offset\",{\"_index\":748,\"name\":{\"2235\":{},\"3106\":{},\"3292\":{},\"4443\":{},\"5571\":{}},\"comment\":{}}],[\"stem_down_y_base_offset\",{\"_index\":1142,\"name\":{\"5032\":{}},\"comment\":{}}],[\"stem_down_y_offset\",{\"_index\":1144,\"name\":{\"5034\":{}},\"comment\":{}}],[\"stem_extension\",{\"_index\":1149,\"name\":{\"5040\":{}},\"comment\":{}}],[\"stem_height\",{\"_index\":565,\"name\":{\"1580\":{}},\"comment\":{}}],[\"stem_up\",{\"_index\":754,\"name\":{\"2253\":{},\"4459\":{}},\"comment\":{}}],[\"stem_up_extension\",{\"_index\":707,\"name\":{\"1980\":{}},\"comment\":{}}],[\"stem_up_x_offset\",{\"_index\":749,\"name\":{\"2236\":{},\"3107\":{},\"3293\":{},\"4444\":{},\"5572\":{}},\"comment\":{}}],[\"stem_up_y_base_offset\",{\"_index\":1143,\"name\":{\"5033\":{}},\"comment\":{}}],[\"stem_up_y_offset\",{\"_index\":1145,\"name\":{\"5035\":{}},\"comment\":{}}],[\"stem_width\",{\"_index\":566,\"name\":{\"1581\":{}},\"comment\":{}}],[\"stemdirection\",{\"_index\":1101,\"name\":{\"4434\":{}},\"comment\":{}}],[\"stemlet_extension\",{\"_index\":206,\"name\":{\"392\":{}},\"comment\":{}}],[\"stemletheight\",{\"_index\":1146,\"name\":{\"5036\":{}},\"comment\":{}}],[\"stemmablenote\",{\"_index\":1161,\"name\":{\"5104\":{},\"7024\":{}},\"comment\":{}}],[\"stemmax\",{\"_index\":1102,\"name\":{\"4435\":{}},\"comment\":{}}],[\"stemmin\",{\"_index\":1103,\"name\":{\"4436\":{}},\"comment\":{}}],[\"stemoffset\",{\"_index\":1320,\"name\":{\"6900\":{}},\"comment\":{}}],[\"stemoptions\",{\"_index\":1141,\"name\":{\"5031\":{}},\"comment\":{}}],[\"stempadding\",{\"_index\":1164,\"name\":{\"5268\":{}},\"comment\":{}}],[\"stemupyoffset\",{\"_index\":901,\"name\":{\"3522\":{}},\"comment\":{}}],[\"stop\",{\"_index\":1227,\"name\":{\"5980\":{},\"6007\":{}},\"comment\":{}}],[\"str\",{\"_index\":1214,\"name\":{\"5565\":{}},\"comment\":{}}],[\"strict\",{\"_index\":1377,\"name\":{\"7191\":{}},\"comment\":{}}],[\"stringnumber\",{\"_index\":501,\"name\":{\"1445\":{},\"1528\":{},\"1625\":{},\"5271\":{},\"7025\":{}},\"comment\":{}}],[\"stringnumbermetrics\",{\"_index\":1162,\"name\":{\"5266\":{}},\"comment\":{}}],[\"stroke\",{\"_index\":290,\"name\":{\"595\":{},\"1529\":{},\"3114\":{},\"3814\":{},\"5341\":{},\"5477\":{},\"7026\":{}},\"comment\":{}}],[\"stroke_px\",{\"_index\":117,\"name\":{\"256\":{},\"857\":{},\"1007\":{},\"1863\":{},\"2118\":{},\"2237\":{},\"2354\":{},\"2588\":{},\"2797\":{},\"3167\":{},\"3345\":{},\"3877\":{},\"4445\":{},\"4560\":{},\"5153\":{},\"5573\":{},\"5653\":{},\"6073\":{},\"6273\":{},\"6705\":{}},\"comment\":{}}],[\"strokestyle\",{\"_index\":297,\"name\":{\"602\":{},\"1359\":{},\"3824\":{},\"5483\":{}},\"comment\":{}}],[\"style\",{\"_index\":581,\"name\":{\"1602\":{},\"3291\":{},\"5420\":{}},\"comment\":{}}],[\"subscript\",{\"_index\":326,\"name\":{\"645\":{},\"6233\":{}},\"comment\":{}}],[\"subscriptoffset\",{\"_index\":313,\"name\":{\"624\":{},\"663\":{},\"680\":{},\"6198\":{}},\"comment\":{}}],[\"subtract\",{\"_index\":665,\"name\":{\"1725\":{}},\"comment\":{}}],[\"success\",{\"_index\":926,\"name\":{\"3680\":{}},\"comment\":{}}],[\"sumarray\",{\"_index\":1359,\"name\":{\"7051\":{}},\"comment\":{}}],[\"superscript\",{\"_index\":327,\"name\":{\"646\":{},\"5982\":{},\"6234\":{}},\"comment\":{}}],[\"superscriptoffset\",{\"_index\":312,\"name\":{\"623\":{},\"662\":{},\"679\":{},\"6197\":{}},\"comment\":{}}],[\"supersubratio\",{\"_index\":318,\"name\":{\"629\":{},\"654\":{}},\"comment\":{}}],[\"sval\",{\"_index\":419,\"name\":{\"1268\":{}},\"comment\":{}}],[\"svg\",{\"_index\":973,\"name\":{\"3832\":{},\"5433\":{}},\"comment\":{}}],[\"svgcontext\",{\"_index\":535,\"name\":{\"1530\":{},\"5429\":{}},\"comment\":{}}],[\"symbol_spacing\",{\"_index\":830,\"name\":{\"3004\":{}},\"comment\":{}}],[\"symbolmodifier\",{\"_index\":301,\"name\":{\"610\":{}},\"comment\":{}}],[\"symbolmodifiers\",{\"_index\":324,\"name\":{\"643\":{},\"667\":{},\"1555\":{}},\"comment\":{}}],[\"symboltype\",{\"_index\":300,\"name\":{\"609\":{}},\"comment\":{}}],[\"symboltypes\",{\"_index\":322,\"name\":{\"639\":{},\"666\":{},\"1554\":{}},\"comment\":{}}],[\"system\",{\"_index\":511,\"name\":{\"1459\":{},\"1531\":{},\"5514\":{},\"7027\":{}},\"comment\":{}}],[\"systemformatteroptions\",{\"_index\":1193,\"name\":{\"5488\":{}},\"comment\":{}}],[\"systemoptions\",{\"_index\":1201,\"name\":{\"5501\":{}},\"comment\":{}}],[\"systemstave\",{\"_index\":1195,\"name\":{\"5493\":{}},\"comment\":{}}],[\"tablature_font_scale\",{\"_index\":560,\"name\":{\"1575\":{}},\"comment\":{}}],[\"tabnote\",{\"_index\":495,\"name\":{\"1435\":{},\"1532\":{},\"5584\":{},\"7028\":{}},\"comment\":{}}],[\"tabnote_stem_down_extension\",{\"_index\":712,\"name\":{\"1989\":{}},\"comment\":{}}],[\"tabnote_stem_up_extension\",{\"_index\":713,\"name\":{\"1990\":{}},\"comment\":{}}],[\"tabnoteposition\",{\"_index\":1213,\"name\":{\"5564\":{}},\"comment\":{}}],[\"tabnotestruct\",{\"_index\":1216,\"name\":{\"5567\":{}},\"comment\":{}}],[\"tabslide\",{\"_index\":536,\"name\":{\"1533\":{},\"5756\":{},\"7029\":{}},\"comment\":{}}],[\"tabstave\",{\"_index\":487,\"name\":{\"1425\":{},\"1534\":{},\"5816\":{},\"7030\":{}},\"comment\":{}}],[\"tabtie\",{\"_index\":537,\"name\":{\"1535\":{},\"5922\":{},\"7031\":{}},\"comment\":{}}],[\"tcontexts\",{\"_index\":1271,\"name\":{\"6496\":{}},\"comment\":{}}],[\"text\",{\"_index\":224,\"name\":{\"451\":{},\"608\":{},\"641\":{},\"1988\":{},\"3709\":{},\"5981\":{},\"6228\":{}},\"comment\":{}}],[\"text_font\",{\"_index\":8,\"name\":{\"8\":{},\"85\":{},\"165\":{},\"232\":{},\"379\":{},\"458\":{},\"675\":{},\"776\":{},\"834\":{},\"983\":{},\"1137\":{},\"1185\":{},\"1363\":{},\"1414\":{},\"1744\":{},\"1813\":{},\"2026\":{},\"2093\":{},\"2260\":{},\"2456\":{},\"2523\":{},\"2710\":{},\"2775\":{},\"2921\":{},\"3017\":{},\"3148\":{},\"3313\":{},\"3461\":{},\"3536\":{},\"3608\":{},\"3705\":{},\"3852\":{},\"4006\":{},\"4122\":{},\"4181\":{},\"4242\":{},\"4291\":{},\"4367\":{},\"4467\":{},\"4658\":{},\"4732\":{},\"4794\":{},\"4854\":{},\"4917\":{},\"4978\":{},\"5052\":{},\"5108\":{},\"5273\":{},\"5352\":{},\"5516\":{},\"5588\":{},\"5758\":{},\"5818\":{},\"5926\":{},\"5990\":{},\"6051\":{},\"6244\":{},\"6402\":{},\"6540\":{},\"6614\":{},\"6683\":{},\"6823\":{},\"6912\":{},\"7077\":{},\"7140\":{},\"7197\":{}},\"comment\":{}}],[\"text_justification\",{\"_index\":1081,\"name\":{\"4311\":{}},\"comment\":{}}],[\"text_line\",{\"_index\":818,\"name\":{\"2981\":{}},\"comment\":{}}],[\"text_margin_right\",{\"_index\":949,\"name\":{\"3721\":{}},\"comment\":{}}],[\"text_position_vertical\",{\"_index\":1080,\"name\":{\"4310\":{}},\"comment\":{}}],[\"text_shift_x\",{\"_index\":1135,\"name\":{\"4926\":{},\"5774\":{},\"5935\":{}},\"comment\":{}}],[\"textbracket\",{\"_index\":510,\"name\":{\"1458\":{},\"1536\":{},\"5987\":{},\"7032\":{}},\"comment\":{}}],[\"textbracketparams\",{\"_index\":1225,\"name\":{\"5978\":{}},\"comment\":{}}],[\"textbracketposition\",{\"_index\":550,\"name\":{\"1565\":{},\"5984\":{}},\"comment\":{}}],[\"textdynamics\",{\"_index\":499,\"name\":{\"1443\":{},\"1537\":{},\"6045\":{},\"7033\":{}},\"comment\":{}}],[\"textformatter\",{\"_index\":538,\"name\":{\"1538\":{},\"6204\":{}},\"comment\":{}}],[\"textformatterinfo\",{\"_index\":1233,\"name\":{\"6188\":{}},\"comment\":{}}],[\"textheight\",{\"_index\":266,\"name\":{\"570\":{}},\"comment\":{}}],[\"textjustification\",{\"_index\":551,\"name\":{\"1566\":{},\"4296\":{},\"6223\":{}},\"comment\":{}}],[\"textmeasure\",{\"_index\":969,\"name\":{\"3783\":{}},\"comment\":{}}],[\"textnote\",{\"_index\":492,\"name\":{\"1430\":{},\"1539\":{},\"6242\":{},\"7034\":{}},\"comment\":{}}],[\"textnotestruct\",{\"_index\":1254,\"name\":{\"6227\":{}},\"comment\":{}}],[\"textverticalposition\",{\"_index\":1073,\"name\":{\"4292\":{}},\"comment\":{}}],[\"thickness\",{\"_index\":386,\"name\":{\"1124\":{},\"4187\":{}},\"comment\":{}}],[\"throwonerror\",{\"_index\":457,\"name\":{\"1328\":{}},\"comment\":{}}],[\"tickable\",{\"_index\":1264,\"name\":{\"6400\":{},\"7035\":{}},\"comment\":{}}],[\"tickcontext\",{\"_index\":502,\"name\":{\"1446\":{},\"1540\":{},\"6493\":{}},\"comment\":{}}],[\"tickcontextmetrics\",{\"_index\":1265,\"name\":{\"6480\":{}},\"comment\":{}}],[\"tickcontextoptions\",{\"_index\":1268,\"name\":{\"6491\":{}},\"comment\":{}}],[\"tickid\",{\"_index\":1269,\"name\":{\"6492\":{}},\"comment\":{}}],[\"ticks\",{\"_index\":888,\"name\":{\"3135\":{}},\"comment\":{}}],[\"tie_spacing\",{\"_index\":1132,\"name\":{\"4923\":{},\"5771\":{},\"5932\":{}},\"comment\":{}}],[\"tienotes\",{\"_index\":1129,\"name\":{\"4910\":{}},\"comment\":{}}],[\"time\",{\"_index\":459,\"name\":{\"1331\":{}},\"comment\":{}}],[\"time4_4\",{\"_index\":567,\"name\":{\"1582\":{}},\"comment\":{}}],[\"timesignature\",{\"_index\":539,\"name\":{\"1541\":{},\"6542\":{},\"6610\":{},\"7036\":{}},\"comment\":{}}],[\"timesignatureglyph\",{\"_index\":1288,\"name\":{\"6526\":{}},\"comment\":{}}],[\"timesignatureinfo\",{\"_index\":1292,\"name\":{\"6606\":{}},\"comment\":{}}],[\"timesignote\",{\"_index\":493,\"name\":{\"1433\":{},\"1542\":{},\"6679\":{},\"7037\":{}},\"comment\":{}}],[\"to_coda\",{\"_index\":1118,\"name\":{\"4673\":{}},\"comment\":{}}],[\"tocssstring\",{\"_index\":610,\"name\":{\"1653\":{}},\"comment\":{}}],[\"token\",{\"_index\":917,\"name\":{\"3671\":{}},\"comment\":{}}],[\"tomixedstring\",{\"_index\":676,\"name\":{\"1740\":{}},\"comment\":{}}],[\"top\",{\"_index\":78,\"name\":{\"78\":{},\"637\":{},\"4294\":{},\"5985\":{},\"6905\":{}},\"comment\":{}}],[\"top_stave\",{\"_index\":1056,\"name\":{\"4185\":{}},\"comment\":{}}],[\"top_text_line\",{\"_index\":819,\"name\":{\"2982\":{}},\"comment\":{}}],[\"top_text_position\",{\"_index\":992,\"name\":{\"4002\":{}},\"comment\":{}}],[\"topglyphs\",{\"_index\":731,\"name\":{\"2031\":{},\"6553\":{}},\"comment\":{}}],[\"topline\",{\"_index\":1295,\"name\":{\"6618\":{}},\"comment\":{}}],[\"topmodifieroffset\",{\"_index\":1321,\"name\":{\"6902\":{}},\"comment\":{}}],[\"topstartx\",{\"_index\":1289,\"name\":{\"6543\":{}},\"comment\":{}}],[\"topy\",{\"_index\":695,\"name\":{\"1839\":{},\"2334\":{},\"2544\":{},\"4540\":{},\"5064\":{},\"5129\":{},\"5609\":{}},\"comment\":{}}],[\"tosimplifiedstring\",{\"_index\":675,\"name\":{\"1739\":{}},\"comment\":{}}],[\"tostring\",{\"_index\":627,\"name\":{\"1671\":{},\"1738\":{}},\"comment\":{}}],[\"totalleftpx\",{\"_index\":1266,\"name\":{\"6481\":{}},\"comment\":{}}],[\"totalrightpx\",{\"_index\":1267,\"name\":{\"6482\":{}},\"comment\":{}}],[\"tremolo\",{\"_index\":540,\"name\":{\"1543\":{},\"1621\":{},\"6819\":{},\"7038\":{}},\"comment\":{}}],[\"triggerfunction\",{\"_index\":915,\"name\":{\"3668\":{}},\"comment\":{}}],[\"tune\",{\"_index\":655,\"name\":{\"1707\":{}},\"comment\":{}}],[\"tuning\",{\"_index\":541,\"name\":{\"1544\":{},\"6882\":{}},\"comment\":{}}],[\"tuplet\",{\"_index\":467,\"name\":{\"1347\":{},\"1452\":{},\"1545\":{},\"1626\":{},\"6906\":{},\"7039\":{}},\"comment\":{}}],[\"tupletlocation\",{\"_index\":1322,\"name\":{\"6903\":{}},\"comment\":{}}],[\"tupletmetrics\",{\"_index\":1318,\"name\":{\"6898\":{}},\"comment\":{}}],[\"tupletoptions\",{\"_index\":1310,\"name\":{\"6890\":{}},\"comment\":{}}],[\"type\",{\"_index\":10,\"name\":{\"10\":{},\"167\":{},\"450\":{},\"1260\":{},\"1294\":{},\"1353\":{},\"2245\":{},\"3073\":{},\"3129\":{},\"3132\":{},\"3141\":{},\"3305\":{},\"3707\":{},\"4119\":{},\"4182\":{},\"4237\":{},\"4453\":{},\"4659\":{},\"4977\":{},\"5343\":{},\"5581\":{},\"6239\":{}},\"comment\":{}}],[\"types\",{\"_index\":367,\"name\":{\"772\":{},\"1274\":{}},\"comment\":{}}],[\"typestring\",{\"_index\":943,\"name\":{\"3712\":{},\"4120\":{},\"4183\":{}},\"comment\":{}}],[\"underline_superscript\",{\"_index\":1230,\"name\":{\"6001\":{}},\"comment\":{}}],[\"unicode\",{\"_index\":571,\"name\":{\"1588\":{}},\"comment\":{}}],[\"unsetpartialbeamsideat\",{\"_index\":215,\"name\":{\"403\":{}},\"comment\":{}}],[\"up\",{\"_index\":228,\"name\":{\"456\":{},\"3835\":{},\"5048\":{}},\"comment\":{}}],[\"updatecachekey\",{\"_index\":1246,\"name\":{\"6212\":{}},\"comment\":{}}],[\"updateindex\",{\"_index\":961,\"name\":{\"3775\":{}},\"comment\":{}}],[\"updatekerningadjustments\",{\"_index\":343,\"name\":{\"684\":{}},\"comment\":{}}],[\"updateoverbaradjustments\",{\"_index\":342,\"name\":{\"683\":{}},\"comment\":{}}],[\"updateparams\",{\"_index\":1245,\"name\":{\"6211\":{}},\"comment\":{}}],[\"updatewidth\",{\"_index\":794,\"name\":{\"2531\":{},\"5596\":{}},\"comment\":{}}],[\"upperkerningtext\",{\"_index\":316,\"name\":{\"627\":{},\"670\":{}},\"comment\":{}}],[\"use_symbols\",{\"_index\":829,\"name\":{\"3003\":{}},\"comment\":{}}],[\"used\",{\"_index\":1261,\"name\":{\"6397\":{}},\"comment\":{}}],[\"val\",{\"_index\":416,\"name\":{\"1265\":{}},\"comment\":{}}],[\"validate\",{\"_index\":608,\"name\":{\"1651\":{}},\"comment\":{}}],[\"valign\",{\"_index\":304,\"name\":{\"613\":{}},\"comment\":{}}],[\"value\",{\"_index\":663,\"name\":{\"1722\":{},\"3766\":{}},\"comment\":{}}],[\"version\",{\"_index\":516,\"name\":{\"1467\":{}},\"comment\":{}}],[\"vertical_bar_width\",{\"_index\":988,\"name\":{\"3997\":{}},\"comment\":{}}],[\"verticaljustify\",{\"_index\":83,\"name\":{\"88\":{},\"652\":{}},\"comment\":{}}],[\"verticaljustifystring\",{\"_index\":84,\"name\":{\"89\":{},\"653\":{}},\"comment\":{}}],[\"verticalpadding\",{\"_index\":1163,\"name\":{\"5267\":{}},\"comment\":{}}],[\"vex\",{\"_index\":1361,\"name\":{\"7055\":{}},\"comment\":{}}],[\"vibrato\",{\"_index\":542,\"name\":{\"1546\":{},\"7040\":{},\"7071\":{}},\"comment\":{}}],[\"vibrato_width\",{\"_index\":1370,\"name\":{\"7068\":{},\"7144\":{}},\"comment\":{}}],[\"vibratobracket\",{\"_index\":509,\"name\":{\"1457\":{},\"1547\":{},\"7041\":{},\"7137\":{}},\"comment\":{}}],[\"vibratorenderoptions\",{\"_index\":1367,\"name\":{\"7065\":{}},\"comment\":{}}],[\"visible\",{\"_index\":982,\"name\":{\"3991\":{}},\"comment\":{}}],[\"voice\",{\"_index\":468,\"name\":{\"1349\":{},\"1449\":{},\"1548\":{},\"7042\":{},\"7194\":{}},\"comment\":{}}],[\"voice_shift\",{\"_index\":1104,\"name\":{\"4437\":{}},\"comment\":{}}],[\"voicemode\",{\"_index\":552,\"name\":{\"1567\":{},\"7190\":{}},\"comment\":{}}],[\"voices\",{\"_index\":1196,\"name\":{\"5494\":{}},\"comment\":{}}],[\"voicetime\",{\"_index\":1376,\"name\":{\"7186\":{}},\"comment\":{}}],[\"volta\",{\"_index\":543,\"name\":{\"1549\":{},\"4975\":{},\"7043\":{}},\"comment\":{}}],[\"voltatype\",{\"_index\":549,\"name\":{\"1564\":{},\"4969\":{}},\"comment\":{}}],[\"w\",{\"_index\":238,\"name\":{\"530\":{},\"537\":{}},\"comment\":{}}],[\"warn\",{\"_index\":1355,\"name\":{\"7047\":{}},\"comment\":{}}],[\"wave_girth\",{\"_index\":1369,\"name\":{\"7067\":{},\"7146\":{}},\"comment\":{}}],[\"wave_height\",{\"_index\":1368,\"name\":{\"7066\":{},\"7145\":{}},\"comment\":{}}],[\"wave_width\",{\"_index\":1372,\"name\":{\"7070\":{},\"7148\":{}},\"comment\":{}}],[\"web_font_files\",{\"_index\":615,\"name\":{\"1658\":{}},\"comment\":{}}],[\"web_font_host\",{\"_index\":614,\"name\":{\"1657\":{}},\"comment\":{}}],[\"weight\",{\"_index\":580,\"name\":{\"1601\":{},\"5421\":{}},\"comment\":{}}],[\"width\",{\"_index\":225,\"name\":{\"452\":{},\"554\":{},\"562\":{},\"614\":{},\"765\":{},\"1408\":{},\"1987\":{},\"1997\":{},\"2984\":{},\"3118\":{},\"3786\":{},\"5050\":{},\"5434\":{},\"5509\":{},\"6483\":{},\"6545\":{}},\"comment\":{}}],[\"x\",{\"_index\":153,\"name\":{\"293\":{},\"449\":{},\"528\":{},\"535\":{},\"894\":{},\"1044\":{},\"1897\":{},\"2154\":{},\"2292\":{},\"2536\":{},\"2834\":{},\"3204\":{},\"3299\":{},\"3381\":{},\"3784\":{},\"3913\":{},\"4495\":{},\"5189\":{},\"5439\":{},\"5508\":{},\"5601\":{},\"6110\":{},\"6310\":{},\"6742\":{}},\"comment\":{}}],[\"x_begin\",{\"_index\":1151,\"name\":{\"5044\":{}},\"comment\":{}}],[\"x_end\",{\"_index\":1150,\"name\":{\"5043\":{}},\"comment\":{}}],[\"x_max\",{\"_index\":594,\"name\":{\"1630\":{},\"2000\":{}},\"comment\":{}}],[\"x_min\",{\"_index\":593,\"name\":{\"1629\":{},\"1999\":{}},\"comment\":{}}],[\"x_shift\",{\"_index\":362,\"name\":{\"760\":{},\"1125\":{},\"2001\":{},\"3295\":{}},\"comment\":{}}],[\"xmax\",{\"_index\":1086,\"name\":{\"4353\":{}},\"comment\":{}}],[\"xmin\",{\"_index\":1085,\"name\":{\"4352\":{},\"6547\":{}},\"comment\":{}}],[\"xoffset\",{\"_index\":900,\"name\":{\"3520\":{}},\"comment\":{}}],[\"xshift\",{\"_index\":302,\"name\":{\"611\":{}},\"comment\":{}}],[\"y\",{\"_index\":154,\"name\":{\"294\":{},\"529\":{},\"536\":{},\"895\":{},\"975\":{},\"1045\":{},\"1898\":{},\"2155\":{},\"2293\":{},\"2537\":{},\"2835\":{},\"3205\":{},\"3300\":{},\"3382\":{},\"3785\":{},\"3914\":{},\"4496\":{},\"5190\":{},\"5440\":{},\"5510\":{},\"5602\":{},\"6111\":{},\"6311\":{},\"6743\":{}},\"comment\":{}}],[\"y_bottom\",{\"_index\":1091,\"name\":{\"4420\":{},\"5041\":{}},\"comment\":{}}],[\"y_max\",{\"_index\":596,\"name\":{\"1632\":{}},\"comment\":{}}],[\"y_min\",{\"_index\":595,\"name\":{\"1631\":{}},\"comment\":{}}],[\"y_offset\",{\"_index\":1317,\"name\":{\"6897\":{}},\"comment\":{}}],[\"y_shift\",{\"_index\":110,\"name\":{\"248\":{},\"849\":{},\"999\":{},\"1126\":{},\"1855\":{},\"2002\":{},\"2110\":{},\"2346\":{},\"2580\":{},\"2789\":{},\"3159\":{},\"3337\":{},\"3869\":{},\"4234\":{},\"4552\":{},\"4927\":{},\"5145\":{},\"5645\":{},\"5775\":{},\"5936\":{},\"6065\":{},\"6265\":{},\"6697\":{}},\"comment\":{}}],[\"y_spacing_scale\",{\"_index\":1302,\"name\":{\"6825\":{}},\"comment\":{}}],[\"y_top\",{\"_index\":1090,\"name\":{\"4419\":{},\"5042\":{}},\"comment\":{}}],[\"yextent\",{\"_index\":1238,\"name\":{\"6200\":{}},\"comment\":{}}],[\"ymax\",{\"_index\":1240,\"name\":{\"6202\":{}},\"comment\":{}}],[\"ymin\",{\"_index\":1239,\"name\":{\"6201\":{}},\"comment\":{}}],[\"yoffset\",{\"_index\":309,\"name\":{\"619\":{},\"3521\":{}},\"comment\":{}}],[\"yshift\",{\"_index\":303,\"name\":{\"612\":{}},\"comment\":{}}],[\"zeroormore\",{\"_index\":920,\"name\":{\"3674\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file diff --git a/docs/api/classes/Accidental.html b/docs/api/classes/Accidental.html index ed3190667b..11e4cfd721 100644 --- a/docs/api/classes/Accidental.html +++ b/docs/api/classes/Accidental.html @@ -949,9 +949,9 @@
      • -
        line1: Line
      • +
        line1: StaveLineAccidentalLayoutMetrics
      • -
        line2: Line
      +
      line2: StaveLineAccidentalLayoutMetrics

      Returns boolean

      @@ -1256,7 +1256,6 @@

      FontModule
    1. GroupedResults
    2. KeyValue
    3. -
    4. Line
    5. Match
    6. ModifierContextMember
    7. PartialBeamDirection
    8. diff --git a/docs/api/classes/Annotation.html b/docs/api/classes/Annotation.html index 7a98f00a81..874b9ddc3c 100644 --- a/docs/api/classes/Annotation.html +++ b/docs/api/classes/Annotation.html @@ -1261,7 +1261,6 @@

      FontModule
    9. GroupedResults
    10. KeyValue
    11. -
    12. Line
    13. Match
    14. ModifierContextMember
    15. PartialBeamDirection
    16. diff --git a/docs/api/classes/Articulation.html b/docs/api/classes/Articulation.html index dae87a9c3f..06eb5da407 100644 --- a/docs/api/classes/Articulation.html +++ b/docs/api/classes/Articulation.html @@ -1259,7 +1259,6 @@

      FontModule
    17. GroupedResults
    18. KeyValue
    19. -
    20. Line
    21. Match
    22. ModifierContextMember
    23. PartialBeamDirection
    24. diff --git a/docs/api/classes/BarNote.html b/docs/api/classes/BarNote.html index 656131a69d..9b1c02a44d 100644 --- a/docs/api/classes/BarNote.html +++ b/docs/api/classes/BarNote.html @@ -2024,7 +2024,6 @@

      FontModule
    25. GroupedResults
    26. KeyValue
    27. -
    28. Line
    29. Match
    30. ModifierContextMember
    31. PartialBeamDirection
    32. diff --git a/docs/api/classes/Barline.html b/docs/api/classes/Barline.html index fc93d6ee17..eb46e18c2c 100644 --- a/docs/api/classes/Barline.html +++ b/docs/api/classes/Barline.html @@ -1145,7 +1145,6 @@

      FontModule
    33. GroupedResults
    34. KeyValue
    35. -
    36. Line
    37. Match
    38. ModifierContextMember
    39. PartialBeamDirection
    40. diff --git a/docs/api/classes/Beam.html b/docs/api/classes/Beam.html index 5bb4b0cf82..54be61d6fd 100644 --- a/docs/api/classes/Beam.html +++ b/docs/api/classes/Beam.html @@ -1216,7 +1216,6 @@

      FontModule
    41. GroupedResults
    42. KeyValue
    43. -
    44. Line
    45. Match
    46. ModifierContextMember
    47. PartialBeamDirection
    48. diff --git a/docs/api/classes/Bend.html b/docs/api/classes/Bend.html index 26ae8140aa..4be36b8b61 100644 --- a/docs/api/classes/Bend.html +++ b/docs/api/classes/Bend.html @@ -1250,7 +1250,6 @@

      FontModule
    49. GroupedResults
    50. KeyValue
    51. -
    52. Line
    53. Match
    54. ModifierContextMember
    55. PartialBeamDirection
    56. diff --git a/docs/api/classes/BoundingBox.html b/docs/api/classes/BoundingBox.html index aa675f0eed..2486becd97 100644 --- a/docs/api/classes/BoundingBox.html +++ b/docs/api/classes/BoundingBox.html @@ -465,7 +465,6 @@

      FontModule
    57. GroupedResults
    58. KeyValue
    59. -
    60. Line
    61. Match
    62. ModifierContextMember
    63. PartialBeamDirection
    64. diff --git a/docs/api/classes/BoundingBoxComputation.html b/docs/api/classes/BoundingBoxComputation.html index f0f4604533..7d5a5109fe 100644 --- a/docs/api/classes/BoundingBoxComputation.html +++ b/docs/api/classes/BoundingBoxComputation.html @@ -411,7 +411,6 @@

      FontModule
    65. GroupedResults
    66. KeyValue
    67. -
    68. Line
    69. Match
    70. ModifierContextMember
    71. PartialBeamDirection
    72. diff --git a/docs/api/classes/Builder.html b/docs/api/classes/Builder.html index f95f8c70e1..0427bab32d 100644 --- a/docs/api/classes/Builder.html +++ b/docs/api/classes/Builder.html @@ -462,7 +462,6 @@

      FontModule
    73. GroupedResults
    74. KeyValue
    75. -
    76. Line
    77. Match
    78. ModifierContextMember
    79. PartialBeamDirection
    80. diff --git a/docs/api/classes/CanvasContext.html b/docs/api/classes/CanvasContext.html index c1386e911f..b2a35b2474 100644 --- a/docs/api/classes/CanvasContext.html +++ b/docs/api/classes/CanvasContext.html @@ -919,7 +919,6 @@

      FontModule
    81. GroupedResults
    82. KeyValue
    83. -
    84. Line
    85. Match
    86. ModifierContextMember
    87. PartialBeamDirection
    88. diff --git a/docs/api/classes/ChordSymbol.html b/docs/api/classes/ChordSymbol.html index 41cbd7163b..ee491e5aa9 100644 --- a/docs/api/classes/ChordSymbol.html +++ b/docs/api/classes/ChordSymbol.html @@ -1678,7 +1678,6 @@

      FontModule
    89. GroupedResults
    90. KeyValue
    91. -
    92. Line
    93. Match
    94. ModifierContextMember
    95. PartialBeamDirection
    96. diff --git a/docs/api/classes/Clef.html b/docs/api/classes/Clef.html index 91075415d3..c2f2a56e6f 100644 --- a/docs/api/classes/Clef.html +++ b/docs/api/classes/Clef.html @@ -1133,7 +1133,6 @@

      FontModule
    97. GroupedResults
    98. KeyValue
    99. -
    100. Line
    101. Match
    102. ModifierContextMember
    103. PartialBeamDirection
    104. diff --git a/docs/api/classes/ClefNote.html b/docs/api/classes/ClefNote.html index e22bc77a03..58f84c3056 100644 --- a/docs/api/classes/ClefNote.html +++ b/docs/api/classes/ClefNote.html @@ -2022,7 +2022,6 @@

      FontModule
    105. GroupedResults
    106. KeyValue
    107. -
    108. Line
    109. Match
    110. ModifierContextMember
    111. PartialBeamDirection
    112. diff --git a/docs/api/classes/Crescendo.html b/docs/api/classes/Crescendo.html index 87103a418e..1cfe981eaa 100644 --- a/docs/api/classes/Crescendo.html +++ b/docs/api/classes/Crescendo.html @@ -2040,7 +2040,6 @@

      FontModule
    113. GroupedResults
    114. KeyValue
    115. -
    116. Line
    117. Match
    118. ModifierContextMember
    119. PartialBeamDirection
    120. diff --git a/docs/api/classes/Curve.html b/docs/api/classes/Curve.html index c00060b789..3104818320 100644 --- a/docs/api/classes/Curve.html +++ b/docs/api/classes/Curve.html @@ -940,7 +940,6 @@

      FontModule
    121. GroupedResults
    122. KeyValue
    123. -
    124. Line
    125. Match
    126. ModifierContextMember
    127. PartialBeamDirection
    128. diff --git a/docs/api/classes/Dot.html b/docs/api/classes/Dot.html index 2a2ee9a93c..9f2d15a842 100644 --- a/docs/api/classes/Dot.html +++ b/docs/api/classes/Dot.html @@ -1227,7 +1227,6 @@

      FontModule
    129. GroupedResults
    130. KeyValue
    131. -
    132. Line
    133. Match
    134. ModifierContextMember
    135. PartialBeamDirection
    136. diff --git a/docs/api/classes/EasyScore.html b/docs/api/classes/EasyScore.html index 2ac63c5553..1a467d8d88 100644 --- a/docs/api/classes/EasyScore.html +++ b/docs/api/classes/EasyScore.html @@ -462,7 +462,6 @@

      FontModule
    137. GroupedResults
    138. KeyValue
    139. -
    140. Line
    141. Match
    142. ModifierContextMember
    143. PartialBeamDirection
    144. diff --git a/docs/api/classes/EasyScoreGrammar.html b/docs/api/classes/EasyScoreGrammar.html index 8c2e2f68f6..776596008b 100644 --- a/docs/api/classes/EasyScoreGrammar.html +++ b/docs/api/classes/EasyScoreGrammar.html @@ -579,7 +579,6 @@

      FontModule
    145. GroupedResults
    146. KeyValue
    147. -
    148. Line
    149. Match
    150. ModifierContextMember
    151. PartialBeamDirection
    152. diff --git a/docs/api/classes/Element.html b/docs/api/classes/Element.html index 41374efeae..25abccffec 100644 --- a/docs/api/classes/Element.html +++ b/docs/api/classes/Element.html @@ -841,7 +841,6 @@

      FontModule
    153. GroupedResults
    154. KeyValue
    155. -
    156. Line
    157. Match
    158. ModifierContextMember
    159. PartialBeamDirection
    160. diff --git a/docs/api/classes/Factory.html b/docs/api/classes/Factory.html index a1790e0dd9..c640abe28d 100644 --- a/docs/api/classes/Factory.html +++ b/docs/api/classes/Factory.html @@ -1125,7 +1125,6 @@

      FontModule
    161. GroupedResults
    162. KeyValue
    163. -
    164. Line
    165. Match
    166. ModifierContextMember
    167. PartialBeamDirection
    168. diff --git a/docs/api/classes/Flow.html b/docs/api/classes/Flow.html index 7279bd8366..36b75612a9 100644 --- a/docs/api/classes/Flow.html +++ b/docs/api/classes/Flow.html @@ -1117,7 +1117,6 @@

      FontModule
    169. GroupedResults
    170. KeyValue
    171. -
    172. Line
    173. Match
    174. ModifierContextMember
    175. PartialBeamDirection
    176. diff --git a/docs/api/classes/Font.html b/docs/api/classes/Font.html index a1e29a12c1..6070cef2ca 100644 --- a/docs/api/classes/Font.html +++ b/docs/api/classes/Font.html @@ -621,7 +621,6 @@

      FontModule
    177. GroupedResults
    178. KeyValue
    179. -
    180. Line
    181. Match
    182. ModifierContextMember
    183. PartialBeamDirection
    184. diff --git a/docs/api/classes/Formatter.html b/docs/api/classes/Formatter.html index 02e4d161e8..8c1372c219 100644 --- a/docs/api/classes/Formatter.html +++ b/docs/api/classes/Formatter.html @@ -707,7 +707,6 @@

      FontModule
    185. GroupedResults
    186. KeyValue
    187. -
    188. Line
    189. Match
    190. ModifierContextMember
    191. PartialBeamDirection
    192. diff --git a/docs/api/classes/Fraction.html b/docs/api/classes/Fraction.html index dadb2a1668..59ae053ae4 100644 --- a/docs/api/classes/Fraction.html +++ b/docs/api/classes/Fraction.html @@ -633,7 +633,6 @@

      FontModule
    193. GroupedResults
    194. KeyValue
    195. -
    196. Line
    197. Match
    198. ModifierContextMember
    199. PartialBeamDirection
    200. diff --git a/docs/api/classes/FretHandFinger.html b/docs/api/classes/FretHandFinger.html index 192bcba17b..9ad77534ce 100644 --- a/docs/api/classes/FretHandFinger.html +++ b/docs/api/classes/FretHandFinger.html @@ -1249,7 +1249,6 @@

      FontModule
    201. GroupedResults
    202. KeyValue
    203. -
    204. Line
    205. Match
    206. ModifierContextMember
    207. PartialBeamDirection
    208. diff --git a/docs/api/classes/GhostNote.html b/docs/api/classes/GhostNote.html index 234c40bb0e..484bb05808 100644 --- a/docs/api/classes/GhostNote.html +++ b/docs/api/classes/GhostNote.html @@ -2195,7 +2195,6 @@

      FontModule
    209. GroupedResults
    210. KeyValue
    211. -
    212. Line
    213. Match
    214. ModifierContextMember
    215. PartialBeamDirection
    216. diff --git a/docs/api/classes/Glyph.html b/docs/api/classes/Glyph.html index 13cd92fd20..c7d5d4bab7 100644 --- a/docs/api/classes/Glyph.html +++ b/docs/api/classes/Glyph.html @@ -1269,7 +1269,6 @@

      FontModule
    217. GroupedResults
    218. KeyValue
    219. -
    220. Line
    221. Match
    222. ModifierContextMember
    223. PartialBeamDirection
    224. diff --git a/docs/api/classes/GlyphNote.html b/docs/api/classes/GlyphNote.html index 9c3e6a59a1..4800dedaa1 100644 --- a/docs/api/classes/GlyphNote.html +++ b/docs/api/classes/GlyphNote.html @@ -2021,7 +2021,6 @@

      FontModule
    225. GroupedResults
    226. KeyValue
    227. -
    228. Line
    229. Match
    230. ModifierContextMember
    231. PartialBeamDirection
    232. diff --git a/docs/api/classes/GraceNote.html b/docs/api/classes/GraceNote.html index bbcad03749..bb9e2414b9 100644 --- a/docs/api/classes/GraceNote.html +++ b/docs/api/classes/GraceNote.html @@ -2634,7 +2634,6 @@

      FontModule
    233. GroupedResults
    234. KeyValue
    235. -
    236. Line
    237. Match
    238. ModifierContextMember
    239. PartialBeamDirection
    240. diff --git a/docs/api/classes/GraceNoteGroup.html b/docs/api/classes/GraceNoteGroup.html index 8074cb6a45..581955e27b 100644 --- a/docs/api/classes/GraceNoteGroup.html +++ b/docs/api/classes/GraceNoteGroup.html @@ -1223,7 +1223,6 @@

      FontModule
    241. GroupedResults
    242. KeyValue
    243. -
    244. Line
    245. Match
    246. ModifierContextMember
    247. PartialBeamDirection
    248. diff --git a/docs/api/classes/GraceTabNote.html b/docs/api/classes/GraceTabNote.html index cefa3e66ac..f491b0bfd1 100644 --- a/docs/api/classes/GraceTabNote.html +++ b/docs/api/classes/GraceTabNote.html @@ -2290,7 +2290,6 @@

      FontModule
    249. GroupedResults
    250. KeyValue
    251. -
    252. Line
    253. Match
    254. ModifierContextMember
    255. PartialBeamDirection
    256. diff --git a/docs/api/classes/KeyManager.html b/docs/api/classes/KeyManager.html index 9b45600042..88b0d0e805 100644 --- a/docs/api/classes/KeyManager.html +++ b/docs/api/classes/KeyManager.html @@ -337,7 +337,6 @@

      FontModule
    257. GroupedResults
    258. KeyValue
    259. -
    260. Line
    261. Match
    262. ModifierContextMember
    263. PartialBeamDirection
    264. diff --git a/docs/api/classes/KeySigNote.html b/docs/api/classes/KeySigNote.html index 712cc5b4fd..891014b956 100644 --- a/docs/api/classes/KeySigNote.html +++ b/docs/api/classes/KeySigNote.html @@ -1998,7 +1998,6 @@

      FontModule
    265. GroupedResults
    266. KeyValue
    267. -
    268. Line
    269. Match
    270. ModifierContextMember
    271. PartialBeamDirection
    272. diff --git a/docs/api/classes/KeySignature.html b/docs/api/classes/KeySignature.html index 094af48386..cdda55b48d 100644 --- a/docs/api/classes/KeySignature.html +++ b/docs/api/classes/KeySignature.html @@ -1205,7 +1205,6 @@

      FontModule
    273. GroupedResults
    274. KeyValue
    275. -
    276. Line
    277. Match
    278. ModifierContextMember
    279. PartialBeamDirection
    280. diff --git a/docs/api/classes/Modifier.html b/docs/api/classes/Modifier.html index a8f73192db..1f2103dcae 100644 --- a/docs/api/classes/Modifier.html +++ b/docs/api/classes/Modifier.html @@ -1156,7 +1156,6 @@

      FontModule
    281. GroupedResults
    282. KeyValue
    283. -
    284. Line
    285. Match
    286. ModifierContextMember
    287. PartialBeamDirection
    288. diff --git a/docs/api/classes/ModifierContext.html b/docs/api/classes/ModifierContext.html index d77fb50728..2c8255c4e7 100644 --- a/docs/api/classes/ModifierContext.html +++ b/docs/api/classes/ModifierContext.html @@ -389,7 +389,6 @@

      FontModule
    289. GroupedResults
    290. KeyValue
    291. -
    292. Line
    293. Match
    294. ModifierContextMember
    295. PartialBeamDirection
    296. diff --git a/docs/api/classes/MultiMeasureRest.html b/docs/api/classes/MultiMeasureRest.html index a96687decd..cfb193264a 100644 --- a/docs/api/classes/MultiMeasureRest.html +++ b/docs/api/classes/MultiMeasureRest.html @@ -961,7 +961,6 @@

      FontModule
    297. GroupedResults
    298. KeyValue
    299. -
    300. Line
    301. Match
    302. ModifierContextMember
    303. PartialBeamDirection
    304. diff --git a/docs/api/classes/Music.html b/docs/api/classes/Music.html index 95d8bdc7d8..75aae2cf7c 100644 --- a/docs/api/classes/Music.html +++ b/docs/api/classes/Music.html @@ -576,7 +576,6 @@

      FontModule
    305. GroupedResults
    306. KeyValue
    307. -
    308. Line
    309. Match
    310. ModifierContextMember
    311. PartialBeamDirection
    312. diff --git a/docs/api/classes/Note.html b/docs/api/classes/Note.html index 7ec5500a4c..d3c02ba9fb 100644 --- a/docs/api/classes/Note.html +++ b/docs/api/classes/Note.html @@ -1972,7 +1972,6 @@

      FontModule
    313. GroupedResults
    314. KeyValue
    315. -
    316. Line
    317. Match
    318. ModifierContextMember
    319. PartialBeamDirection
    320. diff --git a/docs/api/classes/NoteHead.html b/docs/api/classes/NoteHead.html index 2579f3554d..7cacbacba6 100644 --- a/docs/api/classes/NoteHead.html +++ b/docs/api/classes/NoteHead.html @@ -2076,7 +2076,6 @@

      FontModule
    321. GroupedResults
    322. KeyValue
    323. -
    324. Line
    325. Match
    326. ModifierContextMember
    327. PartialBeamDirection
    328. diff --git a/docs/api/classes/NoteSubGroup.html b/docs/api/classes/NoteSubGroup.html index fbd540ad06..da31d8f5d4 100644 --- a/docs/api/classes/NoteSubGroup.html +++ b/docs/api/classes/NoteSubGroup.html @@ -1190,7 +1190,6 @@

      FontModule
    329. GroupedResults
    330. KeyValue
    331. -
    332. Line
    333. Match
    334. ModifierContextMember
    335. PartialBeamDirection
    336. diff --git a/docs/api/classes/Ornament.html b/docs/api/classes/Ornament.html index 14810316a6..4fbfeabb7c 100644 --- a/docs/api/classes/Ornament.html +++ b/docs/api/classes/Ornament.html @@ -1321,7 +1321,6 @@

      FontModule
    337. GroupedResults
    338. KeyValue
    339. -
    340. Line
    341. Match
    342. ModifierContextMember
    343. PartialBeamDirection
    344. diff --git a/docs/api/classes/Parenthesis.html b/docs/api/classes/Parenthesis.html index 43efeca7a2..a886f6f2fe 100644 --- a/docs/api/classes/Parenthesis.html +++ b/docs/api/classes/Parenthesis.html @@ -1194,7 +1194,6 @@

      FontModule
    345. GroupedResults
    346. KeyValue
    347. -
    348. Line
    349. Match
    350. ModifierContextMember
    351. PartialBeamDirection
    352. diff --git a/docs/api/classes/Parser.html b/docs/api/classes/Parser.html index bc8fb05b29..91c79d8bd7 100644 --- a/docs/api/classes/Parser.html +++ b/docs/api/classes/Parser.html @@ -383,7 +383,6 @@

      FontModule
    353. GroupedResults
    354. KeyValue
    355. -
    356. Line
    357. Match
    358. ModifierContextMember
    359. PartialBeamDirection
    360. diff --git a/docs/api/classes/PedalMarking.html b/docs/api/classes/PedalMarking.html index db0e47bf68..c7a85526c5 100644 --- a/docs/api/classes/PedalMarking.html +++ b/docs/api/classes/PedalMarking.html @@ -1032,7 +1032,6 @@

      FontModule
    361. GroupedResults
    362. KeyValue
    363. -
    364. Line
    365. Match
    366. ModifierContextMember
    367. PartialBeamDirection
    368. diff --git a/docs/api/classes/Piece.html b/docs/api/classes/Piece.html index bdd3bc1d16..14866634f9 100644 --- a/docs/api/classes/Piece.html +++ b/docs/api/classes/Piece.html @@ -298,7 +298,6 @@

      FontModule
    369. GroupedResults
    370. KeyValue
    371. -
    372. Line
    373. Match
    374. ModifierContextMember
    375. PartialBeamDirection
    376. diff --git a/docs/api/classes/Registry.html b/docs/api/classes/Registry.html index 7937412065..34ce6206f5 100644 --- a/docs/api/classes/Registry.html +++ b/docs/api/classes/Registry.html @@ -418,7 +418,6 @@

      FontModule
    377. GroupedResults
    378. KeyValue
    379. -
    380. Line
    381. Match
    382. ModifierContextMember
    383. PartialBeamDirection
    384. diff --git a/docs/api/classes/RenderContext.html b/docs/api/classes/RenderContext.html index d5dcb5034b..e73b126e7d 100644 --- a/docs/api/classes/RenderContext.html +++ b/docs/api/classes/RenderContext.html @@ -786,7 +786,6 @@

      FontModule
    385. GroupedResults
    386. KeyValue
    387. -
    388. Line
    389. Match
    390. ModifierContextMember
    391. PartialBeamDirection
    392. diff --git a/docs/api/classes/Renderer.html b/docs/api/classes/Renderer.html index b602604ffe..3c067cef2e 100644 --- a/docs/api/classes/Renderer.html +++ b/docs/api/classes/Renderer.html @@ -406,7 +406,6 @@

      FontModule
    393. GroupedResults
    394. KeyValue
    395. -
    396. Line
    397. Match
    398. ModifierContextMember
    399. PartialBeamDirection
    400. diff --git a/docs/api/classes/RepeatNote.html b/docs/api/classes/RepeatNote.html index fe2f348798..387f108b27 100644 --- a/docs/api/classes/RepeatNote.html +++ b/docs/api/classes/RepeatNote.html @@ -2021,7 +2021,6 @@

      FontModule
    401. GroupedResults
    402. KeyValue
    403. -
    404. Line
    405. Match
    406. ModifierContextMember
    407. PartialBeamDirection
    408. diff --git a/docs/api/classes/Repetition.html b/docs/api/classes/Repetition.html index 6d0ab49322..97349ba243 100644 --- a/docs/api/classes/Repetition.html +++ b/docs/api/classes/Repetition.html @@ -1174,7 +1174,6 @@

      FontModule
    409. GroupedResults
    410. KeyValue
    411. -
    412. Line
    413. Match
    414. ModifierContextMember
    415. PartialBeamDirection
    416. diff --git a/docs/api/classes/RuntimeError.html b/docs/api/classes/RuntimeError.html index 7662e96856..4f6f61c169 100644 --- a/docs/api/classes/RuntimeError.html +++ b/docs/api/classes/RuntimeError.html @@ -353,7 +353,6 @@

      FontModule
    417. GroupedResults
    418. KeyValue
    419. -
    420. Line
    421. Match
    422. ModifierContextMember
    423. PartialBeamDirection
    424. diff --git a/docs/api/classes/SVGContext.html b/docs/api/classes/SVGContext.html index 8f5d0408f1..54993becdd 100644 --- a/docs/api/classes/SVGContext.html +++ b/docs/api/classes/SVGContext.html @@ -1044,7 +1044,6 @@

      FontModule
    425. GroupedResults
    426. KeyValue
    427. -
    428. Line
    429. Match
    430. ModifierContextMember
    431. PartialBeamDirection
    432. diff --git a/docs/api/classes/Stave.html b/docs/api/classes/Stave.html index b614ff6d49..69f7aae74e 100644 --- a/docs/api/classes/Stave.html +++ b/docs/api/classes/Stave.html @@ -1734,7 +1734,6 @@

      FontModule
    433. GroupedResults
    434. KeyValue
    435. -
    436. Line
    437. Match
    438. ModifierContextMember
    439. PartialBeamDirection
    440. diff --git a/docs/api/classes/StaveConnector.html b/docs/api/classes/StaveConnector.html index f871093ef4..7aaf97123b 100644 --- a/docs/api/classes/StaveConnector.html +++ b/docs/api/classes/StaveConnector.html @@ -977,7 +977,6 @@

      FontModule
    441. GroupedResults
    442. KeyValue
    443. -
    444. Line
    445. Match
    446. ModifierContextMember
    447. PartialBeamDirection
    448. diff --git a/docs/api/classes/StaveHairpin.html b/docs/api/classes/StaveHairpin.html index 68854883ff..5c0068bb85 100644 --- a/docs/api/classes/StaveHairpin.html +++ b/docs/api/classes/StaveHairpin.html @@ -989,7 +989,6 @@

      FontModule
    449. GroupedResults
    450. KeyValue
    451. -
    452. Line
    453. Match
    454. ModifierContextMember
    455. PartialBeamDirection
    456. diff --git a/docs/api/classes/StaveLine.html b/docs/api/classes/StaveLine.html index 5a8ddeccb0..bb06428d49 100644 --- a/docs/api/classes/StaveLine.html +++ b/docs/api/classes/StaveLine.html @@ -956,7 +956,6 @@

      FontModule
    457. GroupedResults
    458. KeyValue
    459. -
    460. Line
    461. Match
    462. ModifierContextMember
    463. PartialBeamDirection
    464. diff --git a/docs/api/classes/StaveModifier.html b/docs/api/classes/StaveModifier.html index 4cf6c3539d..0977a41241 100644 --- a/docs/api/classes/StaveModifier.html +++ b/docs/api/classes/StaveModifier.html @@ -1049,7 +1049,6 @@

      FontModule
    465. GroupedResults
    466. KeyValue
    467. -
    468. Line
    469. Match
    470. ModifierContextMember
    471. PartialBeamDirection
    472. diff --git a/docs/api/classes/StaveNote.html b/docs/api/classes/StaveNote.html index 39e77ae850..1f5649d02a 100644 --- a/docs/api/classes/StaveNote.html +++ b/docs/api/classes/StaveNote.html @@ -2568,7 +2568,6 @@

      FontModule
    473. GroupedResults
    474. KeyValue
    475. -
    476. Line
    477. Match
    478. ModifierContextMember
    479. PartialBeamDirection
    480. diff --git a/docs/api/classes/StaveSection.html b/docs/api/classes/StaveSection.html index 53e91e0e2b..bb93577444 100644 --- a/docs/api/classes/StaveSection.html +++ b/docs/api/classes/StaveSection.html @@ -1106,7 +1106,6 @@

      FontModule
    481. GroupedResults
    482. KeyValue
    483. -
    484. Line
    485. Match
    486. ModifierContextMember
    487. PartialBeamDirection
    488. diff --git a/docs/api/classes/StaveTempo.html b/docs/api/classes/StaveTempo.html index 8a96004ebf..626bbaccd5 100644 --- a/docs/api/classes/StaveTempo.html +++ b/docs/api/classes/StaveTempo.html @@ -1116,7 +1116,6 @@

      FontModule
    489. GroupedResults
    490. KeyValue
    491. -
    492. Line
    493. Match
    494. ModifierContextMember
    495. PartialBeamDirection
    496. diff --git a/docs/api/classes/StaveText.html b/docs/api/classes/StaveText.html index 4ca27b3dd2..fafcb88973 100644 --- a/docs/api/classes/StaveText.html +++ b/docs/api/classes/StaveText.html @@ -1122,7 +1122,6 @@

      FontModule
    497. GroupedResults
    498. KeyValue
    499. -
    500. Line
    501. Match
    502. ModifierContextMember
    503. PartialBeamDirection
    504. diff --git a/docs/api/classes/StaveTie.html b/docs/api/classes/StaveTie.html index b2439a44a4..40022785aa 100644 --- a/docs/api/classes/StaveTie.html +++ b/docs/api/classes/StaveTie.html @@ -988,7 +988,6 @@

      FontModule
    505. GroupedResults
    506. KeyValue
    507. -
    508. Line
    509. Match
    510. ModifierContextMember
    511. PartialBeamDirection
    512. diff --git a/docs/api/classes/Stem.html b/docs/api/classes/Stem.html index 8d031c3884..7b1e55f617 100644 --- a/docs/api/classes/Stem.html +++ b/docs/api/classes/Stem.html @@ -1047,7 +1047,6 @@

      FontModule
    513. GroupedResults
    514. KeyValue
    515. -
    516. Line
    517. Match
    518. ModifierContextMember
    519. PartialBeamDirection
    520. diff --git a/docs/api/classes/StemmableNote.html b/docs/api/classes/StemmableNote.html index 59c0aa91d2..441525b380 100644 --- a/docs/api/classes/StemmableNote.html +++ b/docs/api/classes/StemmableNote.html @@ -2187,7 +2187,6 @@

      FontModule
    521. GroupedResults
    522. KeyValue
    523. -
    524. Line
    525. Match
    526. ModifierContextMember
    527. PartialBeamDirection
    528. diff --git a/docs/api/classes/StringNumber.html b/docs/api/classes/StringNumber.html index a776ac95fe..9e5d68258b 100644 --- a/docs/api/classes/StringNumber.html +++ b/docs/api/classes/StringNumber.html @@ -1281,7 +1281,6 @@

      FontModule
    529. GroupedResults
    530. KeyValue
    531. -
    532. Line
    533. Match
    534. ModifierContextMember
    535. PartialBeamDirection
    536. diff --git a/docs/api/classes/Stroke.html b/docs/api/classes/Stroke.html index badbdbdefc..3d7897eb87 100644 --- a/docs/api/classes/Stroke.html +++ b/docs/api/classes/Stroke.html @@ -1232,7 +1232,6 @@

      FontModule
    537. GroupedResults
    538. KeyValue
    539. -
    540. Line
    541. Match
    542. ModifierContextMember
    543. PartialBeamDirection
    544. diff --git a/docs/api/classes/System.html b/docs/api/classes/System.html index e40dbd5efa..4441c8886f 100644 --- a/docs/api/classes/System.html +++ b/docs/api/classes/System.html @@ -1012,7 +1012,6 @@

      FontModule
    545. GroupedResults
    546. KeyValue
    547. -
    548. Line
    549. Match
    550. ModifierContextMember
    551. PartialBeamDirection
    552. diff --git a/docs/api/classes/TabNote.html b/docs/api/classes/TabNote.html index 8915371454..2112f05662 100644 --- a/docs/api/classes/TabNote.html +++ b/docs/api/classes/TabNote.html @@ -2284,7 +2284,6 @@

      FontModule
    553. GroupedResults
    554. KeyValue
    555. -
    556. Line
    557. Match
    558. ModifierContextMember
    559. PartialBeamDirection
    560. diff --git a/docs/api/classes/TabSlide.html b/docs/api/classes/TabSlide.html index db1910548d..7f73f0c760 100644 --- a/docs/api/classes/TabSlide.html +++ b/docs/api/classes/TabSlide.html @@ -1065,7 +1065,6 @@

      FontModule
    561. GroupedResults
    562. KeyValue
    563. -
    564. Line
    565. Match
    566. ModifierContextMember
    567. PartialBeamDirection
    568. diff --git a/docs/api/classes/TabStave.html b/docs/api/classes/TabStave.html index 97eb8d9bc2..9e6d3cadd0 100644 --- a/docs/api/classes/TabStave.html +++ b/docs/api/classes/TabStave.html @@ -1806,7 +1806,6 @@

      FontModule
    569. GroupedResults
    570. KeyValue
    571. -
    572. Line
    573. Match
    574. ModifierContextMember
    575. PartialBeamDirection
    576. diff --git a/docs/api/classes/TabTie.html b/docs/api/classes/TabTie.html index 02d2002eab..ba4d12a728 100644 --- a/docs/api/classes/TabTie.html +++ b/docs/api/classes/TabTie.html @@ -1021,7 +1021,6 @@

      FontModule
    577. GroupedResults
    578. KeyValue
    579. -
    580. Line
    581. Match
    582. ModifierContextMember
    583. PartialBeamDirection
    584. diff --git a/docs/api/classes/TextBracket.html b/docs/api/classes/TextBracket.html index fb896bd283..db3297a170 100644 --- a/docs/api/classes/TextBracket.html +++ b/docs/api/classes/TextBracket.html @@ -973,7 +973,6 @@

      FontModule
    585. GroupedResults
    586. KeyValue
    587. -
    588. Line
    589. Match
    590. ModifierContextMember
    591. PartialBeamDirection
    592. diff --git a/docs/api/classes/TextDynamics.html b/docs/api/classes/TextDynamics.html index 3436396025..31693391d4 100644 --- a/docs/api/classes/TextDynamics.html +++ b/docs/api/classes/TextDynamics.html @@ -2031,7 +2031,6 @@

      FontModule
    593. GroupedResults
    594. KeyValue
    595. -
    596. Line
    597. Match
    598. ModifierContextMember
    599. PartialBeamDirection
    600. diff --git a/docs/api/classes/TextFormatter.html b/docs/api/classes/TextFormatter.html index d58af4010f..32b486a485 100644 --- a/docs/api/classes/TextFormatter.html +++ b/docs/api/classes/TextFormatter.html @@ -495,7 +495,6 @@

      FontModule
    601. GroupedResults
    602. KeyValue
    603. -
    604. Line
    605. Match
    606. ModifierContextMember
    607. PartialBeamDirection
    608. diff --git a/docs/api/classes/TextNote.html b/docs/api/classes/TextNote.html index 4cf55a0bb4..f0613a9890 100644 --- a/docs/api/classes/TextNote.html +++ b/docs/api/classes/TextNote.html @@ -2058,7 +2058,6 @@

      FontModule
    609. GroupedResults
    610. KeyValue
    611. -
    612. Line
    613. Match
    614. ModifierContextMember
    615. PartialBeamDirection
    616. diff --git a/docs/api/classes/TickContext.html b/docs/api/classes/TickContext.html index 7ac79b4662..b3058d36fa 100644 --- a/docs/api/classes/TickContext.html +++ b/docs/api/classes/TickContext.html @@ -537,7 +537,6 @@

      FontModule
    617. GroupedResults
    618. KeyValue
    619. -
    620. Line
    621. Match
    622. ModifierContextMember
    623. PartialBeamDirection
    624. diff --git a/docs/api/classes/Tickable.html b/docs/api/classes/Tickable.html index 608bd2bde5..5e51a77bcb 100644 --- a/docs/api/classes/Tickable.html +++ b/docs/api/classes/Tickable.html @@ -1374,7 +1374,6 @@

      FontModule
    625. GroupedResults
    626. KeyValue
    627. -
    628. Line
    629. Match
    630. ModifierContextMember
    631. PartialBeamDirection
    632. diff --git a/docs/api/classes/TimeSigNote.html b/docs/api/classes/TimeSigNote.html index 3c39407817..44542bbd36 100644 --- a/docs/api/classes/TimeSigNote.html +++ b/docs/api/classes/TimeSigNote.html @@ -1996,7 +1996,6 @@

      FontModule
    633. GroupedResults
    634. KeyValue
    635. -
    636. Line
    637. Match
    638. ModifierContextMember
    639. PartialBeamDirection
    640. diff --git a/docs/api/classes/TimeSignature.html b/docs/api/classes/TimeSignature.html index 1447a56c49..bc019ba894 100644 --- a/docs/api/classes/TimeSignature.html +++ b/docs/api/classes/TimeSignature.html @@ -1232,7 +1232,6 @@

      FontModule
    641. GroupedResults
    642. KeyValue
    643. -
    644. Line
    645. Match
    646. ModifierContextMember
    647. PartialBeamDirection
    648. diff --git a/docs/api/classes/TimeSignatureGlyph.html b/docs/api/classes/TimeSignatureGlyph.html index 9979349df3..3ef485d337 100644 --- a/docs/api/classes/TimeSignatureGlyph.html +++ b/docs/api/classes/TimeSignatureGlyph.html @@ -1338,7 +1338,6 @@

      FontModule
    649. GroupedResults
    650. KeyValue
    651. -
    652. Line
    653. Match
    654. ModifierContextMember
    655. PartialBeamDirection
    656. diff --git a/docs/api/classes/Tremolo.html b/docs/api/classes/Tremolo.html index d1ade81287..ccd698f76e 100644 --- a/docs/api/classes/Tremolo.html +++ b/docs/api/classes/Tremolo.html @@ -1176,7 +1176,6 @@

      FontModule
    657. GroupedResults
    658. KeyValue
    659. -
    660. Line
    661. Match
    662. ModifierContextMember
    663. PartialBeamDirection
    664. diff --git a/docs/api/classes/Tuning.html b/docs/api/classes/Tuning.html index b23e4bc48a..69af724803 100644 --- a/docs/api/classes/Tuning.html +++ b/docs/api/classes/Tuning.html @@ -369,7 +369,6 @@

      FontModule
    665. GroupedResults
    666. KeyValue
    667. -
    668. Line
    669. Match
    670. ModifierContextMember
    671. PartialBeamDirection
    672. diff --git a/docs/api/classes/Tuplet.html b/docs/api/classes/Tuplet.html index 9b9351fe51..4e57ee6f78 100644 --- a/docs/api/classes/Tuplet.html +++ b/docs/api/classes/Tuplet.html @@ -1056,7 +1056,6 @@

      FontModule
    673. GroupedResults
    674. KeyValue
    675. -
    676. Line
    677. Match
    678. ModifierContextMember
    679. PartialBeamDirection
    680. diff --git a/docs/api/classes/Vex.html b/docs/api/classes/Vex.html index 0ce39f2333..49a1b3e4d5 100644 --- a/docs/api/classes/Vex.html +++ b/docs/api/classes/Vex.html @@ -358,7 +358,6 @@

      FontModule
    681. GroupedResults
    682. KeyValue
    683. -
    684. Line
    685. Match
    686. ModifierContextMember
    687. PartialBeamDirection
    688. diff --git a/docs/api/classes/Vibrato.html b/docs/api/classes/Vibrato.html index 45fd085e86..55fe2096d4 100644 --- a/docs/api/classes/Vibrato.html +++ b/docs/api/classes/Vibrato.html @@ -1231,7 +1231,6 @@

      FontModule
    689. GroupedResults
    690. KeyValue
    691. -
    692. Line
    693. Match
    694. ModifierContextMember
    695. PartialBeamDirection
    696. diff --git a/docs/api/classes/VibratoBracket.html b/docs/api/classes/VibratoBracket.html index 93977919db..5552918454 100644 --- a/docs/api/classes/VibratoBracket.html +++ b/docs/api/classes/VibratoBracket.html @@ -925,7 +925,6 @@

      FontModule
    697. GroupedResults
    698. KeyValue
    699. -
    700. Line
    701. Match
    702. ModifierContextMember
    703. PartialBeamDirection
    704. diff --git a/docs/api/classes/Voice.html b/docs/api/classes/Voice.html index 3c2462868b..416e018859 100644 --- a/docs/api/classes/Voice.html +++ b/docs/api/classes/Voice.html @@ -1113,7 +1113,6 @@

      FontModule
    705. GroupedResults
    706. KeyValue
    707. -
    708. Line
    709. Match
    710. ModifierContextMember
    711. PartialBeamDirection
    712. diff --git a/docs/api/classes/Volta.html b/docs/api/classes/Volta.html index b5231a4fe5..baf9ca7905 100644 --- a/docs/api/classes/Volta.html +++ b/docs/api/classes/Volta.html @@ -1088,7 +1088,6 @@

      FontModule
    713. GroupedResults
    714. KeyValue
    715. -
    716. Line
    717. Match
    718. ModifierContextMember
    719. PartialBeamDirection
    720. diff --git a/docs/api/enums/AnnotationHorizontalJustify.html b/docs/api/enums/AnnotationHorizontalJustify.html index 220ed2e549..96b6bc32b9 100644 --- a/docs/api/enums/AnnotationHorizontalJustify.html +++ b/docs/api/enums/AnnotationHorizontalJustify.html @@ -266,7 +266,6 @@

      FontModule
    721. GroupedResults
    722. KeyValue
    723. -
    724. Line
    725. Match
    726. ModifierContextMember
    727. PartialBeamDirection
    728. diff --git a/docs/api/enums/AnnotationVerticalJustify.html b/docs/api/enums/AnnotationVerticalJustify.html index b2af9832ad..12f324720f 100644 --- a/docs/api/enums/AnnotationVerticalJustify.html +++ b/docs/api/enums/AnnotationVerticalJustify.html @@ -266,7 +266,6 @@

      FontModule
    729. GroupedResults
    730. KeyValue
    731. -
    732. Line
    733. Match
    734. ModifierContextMember
    735. PartialBeamDirection
    736. diff --git a/docs/api/enums/BarlineType.html b/docs/api/enums/BarlineType.html index 436b71d859..5368e7ff9a 100644 --- a/docs/api/enums/BarlineType.html +++ b/docs/api/enums/BarlineType.html @@ -281,7 +281,6 @@

      FontModule
    737. GroupedResults
    738. KeyValue
    739. -
    740. Line
    741. Match
    742. ModifierContextMember
    743. PartialBeamDirection
    744. diff --git a/docs/api/enums/Category.html b/docs/api/enums/Category.html index 2e7ab05134..6e8078af89 100644 --- a/docs/api/enums/Category.html +++ b/docs/api/enums/Category.html @@ -576,7 +576,6 @@

      FontModule
    745. GroupedResults
    746. KeyValue
    747. -
    748. Line
    749. Match
    750. ModifierContextMember
    751. PartialBeamDirection
    752. diff --git a/docs/api/enums/ChordSymbolHorizontalJustify.html b/docs/api/enums/ChordSymbolHorizontalJustify.html index 53f0dc6c9c..dedbfa4dc7 100644 --- a/docs/api/enums/ChordSymbolHorizontalJustify.html +++ b/docs/api/enums/ChordSymbolHorizontalJustify.html @@ -266,7 +266,6 @@

      FontModule
    753. GroupedResults
    754. KeyValue
    755. -
    756. Line
    757. Match
    758. ModifierContextMember
    759. PartialBeamDirection
    760. diff --git a/docs/api/enums/ChordSymbolVerticalJustify.html b/docs/api/enums/ChordSymbolVerticalJustify.html index 1677b47b6a..3dc4dc07bb 100644 --- a/docs/api/enums/ChordSymbolVerticalJustify.html +++ b/docs/api/enums/ChordSymbolVerticalJustify.html @@ -256,7 +256,6 @@

      FontModule
    761. GroupedResults
    762. KeyValue
    763. -
    764. Line
    765. Match
    766. ModifierContextMember
    767. PartialBeamDirection
    768. diff --git a/docs/api/enums/CurvePosition.html b/docs/api/enums/CurvePosition.html index 12948bca6b..acf2dcfdd2 100644 --- a/docs/api/enums/CurvePosition.html +++ b/docs/api/enums/CurvePosition.html @@ -256,7 +256,6 @@

      FontModule
    769. GroupedResults
    770. KeyValue
    771. -
    772. Line
    773. Match
    774. ModifierContextMember
    775. PartialBeamDirection
    776. diff --git a/docs/api/enums/FontStyle.html b/docs/api/enums/FontStyle.html index eceae2cb10..1113d1ef34 100644 --- a/docs/api/enums/FontStyle.html +++ b/docs/api/enums/FontStyle.html @@ -256,7 +256,6 @@

      FontModule
    777. GroupedResults
    778. KeyValue
    779. -
    780. Line
    781. Match
    782. ModifierContextMember
    783. PartialBeamDirection
    784. diff --git a/docs/api/enums/FontWeight.html b/docs/api/enums/FontWeight.html index 1b22770bd7..35e9999da0 100644 --- a/docs/api/enums/FontWeight.html +++ b/docs/api/enums/FontWeight.html @@ -256,7 +256,6 @@

      FontModule
    785. GroupedResults
    786. KeyValue
    787. -
    788. Line
    789. Match
    790. ModifierContextMember
    791. PartialBeamDirection
    792. diff --git a/docs/api/enums/ModifierPosition.html b/docs/api/enums/ModifierPosition.html index 14f1184543..37c5b7f06d 100644 --- a/docs/api/enums/ModifierPosition.html +++ b/docs/api/enums/ModifierPosition.html @@ -271,7 +271,6 @@

      FontModule
    793. GroupedResults
    794. KeyValue
    795. -
    796. Line
    797. Match
    798. ModifierContextMember
    799. PartialBeamDirection
    800. diff --git a/docs/api/enums/OutlineCode.html b/docs/api/enums/OutlineCode.html index 383580affb..1c20e07d20 100644 --- a/docs/api/enums/OutlineCode.html +++ b/docs/api/enums/OutlineCode.html @@ -266,7 +266,6 @@

      FontModule
    801. GroupedResults
    802. KeyValue
    803. -
    804. Line
    805. Match
    806. ModifierContextMember
    807. PartialBeamDirection
    808. diff --git a/docs/api/enums/RendererBackends.html b/docs/api/enums/RendererBackends.html index 6e83490079..8790e2559a 100644 --- a/docs/api/enums/RendererBackends.html +++ b/docs/api/enums/RendererBackends.html @@ -256,7 +256,6 @@

      FontModule
    809. GroupedResults
    810. KeyValue
    811. -
    812. Line
    813. Match
    814. ModifierContextMember
    815. PartialBeamDirection
    816. diff --git a/docs/api/enums/RendererLineEndType.html b/docs/api/enums/RendererLineEndType.html index eb92f08cdc..04d388e179 100644 --- a/docs/api/enums/RendererLineEndType.html +++ b/docs/api/enums/RendererLineEndType.html @@ -261,7 +261,6 @@

      FontModule
    817. GroupedResults
    818. KeyValue
    819. -
    820. Line
    821. Match
    822. ModifierContextMember
    823. PartialBeamDirection
    824. diff --git a/docs/api/enums/StaveModifierPosition.html b/docs/api/enums/StaveModifierPosition.html index 58fc3829d4..68074bebf9 100644 --- a/docs/api/enums/StaveModifierPosition.html +++ b/docs/api/enums/StaveModifierPosition.html @@ -281,7 +281,6 @@

      FontModule
    825. GroupedResults
    826. KeyValue
    827. -
    828. Line
    829. Match
    830. ModifierContextMember
    831. PartialBeamDirection
    832. diff --git a/docs/api/enums/SymbolModifiers.html b/docs/api/enums/SymbolModifiers.html index 630bd3e805..55d9f6fde9 100644 --- a/docs/api/enums/SymbolModifiers.html +++ b/docs/api/enums/SymbolModifiers.html @@ -261,7 +261,6 @@

      FontModule
    833. GroupedResults
    834. KeyValue
    835. -
    836. Line
    837. Match
    838. ModifierContextMember
    839. PartialBeamDirection
    840. diff --git a/docs/api/enums/SymbolTypes.html b/docs/api/enums/SymbolTypes.html index b6a942016c..1f8d15f222 100644 --- a/docs/api/enums/SymbolTypes.html +++ b/docs/api/enums/SymbolTypes.html @@ -261,7 +261,6 @@

      FontModule
    841. GroupedResults
    842. KeyValue
    843. -
    844. Line
    845. Match
    846. ModifierContextMember
    847. PartialBeamDirection
    848. diff --git a/docs/api/enums/TextBracketPosition.html b/docs/api/enums/TextBracketPosition.html index 59a4778a76..97f44f92a8 100644 --- a/docs/api/enums/TextBracketPosition.html +++ b/docs/api/enums/TextBracketPosition.html @@ -256,7 +256,6 @@

      FontModule
    849. GroupedResults
    850. KeyValue
    851. -
    852. Line
    853. Match
    854. ModifierContextMember
    855. PartialBeamDirection
    856. diff --git a/docs/api/enums/TextJustification.html b/docs/api/enums/TextJustification.html index 7d82fc1260..44c2a1ce0e 100644 --- a/docs/api/enums/TextJustification.html +++ b/docs/api/enums/TextJustification.html @@ -261,7 +261,6 @@

      FontModule
    857. GroupedResults
    858. KeyValue
    859. -
    860. Line
    861. Match
    862. ModifierContextMember
    863. PartialBeamDirection
    864. diff --git a/docs/api/enums/TupletLocation.html b/docs/api/enums/TupletLocation.html index 1b11e00c60..60d35f72e2 100644 --- a/docs/api/enums/TupletLocation.html +++ b/docs/api/enums/TupletLocation.html @@ -256,7 +256,6 @@

      FontModule
    865. GroupedResults
    866. KeyValue
    867. -
    868. Line
    869. Match
    870. ModifierContextMember
    871. PartialBeamDirection
    872. diff --git a/docs/api/enums/VoiceMode.html b/docs/api/enums/VoiceMode.html index fc797f6562..2718df0216 100644 --- a/docs/api/enums/VoiceMode.html +++ b/docs/api/enums/VoiceMode.html @@ -261,7 +261,6 @@

      FontModule
    873. GroupedResults
    874. KeyValue
    875. -
    876. Line
    877. Match
    878. ModifierContextMember
    879. PartialBeamDirection
    880. diff --git a/docs/api/enums/VoltaType.html b/docs/api/enums/VoltaType.html index 97eba1a7b0..ebe23af53d 100644 --- a/docs/api/enums/VoltaType.html +++ b/docs/api/enums/VoltaType.html @@ -271,7 +271,6 @@

      FontModule
    881. GroupedResults
    882. KeyValue
    883. -
    884. Line
    885. Match
    886. ModifierContextMember
    887. PartialBeamDirection
    888. diff --git a/docs/api/functions/defined.html b/docs/api/functions/defined.html index 53a32feca5..b72e533db7 100644 --- a/docs/api/functions/defined.html +++ b/docs/api/functions/defined.html @@ -254,7 +254,6 @@

      Theme

      -
      -
      -
        -
      • Preparing search index...
      • -
      • The search index is not available
      vexflow
      -
      -
      -
      -
      - -

      Type alias Line

      -
      Line: {
          column: number;
          dblSharpLine: boolean;
          flatLine: boolean;
          line: number;
          numAcc: number;
          width: number;
      }
      -
      -

      Type declaration

      -
        -
      • -
        column: number
      • -
      • -
        dblSharpLine: boolean
      • -
      • -
        flatLine: boolean
      • -
      • -
        line: number
      • -
      • -
        numAcc: number
      • -
      • -
        width: number
      -
      - -
      -
      \ No newline at end of file diff --git a/docs/api/types/Match.html b/docs/api/types/Match.html index 7c4dbdebbd..74a44f82d2 100644 --- a/docs/api/types/Match.html +++ b/docs/api/types/Match.html @@ -233,7 +233,6 @@

      Theme